<?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>112734</bug_id>
          
          <creation_ts>2013-03-19 12:23:02 -0700</creation_ts>
          <short_desc>Refactored script content removal in the fragment parser for clarity and speed</short_desc>
          <delta_ts>2013-03-19 15:30:23 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>d-r</cc>
    
    <cc>enrica</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>rwlbuis</cc>
    
    <cc>schenney</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>858603</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 12:23:02 -0700</bug_when>
    <thetext>Refactored script content removal in the fragment parser for clarity and speed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858697</commentid>
    <comment_count>1</comment_count>
      <attachid>193913</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 13:47:55 -0700</bug_when>
    <thetext>Created attachment 193913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858701</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-19 13:49:38 -0700</bug_when>
    <thetext>Attachment 193913 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/editing/pasteboard/paste-noscript-expected.txt&apos;, u&apos;LayoutTests/editing/pasteboard/paste-noscript-svg-expected.txt&apos;, u&apos;LayoutTests/editing/pasteboard/paste-noscript-xhtml-expected.txt&apos;, u&apos;LayoutTests/editing/pasteboard/paste-noscript.html&apos;, u&apos;LayoutTests/editing/pasteboard/paste-visible-script-expected.txt&apos;, u&apos;LayoutTests/editing/pasteboard/resources/paste-noscript-content.html&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/WebCore.exp.in&apos;, u&apos;Source/WebCore/dom/DocumentFragment.cpp&apos;, u&apos;Source/WebCore/dom/DocumentFragment.h&apos;, u&apos;Source/WebCore/dom/Element.cpp&apos;, u&apos;Source/WebCore/dom/Element.h&apos;, u&apos;Source/WebCore/dom/FragmentScriptingPermission.h&apos;, u&apos;Source/WebCore/dom/ScriptableDocumentParser.cpp&apos;, u&apos;Source/WebCore/dom/ScriptableDocumentParser.h&apos;, u&apos;Source/WebCore/editing/markup.cpp&apos;, u&apos;Source/WebCore/editing/markup.h&apos;, u&apos;Source/WebCore/html/HTMLAnchorElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLBaseElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLElement.cpp&apos;, u&apos;Source/WebCore/html/HTMLLinkElement.cpp&apos;, u&apos;Source/WebCore/html/parser/HTMLConstructionSite.cpp&apos;, u&apos;Source/WebCore/html/parser/HTMLConstructionSite.h&apos;, u&apos;Source/WebCore/html/parser/HTMLDocumentParser.cpp&apos;, u&apos;Source/WebCore/html/parser/HTMLDocumentParser.h&apos;, u&apos;Source/WebCore/html/parser/HTMLTreeBuilder.cpp&apos;, u&apos;Source/WebCore/html/parser/HTMLTreeBuilder.h&apos;, u&apos;Source/WebCore/platform/blackberry/PasteboardBlackBerry.cpp&apos;, u&apos;Source/WebCore/platform/chromium/DragDataChromium.cpp&apos;, u&apos;Source/WebCore/platform/chromium/PasteboardChromium.cpp&apos;, u&apos;Source/WebCore/platform/gtk/PasteboardGtk.cpp&apos;, u&apos;Source/WebCore/platform/mac/PasteboardMac.mm&apos;, u&apos;Source/WebCore/platform/qt/DragDataQt.cpp&apos;, u&apos;Source/WebCore/platform/qt/PasteboardQt.cpp&apos;, u&apos;Source/WebCore/platform/win/ClipboardUtilitiesWin.cpp&apos;, u&apos;Source/WebCore/platform/wx/PasteboardWx.cpp&apos;, u&apos;Source/WebCore/svg/SVGAElement.cpp&apos;, u&apos;Source/WebCore/svg/SVGAElement.h&apos;, u&apos;Source/WebCore/xml/XMLErrors.cpp&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParser.cpp&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParser.h&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp&apos;, u&apos;Source/WebCore/xml/parser/XMLDocumentParserQt.cpp&apos;]&quot; exit_code: 1
Source/WebCore/dom/FragmentScriptingPermission.h:28:  #ifndef header guard has wrong style, please use: FragmentScriptingPermission_h  [build/header_guard] [5]
Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:708:  nb_namespaces is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:734:  nb_attributes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 3 in 44 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858718</commentid>
    <comment_count>3</comment_count>
      <attachid>193913</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2013-03-19 14:14:01 -0700</bug_when>
    <thetext>Comment on attachment 193913
Patch

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

Looks good to me. This is a great improvement!

&gt; Source/WebCore/dom/Element.cpp:-1034
&gt; -void Element::parserSetAttributes(const Vector&lt;Attribute&gt;&amp; attributeVector, FragmentScriptingPermission scriptingPermission)

This is very clever!

&gt; Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:-703
&gt; -static inline void handleNamespaceAttributes(Vector&lt;Attribute, 8&gt;&amp; prefixedAttributes, const xmlChar** libxmlNamespaces, int nb_namespaces, ExceptionCode&amp; ec)

Why did you remove the 8?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858741</commentid>
    <comment_count>4</comment_count>
      <attachid>193913</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 14:32:31 -0700</bug_when>
    <thetext>Comment on attachment 193913
Patch

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

&gt; Source/WebCore/dom/Element.cpp:1047
&gt; +    size_t dst = 0;

Please don&apos;t use abbreviations like dst.

&gt; Source/WebCore/dom/Element.cpp:1048
&gt; +    for (size_t src = 0; src &lt; attributeVector.size(); ++src) {

or src.

&gt; Source/WebCore/dom/ScriptableDocumentParser.cpp:42
&gt; +    if (!pluginContentIsAllowed(m_parserContentPolicy) &amp;&amp; (!document-&gt;settings() || document-&gt;settings()-&gt;unsafePluginPastingEnabled()))
&gt; +        m_parserContentPolicy = allowPluginContent(m_parserContentPolicy);

Why are we not doing this in the caller?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858751</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 14:43:14 -0700</bug_when>
    <thetext>&gt; Looks good to me. This is a great improvement!

Thanks! :)

&gt; &gt; Source/WebCore/xml/parser/XMLDocumentParserLibxml2.cpp:-703
&gt; &gt; -static inline void handleNamespaceAttributes(Vector&lt;Attribute, 8&gt;&amp; prefixedAttributes, const xmlChar** libxmlNamespaces, int nb_namespaces, ExceptionCode&amp; ec)
&gt; 
&gt; Why did you remove the 8?

I wanted the HTML parser and the XML parser to use the same helper functions, and the HTML parser didn&apos;t have the 8. I could have change the HTML parser to include the 8, but I guessed that the HTML parser was the better thing to copy, since it gets more performance testing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858755</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 14:45:32 -0700</bug_when>
    <thetext>&gt; Please don&apos;t use abbreviations like dst.
&gt; or src.

Will fix.

&gt; &gt; +    if (!pluginContentIsAllowed(m_parserContentPolicy) &amp;&amp; (!document-&gt;settings() || document-&gt;settings()-&gt;unsafePluginPastingEnabled()))
&gt; &gt; +        m_parserContentPolicy = allowPluginContent(m_parserContentPolicy);
&gt; 
&gt; Why are we not doing this in the caller?

We used to do this in the caller, but I worried it was error prone to make each caller do this check. I thought about this because I&apos;m looking at adding another settings check, and I was especially worried about having to add that check to all the right call sites.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858767</commentid>
    <comment_count>7</comment_count>
      <attachid>193913</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-03-19 14:51:55 -0700</bug_when>
    <thetext>Comment on attachment 193913
Patch

Attachment 193913 did not pass win-ews (win):
Output: http://webkit-commit-queue.appspot.com/results/17135444</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858771</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-19 14:54:00 -0700</bug_when>
    <thetext>Committed r146264: &lt;http://trac.webkit.org/changeset/146264&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>858812</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-03-19 15:30:23 -0700</bug_when>
    <thetext>Windows build fix landed in http://trac.webkit.org/changeset/146270.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>193913</attachid>
            <date>2013-03-19 13:47:55 -0700</date>
            <delta_ts>2013-03-19 14:51:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-112734-20130319134346.patch</filename>
            <type>text/plain</type>
            <size>81737</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NjIzNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxMy0wMy0xOSAgR2VvZmZy
ZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yZWQgc2NyaXB0
IGNvbnRlbnQgcmVtb3ZhbCBpbiB0aGUgZnJhZ21lbnQgcGFyc2VyIGZvciBjbGFyaXR5IGFuZCBz
cGVlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEy
NzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmV4cC5pbjogRXhwb3J0IQorCisgICAgICAgICogZG9tL0RvY3VtZW50RnJhZ21lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRGcmFnbWVudDo6cGFyc2VIVE1MKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50RnJhZ21lbnQ6OnBhcnNlWE1MKToKKyAgICAgICAgKiBk
b20vRG9jdW1lbnRGcmFnbWVudC5oOgorICAgICAgICAoRG9jdW1lbnRGcmFnbWVudCk6IFVwZGF0
ZWQgZm9yIHJlbmFtZSBvZiBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gdG8KKyAgICAgICAg
UGFyc2VyQ29udGVudFBvbGljeS4KKworICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmlzSmF2YVNjcmlwdFVSTEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50Ojppc0phdmFTY3JpcHRBdHRyaWJ1dGUpOiBGaXhlZCBhIEZJWE1FIGJ5IGZhY3Rvcmlu
ZworICAgICAgICBvdXQgc29tZSBoZWxwZXIgZnVuY3Rpb24gdGhhdCByZXVzZSBpc1VSTEF0dHJp
YnV0ZSgpLiBUaGlzIG1ha2VzIG91cgorICAgICAgICBhdHRyaWJ1dGUgcmVtb3ZhbCBzbGlnaHRs
eSBtb3JlIHByZWNpc2UsIGFzIHJlZmxlY3RlZCBpbiB0ZXN0IGNoYW5nZXMuCisKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnN0cmlwSmF2YVNjcmlwdEF0dHJpYnV0ZXMpOiBGYWN0b3JlZCB0
aGlzIGZ1bmN0aW9uIG91dAorICAgICAgICBvZiBwYXJzZXJTZXRBdHRyaWJ1dGVzIHRvIGNsYXJp
ZnkgdGhhdCB0aGUgcGFyc2VyIGlzIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICBmdWxseSByZW1v
dmluZyBzY3JpcHRzIGJlZm9yZSBpbnNlcnRpbmcgY29udGVudCBpbnRvIHRoZSBET00uCisKKyAg
ICAgICAgTm93IHRoYXQgdGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiwgd2UgY2FuIGF2b2lkIGRv
aW5nIGFueSB3b3JrIGluIHRoZQorICAgICAgICBjb21tb24gY2FzZSwgd2hlcmUgc2NyaXB0IGNv
bnRlbnQgaXMgYWxsb3dlZC4gQWxzbywgd2hlbiB3ZSBkbyBoYXZlIHRvCisgICAgICAgIHN0cmlw
IGF0dHJpYnV0ZXMsIHdlIHVzZSAidHdvIGZpbmdlciBjb21wYWN0aW9uIiB0byBhdm9pZCBjb3B5
aW5nIHRoZQorICAgICAgICB2ZWN0b3IsIGFuZCB0byBhdm9pZCBPKE4pIHZlY3RvciByZW1vdmFs
IG9wZXJhdGlvbnMgd2hlbiB0aGVyZSBpcworICAgICAgICBzb21ldGhpbmcgdG8gcmVtb3ZlLgor
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5oOgorCisgICAgICAgICogZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6c2NyaXB0aW5nQ29udGVudElzQWxsb3dlZCk6
CisgICAgICAgIChXZWJDb3JlOjpkaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6cGx1Z2luQ29udGVudElzQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjphbGxv
d1BsdWdpbkNvbnRlbnQpOiBSZW5hbWVkIGZvciBjbGFyaXR5LCBhbmQgYWRkZWQgc29tZSBoZWxw
ZXIKKyAgICAgICAgZnVuY3Rpb25zIGZvciByZWFkaW5nIHZhbHVlcyBvdXQgb2YgdGhpcyBlbnVt
LgorCisgICAgICAgICogZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OlNjcmlwdGFibGVEb2N1bWVudFBh
cnNlcik6IE1vdmVkCisgICAgICAgIGEgc2V0dGluZ3MgY2hlY2sgaW50byB0aGUgcGFyc2VyIGNv
bnN0cnVjdG9yIHNvIHdlJ3JlIHN1cmUgdGhhdCBhbGwKKyAgICAgICAgY2xpZW50cyBnZXQgdGhl
IHJpZ2h0IGJlaGF2aW9yLgorCisgICAgICAgICogZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyOjpwYXJzZXJD
b250ZW50UG9saWN5KToKKyAgICAgICAgKFNjcmlwdGFibGVEb2N1bWVudFBhcnNlcik6CisgICAg
ICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21l
bnRGcm9tTWFya3VwKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cFdpdGhDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJP
dXRlckhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KToK
KyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5oOiBVcGRhdGVkIGZvciByZW5hbWVzLgorCisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZQorICAgICAg
ICBpc1VSTEF0dHJpYnV0ZSB3b3VsZCBpZ25vcmUgaHJlZiBhdHRyaWJ1dGVzIGluIG90aGVyIG5h
bWVzcGFjZXMsIGxpa2UKKyAgICAgICAgeGxpbms6aHJlZi4KKworICAgICAgICAqIGh0bWwvSFRN
TEJhc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCYXNlRWxlbWVudDo6aXNV
UkxBdHRyaWJ1dGUpOiBTYW1lIGJ1Zy4KKworICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKTogRml4ZWQg
YSBsb2dpYyBlcnJvciB3aGVyZSBIVE1MRWxlbWVudAorICAgICAgICB3b3VsZG4ndCBjYWxsIHRo
cm91Z2ggdG8gaXRzIGJhc2UgY2xhc3MuCisKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OmlzVVJMQXR0cmlidXRl
KTogU2FtZSBpc1VSTEF0dHJpYnV0ZSBuYW1lc3BhY2UKKyAgICAgICAgYnVnIGFzIGFib3ZlLgor
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0QXR0cmlidXRlcyk6IEhlbHBlciBmdW5jdGlvbiBmb3Igb3B0aW9uYWxs
eSBzdHJpcHBpbmcKKyAgICAgICAgZGlzYWxsb3dlZCBhdHRyaWJ1dGVzIGJlZm9yZSBzZXR0aW5n
IHRoZW0gb24gYW4gZWxlbWVudC4gVGhpcyBoZWxwcyBhbGwKKyAgICAgICAgY2xpZW50cyBnZXQg
dGhlIHJpZ2h0IGJlaGF2aW9yIHdpdGhvdXQgc3ByaW5rbGluZyBjaGVja3MgZXZlcnl3aGVyZS4K
KworICAgICAgICAoV2ViQ29yZTo6SFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1Y3Rp
b25TaXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRI
VE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6aW5zZXJ0U2NyaXB0RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q29uc3RydWN0aW9uU2l0ZTo6Y3JlYXRlSFRNTEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmg6CisgICAgICAgIChIVE1MQ29uc3RydWN0aW9uU2l0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6cGFyc2VyQ29udGVu
dFBvbGljeSk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cnVuU2NyaXB0c0ZvclBh
dXNlZFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VEb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuaDoKKyAgICAgICAgKEhUTUxEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZSk6CisgICAgICAgICogaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6
SFRNTFRyZWVCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6RnJh
Z21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dCk6CisgICAgICAgIFVw
ZGF0ZWQgZm9yIHJlbmFtZXMgYW5kIGludGVyZmFjZSBjaGFuZ2VzIGFib3ZlLgorCisgICAgICAg
IChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcpOiBSZW1vdmVk
IGlzUGFyc2luZ0ZyYWdtZW50KCkKKyAgICAgICAgY2hlY2tzIHRvIG1ha2UgaXQgcG9zc2libGUg
dG8gdXNlIFBhcnNlckNvbnRlbnRQb2xpY3kgaW4gbW9yZSBwbGFjZXMuCisKKyAgICAgICAgUmVt
b3ZlZCBjYWxsIHRvIHJlbW92ZUNoaWxkcmVuKCkgYmVjYXVzZSwgaWYgYW4gZWxlbWVudCBpcyBm
b3JiaWRkZW4sCisgICAgICAgIHdlIGZ1bGx5IHJlbW92ZSB0aGUgZWxlbWVudCBub3cuIFRoaXMg
YnJpbmdzIGJlaGF2aW9yIGZvciA8c2NyaXB0PgorICAgICAgICBlbGVtZW50cyBpbiBsaW5lIHdp
dGggYmVoYXZpb3IgZm9yIHBsdWctaW4gZWxlbWVudHMuIEl0IGFsc28gYnJpbmdzCisgICAgICAg
IGJlaGF2aW9yIG9mIHRoZSBIVE1MIHBhcnNlciBpbiBsaW5lIHdpdGggYmVoYXZpb3Igb2YgdGhl
IFhNTCBwYXJzZXIuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEZy
YWdtZW50UGFyc2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRyZWVCdWlsZGVy
OjpGcmFnbWVudFBhcnNpbmdDb250ZXh0Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICogcGxh
dGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRh
Ojphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVu
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpk
b2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc0ZyYWdtZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxp
dGllc1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmcmFnbWVudEZyb21DRkhUTUwpOgorICAg
ICAgICAoV2ViQ29yZTo6ZnJhZ21lbnRGcm9tSFRNTCk6CisgICAgICAgICogcGxhdGZvcm0vd3gv
UGFzdGVib2FyZFd4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50
RnJhZ21lbnQpOiBVcGRhdGVkIGZvciByZW5hbWVzIGFuZCBpbnRlcmZhY2UKKyAgICAgICAgY2hh
bmdlcy4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUpOiBGaXhlZCBhIGJ1ZyB3aGVyZSBTVkcgYW5j
aG9yCisgICAgICAgIGVsZW1lbnRzIGRpZG4ndCBpZGVudGlmeSB0aGVpciBVUkwgYXR0cmlidXRl
cy4KKworICAgICAgICAqIHN2Zy9TVkdBRWxlbWVudC5oOgorICAgICAgICAoU1ZHQUVsZW1lbnQp
OgorCisgICAgICAgICogeG1sL1hNTEVycm9ycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVh
dGVYSFRNTFBhcnNlckVycm9ySGVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEVycm9yczo6
aW5zZXJ0RXJyb3JNZXNzYWdlQmxvY2spOiBObyBuZWVkIHRvIGRpc2FsbG93CisgICAgICAgIHNj
cmlwdGluZyBhdHRyaWJ1dGVzIGhlcmUgYmVjYXVzZSB3ZSdyZSBjcmVhdGluZyB0aGUgYXR0cmli
dXRlcyAKKyAgICAgICAgb3Vyc2VsdmVzIGFuZCB3ZSBrbm93IHRoZXkncmUgbm90IHNjcmlwdGlu
ZyBhdHRyaWJ1dGVzLgorCisgICAgICAgICogeG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZy
YWdtZW50KToKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKToKKyAgICAgICAgKFhNTERv
Y3VtZW50UGFyc2VyKTogVXBkYXRlZCBmb3IgcmVuYW1lcyBhbmQgaW50ZXJmYWNlIGNoYW5nZXMg
YWJvdmUuCisKKyAgICAgICAgKiB4bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyTGlieG1sMi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKToKKyAgICAgICAgKFdlYkNvcmU6OlhN
TERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMpOgorICAgICAgICAqIHhtbC9wYXJzZXIvWE1M
RG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRBdHRyaWJ1dGVzKToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6
OlhNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OmhhbmRsZU5hbWVzcGFjZUF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRWxlbWVudEF0dHJpYnV0ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlU3RhcnRFbGVtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwYXJzZUVuZEVsZW1lbnQpOiBT
YW1lIGNoYW5nZXMgYXMgZm9yIHRoZQorICAgICAgICBIVE1MIHBhcnNlci4KKwogMjAxMy0wMy0x
OSAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW1dpbkNh
aXJvXSBVbnJldmlld2VkIGJ1aWxkIGNvcnJlY3Rpb24gZm9yIFdlYkNvcmUgbGlicmFyeS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZXhwLmluCShyZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtNzA0LDYgKzcwNCw3IEBAIF9fWk43
V2ViQ29yZTI0Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyMTEKIF9fWk43V2ViQ29yZTI0Q29tcG9z
ZWRTaGFkb3dUcmVlV2Fsa2VyNG5leHRFdgogX19aTjdXZWJDb3JlMjRDb21wb3NlZFNoYWRvd1Ry
ZWVXYWxrZXI4cHJldmlvdXNFdgogX19aTjdXZWJDb3JlMjRDb21wb3NlZFNoYWRvd1RyZWVXYWxr
ZXI5bGFzdENoaWxkRXYKK19fWk43V2ViQ29yZTI0Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwRVBO
U184RG9jdW1lbnRFUktOM1dURjZTdHJpbmdFUzVfTlNfMTlQYXJzZXJDb250ZW50UG9saWN5RQog
X19aTjdXZWJDb3JlMjREb2N1bWVudE1hcmtlckNvbnRyb2xsZXIxMG1hcmtlcnNGb3JFUE5TXzRO
b2RlRU5TXzE0RG9jdW1lbnRNYXJrZXIxMU1hcmtlclR5cGVzRQogX19aTjdXZWJDb3JlMjREb2N1
bWVudE1hcmtlckNvbnRyb2xsZXIxM3JlbW92ZU1hcmtlcnNFTlNfMTREb2N1bWVudE1hcmtlcjEx
TWFya2VyVHlwZXNFCiBfX1pON1dlYkNvcmUyNERvY3VtZW50TWFya2VyQ29udHJvbGxlcjE4YWRk
VGV4dE1hdGNoTWFya2VyRVBLTlNfNVJhbmdlRWIKQEAgLTcxNiw3ICs3MTcsNiBAQCBfX1pON1dl
YkNvcmUyNEZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlckQyCiBfX1pON1dlYkNvcmUyNFNjb3BlQ29u
dGVudERpc3RyaWJ1dGlvbjE2aGFzU2hhZG93RWxlbWVudEVQS05TXzEwU2hhZG93Um9vdEUKIF9f
Wk43V2ViQ29yZTI0U2NvcGVDb250ZW50RGlzdHJpYnV0aW9uMThjb3VudEVsZW1lbnRTaGFkb3dF
UEtOU18xMFNoYWRvd1Jvb3RFCiBfX1pON1dlYkNvcmUyNFNjb3BlQ29udGVudERpc3RyaWJ1dGlv
bjE3aGFzQ29udGVudEVsZW1lbnRFUEtOU18xMFNoYWRvd1Jvb3RFCi1fX1pON1dlYkNvcmUyNGNy
ZWF0ZUZyYWdtZW50RnJvbU1hcmt1cEVQTlNfOERvY3VtZW50RVJLTjNXVEY2U3RyaW5nRVM1X05T
XzI3RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uRQogX19aTjdXZWJDb3JlMjRkZWNvZGVVUkxF
c2NhcGVTZXF1ZW5jZXNFUktOM1dURjZTdHJpbmdFCiBfX1pON1dlYkNvcmUyNGRlbGV0ZUNvb2tp
ZXNGb3JIb3N0bmFtZUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTjNXVEY2U3RyaW5n
RQogX19aTjdXZWJDb3JlMjRmaWxlU3lzdGVtUmVwcmVzZW50YXRpb25FUktOM1dURjZTdHJpbmdF
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50RnJhZ21lbnQuY3BwCShyZXZpc2lvbiAx
NDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDE0ICs3NSwxNCBAQCBQYXNzUmVmUHRyPE5vZGU+IERvY3VtZW50RnJh
Z21lbnQ6OmNsb25lCiAgICAgcmV0dXJuIGNsb25lLnJlbGVhc2UoKTsKIH0KIAotdm9pZCBEb2N1
bWVudEZyYWdtZW50OjpwYXJzZUhUTUwoY29uc3QgU3RyaW5nJiBzb3VyY2UsIEVsZW1lbnQqIGNv
bnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlz
c2lvbikKK3ZvaWQgRG9jdW1lbnRGcmFnbWVudDo6cGFyc2VIVE1MKGNvbnN0IFN0cmluZyYgc291
cmNlLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJD
b250ZW50UG9saWN5KQogewotICAgIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZy
YWdtZW50KHNvdXJjZSwgdGhpcywgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24p
OworICAgIEhUTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdtZW50KHNvdXJjZSwg
dGhpcywgY29udGV4dEVsZW1lbnQsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogfQogCi1ib29sIERv
Y3VtZW50RnJhZ21lbnQ6OnBhcnNlWE1MKGNvbnN0IFN0cmluZyYgc291cmNlLCBFbGVtZW50KiBj
b250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1p
c3Npb24pCitib29sIERvY3VtZW50RnJhZ21lbnQ6OnBhcnNlWE1MKGNvbnN0IFN0cmluZyYgc291
cmNlLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJD
b250ZW50UG9saWN5KQogewotICAgIHJldHVybiBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1
bWVudEZyYWdtZW50KHNvdXJjZSwgdGhpcywgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1p
c3Npb24pOworICAgIHJldHVybiBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VEb2N1bWVudEZyYWdt
ZW50KHNvdXJjZSwgdGhpcywgY29udGV4dEVsZW1lbnQsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwog
fQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRGcmFnbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHJldmlzaW9u
IDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudEZyYWdtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudCA6IHB1Ymxp
YyBDb250YWluZQogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGNyZWF0ZShEb2N1bWVudCopOwogCi0gICAgdm9pZCBwYXJzZUhUTUwoY29uc3QgU3RyaW5n
JiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiA9
IEFsbG93U2NyaXB0aW5nQ29udGVudCk7Ci0gICAgYm9vbCBwYXJzZVhNTChjb25zdCBTdHJpbmcm
LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0g
QWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICB2b2lkIHBhcnNlSFRNTChjb25zdCBTdHJpbmcm
LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2Ny
aXB0aW5nQ29udGVudCk7CisgICAgYm9vbCBwYXJzZVhNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50
KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0aW5nQ29u
dGVudCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhbkNvbnRhaW5SYW5nZUVuZFBvaW50KCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1RlbXBsYXRlQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMTksNTcgKzEwMTksNjEgQEAgYm9vbCBFbGVtZW50OjpzaG91bGRJbnZh
bGlkYXRlRGlzdHJpYnV0aQogLy8gSXQgaXMgYSBzaW1wbGUgc29sdXRpb24gdGhhdCBoYXMgdGhl
IGFkdmFudGFnZSBvZiBub3QgcmVxdWlyaW5nIGFueQogLy8gY29kZSBvciBjb25maWd1cmF0aW9u
IGNoYW5nZSBpZiBhIG5ldyBldmVudCBoYW5kbGVyIGlzIGRlZmluZWQuCiAKLXN0YXRpYyBib29s
IGlzRXZlbnRIYW5kbGVyQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNFdmVudEhhbmRsZXJBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBh
dHRyaWJ1dGUpCiB7Ci0gICAgcmV0dXJuIG5hbWUubmFtZXNwYWNlVVJJKCkuaXNOdWxsKCkgJiYg
bmFtZS5sb2NhbE5hbWUoKS5zdGFydHNXaXRoKCJvbiIpOworICAgIHJldHVybiBhdHRyaWJ1dGUu
bmFtZSgpLm5hbWVzcGFjZVVSSSgpLmlzTnVsbCgpICYmIGF0dHJpYnV0ZS5uYW1lKCkubG9jYWxO
YW1lKCkuc3RhcnRzV2l0aCgib24iKTsKIH0KIAotLy8gRklYTUU6IFNoYXJlIGNvZGUgd2l0aCBF
bGVtZW50Ojppc1VSTEF0dHJpYnV0ZS4KLXN0YXRpYyBib29sIGlzQXR0cmlidXRlVG9SZW1vdmUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKK2Jv
b2wgRWxlbWVudDo6aXNKYXZhU2NyaXB0VVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0
cmlidXRlKQogewotICAgIHJldHVybiAobmFtZS5sb2NhbE5hbWUoKSA9PSBocmVmQXR0ci5sb2Nh
bE5hbWUoKSB8fCBuYW1lLmxvY2FsTmFtZSgpID09IG5vaHJlZkF0dHIubG9jYWxOYW1lKCkKLSAg
ICAgICAgfHwgbmFtZSA9PSBzcmNBdHRyIHx8IG5hbWUgPT0gYWN0aW9uQXR0ciB8fCBuYW1lID09
IGZvcm1hY3Rpb25BdHRyKSAmJiBwcm90b2NvbElzSmF2YVNjcmlwdChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXModmFsdWUpKTsKKyAgICBpZiAoIWlzVVJMQXR0cmlidXRlKGF0dHJp
YnV0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXByb3RvY29sSXNKYXZhU2Ny
aXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyaWJ1dGUudmFsdWUoKSkp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgRWxl
bWVudDo6aXNKYXZhU2NyaXB0QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQor
eworICAgIGlmIChpc0V2ZW50SGFuZGxlckF0dHJpYnV0ZShhdHRyaWJ1dGUpKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAoaXNKYXZhU2NyaXB0VVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkp
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBFbGVt
ZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1
dGVWZWN0b3IsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQordm9pZCBFbGVtZW50OjpzdHJpcEphdmFTY3JpcHRBdHRyaWJ1dGVzKFZlY3RvcjxBdHRyaWJ1
dGU+JiBhdHRyaWJ1dGVWZWN0b3IpCit7CisgICAgc2l6ZV90IGRzdCA9IDA7CisgICAgZm9yIChz
aXplX3Qgc3JjID0gMDsgc3JjIDwgYXR0cmlidXRlVmVjdG9yLnNpemUoKTsgKytzcmMpIHsKKyAg
ICAgICAgaWYgKGlzSmF2YVNjcmlwdEF0dHJpYnV0ZShhdHRyaWJ1dGVWZWN0b3Jbc3JjXSkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoc3JjICE9IGRzdCkKKyAgICAgICAg
ICAgIGF0dHJpYnV0ZVZlY3Rvcltkc3RdID0gYXR0cmlidXRlVmVjdG9yW3NyY107CisKKyAgICAg
ICAgKytkc3Q7CisgICAgfQorICAgIGF0dHJpYnV0ZVZlY3Rvci5zaHJpbmsoZHN0KTsKK30KKwor
dm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+
JiBhdHRyaWJ1dGVWZWN0b3IpCiB7CiAgICAgQVNTRVJUKCFpbkRvY3VtZW50KCkpOwogICAgIEFT
U0VSVCghcGFyZW50Tm9kZSgpKTsKLQogICAgIEFTU0VSVCghbV9lbGVtZW50RGF0YSk7CiAKICAg
ICBpZiAoYXR0cmlidXRlVmVjdG9yLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPEF0dHJpYnV0ZT4gZmlsdGVyZWRBdHRyaWJ1dGVzID0gYXR0cmlidXRlVmVjdG9yOwot
Ci0gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBhcyByZXN1bHQgb2YgYSBwYXN0ZSBv
ciBkcmFnLW4tZHJvcCBvcGVyYXRpb24KLSAgICAvLyB3ZSB3YW50IHRvIHJlbW92ZSBhbGwgdGhl
IHNjcmlwdCBhbmQgZXZlbnQgaGFuZGxlcnMuCi0gICAgaWYgKCFzY3JpcHRpbmdDb250ZW50SXNB
bGxvd2VkKHNjcmlwdGluZ1Blcm1pc3Npb24pKSB7Ci0gICAgICAgIHNpemVfdCBpID0gMDsKLSAg
ICAgICAgd2hpbGUgKGkgPCBmaWx0ZXJlZEF0dHJpYnV0ZXMuc2l6ZSgpKSB7Ci0gICAgICAgICAg
ICBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IGZpbHRlcmVkQXR0cmlidXRlc1tpXTsKLSAgICAgICAg
ICAgIGlmIChpc0V2ZW50SGFuZGxlckF0dHJpYnV0ZShhdHRyaWJ1dGUubmFtZSgpKSkgewotICAg
ICAgICAgICAgICAgIGZpbHRlcmVkQXR0cmlidXRlcy5yZW1vdmUoaSk7Ci0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc0F0dHJpYnV0
ZVRvUmVtb3ZlKGF0dHJpYnV0ZS5uYW1lKCksIGF0dHJpYnV0ZS52YWx1ZSgpKSkKLSAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGUuc2V0VmFsdWUoZW1wdHlBdG9tKTsKLSAgICAgICAgICAgIGkrKzsK
LSAgICAgICAgfQotICAgIH0KLQogICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnNo
YXJlZE9iamVjdFBvb2woKSkKLSAgICAgICAgbV9lbGVtZW50RGF0YSA9IGRvY3VtZW50KCktPnNo
YXJlZE9iamVjdFBvb2woKS0+Y2FjaGVkU2hhcmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRl
cyhmaWx0ZXJlZEF0dHJpYnV0ZXMpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gZG9jdW1lbnQo
KS0+c2hhcmVkT2JqZWN0UG9vbCgpLT5jYWNoZWRTaGFyZWFibGVFbGVtZW50RGF0YVdpdGhBdHRy
aWJ1dGVzKGF0dHJpYnV0ZVZlY3Rvcik7CiAgICAgZWxzZQotICAgICAgICBtX2VsZW1lbnREYXRh
ID0gU2hhcmVhYmxlRWxlbWVudERhdGE6OmNyZWF0ZVdpdGhBdHRyaWJ1dGVzKGZpbHRlcmVkQXR0
cmlidXRlcyk7CisgICAgICAgIG1fZWxlbWVudERhdGEgPSBTaGFyZWFibGVFbGVtZW50RGF0YTo6
Y3JlYXRlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlVmVjdG9yKTsKIAotICAgIC8vIEl0ZXJhdGUg
b3ZlciB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgd2UgYWxyZWFkeSBoYXZlIG9uIHRoZSBzdGFjayBp
biBjYXNlCi0gICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fZWxlbWVudERhdGEuCi0g
ICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLgotICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJlZEF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoZmlsdGVyZWRBdHRyaWJ1dGVzW2ldLm5hbWUoKSwg
ZmlsdGVyZWRBdHRyaWJ1dGVzW2ldLnZhbHVlKCkpOworICAgIC8vIFVzZSBhdHRyaWJ1dGVWZWN0
b3IgaW5zdGVhZCBvZiBtX2VsZW1lbnREYXRhIGJlY2F1c2UgYXR0cmlidXRlQ2hhbmdlZCBtaWdo
dCBtb2RpZnkgbV9lbGVtZW50RGF0YS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0
cmlidXRlVmVjdG9yLnNpemUoKTsgKytpKQorICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGF0dHJp
YnV0ZVZlY3RvcltpXS5uYW1lKCksIGF0dHJpYnV0ZVZlY3RvcltpXS52YWx1ZSgpKTsKIH0KIAog
Ym9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYp
IHsgfQogCiAgICAgLy8gT25seSBjYWxsZWQgYnkgdGhlIHBhcnNlciBpbW1lZGlhdGVseSBhZnRl
ciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KLSAgICB2b2lkIHBhcnNlclNldEF0dHJpYnV0ZXMoY29u
c3QgVmVjdG9yPEF0dHJpYnV0ZT4mLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAg
IHZvaWQgcGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOworCisg
ICAgdm9pZCBzdHJpcEphdmFTY3JpcHRBdHRyaWJ1dGVzKFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAK
ICAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnREYXRhLmdldCgpOyB9CiAgICAgVW5pcXVlRWxlbWVudERhdGEqIGVuc3VyZVVuaXF1ZUVs
ZW1lbnREYXRhKCk7CkBAIC03MjAsNiArNzIyLDkgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY3Jl
YXRlUmVuZGVyZXJJZk5lZWRlZCgpOwogCisgICAgYm9vbCBpc0phdmFTY3JpcHRBdHRyaWJ1dGUo
Y29uc3QgQXR0cmlidXRlJik7CisgICAgYm9vbCBpc0phdmFTY3JpcHRVUkxBdHRyaWJ1dGUoY29u
c3QgQXR0cmlidXRlJik7CisKICAgICBSZWZQdHI8RWxlbWVudERhdGE+IG1fZWxlbWVudERhdGE7
CiB9OwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0ZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9GcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24uaAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMCAr
MjMsNDQgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGcmFnbWVudFNjcmlwdGlu
Z1Blcm1pc3Npb25faAotI2RlZmluZSBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb25faAorLy8g
RklYTUU6IE1vdmUgdGhpcyBmaWxlIHRvIFBhcnNlckNvbnRlbnRQb2xpY3kuaC4KKworI2lmbmRl
ZiBQYXJzZXJDb250ZW50UG9saWN5X2gKKyNkZWZpbmUgUGFyc2VyQ29udGVudFBvbGljeV9oCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IFRoaXMgZW51bSBpcyBwb29ybHkgbmFt
ZWQuICBJdCBpcyB1c2VkIHRvIHJlbW92ZSBzY3JpcHQgY29udGVudHMgd2hlbgotLy8gZ2VuZXJh
dGluZyBEb2N1bWVudEZyYWdtZW50cyBmb3IgcGFzdGUgaW4gcGxhdGZvcm0vKi9QYXN0ZWJvYXJk
LiouCi1lbnVtIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiB7Ci0gICAgRGlzYWxsb3dTY3Jp
cHRpbmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQsCitlbnVtIFBhcnNlckNvbnRlbnRQb2xpY3kg
eworICAgIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCwKICAgICBEaXNhbGxvd1Nj
cmlwdGluZ0NvbnRlbnQsCiAgICAgQWxsb3dTY3JpcHRpbmdDb250ZW50LAogICAgIEFsbG93U2Ny
aXB0aW5nQ29udGVudEFuZERvTm90TWFya0FscmVhZHlTdGFydGVkLAogfTsKIAotc3RhdGljIGlu
bGluZSBib29sIHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQoRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pIAorc3RhdGljIGlubGluZSBib29sIHNjcmlwdGlu
Z0NvbnRlbnRJc0FsbG93ZWQoUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5
KSAKK3sKKyAgICByZXR1cm4gcGFyc2VyQ29udGVudFBvbGljeSA9PSBBbGxvd1NjcmlwdGluZ0Nv
bnRlbnQgfHwgcGFyc2VyQ29udGVudFBvbGljeSA9PSBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmRE
b05vdE1hcmtBbHJlYWR5U3RhcnRlZDsKK30KKworc3RhdGljIGlubGluZSBQYXJzZXJDb250ZW50
UG9saWN5IGRpc2FsbG93U2NyaXB0aW5nQ29udGVudChQYXJzZXJDb250ZW50UG9saWN5IHBhcnNl
ckNvbnRlbnRQb2xpY3kpCit7CisgICAgaWYgKCFzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKHBh
cnNlckNvbnRlbnRQb2xpY3kpKQorICAgICAgICByZXR1cm4gcGFyc2VyQ29udGVudFBvbGljeTsK
KyAgICByZXR1cm4gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50OworfQorCitzdGF0aWMgaW5saW5l
IGJvb2wgcGx1Z2luQ29udGVudElzQWxsb3dlZChQYXJzZXJDb250ZW50UG9saWN5IHBhcnNlckNv
bnRlbnRQb2xpY3kpCiB7Ci0gICAgcmV0dXJuIHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gQWxsb3dT
Y3JpcHRpbmdDb250ZW50IHx8IHNjcmlwdGluZ1Blcm1pc3Npb24gPT0gQWxsb3dTY3JpcHRpbmdD
b250ZW50QW5kRG9Ob3RNYXJrQWxyZWFkeVN0YXJ0ZWQ7CisgICAgcmV0dXJuIHBhcnNlckNvbnRl
bnRQb2xpY3kgIT0gRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50OwogfQogCi1zdGF0
aWMgaW5saW5lIGJvb2wgcGx1Z2luQ29udGVudElzQWxsb3dlZChGcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3N0YXRpYyBpbmxpbmUgUGFyc2VyQ29udGVu
dFBvbGljeSBhbGxvd1BsdWdpbkNvbnRlbnQoUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250
ZW50UG9saWN5KQogewotICAgIHJldHVybiBzY3JpcHRpbmdQZXJtaXNzaW9uICE9IERpc2FsbG93
U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkOworICAgIGlmIChwbHVnaW5Db250ZW50
SXNBbGxvd2VkKHBhcnNlckNvbnRlbnRQb2xpY3kpKQorICAgICAgICByZXR1cm4gcGFyc2VyQ29u
dGVudFBvbGljeTsKKyAgICByZXR1cm4gRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb25faAorI2VuZGlmIC8vIFBhcnNlckNvbnRlbnRQb2xpY3lfaApJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdGFibGVEb2N1bWVudFBhcnNlci5jcHAJKHJldmlzaW9uIDE0
NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKIAorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TY3JpcHRh
YmxlRG9jdW1lbnRQYXJzZXI6OlNjcmlwdGFibGVEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9j
dW1lbnQpCitTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXI6OlNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cihEb2N1bWVudCogZG9jdW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBv
bGljeSkKICAgICA6IERlY29kZWREYXRhRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAgLCBt
X3dhc0NyZWF0ZWRCeVNjcmlwdChmYWxzZSkKKyAgICAsIG1fcGFyc2VyQ29udGVudFBvbGljeShw
YXJzZXJDb250ZW50UG9saWN5KQogeworICAgIGlmICghcGx1Z2luQ29udGVudElzQWxsb3dlZCht
X3BhcnNlckNvbnRlbnRQb2xpY3kpICYmICghZG9jdW1lbnQtPnNldHRpbmdzKCkgfHwgZG9jdW1l
bnQtPnNldHRpbmdzKCktPnVuc2FmZVBsdWdpblBhc3RpbmdFbmFibGVkKCkpKQorICAgICAgICBt
X3BhcnNlckNvbnRlbnRQb2xpY3kgPSBhbGxvd1BsdWdpbkNvbnRlbnQobV9wYXJzZXJDb250ZW50
UG9saWN5KTsKIH0KIAogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRhYmxlRG9j
dW1lbnRQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLmgJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcs
NyBAQAogI2RlZmluZSBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXJfaAogCiAjaW5jbHVkZSAiRGVj
b2RlZERhdGFEb2N1bWVudFBhcnNlci5oIgorI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVy
bWlzc2lvbi5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRQb3NpdGlvbi5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC01MCwxNCArNTEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2Fz
Q3JlYXRlZEJ5U2NyaXB0KGJvb2wgd2FzQ3JlYXRlZEJ5U2NyaXB0KSB7IG1fd2FzQ3JlYXRlZEJ5
U2NyaXB0ID0gd2FzQ3JlYXRlZEJ5U2NyaXB0OyB9CiAgICAgYm9vbCB3YXNDcmVhdGVkQnlTY3Jp
cHQoKSBjb25zdCB7IHJldHVybiBtX3dhc0NyZWF0ZWRCeVNjcmlwdDsgfQogCisgICAgUGFyc2Vy
Q29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KCkgeyByZXR1cm4gbV9wYXJzZXJDb250
ZW50UG9saWN5OyB9CisKIHByb3RlY3RlZDoKLSAgICBleHBsaWNpdCBTY3JpcHRhYmxlRG9jdW1l
bnRQYXJzZXIoRG9jdW1lbnQqKTsKKyAgICBleHBsaWNpdCBTY3JpcHRhYmxlRG9jdW1lbnRQYXJz
ZXIoRG9jdW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5ID0gQWxsb3dTY3JpcHRpbmdDb250ZW50
KTsKIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIFNjcmlwdGFibGVEb2N1bWVudFBhcnNlciogYXNT
Y3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKICAgICAvLyBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrLyNzY3JpcHQtY3Jl
YXRlZC1wYXJzZXIKICAgICBib29sIG1fd2FzQ3JlYXRlZEJ5U2NyaXB0OworICAgIFBhcnNlckNv
bnRlbnRQb2xpY3kgbV9wYXJzZXJDb250ZW50UG9saWN5OwogfTsKIAogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjgsMTYgKzY2OCwxMyBAQCBT
dHJpbmcgY3JlYXRlTWFya3VwKGNvbnN0IFJhbmdlKiByYW5nZSwgCiAgICAgcmV0dXJuIGNyZWF0
ZU1hcmt1cEludGVybmFsKGRvY3VtZW50LCByYW5nZSwgdXBkYXRlZFJhbmdlLCBub2Rlcywgc2hv
dWxkQW5ub3RhdGUsIGNvbnZlcnRCbG9ja3NUb0lubGluZXMsIHNob3VsZFJlc29sdmVVUkxzKTsK
IH0KIAotUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgY29uc3QgU3RyaW5n
JiBiYXNlVVJMLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lv
bikKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYg
YmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQogewogICAg
IC8vIFdlIHVzZSBhIGZha2UgYm9keSBlbGVtZW50IGhlcmUgdG8gdHJpY2sgdGhlIEhUTUwgcGFy
c2VyIHRvIHVzaW5nIHRoZSBJbkJvZHkgaW5zZXJ0aW9uIG1vZGUuCiAgICAgUmVmUHRyPEhUTUxC
b2R5RWxlbWVudD4gZmFrZUJvZHkgPSBIVE1MQm9keUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gRG9jdW1lbnRGcmFnbWVu
dDo6Y3JlYXRlKGRvY3VtZW50KTsKIAotICAgIGlmIChzY3JpcHRpbmdQZXJtaXNzaW9uID09IERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkICYmICghZG9jdW1lbnQtPnNl
dHRpbmdzKCkgfHwgZG9jdW1lbnQtPnNldHRpbmdzKCktPnVuc2FmZVBsdWdpblBhc3RpbmdFbmFi
bGVkKCkpKQotICAgICAgICBzY3JpcHRpbmdQZXJtaXNzaW9uID0gRGlzYWxsb3dTY3JpcHRpbmdD
b250ZW50OwotCi0gICAgZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAsIGZha2VCb2R5LmdldCgp
LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBmcmFnbWVudC0+cGFyc2VIVE1MKG1hcmt1cCwg
ZmFrZUJvZHkuZ2V0KCksIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogCiAgICAgaWYgKCFiYXNlVVJM
LmlzRW1wdHkoKSAmJiBiYXNlVVJMICE9IGJsYW5rVVJMKCkgJiYgYmFzZVVSTCAhPSBkb2N1bWVu
dC0+YmFzZVVSTCgpKQogICAgICAgICBjb21wbGV0ZVVSTHMoZnJhZ21lbnQuZ2V0KCksIGJhc2VV
UkwpOwpAQCAtNzI1LDcgKzcyMiw3IEBAIHN0YXRpYyB2b2lkIHRyaW1GcmFnbWVudChEb2N1bWVu
dEZyYWdtZW4KIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXBXaXRoQ29udGV4dChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0cmluZyYg
bWFya3VwLCB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0LCB1bnNpZ25lZCBmcmFnbWVudEVuZCwKLSAg
ICBjb25zdCBTdHJpbmcmIGJhc2VVUkwsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQorICAgIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVu
dFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQogewogICAgIC8vIEZJWE1FOiBOZWVkIHRvIGhh
bmRsZSB0aGUgY2FzZSB3aGVyZSB0aGUgbWFya3VwIGFscmVhZHkgY29udGFpbnMgdGhlc2UgbWFy
a2Vycy4KIApAQCAtNzM2LDcgKzczMyw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ20KICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ29tbWVudCh0YWdnZWRN
YXJrdXAsIGZyYWdtZW50TWFya2VyVGFnKTsKICAgICB0YWdnZWRNYXJrdXAuYXBwZW5kKG1hcmt1
cC5zdWJzdHJpbmcoZnJhZ21lbnRFbmQpKTsKIAotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgdGFn
Z2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB0YWdnZWRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cChkb2N1bWVudCwgdGFnZ2VkTWFya3VwLnRvU3RyaW5nKCksIGJhc2VVUkwsIHBh
cnNlckNvbnRlbnRQb2xpY3kpOwogICAgIFJlZlB0cjxEb2N1bWVudD4gdGFnZ2VkRG9jdW1lbnQg
PSBEb2N1bWVudDo6Y3JlYXRlKDAsIEtVUkwoKSk7CiAgICAgdGFnZ2VkRG9jdW1lbnQtPnNldENv
bnRleHRGZWF0dXJlcyhkb2N1bWVudC0+Y29udGV4dEZlYXR1cmVzKCkpOwogICAgIHRhZ2dlZERv
Y3VtZW50LT50YWtlQWxsQ2hpbGRyZW5Gcm9tKHRhZ2dlZEZyYWdtZW50LmdldCgpKTsKQEAgLTk4
Niw3ICs5ODMsNyBAQCBTdHJpbmcgdXJsVG9NYXJrdXAoY29uc3QgS1VSTCYgdXJsLCBjb25zCiAg
ICAgcmV0dXJuIG1hcmt1cC50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiBtYXJr
dXAsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
c2NyaXB0aW5nUGVybWlzc2lvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCitQYXNzUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoY29uc3QgU3RyaW5n
JiBtYXJrdXAsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBQYXJzZXJDb250ZW50UG9saWN5IHBh
cnNlckNvbnRlbnRQb2xpY3ksIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IGNvbnRleHRFbGVtZW50LT5kb2N1bWVudCgpOwogI2lmIEVOQUJMRShURU1QTEFU
RV9FTEVNRU5UKQpAQCAtOTk2LDExICs5OTMsMTEgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbQogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9
IERvY3VtZW50RnJhZ21lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAKICAgICBpZiAoZG9jdW1lbnQt
PmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgZnJhZ21lbnQtPnBhcnNlSFRNTChtYXJrdXAs
IGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgZnJhZ21lbnQt
PnBhcnNlSFRNTChtYXJrdXAsIGNvbnRleHRFbGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5KTsK
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwogICAgIH0KIAotICAgIGJvb2wgd2FzVmFsaWQgPSBm
cmFnbWVudC0+cGFyc2VYTUwobWFya3VwLCBjb250ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlz
c2lvbik7CisgICAgYm9vbCB3YXNWYWxpZCA9IGZyYWdtZW50LT5wYXJzZVhNTChtYXJrdXAsIGNv
bnRleHRFbGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5KTsKICAgICBpZiAoIXdhc1ZhbGlkKSB7
CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDQzLDcg
KzEwNDAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVtb3ZlRWxlbWVudFByZXNlcnZpCiAgICAg
ZnJhZ21lbnQtPnJlbW92ZUNoaWxkKGVsZW1lbnQsIEFTU0VSVF9OT19FWENFUFRJT04pOwogfQog
Ci1QYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChj
b25zdCBTdHJpbmcmIG1hcmt1cCwgSFRNTEVsZW1lbnQqIGVsZW1lbnQsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KGNvbnN0
IFN0cmluZyYgbWFya3VwLCBIVE1MRWxlbWVudCogZWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGlj
eSBwYXJzZXJDb250ZW50UG9saWN5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQo
ZWxlbWVudCk7CiAgICAgaWYgKGVsZW1lbnQtPmllRm9yYmlkc0luc2VydEhUTUwoKSkgewpAQCAt
MTA1Nyw3ICsxMDU0LDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250
ZQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZvcklubmVyT3V0ZXJIVE1MKG1hcmt1cCwgZWxl
bWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbiwgZWMpOworICAgIFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwobWFya3VwLCBl
bGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5LCBlYyk7CiAgICAgaWYgKCFmcmFnbWVudCkKICAg
ICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkocmV2aXNpb24g
MTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuaAkod29ya2luZyBjb3B5
KQpAQCAtNDksMTIgKzQ5LDEyIEBAIGVudW0gRUNoaWxkcmVuT25seSB7IEluY2x1ZGVOb2RlLCBD
aGlsZHIKIGVudW0gRUFic29sdXRlVVJMcyB7IERvTm90UmVzb2x2ZVVSTHMsIFJlc29sdmVBbGxV
UkxzLCBSZXNvbHZlTm9uTG9jYWxVUkxzIH07CiAKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChSYW5nZSogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0
ZXh0KTsKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFy
a3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIGNvbnN0IFN0cmluZyYgYmFzZVVS
TCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdDb250ZW50KTsK
LVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0
aENvbnRleHQoRG9jdW1lbnQqLCBjb25zdCBTdHJpbmcmIG1hcmt1cCwgdW5zaWduZWQgZnJhZ21l
bnRTdGFydCwgdW5zaWduZWQgZnJhZ21lbnRFbmQsIGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgRnJh
Z21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
Y3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAs
IGNvbnN0IFN0cmluZyYgYmFzZVVSTCwgUGFyc2VyQ29udGVudFBvbGljeSA9IEFsbG93U2NyaXB0
aW5nQ29udGVudCk7CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50
RnJvbU1hcmt1cFdpdGhDb250ZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBtYXJrdXAsIHVu
c2lnbmVkIGZyYWdtZW50U3RhcnQsIHVuc2lnbmVkIGZyYWdtZW50RW5kLCBjb25zdCBTdHJpbmcm
IGJhc2VVUkwsIFBhcnNlckNvbnRlbnRQb2xpY3kpOwogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBjcmVhdGVGcmFnbWVudEZyb21Ob2RlcyhEb2N1bWVudCosIGNvbnN0IFZlY3RvcjxOb2Rl
Kj4mKTsKLVBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGb3JJbm5l
ck91dGVySFRNTChjb25zdCBTdHJpbmcmLCBFbGVtZW50KiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uLCBFeGNlcHRpb25Db2RlJik7CitQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50Rm9ySW5uZXJPdXRlckhUTUwoY29uc3QgU3RyaW5nJiwgRWxlbWVudCosIFBh
cnNlckNvbnRlbnRQb2xpY3ksIEV4Y2VwdGlvbkNvZGUmKTsKIFBhc3NSZWZQdHI8RG9jdW1lbnRG
cmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFN0cmluZyYgc291cmNlTUlNRVR5cGUsIERvY3VtZW50KiBvdXRwdXREb2MpOwot
UGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoY29u
c3QgU3RyaW5nJiwgSFRNTEVsZW1lbnQqLCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIEV4
Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlQ29udGV4
dHVhbEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIEhUTUxFbGVtZW50KiwgUGFyc2VyQ29udGVudFBv
bGljeSwgRXhjZXB0aW9uQ29kZSYpOwogCiBib29sIGlzUGxhaW5UZXh0TWFya3VwKE5vZGUqKTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVu
dDo6YWNjZXNzS2V5QWN0aW9uKAogCiBib29sIEhUTUxBbmNob3JFbGVtZW50Ojppc1VSTEF0dHJp
YnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gYXR0
cmlidXRlLm5hbWUoKSA9PSBocmVmQXR0ciB8fCBIVE1MRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUo
YXR0cmlidXRlKTsKKyAgICByZXR1cm4gYXR0cmlidXRlLm5hbWUoKS5sb2NhbE5hbWUoKSA9PSBo
cmVmQXR0ciB8fCBIVE1MRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKTsKIH0KIAog
Ym9vbCBIVE1MQW5jaG9yRWxlbWVudDo6Y2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdApJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTQ2MjMzKQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpyZW1vdmVkRnJvbShDb250
YWkKIAogYm9vbCBIVE1MQmFzZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYgYXR0cmlidXRlKSBjb25zdAogewotICAgIHJldHVybiBhdHRyaWJ1dGUubmFtZSgpID09IGhy
ZWZBdHRyIHx8IEhUTUxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIHJl
dHVybiBhdHRyaWJ1dGUubmFtZSgpLmxvY2FsTmFtZSgpID09IGhyZWZBdHRyIHx8IEhUTUxFbGVt
ZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiBTdHJpbmcgSFRNTEJhc2VFbGVt
ZW50Ojp0YXJnZXQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NjUsMTEgKzk2NSwxMCBAQCB2b2lkIEhUTUxFbGVtZW50Ojph
ZGp1c3REaXJlY3Rpb25hbGl0eUlmCiBib29sIEhUTUxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShj
b25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIHsKICNpZiBFTkFCTEUoTUlDUk9EQVRB
KQotICAgIHJldHVybiBhdHRyaWJ1dGUubmFtZSgpID09IGl0ZW1pZEF0dHI7Ci0jZWxzZQotICAg
IFVOVVNFRF9QQVJBTShhdHRyaWJ1dGUpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYXR0
cmlidXRlLm5hbWUoKSA9PSBpdGVtaWRBdHRyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRp
ZgorICAgIHJldHVybiBTdHlsZWRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwog
fQogCiAjaWYgRU5BQkxFKE1JQ1JPREFUQSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5jcHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIxLDcgKzQyMSw3IEBAIHZv
aWQgSFRNTExpbmtFbGVtZW50OjpzdGFydExvYWRpbmdEeW5hbWkKIAogYm9vbCBIVE1MTGlua0Vs
ZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKSBjb25zdAog
ewotICAgIHJldHVybiBhdHRyaWJ1dGUubmFtZSgpID09IGhyZWZBdHRyIHx8IEhUTUxFbGVtZW50
Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOworICAgIHJldHVybiBhdHRyaWJ1dGUubmFtZSgp
LmxvY2FsTmFtZSgpID09IGhyZWZBdHRyIHx8IEhUTUxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShh
dHRyaWJ1dGUpOwogfQogCiBLVVJMIEhUTUxMaW5rRWxlbWVudDo6aHJlZigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNp
dGUuY3BwCShyZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDYgKzU2LDEzIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAorc3Rh
dGljIGlubGluZSB2b2lkIHNldEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCwgQXRvbWljSFRN
TFRva2VuKiB0b2tlbiwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQor
eworICAgIGlmICghc2NyaXB0aW5nQ29udGVudElzQWxsb3dlZChwYXJzZXJDb250ZW50UG9saWN5
KSkKKyAgICAgICAgZWxlbWVudC0+c3RyaXBKYXZhU2NyaXB0QXR0cmlidXRlcyh0b2tlbi0+YXR0
cmlidXRlcygpKTsKKyAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRy
aWJ1dGVzKCkpOworfQorCiBzdGF0aWMgYm9vbCBoYXNJbXBsaWVkRW5kVGFnKGNvbnN0IEhUTUxT
dGFja0l0ZW0qIGl0ZW0pCiB7CiAgICAgcmV0dXJuIGl0ZW0tPmhhc1RhZ05hbWUoZGRUYWcpCkBA
IC0xMzQsMTAgKzE0MSwxMCBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpleGVjdXRlUXVl
dWVkCiAgICAgLy8gV2UgbWlnaHQgYmUgZGV0YWNoZWQgbm93LgogfQogCi1IVE1MQ29uc3RydWN0
aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqIGRvY3VtZW50LCB1bnNpZ25l
ZCBtYXhpbXVtRE9NVHJlZURlcHRoKQorSFRNTENvbnN0cnVjdGlvblNpdGU6OkhUTUxDb25zdHJ1
Y3Rpb25TaXRlKERvY3VtZW50KiBkb2N1bWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJD
b250ZW50UG9saWN5LCB1bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKQogICAgIDogbV9kb2N1
bWVudChkb2N1bWVudCkKICAgICAsIG1fYXR0YWNobWVudFJvb3QoZG9jdW1lbnQpCi0gICAgLCBt
X2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbihBbGxvd1NjcmlwdGluZ0NvbnRlbnQpCisgICAg
LCBtX3BhcnNlckNvbnRlbnRQb2xpY3kocGFyc2VyQ29udGVudFBvbGljeSkKICAgICAsIG1faXNQ
YXJzaW5nRnJhZ21lbnQoZmFsc2UpCiAgICAgLCBtX3JlZGlyZWN0QXR0YWNoVG9Gb3N0ZXJQYXJl
bnQoZmFsc2UpCiAgICAgLCBtX21heGltdW1ET01UcmVlRGVwdGgobWF4aW11bURPTVRyZWVEZXB0
aCkKQEAgLTE0NiwxMCArMTUzLDEwIEBAIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpIVE1MQ29uc3Ry
dWN0aW9uU2kKICAgICBBU1NFUlQobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSB8fCBtX2Rv
Y3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSk7CiB9CiAKLUhUTUxDb25zdHJ1Y3Rpb25TaXRlOjpI
VE1MQ29uc3RydWN0aW9uU2l0ZShEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRnJhZ21lbnRT
Y3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24sIHVuc2lnbmVkIG1heGltdW1E
T01UcmVlRGVwdGgpCitIVE1MQ29uc3RydWN0aW9uU2l0ZTo6SFRNTENvbnN0cnVjdGlvblNpdGUo
RG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29u
dGVudFBvbGljeSwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCkKICAgICA6IG1fZG9jdW1l
bnQoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX2F0dGFjaG1lbnRSb290KGZyYWdtZW50
KQotICAgICwgbV9mcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24oc2NyaXB0aW5nUGVybWlzc2lv
bikKKyAgICAsIG1fcGFyc2VyQ29udGVudFBvbGljeShwYXJzZXJDb250ZW50UG9saWN5KQogICAg
ICwgbV9pc1BhcnNpbmdGcmFnbWVudCh0cnVlKQogICAgICwgbV9yZWRpcmVjdEF0dGFjaFRvRm9z
dGVyUGFyZW50KGZhbHNlKQogICAgICwgbV9tYXhpbXVtRE9NVHJlZURlcHRoKG1heGltdW1ET01U
cmVlRGVwdGgpCkBAIC0xOTAsNyArMTk3LDcgQEAgdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6
ZGlzcGF0Y2hEb2N1bQogdm9pZCBIVE1MQ29uc3RydWN0aW9uU2l0ZTo6aW5zZXJ0SFRNTEh0bWxT
dGFydFRhZ0JlZm9yZUhUTUwoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBSZWZQdHI8
SFRNTEh0bWxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEh0bWxFbGVtZW50OjpjcmVhdGUobV9kb2N1
bWVudCk7Ci0gICAgZWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyh0b2tlbi0+YXR0cmlidXRl
cygpLCBtX2ZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgc2V0QXR0cmlidXRlcyhl
bGVtZW50LmdldCgpLCB0b2tlbiwgbV9wYXJzZXJDb250ZW50UG9saWN5KTsKICAgICBhdHRhY2hM
YXRlcihtX2F0dGFjaG1lbnRSb290LCBlbGVtZW50KTsKICAgICBtX29wZW5FbGVtZW50cy5wdXNo
SFRNTEh0bWxFbGVtZW50KEhUTUxTdGFja0l0ZW06OmNyZWF0ZShlbGVtZW50LCB0b2tlbikpOwog
CkBAIC00NDAsMTIgKzQ0NywxMiBAQCB2b2lkIEhUTUxDb25zdHJ1Y3Rpb25TaXRlOjppbnNlcnRT
Y3JpcHRFCiAgICAgLy8gRm9yIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCwgdGhlIHNwZWNpZmlj
YXRpb25zIHNheSB0byBtYXJrIGl0IHBhcnNlci1pbnNlcnRlZCBhbmQgYWxyZWFkeS1zdGFydGVk
IGFuZCBsYXRlciB1bm1hcmsgdGhlbS4KICAgICAvLyBIb3dldmVyLCB3ZSBzaG9ydCBjaXJjdWl0
IHRoYXQgbG9naWMgdG8gYXZvaWQgdGhlIHN1YnRyZWUgdHJhdmVyc2FsIHRvIGZpbmQgc2NyaXB0
IGVsZW1lbnRzIHNpbmNlIHNjcmlwdHMgY2FuIG5ldmVyIHNlZQogICAgIC8vIHRob3NlIGZsYWdz
IG9yIGVmZmVjdHMgdGhlcmVvZi4KLSAgICBjb25zdCBib29sIHBhcnNlckluc2VydGVkID0gbV9m
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gIT0gQWxsb3dTY3JpcHRpbmdDb250ZW50QW5kRG9O
b3RNYXJrQWxyZWFkeVN0YXJ0ZWQ7CisgICAgY29uc3QgYm9vbCBwYXJzZXJJbnNlcnRlZCA9IG1f
cGFyc2VyQ29udGVudFBvbGljeSAhPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnRBbmREb05vdE1hcmtB
bHJlYWR5U3RhcnRlZDsKICAgICBjb25zdCBib29sIGFscmVhZHlTdGFydGVkID0gbV9pc1BhcnNp
bmdGcmFnbWVudCAmJiBwYXJzZXJJbnNlcnRlZDsKICAgICBSZWZQdHI8SFRNTFNjcmlwdEVsZW1l
bnQ+IGVsZW1lbnQgPSBIVE1MU2NyaXB0RWxlbWVudDo6Y3JlYXRlKHNjcmlwdFRhZywgb3duZXJE
b2N1bWVudEZvckN1cnJlbnROb2RlKCksIHBhcnNlckluc2VydGVkLCBhbHJlYWR5U3RhcnRlZCk7
Ci0gICAgaWYgKHNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9mcmFnbWVudFNjcmlwdGluZ1Bl
cm1pc3Npb24pKQotICAgICAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5h
dHRyaWJ1dGVzKCksIG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKLSAgICBhdHRhY2hM
YXRlcihjdXJyZW50Tm9kZSgpLCBlbGVtZW50KTsKKyAgICBzZXRBdHRyaWJ1dGVzKGVsZW1lbnQu
Z2V0KCksIHRva2VuLCBtX3BhcnNlckNvbnRlbnRQb2xpY3kpOworICAgIGlmIChzY3JpcHRpbmdD
b250ZW50SXNBbGxvd2VkKG1fcGFyc2VyQ29udGVudFBvbGljeSkpCisgICAgICAgIGF0dGFjaExh
dGVyKGN1cnJlbnROb2RlKCksIGVsZW1lbnQpOwogICAgIG1fb3BlbkVsZW1lbnRzLnB1c2goSFRN
TFN0YWNrSXRlbTo6Y3JlYXRlKGVsZW1lbnQucmVsZWFzZSgpLCB0b2tlbikpOwogfQogCkBAIC01
MTEsNyArNTE4LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3RydWN0aW9uU2l0ZQog
ewogICAgIFF1YWxpZmllZE5hbWUgdGFnTmFtZShudWxsQXRvbSwgdG9rZW4tPm5hbWUoKSwgbmFt
ZXNwYWNlVVJJKTsKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IG93bmVyRG9jdW1lbnRG
b3JDdXJyZW50Tm9kZSgpLT5jcmVhdGVFbGVtZW50KHRhZ05hbWUsIHRydWUpOwotICAgIGVsZW1l
bnQtPnBhcnNlclNldEF0dHJpYnV0ZXModG9rZW4tPmF0dHJpYnV0ZXMoKSwgbV9mcmFnbWVudFNj
cmlwdGluZ1Blcm1pc3Npb24pOworICAgIHNldEF0dHJpYnV0ZXMoZWxlbWVudC5nZXQoKSwgdG9r
ZW4sIG1fcGFyc2VyQ29udGVudFBvbGljeSk7CiAgICAgcmV0dXJuIGVsZW1lbnQucmVsZWFzZSgp
OwogfQogCkBAIC01MzEsNyArNTM4LDcgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBIVE1MQ29uc3Ry
dWN0aW9uU2l0ZQogICAgIC8vIGhhdmUgdG8gcGFzcyB0aGUgY3VycmVudCBmb3JtIGVsZW1lbnQu
ICBXZSBzaG91bGQgcmV3b3JrIGZvcm0gYXNzb2NpYXRpb24KICAgICAvLyB0byBvY2N1ciBhZnRl
ciBjb25zdHJ1Y3Rpb24gdG8gYWxsb3cgYmV0dGVyIGNvZGUgc2hhcmluZyBoZXJlLgogICAgIFJl
ZlB0cjxFbGVtZW50PiBlbGVtZW50ID0gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxl
bWVudCh0YWdOYW1lLCBvd25lckRvY3VtZW50Rm9yQ3VycmVudE5vZGUoKSwgZm9ybSgpLCB0cnVl
KTsKLSAgICBlbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHRva2VuLT5hdHRyaWJ1dGVzKCks
IG1fZnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBzZXRBdHRyaWJ1dGVzKGVsZW1l
bnQuZ2V0KCksIHRva2VuLCBtX3BhcnNlckNvbnRlbnRQb2xpY3kpOwogICAgIEFTU0VSVChlbGVt
ZW50LT5pc0hUTUxFbGVtZW50KCkpOwogICAgIHJldHVybiBlbGVtZW50LnJlbGVhc2UoKTsKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlv
blNpdGUuaAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTENvbnN0cnVjdGlvblNpdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOCArNzIsOCBAQCBj
bGFzcyBIVE1MRm9ybUVsZW1lbnQ7CiBjbGFzcyBIVE1MQ29uc3RydWN0aW9uU2l0ZSB7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoSFRNTENvbnN0cnVjdGlvblNpdGUpOwogcHVibGljOgotICAg
IEhUTUxDb25zdHJ1Y3Rpb25TaXRlKERvY3VtZW50KiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVE
ZXB0aCk7Ci0gICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnRGcmFnbWVudCosIEZyYWdt
ZW50U2NyaXB0aW5nUGVybWlzc2lvbiwgdW5zaWduZWQgbWF4aW11bURPTVRyZWVEZXB0aCk7Cisg
ICAgSFRNTENvbnN0cnVjdGlvblNpdGUoRG9jdW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5LCB1
bnNpZ25lZCBtYXhpbXVtRE9NVHJlZURlcHRoKTsKKyAgICBIVE1MQ29uc3RydWN0aW9uU2l0ZShE
b2N1bWVudEZyYWdtZW50KiwgUGFyc2VyQ29udGVudFBvbGljeSwgdW5zaWduZWQgbWF4aW11bURP
TVRyZWVEZXB0aCk7CiAgICAgfkhUTUxDb25zdHJ1Y3Rpb25TaXRlKCk7CiAKICAgICB2b2lkIGRl
dGFjaCgpOwpAQCAtMTMxLDYgKzEzMSw4IEBAIHB1YmxpYzoKICAgICBIVE1MRm9ybUVsZW1lbnQq
IGZvcm0oKSBjb25zdCB7IHJldHVybiBtX2Zvcm0uZ2V0KCk7IH0KICAgICBQYXNzUmVmUHRyPEhU
TUxGb3JtRWxlbWVudD4gdGFrZUZvcm0oKTsKIAorICAgIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFy
c2VyQ29udGVudFBvbGljeSgpIHsgcmV0dXJuIG1fcGFyc2VyQ29udGVudFBvbGljeTsgfQorCiAg
ICAgY2xhc3MgUmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkIHsKICAgICAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUmVkaXJlY3RUb0Zvc3RlclBhcmVudEd1YXJkKTsKICAgICBwdWJsaWM6CkBA
IC0xODMsNyArMTg1LDcgQEAgcHJpdmF0ZToKIAogICAgIEF0dGFjaG1lbnRRdWV1ZSBtX2F0dGFj
aG1lbnRRdWV1ZTsKIAotICAgIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX2ZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbjsKKyAgICBQYXJzZXJDb250ZW50UG9saWN5IG1fcGFyc2VyQ29u
dGVudFBvbGljeTsKICAgICBib29sIG1faXNQYXJzaW5nRnJhZ21lbnQ7CiAKICAgICAvLyBodHRw
Oi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90
b2tlbml6YXRpb24uaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCShyZXZpc2lvbiAx
NDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6
SFRNTERvY3VtZW50UGFyc2VyKEgKICAgICAsIG1fdG9rZW4obV9vcHRpb25zLnVzZVRocmVhZGlu
ZyA/IG51bGxwdHIgOiBhZG9wdFB0cihuZXcgSFRNTFRva2VuKSkKICAgICAsIG1fdG9rZW5pemVy
KG1fb3B0aW9ucy51c2VUaHJlYWRpbmcgPyBudWxscHRyIDogSFRNTFRva2VuaXplcjo6Y3JlYXRl
KG1fb3B0aW9ucykpCiAgICAgLCBtX3NjcmlwdFJ1bm5lcihIVE1MU2NyaXB0UnVubmVyOjpjcmVh
dGUoZG9jdW1lbnQsIHRoaXMpKQotICAgICwgbV90cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6
OmNyZWF0ZSh0aGlzLCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzLCBtX29wdGlvbnMpKQorICAgICwg
bV90cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBkb2N1bWVudCwgcGFy
c2VyQ29udGVudFBvbGljeSgpLCByZXBvcnRFcnJvcnMsIG1fb3B0aW9ucykpCiAgICAgLCBtX3Bh
cnNlclNjaGVkdWxlcihIVE1MUGFyc2VyU2NoZWR1bGVyOjpjcmVhdGUodGhpcykpCiAgICAgLCBt
X3hzc0F1ZGl0b3JEZWxlZ2F0ZShkb2N1bWVudCkKICNpZiBFTkFCTEUoVEhSRUFERURfSFRNTF9Q
QVJTRVIpCkBAIC0xMDAsMTIgKzEwMCwxMiBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1
bWVudFBhcnNlcihICiAKIC8vIEZJWE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBncm91
cGVkIGludG8gc2VsZi1pbml0aWFsaXppbmcgc3RydWN0cyB0bwogLy8gbWluaW1pemUgY29kZSBk
dXBsaWNhdGlvbiBiZXR3ZWVuIHRoZXNlIGNvbnN0cnVjdG9ycy4KLUhUTUxEb2N1bWVudFBhcnNl
cjo6SFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50
KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Bl
cm1pc3Npb24pCi0gICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3Vt
ZW50KCkpCitIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQ
b2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKKyAgICA6IFNjcmlwdGFibGVEb2N1bWVudFBhcnNl
cihmcmFnbWVudC0+ZG9jdW1lbnQoKSwgcGFyc2VyQ29udGVudFBvbGljeSkKICAgICAsIG1fb3B0
aW9ucyhmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fdG9rZW4oYWRvcHRQdHIobmV3IEhU
TUxUb2tlbikpCiAgICAgLCBtX3Rva2VuaXplcihIVE1MVG9rZW5pemVyOjpjcmVhdGUobV9vcHRp
b25zKSkKLSAgICAsIG1fdHJlZUJ1aWxkZXIoSFRNTFRyZWVCdWlsZGVyOjpjcmVhdGUodGhpcywg
ZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uLCBtX29wdGlvbnMp
KQorICAgICwgbV90cmVlQnVpbGRlcihIVE1MVHJlZUJ1aWxkZXI6OmNyZWF0ZSh0aGlzLCBmcmFn
bWVudCwgY29udGV4dEVsZW1lbnQsIHRoaXMtPnBhcnNlckNvbnRlbnRQb2xpY3koKSwgbV9vcHRp
b25zKSkKICAgICAsIG1feHNzQXVkaXRvckRlbGVnYXRlKGZyYWdtZW50LT5kb2N1bWVudCgpKQog
I2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKICAgICAsIG1fd2Vha0ZhY3RvcnkodGhp
cykKQEAgLTI2MSw2ICsyNjEsOCBAQCB2b2lkIEhUTUxEb2N1bWVudFBhcnNlcjo6cmVzdW1lUGFy
c2luZ0FmCiAKIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpydW5TY3JpcHRzRm9yUGF1c2VkVHJl
ZUJ1aWxkZXIoKQogeworICAgIEFTU0VSVChzY3JpcHRpbmdDb250ZW50SXNBbGxvd2VkKHBhcnNl
ckNvbnRlbnRQb2xpY3koKSkpOworCiAgICAgVGV4dFBvc2l0aW9uIHNjcmlwdFN0YXJ0UG9zaXRp
b24gPSBUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpOwogICAgIFJlZlB0cjxFbGVt
ZW50PiBzY3JpcHRFbGVtZW50ID0gbV90cmVlQnVpbGRlci0+dGFrZVNjcmlwdFRvUHJvY2Vzcyhz
Y3JpcHRTdGFydFBvc2l0aW9uKTsKICAgICAvLyBXZSB3aWxsIG5vdCBoYXZlIGEgc2NyaXB0UnVu
bmVyIHdoZW4gcGFyc2luZyBhIERvY3VtZW50RnJhZ21lbnQuCkBAIC05NTIsOSArOTU0LDkgQEAg
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzVwogICAgICAgICByZXN1bWVQ
YXJzaW5nQWZ0ZXJTY3JpcHRFeGVjdXRpb24oKTsKIH0KIAotdm9pZCBIVE1MRG9jdW1lbnRQYXJz
ZXI6OnBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmIHNvdXJjZSwgRG9jdW1lbnRG
cmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKK3ZvaWQgSFRNTERvY3VtZW50UGFy
c2VyOjpwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBzb3VyY2UsIERvY3VtZW50
RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29udGVu
dFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQogewotICAgIFJlZlB0cjxIVE1MRG9jdW1lbnRQ
YXJzZXI+IHBhcnNlciA9IEhUTUxEb2N1bWVudFBhcnNlcjo6Y3JlYXRlKGZyYWdtZW50LCBjb250
ZXh0RWxlbWVudCwgc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgUmVmUHRyPEhUTUxEb2N1bWVu
dFBhcnNlcj4gcGFyc2VyID0gSFRNTERvY3VtZW50UGFyc2VyOjpjcmVhdGUoZnJhZ21lbnQsIGNv
bnRleHRFbGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5KTsKICAgICBwYXJzZXItPmluc2VydChz
b3VyY2UpOyAvLyBVc2UgaW5zZXJ0KCkgc28gdGhhdCB0aGUgcGFyc2VyIHdpbGwgbm90IHlpZWxk
LgogICAgIHBhcnNlci0+ZmluaXNoKCk7CiAgICAgQVNTRVJUKCFwYXJzZXItPnByb2Nlc3NpbmdE
YXRhKCkpOyAvLyBNYWtlIHN1cmUgd2UncmUgZG9uZS4gPHJkYXI6Ly9wcm9ibGVtLzM5NjMxNTE+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TERvY3VtZW50UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGlj
OgogICAgIC8vIEV4cG9zZWQgZm9yIEhUTUxQYXJzZXJTY2hlZHVsZXIKICAgICB2b2lkIHJlc3Vt
ZVBhcnNpbmdBZnRlcllpZWxkKCk7CiAKLSAgICBzdGF0aWMgdm9pZCBwYXJzZURvY3VtZW50RnJh
Z21lbnQoY29uc3QgU3RyaW5nJiwgRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIGNvbnRleHRF
bGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBBbGxvd1NjcmlwdGluZ0NvbnRl
bnQpOworICAgIHN0YXRpYyB2b2lkIHBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcm
LCBEb2N1bWVudEZyYWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRl
bnRQb2xpY3kgPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogCiAgICAgSFRNTFRva2VuaXplciog
dG9rZW5pemVyKCkgY29uc3QgeyByZXR1cm4gbV90b2tlbml6ZXIuZ2V0KCk7IH0KIApAQCAtMTA1
LDE2ICsxMDUsMTYgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSBPVkVS
UklERTsKIAogICAgIEhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqLCBib29sIHJlcG9y
dEVycm9ycyk7Ci0gICAgSFRNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqLCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBI
VE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIGNvbnRleHRFbGVt
ZW50LCBQYXJzZXJDb250ZW50UG9saWN5KTsKIAogICAgIEhUTUxUcmVlQnVpbGRlciogdHJlZUJ1
aWxkZXIoKSBjb25zdCB7IHJldHVybiBtX3RyZWVCdWlsZGVyLmdldCgpOyB9CiAKICAgICB2b2lk
IGZvcmNlUGxhaW50ZXh0Rm9yVGV4dERvY3VtZW50KCk7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTERvY3VtZW50UGFyc2VyPiBjcmVhdGUoRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1p
c3Npb24gcGVybWlzc2lvbikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRG9jdW1lbnRQYXJz
ZXI+IGNyZWF0ZShEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogY29udGV4dEVs
ZW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGljeSkKICAgICB7Ci0g
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSFRNTERvY3VtZW50UGFyc2VyKGZyYWdtZW50LCBj
b250ZXh0RWxlbWVudCwgcGVybWlzc2lvbikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEhUTUxEb2N1bWVudFBhcnNlcihmcmFnbWVudCwgY29udGV4dEVsZW1lbnQsIHBhcnNlckNvbnRl
bnRQb2xpY3kpKTsKICAgICB9CiAKICAgICAvLyBEb2N1bWVudFBhcnNlcgpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCShyZXZpc2lvbiAx
NDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjMsMTIgKzI2MywxMiBAQCBwcml2YXRlOgogfTsKIAogCi1I
VE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqIHBhcnNl
ciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMm
IG9wdGlvbnMpCitIVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQ
YXJzZXIqIHBhcnNlciwgSFRNTERvY3VtZW50KiBkb2N1bWVudCwgUGFyc2VyQ29udGVudFBvbGlj
eSBwYXJzZXJDb250ZW50UG9saWN5LCBib29sLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYgb3B0
aW9ucykKICAgICA6IG1fZnJhbWVzZXRPayh0cnVlKQogI2lmbmRlZiBOREVCVUcKICAgICAsIG1f
aXNBdHRhY2hlZCh0cnVlKQogI2VuZGlmCi0gICAgLCBtX3RyZWUoZG9jdW1lbnQsIG9wdGlvbnMu
bWF4aW11bURPTVRyZWVEZXB0aCkKKyAgICAsIG1fdHJlZShkb2N1bWVudCwgcGFyc2VyQ29udGVu
dFBvbGljeSwgb3B0aW9ucy5tYXhpbXVtRE9NVHJlZURlcHRoKQogICAgICwgbV9pbnNlcnRpb25N
b2RlKEluaXRpYWxNb2RlKQogICAgICwgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1v
ZGUpCiAgICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTI4MCwxMyAr
MjgwLDEzIEBAIEhUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxEb2MKIAogLy8g
RklYTUU6IE1lbWJlciB2YXJpYWJsZXMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byBzZWxmLWluaXRp
YWxpemluZyBzdHJ1Y3RzIHRvCiAvLyBtaW5pbWl6ZSBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4g
dGhlc2UgY29uc3RydWN0b3JzLgotSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRN
TERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGlu
Z1Blcm1pc3Npb24sIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJiBvcHRpb25zKQorSFRNTFRyZWVC
dWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2VyQ29u
dGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYg
b3B0aW9ucykKICAgICA6IG1fZnJhbWVzZXRPayh0cnVlKQogI2lmbmRlZiBOREVCVUcKICAgICAs
IG1faXNBdHRhY2hlZCh0cnVlKQogI2VuZGlmCi0gICAgLCBtX2ZyYWdtZW50Q29udGV4dChmcmFn
bWVudCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAgLCBtX3RyZWUo
ZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24sIG9wdGlvbnMubWF4aW11bURPTVRyZWVEZXB0
aCkKKyAgICAsIG1fZnJhZ21lbnRDb250ZXh0KGZyYWdtZW50LCBjb250ZXh0RWxlbWVudCkKKyAg
ICAsIG1fdHJlZShmcmFnbWVudCwgcGFyc2VyQ29udGVudFBvbGljeSwgb3B0aW9ucy5tYXhpbXVt
RE9NVHJlZURlcHRoKQogICAgICwgbV9pbnNlcnRpb25Nb2RlKEluaXRpYWxNb2RlKQogICAgICwg
bV9vcmlnaW5hbEluc2VydGlvbk1vZGUoSW5pdGlhbE1vZGUpCiAgICAgLCBtX3Nob3VsZFNraXBM
ZWFkaW5nTmV3bGluZShmYWxzZSkKQEAgLTMzMywxNCArMzMzLDEyIEBAIHZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpkZXRhY2goKQogSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0
OjpGcmFnbWVudFBhcnNpbmdDb250ZXh0KCkKICAgICA6IG1fZnJhZ21lbnQoMCkKICAgICAsIG1f
Y29udGV4dEVsZW1lbnQoMCkKLSAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lvbihBbGxvd1Njcmlw
dGluZ0NvbnRlbnQpCiB7CiB9CiAKLUhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29u
dGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dChEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3Jp
cHRpbmdQZXJtaXNzaW9uKQorSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVudFBhcnNpbmdDb250ZXh0
OjpGcmFnbWVudFBhcnNpbmdDb250ZXh0KERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCkKICAgICA6IG1fZnJhZ21lbnQoZnJhZ21lbnQpCiAgICAgLCBt
X2NvbnRleHRFbGVtZW50KGNvbnRleHRFbGVtZW50KQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNz
aW9uKHNjcmlwdGluZ1Blcm1pc3Npb24pCiB7CiAgICAgQVNTRVJUKCFmcmFnbWVudC0+aGFzQ2hp
bGROb2RlcygpKTsKIH0KQEAgLTc5MCw3ICs3ODgsNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnRm9yCiAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYXBwbGV0VGFnCiAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZW1iZWRUYWcKICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBvYmplY3RUYWcpIHsKLSAgICAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkgJiYg
IXBsdWdpbkNvbnRlbnRJc0FsbG93ZWQobV9mcmFnbWVudENvbnRleHQuc2NyaXB0aW5nUGVybWlz
c2lvbigpKSkKKyAgICAgICAgaWYgKCFwbHVnaW5Db250ZW50SXNBbGxvd2VkKG1fdHJlZS5wYXJz
ZXJDb250ZW50UG9saWN5KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBhcHBsZXRUYWcKQEAgLTIxODAsMTAgKzIxNzgsOSBAQCB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9tCiAgICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IHNjcmlwdFRhZykgewogICAgICAgICAgICAgLy8gUGF1c2Ugb3Vyc2VsdmVzIHNvIHRo
YXQgcGFyc2luZyBzdG9wcyB1bnRpbCB0aGUgc2NyaXB0IGNhbiBiZSBwcm9jZXNzZWQgYnkgdGhl
IGNhbGxlci4KICAgICAgICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5o
YXNUYWdOYW1lKHNjcmlwdFRhZykpOwotICAgICAgICAgICAgbV9zY3JpcHRUb1Byb2Nlc3MgPSBt
X3RyZWUuY3VycmVudEVsZW1lbnQoKTsKKyAgICAgICAgICAgIGlmIChzY3JpcHRpbmdDb250ZW50
SXNBbGxvd2VkKG1fdHJlZS5wYXJzZXJDb250ZW50UG9saWN5KCkpKQorICAgICAgICAgICAgICAg
IG1fc2NyaXB0VG9Qcm9jZXNzID0gbV90cmVlLmN1cnJlbnRFbGVtZW50KCk7CiAgICAgICAgICAg
ICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwotICAgICAgICAgICAgaWYgKGlzUGFyc2lu
Z0ZyYWdtZW50KCkgJiYgIXNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQobV9mcmFnbWVudENvbnRl
eHQuc2NyaXB0aW5nUGVybWlzc2lvbigpKSkKLSAgICAgICAgICAgICAgICBtX3NjcmlwdFRvUHJv
Y2Vzcy0+cmVtb3ZlQ2hpbGRyZW4oKTsKICAgICAgICAgICAgIHNldEluc2VydGlvbk1vZGUobV9v
cmlnaW5hbEluc2VydGlvbk1vZGUpOwogCiAgICAgICAgICAgICBpZiAobV9wYXJzZXItPnRva2Vu
aXplcigpKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1
aWxkZXIuaAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFRyZWVCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDEzICs1OCwxMyBAQCBjbGFz
cyBIVE1MRG9jdW1lbnRQYXJzZXI7CiBjbGFzcyBIVE1MVHJlZUJ1aWxkZXIgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEhUTUxUcmVlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gY3JlYXRl
KEhUTUxEb2N1bWVudFBhcnNlciogcGFyc2VyLCBIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBib29s
IHJlcG9ydEVycm9ycywgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgc3Rh
dGljIFBhc3NPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTERvY3VtZW50UGFyc2Vy
KiBwYXJzZXIsIEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFy
c2VyQ29udGVudFBvbGljeSwgYm9vbCByZXBvcnRFcnJvcnMsIGNvbnN0IEhUTUxQYXJzZXJPcHRp
b25zJiBvcHRpb25zKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBIVE1MVHJl
ZUJ1aWxkZXIocGFyc2VyLCBkb2N1bWVudCwgcmVwb3J0RXJyb3JzLCBvcHRpb25zKSk7CisgICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWlsZGVyKHBhcnNlciwgZG9jdW1lbnQs
IHBhcnNlckNvbnRlbnRQb2xpY3ksIHJlcG9ydEVycm9ycywgb3B0aW9ucykpOwogICAgIH0KLSAg
ICBzdGF0aWMgUGFzc093blB0cjxIVE1MVHJlZUJ1aWxkZXI+IGNyZWF0ZShIVE1MRG9jdW1lbnRQ
YXJzZXIqIHBhcnNlciwgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRl
eHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lv
biwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgc3RhdGljIFBhc3NPd25Q
dHI8SFRNTFRyZWVCdWlsZGVyPiBjcmVhdGUoSFRNTERvY3VtZW50UGFyc2VyKiBwYXJzZXIsIERv
Y3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgUGFyc2Vy
Q29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9u
cyYgb3B0aW9ucykKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVC
dWlsZGVyKHBhcnNlciwgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBzY3JpcHRpbmdQZXJtaXNz
aW9uLCBvcHRpb25zKSk7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgSFRNTFRyZWVCdWls
ZGVyKHBhcnNlciwgZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50LCBwYXJzZXJDb250ZW50UG9saWN5
LCBvcHRpb25zKSk7CiAgICAgfQogICAgIH5IVE1MVHJlZUJ1aWxkZXIoKTsKIApAQCAtMTIxLDgg
KzEyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFmdGVyQWZ0ZXJGcmFtZXNldE1vZGUsCiAgICAg
fTsKIAotICAgIEhUTUxUcmVlQnVpbGRlcihIVE1MRG9jdW1lbnRQYXJzZXIqLCBIVE1MRG9jdW1l
bnQqLCBib29sIHJlcG9ydEVycm9ycywgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmKTsKLSAgICBI
VE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2VyKiwgRG9jdW1lbnRGcmFnbWVudCosIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24sIGNvbnN0
IEhUTUxQYXJzZXJPcHRpb25zJik7CisgICAgSFRNTFRyZWVCdWlsZGVyKEhUTUxEb2N1bWVudFBh
cnNlciosIEhUTUxEb2N1bWVudCosIFBhcnNlckNvbnRlbnRQb2xpY3ksIGJvb2wgcmVwb3J0RXJy
b3JzLCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOworICAgIEhUTUxUcmVlQnVpbGRlcihIVE1M
RG9jdW1lbnRQYXJzZXIqLCBEb2N1bWVudEZyYWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1l
bnQsIFBhcnNlckNvbnRlbnRQb2xpY3ksIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJik7CiAKICAg
ICB2b2lkIHByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4qKTsKIApAQCAtMjA0LDE5ICsyMDQs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRnJhZ21lbnRQYXJz
aW5nQ29udGV4dCk7CiAgICAgcHVibGljOgogICAgICAgICBGcmFnbWVudFBhcnNpbmdDb250ZXh0
KCk7Ci0gICAgICAgIEZyYWdtZW50UGFyc2luZ0NvbnRleHQoRG9jdW1lbnRGcmFnbWVudCosIEVs
ZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOworICAg
ICAgICBGcmFnbWVudFBhcnNpbmdDb250ZXh0KERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBj
b250ZXh0RWxlbWVudCk7CiAgICAgICAgIH5GcmFnbWVudFBhcnNpbmdDb250ZXh0KCk7CiAKICAg
ICAgICAgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiBtX2ZyYWdt
ZW50OyB9CiAgICAgICAgIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyBBU1NFUlQo
bV9mcmFnbWVudCk7IHJldHVybiBtX2NvbnRleHRFbGVtZW50OyB9Ci0gICAgICAgIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKCkgY29uc3QgeyBBU1NFUlQo
bV9mcmFnbWVudCk7IHJldHVybiBtX3NjcmlwdGluZ1Blcm1pc3Npb247IH0KIAogICAgIHByaXZh
dGU6CiAgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIG1fZnJhZ21lbnQ7CiAgICAgICAgIEVsZW1l
bnQqIG1fY29udGV4dEVsZW1lbnQ7Ci0KLSAgICAgICAgLy8gRGlzYWxsb3dTY3JpcHRpbmdDb250
ZW50IGNhdXNlcyB0aGUgUGFyc2VyIHRvIHJlbW92ZSBjaGlsZHJlbiBmcm9tIDxzY3JpcHQ+IHRh
Z3MgKHNvIGphdmFzY3JpcHQgZG9lc24ndCBzaG93IHVwIGluIHBhc3RlcykuCi0gICAgICAgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CiAgICAgfTsK
IAogICAgIGJvb2wgbV9mcmFtZXNldE9rOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYmxhY2tiZXJyeS9QYXN0ZWJvYXJkQmxhY2tCZXJyeS5jcHAJKHJl
dmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2JsYWNrYmVycnkvUGFz
dGVib2FyZEJsYWNrQmVycnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgaWYgKCFodG1sLmlzRW1wdHkoKSkgewogICAgICAg
ICBTdHJpbmcgdXJsID0gQmxhY2tCZXJyeTo6UGxhdGZvcm06OkNsaXBib2FyZDo6cmVhZFVSTCgp
OwotICAgICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUt
PmRvY3VtZW50KCksIGh0bWwsIHVybCwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50
SWZOZWVkZWQpKQorICAgICAgICBpZiAoZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJr
dXAoZnJhbWUtPmRvY3VtZW50KCksIGh0bWwsIHVybCwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVn
aW5Db250ZW50KSkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAg
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9t
aXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9E
cmFnRGF0YUNocm9taXVtLmNwcAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1NCw3ICsxNTQsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IERyYWdEYXRhOjph
CiAgICAgICAgIFN0cmluZyBodG1sOwogICAgICAgICBLVVJMIGJhc2VVUkw7CiAgICAgICAgIG1f
cGxhdGZvcm1EcmFnRGF0YS0+aHRtbEFuZEJhc2VVUkwoaHRtbCwgYmFzZVVSTCk7Ci0gICAgICAg
IGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIGh0bWwsIGJhc2VVUkwsIERpc2FsbG93U2NyaXB0
aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkKSkKKyAgICAgICAgaWYgKFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9j
dW1lbnQoKSwgaHRtbCwgYmFzZVVSTCwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50
KSkKICAgICAgICAgICAgIHJldHVybiBmcmFnbWVudC5yZWxlYXNlKCk7CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9h
cmRDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4
Nyw3ICsxODcsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAg
ICAgICAgIFdlYktpdDo6V2ViVVJMIHVybDsKICAgICAgICAgV2ViS2l0OjpXZWJTdHJpbmcgbWFy
a3VwID0gV2ViS2l0OjpQbGF0Zm9ybTo6Y3VycmVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEhUTUwo
YnVmZmVyLCAmdXJsLCAmZnJhZ21lbnRTdGFydCwgJmZyYWdtZW50RW5kKTsKICAgICAgICAgaWYg
KCFtYXJrdXAuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwV2l0aENvbnRleHQoZnJh
bWUtPmRvY3VtZW50KCksIG1hcmt1cCwgZnJhZ21lbnRTdGFydCwgZnJhZ21lbnRFbmQsIEtVUkwo
dXJsKSwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQpKQorICAgICAg
ICAgICAgaWYgKFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cFdpdGhDb250ZXh0KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXAsIGZyYWdt
ZW50U3RhcnQsIGZyYWdtZW50RW5kLCBLVVJMKHVybCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1
Z2luQ29udGVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsK
ICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
UGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3
Miw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICBjaG9z
ZVBsYWluVGV4dCA9IGZhbHNlOwogCiAgICAgaWYgKGRhdGFPYmplY3QtPmhhc01hcmt1cCgpKSB7
Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCksICIi
LCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRlZCk7CisgICAgICAgIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChmcmFtZS0+ZG9jdW1lbnQoKSwgZGF0YU9iamVjdC0+bWFya3VwKCksICIiLCBEaXNhbGxvd1Nj
cmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogICAgICAgICBpZiAoZnJhZ21lbnQpCiAgICAgICAg
ICAgICByZXR1cm4gZnJhZ21lbnQucmVsZWFzZSgpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCShyZXZpc2lvbiAxNDYyMzMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNDgzLDcgKzQ4Myw3IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFz
dGVib2FyZDoKICAgICAgICAgICAgICAgICAgICAgaWYgKERvY3VtZW50TG9hZGVyKiBsb2FkZXIg
PSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBsb2FkZXItPmFkZEFsbEFyY2hpdmVSZXNvdXJjZXMoY29yZUFyY2hpdmUuZ2V0KCkpOwog
Ci0gICAgICAgICAgICAgICAgICAgIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3Vw
KGZyYW1lLT5kb2N1bWVudCgpLCBtYXJrdXBTdHJpbmcsIG1haW5SZXNvdXJjZS0+dXJsKCksIERp
c2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkKTsKKyAgICAgICAgICAgICAg
ICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50
KCksIG1hcmt1cFN0cmluZywgbWFpblJlc291cmNlLT51cmwoKSwgRGlzYWxsb3dTY3JpcHRpbmdB
bmRQbHVnaW5Db250ZW50KTsKICAgICAgICAgICAgICAgICAgICAgW21hcmt1cFN0cmluZyByZWxl
YXNlXTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZShNSU1FVHlwZSkpCiAgICAgICAgICAgICAgICAgICAgZnJhZ21l
bnQgPSBkb2N1bWVudEZyYWdtZW50V2l0aEltYWdlUmVzb3VyY2UoZnJhbWUsIG1haW5SZXNvdXJj
ZSk7ICAgICAgICAgICAgICAgICAgICAKQEAgLTUyMiw3ICs1MjIsNyBAQCBQYXNzUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgaWYgKFtIVE1MU3RyaW5nIGxlbmd0aF0gIT0gMCAmJgotICAgICAgICAgICAgKGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBIVE1MU3Ry
aW5nLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQpKSkKKyAg
ICAgICAgICAgIChmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9j
dW1lbnQoKSwgSFRNTFN0cmluZywgIiIsIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVu
dCkpKQogICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0RyYWdEYXRhUXQuY3BwCShyZXZpc2lvbiAx
NDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9EcmFnRGF0YVF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDcgKzEzNyw3IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJh
bWUqLCBGaWxlbmFtZUMKIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRHJhZ0RhdGE6OmFz
RnJhZ21lbnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiwgYm9vbCwgYm9vbCYpIGNv
bnN0CiB7CiAgICAgaWYgKG1fcGxhdGZvcm1EcmFnRGF0YSAmJiBtX3BsYXRmb3JtRHJhZ0RhdGEt
Pmhhc0h0bWwoKSkKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFt
ZS0+ZG9jdW1lbnQoKSwgbV9wbGF0Zm9ybURyYWdEYXRhLT5odG1sKCksICIiLCBEaXNhbGxvd1Nj
cmlwdGluZ0FuZFBsdWdpbkNvbnRlbnRJZk5lZWRlZCk7CisgICAgICAgIHJldHVybiBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1fcGxhdGZvcm1EcmFnRGF0YS0+
aHRtbCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsKIAogICAgIHJl
dHVybiAwOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJk
UXQuY3BwCShyZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9Q
YXN0ZWJvYXJkUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEyLDcgQEAgUGFzc1Jl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIGlmIChtaW1lRGF0YS0+aGFz
SHRtbCgpKSB7CiAgICAgICAgIFFTdHJpbmcgaHRtbCA9IG1pbWVEYXRhLT5odG1sKCk7CiAgICAg
ICAgIGlmICghaHRtbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1l
bnQoKSwgaHRtbCwgIiIsIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVk
KTsKKyAgICAgICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IGNyZWF0
ZUZyYWdtZW50RnJvbU1hcmt1cChmcmFtZS0+ZG9jdW1lbnQoKSwgaHRtbCwgIiIsIERpc2FsbG93
U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCk7CiAgICAgICAgICAgICBpZiAoZnJhZ21lbnQpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZyYWdtZW50LnJlbGVhc2UoKTsKICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxpdGllc1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFV0aWxp
dGllc1dpbi5jcHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3dpbi9DbGlwYm9hcmRVdGlsaXRpZXNXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDEsNyAr
NjQxLDcgQEAgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudEZybwogICAgIH0K
IAogICAgIFN0cmluZyBtYXJrdXAgPSBleHRyYWN0TWFya3VwRnJvbUNGSFRNTChjZmh0bWwpOwot
ICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLCBtYXJrdXAsIHNyY1VSTCwg
RGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQpOworICAgIHJldHVybiBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZG9jLCBtYXJrdXAsIHNyY1VSTCwgRGlzYWxsb3dTY3Jp
cHRpbmdBbmRQbHVnaW5Db250ZW50KTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBmcmFnbWVudEZyb21IVE1MKERvY3VtZW50KiBkb2MsIElEYXRhT2JqZWN0KiBkYXRhKSAKQEAg
LTY1OCw3ICs2NTgsNyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50RnJv
CiAgICAgU3RyaW5nIGh0bWwgPSBnZXRUZXh0SFRNTChkYXRhKTsKICAgICBTdHJpbmcgc3JjVVJM
OwogICAgIGlmICghaHRtbC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVu
dEZyb21NYXJrdXAoZG9jLCBodG1sLCBzcmNVUkwsIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2lu
Q29udGVudElmTmVlZGVkKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1
cChkb2MsIGh0bWwsIHNyY1VSTCwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50KTsK
IAogICAgIHJldHVybiAwOwogfQpAQCAtNjc2LDcgKzY3Niw3IEBAIFBhc3NSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZnJhZ21lbnRGcm8KIAogICAgIFN0cmluZyBzcmNVUkw7CiAgICAgaWYgKGdl
dERhdGFNYXBJdGVtKGRhdGEsIHRleHRodG1sRm9ybWF0KCksIHN0cmluZ0RhdGEpKQotICAgICAg
ICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGRvY3VtZW50LCBzdHJpbmdEYXRhLCBz
cmNVUkwsIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudElmTmVlZGVkKTsKKyAgICAg
ICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbU1hcmt1cChkb2N1bWVudCwgc3RyaW5nRGF0YSwg
c3JjVVJMLCBEaXNhbGxvd1NjcmlwdGluZ0FuZFBsdWdpbkNvbnRlbnQpOwogCiAgICAgcmV0dXJu
IDA7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93eC9QYXN0ZWJvYXJkV3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Bhc3RlYm9hcmRXeC5j
cHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3d4L1Bhc3Rl
Ym9hcmRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDcgKzk5LDcgQEAgUGFzc1JlZlB0cjxE
b2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgICAgICAgICAgd3hIVE1MRGF0YU9iamVj
dCBkYXRhOwogICAgICAgICAgICAgd3hUaGVDbGlwYm9hcmQtPkdldERhdGEoZGF0YSk7CiAgICAg
ICAgICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwotICAgICAgICAgICAgZnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIGRhdGEuR2V0SFRNTCgp
LCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50SWZOZWVkZWQpOworICAgICAg
ICAgICAgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50
KCksIGRhdGEuR2V0SFRNTCgpLCAiIiwgRGlzYWxsb3dTY3JpcHRpbmdBbmRQbHVnaW5Db250ZW50
KTsKICAgICAgICAgfSBlbHNlCiAjZW5kaWYKICAgICAgICAgewpJbmRleDogU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKwogLy8gQW5pbWF0
ZWQgcHJvcGVydHkgZGVmaW5pdGlvbnMKIERFRklORV9BTklNQVRFRF9TVFJJTkcoU1ZHQUVsZW1l
bnQsIFNWR05hbWVzOjp0YXJnZXRBdHRyLCBTVkdUYXJnZXQsIHN2Z1RhcmdldCkKIERFRklORV9B
TklNQVRFRF9TVFJJTkcoU1ZHQUVsZW1lbnQsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBIcmVmLCBo
cmVmKQpAQCAtMjA2LDYgKzIwOCwxMSBAQCBib29sIFNWR0FFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
IGNvbnN0CiAgICAgcmV0dXJuIFNWR0VsZW1lbnQ6OmlzRm9jdXNhYmxlKCk7CiB9CiAKK2Jvb2wg
U1ZHQUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKSBj
b25zdAoreworICAgIHJldHVybiBhdHRyaWJ1dGUubmFtZSgpLmxvY2FsTmFtZSgpID09IGhyZWZB
dHRyIHx8IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRy
aWJ1dGUpOworfQorCiBib29sIFNWR0FFbGVtZW50Ojppc01vdXNlRm9jdXNhYmxlKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQUVsZW1lbnQuaAkocmV2
aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTYwLDYgKzYwLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNN
b3VzZUZvY3VzYWJsZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNh
YmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUo
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRl
JikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihj
b25zdCBOb2RlUmVuZGVyaW5nQ29udGV4dCYpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS94bWwvWE1MRXJyb3JzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS94bWwvWE1M
RXJyb3JzLmNwcAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291cmNlL1dlYkNvcmUveG1sL1hNTEVy
cm9ycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDcgQEAgc3RhdGljIGlubGluZSBQ
YXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZQogCiAgICAgVmVjdG9yPEF0dHJpYnV0ZT4gcmVwb3J0
QXR0cmlidXRlczsKICAgICByZXBvcnRBdHRyaWJ1dGVzLmFwcGVuZChBdHRyaWJ1dGUoc3R5bGVB
dHRyLCAiZGlzcGxheTogYmxvY2s7IHdoaXRlLXNwYWNlOiBwcmU7IGJvcmRlcjogMnB4IHNvbGlk
ICNjNzc7IHBhZGRpbmc6IDAgMWVtIDAgMWVtOyBtYXJnaW46IDFlbTsgYmFja2dyb3VuZC1jb2xv
cjogI2ZkZDsgY29sb3I6IGJsYWNrIikpOwotICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNlclNldEF0
dHJpYnV0ZXMocmVwb3J0QXR0cmlidXRlcywgRGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAg
ICByZXBvcnRFbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHJlcG9ydEF0dHJpYnV0ZXMpOwog
CiAgICAgUmVmUHRyPEVsZW1lbnQ+IGgzID0gZG9jLT5jcmVhdGVFbGVtZW50KGgzVGFnLCB0cnVl
KTsKICAgICByZXBvcnRFbGVtZW50LT5wYXJzZXJBcHBlbmRDaGlsZChoMy5nZXQoKSk7CkBAIC0x
MDIsNyArMTAyLDcgQEAgc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZQog
ICAgIFJlZlB0cjxFbGVtZW50PiBmaXhlZCA9IGRvYy0+Y3JlYXRlRWxlbWVudChkaXZUYWcsIHRy
dWUpOwogICAgIFZlY3RvcjxBdHRyaWJ1dGU+IGZpeGVkQXR0cmlidXRlczsKICAgICBmaXhlZEF0
dHJpYnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJmb250LWZhbWlseTptb25vc3Bh
Y2U7Zm9udC1zaXplOjEycHgiKSk7Ci0gICAgZml4ZWQtPnBhcnNlclNldEF0dHJpYnV0ZXMoZml4
ZWRBdHRyaWJ1dGVzLCBEaXNhbGxvd1NjcmlwdGluZ0NvbnRlbnQpOworICAgIGZpeGVkLT5wYXJz
ZXJTZXRBdHRyaWJ1dGVzKGZpeGVkQXR0cmlidXRlcyk7CiAgICAgcmVwb3J0RWxlbWVudC0+cGFy
c2VyQXBwZW5kQ2hpbGQoZml4ZWQuZ2V0KCkpOwogCiAgICAgZml4ZWQtPnBhcnNlckFwcGVuZENo
aWxkKGRvYy0+Y3JlYXRlVGV4dE5vZGUoZXJyb3JNZXNzYWdlcykpOwpAQCAtMTYxLDcgKzE2MSw3
IEBAIHZvaWQgWE1MRXJyb3JzOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygKICAgICAgICAgVmVj
dG9yPEF0dHJpYnV0ZT4gYXR0cmlidXRlczsKICAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQoQXR0
cmlidXRlKHN0eWxlQXR0ciwgIndoaXRlLXNwYWNlOiBub3JtYWwiKSk7CiAgICAgICAgIFJlZlB0
cjxFbGVtZW50PiBwYXJhZ3JhcGggPSBtX2RvY3VtZW50LT5jcmVhdGVFbGVtZW50KHBUYWcsIHRy
dWUpOwotICAgICAgICBwYXJhZ3JhcGgtPnBhcnNlclNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcywg
RGlzYWxsb3dTY3JpcHRpbmdDb250ZW50KTsKKyAgICAgICAgcGFyYWdyYXBoLT5wYXJzZXJTZXRB
dHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAgICAgICBwYXJhZ3JhcGgtPnBhcnNlckFwcGVuZENo
aWxkKG1fZG9jdW1lbnQtPmNyZWF0ZVRleHROb2RlKCJUaGlzIGRvY3VtZW50IHdhcyBjcmVhdGVk
IGFzIHRoZSByZXN1bHQgb2YgYW4gWFNMIHRyYW5zZm9ybWF0aW9uLiBUaGUgbGluZSBhbmQgY29s
dW1uIG51bWJlcnMgZ2l2ZW4gYXJlIGZyb20gdGhlIHRyYW5zZm9ybWVkIHJlc3VsdC4iKSk7CiAg
ICAgICAgIHJlcG9ydEVsZW1lbnQtPnBhcnNlckFwcGVuZENoaWxkKHBhcmFncmFwaC5yZWxlYXNl
KCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9j
dW1lbnRQYXJzZXIuY3BwCShyZXZpc2lvbiAxNDYyMzMpCisrKyBTb3VyY2UvV2ViQ29yZS94bWwv
cGFyc2VyL1hNTERvY3VtZW50UGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg2LDcgKzI4
Niw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhdXNlUGFyc2luZygpCiAgICAgbV9wYXJz
ZXJQYXVzZWQgPSB0cnVlOwogfQogCi1ib29sIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZURvY3Vt
ZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21l
bnQsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24g
c2NyaXB0aW5nUGVybWlzc2lvbikKK2Jvb2wgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRG9jdW1l
bnRGcmFnbWVudChjb25zdCBTdHJpbmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVu
dCwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29u
dGVudFBvbGljeSkKIHsKICAgICBpZiAoIWNodW5rLmxlbmd0aCgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTI5OSw3ICsyOTksNyBAQCBib29sIFhNTERvY3VtZW50UGFyc2VyOjpwYXJzZURv
Y3VtZW50RnJhCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIFJlZlB0cjxYTUxE
b2N1bWVudFBhcnNlcj4gcGFyc2VyID0gWE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZShmcmFnbWVu
dCwgY29udGV4dEVsZW1lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pOworICAgIFJlZlB0cjxYTUxE
b2N1bWVudFBhcnNlcj4gcGFyc2VyID0gWE1MRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZShmcmFnbWVu
dCwgY29udGV4dEVsZW1lbnQsIHBhcnNlckNvbnRlbnRQb2xpY3kpOwogICAgIGJvb2wgd2VsbEZv
cm1lZCA9IHBhcnNlci0+YXBwZW5kRnJhZ21lbnRTb3VyY2UoY2h1bmspOwogICAgIC8vIERvIG5v
dCBjYWxsIGZpbmlzaCgpLiAgQ3VycmVudCBmaW5pc2goKSBhbmQgZG9FbmQoKSBpbXBsZW1lbnRh
dGlvbnMgdG91Y2ggdGhlIG1haW4gRG9jdW1lbnQvbG9hZGVyCiAgICAgLy8gYW5kIGNhbiBjYXVz
ZSBjcmFzaGVzIGluIHRoZSBmcmFnbWVudCBjYXNlLgpJbmRleDogU291cmNlL1dlYkNvcmUveG1s
L3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXIuaAkocmV2aXNpb24gMTQ2MjMzKQorKysgU291
cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03OSw5ICs3OSw5IEBAIGNsYXNzIFRleHQ7CiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgWE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHZpZXcpKTsKICAg
ICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxYTUxEb2N1bWVudFBhcnNlcj4gY3Jl
YXRlKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBlbGVtZW50LCBGcmFnbWVu
dFNjcmlwdGluZ1Blcm1pc3Npb24gcGVybWlzc2lvbikKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8WE1MRG9jdW1lbnRQYXJzZXI+IGNyZWF0ZShEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwg
RWxlbWVudCogZWxlbWVudCwgUGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFhNTERvY3VtZW50
UGFyc2VyKGZyYWdtZW50LCBlbGVtZW50LCBwZXJtaXNzaW9uKSk7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFhNTERvY3VtZW50UGFyc2VyKGZyYWdtZW50LCBlbGVtZW50LCBwYXJz
ZXJDb250ZW50UG9saWN5KSk7CiAgICAgICAgIH0KIAogICAgICAgICB+WE1MRG9jdW1lbnRQYXJz
ZXIoKTsKQEAgLTkyLDcgKzkyLDcgQEAgY2xhc3MgVGV4dDsKICAgICAgICAgdm9pZCBzZXRJc1hI
VE1MRG9jdW1lbnQoYm9vbCBpc1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsg
fQogICAgICAgICBib29sIGlzWEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRN
TERvY3VtZW50OyB9CiAKLSAgICAgICAgc3RhdGljIGJvb2wgcGFyc2VEb2N1bWVudEZyYWdtZW50
KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBwYXJlbnQgPSAwLCBG
cmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24gPSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOworICAg
ICAgICBzdGF0aWMgYm9vbCBwYXJzZURvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiwgRG9j
dW1lbnRGcmFnbWVudCosIEVsZW1lbnQqIHBhcmVudCA9IDAsIFBhcnNlckNvbnRlbnRQb2xpY3kg
PSBBbGxvd1NjcmlwdGluZ0NvbnRlbnQpOwogCiAgICAgICAgIC8vIFVzZWQgYnkgdGhlIFhNTEh0
dHBSZXF1ZXN0IHRvIGNoZWNrIGlmIHRoZSByZXNwb25zZVhNTCB3YXMgd2VsbCBmb3JtZWQuCiAg
ICAgICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJy
b3I7IH0KQEAgLTEwMyw3ICsxMDMsNyBAQCBjbGFzcyBUZXh0OwogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqLCBGcmFtZVZpZXcqID0gMCk7Ci0gICAg
ICAgIFhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiwgRnJhZ21l
bnRTY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1l
bnRGcmFnbWVudCosIEVsZW1lbnQqLCBQYXJzZXJDb250ZW50UG9saWN5KTsKIAogICAgICAgICAv
LyBGcm9tIERvY3VtZW50UGFyc2VyCiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbnNlcnQoY29uc3Qg
U2VnbWVudGVkU3RyaW5nJik7CkBAIC0yMTUsNyArMjE1LDYgQEAgcHVibGljOgogICAgICAgICB0
eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBBdG9taWNTdHJpbmc+IFByZWZpeEZvck5hbWVz
cGFjZU1hcDsKICAgICAgICAgUHJlZml4Rm9yTmFtZXNwYWNlTWFwIG1fcHJlZml4VG9OYW1lc3Bh
Y2VNYXA7CiAgICAgICAgIFNlZ21lbnRlZFN0cmluZyBtX3BlbmRpbmdTcmM7Ci0gICAgICAgIEZy
YWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBtX3NjcmlwdGluZ1Blcm1pc3Npb247CiAgICAgfTsK
IAogI2lmIEVOQUJMRShYU0xUKQpJbmRleDogU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxE
b2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24gMTQ2MjMzKQor
KysgU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNjcsNiArMzY3LDEzIEBAIHByaXZhdGU6CiAgICAgdW5zaWdu
ZWQgbV9jdXJyZW50T2Zmc2V0OwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldEF0dHJpYnV0
ZXMoRWxlbWVudCogZWxlbWVudCwgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3Rvciwg
UGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQoreworICAgIGlmICghc2Ny
aXB0aW5nQ29udGVudElzQWxsb3dlZChwYXJzZXJDb250ZW50UG9saWN5KSkKKyAgICAgICAgZWxl
bWVudC0+c3RyaXBKYXZhU2NyaXB0QXR0cmlidXRlcyhhdHRyaWJ1dGVWZWN0b3IpOworICAgIGVs
ZW1lbnQtPnBhcnNlclNldEF0dHJpYnV0ZXMoYXR0cmlidXRlVmVjdG9yKTsKK30KKwogc3RhdGlj
IHZvaWQgc3dpdGNoVG9VVEYxNih4bWxQYXJzZXJDdHh0UHRyIGN0eHQpCiB7CiAgICAgLy8gSGFj
ayBhcm91bmQgbGlieG1sMidzIGxhY2sgb2YgZW5jb2Rpbmcgb3ZlcmlkZSBzdXBwb3J0IGJ5IG1h
bnVhbGx5CkBAIC01NjMsMTIgKzU3MCwxMSBAQCBYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1l
bnRQYXJzZXIoRG9jCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAgICAsIG1fc2NyaXB0U3Rh
cnRQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQogICAgICwgbV9w
YXJzaW5nRnJhZ21lbnQoZmFsc2UpCi0gICAgLCBtX3NjcmlwdGluZ1Blcm1pc3Npb24oQWxsb3dT
Y3JpcHRpbmdDb250ZW50KQogewogfQogCi1YTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQ
YXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQs
IEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9uKQotICAgIDog
U2NyaXB0YWJsZURvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQorWE1MRG9jdW1l
bnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBF
bGVtZW50KiBwYXJlbnRFbGVtZW50LCBQYXJzZXJDb250ZW50UG9saWN5IHBhcnNlckNvbnRlbnRQ
b2xpY3kpCisgICAgOiBTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50
KCksIHBhcnNlckNvbnRlbnRQb2xpY3kpCiAgICAgLCBtX3ZpZXcoMCkKICAgICAsIG1fY29udGV4
dCgwKQogICAgICwgbV9wZW5kaW5nQ2FsbGJhY2tzKFBlbmRpbmdDYWxsYmFja3M6OmNyZWF0ZSgp
KQpAQCAtNTg3LDcgKzU5Myw2IEBAIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNl
cihEb2MKICAgICAsIG1fcGVuZGluZ1NjcmlwdCgwKQogICAgICwgbV9zY3JpcHRTdGFydFBvc2l0
aW9uKFRleHRQb3NpdGlvbjo6YmVsb3dSYW5nZVBvc2l0aW9uKCkpCiAgICAgLCBtX3BhcnNpbmdG
cmFnbWVudCh0cnVlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1p
c3Npb24pCiB7CiAgICAgZnJhZ21lbnQtPnJlZigpOwogCkBAIC03MDAsNyArNzA1LDcgQEAgc3Ry
dWN0IF94bWxTQVgyTmFtZXNwYWNlIHsKIH07CiB0eXBlZGVmIHN0cnVjdCBfeG1sU0FYMk5hbWVz
cGFjZSB4bWxTQVgyTmFtZXNwYWNlOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlTmFtZXNw
YWNlQXR0cmlidXRlcyhWZWN0b3I8QXR0cmlidXRlLCA4PiYgcHJlZml4ZWRBdHRyaWJ1dGVzLCBj
b25zdCB4bWxDaGFyKiogbGlieG1sTmFtZXNwYWNlcywgaW50IG5iX25hbWVzcGFjZXMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0
ZXMoVmVjdG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXRlcywgY29uc3QgeG1sQ2hhcioq
IGxpYnhtbE5hbWVzcGFjZXMsIGludCBuYl9uYW1lc3BhY2VzLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICB4bWxTQVgyTmFtZXNwYWNlKiBuYW1lc3BhY2VzID0gcmVpbnRlcnByZXRfY2FzdDx4
bWxTQVgyTmFtZXNwYWNlKj4obGlieG1sTmFtZXNwYWNlcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuYl9uYW1lc3BhY2VzOyBpKyspIHsKQEAgLTcyNiw3ICs3MzEsNyBAQCBzdHJ1Y3QgX3ht
bFNBWDJBdHRyaWJ1dGVzIHsKIH07CiB0eXBlZGVmIHN0cnVjdCBfeG1sU0FYMkF0dHJpYnV0ZXMg
eG1sU0FYMkF0dHJpYnV0ZXM7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0
cmlidXRlcyhWZWN0b3I8QXR0cmlidXRlLCA4PiYgcHJlZml4ZWRBdHRyaWJ1dGVzLCBjb25zdCB4
bWxDaGFyKiogbGlieG1sQXR0cmlidXRlcywgaW50IG5iX2F0dHJpYnV0ZXMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRyaWJ1dGVzKFZlY3Rv
cjxBdHRyaWJ1dGU+JiBwcmVmaXhlZEF0dHJpYnV0ZXMsIGNvbnN0IHhtbENoYXIqKiBsaWJ4bWxB
dHRyaWJ1dGVzLCBpbnQgbmJfYXR0cmlidXRlcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
eG1sU0FYMkF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMgPSByZWludGVycHJldF9jYXN0PHhtbFNBWDJB
dHRyaWJ1dGVzKj4obGlieG1sQXR0cmlidXRlcyk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
Yl9hdHRyaWJ1dGVzOyBpKyspIHsKQEAgLTc5NywxNyArODAyLDE3IEBAIHZvaWQgWE1MRG9jdW1l
bnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IFZlY3RvcjxBdHRyaWJ1dGUsIDg+IHByZWZpeGVkQXR0cmlidXRlczsKKyAgICBWZWN0b3I8QXR0
cmlidXRlPiBwcmVmaXhlZEF0dHJpYnV0ZXM7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgaGFuZGxlTmFtZXNwYWNlQXR0cmlidXRlcyhwcmVmaXhlZEF0dHJpYnV0ZXMsIGxpYnhtbE5h
bWVzcGFjZXMsIG5iX25hbWVzcGFjZXMsIGVjKTsKICAgICBpZiAoZWMpIHsKLSAgICAgICAgbmV3
RWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyhwcmVmaXhlZEF0dHJpYnV0ZXMsIG1fc2NyaXB0
aW5nUGVybWlzc2lvbik7CisgICAgICAgIHNldEF0dHJpYnV0ZXMobmV3RWxlbWVudC5nZXQoKSwg
cHJlZml4ZWRBdHRyaWJ1dGVzLCBwYXJzZXJDb250ZW50UG9saWN5KCkpOwogICAgICAgICBzdG9w
UGFyc2luZygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaGFuZGxlRWxlbWVudEF0
dHJpYnV0ZXMocHJlZml4ZWRBdHRyaWJ1dGVzLCBsaWJ4bWxBdHRyaWJ1dGVzLCBuYl9hdHRyaWJ1
dGVzLCBlYyk7Ci0gICAgbmV3RWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyhwcmVmaXhlZEF0
dHJpYnV0ZXMsIG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgc2V0QXR0cmlidXRlcyhuZXdF
bGVtZW50LmdldCgpLCBwcmVmaXhlZEF0dHJpYnV0ZXMsIHBhcnNlckNvbnRlbnRQb2xpY3koKSk7
CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIHN0b3BQYXJzaW5nKCk7CiAgICAgICAgIHJldHVybjsK
QEAgLTg2Myw3ICs4NjgsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMo
KQogICAgIGlmIChoYWNrQXJvdW5kTGliWE1MRW50aXR5UGFyc2luZ0J1ZygpICYmIGNvbnRleHQo
KS0+ZGVwdGggPD0gZGVwdGhUcmlnZ2VyaW5nRW50aXR5RXhwYW5zaW9uKCkpCiAgICAgICAgIHNl
dERlcHRoVHJpZ2dlcmluZ0VudGl0eUV4cGFuc2lvbigtMSk7CiAKLSAgICBpZiAoIXNjcmlwdGlu
Z0NvbnRlbnRJc0FsbG93ZWQobV9zY3JpcHRpbmdQZXJtaXNzaW9uKSAmJiBuLT5pc0VsZW1lbnRO
b2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHRvRWxlbWVudChuLmdldCgpKSkpIHsKKyAgICBpZiAo
IXNjcmlwdGluZ0NvbnRlbnRJc0FsbG93ZWQocGFyc2VyQ29udGVudFBvbGljeSgpKSAmJiBuLT5p
c0VsZW1lbnROb2RlKCkgJiYgdG9TY3JpcHRFbGVtZW50KHRvRWxlbWVudChuLmdldCgpKSkpIHsK
ICAgICAgICAgcG9wQ3VycmVudE5vZGUoKTsKICAgICAgICAgbi0+cmVtb3ZlKElHTk9SRV9FWENF
UFRJT04pOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS94bWwvcGFyc2Vy
L1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3ht
bC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAJKHJldmlzaW9uIDE0NjIzMykKKysrIFNv
dXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDYgKzY0LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldEF0dHJpYnV0ZXMoRWxlbWVudCog
ZWxlbWVudCwgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3RvciwgUGFyc2VyQ29udGVu
dFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5KQoreworICAgIGlmICghc2NyaXB0aW5nQ29udGVu
dElzQWxsb3dlZChwYXJzZXJDb250ZW50UG9saWN5KSkKKyAgICAgICAgZWxlbWVudC0+c3RyaXBK
YXZhU2NyaXB0QXR0cmlidXRlcyhhdHRyaWJ1dGVWZWN0b3IpOworICAgIGVsZW1lbnQtPnBhcnNl
clNldEF0dHJpYnV0ZXMoYXR0cmlidXRlVmVjdG9yKTsKK30KKwogY2xhc3MgRW50aXR5UmVzb2x2
ZXIgOiBwdWJsaWMgUVhtbFN0cmVhbUVudGl0eVJlc29sdmVyIHsKICAgICB2aXJ0dWFsIFFTdHJp
bmcgcmVzb2x2ZVVuZGVjbGFyZWRFbnRpdHkoY29uc3QgUVN0cmluZyAmbmFtZSk7CiB9OwpAQCAt
MTA0LDEzICsxMTEsMTIgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
YwogICAgICwgbV9wZW5kaW5nU2NyaXB0KDApCiAgICAgLCBtX3NjcmlwdFN0YXJ0UG9zaXRpb24o
VGV4dFBvc2l0aW9uOjpiZWxvd1JhbmdlUG9zaXRpb24oKSkKICAgICAsIG1fcGFyc2luZ0ZyYWdt
ZW50KGZhbHNlKQotICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKEFsbG93U2NyaXB0aW5nQ29u
dGVudCkKIHsKICAgICBtX3N0cmVhbS5zZXRFbnRpdHlSZXNvbHZlcihuZXcgRW50aXR5UmVzb2x2
ZXIpOwogfQogCi1YTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRG
cmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0
aW5nUGVybWlzc2lvbiBwZXJtaXNzaW9uKQotICAgIDogU2NyaXB0YWJsZURvY3VtZW50UGFyc2Vy
KGZyYWdtZW50LT5kb2N1bWVudCgpKQorWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFy
c2VyKERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnRFbGVtZW50LCBQ
YXJzZXJDb250ZW50UG9saWN5IHBhcnNlckNvbnRlbnRQb2xpY3kpCisgICAgOiBTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIoZnJhZ21lbnQtPmRvY3VtZW50KCksIHBhcnNlckNvbnRlbnRQb2xpY3kp
CiAgICAgLCBtX3ZpZXcoMCkKICAgICAsIG1fd3JvdGVUZXh0KGZhbHNlKQogICAgICwgbV9jdXJy
ZW50Tm9kZShmcmFnbWVudCkKQEAgLTEyNiw3ICsxMzIsNiBAQCBYTUxEb2N1bWVudFBhcnNlcjo6
WE1MRG9jdW1lbnRQYXJzZXIoRG9jCiAgICAgLCBtX3BlbmRpbmdTY3JpcHQoMCkKICAgICAsIG1f
c2NyaXB0U3RhcnRQb3NpdGlvbihUZXh0UG9zaXRpb246OmJlbG93UmFuZ2VQb3NpdGlvbigpKQog
ICAgICwgbV9wYXJzaW5nRnJhZ21lbnQodHJ1ZSkKLSAgICAsIG1fc2NyaXB0aW5nUGVybWlzc2lv
bihwZXJtaXNzaW9uKQogewogICAgIGZyYWdtZW50LT5yZWYoKTsKIApAQCAtMzMwLDcgKzMzNSw3
IEBAIHN0YXRpYyBpbmxpbmUgU3RyaW5nIHByZWZpeEZyb21RTmFtZShjb24KICAgICAgICAgcmV0
dXJuIHFOYW1lLmxlZnQob2Zmc2V0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5h
bWVzcGFjZUF0dHJpYnV0ZXMoVmVjdG9yPEF0dHJpYnV0ZSwgOD4mIHByZWZpeGVkQXR0cmlidXRl
cywgY29uc3QgUVhtbFN0cmVhbU5hbWVzcGFjZURlY2xhcmF0aW9ucyAmbnMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZU5hbWVzcGFjZUF0dHJpYnV0ZXMoVmVj
dG9yPEF0dHJpYnV0ZT4mIHByZWZpeGVkQXR0cmlidXRlcywgY29uc3QgUVhtbFN0cmVhbU5hbWVz
cGFjZURlY2xhcmF0aW9ucyAmbnMsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbnMuY291bnQoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IFFYbWxTdHJlYW1O
YW1lc3BhY2VEZWNsYXJhdGlvbiAmZGVjbCA9IG5zW2ldOwpAQCAtMzQ2LDcgKzM1MSw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVOYW1lc3BhY2VBdHRyaWIKICAgICB9CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBoYW5kbGVFbGVtZW50QXR0cmlidXRlcyhWZWN0b3I8QXR0cmlidXRlLCA4
PiYgcHJlZml4ZWRBdHRyaWJ1dGVzLCBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlcyAmYXR0cnMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUVsZW1lbnRBdHRy
aWJ1dGVzKFZlY3RvcjxBdHRyaWJ1dGU+JiBwcmVmaXhlZEF0dHJpYnV0ZXMsIGNvbnN0IFFYbWxT
dHJlYW1BdHRyaWJ1dGVzICZhdHRycywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhdHRycy5jb3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgUVhtbFN0
cmVhbUF0dHJpYnV0ZSAmYXR0ciA9IGF0dHJzW2ldOwpAQCAtNDcwLDE3ICs0NzUsMTcgQEAgdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6cGFyc2VTdGFydEVsZW1lbgogICAgIGJvb2wgaXNGaXJzdEVs
ZW1lbnQgPSAhbV9zYXdGaXJzdEVsZW1lbnQ7CiAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVl
OwogCi0gICAgVmVjdG9yPEF0dHJpYnV0ZSwgOD4gcHJlZml4ZWRBdHRyaWJ1dGVzOworICAgIFZl
Y3RvcjxBdHRyaWJ1dGU+IHByZWZpeGVkQXR0cmlidXRlczsKICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICBoYW5kbGVOYW1lc3BhY2VBdHRyaWJ1dGVzKHByZWZpeGVkQXR0cmlidXRlcywg
bV9zdHJlYW0ubmFtZXNwYWNlRGVjbGFyYXRpb25zKCksIGVjKTsKICAgICBpZiAoZWMpIHsKLSAg
ICAgICAgbmV3RWxlbWVudC0+cGFyc2VyU2V0QXR0cmlidXRlcyhwcmVmaXhlZEF0dHJpYnV0ZXMs
IG1fc2NyaXB0aW5nUGVybWlzc2lvbik7CisgICAgICAgIHNldEF0dHJpYnV0ZXMobmV3RWxlbWVu
dC5nZXQoKSwgcHJlZml4ZWRBdHRyaWJ1dGVzLCBwYXJzZXJDb250ZW50UG9saWN5KCkpOwogICAg
ICAgICBzdG9wUGFyc2luZygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaGFuZGxl
RWxlbWVudEF0dHJpYnV0ZXMocHJlZml4ZWRBdHRyaWJ1dGVzLCBtX3N0cmVhbS5hdHRyaWJ1dGVz
KCksIGVjKTsKLSAgICBuZXdFbGVtZW50LT5wYXJzZXJTZXRBdHRyaWJ1dGVzKHByZWZpeGVkQXR0
cmlidXRlcywgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKTsKKyAgICBzZXRBdHRyaWJ1dGVzKG5ld0Vs
ZW1lbnQuZ2V0KCksIHByZWZpeGVkQXR0cmlidXRlcywgcGFyc2VyQ29udGVudFBvbGljeSgpKTsK
ICAgICBpZiAoZWMpIHsKICAgICAgICAgc3RvcFBhcnNpbmcoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNTEwLDcgKzUxNSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlRW5kRWxlbWVu
dCgKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gbiA9IG1fY3VycmVudE5vZGU7CiAgICAgbi0+
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAKLSAgICBpZiAoIXNjcmlwdGluZ0NvbnRlbnRJc0Fs
bG93ZWQobV9zY3JpcHRpbmdQZXJtaXNzaW9uKSAmJiBuLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9T
Y3JpcHRFbGVtZW50KHRvRWxlbWVudChuLmdldCgpKSkpIHsKKyAgICBpZiAoIXNjcmlwdGluZ0Nv
bnRlbnRJc0FsbG93ZWQocGFyc2VyQ29udGVudFBvbGljeSgpKSAmJiBuLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9TY3JpcHRFbGVtZW50KHRvRWxlbWVudChuLmdldCgpKSkpIHsKICAgICAgICAgcG9w
Q3VycmVudE5vZGUoKTsKICAgICAgICAgbi0+cmVtb3ZlKElHTk9SRV9FWENFUFRJT04pOwogICAg
ICAgICByZXR1cm47CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDYyMzUpCisrKyBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAxMy0wMy0xOSAgR2Vv
ZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlZmFjdG9yZWQgc2Ny
aXB0IGNvbnRlbnQgcmVtb3ZhbCBpbiB0aGUgZnJhZ21lbnQgcGFyc2VyIGZvciBjbGFyaXR5IGFu
ZCBzcGVlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEyNzM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
VXBkYXRlZCB0ZXN0cyB0byBpbXByb3ZlIGNvdmVyYWdlIGFuZCByZWZsZWN0IGJlaGF2aW9yIHR3
ZWFrcyB0byBpbXByb3ZlCisgICAgICAgIGNsYXJpdHkuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bh
c3RlYm9hcmQvcGFzdGUtbm9zY3JpcHQtZXhwZWN0ZWQudHh0OiAKKyAgICAgICAgICAgIC0gVGhl
ICJocmVmIiwgInNvdXJjZSIsIGFuZCAiYWN0aW9uIiBhdHRyaWJ1dGVzIGFyZSBmdWxseSByZW1v
dmVkIG5vdywKKyAgICAgICAgICAgIGluc3RlYWQgb2YgYmVpbmcgc2V0IHRvIHRoZSBlbXB0eSBz
dHJpbmcsIGJlY2F1c2UgZm9yIGNsYXJpdHkgd2UKKyAgICAgICAgICAgIGZ1bGx5IHJlbW92ZSBz
Y3JpcHQgYXR0cmlidXRlcyBhbmQgZWxlbWVudHMgaW5zdGVhZCBvZiBwYXJ0aWFsbHkKKyAgICAg
ICAgICAgIHN0cmlwcGluZyB0aGVtLiAKKworICAgICAgICAgICAgLSBUaGUgImZvcm1hY3Rpb24i
IGF0dHJpYnV0ZSBvbiB0aGUgZm9ybSBjb250cm9sIGlzIG5vdCByZW1vdmVkIGJlY2F1c2UsCisg
ICAgICAgICAgICBldmVuIHRob3VnaCBpdCBzZWVtcyB0byBjb250YWluIGphdmFzY3JpcHQgY29u
dGVudCwgdGhlIGZvcm1hY3Rpb24KKyAgICAgICAgICAgIGF0dHJpYnV0ZSBkb2Vzbid0IG1hcCB0
byBhbnl0aGluZyBvbiBhIGZvcm0gZWxlbWVudCwgYW5kIHdvbid0IGV2ZXIKKyAgICAgICAgICAg
IHJ1biBhcyBzY3JpcHQuCisKKyAgICAgICAgICAgIC0gSSBhZGRlZCBhIGJ1dHRvbiB3aXRoIGEg
ImZvcm1hY3Rpb24iIGF0dHJpYnV0ZSwgdG8gdmVyaWZ5IHRoYXQgaXQKKyAgICAgICAgICAgIGRv
ZXMgZ2V0IHN0cmlwcGVkLCBzaW5jZSB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlICJmb3JtYWN0aW9u
IiBjYW4KKyAgICAgICAgICAgIHJ1biBhcyBzY3JpcHQuCisKKyAgICAgICAgKiBlZGl0aW5nL3Bh
c3RlYm9hcmQvcGFzdGUtbm9zY3JpcHQtc3ZnLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgICAgIC0g
VGhlICJ4bGluazpocmVmIiBhdHRyaWJ1dGUgaXMgZnVsbHkgcmVtb3ZlZCBub3cuIFNlZSBhYm92
ZS4KKworICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3NjcmlwdC14aHRtbC1l
eHBlY3RlZC50eHQ6CisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLW5vc2NyaXB0
Lmh0bWw6CisgICAgICAgICAgICAtIFRoZSAiaHJlZiIsICJzb3VyY2UiLCBhbmQgImFjdGlvbiIg
YXR0cmlidXRlcyBhcmUgZnVsbHkgcmVtb3ZlZCBub3cuCisgICAgICAgICAgICBTZWUgYWJvdmUu
CisKKyAgICAgICAgICAgIC0gVGhlIDxzY3JpcHQ+IGVsZW1lbnQgaXMgZnVsbHkgcmVtb3ZlZCBu
b3cuIFNlZSBhYm92ZS4KKworICAgICAgICAgICAgLSBUaGUgImZvcm1hY3Rpb24iIGF0dHJpYnV0
ZSBvbiB0aGUgZm9ybSBjb250cm9sIGlzIG5vdCByZW1vdmVkLgorICAgICAgICAgICAgU2VlIGFi
b3ZlLgorCisgICAgICAgICAgICAtIEkgYWRkZWQgYSBidXR0b24gd2l0aCBhICJmb3JtYWN0aW9u
IiBhdHRyaWJ1dGUuIFNlZSBhYm92ZS4KKworCisgICAgICAgICogZWRpdGluZy9wYXN0ZWJvYXJk
L3Bhc3RlLXZpc2libGUtc2NyaXB0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgICAgIC0gVGhlIDxz
Y3JpcHQ+IGVsZW1lbnRzIGFyZSBmdWxseSByZW1vdmVkIG5vdy4gU2VlIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9wYXN0ZWJvYXJkL3Jlc291cmNlcy9wYXN0ZS1ub3NjcmlwdC1jb250ZW50
Lmh0bWw6CisgICAgICAgICAgICAtIFRoZSAiZm9ybWFjdGlvbiIgYXR0cmlidXRlIG9uIHRoZSBm
b3JtIGNvbnRyb2wgaXMgbm90IHJlbW92ZWQuCisgICAgICAgICAgICBTZWUgYWJvdmUuCisKKyAg
ICAgICAgICAgIC0gSSBhZGRlZCBhIGJ1dHRvbiB3aXRoIGEgImZvcm1hY3Rpb24iIGF0dHJpYnV0
ZS4gU2VlIGFib3ZlLgorCiAyMDEzLTAzLTE5ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBJbmRleGVkREI6IGluZGV4LWR1cGxpY2F0ZS1r
ZXlwYXRocyB0ZXN0IGlzIGZsYWt5IHVuZGVyIGNvbnRlbnRfc2hlbGwKSW5kZXg6IExheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3NjcmlwdC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLW5vc2NyaXB0LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTQ2MjMzKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0
ZWJvYXJkL3Bhc3RlLW5vc2NyaXB0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMiwx
OCArMiwxOCBAQCBUaGlzIHRlc3QgY29waWVzIGFsbCB0aGUgZWxlbWVudHMgY29udGFpCiBIZWxs
byAKIENOTiBIZWxsbyAKIFRoaXMgaXMgYSBmb3JtCi0KK1N1Ym1pdC4KIEhlbGxvwqAKIENOTsKg
SGVsbG/CoAogVGhpcyBpcyBhIGZvcm0KLQorU3VibWl0LgogPGJ1dHRvbiBpZD0iYnV0dG9uMSIg
b25jbGljaz0ic2F5SGVsbG8oKSIgb25kYmxjbGljaz0ic2F5SGVsbG8oKSIgc3R5bGU9IndpZHRo
OiAxMDBweDsiPkhlbGxvPC9idXR0b24+CiA8YnV0dG9uIGlkPSJidXR0b24xIiBzdHlsZT0id2lk
dGg6IDEwMHB4OyI+SGVsbG88L2J1dHRvbj4KIDxhIGlkPSJhbmNob3IxIiBocmVmPSJodHRwOi8v
d3d3LmNubi5jb20vIj5DTk48L2E+CiA8YSBpZD0iYW5jaG9yMSIgaHJlZj0iaHR0cDovL3d3dy5j
bm4uY29tLyI+Q05OPC9hPgogPGEgaWQ9ImFuY2hvcjIiIGhyZWY9ImphdmFzY3JpcHQ6c2F5SGVs
bG8oKSI+SGVsbG88L2E+Ci08YSBpZD0iYW5jaG9yMiIgaHJlZj0iIj5IZWxsbzwvYT4KKzxhIGlk
PSJhbmNob3IyIj5IZWxsbzwvYT4KIDxpZnJhbWUgaWQ9ImlmcmFtZTEiIHNyYz0iamF2YXNjcmlw
dDp2YXIgeCA9IDE7IiBzdHlsZT0id2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3Jv
dW5kLWNvbG9yOiNjZWU7Ij48L2lmcmFtZT4KLTxpZnJhbWUgaWQ9ImlmcmFtZTEiIHNyYz0iIiBz
dHlsZT0id2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Io
MjA0LCAyMzgsIDIzOCk7Ij48L2lmcmFtZT4KLTxmb3JtIGlkPSJmb3JtMSIgYWN0aW9uPSJqYXZh
c2NyaXB0OnNheUhlbGxvKCkiIGZvcm1hY3Rpb249ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSIgc3R5
bGU9IndpZHRoOiAyMDBweDsgaGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZC1jb2xvcjojY2VlOyI+
VGhpcyBpcyBhIGZvcm08YnI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hYmUucG5nIj48L2Zvcm0+
Ci08Zm9ybSBpZD0iZm9ybTEiIGFjdGlvbj0iIiBmb3JtYWN0aW9uPSIiIHN0eWxlPSJ3aWR0aDog
MjAwcHg7IGhlaWdodDogMTUwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIzOCwgMjM4
KTsiPlRoaXMgaXMgYSBmb3JtPGJyPjxpbWcgc3JjPSIuLi9yZXNvdXJjZXMvYWJlLnBuZyI+PC9m
b3JtPgorPGlmcmFtZSBpZD0iaWZyYW1lMSIgc3R5bGU9IndpZHRoOiAyMDBweDsgaGVpZ2h0OiAx
MDBweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjM4LCAyMzgpOyI+PC9pZnJhbWU+Cis8
Zm9ybSBpZD0iZm9ybTEiIGFjdGlvbj0iamF2YXNjcmlwdDpzYXlIZWxsbygpIiBmb3JtYWN0aW9u
PSJqYXZhc2NyaXB0OnNheUhlbGxvKCkiIHN0eWxlPSJ3aWR0aDogMjAwcHg7IGhlaWdodDogMTUw
cHg7IGJhY2tncm91bmQtY29sb3I6I2NlZTsiPlRoaXMgaXMgYSBmb3JtPGJyPjxpbWcgc3JjPSIu
Li9yZXNvdXJjZXMvYWJlLnBuZyI+PGJ1dHRvbiBmb3JtYWN0aW9uPSJqYXZhc2NyaXB0OnNheUhl
bGxvKCkiPlN1Ym1pdC48L2J1dHRvbj48L2Zvcm0+Cis8Zm9ybSBpZD0iZm9ybTEiIGZvcm1hY3Rp
b249ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSIgc3R5bGU9IndpZHRoOiAyMDBweDsgaGVpZ2h0OiAx
NTBweDsgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIwNCwgMjM4LCAyMzgpOyI+VGhpcyBpcyBhIGZv
cm08YnI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hYmUucG5nIj48YnV0dG9uPlN1Ym1pdC48L2J1
dHRvbj48L2Zvcm0+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUt
bm9zY3JpcHQtc3ZnLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9zY3JpcHQtc3ZnLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MTQ2MjMzKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLW5vc2NyaXB0
LXN2Zy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiBUaGlzIHRl
c3QgY29waWVzIHRoZSBjb250ZW50IG9mIGFuIGlmcmFtZSBhbmQgcGFzdGVzIGl0IGluIGFuIGVk
aXRhYmxlIGFyZWEgYW5kIHZlcmlmaWVzIHRoYXQgbm8gc2NyaXB0LCBoYW5kbGVycyBvciBqYXZh
c2NyaXB0IHVybHMgYXJlIGNvcGllZC4KIEhlbGxvCiB3b3JsZAotPGRpdiBpZD0iZGl2MSI+SGVs
bG88L2Rpdj48c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxp
bms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSI1Y20iIGhlaWdodD0iM2Nt
IiB2aWV3Qm94PSIwIDAgNSAzIiB2ZXJzaW9uPSIxLjEiPjxhIHhsaW5rOmhyZWY9IiI+PGVsbGlw
c2UgY3g9IjIuNSIgY3k9IjEuNSIgcng9IjIiIHJ5PSIxIiBmaWxsPSJyZWQiPjwvZWxsaXBzZT48
L2E+PC9zdmc+PGRpdiBpZD0iZGl2MiI+d29ybGQ8L2Rpdj4KKzxkaXYgaWQ9ImRpdjEiPkhlbGxv
PC9kaXY+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5r
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iNWNtIiBoZWlnaHQ9IjNjbSIg
dmlld0JveD0iMCAwIDUgMyIgdmVyc2lvbj0iMS4xIj48YT48ZWxsaXBzZSBjeD0iMi41IiBjeT0i
MS41IiByeD0iMiIgcnk9IjEiIGZpbGw9InJlZCI+PC9lbGxpcHNlPjwvYT48L3N2Zz48ZGl2IGlk
PSJkaXYyIj53b3JsZDwvZGl2PgogCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9h
cmQvcGFzdGUtbm9zY3JpcHQteGh0bWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS1ub3NjcmlwdC14aHRtbC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDE0NjIzMykKKysrIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9w
YXN0ZS1ub3NjcmlwdC14aHRtbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcg
KzQ1LDEwIEBAIENvcGllZCBjb250ZW50OgogfCAgIGZvcm1hY3Rpb249ImphdmFzY3JpcHQ6c2F5
SGVsbG8oKSIKIHwgICBpZD0iZm9ybTEiCiB8ICAgc3R5bGU9IndpZHRoOiAyMDBweDsgaGVpZ2h0
OiAxNTBweDsgYmFja2dyb3VuZC1jb2xvcjojY2VlOyIKLXwgICAiVGhpcyBpcyBhIGZvcm08I3Nl
bGVjdGlvbi1mb2N1cz4iCit8ICAgIlRoaXMgaXMgYSBmb3JtLiAiCit8ICAgPGJ1dHRvbj4KK3wg
ICAgIGZvcm1hY3Rpb249ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSIKK3wgICAgICJTdWJtaXQuPCNz
ZWxlY3Rpb24tZm9jdXM+IgogfCAiCiAKICIKQEAgLTY0LDIxICs2NywxOSBAQCBQYXN0ZWQgY29u
dGVudDoKIHwgICBpZD0iYW5jaG9yMSIKIHwgICAiQ05OIgogfCA8YT4KLXwgICBocmVmPSIiCiB8
ICAgaWQ9ImFuY2hvcjIiCiB8ICAgIkhlbGxvIgotfCA8c2NyaXB0PgotfCA8c2NyaXB0PgogfCA8
aWZyYW1lPgogfCAgIGlkPSJpZnJhbWUxIgotfCAgIHNyYz0iIgogfCAgIHN0eWxlPSJ3aWR0aDog
MjAwcHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQsIDIzOCwgMjM4
KTsiCiB8IDxmb3JtPgotfCAgIGFjdGlvbj0iIgotfCAgIGZvcm1hY3Rpb249IiIKK3wgICBmb3Jt
YWN0aW9uPSJqYXZhc2NyaXB0OnNheUhlbGxvKCkiCiB8ICAgaWQ9ImZvcm0xIgogfCAgIHN0eWxl
PSJ3aWR0aDogMjAwcHg7IGhlaWdodDogMTUwcHg7IGJhY2tncm91bmQtY29sb3I6IHJnYigyMDQs
IDIzOCwgMjM4KTsiCi18ICAgIlRoaXMgaXMgYSBmb3JtPCNzZWxlY3Rpb24tY2FyZXQ+IgorfCAg
ICJUaGlzIGlzIGEgZm9ybS4iCit8ICAgIsKgIgorfCAgIDxidXR0b24+Cit8ICAgICAiU3VibWl0
Ljwjc2VsZWN0aW9uLWNhcmV0PiIKIAogRlJBTUUgMDoKIHwgPGhlYWQ+CkluZGV4OiBMYXlvdXRU
ZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9zY3JpcHQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtbm9zY3JpcHQuaHRtbAkocmV2
aXNpb24gMTQ2MjMzKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Bhc3RlLW5v
c2NyaXB0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTE2LDcgKzE2LDcgQEAgaW4gYW4gZWRpdGFi
bGUgYXJlYSBhbmQgdmVyaWZpZXMgdGhhdCBubwogPGEgaWQ9ImFuY2hvcjEiIGhyZWY9Imh0dHA6
Ly93d3cuY25uLmNvbS8iPkNOTjwvYT4KIDxhIGlkPSJhbmNob3IyIiBocmVmPSJqYXZhc2NyaXB0
OnNheUhlbGxvKCkiPkhlbGxvPC9hPgogPGlmcmFtZSBpZD0iaWZyYW1lMSIgc3JjPSJqYXZhc2Ny
aXB0OnZhciB4ID0gMTsiIHN0eWxlPSJ3aWR0aDogMjAwcHg7IGhlaWdodDogMTAwcHg7IGJhY2tn
cm91bmQtY29sb3I6I2NlZTsiPjwvaWZyYW1lPgotPGZvcm0gaWQ9ImZvcm0xIiBhY3Rpb249Imph
dmFzY3JpcHQ6c2F5SGVsbG8oKSIgZm9ybWFjdGlvbj0iamF2YXNjcmlwdDpzYXlIZWxsbygpIiBz
dHlsZT0id2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDE1MHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiNjZWU7
Ij5UaGlzIGlzIGEgZm9ybTxicj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL2FiZS5wbmciPjwvaW1n
PjwvZm9ybT4KKzxmb3JtIGlkPSJmb3JtMSIgYWN0aW9uPSJqYXZhc2NyaXB0OnNheUhlbGxvKCki
IGZvcm1hY3Rpb249ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSIgc3R5bGU9IndpZHRoOiAyMDBweDsg
aGVpZ2h0OiAxNTBweDsgYmFja2dyb3VuZC1jb2xvcjojY2VlOyI+VGhpcyBpcyBhIGZvcm08YnI+
PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9hYmUucG5nIj48L2ltZz48YnV0dG9uIGZvcm1hY3Rpb249
ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSI+U3VibWl0LjwvYnV0dG9uPjwvZm9ybT4KIDwvZGl2Pgog
PGRpdiBpZD0icGFzdGVoZXJlIiBjb250ZW50ZWRpdGFibGU9InRydWUiPgogPC9kaXY+CkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcGFzdGUtdmlzaWJsZS1zY3JpcHQtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9w
YXN0ZS12aXNpYmxlLXNjcmlwdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE0NjIzMykKKysrIExh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9wYXN0ZS12aXNpYmxlLXNjcmlwdC1leHBlY3Rl
ZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsNCArMyw0IEBAIGZ1bmN0aW9uIHNheUhlbGxvKCkg
eyBhbGVydCgiSGVsbG8iKTsgfQogV29ybGQKIEhlbGxvCiBXb3JsZAotPGRpdiBpZD0icGFzdGVo
ZXJlIiBjb250ZW50ZWRpdGFibGU9InRydWUiPkhlbGxvPHNjcmlwdD48L3NjcmlwdD48c2NyaXB0
Pjwvc2NyaXB0PjxkaXYgaWQ9InRlc3QyIj5Xb3JsZDwvZGl2PjwvZGl2PgorPGRpdiBpZD0icGFz
dGVoZXJlIiBjb250ZW50ZWRpdGFibGU9InRydWUiPkhlbGxvPGRpdiBpZD0idGVzdDIiPldvcmxk
PC9kaXY+PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3Vy
Y2VzL3Bhc3RlLW5vc2NyaXB0LWNvbnRlbnQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL3Bhc3RlLW5vc2NyaXB0LWNvbnRlbnQuaHRt
bAkocmV2aXNpb24gMTQ2MjMzKQorKysgTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Jl
c291cmNlcy9wYXN0ZS1ub3NjcmlwdC1jb250ZW50Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEx
LDUgKzExLDUgQEAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQogPHNjcmlwdCBzdHlsZT0iZGlzcGxh
eTogYmxvY2s7IHBvc2l0aW9uOiBmaXhlZDsgdG9wOiA0MDAwcHgiPmFsZXJ0KCdoZWxsbycpOzwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9Ii4uL2VkaXRpbmcuanMiIHN0eWxlPSJkaXNwbGF5OiBibG9j
azsgcG9zaXRpb246IGZpeGVkOyB0b3A6IDQwMDBweCI+PC9zY3JpcHQ+CiA8aWZyYW1lIGlkPSJp
ZnJhbWUxIiBzcmM9ImphdmFzY3JpcHQ6YWxlcnQoJ2hlbGxvJykiIHN0eWxlPSJ3aWR0aDogMjAw
cHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6I2NlZTsiPjwvaWZyYW1lPgotPGZv
cm0gaWQ9ImZvcm0xIiBhY3Rpb249ImphdmFzY3JpcHQ6c2F5SGVsbG8oKSIgZm9ybWFjdGlvbj0i
amF2YXNjcmlwdDpzYXlIZWxsbygpIiBzdHlsZT0id2lkdGg6IDIwMHB4OyBoZWlnaHQ6IDE1MHB4
OyBiYWNrZ3JvdW5kLWNvbG9yOiNjZWU7Ij5UaGlzIGlzIGEgZm9ybTwvZm9ybT4KKzxmb3JtIGlk
PSJmb3JtMSIgYWN0aW9uPSJqYXZhc2NyaXB0OnNheUhlbGxvKCkiIGZvcm1hY3Rpb249ImphdmFz
Y3JpcHQ6c2F5SGVsbG8oKSIgc3R5bGU9IndpZHRoOiAyMDBweDsgaGVpZ2h0OiAxNTBweDsgYmFj
a2dyb3VuZC1jb2xvcjojY2VlOyI+VGhpcyBpcyBhIGZvcm0uIDxidXR0b24gZm9ybWFjdGlvbj0i
amF2YXNjcmlwdDpzYXlIZWxsbygpIj5TdWJtaXQuPC9idXR0b24+PC9mb3JtPgogPC9ib2R5Pgo=
</data>
<flag name="review"
          id="215558"
          type_id="1"
          status="+"
          setter="enrica"
    />
    <flag name="commit-queue"
          id="215579"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
      

    </bug>

</bugzilla>