<?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>205716</bug_id>
          
          <creation_ts>2020-01-03 05:07:35 -0800</creation_ts>
          <short_desc>[GTK][WPE] Add API to retrieve and delete surrounding text for input methods</short_desc>
          <delta_ts>2020-01-07 03:00:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>205605</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1602387</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-03 05:07:35 -0800</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602391</commentid>
    <comment_count>1</comment_count>
      <attachid>386674</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-03 05:19:21 -0800</bug_when>
    <thetext>Created attachment 386674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603502</commentid>
    <comment_count>2</comment_count>
      <attachid>386674</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2020-01-07 02:37:43 -0800</bug_when>
    <thetext>Comment on attachment 386674
Patch

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

&gt; Source/WebKit/UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:32
&gt; +    unsigned surroundingCursorIndex;

Maybe explicitly initialize this to 0.

&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8213
&gt; +void WebPageProxy::deleteSurrounding(int offset, unsigned characterCount)

Should this be an int64_t, to match the WebPage::deleteSurrounding()?

&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:45
&gt; +    unsigned surroundingCursorIndex;

Maybe initialize this too, if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603506</commentid>
    <comment_count>3</comment_count>
      <attachid>386674</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-07 02:43:01 -0800</bug_when>
    <thetext>Comment on attachment 386674
Patch

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

&gt;&gt; Source/WebKit/UIProcess/API/gtk/WebKitInputMethodContextImplGtk.cpp:32
&gt;&gt; +    unsigned surroundingCursorIndex;
&gt; 
&gt; Maybe explicitly initialize this to 0.

We don&apos;t do explicit initializations in GObject private structs because they are always zero-filled on allocation by GLib.

&gt;&gt; Source/WebKit/UIProcess/WebPageProxy.cpp:8213
&gt;&gt; +void WebPageProxy::deleteSurrounding(int offset, unsigned characterCount)
&gt; 
&gt; Should this be an int64_t, to match the WebPage::deleteSurrounding()?

Yes, I forgot to change this one

&gt;&gt; Tools/TestWebKitAPI/Tests/WebKitGLib/TestInputMethodContext.cpp:45
&gt;&gt; +    unsigned surroundingCursorIndex;
&gt; 
&gt; Maybe initialize this too, if needed.

It&apos;s not needed, it&apos;s already zero-filled on allocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1603512</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-01-07 03:00:05 -0800</bug_when>
    <thetext>Committed r254122: &lt;https://trac.webkit.org/changeset/254122&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>386674</attachid>
            <date>2020-01-03 05:19:21 -0800</date>
            <delta_ts>2020-01-07 02:37:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-ime-surrounding.diff</filename>
            <type>text/plain</type>
            <size>49761</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMTg5YTRjOTRjNTkuLmI4NDY2MjZiYzM5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDU2IEBACisyMDIwLTAxLTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXVtXUEVdIEFkZCBBUEkgdG8gcmV0cmlldmUgYW5kIGRlbGV0
ZSBzdXJyb3VuZGluZyB0ZXh0IGZvciBpbnB1dCBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU3MTYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHRlbmQgV2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0IHRvIGJlIGFibGUgdG8gcmV0cmlldmUgYW5kIGRlbGV0ZSBzdXJyb3VuZGluZyB0ZXh0Lgor
CisgICAgICAgICogU2hhcmVkL0VkaXRvclN0YXRlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RWRp
dG9yU3RhdGU6OlBvc3RMYXlvdXREYXRhOjplbmNvZGUgY29uc3QpOiBFbmNvZGUgcGFyYWdyYXBo
Q29udGV4dCBhbmQgcGFyYWdyYXBoQ29udGV4dEN1cnNvclBvc2l0aW9uLgorICAgICAgICAoV2Vi
S2l0OjpFZGl0b3JTdGF0ZTo6UG9zdExheW91dERhdGE6OmRlY29kZSk6IERlY29kZSBwYXJhZ3Jh
cGhDb250ZXh0IGFuZCBwYXJhZ3JhcGhDb250ZXh0Q3Vyc29yUG9zaXRpb24uCisgICAgICAgICog
U2hhcmVkL0VkaXRvclN0YXRlLmg6IEFkZCBwYXJhZ3JhcGhDb250ZXh0IGFuZCBwYXJhZ3JhcGhD
b250ZXh0Q3Vyc29yUG9zaXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGliL0lucHV0
TWV0aG9kRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5wdXRNZXRob2RGaWx0ZXI6OmRl
bGV0ZVN1cnJvdW5kaW5nQ2FsbGJhY2spOiBDYWxsYmFjayB0byBoYW5kbGUKKyAgICAgICAgV2Vi
S2l0SW5wdXRNZXRob2RDb250ZXh0OjpkZWxldGUtc3Vycm91bmRpbmcgc2lnbmFsLgorICAgICAg
ICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6c2V0Q29udGV4dCk6IENvbm5lY3QgdG8gV2Vi
S2l0SW5wdXRNZXRob2RDb250ZXh0OjpkZWxldGUtc3Vycm91bmRpbmcgc2lnbmFsLgorICAgICAg
ICAoV2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6bm90aWZ5U3Vycm91bmRpbmcpOiBTYXZlIHRo
ZSBuZXcgc3Vycm91bmRpbmcgdGV4dCBhbmQgcG9zaXRpb24gYW5kIGNhbGwKKyAgICAgICAgd2Vi
a2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25vdGlmeV9zdXJyb3VuZGluZygpLgorICAgICAgICAo
V2ViS2l0OjpJbnB1dE1ldGhvZEZpbHRlcjo6ZGVsZXRlU3Vycm91bmRpbmcpOiBBc2sgV2ViS2l0
V2ViVmlldyB0byBkZWxldGUgdGhlIHN1cnJvdW5kaW5nIHRleHQuCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmlsdGVyLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9nbGliL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5jcHA6CisgICAgICAgICh3ZWJraXRfaW5w
dXRfbWV0aG9kX2NvbnRleHRfY2xhc3NfaW5pdCk6IEFkZCBkZWxldGUtc3Vycm91bmRpbmcgc2ln
bmFsLgorICAgICAgICAod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25vdGlmeV9zdXJyb3Vu
ZGluZyk6IENhbGwgdGhlIHZpcnR1YWwgbWV0aG9kIG5vdGlmeV9zdXJyb3VuZGluZyBpZiBpbXBs
ZW1lbnRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmlldy5jcHA6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3RGVsZXRlU3Vycm91bmRpbmcpOiBDYWxsIFdlYlBhZ2VQ
cm94eTo6ZGVsZXRlU3Vycm91bmRpbmcoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2ViVmlld1ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrLmNwcDoKKyAgICAgICAgKGNvbnRleHRSZXRyaWV2
ZVN1cnJvdW5kaW5nKTogQ2FsbCBndGtfaW1fY29udGV4dF9zZXRfc3Vycm91bmRpbmcoKSB3aXRo
IHRoZSBjdXJyZW50IHN1cnJvdW5kaW5nIHRleHQgYW5kIHBvc2l0aW9uLgorICAgICAgICAod2Vi
a2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a0NvbnN0cnVjdGVkKTogQ29ubmVjdCB0byBHdGtJ
TUNvbnRleHQ6OnJldHJpZXZlLXN1cnJvdW5kaW5nIHNpZ25hbC4KKyAgICAgICAgKHdlYmtpdElu
cHV0TWV0aG9kQ29udGV4dEltcGxHdGtOb3RpZnlTdXJyb3VuZGluZyk6IFNhdmUgdGhlIG5ldyBz
dXJyb3VuZGluZyB0ZXh0IGFuZCBwb3NpdGlvbi4KKyAgICAgICAgKHdlYmtpdF9pbnB1dF9tZXRo
b2RfY29udGV4dF9pbXBsX2d0a19jbGFzc19pbml0KTogQWRkIGltcGxlbWVudGF0aW9uIGZvciBu
b3RpZnlfc3Vycm91bmRpbmcgdmZ1bmMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0V2ViVmlld0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VVcGRhdGVUZXh0
SW5wdXRTdGF0ZSk6IEFsc28gbm90aWZ5IHRoZSBjb250ZXh0IGFib3V0IHN1cnJvdW5kaW5nIHRl
eHQgYW5kIHBvc2l0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0
Mmd0ay00LjAtc2VjdGlvbnMudHh0OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dQRVZp
ZXcuY3BwOgorICAgICAgICAoV0tXUEU6OlZpZXc6OnNlbGVjdGlvbkRpZENoYW5nZSk6IERpdHRv
LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5o
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvd3BlL2RvY3Mvd3BlLTEuMC1zZWN0aW9ucy50eHQ6
CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYlBhZ2VQcm94eTo6ZGVsZXRlU3Vycm91bmRpbmcpOiBTZW5kIERlbGV0ZVN1cnJvdW5kaW5n
IG1lc3NhZ2UgdG8gd2ViIHByb2Nlc3MuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcpOiBEZWxldGUgdGhlIGdpdmVuIHJh
bmdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46IEFkZCBEZWxldGVTdXJyb3Vu
ZGluZyBtZXNzYWdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VH
TGliLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGxhdGZvcm1FZGl0b3JTdGF0ZSBj
b25zdCk6IE1vdmVkIGZyb20gR1RLIGFuZCBXUEUgaGVyZSBhbmQgYWxzbyBhZGRlZCBwYXJhZ3Jh
cGhDb250ZXh0IGFuZAorICAgICAgICBwYXJhZ3JhcGhDb250ZXh0Q3Vyc29yUG9zaXRpb24gaW5p
dGlhbGl6YXRpb24uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2d0ay9XZWJQYWdlR3Rr
LmNwcDogUmVtb3ZlIHBsYXRmb3JtRWRpdG9yU3RhdGUoKS4KKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2Uvd3BlL1dlYlBhZ2VXUEUuY3BwOiBEaXR0by4KKwogMjAxOS0xMi0yNyAgQ2FybG9z
IEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV1BF
XSBBZGQgQVBJIHRvIHNldCBwdXJwb3NlIGFuZCBoaW50cyBvZiBhY3RpdmUgZWRpdGFibGUgZWxl
bWVudCB0byBpbnB1dCBtZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9F
ZGl0b3JTdGF0ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9FZGl0b3JTdGF0ZS5jcHAKaW5k
ZXggZjI0NzAwYjAwODkuLjM1ZDlmY2VjOTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9FZGl0b3JTdGF0ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TaGFyZWQvRWRpdG9yU3Rh
dGUuY3BwCkBAIC0xNDEsNiArMTQxLDEwIEBAIHZvaWQgRWRpdG9yU3RhdGU6OlBvc3RMYXlvdXRE
YXRhOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwg
Y2FuZGlkYXRlUmVxdWVzdFN0YXJ0UG9zaXRpb247CiAgICAgZW5jb2RlciA8PCBwYXJhZ3JhcGhD
b250ZXh0Rm9yQ2FuZGlkYXRlUmVxdWVzdDsKICAgICBlbmNvZGVyIDw8IHN0cmluZ0ZvckNhbmRp
ZGF0ZVJlcXVlc3Q7CisjZW5kaWYKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQRSkK
KyAgICBlbmNvZGVyIDw8IHBhcmFncmFwaENvbnRleHQ7CisgICAgZW5jb2RlciA8PCBwYXJhZ3Jh
cGhDb250ZXh0Q3Vyc29yUG9zaXRpb247CiAjZW5kaWYKICAgICBlbmNvZGVyIDw8IGZvbnRBdHRy
aWJ1dGVzOwogICAgIGVuY29kZXIgPDwgY2FuQ3V0OwpAQCAtMjE0LDYgKzIxOCwxMiBAQCBib29s
IEVkaXRvclN0YXRlOjpQb3N0TGF5b3V0RGF0YTo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
ciwgUG9zdExheW91dERhdGEmCiAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShyZXN1bHQuc3RyaW5n
Rm9yQ2FuZGlkYXRlUmVxdWVzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgorI2lm
IFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQorICAgIGlmICghZGVjb2Rlci5kZWNvZGUo
cmVzdWx0LnBhcmFncmFwaENvbnRleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShyZXN1bHQucGFyYWdyYXBoQ29udGV4dEN1cnNvclBvc2l0aW9uKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiAKICAgICBPcHRpb25hbDxPcHRpb25hbDxG
b250QXR0cmlidXRlcz4+IG9wdGlvbmFsRm9udEF0dHJpYnV0ZXM7CiAgICAgZGVjb2RlciA+PiBv
cHRpb25hbEZvbnRBdHRyaWJ1dGVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
RWRpdG9yU3RhdGUuaCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgKaW5kZXgg
NjA4OTEyNjlhMTQuLmQ5NjM0MWU5NmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJl
ZC9FZGl0b3JTdGF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0VkaXRvclN0YXRlLmgK
QEAgLTEyMCw2ICsxMjAsMTAgQEAgc3RydWN0IEVkaXRvclN0YXRlIHsKICAgICAgICAgU3RyaW5n
IHBhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0OwogICAgICAgICBTdHJpbmcgc3Ry
aW5nRm9yQ2FuZGlkYXRlUmVxdWVzdDsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykgfHwgUExB
VEZPUk0oV1BFKQorICAgICAgICBTdHJpbmcgcGFyYWdyYXBoQ29udGV4dDsKKyAgICAgICAgdWlu
dDY0X3QgcGFyYWdyYXBoQ29udGV4dEN1cnNvclBvc2l0aW9uIHsgMCB9OworI2VuZGlmCiAKICAg
ICAgICAgT3B0aW9uYWw8V2ViQ29yZTo6Rm9udEF0dHJpYnV0ZXM+IGZvbnRBdHRyaWJ1dGVzOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1ldGhv
ZEZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1ldGhv
ZEZpbHRlci5jcHAKaW5kZXggNTlmNDEzYTIwMzQuLjJmMjViOTk2M2ZhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JbnB1dE1ldGhvZEZpbHRlci5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSW5wdXRNZXRob2RGaWx0ZXIuY3Bw
CkBAIC01NCw2ICs1NCwxMSBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpjb21taXR0ZWRDYWxs
YmFjayhJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyLCBjb25zdCBjaGFyKgogICAgIGZpbHRlci0+
Y29tbWl0dGVkKGNvbXBvc2l0aW9uU3RyaW5nKTsKIH0KIAordm9pZCBJbnB1dE1ldGhvZEZpbHRl
cjo6ZGVsZXRlU3Vycm91bmRpbmdDYWxsYmFjayhJbnB1dE1ldGhvZEZpbHRlciogZmlsdGVyLCBp
bnQgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0ZXJDb3VudCkKK3sKKyAgICBmaWx0ZXItPmRlbGV0
ZVN1cnJvdW5kaW5nKG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOworfQorCiB2b2lkIElucHV0TWV0
aG9kRmlsdGVyOjpzZXRDb250ZXh0KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCkK
IHsKICAgICBpZiAobV9jb250ZXh0KSB7CkBAIC03MCw2ICs3NSw3IEBAIHZvaWQgSW5wdXRNZXRo
b2RGaWx0ZXI6OnNldENvbnRleHQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0KQog
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NvbnRleHQuZ2V0KCksICJwcmVlZGl0LWNo
YW5nZWQiLCBHX0NBTExCQUNLKHByZWVkaXRDaGFuZ2VkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAicHJlZWRpdC1maW5pc2hl
ZCIsIEdfQ0FMTEJBQ0socHJlZWRpdEZpbmlzaGVkQ2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9jb250ZXh0LmdldCgpLCAiY29tbWl0dGVkIiwgR19DQUxM
QkFDSyhjb21taXR0ZWRDYWxsYmFjayksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX2NvbnRleHQuZ2V0KCksICJkZWxldGUtc3Vycm91bmRpbmciLCBHX0NBTExCQUNLKGRl
bGV0ZVN1cnJvdW5kaW5nQ2FsbGJhY2spLCB0aGlzKTsKIAogICAgIGlmIChpc0VuYWJsZWQoKSAm
JiBpc1ZpZXdGb2N1c2VkKCkpCiAgICAgICAgIG5vdGlmeUZvY3VzZWRJbigpOwpAQCAtMjA0LDYg
KzIxMCwyMiBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpub3RpZnlDdXJzb3JSZWN0KGNvbnN0
IEludFJlY3QmIGN1cnNvclJlY3QpCiAgICAgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25v
dGlmeV9jdXJzb3JfYXJlYShtX2NvbnRleHQuZ2V0KCksIHRyYW5zbGF0ZWRSZWN0LngoKSwgdHJh
bnNsYXRlZFJlY3QueSgpLCB0cmFuc2xhdGVkUmVjdC53aWR0aCgpLCB0cmFuc2xhdGVkUmVjdC5o
ZWlnaHQoKSk7CiB9CiAKK3ZvaWQgSW5wdXRNZXRob2RGaWx0ZXI6Om5vdGlmeVN1cnJvdW5kaW5n
KGNvbnN0IFN0cmluZyYgdGV4dCwgdWludDY0X3QgY3Vyc29yUG9zaXRpb24pCit7CisgICAgaWYg
KCFpc0VuYWJsZWQoKSB8fCAhbV9jb250ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
bV9zdXJyb3VuZGluZy50ZXh0ID09IHRleHQgJiYgbV9zdXJyb3VuZGluZy5jdXJzb3JQb3NpdGlv
biA9PSBjdXJzb3JQb3NpdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9zdXJyb3VuZGlu
Zy50ZXh0ID0gdGV4dDsKKyAgICBtX3N1cnJvdW5kaW5nLmN1cnNvclBvc2l0aW9uID0gY3Vyc29y
UG9zaXRpb247CisKKyAgICBhdXRvIHRleHRVVEY4ID0gbV9zdXJyb3VuZGluZy50ZXh0LnV0Zjgo
KTsKKyAgICBhdXRvIGN1cnNvclBvc2l0aW9uVVRGOCA9IGN1cnNvclBvc2l0aW9uICE9IHRleHQu
bGVuZ3RoKCkgPyB0ZXh0LnN1YnN0cmluZygwLCBjdXJzb3JQb3NpdGlvbikudXRmOCgpLmxlbmd0
aCgpIDogdGV4dFVURjgubGVuZ3RoKCk7CisgICAgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0
X25vdGlmeV9zdXJyb3VuZGluZyhtX2NvbnRleHQuZ2V0KCksIHRleHRVVEY4LmRhdGEoKSwgdGV4
dFVURjgubGVuZ3RoKCksIGN1cnNvclBvc2l0aW9uVVRGOCk7Cit9CisKIHZvaWQgSW5wdXRNZXRo
b2RGaWx0ZXI6OnByZWVkaXRTdGFydGVkKCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpKQpAQCAt
Mjg3LDYgKzMwOSwxNiBAQCB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpjb21taXR0ZWQoY29uc3Qg
Y2hhciogY29tcG9zaXRpb25TdHJpbmcpCiAgICAgbV9jb21wb3NpdGlvblJlc3VsdCA9IHsgfTsK
IH0KIAordm9pZCBJbnB1dE1ldGhvZEZpbHRlcjo6ZGVsZXRlU3Vycm91bmRpbmcoaW50IG9mZnNl
dCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQpCit7CisgICAgaWYgKCFpc0VuYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgYXV0byogd2ViVmlldyA9IHdlYmtpdElucHV0TWV0aG9kQ29u
dGV4dEdldFdlYlZpZXcobV9jb250ZXh0LmdldCgpKTsKKyAgICBBU1NFUlQod2ViVmlldyk7Cisg
ICAgd2Via2l0V2ViVmlld0RlbGV0ZVN1cnJvdW5kaW5nKHdlYlZpZXcsIG9mZnNldCwgY2hhcmFj
dGVyQ291bnQpOworfQorCiB2b2lkIElucHV0TWV0aG9kRmlsdGVyOjpjYW5jZWxDb21wb3NpdGlv
bigpCiB7CiAgICAgaWYgKG1fcHJlZWRpdC50ZXh0LmlzTnVsbCgpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSW5wdXRNZXRob2RGaWx0ZXIuaCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmlsdGVyLmgKaW5kZXggMTIz
MTAzOGE2ZTAuLjA1NjVjMjRkNjNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvZ2xpYi9JbnB1dE1ldGhvZEZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL0lucHV0TWV0aG9kRmlsdGVyLmgKQEAgLTY3LDYgKzY3LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgbm90aWZ5Rm9jdXNlZE91dCgpOwogICAgIHZvaWQgbm90aWZ5TW91c2VCdXR0
b25QcmVzcygpOwogICAgIHZvaWQgbm90aWZ5Q3Vyc29yUmVjdChjb25zdCBXZWJDb3JlOjpJbnRS
ZWN0Jik7CisgICAgdm9pZCBub3RpZnlTdXJyb3VuZGluZyhjb25zdCBTdHJpbmcmLCB1aW50NjRf
dCk7CiAKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKCk7CiAKQEAgLTc1LDExICs3NiwxMyBA
QCBwcml2YXRlOgogICAgIHN0YXRpYyB2b2lkIHByZWVkaXRDaGFuZ2VkQ2FsbGJhY2soSW5wdXRN
ZXRob2RGaWx0ZXIqKTsKICAgICBzdGF0aWMgdm9pZCBwcmVlZGl0RmluaXNoZWRDYWxsYmFjayhJ
bnB1dE1ldGhvZEZpbHRlciopOwogICAgIHN0YXRpYyB2b2lkIGNvbW1pdHRlZENhbGxiYWNrKElu
cHV0TWV0aG9kRmlsdGVyKiwgY29uc3QgY2hhciopOworICAgIHN0YXRpYyB2b2lkIGRlbGV0ZVN1
cnJvdW5kaW5nQ2FsbGJhY2soSW5wdXRNZXRob2RGaWx0ZXIqLCBpbnQgb2Zmc2V0LCB1bnNpZ25l
ZCBjaGFyYWN0ZXJDb3VudCk7CiAKICAgICB2b2lkIHByZWVkaXRTdGFydGVkKCk7CiAgICAgdm9p
ZCBwcmVlZGl0Q2hhbmdlZCgpOwogICAgIHZvaWQgcHJlZWRpdEZpbmlzaGVkKCk7CiAgICAgdm9p
ZCBjb21taXR0ZWQoY29uc3QgY2hhciopOworICAgIHZvaWQgZGVsZXRlU3Vycm91bmRpbmcoaW50
IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQpOwogCiAgICAgYm9vbCBpc0VuYWJsZWQo
KSBjb25zdCB7IHJldHVybiAhIW1fc3RhdGU7IH0KICAgICBib29sIGlzVmlld0ZvY3VzZWQoKSBj
b25zdDsKQEAgLTEwMyw2ICsxMDYsMTEgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2NvbXBv
c2l0aW9uUmVzdWx0OwogICAgIFdlYkNvcmU6OkludFBvaW50IG1fY3Vyc29yTG9jYXRpb247CisK
KyAgICBzdHJ1Y3QgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgdWludDY0X3QgY3Vy
c29yUG9zaXRpb247CisgICAgfSBtX3N1cnJvdW5kaW5nOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJL
aXRJbnB1dE1ldGhvZENvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2ds
aWIvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LmNwcAppbmRleCAxN2NjM2M5NDY2Yy4uOTNkNzc1
N2ViMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktp
dElucHV0TWV0aG9kQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L2dsaWIvV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LmNwcApAQCAtNjAsNiArNjAsOCBAQCBlbnVt
IHsKIAogICAgIENPTU1JVFRFRCwKIAorICAgIERFTEVURV9TVVJST1VORElORywKKwogICAgIExB
U1RfU0lHTkFMCiB9OwogCkBAIC0xNTcsNiArMTU5LDkgQEAgV0VCS0lUX0RFRklORV9BQlNUUkFD
VF9UWVBFKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCwgd2Via2l0X2lucHV0X21ldGhvZF9jb250
ZXgKICAqIEBub3RpZnlfY3Vyc29yX2FyZWE6IENhbGxlZCB2aWEgd2Via2l0X2lucHV0X21ldGhv
ZF9jb250ZXh0X25vdGlmeV9jdXJzb3JfYXJlYSgpCiAgKiAgIHRvIGluZm9ybSB0aGUgaW5wdXQg
bWV0aG9kIG9mIHRoZSBjdXJyZW50IGN1cnNvciBsb2NhdGlvbiByZWxhdGl2ZSB0bwogICogICB0
aGUgY2xpZW50IHdpbmRvdy4KKyAqIEBub3RpZnlfc3Vycm91bmRpbmc6IENhbGxlZCB2aWEgd2Vi
a2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25vdGlmeV9zdXJyb3VuZGluZygpIHRvCisgKiAgIHVw
ZGF0ZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgY3Vyc29yLiBUaGUgcHJvdmlkZWQgdGV4
dCBzaG91bGQgbm90IGluY2x1ZGUKKyAqICAgdGhlIHByZWVkaXQgc3RyaW5nLgogICogQHJlc2V0
OiBDYWxsZWQgdmlhIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9yZXNldCgpIHRvIHNpZ25h
bCBhIGNoYW5nZSB0aGF0CiAgKiAgIHJlcXVpcmVzIGEgcmVzZXQuIEFuIGlucHV0IG1ldGhvZCB0
aGF0IGltcGxlbWVudHMgcHJlZWRpdGluZwogICogICBzaG91bGQgb3ZlcnJpZGUgdGhpcyBtZXRo
b2QgdG8gY2xlYXIgdGhlIHByZWVkaXQgc3RhdGUgb24gcmVzZXQuCkBAIC0yMzksNyArMjQ0LDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2NsYXNzX2luaXQoV2Vi
S2l0SW5wdXRNZXRob2RDb250ZXh0Q2xhc3MKICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFE
V1JJVEUpKTsKIAogICAgIC8qKgotICAgICAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4dDo6cHJl
ZWRpdC1zdGFydGVkCisgICAgICogV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0OjpwcmVlZGl0LXN0
YXJ0ZWQ6CiAgICAgICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IG9u
IHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqCiAgICAgICogRW1pdHRlZCB3aGVu
IGEgbmV3IHByZWVkaXRpbmcgc2VxdWVuY2Ugc3RhcnRzLgpAQCAtMjU2LDcgKzI2MSw3IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9jbGFzc19pbml0KFdlYktpdElu
cHV0TWV0aG9kQ29udGV4dENsYXNzCiAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKIAogICAgIC8q
KgotICAgICAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4dDo6cHJlZWRpdC1jaGFuZ2VkCisgICAg
ICogV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0OjpwcmVlZGl0LWNoYW5nZWQ6CiAgICAgICogQGNv
bnRleHQ6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IG9uIHdoaWNoIHRoZSBzaWduYWwg
aXMgZW1pdHRlZAogICAgICAqCiAgICAgICogRW1pdHRlZCB3aGVuZXZlciB0aGUgcHJlZWRpdCBz
ZXF1ZW5jZSBjdXJyZW50bHkgYmVpbmcgZW50ZXJlZCBoYXMgY2hhbmdlZC4KQEAgLTI3NSw3ICsy
ODAsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfY2xhc3NfaW5p
dChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRDbGFzcwogICAgICAgICBHX1RZUEVfTk9ORSwgMCk7
CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ6OnByZWVkaXQtZmlu
aXNoZWQKKyAgICAgKiBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ6OnByZWVkaXQtZmluaXNoZWQ6
CiAgICAgICogQGNvbnRleHQ6IHRoZSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAogICAgICAqCiAgICAgICogRW1pdHRlZCB3aGVuIGEgcHJl
ZWRpdGluZyBzZXF1ZW5jZSBoYXMgYmVlbiBjb21wbGV0ZWQgb3IgY2FuY2VsZWQuCkBAIC0yOTIs
NyArMjk3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2NsYXNz
X2luaXQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Q2xhc3MKICAgICAgICAgR19UWVBFX05PTkUs
IDApOwogCiAgICAgLyoqCi0gICAgICogV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Ojpjb21taXR0
ZWQKKyAgICAgKiBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQ6OmNvbW1pdHRlZDoKICAgICAgKiBA
Y29udGV4dDogdGhlICNXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgb24gd2hpY2ggdGhlIHNpZ25h
bCBpcyBlbWl0dGVkCiAgICAgICogQHRleHQ6IHRoZSBzdHJpbmcgcmVzdWx0CiAgICAgICoKQEAg
LTMxMSw2ICszMTYsMjggQEAgc3RhdGljIHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0
X2NsYXNzX2luaXQoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Q2xhc3MKICAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX2dlbmVyaWMsCiAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICBH
X1RZUEVfU1RSSU5HKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdElucHV0TWV0aG9kQ29udGV4
dDo6ZGVsZXRlLXN1cnJvdW5kaW5nOgorICAgICAqIEBjb250ZXh0OiB0aGUgI1dlYktpdElucHV0
TWV0aG9kQ29udGV4dCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAgKiBAb2Zm
c2V0OiB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBjdXJzb3IgcG9zaXRpb24gb2YgdGhl
IHRleHQgdG8gYmUgZGVsZXRlZC4KKyAgICAgKiBAbl9jaGFyczogdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIHRvIGJlIGRlbGV0ZWQKKyAgICAgKgorICAgICAqIEVtaXR0ZWQgd2hlbiB0aGUgaW5w
dXQgbWV0aG9kIHdhbnRzIHRvIGRlbGV0ZSB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgY3Vy
c29yLgorICAgICAqIElmIEBvZmZzZXQgaXMgYSBuZWdhdGl2ZSB2YWx1ZSwgaXQgbWVhbnMgYSBw
b3NpdGlvbiBiZWZvcmUgdGhlIGN1cnNvci4KKyAgICAgKgorICAgICAqIFNpbmNlOiAyLjI4Cisg
ICAgICovCisgICAgc2lnbmFsc1tERUxFVEVfU1VSUk9VTkRJTkddID0gZ19zaWduYWxfbmV3KAor
ICAgICAgICAiZGVsZXRlLXN1cnJvdW5kaW5nIiwKKyAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
a2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzLCBkZWxldGVfc3Vycm91bmRpbmcpLAor
ICAgICAgICBudWxscHRyLCBudWxscHRyLAorICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfZ2Vu
ZXJpYywKKyAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgIEdfVFlQRV9JTlQsCisgICAg
ICAgIEdfVFlQRV9VSU5UKTsKIH0KIAogdm9pZCB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRTZXRX
ZWJWaWV3KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCwgV2ViS2l0V2ViVmlldyog
d2ViVmlldykKQEAgLTQyNiw2ICs0NTMsMzMgQEAgdm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2Nv
bnRleHRfbm90aWZ5X2N1cnNvcl9hcmVhKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCogY28KICAg
ICAgICAgaW1DbGFzcy0+bm90aWZ5X2N1cnNvcl9hcmVhKGNvbnRleHQsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCisvKioKKyAqIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlf
c3Vycm91bmRpbmc6CisgKiBAY29udGV4dDogYSAjV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0Cisg
KiBAdGV4dDogdGV4dCBzdXJyb3VuZGluZyB0aGUgaW5zZXJ0aW9uIHBvaW50CisgKiBAbGVuZ3Ro
OiB0aGUgbGVuZ3RoIG9mIEB0ZXh0LCBvciAtMSBpZiBAdGV4dCBpcyBudWwtdGVybWluYXRlZAor
ICogQGN1cnNvcl9pbmRleDogdGhlIGJ5dGUgaW5kZXggb2YgdGhlIGluc2VydGlvbiBjdXJzb3Ig
d2l0aGluIEB0ZXh0LgorICoKKyAqIE5vdGlmeSBAY29udGV4dCB0aGF0IHRoZSBjb250ZXh0IHN1
cnJvdW5kaW5nIHRoZSBjdXJzb3IgaGFzIGNoYW5nZWQuCisgKgorICogU2luY2U6IDIuMjgKKyAq
Lwordm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X3N1cnJvdW5kaW5nKFdl
YktpdElucHV0TWV0aG9kQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogdGV4dCwgaW50IGxl
bmd0aCwgdW5zaWduZWQgY3Vyc29ySW5kZXgpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJL
SVRfSVNfSU5QVVRfTUVUSE9EX0NPTlRFWFQoY29udGV4dCkpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwodGV4dCB8fCAhbGVuZ3RoKTsKKworICAgIGlmICghdGV4dCkKKyAgICAgICAgdGV4dCA9ICIi
OworICAgIGlmIChsZW5ndGggPCAwKQorICAgICAgICBsZW5ndGggPSBzdHJsZW4odGV4dCk7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChjdXJzb3JJbmRleCA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGVuZ3RoKSk7CisKKyAgICBhdXRvKiBpbUNsYXNzID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05U
RVhUX0dFVF9DTEFTUyhjb250ZXh0KTsKKyAgICBpZiAoaW1DbGFzcy0+bm90aWZ5X3N1cnJvdW5k
aW5nKQorICAgICAgICBpbUNsYXNzLT5ub3RpZnlfc3Vycm91bmRpbmcoY29udGV4dCwgdGV4dCwg
bGVuZ3RoLCBjdXJzb3JJbmRleCk7Cit9CisKIC8qKgogICogd2Via2l0X2lucHV0X21ldGhvZF9j
b250ZXh0X3Jlc2V0OgogICogQGNvbnRleHQ6IGEgI1dlYktpdElucHV0TWV0aG9kQ29udGV4dApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvV2ViS2l0V2ViVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3LmNw
cAppbmRleCA2NDZlNDVhZGMyOC4uZjlkYTFiYjU5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXcuY3BwCkBAIC0yNzE1LDYgKzI3MTUs
MTEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3Q2FuY2VsQ29tcG9zaXRpb24oV2ViS2l0V2ViVmlldyog
d2ViVmlldywgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIGdldFBhZ2Uod2ViVmlldykuY2FuY2Vs
Q29tcG9zaXRpb24odGV4dCk7CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld0RlbGV0ZVN1cnJvdW5k
aW5nKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50KQoreworICAgIGdldFBhZ2Uod2ViVmlldykuZGVsZXRlU3Vycm91bmRpbmcob2Zmc2V0
LCBjaGFyYWN0ZXJDb3VudCk7Cit9CisKICNpZiBQTEFURk9STShXUEUpCiAvKioKICAqIHdlYmtp
dF93ZWJfdmlld19nZXRfYmFja2VuZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9nbGliL1dlYktpdFdlYlZpZXdQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCmluZGV4IDgxMWMzNWM0OTYxLi42
N2Y2OTgyMWVhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIv
V2ViS2l0V2ViVmlld1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z2xpYi9XZWJLaXRXZWJWaWV3UHJpdmF0ZS5oCkBAIC0xMTUsMyArMTE1LDQgQEAgdm9pZCB3ZWJr
aXRXZWJWaWV3RGlkTG9zZVBvaW50ZXJMb2NrKFdlYktpdFdlYlZpZXcqKTsKIHZvaWQgd2Via2l0
V2ViVmlld1NldENvbXBvc2l0aW9uKFdlYktpdFdlYlZpZXcqLCBjb25zdCBTdHJpbmcmLCBjb25z
dCBWZWN0b3I8V2ViQ29yZTo6Q29tcG9zaXRpb25VbmRlcmxpbmU+JiwgV2ViS2l0OjpFZGl0aW5n
UmFuZ2UmJik7CiB2b2lkIHdlYmtpdFdlYlZpZXdDb25maXJtQ29tcG9zaXRpb24oV2ViS2l0V2Vi
VmlldyosIGNvbnN0IFN0cmluZyYpOwogdm9pZCB3ZWJraXRXZWJWaWV3Q2FuY2VsQ29tcG9zaXRp
b24oV2ViS2l0V2ViVmlldyosIGNvbnN0IFN0cmluZyYpOwordm9pZCB3ZWJraXRXZWJWaWV3RGVs
ZXRlU3Vycm91bmRpbmcoV2ViS2l0V2ViVmlldyosIGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJh
Y3RlckNvdW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oCmluZGV4IGNmMjExYWZlZTJhLi5jYTNmNjZm
NThjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRJ
bnB1dE1ldGhvZENvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oCkBAIC0xMDgsNiArMTA4LDkgQEAgc3RydWN0IF9X
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHRDbGFzcyB7CiAgICAgdm9pZCAgICAgKCogcHJlZWRpdF9m
aW5pc2hlZCkgICAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICpjb250ZXh0KTsKICAgICB2b2lk
ICAgICAoKiBjb21taXR0ZWQpICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKmNv
bnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAg
ICAgICAgICAgICAgICp0ZXh0KTsKKyAgICB2b2lkICAgICAoKiBkZWxldGVfc3Vycm91bmRpbmcp
IChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAg
ICBuX2NoYXJzKTsKIAogICAgIC8qIFZpcnR1YWwgZnVuY3Rpb25zICovCiAgICAgdm9pZCAgICAg
KCogc2V0X2VuYWJsZV9wcmVlZGl0KSAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICpjb250ZXh0
LApAQCAtMTI1LDYgKzEyOCwxMCBAQCBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29udGV4dENs
YXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAg
ICAgICAgICAgICAgIHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7CisgICAgdm9pZCAg
ICAgKCogbm90aWZ5X3N1cnJvdW5kaW5nKSAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICpjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyICAg
ICAgICAgICAgICAqdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
dWludCAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgIGN1cnNvcl9pbmRleCk7CiAg
ICAgdm9pZCAgICAgKCogcmVzZXQpICAgICAgICAgICAgICAoV2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0ICpjb250ZXh0KTsKIAogICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOwpA
QCAtMTY3LDYgKzE3NCwxMiBAQCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2N1
cnNvcl9hcmVhIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAqY29udAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7CiAKK1dFQktJVF9BUEkg
dm9pZAord2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X25vdGlmeV9zdXJyb3VuZGluZyAoV2Vi
S2l0SW5wdXRNZXRob2RDb250ZXh0ICAgKmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAqdGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAg
ICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29y
X2luZGV4KTsKKwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRf
cmVzZXQgICAgICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAqY29udGV4dCk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0SW1wbEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsuY3BwCmluZGV4IDE5MWY5OGQ3YThl
Li5lNzNhNzY1MzlkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsuY3BwCkBA
IC0yNCw5ICsyNCwxMiBAQAogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8
d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29u
dGV4dEltcGxHdGtQcml2YXRlIHsKICAgICBHUmVmUHRyPEd0a0lNQ29udGV4dD4gY29udGV4dDsK
KyAgICBDU3RyaW5nIHN1cnJvdW5kaW5nVGV4dDsKKyAgICB1bnNpZ25lZCBzdXJyb3VuZGluZ0N1
cnNvckluZGV4OwogfTsKIAogV0VCS0lUX0RFRklORV9UWVBFKFdlYktpdElucHV0TWV0aG9kQ29u
dGV4dEltcGxHdGssIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9pbXBsX2d0aywgV0VCS0lU
X1RZUEVfSU5QVVRfTUVUSE9EX0NPTlRFWFQpCkBAIC0xMDEsNiArMTA0LDEzIEBAIHN0YXRpYyB2
b2lkIGNvbnRleHRDb21taXRDYWxsYmFjayhXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3Rr
KiBjb250ZXh0LCBjb25zCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJjb21t
aXR0ZWQiLCB0ZXh0LCBudWxscHRyKTsKIH0KIAorc3RhdGljIGdib29sZWFuIGNvbnRleHRSZXRy
aWV2ZVN1cnJvdW5kaW5nKFdlYktpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGsqIGNvbnRleHQp
Cit7CisgICAgYXV0byogcHJpdiA9IGNvbnRleHQtPnByaXY7CisgICAgZ3RrX2ltX2NvbnRleHRf
c2V0X3N1cnJvdW5kaW5nKHByaXYtPmNvbnRleHQuZ2V0KCksIHByaXYtPnN1cnJvdW5kaW5nVGV4
dC5kYXRhKCksIHByaXYtPnN1cnJvdW5kaW5nVGV4dC5sZW5ndGgoKSwgcHJpdi0+c3Vycm91bmRp
bmdDdXJzb3JJbmRleCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtp
dElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiB7
CiAgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3Rr
X3BhcmVudF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CkBAIC0xMTQsNiArMTI0LDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a0NvbnN0cnVjdGVkKEdP
YmplY3QqIG9iamVjdCkKICAgICBnX3NpZ25hbF9jb25uZWN0X29iamVjdChwcml2LT5jb250ZXh0
LmdldCgpLCAicHJlZWRpdC1jaGFuZ2VkIiwgR19DQUxMQkFDSyhjb250ZXh0UHJlZWRpdENoYW5n
ZWRDYWxsYmFjayksIG9iamVjdCwgR19DT05ORUNUX1NXQVBQRUQpOwogICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksICJwcmVlZGl0LWVuZCIsIEdfQ0FMTEJB
Q0soY29udGV4dFByZWVkaXRFbmRDYWxsYmFjayksIG9iamVjdCwgR19DT05ORUNUX1NXQVBQRUQp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0KCksICJjb21t
aXQiLCBHX0NBTExCQUNLKGNvbnRleHRDb21taXRDYWxsYmFjayksIG9iamVjdCwgR19DT05ORUNU
X1NXQVBQRUQpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfb2JqZWN0KHByaXYtPmNvbnRleHQuZ2V0
KCksICJyZXRyaWV2ZS1zdXJyb3VuZGluZyIsIEdfQ0FMTEJBQ0soY29udGV4dFJldHJpZXZlU3Vy
cm91bmRpbmcpLCBvYmplY3QsIEdfQ09OTkVDVF9TV0FQUEVEKTsKIH0KIAogc3RhdGljIHZvaWQg
d2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a1NldEVuYWJsZVByZWVkaXQoV2ViS2l0SW5w
dXRNZXRob2RDb250ZXh0KiBjb250ZXh0LCBnYm9vbGVhbiBlbmFibGVkKQpAQCAtMTgyLDYgKzE5
MywxMyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrTm90aWZ5
Q3Vyc29yQXJlYShXZWJLaXRJbnB1dE1ldGhvZENvbgogICAgIGd0a19pbV9jb250ZXh0X3NldF9j
dXJzb3JfbG9jYXRpb24ocHJpdi0+Y29udGV4dC5nZXQoKSwgJmN1cnNvclJlY3QpOwogfQogCitz
dGF0aWMgdm9pZCB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrTm90aWZ5U3Vycm91bmRp
bmcoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0KiBjb250ZXh0LCBjb25zdCBnY2hhciogdGV4dCwg
dW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBjdXJzb3JJbmRleCkKK3sKKyAgICBhdXRvKiBwcml2
ID0gV0VCS0lUX0lOUFVUX01FVEhPRF9DT05URVhUX0lNUExfR1RLKGNvbnRleHQpLT5wcml2Owor
ICAgIHByaXYtPnN1cnJvdW5kaW5nVGV4dCA9IHsgdGV4dCwgbGVuZ3RoIH07CisgICAgcHJpdi0+
c3Vycm91bmRpbmdDdXJzb3JJbmRleCA9IGN1cnNvckluZGV4OworfQorCiBzdGF0aWMgdm9pZCB3
ZWJraXRJbnB1dE1ldGhvZENvbnRleHRJbXBsR3RrUmVzZXQoV2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0KiBjb250ZXh0KQogewogICAgIGF1dG8qIHByaXYgPSBXRUJLSVRfSU5QVVRfTUVUSE9EX0NP
TlRFWFRfSU1QTF9HVEsoY29udGV4dCktPnByaXY7CkBAIC0yMDAsNiArMjE4LDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X2ltcGxfZ3RrX2NsYXNzX2luaXQoV2Vi
S2l0SW5wdXRNZXRob2RDb24KICAgICBpbUNsYXNzLT5ub3RpZnlfZm9jdXNfaW4gPSB3ZWJraXRJ
bnB1dE1ldGhvZENvbnRleHRJbXBsR3RrTm90aWZ5Rm9jdXNJbjsKICAgICBpbUNsYXNzLT5ub3Rp
ZnlfZm9jdXNfb3V0ID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0SW1wbEd0a05vdGlmeUZvY3Vz
T3V0OwogICAgIGltQ2xhc3MtPm5vdGlmeV9jdXJzb3JfYXJlYSA9IHdlYmtpdElucHV0TWV0aG9k
Q29udGV4dEltcGxHdGtOb3RpZnlDdXJzb3JBcmVhOworICAgIGltQ2xhc3MtPm5vdGlmeV9zdXJy
b3VuZGluZyA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtOb3RpZnlTdXJyb3VuZGlu
ZzsKICAgICBpbUNsYXNzLT5yZXNldCA9IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dEltcGxHdGtS
ZXNldDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCAwZjE0N2VkOWJlYS4uNDk2M2VjMjkzN2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2UuY3BwCkBAIC0xNjc0LDggKzE2NzQsMTAgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldElu
cHV0TWV0aG9kU3RhdGUoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLAogdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZVVwZGF0ZVRleHRJbnB1dFN0YXRlKFdlYktpdFdlYlZpZXdCYXNl
KiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKICAgICBjb25zdCBhdXRvJiBlZGl0b3JTdGF0ZSA9IHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmVkaXRvclN0YXRlKCk7Ci0gICAgaWYg
KCFlZGl0b3JTdGF0ZS5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSkKKyAgICBpZiAoIWVkaXRvclN0
YXRlLmlzTWlzc2luZ1Bvc3RMYXlvdXREYXRhKSB7CiAgICAgICAgIHdlYmtpdFdlYlZpZXdCYXNl
LT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5ub3RpZnlDdXJzb3JSZWN0KGVkaXRvclN0YXRlLnBv
c3RMYXlvdXREYXRhKCkuY2FyZXRSZWN0QXRTdGFydCk7CisgICAgICAgIHdlYmtpdFdlYlZpZXdC
YXNlLT5wcml2LT5pbnB1dE1ldGhvZEZpbHRlci5ub3RpZnlTdXJyb3VuZGluZyhlZGl0b3JTdGF0
ZS5wb3N0TGF5b3V0RGF0YSgpLnBhcmFncmFwaENvbnRleHQsIGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkucGFyYWdyYXBoQ29udGV4dEN1cnNvclBvc2l0aW9uKTsKKyAgICB9CiB9CiAKIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VTZXRDb250ZW50c1NpemUoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YmtpdFdlYlZpZXdCYXNlLCBjb25zdCBJbnRTaXplJiBjb250ZW50c1NpemUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL2RvY3Mvd2Via2l0Mmd0ay00LjAtc2Vj
dGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2NzL3dlYmtpdDJn
dGstNC4wLXNlY3Rpb25zLnR4dAppbmRleCA1MjA2OTgwOGJkZC4uMjBkMjA0MDAxMDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvZG9jcy93ZWJraXQyZ3RrLTQu
MC1zZWN0aW9ucy50eHQKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9kb2Nz
L3dlYmtpdDJndGstNC4wLXNlY3Rpb25zLnR4dApAQCAtMTU2OCw2ICsxNTY4LDcgQEAgd2Via2l0
X2lucHV0X21ldGhvZF9jb250ZXh0X2ZpbHRlcl9rZXlfZXZlbnQKIHdlYmtpdF9pbnB1dF9tZXRo
b2RfY29udGV4dF9ub3RpZnlfZm9jdXNfaW4KIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9u
b3RpZnlfZm9jdXNfb3V0CiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2N1cnNv
cl9hcmVhCit3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X3N1cnJvdW5kaW5nCiB3
ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfcmVzZXQKIHdlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9nZXRfaW5wdXRfcHVycG9zZQogd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X3NldF9p
bnB1dF9wdXJwb3NlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3Bl
L1dQRVZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNw
cAppbmRleCAyNzViYjBiYTk1ZS4uYmI4ZTM2MTgwMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS93cGUvV1BFVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL3dwZS9XUEVWaWV3LmNwcApAQCAtMjM5LDggKzIzOSwxMCBAQCB2b2lkIFZpZXc6
OnNldElucHV0TWV0aG9kU3RhdGUoT3B0aW9uYWw8SW5wdXRNZXRob2RTdGF0ZT4mJiBzdGF0ZSkK
IHZvaWQgVmlldzo6c2VsZWN0aW9uRGlkQ2hhbmdlKCkKIHsKICAgICBjb25zdCBhdXRvJiBlZGl0
b3JTdGF0ZSA9IG1fcGFnZVByb3h5LT5lZGl0b3JTdGF0ZSgpOwotICAgIGlmICghZWRpdG9yU3Rh
dGUuaXNNaXNzaW5nUG9zdExheW91dERhdGEpCisgICAgaWYgKCFlZGl0b3JTdGF0ZS5pc01pc3Np
bmdQb3N0TGF5b3V0RGF0YSkgewogICAgICAgICBtX2lucHV0TWV0aG9kRmlsdGVyLm5vdGlmeUN1
cnNvclJlY3QoZWRpdG9yU3RhdGUucG9zdExheW91dERhdGEoKS5jYXJldFJlY3RBdFN0YXJ0KTsK
KyAgICAgICAgbV9pbnB1dE1ldGhvZEZpbHRlci5ub3RpZnlTdXJyb3VuZGluZyhlZGl0b3JTdGF0
ZS5wb3N0TGF5b3V0RGF0YSgpLnBhcmFncmFwaENvbnRleHQsIGVkaXRvclN0YXRlLnBvc3RMYXlv
dXREYXRhKCkucGFyYWdyYXBoQ29udGV4dEN1cnNvclBvc2l0aW9uKTsKKyAgICB9CiB9CiAKIHZv
aWQgVmlldzo6c2V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9XZWJLaXRJbnB1dE1ldGhvZENvbnRl
eHQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SW5wdXRNZXRob2RD
b250ZXh0LmgKaW5kZXggODI4NTU5NDg1ZDguLjdjYmU0MGRkYmRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvd3BlL1dlYktpdElucHV0TWV0aG9kQ29udGV4dC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvV2ViS2l0SW5wdXRNZXRob2RDb250
ZXh0LmgKQEAgLTEwOSw2ICsxMDksOSBAQCBzdHJ1Y3QgX1dlYktpdElucHV0TWV0aG9kQ29udGV4
dENsYXNzIHsKICAgICB2b2lkICAgICAoKiBwcmVlZGl0X2ZpbmlzaGVkKSAgIChXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKICAgICB2b2lkICAgICAoKiBjb21taXR0
ZWQpICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgICAgICAgICAg
ICAgICAgICAgICAgKnRleHQpOworICAgIHZvaWQgICAgICgqIGRlbGV0ZV9zdXJyb3VuZGluZykg
KFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aW50ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5fY2hhcnMpOwogCiAgICAgLyogVmlydHVhbCBmdW5jdGlv
bnMgKi8KICAgICB2b2lkICAgICAoKiBzZXRfZW5hYmxlX3ByZWVkaXQpIChXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQgICAgICAgICpjb250ZXh0LApAQCAtMTI2LDYgKzEyOSwxMCBAQCBzdHJ1Y3Qg
X1dlYktpdElucHV0TWV0aG9kQ29udGV4dENsYXNzIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdpZHRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCk7CisgICAgdm9pZCAgICAgKCogbm90
aWZ5X3N1cnJvdW5kaW5nKSAoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0ICAgICAgICAqY29udGV4
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciAgICAg
ICAgICAgICAgICAgICAgICp0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGd1aW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBndWludCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjdXJzb3JfaW5kZXgpOwogICAgIHZvaWQgICAgICgqIHJlc2V0KSAgICAgICAgICAgICAgKFdl
YktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAgKmNvbnRleHQpOwogCiAgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CkBAIC0xNjgsNiArMTc1LDEyIEBAIHdlYmtpdF9pbnB1
dF9tZXRob2RfY29udGV4dF9ub3RpZnlfY3Vyc29yX2FyZWEgKFdlYktpdElucHV0TWV0aG9kQ29u
dGV4dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQpOwogCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF9pbnB1dF9tZXRob2RfY29u
dGV4dF9ub3RpZnlfc3Vycm91bmRpbmcgKFdlYktpdElucHV0TWV0aG9kQ29udGV4dCAgICAgICAg
KmNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBnY2hhciAgICAgICAgICAgICAgICAgICAgICp0ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ3VpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vyc29yX2luZGV4KTsK
KwogV0VCS0lUX0FQSSB2b2lkCiB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfcmVzZXQgICAg
ICAgICAgICAgIChXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQgICAgICAgICpjb250ZXh0KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAt
c2VjdGlvbnMudHh0IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0x
LjAtc2VjdGlvbnMudHh0CmluZGV4IGRmNGY4NDZiNDU5Li4xZDFkNTdiMTcxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL3dwZS9kb2NzL3dwZS0xLjAtc2VjdGlvbnMu
dHh0CisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS93cGUvZG9jcy93cGUtMS4wLXNl
Y3Rpb25zLnR4dApAQCAtMTQ1Myw2ICsxNDUzLDcgQEAgd2Via2l0X2lucHV0X21ldGhvZF9jb250
ZXh0X2ZpbHRlcl9rZXlfZXZlbnQKIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlf
Zm9jdXNfaW4KIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9ub3RpZnlfZm9jdXNfb3V0CiB3
ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X2N1cnNvcl9hcmVhCit3ZWJraXRfaW5w
dXRfbWV0aG9kX2NvbnRleHRfbm90aWZ5X3N1cnJvdW5kaW5nCiB3ZWJraXRfaW5wdXRfbWV0aG9k
X2NvbnRleHRfcmVzZXQKIHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9nZXRfaW5wdXRfcHVy
cG9zZQogd2Via2l0X2lucHV0X21ldGhvZF9jb250ZXh0X3NldF9pbnB1dF9wdXJwb3NlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA4MzhiNGRhODUwMy4uZDBk
MDIwODJkYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAt
ODIwOSw3ICs4MjA5LDE1IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpjYW5jZWxDb21wb3NpdGlvbihj
b25zdCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKQogICAgIH0KICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpDYW5jZWxDb21wb3NpdGlvbihjb21wb3NpdGlvblN0cmluZykpOwogfQotI2Vu
ZGlmIC8vIFBMQVRGT1JNKEdUSykKKwordm9pZCBXZWJQYWdlUHJveHk6OmRlbGV0ZVN1cnJvdW5k
aW5nKGludCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50KQoreworICAgIGlmICghaGFz
UnVubmluZ1Byb2Nlc3MoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6RGVsZXRlU3Vycm91bmRpbmcob2Zmc2V0LCBjaGFyYWN0ZXJDb3VudCkpOworfQor
I2VuZGlmIC8vIFBMQVRGT1JNKEdUSykgfHwgUExBVEZPUk0oV1BFKQogCiB2b2lkIFdlYlBhZ2VQ
cm94eTo6c2V0U2Nyb2xsUGlubmluZ0JlaGF2aW9yKFNjcm9sbFBpbm5pbmdCZWhhdmlvciBwaW5u
aW5nKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2NDhlMjdm
OTkzZC4uZWZiYWQ0MGE2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5o
CkBAIC03OTEsNiArNzkxLDcgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFU
Rk9STShXUEUpCiAgICAgdm9pZCBjYW5jZWxDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIGNvbXBv
c2l0aW9uU3RyaW5nKTsKKyAgICB2b2lkIGRlbGV0ZVN1cnJvdW5kaW5nKGludCBvZmZzZXQsIHVu
c2lnbmVkIGNoYXJhY3RlckNvdW50KTsKIAogICAgIHZvaWQgc2V0SW5wdXRNZXRob2RTdGF0ZShP
cHRpb25hbDxJbnB1dE1ldGhvZFN0YXRlPiYmKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAxM2Q0M2VkMDA5NS4uY2Y1MTIxNjQw
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBA
IC01MzYyLDYgKzUzNjIsMjkgQEAgdm9pZCBXZWJQYWdlOjpjYW5jZWxDb21wb3NpdGlvbihjb25z
dCBTdHJpbmcmIGNvbXBvc2l0aW9uU3RyaW5nKQogICAgIGlmIChhdXRvKiB0YXJnZXRGcmFtZSA9
IHRhcmdldEZyYW1lRm9yRWRpdGluZygqdGhpcykpCiAgICAgICAgIHRhcmdldEZyYW1lLT5lZGl0
b3IoKS5jb25maXJtQ29tcG9zaXRpb24oY29tcG9zaXRpb25TdHJpbmcpOwogfQorCit2b2lkIFdl
YlBhZ2U6OmRlbGV0ZVN1cnJvdW5kaW5nKGludDY0X3Qgb2Zmc2V0LCB1bnNpZ25lZCBjaGFyYWN0
ZXJDb3VudCkKK3sKKyAgICBhdXRvKiB0YXJnZXRGcmFtZSA9IHRhcmdldEZyYW1lRm9yRWRpdGlu
ZygqdGhpcyk7CisgICAgaWYgKCF0YXJnZXRGcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGF1dG8gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0
KCk7CisgICAgYXV0byBwYXJhZ3JhcGhSYW5nZSA9IG1ha2VSYW5nZShzdGFydE9mUGFyYWdyYXBo
KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOworICAgIGF1dG8gY3Vyc29yUG9zaXRp
b24gPSBUZXh0SXRlcmF0b3I6OnJhbmdlTGVuZ3RoKHBhcmFncmFwaFJhbmdlLmdldCgpKTsKKyAg
ICBhdXRvJiByb290Tm9kZSA9IHBhcmFncmFwaFJhbmdlLT5zdGFydENvbnRhaW5lcigpLnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCk7CisgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IFRleHRJdGVyYXRv
cjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoJnJvb3ROb2RlLCBjdXJzb3JQb3NpdGlvbiAr
IG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOworCisgICAgdGFyZ2V0RnJhbWUtPmVkaXRvcigpLnNl
dElnbm9yZVNlbGVjdGlvbkNoYW5nZXModHJ1ZSk7CisgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKCpzZWxlY3Rpb25SYW5nZSwgU0VMX0RF
RkFVTFRfQUZGSU5JVFkpKTsKKyAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuZGVsZXRlU2VsZWN0
aW9uV2l0aFNtYXJ0RGVsZXRlKGZhbHNlKTsKKyAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0
SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyhmYWxzZSk7CisgICAgc2VuZEVkaXRvclN0YXRlVXBkYXRl
KCk7Cit9CiAjZW5kaWYKIAogdm9pZCBXZWJQYWdlOjpkaWRBcHBseVN0eWxlKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA5YTk0MzQ3M2JhZS4uM2E1
OTVmOGY1MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
QEAgLTc4NCw2ICs3ODQsNyBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRG
T1JNKFdQRSkKICAgICB2b2lkIGNhbmNlbENvbXBvc2l0aW9uKGNvbnN0IFN0cmluZyYgdGV4dCk7
CisgICAgdm9pZCBkZWxldGVTdXJyb3VuZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hh
cmFjdGVyQ291bnQpOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHVEspCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA5
YmYyMWVjMzUxYy4uMTFlZTcwYmVhZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNDE1LDYgKzQxNSw3IEBAIEdl
bmVyYXRlU3ludGhldGljRWRpdGluZ0NvbW1hbmQoZW51bTp1aW50OF90IFdlYktpdDo6U3ludGhl
dGljRWRpdGluZ0NvbW1hbmRUeXBlCiAKICNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JNKFdQ
RSkKICAgICBDYW5jZWxDb21wb3NpdGlvbihTdHJpbmcgdGV4dCkKKyAgICBEZWxldGVTdXJyb3Vu
ZGluZyhpbnQ2NF90IG9mZnNldCwgdW5zaWduZWQgY2hhcmFjdGVyQ291bnQpCiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKEdUSykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAKaW5kZXggNWQ4MmM3ZGEyNWQuLmZhZDk2N2ZkOWY0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBh
Z2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dl
YlBhZ2VHTGliLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2UuaCIKIAorI2luY2x1ZGUgIkVkaXRvclN0YXRlLmgiCiAjaW5jbHVkZSAi
SW5wdXRNZXRob2RTdGF0ZS5oIgogI2luY2x1ZGUgIlVzZXJNZXNzYWdlLmgiCiAjaW5jbHVkZSAi
V2ViS2l0RXh0ZW5zaW9uTWFuYWdlci5oIgpAQCAtMzMsOCArMzQsMTQgQEAKICNpbmNsdWRlICJX
ZWJLaXRXZWJFeHRlbnNpb24uaCIKICNpbmNsdWRlICJXZWJLaXRXZWJQYWdlUHJpdmF0ZS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29yZS9FZGl0
b3IuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9GcmFt
ZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0hUTUxJbnB1dEVsZW1lbnQuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL0hUTUxUZXh0QXJlYUVsZW1lbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1RleHRJ
dGVyYXRvci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9WaXNpYmxlVW5pdHMuaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKQEAgLTYxLDYgKzY4LDYyIEBAIHZvaWQgV2ViUGFnZTo6c2VuZE1l
c3NhZ2VUb1dlYkV4dGVuc2lvbihVc2VyTWVzc2FnZSYmIG1lc3NhZ2UpCiAgICAgc2VuZE1lc3Nh
Z2VUb1dlYkV4dGVuc2lvbldpdGhSZXBseShXVEZNb3ZlKG1lc3NhZ2UpLCBbXShVc2VyTWVzc2Fn
ZSYmKSB7IH0pOwogfQogCit2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUm
IGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0LCBJbmNsdWRlUG9zdExheW91dERhdGFIaW50IHNo
b3VsZEluY2x1ZGVQb3N0TGF5b3V0RGF0YSkgY29uc3QKK3sKKyAgICBpZiAoc2hvdWxkSW5jbHVk
ZVBvc3RMYXlvdXREYXRhID09IEluY2x1ZGVQb3N0TGF5b3V0RGF0YUhpbnQ6Ok5vIHx8ICFmcmFt
ZS52aWV3KCkgfHwgZnJhbWUudmlldygpLT5uZWVkc0xheW91dCgpKSB7CisgICAgICAgIHJlc3Vs
dC5pc01pc3NpbmdQb3N0TGF5b3V0RGF0YSA9IHRydWU7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvJiBwb3N0TGF5b3V0RGF0YSA9IHJlc3VsdC5wb3N0TGF5b3V0RGF0YSgpOwor
ICAgIHBvc3RMYXlvdXREYXRhLmNhcmV0UmVjdEF0U3RhcnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5h
YnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxl
Y3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9u
LmlzTm9uZSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShHVEspCisgICAgY29u
c3QgRWRpdG9yJiBlZGl0b3IgPSBmcmFtZS5lZGl0b3IoKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlz
UmFuZ2UoKSkgeworICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvbkhhc1N0eWxlKENTU1Byb3Bl
cnR5Rm9udFdlaWdodCwgImJvbGQiKSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZUJvbGQ7CisgICAgICAgIGlm
IChlZGl0b3Iuc2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlGb250U3R5bGUsICJpdGFsaWMi
KSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRy
aWJ1dGVzIHw9IEF0dHJpYnV0ZUl0YWxpY3M7CisgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9u
SGFzU3R5bGUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVuZGVy
bGluZSIpID09IFRydWVUcmlTdGF0ZSkKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnR5cGlu
Z0F0dHJpYnV0ZXMgfD0gQXR0cmlidXRlVW5kZXJsaW5lOworICAgICAgICBpZiAoZWRpdG9yLnNl
bGVjdGlvbkhhc1N0eWxlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qs
ICJsaW5lLXRocm91Z2giKSA9PSBUcnVlVHJpU3RhdGUpCisgICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZVN0cmlrZVRocm91Z2g7CisgICAgfSBl
bHNlIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKSB7CisgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0
aW9uU3RhcnRIYXNTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICJib2xkIikpCisgICAgICAg
ICAgICBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZUJvbGQ7Cisg
ICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgIml0YWxpYyIpKQorICAgICAgICAgICAgcG9zdExheW91dERhdGEudHlwaW5nQXR0cmli
dXRlcyB8PSBBdHRyaWJ1dGVJdGFsaWNzOworICAgICAgICBpZiAoZWRpdG9yLnNlbGVjdGlvblN0
YXJ0SGFzU3R5bGUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCwgInVu
ZGVybGluZSIpKQorICAgICAgICAgICAgcG9zdExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyB8
PSBBdHRyaWJ1dGVVbmRlcmxpbmU7CisgICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uU3RhcnRI
YXNTdHlsZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0LCAibGluZS10
aHJvdWdoIikpCisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9
IEF0dHJpYnV0ZVN0cmlrZVRocm91Z2g7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoc2VsZWN0
aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9
IHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKTsKKyAgICAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9
IHN0YXJ0T2ZQYXJhZ3JhcGgoc2VsZWN0aW9uU3RhcnQpOworICAgICAgICBhdXRvIHBhcmFncmFw
aEVuZCA9IGVuZE9mUGFyYWdyYXBoKHNlbGVjdGlvblN0YXJ0KTsKKyAgICAgICAgYXV0byBwYXJh
Z3JhcGhSYW5nZSA9IG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgcGFyYWdyYXBoRW5kKTsKKyAg
ICAgICAgYXV0byBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9yKCkuY29tcG9zaXRpb25S
YW5nZSgpOworICAgICAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiBwYXJhZ3JhcGhSYW5nZS0+
Y29udGFpbnMoKmNvbXBvc2l0aW9uUmFuZ2UpKSB7CisgICAgICAgICAgICBhdXRvIGNsb25lZFJh
bmdlID0gcGFyYWdyYXBoUmFuZ2UtPmNsb25lUmFuZ2UoKTsKKyAgICAgICAgICAgIHBhcmFncmFw
aFJhbmdlLT5zZXRFbmQoY29tcG9zaXRpb25SYW5nZS0+c3RhcnRQb3NpdGlvbigpKTsKKyAgICAg
ICAgICAgIGNsb25lZFJhbmdlLT5zZXRTdGFydChjb21wb3NpdGlvblJhbmdlLT5lbmRQb3NpdGlv
bigpKTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRleHQgPSBwbGFp
blRleHQocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlLnB0cigp
KTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRleHRDdXJzb3JQb3Np
dGlvbiA9IFRleHRJdGVyYXRvcjo6cmFuZ2VMZW5ndGgocGFyYWdyYXBoUmFuZ2UuZ2V0KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcG9zdExheW91dERhdGEucGFyYWdyYXBoQ29u
dGV4dCA9IHBsYWluVGV4dChwYXJhZ3JhcGhSYW5nZS5nZXQoKSk7CisgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5wYXJhZ3JhcGhDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSBUZXh0SXRlcmF0b3I6
OnJhbmdlTGVuZ3RoKG1ha2VSYW5nZShwYXJhZ3JhcGhTdGFydCwgc2VsZWN0aW9uU3RhcnQpLmdl
dCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKwogc3RhdGljIE9wdGlvbmFsPElucHV0TWV0aG9k
U3RhdGU+IGlucHV0TWV0aG9kU2F0ZUZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICBpZiAoIWVsZW1lbnQgfHwgIWVsZW1lbnQtPnNob3VsZFVzZUlucHV0TWV0aG9kKCkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAK
aW5kZXggNDVlZDc3Yjk0NmEuLjg5ZGMxMWI4OTNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgogCi0jaW5jbHVkZSAi
RWRpdG9yU3RhdGUuaCIKICNpbmNsdWRlICJXZWJFdmVudC5oIgogI2luY2x1ZGUgIldlYkZyYW1l
LmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViUGFnZUFjY2Vzc2liaWxpdHlPYmplY3QuaCIKQEAgLTc2
LDQyICs3NSw2IEBAIHZvaWQgV2ViUGFnZTo6cGxhdGZvcm1EZXRhY2goKQogewogfQogCi12b2lk
IFdlYlBhZ2U6OnBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYg
cmVzdWx0LCBJbmNsdWRlUG9zdExheW91dERhdGFIaW50IHNob3VsZEluY2x1ZGVQb3N0TGF5b3V0
RGF0YSkgY29uc3QKLXsKLSAgICBpZiAoc2hvdWxkSW5jbHVkZVBvc3RMYXlvdXREYXRhID09IElu
Y2x1ZGVQb3N0TGF5b3V0RGF0YUhpbnQ6Ok5vIHx8ICFmcmFtZS52aWV3KCkgfHwgZnJhbWUudmll
dygpLT5uZWVkc0xheW91dCgpKSB7Ci0gICAgICAgIHJlc3VsdC5pc01pc3NpbmdQb3N0TGF5b3V0
RGF0YSA9IHRydWU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBhdXRvJiBwb3N0TGF5
b3V0RGF0YSA9IHJlc3VsdC5wb3N0TGF5b3V0RGF0YSgpOwotICAgIHBvc3RMYXlvdXREYXRhLmNh
cmV0UmVjdEF0U3RhcnQgPSBmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7
Ci0KLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBjb25zdCBFZGl0b3ImIGVkaXRvciA9IGZyYW1lLmVkaXRvcigpOwotICAg
IGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9u
SGFzU3R5bGUoQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAiYm9sZCIpID09IFRydWVUcmlTdGF0ZSkK
LSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgfD0gQXR0cmlidXRl
Qm9sZDsKLSAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb25IYXNTdHlsZShDU1NQcm9wZXJ0eUZv
bnRTdHlsZSwgIml0YWxpYyIpID09IFRydWVUcmlTdGF0ZSkKLSAgICAgICAgICAgIHBvc3RMYXlv
dXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgfD0gQXR0cmlidXRlSXRhbGljczsKLSAgICAgICAgaWYg
KGVkaXRvci5zZWxlY3Rpb25IYXNTdHlsZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9u
c0luRWZmZWN0LCAidW5kZXJsaW5lIikgPT0gVHJ1ZVRyaVN0YXRlKQotICAgICAgICAgICAgcG9z
dExheW91dERhdGEudHlwaW5nQXR0cmlidXRlcyB8PSBBdHRyaWJ1dGVVbmRlcmxpbmU7Ci0gICAg
ICAgIGlmIChlZGl0b3Iuc2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVj
b3JhdGlvbnNJbkVmZmVjdCwgImxpbmUtdGhyb3VnaCIpID09IFRydWVUcmlTdGF0ZSkKLSAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgfD0gQXR0cmlidXRlU3RyaWtl
VGhyb3VnaDsKLSAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKLSAgICAgICAg
aWYgKGVkaXRvci5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
ImJvbGQiKSkKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnR5cGluZ0F0dHJpYnV0ZXMgfD0g
QXR0cmlidXRlQm9sZDsKLSAgICAgICAgaWYgKGVkaXRvci5zZWxlY3Rpb25TdGFydEhhc1N0eWxl
KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAiaXRhbGljIikpCi0gICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS50eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZUl0YWxpY3M7Ci0gICAgICAgIGlmIChl
ZGl0b3Iuc2VsZWN0aW9uU3RhcnRIYXNTdHlsZShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0
aW9uc0luRWZmZWN0LCAidW5kZXJsaW5lIikpCi0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS50
eXBpbmdBdHRyaWJ1dGVzIHw9IEF0dHJpYnV0ZVVuZGVybGluZTsKLSAgICAgICAgaWYgKGVkaXRv
ci5zZWxlY3Rpb25TdGFydEhhc1N0eWxlKENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25z
SW5FZmZlY3QsICJsaW5lLXRocm91Z2giKSkKLSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnR5
cGluZ0F0dHJpYnV0ZXMgfD0gQXR0cmlidXRlU3RyaWtlVGhyb3VnaDsKLSAgICB9Ci19Ci0KIGJv
b2wgV2ViUGFnZTo6cGVyZm9ybURlZmF1bHRCZWhhdmlvckZvcktleUV2ZW50KGNvbnN0IFdlYktl
eWJvYXJkRXZlbnQmIGtleWJvYXJkRXZlbnQpCiB7CiAgICAgaWYgKGtleWJvYXJkRXZlbnQudHlw
ZSgpICE9IFdlYkV2ZW50OjpLZXlEb3duICYmIGtleWJvYXJkRXZlbnQudHlwZSgpICE9IFdlYkV2
ZW50OjpSYXdLZXlEb3duKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2Uvd3BlL1dlYlBhZ2VXUEUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2Uvd3BlL1dlYlBhZ2VXUEUuY3BwCmluZGV4IDNhOGE5OTcyYWY5Li5mOWZjNDFhMWZiNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uvd3BlL1dlYlBhZ2VXUEUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL3dwZS9XZWJQYWdlV1BF
LmNwcApAQCAtMjYsMTggKzI2LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
V2ViUGFnZS5oIgogCi0jaW5jbHVkZSAiRWRpdG9yU3RhdGUuaCIKICNpbmNsdWRlICJXZWJLaXRX
ZWJQYWdlQWNjZXNzaWJpbGl0eU9iamVjdC5oIgogI2luY2x1ZGUgIldlYlBhZ2VQcm94eS5oIgog
I2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5j
ZXNLZXlzLmgiCi0jaW5jbHVkZSAiV2ViUHJlZmVyZW5jZXNTdG9yZS5oIgotI2luY2x1ZGUgPFdl
YkNvcmUvRnJhbWUuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lU2VsZWN0aW9uLmg+Ci0jaW5j
bHVkZSA8V2ViQ29yZS9GcmFtZVZpZXcuaD4KICNpbmNsdWRlIDxXZWJDb3JlL05vdEltcGxlbWVu
dGVkLmg+Ci0jaW5jbHVkZSA8V2ViQ29yZS9TZXR0aW5ncy5oPgotI2luY2x1ZGUgPFdlYkNvcmUv
U2hhcmVkQnVmZmVyLmg+CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC02MywxNyArNTUsNiBAQCB2b2lkIFdlYlBhZ2U6OnBsYXRmb3JtRGV0YWNoKCkK
IHsKIH0KIAotdm9pZCBXZWJQYWdlOjpwbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFtZSwg
RWRpdG9yU3RhdGUmIHJlc3VsdCwgSW5jbHVkZVBvc3RMYXlvdXREYXRhSGludCBzaG91bGRJbmNs
dWRlUG9zdExheW91dERhdGEpIGNvbnN0Ci17Ci0gICAgaWYgKHNob3VsZEluY2x1ZGVQb3N0TGF5
b3V0RGF0YSA9PSBJbmNsdWRlUG9zdExheW91dERhdGFIaW50OjpObyB8fCAhZnJhbWUudmlldygp
IHx8IGZyYW1lLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkgewotICAgICAgICByZXN1bHQuaXNNaXNz
aW5nUG9zdExheW91dERhdGEgPSB0cnVlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
YXV0byYgcG9zdExheW91dERhdGEgPSByZXN1bHQucG9zdExheW91dERhdGEoKTsKLSAgICBwb3N0
TGF5b3V0RGF0YS5jYXJldFJlY3RBdFN0YXJ0ID0gZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVD
YXJldEJvdW5kcygpOwotfQotCiBib29sIFdlYlBhZ2U6OnBlcmZvcm1EZWZhdWx0QmVoYXZpb3JG
b3JLZXlFdmVudChjb25zdCBXZWJLZXlib2FyZEV2ZW50JikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDUwZjA1NTc1MjlkLi4zMjVmY2VkNGJmNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisr
KyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDIwLTAxLTAzICBDYXJsb3Mg
R2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXVtXUEVd
IEFkZCBBUEkgdG8gcmV0cmlldmUgYW5kIGRlbGV0ZSBzdXJyb3VuZGluZyB0ZXh0IGZvciBpbnB1
dCBtZXRob2RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDU3MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBBZGQgbmV3IHRlc3QgY2FzZSBmb3IgdGhlIG5ldyBBUEkuCisKKyAgICAgICAgKiBUZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdEdMaWIvVGVzdElucHV0TWV0aG9kQ29udGV4dC5jcHA6CisgICAg
ICAgICh3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRNb2NrRmluYWxpemUpOgorICAgICAgICAod2Vi
a2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja05vdGlmeVN1cnJvdW5kaW5nKToKKyAgICAgICAgKHdl
YmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tSZXNldCk6CisgICAgICAgICh3ZWJraXRfaW5wdXRf
bWV0aG9kX2NvbnRleHRfbW9ja19jbGFzc19pbml0KToKKyAgICAgICAgKHRlc3RXZWJLaXRJbnB1
dE1ldGhvZENvbnRleHRTdXJyb3VuZGluZyk6CisgICAgICAgIChiZWZvcmVBbGwpOgorCiAyMDE5
LTEyLTI3ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbR1RLXVtXUEVdIFBhc3N3b3JkIGZpZWxkIGRvZXNuJ3QgZ2V0IGlucHV0IG1ldGhvZApk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RJbnB1
dE1ldGhvZENvbnRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGli
L1Rlc3RJbnB1dE1ldGhvZENvbnRleHQuY3BwCmluZGV4IGU0Y2QzMWZlMjU0Li5kM2RhYjZlMDlk
ZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRHTGliL1Rlc3RJ
bnB1dE1ldGhvZENvbnRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
S2l0R0xpYi9UZXN0SW5wdXRNZXRob2RDb250ZXh0LmNwcApAQCAtNDEsNiArNDEsOCBAQCB0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0TW9jayB7CiAgICAgYm9vbCBlbmFi
bGVkOwogICAgIEdTdHJpbmcqIHByZWVkaXQ7CiAgICAgYm9vbCBjb21taXROZXh0Q2hhcmFjdGVy
OworICAgIGNoYXIqIHN1cnJvdW5kaW5nVGV4dDsKKyAgICB1bnNpZ25lZCBzdXJyb3VuZGluZ0N1
cnNvckluZGV4OwogfSBXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRNb2NrOwogCiB0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja0NsYXNzIHsKQEAgLTY3LDYgKzY5LDcg
QEAgc3RhdGljIHZvaWQgd2Via2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja0ZpbmFsaXplKEdPYmpl
Y3QqIG9iamVjdCkKICAgICAgICAgZ19zdHJpbmdfZnJlZShtb2NrLT5wcmVlZGl0LCBUUlVFKTsK
ICAgICAgICAgbW9jay0+cHJlZWRpdCA9IG51bGxwdHI7CiAgICAgfQorICAgIGdfY2xlYXJfcG9p
bnRlcigmbW9jay0+c3Vycm91bmRpbmdUZXh0LCBnX2ZyZWUpOwogICAgIEdfT0JKRUNUX0NMQVNT
KHdlYmtpdF9pbnB1dF9tZXRob2RfY29udGV4dF9tb2NrX3BhcmVudF9jbGFzcyktPmZpbmFsaXpl
KG9iamVjdCk7CiB9CiAKQEAgLTE3MSw2ICsxNzQsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0SW5w
dXRNZXRob2RDb250ZXh0TW9ja05vdGlmeUZvY3VzT3V0KFdlYktpdElucHV0TWV0aG9kQ29udGV4
dCoKICAgICByZWludGVycHJldF9jYXN0PFdlYktpdElucHV0TWV0aG9kQ29udGV4dE1vY2sqPihj
b250ZXh0KS0+ZW5hYmxlZCA9IGZhbHNlOwogfQogCitzdGF0aWMgdm9pZCB3ZWJraXRJbnB1dE1l
dGhvZENvbnRleHRNb2NrTm90aWZ5U3Vycm91bmRpbmcoV2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBnY2hhciAqdGV4dCwgdW5zaWduZWQgbGVuZ3RoLCB1bnNpZ25lZCBj
dXJzb3JJbmRleCkKK3sKKyAgICBhdXRvKiBtb2NrID0gcmVpbnRlcnByZXRfY2FzdDxXZWJLaXRJ
bnB1dE1ldGhvZENvbnRleHRNb2NrKj4oY29udGV4dCk7CisgICAgZ19jbGVhcl9wb2ludGVyKCZt
b2NrLT5zdXJyb3VuZGluZ1RleHQsIGdfZnJlZSk7CisKKyAgICBpZiAoIW1vY2stPnByZWVkaXQg
JiYgY3Vyc29ySW5kZXggPj0gMyAmJiB0ZXh0W2N1cnNvckluZGV4IC0gM10gPT0gJzonICYmIHRl
eHRbY3Vyc29ySW5kZXggLSAyXSA9PSAnLScgJiYgdGV4dFtjdXJzb3JJbmRleCAtIDFdID09ICcp
JykgeworICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29udGV4dCwgImRlbGV0ZS1zdXJy
b3VuZGluZyIsIC0zLCAzLCBudWxscHRyKTsKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KGNvbnRleHQsICJjb21taXR0ZWQiLCAi8J+YgO+4jyIsIG51bGxwdHIpOworICAgIH0KKyAgICBt
b2NrLT5zdXJyb3VuZGluZ1RleHQgPSBnX3N0cm5kdXAodGV4dCwgbGVuZ3RoKTsKKyAgICBtb2Nr
LT5zdXJyb3VuZGluZ0N1cnNvckluZGV4ID0gY3Vyc29ySW5kZXg7Cit9CisKIHN0YXRpYyB2b2lk
IHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tSZXNldChXZWJLaXRJbnB1dE1ldGhvZENvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgYXV0byogbW9jayA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViS2l0
SW5wdXRNZXRob2RDb250ZXh0TW9jayo+KGNvbnRleHQpOwpAQCAtMTc5LDYgKzE5NSw4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdElucHV0TWV0aG9kQ29udGV4dE1vY2tSZXNldChXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQqIGNvbnRleHQpCiAKICAgICBnX3N0cmluZ19mcmVlKG1vY2stPnByZWVkaXQs
IFRSVUUpOwogICAgIG1vY2stPnByZWVkaXQgPSBudWxscHRyOworICAgIGdfY2xlYXJfcG9pbnRl
cigmbW9jay0+c3Vycm91bmRpbmdUZXh0LCBnX2ZyZWUpOworICAgIG1vY2stPnN1cnJvdW5kaW5n
Q3Vyc29ySW5kZXggPSAwOwogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGNvbnRleHQsICJw
cmVlZGl0LWNoYW5nZWQiLCBudWxscHRyKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUoY29u
dGV4dCwgInByZWVkaXQtZmluaXNoZWQiLCBudWxscHRyKTsKQEAgLTE5NCw2ICsyMTIsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfaW5wdXRfbWV0aG9kX2NvbnRleHRfbW9ja19jbGFzc19pbml0KFdl
YktpdElucHV0TWV0aG9kQ29udGV4dAogICAgIGltQ2xhc3MtPmZpbHRlcl9rZXlfZXZlbnQgPSB3
ZWJraXRJbnB1dE1ldGhvZENvbnRleHRNb2NrRmlsdGVyS2V5RXZlbnQ7CiAgICAgaW1DbGFzcy0+
bm90aWZ5X2ZvY3VzX2luID0gd2Via2l0SW5wdXRNZXRob2RDb250ZXh0TW9ja05vdGlmeUZvY3Vz
SW47CiAgICAgaW1DbGFzcy0+bm90aWZ5X2ZvY3VzX291dCA9IHdlYmtpdElucHV0TWV0aG9kQ29u
dGV4dE1vY2tOb3RpZnlGb2N1c091dDsKKyAgICBpbUNsYXNzLT5ub3RpZnlfc3Vycm91bmRpbmcg
PSB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRNb2NrTm90aWZ5U3Vycm91bmRpbmc7CiAgICAgaW1D
bGFzcy0+cmVzZXQgPSB3ZWJraXRJbnB1dE1ldGhvZENvbnRleHRNb2NrUmVzZXQ7CiB9CiAKQEAg
LTQwMyw5ICs0MjIsMzYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gd2Via2l0X2lucHV0X21l
dGhvZF9jb250ZXh0X2dldF9pbnB1dF9oaW50cyhXRUJLSVRfSU5QVVRfTUVUSE9EX0NPTlRFWFQo
bV9jb250ZXh0LmdldCgpKSk7CiAgICAgfQogCisgICAgY29uc3QgY2hhciogc3Vycm91bmRpbmdU
ZXh0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQtPnN1cnJvdW5kaW5n
VGV4dDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzdXJyb3VuZGluZ0N1cnNvckluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvbnRleHQtPnN1cnJvdW5kaW5nQ3Vyc29ySW5k
ZXg7CisgICAgfQorCisgICAgdm9pZCB3YWl0Rm9yU3Vycm91bmRpbmdUZXh0KGNvbnN0IGNoYXIq
IHRleHQpCisgICAgeworICAgICAgICBtX2V4cGVjdGVkU3Vycm91bmRpbmdUZXh0ID0gdGV4dDsK
KyAgICAgICAgZ19pZGxlX2FkZChbXShncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICAgICAgYXV0byogdGVzdCA9IHN0YXRpY19jYXN0PElucHV0TWV0aG9kVGVzdCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgICAgIGlmICghZ19zdHJjbXAwKHRlc3QtPm1fY29udGV4dC0+c3Vy
cm91bmRpbmdUZXh0LCB0ZXN0LT5tX2V4cGVjdGVkU3Vycm91bmRpbmdUZXh0LmRhdGEoKSkpIHsK
KyAgICAgICAgICAgICAgICB0ZXN0LT5xdWl0TWFpbkxvb3AoKTsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRkFMU0U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBUUlVFOwor
ICAgICAgICB9LCB0aGlzKTsKKyAgICAgICAgZ19tYWluX2xvb3BfcnVuKG1fbWFpbkxvb3ApOwor
ICAgICAgICBtX2V4cGVjdGVkU3Vycm91bmRpbmdUZXh0ID0geyB9OworICAgIH0KKwogICAgIEdS
ZWZQdHI8V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0TW9jaz4gbV9jb250ZXh0OwogICAgIFZlY3Rv
cjxFdmVudD4gbV9ldmVudHM7CiAgICAgdW5zaWduZWQgbV9ldmVudHNFeHBlY3RlZCB7IDAgfTsK
KyAgICBDU3RyaW5nIG1fZXhwZWN0ZWRTdXJyb3VuZGluZ1RleHQ7CiB9OwogCiBzdGF0aWMgdm9p
ZCB0ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0U2ltcGxlKElucHV0TWV0aG9kVGVzdCogdGVz
dCwgZ2NvbnN0cG9pbnRlcikKQEAgLTY5MCw2ICs3MzYsODUgQEAgc3RhdGljIHZvaWQgdGVzdFdl
YktpdElucHV0TWV0aG9kQ29udGV4dENhbmNlbFNlcXVlbmNlKElucHV0TWV0aG9kVGVzdCogdGVz
dCwgZ2MKICAgICB0ZXN0LT5yZXNldEVkaXRhYmxlKCk7CiB9CiAKK3N0YXRpYyB2b2lkIHRlc3RX
ZWJLaXRJbnB1dE1ldGhvZENvbnRleHRTdXJyb3VuZGluZyhJbnB1dE1ldGhvZFRlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgdGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIG51bGxwdHIp
OworICAgIHRlc3QtPndhaXRVbnRpbExvYWRGaW5pc2hlZCgpOworCisgICAgdGVzdC0+Zm9jdXNF
ZGl0YWJsZUFuZFdhaXRVbnRpbElucHV0TWV0aG9kRW5hYmxlZCgpOworCisgICAgZ19hc3NlcnRf
bnVsbCh0ZXN0LT5zdXJyb3VuZGluZ1RleHQoKSk7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0
LT5zdXJyb3VuZGluZ0N1cnNvckluZGV4KCksID09LCAwKTsKKworICAgIHRlc3QtPmtleVN0cm9r
ZUFuZFdhaXRGb3JFdmVudHMoS0VZKGEpLCAzKTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0
Rm9yRXZlbnRzKEtFWShiKSwgNik7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50
cyhLRVkoYyksIDkpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5zdXJyb3VuZGluZ1RleHQo
KSwgPT0sICJhYmMiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3QtPnN1cnJvdW5kaW5nQ3Vy
c29ySW5kZXgoKSwgPT0sIDMpOworICAgIHRlc3QtPm1fZXZlbnRzLmNsZWFyKCk7CisKKyAgICAv
LyBDaGVjayBwcmVlZGl0IHN0cmluZyBpcyBub3QgaW5jbHVkZWQgaW4gc3Vycm91bmRpbmcuCisg
ICAgLy8gMS4gUHJlZWRpdCBzdHJpbmcgYXQgdGhlIGJlZ2lubmluZyBvZiBjb250ZXh0LgorICAg
IHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKExlZnQpLCAyKTsKKyAgICB0ZXN0
LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWShMZWZ0KSwgNCk7CisgICAgdGVzdC0+a2V5
U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhLRVkoTGVmdCksIDYpOworICAgIGdfYXNzZXJ0X2NtcHN0
cih0ZXN0LT5zdXJyb3VuZGluZ1RleHQoKSwgPT0sICJhYmMiKTsKKyAgICBnX2Fzc2VydF9jbXB1
aW50KHRlc3QtPnN1cnJvdW5kaW5nQ3Vyc29ySW5kZXgoKSwgPT0sIDApOworICAgIHRlc3QtPm1f
ZXZlbnRzLmNsZWFyKCk7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhLRVko
dyksIDQsIENPTlRST0xfTUFTSyB8IFNISUZUX01BU0spOworICAgIGdfYXNzZXJ0X2NtcHN0cih0
ZXN0LT5zdXJyb3VuZGluZ1RleHQoKSwgPT0sICJhYmMiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHRlc3QtPnN1cnJvdW5kaW5nQ3Vyc29ySW5kZXgoKSwgPT0sIDApOworICAgIHRlc3QtPmtleVN0
cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKGcpLCA3KTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRX
YWl0Rm9yRXZlbnRzKEtFWSh0KSwgMTApOworICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JF
dmVudHMoS0VZKGspLCAxMyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPnN1cnJvdW5kaW5n
VGV4dCgpLCA9PSwgImFiYyIpOworICAgIGdfYXNzZXJ0X2NtcHVpbnQodGVzdC0+c3Vycm91bmRp
bmdDdXJzb3JJbmRleCgpLCA9PSwgMCk7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2
ZW50cyhLRVkoSVNPX0VudGVyKSwgMTYpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5zdXJy
b3VuZGluZ1RleHQoKSwgPT0sICJXZWJLaXRHVEthYmMiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50
KHRlc3QtPnN1cnJvdW5kaW5nQ3Vyc29ySW5kZXgoKSwgPT0sIDkpOworICAgIHRlc3QtPm1fZXZl
bnRzLmNsZWFyKCk7CisgICAgLy8gMi4gUHJlZWRpdCBzdHJpbmcgaW4gdGhlIG1pZGRsZSBvZiBj
b250ZXh0LgorICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKHcpLCA0LCBD
T05UUk9MX01BU0sgfCBTSElGVF9NQVNLKTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+c3Vy
cm91bmRpbmdUZXh0KCksID09LCAiV2ViS2l0R1RLYWJjIik7CisgICAgZ19hc3NlcnRfY21wdWlu
dCh0ZXN0LT5zdXJyb3VuZGluZ0N1cnNvckluZGV4KCksID09LCA5KTsKKyAgICB0ZXN0LT5rZXlT
dHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWSh3KSwgNyk7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5k
V2FpdEZvckV2ZW50cyhLRVkocCksIDEwKTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9y
RXZlbnRzKEtFWShlKSwgMTMpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0LT5zdXJyb3VuZGlu
Z1RleHQoKSwgPT0sICJXZWJLaXRHVEthYmMiKTsKKyAgICBnX2Fzc2VydF9jbXB1aW50KHRlc3Qt
PnN1cnJvdW5kaW5nQ3Vyc29ySW5kZXgoKSwgPT0sIDkpOworICAgIHRlc3QtPmtleVN0cm9rZUFu
ZFdhaXRGb3JFdmVudHMoS0VZKHNwYWNlKSwgMTYpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5zdXJyb3VuZGluZ1RleHQoKSwgPT0sICJXZWJLaXRHVEtXUEVXZWJLaXRhYmMiKTsKKyAgICBn
X2Fzc2VydF9jbXB1aW50KHRlc3QtPnN1cnJvdW5kaW5nQ3Vyc29ySW5kZXgoKSwgPT0sIDE4KTsK
KyAgICB0ZXN0LT5tX2V2ZW50cy5jbGVhcigpOworICAgIC8vIDMuIFByZWVkaXQgc3RyaW5nIGF0
IHRoZSBlbmQgb2YgY29udGV4dC4KKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRz
KEtFWShSaWdodCksIDIpOworICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZ
KFJpZ2h0KSwgNCk7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhLRVkoUmln
aHQpLCA2KTsKKyAgICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+c3Vycm91bmRpbmdUZXh0KCksID09
LCAiV2ViS2l0R1RLV1BFV2ViS2l0YWJjIik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5z
dXJyb3VuZGluZ0N1cnNvckluZGV4KCksID09LCAyMSk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xl
YXIoKTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWSh3KSwgNCwgQ09O
VFJPTF9NQVNLIHwgU0hJRlRfTUFTSyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPnN1cnJv
dW5kaW5nVGV4dCgpLCA9PSwgIldlYktpdEdUS1dQRVdlYktpdGFiYyIpOworICAgIGdfYXNzZXJ0
X2NtcHVpbnQodGVzdC0+c3Vycm91bmRpbmdDdXJzb3JJbmRleCgpLCA9PSwgMjEpOworICAgIHRl
c3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKGcpLCA3KTsKKyAgICB0ZXN0LT5rZXlT
dHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWSh0KSwgMTApOworICAgIHRlc3QtPmtleVN0cm9rZUFu
ZFdhaXRGb3JFdmVudHMoS0VZKGspLCAxMyk7CisgICAgZ19hc3NlcnRfY21wc3RyKHRlc3QtPnN1
cnJvdW5kaW5nVGV4dCgpLCA9PSwgIldlYktpdEdUS1dQRVdlYktpdGFiYyIpOworICAgIGdfYXNz
ZXJ0X2NtcHVpbnQodGVzdC0+c3Vycm91bmRpbmdDdXJzb3JJbmRleCgpLCA9PSwgMjEpOworICAg
IHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMoS0VZKElTT19FbnRlciksIDE2KTsKKyAg
ICBnX2Fzc2VydF9jbXBzdHIodGVzdC0+c3Vycm91bmRpbmdUZXh0KCksID09LCAiV2ViS2l0R1RL
V1BFV2ViS2l0YWJjV2ViS2l0R1RLIik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5zdXJy
b3VuZGluZ0N1cnNvckluZGV4KCksID09LCAzMCk7CisgICAgdGVzdC0+bV9ldmVudHMuY2xlYXIo
KTsKKworICAgIC8vIENoZWNrIHRleHQgcmVwbGFjZW1lbnRzIChnZXQgc3Vycm91bmRpbmcgKyBk
ZWxldGUgc3Vycm91bmRpbmcpLgorICAgIHRlc3QtPmtleVN0cm9rZUFuZFdhaXRGb3JFdmVudHMo
S0VZKGNvbG9uKSwgMyk7CisgICAgdGVzdC0+a2V5U3Ryb2tlQW5kV2FpdEZvckV2ZW50cyhLRVko
bWludXMpLCA2KTsKKyAgICB0ZXN0LT5rZXlTdHJva2VBbmRXYWl0Rm9yRXZlbnRzKEtFWShwYXJl
bnJpZ2h0KSwgOSk7CisgICAgdGVzdC0+d2FpdEZvclN1cnJvdW5kaW5nVGV4dCgiV2ViS2l0R1RL
V1BFV2ViS2l0YWJjV2ViS2l0R1RL8J+YgO+4jyIpOworICAgIGdfYXNzZXJ0X2NtcHN0cih0ZXN0
LT5zdXJyb3VuZGluZ1RleHQoKSwgPT0sICJXZWJLaXRHVEtXUEVXZWJLaXRhYmNXZWJLaXRHVEvw
n5iA77iPIik7CisgICAgZ19hc3NlcnRfY21wdWludCh0ZXN0LT5zdXJyb3VuZGluZ0N1cnNvcklu
ZGV4KCksID09LCAzNyk7Cit9CisKIHN0YXRpYyB2b2lkIHRlc3RXZWJLaXRJbnB1dE1ldGhvZENv
bnRleHRSZXNldChJbnB1dE1ldGhvZFRlc3QqIHRlc3QsIGdjb25zdHBvaW50ZXIpCiB7CiAgICAg
dGVzdC0+bG9hZEh0bWwodGVzdEhUTUwsIG51bGxwdHIpOwpAQCAtODc4LDYgKzEwMDMsNyBAQCB2
b2lkIGJlZm9yZUFsbCgpCiAgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldlYktpdElucHV0TWV0
aG9kQ29udGV4dCIsICJzZXF1ZW5jZSIsIHRlc3RXZWJLaXRJbnB1dE1ldGhvZENvbnRleHRTZXF1
ZW5jZSk7CiAgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldlYktpdElucHV0TWV0aG9kQ29udGV4
dCIsICJpbnZhbGlkLXNlcXVlbmNlIiwgdGVzdFdlYktpdElucHV0TWV0aG9kQ29udGV4dEludmFs
aWRTZXF1ZW5jZSk7CiAgICAgSW5wdXRNZXRob2RUZXN0OjphZGQoIldlYktpdElucHV0TWV0aG9k
Q29udGV4dCIsICJjYW5jZWwtc2VxdWVuY2UiLCB0ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
Q2FuY2VsU2VxdWVuY2UpOworICAgIElucHV0TWV0aG9kVGVzdDo6YWRkKCJXZWJLaXRJbnB1dE1l
dGhvZENvbnRleHQiLCAic3Vycm91bmRpbmciLCB0ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0
U3Vycm91bmRpbmcpOwogICAgIElucHV0TWV0aG9kVGVzdDo6YWRkKCJXZWJLaXRJbnB1dE1ldGhv
ZENvbnRleHQiLCAicmVzZXQiLCB0ZXN0V2ViS2l0SW5wdXRNZXRob2RDb250ZXh0UmVzZXQpOwog
ICAgIElucHV0TWV0aG9kVGVzdDo6YWRkKCJXZWJLaXRJbnB1dE1ldGhvZENvbnRleHQiLCAiY29u
dGVudC10eXBlIiwgdGVzdFdlYktpdElucHV0TWV0aG9kQ29udGV4dENvbnRlbnRUeXBlKTsKIH0K
</data>
<flag name="review"
          id="402444"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>