<?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>79477</bug_id>
          
          <creation_ts>2012-02-24 04:57:51 -0800</creation_ts>
          <short_desc>[GTK] Add resources API to WebKit2 GTK+</short_desc>
          <delta_ts>2012-03-27 01:00:21 -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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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>79471</dependson>
          <blocked>79667</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>pnormand</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>564210</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-24 04:57:51 -0800</bug_when>
    <thetext>As discussed in the mailing list we should provide a WebResource object and methods to get the main resources and all subresources from a WebView.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564230</commentid>
    <comment_count>1</comment_count>
      <attachid>128717</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-02-24 05:24:18 -0800</bug_when>
    <thetext>Created attachment 128717
Patch

This is an initial patch to add resources API. There are some things still to do that I&apos;m leaving for following patches to make this one a bit smaller.

 - Ignore resources when replacing content
 - Workaround for bug #78510.
 - API to save resources
 - API to save a web view</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>564231</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2012-02-24 05:25:32 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579191</commentid>
    <comment_count>3</comment_count>
      <attachid>128717</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-03-15 01:19:26 -0700</bug_when>
    <thetext>Comment on attachment 128717
Patch

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

Patch looks good to me but I think another pair of eyes needs to look at it :)

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:412
&gt; +static void addCacheHTTPHeadersToRespose(SoupMessage* message)

typo: addCacheHTTPHeadersToResponse</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579198</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-15 01:35:49 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 128717 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=128717&amp;action=review
&gt; 
&gt; Patch looks good to me but I think another pair of eyes needs to look at it :)

Thanks for reviewing it. Gustavo? :-P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:412
&gt; &gt; +static void addCacheHTTPHeadersToRespose(SoupMessage* message)
&gt; 
&gt; typo: addCacheHTTPHeadersToResponse

Oops</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579587</commentid>
    <comment_count>5</comment_count>
      <attachid>132090</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-15 11:41:12 -0700</bug_when>
    <thetext>Created attachment 132090
Updated patch

Just rebased to apply on current git master and fixed the typo found by phil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587801</commentid>
    <comment_count>6</comment_count>
      <attachid>132090</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-26 09:05:29 -0700</bug_when>
    <thetext>Comment on attachment 132090
Updated patch

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

Looks good to me!

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp:263
&gt; + *   is emitted again with a redirected response, the active URI is the
&gt; + *   redirected URI.

&quot;the active URI is the URI the request was redirected to&quot; sounds better I think

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:300
&gt; +    // No cached resurce: First load.

s/resurce/resource/ (and a few more after this)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587804</commentid>
    <comment_count>7</comment_count>
      <attachid>132090</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-26 09:07:20 -0700</bug_when>
    <thetext>Comment on attachment 132090
Updated patch

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

&gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:151
&gt; +#if 0
&gt; +    // Load the same URI again.
&gt; +    // FIXME: we need a workaround for bug https://bugs.webkit.org/show_bug.cgi?id=78510.
&gt; +    test-&gt;loadURI(kServer-&gt;getURIForPath(&quot;/&quot;).data());
&gt; +    test-&gt;waitUntilResourcesLoaded(4);
&gt; +#endif

You&apos;re probably more aware than I am of this, but worth pointing out that you fixed 78510 already ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587810</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-26 09:12:42 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 132090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132090&amp;action=review
&gt; 
&gt; Looks good to me!

Thank you very much for reviewing :-)

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp:263
&gt; &gt; + *   is emitted again with a redirected response, the active URI is the
&gt; &gt; + *   redirected URI.
&gt; 
&gt; &quot;the active URI is the URI the request was redirected to&quot; sounds better I think

Indeed.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:300
&gt; &gt; +    // No cached resurce: First load.
&gt; 
&gt; s/resurce/resource/ (and a few more after this)

Ooops :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587811</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-26 09:13:58 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 132090 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=132090&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/gtk/tests/TestResources.cpp:151
&gt; &gt; +#if 0
&gt; &gt; +    // Load the same URI again.
&gt; &gt; +    // FIXME: we need a workaround for bug https://bugs.webkit.org/show_bug.cgi?id=78510.
&gt; &gt; +    test-&gt;loadURI(kServer-&gt;getURIForPath(&quot;/&quot;).data());
&gt; &gt; +    test-&gt;waitUntilResourcesLoaded(4);
&gt; &gt; +#endif
&gt; 
&gt; You&apos;re probably more aware than I am of this, but worth pointing out that you fixed 78510 already ;)

No I didn&apos;t :-( I was waiting to land the resources patches before trying a workaround for that bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587883</commentid>
    <comment_count>10</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-26 10:45:02 -0700</bug_when>
    <thetext>Ah, it&apos;s marked WONTFIX, that resolved through me off =(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>587906</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-26 10:59:24 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Ah, it&apos;s marked WONTFIX, that resolved through me off =(

Yes, my fix will actually be a workaround.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588624</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-03-27 01:00:21 -0700</bug_when>
    <thetext>Committed r112221: &lt;http://trac.webkit.org/changeset/112221&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>128717</attachid>
            <date>2012-02-24 05:24:18 -0800</date>
            <delta_ts>2012-03-15 11:41:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-resources.diff</filename>
            <type>text/plain</type>
            <size>71251</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3NWQzMTdlLi41MmY4NzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTcg
QEAKKzIwMTItMDItMjQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEFkZCByZXNvdXJjZXMgQVBJIHRvIFdlYktpdDIgR1RLKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFJlc291cmNlTG9hZENsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoZGlk
SW5pdGlhdGVMb2FkRm9yUmVzb3VyY2UpOiBDYWxsCisgICAgICAgIHdlYmtpdFdlYlZpZXdSZXNv
dXJjZUxvYWRTdGFydGVkKCkgc28gdGhhdCB2aWV3IHdpbGwgY3JlYXRlIHRoZQorICAgICAgICBy
ZXNvdXJjZSBhbmQgZW1pdCBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQuCisg
ICAgICAgIChkaWRTZW5kUmVxdWVzdEZvclJlc291cmNlKTogQ2FsbCB3ZWJraXRXZWJSZXNvdXJj
ZVNlbnRSZXF1ZXN0KCkKKyAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gcmVxdWVzdCBhbmQgcmVzcG9u
c2UuCisgICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSk6IENhbGwKKyAgICAg
ICAgd2Via2l0V2ViUmVzb3VyY2VTZXRSZXNwb25zZSgpIHdpdGggdGhlIGdpdmVuIHJlc3BvbnNl
LgorICAgICAgICAoZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSk6IENhbGwKKyAg
ICAgICAgd2Via2l0V2ViUmVzb3VyY2VOb3RpZnlQcm9ncmVzcygpLgorICAgICAgICAoZGlkRmlu
aXNoTG9hZEZvclJlc291cmNlKTogQ2FsbCB3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKCkuCisg
ICAgICAgIChkaWRGYWlsTG9hZEZvclJlc291cmNlKTogQ3JlYXRlIGEgR0Vycm9yIGZvciB0aGUg
Z2l2ZW4gV0tFcnJvcgorICAgICAgICBhbmQgY2FsbCB3ZWJraXRXZWJSZXNvdXJjZUZhaWxlZCgp
LgorICAgICAgICAoYXR0YWNoUmVzb3VyY2VMb2FkQ2xpZW50VG9WaWV3KTogQWRkIGNhbGxiYWNr
cyBmb3IgdGhlCisgICAgICAgIFdLUGFnZVJlc291cmNlTG9hZENsaWVudC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHdlYmtpdFdlYlJlc291cmNlR2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3dl
Yl9yZXNvdXJjZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfcmVzb3VyY2VfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJjZVVwZGF0ZVVSSSk6IFVwZGF0ZSB0aGUgYWN0
aXZlIFVSSSBldmVyeSB0aW1lIGEKKyAgICAgICAgbmV3IHJlcXVlc3QgaXMgc2VudCB0byB0aGUg
c2VydmVyLgorICAgICAgICAod2Via2l0V2ViUmVzb3VyY2VDcmVhdGUpOiBDcmVhdGUgYSBXZWJS
ZXNvdXJjZSBmb3IgdGhlIGdpdmVuCisgICAgICAgIGZyYW1lLgorICAgICAgICAod2Via2l0V2Vi
UmVzb3VyY2VTZW50UmVxdWVzdCk6IFVwZGF0ZSB1cmkgYW5kIGVtaXQKKyAgICAgICAgV2ViS2l0
V2ViUmVzb3VyY2U6OnNlbnQtcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdFdlYlJlc291cmNlU2V0
UmVzcG9uc2UpOiBTZXQgdGhlIHJlc3BvbnNlIHByb3BlcnR5LgorICAgICAgICAod2Via2l0V2Vi
UmVzb3VyY2VOb3RpZnlQcm9ncmVzcyk6IEVtaXQKKyAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2U6
OnJlY2VpdmVkLWRhdGEuCisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKTogRW1p
dCBXZWJLaXRXZWJSZXNvdXJjZTo6ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJj
ZUZhaWxlZCk6IEVtaXQgV2ViS2l0V2ViUmVzb3VyY2U6OmZhaWxlZCBhbmQgdGhlbgorICAgICAg
ICBXZWJLaXRXZWJSZXNvdXJjZTo6ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF91cmkpOiBSZXR1cm4gdGhlIGN1cnJlbnRyIGFjdGl2ZSBVUkkuCisgICAgICAgICh3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZSk6IFJldHVybiB0aGUgcmVzcG9uc2UgcmVj
ZWl2ZWQKKyAgICAgICAgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlJlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25z
dHJ1Y3RlZCk6IEF0dGFjaCB0aGUgcmVzb3VyY2UgbG9hZCBjbGllbnQgdG8gdGhlCisgICAgICAg
IHZpZXcuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZAorICAgICAg
ICBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQgc2lnbmFsLgorICAgICAgICAo
d2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKTogQ2xlYXIgbG9hZGluZyByZXNvdXJjZXMgbWFwIHdo
ZW4gYSBuZXcKKyAgICAgICAgbG9hZCBzdGFydHMgYW5kIGxvYWRlZCByZXNvdXJjZXMgbWFwIHdo
ZW4gdGhlIG5ldyBsb2FkIGhhcyBiZWVuCisgICAgICAgIGNvbW1pdHRlZC4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRTdGFydGVkKTogQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRo
ZQorICAgICAgICBnaXZlbiBpZGVudGlmaWVyLCBhZGQgaXQgdG8gdGhlIGxvYWRpbmcgcmVzb3Vy
Y2VzIG1hcCBhbmQgZW1pdAorICAgICAgICBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0
YXJ0ZWQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0dldExvYWRpbmdXZWJSZXNvdXJj
ZSk6IFJldHVybiB0aGUgcmVzb3VyY2UgdGhhdCBpcworICAgICAgICBiZWluZyBsb2FkZWQgY29y
cmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gaWRlbnRpZmllci4KKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UpOiBSZW1vdmUgdGhlIHJlc291dXJjZQorICAgICAg
ICBjb3JyZXNwb25maW5nIHRvIHRoZSBnaXZlbiBpZGVudGlmaWVyIGZyb20gdGhlIGxvYWRpbmcg
cmVzb3VyY2VzCisgICAgICAgIG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxv
YWRGaW5pc2hlZCk6IE1vdmUgdGhlIHJlc291cmNlIGZyb20gdGhlCisgICAgICAgIGxvYWRpbmcg
cmVzb3VyY2VzIG1hcCB0byB0aGUgbG9hZGVkIHJlc291cmNlcyBtYXAuCisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UpOiBSZXR1cm4gdGhlIG1haW4gcmVzb3VyY2Uu
CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6IFJldHVybiB0aGUg
bGlzdCBvZgorICAgICAgICBzdWJyZXNvdXJjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZvcgorICAgICAgICBXZWJLaXRXZWJSZXNv
dXJjZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbTog
QWRkIG5ldyB0ZXN0IGZvciByZXNvdXJjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdERvd25sb2Fkcy5jcHA6CisgICAgICAgICh0ZXN0RG93bmxvYWRMb2NhbEZpbGUp
OiBVc2UgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpIGZyb20gVGVzdC4KKyAgICAgICAgKHRl
c3REb3dubG9hZExvY2FsRmlsZUVycm9yKTogRGl0dG8uCisgICAgICAgIChzZXJ2ZXJDYWxsYmFj
ayk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmg6
CisgICAgICAgIChUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKTogTW9lZCBmcm9tIFRl
c3REb3dubG9hZHMgc28gdGhhdAorICAgICAgICBpdCBjYW4gYmUgdXNlZCBieSBvdGhlciB0ZXN0
cy4KKyAgICAgICAgKFRlc3QpOiBBZGQgaW5mb3JtYXRpb24gYWJvdXQgbGVha2VkIG9iamVjdHMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHA6IEFk
ZGVkLgorICAgICAgICAodGVzdFdlYlZpZXdSZXNvdXJjZXMpOgorICAgICAgICAodGVzdFdlYlJl
c291cmNlTG9hZGluZyk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZSk6CisgICAg
ICAgICh0ZXN0V2ViUmVzb3VyY2VBY3RpdmVVUkkpOgorICAgICAgICAoYWRkQ2FjaGVIVFRQSGVh
ZGVyc1RvUmVzcG9zZSk6CisgICAgICAgIChzZXJ2ZXJDYWxsYmFjayk6CisgICAgICAgIChiZWZv
cmVBbGwpOgorICAgICAgICAoYWZ0ZXJBbGwpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L3dlYmtpdDIuaDogSW5jbHVkZSBXZWJLaXRXZWJSZXNvdXJjZS5oCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdDoKKwogMjAxMi0wMi0yMSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gTnVsbCBS
ZXNvdXJjZUVycm9ycyBhcmUgZW5jb2RlZC9kZWNvZGVkIGFzIGVtcHR5IFJlc291cmNlRXJyb3Jz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFlNzIwNTMuLmNmN2MzMjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2Vm
aWxlLmFtCkBAIC05Nyw2ICs5Nyw3IEBAIGxpYndlYmtpdDJndGtpbmNsdWRlX0hFQURFUlMgPSBc
CiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRVUklSZXF1ZXN0LmggXAogCSQo
V2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0VVJJUmVzcG9uc2UuaCBcCiAJJChXZWJL
aXQyKS9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAorCSQoV2ViS2l0Mikv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuaCBcCiAJJChXZWJLaXQyKS9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuaCBcCiAJJChXZWJLaXQyKS9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXaW5kb3dQcm9wZXJ0aWVzLmggXApAQCAtNTU5LDYgKzU2MCw4IEBAIGxpYndlYmtp
dDJndGtfQFdFQktJVEdUS19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1Jf
VkVSU0lPTkBfbGFfU09VCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
UHJpbnRPcGVyYXRpb25Qcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFByaXZhdGUuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0UHJpdmF0ZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFJlc291cmNlTG9hZENsaWVudC5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFJlc291cmNlTG9hZENsaWVudC5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGljeURlY2lzaW9uLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvbi5o
IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNwb25zZVBvbGlj
eURlY2lzaW9uUHJpdmF0ZS5oIFwKQEAgLTU3Niw2ICs1NzksOSBAQCBsaWJ3ZWJraXQyZ3RrX0BX
RUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05A
X2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHQuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViQ29udGV4
dC5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYkNvbnRl
eHRQcml2YXRlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlJlc291cmNlLmNwcCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViUmVzb3VyY2UuaCBcCisJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViUmVzb3VyY2VQcml2YXRlLmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXcuaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlldy5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5hNGJkMDliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmNwcApAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaCIKKworI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0UHJpdmF0ZS5o
IgorI2luY2x1ZGUgIldlYktpdFVSSVJlc3BvbnNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktp
dFdlYlJlc291cmNlUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlZpZXdQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViVVJM
UmVzcG9uc2UuaCIKKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworc3RhdGljIHZvaWQgZGlkSW5pdGlhdGVMb2FkRm9y
UmVzb3VyY2UoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmIHdrRnJhbWUsIHVpbnQ2NF90IHJlc291cmNl
SWRlbnRpZmllciwgV0tVUkxSZXF1ZXN0UmVmIHdrUmVxdWVzdCwgYm9vbCBwYWdlSXNQcm92aXNp
b25hbGx5TG9hZGluZywgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdl
YktpdFVSSVJlcXVlc3Q+IHJlcXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVxdWVzdENyZWF0
ZUZvclJlc291cmNlUmVxdWVzdCh0b0ltcGwod2tSZXF1ZXN0KS0+cmVzb3VyY2VSZXF1ZXN0KCkp
KTsKKyAgICB3ZWJraXRXZWJWaWV3UmVzb3VyY2VMb2FkU3RhcnRlZChXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbyksIHdrRnJhbWUsIHJlc291cmNlSWRlbnRpZmllciwgcmVxdWVzdC5nZXQoKSwg
cGFnZUlzUHJvdmlzaW9uYWxseUxvYWRpbmcpOworfQorCitzdGF0aWMgdm9pZCBkaWRTZW5kUmVx
dWVzdEZvclJlc291cmNlKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwgdWludDY0X3QgcmVzb3VyY2VJ
ZGVudGlmaWVyLCBXS1VSTFJlcXVlc3RSZWYgd2tSZXF1ZXN0LCBXS1VSTFJlc3BvbnNlUmVmIHdr
UmVkaXJlY3RSZXNwb25zZSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlJlc291cmNlPiByZXNvdXJjZSA9IHdlYmtpdFdlYlZpZXdHZXRMb2FkaW5nV2Vi
UmVzb3VyY2UoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCByZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVxdWVzdD4gcmVxdWVzdCA9IGFkb3B0R1JlZih3ZWJr
aXRVUklSZXF1ZXN0Q3JlYXRlRm9yUmVzb3VyY2VSZXF1ZXN0KHRvSW1wbCh3a1JlcXVlc3QpLT5y
ZXNvdXJjZVJlcXVlc3QoKSkpOworICAgIEdSZWZQdHI8V2ViS2l0VVJJUmVzcG9uc2U+IHJlZGly
ZWN0UmVzcG9uc2UgPSB3a1JlZGlyZWN0UmVzcG9uc2UgPyBhZG9wdEdSZWYod2Via2l0VVJJUmVz
cG9uc2VDcmVhdGVGb3JSZXNvdXJjZVJlc3BvbnNlKHRvSW1wbCh3a1JlZGlyZWN0UmVzcG9uc2Up
LT5yZXNvdXJjZVJlc3BvbnNlKCkpKSA6IDA7CisgICAgd2Via2l0V2ViUmVzb3VyY2VTZW50UmVx
dWVzdChyZXNvdXJjZS5nZXQoKSwgcmVxdWVzdC5nZXQoKSwgcmVkaXJlY3RSZXNwb25zZS5nZXQo
KSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlKFdLUGFn
ZVJlZiwgV0tGcmFtZVJlZiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBXS1VSTFJlc3Bv
bnNlUmVmIHdrUmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0
cjxXZWJLaXRXZWJSZXNvdXJjZT4gcmVzb3VyY2UgPSB3ZWJraXRXZWJWaWV3R2V0TG9hZGluZ1dl
YlJlc291cmNlKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgcmVzb3VyY2VJZGVudGlmaWVy
KTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlc3BvbnNlPiByZXNwb25zZSA9IGFkb3B0R1JlZih3
ZWJraXRVUklSZXNwb25zZUNyZWF0ZUZvclJlc291cmNlUmVzcG9uc2UodG9JbXBsKHdrUmVzcG9u
c2UpLT5yZXNvdXJjZVJlc3BvbnNlKCkpKTsKKyAgICB3ZWJraXRXZWJSZXNvdXJjZVNldFJlc3Bv
bnNlKHJlc291cmNlLmdldCgpLCByZXNwb25zZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRp
ZFJlY2VpdmVDb250ZW50TGVuZ3RoRm9yUmVzb3VyY2UoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCB1
aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIHVpbnQ2NF90IGNvbnRlbnRMZW5ndGgsIGNvbnN0
IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gcmVz
b3VyY2UgPSB3ZWJraXRXZWJWaWV3R2V0TG9hZGluZ1dlYlJlc291cmNlKFdFQktJVF9XRUJfVklF
VyhjbGllbnRJbmZvKSwgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICB3ZWJraXRXZWJSZXNvdXJj
ZU5vdGlmeVByb2dyZXNzKHJlc291cmNlLmdldCgpLCBjb250ZW50TGVuZ3RoKTsKK30KKworc3Rh
dGljIHZvaWQgZGlkRmluaXNoTG9hZEZvclJlc291cmNlKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiwg
dWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQorewor
ICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IHJlc291cmNlID0gd2Via2l0V2ViVmlld1Jl
c291cmNlTG9hZEZpbmlzaGVkKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZvKSwgcmVzb3VyY2VJ
ZGVudGlmaWVyKTsKKyAgICB3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlLmdldCgp
KTsKK30KKworc3RhdGljIHZvaWQgZGlkRmFpbExvYWRGb3JSZXNvdXJjZShXS1BhZ2VSZWYsIFdL
RnJhbWVSZWYsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV0tFcnJvclJlZiB3a0Vycm9y
LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyk7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJSZXNv
dXJjZT4gcmVzb3VyY2UgPSB3ZWJraXRXZWJWaWV3R2V0TG9hZGluZ1dlYlJlc291cmNlKHdlYlZp
ZXcsIHJlc291cmNlSWRlbnRpZmllcik7CisgICAgY29uc3QgUmVzb3VyY2VFcnJvciYgcmVzb3Vy
Y2VFcnJvciA9IHRvSW1wbCh3a0Vycm9yKS0+cGxhdGZvcm1FcnJvcigpOworICAgIEdPd25QdHI8
R0Vycm9yPiB3ZWJFcnJvcihnX2Vycm9yX25ld19saXRlcmFsKGdfcXVhcmtfZnJvbV9zdHJpbmco
cmVzb3VyY2VFcnJvci5kb21haW4oKS51dGY4KCkuZGF0YSgpKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9yLmVycm9yQ29kZSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc291
cmNlRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgpKSk7CisgICAgd2Vi
a2l0V2ViUmVzb3VyY2VGYWlsZWQocmVzb3VyY2UuZ2V0KCksIHdlYkVycm9yLmdldCgpKTsKKyAg
ICB3ZWJraXRXZWJWaWV3UmVtb3ZlTG9hZGluZ1dlYlJlc291cmNlKHdlYlZpZXcsIHJlc291cmNl
SWRlbnRpZmllcik7Cit9CisKK3ZvaWQgYXR0YWNoUmVzb3VyY2VMb2FkQ2xpZW50VG9WaWV3KFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50IHdr
UmVzb3VyY2VMb2FkQ2xpZW50ID0geworICAgICAgICBrV0tQYWdlUmVzb3VyY2VMb2FkQ2xpZW50
Q3VycmVudFZlcnNpb24sCisgICAgICAgIHdlYlZpZXcsIC8vIENsaWVudEluZm8KKyAgICAgICAg
ZGlkSW5pdGlhdGVMb2FkRm9yUmVzb3VyY2UsCisgICAgICAgIGRpZFNlbmRSZXF1ZXN0Rm9yUmVz
b3VyY2UsCisgICAgICAgIGRpZFJlY2VpdmVSZXNwb25zZUZvclJlc291cmNlLAorICAgICAgICBk
aWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlLAorICAgICAgICBkaWRGaW5pc2hMb2Fk
Rm9yUmVzb3VyY2UsCisgICAgICAgIGRpZEZhaWxMb2FkRm9yUmVzb3VyY2UsCisgICAgfTsKKyAg
ICBXS1BhZ2VSZWYgd2tQYWdlID0gdG9BUEkod2Via2l0V2ViVmlld0Jhc2VHZXRQYWdlKFdFQktJ
VF9XRUJfVklFV19CQVNFKHdlYlZpZXcpKSk7CisgICAgV0tQYWdlU2V0UGFnZVJlc291cmNlTG9h
ZENsaWVudCh3a1BhZ2UsICZ3a1Jlc291cmNlTG9hZENsaWVudCk7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQu
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc291cmNlTG9hZENs
aWVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNmEzNjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNv
dXJjZUxvYWRDbGllbnQuaApAQCAtMCwwICsxLDI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50X2gKKyNkZWZp
bmUgV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50X2gKKworI2luY2x1ZGUgIldlYktpdFdlYlZpZXcu
aCIKKwordm9pZCBhdHRhY2hSZXNvdXJjZUxvYWRDbGllbnRUb1ZpZXcoV2ViS2l0V2ViVmlldyop
OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlJlc291cmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlJlc291cmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kYTczNjI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwCkBAIC0wLDAgKzEsMzAxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJLaXRXZWJSZXNvdXJjZS5oIgorCisjaW5jbHVkZSAiV2ViS2l0TWFyc2hhbC5oIgorI2lu
Y2x1ZGUgIldlYktpdFVSSVJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJSZXNvdXJjZVBy
aXZhdGUuaCIKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorI2luY2x1ZGUgPHd0Zi9nb2Jq
ZWN0L0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK2VudW0geworICAgIFNFTlRfUkVRVUVTVCwKKyAgICBSRUNFSVZF
RF9EQVRBLAorICAgIEZJTklTSEVELAorICAgIEZBSUxFRCwKKworICAgIExBU1RfU0lHTkFMCit9
OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1VSSSwKKyAgICBQUk9QX1JFU1BP
TlNFCit9OworCisKK3N0cnVjdCBfV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlIHsKKyAgICBXS1Jl
dGFpblB0cjxXS0ZyYW1lUmVmPiB3a0ZyYW1lOworICAgIENTdHJpbmcgdXJpOworICAgIEdSZWZQ
dHI8V2ViS2l0VVJJUmVzcG9uc2U+IHJlc3BvbnNlOworfTsKKworc3RhdGljIGd1aW50IHNpZ25h
bHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OworCitHX0RFRklORV9UWVBFKFdlYktpdFdlYlJlc291
cmNlLCB3ZWJraXRfd2ViX3Jlc291cmNlLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJSZXNvdXJjZUZpbmFsaXplKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXRUJLSVRf
V0VCX1JFU09VUkNFKG9iamVjdCktPnByaXYtPn5XZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUoKTsK
KyAgICBHX09CSkVDVF9DTEFTUyh3ZWJraXRfd2ViX3Jlc291cmNlX3BhcmVudF9jbGFzcyktPmZp
bmFsaXplKG9iamVjdCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlJlc291cmNlR2V0UHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wSWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSBX
RUJLSVRfV0VCX1JFU09VUkNFKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJZCkgeworICAg
IGNhc2UgUFJPUF9VUkk6CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZyh2YWx1ZSwgd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9SRVNQT05TRToKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJr
aXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZShyZXNvdXJjZSkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wSWQsIHBhcmFtU3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3Jlc291cmNlX2luaXQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQoreworICAg
IFdlYktpdFdlYlJlc291cmNlUHJpdmF0ZSogcHJpdiA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJ
VkFURShyZXNvdXJjZSwgV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCBXZWJLaXRXZWJSZXNvdXJj
ZVByaXZhdGUpOworICAgIHJlc291cmNlLT5wcml2ID0gcHJpdjsKKyAgICBuZXcgKHByaXYpIFdl
YktpdFdlYlJlc291cmNlUHJpdmF0ZSgpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Jl
c291cmNlX2NsYXNzX2luaXQoV2ViS2l0V2ViUmVzb3VyY2VDbGFzcyogcmVzb3VyY2VDbGFzcykK
K3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1MocmVzb3Vy
Y2VDbGFzcyk7CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdFdlYlJlc291
cmNlR2V0UHJvcGVydHk7CisgICAgb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViUmVz
b3VyY2VGaW5hbGl6ZTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlJlc291cmNlOnVyaToK
KyAgICAgKgorICAgICAqIFRoZSBjdXJyZW50IGFjdGl2ZSBVUkkgb2YgdGhlICNXZWJLaXRXZWJS
ZXNvdXJjZS4KKyAgICAgKiBTZWUgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKCkgZm9yIG1v
cmUgZGV0YWlscy4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9V
UkksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfc3Ry
aW5nKCJ1cmkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJVUkkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGN1cnJlbnQgYWN0aXZlIFVSSSBvZiB0aGUgcmVz
dWx0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0V2ViUmVzb3VyY2U6cmVzcG9uc2U6CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFVSSVJl
c3BvbnNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc291cmNlLgorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBQUk9QX1JFU1BPTlNFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgicmVzcG9uc2UiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJSZXNwb25z
ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgcmVzcG9uc2Ugb2YgdGhlIHJlc291cmNlIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1VSSV9S
RVNQT05TRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJSZXNvdXJjZTo6c2VudC1yZXF1ZXN0OgorICAgICAqIEByZXNvdXJjZTogdGhlICNXZWJL
aXRXZWJSZXNvdXJjZQorICAgICAqIEByZXF1ZXN0OiBhICNXZWJLaXRVUklSZXF1ZXN0CisgICAg
ICogQHJlZGlyZWN0ZWRfcmVzcG9uc2U6IGEgI1dlYktpdFVSSVJlc3BvbnNlLCBvciAlTlVMTAor
ICAgICAqCisgICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCB3aGVuIEByZXF1ZXN0IGhhcyBi
ZWVuIHNlbnQgdG8gdGhlCisgICAgICogc2VydmVyLiBJbiBjYXNlIG9mIGEgc2VydmVyIHJlZGly
ZWN0aW9uIHRoaXMgc2lnbmFsIGlzCisgICAgICogZW1pdHRlZCBhZ2FpbiB3aXRoIHRoZSBAcmVx
dWVzdCBhcmd1bWVudCBjb250YWluaW5nIHRoZSBuZXcKKyAgICAgKiByZXF1ZXN0IHNlbnQgdG8g
dGhlIHNlcnZlciBkdWUgdG8gdGhlIHJlZGlyZWN0aW9uIGFuZCB0aGUKKyAgICAgKiBAcmVkaXJl
Y3RlZF9yZXNwb25zZSBwYXJhbWV0ZXIgY29udGFpbmluZyB0aGUgcmVzcG9uc2UKKyAgICAgKiBy
ZWNlaXZlZCBieSB0aGUgc2VydmVyIGZvciB0aGUgaW5pdGlhbCByZXF1ZXN0LgorICAgICAqLwor
ICAgIHNpZ25hbHNbU0VOVF9SRVFVRVNUXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygic2VudC1y
ZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENs
YXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAg
ICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFs
X1ZPSURfX09CSkVDVF9PQkpFQ1QsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwg
MiwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1VSSV9SRVFVRVNULAorICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX1RZUEVfVVJJX1JFU1BPTlNFKTsKKworICAgIC8qKgorICAg
ICAqIFdlYktpdFdlYlJlc291cmNlOjpyZWNlaXZlZC1kYXRhOgorICAgICAqIEByZXNvdXJjZTog
dGhlICNXZWJLaXRXZWJSZXNvdXJjZQorICAgICAqIEBkYXRhX2xlbmd0aDogdGhlIGxlbmd0aCBv
ZiBkYXRhIHJlY2VpdmVkIGluIGJ5dGVzCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBl
bWl0dGVkIGFmdGVyIHJlc3BvbnNlIGlzIHJlY2VpdmVkLAorICAgICAqIGV2ZXJ5IHRpbWUgbmV3
IGRhdGEgaGFzIGJlZW4gcmVjZWl2ZWQuIEl0J3MKKyAgICAgKiB1c2VmdWwgdG8ga25vdyB0aGUg
cHJvZ3Jlc3Mgb2YgdGhlIHJlc291cmNlIGxvYWQgb3BlcmF0aW9uLgorICAgICAqLworICAgIHNp
Z25hbHNbUkVDRUlWRURfREFUQV0gPQorICAgICAgICBnX3NpZ25hbF9uZXcoInJlY2VpdmVkLWRh
dGEiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0Q2xhc3Mp
LAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9J
RF9fVUlOVDY0LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAg
ICAgICAgICAgICAgICBHX1RZUEVfVUlOVDY0KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdl
YlJlc291cmNlOjpmaW5pc2hlZDoKKyAgICAgKiBAcmVzb3VyY2U6IHRoZSAjV2ViS2l0V2ViUmVz
b3VyY2UKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiB0aGUgcmVz
b3VyY2UgbG9hZCBmaW5pc2hlcyBzdWNjZXNzZnVsbHkKKyAgICAgKiBvciBkdWUgdG8gYW4gZXJy
b3IuIEluIGNhc2Ugb2YgZXJyb3JzICNXZWJLaXRXZWJSZXNvdXJjZTo6ZmFpbGVkIHNpZ25hbAor
ICAgICAqIGlzIGVtaXR0ZWQgYmVmb3JlIHRoaXMgb25lLgorICAgICAqLworICAgIHNpZ25hbHNb
RklOSVNIRURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJmaW5pc2hlZCIsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAg
ICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdFdlYlJlc291cmNlOjpmYWlsZWQ6CisgICAgICogQHJlc291cmNlOiB0aGUgI1dlYktpdFdl
YlJlc291cmNlCisgICAgICogQGVycm9yOiB0aGUgI0dFcnJvciB0aGF0IHdhcyB0cmlnZ2VyZWQK
KyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQgd2hlbiBhbiBlcnJvciBvY2N1
cnMgZHVyaW5nIHRoZSByZXNvdXJjZQorICAgICAqIGxvYWQgb3BlcmF0aW9uLgorICAgICAqLwor
ICAgIHNpZ25hbHNbRkFJTEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygiZmFpbGVkIiwKKyAg
ICAgICAgICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAg
MCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19Q
T0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAg
ICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZh
dGUocmVzb3VyY2VDbGFzcywgc2l6ZW9mKFdlYktpdFdlYlJlc291cmNlUHJpdmF0ZSkpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRXZWJSZXNvdXJjZVVwZGF0ZVVSSShXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIGNvbnN0IENTdHJpbmcmIHJlcXVlc3RVUkkpCit7CisgICAgaWYgKHJlc291
cmNlLT5wcml2LT51cmkgPT0gcmVxdWVzdFVSSSkKKyAgICAgICAgcmV0dXJuOworCisgICAgcmVz
b3VyY2UtPnByaXYtPnVyaSA9IHJlcXVlc3RVUkk7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JK
RUNUKHJlc291cmNlKSwgInVyaSIpOworfQorCitXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2Vi
UmVzb3VyY2VDcmVhdGUoV0tGcmFtZVJlZiB3a0ZyYW1lLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1
ZXN0KQoreworICAgIEFTU0VSVCh3a0ZyYW1lKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UgPSBXRUJLSVRfV0VCX1JFU09VUkNFKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJf
UkVTT1VSQ0UsIE5VTEwpKTsKKyAgICByZXNvdXJjZS0+cHJpdi0+d2tGcmFtZSA9IHdrRnJhbWU7
CisgICAgcmVzb3VyY2UtPnByaXYtPnVyaSA9IHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJl
cXVlc3QpOworICAgIHJldHVybiByZXNvdXJjZTsKK30KKwordm9pZCB3ZWJraXRXZWJSZXNvdXJj
ZVNlbnRSZXF1ZXN0KFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVz
dCogcmVxdWVzdCwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlZGlyZWN0UmVzcG9uc2UpCit7CisgICAg
d2Via2l0V2ViUmVzb3VyY2VVcGRhdGVVUkkocmVzb3VyY2UsIHdlYmtpdF91cmlfcmVxdWVzdF9n
ZXRfdXJpKHJlcXVlc3QpKTsKKyAgICBnX3NpZ25hbF9lbWl0KHJlc291cmNlLCBzaWduYWxzW1NF
TlRfUkVRVUVTVF0sIDAsIHJlcXVlc3QsIHJlZGlyZWN0UmVzcG9uc2UpOworfQorCit2b2lkIHdl
YmtpdFdlYlJlc291cmNlU2V0UmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXNwb25zZSogcmVzcG9uc2UpCit7CisgICAgcmVzb3VyY2UtPnByaXYtPnJlc3Bv
bnNlID0gcmVzcG9uc2U7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHJlc291cmNlKSwg
InJlc3BvbnNlIik7Cit9CisKK3ZvaWQgd2Via2l0V2ViUmVzb3VyY2VOb3RpZnlQcm9ncmVzcyhX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIGd1aW50NjQgYnl0ZXNSZWNlaXZlZCkKK3sKKyAg
ICBnX3NpZ25hbF9lbWl0KHJlc291cmNlLCBzaWduYWxzW1JFQ0VJVkVEX0RBVEFdLCAwLCBieXRl
c1JlY2VpdmVkKTsKK30KKwordm9pZCB3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHJlc291cmNlLCBzaWdu
YWxzW0ZJTklTSEVEXSwgMCwgTlVMTCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViUmVzb3VyY2VGYWls
ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBHRXJyb3IqIGVycm9yKQoreworICAgIGdf
c2lnbmFsX2VtaXQocmVzb3VyY2UsIHNpZ25hbHNbRkFJTEVEXSwgMCwgZXJyb3IpOworICAgIGdf
c2lnbmFsX2VtaXQocmVzb3VyY2UsIHNpZ25hbHNbRklOSVNIRURdLCAwLCBOVUxMKTsKK30KKwor
LyoqCisgKiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmk6CisgKiBAcmVzb3VyY2U6IGEgI1dl
YktpdFdlYlJlc291cmNlCisgKgorICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgVVJJIG9m
IEB3ZWJfdmlldy4gVGhlIGFjdGl2ZSBVUkkgbWlnaHQgY2hhbmdlIGR1cmluZworICogYSBsb2Fk
IG9wZXJhdGlvbjoKKyAqCisgKiA8b3JkZXJlZGxpc3Q+CisgKiA8bGlzdGl0ZW0+PHBhcmE+Cisg
KiAgIFdoZW4gdGhlIHJlc291cmNlIGxvYWQgc3RhcnRzLCB0aGUgYWN0aXZlIFVSSSBpcyB0aGUg
cmVxdWVzdGVkIFVSSQorICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8bGlzdGl0ZW0+PHBhcmE+
CisgKiAgIFdoZW4gdGhlIGluaXRpYWwgcmVxdWVzdCBpcyBzZW50IHRvIHRoZSBzZXJ2ZXIsICNX
ZWJLaXRXZWJSZXNvdXJjZTo6c2VudC1yZXF1ZXN0CisgKiAgIHNpZ25hbCBpcyBlbWl0dGVkIHdp
dGhvdXQgYSByZWRpcmVjdGVkIHJlc3BvbnNlLCB0aGUgYWN0aXZlIFVSSSBpcyB0aGUgVVJJIG9m
CisgKiAgIHRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZlci4KKyAqIDwvcGFyYT48L2xpc3Rp
dGVtPgorICogPGxpc3RpdGVtPjxwYXJhPgorICogICBJbiBjYXNlIG9mIGEgc2VydmVyIHJlZGly
ZWN0aW9uLCAjV2ViS2l0V2ViUmVzb3VyY2U6OnNlbnQtcmVxdWVzdCBzaWduYWwKKyAqICAgaXMg
ZW1pdHRlZCBhZ2FpbiB3aXRoIGEgcmVkaXJlY3RlZCByZXNwb25zZSwgdGhlIGFjdGl2ZSBVUkkg
aXMgdGhlCisgKiAgIHJlZGlyZWN0ZWQgVVJJLgorICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8
bGlzdGl0ZW0+PHBhcmE+CisgKiAgIFdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20g
dGhlIHNlcnZlciwgdGhlIGFjdGl2ZSBVUkkgaXMgdGhlIGZpbmFsCisgKiAgIG9uZSBhbmQgaXQg
d2lsbCBub3QgY2hhbmdlIGFnYWluLgorICogPC9wYXJhPjwvbGlzdGl0ZW0+CisgKiA8L29yZGVy
ZWRsaXN0PgorICoKKyAqIFlvdSBjYW4gbW9uaXRvciB0aGUgYWN0aXZlIFVSSSBieSBjb25uZWN0
aW5nIHRvIHRoZSBub3RpZnk6OnVyaQorICogc2lnbmFsIG9mIEByZXNvdXJjZS4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgY3VycmVudCBhY3RpdmUgVVJJIG9mIEByZXNvdXJjZQorICovCitjb25zdCBj
aGFyKiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291
cmNlKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUkVTT1VSQ0Uo
cmVzb3VyY2UpLCAwKTsKKworICAgIHJldHVybiByZXNvdXJjZS0+cHJpdi0+dXJpLmRhdGEoKTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZToKKyAqIEByZXNv
dXJjZTogYSAjV2ViS2l0V2ViUmVzb3VyY2UKKyAqCisgKiBSZXRyaWV2ZXMgdGhlICNXZWJLaXRV
UklSZXNwb25zZSBvZiB0aGUgcmVzb3VyY2UgbG9hZCBvcGVyYXRpb24uCisgKiBUaGlzIG1ldGhv
ZCByZXR1cm5zICVOVUxMIGlmIGNhbGxlZCBiZWZvcmUgdGhlIHJlc3BvbnNlCisgKiBpcyByZWNl
aXZlZCBmcm9tIHRoZSBzZXJ2ZXIuIFlvdSBjYW4gY29ubmVjdCB0byBub3RpZnk6OnJlc3BvbnNl
CisgKiBzaWduYWwgdG8gYmUgbm90aWZpZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQu
CisgKgorICogUmV0dXJuczogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFVSSVJlc3BvbnNl
LCBvciAlTlVMTCBpZgorICogICAgIHRoZSByZXNwb25zZSBoYXNuJ3QgYmVlbiByZWNlaXZlZCB5
ZXQuCisgKi8KK1dlYktpdFVSSVJlc3BvbnNlKiB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNw
b25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1dFQl9SRVNPVVJDRShyZXNvdXJjZSksIDApOworCisgICAgcmV0dXJu
IHJlc291cmNlLT5wcml2LT5yZXNwb25zZS5nZXQoKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5NzVhYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmgKQEAgLTAsMCAr
MSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWYgIWRlZmlu
ZWQoX19XRUJLSVQyX0hfSU5TSURFX18pICYmICFkZWZpbmVkKFdFQktJVDJfQ09NUElMQVRJT04p
CisjZXJyb3IgIk9ubHkgPHdlYmtpdDIvd2Via2l0Mi5oPiBjYW4gYmUgaW5jbHVkZWQgZGlyZWN0
bHkuIgorI2VuZGlmCisKKyNpZm5kZWYgV2ViS2l0V2ViUmVzb3VyY2VfaAorI2RlZmluZSBXZWJL
aXRXZWJSZXNvdXJjZV9oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0RGVmaW5lcy5oPgorI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9u
c2UuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1dFQl9SRVNPVVJD
RSAgICAgICAgICAgICh3ZWJraXRfd2ViX3Jlc291cmNlX2dldF90eXBlKCkpCisjZGVmaW5lIFdF
QktJVF9XRUJfUkVTT1VSQ0Uob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCBXZWJLaXRXZWJSZXNvdXJjZSkp
CisjZGVmaW5lIFdFQktJVF9JU19XRUJfUkVTT1VSQ0Uob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFKSkKKyNkZWZp
bmUgV0VCS0lUX1dFQl9SRVNPVVJDRV9DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9XRUJfUkVTT1VSQ0UsIFdlYktpdFdlYlJlc291
cmNlQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1JFU09VUkNFX0NMQVNTKGtsYXNzKSAo
R19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1dFQl9SRVNPVVJD
RSkpCisjZGVmaW5lIFdFQktJVF9XRUJfUkVTT1VSQ0VfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCBXZWJL
aXRXZWJSZXNvdXJjZUNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlJlc291cmNl
ICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZTsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRXZWJSZXNv
dXJjZUNsYXNzICAgV2ViS2l0V2ViUmVzb3VyY2VDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRXZWJSZXNvdXJjZVByaXZhdGUgV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlOworCitzdHJ1Y3Qg
X1dlYktpdFdlYlJlc291cmNlIHsKKyAgICBHT2JqZWN0IHBhcmVudDsKKworICAgIFdlYktpdFdl
YlJlc291cmNlUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0V2ViUmVzb3VyY2VD
bGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKK307CisKK1dFQktJVF9BUEkg
R1R5cGUKK3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3R5cGUgICAgICAgICh2b2lkKTsKKworV0VC
S0lUX0FQSSBjb25zdCBnY2hhciAqCit3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkgICAgICAg
ICAoV2ViS2l0V2ViUmVzb3VyY2UgICpyZXNvdXJjZSk7CisKK1dFQktJVF9BUEkgV2ViS2l0VVJJ
UmVzcG9uc2UgKgord2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UgICAgKFdlYktpdFdl
YlJlc291cmNlICAqcmVzb3VyY2UpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlUHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3Vy
Y2VQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVhNTRkNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlJlc291cmNlUHJpdmF0ZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGVfaAor
I2RlZmluZSBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGVfaAorCisjaW5jbHVkZSAiV2ViS2l0UHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFdlYlJlc291cmNlLmgiCisKK1dlYktpdFdlYlJlc291
cmNlKiB3ZWJraXRXZWJSZXNvdXJjZUNyZWF0ZShXS0ZyYW1lUmVmLCBXZWJLaXRVUklSZXF1ZXN0
Kik7Cit2b2lkIHdlYmtpdFdlYlJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2Uq
LCBXZWJLaXRVUklSZXF1ZXN0KiwgV2ViS2l0VVJJUmVzcG9uc2UqKTsKK3ZvaWQgd2Via2l0V2Vi
UmVzb3VyY2VTZXRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSosIFdlYktpdFVSSVJlc3BvbnNl
Kik7Cit2b2lkIHdlYmtpdFdlYlJlc291cmNlTm90aWZ5UHJvZ3Jlc3MoV2ViS2l0V2ViUmVzb3Vy
Y2UqLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpOwordm9pZCB3ZWJraXRXZWJSZXNvdXJjZUZpbmlz
aGVkKFdlYktpdFdlYlJlc291cmNlKik7Cit2b2lkIHdlYmtpdFdlYlJlc291cmNlRmFpbGVkKFdl
YktpdFdlYlJlc291cmNlKiwgR0Vycm9yKik7CisKKworI2VuZGlmIC8vIFdlYktpdFdlYlJlc291
cmNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXcuY3BwCmluZGV4IGJlNTkwZmYuLmIwM2U1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0zMCw5ICsz
MCwxMSBAQAogI2luY2x1ZGUgIldlYktpdFBvbGljeUNsaWVudC5oIgogI2luY2x1ZGUgIldlYktp
dFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNp
bmNsdWRlICJXZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaCIKICNpbmNsdWRlICJXZWJLaXRTZXR0
aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2luY2x1ZGUgIldl
YktpdFdlYkNvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViUmVzb3VyY2VQcml2
YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQcm9wZXJ0aWVz
UHJpdmF0ZS5oIgpAQCAtNjUsNiArNjcsOCBAQCBlbnVtIHsKIAogICAgIFBSSU5UX1JFUVVFU1RF
RCwKIAorICAgIFJFU09VUkNFX0xPQURfU1RBUlRFRCwKKwogICAgIExBU1RfU0lHTkFMCiB9Owog
CkBAIC03OCw2ICs4Miw5IEBAIGVudW0gewogICAgIFBST1BfWk9PTV9MRVZFTAogfTsKIAordHlw
ZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiA+IExvYWRp
bmdSZXNvdXJjZXNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBHUmVmUHRyPFdlYktpdFdl
YlJlc291cmNlPiA+IFJlc291cmNlc01hcDsKKwogc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0
ZSB7CiAgICAgV2ViS2l0V2ViQ29udGV4dCogY29udGV4dDsKICAgICBDU3RyaW5nIHRpdGxlOwpA
QCAtOTIsNiArOTksMTEgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAKICAgICBH
UmVmUHRyPFdlYktpdEhpdFRlc3RSZXN1bHQ+IG1vdXNlVGFyZ2V0SGl0VGVzdFJlc3VsdDsKICAg
ICB1bnNpZ25lZCBtb3VzZVRhcmdldE1vZGlmaWVyczsKKworICAgIC8vIFJlc291cmNlcy4KKyAg
ICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBtYWluUmVzb3VyY2U7CisgICAgTG9hZGluZ1Jl
c291cmNlc01hcCBsb2FkaW5nUmVzb3VyY2VzTWFwOworICAgIFJlc291cmNlc01hcCBzdWJyZXNv
dXJjZXNNYXA7CiB9OwogCiBzdGF0aWMgZ3VpbnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAs
IH07CkBAIC0xNzcsNiArMTg5LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBhdHRhY2hMb2FkZXJDbGllbnRUb1ZpZXcod2ViVmll
dyk7CiAgICAgYXR0YWNoVUlDbGllbnRUb1ZpZXcod2ViVmlldyk7CiAgICAgYXR0YWNoUG9saWN5
Q2xpZW50VG9QYWdlKHdlYlZpZXcpOworICAgIGF0dGFjaFJlc291cmNlTG9hZENsaWVudFRvVmll
dyh3ZWJWaWV3KTsKIAogICAgIFdlYlBhZ2VQcm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNl
R2V0UGFnZSh3ZWJWaWV3QmFzZSk7CiAgICAgcHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRH
UmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENyZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3Qo
dG9BUEkocGFnZSkpKSk7CkBAIC02NzcsNiArNjkwLDI4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAg
ICAgICAgICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfQk9PTEVBTl9fT0JKRUNULAogICAgICAg
ICAgICAgICAgICAgICAgR19UWVBFX0JPT0xFQU4sIDEsCiAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04pOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2Vi
Vmlldzo6cmVzb3VyY2UtbG9hZC1zdGFydGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJL
aXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEByZXNvdXJj
ZTogYSAjV2ViS2l0V2ViUmVzb3VyY2UKKyAgICAgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJUmVx
dWVzdAorICAgICAqCisgICAgICogRW1pdHRlZCB3aGVuIGEgbmV3IHJlc291cmNlIGlzIGdvaW5n
IHRvIGJlIGxvYWRlZC4gVGhlIEByZXF1ZXN0IHBhcmFtZXRlcgorICAgICAqIGNvbnRhaW5zIHRo
ZSAjV2ViS2l0VVJJUmVxdWVzdCB0aGF0IHdpbGwgYmUgc2VudCB0byB0aGUgc2VydmVyLgorICAg
ICAqIFlvdSBjYW4gbW9uaXRvciB0aGUgbG9hZCBvcGVyYXRpb24gYnkgY29ubmVjdGluZyB0byB0
aGUgZGlmZmVyZW50IHNpZ25hbHMKKyAgICAgKiBvZiBAcmVzb3VyY2UuCisgICAgICovCisgICAg
c2lnbmFsc1tSRVNPVVJDRV9MT0FEX1NUQVJURURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJy
ZXNvdXJjZS1sb2FkLXN0YXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9M
QVNULAorICAgICAgICAgICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgcmVzb3VyY2VfbG9hZF9zdGFydGVkKSwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNU
LAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9XRUJfUkVTT1VSQ0UsCisgICAgICAgICAgICAgICAgICAgICBXRUJL
SVRfVFlQRV9VUklfUkVRVUVTVCk7CiB9CiAKIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2Vk
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCkBAIC02
ODcsNiArNzIyLDExIEBAIHZvaWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICBpZiAobG9hZEV2ZW50ID09IFdFQktJVF9MT0FEX1NUQVJURUQpCisgICAg
ICAgIHdlYlZpZXctPnByaXYtPmxvYWRpbmdSZXNvdXJjZXNNYXAuY2xlYXIoKTsKKyAgICBlbHNl
IGlmIChsb2FkRXZlbnQgPT0gV0VCS0lUX0xPQURfQ09NTUlUVEVEKQorICAgICAgICB3ZWJWaWV3
LT5wcml2LT5zdWJyZXNvdXJjZXNNYXAuY2xlYXIoKTsKKwogICAgIGlmIChsb2FkRXZlbnQgIT0g
V0VCS0lUX0xPQURfRklOSVNIRUQpCiAgICAgICAgIHdlYmtpdFdlYlZpZXdVcGRhdGVVUkkod2Vi
Vmlldyk7CiAgICAgZ19zaWduYWxfZW1pdCh3ZWJWaWV3LCBzaWduYWxzW0xPQURfQ0hBTkdFRF0s
IDAsIGxvYWRFdmVudCk7CkBAIC04MTUsNiArODU1LDM4IEBAIHZvaWQgd2Via2l0V2ViVmlld1By
aW50RnJhbWUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV0tGcmFtZVJlZiB3a0ZyYW1lKQogICAg
IGdfc2lnbmFsX2Nvbm5lY3QocHJpbnRPcGVyYXRpb24ubGVha1JlZigpLCAiZmluaXNoZWQiLCBH
X0NBTExCQUNLKGdfb2JqZWN0X3VucmVmKSwgMCk7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld1Jl
c291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV0tGcmFtZVJlZiB3a0Zy
YW1lLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIGJvb2wgaXNNYWluUmVzb3VyY2UpCit7CisgICAgLy8gRklYTUU6IGlnbm9yZSByZXNvdXJj
ZXMgd2hlbiByZXBsYWNpbmcgY29udGVudC4KKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3Vy
Y2UgPSB3ZWJraXRXZWJSZXNvdXJjZUNyZWF0ZSh3a0ZyYW1lLCByZXF1ZXN0KTsKKyAgICBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYgKFdLRnJhbWVJ
c01haW5GcmFtZSh3a0ZyYW1lKSAmJiBpc01haW5SZXNvdXJjZSkKKyAgICAgICAgcHJpdi0+bWFp
blJlc291cmNlID0gcmVzb3VyY2U7CisgICAgcHJpdi0+bG9hZGluZ1Jlc291cmNlc01hcC5zZXQo
cmVzb3VyY2VJZGVudGlmaWVyLCBhZG9wdEdSZWYocmVzb3VyY2UpKTsKKyAgICBnX3NpZ25hbF9l
bWl0KHdlYlZpZXcsIHNpZ25hbHNbUkVTT1VSQ0VfTE9BRF9TVEFSVEVEXSwgMCwgcmVzb3VyY2Us
IHJlcXVlc3QpOworfQorCitXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2ViVmlld0dldExvYWRp
bmdXZWJSZXNvdXJjZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCB1aW50NjRfdCByZXNvdXJjZUlk
ZW50aWZpZXIpCit7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gcmVzb3VyY2UgPSB3
ZWJWaWV3LT5wcml2LT5sb2FkaW5nUmVzb3VyY2VzTWFwLmdldChyZXNvdXJjZUlkZW50aWZpZXIp
OworICAgIHJldHVybiByZXNvdXJjZS5nZXQoKTsKK30KKwordm9pZCB3ZWJraXRXZWJWaWV3UmVt
b3ZlTG9hZGluZ1dlYlJlc291cmNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIHVpbnQ2NF90IHJl
c291cmNlSWRlbnRpZmllcikKK3sKKyAgICB3ZWJWaWV3LT5wcml2LT5sb2FkaW5nUmVzb3VyY2Vz
TWFwLnJlbW92ZShyZXNvdXJjZUlkZW50aWZpZXIpOworfQorCitXZWJLaXRXZWJSZXNvdXJjZSog
d2Via2l0V2ViVmlld1Jlc291cmNlTG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSog
cmVzb3VyY2UgPSB3ZWJraXRXZWJWaWV3R2V0TG9hZGluZ1dlYlJlc291cmNlKHdlYlZpZXcsIHJl
c291cmNlSWRlbnRpZmllcik7CisgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJW
aWV3LT5wcml2OworICAgIGlmIChyZXNvdXJjZSAhPSBwcml2LT5tYWluUmVzb3VyY2UpCisgICAg
ICAgIHByaXYtPnN1YnJlc291cmNlc01hcC5zZXQoU3RyaW5nOjpmcm9tVVRGOCh3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKSwgcmVzb3VyY2UpOworICAgIHdlYmtpdFdlYlZp
ZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2Uod2ViVmlldywgcmVzb3VyY2VJZGVudGlmaWVyKTsK
KyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisKIC8qKgogICogd2Via2l0X3dlYl92aWV3X25ldzoK
ICAqCkBAIC0xNDM2LDMgKzE1MDgsNDIgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9l
ZGl0aW5nX2NvbW1hbmQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgY2hhcioKICAgICBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4gd2tDb21tYW5kKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRl
V2l0aFVURjhDU3RyaW5nKGNvbW1hbmQpKTsKICAgICBXS1BhZ2VFeGVjdXRlQ29tbWFuZCh0b0FQ
SShwYWdlKSwgd2tDb21tYW5kLmdldCgpKTsKIH0KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fcmVzb3VyY2U6CisgKiBAd2ViX3ZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisg
KiBSZXR1cm4gdGhlIG1haW4gcmVzb3VyY2Ugb2YgQHdlYl92aWV3LgorICogU2VlIGFsc28gd2Vi
a2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMoKToKKyAqCisgKiBSZXR1cm5zOiAodHJhbnNm
ZXIgbm9uZSk6IHRoZSBtYWluICNXZWJLaXRXZWJSZXNvdXJjZSBvZiB0aGUgdmlldworICogICAg
b3IgJU5VTEwgaWYgbm90aGluZyBoYXMgYmVlbiBsb2FkZWQuCisgKi8KK1dlYktpdFdlYlJlc291
cmNlKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldyksIDApOworCisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPm1haW5SZXNvdXJjZS5nZXQo
KTsKK30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlczoKKyAqIEB3
ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybiB0aGUgbGlzdCBvZiBzdWJy
ZXNvdXJjZXMgb2YgQHdlYl92aWV3LgorICogU2VlIGFsc28gd2Via2l0X3dlYl92aWV3X2dldF9t
YWluX3Jlc291cmNlKCkuCisgKgorICogUmV0dXJuczogKGVsZW1lbnQtdHlwZSBXZWJLaXRXZWJS
ZXNvdXJjZSkgKHRyYW5zZmVyIGNvbnRhaW5lcik6IGEgbGlzdCBvZiAjV2ViS2l0V2ViUmVzb3Vy
Y2UuCisgKi8KK0dMaXN0KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyhXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19X
RUJfVklFVyh3ZWJWaWV3KSwgMCk7CisKKyAgICBHTGlzdCogc3VicmVzb3VyY2VzID0gMDsKKyAg
ICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgUmVzb3Vy
Y2VzTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2LT5zdWJyZXNvdXJjZXNNYXAuZW5kKCk7
CisgICAgZm9yIChSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJpdi0+c3VicmVz
b3VyY2VzTWFwLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgc3VicmVzb3VyY2Vz
ID0gZ19saXN0X3ByZXBlbmQoc3VicmVzb3VyY2VzLCBpdC0+c2Vjb25kLmdldCgpKTsKKworICAg
IHJldHVybiBnX2xpc3RfcmV2ZXJzZShzdWJyZXNvdXJjZXMpOworfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5oCmluZGV4IGExYjIxNDIuLjkx
NDE1NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFNldHRp
bmdzLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRVUklSZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8
d2Via2l0Mi9XZWJLaXRXZWJDb250ZXh0Lmg+CisjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJS
ZXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlld0Jhc2UuaD4KICNpbmNs
dWRlIDx3ZWJraXQyL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFBvbGljeURlY2lzaW9uLmg+CkBAIC0xMTcsMzQgKzExOCwzNyBAQCBzdHJ1Y3QgX1dl
YktpdFdlYlZpZXcgewogc3RydWN0IF9XZWJLaXRXZWJWaWV3Q2xhc3MgewogICAgIFdlYktpdFdl
YlZpZXdCYXNlQ2xhc3MgcGFyZW50OwogCi0gICAgdm9pZCAgICAgICAoKiBsb2FkX2NoYW5nZWQp
ICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgICAgICAgICAg
ICBsb2FkX2V2ZW50KTsKLSAgICBnYm9vbGVhbiAgICgqIGxvYWRfZmFpbGVkKSAgICAgICAgICAo
V2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxvYWRfZXZl
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFy
ICAgICAgICAgICAgICAgKmZhaWxpbmdfdXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHRXJyb3IgICAgICAgICAgICAgICAgICAgICplcnJvcik7Ci0KLSAgICBH
dGtXaWRnZXQgKigqIGNyZWF0ZSkgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAg
ICAgICAqd2ViX3ZpZXcpOwotICAgIHZvaWQgICAgICAgKCogcmVhZHlfdG9fc2hvdykgICAgICAg
IChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7Ci0gICAgdm9pZCAgICAgICAo
KiBjbG9zZSkgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWV3KTsKLQotICAgIGdib29sZWFuICAgKCogc2NyaXB0X2FsZXJ0KSAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVzc2FnZSk7Ci0gICAg
Z2Jvb2xlYW4gICAoKiBzY3JpcHRfY29uZmlybSkgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnYm9vbGVhbiAgICAgICAgICAgICAgICAgICpjb25maXJt
ZWQpOwotICAgIGdib29sZWFuICAgKCogc2NyaXB0X3Byb21wdCkgICAgICAgIChXZWJLaXRXZWJW
aWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqbWVzc2FnZSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAg
ICAqZGVmYXVsdF90ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnY2hhciAgICAgICAgICAgICAgICAgICAgKip0ZXh0KTsKLSAgICBnYm9vbGVhbiAgICgqIGRl
Y2lkZV9wb2xpY3kpICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURl
Y2lzaW9uICAgICAgKmRlY2lzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgICB0eXBlKTsKLSAgICB2b2lkICAgICAg
ICgqIG1vdXNlX3RhcmdldF9jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2Vi
X3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdEhp
dFRlc3RSZXN1bHQgICAgICAgKmhpdF90ZXN0X3Jlc3VsdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJz
KTsKLSAgICBnYm9vbGVhbiAgICgqIHByaW50X3JlcXVlc3RlZCkgICAgICAoV2ViS2l0V2ViVmll
dyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYktpdFByaW50T3BlcmF0aW9uICAgICAgKnByaW50X29wZXJhdGlvbik7Cisg
ICAgdm9pZCAgICAgICAoKiBsb2FkX2NoYW5nZWQpICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAg
ICAgICAgICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxvYWRfZXZlbnQpOworICAgIGdib29s
ZWFuICAgKCogbG9hZF9mYWlsZWQpICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRMb2FkRXZlbnQgICAgICAgICAgICBsb2FkX2V2ZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAgICAgICAgICAqZmFpbGlu
Z191cmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRXJyb3Ig
ICAgICAgICAgICAgICAgICAgICplcnJvcik7CisKKyAgICBHdGtXaWRnZXQgKigqIGNyZWF0ZSkg
ICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKyAg
ICB2b2lkICAgICAgICgqIHJlYWR5X3RvX3Nob3cpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3KTsKKyAgICB2b2lkICAgICAgICgqIGNsb3NlKSAgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKKworICAgIGdib29s
ZWFuICAgKCogc2NyaXB0X2FsZXJ0KSAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBnY2hhciAgICAgICAgICAgICAgICptZXNzYWdlKTsKKyAgICBnYm9vbGVhbiAgICgqIHNj
cmlwdF9jb25maXJtKSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIg
ICAgICAgICAgICAgICAqbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdib29sZWFuICAgICAgICAgICAgICAgICAgKmNvbmZpcm1lZCk7CisgICAgZ2Jv
b2xlYW4gICAoKiBzY3JpcHRfcHJvbXB0KSAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAg
ICAgICp3ZWJfdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICpkZWZhdWx0
X3RleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2hhciAg
ICAgICAgICAgICAgICAgICAgKip0ZXh0KTsKKyAgICBnYm9vbGVhbiAgICgqIGRlY2lkZV9wb2xp
Y3kpICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb24g
ICAgICAqZGVjaXNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRQb2xpY3lEZWNpc2lvblR5cGUgICB0eXBlKTsKKyAgICB2b2lkICAgICAgICgqIG1v
dXNlX3RhcmdldF9jaGFuZ2VkKSAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0SGl0VGVz
dFJlc3VsdCAgICAgICAqaGl0X3Rlc3RfcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZXJzKTsK
KyAgICBnYm9vbGVhbiAgICgqIHByaW50X3JlcXVlc3RlZCkgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0UHJpbnRPcGVyYXRpb24gICAgICAqcHJpbnRfb3BlcmF0aW9uKTsKKyAg
ICB2b2lkICAgICAgICgqIHJlc291cmNlX2xvYWRfc3RhcnRlZCkgKFdlYktpdFdlYlZpZXcgICAg
ICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViS2l0V2ViUmVzb3VyY2UgICAgICAgICAqcmVzb3VyY2UsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRVUklSZXF1ZXN0ICAgICAgICAgICpy
ZXF1ZXN0KTsKIAogICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KICAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKQEAgLTI2NSw2ICsyNjksMTMgQEAgd2Vi
a2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFuZF9maW5pc2ggKFdlYktpdFdl
YlZpZXcgICAgICAgICAgICAgKncKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0X3dlYl92aWV3X2V4
ZWN1dGVfZWRpdGluZ19jb21tYW5kICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAg
ICAgKndlYl92aWV3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAgICAgKmNvbW1hbmQpOworCitXRUJLSVRf
QVBJIFdlYktpdFdlYlJlc291cmNlICoKK3dlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJj
ZSAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7
CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXMg
ICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsK
KwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCBhZDhhYjIwLi43M2M5
MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQ1LDUgKzQ1LDkgQEAgV0tTdHJpbmdSZWYgd2Via2l0
V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyosIGNvbnN0IENTdHJpbmcm
IG1lc3MKIHZvaWQgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRXZWJWaWV3
KiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiopOwogdm9p
ZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBXS0hpdFRl
c3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZpZXdQcmlu
dEZyYW1lKFdlYktpdFdlYlZpZXcqLCBXS0ZyYW1lUmVmKTsKK3ZvaWQgd2Via2l0V2ViVmlld1Jl
c291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdLRnJhbWVSZWYsIHVpbnQ2NF90IHJl
c291cmNlSWRlbnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCosIGJvb2wgaXNNYWluUmVzb3VyY2Up
OworV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdFdlYlZpZXdHZXRMb2FkaW5nV2ViUmVzb3VyY2Uo
V2ViS2l0V2ViVmlldyosIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7Cit2b2lkIHdlYmtp
dFdlYlZpZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UoV2ViS2l0V2ViVmlldyosIHVpbnQ2NF90
IHJlc291cmNlSWRlbnRpZmllcik7CitXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2ViVmlld1Jl
c291cmNlTG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJjZUlkZW50
aWZpZXIpOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dt
bCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1kb2Nz
LnNnbWwKaW5kZXggNWNkODU5ZC4uNDE5NjE1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21sCkBAIC0y
Niw2ICsyNiw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3BvbnNlUG9s
aWN5RGVjaXNpb24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEhpdFRl
c3RSZXN1bHQueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFByaW50T3Bl
cmF0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJSZXNvdXJj
ZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1sIi8+CiAg
IDwvY2hhcHRlcj4KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKaW5kZXggYWFkZDM5Yy4uMmY2
YzQwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93
ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0CkBAIC04Niw2ICs4Niw4IEBAIHdlYmtp
dF93ZWJfdmlld19nZXRfem9vbV9sZXZlbAogd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2Vk
aXRpbmdfY29tbWFuZAogd2Via2l0X3dlYl92aWV3X2Nhbl9leGVjdXRlX2VkaXRpbmdfY29tbWFu
ZF9maW5pc2gKIHdlYmtpdF93ZWJfdmlld19leGVjdXRlX2VkaXRpbmdfY29tbWFuZAord2Via2l0
X3dlYl92aWV3X2dldF9tYWluX3Jlc291cmNlCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291
cmNlcwogCiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYlZpZXdDbGFzcwpAQCAtNDQ0
LDYgKzQ0NiwyNiBAQCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlCiA8L1NFQ1RJT04+
CiAKIDxTRUNUSU9OPgorPEZJTEU+V2ViS2l0V2ViUmVzb3VyY2U8L0ZJTEU+CitXZWJLaXRXZWJS
ZXNvdXJjZQord2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpCit3ZWJraXRfd2ViX3Jlc291cmNl
X2dldF9yZXNwb25zZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFdlYlJlc291cmNl
Q2xhc3MKK1dFQktJVF9UWVBFX1dFQl9SRVNPVVJDRQorV0VCS0lUX1dFQl9SRVNPVVJDRQorV0VC
S0lUX0lTX1dFQl9SRVNPVVJDRQorV0VCS0lUX1dFQl9SRVNPVVJDRV9DTEFTUworV0VCS0lUX0lT
X1dFQl9SRVNPVVJDRV9DTEFTUworV0VCS0lUX1dFQl9SRVNPVVJDRV9HRVRfQ0xBU1MKKworPFNV
QlNFQ1RJT04gUHJpdmF0ZT4KK1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZQord2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEVy
cm9yPC9GSUxFPgogV0VCS0lUX05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJST1IKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay50eXBlcyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay50eXBlcwppbmRleCBjYmEyZGY0Li5iMWIyZTM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC05LDQgKzks
NCBAQCB3ZWJraXRfdXJpX3Jlc3BvbnNlX2dldF90eXBlCiB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0
X3R5cGUKIHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlwZQogd2Via2l0X2Rvd25sb2Fk
X2dldF90eXBlCi0KK3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3R5cGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KaW5kZXgg
MzVlY2U2OC4uMGNlMDdiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvdGVzdHMvR05VbWFrZWZpbGUuYW0KQEAgLTksNyArOSw4IEBAIFRFU1RfUFJPR1Mg
Kz0gXAogCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0RG93bmxvYWRzIFwKIAlQcm9ncmFt
cy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBcCiAJUHJvZ3JhbXMvV2Vi
S2l0MkFQSVRlc3RzL1Rlc3RXZWJWaWV3RWRpdG9yIFwKLQlQcm9ncmFtcy9XZWJLaXQyQVBJVGVz
dHMvVGVzdFByaW50aW5nCisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RQcmludGluZyBc
CisJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RSZXNvdXJjZXMKIAogbm9pbnN0X1BST0dS
QU1TICs9ICQoVEVTVF9QUk9HUykKIApAQCAtMTI4LDQgKzEyOSwxMCBAQCBQcm9ncmFtc19XZWJL
aXQyQVBJVGVzdHNfVGVzdFByaW50aW5nX0NQUEZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2NwcGZs
YWdzKSAkKEdUSwogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREFERCA9
ICQod2Via2l0Ml90ZXN0c19sZGFkZCkgJChHVEtfVU5JWF9QUklOVElOR19MSUJTKQogUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RQcmludGluZ19MREZMQUdTID0gJCh3ZWJraXQyX3Rlc3Rz
X2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0UmVzb3VyY2VzX1NPVVJD
RVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RSZXNvdXJjZXMuY3BwCitQcm9ncmFtc19XZWJLaXQyQVBJVGVzdHNfVGVzdFJlc291cmNlc19D
UFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFncykKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0UmVzb3VyY2VzX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3Jh
bXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNfTERGTEFHUyA9ICQod2Via2l0Ml90ZXN0
c19sZGZsYWdzKQorCiBlbmRpZiAjIEVOQUJMRV9XRUJLSVQyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0RG93bmxvYWRzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCmluZGV4
IDQ2MWNlZmEuLmExMTllNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCkBAIC0xNzMsMTUgKzE3Myw5IEBA
IHB1YmxpYzoKICAgICBndWludDY0IG1fZG93bmxvYWRTaXplOwogfTsKIAotc3RhdGljIENTdHJp
bmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCi17Ci0gICAgR093blB0cjxjaGFyPiByZXNv
dXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRfU1JDX0RJUiwgIlNvdXJjZSIsICJXZWJL
aXQiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIsIE5VTEwpKTsKLSAgICByZXR1cm4gcmVz
b3VyY2VzRGlyLmdldCgpOwotfQotCiBzdGF0aWMgdm9pZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUo
RG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogewotICAgIEdPd25QdHI8Y2hhcj4g
c291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5k
YXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAgICBHT3duUHRyPGNoYXI+IHNvdXJjZVBhdGgo
Z19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgp
LCAidGVzdC5wZGYiLCBOVUxMKSk7CiAgICAgR1JlZlB0cjxHRmlsZT4gc291cmNlID0gYWRvcHRH
UmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlUGF0aC5nZXQoKSkpOwogICAgIEdSZWZQdHI8
R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRvcHRHUmVmKGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJj
ZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFSRF9TSVpFLCBzdGF0aWNfY2FzdDxHRmls
ZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOwogICAgIEdPd25QdHI8Y2hhcj4gc291cmNlVVJJ
KGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQoKSkpOwpAQCAtMjU4LDcgKzI1Miw3IEBAIHN0YXRp
YyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9yKERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0
LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2NtcGZsb2F0KHdlYmtpdF9kb3dubG9hZF9n
ZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdldCgpKSwgPCwgMSk7CiAKICAgICB0ZXN0
LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxPQURfRVJST1JfREVTVElOQVRJT047Ci0g
ICAgR093blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmlsZW5hbWUoZ2V0V2ViS2l0MVRlc3RSZXNv
dWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVMTCkpOworICAgIEdPd25QdHI8Y2hhcj4g
cGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5k
YXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKICAgICBHUmVmUHRyPEdGaWxlPiBmaWxlID0gYWRv
cHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5nZXQoKSkpOwogICAgIEdPd25QdHI8Y2hh
cj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkpKTsKICAgICBkb3dubG9hZCA9IGFkb3B0
R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRfdXJpKHRlc3QtPm1fd2ViQ29udGV4dCwg
dXJpLmdldCgpKSk7CkBAIC0zMDEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgc2VydmVyQ2FsbGJh
Y2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgY2hhcioK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdPd25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19i
dWlsZF9maWxlbmFtZShnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBO
VUxMKSk7CisgICAgR093blB0cjxjaGFyPiBmaWxlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6
OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksIHBhdGgsIE5VTEwpKTsKICAgICBj
aGFyKiBjb250ZW50czsKICAgICBnc2l6ZSBjb250ZW50c0xlbmd0aDsKICAgICBpZiAoIWdfZmls
ZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVuZ3Ro
LCAwKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVz
dHMvVGVzdE1haW4uaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rl
c3RNYWluLmgKaW5kZXggMzlhMjAwMC4uZmUwYjM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFpbi5oCkBAIC0yMCw2ICsyMCw3IEBACiAj
aWZuZGVmIFRlc3RNYWluX2gKICNkZWZpbmUgVGVzdE1haW5faAogCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQ1N0cmluZy5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0dPd25QdHIuaD4K
ICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8Z2xpYi1vYmpl
Y3QuaD4KQEAgLTQ1LDYgKzQ2LDE1IEBAIHB1YmxpYzoKIAogICAgIH5UZXN0KCkKICAgICB7Cisg
ICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0czoiKTsKKyAgICAgICAgSGFzaFNl
dDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fd2F0Y2hlZE9iamVjdHMuZW5kKCk7
CisgICAgICAgIGZvciAoSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV93
YXRjaGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICAgICBnX3By
aW50KCIgJXMoJXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0
PEdUeXBlSW5zdGFuY2UqPigqaXQpKSwgKml0KTsKKyAgICAgICAgZ19wcmludCgiXG4iKTsKKwog
ICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3RzLmlzRW1wdHkoKSk7CiAgICAgfQogCkBA
IC01OSw2ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAgIGdfb2JqZWN0X3dlYWtfcmVmKG9iamVj
dCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4ob2JqZWN0RmluYWxpemVkKSwgdGhpcyk7
CiAgICAgfQogCisgICAgc3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0Rpcigp
CisgICAgeworICAgICAgICBHT3duUHRyPGNoYXI+IHJlc291cmNlc0RpcihnX2J1aWxkX2ZpbGVu
YW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldlYktpdCIsICJndGsiLCAidGVzdHMiLCAi
cmVzb3VyY2VzIiwgTlVMTCkpOworICAgICAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwor
ICAgIH0KKwogICAgIEhhc2hTZXQ8R09iamVjdCo+IG1fd2F0Y2hlZE9iamVjdHM7CiB9OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVz
b3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RS
ZXNvdXJjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYzRiNTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0
cy9UZXN0UmVzb3VyY2VzLmNwcApAQCAtMCwwICsxLDUxMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJL
aXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJLaXRUZXN0U2VydmVyKiBrU2VydmVyOwor
CitjbGFzcyBSZXNvdXJjZXNUZXN0OiBwdWJsaWMgV2ViVmlld1Rlc3QgeworcHVibGljOgorICAg
IE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2VzVGVzdCk7CisKKyAgICBzdGF0aWMgdm9p
ZCByZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2soV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNl
LCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RS
ZXNwb25zZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIHRlc3QtPmFzc2Vy
dE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVxdWVzdCkpOworICAg
ICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAgICAgICAgIHRlc3QtPmFzc2VydE9iamVj
dElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1QocmVkaXJlY3RSZXNwb25zZSkpOwor
ICAgICAgICB0ZXN0LT5yZXNvdXJjZVNlbnRSZXF1ZXN0KHJlc291cmNlLCByZXF1ZXN0LCByZWRp
cmVjdFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVk
UmVzcG9uc2VDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMq
LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgZ19hc3NlcnQod2Via2l0X3dl
Yl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3VyY2UpKTsKKyAgICAgICAgdGVzdC0+cmVzb3Vy
Y2VSZWNlaXZlZFJlc3BvbnNlKHJlc291cmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBy
ZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwg
Z3VpbnQ2NCBieXRlc1JlY2VpdmVkLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZERhdGEocmVzb3VyY2UsIGJ5dGVzUmVjZWl2ZWQpOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNlRmluaXNoZWRDYWxsYmFjayhXZWJLaXRX
ZWJSZXNvdXJjZSogcmVzb3VyY2UsIFJlc291cmNlc1Rlc3QqIHRlc3QpCisgICAgeworICAgICAg
ICB0ZXN0LT5yZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCByZXNvdXJjZUZhaWxlZENhbGxiYWNrKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwg
R0Vycm9yKiBlcnJvciwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNz
ZXJ0KGVycm9yKTsKKyAgICAgICAgdGVzdC0+cmVzb3VyY2VGYWlsZWQocmVzb3VyY2UsIGVycm9y
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkQ2FsbGJhY2so
V2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAgICAg
ICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHX09CSkVDVChy
ZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5hc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZp
bmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAgICAgdGVzdC0+cmVzb3VyY2VMb2FkU3Rh
cnRlZChyZXNvdXJjZSwgcmVxdWVzdCk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QocmVzb3Vy
Y2UsICJzZW50LXJlcXVlc3QiLCBHX0NBTExCQUNLKHJlc291cmNlU2VudFJlcXVlc3RDYWxsYmFj
ayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAibm90aWZ5Ojpy
ZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlQ2FsbGJhY2spLCB0
ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgInJlY2VpdmVkLWRhdGEi
LCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWREYXRhQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAg
ICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgImZpbmlzaGVkIiwgR19DQUxMQkFDSyhyZXNv
dXJjZUZpbmlzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChy
ZXNvdXJjZSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VGYWlsZWRDYWxsYmFjayksIHRl
c3QpOworICAgIH0KKworICAgIFJlc291cmNlc1Rlc3QoKQorICAgICAgICA6IFdlYlZpZXdUZXN0
KCkKKyAgICAgICAgLCBtX3Jlc291cmNlc0xvYWRlZCgwKQorICAgICAgICAsIG1fcmVzb3VyY2Vz
VG9Mb2FkKDApCisgICAgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2ViVmlldywgInJl
c291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0socmVzb3VyY2VMb2FkU3RhcnRlZENhbGxi
YWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlTG9hZFN0YXJ0
ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChX
ZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdl
YktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlUmVjZWl2
ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVk
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VGaW5pc2hlZChXZWJL
aXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X21hdGNoZWQocmVzb3VyY2UsIEdfU0lHTkFMX01BVENIX0RBVEEsIDAsIDAs
IDAsIDAsIHRoaXMpOworICAgICAgICBpZiAoKyttX3Jlc291cmNlc0xvYWRlZCA9PSBtX3Jlc291
cmNlc1RvTG9hZCkKKyAgICAgICAgICAgIGdfbWFpbl9sb29wX3F1aXQobV9tYWluTG9vcCk7Cisg
ICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNl
KiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0X25vdF9y
ZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6
ZV90IHJlc291cmNlc0NvdW50KQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAw
OworICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJlc291cmNlc0NvdW50OworICAgICAgICBn
X21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAgfQorCisgICAgc2l6ZV90IG1fcmVzb3Vy
Y2VzTG9hZGVkOworICAgIHNpemVfdCBtX3Jlc291cmNlc1RvTG9hZDsKK307CisKK3N0YXRpYyB2
b2lkIHRlc3RXZWJWaWV3UmVzb3VyY2VzKFJlc291cmNlc1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0LCB0aGVyZSBzaG91bG5kJ3QgYmUgcmVz
b3VyY2VzLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2Uo
dGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoIXdlYmtpdF93ZWJfdmlld19nZXRfc3Vi
cmVzb3VyY2VzKHRlc3QtPm1fd2ViVmlldykpOworCisgICAgLy8gTG9hZCBzaW1wbGUgcGFnZSB3
aXRob3V0IHN1YnJlc291cmNlcy4KKyAgICB0ZXN0LT5sb2FkSHRtbCgiPGh0bWw+PGJvZHk+VGVz
dGluZyBXZWJLaXRHVEsrPC9ib2R5PjwvaHRtbD4iLCAwKTsKKyAgICB0ZXN0LT53YWl0VW50aWxM
b2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UgPSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2Vy
dChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJp
KHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3Vy
Y2UpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXModGVz
dC0+bV93ZWJWaWV3KSk7CisKKyAgICAvLyBMb2FkIHNpbXBsZSBwYWdlIHdpdGggc3VicmVzb3Vy
Y2VzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEo
KSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworCisgICAgcmVzb3Vy
Y2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KTsK
KyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3RyKHdlYmtpdF93ZWJf
dmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dl
dF91cmkocmVzb3VyY2UpKTsKKyAgICBHT3duUHRyPEdMaXN0PiBzdWJyZXNvdXJjZXMod2Via2l0
X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXModGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3Nl
cnQoc3VicmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZ19saXN0X2xlbmd0aChzdWJy
ZXNvdXJjZXMuZ2V0KCkpLCA9PSwgMyk7CisKKyNpZiAwCisgICAgLy8gTG9hZCB0aGUgc2FtZSBV
UkkgYWdhaW4uCisgICAgLy8gRklYTUU6IHdlIG5lZWQgYSB3b3JrYXJvdW5kIGZvciBidWcgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4NTEwLgorICAgIHRlc3QtPmxv
YWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworI2VuZGlmCisKKyAgICAvLyBSZWxvYWQuCisgICAg
d2Via2l0X3dlYl92aWV3X3JlbG9hZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHRlc3QtPndhaXRV
bnRpbFJlc291cmNlc0xvYWRlZCg0KTsKK30KKworY2xhc3MgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDogcHVibGljIFJlc291cmNlc1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJ
WFRVUkUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCk7CisKKyAgICBlbnVtIExvYWRFdmVudHMgewor
ICAgICAgICBTdGFydGVkLAorICAgICAgICBTZW50UmVxdWVzdCwKKyAgICAgICAgUmVkaXJlY3Rl
ZCwKKyAgICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKKyAgICAgICAgUmVjZWl2ZWREYXRhLAorICAg
ICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmFpbGVkCisgICAgfTsKKworICAgIFNpbmdsZVJlc291
cmNlTG9hZFRlc3QoKQorICAgICAgICA6IFJlc291cmNlc1Rlc3QoKQorICAgICAgICAsIG1fcmVz
b3VyY2VEYXRhUmVjZWl2ZWQoMCkKKyAgICB7CisgICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9
IDI7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAg
IGlmIChyZXNvdXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJW
aWV3KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlRGF0YVJlY2Vp
dmVkID0gMDsKKyAgICAgICAgbV9yZXNvdXJjZSA9IHJlc291cmNlOworICAgICAgICBtX2xvYWRF
dmVudHMuYXBwZW5kKFN0YXJ0ZWQpOworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VTZW50UmVx
dWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVl
c3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNlKQorICAgIHsKKyAgICAgICAg
aWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5k
KFJlZGlyZWN0ZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBw
ZW5kKFNlbnRSZXF1ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNw
b25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVz
b3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2xv
YWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkUmVzcG9uc2UpOworICAgIH0KKworICAgIHZvaWQgcmVz
b3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0IGJ5
dGVzUmVjZWl2ZWQpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlRGF0YVJlY2VpdmVkICs9
IGJ5dGVzUmVjZWl2ZWQ7CisgICAgICAgIGlmICghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKFJlY2Vp
dmVkRGF0YSkpCisgICAgICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7
CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZpbmlzaGVkKFdlYktpdFdlYlJlc291cmNlKiBy
ZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKSB7Cisg
ICAgICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghbV9sb2FkRXZlbnRz
LmNvbnRhaW5zKEZhaWxlZCkpIHsKKyAgICAgICAgICAgIFdlYktpdFVSSVJlc3BvbnNlKiByZXNw
b25zZSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jlc3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkp
OworICAgICAgICAgICAgZ19hc3NlcnQocmVzcG9uc2UpOworICAgICAgICAgICAgZ19hc3NlcnRf
Y21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X2NvbnRlbnRfbGVuZ3RoKHJlc3BvbnNlKSwg
PT0sIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQpOworICAgICAgICB9CisgICAgICAgIG1fbG9hZEV2
ZW50cy5hcHBlbmQoRmluaXNoZWQpOworICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZp
bmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmFpbGVkKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7CisgICAgICAgIGlm
IChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQorICAgICAgICAgICAgbV9sb2FkRXZlbnRzLmFwcGVu
ZChGYWlsZWQpOworICAgIH0KKworICAgIHZvaWQgd2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2lo
ZWQoKQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZSA9IDA7CisgICAgICAgIG1fcmVzb3VyY2Vz
TG9hZGVkID0gMDsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOworICAgIH0K
KworICAgIGludCB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFuZFJldHVybkhUVFBTdGF0
dXNSZXNwb25zZSgpCisgICAgeworICAgICAgICB3YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhl
ZCgpOworICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNlKTsKKyAgICAgICAgV2ViS2l0VVJJUmVz
cG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UobV9yZXNv
dXJjZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHJlc3BvbnNlKTsKKyAgICAgICAgcmV0dXJu
IHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19jb2RlKHJlc3BvbnNlKTsKKyAgICB9CisK
KyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBtX3Jlc291cmNlOworICAgIFZlY3RvcjxM
b2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CisgICAgZ3VpbnQ2NCBtX3Jlc291cmNlRGF0YVJlY2Vp
dmVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJlc291cmNlTG9hZGluZyhTaW5nbGVSZXNv
dXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIHRlc3QtPmxvYWRVUkko
a1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAg
dGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0
LT5tX3Jlc291cmNlKTsKKyAgICBWZWN0b3I8U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6TG9hZEV2
ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50czsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09
LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAg
IGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpS
ZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2lu
Z2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRhKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQo
ZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2
ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRo
KCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVz
b3VyY2VMb2FkRmluc2loZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDYpOworICAgIGdfYXNzZXJ0X2Nt
cGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBTaW5nbGVS
ZXNvdXJjZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRz
WzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWRSZXNwb25zZSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlJl
Y2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s1XSwgPT0sIFNpbmdsZVJl
c291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBldmVudHMuY2xlYXIoKTsKKworICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ludmFsaWQtY3NzLmh0bWwiKS5k
YXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbnNpaGVkKCk7CisgICAg
Z19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50cy5z
aXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1sx
XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNlbnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2Vy
dF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsK
KyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0
V2ViUmVzb3VyY2VSZXNwb25zZShTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rw
b2ludGVyKQoreworICAgIC8vIE5vIGNhY2hlZCByZXN1cmNlOiBGaXJzdCBsb2FkLgorICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRh
dGEoKSk7CisgICAgZ2ludCBzdGF0dXNDb2RlID0gdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2Fk
Rmluc2loZWRBbmRSZXR1cm5IVFRQU3RhdHVzUmVzcG9uc2UoKTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoc3RhdHVzQ29kZSwgPT0sIFNPVVBfU1RBVFVTX09LKTsKKworICAgIC8vIE5vIGNhY2hlZCBy
ZXN1cmNlOiBTZWNvbmQgbG9hZC4KKyAgICB0ZXN0LT5sb2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZv
clBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkpOworICAgIHN0YXR1c0NvZGUgPSB0ZXN0
LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFuZFJldHVybkhUVFBTdGF0dXNSZXNwb25z
ZSgpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXNDb2RlLCA9PSwgU09VUF9TVEFUVVNfT0sp
OworCisgICAgLy8gTm8gY2FjaGVkIHJlc3VyY2U6IFJlbG9hZC4KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAgc3RhdHVzQ29kZSA9IHRlc3QtPndhaXRV
bnRpbFJlc291cmNlTG9hZEZpbnNpaGVkQW5kUmV0dXJuSFRUUFN0YXR1c1Jlc3BvbnNlKCk7Cisg
ICAgZ19hc3NlcnRfY21waW50KHN0YXR1c0NvZGUsID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAg
ICAvLyBDYWNoZWQgcmVzb3VyY2U6IEZpcnN0IGxvYWQuCisgICAgdGVzdC0+bG9hZFVSSShrU2Vy
dmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIpLmRhdGEoKSk7CisgICAgc3RhdHVzQ29k
ZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbnNpaGVkQW5kUmV0dXJuSFRUUFN0YXR1
c1Jlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXR1c0NvZGUsID09LCBTT1VQX1NU
QVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IFNlY29uZCBsb2FkLgorICAgIHRl
c3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkp
OworICAgIHN0YXR1c0NvZGUgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFu
ZFJldHVybkhUVFBTdGF0dXNSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXND
b2RlLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gQ2FjaGVkIHJlc291cmNlOiBSZWxv
YWQuCisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh0ZXN0LT5tX3dlYlZpZXcpOworICAgIHN0
YXR1c0NvZGUgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFuZFJldHVybkhU
VFBTdGF0dXNSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXNDb2RlLCA9PSwg
U09VUF9TVEFUVVNfTk9UX01PRElGSUVEKTsKK30KKworY2xhc3MgUmVzb3VyY2VVUklUcmFja2lu
Z1Rlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtF
X0dMSUJfVEVTVF9GSVhUVVJFKFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KTsKKworICAgIFJlc291
cmNlVVJJVHJhY2tpbmdUZXN0KCkKKyAgICAgICAgOiBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkK
KyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdXJpQ2hhbmdlZChXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHJlc291cmNlID09IHRlc3QtPm1fcmVzb3VyY2Uu
Z2V0KCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgp
LCAhPSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkp
KTsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91
cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUxv
YWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCog
cmVxdWVzdCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAgICAgIG1fYWN0aXZlVVJJID0gd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKTsKKyAgICAgICAgY2hlY2tBY3RpdmVVUkko
Ii9yZWRpcmVjdGVkLmNzcyIpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIobV9hY3RpdmVVUkku
ZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAibm90aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVy
aUNoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlU2VudFJlcXVlc3Qo
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBX
ZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSkKKyAgICB7CisgICAgICAgIGlmIChy
ZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUt
c3R5bGUuY3NzIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNoZWNrQWN0aXZlVVJJKCIv
cmVkaXJlY3RlZC5jc3MiKTsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG1fYWN0aXZlVVJJLmRh
dGEoKSwgPT0sIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRfdXJpKHJlcXVlc3QpKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5j
c3MiKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJl
c291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQor
ICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlID09IG1fcmVzb3VyY2UpCisgICAgICAgICAgICBj
aGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICAgICAgUmVzb3VyY2VzVGVz
dDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJj
ZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSosIEdFcnJvciopCisgICAgeworICAgICAgICBnX2Fz
c2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAgIENTdHJpbmcgbV9hY3RpdmVVUkk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0FjdGl2ZVVSSShjb25zdCBjaGFyKiB1cmkpCisgICAg
eworICAgICAgICAvLyBnX2Fzc2VydF9jbXBzdHIgaXMgYSBtYWNybywgc28gd2UgbmVlZCB0byBj
YWNoZSB0aGUgdGVtcG9yYXJ5IHN0cmluZy4KKyAgICAgICAgQ1N0cmluZyBzZXJ2ZXJVUkkgPSBr
U2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSk7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihtX2Fj
dGl2ZVVSSS5kYXRhKCksID09LCBzZXJ2ZXJVUkkuZGF0YSgpKTsKKyAgICB9Cit9OworCitzdGF0
aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VBY3RpdmVVUkkoUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Qq
IHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRV
UklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWQoKTsKK30KKworc3RhdGljIHZvaWQgYWRkQ2FjaGVI
VFRQSGVhZGVyc1RvUmVzcG9zZShTb3VwTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICAvLyBUaGUg
YWN0dWFsIGRhdGUgZG9lc24ndCByZWFsbHkgbWF0dGVyLgorICAgIFNvdXBEYXRlKiBzb3VwRGF0
ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMCk7CisgICAgR093blB0cjxjaGFyPiBkYXRlKHNv
dXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9IVFRQKSk7CisgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMYXN0LU1v
ZGlmaWVkIiwgZGF0ZS5nZXQoKSk7CisgICAgc291cF9kYXRlX2ZyZWUoc291cERhdGUpOworICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9oZWFkZXJzLCAi
Q2FjaGUtY29udHJvbCIsICJwdWJsaWMsIG1heC1hZ2U9MzE1MzYwMDAiKTsKKyAgICBzb3VwRGF0
ZSA9IHNvdXBfZGF0ZV9uZXdfZnJvbV9ub3coMzYwMCk7CisgICAgZGF0ZS5zZXQoc291cF9kYXRl
X3RvX3N0cmluZyhzb3VwRGF0ZSwgU09VUF9EQVRFX0hUVFApKTsKKyAgICBzb3VwX21lc3NhZ2Vf
aGVhZGVyc19hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkV4cGlyZXMiLCBkYXRl
LmdldCgpKTsKKyAgICBzb3VwX2RhdGVfZnJlZShzb3VwRGF0ZSk7Cit9CisKK3N0YXRpYyB2b2lk
IHNlcnZlckNhbGxiYWNrKFNvdXBTZXJ2ZXIqIHNlcnZlciwgU291cE1lc3NhZ2UqIG1lc3NhZ2Us
IGNvbnN0IGNoYXIqIHBhdGgsIEdIYXNoVGFibGUqLCBTb3VwQ2xpZW50Q29udGV4dCosIGdwb2lu
dGVyKQoreworICAgIGlmIChtZXNzYWdlLT5tZXRob2QgIT0gU09VUF9NRVRIT0RfR0VUKSB7Cisg
ICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9J
TVBMRU1FTlRFRCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzb3VwX21lc3NhZ2Vf
c2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICBpZiAoc291cF9tZXNz
YWdlX2hlYWRlcnNfZ2V0KG1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIklmLU1vZGlmaWVkLVNp
bmNlIikpIHsKKyAgICAgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9T
VEFUVVNfTk9UX01PRElGSUVEKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfY29tcGxldGUo
bWVzc2FnZS0+cmVzcG9uc2VfYm9keSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoZ19zdHJfZXF1YWwocGF0aCwgIi8iKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
aW5kZXhIdG1sID0KKyAgICAgICAgICAgICI8aHRtbD48aGVhZD4iCisgICAgICAgICAgICAiIDxs
aW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3N0eWxlLmNzcycgdHlwZT0ndGV4dC9jc3MnPiIK
KyAgICAgICAgICAgICIgPHNjcmlwdCBsYW5ndWFnZT0namF2YXNjcmlwdCcgc3JjPScvamF2YXNj
cmlwdC5qcyc+PC9zY3JpcHQ+IgorICAgICAgICAgICAgIjwvaGVhZD48Ym9keT5XZWJLaXRHVEsr
IHJlc291cmNlcyB0ZXN0PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9k
eV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBpbmRl
eEh0bWwsIHN0cmxlbihpbmRleEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBh
dGgsICIvamF2YXNjcmlwdC5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGph
dmFzY3JpcHRIdG1sID0gIjxodG1sPjxoZWFkPjxzY3JpcHQgbGFuZ3VhZ2U9J2phdmFzY3JpcHQn
IHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1s
PiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9i
b2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGphdmFzY3JpcHRIdG1sLCBzdHJsZW4oamF2YXNjcmlw
dEh0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvaW1hZ2UuaHRtbCIp
KSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBpbWFnZUhUTUwgPSAiPGh0bWw+PGJvZHk+
PGltZyBzcmM9Jy9ibGFuay5pY28nPjwvaW1nPjwvYm9keT48L2h0bWw+IjsKKyAgICAgICAgc291
cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZ
X1NUQVRJQywgaW1hZ2VIVE1MLCBzdHJsZW4oaW1hZ2VIVE1MKSk7CisgICAgfSBlbHNlIGlmIChn
X3N0cl9lcXVhbChwYXRoLCAiL3JlZGlyZWN0ZWQtY3NzLmh0bWwiKSkgeworICAgICAgICBzdGF0
aWMgY29uc3QgY2hhciogcmVkaXJlY3RlZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+PGxpbmsgcmVs
PSdzdHlsZXNoZWV0JyBocmVmPScvcmVkaXJlY3RlZC5jc3MnIHR5cGU9J3RleHQvY3NzJz48L2hl
YWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNz
YWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHJlZGlyZWN0ZWRDU1NIdG1s
LCBzdHJsZW4ocmVkaXJlY3RlZENTU0h0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvaW52YWxpZC1jc3MuaHRtbCIpKSB7CisgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBpbnZhbGlkQ1NTSHRtbCA9ICI8aHRtbD48aGVhZD48bGluayByZWw9J3N0eWxlc2hlZXQnIGhy
ZWY9Jy9pbnZhbGlkLmNzcycgdHlwZT0ndGV4dC9jc3MnPjwvaGVhZD48Ym9keT48L2h0bWw+IjsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgaW52YWxpZENTU0h0bWwsIHN0cmxlbihpbnZhbGlkQ1NTSHRt
bCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zdHlsZS5jc3MiKSkgewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogY3NzID0KKyAgICAgICAgICAgICJib2R5IHsiCisg
ICAgICAgICAgICAiICAgIG1hcmdpbjogMHB4OyIKKyAgICAgICAgICAgICIgICAgcGFkZGluZzog
MHB4OyIKKyAgICAgICAgICAgICIgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7IgorICAgICAg
ICAgICAgIiAgICBiYWNrZ3JvdW5kOiB1cmwoL2JsYW5rLmljbykgMCAwIG5vLXJlcGVhdDsiCisg
ICAgICAgICAgICAiICAgIGNvbG9yOiBibGFjazsiCisgICAgICAgICAgICAifSI7CisgICAgICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01F
TU9SWV9TVEFUSUMsIGNzcywgc3RybGVuKGNzcykpOworICAgICAgICBhZGRDYWNoZUhUVFBIZWFk
ZXJzVG9SZXNwb3NlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwg
Ii9qYXZhc2NyaXB0LmpzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGphdmFzY3Jp
cHQgPSAiZnVuY3Rpb24gZm9vICgpIHsgdmFyIGEgPSAxOyB9IjsKKyAgICAgICAgc291cF9tZXNz
YWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHksIFNPVVBfTUVNT1JZX1NUQVRJ
QywgamF2YXNjcmlwdCwgc3RybGVuKGphdmFzY3JpcHQpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3Ry
X2VxdWFsKHBhdGgsICIvYmxhbmsuaWNvIikpIHsKKyAgICAgICAgR093blB0cjxjaGFyPiBmaWxl
UGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5k
YXRhKCksIHBhdGgsIE5VTEwpKTsKKyAgICAgICAgY2hhciogY29udGVudHM7CisgICAgICAgIGdz
aXplIGNvbnRlbnRzTGVuZ3RoOworICAgICAgICBnX2ZpbGVfZ2V0X2NvbnRlbnRzKGZpbGVQYXRo
LmdldCgpLCAmY29udGVudHMsICZjb250ZW50c0xlbmd0aCwgMCk7CisgICAgICAgIHNvdXBfbWVz
c2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9UQUtF
LCBjb250ZW50cywgY29udGVudHNMZW5ndGgpOworICAgICAgICBhZGRDYWNoZUhUVFBIZWFkZXJz
VG9SZXNwb3NlKG1lc3NhZ2UpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9z
aW1wbGUtc3R5bGUuY3NzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNT
UyA9CisgICAgICAgICAgICAiYm9keSB7IgorICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsi
CisgICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBweDsiCisgICAgICAgICAgICAifSI7CisgICAg
ICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQ
X01FTU9SWV9TVEFUSUMsIHNpbXBsZUNTUywgc3RybGVuKHNpbXBsZUNTUykpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLmNzcyIpKSB7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVO
VExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2ltcGxlLXN0eWxlLmNzcyIpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZhbGlkLmNzcyIpKQorICAgICAgICBzb3VwX21l
c3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQX1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAg
IHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQor
Cit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1NlcnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVy
KCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNhbGxiYWNrKTsKKworICAgIFJlc291cmNlc1Rl
c3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNvdXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNl
cyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIs
ICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9hZGluZyk7CisgICAgU2luZ2xlUmVzb3VyY2VM
b2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNv
dXJjZVJlc3BvbnNlKTsKKyAgICBSZXNvdXJjZVVSSVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRX
ZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwgdGVzdFdlYlJlc291cmNlQWN0aXZlVVJJKTsKK30K
Kwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVsZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQyLmgKaW5kZXggZjc4Yjg3My4uMTVkOGViZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDIuaApAQCAtMzYsNiAr
MzYsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUg
PHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdl
YkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlJlc291cmNlLmg+CiAjaW5j
bHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0V2ViVmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5o
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJz
aGFsLmxpc3QKaW5kZXggNzdkMjY5YS4uYmE2OTdmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQybWFyc2hhbC5saXN0CkBAIC0xMSw1ICsxMSw3
IEBAIEJPT0xFQU46Vk9JRAogT0JKRUNUOlZPSUQKIFZPSUQ6RU5VTQogVk9JRDpPQkpFQ1QsVUlO
VAorVk9JRDpPQkpFQ1QsT0JKRUNUCiBWT0lEOk9CSkVDVCxQT0lOVEVSCitWT0lEOlVJTlQ2NAog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132090</attachid>
            <date>2012-03-15 11:41:12 -0700</date>
            <delta_ts>2012-03-26 09:07:20 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-resources2.diff</filename>
            <type>text/plain</type>
            <size>70091</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAyYmQzY2Q0Li4xODE1MzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsOTkg
QEAKIDIwMTItMDMtMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtHVEtdIEFkZCByZXNvdXJjZXMgQVBJIHRvIFdlYktpdDIgR1RLKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk0NzcKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFJlc291cmNlTG9hZENsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoZGlk
SW5pdGlhdGVMb2FkRm9yUmVzb3VyY2UpOiBDYWxsCisgICAgICAgIHdlYmtpdFdlYlZpZXdSZXNv
dXJjZUxvYWRTdGFydGVkKCkgc28gdGhhdCB2aWV3IHdpbGwgY3JlYXRlIHRoZQorICAgICAgICBy
ZXNvdXJjZSBhbmQgZW1pdCBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQuCisg
ICAgICAgIChkaWRTZW5kUmVxdWVzdEZvclJlc291cmNlKTogQ2FsbCB3ZWJraXRXZWJSZXNvdXJj
ZVNlbnRSZXF1ZXN0KCkKKyAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gcmVxdWVzdCBhbmQgcmVzcG9u
c2UuCisgICAgICAgIChkaWRSZWNlaXZlUmVzcG9uc2VGb3JSZXNvdXJjZSk6IENhbGwKKyAgICAg
ICAgd2Via2l0V2ViUmVzb3VyY2VTZXRSZXNwb25zZSgpIHdpdGggdGhlIGdpdmVuIHJlc3BvbnNl
LgorICAgICAgICAoZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSk6IENhbGwKKyAg
ICAgICAgd2Via2l0V2ViUmVzb3VyY2VOb3RpZnlQcm9ncmVzcygpLgorICAgICAgICAoZGlkRmlu
aXNoTG9hZEZvclJlc291cmNlKTogQ2FsbCB3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKCkuCisg
ICAgICAgIChkaWRGYWlsTG9hZEZvclJlc291cmNlKTogQ3JlYXRlIGEgR0Vycm9yIGZvciB0aGUg
Z2l2ZW4gV0tFcnJvcgorICAgICAgICBhbmQgY2FsbCB3ZWJraXRXZWJSZXNvdXJjZUZhaWxlZCgp
LgorICAgICAgICAoYXR0YWNoUmVzb3VyY2VMb2FkQ2xpZW50VG9WaWV3KTogQWRkIGNhbGxiYWNr
cyBmb3IgdGhlCisgICAgICAgIFdLUGFnZVJlc291cmNlTG9hZENsaWVudC4KKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaDogQWRkZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViUmVzb3VyY2UuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKHdlYmtpdFdlYlJlc291cmNlR2V0UHJvcGVydHkpOgorICAgICAgICAod2Via2l0X3dl
Yl9yZXNvdXJjZV9pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfcmVzb3VyY2VfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJjZVVwZGF0ZVVSSSk6IFVwZGF0ZSB0aGUgYWN0
aXZlIFVSSSBldmVyeSB0aW1lIGEKKyAgICAgICAgbmV3IHJlcXVlc3QgaXMgc2VudCB0byB0aGUg
c2VydmVyLgorICAgICAgICAod2Via2l0V2ViUmVzb3VyY2VDcmVhdGUpOiBDcmVhdGUgYSBXZWJS
ZXNvdXJjZSBmb3IgdGhlIGdpdmVuCisgICAgICAgIGZyYW1lLgorICAgICAgICAod2Via2l0V2Vi
UmVzb3VyY2VTZW50UmVxdWVzdCk6IFVwZGF0ZSB1cmkgYW5kIGVtaXQKKyAgICAgICAgV2ViS2l0
V2ViUmVzb3VyY2U6OnNlbnQtcmVxdWVzdC4KKyAgICAgICAgKHdlYmtpdFdlYlJlc291cmNlU2V0
UmVzcG9uc2UpOiBTZXQgdGhlIHJlc3BvbnNlIHByb3BlcnR5LgorICAgICAgICAod2Via2l0V2Vi
UmVzb3VyY2VOb3RpZnlQcm9ncmVzcyk6IEVtaXQKKyAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2U6
OnJlY2VpdmVkLWRhdGEuCisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJjZUZpbmlzaGVkKTogRW1p
dCBXZWJLaXRXZWJSZXNvdXJjZTo6ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXRXZWJSZXNvdXJj
ZUZhaWxlZCk6IEVtaXQgV2ViS2l0V2ViUmVzb3VyY2U6OmZhaWxlZCBhbmQgdGhlbgorICAgICAg
ICBXZWJLaXRXZWJSZXNvdXJjZTo6ZmluaXNoZWQuCisgICAgICAgICh3ZWJraXRfd2ViX3Jlc291
cmNlX2dldF91cmkpOiBSZXR1cm4gdGhlIGN1cnJlbnRyIGFjdGl2ZSBVUkkuCisgICAgICAgICh3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF9yZXNwb25zZSk6IFJldHVybiB0aGUgcmVzcG9uc2UgcmVj
ZWl2ZWQKKyAgICAgICAgZnJvbSB0aGUgc2VydmVyLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlJlc291cmNlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdDb25z
dHJ1Y3RlZCk6IEF0dGFjaCB0aGUgcmVzb3VyY2UgbG9hZCBjbGllbnQgdG8gdGhlCisgICAgICAg
IHZpZXcuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IEFkZAorICAgICAg
ICBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQgc2lnbmFsLgorICAgICAgICAo
d2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKTogQ2xlYXIgbG9hZGluZyByZXNvdXJjZXMgbWFwIHdo
ZW4gYSBuZXcKKyAgICAgICAgbG9hZCBzdGFydHMgYW5kIGxvYWRlZCByZXNvdXJjZXMgbWFwIHdo
ZW4gdGhlIG5ldyBsb2FkIGhhcyBiZWVuCisgICAgICAgIGNvbW1pdHRlZC4KKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRTdGFydGVkKTogQ3JlYXRlIGEgcmVzb3VyY2UgZm9yIHRo
ZQorICAgICAgICBnaXZlbiBpZGVudGlmaWVyLCBhZGQgaXQgdG8gdGhlIGxvYWRpbmcgcmVzb3Vy
Y2VzIG1hcCBhbmQgZW1pdAorICAgICAgICBXZWJLaXRXZWJWaWV3OjpyZXNvdXJjZS1sb2FkLXN0
YXJ0ZWQgc2lnbmFsLgorICAgICAgICAod2Via2l0V2ViVmlld0dldExvYWRpbmdXZWJSZXNvdXJj
ZSk6IFJldHVybiB0aGUgcmVzb3VyY2UgdGhhdCBpcworICAgICAgICBiZWluZyBsb2FkZWQgY29y
cmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gaWRlbnRpZmllci4KKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UpOiBSZW1vdmUgdGhlIHJlc291dXJjZQorICAgICAg
ICBjb3JyZXNwb25maW5nIHRvIHRoZSBnaXZlbiBpZGVudGlmaWVyIGZyb20gdGhlIGxvYWRpbmcg
cmVzb3VyY2VzCisgICAgICAgIG1hcC4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxv
YWRGaW5pc2hlZCk6IE1vdmUgdGhlIHJlc291cmNlIGZyb20gdGhlCisgICAgICAgIGxvYWRpbmcg
cmVzb3VyY2VzIG1hcCB0byB0aGUgbG9hZGVkIHJlc291cmNlcyBtYXAuCisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UpOiBSZXR1cm4gdGhlIG1haW4gcmVzb3VyY2Uu
CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcyk6IFJldHVybiB0aGUg
bGlzdCBvZgorICAgICAgICBzdWJyZXNvdXJjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQy
Z3RrLWRvY3Muc2dtbDogQWRkIG5ldyBzZWN0aW9uIGZvcgorICAgICAgICBXZWJLaXRXZWJSZXNv
dXJjZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlv
bnMudHh0OiBBZGQgbmV3IHN5bWJvbHMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvZG9j
cy93ZWJraXQyZ3RrLnR5cGVzOiBBZGQKKyAgICAgICAgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRf
dHlwZS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbTog
QWRkIG5ldyB0ZXN0IGZvciByZXNvdXJjZXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
dGVzdHMvVGVzdERvd25sb2Fkcy5jcHA6CisgICAgICAgICh0ZXN0RG93bmxvYWRMb2NhbEZpbGUp
OiBVc2UgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpIGZyb20gVGVzdC4KKyAgICAgICAgKHRl
c3REb3dubG9hZExvY2FsRmlsZUVycm9yKTogRGl0dG8uCisgICAgICAgIChzZXJ2ZXJDYWxsYmFj
ayk6IERpdHRvLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmg6
CisgICAgICAgIChUZXN0OjpnZXRXZWJLaXQxVGVzdFJlc291Y2VzRGlyKTogTW9lZCBmcm9tIFRl
c3REb3dubG9hZHMgc28gdGhhdAorICAgICAgICBpdCBjYW4gYmUgdXNlZCBieSBvdGhlciB0ZXN0
cy4KKyAgICAgICAgKFRlc3QpOiBBZGQgaW5mb3JtYXRpb24gYWJvdXQgbGVha2VkIG9iamVjdHMu
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdFJlc291cmNlcy5jcHA6IEFk
ZGVkLgorICAgICAgICAodGVzdFdlYlZpZXdSZXNvdXJjZXMpOgorICAgICAgICAodGVzdFdlYlJl
c291cmNlTG9hZGluZyk6CisgICAgICAgICh0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZSk6CisgICAg
ICAgICh0ZXN0V2ViUmVzb3VyY2VBY3RpdmVVUkkpOgorICAgICAgICAoYWRkQ2FjaGVIVFRQSGVh
ZGVyc1RvUmVzcG9uc2UpOgorICAgICAgICAoc2VydmVyQ2FsbGJhY2spOgorICAgICAgICAoYmVm
b3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0
ay93ZWJraXQyLmg6IEluY2x1ZGUgV2ViS2l0V2ViUmVzb3VyY2UuaAorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3Q6CisKKzIwMTItMDMtMTUgIENhcmxvcyBH
YXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtHVEtdIEltcGxl
bWVudCB1bmljb2RlIHN1Ym1lbnUgaXRlbXMKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTgxMTE3CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KaW5kZXggYTYwMWFl
Zi4uZDRhODc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KKysr
IGIvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0KQEAgLTEwMSw2ICsxMDEsNyBAQCBsaWJ3
ZWJraXQyZ3RraW5jbHVkZV9IRUFERVJTID0gXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0VVJJUmVxdWVzdC5oIFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFVSSVJlc3BvbnNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViQ29udGV4dC5oIFwKKwkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJl
c291cmNlLmggXAogCSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5o
IFwKIAkkKFdlYktpdDIpL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmggXAog
CSQoV2ViS2l0MikvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2luZG93UHJvcGVydGllcy5oIFwK
QEAgLTU3Miw2ICs1NzMsOCBAQCB3ZWJraXQyX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaW50T3BlcmF0aW9uUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRQcml2YXRlLmggXAogCVNvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFByaXZhdGUuY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuY3BwIFwKKwlT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQu
aCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xp
Y3lEZWNpc2lvbi5jcHAgXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFJlc3BvbnNlUG9saWN5RGVjaXNpb24uaCBcCiAJU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0UmVzcG9uc2VQb2xpY3lEZWNpc2lvblByaXZhdGUuaCBcCkBAIC01OTIsNiAr
NTk1LDkgQEAgd2Via2l0Ml9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0LmggXAogCVNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYkNvbnRleHQuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJDb250ZXh0UHJpdmF0ZS5oIFwKKwlTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmggXAorCVNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXAogCVNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc291cmNlTG9hZENsaWVudC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiZDA5YgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFJlc291cmNl
TG9hZENsaWVudC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0UmVzb3Vy
Y2VMb2FkQ2xpZW50LmgiCisKKyNpbmNsdWRlICJXZWJDb250ZXh0LmgiCisjaW5jbHVkZSAiV2Vi
S2l0VVJJUmVxdWVzdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklSZXNwb25zZVByaXZh
dGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJWaWV3UHJpdmF0
ZS5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
Z29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK3N0YXRpYyB2
b2lkIGRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlKFdLUGFnZVJlZiwgV0tGcmFtZVJlZiB3a0Zy
YW1lLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZpZXIsIFdLVVJMUmVxdWVzdFJlZiB3a1JlcXVl
c3QsIGJvb2wgcGFnZUlzUHJvdmlzaW9uYWxseUxvYWRpbmcsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXF1ZXN0PiByZXF1ZXN0ID0gYWRvcHRHUmVm
KHdlYmtpdFVSSVJlcXVlc3RDcmVhdGVGb3JSZXNvdXJjZVJlcXVlc3QodG9JbXBsKHdrUmVxdWVz
dCktPnJlc291cmNlUmVxdWVzdCgpKSk7CisgICAgd2Via2l0V2ViVmlld1Jlc291cmNlTG9hZFN0
YXJ0ZWQoV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pLCB3a0ZyYW1lLCByZXNvdXJjZUlkZW50
aWZpZXIsIHJlcXVlc3QuZ2V0KCksIHBhZ2VJc1Byb3Zpc2lvbmFsbHlMb2FkaW5nKTsKK30KKwor
c3RhdGljIHZvaWQgZGlkU2VuZFJlcXVlc3RGb3JSZXNvdXJjZShXS1BhZ2VSZWYsIFdLRnJhbWVS
ZWYsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgV0tVUkxSZXF1ZXN0UmVmIHdrUmVxdWVz
dCwgV0tVUkxSZXNwb25zZVJlZiB3a1JlZGlyZWN0UmVzcG9uc2UsIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCit7CisgICAgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gcmVzb3VyY2UgPSB3ZWJr
aXRXZWJWaWV3R2V0TG9hZGluZ1dlYlJlc291cmNlKFdFQktJVF9XRUJfVklFVyhjbGllbnRJbmZv
KSwgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlcXVlc3Q+IHJl
cXVlc3QgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVxdWVzdENyZWF0ZUZvclJlc291cmNlUmVxdWVz
dCh0b0ltcGwod2tSZXF1ZXN0KS0+cmVzb3VyY2VSZXF1ZXN0KCkpKTsKKyAgICBHUmVmUHRyPFdl
YktpdFVSSVJlc3BvbnNlPiByZWRpcmVjdFJlc3BvbnNlID0gd2tSZWRpcmVjdFJlc3BvbnNlID8g
YWRvcHRHUmVmKHdlYmtpdFVSSVJlc3BvbnNlQ3JlYXRlRm9yUmVzb3VyY2VSZXNwb25zZSh0b0lt
cGwod2tSZWRpcmVjdFJlc3BvbnNlKS0+cmVzb3VyY2VSZXNwb25zZSgpKSkgOiAwOworICAgIHdl
YmtpdFdlYlJlc291cmNlU2VudFJlcXVlc3QocmVzb3VyY2UuZ2V0KCksIHJlcXVlc3QuZ2V0KCks
IHJlZGlyZWN0UmVzcG9uc2UuZ2V0KCkpOworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlUmVz
cG9uc2VGb3JSZXNvdXJjZShXS1BhZ2VSZWYsIFdLRnJhbWVSZWYsIHVpbnQ2NF90IHJlc291cmNl
SWRlbnRpZmllciwgV0tVUkxSZXNwb25zZVJlZiB3a1Jlc3BvbnNlLCBjb25zdCB2b2lkKiBjbGll
bnRJbmZvKQoreworICAgIEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IHJlc291cmNlID0gd2Vi
a2l0V2ViVmlld0dldExvYWRpbmdXZWJSZXNvdXJjZShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5m
byksIHJlc291cmNlSWRlbnRpZmllcik7CisgICAgR1JlZlB0cjxXZWJLaXRVUklSZXNwb25zZT4g
cmVzcG9uc2UgPSBhZG9wdEdSZWYod2Via2l0VVJJUmVzcG9uc2VDcmVhdGVGb3JSZXNvdXJjZVJl
c3BvbnNlKHRvSW1wbCh3a1Jlc3BvbnNlKS0+cmVzb3VyY2VSZXNwb25zZSgpKSk7CisgICAgd2Vi
a2l0V2ViUmVzb3VyY2VTZXRSZXNwb25zZShyZXNvdXJjZS5nZXQoKSwgcmVzcG9uc2UuZ2V0KCkp
OworfQorCitzdGF0aWMgdm9pZCBkaWRSZWNlaXZlQ29udGVudExlbmd0aEZvclJlc291cmNlKFdL
UGFnZVJlZiwgV0tGcmFtZVJlZiwgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyLCB1aW50NjRf
dCBjb250ZW50TGVuZ3RoLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEdSZWZQdHI8
V2ViS2l0V2ViUmVzb3VyY2U+IHJlc291cmNlID0gd2Via2l0V2ViVmlld0dldExvYWRpbmdXZWJS
ZXNvdXJjZShXRUJLSVRfV0VCX1ZJRVcoY2xpZW50SW5mbyksIHJlc291cmNlSWRlbnRpZmllcik7
CisgICAgd2Via2l0V2ViUmVzb3VyY2VOb3RpZnlQcm9ncmVzcyhyZXNvdXJjZS5nZXQoKSwgY29u
dGVudExlbmd0aCk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZpbmlzaExvYWRGb3JSZXNvdXJjZShX
S1BhZ2VSZWYsIFdLRnJhbWVSZWYsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiByZXNv
dXJjZSA9IHdlYmtpdFdlYlZpZXdSZXNvdXJjZUxvYWRGaW5pc2hlZChXRUJLSVRfV0VCX1ZJRVco
Y2xpZW50SW5mbyksIHJlc291cmNlSWRlbnRpZmllcik7CisgICAgd2Via2l0V2ViUmVzb3VyY2VG
aW5pc2hlZChyZXNvdXJjZS5nZXQoKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpZEZhaWxMb2FkRm9y
UmVzb3VyY2UoV0tQYWdlUmVmLCBXS0ZyYW1lUmVmLCB1aW50NjRfdCByZXNvdXJjZUlkZW50aWZp
ZXIsIFdLRXJyb3JSZWYgd2tFcnJvciwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9WSUVXKGNsaWVudEluZm8pOworICAg
IEdSZWZQdHI8V2ViS2l0V2ViUmVzb3VyY2U+IHJlc291cmNlID0gd2Via2l0V2ViVmlld0dldExv
YWRpbmdXZWJSZXNvdXJjZSh3ZWJWaWV3LCByZXNvdXJjZUlkZW50aWZpZXIpOworICAgIGNvbnN0
IFJlc291cmNlRXJyb3ImIHJlc291cmNlRXJyb3IgPSB0b0ltcGwod2tFcnJvciktPnBsYXRmb3Jt
RXJyb3IoKTsKKyAgICBHT3duUHRyPEdFcnJvcj4gd2ViRXJyb3IoZ19lcnJvcl9uZXdfbGl0ZXJh
bChnX3F1YXJrX2Zyb21fc3RyaW5nKHJlc291cmNlRXJyb3IuZG9tYWluKCkudXRmOCgpLmRhdGEo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz
b3VyY2VFcnJvci5lcnJvckNvZGUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXNvdXJjZUVycm9yLmxvY2FsaXplZERlc2NyaXB0aW9uKCkudXRm
OCgpLmRhdGEoKSkpOworICAgIHdlYmtpdFdlYlJlc291cmNlRmFpbGVkKHJlc291cmNlLmdldCgp
LCB3ZWJFcnJvci5nZXQoKSk7CisgICAgd2Via2l0V2ViVmlld1JlbW92ZUxvYWRpbmdXZWJSZXNv
dXJjZSh3ZWJWaWV3LCByZXNvdXJjZUlkZW50aWZpZXIpOworfQorCit2b2lkIGF0dGFjaFJlc291
cmNlTG9hZENsaWVudFRvVmlldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdLUGFn
ZVJlc291cmNlTG9hZENsaWVudCB3a1Jlc291cmNlTG9hZENsaWVudCA9IHsKKyAgICAgICAga1dL
UGFnZVJlc291cmNlTG9hZENsaWVudEN1cnJlbnRWZXJzaW9uLAorICAgICAgICB3ZWJWaWV3LCAv
LyBDbGllbnRJbmZvCisgICAgICAgIGRpZEluaXRpYXRlTG9hZEZvclJlc291cmNlLAorICAgICAg
ICBkaWRTZW5kUmVxdWVzdEZvclJlc291cmNlLAorICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2VG
b3JSZXNvdXJjZSwKKyAgICAgICAgZGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGhGb3JSZXNvdXJjZSwK
KyAgICAgICAgZGlkRmluaXNoTG9hZEZvclJlc291cmNlLAorICAgICAgICBkaWRGYWlsTG9hZEZv
clJlc291cmNlLAorICAgIH07CisgICAgV0tQYWdlUmVmIHdrUGFnZSA9IHRvQVBJKHdlYmtpdFdl
YlZpZXdCYXNlR2V0UGFnZShXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3ZWJWaWV3KSkpOworICAgIFdL
UGFnZVNldFBhZ2VSZXNvdXJjZUxvYWRDbGllbnQod2tQYWdlLCAmd2tSZXNvdXJjZUxvYWRDbGll
bnQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0UmVzb3VyY2VMb2FkQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRSZXNvdXJjZUxvYWRDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wZTZhMzYxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0UmVzb3VyY2VMb2FkQ2xpZW50LmgKQEAgLTAsMCArMSwyNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdFJlc291
cmNlTG9hZENsaWVudF9oCisjZGVmaW5lIFdlYktpdFJlc291cmNlTG9hZENsaWVudF9oCisKKyNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3LmgiCisKK3ZvaWQgYXR0YWNoUmVzb3VyY2VMb2FkQ2xpZW50
VG9WaWV3KFdlYktpdFdlYlZpZXcqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MzYyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlJlc291cmNlLmNwcApAQCAtMCww
ICsxLDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViUmVzb3VyY2UuaCIKKworI2luY2x1ZGUg
IldlYktpdE1hcnNoYWwuaCIKKyNpbmNsdWRlICJXZWJLaXRVUklSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlLmgiCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitlbnVtIHsKKyAgICBTRU5U
X1JFUVVFU1QsCisgICAgUkVDRUlWRURfREFUQSwKKyAgICBGSU5JU0hFRCwKKyAgICBGQUlMRUQs
CisKKyAgICBMQVNUX1NJR05BTAorfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9VUkksCisgICAgUFJPUF9SRVNQT05TRQorfTsKKworCitzdHJ1Y3QgX1dlYktpdFdlYlJlc291
cmNlUHJpdmF0ZSB7CisgICAgV0tSZXRhaW5QdHI8V0tGcmFtZVJlZj4gd2tGcmFtZTsKKyAgICBD
U3RyaW5nIHVyaTsKKyAgICBHUmVmUHRyPFdlYktpdFVSSVJlc3BvbnNlPiByZXNwb25zZTsKK307
CisKK3N0YXRpYyBndWludCBzaWduYWxzW0xBU1RfU0lHTkFMXSA9IHsgMCwgfTsKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRXZWJSZXNvdXJjZSwgd2Via2l0X3dlYl9yZXNvdXJjZSwgR19UWVBFX09C
SkVDVCkKKworc3RhdGljIHZvaWQgd2Via2l0V2ViUmVzb3VyY2VGaW5hbGl6ZShHT2JqZWN0KiBv
YmplY3QpCit7CisgICAgV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpLT5wcml2LT5+V2ViS2l0
V2ViUmVzb3VyY2VQcml2YXRlKCk7CisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X3dlYl9yZXNv
dXJjZV9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJSZXNvdXJjZUdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElk
LCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0V2Vi
UmVzb3VyY2UqIHJlc291cmNlID0gV0VCS0lUX1dFQl9SRVNPVVJDRShvYmplY3QpOworCisgICAg
c3dpdGNoIChwcm9wSWQpIHsKKyAgICBjYXNlIFBST1BfVVJJOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9zdHJpbmcodmFsdWUsIHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJjZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfUkVTUE9OU0U6CisgICAgICAgIGdfdmFsdWVf
c2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3Vy
Y2UpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FS
Tl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElkLCBwYXJhbVNwZWMpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3dlYl9yZXNvdXJjZV9pbml0KFdlYktpdFdlYlJlc291
cmNlKiByZXNvdXJjZSkKK3sKKyAgICBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUqIHByaXYgPSBH
X1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUocmVzb3VyY2UsIFdFQktJVF9UWVBFX1dFQl9SRVNP
VVJDRSwgV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlKTsKKyAgICByZXNvdXJjZS0+cHJpdiA9IHBy
aXY7CisgICAgbmV3IChwcml2KSBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUoKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3dlYl9yZXNvdXJjZV9jbGFzc19pbml0KFdlYktpdFdlYlJlc291cmNl
Q2xhc3MqIHJlc291cmNlQ2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKHJlc291cmNlQ2xhc3MpOworICAgIG9iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSB3ZWJraXRXZWJSZXNvdXJjZUdldFByb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5m
aW5hbGl6ZSA9IHdlYmtpdFdlYlJlc291cmNlRmluYWxpemU7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRXZWJSZXNvdXJjZTp1cmk6CisgICAgICoKKyAgICAgKiBUaGUgY3VycmVudCBhY3RpdmUg
VVJJIG9mIHRoZSAjV2ViS2l0V2ViUmVzb3VyY2UuCisgICAgICogU2VlIHdlYmtpdF93ZWJfcmVz
b3VyY2VfZ2V0X3VyaSgpIGZvciBtb3JlIGRldGFpbHMuCisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfVVJJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX3N0cmluZygidXJpIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVVJJIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBjdXJyZW50
IGFjdGl2ZSBVUkkgb2YgdGhlIHJlc3VsdCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlJlc291cmNlOnJlc3BvbnNlOgorICAgICAqCisg
ICAgICogVGhlICNXZWJLaXRVUklSZXNwb25zZSBhc3NvY2lhdGVkIHdpdGggdGhpcyByZXNvdXJj
ZS4KKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENs
YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9SRVNQT05TRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19vYmplY3Qo
InJlc3BvbnNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiUmVzcG9uc2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHJlc3BvbnNlIG9mIHRoZSByZXNvdXJj
ZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfVFlQRV9VUklfUkVTUE9OU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViUmVzb3VyY2U6OnNlbnQtcmVxdWVzdDoKKyAgICAg
KiBAcmVzb3VyY2U6IHRoZSAjV2ViS2l0V2ViUmVzb3VyY2UKKyAgICAgKiBAcmVxdWVzdDogYSAj
V2ViS2l0VVJJUmVxdWVzdAorICAgICAqIEByZWRpcmVjdGVkX3Jlc3BvbnNlOiBhICNXZWJLaXRV
UklSZXNwb25zZSwgb3IgJU5VTEwKKyAgICAgKgorICAgICAqIFRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQgd2hlbiBAcmVxdWVzdCBoYXMgYmVlbiBzZW50IHRvIHRoZQorICAgICAqIHNlcnZlci4gSW4g
Y2FzZSBvZiBhIHNlcnZlciByZWRpcmVjdGlvbiB0aGlzIHNpZ25hbCBpcworICAgICAqIGVtaXR0
ZWQgYWdhaW4gd2l0aCB0aGUgQHJlcXVlc3QgYXJndW1lbnQgY29udGFpbmluZyB0aGUgbmV3Cisg
ICAgICogcmVxdWVzdCBzZW50IHRvIHRoZSBzZXJ2ZXIgZHVlIHRvIHRoZSByZWRpcmVjdGlvbiBh
bmQgdGhlCisgICAgICogQHJlZGlyZWN0ZWRfcmVzcG9uc2UgcGFyYW1ldGVyIGNvbnRhaW5pbmcg
dGhlIHJlc3BvbnNlCisgICAgICogcmVjZWl2ZWQgYnkgdGhlIHNlcnZlciBmb3IgdGhlIGluaXRp
YWwgcmVxdWVzdC4KKyAgICAgKi8KKyAgICBzaWduYWxzW1NFTlRfUkVRVUVTVF0gPQorICAgICAg
ICBnX3NpZ25hbF9uZXcoInNlbnQtcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05B
TF9SVU5fTEFTVCwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAorICAgICAgICAgICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQ
RV9VUklfUkVRVUVTVCwKKyAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1VSSV9SRVNQ
T05TRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJSZXNvdXJjZTo6cmVjZWl2ZWQtZGF0
YToKKyAgICAgKiBAcmVzb3VyY2U6IHRoZSAjV2ViS2l0V2ViUmVzb3VyY2UKKyAgICAgKiBAZGF0
YV9sZW5ndGg6IHRoZSBsZW5ndGggb2YgZGF0YSByZWNlaXZlZCBpbiBieXRlcworICAgICAqCisg
ICAgICogVGhpcyBzaWduYWwgaXMgZW1pdHRlZCBhZnRlciByZXNwb25zZSBpcyByZWNlaXZlZCwK
KyAgICAgKiBldmVyeSB0aW1lIG5ldyBkYXRhIGhhcyBiZWVuIHJlY2VpdmVkLiBJdCdzCisgICAg
ICogdXNlZnVsIHRvIGtub3cgdGhlIHByb2dyZXNzIG9mIHRoZSByZXNvdXJjZSBsb2FkIG9wZXJh
dGlvbi4KKyAgICAgKi8KKyAgICBzaWduYWxzW1JFQ0VJVkVEX0RBVEFdID0KKyAgICAgICAgZ19z
aWduYWxfbmV3KCJyZWNlaXZlZC1kYXRhIiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKG9iamVjdENsYXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JV
Tl9MQVNULAorICAgICAgICAgICAgICAgICAgICAgMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1VJTlQ2NCwKKyAgICAgICAgICAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1VJTlQ2NCk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJSZXNvdXJjZTo6ZmluaXNoZWQ6CisgICAgICogQHJlc291
cmNlOiB0aGUgI1dlYktpdFdlYlJlc291cmNlCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBp
cyBlbWl0dGVkIHdoZW4gdGhlIHJlc291cmNlIGxvYWQgZmluaXNoZXMgc3VjY2Vzc2Z1bGx5Cisg
ICAgICogb3IgZHVlIHRvIGFuIGVycm9yLiBJbiBjYXNlIG9mIGVycm9ycyAjV2ViS2l0V2ViUmVz
b3VyY2U6OmZhaWxlZCBzaWduYWwKKyAgICAgKiBpcyBlbWl0dGVkIGJlZm9yZSB0aGlzIG9uZS4K
KyAgICAgKi8KKyAgICBzaWduYWxzW0ZJTklTSEVEXSA9CisgICAgICAgIGdfc2lnbmFsX25ldygi
ZmluaXNoZWQiLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mob2JqZWN0
Q2xhc3MpLAorICAgICAgICAgICAgICAgICAgICAgR19TSUdOQUxfUlVOX0xBU1QsCisgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJSZXNvdXJjZTo6ZmFpbGVkOgorICAgICAqIEBy
ZXNvdXJjZTogdGhlICNXZWJLaXRXZWJSZXNvdXJjZQorICAgICAqIEBlcnJvcjogdGhlICNHRXJy
b3IgdGhhdCB3YXMgdHJpZ2dlcmVkCisgICAgICoKKyAgICAgKiBUaGlzIHNpZ25hbCBpcyBlbWl0
dGVkIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyB0aGUgcmVzb3VyY2UKKyAgICAgKiBsb2Fk
IG9wZXJhdGlvbi4KKyAgICAgKi8KKyAgICBzaWduYWxzW0ZBSUxFRF0gPQorICAgICAgICBnX3Np
Z25hbF9uZXcoImZhaWxlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFT
UyhvYmplY3RDbGFzcyksCisgICAgICAgICAgICAgICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwK
KyAgICAgICAgICAgICAgICAgICAgIDAsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fUE9JTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAxLAorICAgICAgICAgICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAg
Z190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHJlc291cmNlQ2xhc3MsIHNpemVvZihXZWJLaXRXZWJS
ZXNvdXJjZVByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViUmVzb3VyY2VVcGRh
dGVVUkkoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBjb25zdCBDU3RyaW5nJiByZXF1ZXN0
VVJJKQoreworICAgIGlmIChyZXNvdXJjZS0+cHJpdi0+dXJpID09IHJlcXVlc3RVUkkpCisgICAg
ICAgIHJldHVybjsKKworICAgIHJlc291cmNlLT5wcml2LT51cmkgPSByZXF1ZXN0VVJJOworICAg
IGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChyZXNvdXJjZSksICJ1cmkiKTsKK30KKworV2ViS2l0
V2ViUmVzb3VyY2UqIHdlYmtpdFdlYlJlc291cmNlQ3JlYXRlKFdLRnJhbWVSZWYgd2tGcmFtZSwg
V2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBBU1NFUlQod2tGcmFtZSk7CisgICAg
V2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlID0gV0VCS0lUX1dFQl9SRVNPVVJDRShnX29iamVj
dF9uZXcoV0VCS0lUX1RZUEVfV0VCX1JFU09VUkNFLCBOVUxMKSk7CisgICAgcmVzb3VyY2UtPnBy
aXYtPndrRnJhbWUgPSB3a0ZyYW1lOworICAgIHJlc291cmNlLT5wcml2LT51cmkgPSB3ZWJraXRf
dXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KTsKKyAgICByZXR1cm4gcmVzb3VyY2U7Cit9CisK
K3ZvaWQgd2Via2l0V2ViUmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVz
b3VyY2UsIFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRp
cmVjdFJlc3BvbnNlKQoreworICAgIHdlYmtpdFdlYlJlc291cmNlVXBkYXRlVVJJKHJlc291cmNl
LCB3ZWJraXRfdXJpX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7CisgICAgZ19zaWduYWxfZW1p
dChyZXNvdXJjZSwgc2lnbmFsc1tTRU5UX1JFUVVFU1RdLCAwLCByZXF1ZXN0LCByZWRpcmVjdFJl
c3BvbnNlKTsKK30KKwordm9pZCB3ZWJraXRXZWJSZXNvdXJjZVNldFJlc3BvbnNlKFdlYktpdFdl
YlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlKQoreworICAg
IHJlc291cmNlLT5wcml2LT5yZXNwb25zZSA9IHJlc3BvbnNlOworICAgIGdfb2JqZWN0X25vdGlm
eShHX09CSkVDVChyZXNvdXJjZSksICJyZXNwb25zZSIpOworfQorCit2b2lkIHdlYmtpdFdlYlJl
c291cmNlTm90aWZ5UHJvZ3Jlc3MoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBndWludDY0
IGJ5dGVzUmVjZWl2ZWQpCit7CisgICAgZ19zaWduYWxfZW1pdChyZXNvdXJjZSwgc2lnbmFsc1tS
RUNFSVZFRF9EQVRBXSwgMCwgYnl0ZXNSZWNlaXZlZCk7Cit9CisKK3ZvaWQgd2Via2l0V2ViUmVz
b3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCit7CisgICAgZ19zaWdu
YWxfZW1pdChyZXNvdXJjZSwgc2lnbmFsc1tGSU5JU0hFRF0sIDAsIE5VTEwpOworfQorCit2b2lk
IHdlYmtpdFdlYlJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vy
cm9yKiBlcnJvcikKK3sKKyAgICBnX3NpZ25hbF9lbWl0KHJlc291cmNlLCBzaWduYWxzW0ZBSUxF
RF0sIDAsIGVycm9yKTsKKyAgICBnX3NpZ25hbF9lbWl0KHJlc291cmNlLCBzaWduYWxzW0ZJTklT
SEVEXSwgMCwgTlVMTCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
OgorICogQHJlc291cmNlOiBhICNXZWJLaXRXZWJSZXNvdXJjZQorICoKKyAqIFJldHVybnMgdGhl
IGN1cnJlbnQgYWN0aXZlIFVSSSBvZiBAd2ViX3ZpZXcuIFRoZSBhY3RpdmUgVVJJIG1pZ2h0IGNo
YW5nZSBkdXJpbmcKKyAqIGEgbG9hZCBvcGVyYXRpb246CisgKgorICogPG9yZGVyZWRsaXN0Pgor
ICogPGxpc3RpdGVtPjxwYXJhPgorICogICBXaGVuIHRoZSByZXNvdXJjZSBsb2FkIHN0YXJ0cywg
dGhlIGFjdGl2ZSBVUkkgaXMgdGhlIHJlcXVlc3RlZCBVUkkKKyAqIDwvcGFyYT48L2xpc3RpdGVt
PgorICogPGxpc3RpdGVtPjxwYXJhPgorICogICBXaGVuIHRoZSBpbml0aWFsIHJlcXVlc3QgaXMg
c2VudCB0byB0aGUgc2VydmVyLCAjV2ViS2l0V2ViUmVzb3VyY2U6OnNlbnQtcmVxdWVzdAorICog
ICBzaWduYWwgaXMgZW1pdHRlZCB3aXRob3V0IGEgcmVkaXJlY3RlZCByZXNwb25zZSwgdGhlIGFj
dGl2ZSBVUkkgaXMgdGhlIFVSSSBvZgorICogICB0aGUgcmVxdWVzdCBzZW50IHRvIHRoZSBzZXJ2
ZXIuCisgKiA8L3BhcmE+PC9saXN0aXRlbT4KKyAqIDxsaXN0aXRlbT48cGFyYT4KKyAqICAgSW4g
Y2FzZSBvZiBhIHNlcnZlciByZWRpcmVjdGlvbiwgI1dlYktpdFdlYlJlc291cmNlOjpzZW50LXJl
cXVlc3Qgc2lnbmFsCisgKiAgIGlzIGVtaXR0ZWQgYWdhaW4gd2l0aCBhIHJlZGlyZWN0ZWQgcmVz
cG9uc2UsIHRoZSBhY3RpdmUgVVJJIGlzIHRoZQorICogICByZWRpcmVjdGVkIFVSSS4KKyAqIDwv
cGFyYT48L2xpc3RpdGVtPgorICogPGxpc3RpdGVtPjxwYXJhPgorICogICBXaGVuIHRoZSByZXNw
b25zZSBpcyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIsIHRoZSBhY3RpdmUgVVJJIGlzIHRoZSBm
aW5hbAorICogICBvbmUgYW5kIGl0IHdpbGwgbm90IGNoYW5nZSBhZ2Fpbi4KKyAqIDwvcGFyYT48
L2xpc3RpdGVtPgorICogPC9vcmRlcmVkbGlzdD4KKyAqCisgKiBZb3UgY2FuIG1vbml0b3IgdGhl
IGFjdGl2ZSBVUkkgYnkgY29ubmVjdGluZyB0byB0aGUgbm90aWZ5Ojp1cmkKKyAqIHNpZ25hbCBv
ZiBAcmVzb3VyY2UuCisgKgorICogUmV0dXJuczogdGhlIGN1cnJlbnQgYWN0aXZlIFVSSSBvZiBA
cmVzb3VyY2UKKyAqLworY29uc3QgY2hhciogd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKFdl
YktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChX
RUJLSVRfSVNfV0VCX1JFU09VUkNFKHJlc291cmNlKSwgMCk7CisKKyAgICByZXR1cm4gcmVzb3Vy
Y2UtPnByaXYtPnVyaS5kYXRhKCk7Cit9CisKKy8qKgorICogd2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfcmVzcG9uc2U6CisgKiBAcmVzb3VyY2U6IGEgI1dlYktpdFdlYlJlc291cmNlCisgKgorICog
UmV0cmlldmVzIHRoZSAjV2ViS2l0VVJJUmVzcG9uc2Ugb2YgdGhlIHJlc291cmNlIGxvYWQgb3Bl
cmF0aW9uLgorICogVGhpcyBtZXRob2QgcmV0dXJucyAlTlVMTCBpZiBjYWxsZWQgYmVmb3JlIHRo
ZSByZXNwb25zZQorICogaXMgcmVjZWl2ZWQgZnJvbSB0aGUgc2VydmVyLiBZb3UgY2FuIGNvbm5l
Y3QgdG8gbm90aWZ5OjpyZXNwb25zZQorICogc2lnbmFsIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhl
IHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25lKTog
dGhlICNXZWJLaXRVUklSZXNwb25zZSwgb3IgJU5VTEwgaWYKKyAqICAgICB0aGUgcmVzcG9uc2Ug
aGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0LgorICovCitXZWJLaXRVUklSZXNwb25zZSogd2Via2l0
X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfUkVTT1VSQ0UocmVzb3Vy
Y2UpLCAwKTsKKworICAgIHJldHVybiByZXNvdXJjZS0+cHJpdi0+cmVzcG9uc2UuZ2V0KCk7Cit9
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlJlc291cmNlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJS
ZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1OTc1YWEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJSZXNvdXJjZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
SWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKi8KKworI2lmICFkZWZpbmVkKF9fV0VCS0lUMl9IX0lOU0lERV9fKSAmJiAhZGVmaW5l
ZChXRUJLSVQyX0NPTVBJTEFUSU9OKQorI2Vycm9yICJPbmx5IDx3ZWJraXQyL3dlYmtpdDIuaD4g
Y2FuIGJlIGluY2x1ZGVkIGRpcmVjdGx5LiIKKyNlbmRpZgorCisjaWZuZGVmIFdlYktpdFdlYlJl
c291cmNlX2gKKyNkZWZpbmUgV2ViS2l0V2ViUmVzb3VyY2VfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdERlZmluZXMuaD4KKyNpbmNsdWRlIDx3
ZWJraXQyL1dlYktpdFVSSVJlc3BvbnNlLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBX
RUJLSVRfVFlQRV9XRUJfUkVTT1VSQ0UgICAgICAgICAgICAod2Via2l0X3dlYl9yZXNvdXJjZV9n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfV0VCX1JFU09VUkNFKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9SRVNPVVJD
RSwgV2ViS2l0V2ViUmVzb3VyY2UpKQorI2RlZmluZSBXRUJLSVRfSVNfV0VCX1JFU09VUkNFKG9i
aikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBF
X1dFQl9SRVNPVVJDRSkpCisjZGVmaW5lIFdFQktJVF9XRUJfUkVTT1VSQ0VfQ0xBU1Moa2xhc3Mp
ICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfV0VCX1JF
U09VUkNFLCBXZWJLaXRXZWJSZXNvdXJjZUNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1dFQl9S
RVNPVVJDRV9DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9XRUJfUkVTT1VSQ0UpKQorI2RlZmluZSBXRUJLSVRfV0VCX1JFU09VUkNFX0dF
VF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9U
WVBFX1dFQl9SRVNPVVJDRSwgV2ViS2l0V2ViUmVzb3VyY2VDbGFzcykpCisKK3R5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRXZWJSZXNvdXJjZSAgICAgICAgV2ViS2l0V2ViUmVzb3VyY2U7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0V2ViUmVzb3VyY2VDbGFzcyAgIFdlYktpdFdlYlJlc291cmNlQ2xhc3M7
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlIFdlYktpdFdlYlJlc291
cmNlUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRXZWJSZXNvdXJjZSB7CisgICAgR09iamVjdCBw
YXJlbnQ7CisKKyAgICBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1
Y3QgX1dlYktpdFdlYlJlc291cmNlQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xh
c3M7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfd2ViX3Jlc291cmNlX2dldF90eXBl
ICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgY29uc3QgZ2NoYXIgKgord2Via2l0X3dlYl9y
ZXNvdXJjZV9nZXRfdXJpICAgICAgICAgKFdlYktpdFdlYlJlc291cmNlICAqcmVzb3VyY2UpOwor
CitXRUJLSVRfQVBJIFdlYktpdFVSSVJlc3BvbnNlICoKK3dlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0
X3Jlc3BvbnNlICAgIChXZWJLaXRXZWJSZXNvdXJjZSAgKnJlc291cmNlKTsKKworR19FTkRfREVD
TFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjI1YTU0ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJSZXNvdXJjZVByaXZhdGUuaApAQCAtMCwwICsxLDM0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIElnYWxpYSBTLkwuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0
V2ViUmVzb3VyY2VQcml2YXRlX2gKKyNkZWZpbmUgV2ViS2l0V2ViUmVzb3VyY2VQcml2YXRlX2gK
KworI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJLaXRXZWJSZXNvdXJj
ZS5oIgorCitXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2ViUmVzb3VyY2VDcmVhdGUoV0tGcmFt
ZVJlZiwgV2ViS2l0VVJJUmVxdWVzdCopOwordm9pZCB3ZWJraXRXZWJSZXNvdXJjZVNlbnRSZXF1
ZXN0KFdlYktpdFdlYlJlc291cmNlKiwgV2ViS2l0VVJJUmVxdWVzdCosIFdlYktpdFVSSVJlc3Bv
bnNlKik7Cit2b2lkIHdlYmtpdFdlYlJlc291cmNlU2V0UmVzcG9uc2UoV2ViS2l0V2ViUmVzb3Vy
Y2UqLCBXZWJLaXRVUklSZXNwb25zZSopOwordm9pZCB3ZWJraXRXZWJSZXNvdXJjZU5vdGlmeVBy
b2dyZXNzKFdlYktpdFdlYlJlc291cmNlKiwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKTsKK3ZvaWQg
d2Via2l0V2ViUmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSopOwordm9pZCB3ZWJr
aXRXZWJSZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSosIEdFcnJvciopOworCisKKyNl
bmRpZiAvLyBXZWJLaXRXZWJSZXNvdXJjZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCA0ZjE3ZDQ2Li5jMTYz
OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3LmNwcApAQCAtMzAsMTAgKzMwLDEyIEBACiAjaW5jbHVkZSAiV2ViS2l0UG9saWN5Q2xp
ZW50LmgiCiAjaW5jbHVkZSAiV2ViS2l0UHJpbnRPcGVyYXRpb25Qcml2YXRlLmgiCiAjaW5jbHVk
ZSAiV2ViS2l0UHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYktpdFJlc291cmNlTG9hZENsaWVudC5o
IgogI2luY2x1ZGUgIldlYktpdFNjcmlwdERpYWxvZ1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJL
aXRTZXR0aW5nc1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRVSUNsaWVudC5oIgogI2luY2x1
ZGUgIldlYktpdFdlYkNvbnRleHRQcml2YXRlLmgiCisjaW5jbHVkZSAiV2ViS2l0V2ViUmVzb3Vy
Y2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5j
bHVkZSAiV2ViS2l0V2ViVmlld1ByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRXaW5kb3dQcm9w
ZXJ0aWVzUHJpdmF0ZS5oIgpAQCAtNjQsNiArNjYsOCBAQCBlbnVtIHsKIAogICAgIFBSSU5UX1JF
UVVFU1RFRCwKIAorICAgIFJFU09VUkNFX0xPQURfU1RBUlRFRCwKKwogICAgIExBU1RfU0lHTkFM
CiB9OwogCkBAIC04NCw2ICs4OCw5IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgRGlkUmVwbGFjZUNv
bnRlbnQKIH0gUmVwbGFjZUNvbnRlbnRTdGF0dXM7CiAKK3R5cGVkZWYgSGFzaE1hcDx1aW50NjRf
dCwgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gPiBMb2FkaW5nUmVzb3VyY2VzTWFwOwordHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgR1JlZlB0cjxXZWJLaXRXZWJSZXNvdXJjZT4gPiBSZXNvdXJj
ZXNNYXA7CisKIHN0cnVjdCBfV2ViS2l0V2ViVmlld1ByaXZhdGUgewogICAgIFdlYktpdFdlYkNv
bnRleHQqIGNvbnRleHQ7CiAgICAgQ1N0cmluZyB0aXRsZTsKQEAgLTEwMCw2ICsxMDcsMTEgQEAg
c3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAgICAgdW5zaWduZWQgbW91c2VUYXJnZXRN
b2RpZmllcnM7CiAKICAgICBHUmVmUHRyPFdlYktpdEZpbmRDb250cm9sbGVyPiBmaW5kQ29udHJv
bGxlcjsKKworICAgIC8vIFJlc291cmNlcy4KKyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNl
PiBtYWluUmVzb3VyY2U7CisgICAgTG9hZGluZ1Jlc291cmNlc01hcCBsb2FkaW5nUmVzb3VyY2Vz
TWFwOworICAgIFJlc291cmNlc01hcCBzdWJyZXNvdXJjZXNNYXA7CiB9OwogCiBzdGF0aWMgZ3Vp
bnQgc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CkBAIC0yMDIsNiArMjE0LDcgQEAgc3Rh
dGljIHZvaWQgd2Via2l0V2ViVmlld0NvbnN0cnVjdGVkKEdPYmplY3QqIG9iamVjdCkKICAgICBh
dHRhY2hMb2FkZXJDbGllbnRUb1ZpZXcod2ViVmlldyk7CiAgICAgYXR0YWNoVUlDbGllbnRUb1Zp
ZXcod2ViVmlldyk7CiAgICAgYXR0YWNoUG9saWN5Q2xpZW50VG9QYWdlKHdlYlZpZXcpOworICAg
IGF0dGFjaFJlc291cmNlTG9hZENsaWVudFRvVmlldyh3ZWJWaWV3KTsKIAogICAgIFdlYlBhZ2VQ
cm94eSogcGFnZSA9IHdlYmtpdFdlYlZpZXdCYXNlR2V0UGFnZSh3ZWJWaWV3QmFzZSk7CiAgICAg
cHJpdi0+YmFja0ZvcndhcmRMaXN0ID0gYWRvcHRHUmVmKHdlYmtpdEJhY2tGb3J3YXJkTGlzdENy
ZWF0ZShXS1BhZ2VHZXRCYWNrRm9yd2FyZExpc3QodG9BUEkocGFnZSkpKSk7CkBAIC02NjYsNiAr
Njc5LDI4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdl
YlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAgd2Via2l0X21h
cnNoYWxfQk9PTEVBTl9fT0JKRUNULAogICAgICAgICAgICAgICAgICAgICAgR19UWVBFX0JPT0xF
QU4sIDEsCiAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9QUklOVF9PUEVSQVRJT04p
OworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cmVzb3VyY2UtbG9hZC1zdGFydGVk
OgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3IG9uIHdoaWNoIHRoZSBzaWdu
YWwgaXMgZW1pdHRlZAorICAgICAqIEByZXNvdXJjZTogYSAjV2ViS2l0V2ViUmVzb3VyY2UKKyAg
ICAgKiBAcmVxdWVzdDogYSAjV2ViS2l0VVJJUmVxdWVzdAorICAgICAqCisgICAgICogRW1pdHRl
ZCB3aGVuIGEgbmV3IHJlc291cmNlIGlzIGdvaW5nIHRvIGJlIGxvYWRlZC4gVGhlIEByZXF1ZXN0
IHBhcmFtZXRlcgorICAgICAqIGNvbnRhaW5zIHRoZSAjV2ViS2l0VVJJUmVxdWVzdCB0aGF0IHdp
bGwgYmUgc2VudCB0byB0aGUgc2VydmVyLgorICAgICAqIFlvdSBjYW4gbW9uaXRvciB0aGUgbG9h
ZCBvcGVyYXRpb24gYnkgY29ubmVjdGluZyB0byB0aGUgZGlmZmVyZW50IHNpZ25hbHMKKyAgICAg
KiBvZiBAcmVzb3VyY2UuCisgICAgICovCisgICAgc2lnbmFsc1tSRVNPVVJDRV9MT0FEX1NUQVJU
RURdID0KKyAgICAgICAgZ19zaWduYWxfbmV3KCJyZXNvdXJjZS1sb2FkLXN0YXJ0ZWQiLAorICAg
ICAgICAgICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIEdfU0lHTkFMX1JVTl9MQVNULAorICAgICAgICAgICAgICAgICAgICAg
R19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVzb3VyY2VfbG9hZF9zdGFydGVk
KSwKKyAgICAgICAgICAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICB3ZWJr
aXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAorICAgICAgICAgICAgICAgICAgICAgR19U
WVBFX05PTkUsIDIsCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfUkVTT1VS
Q0UsCisgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfVFlQRV9VUklfUkVRVUVTVCk7CiB9CiAK
IHN0YXRpYyBib29sIHVwZGF0ZVJlcGxhY2VDb250ZW50U3RhdHVzKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcsIFdlYktpdExvYWRFdmVudCBsb2FkRXZlbnQpCkBAIC02OTIsNiArNzI3LDExIEBAIHZv
aWQgd2Via2l0V2ViVmlld0xvYWRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktp
dExvYWRFdmVudCBsb2FkRXZlbnQpCiAgICAgaWYgKHVwZGF0ZVJlcGxhY2VDb250ZW50U3RhdHVz
KHdlYlZpZXcsIGxvYWRFdmVudCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChsb2FkRXZl
bnQgPT0gV0VCS0lUX0xPQURfU1RBUlRFRCkKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+bG9hZGlu
Z1Jlc291cmNlc01hcC5jbGVhcigpOworICAgIGVsc2UgaWYgKGxvYWRFdmVudCA9PSBXRUJLSVRf
TE9BRF9DT01NSVRURUQpCisgICAgICAgIHdlYlZpZXctPnByaXYtPnN1YnJlc291cmNlc01hcC5j
bGVhcigpOworCiAgICAgaWYgKGxvYWRFdmVudCAhPSBXRUJLSVRfTE9BRF9GSU5JU0hFRCkKICAg
ICAgICAgd2Via2l0V2ViVmlld1VwZGF0ZVVSSSh3ZWJWaWV3KTsKICAgICBnX3NpZ25hbF9lbWl0
KHdlYlZpZXcsIHNpZ25hbHNbTE9BRF9DSEFOR0VEXSwgMCwgbG9hZEV2ZW50KTsKQEAgLTgyMiw2
ICs4NjIsMzggQEAgdm9pZCB3ZWJraXRXZWJWaWV3UHJpbnRGcmFtZShXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXS0ZyYW1lUmVmIHdrRnJhbWUpCiAgICAgZ19zaWduYWxfY29ubmVjdChwcmludE9w
ZXJhdGlvbi5sZWFrUmVmKCksICJmaW5pc2hlZCIsIEdfQ0FMTEJBQ0soZ19vYmplY3RfdW5yZWYp
LCAwKTsKIH0KIAordm9pZCB3ZWJraXRXZWJWaWV3UmVzb3VyY2VMb2FkU3RhcnRlZChXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBXS0ZyYW1lUmVmIHdrRnJhbWUsIHVpbnQ2NF90IHJlc291cmNlSWRl
bnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCwgYm9vbCBpc01haW5SZXNvdXJjZSkK
K3sKKyAgICAvLyBGSVhNRTogaWdub3JlIHJlc291cmNlcyB3aGVuIHJlcGxhY2luZyBjb250ZW50
LgorICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdFdlYlJlc291cmNlQ3Jl
YXRlKHdrRnJhbWUsIHJlcXVlc3QpOworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0g
d2ViVmlldy0+cHJpdjsKKyAgICBpZiAoV0tGcmFtZUlzTWFpbkZyYW1lKHdrRnJhbWUpICYmIGlz
TWFpblJlc291cmNlKQorICAgICAgICBwcml2LT5tYWluUmVzb3VyY2UgPSByZXNvdXJjZTsKKyAg
ICBwcml2LT5sb2FkaW5nUmVzb3VyY2VzTWFwLnNldChyZXNvdXJjZUlkZW50aWZpZXIsIGFkb3B0
R1JlZihyZXNvdXJjZSkpOworICAgIGdfc2lnbmFsX2VtaXQod2ViVmlldywgc2lnbmFsc1tSRVNP
VVJDRV9MT0FEX1NUQVJURURdLCAwLCByZXNvdXJjZSwgcmVxdWVzdCk7Cit9CisKK1dlYktpdFdl
YlJlc291cmNlKiB3ZWJraXRXZWJWaWV3R2V0TG9hZGluZ1dlYlJlc291cmNlKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcikKK3sKKyAgICBHUmVmUHRy
PFdlYktpdFdlYlJlc291cmNlPiByZXNvdXJjZSA9IHdlYlZpZXctPnByaXYtPmxvYWRpbmdSZXNv
dXJjZXNNYXAuZ2V0KHJlc291cmNlSWRlbnRpZmllcik7CisgICAgcmV0dXJuIHJlc291cmNlLmdl
dCgpOworfQorCit2b2lkIHdlYmtpdFdlYlZpZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgdWludDY0X3QgcmVzb3VyY2VJZGVudGlmaWVyKQoreworICAg
IHdlYlZpZXctPnByaXYtPmxvYWRpbmdSZXNvdXJjZXNNYXAucmVtb3ZlKHJlc291cmNlSWRlbnRp
Zmllcik7Cit9CisKK1dlYktpdFdlYlJlc291cmNlKiB3ZWJraXRXZWJWaWV3UmVzb3VyY2VMb2Fk
RmluaXNoZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgdWludDY0X3QgcmVzb3VyY2VJZGVudGlm
aWVyKQoreworICAgIFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSA9IHdlYmtpdFdlYlZpZXdH
ZXRMb2FkaW5nV2ViUmVzb3VyY2Uod2ViVmlldywgcmVzb3VyY2VJZGVudGlmaWVyKTsKKyAgICBX
ZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CisgICAgaWYgKHJlc291
cmNlICE9IHByaXYtPm1haW5SZXNvdXJjZSkKKyAgICAgICAgcHJpdi0+c3VicmVzb3VyY2VzTWFw
LnNldChTdHJpbmc6OmZyb21VVEY4KHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3VyaShyZXNvdXJj
ZSkpLCByZXNvdXJjZSk7CisgICAgd2Via2l0V2ViVmlld1JlbW92ZUxvYWRpbmdXZWJSZXNvdXJj
ZSh3ZWJWaWV3LCByZXNvdXJjZUlkZW50aWZpZXIpOworICAgIHJldHVybiByZXNvdXJjZTsKK30K
KwogLyoqCiAgKiB3ZWJraXRfd2ViX3ZpZXdfbmV3OgogICoKQEAgLTE0NjYsMyArMTUzOCw0MiBA
QCBXZWJLaXRGaW5kQ29udHJvbGxlciogd2Via2l0X3dlYl92aWV3X2dldF9maW5kX2NvbnRyb2xs
ZXIoV2ViS2l0V2ViVmlldyogd2ViVmlldwogCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPmZp
bmRDb250cm9sbGVyLmdldCgpOwogfQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9yZXNvdXJjZToKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVy
biB0aGUgbWFpbiByZXNvdXJjZSBvZiBAd2ViX3ZpZXcuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3N1YnJlc291cmNlcygpOgorICoKKyAqIFJldHVybnM6ICh0cmFuc2ZlciBub25l
KTogdGhlIG1haW4gI1dlYktpdFdlYlJlc291cmNlIG9mIHRoZSB2aWV3CisgKiAgICBvciAlTlVM
TCBpZiBub3RoaW5nIGhhcyBiZWVuIGxvYWRlZC4KKyAqLworV2ViS2l0V2ViUmVzb3VyY2UqIHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9yZXNvdXJjZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwg
MCk7CisKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+bWFpblJlc291cmNlLmdldCgpOworfQor
CisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzOgorICogQHdlYl92aWV3
OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogUmV0dXJuIHRoZSBsaXN0IG9mIHN1YnJlc291cmNl
cyBvZiBAd2ViX3ZpZXcuCisgKiBTZWUgYWxzbyB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UoKS4KKyAqCisgKiBSZXR1cm5zOiAoZWxlbWVudC10eXBlIFdlYktpdFdlYlJlc291cmNl
KSAodHJhbnNmZXIgY29udGFpbmVyKTogYSBsaXN0IG9mICNXZWJLaXRXZWJSZXNvdXJjZS4KKyAq
LworR0xpc3QqIHdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpLCAwKTsKKworICAgIEdMaXN0KiBzdWJyZXNvdXJjZXMgPSAwOworICAgIFdlYktp
dFdlYlZpZXdQcml2YXRlKiBwcml2ID0gd2ViVmlldy0+cHJpdjsKKyAgICBSZXNvdXJjZXNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXYtPnN1YnJlc291cmNlc01hcC5lbmQoKTsKKyAgICBm
b3IgKFJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcml2LT5zdWJyZXNvdXJjZXNN
YXAuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBzdWJyZXNvdXJjZXMgPSBnX2xp
c3RfcHJlcGVuZChzdWJyZXNvdXJjZXMsIGl0LT5zZWNvbmQuZ2V0KCkpOworCisgICAgcmV0dXJu
IGdfbGlzdF9yZXZlcnNlKHN1YnJlc291cmNlcyk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3LmgKaW5kZXggZmI0YzQ4YS4uY2ExMTdkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
dy5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXcu
aApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0U2V0dGluZ3MuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFVSSVJlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYlJlc291cmNl
Lmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFzZS5oPgogI2luY2x1ZGUgPHdl
YmtpdDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0
UG9saWN5RGVjaXNpb24uaD4KQEAgLTEyMSwyOCArMTIyLDMxIEBAIHN0cnVjdCBfV2ViS2l0V2Vi
VmlldyB7CiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdDbGFzcyB7CiAgICAgV2ViS2l0V2ViVmlld0Jh
c2VDbGFzcyBwYXJlbnQ7CiAKLSAgICB2b2lkICAgICAgICgqIGxvYWRfY2hhbmdlZCkgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdExvYWRFdmVudCAgICAgICAgICAgIGxvYWRf
ZXZlbnQpOwotICAgIGdib29sZWFuICAgKCogbG9hZF9mYWlsZWQpICAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIgICAgICAg
ICAgICAgICAqZmFpbGluZ191cmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdFcnJvciAgICAgICAgICAgICAgICAgICAgKmVycm9yKTsKLQotICAgIEd0a1dpZGdl
dCAqKCogY3JlYXRlKSAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3
ZWJfdmlldyk7Ci0gICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgICAgICAgKFdlYktp
dFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3KTsKLSAgICB2b2lkICAgICAgICgqIGNsb3Nl
KSAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwot
Ci0gICAgZ2Jvb2xlYW4gICAoKiBzY3JpcHRfZGlhbG9nKSAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRTY3JpcHREaWFsb2cgICAgICAgICpkaWFsb2cpOwotCi0gICAgZ2Jvb2xl
YW4gICAoKiBkZWNpZGVfcG9saWN5KSAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAg
KndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJL
aXRQb2xpY3lEZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlICAgdHlwZSk7Ci0gICAg
dm9pZCAgICAgICAoKiBtb3VzZV90YXJnZXRfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcgICAgICAg
ICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgICpoaXRfdGVzdF9yZXN1bHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAg
IG1vZGlmaWVycyk7Ci0gICAgZ2Jvb2xlYW4gICAoKiBwcmludF9yZXF1ZXN0ZWQpICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92aWV3LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJLaXRQcmludE9wZXJhdGlvbiAgICAgICpwcmludF9vcGVy
YXRpb24pOworICAgIHZvaWQgICAgICAgKCogbG9hZF9jaGFuZ2VkKSAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRMb2FkRXZlbnQgICAgICAgICAgICBsb2FkX2V2ZW50KTsK
KyAgICBnYm9vbGVhbiAgICgqIGxvYWRfZmFpbGVkKSAgICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0TG9hZEV2ZW50ICAgICAgICAgICAgbG9hZF9ldmVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAgICAgICAgICAg
ICAgKmZhaWxpbmdfdXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0Vycm9yICAgICAgICAgICAgICAgICAgICAqZXJyb3IpOworCisgICAgR3RrV2lkZ2V0ICoo
KiBjcmVhdGUpICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldyk7CisgICAgdm9pZCAgICAgICAoKiByZWFkeV90b19zaG93KSAgICAgICAgIChXZWJLaXRX
ZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisgICAgdm9pZCAgICAgICAoKiBjbG9zZSkg
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJfdmlldyk7CisK
KyAgICBnYm9vbGVhbiAgICgqIHNjcmlwdF9kaWFsb2cpICAgICAgICAgKFdlYktpdFdlYlZpZXcg
ICAgICAgICAgICAgKndlYl92aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViS2l0U2NyaXB0RGlhbG9nICAgICAgICAqZGlhbG9nKTsKKworICAgIGdib29s
ZWFuICAgKCogZGVjaWRlX3BvbGljeSkgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAg
ICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJLaXRQb2xpY3lEZWNpc2lvbiAgICAgICpkZWNpc2lvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFBvbGljeURlY2lzaW9uVHlwZSAgIHR5cGUpOwor
ICAgIHZvaWQgICAgICAgKCogbW91c2VfdGFyZ2V0X2NoYW5nZWQpICAoV2ViS2l0V2ViVmlldyAg
ICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJLaXRIaXRUZXN0UmVzdWx0ICAgICAgICpoaXRfdGVzdF9yZXN1bHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAg
ICAgICAgICBtb2RpZmllcnMpOworICAgIGdib29sZWFuICAgKCogcHJpbnRfcmVxdWVzdGVkKSAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRQcmludE9wZXJhdGlvbiAgICAgICpw
cmludF9vcGVyYXRpb24pOworICAgIHZvaWQgICAgICAgKCogcmVzb3VyY2VfbG9hZF9zdGFydGVk
KSAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRXZWJSZXNvdXJjZSAgICAgICAgICpyZXNv
dXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFVS
SVJlcXVlc3QgICAgICAgICAgKnJlcXVlc3QpOwogCiAgICAgLyogUGFkZGluZyBmb3IgZnV0dXJl
IGV4cGFuc2lvbiAqLwogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpAQCAt
MjY3LDYgKzI3MSwxMiBAQCB3ZWJraXRfd2ViX3ZpZXdfZXhlY3V0ZV9lZGl0aW5nX2NvbW1hbmQg
ICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqdwogV0VCS0lUX0FQSSBXZWJL
aXRGaW5kQ29udHJvbGxlciAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2ZpbmRfY29udHJvbGxlciAg
ICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgICAgICAqd2ViX3ZpZXcpOwogCitX
RUJLSVRfQVBJIFdlYktpdFdlYlJlc291cmNlICoKK3dlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9y
ZXNvdXJjZSAgICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAgICAgICp3ZWJf
dmlldyk7CisKK1dFQktJVF9BUEkgR0xpc3QgKgord2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNv
dXJjZXMgICAgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICAgICAgKndlYl92
aWV3KTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld1ByaXZhdGUuaAppbmRleCBhZDhhYjIw
Li43M2M5MzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdQcml2YXRlLmgKQEAgLTQ1LDUgKzQ1LDkgQEAgV0tTdHJpbmdSZWYg
d2Via2l0V2ViVmlld1J1bkphdmFTY3JpcHRQcm9tcHQoV2ViS2l0V2ViVmlldyosIGNvbnN0IENT
dHJpbmcmIG1lc3MKIHZvaWQgd2Via2l0V2ViVmlld01ha2VQb2xpY3lEZWNpc2lvbihXZWJLaXRX
ZWJWaWV3KiwgV2ViS2l0UG9saWN5RGVjaXNpb25UeXBlLCBXZWJLaXRQb2xpY3lEZWNpc2lvbiop
Owogdm9pZCB3ZWJraXRXZWJWaWV3TW91c2VUYXJnZXRDaGFuZ2VkKFdlYktpdFdlYlZpZXcqLCBX
S0hpdFRlc3RSZXN1bHRSZWYsIHVuc2lnbmVkIG1vZGlmaWVycyk7CiB2b2lkIHdlYmtpdFdlYlZp
ZXdQcmludEZyYW1lKFdlYktpdFdlYlZpZXcqLCBXS0ZyYW1lUmVmKTsKK3ZvaWQgd2Via2l0V2Vi
Vmlld1Jlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViVmlldyosIFdLRnJhbWVSZWYsIHVpbnQ2
NF90IHJlc291cmNlSWRlbnRpZmllciwgV2ViS2l0VVJJUmVxdWVzdCosIGJvb2wgaXNNYWluUmVz
b3VyY2UpOworV2ViS2l0V2ViUmVzb3VyY2UqIHdlYmtpdFdlYlZpZXdHZXRMb2FkaW5nV2ViUmVz
b3VyY2UoV2ViS2l0V2ViVmlldyosIHVpbnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7Cit2b2lk
IHdlYmtpdFdlYlZpZXdSZW1vdmVMb2FkaW5nV2ViUmVzb3VyY2UoV2ViS2l0V2ViVmlldyosIHVp
bnQ2NF90IHJlc291cmNlSWRlbnRpZmllcik7CitXZWJLaXRXZWJSZXNvdXJjZSogd2Via2l0V2Vi
Vmlld1Jlc291cmNlTG9hZEZpbmlzaGVkKFdlYktpdFdlYlZpZXcqLCB1aW50NjRfdCByZXNvdXJj
ZUlkZW50aWZpZXIpOwogCiAjZW5kaWYgLy8gV2ViS2l0V2ViVmlld1ByaXZhdGVfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRv
Y3Muc2dtbCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0
ay1kb2NzLnNnbWwKaW5kZXggNGE5Y2M3OS4uOWYwODY2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLWRvY3Muc2dtbAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGstZG9jcy5zZ21s
CkBAIC0yNiw2ICsyNiw3IEBACiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFJlc3Bv
bnNlUG9saWN5RGVjaXNpb24ueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktp
dEhpdFRlc3RSZXN1bHQueG1sIi8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdFBy
aW50T3BlcmF0aW9uLnhtbCIvPgorICAgIDx4aTppbmNsdWRlIGhyZWY9InhtbC9XZWJLaXRXZWJS
ZXNvdXJjZS54bWwiLz4KICAgICA8eGk6aW5jbHVkZSBocmVmPSJ4bWwvV2ViS2l0RXJyb3IueG1s
Ii8+CiAgICAgPHhpOmluY2x1ZGUgaHJlZj0ieG1sL1dlYktpdEZpbmRDb250cm9sbGVyLnhtbCIv
PgogICA8L2NoYXB0ZXI+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9kb2NzL3dlYmtpdDJndGstc2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLXNlY3Rpb25zLnR4dAppbmRleCBkZGFjZjhkLi5h
NTQwNjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstc2VjdGlvbnMudHh0CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay1zZWN0aW9ucy50eHQKQEAgLTk0LDYgKzk0LDggQEAgd2Vi
a2l0X3NjcmlwdF9kaWFsb2dfZ2V0X21lc3NhZ2UKIHdlYmtpdF9zY3JpcHRfZGlhbG9nX2NvbmZp
cm1fc2V0X2NvbmZpcm1lZAogd2Via2l0X3NjcmlwdF9kaWFsb2dfcHJvbXB0X2dldF9kZWZhdWx0
X3RleHQKIHdlYmtpdF9zY3JpcHRfZGlhbG9nX3Byb21wdF9zZXRfdGV4dAord2Via2l0X3dlYl92
aWV3X2dldF9tYWluX3Jlc291cmNlCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3N1YnJlc291cmNlcwog
CiA8U1VCU0VDVElPTiBTdGFuZGFyZD4KIFdlYktpdFdlYlZpZXdDbGFzcwpAQCAtNDU4LDYgKzQ2
MCwyNiBAQCB3ZWJraXRfcHJpbnRfb3BlcmF0aW9uX2dldF90eXBlCiA8L1NFQ1RJT04+CiAKIDxT
RUNUSU9OPgorPEZJTEU+V2ViS2l0V2ViUmVzb3VyY2U8L0ZJTEU+CitXZWJLaXRXZWJSZXNvdXJj
ZQord2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpCit3ZWJraXRfd2ViX3Jlc291cmNlX2dldF9y
ZXNwb25zZQorCis8U1VCU0VDVElPTiBTdGFuZGFyZD4KK1dlYktpdFdlYlJlc291cmNlQ2xhc3MK
K1dFQktJVF9UWVBFX1dFQl9SRVNPVVJDRQorV0VCS0lUX1dFQl9SRVNPVVJDRQorV0VCS0lUX0lT
X1dFQl9SRVNPVVJDRQorV0VCS0lUX1dFQl9SRVNPVVJDRV9DTEFTUworV0VCS0lUX0lTX1dFQl9S
RVNPVVJDRV9DTEFTUworV0VCS0lUX1dFQl9SRVNPVVJDRV9HRVRfQ0xBU1MKKworPFNVQlNFQ1RJ
T04gUHJpdmF0ZT4KK1dlYktpdFdlYlJlc291cmNlUHJpdmF0ZQord2Via2l0X3dlYl9yZXNvdXJj
ZV9nZXRfdHlwZQorPC9TRUNUSU9OPgorCis8U0VDVElPTj4KIDxGSUxFPldlYktpdEVycm9yPC9G
SUxFPgogV0VCS0lUX05FVFdPUktfRVJST1IKIFdFQktJVF9QTFVHSU5fRVJST1IKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay50eXBl
cwppbmRleCA4ZThkN2IxLi44ZGNiNDU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJndGsudHlwZXMKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLnR5cGVzCkBAIC0xMSwzICsxMSw1IEBA
IHdlYmtpdF93aW5kb3dfcHJvcGVydGllc19nZXRfdHlwZQogd2Via2l0X2Rvd25sb2FkX2dldF90
eXBlCiB3ZWJraXRfZmluZF9jb250cm9sbGVyX2dldF90eXBlCiB3ZWJraXRfc2NyaXB0X2RpYWxv
Z19nZXRfdHlwZQord2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdHlwZQorCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9HTlVtYWtlZmlsZS5hbSBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCmluZGV4
IDZhZGIyZDUuLmM4NjExMjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL3Rlc3RzL0dOVW1ha2VmaWxlLmFtCkBAIC01LDYgKzUsNyBAQCBURVNUX1BST0dT
ICs9IFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdERvd25sb2FkcyBcCiAJUHJvZ3Jh
bXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RMb2FkZXJDbGllbnQgXAogCVByb2dyYW1zL1dlYktpdDJB
UElUZXN0cy9UZXN0UHJpbnRpbmcgXAorCVByb2dyYW1zL1dlYktpdDJBUElUZXN0cy9UZXN0UmVz
b3VyY2VzIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdEZpbmRDb250cm9s
bGVyIFwKIAlQcm9ncmFtcy9XZWJLaXQyQVBJVGVzdHMvVGVzdFdlYktpdFBvbGljeUNsaWVudCBc
CiAJUHJvZ3JhbXMvV2ViS2l0MkFQSVRlc3RzL1Rlc3RXZWJLaXRTZXR0aW5ncyBcCkBAIC0xMzUs
NCArMTM2LDEwIEBAIFByb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0V2ViS2l0RmluZENvbnRy
b2xsZXJfQ1BQRkxBR1MgPSAkKHdlYmtpdDJfdGVzdHNfY3BwCiBQcm9ncmFtc19XZWJLaXQyQVBJ
VGVzdHNfVGVzdFdlYktpdEZpbmRDb250cm9sbGVyX0xEQUREID0gJCh3ZWJraXQyX3Rlc3RzX2xk
YWRkKQogUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RXZWJLaXRGaW5kQ29udHJvbGxlcl9M
REZMQUdTID0gJCh3ZWJraXQyX3Rlc3RzX2xkZmxhZ3MpCiAKK1Byb2dyYW1zX1dlYktpdDJBUElU
ZXN0c19UZXN0UmVzb3VyY2VzX1NPVVJDRVMgPSBcCisgICAgICAgIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCitQcm9ncmFtc19XZWJLaXQy
QVBJVGVzdHNfVGVzdFJlc291cmNlc19DUFBGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19jcHBmbGFn
cykKK1Byb2dyYW1zX1dlYktpdDJBUElUZXN0c19UZXN0UmVzb3VyY2VzX0xEQUREID0gJCh3ZWJr
aXQyX3Rlc3RzX2xkYWRkKQorUHJvZ3JhbXNfV2ViS2l0MkFQSVRlc3RzX1Rlc3RSZXNvdXJjZXNf
TERGTEFHUyA9ICQod2Via2l0Ml90ZXN0c19sZGZsYWdzKQorCiBlbmRpZiAjIEVOQUJMRV9XRUJL
SVQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9U
ZXN0RG93bmxvYWRzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3Rz
L1Rlc3REb3dubG9hZHMuY3BwCmluZGV4IDQ2MWNlZmEuLmExMTllNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3REb3dubG9hZHMu
Y3BwCkBAIC0xNzMsMTUgKzE3Myw5IEBAIHB1YmxpYzoKICAgICBndWludDY0IG1fZG93bmxvYWRT
aXplOwogfTsKIAotc3RhdGljIENTdHJpbmcgZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCi17
Ci0gICAgR093blB0cjxjaGFyPiByZXNvdXJjZXNEaXIoZ19idWlsZF9maWxlbmFtZShXRUJLSVRf
U1JDX0RJUiwgIlNvdXJjZSIsICJXZWJLaXQiLCAiZ3RrIiwgInRlc3RzIiwgInJlc291cmNlcyIs
IE5VTEwpKTsKLSAgICByZXR1cm4gcmVzb3VyY2VzRGlyLmdldCgpOwotfQotCiBzdGF0aWMgdm9p
ZCB0ZXN0RG93bmxvYWRMb2NhbEZpbGUoRG93bmxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQogewotICAgIEdPd25QdHI8Y2hhcj4gc291cmNlUGF0aChnX2J1aWxkX2ZpbGVuYW1lKGdldFdl
YktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKKyAgICBH
T3duUHRyPGNoYXI+IHNvdXJjZVBhdGgoZ19idWlsZF9maWxlbmFtZShUZXN0OjpnZXRXZWJLaXQx
VGVzdFJlc291Y2VzRGlyKCkuZGF0YSgpLCAidGVzdC5wZGYiLCBOVUxMKSk7CiAgICAgR1JlZlB0
cjxHRmlsZT4gc291cmNlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgoc291cmNlUGF0
aC5nZXQoKSkpOwogICAgIEdSZWZQdHI8R0ZpbGVJbmZvPiBzb3VyY2VJbmZvID0gYWRvcHRHUmVm
KGdfZmlsZV9xdWVyeV9pbmZvKHNvdXJjZS5nZXQoKSwgR19GSUxFX0FUVFJJQlVURV9TVEFOREFS
RF9TSVpFLCBzdGF0aWNfY2FzdDxHRmlsZVF1ZXJ5SW5mb0ZsYWdzPigwKSwgMCwgMCkpOwogICAg
IEdPd25QdHI8Y2hhcj4gc291cmNlVVJJKGdfZmlsZV9nZXRfdXJpKHNvdXJjZS5nZXQoKSkpOwpA
QCAtMjU4LDcgKzI1Miw3IEBAIHN0YXRpYyB2b2lkIHRlc3REb3dubG9hZExvY2FsRmlsZUVycm9y
KERvd25sb2FkRXJyb3JUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQogICAgIGdfYXNzZXJ0X2Nt
cGZsb2F0KHdlYmtpdF9kb3dubG9hZF9nZXRfZXN0aW1hdGVkX3Byb2dyZXNzKGRvd25sb2FkLmdl
dCgpKSwgPCwgMSk7CiAKICAgICB0ZXN0LT5tX2V4cGVjdGVkRXJyb3IgPSBXRUJLSVRfRE9XTkxP
QURfRVJST1JfREVTVElOQVRJT047Ci0gICAgR093blB0cjxjaGFyPiBwYXRoKGdfYnVpbGRfZmls
ZW5hbWUoZ2V0V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgInRlc3QucGRmIiwgTlVM
TCkpOworICAgIEdPd25QdHI8Y2hhcj4gcGF0aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdl
YktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRhKCksICJ0ZXN0LnBkZiIsIE5VTEwpKTsKICAgICBH
UmVmUHRyPEdGaWxlPiBmaWxlID0gYWRvcHRHUmVmKGdfZmlsZV9uZXdfZm9yX3BhdGgocGF0aC5n
ZXQoKSkpOwogICAgIEdPd25QdHI8Y2hhcj4gdXJpKGdfZmlsZV9nZXRfdXJpKGZpbGUuZ2V0KCkp
KTsKICAgICBkb3dubG9hZCA9IGFkb3B0R1JlZih3ZWJraXRfd2ViX2NvbnRleHRfZG93bmxvYWRf
dXJpKHRlc3QtPm1fd2ViQ29udGV4dCwgdXJpLmdldCgpKSk7CkBAIC0zMDEsNyArMjk1LDcgQEAg
c3RhdGljIHZvaWQgc2VydmVyQ2FsbGJhY2soU291cFNlcnZlciogc2VydmVyLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgY29uc3QgY2hhcioKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEdP
d25QdHI8Y2hhcj4gZmlsZVBhdGgoZ19idWlsZF9maWxlbmFtZShnZXRXZWJLaXQxVGVzdFJlc291
Y2VzRGlyKCkuZGF0YSgpLCBwYXRoLCBOVUxMKSk7CisgICAgR093blB0cjxjaGFyPiBmaWxlUGF0
aChnX2J1aWxkX2ZpbGVuYW1lKFRlc3Q6OmdldFdlYktpdDFUZXN0UmVzb3VjZXNEaXIoKS5kYXRh
KCksIHBhdGgsIE5VTEwpKTsKICAgICBjaGFyKiBjb250ZW50czsKICAgICBnc2l6ZSBjb250ZW50
c0xlbmd0aDsKICAgICBpZiAoIWdfZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZj
b250ZW50cywgJmNvbnRlbnRzTGVuZ3RoLCAwKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1haW4uaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RNYWluLmgKaW5kZXggMzlhMjAwMC4uZmUwYjM5MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvdGVzdHMvVGVzdE1h
aW4uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0TWFp
bi5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaWZuZGVmIFRlc3RNYWluX2gKICNkZWZpbmUgVGVzdE1h
aW5faAogCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQ1N0cmluZy5oPgogI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0dPd25QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9IYXNoU2V0
Lmg+CiAjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KQEAgLTQ1LDYgKzQ2LDE1IEBAIHB1YmxpYzoK
IAogICAgIH5UZXN0KCkKICAgICB7CisgICAgICAgIGlmIChtX3dhdGNoZWRPYmplY3RzLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX3ByaW50KCJMZWFrZWQgb2Jq
ZWN0czoiKTsKKyAgICAgICAgSGFzaFNldDxHT2JqZWN0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fd2F0Y2hlZE9iamVjdHMuZW5kKCk7CisgICAgICAgIGZvciAoSGFzaFNldDxHT2JqZWN0Kj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV93YXRjaGVkT2JqZWN0cy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpCisgICAgICAgICAgICBnX3ByaW50KCIgJXMoJXApIiwgZ190eXBlX25hbWVfZnJvbV9p
bnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5zdGFuY2UqPigqaXQpKSwgKml0KTsKKyAg
ICAgICAgZ19wcmludCgiXG4iKTsKKwogICAgICAgICBnX2Fzc2VydChtX3dhdGNoZWRPYmplY3Rz
LmlzRW1wdHkoKSk7CiAgICAgfQogCkBAIC01OSw2ICs2OSwxMiBAQCBwdWJsaWM6CiAgICAgICAg
IGdfb2JqZWN0X3dlYWtfcmVmKG9iamVjdCwgcmVpbnRlcnByZXRfY2FzdDxHV2Vha05vdGlmeT4o
b2JqZWN0RmluYWxpemVkKSwgdGhpcyk7CiAgICAgfQogCisgICAgc3RhdGljIENTdHJpbmcgZ2V0
V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpCisgICAgeworICAgICAgICBHT3duUHRyPGNoYXI+IHJl
c291cmNlc0RpcihnX2J1aWxkX2ZpbGVuYW1lKFdFQktJVF9TUkNfRElSLCAiU291cmNlIiwgIldl
YktpdCIsICJndGsiLCAidGVzdHMiLCAicmVzb3VyY2VzIiwgTlVMTCkpOworICAgICAgICByZXR1
cm4gcmVzb3VyY2VzRGlyLmdldCgpOworICAgIH0KKwogICAgIEhhc2hTZXQ8R09iamVjdCo+IG1f
d2F0Y2hlZE9iamVjdHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL3Rlc3RzL1Rlc3RSZXNvdXJjZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmUxZjM2ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2d0ay90ZXN0cy9UZXN0UmVzb3VyY2VzLmNwcApAQCAtMCwwICsxLDUx
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJZ2FsaWEgUy5MLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJXZWJLaXRUZXN0U2VydmVyLmgiCisjaW5jbHVkZSAiV2ViVmll
d1Rlc3QuaCIKKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK3N0YXRpYyBXZWJL
aXRUZXN0U2VydmVyKiBrU2VydmVyOworCitjbGFzcyBSZXNvdXJjZXNUZXN0OiBwdWJsaWMgV2Vi
Vmlld1Rlc3QgeworcHVibGljOgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoUmVzb3VyY2Vz
VGVzdCk7CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVNlbnRSZXF1ZXN0Q2FsbGJhY2soV2Vi
S2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJL
aXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25zZSwgUmVzb3VyY2VzVGVzdCogdGVzdCkKKyAg
ICB7CisgICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMo
R19PQkpFQ1QocmVxdWVzdCkpOworICAgICAgICBpZiAocmVkaXJlY3RSZXNwb25zZSkKKyAgICAg
ICAgICAgIHRlc3QtPmFzc2VydE9iamVjdElzRGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpF
Q1QocmVkaXJlY3RSZXNwb25zZSkpOworICAgICAgICB0ZXN0LT5yZXNvdXJjZVNlbnRSZXF1ZXN0
KHJlc291cmNlLCByZXF1ZXN0LCByZWRpcmVjdFJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVkUmVzcG9uc2VDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJj
ZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNvdXJjZXNUZXN0KiB0ZXN0KQorICAgIHsKKyAg
ICAgICAgZ19hc3NlcnQod2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfcmVzcG9uc2UocmVzb3VyY2Up
KTsKKyAgICAgICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZFJlc3BvbnNlKHJlc291cmNlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZVJlY2VpdmVkRGF0YUNhbGxiYWNrKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkLCBSZXNvdXJjZXNU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+cmVzb3VyY2VSZWNlaXZlZERhdGEocmVz
b3VyY2UsIGJ5dGVzUmVjZWl2ZWQpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHJlc291cmNl
RmluaXNoZWRDYWxsYmFjayhXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFJlc291cmNlc1Rl
c3QqIHRlc3QpCisgICAgeworICAgICAgICB0ZXN0LT5yZXNvdXJjZUZpbmlzaGVkKHJlc291cmNl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNvdXJjZUZhaWxlZENhbGxiYWNrKFdlYktp
dFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvciwgUmVzb3VyY2VzVGVzdCogdGVz
dCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KGVycm9yKTsKKyAgICAgICAgdGVzdC0+cmVzb3Vy
Y2VGYWlsZWQocmVzb3VyY2UsIGVycm9yKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCByZXNv
dXJjZUxvYWRTdGFydGVkQ2FsbGJhY2soV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0V2Vi
UmVzb3VyY2UqIHJlc291cmNlLCBXZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBSZXNvdXJjZXNU
ZXN0KiB0ZXN0KQorICAgIHsKKyAgICAgICAgdGVzdC0+YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hl
blRlc3RGaW5pc2hlcyhHX09CSkVDVChyZXNvdXJjZSkpOworICAgICAgICB0ZXN0LT5hc3NlcnRP
YmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JKRUNUKHJlcXVlc3QpKTsKKyAgICAg
ICAgdGVzdC0+cmVzb3VyY2VMb2FkU3RhcnRlZChyZXNvdXJjZSwgcmVxdWVzdCk7CisgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3QocmVzb3VyY2UsICJzZW50LXJlcXVlc3QiLCBHX0NBTExCQUNLKHJl
c291cmNlU2VudFJlcXVlc3RDYWxsYmFjayksIHRlc3QpOworICAgICAgICBnX3NpZ25hbF9jb25u
ZWN0KHJlc291cmNlLCAibm90aWZ5OjpyZXNwb25zZSIsIEdfQ0FMTEJBQ0socmVzb3VyY2VSZWNl
aXZlZFJlc3BvbnNlQ2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChy
ZXNvdXJjZSwgInJlY2VpdmVkLWRhdGEiLCBHX0NBTExCQUNLKHJlc291cmNlUmVjZWl2ZWREYXRh
Q2FsbGJhY2spLCB0ZXN0KTsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgImZp
bmlzaGVkIiwgR19DQUxMQkFDSyhyZXNvdXJjZUZpbmlzaGVkQ2FsbGJhY2spLCB0ZXN0KTsKKyAg
ICAgICAgZ19zaWduYWxfY29ubmVjdChyZXNvdXJjZSwgImZhaWxlZCIsIEdfQ0FMTEJBQ0socmVz
b3VyY2VGYWlsZWRDYWxsYmFjayksIHRlc3QpOworICAgIH0KKworICAgIFJlc291cmNlc1Rlc3Qo
KQorICAgICAgICA6IFdlYlZpZXdUZXN0KCkKKyAgICAgICAgLCBtX3Jlc291cmNlc0xvYWRlZCgw
KQorICAgICAgICAsIG1fcmVzb3VyY2VzVG9Mb2FkKDApCisgICAgeworICAgICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fd2ViVmlldywgInJlc291cmNlLWxvYWQtc3RhcnRlZCIsIEdfQ0FMTEJBQ0so
cmVzb3VyY2VMb2FkU3RhcnRlZENhbGxiYWNrKSwgdGhpcyk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHJlc291cmNlTG9hZFN0YXJ0ZWQoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBX
ZWJLaXRVUklSZXF1ZXN0KiByZXF1ZXN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIFdlYktp
dFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJlc3BvbnNl
KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVzb3VyY2VSZWNlaXZlZFJlc3Bv
bnNlKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgfQorCisgICAgdmly
dHVhbCB2b2lkIHJlc291cmNlUmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJj
ZSwgZ3VpbnQ2NCBieXRlc1JlY2VpdmVkKQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVzb3VyY2VGaW5pc2hlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgewor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X21hdGNoZWQocmVzb3VyY2UsIEdf
U0lHTkFMX01BVENIX0RBVEEsIDAsIDAsIDAsIDAsIHRoaXMpOworICAgICAgICBpZiAoKyttX3Jl
c291cmNlc0xvYWRlZCA9PSBtX3Jlc291cmNlc1RvTG9hZCkKKyAgICAgICAgICAgIGdfbWFpbl9s
b29wX3F1aXQobV9tYWluTG9vcCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIHJlc291cmNl
RmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBlcnJvcikKKyAgICB7
CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorCisgICAgdm9pZCB3YWl0
VW50aWxSZXNvdXJjZXNMb2FkZWQoc2l6ZV90IHJlc291cmNlc0NvdW50KQorICAgIHsKKyAgICAg
ICAgbV9yZXNvdXJjZXNMb2FkZWQgPSAwOworICAgICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IHJl
c291cmNlc0NvdW50OworICAgICAgICBnX21haW5fbG9vcF9ydW4obV9tYWluTG9vcCk7CisgICAg
fQorCisgICAgc2l6ZV90IG1fcmVzb3VyY2VzTG9hZGVkOworICAgIHNpemVfdCBtX3Jlc291cmNl
c1RvTG9hZDsKK307CisKK3N0YXRpYyB2b2lkIHRlc3RXZWJWaWV3UmVzb3VyY2VzKFJlc291cmNl
c1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgLy8gTm90aGluZyBsb2FkZWQgeWV0
LCB0aGVyZSBzaG91bG5kJ3QgYmUgcmVzb3VyY2VzLgorICAgIGdfYXNzZXJ0KCF3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQo
IXdlYmtpdF93ZWJfdmlld19nZXRfc3VicmVzb3VyY2VzKHRlc3QtPm1fd2ViVmlldykpOworCisg
ICAgLy8gTG9hZCBzaW1wbGUgcGFnZSB3aXRob3V0IHN1YnJlc291cmNlcy4KKyAgICB0ZXN0LT5s
b2FkSHRtbCgiPGh0bWw+PGJvZHk+VGVzdGluZyBXZWJLaXRHVEsrPC9ib2R5PjwvaHRtbD4iLCAw
KTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsKKyAgICBXZWJLaXRXZWJSZXNv
dXJjZSogcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UodGVzdC0+
bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19hc3NlcnRfY21wc3Ry
KHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09LCB3ZWJraXRfd2Vi
X3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKKyAgICBnX2Fzc2VydCghd2Via2l0X3dlYl92
aWV3X2dldF9zdWJyZXNvdXJjZXModGVzdC0+bV93ZWJWaWV3KSk7CisKKyAgICAvLyBMb2FkIHNp
bXBsZSBwYWdlIHdpdGggc3VicmVzb3VyY2VzLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+
Z2V0VVJJRm9yUGF0aCgiLyIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2Vz
TG9hZGVkKDQpOworCisgICAgcmVzb3VyY2UgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVz
b3VyY2UodGVzdC0+bV93ZWJWaWV3KTsKKyAgICBnX2Fzc2VydChyZXNvdXJjZSk7CisgICAgZ19h
c3NlcnRfY21wc3RyKHdlYmtpdF93ZWJfdmlld19nZXRfdXJpKHRlc3QtPm1fd2ViVmlldyksID09
LCB3ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkocmVzb3VyY2UpKTsKKyAgICBHT3duUHRyPEdM
aXN0PiBzdWJyZXNvdXJjZXMod2Via2l0X3dlYl92aWV3X2dldF9zdWJyZXNvdXJjZXModGVzdC0+
bV93ZWJWaWV3KSk7CisgICAgZ19hc3NlcnQoc3VicmVzb3VyY2VzKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZ19saXN0X2xlbmd0aChzdWJyZXNvdXJjZXMuZ2V0KCkpLCA9PSwgMyk7CisKKyNpZiAw
CisgICAgLy8gTG9hZCB0aGUgc2FtZSBVUkkgYWdhaW4uCisgICAgLy8gRklYTUU6IHdlIG5lZWQg
YSB3b3JrYXJvdW5kIGZvciBidWcgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc4NTEwLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiLyIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VzTG9hZGVkKDQpOworI2VuZGlm
CisKKyAgICAvLyBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh0ZXN0LT5tX3dl
YlZpZXcpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291cmNlc0xvYWRlZCg0KTsKK30KKworY2xh
c3MgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDogcHVibGljIFJlc291cmNlc1Rlc3QgeworcHVibGlj
OgorICAgIE1BS0VfR0xJQl9URVNUX0ZJWFRVUkUoU2luZ2xlUmVzb3VyY2VMb2FkVGVzdCk7CisK
KyAgICBlbnVtIExvYWRFdmVudHMgeworICAgICAgICBTdGFydGVkLAorICAgICAgICBTZW50UmVx
dWVzdCwKKyAgICAgICAgUmVkaXJlY3RlZCwKKyAgICAgICAgUmVjZWl2ZWRSZXNwb25zZSwKKyAg
ICAgICAgUmVjZWl2ZWREYXRhLAorICAgICAgICBGaW5pc2hlZCwKKyAgICAgICAgRmFpbGVkCisg
ICAgfTsKKworICAgIFNpbmdsZVJlc291cmNlTG9hZFRlc3QoKQorICAgICAgICA6IFJlc291cmNl
c1Rlc3QoKQorICAgICAgICAsIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQoMCkKKyAgICB7CisgICAg
ICAgICBtX3Jlc291cmNlc1RvTG9hZCA9IDI7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUxv
YWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgV2ViS2l0VVJJUmVxdWVzdCog
cmVxdWVzdCkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBtX3Jlc291cmNlRGF0YVJlY2VpdmVkID0gMDsKKyAgICAgICAgbV9yZXNvdXJjZSA9IHJl
c291cmNlOworICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFN0YXJ0ZWQpOworICAgIH0KKwor
ICAgIHZvaWQgcmVzb3VyY2VTZW50UmVxdWVzdChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Us
IFdlYktpdFVSSVJlcXVlc3QqIHJlcXVlc3QsIFdlYktpdFVSSVJlc3BvbnNlKiByZWRpcmVjdFJl
c3BvbnNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlICE9IG1fcmVzb3VyY2UpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKHJlZGlyZWN0UmVzcG9uc2UpCisgICAgICAg
ICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJlZGlyZWN0ZWQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFNlbnRSZXF1ZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25zZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2Up
CisgICAgeworICAgICAgICBpZiAocmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBtX2xvYWRFdmVudHMuYXBwZW5kKFJlY2VpdmVkUmVzcG9uc2Up
OworICAgIH0KKworICAgIHZvaWQgcmVzb3VyY2VSZWNlaXZlZERhdGEoV2ViS2l0V2ViUmVzb3Vy
Y2UqIHJlc291cmNlLCBndWludDY0IGJ5dGVzUmVjZWl2ZWQpCisgICAgeworICAgICAgICBpZiAo
cmVzb3VyY2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X3Jlc291cmNlRGF0YVJlY2VpdmVkICs9IGJ5dGVzUmVjZWl2ZWQ7CisgICAgICAgIGlmICghbV9s
b2FkRXZlbnRzLmNvbnRhaW5zKFJlY2VpdmVkRGF0YSkpCisgICAgICAgICAgICBtX2xvYWRFdmVu
dHMuYXBwZW5kKFJlY2VpdmVkRGF0YSk7CisgICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZpbmlz
aGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNv
dXJjZSAhPSBtX3Jlc291cmNlKSB7CisgICAgICAgICAgICBSZXNvdXJjZXNUZXN0OjpyZXNvdXJj
ZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbV9sb2FkRXZlbnRzLmNvbnRhaW5zKEZhaWxlZCkpIHsKKyAgICAgICAgICAg
IFdlYktpdFVSSVJlc3BvbnNlKiByZXNwb25zZSA9IHdlYmtpdF93ZWJfcmVzb3VyY2VfZ2V0X3Jl
c3BvbnNlKG1fcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICAgICAgZ19hc3NlcnQocmVzcG9uc2Up
OworICAgICAgICAgICAgZ19hc3NlcnRfY21waW50KHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X2Nv
bnRlbnRfbGVuZ3RoKHJlc3BvbnNlKSwgPT0sIG1fcmVzb3VyY2VEYXRhUmVjZWl2ZWQpOworICAg
ICAgICB9CisgICAgICAgIG1fbG9hZEV2ZW50cy5hcHBlbmQoRmluaXNoZWQpOworICAgICAgICBS
ZXNvdXJjZXNUZXN0OjpyZXNvdXJjZUZpbmlzaGVkKHJlc291cmNlKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlc291cmNlRmFpbGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgR0Vycm9yKiBl
cnJvcikKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSA9PSBtX3Jlc291cmNlKQorICAgICAg
ICAgICAgbV9sb2FkRXZlbnRzLmFwcGVuZChGYWlsZWQpOworICAgIH0KKworICAgIHZvaWQgd2Fp
dFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWQoKQorICAgIHsKKyAgICAgICAgbV9yZXNvdXJjZSA9
IDA7CisgICAgICAgIG1fcmVzb3VyY2VzTG9hZGVkID0gMDsKKyAgICAgICAgZ19tYWluX2xvb3Bf
cnVuKG1fbWFpbkxvb3ApOworICAgIH0KKworICAgIGludCB3YWl0VW50aWxSZXNvdXJjZUxvYWRG
aW5zaWhlZEFuZFJldHVybkhUVFBTdGF0dXNSZXNwb25zZSgpCisgICAgeworICAgICAgICB3YWl0
VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZCgpOworICAgICAgICBnX2Fzc2VydChtX3Jlc291cmNl
KTsKKyAgICAgICAgV2ViS2l0VVJJUmVzcG9uc2UqIHJlc3BvbnNlID0gd2Via2l0X3dlYl9yZXNv
dXJjZV9nZXRfcmVzcG9uc2UobV9yZXNvdXJjZS5nZXQoKSk7CisgICAgICAgIGdfYXNzZXJ0KHJl
c3BvbnNlKTsKKyAgICAgICAgcmV0dXJuIHdlYmtpdF91cmlfcmVzcG9uc2VfZ2V0X3N0YXR1c19j
b2RlKHJlc3BvbnNlKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdlYktpdFdlYlJlc291cmNlPiBt
X3Jlc291cmNlOworICAgIFZlY3RvcjxMb2FkRXZlbnRzPiBtX2xvYWRFdmVudHM7CisgICAgZ3Vp
bnQ2NCBtX3Jlc291cmNlRGF0YVJlY2VpdmVkOworfTsKKworc3RhdGljIHZvaWQgdGVzdFdlYlJl
c291cmNlTG9hZGluZyhTaW5nbGVSZXNvdXJjZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVy
KQoreworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0aCgiL2phdmFzY3Jp
cHQuaHRtbCIpLmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2lo
ZWQoKTsKKyAgICBnX2Fzc2VydCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBWZWN0b3I8U2luZ2xl
UmVzb3VyY2VMb2FkVGVzdDo6TG9hZEV2ZW50cz4mIGV2ZW50cyA9IHRlc3QtPm1fbG9hZEV2ZW50
czsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwgPT0sIDUpOworICAgIGdfYXNz
ZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpTdGFydGVk
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMl0sID09LCBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWNlaXZlZFJlc3BvbnNlKTsKKyAgICBnX2Fzc2VydF9j
bXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6UmVjZWl2ZWREYXRh
KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzRdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2Fk
VGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigpOworCisgICAgdGVzdC0+bG9hZFVS
SShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIpLmRhdGEoKSk7
CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWQoKTsKKyAgICBnX2Fzc2Vy
dCh0ZXN0LT5tX3Jlc291cmNlKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzLnNpemUoKSwg
PT0sIDYpOworICAgIGdfYXNzZXJ0X2NtcGludChldmVudHNbMF0sID09LCBTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0OjpTdGFydGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzFdLCA9PSwg
U2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U2VudFJlcXVlc3QpOworICAgIGdfYXNzZXJ0X2NtcGlu
dChldmVudHNbMl0sID09LCBTaW5nbGVSZXNvdXJjZUxvYWRUZXN0OjpSZWRpcmVjdGVkKTsKKyAg
ICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6
UmVjZWl2ZWRSZXNwb25zZSk7CisgICAgZ19hc3NlcnRfY21waW50KGV2ZW50c1s0XSwgPT0sIFNp
bmdsZVJlc291cmNlTG9hZFRlc3Q6OlJlY2VpdmVkRGF0YSk7CisgICAgZ19hc3NlcnRfY21waW50
KGV2ZW50c1s1XSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OkZpbmlzaGVkKTsKKyAgICBl
dmVudHMuY2xlYXIoKTsKKworICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2ludmFsaWQtY3NzLmh0bWwiKS5kYXRhKCkpOworICAgIHRlc3QtPndhaXRVbnRpbFJlc291
cmNlTG9hZEZpbnNpaGVkKCk7CisgICAgZ19hc3NlcnQodGVzdC0+bV9yZXNvdXJjZSk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50cy5zaXplKCksID09LCA0KTsKKyAgICBnX2Fzc2VydF9jbXBp
bnQoZXZlbnRzWzBdLCA9PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6U3RhcnRlZCk7CisgICAg
Z19hc3NlcnRfY21waW50KGV2ZW50c1sxXSwgPT0sIFNpbmdsZVJlc291cmNlTG9hZFRlc3Q6OlNl
bnRSZXF1ZXN0KTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzJdLCA9PSwgU2luZ2xlUmVz
b3VyY2VMb2FkVGVzdDo6RmFpbGVkKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoZXZlbnRzWzNdLCA9
PSwgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6RmluaXNoZWQpOworICAgIGV2ZW50cy5jbGVhcigp
OworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VSZXNwb25zZShTaW5nbGVSZXNvdXJj
ZUxvYWRUZXN0KiB0ZXN0LCBnY29uc3Rwb2ludGVyKQoreworICAgIC8vIE5vIGNhY2hlZCByZXN1
cmNlOiBGaXJzdCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2phdmFzY3JpcHQuaHRtbCIpLmRhdGEoKSk7CisgICAgZ2ludCBzdGF0dXNDb2RlID0gdGVz
dC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWRBbmRSZXR1cm5IVFRQU3RhdHVzUmVzcG9u
c2UoKTsKKyAgICBnX2Fzc2VydF9jbXBpbnQoc3RhdHVzQ29kZSwgPT0sIFNPVVBfU1RBVFVTX09L
KTsKKworICAgIC8vIE5vIGNhY2hlZCByZXN1cmNlOiBTZWNvbmQgbG9hZC4KKyAgICB0ZXN0LT5s
b2FkVVJJKGtTZXJ2ZXItPmdldFVSSUZvclBhdGgoIi9qYXZhc2NyaXB0Lmh0bWwiKS5kYXRhKCkp
OworICAgIHN0YXR1c0NvZGUgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFu
ZFJldHVybkhUVFBTdGF0dXNSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXND
b2RlLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAgLy8gTm8gY2FjaGVkIHJlc3VyY2U6IFJl
bG9hZC4KKyAgICB3ZWJraXRfd2ViX3ZpZXdfcmVsb2FkKHRlc3QtPm1fd2ViVmlldyk7CisgICAg
c3RhdHVzQ29kZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZpbnNpaGVkQW5kUmV0dXJu
SFRUUFN0YXR1c1Jlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXR1c0NvZGUsID09
LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3VyY2U6IEZpcnN0IGxvYWQu
CisgICAgdGVzdC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvaW1hZ2UuaHRtbCIp
LmRhdGEoKSk7CisgICAgc3RhdHVzQ29kZSA9IHRlc3QtPndhaXRVbnRpbFJlc291cmNlTG9hZEZp
bnNpaGVkQW5kUmV0dXJuSFRUUFN0YXR1c1Jlc3BvbnNlKCk7CisgICAgZ19hc3NlcnRfY21waW50
KHN0YXR1c0NvZGUsID09LCBTT1VQX1NUQVRVU19PSyk7CisKKyAgICAvLyBDYWNoZWQgcmVzb3Vy
Y2U6IFNlY29uZCBsb2FkLgorICAgIHRlc3QtPmxvYWRVUkkoa1NlcnZlci0+Z2V0VVJJRm9yUGF0
aCgiL2ltYWdlLmh0bWwiKS5kYXRhKCkpOworICAgIHN0YXR1c0NvZGUgPSB0ZXN0LT53YWl0VW50
aWxSZXNvdXJjZUxvYWRGaW5zaWhlZEFuZFJldHVybkhUVFBTdGF0dXNSZXNwb25zZSgpOworICAg
IGdfYXNzZXJ0X2NtcGludChzdGF0dXNDb2RlLCA9PSwgU09VUF9TVEFUVVNfT0spOworCisgICAg
Ly8gQ2FjaGVkIHJlc291cmNlOiBSZWxvYWQuCisgICAgd2Via2l0X3dlYl92aWV3X3JlbG9hZCh0
ZXN0LT5tX3dlYlZpZXcpOworICAgIHN0YXR1c0NvZGUgPSB0ZXN0LT53YWl0VW50aWxSZXNvdXJj
ZUxvYWRGaW5zaWhlZEFuZFJldHVybkhUVFBTdGF0dXNSZXNwb25zZSgpOworICAgIGdfYXNzZXJ0
X2NtcGludChzdGF0dXNDb2RlLCA9PSwgU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKTsKK30KKwor
Y2xhc3MgUmVzb3VyY2VVUklUcmFja2luZ1Rlc3Q6IHB1YmxpYyBTaW5nbGVSZXNvdXJjZUxvYWRU
ZXN0IHsKK3B1YmxpYzoKKyAgICBNQUtFX0dMSUJfVEVTVF9GSVhUVVJFKFJlc291cmNlVVJJVHJh
Y2tpbmdUZXN0KTsKKworICAgIFJlc291cmNlVVJJVHJhY2tpbmdUZXN0KCkKKyAgICAgICAgOiBT
aW5nbGVSZXNvdXJjZUxvYWRUZXN0KCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
dXJpQ2hhbmdlZChXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UsIEdQYXJhbVNwZWMqLCBSZXNv
dXJjZVVSSVRyYWNraW5nVGVzdCogdGVzdCkKKyAgICB7CisgICAgICAgIGdfYXNzZXJ0KHJlc291
cmNlID09IHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpOworICAgICAgICBnX2Fzc2VydF9jbXBzdHIo
dGVzdC0+bV9hY3RpdmVVUkkuZGF0YSgpLCAhPSwgd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJp
KHRlc3QtPm1fcmVzb3VyY2UuZ2V0KCkpKTsKKyAgICAgICAgdGVzdC0+bV9hY3RpdmVVUkkgPSB3
ZWJraXRfd2ViX3Jlc291cmNlX2dldF91cmkodGVzdC0+bV9yZXNvdXJjZS5nZXQoKSk7CisgICAg
fQorCisgICAgdm9pZCByZXNvdXJjZUxvYWRTdGFydGVkKFdlYktpdFdlYlJlc291cmNlKiByZXNv
dXJjZSwgV2ViS2l0VVJJUmVxdWVzdCogcmVxdWVzdCkKKyAgICB7CisgICAgICAgIGlmIChyZXNv
dXJjZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fcmVzb3VyY2UobV93ZWJWaWV3KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3Jlc291cmNlID0gcmVzb3VyY2U7CisgICAg
ICAgIG1fYWN0aXZlVVJJID0gd2Via2l0X3dlYl9yZXNvdXJjZV9nZXRfdXJpKHJlc291cmNlKTsK
KyAgICAgICAgY2hlY2tBY3RpdmVVUkkoIi9yZWRpcmVjdGVkLmNzcyIpOworICAgICAgICBnX2Fz
c2VydF9jbXBzdHIobV9hY3RpdmVVUkkuZGF0YSgpLCA9PSwgd2Via2l0X3VyaV9yZXF1ZXN0X2dl
dF91cmkocmVxdWVzdCkpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHJlc291cmNlLCAibm90
aWZ5Ojp1cmkiLCBHX0NBTExCQUNLKHVyaUNoYW5nZWQpLCB0aGlzKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlc291cmNlU2VudFJlcXVlc3QoV2ViS2l0V2ViUmVzb3VyY2UqIHJlc291cmNlLCBXZWJL
aXRVUklSZXF1ZXN0KiByZXF1ZXN0LCBXZWJLaXRVUklSZXNwb25zZSogcmVkaXJlY3RSZXNwb25z
ZSkKKyAgICB7CisgICAgICAgIGlmIChyZXNvdXJjZSAhPSBtX3Jlc291cmNlKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmIChyZWRpcmVjdFJlc3BvbnNlKQorICAgICAgICAgICAg
Y2hlY2tBY3RpdmVVUkkoIi9zaW1wbGUtc3R5bGUuY3NzIik7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNoZWNrQWN0aXZlVVJJKCIvcmVkaXJlY3RlZC5jc3MiKTsKKyAgICAgICAgZ19hc3Nl
cnRfY21wc3RyKG1fYWN0aXZlVVJJLmRhdGEoKSwgPT0sIHdlYmtpdF91cmlfcmVxdWVzdF9nZXRf
dXJpKHJlcXVlc3QpKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlUmVjZWl2ZWRSZXNwb25z
ZShXZWJLaXRXZWJSZXNvdXJjZSogcmVzb3VyY2UpCisgICAgeworICAgICAgICBpZiAocmVzb3Vy
Y2UgIT0gbV9yZXNvdXJjZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjaGVja0Fj
dGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3MiKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNl
UmVjZWl2ZWREYXRhKFdlYktpdFdlYlJlc291cmNlKiByZXNvdXJjZSwgZ3VpbnQ2NCBieXRlc1Jl
Y2VpdmVkKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJlc291cmNlRmluaXNoZWQoV2ViS2l0
V2ViUmVzb3VyY2UqIHJlc291cmNlKQorICAgIHsKKyAgICAgICAgaWYgKHJlc291cmNlID09IG1f
cmVzb3VyY2UpCisgICAgICAgICAgICBjaGVja0FjdGl2ZVVSSSgiL3NpbXBsZS1zdHlsZS5jc3Mi
KTsKKyAgICAgICAgUmVzb3VyY2VzVGVzdDo6cmVzb3VyY2VGaW5pc2hlZChyZXNvdXJjZSk7Cisg
ICAgfQorCisgICAgdm9pZCByZXNvdXJjZUZhaWxlZChXZWJLaXRXZWJSZXNvdXJjZSosIEdFcnJv
ciopCisgICAgeworICAgICAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworICAgIH0KKworICAg
IENTdHJpbmcgbV9hY3RpdmVVUkk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0FjdGl2ZVVS
SShjb25zdCBjaGFyKiB1cmkpCisgICAgeworICAgICAgICAvLyBnX2Fzc2VydF9jbXBzdHIgaXMg
YSBtYWNybywgc28gd2UgbmVlZCB0byBjYWNoZSB0aGUgdGVtcG9yYXJ5IHN0cmluZy4KKyAgICAg
ICAgQ1N0cmluZyBzZXJ2ZXJVUkkgPSBrU2VydmVyLT5nZXRVUklGb3JQYXRoKHVyaSk7CisgICAg
ICAgIGdfYXNzZXJ0X2NtcHN0cihtX2FjdGl2ZVVSSS5kYXRhKCksID09LCBzZXJ2ZXJVUkkuZGF0
YSgpKTsKKyAgICB9Cit9OworCitzdGF0aWMgdm9pZCB0ZXN0V2ViUmVzb3VyY2VBY3RpdmVVUkko
UmVzb3VyY2VVUklUcmFja2luZ1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVz
dC0+bG9hZFVSSShrU2VydmVyLT5nZXRVUklGb3JQYXRoKCIvcmVkaXJlY3RlZC1jc3MuaHRtbCIp
LmRhdGEoKSk7CisgICAgdGVzdC0+d2FpdFVudGlsUmVzb3VyY2VMb2FkRmluc2loZWQoKTsKK30K
Kworc3RhdGljIHZvaWQgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UoU291cE1lc3NhZ2Uq
IG1lc3NhZ2UpCit7CisgICAgLy8gVGhlIGFjdHVhbCBkYXRlIGRvZXNuJ3QgcmVhbGx5IG1hdHRl
ci4KKyAgICBTb3VwRGF0ZSogc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fbm93KDApOwor
ICAgIEdPd25QdHI8Y2hhcj4gZGF0ZShzb3VwX2RhdGVfdG9fc3RyaW5nKHNvdXBEYXRlLCBTT1VQ
X0RBVEVfSFRUUCkpOworICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9oZWFkZXJzLCAiTGFzdC1Nb2RpZmllZCIsIGRhdGUuZ2V0KCkpOworICAgIHNvdXBf
ZGF0ZV9mcmVlKHNvdXBEYXRlKTsKKyAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQobWVz
c2FnZS0+cmVzcG9uc2VfaGVhZGVycywgIkNhY2hlLWNvbnRyb2wiLCAicHVibGljLCBtYXgtYWdl
PTMxNTM2MDAwIik7CisgICAgc291cERhdGUgPSBzb3VwX2RhdGVfbmV3X2Zyb21fbm93KDM2MDAp
OworICAgIGRhdGUuc2V0KHNvdXBfZGF0ZV90b19zdHJpbmcoc291cERhdGUsIFNPVVBfREFURV9I
VFRQKSk7CisgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNl
X2hlYWRlcnMsICJFeHBpcmVzIiwgZGF0ZS5nZXQoKSk7CisgICAgc291cF9kYXRlX2ZyZWUoc291
cERhdGUpOworfQorCitzdGF0aWMgdm9pZCBzZXJ2ZXJDYWxsYmFjayhTb3VwU2VydmVyKiBzZXJ2
ZXIsIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBwYXRoLCBHSGFzaFRhYmxlKiwg
U291cENsaWVudENvbnRleHQqLCBncG9pbnRlcikKK3sKKyAgICBpZiAobWVzc2FnZS0+bWV0aG9k
ICE9IFNPVVBfTUVUSE9EX0dFVCkgeworICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyht
ZXNzYWdlLCBTT1VQX1NUQVRVU19OT1RfSU1QTEVNRU5URUQpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgc291cF9tZXNzYWdlX3NldF9zdGF0dXMobWVzc2FnZSwgU09VUF9TVEFUVVNf
T0spOworCisgICAgaWYgKHNvdXBfbWVzc2FnZV9oZWFkZXJzX2dldChtZXNzYWdlLT5yZXF1ZXN0
X2hlYWRlcnMsICJJZi1Nb2RpZmllZC1TaW5jZSIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9z
ZXRfc3RhdHVzKG1lc3NhZ2UsIFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCk7CisgICAgICAgIHNv
dXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGdfc3RyX2VxdWFsKHBhdGgsICIvIikpIHsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGluZGV4SHRtbCA9CisgICAgICAgICAgICAiPGh0bWw+
PGhlYWQ+IgorICAgICAgICAgICAgIiA8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9Jy9zdHls
ZS5jc3MnIHR5cGU9J3RleHQvY3NzJz4iCisgICAgICAgICAgICAiIDxzY3JpcHQgbGFuZ3VhZ2U9
J2phdmFzY3JpcHQnIHNyYz0nL2phdmFzY3JpcHQuanMnPjwvc2NyaXB0PiIKKyAgICAgICAgICAg
ICI8L2hlYWQ+PGJvZHk+V2ViS2l0R1RLKyByZXNvdXJjZXMgdGVzdDwvYm9keT48L2h0bWw+IjsK
KyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2JvZHks
IFNPVVBfTUVNT1JZX1NUQVRJQywgaW5kZXhIdG1sLCBzdHJsZW4oaW5kZXhIdG1sKSk7CisgICAg
fSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuaHRtbCIpKSB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBqYXZhc2NyaXB0SHRtbCA9ICI8aHRtbD48aGVhZD48c2Ny
aXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyBzcmM9Jy9qYXZhc2NyaXB0LmpzJz48L3NjcmlwdD48
L2hlYWQ+PGJvZHk+PC9ib2R5PjwvaHRtbD4iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9h
cHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2Ny
aXB0SHRtbCwgc3RybGVuKGphdmFzY3JpcHRIdG1sKSk7CisgICAgfSBlbHNlIGlmIChnX3N0cl9l
cXVhbChwYXRoLCAiL2ltYWdlLmh0bWwiKSkgeworICAgICAgICBzdGF0aWMgY29uc3QgY2hhciog
aW1hZ2VIVE1MID0gIjxodG1sPjxib2R5PjxpbWcgc3JjPScvYmxhbmsuaWNvJz48L2ltZz48L2Jv
ZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZChtZXNzYWdlLT5y
ZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGltYWdlSFRNTCwgc3RybGVuKGltYWdl
SFRNTCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRpcmVjdGVkLWNz
cy5odG1sIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHJlZGlyZWN0ZWRDU1NIdG1s
ID0gIjxodG1sPjxoZWFkPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgaHJlZj0nL3JlZGlyZWN0ZWQu
Y3NzJyB0eXBlPSd0ZXh0L2Nzcyc+PC9oZWFkPjxib2R5PjwvaHRtbD4iOworICAgICAgICBzb3Vw
X21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllf
U1RBVElDLCByZWRpcmVjdGVkQ1NTSHRtbCwgc3RybGVuKHJlZGlyZWN0ZWRDU1NIdG1sKSk7Cisg
ICAgfSBlbHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2ludmFsaWQtY3NzLmh0bWwiKSkgewor
ICAgICAgICBzdGF0aWMgY29uc3QgY2hhciogaW52YWxpZENTU0h0bWwgPSAiPGh0bWw+PGhlYWQ+
PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyBocmVmPScvaW52YWxpZC5jc3MnIHR5cGU9J3RleHQvY3Nz
Jz48L2hlYWQ+PGJvZHk+PC9odG1sPiI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVu
ZChtZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIGludmFsaWRDU1NI
dG1sLCBzdHJsZW4oaW52YWxpZENTU0h0bWwpKTsKKyAgICB9IGVsc2UgaWYgKGdfc3RyX2VxdWFs
KHBhdGgsICIvc3R5bGUuY3NzIikpIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNzcyA9
CisgICAgICAgICAgICAiYm9keSB7IgorICAgICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCisg
ICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBweDsiCisgICAgICAgICAgICAiICAgIGZvbnQtZmFt
aWx5OiBzYW5zLXNlcmlmOyIKKyAgICAgICAgICAgICIgICAgYmFja2dyb3VuZDogdXJsKC9ibGFu
ay5pY28pIDAgMCBuby1yZXBlYXQ7IgorICAgICAgICAgICAgIiAgICBjb2xvcjogYmxhY2s7Igor
ICAgICAgICAgICAgIn0iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2Fn
ZS0+cmVzcG9uc2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBjc3MsIHN0cmxlbihjc3MpKTsK
KyAgICAgICAgYWRkQ2FjaGVIVFRQSGVhZGVyc1RvUmVzcG9uc2UobWVzc2FnZSk7CisgICAgfSBl
bHNlIGlmIChnX3N0cl9lcXVhbChwYXRoLCAiL2phdmFzY3JpcHQuanMiKSkgeworICAgICAgICBz
dGF0aWMgY29uc3QgY2hhciogamF2YXNjcmlwdCA9ICJmdW5jdGlvbiBmb28gKCkgeyB2YXIgYSA9
IDE7IH0iOworICAgICAgICBzb3VwX21lc3NhZ2VfYm9keV9hcHBlbmQobWVzc2FnZS0+cmVzcG9u
c2VfYm9keSwgU09VUF9NRU1PUllfU1RBVElDLCBqYXZhc2NyaXB0LCBzdHJsZW4oamF2YXNjcmlw
dCkpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9ibGFuay5pY28iKSkgewor
ICAgICAgICBHT3duUHRyPGNoYXI+IGZpbGVQYXRoKGdfYnVpbGRfZmlsZW5hbWUoVGVzdDo6Z2V0
V2ViS2l0MVRlc3RSZXNvdWNlc0RpcigpLmRhdGEoKSwgcGF0aCwgTlVMTCkpOworICAgICAgICBj
aGFyKiBjb250ZW50czsKKyAgICAgICAgZ3NpemUgY29udGVudHNMZW5ndGg7CisgICAgICAgIGdf
ZmlsZV9nZXRfY29udGVudHMoZmlsZVBhdGguZ2V0KCksICZjb250ZW50cywgJmNvbnRlbnRzTGVu
Z3RoLCAwKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2JvZHlfYXBwZW5kKG1lc3NhZ2UtPnJlc3Bv
bnNlX2JvZHksIFNPVVBfTUVNT1JZX1RBS0UsIGNvbnRlbnRzLCBjb250ZW50c0xlbmd0aCk7Cisg
ICAgICAgIGFkZENhY2hlSFRUUEhlYWRlcnNUb1Jlc3BvbnNlKG1lc3NhZ2UpOworICAgIH0gZWxz
ZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9zaW1wbGUtc3R5bGUuY3NzIikpIHsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHNpbXBsZUNTUyA9CisgICAgICAgICAgICAiYm9keSB7IgorICAg
ICAgICAgICAgIiAgICBtYXJnaW46IDBweDsiCisgICAgICAgICAgICAiICAgIHBhZGRpbmc6IDBw
eDsiCisgICAgICAgICAgICAifSI7CisgICAgICAgIHNvdXBfbWVzc2FnZV9ib2R5X2FwcGVuZCht
ZXNzYWdlLT5yZXNwb25zZV9ib2R5LCBTT1VQX01FTU9SWV9TVEFUSUMsIHNpbXBsZUNTUywgc3Ry
bGVuKHNpbXBsZUNTUykpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9yZWRp
cmVjdGVkLmNzcyIpKSB7CisgICAgICAgIHNvdXBfbWVzc2FnZV9zZXRfc3RhdHVzKG1lc3NhZ2Us
IFNPVVBfU1RBVFVTX01PVkVEX1BFUk1BTkVOVExZKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2hl
YWRlcnNfYXBwZW5kKG1lc3NhZ2UtPnJlc3BvbnNlX2hlYWRlcnMsICJMb2NhdGlvbiIsICIvc2lt
cGxlLXN0eWxlLmNzcyIpOworICAgIH0gZWxzZSBpZiAoZ19zdHJfZXF1YWwocGF0aCwgIi9pbnZh
bGlkLmNzcyIpKQorICAgICAgICBzb3VwX21lc3NhZ2Vfc2V0X3N0YXR1cyhtZXNzYWdlLCBTT1VQ
X1NUQVRVU19DQU5UX0NPTk5FQ1QpOworICAgIHNvdXBfbWVzc2FnZV9ib2R5X2NvbXBsZXRlKG1l
c3NhZ2UtPnJlc3BvbnNlX2JvZHkpOworfQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAga1Nl
cnZlciA9IG5ldyBXZWJLaXRUZXN0U2VydmVyKCk7CisgICAga1NlcnZlci0+cnVuKHNlcnZlckNh
bGxiYWNrKTsKKworICAgIFJlc291cmNlc1Rlc3Q6OmFkZCgiV2ViS2l0V2ViVmlldyIsICJyZXNv
dXJjZXMiLCB0ZXN0V2ViVmlld1Jlc291cmNlcyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVz
dDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJsb2FkaW5nIiwgdGVzdFdlYlJlc291cmNlTG9h
ZGluZyk7CisgICAgU2luZ2xlUmVzb3VyY2VMb2FkVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJj
ZSIsICJyZXNwb25zZSIsIHRlc3RXZWJSZXNvdXJjZVJlc3BvbnNlKTsKKyAgICBSZXNvdXJjZVVS
SVRyYWNraW5nVGVzdDo6YWRkKCJXZWJLaXRXZWJSZXNvdXJjZSIsICJhY3RpdmUtdXJpIiwgdGVz
dFdlYlJlc291cmNlQWN0aXZlVVJJKTsKK30KKwordm9pZCBhZnRlckFsbCgpCit7CisgICAgZGVs
ZXRlIGtTZXJ2ZXI7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay93ZWJraXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
LmgKaW5kZXggMGE4MDdiYy4uMjUzMDdmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvd2Via2l0Mi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL3dlYmtpdDIuaApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHdlYmtpdDIvV2Vi
S2l0VVJJUmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0VVJJUmVzcG9uc2UuaD4K
ICNpbmNsdWRlIDx3ZWJraXQyL1dlYktpdFdlYkNvbnRleHQuaD4KKyNpbmNsdWRlIDx3ZWJraXQy
L1dlYktpdFdlYlJlc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0Mi9XZWJLaXRXZWJWaWV3QmFz
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdDIvV2ViS2l0V2ViVmlldy5oPgogI2luY2x1ZGUgPHdlYmtp
dDIvV2ViS2l0V2luZG93UHJvcGVydGllcy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1hcnNoYWwubGlzdCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL3dlYmtpdDJtYXJzaGFsLmxpc3QKaW5kZXggNWY3MzU2MC4uNGU0NzJj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvd2Via2l0Mm1h
cnNoYWwubGlzdAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay93ZWJraXQy
bWFyc2hhbC5saXN0CkBAIC01LDYgKzUsNyBAQCBCT09MRUFOOk9CSkVDVCxFTlVNCiBCT09MRUFO
OlNUUklORwogT0JKRUNUOlZPSUQKIFZPSUQ6T0JKRUNULFVJTlQKK1ZPSUQ6T0JKRUNULE9CSkVD
VAogVk9JRDpPQkpFQ1QsUE9JTlRFUgogVk9JRDpVSU5UNjQKIAo=
</data>
<flag name="review"
          id="135622"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>