<?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>185238</bug_id>
          
          <creation_ts>2018-05-02 22:40:09 -0700</creation_ts>
          <short_desc>Using image map inside a shadow tree results hits a release assert in DocumentOrderedMap::add</short_desc>
          <delta_ts>2018-05-03 16:44:04 -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>DOM</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>ews-watchlist</cc>
    
    <cc>koivisto</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1420021</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-02 22:40:09 -0700</bug_when>
    <thetext>Using image map results in a release assertion inside DocumentOrderedMap::add while inserting an image element with usemap attribute.

e.g.

ASSERTION FAILED: &amp;element.treeScope() == &amp;treeScope
dom/DocumentOrderedMap.cpp(52) : void WebCore::DocumentOrderedMap::add(const WTF::AtomicStringImpl &amp;, WebCore::Element &amp;, const WebCore::TreeScope &amp;)
1   0x514f22079 WTFCrash
2   0x514f22099 WTFCrashWithSecurityImplication
3   0x50739c920 WebCore::DocumentOrderedMap::add(WTF::AtomicStringImpl const&amp;, WebCore::Element&amp;, WebCore::TreeScope const&amp;)
4   0x507547135 WebCore::TreeScope::addImageElementByUsemap(WTF::AtomicStringImpl const&amp;, WebCore::HTMLImageElement&amp;)
5   0x507745d83 WebCore::HTMLImageElement::insertedIntoAncestor(WebCore::Node::InsertionType, WebCore::ContainerNode&amp;)
6   0x507322034 WebCore::notifyNodeInsertedIntoDocument(WebCore::ContainerNode&amp;, WebCore::Node&amp;, WebCore::TreeScopeChange, WTF::Vector&lt;WTF::Ref&lt;WebCore::Node, WTF::DumbPtrTraits&lt;WebCore::Node&gt; &gt;, 11ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt;&amp;)
7   0x507321ec2 WebCore::notifyChildNodeInserted(WebCore::ContainerNode&amp;, WebCore::Node&amp;)
8   0x50731f825 void WebCore::executeNodeInsertionWithScriptAssertion&lt;WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck(WebCore::Node&amp;)::$_4&gt;(WebCore::ContainerNode&amp;, WebCore::Node&amp;, WebCore::ContainerNode::ChildChangeSource, WebCore::ReplacedAllChildren, WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck(WebCore::Node&amp;)::$_4)
9   0x50731cd1b WebCore::ContainerNode::appendChildWithoutPreInsertionValidityCheck(WebCore::Node&amp;)
10  0x50731f784 WebCore::ContainerNode::appendChild(WebCore::Node&amp;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420034</commentid>
    <comment_count>1</comment_count>
      <attachid>339393</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 00:11:27 -0700</bug_when>
    <thetext>Created attachment 339393
Fixes the crash</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420035</commentid>
    <comment_count>2</comment_count>
      <attachid>339394</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 00:12:48 -0700</bug_when>
    <thetext>Created attachment 339394
Fixed the ordering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420036</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-03 00:14:10 -0700</bug_when>
    <thetext>Attachment 339394 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLImageElement.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420041</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 00:25:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/39503288&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420097</commentid>
    <comment_count>5</comment_count>
      <attachid>339394</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-05-03 05:35:47 -0700</bug_when>
    <thetext>Comment on attachment 339394
Fixed the ordering

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

&gt; Source/WebCore/dom/Document.cpp:-749
&gt; -void Document::addImageElementByUsemap(const AtomicStringImpl&amp; name, HTMLImageElement&amp; element)
&gt; -{
&gt; -    return m_imagesByUsemap.add(name, element, *this);
&gt; -}

Is there anything else in Document that should be in TreeScope?

&gt; Source/WebCore/dom/Document.h:-385
&gt; -    void addImageElementByUsemap(const AtomicStringImpl&amp;, HTMLImageElement&amp;);
&gt; -    void removeImageElementByUsemap(const AtomicStringImpl&amp;, HTMLImageElement&amp;);
&gt; -    HTMLImageElement* imageElementByUsemap(const AtomicStringImpl&amp;) const;
&gt; -

You forgot to remove the Document::m_imagesByUsemap member.

&gt; Source/WebCore/dom/TreeScope.cpp:59
&gt;  struct SameSizeAsTreeScope {
&gt; -    void* pointers[8];
&gt; +    void* pointers[9];
&gt;  };
&gt;  
&gt;  COMPILE_ASSERT(sizeof(TreeScope) == sizeof(SameSizeAsTreeScope), treescope_should_stay_small);

Is this assert is even valuable? TreeScope is not a very high volume type in itself and vast majority of per-scope memory use is elsewhere.

&gt; Source/WebCore/dom/TreeScope.cpp:86
&gt; +    m_elementsByName = nullptr;

Ninja bugfix!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420098</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2018-05-03 05:37:30 -0700</bug_when>
    <thetext>r=me (cq- for not removing Document::m_imagesByUsemap)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420302</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 13:51:48 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #5)
&gt; Comment on attachment 339394 [details]
&gt; Fixed the ordering
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=339394&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:-749
&gt; &gt; -void Document::addImageElementByUsemap(const AtomicStringImpl&amp; name, HTMLImageElement&amp; element)
&gt; &gt; -{
&gt; &gt; -    return m_imagesByUsemap.add(name, element, *this);
&gt; &gt; -}
&gt; 
&gt; Is there anything else in Document that should be in TreeScope?

We no longer have any DocumentOrderedMap there. We should probably rename it to TreeScopeOrderedMap once this patch is landed so that nobody will try to use it on Document in the future.

&gt; &gt; Source/WebCore/dom/Document.h:-385
&gt; &gt; -    void addImageElementByUsemap(const AtomicStringImpl&amp;, HTMLImageElement&amp;);
&gt; &gt; -    void removeImageElementByUsemap(const AtomicStringImpl&amp;, HTMLImageElement&amp;);
&gt; &gt; -    HTMLImageElement* imageElementByUsemap(const AtomicStringImpl&amp;) const;
&gt; &gt; -
&gt; 
&gt; You forgot to remove the Document::m_imagesByUsemap member.

Oops, will fix.

&gt; &gt; Source/WebCore/dom/TreeScope.cpp:59
&gt; &gt;  struct SameSizeAsTreeScope {
&gt; &gt; -    void* pointers[8];
&gt; &gt; +    void* pointers[9];
&gt; &gt;  };
&gt; &gt;  
&gt; &gt;  COMPILE_ASSERT(sizeof(TreeScope) == sizeof(SameSizeAsTreeScope), treescope_should_stay_small);
&gt; 
&gt; Is this assert is even valuable? TreeScope is not a very high volume type in
&gt; itself and vast majority of per-scope memory use is elsewhere.

It&apos;s created for every shadow root; e.g. every input element. I&apos;ve seen quite a bit of time allocating &amp; initializing these instance variables during Speedometer 2. We may need to re-think about the structure of these shadow-root related data structures, and make them more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420306</commentid>
    <comment_count>8</comment_count>
      <attachid>339456</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 13:54:54 -0700</bug_when>
    <thetext>Created attachment 339456
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420341</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-05-03 14:32:10 -0700</bug_when>
    <thetext>Attachment 339456 did not pass style-queue:


ERROR: Source/WebCore/html/HTMLImageElement.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420342</commentid>
    <comment_count>10</comment_count>
      <attachid>339456</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-03 14:34:15 -0700</bug_when>
    <thetext>Comment on attachment 339456
Patch for landing

Clearing flags on attachment: 339456

Committed r231329: &lt;https://trac.webkit.org/changeset/231329&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420343</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-05-03 14:34:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1420426</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-05-03 16:44:04 -0700</bug_when>
    <thetext>Reverted the unrelated change in https://trac.webkit.org/changeset/231334/webkit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339393</attachid>
            <date>2018-05-03 00:11:27 -0700</date>
            <delta_ts>2018-05-03 00:12:48 -0700</delta_ts>
            <desc>Fixes the crash</desc>
            <filename>fix185238.patch</filename>
            <type>text/plain</type>
            <size>16016</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIzMTAzMSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE4LTA1LTAyICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5nIGltYWdlIG1hcCBpbnNpZGUgYSBzaGFk
b3cgdHJlZSByZXN1bHRzIGhpdHMgYSByZWxlYXNlIGFzc2VydCBpbiBEb2N1bWVudE9yZGVyZWRN
YXA6OmFkZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg1MjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1pbi1uZXN0ZWQtc2hhZG93LXRyZWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9pbWFnZW1hcC1pbi1uZXN0ZWQtc2hhZG93
LXRyZWUuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hh
ZG93LXRyZWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9pbWFn
ZW1hcC1pbi1zaGFkb3ctdHJlZS5odG1sOiBBZGRlZC4KKwogMjAxOC0wNC0yNSAgQ2FybG9zIEFs
YmVydG8gTG9wZXogUGVyZXogIDxjbG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbV1BFXVtE
ZWJ1Z10gVGVzdCBnYXJkZW5pbmcgb2YgRU1FIHJlbGF0ZWQgdGVzdHMuCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9pbWFnZW1hcC1pbi1zaGFkb3ctdHJlZS1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRy
ZWUtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2ltYWdlbWFwLWluLXNoYWRvdy10cmVlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUgQEAKK1RoaXMgdGVzdHMgYWN0aXZpbmcgYW4gaW1hZ2UgbWFwIGFyZWEgaW5zaWRl
IGEgc2hhZG93IHRyZWUuIFdlYktpdCBzaG91bGQgbm90IGhpdCBhbnkgYXNzZXJ0aW9ucy4KK1Rv
IG1hbnVhbGx5IHRlc3QsIGNsaWNrIG9uIGdyZWVuIGJveCBvbiB0aGUgbGVmdCB1cHBlciBxdWFk
cmFudC4KKworUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZW1hcC1p
bi1zaGFkb3ctdHJlZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2ltYWdlbWFwLWluLXNoYWRvdy10cmVlLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDcxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2Ny
aXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3VpLWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8cD5UaGlz
IHRlc3RzIGFjdGl2aW5nIGFuIGltYWdlIG1hcCBhcmVhIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBX
ZWJLaXQgc2hvdWxkIG5vdCBoaXQgYW55IGFzc2VydGlvbnMuPGJyPgorVG8gbWFudWFsbHkgdGVz
dCwgY2xpY2sgb24gZ3JlZW4gYm94IG9uIHRoZSBsZWZ0IHVwcGVyIHF1YWRyYW50LjwvcD4KKzxk
aXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8c2NyaXB0PgorCitjb25zdCBob3N0ID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgnZGl2Jyk7Citkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpOwor
Citjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coe21vZGU6ICdjbG9zZWQnfSk7
CitzaGFkb3dSb290LmlubmVySFRNTCA9IGAKKzxpbWcgc3JjPSJyZXNvdXJjZXMvZ3JlZW4tNDAw
eDQwMC5wbmciIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiB1c2VtYXA9IiNpbWFnZW1hcCIgb25s
b2FkPSJzdGFydFRlc3QoKSI+Cis8bWFwIG5hbWU9ImltYWdlbWFwIj4KKyAgICA8YXJlYSBpZD0i
YXJlYSIgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMCwwLDIwMCwyMDAiIGhyZWY9IiMiIG9uY2xpY2s9
ImRpZENsaWNrKGV2ZW50KSIgdGFiaW5kZXg9IjAiPgorPC9tYXA+YDsKK2NvbnN0IHJlY3QgPSBo
b3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworCitmdW5jdGlvbiBzdGFydFRlc3QoKQorewor
ICAgIGlmICghd2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgIHJldHVybjsKKyAgICBVSUhlbHBl
ci5hY3RpdmF0ZUF0KHJlY3QueCArIDEwMCwgcmVjdC55ICsgMTAwKS50aGVuKGNoZWNrKTsKK30K
KworbGV0IGRpZENsaWNrV2FzQ2FsbGVkID0gZmFsc2U7CitmdW5jdGlvbiBkaWRDbGljayhldmVu
dCkKK3sKKyAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworICAgIGRpZENsaWNrV2FzQ2FsbGVk
ID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gY2hlY2soKQoreworICAgIGxldCByZXN1bHQgPSAnJzsK
KyAgICBpZiAoIWRpZENsaWNrV2FzQ2FsbGVkKQorICAgICAgICByZXN1bHQgPSAnRkFJTCAtIEph
dmFTY3JpcHQgd2FzIG5vdCBleGVjdXRlZCc7CisgICAgZWxzZSBpZiAoc2hhZG93Um9vdC5hY3Rp
dmVFbGVtZW50ICE9IHNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ2FyZWEnKSkKKyAgICAgICAg
cmVzdWx0ID0gJ0ZBSUwgLSBUaGUgZWxlbWVudCB3YXMgbm90IGZvY3VzZWQnOworICAgIGVsc2UK
KyAgICAgICAgcmVzdWx0ID0gJ1BBU1MnOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdy
ZXN1bHQnKS50ZXh0Q29udGVudCA9IHJlc3VsdDsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIp
CisgICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworfQorCitpZiAod2luZG93LnRlc3RS
dW5uZXIpIHsKKyAgICBzZXRUaW1lb3V0KCgpID0+IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpLCAz
MDAwKTsKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICB0ZXN0UnVubmVyLmR1
bXBBc1RleHQoKTsKK30gZWxzZSB7CisgICAgaG9zdC5vbmNsaWNrID0gKGV2ZW50KSA9PiB7Cisg
ICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisKKyAgICAgICAgY29uc3QgaXNJblVwcGVy
TGVmdFF1YWRyYW50ID0gcmVjdC54IDwgZXZlbnQucGFnZVggJiYgZXZlbnQucGFnZVggPCByZWN0
LnggKyAyMDAKKyAgICAgICAgICAgICYmIHJlY3QueSA8IGV2ZW50LnBhZ2VZICYmIGV2ZW50LnBh
Z2VZIDwgcmVjdC55ICsgMjAwOworICAgICAgICBpZiAoIWlzSW5VcHBlckxlZnRRdWFkcmFudCkg
eworICAgICAgICAgICAgYWxlcnQoJ1BsZWFzZSBjbGljayBvbiB0aGUgdXBwZXIgbGVmdCBxdWFk
cmFudCBvZiB0aGUgZ3JlZW4gYm94LicpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgY2hlY2soKTsKKyAgICB9OworfQorCis8L3NjcmlwdD4KKzwvYm9keT4KKzwv
aGVhZD4KKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTI5NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDQ0IEBACiAyMDE4
LTA1LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCisgICAgICAgIFVzaW5n
IGltYWdlIG1hcCBpbnNpZGUgYSBzaGFkb3cgdHJlZSByZXN1bHRzIGhpdHMgYSByZWxlYXNlIGFz
c2VydCBpbiBEb2N1bWVudE9yZGVyZWRNYXA6OmFkZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IERvY3VtZW50T3Jk
ZXJlZE1hcCBmb3IgdGhlIGltYWdlIGVsZW1lbnRzIHdpdGggdXNlbWFwIGJlaW5nIHN0b3JlZCBp
biBEb2N1bWVudAorICAgICAgICBldmVuIGlmIHRob3NlIGltYWdlIGVsZW1lbnRzIHdlcmUgaW4g
YSBzaGFkb3cgdHJlZS4gRml4ZWQgdGhlIGJ1ZyBieSBtb3ZpbmcgdGhlIG1hcCB0byBUcmVlU2Nv
cGUuCisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRv
dy10cmVlLmh0bWwKKyAgICAgICAgICAgICAgZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93
LXRyZWUuaHRtbAorCisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjphZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IE1vdmVkIHRvIFRyZWVTY29w
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1h
cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5VXNl
bWFwIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICog
ZG9tL1RyZWVTY29wZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmRlc3Ryb3lU
cmVlU2NvcGVEYXRhKTogQ2xlYXIgbV9pbWFnZXNCeVVzZW1hcCBhcyB3ZWxsIGFzIG1fZWxlbWVu
dHNCeU5hbWUuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwIGNvbnN0
KTogUmVtb3ZlZCB0aGUgY29kZSB0byBwYXJzZSB1c2VtYXAuIFJlbmRlckltYWdlOjppbWFnZU1h
cCgpCisgICAgICAgIHdoaWNoIHVzZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJh
dyB2YWx1ZSBvZiB0aGUgdXNlbWFwIGNvbnRlbnQgYXR0cmlidXRlIG5vdyBjYWxscyBpdAorICAg
ICAgICB2aWEgSFRNTEltYWdlRWxlbWVudDo6YXNzb2NpYXRlZE1hcEVsZW1lbnQoKSwgd2hpY2gg
dXNlcyB0aGUgcGFyc2VkIHVzZW1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6YWRk
SW1hZ2VFbGVtZW50QnlVc2VtYXApOiBNb3ZlZCBmcm9tIERvY3VtZW50LgorICAgICAgICAoV2Vi
Q29yZTo6VHJlZVNjb3BlOjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVNjb3BlOjppbWFnZUVsZW1lbnRCeVVzZW1hcCBjb25zdCk6IERp
dHRvLgorICAgICAgICAqIGRvbS9UcmVlU2NvcGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvQW5jZXN0b3IpOiBUaGlzIGltYWdlIGVsZW1lbnQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBh
IG1hcCBlbGVtZW50CisgICAgICAgIGlmIGl0J3MgY29ubmVjdGVkIHRvIGEgZG9jdW1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFzc29jaWF0ZWRNYXBFbGVtZW50
IGNvbnN0KToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBo
dG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50
OjppbWFnZUVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6aW1hZ2VNYXAgY29uc3QpOgorCisyMDE4LTA1
LTAyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCiAgICAgICAgIFJlbW92ZSBz
dXBlcmZsdW91cyBjaGVjayBmb3IgYSBudWxsIGF0dHJpYnV0ZSB2YWx1ZSBjaGVjayBpbiBFbGVt
ZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MjI3CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMjMxMDMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzQzLDIxICs3NDMsNiBAQAogICAgIG1fZWxlbWVudHNCeUFjY2Vz
c0tleS5jbGVhcigpOwogfQogCi12b2lkIERvY3VtZW50OjphZGRJbWFnZUVsZW1lbnRCeVVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50
KQotewotICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmFkZChuYW1lLCBlbGVtZW50LCAqdGhp
cyk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6OnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0g
ICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAucmVtb3ZlKG5hbWUsIGVsZW1lbnQpOwotfQotCi1I
VE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudDo6aW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRv
bWljU3RyaW5nSW1wbCYgbmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1h
cC5nZXRFbGVtZW50QnlVc2VtYXAobmFtZSwgKnRoaXMpOwotfQotCiBFeGNlcHRpb25PcjxTZWxl
Y3RvclF1ZXJ5Jj4gRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5n
JiBzZWxlY3RvclN0cmluZykKIHsKICAgICBpZiAoc2VsZWN0b3JTdHJpbmcuaXNFbXB0eSgpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDIzMTAzMSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNzksMTAgKzM3OSw2IEBACiAg
ICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5QWNjZXNzS2V5KGNvbnN0IFN0cmluZyYga2V5KTsKICAg
ICB2b2lkIGludmFsaWRhdGVBY2Nlc3NLZXlNYXAoKTsKIAotICAgIHZvaWQgYWRkSW1hZ2VFbGVt
ZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1lbnQmKTsK
LSAgICB2b2lkIHJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0lt
cGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7Ci0gICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVt
ZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OwotCiAgICAgRXhjZXB0
aW9uT3I8U2VsZWN0b3JRdWVyeSY+IHNlbGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAgICAgdm9pZCBjbGVhclNlbGVjdG9yUXVlcnlDYWNoZSgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vVHJlZVNjb3BlLmNwcAkocmV2aXNpb24gMjMxMDMxKQorKysgU291cmNlL1dlYkNvcmUvZG9t
L1RyZWVTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCkBAIC01Miw3ICs1Myw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIHN0cnVjdCBTYW1lU2l6ZUFzVHJlZVNjb3BlIHsKLSAgICB2b2lkKiBw
b2ludGVyc1s4XTsKKyAgICB2b2lkKiBwb2ludGVyc1s5XTsKIH07CiAKIENPTVBJTEVfQVNTRVJU
KHNpemVvZihUcmVlU2NvcGUpID09IHNpemVvZihTYW1lU2l6ZUFzVHJlZVNjb3BlKSwgdHJlZXNj
b3BlX3Nob3VsZF9zdGF5X3NtYWxsKTsKQEAgLTgyLDcgKzgzLDkgQEAKIHZvaWQgVHJlZVNjb3Bl
OjpkZXN0cm95VHJlZVNjb3BlRGF0YSgpCiB7CiAgICAgbV9lbGVtZW50c0J5SWQgPSBudWxscHRy
OworICAgIG1fZWxlbWVudHNCeU5hbWUgPSBudWxscHRyOwogICAgIG1faW1hZ2VNYXBzQnlOYW1l
ID0gbnVsbHB0cjsKKyAgICBtX2ltYWdlc0J5VXNlbWFwID0gbnVsbHB0cjsKICAgICBtX2xhYmVs
c0J5Rm9yQXR0cmlidXRlID0gbnVsbHB0cjsKIH0KIApAQCAtMjUwLDE3ICsyNTMsMzIgQEAKICAg
ICBtX2ltYWdlTWFwc0J5TmFtZS0+cmVtb3ZlKCpuYW1lLCBpbWFnZU1hcCk7CiB9CiAKLUhUTUxN
YXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25z
dAorSFRNTE1hcEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmICghbV9pbWFnZU1hcHNCeU5hbWUpCisgICAgaWYg
KCFtX2ltYWdlTWFwc0J5TmFtZSB8fCAhbmFtZS5pbXBsKCkpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIGF1dG8gaGFzaFBvc2l0aW9uID0gdXJsLmZpbmQoJyMnKTsKLSAgICBpZiAoaGFz
aFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0
RWxlbWVudEJ5TWFwTmFtZSgqbmFtZS5pbXBsKCksICp0aGlzKTsKK30KKwordm9pZCBUcmVlU2Nv
cGU6OmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUs
IEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKCFtX2ltYWdlc0J5VXNlbWFw
KQorICAgICAgICBtX2ltYWdlc0J5VXNlbWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb2N1bWVudE9y
ZGVyZWRNYXA+KCk7CisgICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAtPmFkZChuYW1lLCBlbGVt
ZW50LCAqdGhpcyk7Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVt
ZW50KQoreworICAgIGlmICghbV9pbWFnZXNCeVVzZW1hcCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1faW1hZ2VzQnlVc2VtYXAtPnJlbW92ZShuYW1lLCBlbGVtZW50KTsKK30KKworSFRNTEltYWdl
RWxlbWVudCogVHJlZVNjb3BlOjppbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJiBuYW1lKSBjb25zdAoreworICAgIGlmICghbV9pbWFnZXNCeVVzZW1hcCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgU3RyaW5nIG5hbWUgPSB1cmwuc3Vic3RyaW5nKGhhc2hQ
b3NpdGlvbiArIDEpOwotICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIG1faW1hZ2VNYXBzQnlOYW1lLT5nZXRFbGVtZW50QnlNYXBOYW1l
KCpBdG9taWNTdHJpbmcobmFtZSkuaW1wbCgpLCAqdGhpcyk7CisgICAgcmV0dXJuIG1faW1hZ2Vz
QnlVc2VtYXAtPmdldEVsZW1lbnRCeVVzZW1hcChuYW1lLCAqdGhpcyk7CiB9CiAKIHZvaWQgVHJl
ZVNjb3BlOjphZGRMYWJlbChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBmb3JBdHRyaWJ1dGVWYWx1
ZSwgSFRNTExhYmVsRWxlbWVudCYgZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJ
KHJldmlzaW9uIDIzMTAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogY2xhc3MgQ29udGFpbmVyTm9kZTsKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKK2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CiBjbGFz
cyBIVE1MTGFiZWxFbGVtZW50OwogY2xhc3MgSFRNTE1hcEVsZW1lbnQ7CiBjbGFzcyBMYXlvdXRQ
b2ludDsKQEAgLTgwLDggKzgxLDEyIEBACiAKICAgICB2b2lkIGFkZEltYWdlTWFwKEhUTUxNYXBF
bGVtZW50Jik7CiAgICAgdm9pZCByZW1vdmVJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYpOwotICAg
IEhUTUxNYXBFbGVtZW50KiBnZXRJbWFnZU1hcChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7Cisg
ICAgSFRNTE1hcEVsZW1lbnQqIGdldEltYWdlTWFwKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0
OwogCisgICAgdm9pZCBhZGRJbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOworICAgIHZvaWQgcmVtb3ZlSW1hZ2VFbGVtZW50QnlV
c2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVsZW1lbnQmKTsKKyAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJ
bXBsJikgY29uc3Q7CisKICAgICAvLyBGb3IgYWNjZXNzaWJpbGl0eS4KICAgICBib29sIHNob3Vs
ZENhY2hlTGFiZWxzQnlGb3JBdHRyaWJ1dGUoKSBjb25zdCB7IHJldHVybiAhIW1fbGFiZWxzQnlG
b3JBdHRyaWJ1dGU7IH0KICAgICB2b2lkIGFkZExhYmVsKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwm
IGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVtZW50Jik7CkBAIC0xMjQsNiArMTI5LDcg
QEAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRPcmRlcmVkTWFwPiBtX2VsZW1lbnRzQnlJ
ZDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRPcmRlcmVkTWFwPiBtX2VsZW1lbnRzQnlO
YW1lOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb2N1bWVudE9yZGVyZWRNYXA+IG1faW1hZ2VNYXBz
QnlOYW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEb2N1bWVudE9yZGVyZWRNYXA+IG1faW1hZ2Vz
QnlVc2VtYXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9sYWJl
bHNCeUZvckF0dHJpYnV0ZTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxJZFRhcmdldE9ic2VydmVy
UmVnaXN0cnk+IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzEwMzEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2
ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBh
cnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxQaWN0dXJlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJIVE1MU3Jjc2V0UGFyc2VyLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMjExLDEy
ICsyMTIsMTIgQEAKICAgICAgICAgc2VsZWN0SW1hZ2VTb3VyY2UoKTsKICAgICBlbHNlIGlmIChu
YW1lID09IHVzZW1hcEF0dHIpIHsKICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkgJiYgIW1fcGFy
c2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVs
ZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAg
ICB0cmVlU2NvcGUoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAu
aW1wbCgpLCAqdGhpcyk7CiAKICAgICAgICAgbV9wYXJzZWRVc2VtYXAgPSBwYXJzZUhUTUxIYXNo
TmFtZVJlZmVyZW5jZSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKGlzQ29ubmVjdGVkKCkgJiYgIW1f
cGFyc2VkVXNlbWFwLmlzTnVsbCgpKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5hZGRJbWFnZUVs
ZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgICAg
ICB0cmVlU2NvcGUoKS5hZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1w
bCgpLCAqdGhpcyk7CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAg
ICAgICAgLy8gRklYTUU6IGltYWdlcyBkb24ndCBzdXBwb3J0IGJsZW5kIG1vZGVzIGluIHRoZWly
IGNvbXBvc2l0aW5nIGF0dHJpYnV0ZS4KICAgICAgICAgQmxlbmRNb2RlIGJsZW5kT3AgPSBCbGVu
ZE1vZGVOb3JtYWw7CkBAIC0zMjAsNyArMzIxLDcgQEAKICAgICBOb2RlOjpJbnNlcnRlZEludG9B
bmNlc3RvclJlc3VsdCBpbnNlcnROb3RpZmljYXRpb25SZXF1ZXN0ID0gSFRNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b0FuY2VzdG9yKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsK
IAogICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQgJiYgIW1fcGFyc2Vk
VXNlbWFwLmlzTnVsbCgpKQotICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5VXNl
bWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgdHJlZVNjb3BlKCku
YWRkSW1hZ2VFbGVtZW50QnlVc2VtYXAoKm1fcGFyc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwog
CiAgICAgaWYgKGlzPEhUTUxQaWN0dXJlRWxlbWVudD4ocGFyZW50Tm9kZSgpKSkgewogICAgICAg
ICBzZXRQaWN0dXJlRWxlbWVudCgmZG93bmNhc3Q8SFRNTFBpY3R1cmVFbGVtZW50PigqcGFyZW50
Tm9kZSgpKSk7CkBAIC0zNDEsNyArMzQyLDcgQEAKICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdF
bGVtZW50KHRoaXMpOwogCiAgICAgaWYgKHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1
bWVudCAmJiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVt
b3ZlSW1hZ2VFbGVtZW50QnlVc2VtYXAoKm1fcGFyc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOwor
ICAgICAgICB0cmVlU2NvcGUoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRV
c2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAKICAgICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50Pihw
YXJlbnROb2RlKCkpKQogICAgICAgICBzZXRQaWN0dXJlRWxlbWVudChudWxscHRyKTsKQEAgLTQ4
NCw2ICs0ODUsMTEgQEAKICAgICByZXR1cm4gbV9wYXJzZWRVc2VtYXAuaW1wbCgpID09ICZuYW1l
OwogfQogCitIVE1MTWFwRWxlbWVudCogSFRNTEltYWdlRWxlbWVudDo6YXNzb2NpYXRlZE1hcEVs
ZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiB0cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChtX3Bh
cnNlZFVzZW1hcCk7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6
YWx0KCkgY29uc3QKIHsKICAgICByZXR1cm4gYXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlv
bihhbHRBdHRyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCShy
ZXZpc2lvbiAyMzEwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBIVE1MTWFwRWxlbWVudDsKIAogc3RydWN0
IEltYWdlQ2FuZGlkYXRlOwogCkBAIC02Myw2ICs2NCw3IEBACiAgICAgdm9pZCBzZXRMb2FkTWFu
dWFsbHkoYm9vbCBsb2FkTWFudWFsbHkpIHsgbV9pbWFnZUxvYWRlci5zZXRMb2FkTWFudWFsbHko
bG9hZE1hbnVhbGx5KTsgfQogCiAgICAgYm9vbCBtYXRjaGVzVXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmKSBjb25zdDsKKyAgICBIVE1MTWFwRWxlbWVudCogYXNzb2NpYXRlZE1hcEVsZW1l
bnQoKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0
KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAyMzEwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODAsNyArODAsNyBAQAogewogICAgIGlmIChtX25hbWUuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5p
bWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9uYW1lLmltcGwoKSk7CisgICAgcmV0dXJuIHRyZWVTY29w
ZSgpLmltYWdlRWxlbWVudEJ5VXNlbWFwKCptX25hbWUuaW1wbCgpKTsKIH0KIAogdm9pZCBIVE1M
TWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAkocmV2aXNpb24gMjMxMDMxKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU2LDggKzY1NiwxMCBAQAog
CiBIVE1MTWFwRWxlbWVudCogUmVuZGVySW1hZ2U6OmltYWdlTWFwKCkgY29uc3QKIHsKLSAgICBI
VE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IGlzPEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkg
PyBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihlbGVtZW50KCkpIDogbnVsbHB0cjsKLSAgICBy
ZXR1cm4gaW1hZ2UgPyBpbWFnZS0+dHJlZVNjb3BlKCkuZ2V0SW1hZ2VNYXAoaW1hZ2UtPmF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24odXNlbWFwQXR0cikpIDogbnVsbHB0cjsKKyAgICBh
dXRvKiBpbWFnZUVsZW1lbnQgPSBlbGVtZW50KCk7CisgICAgaWYgKCFpbWFnZUVsZW1lbnQgfHwg
IWlzPEhUTUxJbWFnZUVsZW1lbnQ+KGltYWdlRWxlbWVudCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBkb3duY2FzdDxIVE1MSW1hZ2VFbGVtZW50PihpbWFnZUVsZW1lbnQp
LT5hc3NvY2lhdGVkTWFwRWxlbWVudCgpOwogfQogCiBib29sIFJlbmRlckltYWdlOjpub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVzdWx0
LCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339394</attachid>
            <date>2018-05-03 00:12:48 -0700</date>
            <delta_ts>2018-05-03 13:54:51 -0700</delta_ts>
            <desc>Fixed the ordering</desc>
            <filename>fix185238b.patch</filename>
            <type>text/plain</type>
            <size>22769</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTI5NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTA1LTAzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5nIGltYWdlIG1hcCBpbnNp
ZGUgYSBzaGFkb3cgdHJlZSByZXN1bHRzIGhpdHMgYSByZWxlYXNlIGFzc2VydCBpbiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmFkZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IERvY3VtZW50T3JkZXJlZE1hcCBmb3IgdGhl
IGltYWdlIGVsZW1lbnRzIHdpdGggdXNlbWFwIGJlaW5nIHN0b3JlZCBpbiBEb2N1bWVudAorICAg
ICAgICBldmVuIGlmIHRob3NlIGltYWdlIGVsZW1lbnRzIHdlcmUgaW4gYSBzaGFkb3cgdHJlZS4g
Rml4ZWQgdGhlIGJ1ZyBieSBtb3ZpbmcgdGhlIG1hcCB0byBUcmVlU2NvcGUuCisKKyAgICAgICAg
VGVzdDogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLmh0bWwKKyAg
ICAgICAgICAgICAgZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUuaHRtbAorCisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojph
ZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IE1vdmVkIHRvIFRyZWVTY29wZS4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5VXNlbWFwIGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmRlc3Ryb3lUcmVlU2NvcGVEYXRhKTog
Q2xlYXIgbV9pbWFnZXNCeVVzZW1hcCBhcyB3ZWxsIGFzIG1fZWxlbWVudHNCeU5hbWUuCisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwIGNvbnN0KTogUmVtb3ZlZCB0aGUg
Y29kZSB0byBwYXJzZSB1c2VtYXAuIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCisgICAgICAgIHdo
aWNoIHVzZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJhdyB2YWx1ZSBvZiB0aGUg
dXNlbWFwIGNvbnRlbnQgYXR0cmlidXRlIG5vdyBjYWxscyBpdAorICAgICAgICB2aWEgSFRNTElt
YWdlRWxlbWVudDo6YXNzb2NpYXRlZE1hcEVsZW1lbnQoKSwgd2hpY2ggdXNlcyB0aGUgcGFyc2Vk
IHVzZW1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkSW1hZ2VFbGVtZW50QnlV
c2VtYXApOiBNb3ZlZCBmcm9tIERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjppbWFnZUVsZW1lbnRCeVVzZW1hcCBjb25zdCk6IERpdHRvLgorICAgICAgICAq
IGRvbS9UcmVlU2NvcGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOiBU
aGlzIGltYWdlIGVsZW1lbnQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIG1hcCBlbGVtZW50Cisg
ICAgICAgIGlmIGl0J3MgY29ubmVjdGVkIHRvIGEgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFzc29jaWF0ZWRNYXBFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50OjppbWFnZUVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6aW1hZ2VNYXAgY29uc3QpOgorCiAyMDE4LTA1LTAyICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBzdXBlcmZsdW91cyBjaGVj
ayBmb3IgYSBudWxsIGF0dHJpYnV0ZSB2YWx1ZSBjaGVjayBpbiBFbGVtZW50OjpyZW1vdmVBdHRy
aWJ1dGVJbnRlcm5hbApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAyMzEw
MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03NDMsMjEgKzc0Myw2IEBACiAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LmNsZWFyKCk7CiB9
CiAKLXZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IG1faW1hZ2VzQnlVc2VtYXAuYWRkKG5hbWUsIGVsZW1lbnQsICp0aGlzKTsKLX0KLQotdm9pZCBE
b2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1w
bCYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICByZXR1cm4gbV9pbWFn
ZXNCeVVzZW1hcC5yZW1vdmUobmFtZSwgZWxlbWVudCk7Ci19Ci0KLUhUTUxJbWFnZUVsZW1lbnQq
IERvY3VtZW50OjppbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBu
YW1lKSBjb25zdAotewotICAgIHJldHVybiBtX2ltYWdlc0J5VXNlbWFwLmdldEVsZW1lbnRCeVVz
ZW1hcChuYW1lLCAqdGhpcyk7Ci19Ci0KIEV4Y2VwdGlvbk9yPFNlbGVjdG9yUXVlcnkmPiBEb2N1
bWVudDo6c2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmIHNlbGVjdG9yU3RyaW5n
KQogewogICAgIGlmIChzZWxlY3RvclN0cmluZy5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaAkocmV2aXNpb24gMjMxMDMxKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3OSwxMCArMzc5LDYgQEAKICAgICBFbGVtZW50KiBnZXRF
bGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIHZvaWQgaW52YWxpZGF0
ZUFjY2Vzc0tleU1hcCgpOwogCi0gICAgdm9pZCBhZGRJbWFnZUVsZW1lbnRCeVVzZW1hcChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3Zl
SW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVs
ZW1lbnQmKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeVVzZW1hcChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJikgY29uc3Q7Ci0KICAgICBFeGNlcHRpb25PcjxTZWxlY3RvclF1
ZXJ5Jj4gc2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNs
ZWFyU2VsZWN0b3JRdWVyeUNhY2hlKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuY3Bw
CShyZXZpc2lvbiAyMzEwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxM
YWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKQEAgLTUyLDcgKzUzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
c3RydWN0IFNhbWVTaXplQXNUcmVlU2NvcGUgewotICAgIHZvaWQqIHBvaW50ZXJzWzhdOworICAg
IHZvaWQqIHBvaW50ZXJzWzldOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFRyZWVTY29w
ZSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNUcmVlU2NvcGUpLCB0cmVlc2NvcGVfc2hvdWxkX3N0YXlf
c21hbGwpOwpAQCAtODIsNyArODMsOSBAQAogdm9pZCBUcmVlU2NvcGU6OmRlc3Ryb3lUcmVlU2Nv
cGVEYXRhKCkKIHsKICAgICBtX2VsZW1lbnRzQnlJZCA9IG51bGxwdHI7CisgICAgbV9lbGVtZW50
c0J5TmFtZSA9IG51bGxwdHI7CiAgICAgbV9pbWFnZU1hcHNCeU5hbWUgPSBudWxscHRyOworICAg
IG1faW1hZ2VzQnlVc2VtYXAgPSBudWxscHRyOwogICAgIG1fbGFiZWxzQnlGb3JBdHRyaWJ1dGUg
PSBudWxscHRyOwogfQogCkBAIC0yNTAsMTcgKzI1MywzMiBAQAogICAgIG1faW1hZ2VNYXBzQnlO
YW1lLT5yZW1vdmUoKm5hbWUsIGltYWdlTWFwKTsKIH0KIAotSFRNTE1hcEVsZW1lbnQqIFRyZWVT
Y29wZTo6Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0CitIVE1MTWFwRWxlbWVu
dCogVHJlZVNjb3BlOjpnZXRJbWFnZU1hcChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0
CiB7Ci0gICAgaWYgKCFtX2ltYWdlTWFwc0J5TmFtZSkKKyAgICBpZiAoIW1faW1hZ2VNYXBzQnlO
YW1lIHx8ICFuYW1lLmltcGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byBo
YXNoUG9zaXRpb24gPSB1cmwuZmluZCgnIycpOwotICAgIGlmIChoYXNoUG9zaXRpb24gPT0gbm90
Rm91bmQpCisgICAgcmV0dXJuIG1faW1hZ2VNYXBzQnlOYW1lLT5nZXRFbGVtZW50QnlNYXBOYW1l
KCpuYW1lLmltcGwoKSwgKnRoaXMpOworfQorCit2b2lkIFRyZWVTY29wZTo6YWRkSW1hZ2VFbGVt
ZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSwgSFRNTEltYWdlRWxlbWVu
dCYgZWxlbWVudCkKK3sKKyAgICBpZiAoIW1faW1hZ2VzQnlVc2VtYXApCisgICAgICAgIG1faW1h
Z2VzQnlVc2VtYXAgPSBzdGQ6Om1ha2VfdW5pcXVlPERvY3VtZW50T3JkZXJlZE1hcD4oKTsKKyAg
ICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC0+YWRkKG5hbWUsIGVsZW1lbnQsICp0aGlzKTsKK30K
Kwordm9pZCBUcmVlU2NvcGU6OnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYg
KCFtX2ltYWdlc0J5VXNlbWFwKQorICAgICAgICByZXR1cm47CisgICAgbV9pbWFnZXNCeVVzZW1h
cC0+cmVtb3ZlKG5hbWUsIGVsZW1lbnQpOworfQorCitIVE1MSW1hZ2VFbGVtZW50KiBUcmVlU2Nv
cGU6OmltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUpIGNv
bnN0Cit7CisgICAgaWYgKCFtX2ltYWdlc0J5VXNlbWFwKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBTdHJpbmcgbmFtZSA9IHVybC5zdWJzdHJpbmcoaGFzaFBvc2l0aW9uICsgMSk7Ci0g
ICAgaWYgKG5hbWUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1
cm4gbV9pbWFnZU1hcHNCeU5hbWUtPmdldEVsZW1lbnRCeU1hcE5hbWUoKkF0b21pY1N0cmluZyhu
YW1lKS5pbXBsKCksICp0aGlzKTsKKyAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC0+Z2V0RWxl
bWVudEJ5VXNlbWFwKG5hbWUsICp0aGlzKTsKIH0KIAogdm9pZCBUcmVlU2NvcGU6OmFkZExhYmVs
KGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGZvckF0dHJpYnV0ZVZhbHVlLCBIVE1MTGFiZWxFbGVt
ZW50JiBlbGVtZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkocmV2aXNpb24gMjMxMDMx
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1RyZWVTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Nyw2ICszNyw3IEBACiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFz
cyBFbGVtZW50OworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNzIEhUTUxMYWJlbEVsZW1l
bnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIExheW91dFBvaW50OwpAQCAtODAsOCAr
ODEsMTIgQEAKIAogICAgIHZvaWQgYWRkSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQmKTsKICAgICB2
b2lkIHJlbW92ZUltYWdlTWFwKEhUTUxNYXBFbGVtZW50Jik7Ci0gICAgSFRNTE1hcEVsZW1lbnQq
IGdldEltYWdlTWFwKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdDsKKyAgICBIVE1MTWFwRWxlbWVu
dCogZ2V0SW1hZ2VNYXAoY29uc3QgQXRvbWljU3RyaW5nJikgY29uc3Q7CiAKKyAgICB2b2lkIGFk
ZEltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VF
bGVtZW50Jik7CisgICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9t
aWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOworICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKKwog
ICAgIC8vIEZvciBhY2Nlc3NpYmlsaXR5LgogICAgIGJvb2wgc2hvdWxkQ2FjaGVMYWJlbHNCeUZv
ckF0dHJpYnV0ZSgpIGNvbnN0IHsgcmV0dXJuICEhbV9sYWJlbHNCeUZvckF0dHJpYnV0ZTsgfQog
ICAgIHZvaWQgYWRkTGFiZWwoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgZm9yQXR0cmlidXRlVmFs
dWUsIEhUTUxMYWJlbEVsZW1lbnQmKTsKQEAgLTEyNCw2ICsxMjksNyBAQAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxEb2N1bWVudE9yZGVyZWRNYXA+IG1fZWxlbWVudHNCeUlkOwogICAgIHN0ZDo6dW5p
cXVlX3B0cjxEb2N1bWVudE9yZGVyZWRNYXA+IG1fZWxlbWVudHNCeU5hbWU7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9pbWFnZU1hcHNCeU5hbWU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPERvY3VtZW50T3JkZXJlZE1hcD4gbV9pbWFnZXNCeVVzZW1hcDsKICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRPcmRlcmVkTWFwPiBtX2xhYmVsc0J5Rm9yQXR0cmlidXRl
OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPElkVGFyZ2V0T2JzZXJ2ZXJSZWdpc3RyeT4gbV9pZFRh
cmdldE9ic2VydmVyUmVnaXN0cnk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIzMTAzMSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAj
aW5jbHVkZSAiSFRNTFBpY3R1cmVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MU291cmNlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTcmNzZXRQ
YXJzZXIuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCkBAIC0yMTEsMTIgKzIxMiwxMiBAQAogICAg
ICAgICBzZWxlY3RJbWFnZVNvdXJjZSgpOwogICAgIGVsc2UgaWYgKG5hbWUgPT0gdXNlbWFwQXR0
cikgewogICAgICAgICBpZiAoaXNDb25uZWN0ZWQoKSAmJiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxs
KCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKCpt
X3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgICAgIHRyZWVTY29wZSgpLnJl
bW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsK
IAogICAgICAgICBtX3BhcnNlZFVzZW1hcCA9IHBhcnNlSFRNTEhhc2hOYW1lUmVmZXJlbmNlKHZh
bHVlKTsKIAogICAgICAgICBpZiAoaXNDb25uZWN0ZWQoKSAmJiAhbV9wYXJzZWRVc2VtYXAuaXNO
dWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKCpt
X3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAgICAgICAgICAgIHRyZWVTY29wZSgpLmFk
ZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKICAg
ICB9IGVsc2UgaWYgKG5hbWUgPT0gY29tcG9zaXRlQXR0cikgewogICAgICAgICAvLyBGSVhNRTog
aW1hZ2VzIGRvbid0IHN1cHBvcnQgYmxlbmQgbW9kZXMgaW4gdGhlaXIgY29tcG9zaXRpbmcgYXR0
cmlidXRlLgogICAgICAgICBCbGVuZE1vZGUgYmxlbmRPcCA9IEJsZW5kTW9kZU5vcm1hbDsKQEAg
LTMyMCw3ICszMjEsNyBAQAogICAgIE5vZGU6Okluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGlu
c2VydE5vdGlmaWNhdGlvblJlcXVlc3QgPSBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0
b3IoaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogCiAgICAgaWYgKGluc2Vy
dGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCAmJiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxsKCkp
Ci0gICAgICAgIGRvY3VtZW50KCkuYWRkSW1hZ2VFbGVtZW50QnlVc2VtYXAoKm1fcGFyc2VkVXNl
bWFwLmltcGwoKSwgKnRoaXMpOworICAgICAgICB0cmVlU2NvcGUoKS5hZGRJbWFnZUVsZW1lbnRC
eVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAKICAgICBpZiAoaXM8SFRN
TFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKSB7CiAgICAgICAgIHNldFBpY3R1cmVFbGVt
ZW50KCZkb3duY2FzdDxIVE1MUGljdHVyZUVsZW1lbnQ+KCpwYXJlbnROb2RlKCkpKTsKQEAgLTM0
MSw3ICszNDIsNyBAQAogICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiAK
ICAgICBpZiAocmVtb3ZhbFR5cGUuZGlzY29ubmVjdGVkRnJvbURvY3VtZW50ICYmICFtX3BhcnNl
ZFVzZW1hcC5pc051bGwoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRC
eVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgIHRyZWVTY29w
ZSgpLnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0
aGlzKTsKIAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpCiAg
ICAgICAgIHNldFBpY3R1cmVFbGVtZW50KG51bGxwdHIpOwpAQCAtNDg0LDYgKzQ4NSwxMSBAQAog
ICAgIHJldHVybiBtX3BhcnNlZFVzZW1hcC5pbXBsKCkgPT0gJm5hbWU7CiB9CiAKK0hUTUxNYXBF
bGVtZW50KiBIVE1MSW1hZ2VFbGVtZW50Ojphc3NvY2lhdGVkTWFwRWxlbWVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIHRyZWVTY29wZSgpLmdldEltYWdlTWFwKG1fcGFyc2VkVXNlbWFwKTsKK30K
KwogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdAogewog
ICAgIHJldHVybiBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGFsdEF0dHIpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDIzMTAzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGb3Jt
RWxlbWVudDsKK2NsYXNzIEhUTUxNYXBFbGVtZW50OwogCiBzdHJ1Y3QgSW1hZ2VDYW5kaWRhdGU7
CiAKQEAgLTYzLDYgKzY0LDcgQEAKICAgICB2b2lkIHNldExvYWRNYW51YWxseShib29sIGxvYWRN
YW51YWxseSkgeyBtX2ltYWdlTG9hZGVyLnNldExvYWRNYW51YWxseShsb2FkTWFudWFsbHkpOyB9
CiAKICAgICBib29sIG1hdGNoZXNVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0
OworICAgIEhUTUxNYXBFbGVtZW50KiBhc3NvY2lhdGVkTWFwRWxlbWVudCgpIGNvbnN0OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgY29uc3QgQXRvbWljU3RyaW5nJiBhbHQoKSBjb25zdDsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHJldmlzaW9uIDIzMTAzMSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MCw3ICs4MCw3IEBACiB7CiAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBkb2N1bWVudCgpLmltYWdlRWxlbWVudEJ5VXNl
bWFwKCptX25hbWUuaW1wbCgpKTsKKyAgICByZXR1cm4gdHJlZVNjb3BlKCkuaW1hZ2VFbGVtZW50
QnlVc2VtYXAoKm1fbmFtZS5pbXBsKCkpOwogfQogCiB2b2lkIEhUTUxNYXBFbGVtZW50OjpwYXJz
ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShy
ZXZpc2lvbiAyMzEwMzEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NTYsOCArNjU2LDEwIEBACiAKIEhUTUxNYXBFbGVtZW50
KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogewotICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOwotICAgIHJldHVybiBpbWFnZSA/IGlt
YWdlLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChpbWFnZS0+YXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbih1c2VtYXBBdHRyKSkgOiBudWxscHRyOworICAgIGF1dG8qIGltYWdlRWxlbWVu
dCA9IGVsZW1lbnQoKTsKKyAgICBpZiAoIWltYWdlRWxlbWVudCB8fCAhaXM8SFRNTEltYWdlRWxl
bWVudD4oaW1hZ2VFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGltYWdlRWxlbWVudCktPmFzc29jaWF0ZWRNYXBF
bGVtZW50KCk7CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRl
c3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEhpdFRlc3RM
b2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxh
dGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMzEwMzEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxOC0wNS0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBVc2luZyBpbWFnZSBtYXAgaW5zaWRlIGEgc2hhZG93IHRyZWUgcmVzdWx0cyBo
aXRzIGEgcmVsZWFzZSBhc3NlcnQgaW4gRG9jdW1lbnRPcmRlcmVkTWFwOjphZGQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIzOAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1h
Z2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2ltYWdlbWFwLWluLXNoYWRvdy10cmVlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRy
ZWUuaHRtbDogQWRkZWQuCisKIDIwMTgtMDQtMjUgIENhcmxvcyBBbGJlcnRvIExvcGV6IFBlcmV6
ICA8Y2xvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1dQRV1bRGVidWddIFRlc3QgZ2FyZGVu
aW5nIG9mIEVNRSByZWxhdGVkIHRlc3RzLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
aW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWluLXNoYWRvdy10cmVlLWV4cGVjdGVkLnR4dAko
bm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZW1hcC1pbi1zaGFk
b3ctdHJlZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1IEBACitUaGlz
IHRlc3RzIGFjdGl2aW5nIGFuIGltYWdlIG1hcCBhcmVhIGluc2lkZSBhIHNoYWRvdyB0cmVlLiBX
ZWJLaXQgc2hvdWxkIG5vdCBoaXQgYW55IGFzc2VydGlvbnMuCitUbyBtYW51YWxseSB0ZXN0LCBj
bGljayBvbiBncmVlbiBib3ggb24gdGhlIGxlZnQgdXBwZXIgcXVhZHJhbnQuCisKK1BBU1MKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZW1hcC1pbi1zaGFk
b3ctdHJlZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2lt
YWdlbWFwLWluLXNoYWRvdy10cmVlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHA+VGhpcyB0ZXN0cyBhY3RpdmluZyBh
biBpbWFnZSBtYXAgYXJlYSBpbnNpZGUgYSBzaGFkb3cgdHJlZS4gV2ViS2l0IHNob3VsZCBub3Qg
aGl0IGFueSBhc3NlcnRpb25zLjxicj4KK1RvIG1hbnVhbGx5IHRlc3QsIGNsaWNrIG9uIGdyZWVu
IGJveCBvbiB0aGUgbGVmdCB1cHBlciBxdWFkcmFudC48L3A+Cis8ZGl2IGlkPSJyZXN1bHQiPjwv
ZGl2PgorPHNjcmlwdD4KKworY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rp
dicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0KTsKKworY29uc3Qgc2hhZG93Um9v
dCA9IGhvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2VkJ30pOworc2hhZG93Um9vdC5pbm5l
ckhUTUwgPSBgCis8aW1nIHNyYz0icmVzb3VyY2VzL2dyZWVuLTQwMHg0MDAucG5nIiB3aWR0aD0i
NDAwIiBoZWlnaHQ9IjQwMCIgdXNlbWFwPSIjaW1hZ2VtYXAiIG9ubG9hZD0ic3RhcnRUZXN0KCki
PgorPG1hcCBuYW1lPSJpbWFnZW1hcCI+CisgICAgPGFyZWEgaWQ9ImFyZWEiIHNoYXBlPSJyZWN0
IiBjb29yZHM9IjAsMCwyMDAsMjAwIiBocmVmPSIjIiBvbmNsaWNrPSJkaWRDbGljayhldmVudCki
IHRhYmluZGV4PSIwIj4KKzwvbWFwPmA7Citjb25zdCByZWN0ID0gaG9zdC5nZXRCb3VuZGluZ0Ns
aWVudFJlY3QoKTsKKworZnVuY3Rpb24gc3RhcnRUZXN0KCkKK3sKKyAgICBpZiAoIXdpbmRvdy50
ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisgICAgVUlIZWxwZXIuYWN0aXZhdGVBdChyZWN0
LnggKyAxMDAsIHJlY3QueSArIDEwMCkudGhlbihjaGVjayk7Cit9CisKK2xldCBkaWRDbGlja1dh
c0NhbGxlZCA9IGZhbHNlOworZnVuY3Rpb24gZGlkQ2xpY2soZXZlbnQpCit7CisgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKKyAgICBkaWRDbGlja1dhc0NhbGxlZCA9IHRydWU7Cit9CisKK2Z1
bmN0aW9uIGNoZWNrKCkKK3sKKyAgICBsZXQgcmVzdWx0ID0gJyc7CisgICAgaWYgKCFkaWRDbGlj
a1dhc0NhbGxlZCkKKyAgICAgICAgcmVzdWx0ID0gJ0ZBSUwgLSBKYXZhU2NyaXB0IHdhcyBub3Qg
ZXhlY3V0ZWQnOworICAgIGVsc2UgaWYgKHNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCAhPSBzaGFk
b3dSb290LmdldEVsZW1lbnRCeUlkKCdhcmVhJykpCisgICAgICAgIHJlc3VsdCA9ICdGQUlMIC0g
VGhlIGVsZW1lbnQgd2FzIG5vdCBmb2N1c2VkJzsKKyAgICBlbHNlCisgICAgICAgIHJlc3VsdCA9
ICdQQVNTJzsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVzdWx0JykudGV4dENvbnRl
bnQgPSByZXN1bHQ7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVu
bmVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgc2V0
VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMzAwMCk7CisgICAgdGVzdFJ1
bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7Cit9IGVs
c2UgeworICAgIGhvc3Qub25jbGljayA9IChldmVudCkgPT4geworICAgICAgICBldmVudC5wcmV2
ZW50RGVmYXVsdCgpOworCisgICAgICAgIGNvbnN0IGlzSW5VcHBlckxlZnRRdWFkcmFudCA9IHJl
Y3QueCA8IGV2ZW50LnBhZ2VYICYmIGV2ZW50LnBhZ2VYIDwgcmVjdC54ICsgMjAwCisgICAgICAg
ICAgICAmJiByZWN0LnkgPCBldmVudC5wYWdlWSAmJiBldmVudC5wYWdlWSA8IHJlY3QueSArIDIw
MDsKKyAgICAgICAgaWYgKCFpc0luVXBwZXJMZWZ0UXVhZHJhbnQpIHsKKyAgICAgICAgICAgIGFs
ZXJ0KCdQbGVhc2UgY2xpY2sgb24gdGhlIHVwcGVyIGxlZnQgcXVhZHJhbnQgb2YgdGhlIGdyZWVu
IGJveC4nKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNoZWNr
KCk7CisgICAgfTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2hlYWQ+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3ZpZGVvLXBsYXktc3Rh
bGwuaHRtbAkocmV2aXNpb24gMjMxMDMxKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRp
YS92aWRlby1wbGF5LXN0YWxsLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTEsNDUgKzEsMTI3IEBA
CiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgotICAgIDxoZWFkPgotICAgICAgICA8dGl0bGU+J3N0
YWxsZWQnIGV2ZW50IHRlc3Q8L3RpdGxlPgotICAgICAgICA8c2NyaXB0IHNyYz0uLi8uLi9tZWRp
YS1yZXNvdXJjZXMvbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KLSAgICAgICAgPHNjcmlwdCBzcmM9
Li4vLi4vbWVkaWEtcmVzb3VyY2VzL3ZpZGVvLXRlc3QuanM+PC9zY3JpcHQ+Ci0gICAgICAgIDxz
Y3JpcHQ+Cis8aGVhZD4KKzx0aXRsZT4nc3RhbGxlZCcgZXZlbnQgdGVzdDwvdGl0bGU+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzx4c2NyaXB0
IHNyYz0uLi8uLi9tZWRpYS1yZXNvdXJjZXMvbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4KKzx4c2Ny
aXB0IHNyYz0uLi8uLi9tZWRpYS1yZXNvdXJjZXMvdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKzxz
Y3JpcHQ+CiAKLSAgICAgICAgICAgIHZhciBwbGF5Q291bnQgPSAwOworICAgIHZhciBwbGF5Q291
bnQgPSAwOwogCi0gICAgICAgICAgICBmdW5jdGlvbiBzdGFydCgpIAotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB3YWl0
Rm9yRXZlbnQoJ2R1cmF0aW9uY2hhbmdlJyk7Ci0gICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50
KCdsb2FkZWRtZXRhZGF0YScpOwotICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnbG9hZGVk
ZGF0YScpOworICAgIGZ1bmN0aW9uIHN0YXJ0KCkgCisgICAgeworICAgICAgICByZXR1cm47Cisg
ICAgICAgIGFsZXJ0KCdsb2FkZWQhJyk7CisgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKyAg
ICAgICAgd2FpdEZvckV2ZW50KCdkdXJhdGlvbmNoYW5nZScpOworICAgICAgICB3YWl0Rm9yRXZl
bnQoJ2xvYWRlZG1ldGFkYXRhJyk7CisgICAgICAgIHdhaXRGb3JFdmVudCgnbG9hZGVkZGF0YScp
OwogCi0gICAgICAgICAgICAgICAgbWVkaWFFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NhbnBs
YXknLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vICdzdGFsbGVkJyB0YWtl
cyB0aHJlZSBzZWNvbmRzIHRvIGZpcmUsIHNvICdjYW5wbGF5JyBtYXkgZmlyZSBtb3JlIHRoYW4g
b25jZQotICAgICAgICAgICAgICAgICAgICAvLyBkZXBlbmRpbmcgb24gaG93IHRoZSBlbmdpbmUg
cGFyc2VzIGluY29taW5nIG1lZGlhIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgIGlmICgrK3Bs
YXlDb3VudCA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQoY2FucGxheSkiKTsKLSAgICAgICAgICAgICAg
ICAgICAgcnVuKCJ2aWRlby5wbGF5KCkiKTsKLSAgICAgICAgICAgICAgICB9ICk7CisgICAgICAg
IG1lZGlhRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjYW5wbGF5JywgZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgLy8gJ3N0YWxsZWQnIHRha2VzIHRocmVlIHNlY29uZHMgdG8gZmlyZSwgc28g
J2NhbnBsYXknIG1heSBmaXJlIG1vcmUgdGhhbiBvbmNlCisgICAgICAgICAgICAvLyBkZXBlbmRp
bmcgb24gaG93IHRoZSBlbmdpbmUgcGFyc2VzIGluY29taW5nIG1lZGlhIGRhdGEuCisgICAgICAg
ICAgICBpZiAoKytwbGF5Q291bnQgPiAxKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQoY2FucGxheSkiKTsKKyAgICAgICAgICAgIHJ1bigi
dmlkZW8ucGxheSgpIik7CisgICAgICAgIH0gKTsKIAotICAgICAgICAgICAgICAgIHdhaXRGb3JF
dmVudCgnc3RhbGxlZCcsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4
cGVjdGVkKCJ2aWRlby5jdXJyZW50VGltZSIsIDAsICIhPSIpOwotICAgICAgICAgICAgICAgICAg
ICB0ZXN0RXhwZWN0ZWQoInZpZGVvLnBsYXliYWNrUmF0ZSIsIDEsICI9PT0iKTsKLSAgICAgICAg
ICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5wYXVzZWQiLCBmYWxzZSwgIj09PSIpOwot
ICAgICAgICAgICAgICAgICAgICBlbmRUZXN0KCk7Ci0gICAgICAgICAgICAgICAgfSApOworICAg
ICAgICB3YWl0Rm9yRXZlbnQoJ3N0YWxsZWQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInZpZGVvLmN1cnJlbnRUaW1lIiwgMCwgIiE9Iik7CisgICAgICAgICAgICB0
ZXN0RXhwZWN0ZWQoInZpZGVvLnBsYXliYWNrUmF0ZSIsIDEsICI9PT0iKTsKKyAgICAgICAgICAg
IHRlc3RFeHBlY3RlZCgidmlkZW8ucGF1c2VkIiwgZmFsc2UsICI9PT0iKTsKKyAgICAgICAgICAg
IGVuZFRlc3QoKTsKKyAgICAgICAgfSApOwogCi0gICAgICAgICAgICAgICAgdmFyIG1lZGlhRmls
ZSA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgIi4uLy4uLy4uLy4uL21lZGlhL2NvbnRlbnQvbG9u
Zy10ZXN0Iik7Ci0gICAgICAgICAgICAgICAgdmFyIG1pbWVUeXBlID0gbWltZVR5cGVGb3JGaWxl
KG1lZGlhRmlsZSk7Ci0gICAgICAgICAgICAgICAgdmlkZW8uc3JjID0gImh0dHA6Ly8xMjcuMC4w
LjE6ODAwMC9tZWRpYS9yZXNvdXJjZXMvc2VydmUtdmlkZW8ucGhwP25hbWU9IiArIG1lZGlhRmls
ZSArICImdHlwZT0iICsgbWltZVR5cGUgKyAiJnN0YWxsT2Zmc2V0PTEwMDAwMCZzdGFsbER1cmF0
aW9uPTYwJmNodW5rU2l6ZT0xMDI0IjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgdmFyIG1lZGlh
RmlsZSA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgIi4uLy4uLy4uLy4uL21lZGlhL2NvbnRlbnQv
bG9uZy10ZXN0Iik7CisgICAgICAgIHZhciBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRmlsZShtZWRp
YUZpbGUpOworICAgICAgICBhbGVydCgiaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL3Jlc291
cmNlcy9zZXJ2ZS12aWRlby5waHA/bmFtZT0iICsgbWVkaWFGaWxlICsgIiZ0eXBlPSIgKyBtaW1l
VHlwZSArICImc3RhbGxPZmZzZXQ9MTAwMDAwJnN0YWxsRHVyYXRpb249NjAmY2h1bmtTaXplPTEw
MjQiKTsKKyAgICAgICAgdmlkZW8uc3JjID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRpYS9y
ZXNvdXJjZXMvc2VydmUtdmlkZW8ucGhwP25hbWU9IiArIG1lZGlhRmlsZSArICImdHlwZT0iICsg
bWltZVR5cGUgKyAiJnN0YWxsT2Zmc2V0PTEwMDAwMCZzdGFsbER1cmF0aW9uPTYwJmNodW5rU2l6
ZT0xMDI0IjsKKyAgICB9CiAKLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAgPC9oZWFkPgotICAgIDxi
b2R5IG9ubG9hZD0ic2V0VGltZW91dChzdGFydCwgMCkiPgotICAgICAgICA8dmlkZW8gY29udHJv
bHM+PC92aWRlbz4KLSAgICAgICAgPHA+VGVzdCB0aGF0IGEgc3RhbGxlZCBldmVudCBpcyBzZW50
IHdoZW4gbWVkaWEgbG9hZGluZyBzdGFsbHMuPC9wPgotICAgIDwvYm9keT4KKzwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJzZXRUaW1lb3V0KHN0YXJ0LCAwKSI+Cis8IS0tPHZpZGVv
IGF1dG9wbGF5IGNvbnRyb2xzPgorICAgIDxzb3VyY2Ugc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgw
MDAvbWVkaWEvcmVzb3VyY2VzL3NlcnZlLXZpZGVvLnBocD9uYW1lPS4uLy4uLy4uLy4uL21lZGlh
L2NvbnRlbnQvbG9uZy10ZXN0Lm1wNCZ0eXBlPXZpZGVvL21wNCZzdGFsbE9mZnNldD0xMDAwMDAm
c3RhbGxEdXJhdGlvbj02MCZjaHVua1NpemU9MTAyNCI+Cis8L3ZpZGVvPi0tPgorPHNjcmlwdD4K
KworaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25l
KCk7CisgICAgc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMzAwMCk7
Cit9CisKK2NvbnN0IHNvdXJjZSA9IGA8IURPQ1RZUEUgaHRtbD4KKzx2aWRlbyBhdXRvcGxheSBj
b250cm9scz4KKyAgICA8c291cmNlIHNyYz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL3Jl
c291cmNlcy9zZXJ2ZS12aWRlby5waHA/bmFtZT0uLi8uLi8uLi8uLi9tZWRpYS9jb250ZW50L2xv
bmctdGVzdC5tcDQmdHlwZT12aWRlby9tcDQmc3RhbGxPZmZzZXQ9MTAwMDAwJnN0YWxsRHVyYXRp
b249NjAmY2h1bmtTaXplPTEwMjQiPgorPC92aWRlbz5gOworCitmdW5jdGlvbiBpbnNlcnRGcmFt
ZVdpdGhWaWRlbygpIHsKKyAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCdpZnJhbWUnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChpZnJhbWUpOworICAgIGlmcmFt
ZS5jb250ZW50RG9jdW1lbnQub3BlbigpOworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3Jp
dGUoc291cmNlKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKGA8c2NyaXB0Pgor
ICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCd2aWRlbycpLmFkZEV2ZW50TGlzdGVuZXIo
J3N0YWxsZWQnLCAoKSA9PiB0b3AuZGVsZXRlRnJhbWUod2luZG93LmZyYW1lRWxlbWVudCkpOwor
PC9zY3JgICsgYGlwdD5gKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7Cit9
CisKK2NvbnN0IG1heEZyYW1lQ291bnQgPSA1OworbGV0IHJlbWFpbmlnRnJhbWVDb3VudDsKK2Z1
bmN0aW9uIGFkZEZyYW1lcygpIHsKKyAgICByZW1haW5pZ0ZyYW1lQ291bnQgPSBtYXhGcmFtZUNv
dW50OworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4RnJhbWVDb3VudDsgaSsrKQorICAgICAg
ICBpbnNlcnRGcmFtZVdpdGhWaWRlbygpOworfQorCitmdW5jdGlvbiBkZWxldGVGcmFtZShpZnJh
bWUpIHsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50Lm9wZW4oKTsKKyAgICBpZnJhbWUuY29u
dGVudERvY3VtZW50LndyaXRlKCcnKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3Nl
KCcnKTsKKyAgICBzZXRUaW1lb3V0KCgpID0+IGlmcmFtZS5yZW1vdmUoKSwgNTAwMCk7CisvLyAg
ICBpZnJhbWUucmVtb3ZlKCk7CisgICAgcmVtYWluaWdGcmFtZUNvdW50LS07CisgICAgaWYgKCFy
ZW1haW5pZ0ZyYW1lQ291bnQpCisgICAgICAgIGFkZEZyYW1lcygpOworfQorCithZGRGcmFtZXMo
KTsKKworLyoKKworZnVuY3Rpb24gZ2NBbmRGaW5pc2goKSB7CisgICAgZm9yIChsZXQgaSA9IDA7
IGkgPCA1MDAwOyBpKyspIHsKKyAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8n
KTsKKyAgICAgICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc291cmNlJyk7CisgICAgfQorICAg
IGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgp
OworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29s
bGVjdCgpOworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKQorICAgICAgICBHQ0NvbnRyb2xs
ZXIuY29sbGVjdCgpOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1
bm5lci5ub3RpZnlEb25lKCk7Cit9CisKK2Z1bmN0aW9uIHByZXBhcmUoKSB7CisgICAgZG9jdW1l
bnQucXVlcnlTZWxlY3RvcigndmlkZW8nKS5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgZGVs
ZXRlVmlkZW8pOworfQorCitmdW5jdGlvbiBkZWxldGVWaWRlbygpIHsKKyAgICBjb25zdCBpZnJh
bWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGlmcmFtZSk7CisgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKHRoaXMpOworICAgIGlmcmFtZS5yZW1vdmUoKTsKKyAgICBzZXRUaW1lb3V0KGdj
QW5kRmluaXNoLCAwKTsKK30KKworcHJlcGFyZSgpOyovCisKKzwvc2NyaXB0PgorPHA+VGVzdCB0
aGF0IGEgc3RhbGxlZCBldmVudCBpcyBzZW50IHdoZW4gbWVkaWEgbG9hZGluZyBzdGFsbHMuPC9w
PgorPC9ib2R5PgogPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDIzMTAzMSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9UZXN0RXhwZWN0YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC0xNzI2LDggKzE3MjYsNiBAQAog
CiB3ZWJraXQub3JnL2IvMTgxODMxIFsgSGlnaFNpZXJyYSsgXSBmYXN0L2Zvcm1zL3NlYXJjaGZp
ZWxkLWhlaWdodHMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8xODI1ODkg
ZmFzdC9kb20vYWRvcHQtbm9kZS1jcmFzaC0yLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQotCiB3ZWJr
aXQub3JnL2IvMTgxNjEyIFsgRGVidWcgXSB3ZWJhbmltYXRpb25zL2FuaW1hdGlvbi1vcGFjaXR5
LWFuaW1hdGlvbi1jcmFzaC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzE3
MjI0MSBodHRwL3Rlc3RzL2FwcGNhY2hlLzQwNC1yZXNvdXJjZS13aXRoLXNsb3ctbWFpbi1yZXNv
dXJjZS5waHAgWyBQYXNzIEZhaWx1cmUgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339456</attachid>
            <date>2018-05-03 13:54:54 -0700</date>
            <delta_ts>2018-05-03 14:34:15 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-185238-20180503135453.patch</filename>
            <type>text/plain</type>
            <size>23413</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTA1LTAzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFVzaW5nIGltYWdlIG1hcCBpbnNp
ZGUgYSBzaGFkb3cgdHJlZSByZXN1bHRzIGhpdHMgYSByZWxlYXNlIGFzc2VydCBpbiBEb2N1bWVu
dE9yZGVyZWRNYXA6OmFkZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MjM4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisK
KyAgICAgICAgVGhlIGJ1ZyB3YXMgY2F1c2VkIGJ5IERvY3VtZW50T3JkZXJlZE1hcCBmb3IgdGhl
IGltYWdlIGVsZW1lbnRzIHdpdGggdXNlbWFwIGJlaW5nIHN0b3JlZCBpbiBEb2N1bWVudAorICAg
ICAgICBldmVuIGlmIHRob3NlIGltYWdlIGVsZW1lbnRzIHdlcmUgaW4gYSBzaGFkb3cgdHJlZS4g
Rml4ZWQgdGhlIGJ1ZyBieSBtb3ZpbmcgdGhlIG1hcCB0byBUcmVlU2NvcGUuCisKKyAgICAgICAg
VGVzdDogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLmh0bWwKKyAg
ICAgICAgICAgICAgZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUuaHRtbAorCisg
ICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojph
ZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IE1vdmVkIHRvIFRyZWVTY29wZS4KKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltYWdlRWxlbWVudEJ5VXNlbWFwIGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZG9tL1RyZWVTY29wZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmRlc3Ryb3lUcmVlU2NvcGVEYXRhKTog
Q2xlYXIgbV9pbWFnZXNCeVVzZW1hcCBhcyB3ZWxsIGFzIG1fZWxlbWVudHNCeU5hbWUuCisgICAg
ICAgIChXZWJDb3JlOjpUcmVlU2NvcGU6OmdldEltYWdlTWFwIGNvbnN0KTogUmVtb3ZlZCB0aGUg
Y29kZSB0byBwYXJzZSB1c2VtYXAuIFJlbmRlckltYWdlOjppbWFnZU1hcCgpCisgICAgICAgIHdo
aWNoIHVzZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIHdpdGggdGhlIHJhdyB2YWx1ZSBvZiB0aGUg
dXNlbWFwIGNvbnRlbnQgYXR0cmlidXRlIG5vdyBjYWxscyBpdAorICAgICAgICB2aWEgSFRNTElt
YWdlRWxlbWVudDo6YXNzb2NpYXRlZE1hcEVsZW1lbnQoKSwgd2hpY2ggdXNlcyB0aGUgcGFyc2Vk
IHVzZW1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTY29wZTo6YWRkSW1hZ2VFbGVtZW50QnlV
c2VtYXApOiBNb3ZlZCBmcm9tIERvY3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6VHJlZVNjb3Bl
OjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVzZW1hcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
VHJlZVNjb3BlOjppbWFnZUVsZW1lbnRCeVVzZW1hcCBjb25zdCk6IERpdHRvLgorICAgICAgICAq
IGRvbS9UcmVlU2NvcGUuaDoKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvQW5jZXN0b3IpOiBU
aGlzIGltYWdlIGVsZW1lbnQgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBhIG1hcCBlbGVtZW50Cisg
ICAgICAgIGlmIGl0J3MgY29ubmVjdGVkIHRvIGEgZG9jdW1lbnQuCisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSW1hZ2VFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFzc29jaWF0ZWRNYXBFbGVtZW50IGNvbnN0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50OjppbWFnZUVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6aW1hZ2VNYXAgY29uc3QpOgorCiAyMDE4LTA1LTAzICBDaHJpcyBOYXJk
aSAgPGNuYXJkaUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3ZlIFtOb0ludGVyZmFjZU9i
amVjdF0gZnJvbSBET01SZWN0TGlzdApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZp
c2lvbiAyMzEzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03NDMsMjEgKzc0Myw2IEBAIHZvaWQgRG9jdW1lbnQ6OmludmFsaWRhdGVBY2Nl
c3NLZXlNYXAoKQogICAgIG1fZWxlbWVudHNCeUFjY2Vzc0tleS5jbGVhcigpOwogfQogCi12b2lk
IERvY3VtZW50OjphZGRJbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBs
JiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVtZW50KQotewotICAgIHJldHVybiBtX2ltYWdl
c0J5VXNlbWFwLmFkZChuYW1lLCBlbGVtZW50LCAqdGhpcyk7Ci19Ci0KLXZvaWQgRG9jdW1lbnQ6
OnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUs
IEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgcmV0dXJuIG1faW1hZ2VzQnlVc2Vt
YXAucmVtb3ZlKG5hbWUsIGVsZW1lbnQpOwotfQotCi1IVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVu
dDo6aW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFtZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5nZXRFbGVtZW50QnlVc2VtYXAobmFt
ZSwgKnRoaXMpOwotfQotCiBFeGNlcHRpb25PcjxTZWxlY3RvclF1ZXJ5Jj4gRG9jdW1lbnQ6OnNl
bGVjdG9yUXVlcnlGb3JTdHJpbmcoY29uc3QgU3RyaW5nJiBzZWxlY3RvclN0cmluZykKIHsKICAg
ICBpZiAoc2VsZWN0b3JTdHJpbmcuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDIzMTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zODEsMTAgKzM4MSw2IEBAIHB1YmxpYzoKICAgICBFbGVtZW50KiBnZXRF
bGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIHZvaWQgaW52YWxpZGF0
ZUFjY2Vzc0tleU1hcCgpOwogCi0gICAgdm9pZCBhZGRJbWFnZUVsZW1lbnRCeVVzZW1hcChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJiwgSFRNTEltYWdlRWxlbWVudCYpOwotICAgIHZvaWQgcmVtb3Zl
SW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVs
ZW1lbnQmKTsKLSAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnRCeVVzZW1hcChjb25z
dCBBdG9taWNTdHJpbmdJbXBsJikgY29uc3Q7Ci0KICAgICBFeGNlcHRpb25PcjxTZWxlY3RvclF1
ZXJ5Jj4gc2VsZWN0b3JRdWVyeUZvclN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNs
ZWFyU2VsZWN0b3JRdWVyeUNhY2hlKCk7CiAKQEAgLTE2ODIsOCArMTY3OCw2IEBAIHByaXZhdGU6
CiAKICAgICBIYXNoTWFwPFN0cmluZ0ltcGwqLCBFbGVtZW50KiwgQVNDSUlDYXNlSW5zZW5zaXRp
dmVIYXNoPiBtX2VsZW1lbnRzQnlBY2Nlc3NLZXk7CiAKLSAgICBEb2N1bWVudE9yZGVyZWRNYXAg
bV9pbWFnZXNCeVVzZW1hcDsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxDb25zdGFudFByb3BlcnR5
TWFwPiBtX2NvbnN0YW50UHJvcGVydHlNYXA7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2VsZWN0
b3JRdWVyeUNhY2hlPiBtX3NlbGVjdG9yUXVlcnlDYWNoZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9UcmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuY3BwCShyZXZpc2lvbiAyMzEzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgogI2luY2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxMYWJlbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKQEAgLTUyLDcgKzUzLDcgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RydWN0IFNhbWVTaXplQXNUcmVlU2NvcGUgewotICAgIHZvaWQqIHBvaW50ZXJz
WzhdOworICAgIHZvaWQqIHBvaW50ZXJzWzldOwogfTsKIAogQ09NUElMRV9BU1NFUlQoc2l6ZW9m
KFRyZWVTY29wZSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNUcmVlU2NvcGUpLCB0cmVlc2NvcGVfc2hv
dWxkX3N0YXlfc21hbGwpOwpAQCAtODIsNyArODMsOSBAQCBUcmVlU2NvcGU6On5UcmVlU2NvcGUo
KSA9IGRlZmF1bHQ7CiB2b2lkIFRyZWVTY29wZTo6ZGVzdHJveVRyZWVTY29wZURhdGEoKQogewog
ICAgIG1fZWxlbWVudHNCeUlkID0gbnVsbHB0cjsKKyAgICBtX2VsZW1lbnRzQnlOYW1lID0gbnVs
bHB0cjsKICAgICBtX2ltYWdlTWFwc0J5TmFtZSA9IG51bGxwdHI7CisgICAgbV9pbWFnZXNCeVVz
ZW1hcCA9IG51bGxwdHI7CiAgICAgbV9sYWJlbHNCeUZvckF0dHJpYnV0ZSA9IG51bGxwdHI7CiB9
CiAKQEAgLTI1MCwxNyArMjUzLDMyIEBAIHZvaWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZU1hcChI
VE1MTWFwRWwKICAgICBtX2ltYWdlTWFwc0J5TmFtZS0+cmVtb3ZlKCpuYW1lLCBpbWFnZU1hcCk7
CiB9CiAKLUhUTUxNYXBFbGVtZW50KiBUcmVlU2NvcGU6OmdldEltYWdlTWFwKGNvbnN0IFN0cmlu
ZyYgdXJsKSBjb25zdAorSFRNTE1hcEVsZW1lbnQqIFRyZWVTY29wZTo6Z2V0SW1hZ2VNYXAoY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmICghbV9pbWFnZU1hcHNCeU5h
bWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8gaGFzaFBvc2l0aW9uID0gdXJs
LmZpbmQoJyMnKTsKLSAgICBpZiAoaGFzaFBvc2l0aW9uID09IG5vdEZvdW5kKQorICAgIGlmICgh
bV9pbWFnZU1hcHNCeU5hbWUgfHwgIW5hbWUuaW1wbCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBTdHJpbmcgbmFtZSA9IHVybC5zdWJzdHJpbmcoaGFzaFBvc2l0aW9uICsgMSk7Ci0g
ICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgIHJldHVybiBtX2ltYWdlTWFwc0J5TmFtZS0+Z2V0
RWxlbWVudEJ5TWFwTmFtZSgqbmFtZS5pbXBsKCksICp0aGlzKTsKK30KKwordm9pZCBUcmVlU2Nv
cGU6OmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIG5hbWUs
IEhUTUxJbWFnZUVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgaWYgKCFtX2ltYWdlc0J5VXNlbWFw
KQorICAgICAgICBtX2ltYWdlc0J5VXNlbWFwID0gc3RkOjptYWtlX3VuaXF1ZTxEb2N1bWVudE9y
ZGVyZWRNYXA+KCk7CisgICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAtPmFkZChuYW1lLCBlbGVt
ZW50LCAqdGhpcyk7Cit9CisKK3ZvaWQgVHJlZVNjb3BlOjpyZW1vdmVJbWFnZUVsZW1lbnRCeVVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50JiBlbGVt
ZW50KQoreworICAgIGlmICghbV9pbWFnZXNCeVVzZW1hcCkKKyAgICAgICAgcmV0dXJuOworICAg
IG1faW1hZ2VzQnlVc2VtYXAtPnJlbW92ZShuYW1lLCBlbGVtZW50KTsKK30KKworSFRNTEltYWdl
RWxlbWVudCogVHJlZVNjb3BlOjppbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsJiBuYW1lKSBjb25zdAoreworICAgIGlmICghbV9pbWFnZXNCeVVzZW1hcCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIG1faW1hZ2VNYXBzQnlOYW1lLT5nZXRFbGVt
ZW50QnlNYXBOYW1lKCpBdG9taWNTdHJpbmcobmFtZSkuaW1wbCgpLCAqdGhpcyk7CisgICAgcmV0
dXJuIG1faW1hZ2VzQnlVc2VtYXAtPmdldEVsZW1lbnRCeVVzZW1hcChuYW1lLCAqdGhpcyk7CiB9
CiAKIHZvaWQgVHJlZVNjb3BlOjphZGRMYWJlbChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBmb3JB
dHRyaWJ1dGVWYWx1ZSwgSFRNTExhYmVsRWxlbWVudCYgZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20v
VHJlZVNjb3BlLmgJKHJldmlzaW9uIDIzMTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVl
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiBjbGFzcyBDb250YWluZXJOb2RlOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVtZW50
OworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNzIEhUTUxMYWJlbEVsZW1lbnQ7CiBjbGFz
cyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIExheW91dFBvaW50OwpAQCAtODAsNyArODEsMTEgQEAg
cHVibGljOgogCiAgICAgdm9pZCBhZGRJbWFnZU1hcChIVE1MTWFwRWxlbWVudCYpOwogICAgIHZv
aWQgcmVtb3ZlSW1hZ2VNYXAoSFRNTE1hcEVsZW1lbnQmKTsKLSAgICBIVE1MTWFwRWxlbWVudCog
Z2V0SW1hZ2VNYXAoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0OworICAgIEhUTUxNYXBFbGVtZW50
KiBnZXRJbWFnZU1hcChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKworICAgIHZvaWQgYWRk
SW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYsIEhUTUxJbWFnZUVs
ZW1lbnQmKTsKKyAgICB2b2lkIHJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmLCBIVE1MSW1hZ2VFbGVtZW50Jik7CisgICAgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2VFbGVtZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OwogCiAg
ICAgLy8gRm9yIGFjY2Vzc2liaWxpdHkuCiAgICAgYm9vbCBzaG91bGRDYWNoZUxhYmVsc0J5Rm9y
QXR0cmlidXRlKCkgY29uc3QgeyByZXR1cm4gISFtX2xhYmVsc0J5Rm9yQXR0cmlidXRlOyB9CkBA
IC0xMjQsNiArMTI5LDcgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRP
cmRlcmVkTWFwPiBtX2VsZW1lbnRzQnlJZDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8RG9jdW1lbnRP
cmRlcmVkTWFwPiBtX2VsZW1lbnRzQnlOYW1lOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb2N1bWVu
dE9yZGVyZWRNYXA+IG1faW1hZ2VNYXBzQnlOYW1lOworICAgIHN0ZDo6dW5pcXVlX3B0cjxEb2N1
bWVudE9yZGVyZWRNYXA+IG1faW1hZ2VzQnlVc2VtYXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERv
Y3VtZW50T3JkZXJlZE1hcD4gbV9sYWJlbHNCeUZvckF0dHJpYnV0ZTsKIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxJZFRhcmdldE9ic2VydmVyUmVnaXN0cnk+IG1faWRUYXJnZXRPYnNlcnZlclJlZ2lz
dHJ5OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMzEzMjUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiSFRNTEZvcm1FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxQaWN0
dXJlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxNYXBFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TFNvdXJjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MU3Jjc2V0UGFyc2VyLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgpAQCAtMjExLDEyICsyMTIsMTIgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgICAgICBzZWxlY3RJbWFnZVNvdXJjZSgpOwogICAgIGVs
c2UgaWYgKG5hbWUgPT0gdXNlbWFwQXR0cikgewogICAgICAgICBpZiAoaXNDb25uZWN0ZWQoKSAm
JiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLnJlbW92
ZUltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAg
ICAgICAgICAgIHRyZWVTY29wZSgpLnJlbW92ZUltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNl
ZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKIAogICAgICAgICBtX3BhcnNlZFVzZW1hcCA9IHBhcnNl
SFRNTEhhc2hOYW1lUmVmZXJlbmNlKHZhbHVlKTsKIAogICAgICAgICBpZiAoaXNDb25uZWN0ZWQo
KSAmJiAhbV9wYXJzZWRVc2VtYXAuaXNOdWxsKCkpCi0gICAgICAgICAgICBkb2N1bWVudCgpLmFk
ZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKKyAg
ICAgICAgICAgIHRyZWVTY29wZSgpLmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVz
ZW1hcC5pbXBsKCksICp0aGlzKTsKICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gY29tcG9zaXRlQXR0
cikgewogICAgICAgICAvLyBGSVhNRTogaW1hZ2VzIGRvbid0IHN1cHBvcnQgYmxlbmQgbW9kZXMg
aW4gdGhlaXIgY29tcG9zaXRpbmcgYXR0cmlidXRlLgogICAgICAgICBCbGVuZE1vZGUgYmxlbmRP
cCA9IEJsZW5kTW9kZU5vcm1hbDsKQEAgLTMyMCw3ICszMjEsNyBAQCBOb2RlOjpJbnNlcnRlZElu
dG9BbmNlc3RvclJlc3VsdCBIVE1MSW1hCiAgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvQW5jZXN0b3JS
ZXN1bHQgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG9BbmNlc3RvcihpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAKICAgICBp
ZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50ICYmICFtX3BhcnNlZFVzZW1hcC5p
c051bGwoKSkKLSAgICAgICAgZG9jdW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9w
YXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CisgICAgICAgIHRyZWVTY29wZSgpLmFkZEltYWdl
RWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsKIAogICAgIGlm
IChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpIHsKICAgICAgICAgc2V0UGlj
dHVyZUVsZW1lbnQoJmRvd25jYXN0PEhUTUxQaWN0dXJlRWxlbWVudD4oKnBhcmVudE5vZGUoKSkp
OwpAQCAtMzQxLDcgKzM0Miw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb21B
bmNlc3QKICAgICAgICAgbV9mb3JtLT5yZW1vdmVJbWdFbGVtZW50KHRoaXMpOwogCiAgICAgaWYg
KHJlbW92YWxUeXBlLmRpc2Nvbm5lY3RlZEZyb21Eb2N1bWVudCAmJiAhbV9wYXJzZWRVc2VtYXAu
aXNOdWxsKCkpCi0gICAgICAgIGRvY3VtZW50KCkucmVtb3ZlSW1hZ2VFbGVtZW50QnlVc2VtYXAo
Km1fcGFyc2VkVXNlbWFwLmltcGwoKSwgKnRoaXMpOworICAgICAgICB0cmVlU2NvcGUoKS5yZW1v
dmVJbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9wYXJzZWRVc2VtYXAuaW1wbCgpLCAqdGhpcyk7CiAK
ICAgICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50PihwYXJlbnROb2RlKCkpKQogICAgICAgICBz
ZXRQaWN0dXJlRWxlbWVudChudWxscHRyKTsKQEAgLTQ4NCw2ICs0ODUsMTEgQEAgYm9vbCBIVE1M
SW1hZ2VFbGVtZW50OjptYXRjaGVzVXNlbWFwKGNvbgogICAgIHJldHVybiBtX3BhcnNlZFVzZW1h
cC5pbXBsKCkgPT0gJm5hbWU7CiB9CiAKK0hUTUxNYXBFbGVtZW50KiBIVE1MSW1hZ2VFbGVtZW50
Ojphc3NvY2lhdGVkTWFwRWxlbWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRyZWVTY29wZSgp
LmdldEltYWdlTWFwKG1fcGFyc2VkVXNlbWFwKTsKK30KKwogY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdAogewogICAgIHJldHVybiBhdHRyaWJ1dGVXaXRo
b3V0U3luY2hyb25pemF0aW9uKGFsdEF0dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDIzMTMyNSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxGb3JtRWxlbWVudDsKK2NsYXNzIEhUTUxNYXBF
bGVtZW50OwogCiBzdHJ1Y3QgSW1hZ2VDYW5kaWRhdGU7CiAKQEAgLTYzLDYgKzY0LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1faW1h
Z2VMb2FkZXIuc2V0TG9hZE1hbnVhbGx5KGxvYWRNYW51YWxseSk7IH0KIAogICAgIGJvb2wgbWF0
Y2hlc1VzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJikgY29uc3Q7CisgICAgSFRNTE1hcEVs
ZW1lbnQqIGFzc29jaWF0ZWRNYXBFbGVtZW50KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9S
VCBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCgpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMjMxMzI1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcg
QEAgSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRQogewogICAgIGlmICht
X25hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gZG9j
dW1lbnQoKS5pbWFnZUVsZW1lbnRCeVVzZW1hcCgqbV9uYW1lLmltcGwoKSk7CisgICAgcmV0dXJu
IHRyZWVTY29wZSgpLmltYWdlRWxlbWVudEJ5VXNlbWFwKCptX25hbWUuaW1wbCgpKTsKIH0KIAog
dm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMjMxMzI1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU2LDggKzY1
NiwxMCBAQCBMYXlvdXRVbml0IFJlbmRlckltYWdlOjptaW5pbXVtUmVwbGFjZWRICiAKIEhUTUxN
YXBFbGVtZW50KiBSZW5kZXJJbWFnZTo6aW1hZ2VNYXAoKSBjb25zdAogewotICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlID0gaXM8SFRNTEltYWdlRWxlbWVudD4oZWxlbWVudCgpKSA/IGRvd25j
YXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGVsZW1lbnQoKSkgOiBudWxscHRyOwotICAgIHJldHVybiBp
bWFnZSA/IGltYWdlLT50cmVlU2NvcGUoKS5nZXRJbWFnZU1hcChpbWFnZS0+YXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbih1c2VtYXBBdHRyKSkgOiBudWxscHRyOworICAgIGF1dG8qIGlt
YWdlRWxlbWVudCA9IGVsZW1lbnQoKTsKKyAgICBpZiAoIWltYWdlRWxlbWVudCB8fCAhaXM8SFRN
TEltYWdlRWxlbWVudD4oaW1hZ2VFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PEhUTUxJbWFnZUVsZW1lbnQ+KGltYWdlRWxlbWVudCktPmFzc29j
aWF0ZWRNYXBFbGVtZW50KCk7CiB9CiAKIGJvb2wgUmVuZGVySW1hZ2U6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBIaXRUZXN0QWN0aW9uIGhpdFRlc3RBY3Rpb24pCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzEzMjUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0wNS0wMyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBVc2luZyBpbWFnZSBtYXAgaW5zaWRlIGEgc2hhZG93IHRyZWUg
cmVzdWx0cyBoaXRzIGEgcmVsZWFzZSBhc3NlcnQgaW4gRG9jdW1lbnRPcmRlcmVkTWFwOjphZGQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTIzOAor
CisgICAgICAgIFJldmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgICogZmFzdC9p
bWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tbmVzdGVkLXNoYWRvdy10cmVlLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2ltYWdlbWFwLWluLXNoYWRvdy10cmVl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4t
c2hhZG93LXRyZWUuaHRtbDogQWRkZWQuCisKIDIwMTgtMDUtMDMgIFJ5YW4gSGFkZGFkICA8cnlh
bmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgTWFyayBtZWRpYS9jb250cm9scy9waXAtcGxh
Y2Vob2xkZXItd2l0aG91dC12aWRlby1jb250cm9scy5odG1sIGFzIGZsYWt5LgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2VtYXAtaW4tc2hhZG93LXRyZWUtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWluLXNoYWRv
dy10cmVlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2lt
YWdlcy9pbWFnZW1hcC1pbi1zaGFkb3ctdHJlZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1IEBACitUaGlzIHRlc3RzIGFjdGl2aW5nIGFuIGltYWdlIG1hcCBhcmVhIGlu
c2lkZSBhIHNoYWRvdyB0cmVlLiBXZWJLaXQgc2hvdWxkIG5vdCBoaXQgYW55IGFzc2VydGlvbnMu
CitUbyBtYW51YWxseSB0ZXN0LCBjbGljayBvbiBncmVlbiBib3ggb24gdGhlIGxlZnQgdXBwZXIg
cXVhZHJhbnQuCisKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2Vt
YXAtaW4tc2hhZG93LXRyZWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2lt
YWdlcy9pbWFnZW1hcC1pbi1zaGFkb3ctdHJlZS5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdlbWFwLWluLXNoYWRvdy10cmVlLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3MSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy91aS1oZWxwZXIuanMiPjwvc2NyaXB0PgorPHA+
VGhpcyB0ZXN0cyBhY3RpdmluZyBhbiBpbWFnZSBtYXAgYXJlYSBpbnNpZGUgYSBzaGFkb3cgdHJl
ZS4gV2ViS2l0IHNob3VsZCBub3QgaGl0IGFueSBhc3NlcnRpb25zLjxicj4KK1RvIG1hbnVhbGx5
IHRlc3QsIGNsaWNrIG9uIGdyZWVuIGJveCBvbiB0aGUgbGVmdCB1cHBlciBxdWFkcmFudC48L3A+
Cis8ZGl2IGlkPSJyZXN1bHQiPjwvZGl2PgorPHNjcmlwdD4KKworY29uc3QgaG9zdCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChob3N0
KTsKKworY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHttb2RlOiAnY2xvc2Vk
J30pOworc2hhZG93Um9vdC5pbm5lckhUTUwgPSBgCis8aW1nIHNyYz0icmVzb3VyY2VzL2dyZWVu
LTQwMHg0MDAucG5nIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgdXNlbWFwPSIjaW1hZ2VtYXAi
IG9ubG9hZD0ic3RhcnRUZXN0KCkiPgorPG1hcCBuYW1lPSJpbWFnZW1hcCI+CisgICAgPGFyZWEg
aWQ9ImFyZWEiIHNoYXBlPSJyZWN0IiBjb29yZHM9IjAsMCwyMDAsMjAwIiBocmVmPSIjIiBvbmNs
aWNrPSJkaWRDbGljayhldmVudCkiIHRhYmluZGV4PSIwIj4KKzwvbWFwPmA7Citjb25zdCByZWN0
ID0gaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworZnVuY3Rpb24gc3RhcnRUZXN0KCkK
K3sKKyAgICBpZiAoIXdpbmRvdy50ZXN0UnVubmVyKQorICAgICAgICByZXR1cm47CisgICAgVUlI
ZWxwZXIuYWN0aXZhdGVBdChyZWN0LnggKyAxMDAsIHJlY3QueSArIDEwMCkudGhlbihjaGVjayk7
Cit9CisKK2xldCBkaWRDbGlja1dhc0NhbGxlZCA9IGZhbHNlOworZnVuY3Rpb24gZGlkQ2xpY2so
ZXZlbnQpCit7CisgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKKyAgICBkaWRDbGlja1dhc0Nh
bGxlZCA9IHRydWU7Cit9CisKK2Z1bmN0aW9uIGNoZWNrKCkKK3sKKyAgICBsZXQgcmVzdWx0ID0g
Jyc7CisgICAgaWYgKCFkaWRDbGlja1dhc0NhbGxlZCkKKyAgICAgICAgcmVzdWx0ID0gJ0ZBSUwg
LSBKYXZhU2NyaXB0IHdhcyBub3QgZXhlY3V0ZWQnOworICAgIGVsc2UgaWYgKHNoYWRvd1Jvb3Qu
YWN0aXZlRWxlbWVudCAhPSBzaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCdhcmVhJykpCisgICAg
ICAgIHJlc3VsdCA9ICdGQUlMIC0gVGhlIGVsZW1lbnQgd2FzIG5vdCBmb2N1c2VkJzsKKyAgICBl
bHNlCisgICAgICAgIHJlc3VsdCA9ICdQQVNTJzsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncmVzdWx0JykudGV4dENvbnRlbnQgPSByZXN1bHQ7CisgICAgaWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KKworaWYgKHdpbmRvdy50
ZXN0UnVubmVyKSB7CisgICAgc2V0VGltZW91dCgoKSA9PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUo
KSwgMzAwMCk7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7Cit9IGVsc2UgeworICAgIGhvc3Qub25jbGljayA9IChldmVudCkgPT4g
eworICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOworCisgICAgICAgIGNvbnN0IGlzSW5V
cHBlckxlZnRRdWFkcmFudCA9IHJlY3QueCA8IGV2ZW50LnBhZ2VYICYmIGV2ZW50LnBhZ2VYIDwg
cmVjdC54ICsgMjAwCisgICAgICAgICAgICAmJiByZWN0LnkgPCBldmVudC5wYWdlWSAmJiBldmVu
dC5wYWdlWSA8IHJlY3QueSArIDIwMDsKKyAgICAgICAgaWYgKCFpc0luVXBwZXJMZWZ0UXVhZHJh
bnQpIHsKKyAgICAgICAgICAgIGFsZXJ0KCdQbGVhc2UgY2xpY2sgb24gdGhlIHVwcGVyIGxlZnQg
cXVhZHJhbnQgb2YgdGhlIGdyZWVuIGJveC4nKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNoZWNrKCk7CisgICAgfTsKK30KKworPC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2hlYWQ+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL3Zp
ZGVvLXBsYXktc3RhbGwuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L21lZGlhL3ZpZGVvLXBsYXktc3RhbGwuaHRtbAkocmV2aXNpb24gMjMxMzI1KQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS92aWRlby1wbGF5LXN0YWxsLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDUgKzEsMTI3IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgotICAgIDxoZWFk
PgotICAgICAgICA8dGl0bGU+J3N0YWxsZWQnIGV2ZW50IHRlc3Q8L3RpdGxlPgotICAgICAgICA8
c2NyaXB0IHNyYz0uLi8uLi9tZWRpYS1yZXNvdXJjZXMvbWVkaWEtZmlsZS5qcz48L3NjcmlwdD4K
LSAgICAgICAgPHNjcmlwdCBzcmM9Li4vLi4vbWVkaWEtcmVzb3VyY2VzL3ZpZGVvLXRlc3QuanM+
PC9zY3JpcHQ+Ci0gICAgICAgIDxzY3JpcHQ+Ci0KLSAgICAgICAgICAgIHZhciBwbGF5Q291bnQg
PSAwOwotCi0gICAgICAgICAgICBmdW5jdGlvbiBzdGFydCgpIAotICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICB3YWl0Rm9y
RXZlbnQoJ2R1cmF0aW9uY2hhbmdlJyk7Ci0gICAgICAgICAgICAgICAgd2FpdEZvckV2ZW50KCds
b2FkZWRtZXRhZGF0YScpOwotICAgICAgICAgICAgICAgIHdhaXRGb3JFdmVudCgnbG9hZGVkZGF0
YScpOwotCi0gICAgICAgICAgICAgICAgbWVkaWFFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2Nh
bnBsYXknLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vICdzdGFsbGVkJyB0
YWtlcyB0aHJlZSBzZWNvbmRzIHRvIGZpcmUsIHNvICdjYW5wbGF5JyBtYXkgZmlyZSBtb3JlIHRo
YW4gb25jZQotICAgICAgICAgICAgICAgICAgICAvLyBkZXBlbmRpbmcgb24gaG93IHRoZSBlbmdp
bmUgcGFyc2VzIGluY29taW5nIG1lZGlhIGRhdGEuCi0gICAgICAgICAgICAgICAgICAgIGlmICgr
K3BsYXlDb3VudCA+IDEpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgiRVZFTlQoY2FucGxheSkiKTsKLSAgICAgICAgICAg
ICAgICAgICAgcnVuKCJ2aWRlby5wbGF5KCkiKTsKLSAgICAgICAgICAgICAgICB9ICk7Ci0KLSAg
ICAgICAgICAgICAgICB3YWl0Rm9yRXZlbnQoJ3N0YWxsZWQnLCBmdW5jdGlvbiAoKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8uY3VycmVudFRpbWUiLCAwLCAiIT0i
KTsKLSAgICAgICAgICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5wbGF5YmFja1JhdGUi
LCAxLCAiPT09Iik7Ci0gICAgICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ucGF1
c2VkIiwgZmFsc2UsICI9PT0iKTsKLSAgICAgICAgICAgICAgICAgICAgZW5kVGVzdCgpOwotICAg
ICAgICAgICAgICAgIH0gKTsKLQotICAgICAgICAgICAgICAgIHZhciBtZWRpYUZpbGUgPSBmaW5k
TWVkaWFGaWxlKCJ2aWRlbyIsICIuLi8uLi8uLi8uLi9tZWRpYS9jb250ZW50L2xvbmctdGVzdCIp
OwotICAgICAgICAgICAgICAgIHZhciBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRmlsZShtZWRpYUZp
bGUpOwotICAgICAgICAgICAgICAgIHZpZGVvLnNyYyA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAv
bWVkaWEvcmVzb3VyY2VzL3NlcnZlLXZpZGVvLnBocD9uYW1lPSIgKyBtZWRpYUZpbGUgKyAiJnR5
cGU9IiArIG1pbWVUeXBlICsgIiZzdGFsbE9mZnNldD0xMDAwMDAmc3RhbGxEdXJhdGlvbj02MCZj
aHVua1NpemU9MTAyNCI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgPC9zY3JpcHQ+Ci0gICAg
PC9oZWFkPgotICAgIDxib2R5IG9ubG9hZD0ic2V0VGltZW91dChzdGFydCwgMCkiPgotICAgICAg
ICA8dmlkZW8gY29udHJvbHM+PC92aWRlbz4KLSAgICAgICAgPHA+VGVzdCB0aGF0IGEgc3RhbGxl
ZCBldmVudCBpcyBzZW50IHdoZW4gbWVkaWEgbG9hZGluZyBzdGFsbHMuPC9wPgotICAgIDwvYm9k
eT4KKzxoZWFkPgorPHRpdGxlPidzdGFsbGVkJyBldmVudCB0ZXN0PC90aXRsZT4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHhzY3JpcHQgc3Jj
PS4uLy4uL21lZGlhLXJlc291cmNlcy9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorPHhzY3JpcHQg
c3JjPS4uLy4uL21lZGlhLXJlc291cmNlcy92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorPHNjcmlw
dD4KKworICAgIHZhciBwbGF5Q291bnQgPSAwOworCisgICAgZnVuY3Rpb24gc3RhcnQoKSAKKyAg
ICB7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgYWxlcnQoJ2xvYWRlZCEnKTsKKyAgICAgICAg
ZmluZE1lZGlhRWxlbWVudCgpOworICAgICAgICB3YWl0Rm9yRXZlbnQoJ2R1cmF0aW9uY2hhbmdl
Jyk7CisgICAgICAgIHdhaXRGb3JFdmVudCgnbG9hZGVkbWV0YWRhdGEnKTsKKyAgICAgICAgd2Fp
dEZvckV2ZW50KCdsb2FkZWRkYXRhJyk7CisKKyAgICAgICAgbWVkaWFFbGVtZW50LmFkZEV2ZW50
TGlzdGVuZXIoJ2NhbnBsYXknLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAvLyAnc3RhbGxl
ZCcgdGFrZXMgdGhyZWUgc2Vjb25kcyB0byBmaXJlLCBzbyAnY2FucGxheScgbWF5IGZpcmUgbW9y
ZSB0aGFuIG9uY2UKKyAgICAgICAgICAgIC8vIGRlcGVuZGluZyBvbiBob3cgdGhlIGVuZ2luZSBw
YXJzZXMgaW5jb21pbmcgbWVkaWEgZGF0YS4KKyAgICAgICAgICAgIGlmICgrK3BsYXlDb3VudCA+
IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgY29uc29sZVdyaXRlKCJF
VkVOVChjYW5wbGF5KSIpOworICAgICAgICAgICAgcnVuKCJ2aWRlby5wbGF5KCkiKTsKKyAgICAg
ICAgfSApOworCisgICAgICAgIHdhaXRGb3JFdmVudCgnc3RhbGxlZCcsIGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8uY3VycmVudFRpbWUiLCAwLCAiIT0iKTsK
KyAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgidmlkZW8ucGxheWJhY2tSYXRlIiwgMSwgIj09PSIp
OworICAgICAgICAgICAgdGVzdEV4cGVjdGVkKCJ2aWRlby5wYXVzZWQiLCBmYWxzZSwgIj09PSIp
OworICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICB9ICk7CisKKyAgICAgICAgdmFyIG1l
ZGlhRmlsZSA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgIi4uLy4uLy4uLy4uL21lZGlhL2NvbnRl
bnQvbG9uZy10ZXN0Iik7CisgICAgICAgIHZhciBtaW1lVHlwZSA9IG1pbWVUeXBlRm9yRmlsZSht
ZWRpYUZpbGUpOworICAgICAgICBhbGVydCgiaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL3Jl
c291cmNlcy9zZXJ2ZS12aWRlby5waHA/bmFtZT0iICsgbWVkaWFGaWxlICsgIiZ0eXBlPSIgKyBt
aW1lVHlwZSArICImc3RhbGxPZmZzZXQ9MTAwMDAwJnN0YWxsRHVyYXRpb249NjAmY2h1bmtTaXpl
PTEwMjQiKTsKKyAgICAgICAgdmlkZW8uc3JjID0gImh0dHA6Ly8xMjcuMC4wLjE6ODAwMC9tZWRp
YS9yZXNvdXJjZXMvc2VydmUtdmlkZW8ucGhwP25hbWU9IiArIG1lZGlhRmlsZSArICImdHlwZT0i
ICsgbWltZVR5cGUgKyAiJnN0YWxsT2Zmc2V0PTEwMDAwMCZzdGFsbER1cmF0aW9uPTYwJmNodW5r
U2l6ZT0xMDI0IjsKKyAgICB9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJz
ZXRUaW1lb3V0KHN0YXJ0LCAwKSI+Cis8IS0tPHZpZGVvIGF1dG9wbGF5IGNvbnRyb2xzPgorICAg
IDxzb3VyY2Ugc3JjPSJodHRwOi8vMTI3LjAuMC4xOjgwMDAvbWVkaWEvcmVzb3VyY2VzL3NlcnZl
LXZpZGVvLnBocD9uYW1lPS4uLy4uLy4uLy4uL21lZGlhL2NvbnRlbnQvbG9uZy10ZXN0Lm1wNCZ0
eXBlPXZpZGVvL21wNCZzdGFsbE9mZnNldD0xMDAwMDAmc3RhbGxEdXJhdGlvbj02MCZjaHVua1Np
emU9MTAyNCI+Cis8L3ZpZGVvPi0tPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy50ZXN0UnVubmVy
KSB7CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgc2V0VGltZW91dCgoKSA9
PiB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKSwgMzAwMCk7Cit9CisKK2NvbnN0IHNvdXJjZSA9IGA8
IURPQ1RZUEUgaHRtbD4KKzx2aWRlbyBhdXRvcGxheSBjb250cm9scz4KKyAgICA8c291cmNlIHNy
Yz0iaHR0cDovLzEyNy4wLjAuMTo4MDAwL21lZGlhL3Jlc291cmNlcy9zZXJ2ZS12aWRlby5waHA/
bmFtZT0uLi8uLi8uLi8uLi9tZWRpYS9jb250ZW50L2xvbmctdGVzdC5tcDQmdHlwZT12aWRlby9t
cDQmc3RhbGxPZmZzZXQ9MTAwMDAwJnN0YWxsRHVyYXRpb249NjAmY2h1bmtTaXplPTEwMjQiPgor
PC92aWRlbz5gOworCitmdW5jdGlvbiBpbnNlcnRGcmFtZVdpdGhWaWRlbygpIHsKKyAgICBjb25z
dCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKKyAgICBkb2N1bWVu
dC5ib2R5LmFwcGVuZChpZnJhbWUpOworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQub3Blbigp
OworICAgIGlmcmFtZS5jb250ZW50RG9jdW1lbnQud3JpdGUoc291cmNlKTsKKyAgICBpZnJhbWUu
Y29udGVudERvY3VtZW50LndyaXRlKGA8c2NyaXB0PgorICAgICAgICBkb2N1bWVudC5xdWVyeVNl
bGVjdG9yKCd2aWRlbycpLmFkZEV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCAoKSA9PiB0b3AuZGVs
ZXRlRnJhbWUod2luZG93LmZyYW1lRWxlbWVudCkpOworPC9zY3JgICsgYGlwdD5gKTsKKyAgICBp
ZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCk7Cit9CisKK2NvbnN0IG1heEZyYW1lQ291bnQg
PSA1OworbGV0IHJlbWFpbmlnRnJhbWVDb3VudDsKK2Z1bmN0aW9uIGFkZEZyYW1lcygpIHsKKyAg
ICByZW1haW5pZ0ZyYW1lQ291bnQgPSBtYXhGcmFtZUNvdW50OworICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgbWF4RnJhbWVDb3VudDsgaSsrKQorICAgICAgICBpbnNlcnRGcmFtZVdpdGhWaWRlbygp
OworfQorCitmdW5jdGlvbiBkZWxldGVGcmFtZShpZnJhbWUpIHsKKyAgICBpZnJhbWUuY29udGVu
dERvY3VtZW50Lm9wZW4oKTsKKyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LndyaXRlKCcnKTsK
KyAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmNsb3NlKCcnKTsKKyAgICBzZXRUaW1lb3V0KCgp
ID0+IGlmcmFtZS5yZW1vdmUoKSwgNTAwMCk7CisvLyAgICBpZnJhbWUucmVtb3ZlKCk7CisgICAg
cmVtYWluaWdGcmFtZUNvdW50LS07CisgICAgaWYgKCFyZW1haW5pZ0ZyYW1lQ291bnQpCisgICAg
ICAgIGFkZEZyYW1lcygpOworfQorCithZGRGcmFtZXMoKTsKKworLyoKKworZnVuY3Rpb24gZ2NB
bmRGaW5pc2goKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA1MDAwOyBpKyspIHsKKyAgICAg
ICAgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKKyAgICAgICAgZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc291cmNlJyk7CisgICAgfQorICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVy
KQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIGlmICh3aW5kb3cuR0NDb250
cm9sbGVyKQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIGlmICh3aW5kb3cu
R0NDb250cm9sbGVyKQorICAgICAgICBHQ0NvbnRyb2xsZXIuY29sbGVjdCgpOworICAgIGlmICh3
aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7Cit9CisK
K2Z1bmN0aW9uIHByZXBhcmUoKSB7CisgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigndmlkZW8n
KS5hZGRFdmVudExpc3RlbmVyKCdzdGFsbGVkJywgZGVsZXRlVmlkZW8pOworfQorCitmdW5jdGlv
biBkZWxldGVWaWRlbygpIHsKKyAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdpZnJhbWUnKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7Cisg
ICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMpOworICAgIGlm
cmFtZS5yZW1vdmUoKTsKKyAgICBzZXRUaW1lb3V0KGdjQW5kRmluaXNoLCAwKTsKK30KKworcHJl
cGFyZSgpOyovCisKKzwvc2NyaXB0PgorPHA+VGVzdCB0aGF0IGEgc3RhbGxlZCBldmVudCBpcyBz
ZW50IHdoZW4gbWVkaWEgbG9hZGluZyBzdGFsbHMuPC9wPgorPC9ib2R5PgogPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIz
MTMyNSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzI2LDggKzE3MjYsNiBAQCB3ZWJraXQub3JnL2IvMTgxOTY5IGZhc3Qv
ZXZlbnRzL21lc3NhZ2UtCiAKIHdlYmtpdC5vcmcvYi8xODE4MzEgWyBIaWdoU2llcnJhKyBdIGZh
c3QvZm9ybXMvc2VhcmNoZmllbGQtaGVpZ2h0cy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAotd2Vi
a2l0Lm9yZy9iLzE4MjU4OSBmYXN0L2RvbS9hZG9wdC1ub2RlLWNyYXNoLTIuaHRtbCBbIFBhc3Mg
RmFpbHVyZSBdCi0KIHdlYmtpdC5vcmcvYi8xODE2MTIgWyBEZWJ1ZyBdIHdlYmFuaW1hdGlvbnMv
YW5pbWF0aW9uLW9wYWNpdHktYW5pbWF0aW9uLWNyYXNoLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMTcyMjQxIGh0dHAvdGVzdHMvYXBwY2FjaGUvNDA0LXJlc291cmNlLXdp
dGgtc2xvdy1tYWluLXJlc291cmNlLnBocCBbIFBhc3MgRmFpbHVyZSBdCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>