<?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>176760</bug_id>
          
          <creation_ts>2017-09-11 18:17:37 -0700</creation_ts>
          <short_desc>[GTK] Need WebKitContextMenuItemType to open emoji picker</short_desc>
          <delta_ts>2019-05-17 08:10:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=197984</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cassidy</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>japhet</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1347763</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-11 18:17:37 -0700</bug_when>
    <thetext>We need a WebKitContextMenuItemType to open the emoji picker.

I&apos;m not planning to work on this soon, just reporting it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531611</commentid>
    <comment_count>1</comment_count>
    <who name="Cassidy James Blaede">cassidy</who>
    <bug_when>2019-04-30 11:43:37 -0700</bug_when>
    <thetext>Michael, would the keyboard shortcut in GTK to open the emoji-picker popover in text entries be the same issue, or a new one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1531718</commentid>
    <comment_count>2</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-04-30 15:05:48 -0700</bug_when>
    <thetext>Please report a different issue for the keyboard shortcut!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536775</commentid>
    <comment_count>3</comment_count>
      <attachid>370039</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-05-16 06:14:37 -0700</bug_when>
    <thetext>Created attachment 370039
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536776</commentid>
    <comment_count>4</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2019-05-16 06:17:25 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1536812</commentid>
    <comment_count>5</comment_count>
      <attachid>370039</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2019-05-16 08:54:42 -0700</bug_when>
    <thetext>Comment on attachment 370039
Patch

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

I&apos;ve asked the GTK devs to expose this for GTK 4, so maybe we&apos;ll only need to copy it for GTK 3 in the future.

Matthias suggests that we check the master branch for recent fixes to the emoji chooser to make it populate incrementally, which are still pending backport to GTK 3.

&gt; Source/WebKit/ChangeLog:9
&gt; +        context menu or keyboard shortcuts. GtkEmojiChooser is proivate in GTK, so we include our own copy, adapted to

private

&gt; Source/WebKit/ChangeLog:11
&gt; +        content. I&apos;m going to add public API in a follow up patch to be able to use your own chooser, or event prevent

even

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:232
&gt; +    CompletionHandler&lt;void(String)&gt; emojiChooserCompletionHandler;
&gt; +    RunLoop::Timer&lt;WebKitWebViewBasePrivate&gt; releaseEmojiChooserTimer;

What happens if the WebKitWebViewBase is destroyed before the timer fires? I assume the callback will not execute. So we will not gtk_widget_destroy() the emoji chooser in that case. But that should be fine, right? Because it&apos;s pointing relative to the WebKitWebViewBase, it should be disposed when the parent widget is destroyed?

What happens if the WebKitWebViewBase is destroyed before the emojiChooserCompletionHandler is called, i.e. when emojiChooserCompletionHandler is nonnull at time of destruction? I think the CompletionHandler destructor will assert and crash the UI process, right? We need to make sure the CompletionHandler is guaranteed to be called.

&gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1797
&gt; +    priv-&gt;releaseEmojiChooserTimer.startOneShot(2_min);

Irrelevant: I love this timer syntax. You can&apos;t screw up the units!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537066</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-05-17 01:35:07 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; Comment on attachment 370039 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=370039&amp;action=review
&gt; 
&gt; I&apos;ve asked the GTK devs to expose this for GTK 4, so maybe we&apos;ll only need
&gt; to copy it for GTK 3 in the future.

Yes, I asked about it some time ago too.

&gt; Matthias suggests that we check the master branch for recent fixes to the
&gt; emoji chooser to make it populate incrementally, which are still pending
&gt; backport to GTK 3.

Ok, I&apos;ll include fixes in a follow up then.

&gt; &gt; Source/WebKit/ChangeLog:9
&gt; &gt; +        context menu or keyboard shortcuts. GtkEmojiChooser is proivate in GTK, so we include our own copy, adapted to
&gt; 
&gt; private
&gt; 
&gt; &gt; Source/WebKit/ChangeLog:11
&gt; &gt; +        content. I&apos;m going to add public API in a follow up patch to be able to use your own chooser, or event prevent
&gt; 
&gt; even
&gt; 
&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:232
&gt; &gt; +    CompletionHandler&lt;void(String)&gt; emojiChooserCompletionHandler;
&gt; &gt; +    RunLoop::Timer&lt;WebKitWebViewBasePrivate&gt; releaseEmojiChooserTimer;
&gt; 
&gt; What happens if the WebKitWebViewBase is destroyed before the timer fires? I
&gt; assume the callback will not execute. So we will not gtk_widget_destroy()
&gt; the emoji chooser in that case. But that should be fine, right? Because it&apos;s
&gt; pointing relative to the WebKitWebViewBase, it should be disposed when the
&gt; parent widget is destroyed?

Yes, the timer si stopped in its destructor, so it won&apos;t fire if the web view is destroyed. In that case the popover is destroyed with its parent.

&gt; What happens if the WebKitWebViewBase is destroyed before the
&gt; emojiChooserCompletionHandler is called, i.e. when
&gt; emojiChooserCompletionHandler is nonnull at time of destruction? I think the
&gt; CompletionHandler destructor will assert and crash the UI process, right? We
&gt; need to make sure the CompletionHandler is guaranteed to be called.

I&apos;m not sure how can that happen because the popover is modal, so you need to close it first, to close the tab or window. I guess it could still be destroyed programatically somehow, so I&apos;ll complete the handler in the dispose.

&gt; &gt; Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp:1797
&gt; &gt; +    priv-&gt;releaseEmojiChooserTimer.startOneShot(2_min);
&gt; 
&gt; Irrelevant: I love this timer syntax. You can&apos;t screw up the units!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1537085</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2019-05-17 05:39:37 -0700</bug_when>
    <thetext>Committed r245460: &lt;https://trac.webkit.org/changeset/245460&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>370039</attachid>
            <date>2019-05-16 06:14:37 -0700</date>
            <delta_ts>2019-05-16 08:54:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkgtk-emoji-chooser.diff</filename>
            <type>text/plain</type>
            <size>62197</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNzU3ZjRmZTE3Yi4uZDhhZjZiYWU5OWUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMyBAQAorMjAxOS0wNS0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTmVlZCBXZWJLaXRDb250ZXh0TWVudUl0ZW1UeXBl
IHRvIG9wZW4gZW1vamkgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzY3NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBBZGQgYSBuZXcgY29udGV4dCBtZW51IGl0ZW0gdG8gaW5zZXJ0IGFuIGVt
b2ppLgorCisgICAgICAgICogbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHA6IEVtcHR5IGltcGxlbWVu
dGF0aW9uIG9mIENvbnRleHRNZW51Q2xpZW50OjppbnNlcnRFbW9qaSgpLgorICAgICAgICAqIHBh
Z2UvQ29udGV4dE1lbnVDbGllbnQuaDogQWRkIGluc2VydEVtb2ppIGZvciBHVEsgcG9ydC4KKyAg
ICAgICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKTogSGFuZGxl
IGluc2VydCBlbW9qaSBhY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRy
b2xsZXI6OnBvcHVsYXRlKTogQWRkIGluc2VydCBlbW9qaSBpdGVtIGFmdGVyIHNlbGVjdCBhbGwu
CisgICAgICAgIChXZWJDb3JlOjpDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJ
Zk5lZWRlZCBjb25zdCk6IEhhbmRsZSBpbnNlcnQgZW1vamkgYWN0aW9uLgorICAgICAgICAqIHBs
YXRmb3JtL0NvbnRleHRNZW51SXRlbS5oOiBBZGQgaW5zZXJ0IGVtb2ppIGFjdGlvbi4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9Mb2NhbGl6ZWRTdHJpbmdzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udGV4dE1lbnVJ
dGVtVGFnSW5zZXJ0RW1vamkpOgorCiAyMDE5LTA1LTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRnJlZVR5cGVdIFNvbWUgY2hhcmFjdGVy
IHNlcXVlbmNlcyB3aXRoIGEgdmFyaWF0aW9uIHNlbGVjdG9yIGFyZSBub3QgcmVuZGVyZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5jcHAKaW5kZXggNTVkMDgzZTk0MTIuLmE3NTRh
YWQyMmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmNwcApAQCAtMTA5LDYg
KzEwOSwxMCBAQCBjbGFzcyBFbXB0eUNvbnRleHRNZW51Q2xpZW50IGZpbmFsIDogcHVibGljIENv
bnRleHRNZW51Q2xpZW50IHsKICAgICB2b2lkIHNlYXJjaFdpdGhTcG90bGlnaHQoKSBmaW5hbCB7
IH0KICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgaW5zZXJ0RW1vamkoRnJh
bWUmKSBmaW5hbCB7IH0KKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VTU0lCSUxJVFlfQ09OVEVYVF9N
RU5VUykKICAgICB2b2lkIHNob3dDb250ZXh0TWVudSgpIGZpbmFsIHsgfQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q2xpZW50LmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q2xpZW50LmgKaW5kZXggODg5ZWU5OTc2MTIuLjVjNWQ1
MGE2MjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q2xpZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNsaWVudC5oCkBAIC00OSw2
ICs0OSwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNlYXJjaFdpdGhTcG90bGlnaHQo
KSA9IDA7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIHZvaWQgaW5z
ZXJ0RW1vamkoRnJhbWUmKSA9IDA7CisjZW5kaWYKKwogI2lmIFVTRShBQ0NFU1NJQklMSVRZX0NP
TlRFWFRfTUVOVVMpCiAgICAgdmlydHVhbCB2b2lkIHNob3dDb250ZXh0TWVudSgpID0gMDsKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCmlu
ZGV4IGJkN2EzZGIxOTliLi4xNTgyNTc1NjEyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
Q29udGV4dE1lbnVDb250cm9sbGVyLmNwcApAQCAtMzU3LDExICszNTcsMTIgQEAgdm9pZCBDb250
ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKENvbnRleHRNZW51QWN0
aW9uIGFjdGlvbiwgY28KICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGVJbnNlcnRa
V05KTWFyazoKICAgICAgICAgaW5zZXJ0VW5pY29kZUNoYXJhY3Rlcih6ZXJvV2lkdGhOb25Kb2lu
ZXIsICpmcmFtZSk7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQog
ICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsOgogICAgICAgICBmcmFtZS0+ZWRp
dG9yKCkuY29tbWFuZCgiU2VsZWN0QWxsIikuZXhlY3V0ZSgpOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0luc2VydEVtb2ppOgorICAgICAgICBtX2NsaWVudC5p
bnNlcnRFbW9qaSgqZnJhbWUpOworICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ29u
dGV4dE1lbnVJdGVtVGFnU3BlbGxpbmdHdWVzczogewogICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKQEAgLTgxMSw5ICs4
MTIsOCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogICAgIENvbnRl
eHRNZW51SXRlbSBQYXN0ZUl0ZW0oQWN0aW9uVHlwZSwgQ29udGV4dE1lbnVJdGVtVGFnUGFzdGUs
IGNvbnRleHRNZW51SXRlbVRhZ1Bhc3RlKCkpOwogI2lmIFBMQVRGT1JNKEdUSykKICAgICBDb250
ZXh0TWVudUl0ZW0gRGVsZXRlSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0TWVudUl0ZW1UYWdEZWxl
dGUsIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdU
SykKICAgICBDb250ZXh0TWVudUl0ZW0gU2VsZWN0QWxsSXRlbShBY3Rpb25UeXBlLCBDb250ZXh0
TWVudUl0ZW1UYWdTZWxlY3RBbGwsIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpKTsKKyAg
ICBDb250ZXh0TWVudUl0ZW0gSW5zZXJ0RW1vamlJdGVtKEFjdGlvblR5cGUsIENvbnRleHRNZW51
SXRlbVRhZ0luc2VydEVtb2ppLCBjb250ZXh0TWVudUl0ZW1UYWdJbnNlcnRFbW9qaSgpKTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShXSU4pCkBAIC0xMDQ5LDkgKzEw
NDksOCBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUoKQogI2lmIFBMQVRG
T1JNKEdUSykKICAgICAgICAgYXBwZW5kSXRlbShEZWxldGVJdGVtLCBtX2NvbnRleHRNZW51Lmdl
dCgpKTsKICAgICAgICAgYXBwZW5kSXRlbSgqc2VwYXJhdG9ySXRlbSgpLCBtX2NvbnRleHRNZW51
LmdldCgpKTsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKEdUSykKICAgICAgICAgYXBwZW5kSXRlbShT
ZWxlY3RBbGxJdGVtLCBtX2NvbnRleHRNZW51LmdldCgpKTsKKyAgICAgICAgYXBwZW5kSXRlbShJ
bnNlcnRFbW9qaUl0ZW0sIG1fY29udGV4dE1lbnUuZ2V0KCkpOwogI2VuZGlmCiAKICAgICAgICAg
aWYgKCFpblBhc3N3b3JkRmllbGQpIHsKQEAgLTEyMDYsNiArMTIwNSwxMCBAQCB2b2lkIENvbnRl
eHRNZW51Q29udHJvbGxlcjo6Y2hlY2tPckVuYWJsZUlmTmVlZGVkKENvbnRleHRNZW51SXRlbSYg
aXRlbSkgY29uc3QKICAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdEZWxldGU6CiAgICAg
ICAgICAgICBzaG91bGRFbmFibGUgPSBmcmFtZS0+ZWRpdG9yKCkuY2FuRGVsZXRlKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJbnNlcnRFbW9q
aToKKyAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9IGZyYW1lLT5lZGl0b3IoKS5jYW5FZGl0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdTZWxl
Y3RBbGw6CiAgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnSW5wdXRNZXRob2RzOgogICAg
ICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ1VuaWNvZGU6CiAgICAgICAgIGNhc2UgQ29udGV4
dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydExSTU1hcms6CkBAIC0xMjIwLDExICsxMjIzLDYgQEAg
dm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNoZWNrT3JFbmFibGVJZk5lZWRlZChDb250ZXh0
TWVudUl0ZW0mIGl0ZW0pIGNvbnN0CiAgICAgICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnVW5p
Y29kZUluc2VydFpXTkpNYXJrOgogICAgICAgICAgICAgc2hvdWxkRW5hYmxlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oR1RLKQotICAgICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKLSAgICAgICAgICAgIHNob3VsZEVuYWJsZSA9
IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKICNlbmRpZgogICAgICAgICBjYXNlIENvbnRleHRN
ZW51SXRlbVRhZ1VuZGVybGluZTogewogICAgICAgICAgICAgc2hvdWxkQ2hlY2sgPSBmcmFtZS0+
ZWRpdG9yKCkuc2VsZWN0aW9uSGFzU3R5bGUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCwgInVuZGVybGluZSIpICE9IEZhbHNlVHJpU3RhdGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5oCmluZGV4IDFiMGY3NDUwYjQ1Li5kNjMzZDIzNzY2
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ29udGV4dE1lbnVJdGVtLmgKQEAgLTY4LDYg
KzY4LDcgQEAgZW51bSBDb250ZXh0TWVudUFjdGlvbiB7CiAgICAgQ29udGV4dE1lbnVJdGVtVGFn
VW5pY29kZUluc2VydFpXU01hcmssCiAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2Vy
dFpXSk1hcmssCiAgICAgQ29udGV4dE1lbnVJdGVtVGFnVW5pY29kZUluc2VydFpXTkpNYXJrLAor
ICAgIENvbnRleHRNZW51SXRlbVRhZ0luc2VydEVtb2ppLAogI2VuZGlmCiAgICAgQ29udGV4dE1l
bnVJdGVtVGFnU3BlbGxpbmdHdWVzcywKICAgICBDb250ZXh0TWVudUl0ZW1UYWdOb0d1ZXNzZXNG
b3VuZCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmlu
Z3MuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xvY2FsaXplZFN0cmluZ3MuaAppbmRleCBl
ODAyOWZmOWM1MS4uOGE3YWM4OGM0MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0xvY2FsaXplZFN0cmluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Mb2Nh
bGl6ZWRTdHJpbmdzLmgKQEAgLTgzLDkgKzgzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IFN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldTTWFyaygpOwogICAgIFN0
cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldKTWFyaygpOwogICAgIFN0cmlu
ZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlSW5zZXJ0WldOSk1hcmsoKTsKLSNlbmRpZgotI2lm
IFBMQVRGT1JNKEdUSykKICAgICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnU2VsZWN0QWxsKCk7
CisgICAgU3RyaW5nIGNvbnRleHRNZW51SXRlbVRhZ0luc2VydEVtb2ppKCk7CiAjZW5kaWYKICAg
ICBTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnTm9HdWVzc2VzRm91bmQoKTsKICAgICBTdHJpbmcg
Y29udGV4dE1lbnVJdGVtVGFnSWdub3JlU3BlbGxpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAppbmRleCBlZTc0YjVhYjM4
YS4uMDdiN2Y0NzQxOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9M
b2NhbGl6ZWRTdHJpbmdzR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
TG9jYWxpemVkU3RyaW5nc0d0ay5jcHAKQEAgLTk4LDYgKzk4LDExIEBAIFN0cmluZyBjb250ZXh0
TWVudUl0ZW1UYWdTZWxlY3RBbGwoKQogICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIlNl
bGVjdCBfQWxsIikpOwogfQogCitTdHJpbmcgY29udGV4dE1lbnVJdGVtVGFnSW5zZXJ0RW1vamko
KQoreworICAgIHJldHVybiBTdHJpbmc6OmZyb21VVEY4KF8oIkluc2VydCBfRW1vamkiKSk7Cit9
CisKIFN0cmluZyBjb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlKCkKIHsKICAgICByZXR1cm4gU3Ry
aW5nOjpmcm9tVVRGOChfKCJfSW5zZXJ0IFVuaWNvZGUgQ29udHJvbCBDaGFyYWN0ZXIiKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwppbmRleCBkZDEwNGE4ZGY3My4u
MTZhODQxNTIxNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9wby9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDEyIEBACisyMDE5LTA1LTE2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJj
aWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBOZWVkIFdlYktpdENvbnRleHRNZW51SXRl
bVR5cGUgdG8gb3BlbiBlbW9qaSBwaWNrZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3Njc2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogUE9URklMRVMuaW46IEFkZCBXZWJLaXRFbW9qaUNob29zZXIu
Y3BwLgorCiAyMDE5LTA0LTMwICDDgWx2YXJvIFRvcnJhbGJhICA8ZG9uZnJ1dG9zZ29tZXpAZ21h
aWwuY29tPgogCiAgICAgICAgIFVwZGF0ZSBTcGFuaXNoIFRyYW5zbGF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklMRVMuaW4KaW5kZXggYTMyOWE1YmIwNmYuLmI1NGQy
MWQzNjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvcG8vUE9URklM
RVMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL3BvL1BPVEZJTEVTLmluCkBA
IC0zMSw2ICszMSw3IEBAIExvY2FsaXplZFN0cmluZ3NHdGsuY3BwCiAuLi8uLi8uLi9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL1dlYktpdFdpbmRvd1Byb3BlcnRpZXMuY3BwCiAuLi8uLi8uLi9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0QXV0aGVudGljYXRpb25EaWFsb2cuY3BwCiAu
Li8uLi8uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29sb3JDaG9vc2VyUmVxdWVz
dC5jcHAKKy4uLy4uLy4uL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFbW9qaUNob29z
ZXIuY3BwCiAuLi8uLi8uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJpbnRDdXN0
b21XaWRnZXQuY3BwCiAuLi8uLi8uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0UHJp
bnRPcGVyYXRpb24uY3BwCiAuLi8uLi8uLi9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
U2NyaXB0RGlhbG9nSW1wbC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZjlhYjQ3N2I2NGMuLmIzMGEyYzdhZGI3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDE5LTA1LTE2ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBOZWVkIFdlYktpdENv
bnRleHRNZW51SXRlbVR5cGUgdG8gb3BlbiBlbW9qaSBwaWNrZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njc2MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGRlZmF1bHQgaW1wbGVtZW50YXRp
b24gdG8gc2hvdyB0aGUgZW1vamkgY2hvb3NlciB3aGVuIHJlcXVlc3RlZCBieSB0aGUgYXBwbGlj
YXRpb24sIGVpdGhlciB1c2luZyB0aGUKKyAgICAgICAgY29udGV4dCBtZW51IG9yIGtleWJvYXJk
IHNob3J0Y3V0cy4gR3RrRW1vamlDaG9vc2VyIGlzIHByb2l2YXRlIGluIEdUSywgc28gd2UgaW5j
bHVkZSBvdXIgb3duIGNvcHksIGFkYXB0ZWQgdG8KKyAgICAgICAgdGhlIFdlYktpdCBjb2Rpbmcg
c3R5bGUuIFRoZSBlbW9qaSBjaG9vc2VyIGlzIGFsd2F5cyBzaG93biBieSBkZWZhdWx0IHdoZW4g
dXNpbmcgR1RLID49IDMuMjQgZm9yIGFueSBlZGl0YWJsZQorICAgICAgICBjb250ZW50LiBJJ20g
Z29pbmcgdG8gYWRkIHB1YmxpYyBBUEkgaW4gYSBmb2xsb3cgdXAgcGF0Y2ggdG8gYmUgYWJsZSB0
byB1c2UgeW91ciBvd24gY2hvb3Nlciwgb3IgZXZlbnQgcHJldmVudAorICAgICAgICB0aGUgZGVm
YXVsdCBjaG9vc2VyIGZyb20gYmVpbmcgc2hvd24sIHNpbWlsYXIgdG8gd2hhdCB3ZSBkbyBmb3Ig
b3RoZXIgVUkgZWxlbWVudHMgbGlrZSBmaWxlIGNob29zZXIsIGNvbG9yCisgICAgICAgIGNob29z
ZXIsIHByaW50IGRpYWxvZywgZXRjLgorCisgICAgICAgICogU2hhcmVkL0FQSS9nbGliL1dlYktp
dENvbnRleHRNZW51QWN0aW9ucy5jcHA6CisgICAgICAgICh3ZWJraXRDb250ZXh0TWVudUFjdGlv
bkdldEFjdGlvblRhZyk6IEhhbmRsZSBpbnNlcnQgZW1vamkgYWN0aW9uLgorICAgICAgICAod2Vi
a2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0pOiBEaXR0by4KKyAgICAg
ICAgKHdlYmtpdENvbnRleHRNZW51QWN0aW9uR2V0TGFiZWwpOiBEaXR0by4KKyAgICAgICAgKiBT
b3VyY2VzR1RLLnR4dDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUFjdGlvbnMuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRFbW9qaUNo
b29zZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdEVtb2ppQ2hvb3NlckFkZEVtb2ppKToK
KyAgICAgICAgKHdlYmtpdEVtb2ppQ2hvb3NlckFkZFJlY2VudEl0ZW0pOgorICAgICAgICAoZW1v
amlBY3RpdmF0ZWQpOgorICAgICAgICAoZW1vamlEYXRhSGFzVmFyaWF0aW9ucyk6CisgICAgICAg
ICh3ZWJraXRFbW9qaUNob29zZXJTaG93VmFyaWF0aW9ucyk6CisgICAgICAgIChlbW9qaUxvbmdQ
cmVzc2VkKToKKyAgICAgICAgKGVtb2ppUHJlc3NlZCk6CisgICAgICAgIChlbW9qaVBvcHVwTWVu
dSk6CisgICAgICAgICh2ZXJ0aWNhbEFkanVzdG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKHdlYmtp
dEVtb2ppQ2hvb3NlclNldHVwU2VjdGlvbkJveCk6CisgICAgICAgIChzY3JvbGxUb1NlY3Rpb24p
OgorICAgICAgICAod2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9uQnV0dG9uKToKKyAgICAg
ICAgKHdlYmtpdEVtb2ppQ2hvb3NlclNldHVwUmVjZW50KToKKyAgICAgICAgKHdlYmtpdEVtb2pp
Q2hvb3NlckVuc3VyZUVtcHR5UmVzdWx0KToKKyAgICAgICAgKHdlYmtpdEVtb2ppQ2hvb3NlclNl
YXJjaENoYW5nZWQpOgorICAgICAgICAod2Via2l0RW1vamlDaG9vc2VyU2V0dXBGaWx0ZXJzKToK
KyAgICAgICAgKHdlYmtpdEVtb2ppQ2hvb3NlckluaXRpYWxpemVFbW9qaU1heFdpZHRoKToKKyAg
ICAgICAgKHdlYmtpdEVtb2ppQ2hvb3NlckNvbnN0cnVjdGVkKToKKyAgICAgICAgKHdlYmtpdEVt
b2ppQ2hvb3NlclNob3cpOgorICAgICAgICAod2Via2l0X2Vtb2ppX2Nob29zZXJfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRFbW9qaUNob29zZXJOZXcpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nlci5oOiBBZGRlZC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHA6CisgICAgICAgIChfV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlOjpfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKTogQWRkIGEgdGltZXIgdG8g
cmVsZWFzZSB0aGUgZW1vamkgY2hvb3NlciBpZiBub3QgdXNlZAorICAgICAgICBhZnRlciAyIG1p
bnV0ZXMuCisgICAgICAgIChfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlOjpyZWxlYXNlRW1vamlD
aG9vc2VyVGltZXJGaXJlZCk6IERlc3Ryb3kgdGhlIGVtb2ppIGNob29zZXIuCisgICAgICAgIChl
bW9qaUNob29zZXJFbW9qaVBpY2tlZCk6IENvbXBsZXRlIHRoZSBvcGVyYXRpb24gdXNpbmcgdGhl
IGdpdmVuIGVtb2ppIHRleHQuCisgICAgICAgIChlbW9qaUNob29zZXJDbG9zZWQpOiBDb21wbGV0
ZSB0aGUgb3BlcmF0aW9uIGlmIG5lZWRlZCB1c2luZyBhbiBlbXB0eSBzdHJpbmcuCisgICAgICAg
ICh3ZWJraXRXZWJWaWV3QmFzZVNob3dFbW9qaUNob29zZXIpOiBDcmVhdGUgdGhlIGVtb2ppIGNo
b29zZXIgaWYgbmVlZGVkIGFuZCBzaG93IGl0LgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDogQWRkIHNob3dFbW9qaVBpY2tlcigpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQ
YWdlUHJveHkubWVzc2FnZXMuaW46IEFkZCBTaG93RW1vamlQaWNrZXIgbWVzc2FnZS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvZ3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6aW5zZXJ0RW1vamlDYWxsYmFjayk6IEFkZCBHdGtJbnNlcnRFbW9qaSBjb21tYW5kLgor
ICAgICAgICAoV2ViS2l0OjpLZXlCaW5kaW5nVHJhbnNsYXRvcjo6S2V5QmluZGluZ1RyYW5zbGF0
b3IpOiBDb25uZWN0IHRvIGluc2VydC1lbW9qaSBzaWduYWwuCisgICAgICAgICogVUlQcm9jZXNz
L2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6
OnNob3dFbW9qaVBpY2tlcik6IENhbGwgd2Via2l0V2ViVmlld0Jhc2VTaG93RW1vamlDaG9vc2Vy
KCkuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNs
aWVudC5oOiBPdmVycmlkZSBpbnNlcnRFbW9qaSgpIGZvciBHVEsgcG9ydC4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oOiBBZGQgaW5zZXJ0RW1v
amkoKSBmb3IgR1RLIHBvcnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJDb250
ZXh0TWVudUNsaWVudDo6aW5zZXJ0RW1vamkpOiBDYWxsIFdlYlBhZ2U6OnNob3dFbW9qaVBpY2tl
cigpLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNs
aWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVkaXRvckNsaWVudDo6aGFuZGxlR3Rr
RWRpdG9yQ29tbWFuZCk6IENhbGwgV2ViUGFnZTo6c2hvd0Vtb2ppUGlja2VyKCkgaWYgY29tbWFu
ZCBpcyBHdGtJbnNlcnRFbW9qaS4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50Ojpl
eGVjdXRlUGVuZGluZ0VkaXRvckNvbW1hbmRzKTogSGFuZGxlIEd0ayBzcGVjaWZpYyBjb21tYW5k
cy4KKyAgICAgICAgKFdlYktpdDo6V2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVLZXlib2FyZEV2ZW50
KTogVXNlIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIGZvciBGcmFtZS4KKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9ndGsvV2ViUGFnZUd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnNo
b3dFbW9qaVBpY2tlcik6IFNlbmQgU2hvd0Vtb2ppUGlja2VyIG1lc3NhZ2UgdG8gdGhlIFVJIHBy
b2Nlc3MuCisKIDIwMTktMDUtMTUgIERldmluIFJvdXNzbyAgPGRyb3Vzc29AYXBwbGUuY29tPgog
CiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IHVzZXIgZ2VzdHVyZSB0b2dnbGUgc2hvdWxkIGFsc28g
Zm9yY2UgdXNlciBpbnRlcmFjdGlvbiBmbGFnCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvZ2xpYi9XZWJLaXRDb250ZXh0TWVudUFjdGlvbnMuY3BwIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvQVBJL2dsaWIvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmNwcAppbmRleCBkYzU3
ZDUzMThmYy4uMjE1MGU4OTI1OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQ
SS9nbGliL1dlYktpdENvbnRleHRNZW51QWN0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvQVBJL2dsaWIvV2ViS2l0Q29udGV4dE1lbnVBY3Rpb25zLmNwcApAQCAtODMsNiArODMs
OCBAQCBDb250ZXh0TWVudUFjdGlvbiB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldEFjdGlvblRh
ZyhXZWJLaXRDb250ZXh0TWVudUFjdGlvbiBhYwogICAgICAgICByZXR1cm4gQ29udGV4dE1lbnVJ
dGVtVGFnRGVsZXRlOwogICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNU
X0FMTDoKICAgICAgICAgcmV0dXJuIENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDsKKyAgICBj
YXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOU0VSVF9FTU9KSToKKyAgICAgICAgcmV0
dXJuIENvbnRleHRNZW51SXRlbVRhZ0luc2VydEVtb2ppOwogICAgIGNhc2UgV0VCS0lUX0NPTlRF
WFRfTUVOVV9BQ1RJT05fSU5QVVRfTUVUSE9EUzoKICAgICAgICAgcmV0dXJuIENvbnRleHRNZW51
SXRlbVRhZ0lucHV0TWV0aG9kczsKICAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9O
X1VOSUNPREU6CkBAIC0xODMsNiArMTg1LDggQEAgV2ViS2l0Q29udGV4dE1lbnVBY3Rpb24gd2Vi
a2l0Q29udGV4dE1lbnVBY3Rpb25HZXRGb3JDb250ZXh0TWVudUl0ZW0oY29uc3QgV2ViS2kKICAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RFTEVURTsKICAgICBjYXNl
IENvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbDoKICAgICAgICAgcmV0dXJuIFdFQktJVF9DT05U
RVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEw7CisgICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdJ
bnNlcnRFbW9qaToKKyAgICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lO
U0VSVF9FTU9KSTsKICAgICBjYXNlIENvbnRleHRNZW51SXRlbVRhZ0lucHV0TWV0aG9kczoKICAg
ICAgICAgcmV0dXJuIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0lOUFVUX01FVEhPRFM7CiAg
ICAgY2FzZSBDb250ZXh0TWVudUl0ZW1UYWdVbmljb2RlOgpAQCAtMjgxLDYgKzI4NSw4IEBAIFN0
cmluZyB3ZWJraXRDb250ZXh0TWVudUFjdGlvbkdldExhYmVsKFdlYktpdENvbnRleHRNZW51QWN0
aW9uIGFjdGlvbikKICAgICAgICAgcmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ0RlbGV0ZSgpOwog
ICAgIGNhc2UgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fU0VMRUNUX0FMTDoKICAgICAgICAg
cmV0dXJuIGNvbnRleHRNZW51SXRlbVRhZ1NlbGVjdEFsbCgpOworICAgIGNhc2UgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fSU5TRVJUX0VNT0pJOgorICAgICAgICByZXR1cm4gY29udGV4dE1l
bnVJdGVtVGFnSW5zZXJ0RW1vamkoKTsKICAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNU
SU9OX0lOUFVUX01FVEhPRFM6CiAgICAgICAgIHJldHVybiBjb250ZXh0TWVudUl0ZW1UYWdJbnB1
dE1ldGhvZHMoKTsKICAgICBjYXNlIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1VOSUNPREU6
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NvdXJjZXNHVEsudHh0IGIvU291cmNlL1dlYktp
dC9Tb3VyY2VzR1RLLnR4dAppbmRleCA3YzNkODZmZmI1ZC4uOGI1MzY3ZjMwN2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU291cmNlc0dUSy50eHQKKysrIGIvU291cmNlL1dlYktpdC9Tb3Vy
Y2VzR1RLLnR4dApAQCAtMTg5LDYgKzE4OSw3IEBAIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEF1dGhlbnRpY2F0
aW9uRGlhbG9nLmNwcCBAbm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbG9yQ2hv
b3Nlci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb2xvckNob29zZXJS
ZXF1ZXN0LmNwcCBAbm8tdW5pZnkKK1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nl
ci5jcHAgQG5vLXVuaWZ5CiBVSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRPcHRpb25NZW51LmNwcCBA
bm8tdW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdE9wdGlvbk1lbnVJdGVtLmNwcCBAbm8t
dW5pZnkKIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFBvcHVwTWVudS5jcHAgQG5vLXVuaWZ5CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdENvbnRleHRN
ZW51QWN0aW9ucy5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250
ZXh0TWVudUFjdGlvbnMuaAppbmRleCA2MWRjMjQzOTlhMi4uNDhjOGZkZGU5OGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0Q29udGV4dE1lbnVBY3Rp
b25zLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRDb250ZXh0
TWVudUFjdGlvbnMuaApAQCAtNzQsNiArNzQsNyBAQCBHX0JFR0lOX0RFQ0xTCiAgKiBAV0VCS0lU
X0NPTlRFWFRfTUVOVV9BQ1RJT05fTUVESUFfTVVURTogTXV0ZSBjdXJyZW50IG1lZGlhIGVsZW1l
bnQuCiAgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURfVklERU9fVE9fRElT
SzogRG93bmxvYWQgdmlkZW8gdG8gZGlzay4gU2luY2UgMi4yCiAgKiBAV0VCS0lUX0NPTlRFWFRf
TUVOVV9BQ1RJT05fRE9XTkxPQURfQVVESU9fVE9fRElTSzogRG93bmxvYWQgYXVkaW8gdG8gZGlz
ay4gU2luY2UgMi4yCisgKiBAV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5TRVJUX0VNT0pJ
OiBJbnNlcnQgYW4gZW1vamkuIFNpbmNlIDIuMjYKICAqIEBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9DVVNUT006IEN1c3RvbSBhY3Rpb24gZGVmaW5lZCBieSBhcHBsaWNhdGlvbnMuCiAgKgog
ICogRW51bSB2YWx1ZXMgdXNlZCB0byBkZW5vdGUgdGhlIHN0b2NrIGFjdGlvbnMgZm9yCkBAIC0x
MjUsNiArMTI2LDcgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FD
VElPTl9NRURJQV9NVVRFLAogICAgIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX0RPV05MT0FE
X1ZJREVPX1RPX0RJU0ssCiAgICAgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fRE9XTkxPQURf
QVVESU9fVE9fRElTSywKKyAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9JTlNFUlRfRU1P
SkksCiAKICAgICBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9DVVNUT00gPSAxMDAwMAogfSBX
ZWJLaXRDb250ZXh0TWVudUFjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RW1vamlDaG9vc2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0RW1vamlDaG9vc2VyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMC4uNGU3NDFkNmJhOTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nlci5jcHAKQEAgLTAsMCAr
MSw2MDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqIENvcHly
aWdodCAoQykgMjAxNyBSZWQgSGF0LCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKy8vIEd0a0Vtb2ppQ2hvb3NlciBpcyBwcml2YXRl
IGluIEdUSyAzLCBzbyB0aGlzIGlzIGJhc2VkIGluIHRoZSBHVEsgY29kZSwganVzdCBhZGFwdGVk
IHRvCisvLyBXZWJLaXQgY29kaW5nIHN0eWxlLCB1c2luZyBzb21lIGludGVybmFsIHR5cGVzIGZy
b20gV1RGIHRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbgorLy8gYW5kIG5vdCB1c2luZyBH
dGtCdWlsZGVyIGZvciB0aGUgVUkuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJLaXRFbW9qaUNob29zZXIuaCIKKworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDI0LCAwKQor
CisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdU
eXBlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitlbnVtIHsKKyAgICBFTU9K
SV9QSUNLRUQsCisKKyAgICBMQVNUX1NJR05BTAorfTsKKworc3RydWN0IEVtb2ppU2VjdGlvbiB7
CisgICAgR3RrV2lkZ2V0KiBoZWFkaW5nIHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogYm94
IHsgbnVsbHB0ciB9OworICAgIEd0a1dpZGdldCogYnV0dG9uIHsgbnVsbHB0ciB9OworICAgIGJv
b2wgaXNFbXB0eSB7IGZhbHNlIH07Cit9OworCit1c2luZyBTZWN0aW9uTGlzdCA9IFZlY3RvcjxF
bW9qaVNlY3Rpb24sIDk+OworCitzdHJ1Y3QgX1dlYktpdEVtb2ppQ2hvb3NlclByaXZhdGUgewor
ICAgIEd0a1dpZGdldCogc3RhY2s7CisgICAgR3RrV2lkZ2V0KiBzd2luZG93OworICAgIEd0a1dp
ZGdldCogc2VhcmNoRW50cnk7CisgICAgU2VjdGlvbkxpc3Qgc2VjdGlvbnM7CisgICAgR1JlZlB0
cjxHU2V0dGluZ3M+IHNldHRpbmdzOworICAgIEhhc2hTZXQ8R1JlZlB0cjxHdGtHZXN0dXJlPj4g
Z2VzdHVyZXM7CisgICAgaW50IGVtb2ppTWF4V2lkdGg7Cit9OworCitzdGF0aWMgZ3VpbnQgc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CisKK1dFQktJVF9ERUZJTkVfVFlQRShXZWJLaXRF
bW9qaUNob29zZXIsIHdlYmtpdF9lbW9qaV9jaG9vc2VyLCBHVEtfVFlQRV9QT1BPVkVSKQorCitz
dGF0aWMgdm9pZCBlbW9qaVBvcHVwTWVudShHdGtXaWRnZXQqLCBXZWJLaXRFbW9qaUNob29zZXIq
KTsKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGJveFNwYWNlID0gNjsKKworc3RhdGljIHZvaWQg
ZW1vamlIb3ZlcmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudCogZXZlbnQpCit7CisgICAg
aWYgKGV2ZW50LT50eXBlID09IEdES19FTlRFUl9OT1RJRlkpCisgICAgICAgIGd0a193aWRnZXRf
c2V0X3N0YXRlX2ZsYWdzKHdpZGdldCwgR1RLX1NUQVRFX0ZMQUdfUFJFTElHSFQsIEZBTFNFKTsK
KyAgICBlbHNlCisgICAgICAgIGd0a193aWRnZXRfdW5zZXRfc3RhdGVfZmxhZ3Mod2lkZ2V0LCBH
VEtfU1RBVEVfRkxBR19QUkVMSUdIVCk7Cit9CisKK3N0YXRpYyBHdGtXaWRnZXQqIHdlYmtpdEVt
b2ppQ2hvb3NlckFkZEVtb2ppKFdlYktpdEVtb2ppQ2hvb3NlciogY2hvb3NlciwgR3RrRmxvd0Jv
eCogcGFyZW50LCBHVmFyaWFudCogaXRlbSwgYm9vbCBwcmVwZW5kID0gZmFsc2UsIGd1bmljaGFy
IG1vZGlmaWVyID0gMCkKK3sKKyAgICBjaGFyIHRleHRbNjRdOworICAgIGNoYXIqIHRleHRQdHIg
PSB0ZXh0OworICAgIEdSZWZQdHI8R1ZhcmlhbnQ+IGNvZGVzID0gYWRvcHRHUmVmKGdfdmFyaWFu
dF9nZXRfY2hpbGRfdmFsdWUoaXRlbSwgMCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBnX3ZhcmlhbnRfbl9jaGlsZHJlbihjb2Rlcy5nZXQoKSk7ICsraSkgeworICAgICAgICBndW5p
Y2hhciBjb2RlOworICAgICAgICBnX3ZhcmlhbnRfZ2V0X2NoaWxkKGNvZGVzLmdldCgpLCBpLCAi
dSIsICZjb2RlKTsKKyAgICAgICAgaWYgKCFjb2RlKQorICAgICAgICAgICAgY29kZSA9IG1vZGlm
aWVyOworICAgICAgICBpZiAoY29kZSkKKyAgICAgICAgICAgIHRleHRQdHIgKz0gZ191bmljaGFy
X3RvX3V0ZjgoY29kZSwgdGV4dFB0cik7CisgICAgfQorICAgIC8vIFUrRkUwRiBpcyB0aGUgRW1v
amkgdmFyaWF0aW9uIHNlbGVjdG9yCisgICAgdGV4dFB0ciArPSBnX3VuaWNoYXJfdG9fdXRmOCgw
eEZFMEYsIHRleHRQdHIpOworICAgIHRleHRQdHJbMF0gPSAnXDAnOworCisgICAgR3RrV2lkZ2V0
KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcodGV4dCk7CisgICAgUGFuZ29BdHRyTGlzdCogYXR0cmli
dXRlcyA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0
KGF0dHJpYnV0ZXMsIHBhbmdvX2F0dHJfc2NhbGVfbmV3KFBBTkdPX1NDQUxFX1hfTEFSR0UpKTsK
KyAgICBndGtfbGFiZWxfc2V0X2F0dHJpYnV0ZXMoR1RLX0xBQkVMKGxhYmVsKSwgYXR0cmlidXRl
cyk7CisgICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGF0dHJpYnV0ZXMpOworCisgICAgUGFuZ29M
YXlvdXQqIGxheW91dCA9IGd0a19sYWJlbF9nZXRfbGF5b3V0KEdUS19MQUJFTChsYWJlbCkpOwor
ICAgIFBhbmdvUmVjdGFuZ2xlIHJlY3Q7CisgICAgcGFuZ29fbGF5b3V0X2dldF9leHRlbnRzKGxh
eW91dCwgJnJlY3QsIG51bGxwdHIpOworICAgIC8vIENoZWNrIGZvciBmYWxsYmFjayByZW5kZXJp
bmcgdGhhdCBnZW5lcmF0ZXMgdG9vIHdpZGUgaXRlbXMuCisgICAgaWYgKHBhbmdvX2xheW91dF9n
ZXRfdW5rbm93bl9nbHlwaHNfY291bnQobGF5b3V0KSB8fCByZWN0LndpZHRoID49IDEuNSAqIGNo
b29zZXItPnByaXYtPmVtb2ppTWF4V2lkdGgpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9kZXN0cm95
KGxhYmVsKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgR3RrV2lkZ2V0
KiBjaGlsZCA9IGd0a19mbG93X2JveF9jaGlsZF9uZXcoKTsKKyAgICBndGtfc3R5bGVfY29udGV4
dF9hZGRfY2xhc3MoZ3RrX3dpZGdldF9nZXRfc3R5bGVfY29udGV4dChjaGlsZCksICJlbW9qaSIp
OworICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1QoY2hpbGQpLCAiZW1vamktZGF0
YSIsIGdfdmFyaWFudF9yZWYoaXRlbSksIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGdfdmFyaWFudF91bnJlZikpOworICAgIGlmIChtb2RpZmllcikKKyAgICAgICAgZ19vYmplY3Rf
c2V0X2RhdGEoR19PQkpFQ1QoY2hpbGQpLCAibW9kaWZpZXIiLCBHVUlOVF9UT19QT0lOVEVSKG1v
ZGlmaWVyKSk7CisKKyAgICBHdGtXaWRnZXQqIGV2ZW50Qm94ID0gZ3RrX2V2ZW50X2JveF9uZXco
KTsKKyAgICBndGtfd2lkZ2V0X2FkZF9ldmVudHMoZXZlbnRCb3gsIEdES19FTlRFUl9OT1RJRllf
TUFTSyB8IEdES19MRUFWRV9OT1RJRllfTUFTSyk7CisgICAgZ19zaWduYWxfY29ubmVjdChldmVu
dEJveCwgImVudGVyLW5vdGlmeS1ldmVudCIsIEdfQ0FMTEJBQ0soZW1vamlIb3ZlcmVkKSwgbnVs
bHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdChldmVudEJveCwgImxlYXZlLW5vdGlmeS1ldmVu
dCIsIEdfQ0FMTEJBQ0soZW1vamlIb3ZlcmVkKSwgbnVsbHB0cik7CisgICAgZ3RrX2NvbnRhaW5l
cl9hZGQoR1RLX0NPTlRBSU5FUihldmVudEJveCksIGxhYmVsKTsKKyAgICBndGtfd2lkZ2V0X3No
b3cobGFiZWwpOworCisgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjaGlsZCks
IGV2ZW50Qm94KTsKKyAgICBndGtfd2lkZ2V0X3Nob3coZXZlbnRCb3gpOworCisgICAgZ3RrX2Zs
b3dfYm94X2luc2VydChwYXJlbnQsIGNoaWxkLCBwcmVwZW5kID8gMCA6IC0xKTsKKyAgICBndGtf
d2lkZ2V0X3Nob3coY2hpbGQpOworCisgICAgcmV0dXJuIGNoaWxkOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRFbW9qaUNob29zZXJBZGRSZWNlbnRJdGVtKFdlYktpdEVtb2ppQ2hvb3NlciogY2hv
b3NlciwgR1ZhcmlhbnQqIGl0ZW0sIGd1bmljaGFyIG1vZGlmaWVyKQoreworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IHByb3RlY3RJdGVtKGl0ZW0pOworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVy
OworICAgIGdfdmFyaWFudF9idWlsZGVyX2luaXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFKCJh
KChhdXNzKXUpIikpOworICAgIGdfdmFyaWFudF9idWlsZGVyX2FkZCgmYnVpbGRlciwgIihAKGF1
c3MpdSkiLCBpdGVtLCBtb2RpZmllcik7CisKKyAgICBhdXRvJiBzZWN0aW9uID0gY2hvb3Nlci0+
cHJpdi0+c2VjdGlvbnMuZmlyc3QoKTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhS
ZWNlbnRJdGVtcyA9IDcgKiAzOworCisgICAgR1VuaXF1ZVB0cjxHTGlzdD4gY2hpbGRyZW4oZ3Rr
X2NvbnRhaW5lcl9nZXRfY2hpbGRyZW4oR1RLX0NPTlRBSU5FUihzZWN0aW9uLmJveCkpKTsKKyAg
ICB1bnNpZ25lZCBpID0gMTsKKyAgICBmb3IgKGF1dG8qIGwgPSBjaGlsZHJlbi5nZXQoKTsgbDsg
bCA9IGdfbGlzdF9uZXh0KGwpLCArK2kpIHsKKyAgICAgICAgYXV0byogaXRlbTIgPSBzdGF0aWNf
Y2FzdDxHVmFyaWFudCo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGwtPmRhdGEpLCAiZW1v
amktZGF0YSIpKTsKKyAgICAgICAgYXV0byBtb2RpZmllcjIgPSBzdGF0aWNfY2FzdDxndW5pY2hh
cj4oR1BPSU5URVJfVE9fVUlOVChnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChsLT5kYXRhKSwg
Im1vZGlmaWVyIikpKTsKKyAgICAgICAgaWYgKG1vZGlmaWVyID09IG1vZGlmaWVyMiAmJiBnX3Zh
cmlhbnRfZXF1YWwoaXRlbSwgaXRlbTIpKSB7CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3koR1RLX1dJREdFVChsLT5kYXRhKSk7CisgICAgICAgICAgICAtLWk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpID49IG1heFJlY2VudEl0ZW1zKSB7
CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koR1RLX1dJREdFVChsLT5kYXRhKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZCgmYnVpbGRlciwgIihAKGF1c3MpdSkiLCBpdGVtMiwgbW9kaWZpZXIyKTsKKyAgICB9
CisKKyAgICBhdXRvKiBjaGlsZCA9IHdlYmtpdEVtb2ppQ2hvb3NlckFkZEVtb2ppKGNob29zZXIs
IEdUS19GTE9XX0JPWChzZWN0aW9uLmJveCksIGl0ZW0sIHRydWUsIG1vZGlmaWVyKTsKKyAgICBp
ZiAoY2hpbGQpCisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2hpbGQsICJwb3B1cC1tZW51Iiwg
R19DQUxMQkFDSyhlbW9qaVBvcHVwTWVudSksIGNob29zZXIpOworCisgICAgZ3RrX3dpZGdldF9z
aG93KHNlY3Rpb24uYm94KTsKKyAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRpdmUoc2VjdGlvbi5i
dXR0b24sIFRSVUUpOworCisgICAgZ19zZXR0aW5nc19zZXRfdmFsdWUoY2hvb3Nlci0+cHJpdi0+
c2V0dGluZ3MuZ2V0KCksICJyZWNlbnQtZW1vamkiLCBnX3ZhcmlhbnRfYnVpbGRlcl9lbmQoJmJ1
aWxkZXIpKTsKK30KKworc3RhdGljIHZvaWQgZW1vamlBY3RpdmF0ZWQoR3RrRmxvd0JveCogYm94
LCBHdGtGbG93Qm94Q2hpbGQqIGNoaWxkLCBXZWJLaXRFbW9qaUNob29zZXIqIGNob29zZXIpCit7
CisgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19iaW5fZ2V0X2NoaWxkKEdUS19CSU4oZ3RrX2Jp
bl9nZXRfY2hpbGQoR1RLX0JJTihjaGlsZCkpKSk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiB0ZXh0
KGdfc3RyZHVwKGd0a19sYWJlbF9nZXRfbGFiZWwoR1RLX0xBQkVMKGxhYmVsKSkpKTsKKworICAg
IGF1dG8qIGl0ZW0gPSBzdGF0aWNfY2FzdDxHVmFyaWFudCo+KGdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGNoaWxkKSwgImVtb2ppLWRhdGEiKSk7CisgICAgYXV0byBtb2RpZmllciA9IHN0YXRp
Y19jYXN0PGd1bmljaGFyPihHUE9JTlRFUl9UT19VSU5UKGdfb2JqZWN0X2dldF9kYXRhKEdfT0JK
RUNUKGNoaWxkKSwgIm1vZGlmaWVyIikpKTsKKyAgICB3ZWJraXRFbW9qaUNob29zZXJBZGRSZWNl
bnRJdGVtKGNob29zZXIsIGl0ZW0sIG1vZGlmaWVyKTsKKyAgICBnX3NpZ25hbF9lbWl0KGNob29z
ZXIsIHNpZ25hbHNbRU1PSklfUElDS0VEXSwgMCwgdGV4dC5nZXQoKSk7CisKKyAgICBndGtfcG9w
b3Zlcl9wb3Bkb3duKEdUS19QT1BPVkVSKGNob29zZXIpKTsKK30KKworc3RhdGljIGJvb2wgZW1v
amlEYXRhSGFzVmFyaWF0aW9ucyhHVmFyaWFudCogZW1vamlEYXRhKQoreworICAgIEdSZWZQdHI8
R1ZhcmlhbnQ+IGNvZGVzID0gYWRvcHRHUmVmKGdfdmFyaWFudF9nZXRfY2hpbGRfdmFsdWUoZW1v
amlEYXRhLCAwKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBnX3ZhcmlhbnRfbl9jaGls
ZHJlbihjb2Rlcy5nZXQoKSk7ICsraSkgeworICAgICAgICBndW5pY2hhciBjb2RlOworICAgICAg
ICBnX3ZhcmlhbnRfZ2V0X2NoaWxkKGNvZGVzLmdldCgpLCBpLCAidSIsICZjb2RlKTsKKyAgICAg
ICAgaWYgKCFjb2RlKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RW1vamlDaG9vc2VyU2hvd1ZhcmlhdGlv
bnMoV2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyLCBHdGtXaWRnZXQqIGNoaWxkKQoreworICAg
IGlmICghY2hpbGQpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8qIGVtb2ppRGF0YSA9IHN0
YXRpY19jYXN0PEdWYXJpYW50Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoY2hpbGQpLCAi
ZW1vamktZGF0YSIpKTsKKyAgICBpZiAoIWVtb2ppRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKCFlbW9qaURhdGFIYXNWYXJpYXRpb25zKGVtb2ppRGF0YSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIEd0a1dpZGdldCogcG9wb3ZlciA9IGd0a19wb3BvdmVyX25ldyhjaGlsZCk7Cisg
ICAgR3RrV2lkZ2V0KiB2aWV3ID0gZ3RrX2JveF9uZXcoR1RLX09SSUVOVEFUSU9OX0hPUklaT05U
QUwsIDApOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhndGtfd2lkZ2V0X2dldF9z
dHlsZV9jb250ZXh0KHZpZXcpLCAidmlldyIpOworICAgIEd0a1dpZGdldCogYm94ID0gZ3RrX2Zs
b3dfYm94X25ldygpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYm94LCAiY2hpbGQtYWN0aXZhdGVk
IiwgR19DQUxMQkFDSyhlbW9qaUFjdGl2YXRlZCksIGNob29zZXIpOworICAgIGd0a19mbG93X2Jv
eF9zZXRfaG9tb2dlbmVvdXMoR1RLX0ZMT1dfQk9YKGJveCksIFRSVUUpOworICAgIGd0a19mbG93
X2JveF9zZXRfbWluX2NoaWxkcmVuX3Blcl9saW5lKEdUS19GTE9XX0JPWChib3gpLCA2KTsKKyAg
ICBndGtfZmxvd19ib3hfc2V0X21heF9jaGlsZHJlbl9wZXJfbGluZShHVEtfRkxPV19CT1goYm94
KSwgNik7CisgICAgZ3RrX2Zsb3dfYm94X3NldF9hY3RpdmF0ZV9vbl9zaW5nbGVfY2xpY2soR1RL
X0ZMT1dfQk9YKGJveCksIFRSVUUpOworICAgIGd0a19mbG93X2JveF9zZXRfc2VsZWN0aW9uX21v
ZGUoR1RLX0ZMT1dfQk9YKGJveCksIEdUS19TRUxFQ1RJT05fTk9ORSk7CisgICAgZ3RrX2NvbnRh
aW5lcl9hZGQoR1RLX0NPTlRBSU5FUih2aWV3KSwgYm94KTsKKyAgICBndGtfd2lkZ2V0X3Nob3co
Ym94KTsKKyAgICBndGtfY29udGFpbmVyX2FkZChHVEtfQ09OVEFJTkVSKHBvcG92ZXIpLCB2aWV3
KTsKKyAgICBndGtfd2lkZ2V0X3Nob3codmlldyk7CisKKyAgICB3ZWJraXRFbW9qaUNob29zZXJB
ZGRFbW9qaShjaG9vc2VyLCBHVEtfRkxPV19CT1goYm94KSwgZW1vamlEYXRhKTsKKyAgICBmb3Ig
KGd1bmljaGFyIG1vZGlmaWVyID0gMHgxRjNGQjsgbW9kaWZpZXIgPD0gMHgxRjNGRjsgKyttb2Rp
ZmllcikKKyAgICAgICAgd2Via2l0RW1vamlDaG9vc2VyQWRkRW1vamkoY2hvb3NlciwgR1RLX0ZM
T1dfQk9YKGJveCksIGVtb2ppRGF0YSwgbW9kaWZpZXIpOworCisgICAgZ3RrX3BvcG92ZXJfcG9w
dXAoR1RLX1BPUE9WRVIocG9wb3ZlcikpOworfQorCitzdGF0aWMgdm9pZCBlbW9qaUxvbmdQcmVz
c2VkKEd0a0dlc3R1cmUqIGdlc3R1cmUsIGRvdWJsZSB4LCBkb3VibGUgeSwgV2ViS2l0RW1vamlD
aG9vc2VyKiBjaG9vc2VyKQoreworICAgIGF1dG8qIGJveCA9IEdUS19GTE9XX0JPWChndGtfZXZl
bnRfY29udHJvbGxlcl9nZXRfd2lkZ2V0KEdUS19FVkVOVF9DT05UUk9MTEVSKGdlc3R1cmUpKSk7
CisgICAgd2Via2l0RW1vamlDaG9vc2VyU2hvd1ZhcmlhdGlvbnMoY2hvb3NlciwgR1RLX1dJREdF
VChndGtfZmxvd19ib3hfZ2V0X2NoaWxkX2F0X3Bvcyhib3gsIHgsIHkpKSk7Cit9CisKK3N0YXRp
YyB2b2lkIGVtb2ppUHJlc3NlZChHdGtHZXN0dXJlKiBnZXN0dXJlLCBpbnQsIGRvdWJsZSB4LCBk
b3VibGUgeSwgV2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyKQoreworICAgIGVtb2ppTG9uZ1By
ZXNzZWQoZ2VzdHVyZSwgeCwgeSwgY2hvb3Nlcik7Cit9CisKK3N0YXRpYyB2b2lkIGVtb2ppUG9w
dXBNZW51KEd0a1dpZGdldCogY2hpbGQsIFdlYktpdEVtb2ppQ2hvb3NlciogY2hvb3NlcikKK3sK
KyAgICB3ZWJraXRFbW9qaUNob29zZXJTaG93VmFyaWF0aW9ucyhjaG9vc2VyLCBjaGlsZCk7Cit9
CisKK3N0YXRpYyB2b2lkIHZlcnRpY2FsQWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0bWVudCog
YWRqdXN0bWVudCwgV2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyKQoreworICAgIGRvdWJsZSB2
YWx1ZSA9IGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KTsKKyAgICBFbW9qaVNl
Y3Rpb24qIHNlY3Rpb25Ub1NlbGVjdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRvJiBzZWN0aW9u
IDogY2hvb3Nlci0+cHJpdi0+c2VjdGlvbnMpIHsKKyAgICAgICAgR3RrQWxsb2NhdGlvbiBhbGxv
Y2F0aW9uOworICAgICAgICBpZiAoc2VjdGlvbi5oZWFkaW5nKQorICAgICAgICAgICAgZ3RrX3dp
ZGdldF9nZXRfYWxsb2NhdGlvbihzZWN0aW9uLmhlYWRpbmcsICZhbGxvY2F0aW9uKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihzZWN0aW9uLmJv
eCwgJmFsbG9jYXRpb24pOworCisgICAgICAgIGlmICh2YWx1ZSA8IGFsbG9jYXRpb24ueSAtIGJv
eFNwYWNlKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgc2VjdGlvblRvU2VsZWN0ID0g
JnNlY3Rpb247CisgICAgfQorCisgICAgaWYgKCFzZWN0aW9uVG9TZWxlY3QpCisgICAgICAgIHNl
Y3Rpb25Ub1NlbGVjdCA9ICZjaG9vc2VyLT5wcml2LT5zZWN0aW9uc1swXTsKKworICAgIGZvciAo
YXV0byYgc2VjdGlvbiA6IGNob29zZXItPnByaXYtPnNlY3Rpb25zKSB7CisgICAgICAgIGlmICgm
c2VjdGlvbiA9PSBzZWN0aW9uVG9TZWxlY3QpCisgICAgICAgICAgICBndGtfd2lkZ2V0X3NldF9z
dGF0ZV9mbGFncyhzZWN0aW9uLmJ1dHRvbiwgR1RLX1NUQVRFX0ZMQUdfQ0hFQ0tFRCwgRkFMU0Up
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBndGtfd2lkZ2V0X3Vuc2V0X3N0YXRlX2ZsYWdz
KHNlY3Rpb24uYnV0dG9uLCBHVEtfU1RBVEVfRkxBR19DSEVDS0VEKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBHdGtXaWRnZXQqIHdlYmtpdEVtb2ppQ2hvb3NlclNldHVwU2VjdGlvbkJveChXZWJLaXRF
bW9qaUNob29zZXIqIGNob29zZXIsIEd0a0JveCogcGFyZW50LCBjb25zdCBjaGFyKiB0aXRsZSwg
R3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ2Jvb2xlYW4gY2FuSGF2ZVZhcmlhdGlvbnMgPSBG
QUxTRSkKK3sKKyAgICBFbW9qaVNlY3Rpb24gc2VjdGlvbjsKKyAgICBpZiAodGl0bGUpIHsKKyAg
ICAgICAgR3RrV2lkZ2V0KiBsYWJlbCA9IGd0a19sYWJlbF9uZXcodGl0bGUpOworICAgICAgICBz
ZWN0aW9uLmhlYWRpbmcgPSBsYWJlbDsKKyAgICAgICAgZ3RrX2xhYmVsX3NldF94YWxpZ24oR1RL
X0xBQkVMKGxhYmVsKSwgMCk7CisgICAgICAgIGd0a19ib3hfcGFja19zdGFydChwYXJlbnQsIGxh
YmVsLCBGQUxTRSwgRkFMU0UsIDApOworICAgICAgICBndGtfd2lkZ2V0X3Nob3cobGFiZWwpOwor
ICAgIH0KKworICAgIEd0a1dpZGdldCogYm94ID0gZ3RrX2Zsb3dfYm94X25ldygpOworICAgIHNl
Y3Rpb24uYm94ID0gYm94OworICAgIGdfc2lnbmFsX2Nvbm5lY3QoYm94LCAiY2hpbGQtYWN0aXZh
dGVkIiwgR19DQUxMQkFDSyhlbW9qaUFjdGl2YXRlZCksIGNob29zZXIpOworICAgIGd0a19mbG93
X2JveF9zZXRfaG9tb2dlbmVvdXMoR1RLX0ZMT1dfQk9YKGJveCksIFRSVUUpOworICAgIGd0a19m
bG93X2JveF9zZXRfc2VsZWN0aW9uX21vZGUoR1RLX0ZMT1dfQk9YKGJveCksIEdUS19TRUxFQ1RJ
T05fTk9ORSk7CisgICAgZ3RrX2NvbnRhaW5lcl9zZXRfZm9jdXNfdmFkanVzdG1lbnQoR1RLX0NP
TlRBSU5FUihib3gpLCBhZGp1c3RtZW50KTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQocGFyZW50
LCBib3gsIEZBTFNFLCBGQUxTRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGJveCk7CisKKyAg
ICBpZiAoY2FuSGF2ZVZhcmlhdGlvbnMpIHsKKyAgICAgICAgR1JlZlB0cjxHdGtHZXN0dXJlPiBn
ZXN0dXJlID0gYWRvcHRHUmVmKGd0a19nZXN0dXJlX2xvbmdfcHJlc3NfbmV3KGJveCkpOworICAg
ICAgICBnX3NpZ25hbF9jb25uZWN0KGdlc3R1cmUuZ2V0KCksICJwcmVzc2VkIiwgR19DQUxMQkFD
SyhlbW9qaUxvbmdQcmVzc2VkKSwgY2hvb3Nlcik7CisgICAgICAgIGNob29zZXItPnByaXYtPmdl
c3R1cmVzLmFkZChXVEZNb3ZlKGdlc3R1cmUpKTsKKyAgICAgICAgR1JlZlB0cjxHdGtHZXN0dXJl
PiBtdWx0aUdlc3R1cmUgPSBhZG9wdEdSZWYoZ3RrX2dlc3R1cmVfbXVsdGlfcHJlc3NfbmV3KGJv
eCkpOworICAgICAgICBndGtfZ2VzdHVyZV9zaW5nbGVfc2V0X2J1dHRvbihHVEtfR0VTVFVSRV9T
SU5HTEUobXVsdGlHZXN0dXJlLmdldCgpKSwgR0RLX0JVVFRPTl9TRUNPTkRBUlkpOworICAgICAg
ICBnX3NpZ25hbF9jb25uZWN0KG11bHRpR2VzdHVyZS5nZXQoKSwgInByZXNzZWQiLCBHX0NBTExC
QUNLKGVtb2ppUHJlc3NlZCksIGNob29zZXIpOworICAgICAgICBjaG9vc2VyLT5wcml2LT5nZXN0
dXJlcy5hZGQoV1RGTW92ZShtdWx0aUdlc3R1cmUpKTsKKyAgICB9CisKKyAgICBjaG9vc2VyLT5w
cml2LT5zZWN0aW9ucy5hcHBlbmQoV1RGTW92ZShzZWN0aW9uKSk7CisgICAgcmV0dXJuIGJveDsK
K30KKworc3RhdGljIHZvaWQgc2Nyb2xsVG9TZWN0aW9uKEd0a0J1dHRvbiogYnV0dG9uLCBncG9p
bnRlciBkYXRhKQoreworICAgIGF1dG8qIGNob29zZXIgPSBXRUJLSVRfRU1PSklfQ0hPT1NFUihn
dGtfd2lkZ2V0X2dldF9hbmNlc3RvcihHVEtfV0lER0VUKGJ1dHRvbiksIFdFQktJVF9UWVBFX0VN
T0pJX0NIT09TRVIpKTsKKyAgICBhdXRvJiBzZWN0aW9uID0gY2hvb3Nlci0+cHJpdi0+c2VjdGlv
bnNbR1BPSU5URVJfVE9fVUlOVChkYXRhKV07CisgICAgR3RrQWRqdXN0bWVudCogYWRqdXN0bWVu
dCA9IGd0a19zY3JvbGxlZF93aW5kb3dfZ2V0X3ZhZGp1c3RtZW50KEdUS19TQ1JPTExFRF9XSU5E
T1coY2hvb3Nlci0+cHJpdi0+c3dpbmRvdykpOworICAgIGlmIChzZWN0aW9uLmhlYWRpbmcpIHsK
KyAgICAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyAwLCAwLCAwLCAwIH07CisgICAg
ICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oc2VjdGlvbi5oZWFkaW5nLCAmYWxsb2NhdGlv
bik7CisgICAgICAgIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShhZGp1c3RtZW50LCBhbGxvY2F0
aW9uLnkgLSBib3hTcGFjZSk7CisgICAgfSBlbHNlCisgICAgICAgIGd0a19hZGp1c3RtZW50X3Nl
dF92YWx1ZShhZGp1c3RtZW50LCAwKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0RW1vamlDaG9v
c2VyU2V0dXBTZWN0aW9uQnV0dG9uKFdlYktpdEVtb2ppQ2hvb3NlciogY2hvb3NlciwgR3RrQm94
KiBwYXJlbnQsIGNvbnN0IGNoYXIqIGljb25OYW1lLCBjb25zdCBjaGFyKiB0b29sdGlwKQorewor
ICAgIEd0a1dpZGdldCogYnV0dG9uID0gZ3RrX2J1dHRvbl9uZXdfZnJvbV9pY29uX25hbWUoaWNv
bk5hbWUsIEdUS19JQ09OX1NJWkVfQlVUVE9OKTsKKyAgICBjaG9vc2VyLT5wcml2LT5zZWN0aW9u
cy5sYXN0KCkuYnV0dG9uID0gYnV0dG9uOworICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFz
cyhndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KGJ1dHRvbiksICJlbW9qaS1zZWN0aW9uIik7
CisgICAgZ3RrX3dpZGdldF9zZXRfdG9vbHRpcF90ZXh0KGJ1dHRvbiwgdG9vbHRpcCk7CisgICAg
Z19zaWduYWxfY29ubmVjdChidXR0b24sICJjbGlja2VkIiwgR19DQUxMQkFDSyhzY3JvbGxUb1Nl
Y3Rpb24pLCBHVUlOVF9UT19QT0lOVEVSKGNob29zZXItPnByaXYtPnNlY3Rpb25zLnNpemUoKSAt
IDEpKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQocGFyZW50LCBidXR0b24sIEZBTFNFLCBGQUxT
RSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KGJ1dHRvbik7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdEVtb2ppQ2hvb3NlclNldHVwUmVjZW50KFdlYktpdEVtb2ppQ2hvb3NlciogY2hvb3Nlciwg
R3RrQm94KiBlbW9qaUJveCwgR3RrQm94KiBidXR0b25Cb3gsIEd0a0FkanVzdG1lbnQqIGFkanVz
dG1lbnQpCit7CisgICAgR3RrV2lkZ2V0KiBmbG93Qm94ID0gd2Via2l0RW1vamlDaG9vc2VyU2V0
dXBTZWN0aW9uQm94KGNob29zZXIsIGVtb2ppQm94LCBudWxscHRyLCBhZGp1c3RtZW50LCB0cnVl
KTsKKyAgICB3ZWJraXRFbW9qaUNob29zZXJTZXR1cFNlY3Rpb25CdXR0b24oY2hvb3NlciwgYnV0
dG9uQm94LCAiZW1vamktcmVjZW50LXN5bWJvbGljIiwgXygiUmVjZW50IikpOworCisgICAgYm9v
bCBpc0VtcHR5ID0gdHJ1ZTsKKyAgICBHUmVmUHRyPEdWYXJpYW50PiB2YXJpYW50ID0gYWRvcHRH
UmVmKGdfc2V0dGluZ3NfZ2V0X3ZhbHVlKGNob29zZXItPnByaXYtPnNldHRpbmdzLmdldCgpLCAi
cmVjZW50LWVtb2ppIikpOworICAgIEdWYXJpYW50SXRlciBpdGVyOworICAgIGdfdmFyaWFudF9p
dGVyX2luaXQoJml0ZXIsIHZhcmlhbnQuZ2V0KCkpOworICAgIHdoaWxlIChHUmVmUHRyPEdWYXJp
YW50PiBpdGVtID0gYWRvcHRHUmVmKGdfdmFyaWFudF9pdGVyX25leHRfdmFsdWUoJml0ZXIpKSkg
eworICAgICAgICBHUmVmUHRyPEdWYXJpYW50PiBlbW9qaURhdGEgPSBhZG9wdEdSZWYoZ192YXJp
YW50X2dldF9jaGlsZF92YWx1ZShpdGVtLmdldCgpLCAwKSk7CisgICAgICAgIGd1bmljaGFyIG1v
ZGlmaWVyOworICAgICAgICBnX3ZhcmlhbnRfZ2V0X2NoaWxkKGl0ZW0uZ2V0KCksIDEsICJ1Iiwg
Jm1vZGlmaWVyKTsKKyAgICAgICAgaWYgKGF1dG8qIGNoaWxkID0gd2Via2l0RW1vamlDaG9vc2Vy
QWRkRW1vamkoY2hvb3NlciwgR1RLX0ZMT1dfQk9YKGZsb3dCb3gpLCBlbW9qaURhdGEuZ2V0KCks
IHRydWUsIG1vZGlmaWVyKSkKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2hpbGQsICJw
b3B1cC1tZW51IiwgR19DQUxMQkFDSyhlbW9qaVBvcHVwTWVudSksIGNob29zZXIpOworICAgICAg
ICBpc0VtcHR5ID0gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGlzRW1wdHkpIHsKKyAgICAgICAg
Z3RrX3dpZGdldF9oaWRlKGZsb3dCb3gpOworICAgICAgICBndGtfd2lkZ2V0X3NldF9zZW5zaXRp
dmUoY2hvb3Nlci0+cHJpdi0+c2VjdGlvbnMuZmlyc3QoKS5idXR0b24sIEZBTFNFKTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEVtb2ppQ2hvb3NlckVuc3VyZUVtcHR5UmVzdWx0KFdl
YktpdEVtb2ppQ2hvb3NlciogY2hvb3NlcikKK3sKKyAgICBpZiAoZ3RrX3N0YWNrX2dldF9jaGls
ZF9ieV9uYW1lKEdUS19TVEFDSyhjaG9vc2VyLT5wcml2LT5zdGFjayksICJlbXB0eSIpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBHdGtXaWRnZXQqIGdyaWQgPSBndGtfZ3JpZF9uZXcoKTsKKyAg
ICBndGtfZ3JpZF9zZXRfcm93X3NwYWNpbmcoR1RLX0dSSUQoZ3JpZCksIDEyKTsKKyAgICBndGtf
d2lkZ2V0X3NldF9oYWxpZ24oZ3JpZCwgR1RLX0FMSUdOX0NFTlRFUik7CisgICAgZ3RrX3dpZGdl
dF9zZXRfdmFsaWduKGdyaWQsIEdUS19BTElHTl9DRU5URVIpOworICAgIGd0a19zdHlsZV9jb250
ZXh0X2FkZF9jbGFzcyhndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KGdyaWQpLCAiZGltLWxh
YmVsIik7CisKKyAgICBHdGtXaWRnZXQqIGltYWdlID0gZ3RrX2ltYWdlX25ld19mcm9tX2ljb25f
bmFtZSgiZWRpdC1maW5kLXN5bWJvbGljIiwgR1RLX0lDT05fU0laRV9ESUFMT0cpOworICAgIGd0
a19pbWFnZV9zZXRfcGl4ZWxfc2l6ZShHVEtfSU1BR0UoaW1hZ2UpLCA3Mik7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfYWRkX2NsYXNzKGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQoaW1hZ2Up
LCAiZGltLWxhYmVsIik7CisgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBpbWFn
ZSwgMCwgMCwgMSwgMSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGltYWdlKTsKKworICAgIEd0a1dp
ZGdldCogbGFiZWwgPSBndGtfbGFiZWxfbmV3KF8oIk5vIFJlc3VsdHMgRm91bmQiKSk7CisgICAg
UGFuZ29BdHRyTGlzdCogYXR0cmlidXRlcyA9IHBhbmdvX2F0dHJfbGlzdF9uZXcoKTsKKyAgICBw
YW5nb19hdHRyX2xpc3RfaW5zZXJ0KGF0dHJpYnV0ZXMsIHBhbmdvX2F0dHJfc2NhbGVfbmV3KDEu
NDQpKTsKKyAgICBwYW5nb19hdHRyX2xpc3RfaW5zZXJ0KGF0dHJpYnV0ZXMsIHBhbmdvX2F0dHJf
d2VpZ2h0X25ldyhQQU5HT19XRUlHSFRfQk9MRCkpOworICAgIGd0a19sYWJlbF9zZXRfYXR0cmli
dXRlcyhHVEtfTEFCRUwobGFiZWwpLCBhdHRyaWJ1dGVzKTsKKyAgICBwYW5nb19hdHRyX2xpc3Rf
dW5yZWYoYXR0cmlidXRlcyk7CisgICAgZ3RrX2dyaWRfYXR0YWNoKEdUS19HUklEKGdyaWQpLCBs
YWJlbCwgMCwgMSwgMSwgMSk7CisgICAgZ3RrX3dpZGdldF9zaG93KGxhYmVsKTsKKworICAgIGxh
YmVsID0gZ3RrX2xhYmVsX25ldyhfKCJUcnkgYSBkaWZmZXJlbnQgc2VhcmNoIikpOworICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KGxh
YmVsKSwgImRpbS1sYWJlbCIpOworICAgIGd0a19ncmlkX2F0dGFjaChHVEtfR1JJRChncmlkKSwg
bGFiZWwsIDAsIDIsIDEsIDEpOworICAgIGd0a193aWRnZXRfc2hvdyhsYWJlbCk7CisKKyAgICBn
dGtfc3RhY2tfYWRkX25hbWVkKEdUS19TVEFDSyhjaG9vc2VyLT5wcml2LT5zdGFjayksIGdyaWQs
ICJlbXB0eSIpOworICAgIGd0a193aWRnZXRfc2hvdyhncmlkKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0RW1vamlDaG9vc2VyU2VhcmNoQ2hhbmdlZChXZWJLaXRFbW9qaUNob29zZXIqIGNob29z
ZXIpCit7CisgICAgZm9yIChhdXRvJiBzZWN0aW9uIDogY2hvb3Nlci0+cHJpdi0+c2VjdGlvbnMp
IHsKKyAgICAgICAgc2VjdGlvbi5pc0VtcHR5ID0gdHJ1ZTsKKyAgICAgICAgZ3RrX2Zsb3dfYm94
X2ludmFsaWRhdGVfZmlsdGVyKEdUS19GTE9XX0JPWChzZWN0aW9uLmJveCkpOworICAgIH0KKwor
ICAgIGJvb2wgcmVzdWx0c0ZvdW5kID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBzZWN0aW9uIDog
Y2hvb3Nlci0+cHJpdi0+c2VjdGlvbnMpIHsKKyAgICAgICAgaWYgKHNlY3Rpb24uaGVhZGluZykg
eworICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShzZWN0aW9uLmhlYWRpbmcsICFz
ZWN0aW9uLmlzRW1wdHkpOworICAgICAgICAgICAgZ3RrX3dpZGdldF9zZXRfdmlzaWJsZShzZWN0
aW9uLmJveCwgIXNlY3Rpb24uaXNFbXB0eSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0c0Zv
dW5kID0gcmVzdWx0c0ZvdW5kIHx8ICFzZWN0aW9uLmlzRW1wdHk7CisgICAgfQorCisgICAgaWYg
KCFyZXN1bHRzRm91bmQpIHsKKyAgICAgICAgd2Via2l0RW1vamlDaG9vc2VyRW5zdXJlRW1wdHlS
ZXN1bHQoY2hvb3Nlcik7CisgICAgICAgIGd0a19zdGFja19zZXRfdmlzaWJsZV9jaGlsZF9uYW1l
KEdUS19TVEFDSyhjaG9vc2VyLT5wcml2LT5zdGFjayksICJlbXB0eSIpOworICAgIH0gZWxzZQor
ICAgICAgICBndGtfc3RhY2tfc2V0X3Zpc2libGVfY2hpbGRfbmFtZShHVEtfU1RBQ0soY2hvb3Nl
ci0+cHJpdi0+c3RhY2spLCAibGlzdCIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRFbW9qaUNo
b29zZXJTZXR1cEZpbHRlcnMoV2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyKQoreworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hvb3Nlci0+cHJpdi0+c2VjdGlvbnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgZ3RrX2Zsb3dfYm94X3NldF9maWx0ZXJfZnVuYyhHVEtfRkxPV19CT1goY2hv
b3Nlci0+cHJpdi0+c2VjdGlvbnNbaV0uYm94KSwgW10oR3RrRmxvd0JveENoaWxkKiBjaGlsZCwg
Z3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgICAgIGF1dG8qIGNob29z
ZXIgPSBXRUJLSVRfRU1PSklfQ0hPT1NFUihndGtfd2lkZ2V0X2dldF9hbmNlc3RvcihHVEtfV0lE
R0VUKGNoaWxkKSwgV0VCS0lUX1RZUEVfRU1PSklfQ0hPT1NFUikpOworICAgICAgICAgICAgYXV0
byYgc2VjdGlvbiA9IGNob29zZXItPnByaXYtPnNlY3Rpb25zW0dQT0lOVEVSX1RPX1VJTlQodXNl
ckRhdGEpXTsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRleHQgPSBndGtfZW50cnlfZ2V0X3Rl
eHQoR1RLX0VOVFJZKGNob29zZXItPnByaXYtPnNlYXJjaEVudHJ5KSk7CisgICAgICAgICAgICBp
ZiAoIXRleHQgfHwgISp0ZXh0KSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5pc0VtcHR5ID0g
ZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGF1dG8qIGVtb2ppRGF0YSA9IHN0YXRpY19jYXN0PEdWYXJpYW50Kj4oZ19vYmpl
Y3RfZ2V0X2RhdGEoR19PQkpFQ1QoY2hpbGQpLCAiZW1vamktZGF0YSIpKTsKKyAgICAgICAgICAg
IGlmICghZW1vamlEYXRhKSB7CisgICAgICAgICAgICAgICAgc2VjdGlvbi5pc0VtcHR5ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICBnX3ZhcmlhbnRfZ2V0X2NoaWxk
KGVtb2ppRGF0YSwgMSwgIiZzIiwgJm5hbWUpOworICAgICAgICAgICAgaWYgKGdfc3RyX21hdGNo
X3N0cmluZyh0ZXh0LCBuYW1lLCBUUlVFKSkgeworICAgICAgICAgICAgICAgIHNlY3Rpb24uaXNF
bXB0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0sIEdVSU5UX1RPX1BPSU5U
RVIoaSksIG51bGxwdHIpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Via2l0RW1vamlDaG9v
c2VySW5pdGlhbGl6ZUVtb2ppTWF4V2lkdGgoV2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyKQor
eworICAgIC8vIEdldCBhIHJlYXNvbmFibGUgbWF4aW11bSB3aWR0aCBmb3IgYW4gZW1vamkuIFdl
IGRvIHRoaXMgdG8gc2tpcCBvdmVybHkgd2lkZSBmYWxsYmFjaworICAgIC8vIHJlbmRlcmluZyBm
b3IgY2VydGFpbiBlbW9qaXMgdGhlIGZvbnQgZG9lcyBub3QgY29udGFpbiBhbmQgdGhlcmVmb3Jl
IGVuZCB1cCBiZWluZworICAgIC8vIHJlbmRlcmVkIGFzIG11bHRpcGxlIGdseXBocy4KKyAgICBH
UmVmUHRyPFBhbmdvTGF5b3V0PiBsYXlvdXQgPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9jcmVhdGVf
cGFuZ29fbGF5b3V0KEdUS19XSURHRVQoY2hvb3NlciksICLwn5mCIikpOworICAgIGF1dG8qIGF0
dHJpYnV0ZXMgPSBwYW5nb19hdHRyX2xpc3RfbmV3KCk7CisgICAgcGFuZ29fYXR0cl9saXN0X2lu
c2VydChhdHRyaWJ1dGVzLCBwYW5nb19hdHRyX3NjYWxlX25ldyhQQU5HT19TQ0FMRV9YX0xBUkdF
KSk7CisgICAgcGFuZ29fbGF5b3V0X3NldF9hdHRyaWJ1dGVzKGxheW91dC5nZXQoKSwgYXR0cmli
dXRlcyk7CisgICAgcGFuZ29fYXR0cl9saXN0X3VucmVmKGF0dHJpYnV0ZXMpOworCisgICAgUGFu
Z29SZWN0YW5nbGUgcmVjdDsKKyAgICBwYW5nb19sYXlvdXRfZ2V0X2V4dGVudHMobGF5b3V0Lmdl
dCgpLCAmcmVjdCwgbnVsbHB0cik7CisgICAgY2hvb3Nlci0+cHJpdi0+ZW1vamlNYXhXaWR0aCA9
IHJlY3Qud2lkdGg7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdEVtb2ppQ2hvb3NlckNvbnN0cnVj
dGVkKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBXZWJLaXRFbW9qaUNob29zZXIqIGNob29zZXIg
PSBXRUJLSVRfRU1PSklfQ0hPT1NFUihvYmplY3QpOworICAgIGNob29zZXItPnByaXYtPnNldHRp
bmdzID0gYWRvcHRHUmVmKGdfc2V0dGluZ3NfbmV3KCJvcmcuZ3RrLlNldHRpbmdzLkVtb2ppQ2hv
b3NlciIpKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKHdlYmtpdF9lbW9qaV9jaG9vc2VyX3BhcmVu
dF9jbGFzcyktPmNvbnN0cnVjdGVkKG9iamVjdCk7CisKKyAgICB3ZWJraXRFbW9qaUNob29zZXJJ
bml0aWFsaXplRW1vamlNYXhXaWR0aChjaG9vc2VyKTsKKworICAgIGd0a19zdHlsZV9jb250ZXh0
X2FkZF9jbGFzcyhndGtfd2lkZ2V0X2dldF9zdHlsZV9jb250ZXh0KEdUS19XSURHRVQob2JqZWN0
KSksICJlbW9qaS1waWNrZXIiKTsKKworICAgIEd0a1dpZGdldCogbWFpbkJveCA9IGd0a19ib3hf
bmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgMCk7CisgICAgR3RrV2lkZ2V0KiBzZWFyY2hF
bnRyeSA9IGd0a19zZWFyY2hfZW50cnlfbmV3KCk7CisgICAgY2hvb3Nlci0+cHJpdi0+c2VhcmNo
RW50cnkgPSBzZWFyY2hFbnRyeTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoc2VhcmNo
RW50cnksICJzZWFyY2gtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sod2Via2l0RW1vamlDaG9vc2VyU2Vh
cmNoQ2hhbmdlZCksIGNob29zZXIpOworICAgIGd0a19lbnRyeV9zZXRfaW5wdXRfaGludHMoR1RL
X0VOVFJZKHNlYXJjaEVudHJ5KSwgR1RLX0lOUFVUX0hJTlRfTk9fRU1PSkkpOworICAgIGd0a19i
b3hfcGFja19zdGFydChHVEtfQk9YKG1haW5Cb3gpLCBzZWFyY2hFbnRyeSwgVFJVRSwgRkFMU0Us
IDApOworICAgIGd0a193aWRnZXRfc2hvdyhzZWFyY2hFbnRyeSk7CisKKyAgICBHdGtXaWRnZXQq
IHN0YWNrID0gZ3RrX3N0YWNrX25ldygpOworICAgIGNob29zZXItPnByaXYtPnN0YWNrID0gc3Rh
Y2s7CisgICAgR3RrV2lkZ2V0KiBib3ggPSBndGtfYm94X25ldyhHVEtfT1JJRU5UQVRJT05fVkVS
VElDQUwsIDApOworICAgIEd0a1dpZGdldCogc3dpbmRvdyA9IGd0a19zY3JvbGxlZF93aW5kb3df
bmV3KG51bGxwdHIsIG51bGxwdHIpOworICAgIGNob29zZXItPnByaXYtPnN3aW5kb3cgPSBzd2lu
ZG93OworICAgIGd0a19zY3JvbGxlZF93aW5kb3dfc2V0X3BvbGljeShHVEtfU0NST0xMRURfV0lO
RE9XKHN3aW5kb3cpLCBHVEtfUE9MSUNZX05FVkVSLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7Cisg
ICAgZ3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfbWluX2NvbnRlbnRfaGVpZ2h0KEdUS19TQ1JPTExF
RF9XSU5ET1coc3dpbmRvdyksIDI1MCk7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNz
KGd0a193aWRnZXRfZ2V0X3N0eWxlX2NvbnRleHQoc3dpbmRvdyksICJ2aWV3Iik7CisgICAgZ3Rr
X2JveF9wYWNrX3N0YXJ0KEdUS19CT1goYm94KSwgc3dpbmRvdywgVFJVRSwgVFJVRSwgMCk7Cisg
ICAgZ3RrX3dpZGdldF9zaG93KHN3aW5kb3cpOworCisgICAgR3RrV2lkZ2V0KiBlbW9qaUJveCA9
IGd0a19ib3hfbmV3KEdUS19PUklFTlRBVElPTl9WRVJUSUNBTCwgNik7CisgICAgZ19vYmplY3Rf
c2V0KGVtb2ppQm94LCAibWFyZ2luIiwgNiwgbnVsbHB0cik7CisgICAgZ3RrX2NvbnRhaW5lcl9h
ZGQoR1RLX0NPTlRBSU5FUihzd2luZG93KSwgZW1vamlCb3gpOworICAgIGd0a193aWRnZXRfc2hv
dyhlbW9qaUJveCk7CisKKyAgICBHdGtXaWRnZXQqIGJ1dHRvbkJveCA9IGd0a19ib3hfbmV3KEdU
S19PUklFTlRBVElPTl9IT1JJWk9OVEFMLCAwKTsKKyAgICBndGtfYm94X3BhY2tfc3RhcnQoR1RL
X0JPWChib3gpLCBidXR0b25Cb3gsIFRSVUUsIEZBTFNFLCAwKTsKKyAgICBndGtfd2lkZ2V0X3No
b3coYnV0dG9uQm94KTsKKworICAgIEd0a0FkanVzdG1lbnQqIHZBZGp1c3RtZW50ID0gZ3RrX3Nj
cm9sbGVkX3dpbmRvd19nZXRfdmFkanVzdG1lbnQoR1RLX1NDUk9MTEVEX1dJTkRPVyhzd2luZG93
KSk7CisgICAgZ19zaWduYWxfY29ubmVjdCh2QWRqdXN0bWVudCwgInZhbHVlLWNoYW5nZWQiLCBH
X0NBTExCQUNLKHZlcnRpY2FsQWRqdXN0bWVudENoYW5nZWQpLCBjaG9vc2VyKTsKKworICAgIHdl
YmtpdEVtb2ppQ2hvb3NlclNldHVwUmVjZW50KGNob29zZXIsIEdUS19CT1goZW1vamlCb3gpLCBH
VEtfQk9YKGJ1dHRvbkJveCksIHZBZGp1c3RtZW50KTsKKworICAgIEdSZWZQdHI8R0J5dGVzPiBi
eXRlcyA9IGFkb3B0R1JlZihnX3Jlc291cmNlc19sb29rdXBfZGF0YSgiL29yZy9ndGsvbGliZ3Rr
L2Vtb2ppL2Vtb2ppLmRhdGEiLCBHX1JFU09VUkNFX0xPT0tVUF9GTEFHU19OT05FLCBudWxscHRy
KSk7CisgICAgR1JlZlB0cjxHVmFyaWFudD4gZGF0YSA9IGdfdmFyaWFudF9uZXdfZnJvbV9ieXRl
cyhHX1ZBUklBTlRfVFlQRSgiYShhdXNzKSIpLCBieXRlcy5nZXQoKSwgVFJVRSk7CisgICAgR1Zh
cmlhbnRJdGVyIGl0ZXI7CisgICAgZ192YXJpYW50X2l0ZXJfaW5pdCgmaXRlciwgZGF0YS5nZXQo
KSk7CisgICAgR3RrV2lkZ2V0KiBmbG93Qm94ID0gbnVsbHB0cjsKKyAgICB3aGlsZSAoR1JlZlB0
cjxHVmFyaWFudD4gaXRlbSA9IGFkb3B0R1JlZihnX3ZhcmlhbnRfaXRlcl9uZXh0X3ZhbHVlKCZp
dGVyKSkpIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICAgICAgZ192YXJpYW50X2dl
dF9jaGlsZChpdGVtLmdldCgpLCAxLCAiJnMiLCAmbmFtZSk7CisKKyAgICAgICAgaWYgKCFnX3N0
cmNtcDAobmFtZSwgImdyaW5uaW5nIGZhY2UiKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciog
dGl0bGUgPSBfKCJTbWlsZXlzICYgUGVvcGxlIik7CisgICAgICAgICAgICBmbG93Qm94ID0gd2Vi
a2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9uQm94KGNob29zZXIsIEdUS19CT1goZW1vamlCb3gp
LCB0aXRsZSwgdkFkanVzdG1lbnQsIHRydWUpOworICAgICAgICAgICAgd2Via2l0RW1vamlDaG9v
c2VyU2V0dXBTZWN0aW9uQnV0dG9uKGNob29zZXIsIEdUS19CT1goYnV0dG9uQm94KSwgImVtb2pp
LXBlb3BsZS1zeW1ib2xpYyIsIHRpdGxlKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAw
KG5hbWUsICJzZWxmaWUiKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogdGl0bGUgPSBfKCJC
b2R5ICYgQ2xvdGhpbmciKTsKKyAgICAgICAgICAgIGZsb3dCb3ggPSB3ZWJraXRFbW9qaUNob29z
ZXJTZXR1cFNlY3Rpb25Cb3goY2hvb3NlciwgR1RLX0JPWChlbW9qaUJveCksIHRpdGxlLCB2QWRq
dXN0bWVudCwgdHJ1ZSk7CisgICAgICAgICAgICB3ZWJraXRFbW9qaUNob29zZXJTZXR1cFNlY3Rp
b25CdXR0b24oY2hvb3NlciwgR1RLX0JPWChidXR0b25Cb3gpLCAiZW1vamktYm9keS1zeW1ib2xp
YyIsIHRpdGxlKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG5hbWUsICJtb25rZXki
KSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogdGl0bGUgPSBfKCJBbmltYWxzICYgTmF0dXJl
Iik7CisgICAgICAgICAgICBmbG93Qm94ID0gd2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9u
Qm94KGNob29zZXIsIEdUS19CT1goZW1vamlCb3gpLCB0aXRsZSwgdkFkanVzdG1lbnQpOworICAg
ICAgICAgICAgd2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9uQnV0dG9uKGNob29zZXIsIEdU
S19CT1goYnV0dG9uQm94KSwgImVtb2ppLW5hdHVyZS1zeW1ib2xpYyIsIHRpdGxlKTsKKyAgICAg
ICAgfSBlbHNlIGlmICghZ19zdHJjbXAwKG5hbWUsICJncmFwZXMiKSkgeworICAgICAgICAgICAg
Y29uc3QgY2hhciogdGl0bGUgPSBfKCJGb29kICYgRHJpbmsiKTsKKyAgICAgICAgICAgIGZsb3dC
b3ggPSB3ZWJraXRFbW9qaUNob29zZXJTZXR1cFNlY3Rpb25Cb3goY2hvb3NlciwgR1RLX0JPWChl
bW9qaUJveCksIHRpdGxlLCB2QWRqdXN0bWVudCk7CisgICAgICAgICAgICB3ZWJraXRFbW9qaUNo
b29zZXJTZXR1cFNlY3Rpb25CdXR0b24oY2hvb3NlciwgR1RLX0JPWChidXR0b25Cb3gpLCAiZW1v
amktZm9vZC1zeW1ib2xpYyIsIHRpdGxlKTsKKyAgICAgICAgfSBlbHNlIGlmICghZ19zdHJjbXAw
KG5hbWUsICJnbG9iZSBzaG93aW5nIEV1cm9wZS1BZnJpY2EiKSkgeworICAgICAgICAgICAgY29u
c3QgY2hhciogdGl0bGUgPSBfKCJUcmF2ZWwgJiBQbGFjZXMiKTsKKyAgICAgICAgICAgIGZsb3dC
b3ggPSB3ZWJraXRFbW9qaUNob29zZXJTZXR1cFNlY3Rpb25Cb3goY2hvb3NlciwgR1RLX0JPWChl
bW9qaUJveCksIHRpdGxlLCB2QWRqdXN0bWVudCk7CisgICAgICAgICAgICB3ZWJraXRFbW9qaUNo
b29zZXJTZXR1cFNlY3Rpb25CdXR0b24oY2hvb3NlciwgR1RLX0JPWChidXR0b25Cb3gpLCAiZW1v
amktdHJhdmVsLXN5bWJvbGljIiwgdGl0bGUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNt
cDAobmFtZSwgImphY2stby1sYW50ZXJuIikpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRp
dGxlID0gXygiQWN0aXZpdGllcyIpOworICAgICAgICAgICAgZmxvd0JveCA9IHdlYmtpdEVtb2pp
Q2hvb3NlclNldHVwU2VjdGlvbkJveChjaG9vc2VyLCBHVEtfQk9YKGVtb2ppQm94KSwgdGl0bGUs
IHZBZGp1c3RtZW50KTsKKyAgICAgICAgICAgIHdlYmtpdEVtb2ppQ2hvb3NlclNldHVwU2VjdGlv
bkJ1dHRvbihjaG9vc2VyLCBHVEtfQk9YKGJ1dHRvbkJveCksICJlbW9qaS1hY3Rpdml0aWVzLXN5
bWJvbGljIiwgdGl0bGUpOworICAgICAgICB9IGVsc2UgaWYgKCFnX3N0cmNtcDAobmFtZSwgIm11
dGVkIHNwZWFrZXIiKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogdGl0bGUgPSBfKCJPYmpl
Y3RzIik7CisgICAgICAgICAgICBmbG93Qm94ID0gd2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0
aW9uQm94KGNob29zZXIsIEdUS19CT1goZW1vamlCb3gpLCB0aXRsZSwgdkFkanVzdG1lbnQpOwor
ICAgICAgICAgICAgd2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9uQnV0dG9uKGNob29zZXIs
IEdUS19CT1goYnV0dG9uQm94KSwgImVtb2ppLW9iamVjdHMtc3ltYm9saWMiLCB0aXRsZSk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoIWdfc3RyY21wMChuYW1lLCAiQVRNIHNpZ24iKSkgeworICAgICAg
ICAgICAgY29uc3QgY2hhciogdGl0bGUgPSBfKCJTeW1ib2xzIik7CisgICAgICAgICAgICBmbG93
Qm94ID0gd2Via2l0RW1vamlDaG9vc2VyU2V0dXBTZWN0aW9uQm94KGNob29zZXIsIEdUS19CT1go
ZW1vamlCb3gpLCB0aXRsZSwgdkFkanVzdG1lbnQpOworICAgICAgICAgICAgd2Via2l0RW1vamlD
aG9vc2VyU2V0dXBTZWN0aW9uQnV0dG9uKGNob29zZXIsIEdUS19CT1goYnV0dG9uQm94KSwgImVt
b2ppLXN5bWJvbHMtc3ltYm9saWMiLCB0aXRsZSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWdfc3Ry
Y21wMChuYW1lLCAiY2hlcXVlcmVkIGZsYWciKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciog
dGl0bGUgPSBfKCJGbGFncyIpOworICAgICAgICAgICAgZmxvd0JveCA9IHdlYmtpdEVtb2ppQ2hv
b3NlclNldHVwU2VjdGlvbkJveChjaG9vc2VyLCBHVEtfQk9YKGVtb2ppQm94KSwgdGl0bGUsIHZB
ZGp1c3RtZW50KTsKKyAgICAgICAgICAgIHdlYmtpdEVtb2ppQ2hvb3NlclNldHVwU2VjdGlvbkJ1
dHRvbihjaG9vc2VyLCBHVEtfQk9YKGJ1dHRvbkJveCksICJlbW9qaS1mbGFncy1zeW1ib2xpYyIs
IHRpdGxlKTsKKyAgICAgICAgfQorICAgICAgICBhdXRvKiBjaGlsZCA9IHdlYmtpdEVtb2ppQ2hv
b3NlckFkZEVtb2ppKGNob29zZXIsIEdUS19GTE9XX0JPWChmbG93Qm94KSwgaXRlbS5nZXQoKSk7
CisgICAgICAgIGlmIChjaGlsZCkKKyAgICAgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QoY2hpbGQs
ICJwb3B1cC1tZW51IiwgR19DQUxMQkFDSyhlbW9qaVBvcHVwTWVudSksIGNob29zZXIpOworICAg
IH0KKworICAgIGd0a193aWRnZXRfc2V0X3N0YXRlX2ZsYWdzKGNob29zZXItPnByaXYtPnNlY3Rp
b25zLmZpcnN0KCkuYnV0dG9uLCBHVEtfU1RBVEVfRkxBR19DSEVDS0VELCBGQUxTRSk7CisKKyAg
ICBndGtfc3RhY2tfYWRkX25hbWVkKEdUS19TVEFDSyhzdGFjayksIGJveCwgImxpc3QiKTsKKyAg
ICBndGtfd2lkZ2V0X3Nob3coYm94KTsKKworICAgIGd0a19ib3hfcGFja19zdGFydChHVEtfQk9Y
KG1haW5Cb3gpLCBzdGFjaywgVFJVRSwgVFJVRSwgMCk7CisgICAgZ3RrX3dpZGdldF9zaG93KHN0
YWNrKTsKKworICAgIGd0a19jb250YWluZXJfYWRkKEdUS19DT05UQUlORVIob2JqZWN0KSwgbWFp
bkJveCk7CisgICAgZ3RrX3dpZGdldF9zaG93KG1haW5Cb3gpOworCisgICAgd2Via2l0RW1vamlD
aG9vc2VyU2V0dXBGaWx0ZXJzKGNob29zZXIpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRFbW9q
aUNob29zZXJTaG93KEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRfQ0xBU1Mo
d2Via2l0X2Vtb2ppX2Nob29zZXJfcGFyZW50X2NsYXNzKS0+c2hvdyh3aWRnZXQpOworCisgICAg
V2ViS2l0RW1vamlDaG9vc2VyKiBjaG9vc2VyID0gV0VCS0lUX0VNT0pJX0NIT09TRVIod2lkZ2V0
KTsKKyAgICBhdXRvKiBhZGp1c3RtZW50ID0gZ3RrX3Njcm9sbGVkX3dpbmRvd19nZXRfdmFkanVz
dG1lbnQoR1RLX1NDUk9MTEVEX1dJTkRPVyhjaG9vc2VyLT5wcml2LT5zd2luZG93KSk7CisgICAg
Z3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKGFkanVzdG1lbnQsIDApOworCisgICAgZ3RrX2VudHJ5
X3NldF90ZXh0KEdUS19FTlRSWShjaG9vc2VyLT5wcml2LT5zZWFyY2hFbnRyeSksICIiKTsKK30K
Kworc3RhdGljIHZvaWQgd2Via2l0X2Vtb2ppX2Nob29zZXJfY2xhc3NfaW5pdChXZWJLaXRFbW9q
aUNob29zZXJDbGFzcyoga2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9
IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAgICBvYmplY3RDbGFzcy0+Y29uc3RydWN0ZWQgPSB3
ZWJraXRFbW9qaUNob29zZXJDb25zdHJ1Y3RlZDsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRn
ZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Moa2xhc3MpOworICAgIHdpZGdldENsYXNzLT5zaG93
ID0gd2Via2l0RW1vamlDaG9vc2VyU2hvdzsKKworICAgIHNpZ25hbHNbRU1PSklfUElDS0VEXSA9
IGdfc2lnbmFsX25ldygKKyAgICAgICAgImVtb2ppLXBpY2tlZCIsCisgICAgICAgIEdfT0JKRUNU
X0NMQVNTX1RZUEUob2JqZWN0Q2xhc3MpLAorICAgICAgICBHX1NJR05BTF9SVU5fTEFTVCwKKyAg
ICAgICAgMCwKKyAgICAgICAgbnVsbHB0ciwgbnVsbHB0ciwKKyAgICAgICAgbnVsbHB0ciwKKyAg
ICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgIEdfVFlQRV9TVFJJTkcgfCBHX1NJR05BTF9U
WVBFX1NUQVRJQ19TQ09QRSk7Cit9CisKK0d0a1dpZGdldCogd2Via2l0RW1vamlDaG9vc2VyTmV3
KCkKK3sKKyAgICBXZWJLaXRFbW9qaUNob29zZXIqIGF1dGhEaWFsb2cgPSBXRUJLSVRfRU1PSklf
Q0hPT1NFUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfRU1PSklfQ0hPT1NFUiwgbnVsbHB0cikp
OworICAgIHJldHVybiBHVEtfV0lER0VUKGF1dGhEaWFsb2cpOworfQorCisjZW5kaWYgLy8gR1RL
X0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nlci5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRFbW9qaUNob29zZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMmIzZDBlNTBmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEVtb2ppQ2hvb3Nlci5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyNCwgMCkK
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX0VNT0pJX0NIT09TRVIgICAg
ICAgICAgICAod2Via2l0X2Vtb2ppX2Nob29zZXJfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lU
X0VNT0pJX0NIT09TRVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FT
VCgob2JqKSwgV0VCS0lUX1RZUEVfRU1PSklfQ0hPT1NFUiwgV2ViS2l0RW1vamlDaG9vc2VyKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX0VNT0pJX0NIT09TRVIob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfRU1PSklfQ0hPT1NFUikpCisjZGVm
aW5lIFdFQktJVF9FTU9KSV9DSE9PU0VSX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NM
QVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBFX0VNT0pJX0NIT09TRVIsIFdlYktpdEVtb2pp
Q2hvb3NlckNsYXNzKSkKKyNkZWZpbmUgV0VCS0lUX0lTX0VNT0pJX0NIT09TRVJfQ0xBU1Moa2xh
c3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfRU1PSklf
Q0hPT1NFUikpCisjZGVmaW5lIFdFQktJVF9FTU9KSV9DSE9PU0VSX0dFVF9DTEFTUyhvYmopICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX0VNT0pJX0NIT09T
RVIsIFdlYktpdEVtb2ppQ2hvb3NlckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEVt
b2ppQ2hvb3NlciAgICAgICAgV2ViS2l0RW1vamlDaG9vc2VyOwordHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdEVtb2ppQ2hvb3NlckNsYXNzICAgV2ViS2l0RW1vamlDaG9vc2VyQ2xhc3M7Cit0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0RW1vamlDaG9vc2VyUHJpdmF0ZSBXZWJLaXRFbW9qaUNob29zZXJQcml2
YXRlOworCitzdHJ1Y3QgX1dlYktpdEVtb2ppQ2hvb3NlciB7CisgICAgR3RrUG9wb3ZlciBwYXJl
bnQ7CisKKyAgICBXZWJLaXRFbW9qaUNob29zZXJQcml2YXRlKiBwcml2OworfTsKKworc3RydWN0
IF9XZWJLaXRFbW9qaUNob29zZXJDbGFzcyB7CisgICAgR3RrUG9wb3ZlckNsYXNzIHBhcmVudENs
YXNzOworfTsKKworR1R5cGUgd2Via2l0X2Vtb2ppX2Nob29zZXJfZ2V0X3R5cGUoKTsKK0d0a1dp
ZGdldCogd2Via2l0RW1vamlDaG9vc2VyTmV3KCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAv
LyBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAyNCwgMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXggMThiNjA5Nzk2NjEu
LjE4NmZkM2I4ZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIldl
YkV2ZW50RmFjdG9yeS5oIgogI2luY2x1ZGUgIldlYkluc3BlY3RvclByb3h5LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0MkluaXRpYWxpemUuaCIKKyNpbmNsdWRlICJXZWJLaXRFbW9qaUNob29zZXIuaCIK
ICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZUFjY2Vzc2libGUuaCIKICNpbmNsdWRlICJXZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXAuaCIKQEAgLTY3
LDYgKzY4LDcgQEAKICNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KICNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTQ3LDcgKzE0OSwxMyBAQCB0
eXBlZGVmIEhhc2hNYXA8dWludDMyX3QsIEdVbmlxdWVQdHI8R2RrRXZlbnQ+PiBUb3VjaEV2ZW50
c01hcDsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBfV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlKCkKICAgICAgICAgOiB1cGRhdGVBY3Rpdml0eVN0YXRlVGltZXIoUnVu
TG9vcDo6bWFpbigpLCB0aGlzLCAmX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZTo6dXBkYXRlQWN0
aXZpdHlTdGF0ZVRpbWVyRmlyZWQpCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCisg
ICAgICAgICwgcmVsZWFzZUVtb2ppQ2hvb3NlclRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywg
Jl9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGU6OnJlbGVhc2VFbW9qaUNob29zZXJUaW1lckZpcmVk
KQorI2VuZGlmCiAgICAgeworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDI0LCAwKQorICAgICAg
ICByZWxlYXNlRW1vamlDaG9vc2VyVGltZXIuc2V0UHJpb3JpdHkoUnVuTG9vcFNvdXJjZVByaW9y
aXR5OjpSZWxlYXNlVW51c2VkUmVzb3VyY2VzVGltZXIpOworI2VuZGlmCiAgICAgfQogCiAgICAg
dm9pZCB1cGRhdGVBY3Rpdml0eVN0YXRlVGltZXJGaXJlZCgpCkBAIC0xNTgsNiArMTY2LDE2IEBA
IHN0cnVjdCBfV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICAgICAgYWN0aXZpdHlTdGF0
ZUZsYWdzVG9VcGRhdGUgPSB7IH07CiAgICAgfQogCisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
MjQsIDApCisgICAgdm9pZCByZWxlYXNlRW1vamlDaG9vc2VyVGltZXJGaXJlZCgpCisgICAgewor
ICAgICAgICBpZiAoZW1vamlDaG9vc2VyKSB7CisgICAgICAgICAgICBndGtfd2lkZ2V0X2Rlc3Ry
b3koZW1vamlDaG9vc2VyKTsKKyAgICAgICAgICAgIGVtb2ppQ2hvb3NlciA9IG51bGxwdHI7Cisg
ICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwogICAgIFdlYktpdFdlYlZpZXdDaGlsZHJlbk1hcCBj
aGlsZHJlbjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7
CiAgICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZVByb3h5OwpAQCAtMjA3LDYgKzIyNSwxMiBA
QCBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAjZW5kaWYKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Vmlld0dlc3R1cmVDb250cm9sbGVyPiB2aWV3R2VzdHVyZUNvbnRyb2xsZXI7CiAg
ICAgYm9vbCBpc0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVFbmFibGVkIHsgZmFsc2UgfTsK
KworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDI0LCAwKQorICAgIEd0a1dpZGdldCogZW1vamlD
aG9vc2VyOworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4gZW1vamlDaG9vc2Vy
Q29tcGxldGlvbkhhbmRsZXI7CisgICAgUnVuTG9vcDo6VGltZXI8V2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlPiByZWxlYXNlRW1vamlDaG9vc2VyVGltZXI7CisjZW5kaWYKIH07CiAKIFdFQktJVF9E
RUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19U
WVBFX0NPTlRBSU5FUikKQEAgLTE3NTQsMyArMTc3OCw0NyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdC
YXNlRGlkUmVzdG9yZVNjcm9sbFBvc2l0aW9uKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJW
aWV3QgogICAgIGlmIChjb250cm9sbGVyICYmIGNvbnRyb2xsZXItPmlzU3dpcGVHZXN0dXJlRW5h
YmxlZCgpKQogICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+dmlld0dlc3R1cmVDb250
cm9sbGVyLT5kaWRSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTsKIH0KKworI2lmIEdUS19DSEVDS19W
RVJTSU9OKDMsIDI0LCAwKQorc3RhdGljIHZvaWQgZW1vamlDaG9vc2VyRW1vamlQaWNrZWQoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBjb25zdCBjaGFyKiB0ZXh0KQorewor
ICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9IHdlYmtpdFdlYlZpZXdCYXNlLT5w
cml2OworICAgIGF1dG8gY29tcGxldGlvbkhhbmRsZXIgPSBzdGQ6OmV4Y2hhbmdlKHByaXYtPmVt
b2ppQ2hvb3NlckNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKTsKKyAgICBpZiAoY29tcGxldGlv
bkhhbmRsZXIpCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFN0cmluZzo6ZnJvbVVURjgodGV4
dCkpOworfQorCitzdGF0aWMgdm9pZCBlbW9qaUNob29zZXJDbG9zZWQoV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYmtpdFdlYlZpZXdCYXNlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSog
cHJpdiA9IHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2OworICAgIGF1dG8gY29tcGxldGlvbkhhbmRs
ZXIgPSBzdGQ6OmV4Y2hhbmdlKHByaXYtPmVtb2ppQ2hvb3NlckNvbXBsZXRpb25IYW5kbGVyLCBu
dWxscHRyKTsKKyAgICBpZiAoY29tcGxldGlvbkhhbmRsZXIpCisgICAgICAgIGNvbXBsZXRpb25I
YW5kbGVyKGVtcHR5U3RyaW5nKCkpOworICAgIHByaXYtPnJlbGVhc2VFbW9qaUNob29zZXJUaW1l
ci5zdGFydE9uZVNob3QoMl9taW4pOworfQorI2VuZGlmCisKK3ZvaWQgd2Via2l0V2ViVmlld0Jh
c2VTaG93RW1vamlDaG9vc2VyKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSwg
Y29uc3QgSW50UmVjdCYgY2FyZXRSZWN0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+
JiYgY29tcGxldGlvbkhhbmRsZXIpCit7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDAp
CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Via2l0V2ViVmlld0Jhc2Ut
PnByaXY7CisgICAgcHJpdi0+cmVsZWFzZUVtb2ppQ2hvb3NlclRpbWVyLnN0b3AoKTsKKworICAg
IGlmICghcHJpdi0+ZW1vamlDaG9vc2VyKSB7CisgICAgICAgIHByaXYtPmVtb2ppQ2hvb3NlciA9
IHdlYmtpdEVtb2ppQ2hvb3Nlck5ldygpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQocHJpdi0+ZW1vamlDaG9vc2VyLCAiZW1vamktcGlja2VkIiwgR19DQUxMQkFDSyhlbW9qaUNo
b29zZXJFbW9qaVBpY2tlZCksIHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAgICAgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKHByaXYtPmVtb2ppQ2hvb3NlciwgImNsb3NlZCIsIEdfQ0FMTEJBQ0so
ZW1vamlDaG9vc2VyQ2xvc2VkKSwgd2Via2l0V2ViVmlld0Jhc2UpOworICAgICAgICBndGtfcG9w
b3Zlcl9zZXRfcmVsYXRpdmVfdG8oR1RLX1BPUE9WRVIocHJpdi0+ZW1vamlDaG9vc2VyKSwgR1RL
X1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpOworICAgIH0KKworICAgIHByaXYtPmVtb2ppQ2hv
b3NlckNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CisKKyAg
ICBHZGtSZWN0YW5nbGUgZ2RrQ2FyZXRSZWN0ID0gY2FyZXRSZWN0OworICAgIGd0a19wb3BvdmVy
X3NldF9wb2ludGluZ190byhHVEtfUE9QT1ZFUihwcml2LT5lbW9qaUNob29zZXIpLCAmZ2RrQ2Fy
ZXRSZWN0KTsKKyAgICBndGtfcG9wb3Zlcl9wb3B1cChHVEtfUE9QT1ZFUihwcml2LT5lbW9qaUNo
b29zZXIpKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAg
ICBVTlVTRURfUEFSQU0oY2FyZXRSZWN0KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihlbXB0eVN0
cmluZygpKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggNTRmZTAxZTVjMzAu
LjY2MzkzZjc1NzdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTkzLDMgKzkzLDUgQEAgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZURpZEZpbmlzaExvYWRGb3JNYWluRnJhbWUoV2ViS2l0V2ViVmll
d0Jhc2UqKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRGYWlsTG9hZEZvck1haW5GcmFtZShX
ZWJLaXRXZWJWaWV3QmFzZSopOwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURpZFNhbWVEb2N1bWVu
dE5hdmlnYXRpb25Gb3JNYWluRnJhbWUoV2ViS2l0V2ViVmlld0Jhc2UqLCBXZWJLaXQ6OlNhbWVE
b2N1bWVudE5hdmlnYXRpb25UeXBlKTsKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEaWRSZXN0b3Jl
U2Nyb2xsUG9zaXRpb24oV2ViS2l0V2ViVmlld0Jhc2UqKTsKKwordm9pZCB3ZWJraXRXZWJWaWV3
QmFzZVNob3dFbW9qaUNob29zZXIoV2ViS2l0V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChTdHJpbmcpPiYmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggZGY4YTRmNWQzN2MuLjA2MmE0Yzg5OTA1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTc3NCw2ICsxNzc0LDcg
QEAgcHJpdmF0ZToKICNpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBnZXRFZGl0b3JDb21tYW5k
c0ZvcktleUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxTdHJpbmc+Jik7CiAgICAg
dm9pZCBiaW5kQWNjZXNzaWJpbGl0eVRyZWUoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzaG93
RW1vamlQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYsIENvbXBsZXRpb25IYW5kbGVyPHZv
aWQoU3RyaW5nKT4mJik7CiAjZW5kaWYKIAogICAgIC8vIFBvcHVwIE1lbnUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggNjkxYjQx
N2U5MTcuLjhhN2Y4YzRmZTkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC01NjMsNCArNTYzLDggQEAgbWVzc2FnZXMgLT4gV2Vi
UGFnZVByb3h5IHsKICNlbmRpZgogCiAgICAgQ29uZmlndXJlTG9nZ2luZ0NoYW5uZWwoU3RyaW5n
IGNoYW5uZWxOYW1lLCBlbnVtOnVpbnQ4X3QgV1RGTG9nQ2hhbm5lbFN0YXRlIHN0YXRlLCBlbnVt
OnVpbnQ4X3QgV1RGTG9nTGV2ZWwgbGV2ZWwpCisKKyNpZiBQTEFURk9STShHVEspCisgICAgU2hv
d0Vtb2ppUGlja2VyKFdlYkNvcmU6OkludFJlY3QgY2FyZXRSZWN0KSAtPiAoU3RyaW5nIHJlc3Vs
dCkgQXN5bmMKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Z3RrL0tleUJpbmRpbmdUcmFuc2xhdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9LZXlCaW5kaW5nVHJhbnNsYXRvci5jcHAKaW5kZXggZjE3OWYxNmYwNTguLjQ0OTBjZTYwMTMx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvS2V5QmluZGluZ1RyYW5z
bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9LZXlCaW5kaW5nVHJh
bnNsYXRvci5jcHAKQEAgLTYwLDYgKzYwLDE0IEBAIHN0YXRpYyB2b2lkIHRvZ2dsZU92ZXJ3cml0
ZUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhCiAg
ICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIk92ZXJXcml0ZSIpOwogfQog
CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDApCitzdGF0aWMgdm9pZCBpbnNlcnRFbW9q
aUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRvciogdHJhbnNs
YXRvcikKK3sKKyAgICBnX3NpZ25hbF9zdG9wX2VtaXNzaW9uX2J5X25hbWUod2lkZ2V0LCAiaW5z
ZXJ0LWVtb2ppIik7CisgICAgdHJhbnNsYXRvci0+YWRkUGVuZGluZ0VkaXRvckNvbW1hbmQoIkd0
a0luc2VydEVtb2ppIik7Cit9CisjZW5kaWYKKwogLy8gR1RLKyB3aWxsIHN0aWxsIHNlbmQgdGhl
c2Ugc2lnbmFscyB0byB0aGUgd2ViIHZpZXcuIFNvIHdlIGNhbiBzYWZlbHkgc3RvcCBzaWduYWwK
IC8vIGVtaXNzaW9uIHdpdGhvdXQgYnJlYWtpbmcgYWNjZXNzaWJpbGl0eS4KIHN0YXRpYyB2b2lk
IHBvcHVwTWVudUNhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBLZXlCaW5kaW5nVHJhbnNsYXRv
ciopCkBAIC0xNzMsNiArMTgxLDkgQEAgS2V5QmluZGluZ1RyYW5zbGF0b3I6OktleUJpbmRpbmdU
cmFuc2xhdG9yKCkKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAi
dG9nZ2xlLW92ZXJ3cml0ZSIsIEdfQ0FMTEJBQ0sodG9nZ2xlT3ZlcndyaXRlQ2FsbGJhY2spLCB0
aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAicG9wdXAt
bWVudSIsIEdfQ0FMTEJBQ0socG9wdXBNZW51Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25h
bF9jb25uZWN0KG1fbmF0aXZlV2lkZ2V0LmdldCgpLCAic2hvdy1oZWxwIiwgR19DQUxMQkFDSyhz
aG93SGVscENhbGxiYWNrKSwgdGhpcyk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMjQsIDAp
CisgICAgZ19zaWduYWxfY29ubmVjdChtX25hdGl2ZVdpZGdldC5nZXQoKSwgImluc2VydC1lbW9q
aSIsIEdfQ0FMTEJBQ0soaW5zZXJ0RW1vamlDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCiB9CiAK
IHN0cnVjdCBLZXlDb21iaW5hdGlvbkVudHJ5IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2d0ay9XZWJQYWdlUHJveHlHdGsuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL1dlYlBhZ2VQcm94eUd0ay5jcHAKaW5kZXggZjYxODZhNWQyNmMuLjUyMGFhYzkyYzAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3Rr
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2ViUGFnZVByb3h5R3RrLmNw
cApAQCAtMTYzLDQgKzE2Myw5IEBAIGJvb2wgV2ViUGFnZVByb3h5OjptYWtlR0xDb250ZXh0Q3Vy
cmVudCgpCiAgICAgcmV0dXJuIHdlYmtpdFdlYlZpZXdCYXNlTWFrZUdMQ29udGV4dEN1cnJlbnQo
V0VCS0lUX1dFQl9WSUVXX0JBU0Uodmlld1dpZGdldCgpKSk7CiB9CiAKK3ZvaWQgV2ViUGFnZVBy
b3h5OjpzaG93RW1vamlQaWNrZXIoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgY2FyZXRSZWN0LCBD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgd2Via2l0V2ViVmlld0Jhc2VTaG93RW1vamlDaG9vc2VyKFdFQktJVF9XRUJfVklFV19CQVNF
KHZpZXdXaWRnZXQoKSksIGNhcmV0UmVjdCwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0TWVudUNsaWVudC5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50LmgKaW5k
ZXggNWQ4ZTdkNmQwZmEuLjZjMjliNGUwODEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQu
aApAQCAtNTUsNiArNTUsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNlYXJjaFdpdGhTcG90bGln
aHQoKSBvdmVycmlkZTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorICAgIHZvaWQgaW5z
ZXJ0RW1vamkoV2ViQ29yZTo6RnJhbWUmKSBvdmVycmlkZTsKKyNlbmRpZgorCiAjaWYgVVNFKEFD
Q0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUykKICAgICB2b2lkIHNob3dDb250ZXh0TWVudSgpIG92
ZXJyaWRlOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmgKaW5kZXggMTk2NDg2MGE0M2UuLjYzNjcz
YzZjYTdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvV2ViRWRpdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5oCkBAIC0xNDAsNyArMTQwLDggQEAgcHJpdmF0ZToK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQotICAgIGJvb2wgZXhlY3V0ZVBlbmRpbmdFZGl0
b3JDb21tYW5kcyhXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mLCBi
b29sKTsKKyAgICBib29sIGV4ZWN1dGVQZW5kaW5nRWRpdG9yQ29tbWFuZHMoV2ViQ29yZTo6RnJh
bWUmLCBjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiwgYm9vbCk7CisgICAgYm9vbCBoYW5kbGVH
dGtFZGl0b3JDb21tYW5kKFdlYkNvcmU6OkZyYW1lJiwgY29uc3QgU3RyaW5nJiBjb21tYW5kLCBi
b29sKTsKICAgICB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgV2ViQ29y
ZTo6S2V5Ym9hcmRFdmVudCosIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKICAgICB2b2lkIHVwZGF0
ZUdsb2JhbFNlbGVjdGlvbihXZWJDb3JlOjpGcmFtZSopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkNvbnRleHRNZW51
Q2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViQ29udGV4dE1lbnVDbGllbnRHdGsuY3BwCmluZGV4IDljZDExZDRjNTFkLi4yZmUyN2Nm
OGUzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L2d0ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKIAogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQogCisjaW5jbHVkZSAi
V2ViUGFnZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KIAogbmFtZXNw
YWNlIFdlYktpdCB7CkBAIC01NSw1ICs1NiwxMCBAQCB2b2lkIFdlYkNvbnRleHRNZW51Q2xpZW50
OjpzdG9wU3BlYWtpbmcoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgV2ViQ29u
dGV4dE1lbnVDbGllbnQ6Omluc2VydEVtb2ppKEZyYW1lJiBmcmFtZSkKK3sKKyAgICBtX3BhZ2Ut
PnNob3dFbW9qaVBpY2tlcihmcmFtZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogI2Vu
ZGlmIC8vIEVOQUJMRShDT05URVhUX01FTlVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRH
dGsuY3BwCmluZGV4IGRiOTk3NzJhMTg3Li5iMjc1ZGVhNjcyOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2Vi
RWRpdG9yQ2xpZW50R3RrLmNwcApAQCAtMjgsMjUgKzI4LDQ4IEBACiAjaW5jbHVkZSA8V2ViQ29y
ZS9QYXN0ZWJvYXJkLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL21hcmt1cC5oPgorI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1ib29sIFdlYkVkaXRvckNsaWVudDo6ZXhlY3V0ZVBl
bmRpbmdFZGl0b3JDb21tYW5kcyhGcmFtZSogZnJhbWUsIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHBlbmRpbmdFZGl0b3JDb21tYW5kcywgYm9vbCBhbGxvd1RleHRJbnNlcnRpb24pCitib29s
IFdlYkVkaXRvckNsaWVudDo6aGFuZGxlR3RrRWRpdG9yQ29tbWFuZChGcmFtZSYgZnJhbWUsIGNv
bnN0IFN0cmluZyYgY29tbWFuZCwgYm9vbCBhbGxvd1RleHRJbnNlcnRpb24pCiB7Ci0gICAgVmVj
dG9yPEVkaXRvcjo6Q29tbWFuZD4gY29tbWFuZHM7Ci0gICAgZm9yIChhdXRvJiBjb21tYW5kU3Ry
aW5nIDogcGVuZGluZ0VkaXRvckNvbW1hbmRzKSB7Ci0gICAgICAgIEVkaXRvcjo6Q29tbWFuZCBj
b21tYW5kID0gZnJhbWUtPmVkaXRvcigpLmNvbW1hbmQoY29tbWFuZFN0cmluZyk7Ci0gICAgICAg
IGlmIChjb21tYW5kLmlzVGV4dEluc2VydGlvbigpICYmICFhbGxvd1RleHRJbnNlcnRpb24pCisg
ICAgaWYgKGNvbW1hbmQgPT0gIkd0a0luc2VydEVtb2ppIl9zKSB7CisgICAgICAgIGlmICghYWxs
b3dUZXh0SW5zZXJ0aW9uKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBtX3Bh
Z2UtPnNob3dFbW9qaVBpY2tlcihmcmFtZSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
IAotICAgICAgICBjb21tYW5kcy5hcHBlbmQoV1RGTW92ZShjb21tYW5kKSk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitib29sIFdlYkVkaXRvckNsaWVudDo6ZXhlY3V0ZVBlbmRpbmdFZGl0b3JD
b21tYW5kcyhGcmFtZSYgZnJhbWUsIGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIHBlbmRpbmdF
ZGl0b3JDb21tYW5kcywgYm9vbCBhbGxvd1RleHRJbnNlcnRpb24pCit7CisgICAgVmVjdG9yPFZh
cmlhbnQ8RWRpdG9yOjpDb21tYW5kLCBTdHJpbmc+PiBjb21tYW5kczsKKyAgICBmb3IgKGF1dG8m
IGNvbW1hbmRTdHJpbmcgOiBwZW5kaW5nRWRpdG9yQ29tbWFuZHMpIHsKKyAgICAgICAgaWYgKGNv
bW1hbmRTdHJpbmcuc3RhcnRzV2l0aCgiR3RrIikpCisgICAgICAgICAgICBjb21tYW5kcy5hcHBl
bmQoY29tbWFuZFN0cmluZyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRWRpdG9yOjpD
b21tYW5kIGNvbW1hbmQgPSBmcmFtZS5lZGl0b3IoKS5jb21tYW5kKGNvbW1hbmRTdHJpbmcpOwor
ICAgICAgICAgICAgaWYgKGNvbW1hbmQuaXNUZXh0SW5zZXJ0aW9uKCkgJiYgIWFsbG93VGV4dElu
c2VydGlvbikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNv
bW1hbmRzLmFwcGVuZChXVEZNb3ZlKGNvbW1hbmQpKTsKKyAgICAgICAgfQogICAgIH0KIAotICAg
IGZvciAoYXV0byYgY29tbWFuZCA6IGNvbW1hbmRzKSB7Ci0gICAgICAgIGlmICghY29tbWFuZC5l
eGVjdXRlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZm9yIChhdXRvJiBjb21t
YW5kVmFyaWFudCA6IGNvbW1hbmRzKSB7CisgICAgICAgIGlmIChXVEY6OmhvbGRzX2FsdGVybmF0
aXZlPFN0cmluZz4oY29tbWFuZFZhcmlhbnQpKSB7CisgICAgICAgICAgICBpZiAoIWhhbmRsZUd0
a0VkaXRvckNvbW1hbmQoZnJhbWUsIFdURjo6Z2V0PFN0cmluZz4oY29tbWFuZFZhcmlhbnQpLCBh
bGxvd1RleHRJbnNlcnRpb24pKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8mIGNvbW1hbmQgPSBXVEY6OmdldDxFZGl0b3I6
OkNvbW1hbmQ+KGNvbW1hbmRWYXJpYW50KTsKKyAgICAgICAgICAgIGlmICghY29tbWFuZC5leGVj
dXRlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC03MywxNCArOTYsMTQgQEAgdm9pZCBXZWJFZGl0b3JDbGll
bnQ6OmhhbmRsZUtleWJvYXJkRXZlbnQoS2V5Ym9hcmRFdmVudCYgZXZlbnQpCiAgICAgICAgIC8v
IHRoZSBpbnNlcnRpb24gdW50aWwgdGhlIGtleXByZXNzIGV2ZW50LiBXZSB3YW50IGtleWRvd24g
dG8gYnViYmxlIHVwCiAgICAgICAgIC8vIHRocm91Z2ggdGhlIERPTSBmaXJzdC4KICAgICAgICAg
aWYgKHBsYXRmb3JtRXZlbnQtPnR5cGUoKSA9PSBQbGF0Zm9ybUV2ZW50OjpSYXdLZXlEb3duKSB7
Ci0gICAgICAgICAgICBpZiAoZXhlY3V0ZVBlbmRpbmdFZGl0b3JDb21tYW5kcyhmcmFtZSwgcGVu
ZGluZ0VkaXRvckNvbW1hbmRzLCBmYWxzZSkpCisgICAgICAgICAgICBpZiAoZXhlY3V0ZVBlbmRp
bmdFZGl0b3JDb21tYW5kcygqZnJhbWUsIHBlbmRpbmdFZGl0b3JDb21tYW5kcywgZmFsc2UpKQog
ICAgICAgICAgICAgICAgIGV2ZW50LnNldERlZmF1bHRIYW5kbGVkKCk7CiAKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIC8vIE9ubHkgYWxsb3cgdGV4dCBpbnNlcnRp
b24gY29tbWFuZHMgaWYgdGhlIGN1cnJlbnQgbm9kZSBpcyBlZGl0YWJsZS4KLSAgICAgICAgaWYg
KGV4ZWN1dGVQZW5kaW5nRWRpdG9yQ29tbWFuZHMoZnJhbWUsIHBlbmRpbmdFZGl0b3JDb21tYW5k
cywgZnJhbWUtPmVkaXRvcigpLmNhbkVkaXQoKSkpIHsKKyAgICAgICAgaWYgKGV4ZWN1dGVQZW5k
aW5nRWRpdG9yQ29tbWFuZHMoKmZyYW1lLCBwZW5kaW5nRWRpdG9yQ29tbWFuZHMsIGZyYW1lLT5l
ZGl0b3IoKS5jYW5FZGl0KCkpKSB7CiAgICAgICAgICAgICBldmVudC5zZXREZWZhdWx0SGFuZGxl
ZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggNzMyODkwYzdjNTcuLmM0ODZmYzQ2NzE0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC03NjMsNiAr
NzYzLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2FuY2VsQ29tcG9zaXRpb24oKTsKIAogICAgIHZv
aWQgY29sbGFwc2VTZWxlY3Rpb25JbkZyYW1lKHVpbnQ2NF90IGZyYW1lSUQpOworICAgIHZvaWQg
c2hvd0Vtb2ppUGlja2VyKFdlYkNvcmU6OkZyYW1lJik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
IChHVEspICYmIEhBVkUoR1RLX0dFU1RVUkVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvZ3RrL1dlYlBhZ2VHdGsuY3BwCmluZGV4IDQ3ZTI1MzI1ZDcyLi44YzNh
M2QxNzEwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ3Rr
L1dlYlBhZ2VHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2d0
ay9XZWJQYWdlR3RrLmNwcApAQCAtMTk1LDYgKzE5NSwxNSBAQCB2b2lkIFdlYlBhZ2U6OmNvbGxh
cHNlU2VsZWN0aW9uSW5GcmFtZSh1aW50NjRfdCBmcmFtZUlEKQogICAgIGZyYW1lLT5jb3JlRnJh
bWUoKS0+c2VsZWN0aW9uKCkuc2V0QmFzZShzZWxlY3Rpb24uZXh0ZW50KCksIHNlbGVjdGlvbi5h
ZmZpbml0eSgpKTsKIH0KIAordm9pZCBXZWJQYWdlOjpzaG93RW1vamlQaWNrZXIoRnJhbWUmIGZy
YW1lKQoreworICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoU3RyaW5nKT4gY29tcGxldGlvbkhh
bmRsZXIgPSBbZnJhbWUgPSBtYWtlUmVmKGZyYW1lKV0oU3RyaW5nIHJlc3VsdCkgeworICAgICAg
ICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBmcmFtZS0+ZWRpdG9yKCkuaW5z
ZXJ0VGV4dChyZXN1bHQsIG51bGxwdHIpOworICAgIH07CisgICAgc2VuZFdpdGhBc3luY1JlcGx5
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNob3dFbW9qaVBpY2tlcihmcmFtZS5zZWxlY3Rpb24o
KS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Cit9
CisKIHZvaWQgV2ViUGFnZTo6ZWZmZWN0aXZlQXBwZWFyYW5jZURpZENoYW5nZShib29sIHVzZURh
cmtBcHBlYXJhbmNlLCBib29sIHVzZUluYWN0aXZlQXBwZWFyYW5jZSkKIHsKICAgICBpZiAoYXV0
byogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2RlZmF1bHQoKSkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA5MTIwOTNmMGZmZS4uZmFiODIx
NmVmYmMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNCBAQAorMjAxOS0wNS0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gTmVlZCBXZWJLaXRDb250ZXh0TWVudUl0
ZW1UeXBlIHRvIG9wZW4gZW1vamkgcGlja2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY3NjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBVcGRhdGUgY29udGV4dCBtZW51IHRlc3QgdG8gY2hlY2sgaW5z
ZXJ0IGVtb2ppIGFjdGlvbiBpcyBpbmNsdWRlZCBpbiBkZWZhdWx0IGNvbnRleHQgbWVudSBmb3Ig
ZWRpdGFibGUgY29udGVudC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
R3RrL1Rlc3RDb250ZXh0TWVudS5jcHA6CisKIDIwMTktMDUtMTUgIEFha2FzaCBKYWluICA8YWFr
YXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgZG91YmxlLXF1b3RlcyB3aXRo
IHNpbmdsZSBxdW90ZXMgaW4gc3RlcHMucHkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0R3RrL1Rlc3RDb250ZXh0TWVudS5jcHAgYi9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdEd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCmluZGV4IGQ3ZmM3MzQ4NDhl
Li41MDJiNWU2Mzc5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJL
aXRHdGsvVGVzdENvbnRleHRNZW51LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdEd0ay9UZXN0Q29udGV4dE1lbnUuY3BwCkBAIC00MDIsNiArNDAyLDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1N0b2NrQWN0aW9uQW5kR2V0
TmV4dChpdGVyLCBXRUJLSVRfQ09OVEVYVF9NRU5VX0FDVElPTl9ERUxFVEUsIFZpc2libGUpOwog
ICAgICAgICAgICAgaXRlciA9IGNoZWNrQ3VycmVudEl0ZW1Jc1NlcGFyYXRvckFuZEdldE5leHQo
aXRlcik7CiAgICAgICAgICAgICBpdGVyID0gY2hlY2tDdXJyZW50SXRlbUlzU3RvY2tBY3Rpb25B
bmRHZXROZXh0KGl0ZXIsIFdFQktJVF9DT05URVhUX01FTlVfQUNUSU9OX1NFTEVDVF9BTEwsIFZp
c2libGUgfCBFbmFibGVkKTsKKyAgICAgICAgICAgIGl0ZXIgPSBjaGVja0N1cnJlbnRJdGVtSXNT
dG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NPTlRFWFRfTUVOVV9BQ1RJT05fSU5T
RVJUX0VNT0pJLCBWaXNpYmxlIHwgRW5hYmxlZCk7CiAgICAgICAgICAgICBpdGVyID0gY2hlY2tD
dXJyZW50SXRlbUlzU2VwYXJhdG9yQW5kR2V0TmV4dChpdGVyKTsKICAgICAgICAgICAgIGl0ZXIg
PSBjaGVja0N1cnJlbnRJdGVtSXNTdG9ja0FjdGlvbkFuZEdldE5leHQoaXRlciwgV0VCS0lUX0NP
TlRFWFRfTUVOVV9BQ1RJT05fVU5JQ09ERSwgVmlzaWJsZSB8IEVuYWJsZWQpOwogICAgICAgICAg
ICAgYnJlYWs7Cg==
</data>
<flag name="review"
          id="386051"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>