<?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>190308</bug_id>
          
          <creation_ts>2018-10-05 01:23:47 -0700</creation_ts>
          <short_desc>Rename MarkupAccumulator::appendStartTag, appendElement, etc... for clarity</short_desc>
          <delta_ts>2018-10-12 14:30:27 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1466641</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-05 01:23:47 -0700</bug_when>
    <thetext>Rename a bunch of member functions to reflect what they really do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466835</commentid>
    <comment_count>1</comment_count>
      <attachid>351713</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-05 20:53:32 -0700</bug_when>
    <thetext>Created attachment 351713
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1466985</commentid>
    <comment_count>2</comment_count>
      <attachid>351713</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-10-07 21:02:23 -0700</bug_when>
    <thetext>Comment on attachment 351713
Cleanup

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

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:99
&gt; +    static const HTMLQualifiedName* tags[] = { &amp;areaTag.get(), &amp;baseTag.get(), &amp;basefontTag.get(), &amp;bgsoundTag.get(),
&gt; +        &amp;brTag.get(), &amp;colTag.get(), &amp;embedTag.get(), &amp;frameTag.get(), &amp;hrTag.get(), &amp;imgTag.get(), &amp;inputTag.get(),
&gt; +        &amp;keygenTag.get(), &amp;linkTag.get(), &amp;metaTag.get(), &amp;paramTag.get(), &amp;sourceTag.get(), &amp;trackTag.get(), &amp;wbrTag.get() };

Just moved code, but:

1) This is missing a const. Should be &quot;const HTMLQualifiedName* const tags[]&quot;.

2) This could just be an array of local names and we could use hasLocalName instead; would be *slightly* more efficient since we would have to follow one fewer pointer each time through the loop.

    static const AtomicString* const localNames[] = { &amp;areaTag.get().localName(), ...

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:118
&gt; +    if (syntax != SerializationSyntax::XML &amp;&amp; element.document().isHTMLDocument())
&gt; +        return false;

Just moved code, but:

Why does the document matter at all here? Is there actually a case where serialization syntax is HTML and the document is not an HTML document? And in that case *do* we really need to use self-closing syntax?

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:242
&gt; +    result.append(&apos;&lt;&apos;);
&gt; +    result.append(&apos;/&apos;);

Just moved code, but:

Is this more efficient than appendLiteral with a two character literal?

&gt; Source/WebCore/editing/MarkupAccumulator.h:78
&gt; +    void appendNodeStart(const Node&amp;, Namespaces* = nullptr);
&gt; +    void appendNodeEnd(const Node&amp; node)

Not thrilled with the names here. This doesn’t append a &quot;node start&quot; and then later append a &quot;node end&quot;, it starts the process of appending the markup for a node. So logical name would be more like &quot;startAppendingNode&quot; and &quot;finishAppendingNode&quot;.

&gt; Source/WebCore/editing/MarkupAccumulator.h:85
&gt; +    virtual void appendStartTag(StringBuilder&amp;, const Element&amp;, Namespaces*);
&gt; +    virtual void appendEndTag(StringBuilder&amp;, const Element&amp;);

I would call these &quot;append tag start&quot; and &quot;append tag end&quot;. Naming them &quot;append start tag&quot; makes it sound like there are things, called &quot;start tags&quot; and &quot;end tags&quot;, but there are not.

&gt; Source/WebCore/editing/markup.cpp:715
&gt; -        appendTextSubstring(textChild, start, msoListDefinitionsEnd - start + 3);
&gt; +        appendString(textChild.data().substring(start, msoListDefinitionsEnd - start + 3));

This removes an optimization to avoid an extra copy of the substring. Is there some way to preserve that optimization? Maybe involving StringView? Or is it not an important optimization?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467666</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-10 00:19:16 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #2)
&gt; Comment on attachment 351713 [details]
&gt; Cleanup
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351713&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:99
&gt; &gt; +    static const HTMLQualifiedName* tags[] = { &amp;areaTag.get(), &amp;baseTag.get(), &amp;basefontTag.get(), &amp;bgsoundTag.get(),
&gt; &gt; +        &amp;brTag.get(), &amp;colTag.get(), &amp;embedTag.get(), &amp;frameTag.get(), &amp;hrTag.get(), &amp;imgTag.get(), &amp;inputTag.get(),
&gt; &gt; +        &amp;keygenTag.get(), &amp;linkTag.get(), &amp;metaTag.get(), &amp;paramTag.get(), &amp;sourceTag.get(), &amp;trackTag.get(), &amp;wbrTag.get() };
&gt; 
&gt; Just moved code, but:
&gt; 
&gt; 1) This is missing a const. Should be &quot;const HTMLQualifiedName* const
&gt; tags[]&quot;.
&gt; 
&gt; 2) This could just be an array of local names and we could use hasLocalName
&gt; instead; would be *slightly* more efficient since we would have to follow
&gt; one fewer pointer each time through the loop.
&gt;
&gt;     static const AtomicString* const localNames[] = {
&gt; &amp;areaTag.get().localName(), ...

Good point. Fixed.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:118
&gt; &gt; +    if (syntax != SerializationSyntax::XML &amp;&amp; element.document().isHTMLDocument())
&gt; &gt; +        return false;
&gt; 
&gt; Just moved code, but:
&gt; 
&gt; Why does the document matter at all here? Is there actually a case where
&gt; serialization syntax is HTML and the document is not an HTML document? And
&gt; in that case *do* we really need to use self-closing syntax?

I think so. Element::innerHTML, for example, always trigger HTML serialization but could be called on a MathML element or on an HTML element inside a XML document for example.

We should probably consult https://w3c.github.io/DOM-Parsing/ and other relevant specs and what we&apos;re doing here makes sense, or update the spec as needed. This is a pretty subtly weird behavior we have.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:242
&gt; &gt; +    result.append(&apos;&lt;&apos;);
&gt; &gt; +    result.append(&apos;/&apos;);
&gt; 
&gt; Just moved code, but:
&gt; 
&gt; Is this more efficient than appendLiteral with a two character literal?

template&lt;unsigned characterCount&gt;
ALWAYS_INLINE void appendLiteral(const char (&amp;characters)[characterCount]) { append(characters, characterCount - 1); }

ends up invoking append function whereas append has a fast path so I&apos;d imagine calling two append is faster here.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.h:78
&gt; &gt; +    void appendNodeStart(const Node&amp;, Namespaces* = nullptr);
&gt; &gt; +    void appendNodeEnd(const Node&amp; node)
&gt; 
&gt; Not thrilled with the names here. This doesn’t append a &quot;node start&quot; and
&gt; then later append a &quot;node end&quot;, it starts the process of appending the
&gt; markup for a node. So logical name would be more like &quot;startAppendingNode&quot;
&gt; and &quot;finishAppendingNode&quot;.

Oh, those names sound better. Yeah, I was bothered by it too.
I&apos;d use startAppendingNode and endAppendingNode to match startTag / endTag terminology.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.h:85
&gt; &gt; +    virtual void appendStartTag(StringBuilder&amp;, const Element&amp;, Namespaces*);
&gt; &gt; +    virtual void appendEndTag(StringBuilder&amp;, const Element&amp;);
&gt; 
&gt; I would call these &quot;append tag start&quot; and &quot;append tag end&quot;. Naming them
&gt; &quot;append start tag&quot; makes it sound like there are things, called &quot;start tags&quot;
&gt; and &quot;end tags&quot;, but there are not.

Start tags and end tags are totally things in the spec:
https://html.spec.whatwg.org/multipage/syntax.html#start-tags
https://html.spec.whatwg.org/multipage/syntax.html#end-tags

&gt; &gt; Source/WebCore/editing/markup.cpp:715
&gt; &gt; -        appendTextSubstring(textChild, start, msoListDefinitionsEnd - start + 3);
&gt; &gt; +        appendString(textChild.data().substring(start, msoListDefinitionsEnd - start + 3));
&gt; 
&gt; This removes an optimization to avoid an extra copy of the substring. Is
&gt; there some way to preserve that optimization? Maybe involving StringView? Or
&gt; is it not an important optimization?

Oh, that&apos;s a good catch. Will add appendString which takes StringView and use it here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467668</commentid>
    <comment_count>4</comment_count>
      <attachid>351949</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-10 00:32:16 -0700</bug_when>
    <thetext>Created attachment 351949
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467669</commentid>
    <comment_count>5</comment_count>
      <attachid>351950</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-10 00:37:21 -0700</bug_when>
    <thetext>Created attachment 351950
Updated change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467884</commentid>
    <comment_count>6</comment_count>
      <attachid>351950</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-10-10 16:44:45 -0700</bug_when>
    <thetext>Comment on attachment 351950
Updated change log

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

&gt; Source/WebCore/editing/MarkupAccumulator.cpp:118
&gt; +    auto&amp; element = downcast&lt;HTMLElement&gt;(node);

I think we should have an elementName local variable instead of an element local variable to hoist it out of the loop.

&gt; Source/WebCore/editing/MarkupAccumulator.h:76
&gt; +    void appendStringView(const StringView&amp;);

Normally we use StringView instead of const StringView&amp; since it is more efficient and there is no worry about reference count churn.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467920</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-10 18:51:32 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #6)
&gt; Comment on attachment 351950 [details]
&gt; Updated change log
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=351950&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/MarkupAccumulator.cpp:118
&gt; &gt; +    auto&amp; element = downcast&lt;HTMLElement&gt;(node);
&gt; 
&gt; I think we should have an elementName local variable instead of an element
&gt; local variable to hoist it out of the loop.

Oh, good point. Will fix.

&gt; &gt; Source/WebCore/editing/MarkupAccumulator.h:76
&gt; &gt; +    void appendStringView(const StringView&amp;);
&gt; 
&gt; Normally we use StringView instead of const StringView&amp; since it is more
&gt; efficient and there is no worry about reference count churn.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467929</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-10 19:27:20 -0700</bug_when>
    <thetext>Committed r237025: &lt;https://trac.webkit.org/changeset/237025&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1467930</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-10 19:28:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/45182101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468521</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2018-10-12 12:13:02 -0700</bug_when>
    <thetext>The final version of this that landed still has one missing const for the localNames array.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468539</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-12 13:03:53 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #10)
&gt; The final version of this that landed still has one missing const for the
&gt; localNames array.

Oh oops. When I changed it to AtomicStringImpl, I somehow lost const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468586</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-10-12 14:30:27 -0700</bug_when>
    <thetext>Fixed it in https://trac.webkit.org/changeset/237077.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351713</attachid>
            <date>2018-10-05 20:53:32 -0700</date>
            <delta_ts>2018-10-10 00:32:14 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-190308-20181005205331.patch</filename>
            <type>text/plain</type>
            <size>19257</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjg2OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTEwLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kU3RhcnRUYWcsIGFwcGVuZEVsZW1lbnQsIGV0Yy4uLiBmb3IgY2xhcml0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMzA4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVuYW1lZCBh
cHBlbmRTdGFydFRhZyBhbmQgYXBwZW5kRW5kVGFnIHRvIGFwcGVuZE5vZGVTdGFydCBhbmQgYXBw
ZW5kTm9kZUVuZCBzaW5jZSBzZXJpYWxpemUgYW55IG5vZGUsCisgICAgICAgIG5vdCBqdXN0IGVs
ZW1lbnRzIHdoaWNoIHByb2R1Y2Ugc3RhcnQgYW5kIGVuZCB0YWdzLgorCisgICAgICAgIFJlbmFt
ZWQgYXBwZW5kRWxlbWVudCBhbmQgYXBwZW5kRW5kRWxlbWVudCB0byBhcHBlbmRTdGFydFRhZyBh
bmQgYXBwZW5kRW5kVGFnIHNpbmNlIHRoYXQncyB3aGF0IHRoZXkgZG8uCisKKyAgICAgICAgKiBl
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRD
YW5ub3RIYXZlRW5kVGFnKTogTWFkZSB0aGlzIGEgc3RhdGljIGxvY2FsIGZ1bmN0aW9uLgorICAg
ICAgICAoV2ViQ29yZTo6c2hvdWxkU2VsZkNsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZVN0YXJ0KTogUmVuYW1l
ZCBmcm9tIGFwcGVuZFN0YXJ0VGFnLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbmRFbGVtZW50IGFuZCBtZXJn
ZWQgYXBwZW5kRW5kTWFya3VwIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kVGV4dFN1YnN0cmluZyk6IERlbGV0ZWQuIFRoaXMgd2FzIG9ubHkgdXNlZCBi
eSBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRTdGFydFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZSk6IFJl
bmFtZWQgZnJvbSBhcHBlbmRTdGFydE1hcmt1cC4gTm8gbG9uZ2VyIHNlcmlhbGl6ZXMKKyAgICAg
ICAgYW4gZWxlbWVudC4gU3R5bGVkTWFya3VwQWNjdW11bGF0b3IgaGFkIGEgY2hlY2sgYmVmb3Jl
IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBhbHJlYWR5IHNvIHRoaXMgY2xhcmlmaWVzCisgICAgICAg
IHRoZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKTogRGVsZXRlZC4gTWVyZ2VkIGludG8g
YXBwZW5kRW5kVGFnLgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlRW5kKTogUmVuYW1l
ZCBmcm9tIGFwcGVuZEVuZFRhZy4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyk6
IFJlbmFtZWQgZnJvbSBhcHBlbmRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbmRFbGVt
ZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNl
Tm9kZXNGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3QpOiBVc2UgU3RyaW5nOjpzdWJz
dHJpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZgorICAgICAgICBnb2luZyB0aHJvdWdoIGFwcGVuZFRl
eHRTdWJzdHJpbmcgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKTogUmVuYW1lZCBmcm9tIGFwcGVu
ZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOiBSZW5hbWVkIGZyb20gYXBwZW5kRW5kRWxl
bWVudC4KKwogMjAxOC0xMC0wNCAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAog
ICAgICAgICBBZGQgc3VwcG9ydCBmb3IgcmVwb3J0aW5nICJkaXNwbGF5IGNvbXBvc2l0ZWQgdmlk
ZW8gZnJhbWVzIiB0aHJvdWdoIHRoZSBWaWRlb1BsYXliYWNrUXVhbGl0eSBvYmplY3QuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAkocmV2aXNp
b24gMjM2ODY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDYgKzg1LDQ0IEBAIHN0YXRpYyBjb25zdCB1aW50OF90
IGVudGl0eU1hcFttYXhpbXVtRXMKICAgICBFbnRpdHlTdWJzdGl0dXRpb25OYnNwSW5kZXggLy8g
bm9CcmVha1NwYWNlLgogfTsKIAorc3RhdGljIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWco
Y29uc3QgTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnLyNzZXJpYWxpc2luZy1odG1sLWZyYWdtZW50czoKKyAgICAvLyBJZiBjdXJyZW50IG5v
ZGUgaXMgYW4gYXJlYSwgYmFzZSwgYmFzZWZvbnQsIGJnc291bmQsIGJyLCBjb2wsIGVtYmVkLCBm
cmFtZSwgaHIsIGltZywKKyAgICAvLyBpbnB1dCwga2V5Z2VuLCBsaW5rLCBtZXRhLCBwYXJhbSwg
c291cmNlLCB0cmFjayBvciB3YnIgZWxlbWVudCwgdGhlbiBjb250aW51ZSBvbiB0bworICAgIC8v
IHRoZSBuZXh0IGNoaWxkIG5vZGUgYXQgdGhpcyBwb2ludC4KKyAgICBzdGF0aWMgY29uc3QgSFRN
TFF1YWxpZmllZE5hbWUqIHRhZ3NbXSA9IHsgJmFyZWFUYWcuZ2V0KCksICZiYXNlVGFnLmdldCgp
LCAmYmFzZWZvbnRUYWcuZ2V0KCksICZiZ3NvdW5kVGFnLmdldCgpLAorICAgICAgICAmYnJUYWcu
Z2V0KCksICZjb2xUYWcuZ2V0KCksICZlbWJlZFRhZy5nZXQoKSwgJmZyYW1lVGFnLmdldCgpLCAm
aHJUYWcuZ2V0KCksICZpbWdUYWcuZ2V0KCksICZpbnB1dFRhZy5nZXQoKSwKKyAgICAgICAgJmtl
eWdlblRhZy5nZXQoKSwgJmxpbmtUYWcuZ2V0KCksICZtZXRhVGFnLmdldCgpLCAmcGFyYW1UYWcu
Z2V0KCksICZzb3VyY2VUYWcuZ2V0KCksICZ0cmFja1RhZy5nZXQoKSwgJndiclRhZy5nZXQoKSB9
OworCisgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKKyAg
ICBmb3IgKGF1dG8qIHRhZyA6IHRhZ3MpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFt
ZSgqdGFnKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBm
YWxzZTsKK30KKworLy8gUnVsZXMgb2Ygc2VsZi1jbG9zdXJlCisvLyAxLiBObyBlbGVtZW50cyBp
biBIVE1MIGRvY3VtZW50cyB1c2UgdGhlIHNlbGYtY2xvc2luZyBzeW50YXguCisvLyAyLiBFbGVt
ZW50cyB3LyBjaGlsZHJlbiBuZXZlciBzZWxmLWNsb3NlIGJlY2F1c2UgdGhleSB1c2UgYSBzZXBh
cmF0ZSBlbmQgdGFnLgorLy8gMy4gSFRNTCBlbGVtZW50cyB3aGljaCBkbyBub3QgaGF2ZSBhICJm
b3JiaWRkZW4iIGVuZCB0YWcgd2lsbCBjbG9zZSB3aXRoIGEgc2VwYXJhdGUgZW5kIHRhZy4KKy8v
IDQuIE90aGVyIGVsZW1lbnRzIHNlbGYtY2xvc2UuCitzdGF0aWMgYm9vbCBzaG91bGRTZWxmQ2xv
c2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgU2VyaWFsaXphdGlvblN5bnRheCBzeW50YXgpCit7
CisgICAgaWYgKHN5bnRheCAhPSBTZXJpYWxpemF0aW9uU3ludGF4OjpYTUwgJiYgZWxlbWVudC5k
b2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoZWxlbWVudC5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGVs
ZW1lbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5k
Q2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzSW50ZXJuYWwoU3RyaW5nQnVpbGRlciYgcmVzdWx0
LCBjb25zdCBTdHJpbmcmIHNvdXJjZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IEVudGl0eU1hc2sgZW50aXR5TWFzaykKIHsKQEAgLTE1MCw3ICsxODgsNyBAQCB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpCiAgICAgfQogCiAgICAgaWYgKHJvb3QgPT0g
U2VyaWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSkKLSAgICAgICAgYXBwZW5kU3Rh
cnRUYWcodGFyZ2V0Tm9kZSwgJm5hbWVzcGFjZUhhc2gpOworICAgICAgICBhcHBlbmROb2RlU3Rh
cnQodGFyZ2V0Tm9kZSwgJm5hbWVzcGFjZUhhc2gpOwogCiAgICAgaWYgKHRhcmdldE5vZGUuZG9j
dW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKHRhcmdl
dE5vZGUpKQogICAgICAgICByZXR1cm47CkBAIC0xNjAsNyArMTk4LDcgQEAgdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhO
YW1lc3BhY2VzKCpjdXJyZW50LCBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2Rl
LCAmbmFtZXNwYWNlSGFzaCwgdGFnTmFtZXNUb1NraXApOwogCiAgICAgaWYgKHJvb3QgPT0gU2Vy
aWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSkKLSAgICAgICAgYXBwZW5kRW5kVGFn
KHRhcmdldE5vZGUpOworICAgICAgICBhcHBlbmROb2RlRW5kKHRhcmdldE5vZGUpOwogfQogCiBT
dHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKQEAgLTE4NSwyMiArMjIz
LDI1IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhjb24KICAgICBtX21h
cmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
U3RhcnRUYWcoY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVTdGFydChjb25zdCBOb2RlJiBub2RlLCBOYW1l
c3BhY2VzKiBuYW1lc3BhY2VzKQogewotICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1fbWFya3VwLCBu
b2RlLCBuYW1lc3BhY2VzKTsKKyAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCisgICAgICAgIGFw
cGVuZFN0YXJ0VGFnKG1fbWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgbmFtZXNwYWNl
cyk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmROb25FbGVtZW50Tm9kZShtX21hcmt1cCwgbm9k
ZSwgbmFtZXNwYWNlcyk7CisKICAgICBpZiAobV9ub2RlcykKICAgICAgICAgbV9ub2Rlcy0+YXBw
ZW5kKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50KQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxk
ZXImIHJlc3VsdCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBhcHBlbmRFbmRNYXJr
dXAob3V0LCBlbGVtZW50KTsKLX0KLQotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dFN1YnN0cmluZyhjb25zdCBUZXh0JiB0ZXh0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVu
Z3RoKQotewotICAgIEFTU0VSVChzdGFydCArIGxlbmd0aCA8PSB0ZXh0LmRhdGEoKS5sZW5ndGgo
KSk7Ci0gICAgYXBwZW5kQ2hhcmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzKG1fbWFya3VwLCB0ZXh0
LmRhdGEoKSwgc3RhcnQsIGxlbmd0aCwgZW50aXR5TWFza0ZvclRleHQodGV4dCkpOworICAgIGlm
IChzaG91bGRTZWxmQ2xvc2UoZWxlbWVudCwgbV9zZXJpYWxpemF0aW9uU3ludGF4KSB8fCAoIWVs
ZW1lbnQuaGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGVsZW1lbnQp
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHJlc3VsdC5hcHBlbmQoJzwnKTsKKyAgICByZXN1bHQu
YXBwZW5kKCcvJyk7CisgICAgcmVzdWx0LmFwcGVuZChlbGVtZW50Lm5vZGVOYW1lUHJlc2Vydmlu
Z0Nhc2UoKSk7CisgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCiBzaXplX3QgTWFya3VwQWNj
dW11bGF0b3I6OnRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzdHJpbmdzKQpAQCAt
NDEwLDcgKzQ1MSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFByb2Nlc3NpbmcK
ICAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAKLXZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
U3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBO
YW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGFwcGVuZE9wZW5UYWcocmVzdWx0LCBlbGVt
ZW50LCBuYW1lc3BhY2VzKTsKIApAQCAtNDQ0LDcgKzQ4NSw3IEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZE9wZW5UYWcoU3QKIAogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q2xvc2VUYWcoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQog
ewotICAgIGlmIChzaG91bGRTZWxmQ2xvc2UoZWxlbWVudCkpIHsKKyAgICBpZiAoc2hvdWxkU2Vs
ZkNsb3NlKGVsZW1lbnQsIG1fc2VyaWFsaXphdGlvblN5bnRheCkpIHsKICAgICAgICAgaWYgKGVs
ZW1lbnQuaXNIVE1MRWxlbWVudCgpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnICcpOyAv
LyBYSFRNTCAxLjAgPC0+IEhUTUwgY29tcGF0aWJpbGl0eS4KICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgnLycpOwpAQCAtNTMwLDcgKzU3MSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZENEQVRBU2VjdGkKICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgiXV0+Iik7CiB9CiAKLXZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3Vs
dCwgY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZE5vbkVsZW1lbnROb2RlKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAobmFt
ZXNwYWNlcykKICAgICAgICAgbmFtZXNwYWNlcy0+Y2hlY2tDb25zaXN0ZW5jeSgpOwpAQCAtNTU0
LDcgKzU5NSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0TWFya3UKICAg
ICAgICAgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKHJlc3VsdCwgZG93bmNhc3Q8UHJvY2Vz
c2luZ0luc3RydWN0aW9uPihub2RlKS50YXJnZXQoKSwgZG93bmNhc3Q8UHJvY2Vzc2luZ0luc3Ry
dWN0aW9uPihub2RlKS5kYXRhKCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkVM
RU1FTlRfTk9ERToKLSAgICAgICAgYXBwZW5kRWxlbWVudChyZXN1bHQsIGRvd25jYXN0PEVsZW1l
bnQ+KG5vZGUpLCBuYW1lc3BhY2VzKTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6Q0RBVEFfU0VDVElPTl9OT0RFOgogICAgICAg
ICBhcHBlbmRDREFUQVNlY3Rpb24ocmVzdWx0LCBkb3duY2FzdDxDREFUQVNlY3Rpb24+KG5vZGUp
LmRhdGEoKSk7CkBAIC01NjUsNTEgKzYwNiw0IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFN0YXJ0TWFya3UKICAgICB9CiB9CiAKLS8vIFJ1bGVzIG9mIHNlbGYtY2xvc3VyZQotLy8g
MS4gTm8gZWxlbWVudHMgaW4gSFRNTCBkb2N1bWVudHMgdXNlIHRoZSBzZWxmLWNsb3Npbmcgc3lu
dGF4LgotLy8gMi4gRWxlbWVudHMgdy8gY2hpbGRyZW4gbmV2ZXIgc2VsZi1jbG9zZSBiZWNhdXNl
IHRoZXkgdXNlIGEgc2VwYXJhdGUgZW5kIHRhZy4KLS8vIDMuIEhUTUwgZWxlbWVudHMgd2hpY2gg
ZG8gbm90IGhhdmUgYSAiZm9yYmlkZGVuIiBlbmQgdGFnIHdpbGwgY2xvc2Ugd2l0aCBhIHNlcGFy
YXRlIGVuZCB0YWcuCi0vLyA0LiBPdGhlciBlbGVtZW50cyBzZWxmLWNsb3NlLgotYm9vbCBNYXJr
dXBBY2N1bXVsYXRvcjo6c2hvdWxkU2VsZkNsb3NlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgaWYgKCFpblhNTEZyYWdtZW50U2VyaWFsaXphdGlvbigpICYmIGVsZW1lbnQuZG9jdW1l
bnQoKS5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVs
ZW1lbnQuaGFzQ2hpbGROb2RlcygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGVs
ZW1lbnQuaXNIVE1MRWxlbWVudCgpICYmICFlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhlbGVtZW50
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIE1h
cmt1cEFjY3VtdWxhdG9yOjplbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlJiBub2Rl
KQotewotICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+KG5vZGUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAvLyBGcm9tIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGlz
aW5nLWh0bWwtZnJhZ21lbnRzOgotICAgIC8vIElmIGN1cnJlbnQgbm9kZSBpcyBhbiBhcmVhLCBi
YXNlLCBiYXNlZm9udCwgYmdzb3VuZCwgYnIsIGNvbCwgZW1iZWQsIGZyYW1lLCBociwgaW1nLAot
ICAgIC8vIGlucHV0LCBrZXlnZW4sIGxpbmssIG1ldGEsIHBhcmFtLCBzb3VyY2UsIHRyYWNrIG9y
IHdiciBlbGVtZW50LCB0aGVuIGNvbnRpbnVlIG9uIHRvCi0gICAgLy8gdGhlIG5leHQgY2hpbGQg
bm9kZSBhdCB0aGlzIHBvaW50LgotICAgIHN0YXRpYyBjb25zdCBIVE1MUXVhbGlmaWVkTmFtZSog
dGFnc1tdID0geyAmYXJlYVRhZy5nZXQoKSwgJmJhc2VUYWcuZ2V0KCksICZiYXNlZm9udFRhZy5n
ZXQoKSwgJmJnc291bmRUYWcuZ2V0KCksCi0gICAgICAgICZiclRhZy5nZXQoKSwgJmNvbFRhZy5n
ZXQoKSwgJmVtYmVkVGFnLmdldCgpLCAmZnJhbWVUYWcuZ2V0KCksICZoclRhZy5nZXQoKSwgJmlt
Z1RhZy5nZXQoKSwgJmlucHV0VGFnLmdldCgpLAotICAgICAgICAma2V5Z2VuVGFnLmdldCgpLCAm
bGlua1RhZy5nZXQoKSwgJm1ldGFUYWcuZ2V0KCksICZwYXJhbVRhZy5nZXQoKSwgJnNvdXJjZVRh
Zy5nZXQoKSwgJnRyYWNrVGFnLmdldCgpLCAmd2JyVGFnLmdldCgpIH07Ci0gICAgYXV0byYgZWxl
bWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKLSAgICBmb3IgKGF1dG8qIHRhZyA6
IHRhZ3MpIHsKLSAgICAgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZSgqdGFnKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgTWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50
KSB8fCAoIWVsZW1lbnQuaGFzQ2hpbGROb2RlcygpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFn
KGVsZW1lbnQpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdWx0LmFwcGVuZCgnPCcpOwot
ICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKLSAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQubm9kZU5h
bWVQcmVzZXJ2aW5nQ2FzZSgpKTsKLSAgICByZXN1bHQuYXBwZW5kKCc+Jyk7Ci19Ci0KIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9u
IDIzNjg2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtNzMsMjUgKzczLDIzIEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGNv
bmNhdGVuYXRlTWFya3VwKFN0cmluZ0J1aWxkZXImKTsKIAogICAgIHZvaWQgYXBwZW5kU3RyaW5n
KGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKGNvbnN0IE5vZGUmIG5vZGUp
CisKKyAgICB2b2lkIGFwcGVuZE5vZGVTdGFydChjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyogPSBu
dWxscHRyKTsKKyAgICB2b2lkIGFwcGVuZE5vZGVFbmQoY29uc3QgTm9kZSYgbm9kZSkKICAgICB7
CiAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKLSAgICAgICAgICAgIGFwcGVuZEVuZEVs
ZW1lbnQobV9tYXJrdXAsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKKyAgICAgICAgICAgIGFw
cGVuZEVuZFRhZyhtX21hcmt1cCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSkpOwogICAgIH0KIAot
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBF
bGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0YXJ0VGFnKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRF
bmRUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5h
bWVzcGFjZXMqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgVGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxk
ZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopOwotCi0gICAgdm9pZCBhcHBlbmRTdGFy
dFRhZyhjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyogPSBudWxscHRyKTsKLQotICAgIHZvaWQgYXBw
ZW5kVGV4dFN1YnN0cmluZyhjb25zdCBUZXh0JiwgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxl
bmd0aCk7CiAKICAgICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVs
ZW1lbnQmLCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhTdHJpbmdCdWls
ZGVyJiwgY29uc3QgRWxlbWVudCYpOwogCi0gICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChTdHJp
bmdCdWlsZGVyJiwgY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE5v
bkVsZW1lbnROb2RlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyopOwog
ICAgIHZvaWQgYXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7
CiAKICAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBT
dHJpbmcmLCBib29sIGlzU2VyaWFsaXppbmdIVE1MKTsKQEAgLTEwNCw4ICsxMDIsNiBAQCBwcm90
ZWN0ZWQ6CiAKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVu
dCYpOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0
ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBFbGVtZW50
Jik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25zdCBOb2RlJik7CiAgICAg
RW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0JikgY29uc3Q7CiAKICAgICBW
ZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3Vw
LmNwcAkocmV2aXNpb24gMjM2ODY4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksMTQgKzI0OSwxNCBAQCBwcml2YXRlOgogCiAgICAg
Ym9vbCBzaG91bGRQcmVzZXJ2ZU1TT0xpc3RTdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYp
OwogCi0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxl
bWVudCYsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKLSAg
ICB2b2lkIGFwcGVuZEVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50
Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVyJiBvdXQs
IGNvbnN0IEVsZW1lbnQmLCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3Rz
Tm9kZSk7CisgICAgdm9pZCBhcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBF
bGVtZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmlu
Z0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOwogCiAgICAg
dm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgVGV4dCYpIG92ZXJyaWRl
OwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSBvdmVycmlkZQorICAgIHZvaWQgYXBwZW5kU3RhcnRU
YWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBOYW1lc3BhY2Vz
Kikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50LCBm
YWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAgICAgIGFwcGVuZFN0YXJ0VGFnKG91dCwg
ZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOwogICAgIH0KIAogICAgIE5vZGUq
IGZpcnN0Q2hpbGQoTm9kZSYgbm9kZSkKQEAgLTM0NywxMSArMzQ3LDExIEBAIHZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm8KIHsKICAgICBTdHJpbmdCdWlsZGVyIG1hcmt1
cDsKICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCi0gICAgICAgIGFwcGVuZEVsZW1lbnQobWFy
a3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgY29udmVydEJsb2Nrc1RvSW5saW5lcyAmJiBp
c0Jsb2NrKCZub2RlKSwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAgICAgICAgYXBwZW5kU3Rh
cnRUYWcobWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgY29udmVydEJsb2Nrc1RvSW5s
aW5lcyAmJiBpc0Jsb2NrKCZub2RlKSwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKICAgICBlbHNl
Ci0gICAgICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwgbnVsbHB0cik7CisgICAg
ICAgIGFwcGVuZE5vbkVsZW1lbnROb2RlKG1hcmt1cCwgbm9kZSwgbnVsbHB0cik7CiAgICAgbV9y
ZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQobWFya3VwLnRvU3RyaW5nKCkpOwotICAgIGFw
cGVuZEVuZFRhZyhub2RlKTsKKyAgICBhcHBlbmROb2RlRW5kKG5vZGUpOwogICAgIGlmIChtX25v
ZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQoJm5vZGUpOwogfQpAQCAtNDk1LDcgKzQ5NSw3
IEBAIGJvb2wgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZFByZXMKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQo
U3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBib29sIGFkZERpc3Bs
YXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCit2
b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVy
JiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFu
Z2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSkKIHsKICAgICBjb25zdCBi
b29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCk7
CiAgICAgY29uc3QgYm9vbCBpc1Nsb3RFbGVtZW50ID0gaXM8SFRNTFNsb3RFbGVtZW50PihlbGVt
ZW50KTsKQEAgLTU2MywxMiArNTYzLDEyIEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVsZW0KICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCi12b2lk
IFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZFRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7CiAgICAgaWYgKFVOTElLRUxZKGlzPEhUTUxTbG90RWxlbWVudD4oZWxlbWVudCkpKQog
ICAgICAgICBvdXQuYXBwZW5kKCI8L3NwYW4+Iik7CiAgICAgZWxzZQotICAgICAgICBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRW5kRWxlbWVudChvdXQsIGVsZW1lbnQpOworICAgICAgICBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKG91dCwgZWxlbWVudCk7CiB9CiAKIE5vZGUqIFN0
eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyhjb25zdCBQb3NpdGlvbiYgc3Rh
cnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCkBAIC02MDksNyArNjA5LDcgQEAgTm9kZSogU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogCiAgICAgICAgICsrZGVwdGg7CiAgICAgICAg
IGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAgYXBwZW5kU3RhcnRUYWcobm9kZSk7CisgICAg
ICAgICAgICBhcHBlbmROb2RlU3RhcnQobm9kZSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfTsKQEAgLTYyMSw3ICs2MjEsNyBAQCBOb2RlKiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6
dHJhdmVyc2VOCiAgICAgICAgICAgICAtLWRlcHRoOwogICAgICAgICBpZiAoc2hvdWxkRW1pdCkg
ewogICAgICAgICAgICAgaWYgKGNsb3NpbmcpCi0gICAgICAgICAgICAgICAgYXBwZW5kRW5kVGFn
KG5vZGUpOworICAgICAgICAgICAgICAgIGFwcGVuZE5vZGVFbmQobm9kZSk7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgd3JhcFdpdGhOb2RlKG5vZGUpOwogICAgICAgICB9CkBA
IC02ODksNyArNjg5LDcgQEAgYm9vbCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9k
ZQogICAgICAgICAgICAgbV9pbk1TT0xpc3QgPSBmYWxzZTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhcHBlbmRTdGFydFRhZyhjb21tZW50Tm9kZSk7
CisgICAgICAgIGFwcGVuZE5vZGVTdGFydChjb21tZW50Tm9kZSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICBpZiAoaXM8SFRNTFN0eWxlRWxlbWVudD4obm9kZSkpIHsKQEAgLTcx
Miw3ICs3MTIsNyBAQCBib29sIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgYXBwZW5kU3RyaW5nKCI8aGVhZD48
c3R5bGUgY2xhc3M9XCIiIFdlYktpdE1TT0xpc3RRdWlya3NTdHlsZSAiXCI+XG48IS0tXG4iKTsK
LSAgICAgICAgYXBwZW5kVGV4dFN1YnN0cmluZyh0ZXh0Q2hpbGQsIHN0YXJ0LCBtc29MaXN0RGVm
aW5pdGlvbnNFbmQgLSBzdGFydCArIDMpOworICAgICAgICBhcHBlbmRTdHJpbmcodGV4dENoaWxk
LmRhdGEoKS5zdWJzdHJpbmcoc3RhcnQsIG1zb0xpc3REZWZpbml0aW9uc0VuZCAtIHN0YXJ0ICsg
MykpOwogICAgICAgICBhcHBlbmRTdHJpbmcoIlxuLS0+XG48L3N0eWxlPjwvaGVhZD4iKTsKIAog
ICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwCShyZXZpc2lvbiAyMzY4NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDkgKzEwMyw5IEBAIHByaXZhdGU6CiAg
ICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiAKICAgICB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVp
bGRlciYsIGNvbnN0IFRleHQmKSBvdmVycmlkZTsKLSAgICB2b2lkIGFwcGVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKikgb3ZlcnJpZGU7CisgICAg
dm9pZCBhcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVz
cGFjZXMqKSBvdmVycmlkZTsKICAgICB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5n
QnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBhcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jikgb3ZlcnJp
ZGU7CisgICAgdm9pZCBhcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQm
KSBvdmVycmlkZTsKIH07CiAKIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciYgc2VyaWFs
aXplciwgRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKQEAgLTEyNSwx
MCArMTI1LDEwIEBAIHZvaWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2MKICAg
ICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKIH0KIAotdm9p
ZCBQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNl
cyogbmFtZXNwYWNlcykKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50
JiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmICghc2hvdWxkSWdu
b3JlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKKyAgICAgICAgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFN0YXJ0VGFnKG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKICAgICBpZiAo
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKICAgICAgICAgb3V0LmFw
cGVuZExpdGVyYWwoIjxtZXRhIGNoYXJzZXQ9XCIiKTsKQEAgLTE1OCwxMCArMTU4LDEwIEBAIHZv
aWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2MKICAgICBhcHBlbmRBdHRyaWJ1
dGUob3V0LCBlbGVtZW50LCBBdHRyaWJ1dGUoZnJhbWVPd25lclVSTEF0dHJpYnV0ZU5hbWUoZnJh
bWVPd25lciksIHVybC5zdHJpbmcoKSksIG5hbWVzcGFjZXMpOwogfQogCi12b2lkIFBhZ2VTZXJp
YWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZEVsZW1lbnQoU3Ry
aW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQordm9pZCBQYWdlU2VyaWFs
aXplcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoU3RyaW5nQnVp
bGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQogewogICAgIGlmICghc2hvdWxkSWdu
b3JlRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50KTsKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVuZFRhZyhvdXQsIGVsZW1lbnQpOwogfQogCiBQYWdlU2VyaWFsaXplcjo6UGFnZVNlcmlhbGl6
ZXIoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4mIHJlc291cmNlcykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351949</attachid>
            <date>2018-10-10 00:32:16 -0700</date>
            <delta_ts>2018-10-10 00:34:16 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-190308-20181010003216.patch</filename>
            <type>text/plain</type>
            <size>19850</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjk5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTEwLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kU3RhcnRUYWcsIGFwcGVuZEVsZW1lbnQsIGV0Yy4uLiBmb3IgY2xhcml0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMzA4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgUmVuYW1lZCBhcHBl
bmRTdGFydFRhZyBhbmQgYXBwZW5kRW5kVGFnIHRvIGFwcGVuZE5vZGVTdGFydCBhbmQgYXBwZW5k
Tm9kZUVuZCBzaW5jZSBzZXJpYWxpemUgYW55IG5vZGUsCisgICAgICAgIG5vdCBqdXN0IGVsZW1l
bnRzIHdoaWNoIHByb2R1Y2Ugc3RhcnQgYW5kIGVuZCB0YWdzLgorCisgICAgICAgIFJlbmFtZWQg
YXBwZW5kRWxlbWVudCBhbmQgYXBwZW5kRW5kRWxlbWVudCB0byBhcHBlbmRTdGFydFRhZyBhbmQg
YXBwZW5kRW5kVGFnIHNpbmNlIHRoYXQncyB3aGF0IHRoZXkgZG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1lbnRDYW5u
b3RIYXZlRW5kVGFnKTogTWFkZSB0aGlzIGEgc3RhdGljIGxvY2FsIGZ1bmN0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6c2hvdWxkU2VsZkNsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZVN0YXJ0KTogUmVuYW1lZCBm
cm9tIGFwcGVuZFN0YXJ0VGFnLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbmRFbGVtZW50IGFuZCBtZXJnZWQg
YXBwZW5kRW5kTWFya3VwIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kVGV4dFN1YnN0cmluZyk6IERlbGV0ZWQuIFRoaXMgd2FzIG9ubHkgdXNlZCBieSBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRTdGFydFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbGVtZW50LgorICAgICAg
ICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKToKKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZSk6IFJlbmFt
ZWQgZnJvbSBhcHBlbmRTdGFydE1hcmt1cC4gTm8gbG9uZ2VyIHNlcmlhbGl6ZXMKKyAgICAgICAg
YW4gZWxlbWVudC4gU3R5bGVkTWFya3VwQWNjdW11bGF0b3IgaGFkIGEgY2hlY2sgYmVmb3JlIGNh
bGxpbmcgdGhpcyBmdW5jdGlvbiBhbHJlYWR5IHNvIHRoaXMgY2xhcmlmaWVzCisgICAgICAgIHRo
ZSBwdXJwb3NlIG9mIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKTogRGVsZXRlZC4gTWVyZ2VkIGludG8gYXBw
ZW5kRW5kVGFnLgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlRW5kKTogUmVuYW1lZCBm
cm9tIGFwcGVuZEVuZFRhZy4KKyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6d3JhcFdpdGhOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyk6IFJl
bmFtZWQgZnJvbSBhcHBlbmRFbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6IFJlbmFtZWQgZnJvbSBhcHBlbmRFbmRFbGVtZW50
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTm9k
ZXNGb3JTZXJpYWxpemF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmROb2RlVG9QcmVzZXJ2ZU1TT0xpc3QpOiBVc2UgU3RyaW5nOjpzdWJzdHJp
bmcgZGlyZWN0bHkgaW5zdGVhZCBvZgorICAgICAgICBnb2luZyB0aHJvdWdoIGFwcGVuZFRleHRT
dWJzdHJpbmcgd2hpY2ggaGFzIGJlZW4gZGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKTogUmVuYW1lZCBmcm9tIGFwcGVuZEVs
ZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcpOiBSZW5hbWVkIGZyb20gYXBwZW5kRW5kRWxlbWVu
dC4KKwogMjAxOC0xMC0wOSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJlbW92ZSB0aGUgZnJhbWVzKCkgdGltaW5nIGZ1bmN0aW9uCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAkocmV2aXNpb24gMjM2OTk4
KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg1LDYgKzg1LDYxIEBAIHN0YXRpYyBjb25zdCB1aW50OF90IGVudGl0eU1h
cFttYXhpbXVtRXMKICAgICBFbnRpdHlTdWJzdGl0dXRpb25OYnNwSW5kZXggLy8gbm9CcmVha1Nw
YWNlLgogfTsKIAorc3RhdGljIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29uc3QgTm9k
ZSYgbm9kZSkKK3sKKyAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gRnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNz
ZXJpYWxpc2luZy1odG1sLWZyYWdtZW50czoKKyAgICAvLyBJZiBjdXJyZW50IG5vZGUgaXMgYW4g
YXJlYSwgYmFzZSwgYmFzZWZvbnQsIGJnc291bmQsIGJyLCBjb2wsIGVtYmVkLCBmcmFtZSwgaHIs
IGltZywKKyAgICAvLyBpbnB1dCwga2V5Z2VuLCBsaW5rLCBtZXRhLCBwYXJhbSwgc291cmNlLCB0
cmFjayBvciB3YnIgZWxlbWVudCwgdGhlbiBjb250aW51ZSBvbiB0bworICAgIC8vIHRoZSBuZXh0
IGNoaWxkIG5vZGUgYXQgdGhpcyBwb2ludC4KKyAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
SW1wbCogbG9jYWxOYW1lc1tdID0geworICAgICAgICBhcmVhVGFnLT5sb2NhbE5hbWUoKS5pbXBs
KCksCisgICAgICAgIGJhc2VUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgYmFzZWZv
bnRUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgYmdzb3VuZFRhZy0+bG9jYWxOYW1l
KCkuaW1wbCgpLAorICAgICAgICBiclRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBj
b2xUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgZW1iZWRUYWctPmxvY2FsTmFtZSgp
LmltcGwoKSwKKyAgICAgICAgZnJhbWVUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAg
aHJUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgaW1nVGFnLT5sb2NhbE5hbWUoKS5p
bXBsKCksCisgICAgICAgIGlucHV0VGFnLT5sb2NhbE5hbWUoKS5pbXBsKCksCisgICAgICAgIGtl
eWdlblRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBsaW5rVGFnLT5sb2NhbE5hbWUo
KS5pbXBsKCksCisgICAgICAgIG1ldGFUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAg
cGFyYW1UYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgc291cmNlVGFnLT5sb2NhbE5h
bWUoKS5pbXBsKCksCisgICAgICAgIHRyYWNrVGFnLT5sb2NhbE5hbWUoKS5pbXBsKCksCisgICAg
ICAgIHdiclRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpCisgICAgfTsKKworICAgIGF1dG8mIGVsZW1l
bnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7CisgICAgZm9yIChhdXRvKiBuYW1lIDog
bG9jYWxOYW1lcykgeworICAgICAgICBpZiAoZWxlbWVudC5sb2NhbE5hbWUoKS5pbXBsKCkgPT0g
bmFtZSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8gUnVsZXMgb2Ygc2VsZi1jbG9zdXJlCisvLyAxLiBObyBlbGVtZW50cyBpbiBI
VE1MIGRvY3VtZW50cyB1c2UgdGhlIHNlbGYtY2xvc2luZyBzeW50YXguCisvLyAyLiBFbGVtZW50
cyB3LyBjaGlsZHJlbiBuZXZlciBzZWxmLWNsb3NlIGJlY2F1c2UgdGhleSB1c2UgYSBzZXBhcmF0
ZSBlbmQgdGFnLgorLy8gMy4gSFRNTCBlbGVtZW50cyB3aGljaCBkbyBub3QgaGF2ZSBhICJmb3Ji
aWRkZW4iIGVuZCB0YWcgd2lsbCBjbG9zZSB3aXRoIGEgc2VwYXJhdGUgZW5kIHRhZy4KKy8vIDQu
IE90aGVyIGVsZW1lbnRzIHNlbGYtY2xvc2UuCitzdGF0aWMgYm9vbCBzaG91bGRTZWxmQ2xvc2Uo
Y29uc3QgRWxlbWVudCYgZWxlbWVudCwgU2VyaWFsaXphdGlvblN5bnRheCBzeW50YXgpCit7Cisg
ICAgaWYgKHN5bnRheCAhPSBTZXJpYWxpemF0aW9uU3ludGF4OjpYTUwgJiYgZWxlbWVudC5kb2N1
bWVudCgpLmlzSFRNTERvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
ZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
ZWxlbWVudC5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGVsZW1l
bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIHRlbXBs
YXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiBzdGF0aWMgaW5saW5lIHZvaWQgYXBwZW5kQ2hh
cmFjdGVyc1JlcGxhY2luZ0VudGl0aWVzSW50ZXJuYWwoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIHNvdXJjZSwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIEVu
dGl0eU1hc2sgZW50aXR5TWFzaykKIHsKQEAgLTE1MCw3ICsyMDUsNyBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpCiAgICAgfQogCiAgICAgaWYgKHJvb3QgPT0gU2Vy
aWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSkKLSAgICAgICAgYXBwZW5kU3RhcnRU
YWcodGFyZ2V0Tm9kZSwgJm5hbWVzcGFjZUhhc2gpOworICAgICAgICBzdGFydEFwcGVuZGluZ05v
ZGUodGFyZ2V0Tm9kZSwgJm5hbWVzcGFjZUhhc2gpOwogCiAgICAgaWYgKHRhcmdldE5vZGUuZG9j
dW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpICYmIGVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKHRhcmdl
dE5vZGUpKQogICAgICAgICByZXR1cm47CkBAIC0xNjAsNyArMjE1LDcgQEAgdm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaQogICAgICAgICBzZXJpYWxpemVOb2Rlc1dpdGhO
YW1lc3BhY2VzKCpjdXJyZW50LCBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2Rl
LCAmbmFtZXNwYWNlSGFzaCwgdGFnTmFtZXNUb1NraXApOwogCiAgICAgaWYgKHJvb3QgPT0gU2Vy
aWFsaXplZE5vZGVzOjpTdWJ0cmVlSW5jbHVkaW5nTm9kZSkKLSAgICAgICAgYXBwZW5kRW5kVGFn
KHRhcmdldE5vZGUpOworICAgICAgICBlbmRBcHBlbmRpbmdOb2RlKHRhcmdldE5vZGUpOwogfQog
CiBTdHJpbmcgTWFya3VwQWNjdW11bGF0b3I6OnJlc29sdmVVUkxJZk5lZWRlZChjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykgY29uc3QKQEAgLTE4NSwyMiAr
MjQwLDMwIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZyhjb24KICAgICBt
X21hcmt1cC5hcHBlbmQoc3RyaW5nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3RhcnRUYWcoY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3Zv
aWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nVmlldyYg
dmlldykKIHsKLSAgICBhcHBlbmRTdGFydE1hcmt1cChtX21hcmt1cCwgbm9kZSwgbmFtZXNwYWNl
cyk7Ci0gICAgaWYgKG1fbm9kZXMpCi0gICAgICAgIG1fbm9kZXMtPmFwcGVuZChjb25zdF9jYXN0
PE5vZGUqPigmbm9kZSkpOworICAgIG1fbWFya3VwLmFwcGVuZCh2aWV3KTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpzdGFydEFwcGVu
ZGluZ05vZGUoY29uc3QgTm9kZSYgbm9kZSwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKLSAg
ICBhcHBlbmRFbmRNYXJrdXAob3V0LCBlbGVtZW50KTsKKyAgICBpZiAoaXM8RWxlbWVudD4obm9k
ZSkpCisgICAgICAgIGFwcGVuZFN0YXJ0VGFnKG1fbWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihu
b2RlKSwgbmFtZXNwYWNlcyk7CisgICAgZWxzZQorICAgICAgICBhcHBlbmROb25FbGVtZW50Tm9k
ZShtX21hcmt1cCwgbm9kZSwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAobV9ub2RlcykKKyAgICAg
ICAgbV9ub2Rlcy0+YXBwZW5kKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSk7CiB9CiAKLXZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHRTdWJzdHJpbmcoY29uc3QgVGV4dCYgdGV4dCwg
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGxlbmd0aCkKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZFRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgQVNTRVJUKHN0YXJ0ICsgbGVuZ3RoIDw9IHRleHQuZGF0YSgpLmxlbmd0aCgp
KTsKLSAgICBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXMobV9tYXJrdXAsIHRleHQu
ZGF0YSgpLCBzdGFydCwgbGVuZ3RoLCBlbnRpdHlNYXNrRm9yVGV4dCh0ZXh0KSk7CisgICAgaWYg
KHNob3VsZFNlbGZDbG9zZShlbGVtZW50LCBtX3NlcmlhbGl6YXRpb25TeW50YXgpIHx8ICghZWxl
bWVudC5oYXNDaGlsZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoZWxlbWVudCkp
KQorICAgICAgICByZXR1cm47CisgICAgcmVzdWx0LmFwcGVuZCgnPCcpOworICAgIHJlc3VsdC5h
cHBlbmQoJy8nKTsKKyAgICByZXN1bHQuYXBwZW5kKGVsZW1lbnQubm9kZU5hbWVQcmVzZXJ2aW5n
Q2FzZSgpKTsKKyAgICByZXN1bHQuYXBwZW5kKCc+Jyk7CiB9CiAKIHNpemVfdCBNYXJrdXBBY2N1
bXVsYXRvcjo6dG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mIHN0cmluZ3MpCkBAIC00
MTAsNyArNDczLDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUHJvY2Vzc2luZwog
ICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRT
dGFydFRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5h
bWVzcGFjZXMqIG5hbWVzcGFjZXMpCiB7CiAgICAgYXBwZW5kT3BlblRhZyhyZXN1bHQsIGVsZW1l
bnQsIG5hbWVzcGFjZXMpOwogCkBAIC00NDQsNyArNTA3LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kT3BlblRhZyhTdAogCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRD
bG9zZVRhZyhTdHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7
Ci0gICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50KSkgeworICAgIGlmIChzaG91bGRTZWxm
Q2xvc2UoZWxlbWVudCwgbV9zZXJpYWxpemF0aW9uU3ludGF4KSkgewogICAgICAgICBpZiAoZWxl
bWVudC5pc0hUTUxFbGVtZW50KCkpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7IC8v
IFhIVE1MIDEuMCA8LT4gSFRNTCBjb21wYXRpYmlsaXR5LgogICAgICAgICByZXN1bHQuYXBwZW5k
KCcvJyk7CkBAIC01MzAsNyArNTkzLDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q0RBVEFTZWN0aQogICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJdXT4iKTsKIH0KIAotdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVpbGRlciYgcmVzdWx0
LCBjb25zdCBOb2RlJiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kTm9uRWxlbWVudE5vZGUoU3RyaW5nQnVpbGRlciYgcmVzdWx0LCBj
b25zdCBOb2RlJiBub2RlLCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQogewogICAgIGlmIChuYW1l
c3BhY2VzKQogICAgICAgICBuYW1lc3BhY2VzLT5jaGVja0NvbnNpc3RlbmN5KCk7CkBAIC01NTQs
NyArNjE3LDcgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRNYXJrdQogICAg
ICAgICBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24ocmVzdWx0LCBkb3duY2FzdDxQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24+KG5vZGUpLnRhcmdldCgpLCBkb3duY2FzdDxQcm9jZXNzaW5nSW5zdHJ1
Y3Rpb24+KG5vZGUpLmRhdGEoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTm9kZTo6RUxF
TUVOVF9OT0RFOgotICAgICAgICBhcHBlbmRFbGVtZW50KHJlc3VsdCwgZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSksIG5hbWVzcGFjZXMpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBOb2RlOjpDREFUQV9TRUNUSU9OX05PREU6CiAgICAgICAg
IGFwcGVuZENEQVRBU2VjdGlvbihyZXN1bHQsIGRvd25jYXN0PENEQVRBU2VjdGlvbj4obm9kZSku
ZGF0YSgpKTsKQEAgLTU2NSw1MSArNjI4LDQgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3RhcnRNYXJrdQogICAgIH0KIH0KIAotLy8gUnVsZXMgb2Ygc2VsZi1jbG9zdXJlCi0vLyAx
LiBObyBlbGVtZW50cyBpbiBIVE1MIGRvY3VtZW50cyB1c2UgdGhlIHNlbGYtY2xvc2luZyBzeW50
YXguCi0vLyAyLiBFbGVtZW50cyB3LyBjaGlsZHJlbiBuZXZlciBzZWxmLWNsb3NlIGJlY2F1c2Ug
dGhleSB1c2UgYSBzZXBhcmF0ZSBlbmQgdGFnLgotLy8gMy4gSFRNTCBlbGVtZW50cyB3aGljaCBk
byBub3QgaGF2ZSBhICJmb3JiaWRkZW4iIGVuZCB0YWcgd2lsbCBjbG9zZSB3aXRoIGEgc2VwYXJh
dGUgZW5kIHRhZy4KLS8vIDQuIE90aGVyIGVsZW1lbnRzIHNlbGYtY2xvc2UuCi1ib29sIE1hcmt1
cEFjY3VtdWxhdG9yOjpzaG91bGRTZWxmQ2xvc2UoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKLXsK
LSAgICBpZiAoIWluWE1MRnJhZ21lbnRTZXJpYWxpemF0aW9uKCkgJiYgZWxlbWVudC5kb2N1bWVu
dCgpLmlzSFRNTERvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxl
bWVudC5oYXNDaGlsZE5vZGVzKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoZWxl
bWVudC5pc0hUTUxFbGVtZW50KCkgJiYgIWVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGVsZW1lbnQp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgTWFy
a3VwQWNjdW11bGF0b3I6OmVsZW1lbnRDYW5ub3RIYXZlRW5kVGFnKGNvbnN0IE5vZGUmIG5vZGUp
Ci17Ci0gICAgaWYgKCFpczxIVE1MRWxlbWVudD4obm9kZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXNp
bmctaHRtbC1mcmFnbWVudHM6Ci0gICAgLy8gSWYgY3VycmVudCBub2RlIGlzIGFuIGFyZWEsIGJh
c2UsIGJhc2Vmb250LCBiZ3NvdW5kLCBiciwgY29sLCBlbWJlZCwgZnJhbWUsIGhyLCBpbWcsCi0g
ICAgLy8gaW5wdXQsIGtleWdlbiwgbGluaywgbWV0YSwgcGFyYW0sIHNvdXJjZSwgdHJhY2sgb3Ig
d2JyIGVsZW1lbnQsIHRoZW4gY29udGludWUgb24gdG8KLSAgICAvLyB0aGUgbmV4dCBjaGlsZCBu
b2RlIGF0IHRoaXMgcG9pbnQuCi0gICAgc3RhdGljIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lKiB0
YWdzW10gPSB7ICZhcmVhVGFnLmdldCgpLCAmYmFzZVRhZy5nZXQoKSwgJmJhc2Vmb250VGFnLmdl
dCgpLCAmYmdzb3VuZFRhZy5nZXQoKSwKLSAgICAgICAgJmJyVGFnLmdldCgpLCAmY29sVGFnLmdl
dCgpLCAmZW1iZWRUYWcuZ2V0KCksICZmcmFtZVRhZy5nZXQoKSwgJmhyVGFnLmdldCgpLCAmaW1n
VGFnLmdldCgpLCAmaW5wdXRUYWcuZ2V0KCksCi0gICAgICAgICZrZXlnZW5UYWcuZ2V0KCksICZs
aW5rVGFnLmdldCgpLCAmbWV0YVRhZy5nZXQoKSwgJnBhcmFtVGFnLmdldCgpLCAmc291cmNlVGFn
LmdldCgpLCAmdHJhY2tUYWcuZ2V0KCksICZ3YnJUYWcuZ2V0KCkgfTsKLSAgICBhdXRvJiBlbGVt
ZW50ID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KG5vZGUpOwotICAgIGZvciAoYXV0byogdGFnIDog
dGFncykgewotICAgICAgICBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKCp0YWcpKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQp
IHx8ICghZWxlbWVudC5oYXNDaGlsZE5vZGVzKCkgJiYgZWxlbWVudENhbm5vdEhhdmVFbmRUYWco
ZWxlbWVudCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICByZXN1bHQuYXBwZW5kKCc8Jyk7Ci0g
ICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVudC5ub2RlTmFt
ZVByZXNlcnZpbmdDYXNlKCkpOwotICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKLX0KLQogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24g
MjM2OTk4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MywyNSArNzMsMjQgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgY29u
Y2F0ZW5hdGVNYXJrdXAoU3RyaW5nQnVpbGRlciYpOwogCiAgICAgdm9pZCBhcHBlbmRTdHJpbmco
Y29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoY29uc3QgTm9kZSYgbm9kZSkK
KyAgICB2b2lkIGFwcGVuZFN0cmluZ1ZpZXcoY29uc3QgU3RyaW5nVmlldyYpOworCisgICAgdm9p
ZCBzdGFydEFwcGVuZGluZ05vZGUoY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqID0gbnVsbHB0cik7
CisgICAgdm9pZCBlbmRBcHBlbmRpbmdOb2RlKGNvbnN0IE5vZGUmIG5vZGUpCiAgICAgewogICAg
ICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCi0gICAgICAgICAgICBhcHBlbmRFbmRFbGVtZW50
KG1fbWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSk7CisgICAgICAgICAgICBhcHBlbmRF
bmRUYWcobV9tYXJrdXAsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsKICAgICB9CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kRW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVu
dCYpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdGFydFRhZyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZEN1c3RvbUF0dHJpYnV0ZXMoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3Bh
Y2VzKik7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoU3RyaW5nQnVpbGRlciYsIGNvbnN0
IFRleHQmKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiwg
Y29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKLQotICAgIHZvaWQgYXBwZW5kU3RhcnRUYWco
Y29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqID0gbnVsbHB0cik7Ci0KLSAgICB2b2lkIGFwcGVuZFRl
eHRTdWJzdHJpbmcoY29uc3QgVGV4dCYsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBsZW5ndGgp
OwogCiAgICAgdm9pZCBhcHBlbmRPcGVuVGFnKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50
JiwgTmFtZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IEVsZW1lbnQmKTsKIAotICAgIHZvaWQgYXBwZW5kU3RhcnRNYXJrdXAoU3RyaW5nQnVp
bGRlciYsIGNvbnN0IE5vZGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmROb25FbGVt
ZW50Tm9kZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2
b2lkIGFwcGVuZEVuZE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpOwogCiAg
ICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGVWYWx1ZShTdHJpbmdCdWlsZGVyJiwgY29uc3QgU3RyaW5n
JiwgYm9vbCBpc1NlcmlhbGl6aW5nSFRNTCk7CkBAIC0xMDQsOCArMTAzLDYgQEAgcHJvdGVjdGVk
OgogCiAgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsK
ICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBO
YW1lc3BhY2VzJik7Ci0gICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgRWxlbWVudCYpOwot
ICAgIGJvb2wgZWxlbWVudENhbm5vdEhhdmVFbmRUYWcoY29uc3QgTm9kZSYpOwogICAgIEVudGl0
eU1hc2sgZW50aXR5TWFza0ZvclRleHQoY29uc3QgVGV4dCYpIGNvbnN0OwogCiAgICAgVmVjdG9y
PE5vZGUqPiogY29uc3QgbV9ub2RlczsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFy
a3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAJ
KHJldmlzaW9uIDIzNjk5OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjQ5LDE0ICsyNDksMTQgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wg
c2hvdWxkUHJlc2VydmVNU09MaXN0U3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmKTsKIAot
ICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQm
LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7Ci0gICAgdm9p
ZCBhcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYpIG92
ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25z
dCBFbGVtZW50JiwgYm9vbCBhZGREaXNwbGF5SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUp
OworICAgIHZvaWQgYXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVu
dCYpIG92ZXJyaWRlOwogICAgIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWls
ZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
YXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IFRleHQmKSBvdmVycmlkZTsKLSAg
ICB2b2lkIGFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBl
bGVtZW50LCBOYW1lc3BhY2VzKikgb3ZlcnJpZGUKKyAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyopIG92
ZXJyaWRlCiAgICAgewotICAgICAgICBhcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgZmFsc2Us
IERvZXNGdWxseVNlbGVjdE5vZGUpOworICAgICAgICBhcHBlbmRTdGFydFRhZyhvdXQsIGVsZW1l
bnQsIGZhbHNlLCBEb2VzRnVsbHlTZWxlY3ROb2RlKTsKICAgICB9CiAKICAgICBOb2RlKiBmaXJz
dENoaWxkKE5vZGUmIG5vZGUpCkBAIC0zNDcsMTEgKzM0NywxMSBAQCB2b2lkIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjp3cmFwV2l0aE5vCiB7CiAgICAgU3RyaW5nQnVpbGRlciBtYXJrdXA7CiAg
ICAgaWYgKGlzPEVsZW1lbnQ+KG5vZGUpKQotICAgICAgICBhcHBlbmRFbGVtZW50KG1hcmt1cCwg
ZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMgJiYgaXNCbG9j
aygmbm9kZSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgICAgIGFwcGVuZFN0YXJ0VGFn
KG1hcmt1cCwgZG93bmNhc3Q8RWxlbWVudD4obm9kZSksIGNvbnZlcnRCbG9ja3NUb0lubGluZXMg
JiYgaXNCbG9jaygmbm9kZSksIHJhbmdlRnVsbHlTZWxlY3RzTm9kZSk7CiAgICAgZWxzZQotICAg
ICAgICBhcHBlbmRTdGFydE1hcmt1cChtYXJrdXAsIG5vZGUsIG51bGxwdHIpOworICAgICAgICBh
cHBlbmROb25FbGVtZW50Tm9kZShtYXJrdXAsIG5vZGUsIG51bGxwdHIpOwogICAgIG1fcmV2ZXJz
ZWRQcmVjZWRpbmdNYXJrdXAuYXBwZW5kKG1hcmt1cC50b1N0cmluZygpKTsKLSAgICBhcHBlbmRF
bmRUYWcobm9kZSk7CisgICAgZW5kQXBwZW5kaW5nTm9kZShub2RlKTsKICAgICBpZiAobV9ub2Rl
cykKICAgICAgICAgbV9ub2Rlcy0+YXBwZW5kKCZub2RlKTsKIH0KQEAgLTQ5NSw3ICs0OTUsNyBA
QCBib29sIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzaG91bGRQcmVzCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgYm9vbCBhZGREaXNwbGF5
SW5saW5lLCBSYW5nZUZ1bGx5U2VsZWN0c05vZGUgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKQordm9p
ZCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYg
b3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdl
RnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1bGx5U2VsZWN0c05vZGUpCiB7CiAgICAgY29uc3QgYm9v
bCBkb2N1bWVudElzSFRNTCA9IGVsZW1lbnQuZG9jdW1lbnQoKS5pc0hUTUxEb2N1bWVudCgpOwog
ICAgIGNvbnN0IGJvb2wgaXNTbG90RWxlbWVudCA9IGlzPEhUTUxTbG90RWxlbWVudD4oZWxlbWVu
dCk7CkBAIC01NjMsMTIgKzU2MywxMiBAQCB2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRFbGVtCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIAotdm9pZCBT
dHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50
KQogewogICAgIGlmIChVTkxJS0VMWShpczxIVE1MU2xvdEVsZW1lbnQ+KGVsZW1lbnQpKSkKICAg
ICAgICAgb3V0LmFwcGVuZCgiPC9zcGFuPiIpOwogICAgIGVsc2UKLSAgICAgICAgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVuZEVsZW1lbnQob3V0LCBlbGVtZW50KTsKKyAgICAgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhvdXQsIGVsZW1lbnQpOwogfQogCiBOb2RlKiBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXMoY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKQpAQCAtNjA5LDcgKzYwOSw3IEBAIE5vZGUqIFN0eWxlZE1h
cmt1cEFjY3VtdWxhdG9yOjp0cmF2ZXJzZU4KIAogICAgICAgICArK2RlcHRoOwogICAgICAgICBp
ZiAoc2hvdWxkRW1pdCkKLSAgICAgICAgICAgIGFwcGVuZFN0YXJ0VGFnKG5vZGUpOworICAgICAg
ICAgICAgc3RhcnRBcHBlbmRpbmdOb2RlKG5vZGUpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH07CkBAIC02MjEsNyArNjIxLDcgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OnRyYXZlcnNlTgogICAgICAgICAgICAgLS1kZXB0aDsKICAgICAgICAgaWYgKHNob3VsZEVtaXQp
IHsKICAgICAgICAgICAgIGlmIChjbG9zaW5nKQotICAgICAgICAgICAgICAgIGFwcGVuZEVuZFRh
Zyhub2RlKTsKKyAgICAgICAgICAgICAgICBlbmRBcHBlbmRpbmdOb2RlKG5vZGUpOwogICAgICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHdyYXBXaXRoTm9kZShub2RlKTsKICAgICAgICAg
fQpAQCAtNjg5LDcgKzY4OSw3IEBAIGJvb2wgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZE5vZGUKICAgICAgICAgICAgIG1faW5NU09MaXN0ID0gZmFsc2U7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXBwZW5kU3RhcnRUYWcoY29tbWVudE5v
ZGUpOworICAgICAgICBzdGFydEFwcGVuZGluZ05vZGUoY29tbWVudE5vZGUpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgaWYgKGlzPEhUTUxTdHlsZUVsZW1lbnQ+KG5vZGUpKSB7
CkBAIC03MTIsNyArNzEyLDcgQEAgYm9vbCBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Tm9kZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGFwcGVuZFN0cmluZygi
PGhlYWQ+PHN0eWxlIGNsYXNzPVwiIiBXZWJLaXRNU09MaXN0UXVpcmtzU3R5bGUgIlwiPlxuPCEt
LVxuIik7Ci0gICAgICAgIGFwcGVuZFRleHRTdWJzdHJpbmcodGV4dENoaWxkLCBzdGFydCwgbXNv
TGlzdERlZmluaXRpb25zRW5kIC0gc3RhcnQgKyAzKTsKKyAgICAgICAgYXBwZW5kU3RyaW5nVmll
dyhTdHJpbmdWaWV3KHRleHRDaGlsZC5kYXRhKCkpLnN1YnN0cmluZyhzdGFydCwgbXNvTGlzdERl
ZmluaXRpb25zRW5kIC0gc3RhcnQgKyAzKSk7CiAgICAgICAgIGFwcGVuZFN0cmluZygiXG4tLT5c
bjwvc3R5bGU+PC9oZWFkPiIpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDIzNjk5OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMs
OSArMTAzLDkgQEAgcHJpdmF0ZToKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKIAogICAgIHZv
aWQgYXBwZW5kVGV4dChTdHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpIG92ZXJyaWRlOwotICAg
IHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVz
cGFjZXMqKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKFN0cmluZ0J1aWxkZXIm
LCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOwogICAgIHZvaWQgYXBwZW5k
Q3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYsIE5hbWVzcGFj
ZXMqKSBvdmVycmlkZTsKLSAgICB2b2lkIGFwcGVuZEVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYs
IGNvbnN0IEVsZW1lbnQmKSBvdmVycmlkZTsKKyAgICB2b2lkIGFwcGVuZEVuZFRhZyhTdHJpbmdC
dWlsZGVyJiwgY29uc3QgRWxlbWVudCYpIG92ZXJyaWRlOwogfTsKIAogUGFnZVNlcmlhbGl6ZXI6
OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
KFBhZ2VTZXJpYWxpemVyJiBzZXJpYWxpemVyLCBEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxO
b2RlKj4qIG5vZGVzKQpAQCAtMTI1LDEwICsxMjUsMTAgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6
U2VyaWFsaXplck1hcmt1cEFjYwogICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dChvdXQsIHRleHQpOwogfQogCi12b2lkIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQordm9pZCBQYWdlU2VyaWFsaXpl
cjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhTdHJpbmdCdWls
ZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
CiB7CiAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwor
ICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcob3V0LCBlbGVtZW50LCBu
YW1lc3BhY2VzKTsKIAogICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpoZWFk
VGFnKSkgewogICAgICAgICBvdXQuYXBwZW5kTGl0ZXJhbCgiPG1ldGEgY2hhcnNldD1cIiIpOwpA
QCAtMTU4LDEwICsxNTgsMTAgQEAgdm9pZCBQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1hcmt1
cEFjYwogICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsIEF0dHJpYnV0ZShmcmFtZU93
bmVyVVJMQXR0cmlidXRlTmFtZShmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKSwgbmFtZXNwYWNl
cyk7CiB9CiAKLXZvaWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZEVuZFRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CiB7CiAgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQotICAgICAgICBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kRWxlbWVudChvdXQsIGVsZW1lbnQpOworICAgICAgICBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKG91dCwgZWxlbWVudCk7CiB9CiAKIFBhZ2VT
ZXJpYWxpemVyOjpQYWdlU2VyaWFsaXplcihWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNl
PiYgcmVzb3VyY2VzKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>351950</attachid>
            <date>2018-10-10 00:37:21 -0700</date>
            <delta_ts>2018-10-10 00:37:21 -0700</delta_ts>
            <desc>Updated change log</desc>
            <filename>bug-190308-20181010003720.patch</filename>
            <type>text/plain</type>
            <size>19927</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzNjk5OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE4LTEwLTA1ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbmFtZSBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kU3RhcnRUYWcsIGFwcGVuZEVsZW1lbnQsIGV0Yy4uLiBmb3IgY2xhcml0eQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkwMzA4CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgUmVuYW1lZCBhcHBl
bmRTdGFydFRhZyBhbmQgYXBwZW5kRW5kVGFnIHRvIHN0YXJ0QXBwZW5kaW5nTm9kZSBhbmQgZW5k
QXBwZW5kaW5nTm9kZSBzaW5jZSBzZXJpYWxpemUgYW55IG5vZGUsCisgICAgICAgIG5vdCBqdXN0
IGVsZW1lbnRzIHdoaWNoIHByb2R1Y2Ugc3RhcnQgYW5kIGVuZCB0YWdzLgorCisgICAgICAgIFJl
bmFtZWQgYXBwZW5kRWxlbWVudCBhbmQgYXBwZW5kRW5kRWxlbWVudCB0byBhcHBlbmRTdGFydFRh
ZyBhbmQgYXBwZW5kRW5kVGFnIHNpbmNlIHRoYXQncyB3aGF0IHRoZXkgZG8uCisKKyAgICAgICAg
KiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVsZW1l
bnRDYW5ub3RIYXZlRW5kVGFnKTogTWFkZSB0aGlzIGEgc3RhdGljIGxvY2FsIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6c2hvdWxkU2VsZkNsb3NlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6c2VyaWFsaXplTm9kZXNXaXRoTmFtZXNwYWNlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6c3RhcnRBcHBlbmRpbmdOb2RlKTog
UmVuYW1lZCBmcm9tIGFwcGVuZFN0YXJ0VGFnLgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNj
dW11bGF0b3I6OmVuZEFwcGVuZGluZ05vZGUpOiBSZW5hbWVkIGZyb20gYXBwZW5kRW5kRWxlbWVu
dCBhbmQgbWVyZ2VkIGFwcGVuZEVuZE1hcmt1cCBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6TWFy
a3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHRTdWJzdHJpbmcpOiBEZWxldGVkLiBUaGlzIHdhcyBv
bmx5IHVzZWQgYnkgU3R5bGVkTWFya3VwQWNjdW11bGF0b3IuCisgICAgICAgIChXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nVmlldyk6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKTogUmVuYW1lZCBmcm9tIGFw
cGVuZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
Q2xvc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5v
bkVsZW1lbnROb2RlKTogUmVuYW1lZCBmcm9tIGFwcGVuZFN0YXJ0TWFya3VwLiBObyBsb25nZXIg
c2VyaWFsaXplcworICAgICAgICBhbiBlbGVtZW50LiBTdHlsZWRNYXJrdXBBY2N1bXVsYXRvciBo
YWQgYSBjaGVjayBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgc28gdGhpcyBj
bGFyaWZpZXMKKyAgICAgICAgdGhlIHB1cnBvc2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXApOiBEZWxl
dGVkLiBNZXJnZWQgaW50byBhcHBlbmRFbmRUYWcuCisgICAgICAgICogZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZE5vZGVFbmQpOiBSZW5hbWVkIGZyb20gYXBwZW5kRW5kVGFnLgorICAgICAgICAqIGVkaXRpbmcv
bWFya3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjp3
cmFwV2l0aE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFN0YXJ0VGFnKTogUmVuYW1lZCBmcm9tIGFwcGVuZEVsZW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKTogUmVuYW1lZCBm
cm9tIGFwcGVuZEVuZEVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRNYXJrdXBBY2N1
bXVsYXRvcjo6dHJhdmVyc2VOb2Rlc0ZvclNlcmlhbGl6YXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZE5vZGVUb1ByZXNlcnZlTVNPTGlzdCk6
IFVzZSBTdHJpbmc6OnN1YnN0cmluZyBkaXJlY3RseSBpbnN0ZWFkIG9mCisgICAgICAgIGdvaW5n
IHRocm91Z2ggYXBwZW5kVGV4dFN1YnN0cmluZyB3aGljaCBoYXMgYmVlbiBkZWxldGVkLgorICAg
ICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNl
cmlhbGl6ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RhcnRUYWcpOiBS
ZW5hbWVkIGZyb20gYXBwZW5kRWxlbWVudC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxp
emVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyk6IFJlbmFtZWQg
ZnJvbSBhcHBlbmRFbmRFbGVtZW50LgorCiAyMDE4LTEwLTA5ICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBmcmFtZXMoKSB0aW1pbmcgZnVu
Y3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwCShyZXZpc2lvbiAyMzY5OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsNiArODUsNjEgQEAgc3RhdGljIGNv
bnN0IHVpbnQ4X3QgZW50aXR5TWFwW21heGltdW1FcwogICAgIEVudGl0eVN1YnN0aXR1dGlvbk5i
c3BJbmRleCAvLyBub0JyZWFrU3BhY2UuCiB9OwogCitzdGF0aWMgYm9vbCBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhjb25zdCBOb2RlJiBub2RlKQoreworICAgIGlmICghaXM8SFRNTEVsZW1lbnQ+
KG5vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGcm9tIGh0dHBzOi8vaHRt
bC5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGlzaW5nLWh0bWwtZnJhZ21lbnRzOgorICAgIC8vIElm
IGN1cnJlbnQgbm9kZSBpcyBhbiBhcmVhLCBiYXNlLCBiYXNlZm9udCwgYmdzb3VuZCwgYnIsIGNv
bCwgZW1iZWQsIGZyYW1lLCBociwgaW1nLAorICAgIC8vIGlucHV0LCBrZXlnZW4sIGxpbmssIG1l
dGEsIHBhcmFtLCBzb3VyY2UsIHRyYWNrIG9yIHdiciBlbGVtZW50LCB0aGVuIGNvbnRpbnVlIG9u
IHRvCisgICAgLy8gdGhlIG5leHQgY2hpbGQgbm9kZSBhdCB0aGlzIHBvaW50LgorICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBsb2NhbE5hbWVzW10gPSB7CisgICAgICAgIGFyZWFU
YWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgYmFzZVRhZy0+bG9jYWxOYW1lKCkuaW1w
bCgpLAorICAgICAgICBiYXNlZm9udFRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBi
Z3NvdW5kVGFnLT5sb2NhbE5hbWUoKS5pbXBsKCksCisgICAgICAgIGJyVGFnLT5sb2NhbE5hbWUo
KS5pbXBsKCksCisgICAgICAgIGNvbFRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBl
bWJlZFRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBmcmFtZVRhZy0+bG9jYWxOYW1l
KCkuaW1wbCgpLAorICAgICAgICBoclRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAgICBp
bWdUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgaW5wdXRUYWctPmxvY2FsTmFtZSgp
LmltcGwoKSwKKyAgICAgICAga2V5Z2VuVGFnLT5sb2NhbE5hbWUoKS5pbXBsKCksCisgICAgICAg
IGxpbmtUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgbWV0YVRhZy0+bG9jYWxOYW1l
KCkuaW1wbCgpLAorICAgICAgICBwYXJhbVRhZy0+bG9jYWxOYW1lKCkuaW1wbCgpLAorICAgICAg
ICBzb3VyY2VUYWctPmxvY2FsTmFtZSgpLmltcGwoKSwKKyAgICAgICAgdHJhY2tUYWctPmxvY2Fs
TmFtZSgpLmltcGwoKSwKKyAgICAgICAgd2JyVGFnLT5sb2NhbE5hbWUoKS5pbXBsKCkKKyAgICB9
OworCisgICAgYXV0byYgZWxlbWVudCA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihub2RlKTsKKyAg
ICBmb3IgKGF1dG8qIG5hbWUgOiBsb2NhbE5hbWVzKSB7CisgICAgICAgIGlmIChlbGVtZW50Lmxv
Y2FsTmFtZSgpLmltcGwoKSA9PSBuYW1lKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBSdWxlcyBvZiBzZWxmLWNsb3N1cmUKKy8v
IDEuIE5vIGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRzIHVzZSB0aGUgc2VsZi1jbG9zaW5nIHN5
bnRheC4KKy8vIDIuIEVsZW1lbnRzIHcvIGNoaWxkcmVuIG5ldmVyIHNlbGYtY2xvc2UgYmVjYXVz
ZSB0aGV5IHVzZSBhIHNlcGFyYXRlIGVuZCB0YWcuCisvLyAzLiBIVE1MIGVsZW1lbnRzIHdoaWNo
IGRvIG5vdCBoYXZlIGEgImZvcmJpZGRlbiIgZW5kIHRhZyB3aWxsIGNsb3NlIHdpdGggYSBzZXBh
cmF0ZSBlbmQgdGFnLgorLy8gNC4gT3RoZXIgZWxlbWVudHMgc2VsZi1jbG9zZS4KK3N0YXRpYyBi
b29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBTZXJpYWxpemF0aW9u
U3ludGF4IHN5bnRheCkKK3sKKyAgICBpZiAoc3ludGF4ICE9IFNlcmlhbGl6YXRpb25TeW50YXg6
OlhNTCAmJiBlbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENh
bm5vdEhhdmVFbmRUYWcoZWxlbWVudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHN0YXRpYyBp
bmxpbmUgdm9pZCBhcHBlbmRDaGFyYWN0ZXJzUmVwbGFjaW5nRW50aXRpZXNJbnRlcm5hbChTdHJp
bmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IFN0cmluZyYgc291cmNlLCB1bnNpZ25lZCBvZmZzZXQs
IHVuc2lnbmVkIGxlbmd0aCwgRW50aXR5TWFzayBlbnRpdHlNYXNrKQogewpAQCAtMTUwLDcgKzIw
NSw3IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OnNlcmlhbGl6ZU5vZGVzV2kKICAgICB9CiAK
ICAgICBpZiAocm9vdCA9PSBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2RlKQot
ICAgICAgICBhcHBlbmRTdGFydFRhZyh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CisgICAg
ICAgIHN0YXJ0QXBwZW5kaW5nTm9kZSh0YXJnZXROb2RlLCAmbmFtZXNwYWNlSGFzaCk7CiAKICAg
ICBpZiAodGFyZ2V0Tm9kZS5kb2N1bWVudCgpLmlzSFRNTERvY3VtZW50KCkgJiYgZWxlbWVudENh
bm5vdEhhdmVFbmRUYWcodGFyZ2V0Tm9kZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTE2MCw3ICsy
MTUsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlc1dpCiAgICAgICAg
IHNlcmlhbGl6ZU5vZGVzV2l0aE5hbWVzcGFjZXMoKmN1cnJlbnQsIFNlcmlhbGl6ZWROb2Rlczo6
U3VidHJlZUluY2x1ZGluZ05vZGUsICZuYW1lc3BhY2VIYXNoLCB0YWdOYW1lc1RvU2tpcCk7CiAK
ICAgICBpZiAocm9vdCA9PSBTZXJpYWxpemVkTm9kZXM6OlN1YnRyZWVJbmNsdWRpbmdOb2RlKQot
ICAgICAgICBhcHBlbmRFbmRUYWcodGFyZ2V0Tm9kZSk7CisgICAgICAgIGVuZEFwcGVuZGluZ05v
ZGUodGFyZ2V0Tm9kZSk7CiB9CiAKIFN0cmluZyBNYXJrdXBBY2N1bXVsYXRvcjo6cmVzb2x2ZVVS
TElmTmVlZGVkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5n
KSBjb25zdApAQCAtMTg1LDIyICsyNDAsMzAgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kU3RyaW5nKGNvbgogICAgIG1fbWFya3VwLmFwcGVuZChzdHJpbmcpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiBub2RlLCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kU3RyaW5nVmll
dyhjb25zdCBTdHJpbmdWaWV3JiB2aWV3KQogewotICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1fbWFy
a3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKLSAgICBpZiAobV9ub2RlcykKLSAgICAgICAgbV9ub2Rl
cy0+YXBwZW5kKGNvbnN0X2Nhc3Q8Tm9kZSo+KCZub2RlKSk7CisgICAgbV9tYXJrdXAuYXBwZW5k
KHZpZXcpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRFbGVtZW50KFN0
cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OnN0YXJ0QXBwZW5kaW5nTm9kZShjb25zdCBOb2RlJiBub2RlLCBOYW1lc3BhY2Vz
KiBuYW1lc3BhY2VzKQogewotICAgIGFwcGVuZEVuZE1hcmt1cChvdXQsIGVsZW1lbnQpOworICAg
IGlmIChpczxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgYXBwZW5kU3RhcnRUYWcobV9tYXJrdXAs
IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLCBuYW1lc3BhY2VzKTsKKyAgICBlbHNlCisgICAgICAg
IGFwcGVuZE5vbkVsZW1lbnROb2RlKG1fbWFya3VwLCBub2RlLCBuYW1lc3BhY2VzKTsKKworICAg
IGlmIChtX25vZGVzKQorICAgICAgICBtX25vZGVzLT5hcHBlbmQoY29uc3RfY2FzdDxOb2RlKj4o
Jm5vZGUpKTsKIH0KIAotdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dFN1YnN0cmlu
Zyhjb25zdCBUZXh0JiB0ZXh0LCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQordm9p
ZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwg
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBBU1NFUlQoc3RhcnQgKyBsZW5ndGggPD0g
dGV4dC5kYXRhKCkubGVuZ3RoKCkpOwotICAgIGFwcGVuZENoYXJhY3RlcnNSZXBsYWNpbmdFbnRp
dGllcyhtX21hcmt1cCwgdGV4dC5kYXRhKCksIHN0YXJ0LCBsZW5ndGgsIGVudGl0eU1hc2tGb3JU
ZXh0KHRleHQpKTsKKyAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQsIG1fc2VyaWFsaXph
dGlvblN5bnRheCkgfHwgKCFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVtZW50Q2Fubm90
SGF2ZUVuZFRhZyhlbGVtZW50KSkpCisgICAgICAgIHJldHVybjsKKyAgICByZXN1bHQuYXBwZW5k
KCc8Jyk7CisgICAgcmVzdWx0LmFwcGVuZCgnLycpOworICAgIHJlc3VsdC5hcHBlbmQoZWxlbWVu
dC5ub2RlTmFtZVByZXNlcnZpbmdDYXNlKCkpOworICAgIHJlc3VsdC5hcHBlbmQoJz4nKTsKIH0K
IAogc2l6ZV90IE1hcmt1cEFjY3VtdWxhdG9yOjp0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3Ry
aW5nPiYgc3RyaW5ncykKQEAgLTQxMCw3ICs0NzMsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRQcm9jZXNzaW5nCiAgICAgcmVzdWx0LmFwcGVuZCgnPicpOwogfQogCi12b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3ZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFN0YXJ0VGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RWxlbWVudCYgZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBhcHBlbmRP
cGVuVGFnKHJlc3VsdCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CiAKQEAgLTQ0NCw3ICs1MDcsNyBA
QCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRPcGVuVGFnKFN0CiAKIHZvaWQgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZENsb3NlVGFnKFN0cmluZ0J1aWxkZXImIHJlc3VsdCwgY29uc3Qg
RWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAoc2hvdWxkU2VsZkNsb3NlKGVsZW1lbnQpKSB7
CisgICAgaWYgKHNob3VsZFNlbGZDbG9zZShlbGVtZW50LCBtX3NlcmlhbGl6YXRpb25TeW50YXgp
KSB7CiAgICAgICAgIGlmIChlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoJyAnKTsgLy8gWEhUTUwgMS4wIDwtPiBIVE1MIGNvbXBhdGliaWxpdHkuCiAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKTsKQEAgLTUzMCw3ICs1OTMsNyBAQCB2b2lkIE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRDREFUQVNlY3RpCiAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwo
Il1dPiIpOwogfQogCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1cChT
dHJpbmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCit2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmROb25FbGVtZW50Tm9kZShTdHJp
bmdCdWlsZGVyJiByZXN1bHQsIGNvbnN0IE5vZGUmIG5vZGUsIE5hbWVzcGFjZXMqIG5hbWVzcGFj
ZXMpCiB7CiAgICAgaWYgKG5hbWVzcGFjZXMpCiAgICAgICAgIG5hbWVzcGFjZXMtPmNoZWNrQ29u
c2lzdGVuY3koKTsKQEAgLTU1NCw3ICs2MTcsNyBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRTdGFydE1hcmt1CiAgICAgICAgIGFwcGVuZFByb2Nlc3NpbmdJbnN0cnVjdGlvbihyZXN1
bHQsIGRvd25jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkudGFyZ2V0KCksIGRvd25j
YXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4obm9kZSkuZGF0YSgpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBOb2RlOjpFTEVNRU5UX05PREU6Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQocmVz
dWx0LCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgbmFtZXNwYWNlcyk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIE5vZGU6OkNEQVRBX1NF
Q1RJT05fTk9ERToKICAgICAgICAgYXBwZW5kQ0RBVEFTZWN0aW9uKHJlc3VsdCwgZG93bmNhc3Q8
Q0RBVEFTZWN0aW9uPihub2RlKS5kYXRhKCkpOwpAQCAtNTY1LDUxICs2MjgsNCBAQCB2b2lkIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFydE1hcmt1CiAgICAgfQogfQogCi0vLyBSdWxlcyBv
ZiBzZWxmLWNsb3N1cmUKLS8vIDEuIE5vIGVsZW1lbnRzIGluIEhUTUwgZG9jdW1lbnRzIHVzZSB0
aGUgc2VsZi1jbG9zaW5nIHN5bnRheC4KLS8vIDIuIEVsZW1lbnRzIHcvIGNoaWxkcmVuIG5ldmVy
IHNlbGYtY2xvc2UgYmVjYXVzZSB0aGV5IHVzZSBhIHNlcGFyYXRlIGVuZCB0YWcuCi0vLyAzLiBI
VE1MIGVsZW1lbnRzIHdoaWNoIGRvIG5vdCBoYXZlIGEgImZvcmJpZGRlbiIgZW5kIHRhZyB3aWxs
IGNsb3NlIHdpdGggYSBzZXBhcmF0ZSBlbmQgdGFnLgotLy8gNC4gT3RoZXIgZWxlbWVudHMgc2Vs
Zi1jbG9zZS4KLWJvb2wgTWFya3VwQWNjdW11bGF0b3I6OnNob3VsZFNlbGZDbG9zZShjb25zdCBF
bGVtZW50JiBlbGVtZW50KQotewotICAgIGlmICghaW5YTUxGcmFnbWVudFNlcmlhbGl6YXRpb24o
KSAmJiBlbGVtZW50LmRvY3VtZW50KCkuaXNIVE1MRG9jdW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGlmIChlbGVtZW50LmlzSFRNTEVsZW1lbnQoKSAmJiAhZWxlbWVudENhbm5v
dEhhdmVFbmRUYWcoZWxlbWVudCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBNYXJrdXBBY2N1bXVsYXRvcjo6ZWxlbWVudENhbm5vdEhhdmVFbmRU
YWcoY29uc3QgTm9kZSYgbm9kZSkKLXsKLSAgICBpZiAoIWlzPEhUTUxFbGVtZW50Pihub2RlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRnJvbSBodHRwczovL2h0bWwuc3BlYy53
aGF0d2cub3JnLyNzZXJpYWxpc2luZy1odG1sLWZyYWdtZW50czoKLSAgICAvLyBJZiBjdXJyZW50
IG5vZGUgaXMgYW4gYXJlYSwgYmFzZSwgYmFzZWZvbnQsIGJnc291bmQsIGJyLCBjb2wsIGVtYmVk
LCBmcmFtZSwgaHIsIGltZywKLSAgICAvLyBpbnB1dCwga2V5Z2VuLCBsaW5rLCBtZXRhLCBwYXJh
bSwgc291cmNlLCB0cmFjayBvciB3YnIgZWxlbWVudCwgdGhlbiBjb250aW51ZSBvbiB0bwotICAg
IC8vIHRoZSBuZXh0IGNoaWxkIG5vZGUgYXQgdGhpcyBwb2ludC4KLSAgICBzdGF0aWMgY29uc3Qg
SFRNTFF1YWxpZmllZE5hbWUqIHRhZ3NbXSA9IHsgJmFyZWFUYWcuZ2V0KCksICZiYXNlVGFnLmdl
dCgpLCAmYmFzZWZvbnRUYWcuZ2V0KCksICZiZ3NvdW5kVGFnLmdldCgpLAotICAgICAgICAmYnJU
YWcuZ2V0KCksICZjb2xUYWcuZ2V0KCksICZlbWJlZFRhZy5nZXQoKSwgJmZyYW1lVGFnLmdldCgp
LCAmaHJUYWcuZ2V0KCksICZpbWdUYWcuZ2V0KCksICZpbnB1dFRhZy5nZXQoKSwKLSAgICAgICAg
JmtleWdlblRhZy5nZXQoKSwgJmxpbmtUYWcuZ2V0KCksICZtZXRhVGFnLmdldCgpLCAmcGFyYW1U
YWcuZ2V0KCksICZzb3VyY2VUYWcuZ2V0KCksICZ0cmFja1RhZy5nZXQoKSwgJndiclRhZy5nZXQo
KSB9OwotICAgIGF1dG8mIGVsZW1lbnQgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4obm9kZSk7Ci0g
ICAgZm9yIChhdXRvKiB0YWcgOiB0YWdzKSB7Ci0gICAgICAgIGlmIChlbGVtZW50Lmhhc1RhZ05h
bWUoKnRhZykpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi12b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRNYXJrdXAoU3RyaW5n
QnVpbGRlciYgcmVzdWx0LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChzaG91
bGRTZWxmQ2xvc2UoZWxlbWVudCkgfHwgKCFlbGVtZW50Lmhhc0NoaWxkTm9kZXMoKSAmJiBlbGVt
ZW50Q2Fubm90SGF2ZUVuZFRhZyhlbGVtZW50KSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHJl
c3VsdC5hcHBlbmQoJzwnKTsKLSAgICByZXN1bHQuYXBwZW5kKCcvJyk7Ci0gICAgcmVzdWx0LmFw
cGVuZChlbGVtZW50Lm5vZGVOYW1lUHJlc2VydmluZ0Nhc2UoKSk7Ci0gICAgcmVzdWx0LmFwcGVu
ZCgnPicpOwotfQotCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3Vt
dWxhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1
bXVsYXRvci5oCShyZXZpc2lvbiAyMzY5OTgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01h
cmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDI1ICs3MywyNCBAQCBwcm90
ZWN0ZWQ6CiAgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChTdHJpbmdCdWlsZGVyJik7CiAKICAg
ICB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIGFwcGVuZEVuZFRh
Zyhjb25zdCBOb2RlJiBub2RlKQorICAgIHZvaWQgYXBwZW5kU3RyaW5nVmlldyhjb25zdCBTdHJp
bmdWaWV3Jik7CisKKyAgICB2b2lkIHN0YXJ0QXBwZW5kaW5nTm9kZShjb25zdCBOb2RlJiwgTmFt
ZXNwYWNlcyogPSBudWxscHRyKTsKKyAgICB2b2lkIGVuZEFwcGVuZGluZ05vZGUoY29uc3QgTm9k
ZSYgbm9kZSkKICAgICB7CiAgICAgICAgIGlmIChpczxFbGVtZW50Pihub2RlKSkKLSAgICAgICAg
ICAgIGFwcGVuZEVuZEVsZW1lbnQobV9tYXJrdXAsIGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpKTsK
KyAgICAgICAgICAgIGFwcGVuZEVuZFRhZyhtX21hcmt1cCwgZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkpOwogICAgIH0KIAotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1
aWxkZXImLCBjb25zdCBFbGVtZW50Jik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFN0YXJ0VGFn
KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmKTsKICAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhTdHJpbmdCdWlsZGVyJiwgY29u
c3QgRWxlbWVudCYsIE5hbWVzcGFjZXMqKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChT
dHJpbmdCdWlsZGVyJiwgY29uc3QgVGV4dCYpOwotICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVt
ZW50KFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopOwotCi0gICAg
dm9pZCBhcHBlbmRTdGFydFRhZyhjb25zdCBOb2RlJiwgTmFtZXNwYWNlcyogPSBudWxscHRyKTsK
LQotICAgIHZvaWQgYXBwZW5kVGV4dFN1YnN0cmluZyhjb25zdCBUZXh0JiwgdW5zaWduZWQgc3Rh
cnQsIHVuc2lnbmVkIGxlbmd0aCk7CiAKICAgICB2b2lkIGFwcGVuZE9wZW5UYWcoU3RyaW5nQnVp
bGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDbG9z
ZVRhZyhTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpOwogCi0gICAgdm9pZCBhcHBlbmRT
dGFydE1hcmt1cChTdHJpbmdCdWlsZGVyJiwgY29uc3QgTm9kZSYsIE5hbWVzcGFjZXMqKTsKKyAg
ICB2b2lkIGFwcGVuZE5vbkVsZW1lbnROb2RlKFN0cmluZ0J1aWxkZXImLCBjb25zdCBOb2RlJiwg
TmFtZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kRW5kTWFya3VwKFN0cmluZ0J1aWxkZXImLCBj
b25zdCBFbGVtZW50Jik7CiAKICAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFN0cmluZ0J1
aWxkZXImLCBjb25zdCBTdHJpbmcmLCBib29sIGlzU2VyaWFsaXppbmdIVE1MKTsKQEAgLTEwNCw4
ICsxMDMsNiBAQCBwcm90ZWN0ZWQ6CiAKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1l
bnQoY29uc3QgRWxlbWVudCYpOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRl
KGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKLSAgICBib29sIHNob3VsZFNlbGZDbG9z
ZShjb25zdCBFbGVtZW50Jik7Ci0gICAgYm9vbCBlbGVtZW50Q2Fubm90SGF2ZUVuZFRhZyhjb25z
dCBOb2RlJik7CiAgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChjb25zdCBUZXh0Jikg
Y29uc3Q7CiAKICAgICBWZWN0b3I8Tm9kZSo+KiBjb25zdCBtX25vZGVzOwpJbmRleDogU291cmNl
L1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvbWFya3VwLmNwcAkocmV2aXNpb24gMjM2OTk4KQorKysgU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksMTQgKzI0OSwxNCBAQCBw
cml2YXRlOgogCiAgICAgYm9vbCBzaG91bGRQcmVzZXJ2ZU1TT0xpc3RTdHlsZUZvckVsZW1lbnQo
Y29uc3QgRWxlbWVudCYpOwogCi0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXIm
IG91dCwgY29uc3QgRWxlbWVudCYsIGJvb2wgYWRkRGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNl
bGVjdHNOb2RlKTsKLSAgICB2b2lkIGFwcGVuZEVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0
LCBjb25zdCBFbGVtZW50Jikgb3ZlcnJpZGU7CisgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhTdHJp
bmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmLCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJh
bmdlRnVsbHlTZWxlY3RzTm9kZSk7CisgICAgdm9pZCBhcHBlbmRFbmRUYWcoU3RyaW5nQnVpbGRl
ciYgb3V0LCBjb25zdCBFbGVtZW50Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92
ZXJyaWRlOwogCiAgICAgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3Qg
VGV4dCYpIG92ZXJyaWRlOwotICAgIHZvaWQgYXBwZW5kRWxlbWVudChTdHJpbmdCdWlsZGVyJiBv
dXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqKSBvdmVycmlkZQorICAgIHZv
aWQgYXBwZW5kU3RhcnRUYWcoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBOYW1lc3BhY2VzKikgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIGFwcGVuZEVsZW1lbnQo
b3V0LCBlbGVtZW50LCBmYWxzZSwgRG9lc0Z1bGx5U2VsZWN0Tm9kZSk7CisgICAgICAgIGFwcGVu
ZFN0YXJ0VGFnKG91dCwgZWxlbWVudCwgZmFsc2UsIERvZXNGdWxseVNlbGVjdE5vZGUpOwogICAg
IH0KIAogICAgIE5vZGUqIGZpcnN0Q2hpbGQoTm9kZSYgbm9kZSkKQEAgLTM0NywxMSArMzQ3LDEx
IEBAIHZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OndyYXBXaXRoTm8KIHsKICAgICBTdHJp
bmdCdWlsZGVyIG1hcmt1cDsKICAgICBpZiAoaXM8RWxlbWVudD4obm9kZSkpCi0gICAgICAgIGFw
cGVuZEVsZW1lbnQobWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgY29udmVydEJsb2Nr
c1RvSW5saW5lcyAmJiBpc0Jsb2NrKCZub2RlKSwgcmFuZ2VGdWxseVNlbGVjdHNOb2RlKTsKKyAg
ICAgICAgYXBwZW5kU3RhcnRUYWcobWFya3VwLCBkb3duY2FzdDxFbGVtZW50Pihub2RlKSwgY29u
dmVydEJsb2Nrc1RvSW5saW5lcyAmJiBpc0Jsb2NrKCZub2RlKSwgcmFuZ2VGdWxseVNlbGVjdHNO
b2RlKTsKICAgICBlbHNlCi0gICAgICAgIGFwcGVuZFN0YXJ0TWFya3VwKG1hcmt1cCwgbm9kZSwg
bnVsbHB0cik7CisgICAgICAgIGFwcGVuZE5vbkVsZW1lbnROb2RlKG1hcmt1cCwgbm9kZSwgbnVs
bHB0cik7CiAgICAgbV9yZXZlcnNlZFByZWNlZGluZ01hcmt1cC5hcHBlbmQobWFya3VwLnRvU3Ry
aW5nKCkpOwotICAgIGFwcGVuZEVuZFRhZyhub2RlKTsKKyAgICBlbmRBcHBlbmRpbmdOb2RlKG5v
ZGUpOwogICAgIGlmIChtX25vZGVzKQogICAgICAgICBtX25vZGVzLT5hcHBlbmQoJm5vZGUpOwog
fQpAQCAtNDk1LDcgKzQ5NSw3IEBAIGJvb2wgU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnNob3Vs
ZFByZXMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU3R5bGVkTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVsZW1lbnQoU3RyaW5nQnVpbGRlciYgb3V0LCBjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBib29sIGFkZERpc3BsYXlJbmxpbmUsIFJhbmdlRnVsbHlTZWxlY3RzTm9kZSByYW5nZUZ1
bGx5U2VsZWN0c05vZGUpCit2b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFy
dFRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGJvb2wgYWRk
RGlzcGxheUlubGluZSwgUmFuZ2VGdWxseVNlbGVjdHNOb2RlIHJhbmdlRnVsbHlTZWxlY3RzTm9k
ZSkKIHsKICAgICBjb25zdCBib29sIGRvY3VtZW50SXNIVE1MID0gZWxlbWVudC5kb2N1bWVudCgp
LmlzSFRNTERvY3VtZW50KCk7CiAgICAgY29uc3QgYm9vbCBpc1Nsb3RFbGVtZW50ID0gaXM8SFRN
TFNsb3RFbGVtZW50PihlbGVtZW50KTsKQEAgLTU2MywxMiArNTYzLDEyIEBAIHZvaWQgU3R5bGVk
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW0KICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVs
ZW1lbnQpOwogfQogCi12b2lkIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRFbGVt
ZW50KFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgU3R5
bGVkTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhTdHJpbmdCdWlsZGVyJiBvdXQsIGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgaWYgKFVOTElLRUxZKGlzPEhUTUxTbG90RWxl
bWVudD4oZWxlbWVudCkpKQogICAgICAgICBvdXQuYXBwZW5kKCI8L3NwYW4+Iik7CiAgICAgZWxz
ZQotICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kRWxlbWVudChvdXQsIGVsZW1l
bnQpOworICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKG91dCwgZWxlbWVu
dCk7CiB9CiAKIE5vZGUqIFN0eWxlZE1hcmt1cEFjY3VtdWxhdG9yOjpzZXJpYWxpemVOb2Rlcyhj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCkBAIC02MDksNyArNjA5
LDcgQEAgTm9kZSogU3R5bGVkTWFya3VwQWNjdW11bGF0b3I6OnRyYXZlcnNlTgogCiAgICAgICAg
ICsrZGVwdGg7CiAgICAgICAgIGlmIChzaG91bGRFbWl0KQotICAgICAgICAgICAgYXBwZW5kU3Rh
cnRUYWcobm9kZSk7CisgICAgICAgICAgICBzdGFydEFwcGVuZGluZ05vZGUobm9kZSk7CiAKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfTsKQEAgLTYyMSw3ICs2MjEsNyBAQCBOb2RlKiBTdHls
ZWRNYXJrdXBBY2N1bXVsYXRvcjo6dHJhdmVyc2VOCiAgICAgICAgICAgICAtLWRlcHRoOwogICAg
ICAgICBpZiAoc2hvdWxkRW1pdCkgewogICAgICAgICAgICAgaWYgKGNsb3NpbmcpCi0gICAgICAg
ICAgICAgICAgYXBwZW5kRW5kVGFnKG5vZGUpOworICAgICAgICAgICAgICAgIGVuZEFwcGVuZGlu
Z05vZGUobm9kZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgd3JhcFdpdGhO
b2RlKG5vZGUpOwogICAgICAgICB9CkBAIC02ODksNyArNjg5LDcgQEAgYm9vbCBTdHlsZWRNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kTm9kZQogICAgICAgICAgICAgbV9pbk1TT0xpc3QgPSBmYWxz
ZTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBhcHBl
bmRTdGFydFRhZyhjb21tZW50Tm9kZSk7CisgICAgICAgIHN0YXJ0QXBwZW5kaW5nTm9kZShjb21t
ZW50Tm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBpZiAoaXM8SFRNTFN0
eWxlRWxlbWVudD4obm9kZSkpIHsKQEAgLTcxMiw3ICs3MTIsNyBAQCBib29sIFN0eWxlZE1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmROb2RlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgYXBwZW5kU3RyaW5nKCI8aGVhZD48c3R5bGUgY2xhc3M9XCIiIFdlYktpdE1TT0xpc3RR
dWlya3NTdHlsZSAiXCI+XG48IS0tXG4iKTsKLSAgICAgICAgYXBwZW5kVGV4dFN1YnN0cmluZyh0
ZXh0Q2hpbGQsIHN0YXJ0LCBtc29MaXN0RGVmaW5pdGlvbnNFbmQgLSBzdGFydCArIDMpOworICAg
ICAgICBhcHBlbmRTdHJpbmdWaWV3KFN0cmluZ1ZpZXcodGV4dENoaWxkLmRhdGEoKSkuc3Vic3Ry
aW5nKHN0YXJ0LCBtc29MaXN0RGVmaW5pdGlvbnNFbmQgLSBzdGFydCArIDMpKTsKICAgICAgICAg
YXBwZW5kU3RyaW5nKCJcbi0tPlxuPC9zdHlsZT48L2hlYWQ+Iik7CiAKICAgICAgICAgcmV0dXJu
IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNp
b24gMjM2OTk4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwMyw5ICsxMDMsOSBAQCBwcml2YXRlOgogICAgIERvY3VtZW50JiBt
X2RvY3VtZW50OwogCiAgICAgdm9pZCBhcHBlbmRUZXh0KFN0cmluZ0J1aWxkZXImLCBjb25zdCBU
ZXh0Jikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhcHBlbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImLCBj
b25zdCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOworICAgIHZvaWQgYXBwZW5kU3Rh
cnRUYWcoU3RyaW5nQnVpbGRlciYsIGNvbnN0IEVsZW1lbnQmLCBOYW1lc3BhY2VzKikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFN0cmluZ0J1aWxkZXImLCBjb25z
dCBFbGVtZW50JiwgTmFtZXNwYWNlcyopIG92ZXJyaWRlOwotICAgIHZvaWQgYXBwZW5kRW5kRWxl
bWVudChTdHJpbmdCdWlsZGVyJiwgY29uc3QgRWxlbWVudCYpIG92ZXJyaWRlOworICAgIHZvaWQg
YXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImLCBjb25zdCBFbGVtZW50Jikgb3ZlcnJpZGU7CiB9
OwogCiBQYWdlU2VyaWFsaXplcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIsIERvY3VtZW50
JiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCkBAIC0xMjUsMTAgKzEyNSwxMCBAQCB2
b2lkIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjCiAgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7CiB9CiAKLXZvaWQgUGFnZVNlcmlhbGl6
ZXI6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChTdHJpbmdCdWls
ZGVyJiBvdXQsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMp
Cit2b2lkIFBhZ2VTZXJpYWxpemVyOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZFN0YXJ0VGFnKFN0cmluZ0J1aWxkZXImIG91dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCwgTmFt
ZXNwYWNlcyogbmFtZXNwYWNlcykKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxl
bWVudCkpCi0gICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxl
bWVudCwgbmFtZXNwYWNlcyk7CisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRTdGFy
dFRhZyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOwogCiAgICAgaWYgKGVsZW1lbnQuaGFzVGFn
TmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CiAgICAgICAgIG91dC5hcHBlbmRMaXRlcmFsKCI8
bWV0YSBjaGFyc2V0PVwiIik7CkBAIC0xNTgsMTAgKzE1OCwxMCBAQCB2b2lkIFBhZ2VTZXJpYWxp
emVyOjpTZXJpYWxpemVyTWFya3VwQWNjCiAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgQXR0cmlidXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGZyYW1lT3duZXIpLCB1cmwu
c3RyaW5nKCkpLCBuYW1lc3BhY2VzKTsKIH0KIAotdm9pZCBQYWdlU2VyaWFsaXplcjo6U2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRFbGVtZW50KFN0cmluZ0J1aWxkZXImIG91
dCwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OlNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKFN0cmluZ0J1aWxkZXImIG91dCwgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxl
bWVudCkpCi0gICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRFbGVtZW50KG91dCwg
ZWxlbWVudCk7CisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcob3V0LCBl
bGVtZW50KTsKIH0KIAogUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U+JiByZXNvdXJjZXMpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>