<?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>146149</bug_id>
          
          <creation_ts>2015-06-19 09:58:10 -0700</creation_ts>
          <short_desc>[GTK] Add initial WebKitWebsiteDataManager API for process configuration options</short_desc>
          <delta_ts>2015-06-25 00:52:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>146145</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1103257</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-19 09:58:10 -0700</bug_when>
    <thetext>As discussed in the mailing list, for now it will replace the different ways we have to configure data store directories.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103265</commentid>
    <comment_count>1</comment_count>
      <attachid>255195</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-19 10:11:00 -0700</bug_when>
    <thetext>Created attachment 255195
Patch

This won&apos;t apply as it depends on bug #146145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103291</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2015-06-19 10:47:36 -0700</bug_when>
    <thetext>You forgot documentation for webkit_website_data_manager_new</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103297</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-19 10:54:51 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; You forgot documentation for webkit_website_data_manager_new

Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1103773</commentid>
    <comment_count>4</comment_count>
      <attachid>255339</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-21 23:49:33 -0700</bug_when>
    <thetext>Created attachment 255339
Updated patch

Just added the missing documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104071</commentid>
    <comment_count>5</comment_count>
      <attachid>255402</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-23 03:17:03 -0700</bug_when>
    <thetext>Created attachment 255402
Updated patch

Added base-data-directory and base-cache-directory properties, more API documentation and updated the unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104331</commentid>
    <comment_count>6</comment_count>
      <attachid>255402</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2015-06-24 01:26:47 -0700</bug_when>
    <thetext>Comment on attachment 255402
Updated patch

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

Provided we agree on the API this looks good to me

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h:156
&gt; +webkit_web_context_get_website_data_manager         (WebKitWebContext              *context);

Shouln&apos;t we use const here because of the immutable thing?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:158
&gt; +            priv-&gt;webSQLDirectory.reset(g_build_filename(priv-&gt;baseDataDirectory.get(), &quot;databases&quot;, nullptr));

Perhaps cache the value of &quot;priv-&gt;baseDataDirectory.get()&quot; in a local variable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104337</commentid>
    <comment_count>7</comment_count>
      <attachid>255402</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-24 04:43:51 -0700</bug_when>
    <thetext>Comment on attachment 255402
Updated patch

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

Thanks for the review! Please, not that this depends on patch attached to bug #146145

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.h:156
&gt;&gt; +webkit_web_context_get_website_data_manager         (WebKitWebContext              *context);
&gt; 
&gt; Shouln&apos;t we use const here because of the immutable thing?

Well, const in C is not exactly the same as in C++. The properties in WebKitWebsiteDataManager are construct-only, so the object can&apos;t be modified no matter if the pointer is const or not.

&gt;&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:158
&gt;&gt; +            priv-&gt;webSQLDirectory.reset(g_build_filename(priv-&gt;baseDataDirectory.get(), &quot;databases&quot;, nullptr));
&gt; 
&gt; Perhaps cache the value of &quot;priv-&gt;baseDataDirectory.get()&quot; in a local variable

What for? to make lines shorter?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104377</commentid>
    <comment_count>8</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2015-06-24 08:37:20 -0700</bug_when>
    <thetext>The API seems sane to me =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104379</commentid>
    <comment_count>9</comment_count>
      <attachid>255402</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-06-24 08:41:24 -0700</bug_when>
    <thetext>Comment on attachment 255402
Updated patch

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

The API looks fine to me.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp:382
&gt; +            _(&quot;The WebKitWebsiteDataManager associated to this context&quot;),

English nit: associated to -&gt; associated with

PS: Sorry about English.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:43
&gt; + * a default value will be used automatically for the confoguration options

Nit: confoguration -&gt; configuration

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebsiteDataManager.cpp:355
&gt; + * Returns: the base directory for Website data, or %NULL if

Website is capitalized here, but not earlier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1104612</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-06-25 00:52:31 -0700</bug_when>
    <thetext>Committed r185950: &lt;http://trac.webkit.org/changeset/185950&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255195</attachid>
            <date>2015-06-19 10:11:00 -0700</date>
            <delta_ts>2015-06-21 23:49:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-website-data-manager.diff</filename>
            <type>text/plain</type>
            <size>47022</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwZmRjODhiLi4wOTQyMjgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTYg
QEAKIDIwMTUtMDYtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBB
UEkgZm9yIHByb2Nlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
IHRvIHJlcGxhY2UgdGhlIGRpZmZlcmVudCB3YXlzIHdlIGhhdmUKKyAgICAgICAgdG8gY29uZmln
dXJlIGRhdGEgc3RvcmUKKyAgICAgICAgZGlyZWN0b3JpZXMuIFdlYktpdFdlYkNvbnRleHQ6aW5k
ZXhlZC1kYi1kaXJlY3RvcnkgcHJvcGVydHkgaGFzCisgICAgICAgIGJlZW4gcmVtb3ZlZCwgc2lu
Y2UgaXQgd2FzIGFkZGVkIG9ubHkgaW4gdHJ1bmssIGFuZAorICAgICAgICBXZWJLaXRXZWJDb250
ZXh0OmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZQorICAg
ICAgICBtZXRob2Qgd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSgp
IGhhcyBiZWVuCisgICAgICAgIGRlcHJlY2F0ZWQgdG9vIGluIGZhdm9yIG9mIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaDogTW92ZSBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkKKyAgICAgICAgZGVmaW5pdGlv
biBoZXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
OgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFByb3BlcnR5KTogUmVwbGFjZSBpbmRleGVk
LWRiLWRpcmVjdG9yeSBnZXR0ZXIKKyAgICAgICAgd2l0aCB3ZWJzaXRlLWRhdGEtbWFuYWdlciBv
bmUuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHkpOiBSZXBsYWNlIGluZGV4
ZWQtZGItZGlyZWN0b3J5IHNldHRlcgorICAgICAgICB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2Vy
IG9uZS4KKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6IFVzZSB0aGUgdXNl
ciBwcm92aWRlZAorICAgICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgdG8gY29uZmlndXJl
IHRoZSBjb250ZXh0IG9yIGNyZWF0ZSBhCisgICAgICAgIGRlZmF1bHQgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyIGlmIG5vdCBwcm92aWRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9j
bGFzc19pbml0KTogUmVwbGFjZSBpbmRleGVkLWRiLWRpcmVjdG9yeQorICAgICAgICBwcm9wZXJ0
eSB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2VyLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0
X25ld193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIpOgorICAgICAgICAod2Via2l0V2ViQ29udGV4
dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KTogR2V0IHRoZSBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAg
IGZyb20gdGhlIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUpOgor
ICAgICAgICAod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcpOgorICAgICAgICAod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSk6CisgICAgICAgICh3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlv
bl9jYWNoZV9kaXJlY3RvcnkpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6
IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstNC4wLnR5cGVzOiBBZGQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBl
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuaC4KKworMjAxNS0wNi0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gRG8gbm90IHVzZSBsZWdhY3kg
ZGF0YSBzdG9yZSBvcHRpb25zIGluIFdlYktpdDIgR1RLKyBBUEkKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE0NQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDY5MWM2NDEuLjUzMjM4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0yNTEsNiArMjUxLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgKICAgICBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAogICAgIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaAog
ICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKQEAg
LTM5OSw2ICs0MDIsNyBAQCBzZXQoV2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7
V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmgKICAgICAk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKICAgICAke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oCisgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgK
ICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApp
bmRleCAwZjg5MDhjLi4zNGUxN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0xMjcsNCArMTI3LDEwIEBAIGVudW0gU25hcHNo
b3RSZWdpb24gewogICAgIFNuYXBzaG90UmVnaW9uRnVsbERvY3VtZW50CiB9OwogCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCitzdGF0aWMgY29uc3QgY2hhciBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnlbXSA9ICJXZWJLaXRDYWNoZSI7CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgbmV0d29y
a0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsKKyNlbmRpZgorCiAjZW5kaWYgLy8gV2Vi
S2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGVlOTRkNzEuLjg0YzU1OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZS5o
PgpAQCAtMTAyLDcgKzEwMyw3IEBAIGVudW0gewogICAgIFBST1BfMCwKIAogICAgIFBST1BfTE9D
QUxfU1RPUkFHRV9ESVJFQ1RPUlksCi0gICAgUFJPUF9JTkRFWEVEX0RCX0RJUkVDVE9SWQorICAg
IFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIKIH07CiAKIGVudW0gewpAQCAtMTczLDcgKzE3NCw3
IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQogICAgIFJlZlB0cjxXZWJLaXROb3RpZmljYXRpb25Qcm92aWRlcj4gbm90aWZpY2F0
aW9uUHJvdmlkZXI7CiAjZW5kaWYKLSAgICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0
ZURhdGFTdG9yZTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0
ZURhdGFNYW5hZ2VyOwogCiAgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VEaXJlY3Rvcnk7CiAg
ICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeTsKQEAgLTIzOCw4ICsyMzks
OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdgogICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdF
X0RJUkVDVE9SWToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBjb250ZXh0LT5w
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIGNvbnRleHQtPnByaXYtPmluZGV4ZWREQkRpcmVjdG9yeS5kYXRhKCkpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNv
bnRleHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOwpAQCAt
MjU0LDkgKzI1NSwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYQogICAgIGNhc2UgUFJPUF9M
T0NBTF9TVE9SQUdFX0RJUkVDVE9SWToKICAgICAgICAgY29udGV4dC0+cHJpdi0+bG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBjb250ZXh0LT5w
cml2LT5pbmRleGVkREJEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjogeworICAgICAgICBncG9pbnRlciBtYW5h
Z2VyID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgY29udGV4dC0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gbWFuYWdlciA/IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdF
UihtYW5hZ2VyKSA6IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0
OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
SUQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAtMjg2LDE0ICsyODksMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogICAgIFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJLSVRfV0VCX0NPTlRFWFQob2JqZWN0KTsKICAg
ICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IHdlYkNvbnRleHQtPnByaXY7Ci0gICAg
aWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgaWYgKHByaXYt
PndlYnNpdGVEYXRhTWFuYWdlcikgeworICAgICAgICBjb25maWd1cmF0aW9uLnNldExvY2FsU3Rv
cmFnZURpcmVjdG9yeShXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldERpc2tDYWNoZURpcmVj
dG9yeShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZmlsZW5hbWVU
b1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0
b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpLCBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnkpKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCkpKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0SW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkoV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFNYW5h
Z2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldFdlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
KTsKKyAgICB9IGVsc2UgaWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkp
CiAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KFdlYkNvcmU6
OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSkpOwot
ICAgIGlmICghcHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBjb25m
aWd1cmF0aW9uLnNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1l
VG9TdHJpbmcocHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmRhdGEoKSkpOwogCiAgICAgcHJpdi0+
Y29udGV4dCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7CiAKLSAgICBw
cml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKHdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pKTsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRl
KHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pKTsKKwogICAgIHByaXYtPnJlcXVlc3RNYW5hZ2VyID0gcHJpdi0+
Y29udGV4dC0+c3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4o
KTsKIAogICAgIHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMOwpAQCAtMzQ0LDYgKzM1Myw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAgICAg
ICogVGhlIGRpcmVjdG9yeSB3aGVyZSBsb2NhbCBzdG9yYWdlIGRhdGEgd2lsbCBiZSBzYXZlZC4K
ICAgICAgKgogICAgICAqIFNpbmNlOiAyLjgKKyAgICAgKgorICAgICAqIERlcHJlY2F0ZWQ6IDIu
MTAuIFVzZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5
IGluc3RlYWQuCiAgICAgICovCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
ICAgICAgICAgZ09iamVjdENsYXNzLApAQCAtMzU2LDIwICszNjcsMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJD
b250ZXh0Q2xhc3MKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKIAogICAgIC8qKgot
ICAgICAqIFdlYktpdFdlYkNvbnRleHQ6aW5kZXhlZC1kYi1kaXJlY3Rvcnk6CisgICAgICogV2Vi
S2l0V2ViQ29udGV4dDp3ZWJzaXRlLWRhdGEtbWFuYWdlcjoKICAgICAgKgotICAgICAqIFRoZSBk
aXJlY3Rvcnkgd2hlcmUgSW5kZXhlZERCIGRhdGFiYXNlcyB3aWxsIGJlIHNhdmVkLgorICAgICAq
IFRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFzc29jaWF0ZWQgdG8gdGhpcyBjb250ZXh0
LgogICAgICAqCiAgICAgICogU2luY2U6IDIuMTAKICAgICAgKi8KICAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAogICAgICAgICBnT2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1Bf
SU5ERVhFRF9EQl9ESVJFQ1RPUlksCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAiaW5kZXhlZC1kYi1kaXJlY3RvcnkiLAotICAgICAgICAgICAgXygiSW5kZXhlZERC
IERpcmVjdG9yeSIpLAotICAgICAgICAgICAgXygiVGhlIGRpcmVjdG9yeSB3aGVyZSBJbmRleGVk
REIgZGF0YWJhc2VzIHdpbGwgYmUgc2F2ZWQiKSwKLSAgICAgICAgICAgIG51bGxwdHIsCisgICAg
ICAgIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoCisgICAgICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLAorICAgICAgICAgICAgXygi
V2Vic2l0ZSBEYXRhIE1hbmFnZXIiKSwKKyAgICAgICAgICAgIF8oIlRoZSBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgYXNzb2NpYXRlZCB0byB0aGlzIGNvbnRleHQiKSwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9P
TkxZKSkpOwogCiAgICAgLyoqCkBAIC00NDQsNiArNDU1LDQwIEBAIFdlYktpdFdlYkNvbnRleHQq
IHdlYmtpdF93ZWJfY29udGV4dF9uZXcodm9pZCkKIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXI6CisgKiBAbWFuYWdlcjogYSAjV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogQ3JlYXRlIGEgbmV3ICNXZWJLaXRXZWJDb250
ZXh0IHdpdGggYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogYSBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJDb250ZXh0CisgKgorICog
U2luY2U6IDIuMTAKKyAqLworV2ViS2l0V2ViQ29udGV4dCogd2Via2l0X3dlYl9jb250ZXh0X25l
d193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIFdFQktJVF9XRUJfQ09O
VEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsICJ3ZWJzaXRlLWRhdGEt
bWFuYWdlciIsIG1hbmFnZXIsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0
V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBvZiBA
Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihXZWJL
aXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gY29udGV4
dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOworfQorCisvKioKICAqIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWw6CiAgKiBAY29udGV4dDogdGhlICNXZWJLaXRXZWJD
b250ZXh0CiAgKiBAY2FjaGVfbW9kZWw6IGEgI1dlYktpdENhY2hlTW9kZWwKQEAgLTEwMzksMTcg
KzEwODQsMTggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2lu
aXRpYWxpemF0aW9uX3VzZXJfZGF0YShXZWJLaXRXZWJDb24KICAqIFNldCB0aGUgZGlyZWN0b3J5
IHdoZXJlIGRpc2sgY2FjaGUgZmlsZXMgd2lsbCBiZSBzdG9yZWQKICAqIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBsb2FkaW5nIGFueXRoaW5nIGluIHRoaXMgY29udGV4dCwgb3Ro
ZXJ3aXNlCiAgKiBpdCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgKgorICogTm90ZSB0aGF0
IHRoaXMgbWV0aG9kIG92ZXJyaWRlcyB0aGUgZGlyZWN0b3J5IHNldCBpbiB0aGUgI1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciwKKyAqIGJ1dCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUgcmV0
dXJuZWQgYnkgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVj
dG9yeSgpCisgKiBzaW5jZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBpcyBpbW11dGFi
bGUuCisgKgorICogRGVwcmVjYXRlZDogMi4xMC4gVXNlIHdlYmtpdF93ZWJfY29udGV4dF9uZXdf
d2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcigpIGluc3RlYWQuCiAgKi8KIHZvaWQgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiBkaXJlY3RvcnkpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGlyZWN0
b3J5KTsKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIHN0YXRpYyBjb25zdCBjaGFy
IG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeVtdID0gIldlYktpdENhY2hlIjsKLSNlbHNlCi0gICAg
c3RhdGljIGNvbnN0IGNoYXIgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsK
LSNlbmRpZgogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPmNvbmZpZ3VyYXRpb24oKS5zZXRE
aXNrQ2FjaGVEaXJlY3RvcnkoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcoZGlyZWN0b3J5KSwgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5
KSk7CiB9CiAKQEAgLTEyMzQsOCArMTI4MCw4IEBAIHZvaWQgd2Via2l0V2ViQ29udGV4dENyZWF0
ZVBhZ2VGb3JXZWJWaWV3KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdFdlYlZpCiAg
ICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMgPSB3ZWJraXRTZXR0aW5nc0dldFBy
ZWZlcmVuY2VzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOwogICAgIHdl
YlBhZ2VDb25maWd1cmF0aW9uLnJlbGF0ZWRQYWdlID0gcmVsYXRlZFZpZXcgPyB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocmVsYXRlZFZpZXcpKSA6IG51bGxw
dHI7CiAgICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gdXNl
ckNvbnRlbnRNYW5hZ2VyID8gd2Via2l0VXNlckNvbnRlbnRNYW5hZ2VyR2V0VXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkodXNlckNvbnRlbnRNYW5hZ2VyKSA6IG51bGxwdHI7Ci0gICAgd2ViUGFn
ZUNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhU3RvcmUuZ2V0KCk7Ci0gICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklEID0gY29u
dGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgd2ViUGFnZUNv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9ICZ3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJQYWdlQ29uZmlndXJhdGlvbi5zZXNzaW9uSUQgPSB3ZWJQYWdlQ29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKTsKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2Uod2ViVmlld0Jhc2UsIGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksIFdURjo6
bW92ZSh3ZWJQYWdlQ29uZmlndXJhdGlvbikpOwogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAppbmRleCA4YzQyOGMy
Li40ZGE0NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3VyaXR5
TWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg+CiAKIEdfQkVHSU5f
REVDTFMKIApAQCAtMTQ4LDYgKzE0OSwxMiBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1
bHQgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250
ZXh0ICoKIHdlYmtpdF93ZWJfY29udGV4dF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCit3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAgKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAgICAgICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKIFdFQktJVF9B
UEkgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2Rl
bCAgICAgICAgICAgICAgIGNhY2hlX21vZGVsKTsKQEAgLTIzNCw3ICsyNDEsNyBAQCBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgICAgICpob3N0bmFtZSk7CiAKLVdFQktJVF9BUEkgdm9pZAorV0VCS0lUX0RF
UFJFQ0FURURfRk9SKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFu
YWdlcikgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAg
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAgICAgKmRpcmVjdG9yeSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4Nzg1MDQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMzMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZLAorICAgIFBS
T1BfRElTS19DQUNIRV9ESVJFQ1RPUlksCisgICAgUFJPUF9BUFBMSUNBVElPTl9DQUNIRV9ESVJF
Q1RPUlksCisgICAgUFJPUF9JTkRFWEVEREJfRElSRUNUT1JZLAorICAgIFBST1BfV0VCU1FMX0RJ
UkVDVE9SWQorfTsKKworc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsK
KyAgICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKKyAgICBDU3Ry
aW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBDU3RyaW5nIGRpc2tDYWNoZURpcmVjdG9y
eTsKKyAgICBDU3RyaW5nIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnk7CisgICAgQ1N0cmluZyBp
bmRleGVkREJEaXJlY3Rvcnk7CisgICAgQ1N0cmluZyB3ZWJTUUxEaXJlY3Rvcnk7Cit9OworCitX
RUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdF
X0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KG1hbmFnZXIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0tfQ0FDSEVfRElSRUNUT1JZOgorICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVBQTElDQVRJT05fQ0FDSEVfRElSRUNUT1JZOgorICAgICAgICBnX3ZhbHVl
X3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGlu
ZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSU5ERVhFRERCX0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9k
aXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCU1FM
X0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVj
KQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJT
SVRFX0RBVEFfTUFOQUdFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBj
YXNlIFBST1BfTE9DQUxfU1RPUkFHRV9ESVJFQ1RPUlk6CisgICAgICAgIG1hbmFnZXItPnByaXYt
PmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNLX0NBQ0hFX0RJUkVDVE9SWToKKyAgICAgICAg
bWFuYWdlci0+cHJpdi0+ZGlza0NhY2hlRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FQUExJQ0FUSU9OX0NBQ0hFX0RJ
UkVDVE9SWToKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9y
eSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9JTkRFWEVEREJfRElSRUNUT1JZOgorICAgICAgICBtYW5hZ2VyLT5wcml2LT5pbmRleGVk
REJEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0VCU1FMX0RJUkVDVE9SWToKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+
d2ViU1FMRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsYXNzX2luaXQoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb3BlcnR5OworICAgIGdPYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyU2V0UHJvcGVy
dHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6bG9jYWwtc3Rv
cmFnZS1kaXJlY3Rvcnk6CisgICAgICoKKyAgICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIGxvY2Fs
IHN0b3JhZ2UgZGF0YSB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEw
CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvY2FsLXN0b3JhZ2UtZGly
ZWN0b3J5IiwKKyAgICAgICAgICAgIF8oIkxvY2FsIFN0b3JhZ2UgRGlyZWN0b3J5IiksCisgICAg
ICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIGxvY2FsIHN0b3JhZ2UgZGF0YSB3aWxsIGJl
IHN0b3JlZCIpLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjpkaXNr
LWNhY2hlLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgSFRU
UCBkaXNrIGNhY2hlIHdpbGwgYmUgc3RvcmVkLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTAK
KyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
T2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTS19DQUNIRV9ESVJFQ1RPUlksCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGlzay1jYWNoZS1kaXJlY3Rvcnki
LAorICAgICAgICAgICAgXygiRGlzayBDYWNoZSBEaXJlY3RvcnkiKSwKKyAgICAgICAgICAgIF8o
IlRoZSBkaXJlY3Rvcnkgd2hlcmUgSFRUUCBkaXNrIGNhY2hlIHdpbGwgYmUgc3RvcmVkIiksCisg
ICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOm9mZmxpbmUtYXBwbGljYXRp
b24tY2FjaGUtZGlyZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGRpcmVjdG9yeSB3aGVyZSBv
ZmZsaW5lIHdlYiBhcHBsaWNhdGlvbiBjYWNoZSB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAyLjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FQUExJQ0FUSU9OX0NB
Q0hFX0RJUkVDVE9SWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJvZmZsaW5lLWFwcGxpY2F0aW9uLWNhY2hlLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJP
ZmZsaW5lIFdlYiBBcHBsaWNhdGlvbiBDYWNoZSBEaXJlY3RvcnkiKSwKKyAgICAgICAgICAgIF8o
IlRoZSBkaXJlY3Rvcnkgd2hlcmUgb2ZmbGluZSB3ZWIgYXBwbGljYXRpb24gY2FjaGUgd2lsbCBi
ZSBzdG9yZWQiKSwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNU
X09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6aW5k
ZXhlZGRiLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgSW5k
ZXhlZERCIGRhdGFiYXNlcyB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAy
LjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOREVYRUREQl9ESVJFQ1RPUlksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW5kZXhlZGRiLWRpcmVjdG9y
eSIsCisgICAgICAgICAgICBfKCJJbmRleGVkREIgRGlyZWN0b3J5IiksCisgICAgICAgICAgICBf
KCJUaGUgZGlyZWN0b3J5IHdoZXJlIEluZGV4ZWREQiBkYXRhYmFzZXMgd2lsbCBiZSBzdG9yZWQi
KSwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1G
bGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6d2Vic3FsLWRpcmVj
dG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgV2ViU1FMIGRhdGFiYXNl
cyB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEwCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1dFQlNRTF9ESVJFQ1RPUlksCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAid2Vic3FsLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJX
ZWJTUUwgRGlyZWN0b3J5IiksCisgICAgICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIFdl
YlNRTCBkYXRhYmFzZXMgd2lsbCBiZSBzdG9yZWQiKSwKKyAgICAgICAgICAgIG51bGxwdHIsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKFdlYnNpdGVEYXRhU3RvcmU6OkNv
bmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uKQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsIG51bGxwdHIpKTsKKyAgICBtYW5hZ2Vy
LT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKFdURjo6
bW92ZShjb25maWd1cmF0aW9uKSk7CisKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworV2Vic2l0
ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+cHJpdjsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVE
YXRhU3RvcmUpIHsKKyAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uOworICAgICAgICBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSA/CisgICAgICAgICAgICBBUEk6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSk7
CisgICAgICAgIGNvbmZpZ3VyYXRpb24ubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gcHJpdi0+ZGlz
a0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpID8KKyAgICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+ZGlza0NhY2hl
RGlyZWN0b3J5LmRhdGEoKSksIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIGNv
bmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IHByaXYtPmFwcGxpY2F0aW9u
Q2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkgPworICAgICAgICAgICAgQVBJOjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6ZmlsZW5h
bWVUb1N0cmluZyhwcml2LT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmRhdGEoKSk7CisgICAg
ICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBwcml2LT53ZWJTUUxE
aXJlY3RvcnkuaXNOdWxsKCkgPworICAgICAgICAgICAgQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKSA6IFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJp
bmcocHJpdi0+d2ViU1FMRGlyZWN0b3J5LmRhdGEoKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24u
bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEY6Om1vdmUoY29uZmlndXJhdGlvbikp
OworICAgIH0KKworICAgIHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKK30KKworV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KGNv
bnN0IGdjaGFyKiBmaXJzdE9wdGlvbk5hbWUsIC4uLikKK3sKKyAgICB2YV9saXN0IGFyZ3M7Cisg
ICAgdmFfc3RhcnQoYXJncywgZmlyc3RPcHRpb25OYW1lKTsKKyAgICBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVIoZ19vYmplY3Rf
bmV3X3ZhbGlzdChXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUiwgZmlyc3RPcHRpb25O
YW1lLCBhcmdzKSk7CisgICAgdmFfZW5kKGFyZ3MpOworCisgICAgcmV0dXJuIG1hbmFnZXI7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdl
X2RpcmVjdG9yeToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAq
CisgKiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6bG9jYWwtc3RvcmFnZS1kaXJl
Y3RvcnkgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogdGhlIGRpcmVjdG9yeSB3aGVyZSBsb2Nh
bCBzdG9yYWdlIGRhdGEgaXMgc3RvcmVkLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0
IGdjaGFyKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGly
ZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51
bGxwdHIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1h
bmFnZXItPnByaXY7CisgICAgaWYgKHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc051bGwo
KSkKKyAgICAgICAgcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5ID0gQVBJOjpXZWJzaXRlRGF0
YVN0b3JlOjpkZWZhdWx0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KCkudXRmOCgpOworICAgIHJldHVy
biBwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3Rvcnk6CisgKiBAbWFu
YWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHRoZSAjV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyOmRpc2stY2FjaGUtZGlyZWN0b3J5IHByb3BlcnR5LgorICoKKyAq
IFJldHVybnM6IHRoZSBkaXJlY3Rvcnkgd2hlcmUgSFRUUCBkaXNrIGNhY2hlIGlzIHN0b3JlZC4K
KyAqCisgKiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJ
VEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlclByaXZhdGUqIHByaXYgPSBtYW5hZ2VyLT5wcml2OworICAgIGlmIChwcml2LT5k
aXNrQ2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gVGhlIGRlZmF1bHQgZGly
ZWN0b3J5IGFscmVhZHkgaGFzIHRoZSBzdWJkaXJlY3RvcnkuCisgICAgICAgIHByaXYtPmRpc2tD
YWNoZURpcmVjdG9yeSA9IFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoQVBJOjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCkpLnV0ZjgoKTsKKyAgICB9CisgICAg
cmV0dXJuIHByaXYtPmRpc2tDYWNoZURpcmVjdG9yeS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2Rp
cmVjdG9yeToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisg
KiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6b2ZmbGluZS1hcHBsaWNhdGlvbi1j
YWNoZS1kaXJlY3RvcnkgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogdGhlIGRpcmVjdG9yeSB3
aGVyZSBvZmZsaW5lIHdlYiBhcHBsaWNhdGlvbiBjYWNoZSBpcyBzdG9yZWQuCisgKgorICogU2lu
Y2U6IDIuMTAKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisKKyAgICBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+cHJpdjsKKyAgICBpZiAocHJp
di0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgcHJpdi0+YXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEFw
cGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPmFwcGxp
Y2F0aW9uQ2FjaGVEaXJlY3RvcnkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeToKKyAqIEBtYW5hZ2VyOiBhICNX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXI6aW5kZXhlZGRiLWRpcmVjdG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0
aGUgZGlyZWN0b3J5IHdoZXJlIEluZGV4ZWREQiBkYXRhYmFzZXMgYXJlIHN0b3JlZC4KKyAqCisg
KiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyUHJpdmF0ZSogcHJpdiA9IG1hbmFnZXItPnByaXY7CisgICAgaWYgKHByaXYtPmluZGV4ZWRE
QkRpcmVjdG9yeS5pc051bGwoKSkKKyAgICAgICAgcHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5ID0g
QVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0SW5kZXhlZERCRGF0YWJhc2VEaXJlY3Rvcnko
KS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPmluZGV4ZWREQkRpcmVjdG9yeS5kYXRhKCk7Cit9
CisKKy8qKgorICogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0
b3J5OgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoKKyAqIEdl
dCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjp3ZWJzcWwtZGlyZWN0b3J5IHByb3BlcnR5
LgorICoKKyAqIFJldHVybnM6IHRoZSBkaXJlY3Rvcnkgd2hlcmUgV2ViU1FMIGRhdGFiYXNlcyBh
cmUgc3RvcmVkLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkoV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisKKyAgICBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+cHJpdjsKKyAgICBpZiAo
cHJpdi0+d2ViU1FMRGlyZWN0b3J5LmlzTnVsbCgpKQorICAgICAgICBwcml2LT53ZWJTUUxEaXJl
Y3RvcnkgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVj
dG9yeSgpLnV0ZjgoKTsKKyAgICByZXR1cm4gcHJpdi0+d2ViU1FMRGlyZWN0b3J5LmRhdGEoKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMzlhNjNmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZiAhZGVmaW5lZChfX1dFQktJVDJf
SF9JTlNJREVfXykgJiYgIWRlZmluZWQoV0VCS0lUMl9DT01QSUxBVElPTikKKyNlcnJvciAiT25s
eSA8d2Via2l0Mi93ZWJraXQyLmg+IGNhbiBiZSBpbmNsdWRlZCBkaXJlY3RseS4iCisjZW5kaWYK
KworI2lmbmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJfaAorI2RlZmluZSBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSICAgICAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFH
RVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VC
S0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcikp
CisjZGVmaW5lIFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmopICAgICAgICAgKEdf
VFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFf
TUFOQUdFUikpCisjZGVmaW5lIFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9DTEFTUyhrbGFz
cykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJT
SVRFX0RBVEFfTUFOQUdFUiwgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3MpKQorI2RlZmlu
ZSBXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVJfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIp
KQorI2RlZmluZSBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVJfR0VUX0NMQVNTKG9iaikgIChH
X1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRB
X01BTkFHRVIsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAgICAgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzICAgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyUHJpdmF0ZSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlOworCitz
dHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciB7CisgICAgR09iamVjdCBwYXJlbnQ7CisK
KyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlICpwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVu
dF9jbGFzczsKKworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsK
KworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGdjaGFyICAgICAgICAg
ICAgICAqZmlyc3Rfb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworCitXRUJLSVRfQVBJ
IGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3Rv
cmFnZV9kaXJlY3RvcnkgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFu
YWdlcik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAoV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVf
ZGlyZWN0b3J5IChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitXRUJLSVRf
QVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhl
ZGRiX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAq
bWFuYWdlcik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uMzhhNzgyMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaApAQCAtMCww
ICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYg
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZV9oCisjZGVmaW5lIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlclByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1
ZGUgIldlYnNpdGVEYXRhU3RvcmUuaCIKKworV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiB3ZWJr
aXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUoV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlOjpDb25m
aWd1cmF0aW9uJiYpOworV2ViS2l0OjpXZWJzaXRlRGF0YVN0b3JlJiB3ZWJraXRXZWJzaXRlRGF0
YU1hbmFnZXJHZXREYXRhU3RvcmUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKik7CisKKyNlbmRp
ZiAvLyBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMu
dHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQKaW5kZXggZTUwMmJkNy4uYWE2MWJlZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50
eHQKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3Rr
LTQuMC1zZWN0aW9ucy50eHQKQEAgLTI5LDYgKzI5LDggQEAgV2ViS2l0UHJvY2Vzc01vZGVsCiBX
ZWJLaXRUTFNFcnJvcnNQb2xpY3kKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdAogd2Vi
a2l0X3dlYl9jb250ZXh0X25ldword2Via2l0X3dlYl9jb250ZXh0X25ld193aXRoX3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyCit3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
CiB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRf
c2V0X2NhY2hlX21vZGVsCiB3ZWJraXRfd2ViX2NvbnRleHRfY2xlYXJfY2FjaGUKQEAgLTExNDcs
NiArMTE0OSwzMCBAQCB3ZWJraXRfc2VjdXJpdHlfbWFuYWdlcl9nZXRfdHlwZQogPC9TRUNUSU9O
PgogCiA8U0VDVElPTj4KKzxGSUxFPldlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjwvRklMRT4KK1dl
YktpdFdlYnNpdGVEYXRhTWFuYWdlcgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldwor
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeQor
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeQord2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2Rp
cmVjdG9yeQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0
b3J5Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkKKwor
PFNVQlNFQ1RJT04gU3RhbmRhcmQ+CitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcworV0VC
S0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIKK1dFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdF
UgorV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSCitXRUJLSVRfV0VCU0lURV9EQVRBX01B
TkFHRVJfQ0xBU1MKK1dFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUl9DTEFTUworV0VCS0lU
X1dFQlNJVEVfREFUQV9NQU5BR0VSX0dFVF9DTEFTUworCis8U1VCU0VDVElPTiBQcml2YXRlPgor
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF90eXBlCis8L1NFQ1RJT04+CisKKzxTRUNUSU9OPgogPEZJTEU+V2ViS2l0V2ViRXh0
ZW5zaW9uPC9GSUxFPgogV2ViS2l0V2ViRXh0ZW5zaW9uCiBXZWJLaXRXZWJFeHRlbnNpb25Jbml0
aWFsaXplRnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAudHlwZXMgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzCmluZGV4IDgxOWFmNTguLmI1MjY0NmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLTQuMC50eXBlcwpAQCAtMjksMyArMjksNCBAQCB3ZWJraXRfZnJhbWVfZ2V0
X3R5cGUKIHdlYmtpdF9jZXJ0aWZpY2F0ZV9pbmZvX2dldF90eXBlCiB3ZWJraXRfdXNlcl9jb250
ZW50X21hbmFnZXJfZ2V0X3R5cGUKIHdlYmtpdF93ZWJfaGl0X3Rlc3RfcmVzdWx0X2dldF90eXBl
Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaAppbmRleCBkOWJjOTIwLi4xNDM3MWI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCkBAIC03Miw2ICs3Miw3IEBA
CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJSZXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0V2ViVmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2Uu
aD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oPgogI2luY2x1
ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogCiAjdW5kZWYgX19XRUJLSVQy
X0hfSU5TSURFX18KZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBiYzkzYmVhLi4zZDkyMDVhIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTUtMDYtMTkgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBp
bml0aWFsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBBUEkgZm9yIHByb2Nlc3MgY29uZmlndXJh
dGlvbiBvcHRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDYxNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBVcGRhdGUgdW5pdCB0ZXN0cyB0byB1c2UgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJD
b250ZXh0LmNwcDoKKyAgICAgICAgKHRlc3RXZWJDb250ZXh0Q29uZmlndXJhdGlvbik6CisgICAg
ICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0
Mkd0ay9UZXN0TWFpbi5oOgorICAgICAgICAoVGVzdDo6VGVzdCk6IFVzZSBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgYW5kIHNldCBhbGwgcG9zc2libGUKKyAgICAgICAgdmFsdWVzIHRvIGVuc3Vy
ZSB1bml0IHRlc3RzIGRvbid0IHdyaXRlIG91dHNpZGUgdGhlIHRlbXBvcmFyeSBkaXJlY3Rvcnku
CisgICAgICAgIChUZXN0Ojp+VGVzdCk6IEV4cGxpY2l0bHkgcmVzZXQgdGhlIHdlYiBjb250ZXh0
IHRvIGVuc3VyZSBpdHMKKyAgICAgICAgb2JqZWN0cyBhcmUgcmVsZWFzZWQgYmVmb3JlIHRoZSBs
ZWFrcyBjaGVjay4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZp
ZXdUZXN0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdUZXN0Ojp3YWl0KTogRml4IHRoZSBHU291cmNl
IHVzZWQsIHNpbmNlIHdlIGFyZSByZWNlaXZpbmcKKyAgICAgICAgYSBkb3VibGUgaW4gc2Vjb25k
cywgYnV0IHVzaW5nIGdfdGltZW91dF9hZGRfc2Vjb25kcygpIHRoYXQKKyAgICAgICAgZXhwZWN0
cyBhbiB1bnNpZ25lZCBpbiBzZWNvbmRzLiBVc2UgR01haW5Mb29wU291cmNlIHRvIGNvcnJlY3Rs
eQorICAgICAgICBoYW5kbGUgdGhlIHZhbHVlIGFuZCBzaW1wbGlmeSB0aGUgY29kZS4KKwogMjAx
NS0wNi0xOCAgRGV3ZWkgWmh1ICA8ZGV3ZWlfemh1QGFwcGxlLmNvbT4KIAogICAgICAgICBFeHRl
bmQgY2FwYWJpbGl0eSBvZiBydW4tYmVuY2htYXJrIHNjcmlwdCB0byBzdXBwb3J0IG1vYmlsZSBk
ZXZpY2UKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGQ4ZTIxYjcuLjAwYWIwMjMgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0
V2ViQ29udGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3Rr
L1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMzksMTQgKzM5LDUyIEBAIHN0YXRpYyB2b2lk
IHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0
aWMgdm9pZCB0ZXN0V2ViQ29udGV4dENvbmZpZ3VyYXRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdj
b25zdHBvaW50ZXIpCiB7CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyID0g
d2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNv
bnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdF
UihtYW5hZ2VyKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5p
c2hlcyhHX09CSkVDVChtYW5hZ2VyKSk7CisKICAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImxv
Y2FsLXN0b3JhZ2UiLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFn
ZURpcmVjdG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9j
YWxfc3RvcmFnZV9kaXJlY3RvcnkobWFuYWdlcikpOwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0
KGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAKICAg
ICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7
CiAgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNj
cmlwdEFuZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRh
YmFzZScpOyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0
b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhlZGRiIiwg
bnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCks
ID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3Rvcnko
bWFuYWdlcikpOwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5n
ZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXIt
PmdldFVSSUZvclBhdGgoIi9hcHBjYWNoZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGls
TG9hZEZpbmlzaGVkKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGly
ZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwY2FjaGUi
LCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBw
bGljYXRpb25fY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IGFwcGxpY2F0aW9uQ2FjaGVEYXRhYmFzZShnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2Fj
aGVEaXJlY3RvcnkuZ2V0KCksICJBcHBsaWNhdGlvbkNhY2hlLmRiIiwgbnVsbHB0cikpOworICAg
IHVuc2lnbmVkIHRyaWVzQ291bnQgPSA0OworICAgIHdoaWxlICghZ19maWxlX3Rlc3QoYXBwbGlj
YXRpb25DYWNoZURhdGFiYXNlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSAmJiAtLXRy
aWVzQ291bnQpCisgICAgICAgIHRlc3QtPndhaXQoMC4yNSk7CisgICAgZ19hc3NlcnQodHJpZXND
b3VudCk7CisKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5KGdfYnVpbGRf
ZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAid2Vic3FsIiwgbnVsbHB0cikpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJTUUxEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOworI2lmIDAgLy8g
RklYTUU6IFdlIG5lZWQgQVBJIHRvIHNldCB0aGUgZGF0YWJhc2UgcXVvdGEgZm9yIGFuIG9yaWdp
biB0byBiZSBhYmxlIHRvIHRlc3QgdGhpcy4KKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2Fp
dFVudGlsRmluaXNoZWQoImRiID0gb3BlbkRhdGFiYXNlKFwiVGVzdERhdGFiYXNlXCIsIFwiMS4w
XCIsIFwiVGVzdERhdGFiYXNlXCIsIDEpOyIsICZlcnJvcik7CisgICAgZ19hc3NlcnQoZ19maWxl
X3Rlc3Qod2ViU1FMRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyNlbmRp
ZgorCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkaXNrQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxl
bmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJkaXNrLWNhY2hlIiwgbnVsbHB0cikpOworICAg
IGdfYXNzZXJ0X2NtcHN0cihkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAg
ICBnX2Fzc2VydChnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9U
RVNUX0lTX0RJUikpOworCisgICAgLy8gVGhlIGRlZmF1bHQgY29udGV4dCBzaG91bGQgaGF2ZSBh
IGRpZmZlcmVudCBtYW5hZ2VyIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBkZWZhdWx0TWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4
dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0
KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihkZWZhdWx0
TWFuYWdlcikpOworICAgIGdfYXNzZXJ0KG1hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAg
IGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0
b3JhZ2VfZGlyZWN0b3J5KG1hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJl
Y3RvcnkobWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4
ZWRkYl9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2Vy
KSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3Rv
cnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShtYW5h
Z2VyKSwgIT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNh
dGlvbl9jYWNoZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBz
dHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KG1hbmFn
ZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5
KGRlZmF1bHRNYW5hZ2VyKSk7CiB9CiAKIGNsYXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7
CkBAIC0zNTEsNiArMzg5LDIwIEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2
ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9S
WV9TVEFUSUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkpOwogICAgICAgICBzb3VwX21l
c3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKICAgICAgICAgc291
cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZSIpKSB7CisgICAgICAgIGNvbnN0IGNo
YXIqIGFwcGNhY2hlSFRNTCA9ICI8aHRtbCBtYW5pZmVzdD1hcHBjYWNoZS5tYW5pZmVzdD48Ym9k
eT48L2JvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGFwcGNhY2hlSFRNTCwgc3Ry
bGVuKGFwcGNhY2hlSFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9hcHBjYWNoZS5tYW5pZmVzdCIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFwcGNhY2hl
TWFuaWZlc3QgPSAiQ0FDSEUgTUFOSUZFU1RcbkNBQ0hFOlxuYXBwY2FjaGUvZm9vLnR4dFxuIjsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgYXBwY2FjaGVNYW5pZmVzdCwgc3RybGVuKGFwcGNhY2hlTWFu
aWZlc3QpKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNP
VVBfU1RBVFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYXBwY2Fj
aGUvZm9vLnR4dCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdl
LT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsICJmb28iLCAzKTsKKyAgICAgICAg
c291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKICAg
ICB9IGVsc2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX0ZPVU5EKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3Rr
L1dlYktpdDJHdGsvVGVzdE1haW4uaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJH
dGsvVGVzdE1haW4uaAppbmRleCA4ZWFmOGUwLi42MDU0ZmUwIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKKysrIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCkBAIC02OSwxOSArNjksMjIgQEAgcHVi
bGljOgogICAgIHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3JhZ2VEaXJlY3Rv
cnkoZ19idWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJsb2NhbC1zdG9yYWdlIiwgbnVs
bHB0cikpOwogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGluZGV4ZWREQkRpcmVjdG9yeShnX2J1
aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKLSAg
ICAgICAgbV93ZWJDb250ZXh0ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfQ09OVEVYVChnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCi0gICAgICAgICAgICAibG9jYWwtc3RvcmFn
ZS1kaXJlY3RvcnkiLCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCksCi0gICAgICAgICAgICAi
aW5kZXhlZC1kYi1kaXJlY3RvcnkiLCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksCi0gICAgICAg
ICAgICBudWxscHRyKSkpOwotCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0
LmdldCgpLCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6
ZVdlYkV4dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+
IGRpc2tDYWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImRp
c2stY2FjaGUiLCBudWxscHRyKSk7Ci0gICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlz
a19jYWNoZV9kaXJlY3RvcnkobV93ZWJDb250ZXh0LmdldCgpLCBkaXNrQ2FjaGVEaXJlY3Rvcnku
Z2V0KCkpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkoZ19idWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJhcHBjYWNoZSIsIG51bGxwdHIp
KTsKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiB3ZWJTUUxEaXJlY3RvcnkoZ19idWlsZF9maWxl
bmFtZShkYXRhRGlyZWN0b3J5KCksICJ3ZWJzcWwiLCBudWxscHRyKSk7CisgICAgICAgIEdSZWZQ
dHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdS
ZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygKKyAgICAgICAgICAgICJsb2NhbC1z
dG9yYWdlLWRpcmVjdG9yeSIsIGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSwgImluZGV4ZWRk
Yi1kaXJlY3RvcnkiLCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksCisgICAgICAgICAgICAiZGlz
ay1jYWNoZS1kaXJlY3RvcnkiLCBkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJvZmZsaW5lLWFw
cGxpY2F0aW9uLWNhY2hlLWRpcmVjdG9yeSIsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0
KCksCisgICAgICAgICAgICAid2Vic3FsLWRpcmVjdG9yeSIsIHdlYlNRTERpcmVjdG9yeS5nZXQo
KSwgbnVsbHB0cikpOworCisgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRf
d2ViX2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vic2l0ZURhdGFNYW5h
Z2VyLmdldCgpKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0LmdldCgp
LCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6ZVdlYkV4
dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAogICAgIH5UZXN0KCkKICAgICB7CiAg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQu
Z2V0KCksIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMp
OworICAgICAgICBtX3dlYkNvbnRleHQgPSBudWxscHRyOwogICAgICAgICBpZiAobV93YXRjaGVk
T2JqZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMv
VGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMzg2NTQ5
Mi4uMTRmMmMxNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0
ay9XZWJWaWV3VGVzdC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+
CisjaW5jbHVkZSA8d3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg+CiAKIFdlYlZpZXdUZXN0OjpX
ZWJWaWV3VGVzdChXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIqIHVzZXJDb250ZW50TWFuYWdlcikK
ICAgICA6IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3NpbmsoZ19vYmpl
Y3RfbmV3KFdFQktJVF9UWVBFX1dFQl9WSUVXLCAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQu
Z2V0KCksICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIHVzZXJDb250ZW50TWFuYWdlciwgbnVsbHB0
cikpKSkKQEAgLTE3OSwxNSArMTgwLDEwIEBAIHZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9v
cEFmdGVyUHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQogICAgIHF1aXRNYWluTG9vcCgpOwogfQog
Ci1zdGF0aWMgZ2Jvb2xlYW4gcXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKFdlYlZpZXdUZXN0KiB0
ZXN0KQotewotICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0K
LQogdm9pZCBXZWJWaWV3VGVzdDo6d2FpdChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBnX3RpbWVv
dXRfYWRkX3NlY29uZHMoc2Vjb25kcywgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVp
dE1haW5Mb29wSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hl
ZHVsZUFmdGVyRGVsYXlBbmREZWxldGVPbkRlc3Ryb3koIldlYlZpZXdUZXN0IHdhaXQiLCBbdGhp
c10geyBxdWl0TWFpbkxvb3AoKTsgfSwKKyAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nh
c3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJs
ZT4oc2Vjb25kcykpKTsKICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255339</attachid>
            <date>2015-06-21 23:49:33 -0700</date>
            <delta_ts>2015-06-23 03:17:03 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-website-data.diff</filename>
            <type>text/plain</type>
            <size>47472</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA4MTAwODU5Li41Yjc3NTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTYg
QEAKIDIwMTUtMDYtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBB
UEkgZm9yIHByb2Nlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
IHRvIHJlcGxhY2UgdGhlIGRpZmZlcmVudCB3YXlzIHdlIGhhdmUKKyAgICAgICAgdG8gY29uZmln
dXJlIGRhdGEgc3RvcmUKKyAgICAgICAgZGlyZWN0b3JpZXMuIFdlYktpdFdlYkNvbnRleHQ6aW5k
ZXhlZC1kYi1kaXJlY3RvcnkgcHJvcGVydHkgaGFzCisgICAgICAgIGJlZW4gcmVtb3ZlZCwgc2lu
Y2UgaXQgd2FzIGFkZGVkIG9ubHkgaW4gdHJ1bmssIGFuZAorICAgICAgICBXZWJLaXRXZWJDb250
ZXh0OmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZQorICAg
ICAgICBtZXRob2Qgd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSgp
IGhhcyBiZWVuCisgICAgICAgIGRlcHJlY2F0ZWQgdG9vIGluIGZhdm9yIG9mIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaDogTW92ZSBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkKKyAgICAgICAgZGVmaW5pdGlv
biBoZXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
OgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFByb3BlcnR5KTogUmVwbGFjZSBpbmRleGVk
LWRiLWRpcmVjdG9yeSBnZXR0ZXIKKyAgICAgICAgd2l0aCB3ZWJzaXRlLWRhdGEtbWFuYWdlciBv
bmUuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHkpOiBSZXBsYWNlIGluZGV4
ZWQtZGItZGlyZWN0b3J5IHNldHRlcgorICAgICAgICB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2Vy
IG9uZS4KKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6IFVzZSB0aGUgdXNl
ciBwcm92aWRlZAorICAgICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgdG8gY29uZmlndXJl
IHRoZSBjb250ZXh0IG9yIGNyZWF0ZSBhCisgICAgICAgIGRlZmF1bHQgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyIGlmIG5vdCBwcm92aWRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9j
bGFzc19pbml0KTogUmVwbGFjZSBpbmRleGVkLWRiLWRpcmVjdG9yeQorICAgICAgICBwcm9wZXJ0
eSB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2VyLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0
X25ld193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIpOgorICAgICAgICAod2Via2l0V2ViQ29udGV4
dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KTogR2V0IHRoZSBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAg
IGZyb20gdGhlIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUpOgor
ICAgICAgICAod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcpOgorICAgICAgICAod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSk6CisgICAgICAgICh3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlv
bl9jYWNoZV9kaXJlY3RvcnkpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6
IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstNC4wLnR5cGVzOiBBZGQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBl
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuaC4KKworMjAxNS0wNi0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gRG8gbm90IHVzZSBsZWdhY3kg
ZGF0YSBzdG9yZSBvcHRpb25zIGluIFdlYktpdDIgR1RLKyBBUEkKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE0NQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDY5MWM2NDEuLjUzMjM4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0yNTEsNiArMjUxLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgKICAgICBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAogICAgIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaAog
ICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKQEAg
LTM5OSw2ICs0MDIsNyBAQCBzZXQoV2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7
V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmgKICAgICAk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKICAgICAke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oCisgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgK
ICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApp
bmRleCAwZjg5MDhjLi4zNGUxN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0xMjcsNCArMTI3LDEwIEBAIGVudW0gU25hcHNo
b3RSZWdpb24gewogICAgIFNuYXBzaG90UmVnaW9uRnVsbERvY3VtZW50CiB9OwogCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCitzdGF0aWMgY29uc3QgY2hhciBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnlbXSA9ICJXZWJLaXRDYWNoZSI7CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgbmV0d29y
a0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsKKyNlbmRpZgorCiAjZW5kaWYgLy8gV2Vi
S2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGVlOTRkNzEuLjg0YzU1OTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZS5o
PgpAQCAtMTAyLDcgKzEwMyw3IEBAIGVudW0gewogICAgIFBST1BfMCwKIAogICAgIFBST1BfTE9D
QUxfU1RPUkFHRV9ESVJFQ1RPUlksCi0gICAgUFJPUF9JTkRFWEVEX0RCX0RJUkVDVE9SWQorICAg
IFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIKIH07CiAKIGVudW0gewpAQCAtMTczLDcgKzE3NCw3
IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQogICAgIFJlZlB0cjxXZWJLaXROb3RpZmljYXRpb25Qcm92aWRlcj4gbm90aWZpY2F0
aW9uUHJvdmlkZXI7CiAjZW5kaWYKLSAgICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0
ZURhdGFTdG9yZTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0
ZURhdGFNYW5hZ2VyOwogCiAgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VEaXJlY3Rvcnk7CiAg
ICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeTsKQEAgLTIzOCw4ICsyMzks
OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdgogICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdF
X0RJUkVDVE9SWToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBjb250ZXh0LT5w
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIGNvbnRleHQtPnByaXYtPmluZGV4ZWREQkRpcmVjdG9yeS5kYXRhKCkpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNv
bnRleHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOwpAQCAt
MjU0LDkgKzI1NSwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYQogICAgIGNhc2UgUFJPUF9M
T0NBTF9TVE9SQUdFX0RJUkVDVE9SWToKICAgICAgICAgY29udGV4dC0+cHJpdi0+bG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBjb250ZXh0LT5w
cml2LT5pbmRleGVkREJEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjogeworICAgICAgICBncG9pbnRlciBtYW5h
Z2VyID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgY29udGV4dC0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gbWFuYWdlciA/IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdF
UihtYW5hZ2VyKSA6IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0
OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
SUQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAtMjg2LDE0ICsyODksMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogICAgIFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJLSVRfV0VCX0NPTlRFWFQob2JqZWN0KTsKICAg
ICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IHdlYkNvbnRleHQtPnByaXY7Ci0gICAg
aWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgaWYgKHByaXYt
PndlYnNpdGVEYXRhTWFuYWdlcikgeworICAgICAgICBjb25maWd1cmF0aW9uLnNldExvY2FsU3Rv
cmFnZURpcmVjdG9yeShXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldERpc2tDYWNoZURpcmVj
dG9yeShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZmlsZW5hbWVU
b1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0
b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpLCBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnkpKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCkpKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0SW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkoV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFNYW5h
Z2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldFdlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
KTsKKyAgICB9IGVsc2UgaWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkp
CiAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KFdlYkNvcmU6
OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSkpOwot
ICAgIGlmICghcHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBjb25m
aWd1cmF0aW9uLnNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1l
VG9TdHJpbmcocHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmRhdGEoKSkpOwogCiAgICAgcHJpdi0+
Y29udGV4dCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7CiAKLSAgICBw
cml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKHdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pKTsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRl
KHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pKTsKKwogICAgIHByaXYtPnJlcXVlc3RNYW5hZ2VyID0gcHJpdi0+
Y29udGV4dC0+c3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4o
KTsKIAogICAgIHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMOwpAQCAtMzQ0LDYgKzM1Myw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAgICAg
ICogVGhlIGRpcmVjdG9yeSB3aGVyZSBsb2NhbCBzdG9yYWdlIGRhdGEgd2lsbCBiZSBzYXZlZC4K
ICAgICAgKgogICAgICAqIFNpbmNlOiAyLjgKKyAgICAgKgorICAgICAqIERlcHJlY2F0ZWQ6IDIu
MTAuIFVzZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5
IGluc3RlYWQuCiAgICAgICovCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
ICAgICAgICAgZ09iamVjdENsYXNzLApAQCAtMzU2LDIwICszNjcsMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJD
b250ZXh0Q2xhc3MKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKIAogICAgIC8qKgot
ICAgICAqIFdlYktpdFdlYkNvbnRleHQ6aW5kZXhlZC1kYi1kaXJlY3Rvcnk6CisgICAgICogV2Vi
S2l0V2ViQ29udGV4dDp3ZWJzaXRlLWRhdGEtbWFuYWdlcjoKICAgICAgKgotICAgICAqIFRoZSBk
aXJlY3Rvcnkgd2hlcmUgSW5kZXhlZERCIGRhdGFiYXNlcyB3aWxsIGJlIHNhdmVkLgorICAgICAq
IFRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFzc29jaWF0ZWQgdG8gdGhpcyBjb250ZXh0
LgogICAgICAqCiAgICAgICogU2luY2U6IDIuMTAKICAgICAgKi8KICAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAogICAgICAgICBnT2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1Bf
SU5ERVhFRF9EQl9ESVJFQ1RPUlksCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAiaW5kZXhlZC1kYi1kaXJlY3RvcnkiLAotICAgICAgICAgICAgXygiSW5kZXhlZERC
IERpcmVjdG9yeSIpLAotICAgICAgICAgICAgXygiVGhlIGRpcmVjdG9yeSB3aGVyZSBJbmRleGVk
REIgZGF0YWJhc2VzIHdpbGwgYmUgc2F2ZWQiKSwKLSAgICAgICAgICAgIG51bGxwdHIsCisgICAg
ICAgIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoCisgICAgICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLAorICAgICAgICAgICAgXygi
V2Vic2l0ZSBEYXRhIE1hbmFnZXIiKSwKKyAgICAgICAgICAgIF8oIlRoZSBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgYXNzb2NpYXRlZCB0byB0aGlzIGNvbnRleHQiKSwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9P
TkxZKSkpOwogCiAgICAgLyoqCkBAIC00NDQsNiArNDU1LDQwIEBAIFdlYktpdFdlYkNvbnRleHQq
IHdlYmtpdF93ZWJfY29udGV4dF9uZXcodm9pZCkKIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXI6CisgKiBAbWFuYWdlcjogYSAjV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogQ3JlYXRlIGEgbmV3ICNXZWJLaXRXZWJDb250
ZXh0IHdpdGggYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogYSBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJDb250ZXh0CisgKgorICog
U2luY2U6IDIuMTAKKyAqLworV2ViS2l0V2ViQ29udGV4dCogd2Via2l0X3dlYl9jb250ZXh0X25l
d193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIFdFQktJVF9XRUJfQ09O
VEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsICJ3ZWJzaXRlLWRhdGEt
bWFuYWdlciIsIG1hbmFnZXIsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0
V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBvZiBA
Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihXZWJL
aXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gY29udGV4
dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOworfQorCisvKioKICAqIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWw6CiAgKiBAY29udGV4dDogdGhlICNXZWJLaXRXZWJD
b250ZXh0CiAgKiBAY2FjaGVfbW9kZWw6IGEgI1dlYktpdENhY2hlTW9kZWwKQEAgLTEwMzksMTcg
KzEwODQsMTggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2lu
aXRpYWxpemF0aW9uX3VzZXJfZGF0YShXZWJLaXRXZWJDb24KICAqIFNldCB0aGUgZGlyZWN0b3J5
IHdoZXJlIGRpc2sgY2FjaGUgZmlsZXMgd2lsbCBiZSBzdG9yZWQKICAqIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBsb2FkaW5nIGFueXRoaW5nIGluIHRoaXMgY29udGV4dCwgb3Ro
ZXJ3aXNlCiAgKiBpdCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgKgorICogTm90ZSB0aGF0
IHRoaXMgbWV0aG9kIG92ZXJyaWRlcyB0aGUgZGlyZWN0b3J5IHNldCBpbiB0aGUgI1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciwKKyAqIGJ1dCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUgcmV0
dXJuZWQgYnkgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVj
dG9yeSgpCisgKiBzaW5jZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBpcyBpbW11dGFi
bGUuCisgKgorICogRGVwcmVjYXRlZDogMi4xMC4gVXNlIHdlYmtpdF93ZWJfY29udGV4dF9uZXdf
d2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcigpIGluc3RlYWQuCiAgKi8KIHZvaWQgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiBkaXJlY3RvcnkpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGlyZWN0
b3J5KTsKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIHN0YXRpYyBjb25zdCBjaGFy
IG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeVtdID0gIldlYktpdENhY2hlIjsKLSNlbHNlCi0gICAg
c3RhdGljIGNvbnN0IGNoYXIgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsK
LSNlbmRpZgogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPmNvbmZpZ3VyYXRpb24oKS5zZXRE
aXNrQ2FjaGVEaXJlY3RvcnkoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcoZGlyZWN0b3J5KSwgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5
KSk7CiB9CiAKQEAgLTEyMzQsOCArMTI4MCw4IEBAIHZvaWQgd2Via2l0V2ViQ29udGV4dENyZWF0
ZVBhZ2VGb3JXZWJWaWV3KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdFdlYlZpCiAg
ICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMgPSB3ZWJraXRTZXR0aW5nc0dldFBy
ZWZlcmVuY2VzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOwogICAgIHdl
YlBhZ2VDb25maWd1cmF0aW9uLnJlbGF0ZWRQYWdlID0gcmVsYXRlZFZpZXcgPyB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocmVsYXRlZFZpZXcpKSA6IG51bGxw
dHI7CiAgICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gdXNl
ckNvbnRlbnRNYW5hZ2VyID8gd2Via2l0VXNlckNvbnRlbnRNYW5hZ2VyR2V0VXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkodXNlckNvbnRlbnRNYW5hZ2VyKSA6IG51bGxwdHI7Ci0gICAgd2ViUGFn
ZUNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhU3RvcmUuZ2V0KCk7Ci0gICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklEID0gY29u
dGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgd2ViUGFnZUNv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9ICZ3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJQYWdlQ29uZmlndXJhdGlvbi5zZXNzaW9uSUQgPSB3ZWJQYWdlQ29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKTsKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2Uod2ViVmlld0Jhc2UsIGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksIFdURjo6
bW92ZSh3ZWJQYWdlQ29uZmlndXJhdGlvbikpOwogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAppbmRleCA4YzQyOGMy
Li40ZGE0NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3VyaXR5
TWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg+CiAKIEdfQkVHSU5f
REVDTFMKIApAQCAtMTQ4LDYgKzE0OSwxMiBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1
bHQgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250
ZXh0ICoKIHdlYmtpdF93ZWJfY29udGV4dF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCit3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAgKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAgICAgICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKIFdFQktJVF9B
UEkgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2Rl
bCAgICAgICAgICAgICAgIGNhY2hlX21vZGVsKTsKQEAgLTIzNCw3ICsyNDEsNyBAQCBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgICAgICpob3N0bmFtZSk7CiAKLVdFQktJVF9BUEkgdm9pZAorV0VCS0lUX0RF
UFJFQ0FURURfRk9SKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFu
YWdlcikgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAg
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAgICAgKmRpcmVjdG9yeSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMmE5YzUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsMzQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZLAorICAgIFBS
T1BfRElTS19DQUNIRV9ESVJFQ1RPUlksCisgICAgUFJPUF9BUFBMSUNBVElPTl9DQUNIRV9ESVJF
Q1RPUlksCisgICAgUFJPUF9JTkRFWEVEREJfRElSRUNUT1JZLAorICAgIFBST1BfV0VCU1FMX0RJ
UkVDVE9SWQorfTsKKworc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlIHsK
KyAgICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0ZURhdGFTdG9yZTsKKyAgICBDU3Ry
aW5nIGxvY2FsU3RvcmFnZURpcmVjdG9yeTsKKyAgICBDU3RyaW5nIGRpc2tDYWNoZURpcmVjdG9y
eTsKKyAgICBDU3RyaW5nIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rvcnk7CisgICAgQ1N0cmluZyBp
bmRleGVkREJEaXJlY3Rvcnk7CisgICAgQ1N0cmluZyB3ZWJTUUxEaXJlY3Rvcnk7Cit9OworCitX
RUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLCB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXIsIEdfVFlQRV9PQkpFQ1QpCisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYnNp
dGVEYXRhTWFuYWdlckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBH
VmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKG9iamVj
dCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdF
X0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KG1hbmFnZXIpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0tfQ0FDSEVfRElSRUNUT1JZOgorICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfQVBQTElDQVRJT05fQ0FDSEVfRElSRUNUT1JZOgorICAgICAgICBnX3ZhbHVl
X3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGlu
ZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfSU5ERVhFRERCX0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRf
c3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9k
aXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0VCU1FM
X0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVj
KQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJT
SVRFX0RBVEFfTUFOQUdFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBj
YXNlIFBST1BfTE9DQUxfU1RPUkFHRV9ESVJFQ1RPUlk6CisgICAgICAgIG1hbmFnZXItPnByaXYt
PmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ESVNLX0NBQ0hFX0RJUkVDVE9SWToKKyAgICAgICAg
bWFuYWdlci0+cHJpdi0+ZGlza0NhY2hlRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZh
bHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FQUExJQ0FUSU9OX0NBQ0hFX0RJ
UkVDVE9SWToKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9y
eSA9IGdfdmFsdWVfZ2V0X3N0cmluZyh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9JTkRFWEVEREJfRElSRUNUT1JZOgorICAgICAgICBtYW5hZ2VyLT5wcml2LT5pbmRleGVk
REJEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfV0VCU1FMX0RJUkVDVE9SWToKKyAgICAgICAgbWFuYWdlci0+cHJpdi0+
d2ViU1FMRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZ
X0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2NsYXNzX2luaXQoV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyQ2xhc3MqIGZpbmRDbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIGdPYmplY3RDbGFz
cyA9IEdfT0JKRUNUX0NMQVNTKGZpbmRDbGFzcyk7CisKKyAgICBnT2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldFByb3BlcnR5OworICAgIGdPYmpl
Y3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyU2V0UHJvcGVy
dHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6bG9jYWwtc3Rv
cmFnZS1kaXJlY3Rvcnk6CisgICAgICoKKyAgICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIGxvY2Fs
IHN0b3JhZ2UgZGF0YSB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEw
CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAg
Z09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0xPQ0FMX1NUT1JBR0VfRElSRUNUT1JZLAorICAg
ICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgImxvY2FsLXN0b3JhZ2UtZGly
ZWN0b3J5IiwKKyAgICAgICAgICAgIF8oIkxvY2FsIFN0b3JhZ2UgRGlyZWN0b3J5IiksCisgICAg
ICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIGxvY2FsIHN0b3JhZ2UgZGF0YSB3aWxsIGJl
IHN0b3JlZCIpLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1Rf
T05MWSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjpkaXNr
LWNhY2hlLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgSFRU
UCBkaXNrIGNhY2hlIHdpbGwgYmUgc3RvcmVkLgorICAgICAqCisgICAgICogU2luY2U6IDIuMTAK
KyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KAorICAgICAgICBn
T2JqZWN0Q2xhc3MsCisgICAgICAgIFBST1BfRElTS19DQUNIRV9ESVJFQ1RPUlksCisgICAgICAg
IGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiZGlzay1jYWNoZS1kaXJlY3Rvcnki
LAorICAgICAgICAgICAgXygiRGlzayBDYWNoZSBEaXJlY3RvcnkiKSwKKyAgICAgICAgICAgIF8o
IlRoZSBkaXJlY3Rvcnkgd2hlcmUgSFRUUCBkaXNrIGNhY2hlIHdpbGwgYmUgc3RvcmVkIiksCisg
ICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+
KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOm9mZmxpbmUtYXBwbGljYXRp
b24tY2FjaGUtZGlyZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGRpcmVjdG9yeSB3aGVyZSBv
ZmZsaW5lIHdlYiBhcHBsaWNhdGlvbiBjYWNoZSB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAyLjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0FQUExJQ0FUSU9OX0NB
Q0hFX0RJUkVDVE9SWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAgICAgICAgICAg
ICJvZmZsaW5lLWFwcGxpY2F0aW9uLWNhY2hlLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJP
ZmZsaW5lIFdlYiBBcHBsaWNhdGlvbiBDYWNoZSBEaXJlY3RvcnkiKSwKKyAgICAgICAgICAgIF8o
IlRoZSBkaXJlY3Rvcnkgd2hlcmUgb2ZmbGluZSB3ZWIgYXBwbGljYXRpb24gY2FjaGUgd2lsbCBi
ZSBzdG9yZWQiKSwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNU
X09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6aW5k
ZXhlZGRiLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgSW5k
ZXhlZERCIGRhdGFiYXNlcyB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAy
LjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAg
ICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0lOREVYRUREQl9ESVJFQ1RPUlksCisgICAg
ICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAiaW5kZXhlZGRiLWRpcmVjdG9y
eSIsCisgICAgICAgICAgICBfKCJJbmRleGVkREIgRGlyZWN0b3J5IiksCisgICAgICAgICAgICBf
KCJUaGUgZGlyZWN0b3J5IHdoZXJlIEluZGV4ZWREQiBkYXRhYmFzZXMgd2lsbCBiZSBzdG9yZWQi
KSwKKyAgICAgICAgICAgIG51bGxwdHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1G
bGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6d2Vic3FsLWRpcmVj
dG9yeToKKyAgICAgKgorICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgV2ViU1FMIGRhdGFiYXNl
cyB3aWxsIGJlIHN0b3JlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEwCisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNz
LAorICAgICAgICBQUk9QX1dFQlNRTF9ESVJFQ1RPUlksCisgICAgICAgIGdfcGFyYW1fc3BlY19z
dHJpbmcoCisgICAgICAgICAgICAid2Vic3FsLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJX
ZWJTUUwgRGlyZWN0b3J5IiksCisgICAgICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIFdl
YlNRTCBkYXRhYmFzZXMgd2lsbCBiZSBzdG9yZWQiKSwKKyAgICAgICAgICAgIG51bGxwdHIsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JFQURXUklU
RSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7Cit9CisKK1dlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKFdlYnNpdGVEYXRhU3RvcmU6OkNv
bmZpZ3VyYXRpb24mJiBjb25maWd1cmF0aW9uKQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsIG51bGxwdHIpKTsKKyAgICBtYW5hZ2Vy
LT5wcml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKFdURjo6
bW92ZShjb25maWd1cmF0aW9uKSk7CisKKyAgICByZXR1cm4gbWFuYWdlcjsKK30KKworV2Vic2l0
ZURhdGFTdG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+cHJpdjsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVE
YXRhU3RvcmUpIHsKKyAgICAgICAgV2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiBjb25m
aWd1cmF0aW9uOworICAgICAgICBjb25maWd1cmF0aW9uLmxvY2FsU3RvcmFnZURpcmVjdG9yeSA9
IHByaXYtPmxvY2FsU3RvcmFnZURpcmVjdG9yeS5pc051bGwoKSA/CisgICAgICAgICAgICBBUEk6
OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRMb2NhbFN0b3JhZ2VEaXJlY3RvcnkoKSA6IFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSk7
CisgICAgICAgIGNvbmZpZ3VyYXRpb24ubmV0d29ya0NhY2hlRGlyZWN0b3J5ID0gcHJpdi0+ZGlz
a0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpID8KKyAgICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFT
dG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+ZGlza0NhY2hl
RGlyZWN0b3J5LmRhdGEoKSksIG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeSk7CisgICAgICAgIGNv
bmZpZ3VyYXRpb24uYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA9IHByaXYtPmFwcGxpY2F0aW9u
Q2FjaGVEaXJlY3RvcnkuaXNOdWxsKCkgPworICAgICAgICAgICAgQVBJOjpXZWJzaXRlRGF0YVN0
b3JlOjpkZWZhdWx0QXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6ZmlsZW5h
bWVUb1N0cmluZyhwcml2LT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmRhdGEoKSk7CisgICAg
ICAgIGNvbmZpZ3VyYXRpb24ud2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkgPSBwcml2LT53ZWJTUUxE
aXJlY3RvcnkuaXNOdWxsKCkgPworICAgICAgICAgICAgQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpk
ZWZhdWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKSA6IFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJp
bmcocHJpdi0+d2ViU1FMRGlyZWN0b3J5LmRhdGEoKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24u
bWVkaWFLZXlzU3RvcmFnZURpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVs
dE1lZGlhS2V5c1N0b3JhZ2VEaXJlY3RvcnkoKTsKKyAgICAgICAgcHJpdi0+d2Vic2l0ZURhdGFT
dG9yZSA9IFdlYnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEY6Om1vdmUoY29uZmlndXJhdGlvbikp
OworICAgIH0KKworICAgIHJldHVybiAqcHJpdi0+d2Vic2l0ZURhdGFTdG9yZTsKK30KKworLyoq
CisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3OgorICogQGZpcnN0X29wdGlvbl9u
YW1lOiBuYW1lIG9mIHRoZSBmaXJzdCBvcHRpb24gdG8gc2V0CisgKiBALi4uOiB2YWx1ZSBvZiBm
aXJzdCBvcHRpb24sIGZvbGxvd2VkIGJ5IG1vcmUgb3B0aW9ucywgJU5VTEwtdGVybWluYXRlZAor
ICoKKyAqIENyZWF0ZXMgYSBuZXcgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciB3aXRoIHRoZSBn
aXZlbiBvcHRpb25zLiBJdCBtdXN0CisgKiBiZSBwYXNzZWQgYXMgY29uc3RydWN0aW9uIHBhcmFt
ZXRlciBvZiBhICNXZWJLaXRXZWJDb250ZXh0LgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBm
dWxsKTogdGhlIG5ld2x5IGNyZWF0ZWQgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoKKyAq
IFNpbmNlOiAyLjEwCisgKi8KK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX25ldyhjb25zdCBnY2hhciogZmlyc3RPcHRpb25OYW1lLCAuLi4pCit7
CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZpcnN0T3B0aW9uTmFtZSk7
CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyID0gV0VCS0lUX1dFQlNJVEVf
REFUQV9NQU5BR0VSKGdfb2JqZWN0X25ld192YWxpc3QoV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRB
X01BTkFHRVIsIGZpcnN0T3B0aW9uTmFtZSwgYXJncykpOworICAgIHZhX2VuZChhcmdzKTsKKwor
ICAgIHJldHVybiBtYW5hZ2VyOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3Rvcnk6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyOmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IHRo
ZSBkaXJlY3Rvcnkgd2hlcmUgbG9jYWwgc3RvcmFnZSBkYXRhIGlzIHN0b3JlZC4KKyAqCisgKiBT
aW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1h
bmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJVEVfREFU
QV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlclByaXZhdGUqIHByaXYgPSBtYW5hZ2VyLT5wcml2OworICAgIGlmIChwcml2LT5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAgIHByaXYtPmxvY2FsU3RvcmFnZURpcmVj
dG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFnZURpcmVjdG9y
eSgpLnV0ZjgoKTsKKyAgICByZXR1cm4gcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEo
KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2Fj
aGVfZGlyZWN0b3J5OgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgor
ICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjpkaXNrLWNhY2hlLWRpcmVj
dG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGlyZWN0b3J5IHdoZXJlIEhUVFAg
ZGlzayBjYWNoZSBpcyBzdG9yZWQuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworY29uc3QgZ2No
YXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3Rvcnko
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7
CisKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+
cHJpdjsKKyAgICBpZiAocHJpdi0+ZGlza0NhY2hlRGlyZWN0b3J5LmlzTnVsbCgpKSB7CisgICAg
ICAgIC8vIFRoZSBkZWZhdWx0IGRpcmVjdG9yeSBhbHJlYWR5IGhhcyB0aGUgc3ViZGlyZWN0b3J5
LgorICAgICAgICBwcml2LT5kaXNrQ2FjaGVEaXJlY3RvcnkgPSBXZWJDb3JlOjpkaXJlY3RvcnlO
YW1lKEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdE5ldHdvcmtDYWNoZURpcmVjdG9yeSgp
KS51dGY4KCk7CisgICAgfQorICAgIHJldHVybiBwcml2LT5kaXNrQ2FjaGVEaXJlY3RvcnkuZGF0
YSgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGlu
ZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3Rvcnk6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
Om9mZmxpbmUtYXBwbGljYXRpb24tY2FjaGUtZGlyZWN0b3J5IHByb3BlcnR5LgorICoKKyAqIFJl
dHVybnM6IHRoZSBkaXJlY3Rvcnkgd2hlcmUgb2ZmbGluZSB3ZWIgYXBwbGljYXRpb24gY2FjaGUg
aXMgc3RvcmVkLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2FjaGVfZGlyZWN0
b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51bGxw
dHIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1hbmFn
ZXItPnByaXY7CisgICAgaWYgKHByaXYtPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuaXNOdWxs
KCkpCisgICAgICAgIHByaXYtPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSBBUEk6OldlYnNp
dGVEYXRhU3RvcmU6OmRlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkudXRmOCgpOwor
ICAgIHJldHVybiBwcml2LT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmRhdGEoKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3Rv
cnk6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0
IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmluZGV4ZWRkYi1kaXJlY3RvcnkgcHJvcGVy
dHkuCisgKgorICogUmV0dXJuczogdGhlIGRpcmVjdG9yeSB3aGVyZSBJbmRleGVkREIgZGF0YWJh
c2VzIGFyZSBzdG9yZWQuCisgKgorICogU2luY2U6IDIuMTAKKyAqLworY29uc3QgZ2NoYXIqIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeShXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAg
IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUqIHByaXYgPSBtYW5hZ2VyLT5wcml2Owor
ICAgIGlmIChwcml2LT5pbmRleGVkREJEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgICAgIHByaXYt
PmluZGV4ZWREQkRpcmVjdG9yeSA9IEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdEluZGV4
ZWREQkRhdGFiYXNlRGlyZWN0b3J5KCkudXRmOCgpOworICAgIHJldHVybiBwcml2LT5pbmRleGVk
REJEaXJlY3RvcnkuZGF0YSgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeToKKyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6d2Vi
c3FsLWRpcmVjdG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGlyZWN0b3J5IHdo
ZXJlIFdlYlNRTCBkYXRhYmFzZXMgYXJlIHN0b3JlZC4KKyAqCisgKiBTaW5jZTogMi4xMAorICov
Citjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGly
ZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51
bGxwdHIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1h
bmFnZXItPnByaXY7CisgICAgaWYgKHByaXYtPndlYlNRTERpcmVjdG9yeS5pc051bGwoKSkKKyAg
ICAgICAgcHJpdi0+d2ViU1FMRGlyZWN0b3J5ID0gQVBJOjpXZWJzaXRlRGF0YVN0b3JlOjpkZWZh
dWx0V2ViU1FMRGF0YWJhc2VEaXJlY3RvcnkoKS51dGY4KCk7CisgICAgcmV0dXJuIHByaXYtPndl
YlNRTERpcmVjdG9yeS5kYXRhKCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5YTYzZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuaApA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IElnYWxpYSBTLkwuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aWYgIWRlZmluZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09N
UElMQVRJT04pCisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVk
ZWQgZGlyZWN0bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
X2gKKyNkZWZpbmUgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyX2gKKworI2luY2x1ZGUgPGdsaWIt
b2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXREZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUiAgICAgICAg
ICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VC
S0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLCBXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01B
TkFHRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VC
S0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIpKQorI2RlZmluZSBXRUJLSVRfV0VCU0lURV9E
QVRBX01BTkFHRVJfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xh
c3MpLCAgV0VCS0lUX1RZUEVfV0VCU0lURV9EQVRBX01BTkFHRVIsIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlckNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSX0NM
QVNTKGtsYXNzKSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X1dFQlNJVEVfREFUQV9NQU5BR0VSKSkKKyNkZWZpbmUgV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5B
R0VSX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJD
bGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgICAgICAg
IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXJDbGFzcyAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgewor
ICAgIEdPYmplY3QgcGFyZW50OworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0
ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3Mgewor
ICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqCit3ZWJraXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXJfbmV3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChjb25zdCBnY2hhciAgICAgICAgICAgICAgKmZpcnN0X29wdGlvbl9uYW1lLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLi4uKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5ICAgICAgICAgICAgIChXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoK
K3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vZmZs
aW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeSAoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
ICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkgICAgICAgICAgICAgICAgIChXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitXRUJLSVRfQVBJIGNvbnN0IGdjaGFy
ICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSAgICAg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CisKK0df
RU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4YTc4MjMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRlX2gKKworI2luY2x1ZGUgIldl
YktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJzaXRlRGF0YVN0b3JlLmgiCisKK1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciogd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRlKFdlYktpdDo6
V2Vic2l0ZURhdGFTdG9yZTo6Q29uZmlndXJhdGlvbiYmKTsKK1dlYktpdDo6V2Vic2l0ZURhdGFT
dG9yZSYgd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciopOworCisjZW5kaWYgLy8gV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dl
YmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CmluZGV4IGU1MDJiZDcuLmFhNjFi
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Vi
a2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2VjdGlvbnMudHh0CkBAIC0yOSw2ICsyOSw4IEBA
IFdlYktpdFByb2Nlc3NNb2RlbAogV2ViS2l0VExTRXJyb3JzUG9saWN5CiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X2RlZmF1bHQKIHdlYmtpdF93ZWJfY29udGV4dF9uZXcKK3dlYmtpdF93ZWJfY29u
dGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcgord2Via2l0X3dlYl9jb250ZXh0X2dl
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcgogd2Via2l0X3dlYl9jb250ZXh0X2dldF9jYWNoZV9tb2Rl
bAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbAogd2Via2l0X3dlYl9jb250ZXh0
X2NsZWFyX2NhY2hlCkBAIC0xMTQ3LDYgKzExNDksMzAgQEAgd2Via2l0X3NlY3VyaXR5X21hbmFn
ZXJfZ2V0X3R5cGUKIDwvU0VDVElPTj4KIAogPFNFQ1RJT04+Cis8RklMRT5XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXI8L0ZJTEU+CitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKK3dlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9uZXcKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9j
YWxfc3RvcmFnZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlz
a19jYWNoZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGlu
ZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF93ZWJzcWxfZGlyZWN0b3J5CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyQ2xhc3MKK1dFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSCitXRUJL
SVRfV0VCU0lURV9EQVRBX01BTkFHRVIKK1dFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUgor
V0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSX0NMQVNTCitXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVJfQ0xBU1MKK1dFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9HRVRfQ0xBU1MKKwor
PFNVQlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUKK3dl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElP
Tj4KIDxGSUxFPldlYktpdFdlYkV4dGVuc2lvbjwvRklMRT4KIFdlYktpdFdlYkV4dGVuc2lvbgog
V2ViS2l0V2ViRXh0ZW5zaW9uSW5pdGlhbGl6ZUZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcwpp
bmRleCA4MTlhZjU4Li5iNTI2NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAudHlwZXMKQEAgLTI5LDMgKzI5
LDQgQEAgd2Via2l0X2ZyYW1lX2dldF90eXBlCiB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRf
dHlwZQogd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX2dldF90eXBlCiB3ZWJraXRfd2ViX2hp
dF90ZXN0X3Jlc3VsdF9nZXRfdHlwZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90
eXBlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZDli
YzkyMC4uMTQzNzFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtp
dDIuaApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViUmVzb3Vy
Y2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcuaD4KICNpbmNsdWRlIDx3ZWJr
aXQyL1dlYktpdFdlYlZpZXdCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMu
aD4KIAogI3VuZGVmIF9fV0VCS0lUMl9IX0lOU0lERV9fCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDFmNTQ1OC4uY2NhMDU1OSAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBA
CisyMDE1LTA2LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgQVBJ
IGZvciBwcm9jZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHVuaXQgdGVzdHMgdG8gdXNlIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4
dENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAqIFRl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6OlRl
c3QpOiBVc2UgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFuZCBzZXQgYWxsIHBvc3NpYmxlCisg
ICAgICAgIHZhbHVlcyB0byBlbnN1cmUgdW5pdCB0ZXN0cyBkb24ndCB3cml0ZSBvdXRzaWRlIHRo
ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgICAgICAoVGVzdDo6flRlc3QpOiBFeHBsaWNpdGx5
IHJlc2V0IHRoZSB3ZWIgY29udGV4dCB0byBlbnN1cmUgaXRzCisgICAgICAgIG9iamVjdHMgYXJl
IHJlbGVhc2VkIGJlZm9yZSB0aGUgbGVha3MgY2hlY2suCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6
d2FpdCk6IEZpeCB0aGUgR1NvdXJjZSB1c2VkLCBzaW5jZSB3ZSBhcmUgcmVjZWl2aW5nCisgICAg
ICAgIGEgZG91YmxlIGluIHNlY29uZHMsIGJ1dCB1c2luZyBnX3RpbWVvdXRfYWRkX3NlY29uZHMo
KSB0aGF0CisgICAgICAgIGV4cGVjdHMgYW4gdW5zaWduZWQgaW4gc2Vjb25kcy4gVXNlIEdNYWlu
TG9vcFNvdXJjZSB0byBjb3JyZWN0bHkKKyAgICAgICAgaGFuZGxlIHRoZSB2YWx1ZSBhbmQgc2lt
cGxpZnkgdGhlIGNvZGUuCisKIDIwMTUtMDYtMjEgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE3Mjk3NSk6IG5hdmlnYXRvci5sYW5n
dWFnZSB1bmFibGUgdG8gdGVsbCByZWdpb24gZm9yIFRyYWRpdGlvbmFsIENoaW5lc2UgdXNlcnMK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2Vi
S2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsv
VGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGQ4ZTIxYjcuLjAwYWIwMjMgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29u
dGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1Rlc3RX
ZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMzksMTQgKzM5LDUyIEBAIHN0YXRpYyB2b2lkIHRlc3RX
ZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogCiBzdGF0aWMgdm9p
ZCB0ZXN0V2ViQ29udGV4dENvbmZpZ3VyYXRpb24oV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBv
aW50ZXIpCiB7CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5hZ2VyID0gd2Via2l0
X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0LT5tX3dlYkNvbnRleHQu
Z2V0KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihtYW5h
Z2VyKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhH
X09CSkVDVChtYW5hZ2VyKSk7CisKICAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURp
cmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImxvY2FsLXN0
b3JhZ2UiLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVj
dG9yeS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3Rv
cmFnZV9kaXJlY3RvcnkobWFuYWdlcikpOwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGxvY2Fs
U3RvcmFnZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAKICAgICB0ZXN0
LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7CiAgICAg
dGVzdC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFu
ZFdhaXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScp
OyIsIG51bGxwdHIpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdf
YnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhlZGRiIiwgbnVsbHB0
cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cihpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksID09LCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkobWFuYWdl
cikpOwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwg
R19GSUxFX1RFU1RfSVNfRElSKSk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVS
SUZvclBhdGgoIi9hcHBjYWNoZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZp
bmlzaGVkKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5
KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwY2FjaGUiLCBudWxs
cHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0
KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRp
b25fY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxp
Y2F0aW9uQ2FjaGVEYXRhYmFzZShnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJl
Y3RvcnkuZ2V0KCksICJBcHBsaWNhdGlvbkNhY2hlLmRiIiwgbnVsbHB0cikpOworICAgIHVuc2ln
bmVkIHRyaWVzQ291bnQgPSA0OworICAgIHdoaWxlICghZ19maWxlX3Rlc3QoYXBwbGljYXRpb25D
YWNoZURhdGFiYXNlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSAmJiAtLXRyaWVzQ291
bnQpCisgICAgICAgIHRlc3QtPndhaXQoMC4yNSk7CisgICAgZ19hc3NlcnQodHJpZXNDb3VudCk7
CisKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5h
bWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAid2Vic3FsIiwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJTUUxEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOworI2lmIDAgLy8gRklYTUU6
IFdlIG5lZWQgQVBJIHRvIHNldCB0aGUgZGF0YWJhc2UgcXVvdGEgZm9yIGFuIG9yaWdpbiB0byBi
ZSBhYmxlIHRvIHRlc3QgdGhpcy4KKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGls
RmluaXNoZWQoImRiID0gb3BlbkRhdGFiYXNlKFwiVGVzdERhdGFiYXNlXCIsIFwiMS4wXCIsIFwi
VGVzdERhdGFiYXNlXCIsIDEpOyIsICZlcnJvcik7CisgICAgZ19hc3NlcnQoZ19maWxlX3Rlc3Qo
d2ViU1FMRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyNlbmRpZgorCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBkaXNrQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShU
ZXN0OjpkYXRhRGlyZWN0b3J5KCksICJkaXNrLWNhY2hlIiwgbnVsbHB0cikpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cihkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBnX2Fz
c2VydChnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lT
X0RJUikpOworCisgICAgLy8gVGhlIGRlZmF1bHQgY29udGV4dCBzaG91bGQgaGF2ZSBhIGRpZmZl
cmVudCBtYW5hZ2VyIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyKiBkZWZhdWx0TWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOwor
ICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihkZWZhdWx0TWFuYWdl
cikpOworICAgIGdfYXNzZXJ0KG1hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAgIGdfYXNz
ZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2Vf
ZGlyZWN0b3J5KG1hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9s
b2NhbF9zdG9yYWdlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2Nt
cHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3Rvcnko
bWFuYWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9k
aXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgIT0s
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoZGVm
YXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwg
IT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9j
YWNoZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KG1hbmFnZXIpLCAh
PSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KGRlZmF1
bHRNYW5hZ2VyKSk7CiB9CiAKIGNsYXNzIFBsdWdpbnNUZXN0OiBwdWJsaWMgVGVzdCB7CkBAIC0z
NTEsNiArMzg5LDIwIEBAIHN0YXRpYyB2b2lkIHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNl
cnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqCiAgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFU
SUMsIGVtcHR5SFRNTCwgc3RybGVuKGVtcHR5SFRNTCkpOwogICAgICAgICBzb3VwX21lc3NhZ2Vf
Ym9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKICAgICAgICAgc291cF9tZXNz
YWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAo
Z19zdHJfZXF1YWwocGF0aCwgIi9hcHBjYWNoZSIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFw
cGNhY2hlSFRNTCA9ICI8aHRtbCBtYW5pZmVzdD1hcHBjYWNoZS5tYW5pZmVzdD48Ym9keT48L2Jv
ZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGFwcGNhY2hlSFRNTCwgc3RybGVuKGFw
cGNhY2hlSFRNTCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdl
LT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2Fn
ZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9h
cHBjYWNoZS5tYW5pZmVzdCIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFwcGNhY2hlTWFuaWZl
c3QgPSAiQ0FDSEUgTUFOSUZFU1RcbkNBQ0hFOlxuYXBwY2FjaGUvZm9vLnR4dFxuIjsKKyAgICAg
ICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBf
TUVNT1JZX1NUQVRJQywgYXBwY2FjaGVNYW5pZmVzdCwgc3RybGVuKGFwcGNhY2hlTWFuaWZlc3Qp
KTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2Vf
Ym9keSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RB
VFVTX09LKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvYXBwY2FjaGUvZm9v
LnR4dCIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNw
b25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsICJmb28iLCAzKTsKKyAgICAgICAgc291cF9t
ZXNzYWdlX2JvZHlfY29tcGxldGUobWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX09LKTsKICAgICB9IGVs
c2UKICAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
Tk9UX0ZPVU5EKTsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktp
dDJHdGsvVGVzdE1haW4uaCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVz
dE1haW4uaAppbmRleCA4ZWFmOGUwLi42MDU0ZmUwIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCkBAIC02OSwxOSArNjksMjIgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkoZ19i
dWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJsb2NhbC1zdG9yYWdlIiwgbnVsbHB0cikp
OwogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGluZGV4ZWREQkRpcmVjdG9yeShnX2J1aWxkX2Zp
bGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKLSAgICAgICAg
bV93ZWJDb250ZXh0ID0gYWRvcHRHUmVmKFdFQktJVF9XRUJfQ09OVEVYVChnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsCi0gICAgICAgICAgICAibG9jYWwtc3RvcmFnZS1kaXJl
Y3RvcnkiLCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCksCi0gICAgICAgICAgICAiaW5kZXhl
ZC1kYi1kaXJlY3RvcnkiLCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksCi0gICAgICAgICAgICBu
dWxscHRyKSkpOwotCi0gICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0LmdldCgp
LCAiaW5pdGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6ZVdlYkV4
dGVuc2lvbnNDYWxsYmFjayksIHRoaXMpOwogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGRpc2tD
YWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImRpc2stY2Fj
aGUiLCBudWxscHRyKSk7Ci0gICAgICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfZGlza19jYWNo
ZV9kaXJlY3RvcnkobV93ZWJDb250ZXh0LmdldCgpLCBkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCkp
OworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkoZ19i
dWlsZF9maWxlbmFtZShkYXRhRGlyZWN0b3J5KCksICJhcHBjYWNoZSIsIG51bGxwdHIpKTsKKyAg
ICAgICAgR1VuaXF1ZVB0cjxjaGFyPiB3ZWJTUUxEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShk
YXRhRGlyZWN0b3J5KCksICJ3ZWJzcWwiLCBudWxscHRyKSk7CisgICAgICAgIEdSZWZQdHI8V2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiB3ZWJzaXRlRGF0YU1hbmFnZXIgPSBhZG9wdEdSZWYod2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygKKyAgICAgICAgICAgICJsb2NhbC1zdG9yYWdl
LWRpcmVjdG9yeSIsIGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSwgImluZGV4ZWRkYi1kaXJl
Y3RvcnkiLCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksCisgICAgICAgICAgICAiZGlzay1jYWNo
ZS1kaXJlY3RvcnkiLCBkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksICJvZmZsaW5lLWFwcGxpY2F0
aW9uLWNhY2hlLWRpcmVjdG9yeSIsIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCksCisg
ICAgICAgICAgICAid2Vic3FsLWRpcmVjdG9yeSIsIHdlYlNRTERpcmVjdG9yeS5nZXQoKSwgbnVs
bHB0cikpOworCisgICAgICAgIG1fd2ViQ29udGV4dCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIod2Vic2l0ZURhdGFNYW5hZ2VyLmdl
dCgpKSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93ZWJDb250ZXh0LmdldCgpLCAiaW5p
dGlhbGl6ZS13ZWItZXh0ZW5zaW9ucyIsIEdfQ0FMTEJBQ0soaW5pdGlhbGl6ZVdlYkV4dGVuc2lv
bnNDYWxsYmFjayksIHRoaXMpOwogICAgIH0KIAogICAgIH5UZXN0KCkKICAgICB7CiAgICAgICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfbWF0Y2hlZChtX3dlYkNvbnRleHQuZ2V0KCks
IEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIG51bGxwdHIsIG51bGxwdHIsIHRoaXMpOworICAg
ICAgICBtX3dlYkNvbnRleHQgPSBudWxscHRyOwogICAgICAgICBpZiAobV93YXRjaGVkT2JqZWN0
cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvV2ViVmlld1Rlc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHAKaW5kZXggMzg2NTQ5Mi4uMTRm
MmMxNCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJW
aWV3VGVzdC5jcHAKQEAgLTIzLDYgKzIzLDcgQEAKIAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3Jl
L0pTUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9HVW5pcXVlUHRyR3RrLmg+CisjaW5j
bHVkZSA8d3RmL2dsaWIvR01haW5Mb29wU291cmNlLmg+CiAKIFdlYlZpZXdUZXN0OjpXZWJWaWV3
VGVzdChXZWJLaXRVc2VyQ29udGVudE1hbmFnZXIqIHVzZXJDb250ZW50TWFuYWdlcikKICAgICA6
IG1fd2ViVmlldyhXRUJLSVRfV0VCX1ZJRVcoZ19vYmplY3RfcmVmX3NpbmsoZ19vYmplY3RfbmV3
KFdFQktJVF9UWVBFX1dFQl9WSUVXLCAid2ViLWNvbnRleHQiLCBtX3dlYkNvbnRleHQuZ2V0KCks
ICJ1c2VyLWNvbnRlbnQtbWFuYWdlciIsIHVzZXJDb250ZW50TWFuYWdlciwgbnVsbHB0cikpKSkK
QEAgLTE3OSwxNSArMTgwLDEwIEBAIHZvaWQgV2ViVmlld1Rlc3Q6OnF1aXRNYWluTG9vcEFmdGVy
UHJvY2Vzc2luZ1BlbmRpbmdFdmVudHMoKQogICAgIHF1aXRNYWluTG9vcCgpOwogfQogCi1zdGF0
aWMgZ2Jvb2xlYW4gcXVpdE1haW5Mb29wSWRsZUNhbGxiYWNrKFdlYlZpZXdUZXN0KiB0ZXN0KQot
ewotICAgIHRlc3QtPnF1aXRNYWluTG9vcCgpOwotICAgIHJldHVybiBGQUxTRTsKLX0KLQogdm9p
ZCBXZWJWaWV3VGVzdDo6d2FpdChkb3VibGUgc2Vjb25kcykKIHsKLSAgICBnX3RpbWVvdXRfYWRk
X3NlY29uZHMoc2Vjb25kcywgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4ocXVpdE1haW5M
b29wSWRsZUNhbGxiYWNrKSwgdGhpcyk7CisgICAgR01haW5Mb29wU291cmNlOjpzY2hlZHVsZUFm
dGVyRGVsYXlBbmREZWxldGVPbkRlc3Ryb3koIldlYlZpZXdUZXN0IHdhaXQiLCBbdGhpc10geyBx
dWl0TWFpbkxvb3AoKTsgfSwKKyAgICAgICAgc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3Rk
OjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RkOjpjaHJvbm86OmR1cmF0aW9uPGRvdWJsZT4oc2Vj
b25kcykpKTsKICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>255402</attachid>
            <date>2015-06-23 03:17:03 -0700</date>
            <delta_ts>2015-06-24 01:26:47 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-website-data-manager.diff</filename>
            <type>text/plain</type>
            <size>56894</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBlMTUyYjRkLi4xYjU2NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTYg
QEAKIDIwMTUtMDYtMTkgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCBpbml0aWFsIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBB
UEkgZm9yIHByb2Nlc3MgY29uZmlndXJhdGlvbiBvcHRpb25zCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDYxNDkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
IHRvIHJlcGxhY2UgdGhlIGRpZmZlcmVudCB3YXlzIHdlIGhhdmUKKyAgICAgICAgdG8gY29uZmln
dXJlIGRhdGEgc3RvcmUKKyAgICAgICAgZGlyZWN0b3JpZXMuIFdlYktpdFdlYkNvbnRleHQ6aW5k
ZXhlZC1kYi1kaXJlY3RvcnkgcHJvcGVydHkgaGFzCisgICAgICAgIGJlZW4gcmVtb3ZlZCwgc2lu
Y2UgaXQgd2FzIGFkZGVkIG9ubHkgaW4gdHJ1bmssIGFuZAorICAgICAgICBXZWJLaXRXZWJDb250
ZXh0OmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuIFRoZQorICAg
ICAgICBtZXRob2Qgd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSgp
IGhhcyBiZWVuCisgICAgICAgIGRlcHJlY2F0ZWQgdG9vIGluIGZhdm9yIG9mIFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlci4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOiBBZGQgbmV3IGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBy
aXZhdGUuaDogTW92ZSBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkKKyAgICAgICAgZGVmaW5pdGlv
biBoZXJlLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
OgorICAgICAgICAod2Via2l0V2ViQ29udGV4dEdldFByb3BlcnR5KTogUmVwbGFjZSBpbmRleGVk
LWRiLWRpcmVjdG9yeSBnZXR0ZXIKKyAgICAgICAgd2l0aCB3ZWJzaXRlLWRhdGEtbWFuYWdlciBv
bmUuCisgICAgICAgICh3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHkpOiBSZXBsYWNlIGluZGV4
ZWQtZGItZGlyZWN0b3J5IHNldHRlcgorICAgICAgICB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2Vy
IG9uZS4KKyAgICAgICAgKHdlYmtpdFdlYkNvbnRleHRDb25zdHJ1Y3RlZCk6IFVzZSB0aGUgdXNl
ciBwcm92aWRlZAorICAgICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgdG8gY29uZmlndXJl
IHRoZSBjb250ZXh0IG9yIGNyZWF0ZSBhCisgICAgICAgIGRlZmF1bHQgV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyIGlmIG5vdCBwcm92aWRlZC4KKyAgICAgICAgKHdlYmtpdF93ZWJfY29udGV4dF9j
bGFzc19pbml0KTogUmVwbGFjZSBpbmRleGVkLWRiLWRpcmVjdG9yeQorICAgICAgICBwcm9wZXJ0
eSB3aXRoIHdlYnNpdGUtZGF0YS1tYW5hZ2VyLgorICAgICAgICAod2Via2l0X3dlYl9jb250ZXh0
X25ld193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKToKKyAgICAgICAgKHdlYmtpdF93ZWJfY29u
dGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIpOgorICAgICAgICAod2Via2l0V2ViQ29udGV4
dENyZWF0ZVBhZ2VGb3JXZWJWaWV3KTogR2V0IHRoZSBXZWJzaXRlRGF0YVN0b3JlCisgICAgICAg
IGZyb20gdGhlIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlci4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmNwcDogQWRkZWQuCisgICAgICAgICh3ZWJraXRXZWJz
aXRlRGF0YU1hbmFnZXJHZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJTZXRQcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDcmVhdGUpOgor
ICAgICAgICAod2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyR2V0RGF0YVN0b3JlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9uZXcpOgorICAgICAgICAod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSk6CisgICAgICAgICh3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KToKKyAg
ICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlv
bl9jYWNoZV9kaXJlY3RvcnkpOgorICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KToKKyAgICAgICAgKHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeSk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQ6
IEFkZCBuZXcgc3ltYm9scy4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtp
dDJndGstNC4wLnR5cGVzOiBBZGQgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBl
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuaC4KKworMjAxNS0wNi0xOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gRG8gbm90IHVzZSBsZWdhY3kg
ZGF0YSBzdG9yZSBvcHRpb25zIGluIFdlYktpdDIgR1RLKyBBUEkKICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjE0NQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDY5MWM2NDEuLjUzMjM4M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0yNTEsNiArMjUxLDkgQEAgbGlzdChBUFBFTkQgV2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VBY2Nlc3NpYmxlLmgKICAgICBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAogICAgIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXIuY3BwCisgICAgVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgKKyAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXJQcml2YXRlLmgKICAgICBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaAog
ICAgIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdpbmRvd1Byb3BlcnRpZXNQcml2YXRlLmgKQEAg
LTM5OSw2ICs0MDIsNyBAQCBzZXQoV2ViS2l0MkdUS19JTlNUQUxMRURfSEVBREVSUwogICAgICR7
V0VCS0lUMl9ESVJ9L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmgKICAgICAk
e1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKICAgICAke1dF
QktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5oCisgICAgJHtX
RUJLSVQyX0RJUn0vVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmgK
ICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXaW5kb3dQcm9wZXJ0
aWVzLmgKICAgICAke1dFQktJVDJfRElSfS9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKICkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuaApp
bmRleCAwZjg5MDhjLi4zNGUxN2ZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UHJpdmF0ZS5oCkBAIC0xMjcsNCArMTI3LDEwIEBAIGVudW0gU25hcHNo
b3RSZWdpb24gewogICAgIFNuYXBzaG90UmVnaW9uRnVsbERvY3VtZW50CiB9OwogCisjaWYgRU5B
QkxFKE5FVFdPUktfQ0FDSEUpCitzdGF0aWMgY29uc3QgY2hhciBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnlbXSA9ICJXZWJLaXRDYWNoZSI7CisjZWxzZQorc3RhdGljIGNvbnN0IGNoYXIgbmV0d29y
a0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsKKyNlbmRpZgorCiAjZW5kaWYgLy8gV2Vi
S2l0UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IDE1NTdmNTAuLjM5ZTUzM2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3Bw
CkBAIC00Nyw2ICs0Nyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0V2ViQ29udGV4dFByaXZhdGUuaCIK
ICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZh
dGUuaCIKICNpbmNsdWRlICJXZWJOb3RpZmljYXRpb25NYW5hZ2VyUHJveHkuaCIKICNpbmNsdWRl
IDxXZWJDb3JlL0ZpbGVTeXN0ZW0uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb25EYXRhYmFzZS5o
PgpAQCAtMTAyLDcgKzEwMyw3IEBAIGVudW0gewogICAgIFBST1BfMCwKIAogICAgIFBST1BfTE9D
QUxfU1RPUkFHRV9ESVJFQ1RPUlksCi0gICAgUFJPUF9JTkRFWEVEX0RCX0RJUkVDVE9SWQorICAg
IFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIKIH07CiAKIGVudW0gewpAQCAtMTczLDcgKzE3NCw3
IEBAIHN0cnVjdCBfV2ViS2l0V2ViQ29udGV4dFByaXZhdGUgewogI2lmIEVOQUJMRShOT1RJRklD
QVRJT05TKQogICAgIFJlZlB0cjxXZWJLaXROb3RpZmljYXRpb25Qcm92aWRlcj4gbm90aWZpY2F0
aW9uUHJvdmlkZXI7CiAjZW5kaWYKLSAgICBSZWZQdHI8V2Vic2l0ZURhdGFTdG9yZT4gd2Vic2l0
ZURhdGFTdG9yZTsKKyAgICBHUmVmUHRyPFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcj4gd2Vic2l0
ZURhdGFNYW5hZ2VyOwogCiAgICAgQ1N0cmluZyBmYXZpY29uRGF0YWJhc2VEaXJlY3Rvcnk7CiAg
ICAgV2ViS2l0VExTRXJyb3JzUG9saWN5IHRsc0Vycm9yc1BvbGljeTsKQEAgLTIzOCw4ICsyMzks
OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0R2V0UHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wSUQsIEdWYWx1ZSogdgogICAgIGNhc2UgUFJPUF9MT0NBTF9TVE9SQUdF
X0RJUkVDVE9SWToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCBjb250ZXh0LT5w
cml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBnX3ZhbHVlX3NldF9zdHJp
bmcodmFsdWUsIGNvbnRleHQtPnByaXYtPmluZGV4ZWREQkRpcmVjdG9yeS5kYXRhKCkpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyKGNv
bnRleHQpKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwYXJhbVNwZWMpOwpAQCAt
MjU0LDkgKzI1NSwxMSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRXZWJDb250ZXh0U2V0UHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSUQsIGNvbnN0IEdWYQogICAgIGNhc2UgUFJPUF9M
T0NBTF9TVE9SQUdFX0RJUkVDVE9SWToKICAgICAgICAgY29udGV4dC0+cHJpdi0+bG9jYWxTdG9y
YWdlRGlyZWN0b3J5ID0gZ192YWx1ZV9nZXRfc3RyaW5nKHZhbHVlKTsKICAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBQUk9QX0lOREVYRURfREJfRElSRUNUT1JZOgotICAgICAgICBjb250ZXh0LT5w
cml2LT5pbmRleGVkREJEaXJlY3RvcnkgPSBnX3ZhbHVlX2dldF9zdHJpbmcodmFsdWUpOworICAg
IGNhc2UgUFJPUF9XRUJTSVRFX0RBVEFfTUFOQUdFUjogeworICAgICAgICBncG9pbnRlciBtYW5h
Z2VyID0gZ192YWx1ZV9nZXRfb2JqZWN0KHZhbHVlKTsKKyAgICAgICAgY29udGV4dC0+cHJpdi0+
d2Vic2l0ZURhdGFNYW5hZ2VyID0gbWFuYWdlciA/IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdF
UihtYW5hZ2VyKSA6IG51bGxwdHI7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0
OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9w
SUQsIHBhcmFtU3BlYyk7CiAgICAgfQpAQCAtMjg2LDE0ICsyODksMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0V2ViQ29udGV4dENvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKIAogICAgIFdlYktp
dFdlYkNvbnRleHQqIHdlYkNvbnRleHQgPSBXRUJLSVRfV0VCX0NPTlRFWFQob2JqZWN0KTsKICAg
ICBXZWJLaXRXZWJDb250ZXh0UHJpdmF0ZSogcHJpdiA9IHdlYkNvbnRleHQtPnByaXY7Ci0gICAg
aWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkpCisgICAgaWYgKHByaXYt
PndlYnNpdGVEYXRhTWFuYWdlcikgeworICAgICAgICBjb25maWd1cmF0aW9uLnNldExvY2FsU3Rv
cmFnZURpcmVjdG9yeShXZWJDb3JlOjpmaWxlbmFtZVRvU3RyaW5nKHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFN
YW5hZ2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldERpc2tDYWNoZURpcmVj
dG9yeShXZWJDb3JlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZmlsZW5hbWVU
b1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0
b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkpLCBuZXR3b3JrQ2FjaGVTdWJkaXJl
Y3RvcnkpKTsKKyAgICAgICAgY29uZmlndXJhdGlvbi5zZXRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0
b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2Vy
X2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShwcml2LT53ZWJzaXRlRGF0
YU1hbmFnZXIuZ2V0KCkpKSk7CisgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0SW5kZXhlZERCRGF0
YWJhc2VEaXJlY3RvcnkoV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyh3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkocHJpdi0+d2Vic2l0ZURhdGFNYW5h
Z2VyLmdldCgpKSkpOworICAgICAgICBjb25maWd1cmF0aW9uLnNldFdlYlNRTERhdGFiYXNlRGly
ZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1lVG9TdHJpbmcod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KHByaXYtPndlYnNpdGVEYXRhTWFuYWdlci5nZXQoKSkp
KTsKKyAgICB9IGVsc2UgaWYgKCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkuaXNOdWxsKCkp
CiAgICAgICAgIGNvbmZpZ3VyYXRpb24uc2V0TG9jYWxTdG9yYWdlRGlyZWN0b3J5KFdlYkNvcmU6
OmZpbGVuYW1lVG9TdHJpbmcocHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5LmRhdGEoKSkpOwot
ICAgIGlmICghcHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmlzTnVsbCgpKQotICAgICAgICBjb25m
aWd1cmF0aW9uLnNldEluZGV4ZWREQkRhdGFiYXNlRGlyZWN0b3J5KFdlYkNvcmU6OmZpbGVuYW1l
VG9TdHJpbmcocHJpdi0+aW5kZXhlZERCRGlyZWN0b3J5LmRhdGEoKSkpOwogCiAgICAgcHJpdi0+
Y29udGV4dCA9IFdlYlByb2Nlc3NQb29sOjpjcmVhdGUoY29uZmlndXJhdGlvbik7CiAKLSAgICBw
cml2LT53ZWJzaXRlRGF0YVN0b3JlID0gV2Vic2l0ZURhdGFTdG9yZTo6Y3JlYXRlKHdlYnNpdGVE
YXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pKTsKKyAgICBpZiAoIXByaXYtPndlYnNpdGVEYXRhTWFuYWdlcikKKyAgICAgICAg
cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyID0gd2Via2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ3JlYXRl
KHdlYnNpdGVEYXRhU3RvcmVDb25maWd1cmF0aW9uRm9yV2ViUHJvY2Vzc1Bvb2xDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pKTsKKwogICAgIHByaXYtPnJlcXVlc3RNYW5hZ2VyID0gcHJpdi0+
Y29udGV4dC0+c3VwcGxlbWVudDxXZWJTb3VwQ3VzdG9tUHJvdG9jb2xSZXF1ZXN0TWFuYWdlcj4o
KTsKIAogICAgIHByaXYtPnRsc0Vycm9yc1BvbGljeSA9IFdFQktJVF9UTFNfRVJST1JTX1BPTElD
WV9GQUlMOwpAQCAtMzQ0LDYgKzM1Myw4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfY29udGV4
dF9jbGFzc19pbml0KFdlYktpdFdlYkNvbnRleHRDbGFzcyogd2ViQ29udGV4dENsYXNzCiAgICAg
ICogVGhlIGRpcmVjdG9yeSB3aGVyZSBsb2NhbCBzdG9yYWdlIGRhdGEgd2lsbCBiZSBzYXZlZC4K
ICAgICAgKgogICAgICAqIFNpbmNlOiAyLjgKKyAgICAgKgorICAgICAqIERlcHJlY2F0ZWQ6IDIu
MTAuIFVzZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5
IGluc3RlYWQuCiAgICAgICovCiAgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgK
ICAgICAgICAgZ09iamVjdENsYXNzLApAQCAtMzU2LDIwICszNjcsMjAgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl9jb250ZXh0X2NsYXNzX2luaXQoV2ViS2l0V2ViQ29udGV4dENsYXNzKiB3ZWJD
b250ZXh0Q2xhc3MKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKIAogICAgIC8qKgot
ICAgICAqIFdlYktpdFdlYkNvbnRleHQ6aW5kZXhlZC1kYi1kaXJlY3Rvcnk6CisgICAgICogV2Vi
S2l0V2ViQ29udGV4dDp3ZWJzaXRlLWRhdGEtbWFuYWdlcjoKICAgICAgKgotICAgICAqIFRoZSBk
aXJlY3Rvcnkgd2hlcmUgSW5kZXhlZERCIGRhdGFiYXNlcyB3aWxsIGJlIHNhdmVkLgorICAgICAq
IFRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFzc29jaWF0ZWQgdG8gdGhpcyBjb250ZXh0
LgogICAgICAqCiAgICAgICogU2luY2U6IDIuMTAKICAgICAgKi8KICAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KAogICAgICAgICBnT2JqZWN0Q2xhc3MsCi0gICAgICAgIFBST1Bf
SU5ERVhFRF9EQl9ESVJFQ1RPUlksCi0gICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmcoCi0gICAg
ICAgICAgICAiaW5kZXhlZC1kYi1kaXJlY3RvcnkiLAotICAgICAgICAgICAgXygiSW5kZXhlZERC
IERpcmVjdG9yeSIpLAotICAgICAgICAgICAgXygiVGhlIGRpcmVjdG9yeSB3aGVyZSBJbmRleGVk
REIgZGF0YWJhc2VzIHdpbGwgYmUgc2F2ZWQiKSwKLSAgICAgICAgICAgIG51bGxwdHIsCisgICAg
ICAgIFBST1BfV0VCU0lURV9EQVRBX01BTkFHRVIsCisgICAgICAgIGdfcGFyYW1fc3BlY19vYmpl
Y3QoCisgICAgICAgICAgICAid2Vic2l0ZS1kYXRhLW1hbmFnZXIiLAorICAgICAgICAgICAgXygi
V2Vic2l0ZSBEYXRhIE1hbmFnZXIiKSwKKyAgICAgICAgICAgIF8oIlRoZSBXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIgYXNzb2NpYXRlZCB0byB0aGlzIGNvbnRleHQiKSwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSLAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9P
TkxZKSkpOwogCiAgICAgLyoqCkBAIC00NDQsNiArNDU1LDQwIEBAIFdlYktpdFdlYkNvbnRleHQq
IHdlYmtpdF93ZWJfY29udGV4dF9uZXcodm9pZCkKIH0KIAogLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXI6CisgKiBAbWFuYWdlcjogYSAjV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyCisgKgorICogQ3JlYXRlIGEgbmV3ICNXZWJLaXRXZWJDb250
ZXh0IHdpdGggYSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLgorICoKKyAqIFJldHVybnM6ICh0
cmFuc2ZlciBmdWxsKTogYSBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJDb250ZXh0CisgKgorICog
U2luY2U6IDIuMTAKKyAqLworV2ViS2l0V2ViQ29udGV4dCogd2Via2l0X3dlYl9jb250ZXh0X25l
d193aXRoX3dlYnNpdGVfZGF0YV9tYW5hZ2VyKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFu
YWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRB
X01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIFdFQktJVF9XRUJfQ09O
VEVYVChnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0NPTlRFWFQsICJ3ZWJzaXRlLWRhdGEt
bWFuYWdlciIsIG1hbmFnZXIsIG51bGxwdHIpKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX2Nv
bnRleHRfZ2V0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyOgorICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0
V2ViQ29udGV4dAorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBvZiBA
Y29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgbm9uZSk6IGEgI1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlcgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK1dlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciogd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcihXZWJL
aXRXZWJDb250ZXh0KiBjb250ZXh0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfQ09OVEVYVChjb250ZXh0KSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gY29udGV4
dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpOworfQorCisvKioKICAqIHdlYmtpdF93
ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWw6CiAgKiBAY29udGV4dDogdGhlICNXZWJLaXRXZWJD
b250ZXh0CiAgKiBAY2FjaGVfbW9kZWw6IGEgI1dlYktpdENhY2hlTW9kZWwKQEAgLTEwMzksMTcg
KzEwODQsMTggQEAgdm9pZCB3ZWJraXRfd2ViX2NvbnRleHRfc2V0X3dlYl9leHRlbnNpb25zX2lu
aXRpYWxpemF0aW9uX3VzZXJfZGF0YShXZWJLaXRXZWJDb24KICAqIFNldCB0aGUgZGlyZWN0b3J5
IHdoZXJlIGRpc2sgY2FjaGUgZmlsZXMgd2lsbCBiZSBzdG9yZWQKICAqIFRoaXMgbWV0aG9kIG11
c3QgYmUgY2FsbGVkIGJlZm9yZSBsb2FkaW5nIGFueXRoaW5nIGluIHRoaXMgY29udGV4dCwgb3Ro
ZXJ3aXNlCiAgKiBpdCB3aWxsIG5vdCBoYXZlIGFueSBlZmZlY3QuCisgKgorICogTm90ZSB0aGF0
IHRoaXMgbWV0aG9kIG92ZXJyaWRlcyB0aGUgZGlyZWN0b3J5IHNldCBpbiB0aGUgI1dlYktpdFdl
YnNpdGVEYXRhTWFuYWdlciwKKyAqIGJ1dCBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgdmFsdWUgcmV0
dXJuZWQgYnkgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVj
dG9yeSgpCisgKiBzaW5jZSB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlciBpcyBpbW11dGFi
bGUuCisgKgorICogRGVwcmVjYXRlZDogMi4xMC4gVXNlIHdlYmtpdF93ZWJfY29udGV4dF9uZXdf
d2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcigpIGluc3RlYWQuCiAgKi8KIHZvaWQgd2Via2l0X3dl
Yl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBjaGFyKiBkaXJlY3RvcnkpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfV0VCX0NPTlRFWFQoY29udGV4dCkpOwogICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGlyZWN0
b3J5KTsKIAotI2lmIEVOQUJMRShORVRXT1JLX0NBQ0hFKQotICAgIHN0YXRpYyBjb25zdCBjaGFy
IG5ldHdvcmtDYWNoZVN1YmRpcmVjdG9yeVtdID0gIldlYktpdENhY2hlIjsKLSNlbHNlCi0gICAg
c3RhdGljIGNvbnN0IGNoYXIgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5W10gPSAid2Via2l0IjsK
LSNlbmRpZgogICAgIGNvbnRleHQtPnByaXYtPmNvbnRleHQtPmNvbmZpZ3VyYXRpb24oKS5zZXRE
aXNrQ2FjaGVEaXJlY3RvcnkoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KFdlYkNv
cmU6OmZpbGVuYW1lVG9TdHJpbmcoZGlyZWN0b3J5KSwgbmV0d29ya0NhY2hlU3ViZGlyZWN0b3J5
KSk7CiB9CiAKQEAgLTEyMzIsOCArMTI3OCw4IEBAIHZvaWQgd2Via2l0V2ViQ29udGV4dENyZWF0
ZVBhZ2VGb3JXZWJWaWV3KFdlYktpdFdlYkNvbnRleHQqIGNvbnRleHQsIFdlYktpdFdlYlZpCiAg
ICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24ucHJlZmVyZW5jZXMgPSB3ZWJraXRTZXR0aW5nc0dldFBy
ZWZlcmVuY2VzKHdlYmtpdF93ZWJfdmlld19nZXRfc2V0dGluZ3Mod2ViVmlldykpOwogICAgIHdl
YlBhZ2VDb25maWd1cmF0aW9uLnJlbGF0ZWRQYWdlID0gcmVsYXRlZFZpZXcgPyB3ZWJraXRXZWJW
aWV3QmFzZUdldFBhZ2UoV0VCS0lUX1dFQl9WSUVXX0JBU0UocmVsYXRlZFZpZXcpKSA6IG51bGxw
dHI7CiAgICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24udXNlckNvbnRlbnRDb250cm9sbGVyID0gdXNl
ckNvbnRlbnRNYW5hZ2VyID8gd2Via2l0VXNlckNvbnRlbnRNYW5hZ2VyR2V0VXNlckNvbnRlbnRD
b250cm9sbGVyUHJveHkodXNlckNvbnRlbnRNYW5hZ2VyKSA6IG51bGxwdHI7Ci0gICAgd2ViUGFn
ZUNvbmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9IGNvbnRleHQtPnByaXYtPndlYnNpdGVE
YXRhU3RvcmUuZ2V0KCk7Ci0gICAgd2ViUGFnZUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklEID0gY29u
dGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZS0+c2Vzc2lvbklEKCk7CisgICAgd2ViUGFnZUNv
bmZpZ3VyYXRpb24ud2Vic2l0ZURhdGFTdG9yZSA9ICZ3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJH
ZXREYXRhU3RvcmUoY29udGV4dC0+cHJpdi0+d2Vic2l0ZURhdGFNYW5hZ2VyLmdldCgpKTsKKyAg
ICB3ZWJQYWdlQ29uZmlndXJhdGlvbi5zZXNzaW9uSUQgPSB3ZWJQYWdlQ29uZmlndXJhdGlvbi53
ZWJzaXRlRGF0YVN0b3JlLT5zZXNzaW9uSUQoKTsKICAgICB3ZWJraXRXZWJWaWV3QmFzZUNyZWF0
ZVdlYlBhZ2Uod2ViVmlld0Jhc2UsIGNvbnRleHQtPnByaXYtPmNvbnRleHQuZ2V0KCksIFdURjo6
bW92ZSh3ZWJQYWdlQ29uZmlndXJhdGlvbikpOwogCiAgICAgV2ViUGFnZVByb3h5KiBwYWdlID0g
d2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKHdlYlZpZXdCYXNlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuaAppbmRleCA4YzQyOGMy
Li40ZGE0NWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViQ29udGV4dC5oCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8d2Via2l0Mi9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNlY3VyaXR5
TWFuYWdlci5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJU2NoZW1lUmVxdWVzdC5oPgor
I2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyLmg+CiAKIEdfQkVHSU5f
REVDTFMKIApAQCAtMTQ4LDYgKzE0OSwxMiBAQCB3ZWJraXRfd2ViX2NvbnRleHRfZ2V0X2RlZmF1
bHQgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRXZWJDb250
ZXh0ICoKIHdlYmtpdF93ZWJfY29udGV4dF9uZXcgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodm9pZCk7CiAKK1dFQktJVF9BUEkgV2ViS2l0V2ViQ29udGV4dCAqCit3ZWJraXRfd2ViX2Nv
bnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIgICAgKFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlciAgICAgICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIgKgord2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlciAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCk7CisKIFdFQktJVF9B
UEkgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q2FjaGVNb2Rl
bCAgICAgICAgICAgICAgIGNhY2hlX21vZGVsKTsKQEAgLTIzNCw3ICsyNDEsNyBAQCBXRUJLSVRf
QVBJIHZvaWQKIHdlYmtpdF93ZWJfY29udGV4dF9wcmVmZXRjaF9kbnMgICAgICAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViQ29udGV4dCAgICAgICAgICAgICAgKmNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAgICAgICpob3N0bmFtZSk7CiAKLVdFQktJVF9BUEkgdm9pZAorV0VCS0lUX0RF
UFJFQ0FURURfRk9SKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFu
YWdlcikgdm9pZAogd2Via2l0X3dlYl9jb250ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeSAg
ICAgICAgIChXZWJLaXRXZWJDb250ZXh0ICAgICAgICAgICAgICAqY29udGV4dCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAgICAgKmRpcmVjdG9yeSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMmM1ZmQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuY3BwCkBAIC0wLDAgKzEsNDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIsMSBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyLmgiCisKKyNpbmNsdWRlICJBUElXZWJzaXRlRGF0YVN0b3JlLmgiCisjaW5j
bHVkZSAiV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYkNv
cmUvRmlsZVN5c3RlbS5oPgorI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioK
KyAqIFNFQ1RJT046IFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICogQFNob3J0X2Rlc2NyaXB0
aW9uOiBXZWJzaXRlIGRhdGEgbWFuYWdlcgorICogQFRpdGxlOiBXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXIKKyAqIEBTZWVfYWxzbzogI1dlYktpdFdlYkNvbnRleHQKKyAqCisgKiBXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdGhlIGRhdGEgdGhhdCB3ZWJzaXRl
cworICogY2FuIHN0b3JlIGluIHRoZSBjbGllbnQgZmlsZSBzeXN0ZW0gbGlrZSBkYXRhYmFzZXMg
b3IgY2FjaGVzLgorICogWW91IGNhbiB1c2UgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIHRvIGNv
bmZpZ3VyZSB0aGUgbG9jYWwgZGlyZWN0b3JpZXMKKyAqIHdoZXJlIHRoZSB3ZWJzaXRlIGRhdGEg
d2lsbCBiZSBzdG9yZWQsIGJ5IGNyZWF0aW5nIGEgbmV3IG1hbmFnZXIgd2l0aAorICogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygpIHBhc3NpbmcgdGhlIHZhbHVlcyB5b3Ugd2FudCB0
byBzZXQuCisgKiBZb3UgY2FuIHNldCBhbGwgdGhlIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb24gdmFs
dWVzIG9yIG9ubHkgc29tZSBvZiB0aGVtLAorICogYSBkZWZhdWx0IHZhbHVlIHdpbGwgYmUgdXNl
ZCBhdXRvbWF0aWNhbGx5IGZvciB0aGUgY29uZm9ndXJhdGlvbiBvcHRpb25zCisgKiBub3QgcHJv
dmlkZWQuICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6YmFzZS1kYXRhLWRpcmVjdG9yeSBhbmQK
KyAqICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6YmFzZS1jYWNoZS1kaXJlY3RvcnkgYXJlIHR3
byBzcGVjaWFsIHByb3BlcnRpZXMKKyAqIHRoYXQgY2FuIGJlIHVzZWQgdG8gc2V0IGEgY29tbW9u
IGJhc2UgZGlyZWN0b3J5IGZvciBhbGwgd2Vic2l0ZSBkYXRhIGFuZAorICogY2FjaGVzLiBJdCdz
IHBvc3NpYmxlIHRvIHByb3ZpZGUgYm90aCwgYSBiYXNlIGRpcmVjdG9yeSBhbmQgYSBzcGVjaWZp
YyB2YWx1ZSwKKyAqIGJ1dCBpbiB0aGF0IGNhc2UsIHRoZSBzcGVjaWZpYyB2YWx1ZSB0YWtlcyBw
cmVjZWRlbmNlIG92ZXIgdGhlIGJhc2UgZGlyZWN0b3J5LgorICogVGhlIG5ld2x5IGNyZWF0ZWQg
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIG11c3QgYmUgcGFzc2VkIGFzIGEgY29uc3RydWN0IHBy
b3BlcnR5CisgKiB0byBhICNXZWJLaXRXZWJDb250ZXh0LCB5b3UgY2FuIHVzZSB3ZWJraXRfd2Vi
X2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIoKQorICogdG8gY3JlYXRlIGEg
bmV3ICNXZWJLaXRXZWJDb250ZXh0IHdpdGggYSBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIuCisg
KiBJbiBjYXNlIHlvdSBkb24ndCB3YW50IHRvIHNldCBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlv
biwgeW91IGRvbid0IG5lZWQgdG8gY3JlYXRlCisgKiBhIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciwgdGhlICNXZWJLaXRXZWJDb250ZXh0IHdpbGwgY3JlYXRlIGEgV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyCisgKiB3aXRoIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFRvIGdldCB0aGUgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyIG9mIGEgI1dlYktpdFdlYkNvbnRleHQKKyAqIHlvdSBjYW4g
dXNlIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIoKS4KKyAqCisg
KiBTaW5jZTogMi4xMAorICovCisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBST1BfQkFT
RV9EQVRBX0RJUkVDVE9SWSwKKyAgICBQUk9QX0JBU0VfQ0FDSEVfRElSRUNUT1JZLAorICAgIFBS
T1BfTE9DQUxfU1RPUkFHRV9ESVJFQ1RPUlksCisgICAgUFJPUF9ESVNLX0NBQ0hFX0RJUkVDVE9S
WSwKKyAgICBQUk9QX0FQUExJQ0FUSU9OX0NBQ0hFX0RJUkVDVE9SWSwKKyAgICBQUk9QX0lOREVY
RUREQl9ESVJFQ1RPUlksCisgICAgUFJPUF9XRUJTUUxfRElSRUNUT1JZCit9OworCitzdHJ1Y3Qg
X1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUgeworICAgIFJlZlB0cjxXZWJzaXRlRGF0
YVN0b3JlPiB3ZWJzaXRlRGF0YVN0b3JlOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gYmFzZURhdGFE
aXJlY3Rvcnk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBiYXNlQ2FjaGVEaXJlY3Rvcnk7CisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBsb2NhbFN0b3JhZ2VEaXJlY3Rvcnk7CisgICAgR1VuaXF1ZVB0cjxj
aGFyPiBkaXNrQ2FjaGVEaXJlY3Rvcnk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlv
bkNhY2hlRGlyZWN0b3J5OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5
OworICAgIEdVbmlxdWVQdHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5OworfTsKKworV0VCS0lUX0RF
RklORV9UWVBFKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciwgd2Via2l0X3dlYnNpdGVfZGF0YV9t
YW5hZ2VyLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1h
bmFnZXJHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpOworCisg
ICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfQkFTRV9EQVRBX0RJUkVDVE9SWToK
KyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X2Jhc2VfZGF0YV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfQkFTRV9DQUNIRV9ESVJFQ1RPUlk6CisgICAgICAgIGdfdmFsdWVfc2V0
X3N0cmluZyh2YWx1ZSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hl
X2RpcmVjdG9yeShtYW5hZ2VyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9MT0NB
TF9TVE9SQUdFX0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KG1h
bmFnZXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RJU0tfQ0FDSEVfRElSRUNU
T1JZOgorICAgICAgICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2Rh
dGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfQVBQTElDQVRJT05fQ0FDSEVfRElSRUNUT1JZOgorICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfSU5ERVhFRERCX0RJUkVDVE9SWToKKyAgICAgICAgZ192
YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2lu
ZGV4ZWRkYl9kaXJlY3RvcnkobWFuYWdlcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfV0VCU1FMX0RJUkVDVE9SWToKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVlLCB3
ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBhcmFtU3BlYyk7CisgICAgfQorfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJTZXRQcm9wZXJ0eShHT2JqZWN0
KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cGFyYW1TcGVjKQoreworICAgIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IFdF
QktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmplY3QpOworCisgICAgc3dpdGNoIChwcm9wSUQp
IHsKKyAgICBjYXNlIFBST1BfQkFTRV9EQVRBX0RJUkVDVE9SWToKKyAgICAgICAgbWFuYWdlci0+
cHJpdi0+YmFzZURhdGFEaXJlY3RvcnkucmVzZXQoZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9CQVNFX0NBQ0hFX0RJUkVDVE9SWToKKyAg
ICAgICAgbWFuYWdlci0+cHJpdi0+YmFzZUNhY2hlRGlyZWN0b3J5LnJlc2V0KGdfdmFsdWVfZHVw
X3N0cmluZyh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTE9DQUxfU1RP
UkFHRV9ESVJFQ1RPUlk6CisgICAgICAgIG1hbmFnZXItPnByaXYtPmxvY2FsU3RvcmFnZURpcmVj
dG9yeS5yZXNldChnX3ZhbHVlX2R1cF9zdHJpbmcodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBQUk9QX0RJU0tfQ0FDSEVfRElSRUNUT1JZOgorICAgICAgICBtYW5hZ2VyLT5wcml2
LT5kaXNrQ2FjaGVEaXJlY3RvcnkucmVzZXQoZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BUFBMSUNBVElPTl9DQUNIRV9ESVJFQ1RPUlk6
CisgICAgICAgIG1hbmFnZXItPnByaXYtPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkucmVzZXQo
Z192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9JTkRFWEVEREJfRElSRUNUT1JZOgorICAgICAgICBtYW5hZ2VyLT5wcml2LT5pbmRleGVkREJE
aXJlY3RvcnkucmVzZXQoZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUFJPUF9XRUJTUUxfRElSRUNUT1JZOgorICAgICAgICBtYW5hZ2VyLT5wcml2
LT53ZWJTUUxEaXJlY3RvcnkucmVzZXQoZ192YWx1ZV9kdXBfc3RyaW5nKHZhbHVlKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9Q
Uk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcGFyYW1TcGVjKTsKKyAgICB9Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckNvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfcGFy
ZW50X2NsYXNzKS0+Y29uc3RydWN0ZWQob2JqZWN0KTsKKworICAgIFdlYktpdFdlYnNpdGVEYXRh
TWFuYWdlclByaXZhdGUqIHByaXYgPSBXRUJLSVRfV0VCU0lURV9EQVRBX01BTkFHRVIob2JqZWN0
KS0+cHJpdjsKKyAgICBpZiAocHJpdi0+YmFzZURhdGFEaXJlY3RvcnkpIHsKKyAgICAgICAgaWYg
KCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgICAgICBwcml2LT5sb2NhbFN0
b3JhZ2VEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShwcml2LT5iYXNlRGF0YURpcmVj
dG9yeS5nZXQoKSwgImxvY2Fsc3RvcmFnZSIsIG51bGxwdHIpKTsKKyAgICAgICAgaWYgKCFwcml2
LT5pbmRleGVkREJEaXJlY3RvcnkpCisgICAgICAgICAgICBwcml2LT5pbmRleGVkREJEaXJlY3Rv
cnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShwcml2LT5iYXNlRGF0YURpcmVjdG9yeS5nZXQoKSwg
ImRhdGFiYXNlcyIsICJpbmRleGVkZGIiLCBudWxscHRyKSk7CisgICAgICAgIGlmICghcHJpdi0+
d2ViU1FMRGlyZWN0b3J5KQorICAgICAgICAgICAgcHJpdi0+d2ViU1FMRGlyZWN0b3J5LnJlc2V0
KGdfYnVpbGRfZmlsZW5hbWUocHJpdi0+YmFzZURhdGFEaXJlY3RvcnkuZ2V0KCksICJkYXRhYmFz
ZXMiLCBudWxscHRyKSk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmJhc2VDYWNoZURpcmVjdG9y
eSkgeworICAgICAgICBpZiAoIXByaXYtPmRpc2tDYWNoZURpcmVjdG9yeSkKKyAgICAgICAgICAg
IHByaXYtPmRpc2tDYWNoZURpcmVjdG9yeS5yZXNldChnX3N0cmR1cChwcml2LT5iYXNlQ2FjaGVE
aXJlY3RvcnkuZ2V0KCkpKTsKKyAgICAgICAgaWYgKCFwcml2LT5hcHBsaWNhdGlvbkNhY2hlRGly
ZWN0b3J5KQorICAgICAgICAgICAgcHJpdi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5yZXNl
dChnX2J1aWxkX2ZpbGVuYW1lKHByaXYtPmJhc2VDYWNoZURpcmVjdG9yeS5nZXQoKSwgImFwcGxp
Y2F0aW9ucyIsIG51bGxwdHIpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF93ZWJz
aXRlX2RhdGFfbWFuYWdlcl9jbGFzc19pbml0KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlckNsYXNz
KiBmaW5kQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnT2JqZWN0Q2xhc3MgPSBHX09CSkVD
VF9DTEFTUyhmaW5kQ2xhc3MpOworCisgICAgZ09iamVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3
ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJHZXRQcm9wZXJ0eTsKKyAgICBnT2JqZWN0Q2xhc3MtPnNl
dF9wcm9wZXJ0eSA9IHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlclNldFByb3BlcnR5OworICAgIGdP
YmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3ZWJraXRXZWJzaXRlRGF0YU1hbmFnZXJDb25zdHJ1
Y3RlZDsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjpiYXNlLWRh
dGEtZGlyZWN0b3J5OgorICAgICAqCisgICAgICogVGhlIGJhc2UgZGlyZWN0b3J5IGZvciBXZWJz
aXRlIGRhdGEuIFRoaXMgaXMgdXNlZCBhcyBhIGJhc2UgZGlyZWN0b3J5CisgICAgICogZm9yIGFu
eSBXZWJzaXRlIGRhdGEgd2hlbiBubyBzcGVjaWZpYyBkYXRhIGRpcmVjdG9yeSBoYXMgYmVlbiBw
cm92aWRlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEwCisgICAgICovCisgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNzLAorICAgICAg
ICBQUk9QX0JBU0VfREFUQV9ESVJFQ1RPUlksCisgICAgICAgIGdfcGFyYW1fc3BlY19zdHJpbmco
CisgICAgICAgICAgICAiYmFzZS1kYXRhLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJCYXNl
IERhdGEgRGlyZWN0b3J5IiksCisgICAgICAgICAgICBfKCJUaGUgYmFzZSBkaXJlY3RvcnkgZm9y
IFdlYnNpdGUgZGF0YSIpLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19QQVJBTV9DT05T
VFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
cjpiYXNlLWNhY2hlLWRpcmVjdG9yeToKKyAgICAgKgorICAgICAqIFRoZSBiYXNlIGRpcmVjdG9y
eSBmb3IgV2Vic2l0ZSBjYWNoZS4gVGhpcyBpcyB1c2VkIGFzIGEgYmFzZSBkaXJlY3RvcnkKKyAg
ICAgKiBmb3IgYW55IFdlYnNpdGUgY2FjaGUgd2hlbiBubyBzcGVjaWZpYyBjYWNoZSBkaXJlY3Rv
cnkgaGFzIGJlZW4gcHJvdmlkZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xMAorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdPYmplY3RD
bGFzcywKKyAgICAgICAgUFJPUF9CQVNFX0NBQ0hFX0RJUkVDVE9SWSwKKyAgICAgICAgZ19wYXJh
bV9zcGVjX3N0cmluZygKKyAgICAgICAgICAgICJiYXNlLWNhY2hlLWRpcmVjdG9yeSIsCisgICAg
ICAgICAgICBfKCJCYXNlIENhY2hlIERpcmVjdG9yeSIpLAorICAgICAgICAgICAgXygiVGhlIGJh
c2UgZGlyZWN0b3J5IGZvciBXZWJzaXRlIGNhY2hlIiksCisgICAgICAgICAgICBudWxscHRyLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyOmxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5OgorICAgICAqCisgICAg
ICogVGhlIGRpcmVjdG9yeSB3aGVyZSBsb2NhbCBzdG9yYWdlIGRhdGEgd2lsbCBiZSBzdG9yZWQu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xMAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdPYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9M
T0NBTF9TVE9SQUdFX0RJUkVDVE9SWSwKKyAgICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygKKyAg
ICAgICAgICAgICJsb2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsCisgICAgICAgICAgICBfKCJMb2Nh
bCBTdG9yYWdlIERpcmVjdG9yeSIpLAorICAgICAgICAgICAgXygiVGhlIGRpcmVjdG9yeSB3aGVy
ZSBsb2NhbCBzdG9yYWdlIGRhdGEgd2lsbCBiZSBzdG9yZWQiKSwKKyAgICAgICAgICAgIG51bGxw
dHIsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oV0VCS0lUX1BBUkFNX1JF
QURXUklURSB8IEdfUEFSQU1fQ09OU1RSVUNUX09OTFkpKSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6ZGlzay1jYWNoZS1kaXJlY3Rvcnk6CisgICAgICoKKyAg
ICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIEhUVFAgZGlzayBjYWNoZSB3aWxsIGJlIHN0b3JlZC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAyLjEwCisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eSgKKyAgICAgICAgZ09iamVjdENsYXNzLAorICAgICAgICBQUk9QX0RJ
U0tfQ0FDSEVfRElSRUNUT1JZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAg
ICAgICAgImRpc2stY2FjaGUtZGlyZWN0b3J5IiwKKyAgICAgICAgICAgIF8oIkRpc2sgQ2FjaGUg
RGlyZWN0b3J5IiksCisgICAgICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIEhUVFAgZGlz
ayBjYWNoZSB3aWxsIGJlIHN0b3JlZCIpLAorICAgICAgICAgICAgbnVsbHB0ciwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihXRUJLSVRfUEFSQU1fUkVBRFdSSVRFIHwgR19Q
QVJBTV9DT05TVFJVQ1RfT05MWSkpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlcjpvZmZsaW5lLWFwcGxpY2F0aW9uLWNhY2hlLWRpcmVjdG9yeToKKyAgICAgKgor
ICAgICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgb2ZmbGluZSB3ZWIgYXBwbGljYXRpb24gY2FjaGUg
d2lsbCBiZSBzdG9yZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xMAorICAgICAqLworICAg
IGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdPYmplY3RDbGFzcywK
KyAgICAgICAgUFJPUF9BUFBMSUNBVElPTl9DQUNIRV9ESVJFQ1RPUlksCisgICAgICAgIGdfcGFy
YW1fc3BlY19zdHJpbmcoCisgICAgICAgICAgICAib2ZmbGluZS1hcHBsaWNhdGlvbi1jYWNoZS1k
aXJlY3RvcnkiLAorICAgICAgICAgICAgXygiT2ZmbGluZSBXZWIgQXBwbGljYXRpb24gQ2FjaGUg
RGlyZWN0b3J5IiksCisgICAgICAgICAgICBfKCJUaGUgZGlyZWN0b3J5IHdoZXJlIG9mZmxpbmUg
d2ViIGFwcGxpY2F0aW9uIGNhY2hlIHdpbGwgYmUgc3RvcmVkIiksCisgICAgICAgICAgICBudWxs
cHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9S
RUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmluZGV4ZWRkYi1kaXJlY3Rvcnk6CisgICAgICoKKyAg
ICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIEluZGV4ZWREQiBkYXRhYmFzZXMgd2lsbCBiZSBzdG9y
ZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMi4xMAorICAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoCisgICAgICAgIGdPYmplY3RDbGFzcywKKyAgICAgICAgUFJP
UF9JTkRFWEVEREJfRElSRUNUT1JZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAg
ICAgICAgICAgImluZGV4ZWRkYi1kaXJlY3RvcnkiLAorICAgICAgICAgICAgXygiSW5kZXhlZERC
IERpcmVjdG9yeSIpLAorICAgICAgICAgICAgXygiVGhlIGRpcmVjdG9yeSB3aGVyZSBJbmRleGVk
REIgZGF0YWJhc2VzIHdpbGwgYmUgc3RvcmVkIiksCisgICAgICAgICAgICBudWxscHRyLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUg
fCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyOndlYnNxbC1kaXJlY3Rvcnk6CisgICAgICoKKyAgICAgKiBUaGUgZGly
ZWN0b3J5IHdoZXJlIFdlYlNRTCBkYXRhYmFzZXMgd2lsbCBiZSBzdG9yZWQuCisgICAgICoKKyAg
ICAgKiBTaW5jZTogMi4xMAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoCisgICAgICAgIGdPYmplY3RDbGFzcywKKyAgICAgICAgUFJPUF9XRUJTUUxfRElSRUNU
T1JZLAorICAgICAgICBnX3BhcmFtX3NwZWNfc3RyaW5nKAorICAgICAgICAgICAgIndlYnNxbC1k
aXJlY3RvcnkiLAorICAgICAgICAgICAgXygiV2ViU1FMIERpcmVjdG9yeSIpLAorICAgICAgICAg
ICAgXygiVGhlIGRpcmVjdG9yeSB3aGVyZSBXZWJTUUwgZGF0YWJhc2VzIHdpbGwgYmUgc3RvcmVk
IiksCisgICAgICAgICAgICBudWxscHRyLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFt
RmxhZ3M+KFdFQktJVF9QQVJBTV9SRUFEV1JJVEUgfCBHX1BBUkFNX0NPTlNUUlVDVF9PTkxZKSkp
OworfQorCitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdl
ckNyZWF0ZShXZWJzaXRlRGF0YVN0b3JlOjpDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikK
K3sKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIgPSBXRUJLSVRfV0VCU0lU
RV9EQVRBX01BTkFHRVIoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5B
R0VSLCBudWxscHRyKSk7CisgICAgbWFuYWdlci0+cHJpdi0+d2Vic2l0ZURhdGFTdG9yZSA9IFdl
YnNpdGVEYXRhU3RvcmU6OmNyZWF0ZShXVEY6Om1vdmUoY29uZmlndXJhdGlvbikpOworCisgICAg
cmV0dXJuIG1hbmFnZXI7Cit9CisKK1dlYnNpdGVEYXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRh
TWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7
CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1hbmFnZXItPnBy
aXY7CisgICAgaWYgKCFwcml2LT53ZWJzaXRlRGF0YVN0b3JlKSB7CisgICAgICAgIFdlYnNpdGVE
YXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKKyAgICAgICAgY29uZmlndXJh
dGlvbi5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkgPSAhcHJpdi0+bG9jYWxTdG9yYWdlRGlyZWN0b3J5
ID8KKyAgICAgICAgICAgIEFQSTo6V2Vic2l0ZURhdGFTdG9yZTo6ZGVmYXVsdExvY2FsU3RvcmFn
ZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhwcml2LT5sb2NhbFN0b3Jh
Z2VEaXJlY3RvcnkuZ2V0KCkpOworICAgICAgICBjb25maWd1cmF0aW9uLm5ldHdvcmtDYWNoZURp
cmVjdG9yeSA9ICFwcml2LT5kaXNrQ2FjaGVEaXJlY3RvcnkgPworICAgICAgICAgICAgQVBJOjpX
ZWJzaXRlRGF0YVN0b3JlOjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCkgOiBXZWJDb3Jl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhwcml2
LT5kaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpLCBuZXR3b3JrQ2FjaGVTdWJkaXJlY3RvcnkpOwor
ICAgICAgICBjb25maWd1cmF0aW9uLmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkgPSAhcHJpdi0+
YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSA/CisgICAgICAgICAgICBBUEk6OldlYnNpdGVEYXRh
U3RvcmU6OmRlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkgOiBXZWJDb3JlOjpmaWxl
bmFtZVRvU3RyaW5nKHByaXYtPmFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpOworICAg
ICAgICBjb25maWd1cmF0aW9uLndlYlNRTERhdGFiYXNlRGlyZWN0b3J5ID0gIXByaXYtPndlYlNR
TERpcmVjdG9yeSA/CisgICAgICAgICAgICBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRX
ZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpIDogV2ViQ29yZTo6ZmlsZW5hbWVUb1N0cmluZyhwcml2
LT53ZWJTUUxEaXJlY3RvcnkuZ2V0KCkpOworICAgICAgICBjb25maWd1cmF0aW9uLm1lZGlhS2V5
c1N0b3JhZ2VEaXJlY3RvcnkgPSBBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRNZWRpYUtl
eXNTdG9yYWdlRGlyZWN0b3J5KCk7CisgICAgICAgIHByaXYtPndlYnNpdGVEYXRhU3RvcmUgPSBX
ZWJzaXRlRGF0YVN0b3JlOjpjcmVhdGUoV1RGOjptb3ZlKGNvbmZpZ3VyYXRpb24pKTsKKyAgICB9
CisKKyAgICByZXR1cm4gKnByaXYtPndlYnNpdGVEYXRhU3RvcmU7Cit9CisKKy8qKgorICogd2Vi
a2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldzoKKyAqIEBmaXJzdF9vcHRpb25fbmFtZTogbmFt
ZSBvZiB0aGUgZmlyc3Qgb3B0aW9uIHRvIHNldAorICogQC4uLjogdmFsdWUgb2YgZmlyc3Qgb3B0
aW9uLCBmb2xsb3dlZCBieSBtb3JlIG9wdGlvbnMsICVOVUxMLXRlcm1pbmF0ZWQKKyAqCisgKiBD
cmVhdGVzIGEgbmV3ICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgd2l0aCB0aGUgZ2l2ZW4gb3B0
aW9ucy4gSXQgbXVzdAorICogYmUgcGFzc2VkIGFzIGNvbnN0cnVjdGlvbiBwYXJhbWV0ZXIgb2Yg
YSAjV2ViS2l0V2ViQ29udGV4dC4KKyAqCisgKiBSZXR1cm5zOiAodHJhbnNmZXIgZnVsbCk6IHRo
ZSBuZXdseSBjcmVhdGVkICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBTaW5jZTog
Mi4xMAorICovCitXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFf
bWFuYWdlcl9uZXcoY29uc3QgZ2NoYXIqIGZpcnN0T3B0aW9uTmFtZSwgLi4uKQoreworICAgIHZh
X2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmaXJzdE9wdGlvbk5hbWUpOworICAgIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlciA9IFdFQktJVF9XRUJTSVRFX0RBVEFfTUFO
QUdFUihnX29iamVjdF9uZXdfdmFsaXN0KFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VS
LCBmaXJzdE9wdGlvbk5hbWUsIGFyZ3MpKTsKKyAgICB2YV9lbmQoYXJncyk7CisKKyAgICByZXR1
cm4gbWFuYWdlcjsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2Jhc2VfZGF0YV9kaXJlY3Rvcnk6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyOmJhc2UtZGF0
YS1kaXJlY3RvcnkgcHJvcGVydHkuCisgKgorICogUmV0dXJuczogdGhlIGJhc2UgZGlyZWN0b3J5
IGZvciBXZWJzaXRlIGRhdGEsIG9yICVOVUxMIGlmCisgKiAgICAjV2ViS2l0V2Vic2l0ZURhdGFN
YW5hZ2VyOmJhc2UtZGF0YS1kaXJlY3Rvcnkgd2FzIG5vdCBwcm92aWRlZC4KKyAqCisgKiBTaW5j
ZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF9iYXNlX2RhdGFfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFH
RVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgcmV0dXJuIG1hbmFnZXItPnByaXYtPmJhc2VE
YXRhRGlyZWN0b3J5LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFu
YWdlcl9nZXRfYmFzZV9jYWNoZV9kaXJlY3Rvcnk6CisgKiBAbWFuYWdlcjogYSAjV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyCisgKgorICogR2V0IHRoZSAjV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2Vy
OmJhc2UtY2FjaGUtZGlyZWN0b3J5IHByb3BlcnR5LgorICoKKyAqIFJldHVybnM6IHRoZSBiYXNl
IGRpcmVjdG9yeSBmb3IgV2Vic2l0ZSBjYWNoZSwgb3IgJU5VTEwgaWYKKyAqICAgICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXI6YmFzZS1jYWNoZS1kaXJlY3Rvcnkgd2FzIG5vdCBwcm92aWRlZC4K
KyAqCisgKiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQlNJ
VEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIHJldHVybiBtYW5hZ2Vy
LT5wcml2LT5iYXNlQ2FjaGVEaXJlY3RvcnkuZ2V0KCk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
YnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeToKKyAqIEBtYW5h
Z2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRX
ZWJzaXRlRGF0YU1hbmFnZXI6bG9jYWwtc3RvcmFnZS1kaXJlY3RvcnkgcHJvcGVydHkuCisgKgor
ICogUmV0dXJuczogdGhlIGRpcmVjdG9yeSB3aGVyZSBsb2NhbCBzdG9yYWdlIGRhdGEgaXMgc3Rv
cmVkLgorICoKKyAqIFNpbmNlOiAyLjEwCisgKi8KK2NvbnN0IGdjaGFyKiB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVE
YXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1hbmFnZXItPnByaXY7CisgICAgaWYg
KCFwcml2LT5sb2NhbFN0b3JhZ2VEaXJlY3RvcnkpCisgICAgICAgIHByaXYtPmxvY2FsU3RvcmFn
ZURpcmVjdG9yeS5yZXNldChnX3N0cmR1cChBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRM
b2NhbFN0b3JhZ2VEaXJlY3RvcnkoKS51dGY4KCkuZGF0YSgpKSk7CisgICAgcmV0dXJuIHByaXYt
PmxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKTsKK30KKworLyoqCisgKiB3ZWJraXRfd2Vic2l0
ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5OgorICogQG1hbmFnZXI6IGEg
I1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgorICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVE
YXRhTWFuYWdlcjpkaXNrLWNhY2hlLWRpcmVjdG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgZGlyZWN0b3J5IHdoZXJlIEhUVFAgZGlzayBjYWNoZSBpcyBzdG9yZWQuCisgKgorICog
U2luY2U6IDIuMTAKKyAqLworY29uc3QgZ2NoYXIqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBtYW5h
Z2VyKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJTSVRFX0RBVEFf
TUFOQUdFUihtYW5hZ2VyKSwgbnVsbHB0cik7CisKKyAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFn
ZXJQcml2YXRlKiBwcml2ID0gbWFuYWdlci0+cHJpdjsKKyAgICBpZiAoIXByaXYtPmRpc2tDYWNo
ZURpcmVjdG9yeSkgeworICAgICAgICAvLyBUaGUgZGVmYXVsdCBkaXJlY3RvcnkgYWxyZWFkeSBo
YXMgdGhlIHN1YmRpcmVjdG9yeS4KKyAgICAgICAgcHJpdi0+ZGlza0NhY2hlRGlyZWN0b3J5LnJl
c2V0KGdfc3RyZHVwKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUoQVBJOjpXZWJzaXRlRGF0YVN0b3Jl
OjpkZWZhdWx0TmV0d29ya0NhY2hlRGlyZWN0b3J5KCkpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICB9
CisgICAgcmV0dXJuIHByaXYtPmRpc2tDYWNoZURpcmVjdG9yeS5nZXQoKTsKK30KKworLyoqCisg
KiB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25fY2Fj
aGVfZGlyZWN0b3J5OgorICogQG1hbmFnZXI6IGEgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcgor
ICoKKyAqIEdldCB0aGUgI1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlcjpvZmZsaW5lLWFwcGxpY2F0
aW9uLWNhY2hlLWRpcmVjdG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGlyZWN0
b3J5IHdoZXJlIG9mZmxpbmUgd2ViIGFwcGxpY2F0aW9uIGNhY2hlIGlzIHN0b3JlZC4KKyAqCisg
KiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShXZWJLaXRXZWJzaXRl
RGF0YU1hbmFnZXIqIG1hbmFnZXIpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG1hbmFnZXIpLCBudWxscHRyKTsKKworICAgIFdlYktp
dFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUqIHByaXYgPSBtYW5hZ2VyLT5wcml2OworICAgIGlm
ICghcHJpdi0+YXBwbGljYXRpb25DYWNoZURpcmVjdG9yeSkKKyAgICAgICAgcHJpdi0+YXBwbGlj
YXRpb25DYWNoZURpcmVjdG9yeS5yZXNldChnX3N0cmR1cChBUEk6OldlYnNpdGVEYXRhU3RvcmU6
OmRlZmF1bHRBcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KCkudXRmOCgpLmRhdGEoKSkpOworICAg
IHJldHVybiBwcml2LT5hcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5LmdldCgpOworfQorCisvKioK
KyAqIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfaW5kZXhlZGRiX2RpcmVjdG9yeToK
KyAqIEBtYW5hZ2VyOiBhICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBHZXQgdGhl
ICNXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI6aW5kZXhlZGRiLWRpcmVjdG9yeSBwcm9wZXJ0eS4K
KyAqCisgKiBSZXR1cm5zOiB0aGUgZGlyZWN0b3J5IHdoZXJlIEluZGV4ZWREQiBkYXRhYmFzZXMg
YXJlIHN0b3JlZC4KKyAqCisgKiBTaW5jZTogMi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5KFdlYktpdFdlYnNp
dGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFuYWdlciksIG51bGxwdHIpOworCisgICAgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSogcHJpdiA9IG1hbmFnZXItPnByaXY7CisgICAg
aWYgKCFwcml2LT5pbmRleGVkREJEaXJlY3RvcnkpCisgICAgICAgIHByaXYtPmluZGV4ZWREQkRp
cmVjdG9yeS5yZXNldChnX3N0cmR1cChBUEk6OldlYnNpdGVEYXRhU3RvcmU6OmRlZmF1bHRJbmRl
eGVkREJEYXRhYmFzZURpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICByZXR1cm4gcHJp
di0+aW5kZXhlZERCRGlyZWN0b3J5LmdldCgpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJzaXRl
X2RhdGFfbWFuYWdlcl9nZXRfd2Vic3FsX2RpcmVjdG9yeToKKyAqIEBtYW5hZ2VyOiBhICNXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIKKyAqCisgKiBHZXQgdGhlICNXZWJLaXRXZWJzaXRlRGF0YU1h
bmFnZXI6d2Vic3FsLWRpcmVjdG9yeSBwcm9wZXJ0eS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGly
ZWN0b3J5IHdoZXJlIFdlYlNRTCBkYXRhYmFzZXMgYXJlIHN0b3JlZC4KKyAqCisgKiBTaW5jZTog
Mi4xMAorICovCitjb25zdCBnY2hhciogd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93
ZWJzcWxfZGlyZWN0b3J5KFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciogbWFuYWdlcikKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01BTkFHRVIobWFu
YWdlciksIG51bGxwdHIpOworCisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZSog
cHJpdiA9IG1hbmFnZXItPnByaXY7CisgICAgaWYgKCFwcml2LT53ZWJTUUxEaXJlY3RvcnkpCisg
ICAgICAgIHByaXYtPndlYlNRTERpcmVjdG9yeS5yZXNldChnX3N0cmR1cChBUEk6OldlYnNpdGVE
YXRhU3RvcmU6OmRlZmF1bHRXZWJTUUxEYXRhYmFzZURpcmVjdG9yeSgpLnV0ZjgoKS5kYXRhKCkp
KTsKKyAgICByZXR1cm4gcHJpdi0+d2ViU1FMRGlyZWN0b3J5LmdldCgpOworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURhdGFNYW5h
Z2VyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWQ4NTkxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyLmgKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyLDEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAm
JiAhZGVmaW5lZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dl
YmtpdDIuaD4gY2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdl
YktpdFdlYnNpdGVEYXRhTWFuYWdlcl9oCisjZGVmaW5lIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
cl9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
RGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfV0VCU0lU
RV9EQVRBX01BTkFHRVIgICAgICAgICAgICAod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dl
dF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUihvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9XRUJT
SVRFX0RBVEFfTUFOQUdFUiwgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1dFQlNJVEVfREFUQV9NQU5BR0VSKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lO
U1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSKSkKKyNk
ZWZpbmUgV0VCS0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBF
X0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5B
R0VSLCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19X
RUJTSVRFX0RBVEFfTUFOQUdFUl9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUikpCisjZGVmaW5lIFdF
QktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9HRVRfQ0xBU1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9XRUJTSVRFX0RBVEFfTUFOQUdFUiwgV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyICAgICAgICBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyQ2xhc3MgICBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXJDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQ
cml2YXRlIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0
V2Vic2l0ZURhdGFNYW5hZ2VyIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlclByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFdlYnNp
dGVEYXRhTWFuYWdlckNsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50X2NsYXNzOworCisg
ICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRf
cmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7
CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJ
IEdUeXBlCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3R5cGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh2b2lkKTsKKworV0VCS0lUX0FQSSBXZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgZ2NoYXIgICAgICAgICAgICAgICpmaXJzdF9v
cHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CitXRUJLSVRfQVBJIGNvbnN0IGdjaGFyICoK
K3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFzZV9kYXRhX2RpcmVjdG9yeSAgICAg
ICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlciAqbWFuYWdlcik7CisKK1dFQktJ
VF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNl
X2NhY2hlX2RpcmVjdG9yeSAgICAgICAgICAgICAgICAgKFdlYktpdFdlYnNpdGVEYXRhTWFuYWdl
ciAqbWFuYWdlcik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNpdGVf
ZGF0YV9tYW5hZ2VyX2dldF9sb2NhbF9zdG9yYWdlX2RpcmVjdG9yeSAgICAgICAgICAgICAoV2Vi
S2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBjb25zdCBnY2hh
ciAqCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOworCitX
RUJLSVRfQVBJIGNvbnN0IGdjaGFyICoKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRf
b2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkgKFdlYktpdFdlYnNpdGVEYXRhTWFu
YWdlciAqbWFuYWdlcik7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0b3J5ICAgICAgICAgICAgICAgICAo
V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyICptYW5hZ2VyKTsKKworV0VCS0lUX0FQSSBjb25zdCBn
Y2hhciAqCit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3Rvcnkg
ICAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgKm1hbmFnZXIpOwor
CitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGE3ODIzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXJQcml2YXRl
X2gKKyNkZWZpbmUgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyUHJpdmF0ZV9oCisKKyNpbmNsdWRl
ICJXZWJLaXRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2Vic2l0ZURhdGFTdG9yZS5oIgorCitXZWJL
aXRXZWJzaXRlRGF0YU1hbmFnZXIqIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckNyZWF0ZShXZWJL
aXQ6OldlYnNpdGVEYXRhU3RvcmU6OkNvbmZpZ3VyYXRpb24mJik7CitXZWJLaXQ6OldlYnNpdGVE
YXRhU3RvcmUmIHdlYmtpdFdlYnNpdGVEYXRhTWFuYWdlckdldERhdGFTdG9yZShXZWJLaXRXZWJz
aXRlRGF0YU1hbmFnZXIqKTsKKworI2VuZGlmIC8vIFdlYktpdFdlYnNpdGVEYXRhTWFuYWdlclBy
aXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLTQuMC1zZWN0aW9ucy50eHQgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCBlNTAyYmQ3Li5j
ZDg3MGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMjksNiArMjks
OCBAQCBXZWJLaXRQcm9jZXNzTW9kZWwKIFdlYktpdFRMU0Vycm9yc1BvbGljeQogd2Via2l0X3dl
Yl9jb250ZXh0X2dldF9kZWZhdWx0CiB3ZWJraXRfd2ViX2NvbnRleHRfbmV3Cit3ZWJraXRfd2Vi
X2NvbnRleHRfbmV3X3dpdGhfd2Vic2l0ZV9kYXRhX21hbmFnZXIKK3dlYmtpdF93ZWJfY29udGV4
dF9nZXRfd2Vic2l0ZV9kYXRhX21hbmFnZXIKIHdlYmtpdF93ZWJfY29udGV4dF9nZXRfY2FjaGVf
bW9kZWwKIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfY2FjaGVfbW9kZWwKIHdlYmtpdF93ZWJfY29u
dGV4dF9jbGVhcl9jYWNoZQpAQCAtMTE0Nyw2ICsxMTQ5LDMyIEBAIHdlYmtpdF9zZWN1cml0eV9t
YW5hZ2VyX2dldF90eXBlCiA8L1NFQ1RJT04+CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0V2Vi
c2l0ZURhdGFNYW5hZ2VyPC9GSUxFPgorV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyCit3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3Cit3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0
X2Jhc2VfZGF0YV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfYmFz
ZV9jYWNoZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxf
c3RvcmFnZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19j
YWNoZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9h
cHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkKK3dlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfaW5kZXhlZGRiX2RpcmVjdG9yeQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93
ZWJzcWxfZGlyZWN0b3J5CisKKzxTVUJTRUNUSU9OIFN0YW5kYXJkPgorV2ViS2l0V2Vic2l0ZURh
dGFNYW5hZ2VyQ2xhc3MKK1dFQktJVF9UWVBFX1dFQlNJVEVfREFUQV9NQU5BR0VSCitXRUJLSVRf
V0VCU0lURV9EQVRBX01BTkFHRVIKK1dFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUgorV0VC
S0lUX1dFQlNJVEVfREFUQV9NQU5BR0VSX0NMQVNTCitXRUJLSVRfSVNfV0VCU0lURV9EQVRBX01B
TkFHRVJfQ0xBU1MKK1dFQktJVF9XRUJTSVRFX0RBVEFfTUFOQUdFUl9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFdlYnNpdGVEYXRhTWFuYWdlclByaXZhdGUKK3dlYmtp
dF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4K
IDxGSUxFPldlYktpdFdlYkV4dGVuc2lvbjwvRklMRT4KIFdlYktpdFdlYkV4dGVuc2lvbgogV2Vi
S2l0V2ViRXh0ZW5zaW9uSW5pdGlhbGl6ZUZ1bmN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQuMC50eXBlcwppbmRl
eCA4MTlhZjU4Li5iNTI2NDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9kb2NzL3dlYmtpdDJndGstNC4wLnR5cGVzCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAudHlwZXMKQEAgLTI5LDMgKzI5LDQg
QEAgd2Via2l0X2ZyYW1lX2dldF90eXBlCiB3ZWJraXRfY2VydGlmaWNhdGVfaW5mb19nZXRfdHlw
ZQogd2Via2l0X3VzZXJfY29udGVudF9tYW5hZ2VyX2dldF90eXBlCiB3ZWJraXRfd2ViX2hpdF90
ZXN0X3Jlc3VsdF9nZXRfdHlwZQord2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF90eXBl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZDliYzky
MC4uMTQzNzFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
d2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIu
aApAQCAtNzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViUmVzb3VyY2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYlZpZXdCYXNlLmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJzaXRlRGF0
YU1hbmFnZXIuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4K
IAogI3VuZGVmIF9fV0VCS0lUMl9IX0lOU0lERV9fCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZWU5NzQxYy4uMTIyMDVhYiAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisy
MDE1LTA2LTE5ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwor
ICAgICAgICBbR1RLXSBBZGQgaW5pdGlhbCBXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXIgQVBJIGZv
ciBwcm9jZXNzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2MTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHVuaXQgdGVzdHMgdG8gdXNlIFdlYktpdFdl
YnNpdGVEYXRhTWFuYWdlci4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHA6CisgICAgICAgICh0ZXN0V2ViQ29udGV4dENv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAqIFRlc3RX
ZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaDoKKyAgICAgICAgKFRlc3Q6OlRlc3Qp
OiBVc2UgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyIGFuZCBzZXQgYWxsIHBvc3NpYmxlCisgICAg
ICAgIHZhbHVlcyB0byBlbnN1cmUgdW5pdCB0ZXN0cyBkb24ndCB3cml0ZSBvdXRzaWRlIHRoZSB0
ZW1wb3JhcnkgZGlyZWN0b3J5LgorICAgICAgICAoVGVzdDo6flRlc3QpOiBFeHBsaWNpdGx5IHJl
c2V0IHRoZSB3ZWIgY29udGV4dCB0byBlbnN1cmUgaXRzCisgICAgICAgIG9iamVjdHMgYXJlIHJl
bGVhc2VkIGJlZm9yZSB0aGUgbGVha3MgY2hlY2suCisgICAgICAgICogVGVzdFdlYktpdEFQSS9n
dGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5jcHA6CisgICAgICAgIChXZWJWaWV3VGVzdDo6d2Fp
dCk6IEZpeCB0aGUgR1NvdXJjZSB1c2VkLCBzaW5jZSB3ZSBhcmUgcmVjZWl2aW5nCisgICAgICAg
IGEgZG91YmxlIGluIHNlY29uZHMsIGJ1dCB1c2luZyBnX3RpbWVvdXRfYWRkX3NlY29uZHMoKSB0
aGF0CisgICAgICAgIGV4cGVjdHMgYW4gdW5zaWduZWQgaW4gc2Vjb25kcy4gVXNlIEdNYWluTG9v
cFNvdXJjZSB0byBjb3JyZWN0bHkKKyAgICAgICAgaGFuZGxlIHRoZSB2YWx1ZSBhbmQgc2ltcGxp
ZnkgdGhlIGNvZGUuCisKIDIwMTUtMDYtMjMgIENzYWJhIE9zenRyb2dvbsOhYyAgPG9zc3lAd2Vi
a2l0Lm9yZz4KIAogICAgICAgICBbRUZMXSBBZGQgbGliaHlwaGVuLWRldiBhcyBkZXBlbmRlbmN5
IGFmdGVyIHIxODU4NjIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0Mkd0ay9UZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdDJHdGsvVGVzdFdlYktpdFdlYkNvbnRleHQuY3BwCmluZGV4IGQ4ZTIxYjcuLmZl
YjdmZjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9U
ZXN0V2ViS2l0V2ViQ29udGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXQyR3RrL1Rlc3RXZWJLaXRXZWJDb250ZXh0LmNwcApAQCAtMzksMTQgKzM5LDg2IEBAIHN0
YXRpYyB2b2lkIHRlc3RXZWJDb250ZXh0RGVmYXVsdChUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogCiBzdGF0aWMgdm9pZCB0ZXN0V2ViQ29udGV4dENvbmZpZ3VyYXRpb24oV2ViVmlld1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CisgICAgV2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyKiBt
YW5hZ2VyID0gd2Via2l0X3dlYl9jb250ZXh0X2dldF93ZWJzaXRlX2RhdGFfbWFuYWdlcih0ZXN0
LT5tX3dlYkNvbnRleHQuZ2V0KCkpOworICAgIGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RB
VEFfTUFOQUdFUihtYW5hZ2VyKSk7CisgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChtYW5hZ2VyKSk7CisKKyAgICAvLyBCYXNlIGRpcmVjdG9y
aWVzIGFyZSBub3QgdXNlZCBieSBUZXN0TWFpbi4KKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2RhdGFfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBn
X2Fzc2VydCghd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9iYXNlX2NhY2hlX2RpcmVj
dG9yeShtYW5hZ2VyKSk7CisKICAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3RvcmFnZURpcmVj
dG9yeShnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImxvY2FsLXN0b3Jh
Z2UiLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGxvY2FsU3RvcmFnZURpcmVjdG9y
eS5nZXQoKSwgPT0sIHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFn
ZV9kaXJlY3RvcnkobWFuYWdlcikpOwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGxvY2FsU3Rv
cmFnZURpcmVjdG9yeS5nZXQoKSwgR19GSUxFX1RFU1RfSVNfRElSKSk7CiAKICAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9lbXB0eSIpLmRhdGEoKSk7CiAgICAgdGVz
dC0+d2FpdFVudGlsTG9hZEZpbmlzaGVkKCk7CiAgICAgdGVzdC0+cnVuSmF2YVNjcmlwdEFuZFdh
aXRVbnRpbEZpbmlzaGVkKCJ3aW5kb3cuaW5kZXhlZERCLm9wZW4oJ1Rlc3REYXRhYmFzZScpOyIs
IG51bGxwdHIpOwogICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGlyZWN0b3J5KGdfYnVp
bGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhlZGRiIiwgbnVsbHB0cikp
OworICAgIGdfYXNzZXJ0X2NtcHN0cihpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJr
aXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkobWFuYWdlcikp
OwogICAgIGdfYXNzZXJ0KGdfZmlsZV90ZXN0KGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgR19G
SUxFX1RFU1RfSVNfRElSKSk7CisKKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9hcHBjYWNoZSIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsTG9hZEZpbmlz
aGVkKCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBhcHBsaWNhdGlvbkNhY2hlRGlyZWN0b3J5KGdf
YnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAiYXBwY2FjaGUiLCBudWxscHRy
KSk7CisgICAgZ19hc3NlcnRfY21wc3RyKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCks
ID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X29mZmxpbmVfYXBwbGljYXRpb25f
Y2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGFwcGxpY2F0
aW9uQ2FjaGVEYXRhYmFzZShnX2J1aWxkX2ZpbGVuYW1lKGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3Rv
cnkuZ2V0KCksICJBcHBsaWNhdGlvbkNhY2hlLmRiIiwgbnVsbHB0cikpOworICAgIHVuc2lnbmVk
IHRyaWVzQ291bnQgPSA0OworICAgIHdoaWxlICghZ19maWxlX3Rlc3QoYXBwbGljYXRpb25DYWNo
ZURhdGFiYXNlLmdldCgpLCBHX0ZJTEVfVEVTVF9JU19SRUdVTEFSKSAmJiAtLXRyaWVzQ291bnQp
CisgICAgICAgIHRlc3QtPndhaXQoMC4yNSk7CisgICAgZ19hc3NlcnQodHJpZXNDb3VudCk7CisK
KworICAgIEdVbmlxdWVQdHI8Y2hhcj4gd2ViU1FMRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUo
VGVzdDo6ZGF0YURpcmVjdG9yeSgpLCAid2Vic3FsIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJTUUxEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21h
bmFnZXJfZ2V0X3dlYnNxbF9kaXJlY3RvcnkobWFuYWdlcikpOworI2lmIDAgLy8gRklYTUU6IFdl
IG5lZWQgQVBJIHRvIHNldCB0aGUgZGF0YWJhc2UgcXVvdGEgZm9yIGFuIG9yaWdpbiB0byBiZSBh
YmxlIHRvIHRlc3QgdGhpcy4KKyAgICB0ZXN0LT5ydW5KYXZhU2NyaXB0QW5kV2FpdFVudGlsRmlu
aXNoZWQoImRiID0gb3BlbkRhdGFiYXNlKFwiVGVzdERhdGFiYXNlXCIsIFwiMS4wXCIsIFwiVGVz
dERhdGFiYXNlXCIsIDEpOyIsICZlcnJvcik7CisgICAgZ19hc3NlcnQoZ19maWxlX3Rlc3Qod2Vi
U1FMRGlyZWN0b3J5LmdldCgpLCBHX0ZJTEVfVEVTVF9JU19ESVIpKTsKKyNlbmRpZgorCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBkaXNrQ2FjaGVEaXJlY3RvcnkoZ19idWlsZF9maWxlbmFtZShUZXN0
OjpkYXRhRGlyZWN0b3J5KCksICJkaXNrLWNhY2hlIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0
X2NtcHN0cihkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksID09LCB3ZWJraXRfd2Vic2l0ZV9kYXRh
X21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KG1hbmFnZXIpKTsKKyAgICBnX2Fzc2Vy
dChnX2ZpbGVfdGVzdChkaXNrQ2FjaGVEaXJlY3RvcnkuZ2V0KCksIEdfRklMRV9URVNUX0lTX0RJ
UikpOworCisgICAgLy8gVGhlIGRlZmF1bHQgY29udGV4dCBzaG91bGQgaGF2ZSBhIGRpZmZlcmVu
dCBtYW5hZ2VyIHdpdGggZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24uCisgICAgV2ViS2l0V2Vic2l0
ZURhdGFNYW5hZ2VyKiBkZWZhdWx0TWFuYWdlciA9IHdlYmtpdF93ZWJfY29udGV4dF9nZXRfd2Vi
c2l0ZV9kYXRhX21hbmFnZXIod2Via2l0X3dlYl9jb250ZXh0X2dldF9kZWZhdWx0KCkpOworICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19XRUJTSVRFX0RBVEFfTUFOQUdFUihkZWZhdWx0TWFuYWdlcikp
OworICAgIGdfYXNzZXJ0KG1hbmFnZXIgIT0gZGVmYXVsdE1hbmFnZXIpOworICAgIGdfYXNzZXJ0
X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGly
ZWN0b3J5KG1hbmFnZXIpLCAhPSwgd2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9sb2Nh
bF9zdG9yYWdlX2RpcmVjdG9yeShkZWZhdWx0TWFuYWdlcikpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJlY3RvcnkobWFu
YWdlciksICE9LCB3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9kaXJl
Y3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNp
dGVfZGF0YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgIT0sIHdl
YmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfZGlza19jYWNoZV9kaXJlY3RvcnkoZGVmYXVs
dE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5h
Z2VyX2dldF9vZmZsaW5lX2FwcGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShtYW5hZ2VyKSwgIT0s
IHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNo
ZV9kaXJlY3RvcnkoZGVmYXVsdE1hbmFnZXIpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0
X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KG1hbmFnZXIpLCAhPSwg
d2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF93ZWJzcWxfZGlyZWN0b3J5KGRlZmF1bHRN
YW5hZ2VyKSk7CisKKyAgICAvLyBVc2luZyBUZXN0OjpkYXRhRGlyZWN0b3J5KCkgd2UgZ2V0IHRo
ZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYnV0IGZvciBhIGRpZmZlcnJlbnQgcHJlZml4LgorICAg
IEdSZWZQdHI8V2ViS2l0V2Vic2l0ZURhdGFNYW5hZ2VyPiBiYXNlRGF0YU1hbmFnZXIgPSBhZG9w
dEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygiYmFzZS1kYXRhLWRpcmVjdG9y
eSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImJhc2UtY2FjaGUtZGlyZWN0b3J5IiwgVGVzdDo6
ZGF0YURpcmVjdG9yeSgpLCBudWxscHRyKSk7CisgICAgZ19hc3NlcnQoV0VCS0lUX0lTX1dFQlNJ
VEVfREFUQV9NQU5BR0VSKGJhc2VEYXRhTWFuYWdlci5nZXQoKSkpOworCisgICAgbG9jYWxTdG9y
YWdlRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9yeSgp
LCAibG9jYWxzdG9yYWdlIiwgbnVsbHB0cikpOworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRf
d2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2xvY2FsX3N0b3JhZ2VfZGlyZWN0b3J5KGJhc2VEYXRh
TWFuYWdlci5nZXQoKSksID09LCBsb2NhbFN0b3JhZ2VEaXJlY3RvcnkuZ2V0KCkpOworCisgICAg
aW5kZXhlZERCRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVj
dG9yeSgpLCAiZGF0YWJhc2VzIiwgImluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyAgICBnX2Fzc2Vy
dF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9pbmRleGVkZGJfZGlyZWN0
b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQoKSksID09LCBpbmRleGVkREJEaXJlY3RvcnkuZ2V0KCkp
OworCisgICAgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5yZXNldChnX2J1aWxkX2ZpbGVuYW1l
KFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImFwcGxpY2F0aW9ucyIsIG51bGxwdHIpKTsKKyAgICBn
X2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX2dldF9vZmZsaW5lX2Fw
cGxpY2F0aW9uX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgYXBw
bGljYXRpb25DYWNoZURpcmVjdG9yeS5nZXQoKSk7CisKKyAgICB3ZWJTUUxEaXJlY3RvcnkucmVz
ZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGlyZWN0b3J5KCksICJkYXRhYmFzZXMiLCBu
dWxscHRyKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfd2Vic3FsX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgd2ViU1FM
RGlyZWN0b3J5LmdldCgpKTsKKworICAgIGdfYXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9k
YXRhX21hbmFnZXJfZ2V0X2Rpc2tfY2FjaGVfZGlyZWN0b3J5KGJhc2VEYXRhTWFuYWdlci5nZXQo
KSksID09LCBUZXN0OjpkYXRhRGlyZWN0b3J5KCkpOworCisgICAgLy8gQW55IHNwZWNpZmljIGNv
bmZpZ3VyYXRpb24gcHJvdmlkZWQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIGJhc2UgZGlycy4KKyAg
ICBpbmRleGVkREJEaXJlY3RvcnkucmVzZXQoZ19idWlsZF9maWxlbmFtZShUZXN0OjpkYXRhRGly
ZWN0b3J5KCksICJteWN1c3RvbWluZGV4ZWRkYiIsIG51bGxwdHIpKTsKKyAgICBhcHBsaWNhdGlv
bkNhY2hlRGlyZWN0b3J5LnJlc2V0KGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6ZGF0YURpcmVjdG9y
eSgpLCAibXljdXN0b21hcHBjYWNoZSIsIG51bGxwdHIpKTsKKyAgICBiYXNlRGF0YU1hbmFnZXIg
PSBhZG9wdEdSZWYod2Via2l0X3dlYnNpdGVfZGF0YV9tYW5hZ2VyX25ldygiYmFzZS1kYXRhLWRp
cmVjdG9yeSIsIFRlc3Q6OmRhdGFEaXJlY3RvcnkoKSwgImJhc2UtY2FjaGUtZGlyZWN0b3J5Iiwg
VGVzdDo6ZGF0YURpcmVjdG9yeSgpLAorICAgICAgICAiaW5kZXhlZGRiLWRpcmVjdG9yeSIsIGlu
ZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwgIm9mZmxpbmUtYXBwbGljYXRpb24tY2FjaGUtZGlyZWN0
b3J5IiwgYXBwbGljYXRpb25DYWNoZURpcmVjdG9yeS5nZXQoKSwgbnVsbHB0cikpOworICAgIGdf
YXNzZXJ0X2NtcHN0cih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfZ2V0X2luZGV4ZWRkYl9k
aXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwgPT0sIGluZGV4ZWREQkRpcmVjdG9yeS5n
ZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9n
ZXRfb2ZmbGluZV9hcHBsaWNhdGlvbl9jYWNoZV9kaXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdl
dCgpKSwgPT0sIGFwcGxpY2F0aW9uQ2FjaGVEaXJlY3RvcnkuZ2V0KCkpOworICAgIC8vIFRoZSBy
ZXN1dGwgc2hvdWxkIGJlIHRoZSBzYW1lIGFzIHByZXZpb3VzIG1hbmFnZXIuCisgICAgZ19hc3Nl
cnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdlcl9nZXRfbG9jYWxfc3RvcmFnZV9k
aXJlY3RvcnkoYmFzZURhdGFNYW5hZ2VyLmdldCgpKSwgPT0sIGxvY2FsU3RvcmFnZURpcmVjdG9y
eS5nZXQoKSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJzaXRlX2RhdGFfbWFuYWdl
cl9nZXRfd2Vic3FsX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkpLCA9PSwgd2ViU1FM
RGlyZWN0b3J5LmdldCgpKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIod2Via2l0X3dlYnNpdGVfZGF0
YV9tYW5hZ2VyX2dldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShiYXNlRGF0YU1hbmFnZXIuZ2V0KCkp
LCA9PSwgVGVzdDo6ZGF0YURpcmVjdG9yeSgpKTsKIH0KIAogY2xhc3MgUGx1Z2luc1Rlc3Q6IHB1
YmxpYyBUZXN0IHsKQEAgLTM1MSw2ICs0MjMsMjAgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioK
ICAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgZW1wdHlIVE1MLCBzdHJsZW4oZW1wdHlIVE1MKSk7CiAgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOwog
ICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7
CisgICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2FwcGNhY2hlIikpIHsKKyAgICAg
ICAgY29uc3QgY2hhciogYXBwY2FjaGVIVE1MID0gIjxodG1sIG1hbmlmZXN0PWFwcGNhY2hlLm1h
bmlmZXN0Pjxib2R5PjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlf
YXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgYXBwY2Fj
aGVIVE1MLCBzdHJsZW4oYXBwY2FjaGVIVE1MKSk7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5
X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisgICAgfSBlbHNlIGlmIChnX3N0
cl9lcXVhbChwYXRoLCAiL2FwcGNhY2hlLm1hbmlmZXN0IikpIHsKKyAgICAgICAgY29uc3QgY2hh
ciogYXBwY2FjaGVNYW5pZmVzdCA9ICJDQUNIRSBNQU5JRkVTVFxuQ0FDSEU6XG5hcHBjYWNoZS9m
b28udHh0XG4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVz
cG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBhcHBjYWNoZU1hbmlmZXN0LCBzdHJsZW4o
YXBwY2FjaGVNYW5pZmVzdCkpOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZSht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMo
bWVzc2FnZSwgU09VUF9TVEFUVVNfT0spOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0
aCwgIi9hcHBjYWNoZS9mb28udHh0IikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBw
ZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJQywgImZvbyIsIDMp
OworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9jb21wbGV0ZShtZXNzYWdlLT5yZXNwb25zZV9i
b2R5KTsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFU
VVNfT0spOwogICAgIH0gZWxzZQogICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNz
YWdlLCBTT1VQX1NUQVRVU19OT1RfRk9VTkQpOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9n
dGsvV2ViS2l0Mkd0ay9UZXN0TWFpbi5oCmluZGV4IDhlYWY4ZTAuLjYwNTRmZTAgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvZ3RrL1dlYktpdDJHdGsvVGVzdE1haW4uaAorKysgYi9U
b29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1Rlc3RNYWluLmgKQEAgLTY5LDE5ICs2
OSwyMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IGxvY2FsU3Rv
cmFnZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImxvY2FsLXN0
b3JhZ2UiLCBudWxscHRyKSk7CiAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gaW5kZXhlZERCRGly
ZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZGF0YURpcmVjdG9yeSgpLCAiaW5kZXhlZGRiIiwgbnVs
bHB0cikpOwotICAgICAgICBtX3dlYkNvbnRleHQgPSBhZG9wdEdSZWYoV0VCS0lUX1dFQl9DT05U
RVhUKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfQ09OVEVYVCwKLSAgICAgICAgICAgICJs
b2NhbC1zdG9yYWdlLWRpcmVjdG9yeSIsIGxvY2FsU3RvcmFnZURpcmVjdG9yeS5nZXQoKSwKLSAg
ICAgICAgICAgICJpbmRleGVkLWRiLWRpcmVjdG9yeSIsIGluZGV4ZWREQkRpcmVjdG9yeS5nZXQo
KSwKLSAgICAgICAgICAgIG51bGxwdHIpKSk7Ci0KLSAgICAgICAgZ19zaWduYWxfY29ubmVjdCht
X3dlYkNvbnRleHQuZ2V0KCksICJpbml0aWFsaXplLXdlYi1leHRlbnNpb25zIiwgR19DQUxMQkFD
Syhpbml0aWFsaXplV2ViRXh0ZW5zaW9uc0NhbGxiYWNrKSwgdGhpcyk7CiAgICAgICAgIEdVbmlx
dWVQdHI8Y2hhcj4gZGlza0NhY2hlRGlyZWN0b3J5KGdfYnVpbGRfZmlsZW5hbWUoZGF0YURpcmVj
dG9yeSgpLCAiZGlzay1jYWNoZSIsIG51bGxwdHIpKTsKLSAgICAgICAgd2Via2l0X3dlYl9jb250
ZXh0X3NldF9kaXNrX2NhY2hlX2RpcmVjdG9yeShtX3dlYkNvbnRleHQuZ2V0KCksIGRpc2tDYWNo
ZURpcmVjdG9yeS5nZXQoKSk7CisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gYXBwbGljYXRpb25D
YWNoZURpcmVjdG9yeShnX2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgImFwcGNhY2hl
IiwgbnVsbHB0cikpOworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHdlYlNRTERpcmVjdG9yeShn
X2J1aWxkX2ZpbGVuYW1lKGRhdGFEaXJlY3RvcnkoKSwgIndlYnNxbCIsIG51bGxwdHIpKTsKKyAg
ICAgICAgR1JlZlB0cjxXZWJLaXRXZWJzaXRlRGF0YU1hbmFnZXI+IHdlYnNpdGVEYXRhTWFuYWdl
ciA9IGFkb3B0R1JlZih3ZWJraXRfd2Vic2l0ZV9kYXRhX21hbmFnZXJfbmV3KAorICAgICAgICAg
ICAgImxvY2FsLXN0b3JhZ2UtZGlyZWN0b3J5IiwgbG9jYWxTdG9yYWdlRGlyZWN0b3J5LmdldCgp
LCAiaW5kZXhlZGRiLWRpcmVjdG9yeSIsIGluZGV4ZWREQkRpcmVjdG9yeS5nZXQoKSwKKyAgICAg
ICAgICAgICJkaXNrLWNhY2hlLWRpcmVjdG9yeSIsIGRpc2tDYWNoZURpcmVjdG9yeS5nZXQoKSwg
Im9mZmxpbmUtYXBwbGljYXRpb24tY2FjaGUtZGlyZWN0b3J5IiwgYXBwbGljYXRpb25DYWNoZURp
cmVjdG9yeS5nZXQoKSwKKyAgICAgICAgICAgICJ3ZWJzcWwtZGlyZWN0b3J5Iiwgd2ViU1FMRGly
ZWN0b3J5LmdldCgpLCBudWxscHRyKSk7CisKKyAgICAgICAgbV93ZWJDb250ZXh0ID0gYWRvcHRH
UmVmKHdlYmtpdF93ZWJfY29udGV4dF9uZXdfd2l0aF93ZWJzaXRlX2RhdGFfbWFuYWdlcih3ZWJz
aXRlRGF0YU1hbmFnZXIuZ2V0KCkpKTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX3dlYkNv
bnRleHQuZ2V0KCksICJpbml0aWFsaXplLXdlYi1leHRlbnNpb25zIiwgR19DQUxMQkFDSyhpbml0
aWFsaXplV2ViRXh0ZW5zaW9uc0NhbGxiYWNrKSwgdGhpcyk7CiAgICAgfQogCiAgICAgflRlc3Qo
KQogICAgIHsKICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9tYXRjaGVkKG1f
d2ViQ29udGV4dC5nZXQoKSwgR19TSUdOQUxfTUFUQ0hfREFUQSwgMCwgMCwgbnVsbHB0ciwgbnVs
bHB0ciwgdGhpcyk7CisgICAgICAgIG1fd2ViQ29udGV4dCA9IG51bGxwdHI7CiAgICAgICAgIGlm
IChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKIApkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9ndGsvV2ViS2l0Mkd0ay9XZWJWaWV3VGVzdC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcApp
bmRleCAzODY1NDkyLi4xNGYyYzE0IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2d0
ay9XZWJLaXQyR3RrL1dlYlZpZXdUZXN0LmNwcApAQCAtMjMsNiArMjMsNyBAQAogCiAjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0dVbmlx
dWVQdHJHdGsuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HTWFpbkxvb3BTb3VyY2UuaD4KIAogV2Vi
Vmlld1Rlc3Q6OldlYlZpZXdUZXN0KFdlYktpdFVzZXJDb250ZW50TWFuYWdlciogdXNlckNvbnRl
bnRNYW5hZ2VyKQogICAgIDogbV93ZWJWaWV3KFdFQktJVF9XRUJfVklFVyhnX29iamVjdF9yZWZf
c2luayhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX1ZJRVcsICJ3ZWItY29udGV4dCIsIG1f
d2ViQ29udGV4dC5nZXQoKSwgInVzZXItY29udGVudC1tYW5hZ2VyIiwgdXNlckNvbnRlbnRNYW5h
Z2VyLCBudWxscHRyKSkpKQpAQCAtMTc5LDE1ICsxODAsMTAgQEAgdm9pZCBXZWJWaWV3VGVzdDo6
cXVpdE1haW5Mb29wQWZ0ZXJQcm9jZXNzaW5nUGVuZGluZ0V2ZW50cygpCiAgICAgcXVpdE1haW5M
b29wKCk7CiB9CiAKLXN0YXRpYyBnYm9vbGVhbiBxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2soV2Vi
Vmlld1Rlc3QqIHRlc3QpCi17Ci0gICAgdGVzdC0+cXVpdE1haW5Mb29wKCk7Ci0gICAgcmV0dXJu
IEZBTFNFOwotfQotCiB2b2lkIFdlYlZpZXdUZXN0Ojp3YWl0KGRvdWJsZSBzZWNvbmRzKQogewot
ICAgIGdfdGltZW91dF9hZGRfc2Vjb25kcyhzZWNvbmRzLCByZWludGVycHJldF9jYXN0PEdTb3Vy
Y2VGdW5jPihxdWl0TWFpbkxvb3BJZGxlQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBHTWFpbkxvb3BT
b3VyY2U6OnNjaGVkdWxlQWZ0ZXJEZWxheUFuZERlbGV0ZU9uRGVzdHJveSgiV2ViVmlld1Rlc3Qg
d2FpdCIsIFt0aGlzXSB7IHF1aXRNYWluTG9vcCgpOyB9LAorICAgICAgICBzdGQ6OmNocm9ubzo6
ZHVyYXRpb25fY2FzdDxzdGQ6OmNocm9ubzo6bWlsbGlzZWNvbmRzPihzdGQ6OmNocm9ubzo6ZHVy
YXRpb248ZG91YmxlPihzZWNvbmRzKSkpOwogICAgIGdfbWFpbl9sb29wX3J1bihtX21haW5Mb29w
KTsKIH0KIAo=
</data>
<flag name="review"
          id="280479"
          type_id="1"
          status="+"
          setter="svillar"
    />
          </attachment>
      

    </bug>

</bugzilla>