<?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>92358</bug_id>
          
          <creation_ts>2012-07-26 03:04:36 -0700</creation_ts>
          <short_desc>[EFL][WK2] Add form client for Ewk_View</short_desc>
          <delta_ts>2012-07-26 06:28:54 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61838</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>679105</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 03:04:36 -0700</bug_when>
    <thetext>We need to define a form client and attach it to the Ewk_View. This way, we can emit a signal on the view when a form is about to get submitted and provide information to the browser about the form and its data.
This can be used by the browser to store information (e.g. login information) that could be used to pre-fill the form later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679161</commentid>
    <comment_count>1</comment_count>
      <attachid>154611</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 04:48:03 -0700</bug_when>
    <thetext>Created attachment 154611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679168</commentid>
    <comment_count>2</comment_count>
      <attachid>154611</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-26 04:59:42 -0700</bug_when>
    <thetext>Comment on attachment 154611
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.h:56
&gt; + * When the reference count reaches 0, the intent is freed.

Intent??? Also shouldnt you say thta it will be submitted if not already.

&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.h:99
&gt; +EAPI Eina_Bool ewk_form_submission_request_submit(Ewk_Form_Submission_Request *request);

hmm here you could read it as a &quot;request submit&quot; instead of submit a submission_request. I dont have any better ideas though

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:948
&gt; + * Emits signal: &quot;form,request,new&quot; with pointer to Ewk_Form_Submission_Request.

form,request,submit ? isn&apos;t that not more obvious? or form,submission,new?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:33
&gt; + *   It is possible to handle the form submission request asynchronously, by simply calling

it is possible to intercept...?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:37
&gt; + *   ewk_form_submission_request_submit() will be called.

called automatically?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679197</commentid>
    <comment_count>3</comment_count>
      <attachid>154611</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 05:28:40 -0700</bug_when>
    <thetext>Comment on attachment 154611
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.cpp:948
&gt;&gt; + * Emits signal: &quot;form,request,new&quot; with pointer to Ewk_Form_Submission_Request.
&gt; 
&gt; form,request,submit ? isn&apos;t that not more obvious? or form,submission,new?

Hmm, how about &quot;form,submission,request&quot; ?

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:33
&gt;&gt; + *   It is possible to handle the form submission request asynchronously, by simply calling
&gt; 
&gt; it is possible to intercept...?

No, there is no such method in the C API, we can only continue the submission, not cancel it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679198</commentid>
    <comment_count>4</comment_count>
      <attachid>154617</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 05:29:21 -0700</bug_when>
    <thetext>Created attachment 154617
Patch

Take Kenneth feedback into consideration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679207</commentid>
    <comment_count>5</comment_count>
      <attachid>154617</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-07-26 05:42:47 -0700</bug_when>
    <thetext>Comment on attachment 154617
Patch

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.cpp:49
&gt; +    bool handledRequest;

bool wasHandled ? or maybe just bool submitted;

handledRequest sounds a bit weird, it is more like did handle request or request was handled

&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.cpp:64
&gt; +        // Make sure the request is always handled before destroying.
&gt; +        if (!handledRequest)
&gt; +            WKFormSubmissionListenerContinue(wkListener.get());

As this is more like a &quot;already done, break&quot; if sentence I would write it the other way around

if (handled)
   return

...

This is generally a good way because it allows for less errors when making refactorings

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:30
&gt; + *   The Ewk_Form_Submission_Request passed contains information about the text fields of the form. This

What about other forms such as checkboxes, etc?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_form_client.cpp:46
&gt; +    memset(&amp;formClient, 0, sizeof(WKPageFormClient));

Any reason to null it if you are filling out all the values? Just to be safe for future extensions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679215</commentid>
    <comment_count>6</comment_count>
      <attachid>154617</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-07-26 05:48:28 -0700</bug_when>
    <thetext>Comment on attachment 154617
Patch

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

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.cpp:49
&gt;&gt; +    bool handledRequest;
&gt; 
&gt; bool wasHandled ? or maybe just bool submitted;
&gt; 
&gt; handledRequest sounds a bit weird, it is more like did handle request or request was handled

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_form_submission_request.cpp:64
&gt;&gt; +            WKFormSubmissionListenerContinue(wkListener.get());
&gt; 
&gt; As this is more like a &quot;already done, break&quot; if sentence I would write it the other way around
&gt; 
&gt; if (handled)
&gt;    return
&gt; 
&gt; ...
&gt; 
&gt; This is generally a good way because it allows for less errors when making refactorings

Ok.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view.h:30
&gt;&gt; + *   The Ewk_Form_Submission_Request passed contains information about the text fields of the form. This
&gt; 
&gt; What about other forms such as checkboxes, etc?

No, only test fields values are passed.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_view_form_client.cpp:46
&gt;&gt; +    memset(&amp;formClient, 0, sizeof(WKPageFormClient));
&gt; 
&gt; Any reason to null it if you are filling out all the values? Just to be safe for future extensions?

Yes, for possible future extensions: this is safer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679263</commentid>
    <comment_count>7</comment_count>
      <attachid>154617</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 06:28:48 -0700</bug_when>
    <thetext>Comment on attachment 154617
Patch

Clearing flags on attachment: 154617

Committed r123742: &lt;http://trac.webkit.org/changeset/123742&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>679264</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-26 06:28:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154611</attachid>
            <date>2012-07-26 04:48:03 -0700</date>
            <delta_ts>2012-07-26 05:29:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>92358_wk2_form_client.patch</filename>
            <type>text/plain</type>
            <size>24342</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjOTNjNWVlLi4zM2EwMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYg
QEAKKzIwMTItMDctMjYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBmb3JtIGNsaWVudCBmb3IgRXdrX1ZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMzU4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
IGEgZm9ybSBjbGllbnQgZm9yIEVGTCBwb3J0IGluIG9yZGVyIHRvCisgICAgICAgIHNlbmQgYSAi
Zm9ybSxyZXF1ZXN0LG5ldyIgc2lnbmFsIG9uIHRoZSBFd2tfVmlldworICAgICAgICB3aGVuZXZl
ciBhIGZvcm0gd2lsbCBiZSBzdWJtaXR0ZWQuCisKKyAgICAgICAgVGhlIEV3a19Gb3JtX1N1Ym1p
c3Npb25fUmVxdWVzdCB0eXBlIGlzCisgICAgICAgIGludHJvZHVjZWQgdG8gcHJvdmlkZSB0aGUg
Y2xpZW50IHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgYWJvdXQgdGhlIGZvcm0gKGUuZy4gdGV4
dCBmaWVsZHMgY29udGFpbmVkIGluIHRoZQorICAgICAgICBmb3JtKSBhbmQgdG8gc3VibWl0IGl0
LgorCisgICAgICAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3Jt
YXRpb24KKyAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciB0byBwcmUtZmlsbCB0aGUgZm9y
bS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfRXdrX0Zvcm1fU3VibWlz
c2lvbl9SZXF1ZXN0KToKKyAgICAgICAgKF9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q6Ol9F
d2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QpOgorICAgICAgICAoX0V3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdDo6fl9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QpOgorICAgICAgICAoZXdr
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3JlZik6CisgICAgICAgIChld2tfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfdW5yZWYpOgorICAgICAgICAoZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0
X2ZpZWxkX25hbWVzX2dldCk6CisgICAgICAgIChld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rf
ZmllbGRfdmFsdWVfZ2V0KToKKyAgICAgICAgKGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9z
dWJtaXQpOgorICAgICAgICAoZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVx
dWVzdF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAgICAgKGV3a192aWV3
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19mb3Jt
X2NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAod2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAo
ZXdrX3ZpZXdfZm9ybV9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKwogMjAxMi0wNy0yNSAgU2Vva2p1IEt3
b24gIDxzZW9ranUua3dvbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIEltcGxl
bWVudCB0aGUgaW5zcGVjdG9yIGZvciBXZWJLaXRUZXN0UnVubmVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDE5MzliNjMuLjdlNjMxM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC00Miw2ICs0Miw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5jcHAKQEAgLTUwLDYgKzUxLDcgQEAgTElTVChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3X2Zvcm1fY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xv
YWRlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcG9saWN5X2Ns
aWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19yZXNvdXJjZV9sb2FkX2Ns
aWVudC5jcHAKQEAgLTE4MCw2ICsxODIsNyBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICAg
ICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRl
bnQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19pbnRlbnRfc2VydmljZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IGZiNjNhYzUuLjc0NGZjMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIK
KyNpbmNsdWRlICJld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tf
aW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdr
X21haW4uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcwNzIxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuY3BwCkBA
IC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisj
aW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV0tGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgor
I2luY2x1ZGUgImV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioK
KyAqIFxzdHJ1Y3QgX0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdAorICogQGJyaWVmIENvbnRh
aW5zIHRoZSBmb3JtIHN1Ym1pc3Npb24gcmVxdWVzdCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19G
b3JtX1N1Ym1pc3Npb25fUmVxdWVzdCB7CisgICAgdW5zaWduZWQgaW50IF9fcmVmOyAvKio8IHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdCAqLworICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gd2tWYWx1ZXM7CisgICAgV0tSZXRhaW5QdHI8V0tGb3JtU3VibWlzc2lvbkxp
c3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7CisKKyAgICBf
RXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0KFdLRGljdGlvbmFyeVJlZiB2YWx1ZXMsIFdLRm9y
bVN1Ym1pc3Npb25MaXN0ZW5lclJlZiBsaXN0ZW5lcikKKyAgICAgICAgOiBfX3JlZigxKQorICAg
ICAgICAsIHdrVmFsdWVzKHZhbHVlcykKKyAgICAgICAgLCB3a0xpc3RlbmVyKGxpc3RlbmVyKQor
ICAgICAgICAsIGhhbmRsZWRSZXF1ZXN0KGZhbHNlKQorICAgIHsgfQorCisgICAgfl9Fd2tfRm9y
bV9TdWJtaXNzaW9uX1JlcXVlc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFfX3JlZik7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9y
ZSBkZXN0cm95aW5nLgorICAgICAgICBpZiAoIWhhbmRsZWRSZXF1ZXN0KQorICAgICAgICAgICAg
V0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyQ29udGludWUod2tMaXN0ZW5lci5nZXQoKSk7CisgICAg
fQorfTsKKwordm9pZCBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfcmVmKEV3a19Gb3JtX1N1
Ym1pc3Npb25fUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihyZXF1ZXN0KTsKKyAgICArK3JlcXVlc3QtPl9fcmVmOworfQorCit2b2lkIGV3a19mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF91bnJlZihFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVxdWVzdCk7CisKKyAg
ICBpZiAoLS1yZXF1ZXN0LT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHJl
cXVlc3Q7Cit9CisKK0VpbmFfTGlzdCogZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2ZpZWxk
X25hbWVzX2dldChFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVlc3QsIDApOworCisgICAgRWluYV9M
aXN0KiBuYW1lcyA9IDA7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a0tleXMoQWRv
cHRXSywgV0tEaWN0aW9uYXJ5Q29weUtleXMocmVxdWVzdC0+d2tWYWx1ZXMuZ2V0KCkpKTsKKyAg
ICBjb25zdCBzaXplX3QgbnVtS2V5cyA9IFdLQXJyYXlHZXRTaXplKHdrS2V5cy5nZXQoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlzOyArK2kpIHsKKyAgICAgICAgV0tTdHJp
bmdSZWYgd2tLZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHdrS2V5cy5nZXQoKSwgaSkpOworICAgICAgICBuYW1lcyA9IGVpbmFfbGlzdF9hcHBlbmQo
bmFtZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHRvSW1wbCh3a0tleSktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK2NvbnN0IGNoYXIq
IGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9maWVsZF92YWx1ZV9nZXQoRXdrX0Zvcm1fU3Vi
bWlzc2lvbl9SZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgMCk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOwor
ICAgIFdLU3RyaW5nUmVmIHdrVmFsdWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShyZXF1ZXN0LT53a1ZhbHVlcy5nZXQoKSwgd2tLZXkuZ2V0KCkp
KTsKKworICAgIHJldHVybiB3a1ZhbHVlID8gZWluYV9zdHJpbmdzaGFyZV9hZGQodG9JbXBsKHdr
VmFsdWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSA6IDA7Cit9CisKK0VpbmFfQm9vbCBld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVz
dCwgZmFsc2UpOworCisgICAgV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyQ29udGludWUocmVxdWVz
dC0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+aGFuZGxlZFJlcXVlc3QgPSB0cnVl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQGludGVybmFsIGV3a19mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdF9uZXcKKyAqIENyZWF0ZXMgYSBFd2tfRm9ybV9TdWJtaXNzaW9uX1Jl
cXVlc3QgZnJvbSBhIGRpY3Rpb25hcnkgYW5kIGEgV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyUmVm
LgorICovCitFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9uZXcoV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgV0tGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyUmVmIGxpc3RlbmVyKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2
YWx1ZXMsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChsaXN0ZW5lciwg
MCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCh2YWx1ZXMs
IGxpc3RlbmVyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNTg1MDFjNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oCkBA
IC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3
a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3
ayBGb3JtIFN1Ym1pc3Npb24gUmVxdWVzdCBBUEkuCisgKgorICogQG5vdGUgRXdrX0Zvcm1fU3Vi
bWlzc2lvbl9SZXF1ZXN0IHByb3ZpZGVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICogYSBmb3Jt
IGFib3V0IHRoZSBiZSBzdWJtaXR0ZWQsIGluIHBhcnRpY3VsYXIgaXRzIHRleHQgZmllbGRzLgor
ICovCisKKyNpZm5kZWYgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2gKKyNkZWZpbmUgZXdr
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUg
bmFtZSBmb3IgX0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q7
CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9i
amVjdC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8gaW5jcmVh
c2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0X3JlZihFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgKnJlcXVlc3QpOworCisv
KioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3Qs
IHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IHJl
YWNoZXMgMCwgdGhlIGludGVudCBpcyBmcmVlZC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCB0aGUg
cmVxdWVzdCBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJ
IHZvaWQgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3VucmVmKEV3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGlzdCBvZiBmaWVs
ZCBuYW1lcyBjb250YWluZWQgaW4gdGhlIGZvcm0gYXNzb2NpYXRlZCB0byBAYSByZXF1ZXN0Lgor
ICoKKyAqIEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBxdWVyeS4KKyAqCisg
KiBAcmV0dXJuIGEgI0VpbmFfTGlzdCB3aXRoIHRoZSBmb3JtIHRleHQgZmllbGRzIG5hbWVzLCBv
ciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKiBUaGUgaXRlbXMgb2YgdGhlIGxpc3QgYXJl
IGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkIHNvIHVzZSBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZCgpCisgKiBpbnN0ZWFkIG9mIHN0cmR1cCgpIHRvIGNvcHkgdGhlbSBhbmQgZnJlZSB0aGVtIHVz
aW5nIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkuCisgKgorICogQHNlZSBld2tfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfZmllbGRfdmFsdWVfZ2V0KCkKKyAqLworRUFQSSBFaW5hX0xpc3QgKmV3a19m
b3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9maWVsZF9uYW1lc19nZXQoRXdrX0Zvcm1fU3VibWlzc2lv
bl9SZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBzcGVj
aWZpYyBmaWVsZCBjb250YWluZWQgaW4gdGhlIGZvcm0gYXNzb2NpYXRlZCB0byBAYSByZXF1ZXN0
LgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBxdWVyeS4KKyAq
IEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHF1ZXJ5IHRoZSB2YWx1ZSBmb3IuCisg
KgorICogQHJldHVybiBhICNFaW5hX0xpc3Qgd2l0aCB0aGUgZm9ybSB0ZXh0IGZpZWxkcyBuYW1l
cywgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICogVGhlIHN0cmluZyByZXR1cm5lZCBp
cyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4gWW91IG5lZWQgdG8gY2FsbAorICogZWlu
YV9zdHJpbmdzaGFyZV9kZWwoKSBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgb25jZSB5b3UgYXJlIGRv
bmUgd2l0aCBpdC4KKyAqCisgKiBAc2VlIGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9maWVs
ZF9uYW1lc19nZXQoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9maWVsZF92YWx1ZV9nZXQoRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0ICpyZXF1
ZXN0LCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBDb250aW51ZXMgdGhlIGZvcm0gcmVx
dWVzdCBzdWJtaXNzaW9uLgorICoKKyAqIElmIHlvdSBkb24ndCBjYWxsIHRoaXMgZnVuY3Rpb24g
ZXhwbGljaXRlbHksIHRoZSBmb3JtIHJlcXVlc3Qgd2lsbCBiZSBzdWJtaXR0ZWQKKyAqIHVwb24g
QGEgcmVxdWVzdCBvYmplY3QgZGVzdHJ1Y3Rpb24uCisgKgorICogQHBhcmFtIHJlcXVlc3QgdGhl
IHJlcXVlc3Qgb2JqZWN0IHRvIHN1Ym1pdC4KKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBp
cyBpZiBzdWNjZXNzZnVsLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZS4KKyAqLworRUFQSSBFaW5h
X0Jvb2wgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdChFd2tfRm9ybV9TdWJtaXNz
aW9uX1JlcXVlc3QgKnJlcXVlc3QpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgor
CisjZW5kaWYgLy8gZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVz
dF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9z
dWJtaXNzaW9uX3JlcXVlc3RfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmZlYjNkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfcHJpdmF0ZS5oCkBAIC0wLDAg
KzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgZXdrX2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0X3ByaXZhdGVfaAorI2RlZmluZSBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rf
cHJpdmF0ZV9oCisKK3R5cGVkZWYgc3RydWN0IF9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Qg
RXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0OworCitFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVl
c3QqIGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9uZXcoV0tEaWN0aW9uYXJ5UmVmIHZhbHVl
cywgV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyUmVmKTsKKworI2VuZGlmIC8vIGV3a19mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdF9wcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3LmNwcAppbmRleCA4NDQ4ZmQ2Li4yMmVjNWFiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCkBAIC0zMiw2ICszMiw3IEBA
CiAjaW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29udGV4dF9wcml2YXRl
LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdf
Zm9ybV9jbGllbnRfcHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X2xvYWRlcl9jbGllbnRf
cHJpdmF0ZS5oIgogI2luY2x1ZGUgImV3a192aWV3X3BvbGljeV9jbGllbnRfcHJpdmF0ZS5oIgog
I2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKQEAgLTUzNCw2ICs1MzUsNyBAQCBFdmFzX09i
amVjdCogZXdrX3ZpZXdfYmFzZV9hZGQoRXZhcyogY2FudmFzLCBXS0NvbnRleHRSZWYgY29udGV4
dFJlZiwgV0tQYWdlR3JvdQogICAgIH0KIAogICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xp
ZW50SW1wbDo6Y3JlYXRlKHRvSW1wbChjb250ZXh0UmVmKSwgdG9JbXBsKHBhZ2VHcm91cFJlZiks
IGV3a1ZpZXcpOworICAgIGV3a192aWV3X2Zvcm1fY2xpZW50X2F0dGFjaCh0b0FQSShwcml2LT5w
YWdlQ2xpZW50LT5wYWdlKCkpLCBld2tWaWV3KTsKICAgICBld2tfdmlld19sb2FkZXJfY2xpZW50
X2F0dGFjaCh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpLCBld2tWaWV3KTsKICAgICBl
d2tfdmlld19wb2xpY3lfY2xpZW50X2F0dGFjaCh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdl
KCkpLCBld2tWaWV3KTsKICAgICBld2tfdmlld19yZXNvdXJjZV9sb2FkX2NsaWVudF9hdHRhY2go
dG9BUEkocHJpdi0+cGFnZUNsaWVudC0+cGFnZSgpKSwgZXdrVmlldyk7CkBAIC05NDEsNiArOTQz
LDE3IEBAIHZvaWQgZXdrX3ZpZXdfaW1hZ2VfZGF0YV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IHZvaWQqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6CiAKIC8qKgogICogQGludGVybmFsCisgKiBS
ZXBvcnRzIHRoYXQgYSBmb3JtIHJlcXVlc3QgaXMgYWJvdXQgdG8gYmUgc3VibWl0dGVkLgorICoK
KyAqIEVtaXRzIHNpZ25hbDogImZvcm0scmVxdWVzdCxuZXciIHdpdGggcG9pbnRlciB0byBFd2tf
Rm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QuCisgKi8KK3ZvaWQgZXdrX3ZpZXdfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9ybV9TdWJtaXNzaW9u
X1JlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tWaWV3LCAiZm9ybSxyZXF1ZXN0LG5ldyIsIHJlcXVlc3QpOworfQorCisvKioKKyAqIEBp
bnRlcm5hbAogICogUmVwb3J0cyBsb2FkIGZhaWxlZCB3aXRoIGVycm9yIGluZm9ybWF0aW9uLgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGggcG9pbnRlciB0byBFd2tfV2Vi
X0Vycm9yLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdr
X3ZpZXcuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKaW5k
ZXggNWQ2OWRmNC4uNDllZDlkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX3ZpZXcuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlldy5oCkBAIC0yNiw2ICsyNiwxNSBAQAogICoKICAqIFRoZSBmb2xsb3dpbmcgc2ln
bmFscyAoc2VlIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2FkZCgpKSBhcmUgZW1pdHRlZDoK
ICAqCisgKiAtICJmb3JtLHJlcXVlc3QsbmV3IiwgRXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0
KjogUmVwb3J0cyB0aGF0IGEgZm9ybSByZXF1ZXN0IGlzIGFib3V0IHRvIGJlIHN1Ym1pdHRlZC4K
KyAqICAgVGhlIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBwYXNzZWQgY29udGFpbnMgaW5m
b3JtYXRpb24gYWJvdXQgdGhlIHRleHQgZmllbGRzIG9mIHRoZSBmb3JtLiBUaGlzCisgKiAgIGlz
IHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGxvZ2luIGluZm9ybWF0aW9uIHRoYXQgY2FuIGJlIHVz
ZWQgbGF0ZXIgdG8gcHJlLWZpbGwgdGhlIGZvcm0uCisgKiAgIFRoZSBmb3JtIHdpbGwgbm90IGJl
IHN1Ym1pdHRlZCB1bnRpbCBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KCkgaXMg
Y2FsbGVkLgorICogICBJdCBpcyBwb3NzaWJsZSB0byBoYW5kbGUgdGhlIGZvcm0gc3VibWlzc2lv
biByZXF1ZXN0IGFzeW5jaHJvbm91c2x5LCBieSBzaW1wbHkgY2FsbGluZworICogICBld2tfZm9y
bV9zdWJtaXNzaW9uX3JlcXVlc3RfcmVmKCkgb24gdGhlIHJlcXVlc3QgYW5kIGNhbGxpbmcgZXdr
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCgpCisgKiAgIHdoZW4gZG9uZSB0byBjb250
aW51ZSB3aXRoIHRoZSBmb3JtIHN1Ym1pc3Npb24uIElmIHRoZSBsYXN0IHJlZmVyZW5jZSBpcyBy
ZW1vdmVkIG9uIGEKKyAqICAgI0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBhbmQgdGhlIGZv
cm0gaGFzIG5vdCBiZWVuIHN1Ym1pdHRlZCB5ZXQsCisgKiAgIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9zdWJtaXQoKSB3aWxsIGJlIGNhbGxlZC4KICAqIC0gImludGVudCxyZXF1ZXN0LG5l
dyIsIEV3a19JbnRlbnRfUmVxdWVzdCo6IHJlcG9ydHMgbmV3IFdlYiBpbnRlbnQgcmVxdWVzdC4K
ICAqIC0gImludGVudCxzZXJ2aWNlLHJlZ2lzdGVyIiwgRXdrX0ludGVudF9TZXJ2aWNlKjogcmVw
b3J0cyBuZXcgV2ViIGludGVudCBzZXJ2aWNlIHJlZ2lzdHJhdGlvbi4KICAqIC0gImxvYWQsZXJy
b3IiLCBjb25zdCBFd2tfV2ViX0Vycm9yKjogcmVwb3J0cyBtYWluIGZyYW1lIGxvYWQgZmFpbGVk
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
Zm9ybV9jbGllbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3Zp
ZXdfZm9ybV9jbGllbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2
NGFjNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19mb3JtX2NsaWVudC5jcHAKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV0tQYWdlLmgiCisjaW5j
bHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0X3ByaXZhdGUuaCIKKyNpbmNsdWRlICJld2tfdmlld19mb3JtX2Ns
aWVudF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgorCitzdGF0aWMg
dm9pZCB3aWxsU3VibWl0Rm9ybShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSwgV0tG
cmFtZVJlZiBzb3VyY2VGcmFtZSwgV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgV0tUeXBlUmVmIHVz
ZXJEYXRhLCBXS0Zvcm1TdWJtaXNzaW9uTGlzdGVuZXJSZWYgbGlzdGVuZXIsIGNvbnN0IHZvaWQq
IGNsaWVudEluZm8pCit7CisgICAgRXZhc19PYmplY3QqIGV3a1ZpZXcgPSBzdGF0aWNfY2FzdDxF
dmFzX09iamVjdCo+KGNvbnN0X2Nhc3Q8dm9pZCo+KGNsaWVudEluZm8pKTsKKworICAgIEV3a19G
b3JtX1N1Ym1pc3Npb25fUmVxdWVzdCogcmVxdWVzdCA9IGV3a19mb3JtX3N1Ym1pc3Npb25fcmVx
dWVzdF9uZXcodmFsdWVzLCBsaXN0ZW5lcik7CisgICAgZXdrX3ZpZXdfZm9ybV9zdWJtaXNzaW9u
X3JlcXVlc3RfbmV3KGV3a1ZpZXcsIHJlcXVlc3QpOworICAgIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF91bnJlZihyZXF1ZXN0KTsKK30KKwordm9pZCBld2tfdmlld19mb3JtX2NsaWVudF9h
dHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KQoreworICAgIFdL
UGFnZUZvcm1DbGllbnQgZm9ybUNsaWVudDsKKyAgICBtZW1zZXQoJmZvcm1DbGllbnQsIDAsIHNp
emVvZihXS1BhZ2VGb3JtQ2xpZW50KSk7CisgICAgZm9ybUNsaWVudC52ZXJzaW9uID0ga1dLUGFn
ZUZvcm1DbGllbnRDdXJyZW50VmVyc2lvbjsKKyAgICBmb3JtQ2xpZW50LmNsaWVudEluZm8gPSBl
d2tWaWV3OworICAgIGZvcm1DbGllbnQud2lsbFN1Ym1pdEZvcm0gPSB3aWxsU3VibWl0Rm9ybTsK
KyAgICBXS1BhZ2VTZXRQYWdlRm9ybUNsaWVudChwYWdlUmVmLCAmZm9ybUNsaWVudCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19mb3Jt
X2NsaWVudF9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlld19mb3JtX2NsaWVudF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uOWZlYjRhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a192aWV3X2Zvcm1fY2xpZW50X3ByaXZhdGUuaApAQCAtMCwwICsxLDM0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIGV3a192aWV3X2Zvcm1fY2xpZW50X3ByaXZh
dGVfaAorI2RlZmluZSBld2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlX2gKKworI2luY2x1ZGUg
PEV2YXMuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLQmFzZS5oPgorCit2b2lkIGV3a192aWV3X2Zv
cm1fY2xpZW50X2F0dGFjaChXS1BhZ2VSZWYgcGFnZVJlZiwgRXZhc19PYmplY3QqIGV3a1ZpZXcp
OworCisjZW5kaWYgLy8gZXdrX3ZpZXdfZm9ybV9jbGllbnRfcHJpdmF0ZV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19wcml2YXRlLmgKaW5kZXgg
YTBhNjc5MC4uNDMxMjdjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaApAQCAtMzEsNiArMzEsNyBAQCBjbGFzcyBJbnRSZWN0
OwogY2xhc3MgSW50U2l6ZTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgX0V3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBf
RXdrX1VybF9SZXF1ZXN0IEV3a19VcmxfUmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVXJs
X1Jlc3BvbnNlIEV3a19VcmxfUmVzcG9uc2U7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1dlYl9FcnJv
ciBFd2tfV2ViX0Vycm9yOwpAQCAtNDUsNiArNDYsNyBAQCB0eXBlZGVmIHN0cnVjdCBfRXdrX0lu
dGVudF9TZXJ2aWNlIEV3a19JbnRlbnRfU2VydmljZTsKIAogdm9pZCBld2tfdmlld19jdXJzb3Jf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpDdXJzb3ImIGN1cnNvcik7
CiB2b2lkIGV3a192aWV3X2Rpc3BsYXkoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNv
cmU6OkludFJlY3QmIHJlY3QpOwordm9pZCBld2tfdmlld19mb3JtX3N1Ym1pc3Npb25fcmVxdWVz
dF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCop
Owogdm9pZCBld2tfdmlld19pbWFnZV9kYXRhX3NldChFdmFzX09iamVjdCogZXdrVmlldywgdm9p
ZCogaW1hZ2VEYXRhLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKTsKIHZvaWQgZXdrX3Zp
ZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX1dlYl9FcnJvciog
ZXJyb3IpOwogdm9pZCBld2tfdmlld19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>154617</attachid>
            <date>2012-07-26 05:29:21 -0700</date>
            <delta_ts>2012-07-26 06:28:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>92358_wk2_form_client.patch</filename>
            <type>text/plain</type>
            <size>24559</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBjOTNjNWVlLi4zM2EwMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYg
QEAKKzIwMTItMDctMjYgIENocmlzdG9waGUgRHVtZXogIDxjaHJpc3RvcGhlLmR1bWV6QGludGVs
LmNvbT4KKworICAgICAgICBbRUZMXVtXSzJdIEFkZCBmb3JtIGNsaWVudCBmb3IgRXdrX1ZpZXcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkyMzU4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
IGEgZm9ybSBjbGllbnQgZm9yIEVGTCBwb3J0IGluIG9yZGVyIHRvCisgICAgICAgIHNlbmQgYSAi
Zm9ybSxyZXF1ZXN0LG5ldyIgc2lnbmFsIG9uIHRoZSBFd2tfVmlldworICAgICAgICB3aGVuZXZl
ciBhIGZvcm0gd2lsbCBiZSBzdWJtaXR0ZWQuCisKKyAgICAgICAgVGhlIEV3a19Gb3JtX1N1Ym1p
c3Npb25fUmVxdWVzdCB0eXBlIGlzCisgICAgICAgIGludHJvZHVjZWQgdG8gcHJvdmlkZSB0aGUg
Y2xpZW50IHdpdGggaW5mb3JtYXRpb24KKyAgICAgICAgYWJvdXQgdGhlIGZvcm0gKGUuZy4gdGV4
dCBmaWVsZHMgY29udGFpbmVkIGluIHRoZQorICAgICAgICBmb3JtKSBhbmQgdG8gc3VibWl0IGl0
LgorCisgICAgICAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgbG9naW4gaW5mb3Jt
YXRpb24KKyAgICAgICAgdGhhdCBjYW4gYmUgdXNlZCBsYXRlciB0byBwcmUtZmlsbCB0aGUgZm9y
bS4KKworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZWZsL0VXZWJLaXQyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1f
c3VibWlzc2lvbl9yZXF1ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChfRXdrX0Zvcm1fU3VibWlz
c2lvbl9SZXF1ZXN0KToKKyAgICAgICAgKF9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q6Ol9F
d2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QpOgorICAgICAgICAoX0V3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdDo6fl9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QpOgorICAgICAgICAoZXdr
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3JlZik6CisgICAgICAgIChld2tfZm9ybV9zdWJtaXNz
aW9uX3JlcXVlc3RfdW5yZWYpOgorICAgICAgICAoZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0
X2ZpZWxkX25hbWVzX2dldCk6CisgICAgICAgIChld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rf
ZmllbGRfdmFsdWVfZ2V0KToKKyAgICAgICAgKGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9z
dWJtaXQpOgorICAgICAgICAoZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyk6CisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0Lmg6IEFk
ZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVx
dWVzdF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3LmNwcDoKKyAgICAgICAgKGV3a192aWV3X2Jhc2VfYWRkKToKKyAgICAgICAgKGV3a192aWV3
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX3ZpZXcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19mb3Jt
X2NsaWVudC5jcHA6IEFkZGVkLgorICAgICAgICAod2lsbFN1Ym1pdEZvcm0pOgorICAgICAgICAo
ZXdrX3ZpZXdfZm9ybV9jbGllbnRfYXR0YWNoKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlLmg6IEFkZGVkLgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a192aWV3X3ByaXZhdGUuaDoKKwogMjAxMi0wNy0yNSAgU2Vva2p1IEt3
b24gIDxzZW9ranUua3dvbkBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIEltcGxl
bWVudCB0aGUgaW5zcGVjdG9yIGZvciBXZWJLaXRUZXN0UnVubmVyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IDE5MzliNjMuLjdlNjMxM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtl
CkBAIC00Miw2ICs0Miw3IEBAIExJU1QoQVBQRU5EIFdlYktpdDJfU09VUkNFUwogICAgIFVJUHJv
Y2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19j
b250ZXh0X3JlcXVlc3RfbWFuYWdlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwv
ZXdrX2Nvb2tpZV9tYW5hZ2VyLmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfaW50ZW50LmNw
cAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRlbnRfc2VydmljZS5jcHAKICAgICBVSVBy
b2Nlc3MvQVBJL2VmbC9ld2tfbWFpbi5jcHAKQEAgLTUwLDYgKzUxLDcgQEAgTElTVChBUFBFTkQg
V2ViS2l0Ml9TT1VSQ0VTCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3VybF9yZXNwb25zZS5j
cHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdXJsX3NjaGVtZV9yZXF1ZXN0LmNwcAogICAg
IFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAorICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a192aWV3X2Zvcm1fY2xpZW50LmNwcAogICAgIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2xv
YWRlcl9jbGllbnQuY3BwCiAgICAgVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcG9saWN5X2Ns
aWVudC5jcHAKICAgICBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlld19yZXNvdXJjZV9sb2FkX2Ns
aWVudC5jcHAKQEAgLTE4MCw2ICsxODIsNyBAQCBTRVQgKEVXZWJLaXQyX0hFQURFUlMKICAgICAi
JHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgi
CiAgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dC5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2Nvb2tpZV9tYW5hZ2VyLmgiCisgICAgIiR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0Vf
RElSfS9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICAg
ICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19pbnRl
bnQuaCIKICAgICAiJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19pbnRlbnRfc2VydmljZS5oIgogICAgICIke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0v
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX21haW4uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9FV2ViS2l0Mi5oCmluZGV4IGZiNjNhYzUuLjc0NGZjMTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL0VXZWJLaXQyLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvRVdlYktpdDIuaApAQCAtMjksNiArMjksNyBAQAogCiAj
aW5jbHVkZSAiZXdrX2NvbnRleHQuaCIKICNpbmNsdWRlICJld2tfY29va2llX21hbmFnZXIuaCIK
KyNpbmNsdWRlICJld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuaCIKICNpbmNsdWRlICJld2tf
aW50ZW50LmgiCiAjaW5jbHVkZSAiZXdrX2ludGVudF9zZXJ2aWNlLmgiCiAjaW5jbHVkZSAiZXdr
X21haW4uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3
a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjcwNzIxNzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3QuY3BwCkBA
IC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgiCisKKyNpbmNsdWRlICJX
S0FQSUNhc3QuaCIKKyNpbmNsdWRlICJXS0FycmF5LmgiCisjaW5jbHVkZSAiV0tCYXNlLmgiCisj
aW5jbHVkZSAiV0tEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiV0tGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIuaCIKKyNpbmNsdWRlICJXS1N0cmluZy5oIgor
I2luY2x1ZGUgImV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCisvKioK
KyAqIFxzdHJ1Y3QgX0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdAorICogQGJyaWVmIENvbnRh
aW5zIHRoZSBmb3JtIHN1Ym1pc3Npb24gcmVxdWVzdCBkYXRhLgorICovCitzdHJ1Y3QgX0V3a19G
b3JtX1N1Ym1pc3Npb25fUmVxdWVzdCB7CisgICAgdW5zaWduZWQgaW50IF9fcmVmOyAvKio8IHRo
ZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIG9iamVjdCAqLworICAgIFdLUmV0YWluUHRyPFdLRGlj
dGlvbmFyeVJlZj4gd2tWYWx1ZXM7CisgICAgV0tSZXRhaW5QdHI8V0tGb3JtU3VibWlzc2lvbkxp
c3RlbmVyUmVmPiB3a0xpc3RlbmVyOworICAgIGJvb2wgaGFuZGxlZFJlcXVlc3Q7CisKKyAgICBf
RXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0KFdLRGljdGlvbmFyeVJlZiB2YWx1ZXMsIFdLRm9y
bVN1Ym1pc3Npb25MaXN0ZW5lclJlZiBsaXN0ZW5lcikKKyAgICAgICAgOiBfX3JlZigxKQorICAg
ICAgICAsIHdrVmFsdWVzKHZhbHVlcykKKyAgICAgICAgLCB3a0xpc3RlbmVyKGxpc3RlbmVyKQor
ICAgICAgICAsIGhhbmRsZWRSZXF1ZXN0KGZhbHNlKQorICAgIHsgfQorCisgICAgfl9Fd2tfRm9y
bV9TdWJtaXNzaW9uX1JlcXVlc3QoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFfX3JlZik7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZXF1ZXN0IGlzIGFsd2F5cyBoYW5kbGVkIGJlZm9y
ZSBkZXN0cm95aW5nLgorICAgICAgICBpZiAoIWhhbmRsZWRSZXF1ZXN0KQorICAgICAgICAgICAg
V0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyQ29udGludWUod2tMaXN0ZW5lci5nZXQoKSk7CisgICAg
fQorfTsKKwordm9pZCBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfcmVmKEV3a19Gb3JtX1N1
Ym1pc3Npb25fUmVxdWVzdCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihyZXF1ZXN0KTsKKyAgICArK3JlcXVlc3QtPl9fcmVmOworfQorCit2b2lkIGV3a19mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF91bnJlZihFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIHJl
cXVlc3QpCit7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocmVxdWVzdCk7CisKKyAg
ICBpZiAoLS1yZXF1ZXN0LT5fX3JlZikKKyAgICAgICAgcmV0dXJuOworCisgICAgZGVsZXRlIHJl
cXVlc3Q7Cit9CisKK0VpbmFfTGlzdCogZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2ZpZWxk
X25hbWVzX2dldChFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIHJlcXVlc3QpCit7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHJlcXVlc3QsIDApOworCisgICAgRWluYV9M
aXN0KiBuYW1lcyA9IDA7CisKKyAgICBXS1JldGFpblB0cjxXS0FycmF5UmVmPiB3a0tleXMoQWRv
cHRXSywgV0tEaWN0aW9uYXJ5Q29weUtleXMocmVxdWVzdC0+d2tWYWx1ZXMuZ2V0KCkpKTsKKyAg
ICBjb25zdCBzaXplX3QgbnVtS2V5cyA9IFdLQXJyYXlHZXRTaXplKHdrS2V5cy5nZXQoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlzOyArK2kpIHsKKyAgICAgICAgV0tTdHJp
bmdSZWYgd2tLZXkgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tBcnJheUdldEl0ZW1BdElu
ZGV4KHdrS2V5cy5nZXQoKSwgaSkpOworICAgICAgICBuYW1lcyA9IGVpbmFfbGlzdF9hcHBlbmQo
bmFtZXMsIGVpbmFfc3RyaW5nc2hhcmVfYWRkKHRvSW1wbCh3a0tleSktPnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK2NvbnN0IGNoYXIq
IGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9maWVsZF92YWx1ZV9nZXQoRXdrX0Zvcm1fU3Vi
bWlzc2lvbl9SZXF1ZXN0KiByZXF1ZXN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChyZXF1ZXN0LCAwKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgMCk7CisKKyAgICBXS1JldGFpblB0cjxXS1N0cmluZ1Jl
Zj4gd2tLZXkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcobmFtZSkpOwor
ICAgIFdLU3RyaW5nUmVmIHdrVmFsdWUgPSBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4oV0tEaWN0
aW9uYXJ5R2V0SXRlbUZvcktleShyZXF1ZXN0LT53a1ZhbHVlcy5nZXQoKSwgd2tLZXkuZ2V0KCkp
KTsKKworICAgIHJldHVybiB3a1ZhbHVlID8gZWluYV9zdHJpbmdzaGFyZV9hZGQodG9JbXBsKHdr
VmFsdWUpLT5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKSA6IDA7Cit9CisKK0VpbmFfQm9vbCBld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVz
dCogcmVxdWVzdCkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocmVxdWVz
dCwgZmFsc2UpOworCisgICAgV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyQ29udGludWUocmVxdWVz
dC0+d2tMaXN0ZW5lci5nZXQoKSk7CisgICAgcmVxdWVzdC0+aGFuZGxlZFJlcXVlc3QgPSB0cnVl
OworCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qKgorICogQGludGVybmFsIGV3a19mb3JtX3N1
Ym1pc3Npb25fcmVxdWVzdF9uZXcKKyAqIENyZWF0ZXMgYSBFd2tfRm9ybV9TdWJtaXNzaW9uX1Jl
cXVlc3QgZnJvbSBhIGRpY3Rpb25hcnkgYW5kIGEgV0tGb3JtU3VibWlzc2lvbkxpc3RlbmVyUmVm
LgorICovCitFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9uZXcoV0tEaWN0aW9uYXJ5UmVmIHZhbHVlcywgV0tGb3JtU3VibWlzc2lvbkxpc3Rl
bmVyUmVmIGxpc3RlbmVyKQoreworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2
YWx1ZXMsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChsaXN0ZW5lciwg
MCk7CisKKyAgICByZXR1cm4gbmV3IEV3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCh2YWx1ZXMs
IGxpc3RlbmVyKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
ZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmE2N2U5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oCkBA
IC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKioKKyAqIEBmaWxlICAgIGV3
a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oCisgKiBAYnJpZWYgICBEZXNjcmliZXMgdGhlIEV3
ayBGb3JtIFN1Ym1pc3Npb24gUmVxdWVzdCBBUEkuCisgKgorICogQG5vdGUgRXdrX0Zvcm1fU3Vi
bWlzc2lvbl9SZXF1ZXN0IHByb3ZpZGVzIGluZm9ybWF0aW9uIHJlZ2FyZGluZworICogYSBmb3Jt
IGFib3V0IHRoZSBiZSBzdWJtaXR0ZWQsIGluIHBhcnRpY3VsYXIgaXRzIHRleHQgZmllbGRzLgor
ICovCisKKyNpZm5kZWYgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2gKKyNkZWZpbmUgZXdr
X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X2gKKworI2luY2x1ZGUgPEVpbmEuaD4KKworI2lmZGVm
IF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiogQ3JlYXRlcyBhIHR5cGUg
bmFtZSBmb3IgX0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCAqLwordHlwZWRlZiBzdHJ1Y3Qg
X0V3a19Gb3JtX1N1Ym1pc3Npb25fUmVxdWVzdCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q7
CisKKy8qKgorICogSW5jcmVhc2VzIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGdpdmVuIG9i
amVjdC4KKyAqCisgKiBAcGFyYW0gcmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8gaW5jcmVh
c2UgdGhlIHJlZmVyZW5jZSBjb3VudAorICovCitFQVBJIHZvaWQgZXdrX2Zvcm1fc3VibWlzc2lv
bl9yZXF1ZXN0X3JlZihFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QgKnJlcXVlc3QpOworCisv
KioKKyAqIERlY3JlYXNlcyB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIHRoZSBnaXZlbiBvYmplY3Qs
IHBvc3NpYmx5IGZyZWVpbmcgaXQuCisgKgorICogV2hlbiB0aGUgcmVmZXJlbmNlIGNvdW50IHJl
YWNoZXMgMCwgdGhlIHJlcXVlc3QgaXMgZnJlZWQuCisgKgorICogSWYgdGhlIHJlZmVyZW5jZSBj
b3VudCByZWFjaGVzIDAgYW5kIHRoZSBmb3JtIHJlcXVlc3QgaGFzIG5vdCBiZSBzdWJtaXR0ZWQg
eWV0LAorICogZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCgpIHdpbGwgYmUgY2Fs
bGVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlCisgKiBkZXN0cnVjdGlvbi4KKyAqCisgKiBAcGFyYW0g
cmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8gZGVjcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3Vu
dAorICovCitFQVBJIHZvaWQgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3VucmVmKEV3a19G
b3JtX1N1Ym1pc3Npb25fUmVxdWVzdCAqcmVxdWVzdCk7CisKKy8qKgorICogUmV0dXJucyB0aGUg
bGlzdCBvZiBmaWVsZCBuYW1lcyBjb250YWluZWQgaW4gdGhlIGZvcm0gYXNzb2NpYXRlZCB0byBA
YSByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdCB0byBx
dWVyeS4KKyAqCisgKiBAcmV0dXJuIGEgI0VpbmFfTGlzdCB3aXRoIHRoZSBmb3JtIHRleHQgZmll
bGRzIG5hbWVzLCBvciBAYyBOVUxMIGluIGNhc2Ugb2YgZXJyb3IuCisgKiBUaGUgaXRlbXMgb2Yg
dGhlIGxpc3QgYXJlIGd1YXJhbnRlZWQgdG8gYmUgc3RyaW5nc2hhcmVkIHNvIHVzZSBlaW5hX3N0
cmluZ3NoYXJlX2FkZCgpCisgKiBpbnN0ZWFkIG9mIHN0cmR1cCgpIHRvIGNvcHkgdGhlbSBhbmQg
ZnJlZSB0aGVtIHVzaW5nIGVpbmFfc3RyaW5nc2hhcmVfZGVsKCkuCisgKgorICogQHNlZSBld2tf
Zm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfZmllbGRfdmFsdWVfZ2V0KCkKKyAqLworRUFQSSBFaW5h
X0xpc3QgKmV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9maWVsZF9uYW1lc19nZXQoRXdrX0Zv
cm1fU3VibWlzc2lvbl9SZXF1ZXN0ICpyZXF1ZXN0KTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSB2
YWx1ZSBvZiBzcGVjaWZpYyBmaWVsZCBjb250YWluZWQgaW4gdGhlIGZvcm0gYXNzb2NpYXRlZCB0
byBAYSByZXF1ZXN0LgorICoKKyAqIEBwYXJhbSByZXF1ZXN0IHRoZSByZXF1ZXN0IG9iamVjdCB0
byBxdWVyeS4KKyAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIGZpZWxkIHRvIHF1ZXJ5IHRoZSB2
YWx1ZSBmb3IuCisgKgorICogQHJldHVybiBhICNFaW5hX0xpc3Qgd2l0aCB0aGUgZm9ybSB0ZXh0
IGZpZWxkcyBuYW1lcywgb3IgQGMgTlVMTCBpbiBjYXNlIG9mIGVycm9yLgorICogVGhlIHN0cmlu
ZyByZXR1cm5lZCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0cmluZ3NoYXJlZC4gWW91IG5lZWQgdG8g
Y2FsbAorICogZWluYV9zdHJpbmdzaGFyZV9kZWwoKSBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgb25j
ZSB5b3UgYXJlIGRvbmUgd2l0aCBpdC4KKyAqCisgKiBAc2VlIGV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9maWVsZF9uYW1lc19nZXQoKQorICovCitFQVBJIGNvbnN0IGNoYXIgKmV3a19mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF9maWVsZF92YWx1ZV9nZXQoRXdrX0Zvcm1fU3VibWlzc2lvbl9S
ZXF1ZXN0ICpyZXF1ZXN0LCBjb25zdCBjaGFyICpuYW1lKTsKKworLyoqCisgKiBDb250aW51ZXMg
dGhlIGZvcm0gcmVxdWVzdCBzdWJtaXNzaW9uLgorICoKKyAqIElmIHlvdSBkb24ndCBjYWxsIHRo
aXMgZnVuY3Rpb24gZXhwbGljaXRseSwgdGhlIGZvcm0gcmVxdWVzdCB3aWxsIGJlIHN1Ym1pdHRl
ZAorICogdXBvbiBAYSByZXF1ZXN0IG9iamVjdCBkZXN0cnVjdGlvbi4KKyAqCisgKiBAcGFyYW0g
cmVxdWVzdCB0aGUgcmVxdWVzdCBvYmplY3QgdG8gc3VibWl0LgorICoKKyAqIEByZXR1cm4gQGMg
RUlOQV9UUlVFIGlzIGlmIHN1Y2Nlc3NmdWwsIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgorICov
CitFQVBJIEVpbmFfQm9vbCBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rfc3VibWl0KEV3a19G
b3JtX1N1Ym1pc3Npb25fUmVxdWVzdCAqcmVxdWVzdCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cwor
fQorI2VuZGlmCisKKyNlbmRpZiAvLyBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2Zvcm1fc3VibWlz
c2lvbl9yZXF1ZXN0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZs
L2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uZmViM2Q2MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9wcml2YXRl
LmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jw
b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBld2tfZm9y
bV9zdWJtaXNzaW9uX3JlcXVlc3RfcHJpdmF0ZV9oCisjZGVmaW5lIGV3a19mb3JtX3N1Ym1pc3Np
b25fcmVxdWVzdF9wcml2YXRlX2gKKwordHlwZWRlZiBzdHJ1Y3QgX0V3a19Gb3JtX1N1Ym1pc3Np
b25fUmVxdWVzdCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Q7CisKK0V3a19Gb3JtX1N1Ym1p
c3Npb25fUmVxdWVzdCogZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25ldyhXS0RpY3Rpb25h
cnlSZWYgdmFsdWVzLCBXS0Zvcm1TdWJtaXNzaW9uTGlzdGVuZXJSZWYpOworCisjZW5kaWYgLy8g
ZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuY3BwCmluZGV4IDg0NDhmZDYuLjdhMTM5ZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfdmlldy5jcHAKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJld2tfY29udGV4dC5oIgogI2luY2x1ZGUgImV3a19jb250
ZXh0X3ByaXZhdGUuaCIKICNpbmNsdWRlICJld2tfaW50ZW50X3ByaXZhdGUuaCIKKyNpbmNsdWRl
ICJld2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfbG9h
ZGVyX2NsaWVudF9wcml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcG9saWN5X2NsaWVudF9w
cml2YXRlLmgiCiAjaW5jbHVkZSAiZXdrX3ZpZXdfcHJpdmF0ZS5oIgpAQCAtNTM0LDYgKzUzNSw3
IEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19iYXNlX2FkZChFdmFzKiBjYW52YXMsIFdLQ29udGV4
dFJlZiBjb250ZXh0UmVmLCBXS1BhZ2VHcm91CiAgICAgfQogCiAgICAgcHJpdi0+cGFnZUNsaWVu
dCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUodG9JbXBsKGNvbnRleHRSZWYpLCB0b0ltcGwocGFn
ZUdyb3VwUmVmKSwgZXdrVmlldyk7CisgICAgZXdrX3ZpZXdfZm9ybV9jbGllbnRfYXR0YWNoKHRv
QVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2UoKSksIGV3a1ZpZXcpOwogICAgIGV3a192aWV3X2xv
YWRlcl9jbGllbnRfYXR0YWNoKHRvQVBJKHByaXYtPnBhZ2VDbGllbnQtPnBhZ2UoKSksIGV3a1Zp
ZXcpOwogICAgIGV3a192aWV3X3BvbGljeV9jbGllbnRfYXR0YWNoKHRvQVBJKHByaXYtPnBhZ2VD
bGllbnQtPnBhZ2UoKSksIGV3a1ZpZXcpOwogICAgIGV3a192aWV3X3Jlc291cmNlX2xvYWRfY2xp
ZW50X2F0dGFjaCh0b0FQSShwcml2LT5wYWdlQ2xpZW50LT5wYWdlKCkpLCBld2tWaWV3KTsKQEAg
LTk0MSw2ICs5NDMsMTcgQEAgdm9pZCBld2tfdmlld19pbWFnZV9kYXRhX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgdm9pZCogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXoKIAogLyoqCiAgKiBAaW50
ZXJuYWwKKyAqIFJlcG9ydHMgdGhhdCBhIGZvcm0gcmVxdWVzdCBpcyBhYm91dCB0byBiZSBzdWJt
aXR0ZWQuCisgKgorICogRW1pdHMgc2lnbmFsOiAiZm9ybSxzdWJtaXNzaW9uLHJlcXVlc3QiIHdp
dGggcG9pbnRlciB0byBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QuCisgKi8KK3ZvaWQgZXdr
X3ZpZXdfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqIHJlcXVlc3QpCit7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZm9ybSxzdWJtaXNzaW9uLHJlcXVlc3QiLCBy
ZXF1ZXN0KTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgbG9hZCBmYWlsZWQg
d2l0aCBlcnJvciBpbmZvcm1hdGlvbi4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGVycm9y
IiB3aXRoIHBvaW50ZXIgdG8gRXdrX1dlYl9FcnJvci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC9ld2tfdmlldy5oCmluZGV4IDVkNjlkZjQuLmM0MTA0YmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXcuaApAQCAtMjYsNiArMjYsMTUgQEAK
ICAqCiAgKiBUaGUgZm9sbG93aW5nIHNpZ25hbHMgKHNlZSBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19hZGQoKSkgYXJlIGVtaXR0ZWQ6CiAgKgorICogLSAiZm9ybSxzdWJtaXNzaW9uLHJlcXVl
c3QiLCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqOiBSZXBvcnRzIHRoYXQgYSBmb3JtIHJl
cXVlc3QgaXMgYWJvdXQgdG8gYmUgc3VibWl0dGVkLgorICogICBUaGUgRXdrX0Zvcm1fU3VibWlz
c2lvbl9SZXF1ZXN0IHBhc3NlZCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGV4dCBm
aWVsZHMgb2YgdGhlIGZvcm0uIFRoaXMKKyAqICAgaXMgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUg
bG9naW4gaW5mb3JtYXRpb24gdGhhdCBjYW4gYmUgdXNlZCBsYXRlciB0byBwcmUtZmlsbCB0aGUg
Zm9ybS4KKyAqICAgVGhlIGZvcm0gd2lsbCBub3QgYmUgc3VibWl0dGVkIHVudGlsIGV3a19mb3Jt
X3N1Ym1pc3Npb25fcmVxdWVzdF9zdWJtaXQoKSBpcyBjYWxsZWQuCisgKiAgIEl0IGlzIHBvc3Np
YmxlIHRvIGhhbmRsZSB0aGUgZm9ybSBzdWJtaXNzaW9uIHJlcXVlc3QgYXN5bmNocm9ub3VzbHks
IGJ5IHNpbXBseSBjYWxsaW5nCisgKiAgIGV3a19mb3JtX3N1Ym1pc3Npb25fcmVxdWVzdF9yZWYo
KSBvbiB0aGUgcmVxdWVzdCBhbmQgY2FsbGluZyBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3Rf
c3VibWl0KCkKKyAqICAgd2hlbiBkb25lIHRvIGNvbnRpbnVlIHdpdGggdGhlIGZvcm0gc3VibWlz
c2lvbi4gSWYgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQgb24gYQorICogICAjRXdrX0Zv
cm1fU3VibWlzc2lvbl9SZXF1ZXN0IGFuZCB0aGUgZm9ybSBoYXMgbm90IGJlZW4gc3VibWl0dGVk
IHlldCwKKyAqICAgZXdrX2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X3N1Ym1pdCgpIHdpbGwgYmUg
Y2FsbGVkIGF1dG9tYXRpY2FsbHkuCiAgKiAtICJpbnRlbnQscmVxdWVzdCxuZXciLCBFd2tfSW50
ZW50X1JlcXVlc3QqOiByZXBvcnRzIG5ldyBXZWIgaW50ZW50IHJlcXVlc3QuCiAgKiAtICJpbnRl
bnQsc2VydmljZSxyZWdpc3RlciIsIEV3a19JbnRlbnRfU2VydmljZSo6IHJlcG9ydHMgbmV3IFdl
YiBpbnRlbnQgc2VydmljZSByZWdpc3RyYXRpb24uCiAgKiAtICJsb2FkLGVycm9yIiwgY29uc3Qg
RXdrX1dlYl9FcnJvcio6IHJlcG9ydHMgbWFpbiBmcmFtZSBsb2FkIGZhaWxlZC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2Zvcm1fY2xpZW50
LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192aWV3X2Zvcm1fY2xp
ZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjRhYzVlCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdf
Zm9ybV9jbGllbnQuY3BwCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldLUGFnZS5oIgorI2luY2x1ZGUgImV3a19m
b3JtX3N1Ym1pc3Npb25fcmVxdWVzdC5oIgorI2luY2x1ZGUgImV3a19mb3JtX3N1Ym1pc3Npb25f
cmVxdWVzdF9wcml2YXRlLmgiCisjaW5jbHVkZSAiZXdrX3ZpZXdfZm9ybV9jbGllbnRfcHJpdmF0
ZS5oIgorI2luY2x1ZGUgImV3a192aWV3X3ByaXZhdGUuaCIKKworc3RhdGljIHZvaWQgd2lsbFN1
Ym1pdEZvcm0oV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUsIFdLRnJhbWVSZWYgc291
cmNlRnJhbWUsIFdLRGljdGlvbmFyeVJlZiB2YWx1ZXMsIFdLVHlwZVJlZiB1c2VyRGF0YSwgV0tG
b3JtU3VibWlzc2lvbkxpc3RlbmVyUmVmIGxpc3RlbmVyLCBjb25zdCB2b2lkKiBjbGllbnRJbmZv
KQoreworICAgIEV2YXNfT2JqZWN0KiBld2tWaWV3ID0gc3RhdGljX2Nhc3Q8RXZhc19PYmplY3Qq
Pihjb25zdF9jYXN0PHZvaWQqPihjbGllbnRJbmZvKSk7CisKKyAgICBFd2tfRm9ybV9TdWJtaXNz
aW9uX1JlcXVlc3QqIHJlcXVlc3QgPSBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbmV3KHZh
bHVlcywgbGlzdGVuZXIpOworICAgIGV3a192aWV3X2Zvcm1fc3VibWlzc2lvbl9yZXF1ZXN0X25l
dyhld2tWaWV3LCByZXF1ZXN0KTsKKyAgICBld2tfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfdW5y
ZWYocmVxdWVzdCk7Cit9CisKK3ZvaWQgZXdrX3ZpZXdfZm9ybV9jbGllbnRfYXR0YWNoKFdLUGFn
ZVJlZiBwYWdlUmVmLCBFdmFzX09iamVjdCogZXdrVmlldykKK3sKKyAgICBXS1BhZ2VGb3JtQ2xp
ZW50IGZvcm1DbGllbnQ7CisgICAgbWVtc2V0KCZmb3JtQ2xpZW50LCAwLCBzaXplb2YoV0tQYWdl
Rm9ybUNsaWVudCkpOworICAgIGZvcm1DbGllbnQudmVyc2lvbiA9IGtXS1BhZ2VGb3JtQ2xpZW50
Q3VycmVudFZlcnNpb247CisgICAgZm9ybUNsaWVudC5jbGllbnRJbmZvID0gZXdrVmlldzsKKyAg
ICBmb3JtQ2xpZW50LndpbGxTdWJtaXRGb3JtID0gd2lsbFN1Ym1pdEZvcm07CisgICAgV0tQYWdl
U2V0UGFnZUZvcm1DbGllbnQocGFnZVJlZiwgJmZvcm1DbGllbnQpOworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfZm9ybV9jbGllbnRfcHJp
dmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfZm9ybV9j
bGllbnRfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmZWI0
YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBld2tfdmlld19mb3JtX2NsaWVudF9wcml2YXRlX2gKKyNkZWZp
bmUgZXdrX3ZpZXdfZm9ybV9jbGllbnRfcHJpdmF0ZV9oCisKKyNpbmNsdWRlIDxFdmFzLmg+Cisj
aW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKwordm9pZCBld2tfdmlld19mb3JtX2NsaWVudF9h
dHRhY2goV0tQYWdlUmVmIHBhZ2VSZWYsIEV2YXNfT2JqZWN0KiBld2tWaWV3KTsKKworI2VuZGlm
IC8vIGV3a192aWV3X2Zvcm1fY2xpZW50X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX3ZpZXdfcHJpdmF0ZS5oCmluZGV4IGEwYTY3OTAuLjQz
MTI3Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a192
aWV3X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
dmlld19wcml2YXRlLmgKQEAgLTMxLDYgKzMxLDcgQEAgY2xhc3MgSW50UmVjdDsKIGNsYXNzIElu
dFNpemU7CiB9CiAKK3R5cGVkZWYgc3RydWN0IF9Fd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3Qg
RXdrX0Zvcm1fU3VibWlzc2lvbl9SZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19VcmxfUmVx
dWVzdCBFd2tfVXJsX1JlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX1VybF9SZXNwb25zZSBF
d2tfVXJsX1Jlc3BvbnNlOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19XZWJfRXJyb3IgRXdrX1dlYl9F
cnJvcjsKQEAgLTQ1LDYgKzQ2LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgX0V3a19JbnRlbnRfU2Vydmlj
ZSBFd2tfSW50ZW50X1NlcnZpY2U7CiAKIHZvaWQgZXdrX3ZpZXdfY3Vyc29yX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgV2ViQ29yZTo6Q3Vyc29yJiBjdXJzb3IpOwogdm9pZCBld2tf
dmlld19kaXNwbGF5KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KTsKK3ZvaWQgZXdrX3ZpZXdfZm9ybV9zdWJtaXNzaW9uX3JlcXVlc3RfbmV3KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFd2tfRm9ybV9TdWJtaXNzaW9uX1JlcXVlc3QqKTsKIHZvaWQgZXdr
X3ZpZXdfaW1hZ2VfZGF0YV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIGltYWdlRGF0
YSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSk7CiB2b2lkIGV3a192aWV3X2xvYWRfZXJy
b3IoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19XZWJfRXJyb3IqIGVycm9yKTsKIHZv
aWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrVmlldyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>