<?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>180789</bug_id>
          
          <creation_ts>2017-12-13 18:07:03 -0800</creation_ts>
          <short_desc>Support Autoscrolling in contenteditable for WK2</short_desc>
          <delta_ts>2019-12-05 01:55:32 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</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="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>aestes</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1381442</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-13 18:07:03 -0800</bug_when>
    <thetext>Support Autoscrolling in contenteditable for WK2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382300</commentid>
    <comment_count>1</comment_count>
      <attachid>329517</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-15 14:01:57 -0800</bug_when>
    <thetext>Created attachment 329517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382301</commentid>
    <comment_count>2</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-15 14:02:48 -0800</bug_when>
    <thetext>&lt;rdar://problem/19005092&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382341</commentid>
    <comment_count>3</comment_count>
      <attachid>329527</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-15 15:33:47 -0800</bug_when>
    <thetext>Created attachment 329527
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382345</commentid>
    <comment_count>4</comment_count>
      <attachid>329527</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-12-15 15:45:35 -0800</bug_when>
    <thetext>Comment on attachment 329527
Patch

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

Looks good but r- for cleanup and test improvement.

&gt; Source/WebCore/page/EventHandler.h:341
&gt; +    IntPoint m_targetAutoscrollPosition;

In what coordinate system relative to which element?

&gt; Source/WebCore/page/EventHandler.h:342
&gt; +    bool m_isAutoscrollActive { false };

&quot;active&quot; is ambiguous; it could be &quot;is able to autoscroll&quot; or &quot;is autoscrolling now&quot;. I would call this m_isAutoscrolling.

Or it seems to correspond to the state of the autoscroll timer. Maybe you don&apos;t need this.

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:695
&gt; +- (void)cancelAutoscroll

blank line between methods please.

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1389
&gt; +        m_page-&gt;mainFrame().eventHandler().startTextAutoscroll(m_assistedNode-&gt;renderer(), position);

What if m_assistedNode-&gt;renderer() is null?

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:23
&gt; +            var tapPointX = targetRect.x+targetRect.width / 2;
&gt; +            var tapPointY = targetRect.y+targetRect.height / 2;

Spaces around +

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:30
&gt; +                    setTimeout(function(){ // wait a spell while the keyboard comes up

We have functions to detect when the keyboard animation is finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382379</commentid>
    <comment_count>5</comment_count>
      <attachid>329542</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-15 16:49:28 -0800</bug_when>
    <thetext>Created attachment 329542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382398</commentid>
    <comment_count>6</comment_count>
      <attachid>329542</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-12-15 17:47:25 -0800</bug_when>
    <thetext>Comment on attachment 329542
Patch

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

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:690
&gt; +// @protocol UITextAutoscrolling

Nit - we should usually indicate this using `#pragma mark - UITextAutoscrolling`

&gt; Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm:703
&gt; +    // used to scroll selection on keyboard up; we already scroll to visible

Nit - inline comments like these should begin with a capital letter and end with a period.

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:22
&gt; +            var tapPointX = targetRect.x+targetRect.width / 2;

Nit - spaces around the +

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:23
&gt; +            var tapPointY = targetRect.y+targetRect.height / 2;

Ditto.

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:34
&gt; +                                    testRunner.runUIScript(continueTouchAndDragFromPointToPoint(dragX, tapPointY, dragX+5, tapPointY), function() {

Ditto (spaces around +)

&gt; LayoutTests/fast/events/touch/ios/drag-to-autoscroll-in-single-line-editable.html:35
&gt; +                                        if (scrollBox.scrollLeft &gt; 0 )

Nit - extra space after the 0.

&gt; LayoutTests/fast/events/touch/ios/resources/basic-gestures.js:173
&gt; +        uiController.uiScriptComplete();

Nit - looks like there&apos;s an extra indent here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382420</commentid>
    <comment_count>7</comment_count>
      <attachid>329542</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2017-12-15 18:19:38 -0800</bug_when>
    <thetext>Comment on attachment 329542
Patch

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

&gt; Source/WebCore/page/EventHandler.h:339
&gt; +    WEBCORE_EXPORT void startTextAutoscroll(RenderObject* renderer, const FloatPoint&amp; position);

position -&gt; positionInWindow

&gt; Source/WebCore/page/EventHandler.h:342
&gt; +    bool m_isAutoscrolling { false };

My comment about not needing this and using the timer state still stands.

&gt; Source/WebCore/page/ios/EventHandlerIOS.mm:563
&gt; +void EventHandler::startTextAutoscroll(RenderObject* renderer, const FloatPoint&amp; position)

position -&gt; positionInWindow

&gt; Source/WebKit/UIProcess/WebPageProxy.h:573
&gt; +    void startAutoscrollAtPosition(const WebCore::FloatPoint&amp;);

Name the parameter positionInWindow

&gt; Source/WebKit/UIProcess/ios/WebPageProxyIOS.mm:721
&gt; +void WebPageProxy::startAutoscrollAtPosition(const WebCore::FloatPoint&amp; position)

Name the parameter positionInWindow

&gt; Source/WebKit/WebProcess/WebPage/WebPage.messages.in:102
&gt; +    StartAutoscrollAtPosition(WebCore::FloatPoint position)

Name the parameter positionInWindow

&gt; Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm:1386
&gt; +void WebPage::startAutoscrollAtPosition(const WebCore::FloatPoint&amp; position)

Name the parameter positionInWindow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382816</commentid>
    <comment_count>8</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-18 11:45:15 -0800</bug_when>
    <thetext>The m_isAutoscrolling is used in a call that the timer uses to determine if it should still be updating, so using the timer state instead would be problematic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382822</commentid>
    <comment_count>9</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2017-12-18 12:14:40 -0800</bug_when>
    <thetext>https://trac.webkit.org/r226067</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1382824</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-12-18 12:15:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/36112755&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1400451</commentid>
    <comment_count>11</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2018-02-19 11:59:12 -0800</bug_when>
    <thetext>*** Bug 148061 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1595745</commentid>
    <comment_count>12</comment_count>
      <attachid>329542</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2019-12-05 01:55:32 -0800</bug_when>
    <thetext>Comment on attachment 329542
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.h:342
&gt;&gt; +    bool m_isAutoscrolling { false };
&gt; 
&gt; My comment about not needing this and using the timer state still stands.

... also, these are in the public section :) they should be down with the other members</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329517</attachid>
            <date>2017-12-15 14:01:57 -0800</date>
            <delta_ts>2017-12-15 15:33:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180789-20171215140157.patch</filename>
            <type>text/plain</type>
            <size>22127</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTEyLTEzICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBBdXRv
c2Nyb2xsaW5nIGluIGNvbnRlbnRlZGl0YWJsZSBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY3RpdmF0ZSB0aGUgYXV0b3Njcm9sbENvbnRy
b2xsZXIgdG8gc2Nyb2xsIHRvIHRoZSBwb3NpdGlvbiBwcm92aWRlZCB0byB1cyBieSB0aGUKKyAg
ICAgICAgVUlQcm9jZXNzLiBBbGxvd3MgZm9yIHNjcm9sbGluZyBpbiBjb250ZW50RWRpdGFibGUg
Zm9yIFdlYktpdDIKKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10
by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLmh0bWwKKworICAgICAgICAqIHBh
Z2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b3Njcm9s
bENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW1lckZpcmVkKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRhdGVBdXRvc2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZv
clNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzdGFydFRleHRBdXRvc2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuY2VsVGV4dEF1dG9zY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9z
Y3JvbGwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRh
dGVBdXRvc2Nyb2xsKToKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVmZmVj
dGl2ZU1vdXNlUG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsIGNvbnN0KTogRGVsZXRlZC4K
KwogMjAxNy0xMi0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IEdldCByaWQgb2YgbWljcm90YXNrIGluIFNlcnZpY2VXb3JrZXJDb250YWluZXI6OmpvYlJlc29s
dmVkV2l0aFJlZ2lzdHJhdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9z
Y3JvbGxDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MywxNCAr
MjQzLDE0IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW0KICAgICAg
ICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKG1fZHJhZ0FuZERyb3BBdXRv
c2Nyb2xsUmVmZXJlbmNlUG9zaXRpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEF1dG9z
Y3JvbGxGb3JTZWxlY3Rpb246IHsKLSAgICAgICAgaWYgKCFmcmFtZS5ldmVudEhhbmRsZXIoKS5t
b3VzZVByZXNzZWQoKSkgeworICAgICAgICBpZiAoIWZyYW1lLmV2ZW50SGFuZGxlcigpLnNob3Vs
ZFVwZGF0ZUF1dG9zY3JvbGwoKSkgewogICAgICAgICAgICAgc3RvcEF1dG9zY3JvbGxUaW1lcigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKICAgICAgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkudXBkYXRlU2VsZWN0aW9uRm9yTW91c2VE
cmFnKCk7CiAjZW5kaWYKLSAgICAgICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXItPmF1dG9zY3JvbGwo
ZnJhbWUuZXZlbnRIYW5kbGVyKCkuZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZvclNlbGVjdGlvbkF1
dG9zY3JvbGwoKSk7CisgICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKGZy
YW1lLmV2ZW50SGFuZGxlcigpLnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTm9BdXRvc2Nyb2xsOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMjI1NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc2
LDE2ICsyNjc2LDI2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlmeUlmRW5kR2UK
IHsKIH0KIAotSW50UG9pbnQgRXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9y
U2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0Cit2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNj
aGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKQoreworICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Cit9CisgICAgCisjaWYgIVBMQVRGT1JN
KElPUykKKyAgICAKK0ludFBvaW50IEV2ZW50SGFuZGxlcjo6dGFyZ2V0UG9zaXRpb25Gb3JTZWxl
Y3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXN0S25vd25Nb3VzZVBv
c2l0aW9uOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdM
YXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKQorYm9vbCBFdmVu
dEhhbmRsZXI6OnNob3VsZFVwZGF0ZUF1dG9zY3JvbGwoKQogewotICAgIGNsZWFyTGF0Y2hlZFN0
YXRlKCk7CisgICAgcmV0dXJuIG1vdXNlUHJlc3NlZCgpOwogfQotI2VuZGlmCisgICAgCisjZW5k
aWYgLy8gIVBMQVRGT1JNKElPUykKKyAgICAKKyNlbmRpZiAvLyAhUExBVEZPUk0oTUFDKQogCiBX
aWRnZXQqIEV2ZW50SGFuZGxlcjo6d2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZlbnRU
YXJnZXQpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDIy
NTQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgogI2luY2x1
ZGUgIkxheW91dFBvaW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVHlwZXMuaCIKICNpbmNsdWRl
ICJUZXh0RXZlbnRJbnB1dFR5cGUuaCIKICNpbmNsdWRlICJUZXh0R3JhbnVsYXJpdHkuaCIKQEAg
LTE4OCw3ICsxODksOCBAQCBwdWJsaWM6CiAgICAgSW50UG9pbnQgbGFzdEtub3duTW91c2VHbG9i
YWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlv
bjsgfQogICAgIEN1cnNvciBjdXJyZW50TW91c2VDdXJzb3IoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRNb3VzZUN1cnNvcjsgfQogCi0gICAgSW50UG9pbnQgZWZmZWN0aXZlTW91c2VQb3NpdGlv
bkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25zdDsKKyAgICBJbnRQb2ludCB0YXJnZXRQb3Np
dGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25zdDsKKyAgICBib29sIHNob3VsZFVwZGF0
ZUF1dG9zY3JvbGwoKTsKIAogICAgIHN0YXRpYyBGcmFtZSogc3ViZnJhbWVGb3JUYXJnZXROb2Rl
KE5vZGUqKTsKICAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9ySGl0VGVzdFJlc3VsdChjb25z
dCBNb3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJik7CkBAIC0zMzIsNiArMzM0LDEzIEBAIHB1
YmxpYzoKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHRyeVRvQmVnaW5EYXRhSW50ZXJhY3Rpb25BdFBvaW50KGNvbnN0IEludFBvaW50JiBjbGll
bnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uKTsKICNlbmRpZgorICAg
IAorI2lmIFBMQVRGT1JNKElPUykKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN0YXJ0VGV4dEF1
dG9zY3JvbGwoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24pOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY2FuY2VsVGV4dEF1dG9zY3JvbGwoKTsKKyAg
ICBJbnRQb2ludCBtX3RhcmdldEF1dG9zY3JvbGxQb3NpdGlvbjsKKyAgICBib29sIG1faXNBdXRv
c2Nyb2xsQWN0aXZlIHsgZmFsc2UgfTsKKyNlbmRpZgogCiBwcml2YXRlOgogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRsZXJJ
T1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVy
SU9TLm1tCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVu
dEhhbmRsZXJJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQg
IkV2ZW50SGFuZGxlci5oIgogCiAjaW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCisjaW1wb3J0ICJB
dXRvc2Nyb2xsQ29udHJvbGxlci5oIgogI2ltcG9ydCAiQ2hyb21lLmgiCiAjaW1wb3J0ICJDaHJv
bWVDbGllbnQuaCIKICNpbXBvcnQgIkRhdGFUcmFuc2Zlci5oIgpAQCAtNTU4LDYgKzU1OSwyOSBA
QCBQbGF0Zm9ybU1vdXNlRXZlbnQgRXZlbnRIYW5kbGVyOjpjdXJyZW50CiB7CiAgICAgcmV0dXJu
IFBsYXRmb3JtRXZlbnRGYWN0b3J5OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoY3VycmVudEV2
ZW50KCkpOwogfQorICAgIAordm9pZCBFdmVudEhhbmRsZXI6OnN0YXJ0VGV4dEF1dG9zY3JvbGwo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7Cisg
ICAgbV90YXJnZXRBdXRvc2Nyb2xsUG9zaXRpb24gPSByb3VuZGVkSW50UG9pbnQocG9zaXRpb24p
OworICAgIG1faXNBdXRvc2Nyb2xsQWN0aXZlID0gdHJ1ZTsKKyAgICBtX2F1dG9zY3JvbGxDb250
cm9sbGVyLT5zdGFydEF1dG9zY3JvbGxGb3JTZWxlY3Rpb24ocmVuZGVyZXIpOworfQorCit2b2lk
IEV2ZW50SGFuZGxlcjo6Y2FuY2VsVGV4dEF1dG9zY3JvbGwoKQoreworICAgIG1faXNBdXRvc2Ny
b2xsQWN0aXZlID0gZmFsc2U7CisgICAgbV9hdXRvc2Nyb2xsQ29udHJvbGxlci0+c3RvcEF1dG9z
Y3JvbGxUaW1lcigpOworfQorICAgIAorSW50UG9pbnQgRXZlbnRIYW5kbGVyOjp0YXJnZXRQb3Np
dGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25zdAoreworICAgIHJldHVybiBtX3Rhcmdl
dEF1dG9zY3JvbGxQb3NpdGlvbjsKK30KKyAgICAKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRV
cGRhdGVBdXRvc2Nyb2xsKCkKK3sKKyAgICByZXR1cm4gbV9pc0F1dG9zY3JvbGxBY3RpdmU7Cit9
CiAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNDEs
NyArMTE0MSw3IEBAIHN0YXRpYyBJbnRTaXplIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG8KICAg
ICByZXR1cm4gYWRqdXN0bWVudEZhY3RvcjsKIH0KIAotSW50UG9pbnQgRXZlbnRIYW5kbGVyOjpl
ZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0CitJbnRQ
b2ludCBFdmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgp
IGNvbnN0CiB7CiAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUucGFnZSgpOwogICAgIGlmICghcGFn
ZSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMjU4ODgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTEyLTEzICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBBdXRv
c2Nyb2xsaW5nIGluIGNvbnRlbnRlZGl0YWJsZSBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnRzIHRoZSBVSUtpdCBwcm90b2Nv
bCBmb3IgYXV0b3Njcm9sbGluZyBhbmQgYWxlcnRzIHRoZSBXZWIgUHJvY2VzcyB0byBzdGFydAor
ICAgICAgICAob3Igc3RvcCkgYW4gYXV0b3Njcm9sbCB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9u
LiBBbGxvd3MgZm9yIHNjcm9sbGluZyBpbiBjb250ZW50ZWRpdGFibGUKKyAgICAgICAgaW4gV2Vi
S2l0Mi4KKworICAgICAgICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0Nv
bnRlbnRWaWV3SW50ZXJhY3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzdGFydEF1dG9z
Y3JvbGw6XSk6CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgY2FuY2VsQXV0b3Njcm9sbF0pOgor
ICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IHNjcm9sbFNlbGVjdGlvblRvVmlzaWJsZTpdKToKKyAg
ICAgICAgKiBVSVByb2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZVByb3h5OjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpjYW5jZWxBdXRvc2Nyb2xsKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3Np
dGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNhbmNlbEF1dG9zY3JvbGwpOgorCiAy
MDE3LTEyLTEzICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgbW9yZSBhdXRvIGZpbGwgYnV0dG9uIHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRm
b3JtL3NwaS9pb3MvVUlLaXRTUEkuaAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyNSw2ICs2
MjUsMTMgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgVUlXS0dlc3R1cmVUeQogLSAoQ0dS
ZWN0KXVub2JzY3VyZWRDb250ZW50UmVjdDsKIEBlbmQKIAorQHByb3RvY29sIFVJVGV4dEF1dG9z
Y3JvbGxpbmcKKy0gKHZvaWQpc3RhcnRBdXRvc2Nyb2xsOihDR1BvaW50KXBvaW50OworLSAodm9p
ZCljYW5jZWxBdXRvc2Nyb2xsOworLSAodm9pZClzY3JvbGxTZWxlY3Rpb25Ub1Zpc2libGU6KEJP
T0wpYW5pbWF0ZWQ7CitAZW5kCisKKwogQHByb3RvY29sIFVJV2ViRm9ybUFjY2Vzc29yeURlbGVn
YXRlOwogCiBAaW50ZXJmYWNlIFVJV2ViRm9ybUFjY2Vzc29yeSA6IFVJSW5wdXRWaWV3CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjI1NDE4KQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU3MCw2ICs1NzAsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNlbGVj
dGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoY29uc3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJh
Y2tCYXNlOjpFcnJvcik+JiYpOwogICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNv
bnN0IFN0cmluZyYgdXNlcm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogICAgIHZvaWQg
c3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wpOworICAgIHZvaWQgc3RhcnRBdXRv
c2Nyb2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBj
YW5jZWxBdXRvc2Nyb2xsKCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9p
ZCBkaWRQZXJmb3JtRGF0YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRs
ZWQpOwogICAgIHZvaWQgZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wg
c3RhcnRlZCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmll
d0ludGVyYWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI0MSw3ICsyNDEsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewog
CiBAZW5kCiAKLUBpbnRlcmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvbikgPFVJR2Vz
dHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVy
RGVsZWdhdGUsIFVJVGV4dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUs
IFVJV0tJbnRlcmFjdGlvblZpZXdQcm90b2NvbCwgV0tGaWxlVXBsb2FkUGFuZWxEZWxlZ2F0ZSwg
V0tBY3Rpb25TaGVldEFzc2lzdGFudERlbGVnYXRlCitAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcg
KFdLSW50ZXJhY3Rpb24pIDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hF
dmVudHNHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2Vi
Rm9ybUFjY2Vzc29yeURlbGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLRmls
ZVVwbG9hZFBhbmVsRGVsZWdhdGUsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwgVUlU
ZXh0QXV0b3Njcm9sbGluZwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgICwgVUlE
cmFnSW50ZXJhY3Rpb25EZWxlZ2F0ZSwgVUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZQogI2VuZGlm
CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRl
bnRWaWV3SW50ZXJhY3Rpb24ubW0JKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkK
QEAgLTY4Niw2ICs2ODYsMjMgQEAgLSAoQ0dSZWN0KXVub2JzY3VyZWRDb250ZW50UmVjdAogICAg
IHJldHVybiBfcGFnZS0+dW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7CiB9CiAKKworLy8gQHByb3Rv
Y29sIFVJVGV4dEF1dG9zY3JvbGxpbmcKKy0gKHZvaWQpc3RhcnRBdXRvc2Nyb2xsOihDR1BvaW50
KXBvaW50Cit7CisgICAgX3BhZ2UtPnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24ocG9pbnQpOwor
fQorLSAodm9pZCljYW5jZWxBdXRvc2Nyb2xsCit7CisgICAgX3BhZ2UtPmNhbmNlbEF1dG9zY3Jv
bGwoKTsKK30KKy0gKHZvaWQpc2Nyb2xsU2VsZWN0aW9uVG9WaXNpYmxlOihCT09MKWFuaW1hdGVk
Cit7CisgICAgLy8gdXNlZCB0byBzY3JvbGwgc2VsZWN0aW9uIG9uIGtleWJvYXJkIHVwOyB3ZSBh
bHJlYWR5IHNjcm9sbCB0byB2aXNpYmxlCit9CisvLyBAZW5kIFVJVGV4dEF1dG9zY3JvbGxpbmcK
KworCiAtICh2b2lkKW9ic2VydmVWYWx1ZUZvcktleVBhdGg6KE5TU3RyaW5nICopa2V5UGF0aCBv
Zk9iamVjdDooaWQpb2JqZWN0IGNoYW5nZTooTlNEaWN0aW9uYXJ5ICopY2hhbmdlIGNvbnRleHQ6
KHZvaWQgKiljb250ZXh0CiB7CiAgICAgQVNTRVJUKFtrZXlQYXRoIGlzRXF1YWxUb1N0cmluZzpA
InRyYW5zZm9ybSJdKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdl
UHJveHlJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dl
YlBhZ2VQcm94eUlPUy5tbQkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzE4LDYgKzcx
OCwxNiBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c3RvcmVTZWxlY3Rpb25Gb3JBY2NlCiAgICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2li
aWxpdHkoc2hvdWxkU3RvcmUpLCBtX3BhZ2VJRCk7CiB9CiAKK3ZvaWQgV2ViUGFnZVByb3h5Ojpz
dGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmIHBvc2l0
aW9uKQoreworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RhcnRBdXRv
c2Nyb2xsQXRQb3NpdGlvbihwb3NpdGlvbiksIG1fcGFnZUlEKTsKK30KKyAgICAKK3ZvaWQgV2Vi
UGFnZVByb3h5OjpjYW5jZWxBdXRvc2Nyb2xsKCkKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVz
c2FnZXM6OldlYlBhZ2U6OkNhbmNlbEF1dG9zY3JvbGwoKSwgbV9wYWdlSUQpOworfQorCiB2b2lk
IFdlYlBhZ2VQcm94eTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMyX3Qgb2Zmc2V0LCBXVEY6
OkZ1bmN0aW9uPHZvaWQgKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrRnVuY3Rpb24p
CiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmgJKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTkyLDYgKzU5
Miw4IEBAIHB1YmxpYzoKICAgICB2b2lkIGdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KHVpbnQzMl90LCBpbnQzMl90LCBDYWxsYmFja0lEKTsKICAgICB2b2lkIGdldFJl
Y3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90LCBjb25zdCBTdHJpbmcmLCBDYWxs
YmFja0lEKTsKICAgICB2b2lkIHN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sKTsK
KyAgICB2b2lkIHN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQ
b2ludCYpOworICAgIHZvaWQgY2FuY2VsQXV0b3Njcm9sbCgpOwogCiAgICAgdm9pZCBjb250ZW50
U2l6ZUNhdGVnb3J5RGlkQ2hhbmdlKGNvbnN0IFN0cmluZyYpOwogCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4JKHJl
dmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDggQEAgbWVzc2FnZXMg
LT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7CiAgICAgR2V0UmVjdHNGb3JHcmFudWxhcml0eVdp
dGhTZWxlY3Rpb25PZmZzZXQodWludDMyX3QgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0LCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBHZXRSZWN0c0F0U2VsZWN0aW9uT2Zm
c2V0V2l0aFRleHQoaW50MzJfdCBvZmZzZXQsIFN0cmluZyB0ZXh0LCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKICAgICBTdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCBz
aG91bGRTdG9yZSkKKyAgICBTdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKFdlYkNvcmU6OkZsb2F0
UG9pbnQgcG9zaXRpb24pCisgICAgQ2FuY2VsQXV0b3Njcm9sbCgpCiAjZW5kaWYKIAogICAgIFNl
dENvbnRyb2xsZWRCeUF1dG9tYXRpb24oYm9vbCBjb250cm9sbGVkKQpJbmRleDogU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHJldmlz
aW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgyLDYgKzEzODIsMTcgQEAgdm9pZCBXZWJQ
YWdlOjptb3ZlU2VsZWN0aW9uQnlPZmZzZXQoaW50MwogICAgICAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3RlZFJhbmdlKFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHBvc2l0
aW9uLCBwb3NpdGlvbikucHRyKCksIHBvc2l0aW9uLmFmZmluaXR5KCksIHRydWUsIFVzZXJUcmln
Z2VyZWQpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNh
bGxiYWNrSUQpKTsKIH0KKyAgICAKK3ZvaWQgV2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3Np
dGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAgICBpZiAobV9h
c3Npc3RlZE5vZGUpCisgICAgICAgIG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
c3RhcnRUZXh0QXV0b3Njcm9sbChtX2Fzc2lzdGVkTm9kZS0+cmVuZGVyZXIoKSwgcG9zaXRpb24p
OworfQorICAgIAordm9pZCBXZWJQYWdlOjpjYW5jZWxBdXRvc2Nyb2xsKCkKK3sKKyAgICBtX3Bh
Z2UtPm1haW5GcmFtZSgpLmV2ZW50SGFuZGxlcigpLmNhbmNlbFRleHRBdXRvc2Nyb2xsKCk7Cit9
CiAKIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25PZmZz
ZXQodWludDMyX3QgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0LCBDYWxsYmFja0lEIGNhbGxi
YWNrSUQpCiB7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10
by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10by1hdXRvc2Ny
b2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10by1hdXRvc2Nyb2xsLWlu
LXNpbmdsZS1saW5lLWVkaXRhYmxlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMgQEAKK1BBU1M6IFRleHQgQm94IGhhcyBiZWVuIHNjcm9sbGVkLgorUEFTUzogQ29ycmVj
dCBDdXJzb3IgTG9jYXRpb24KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
aW9zL2RyYWctdG8tYXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2lvcy9kcmFnLXRvLWF1dG9z
Y3JvbGwtaW4tc2luZ2xlLWxpbmUtZWRpdGFibGUuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10by1hdXRvc2Nyb2xsLWluLXNpbmds
ZS1saW5lLWVkaXRhYmxlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorPCFE
T0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNl
cy9iYXNpYy1nZXN0dXJlcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNl
cy9nZXN0dXJlLWhlbHBlcnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlm
ICh3aW5kb3cudGVzdFJ1bm5lcikgeworICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0
KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfQor
ICAgIAorICAgICAgICBmdW5jdGlvbiBydW5UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKCF0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgICAgICB2YXIgb3V0cHV0ID0gJyc7CisgICAgICAgICAgICB2YXIgc2Ny
b2xsQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RleHRib3gnKTsKKyAgICAgICAgICAg
IHZhciB0YXJnZXRSZWN0ID0gc2Nyb2xsQm94LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICB2YXIgdGFwUG9pbnRYID0gdGFyZ2V0UmVjdC54K3Rhcmdl
dFJlY3Qud2lkdGggLyAyOworICAgICAgICAgICAgdmFyIHRhcFBvaW50WSA9IHRhcmdldFJlY3Qu
eSt0YXJnZXRSZWN0LmhlaWdodCAvIDI7CisgICAgICAgICAgICB2YXIgZHJhZ1ggPSB0YXJnZXRS
ZWN0LnggKyB0YXJnZXRSZWN0LndpZHRoOworICAgICAgICAgICAgCisgICAgICAgICAgICB2YXIg
dGV4dExlbmd0aCA9IHNjcm9sbEJveC52YWx1ZS5sZW5ndGg7CisKKyAgICAgICAgICAgIGlmICh0
ZXN0UnVubmVyLnJ1blVJU2NyaXB0KSB7CisgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5V
SVNjcmlwdCh0YXBBdFBvaW50KHRhcFBvaW50WCwgdGFwUG9pbnRZKSwgZnVuY3Rpb24oKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgLy8gd2FpdCBhIHNwZWxs
IHdoaWxlIHRoZSBrZXlib2FyZCBjb21lcyB1cAorICAgICAgICAgICAgICAgICAgICAgICAgdGVz
dFJ1bm5lci5ydW5VSVNjcmlwdChsb25nUHJlc3NBbmRIb2xkQXRQb2ludCh0YXBQb2ludFgsIHRh
cFBvaW50WSksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RS
dW5uZXIucnVuVUlTY3JpcHQoY29udGludWVUb3VjaEFuZERyYWdGcm9tUG9pbnRUb1BvaW50KHRh
cFBvaW50WCwgdGFwUG9pbnRZLCBkcmFnWCwgdGFwUG9pbnRZKSwgZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQoaG9sZEF0
UG9pbnQoZHJhZ1gsIHRhcFBvaW50WSwgMi4wKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGxpZnRVcEF0UG9p
bnQoZHJhZ1gsIHRhcFBvaW50WSksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGxCb3guc2Nyb2xsTGVmdCA+IDAgKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1BBU1M6IFRl
eHQgQm94IGhhcyBiZWVuIHNjcm9sbGVkLic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwdXQgKz0gJ0ZBSUw6IFRleHQgQm94IGhhcyBub3QgYmVlbiBzY3JvbGxlZCc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICc8YnI+JzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChzY3JvbGxC
b3guc2VsZWN0aW9uU3RhcnQgPT0gc2Nyb2xsQm94LnNlbGVjdGlvbkVuZCkgJiYgKHNjcm9sbEJv
eC5zZWxlY3Rpb25TdGFydCA9PSB0ZXh0TGVuZ3RoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdQQVNTOiBDb3JyZWN0IEN1cnNvciBMb2Nh
dGlvbic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJ0ZBSUw6
IGN1cnNvciBpcyBhdCBhbiB1bmV4cGVjdGVkIHBvc2l0aW9uOicgKyBzY3JvbGxCb3guc2VsZWN0
aW9uU3RhcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0
ICs9ICc8YnI+JzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3RhcmdldCcpLmlubmVySFRNTCA9IG91dHB1dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgICAgICAgICB9LCA1MDApOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHdpbmRvdy5hZGRFdmVu
dExpc3RlbmVyKCdsb2FkJywgcnVuVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorICAgIDxz
dHlsZT4KKyAgICAgICAgI3RhcmdldCB7CisgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAg
ICAgICAgICAgd2lkdGg6IDMwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogc2ls
dmVyOworICAgICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgIGZv
bnQtc2l6ZTogMThweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgPG1ldGEgbmFtZT0i
dmlld3BvcnQiIGNvbnRlbnQ9ImluaXRpYWwtc2NhbGU9MSI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAg
ICA8ZGl2IGlkPSJ0YXJnZXQiPgorICAgICAgICA8aW5wdXQgaWQ9InRleHRib3giIHR5cGU9InRl
eHQiIHZhbHVlPSJMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlz
Y2luZyBlbGl0IiBzaXplPSIyNSI+PGJyPgorICAgICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IHJl
cXVpcmVzIFVJU2NyaXB0Q29udHJvbGxlciB0byBydW4uCisgICAgPC9kaXY+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvcmVzb3VyY2Vz
L2Jhc2ljLWdlc3R1cmVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL2lvcy9yZXNvdXJjZXMvYmFzaWMtZ2VzdHVyZXMuanMJKHJldmlzaW9uIDIyNTQxOCkK
KysrIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2lvcy9yZXNvdXJjZXMvYmFzaWMtZ2Vz
dHVyZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCwxNyBAQCBmdW5jdGlvbiBsb25nUHJl
c3NBdFBvaW50KHgsIHkpCiAgICAgfSkoKTtgCiB9CiAKLWZ1bmN0aW9uIGxvbmdQcmVzc0FuZEhv
bGRBdFBvaW50KFgsIFkpCitmdW5jdGlvbiBsaWZ0VXBBdFBvaW50KHgsIHkpCit7CisgICAgcmV0
dXJuIGAKKyAgICAoZnVuY3Rpb24oKSB7CisgICAgICAgIHVpQ29udHJvbGxlci5saWZ0VXBBdFBv
aW50KCR7eH0sICR7eX0sIDEsIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgdWlDb250cm9sbGVy
LnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICAgICAgfSk7CisgICAgfSkoKTtgCit9CisKK2Z1bmN0
aW9uIGxvbmdQcmVzc0FuZEhvbGRBdFBvaW50KHgsIHkpCiB7CiAgICAgcmV0dXJuIGAKICAgICAo
ZnVuY3Rpb24oKSB7CkBAIC0yNiw4ICszNiw4IEBAIGZ1bmN0aW9uIGxvbmdQcmVzc0FuZEhvbGRB
dFBvaW50KFgsIFkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgOiAiZmluZ2Vy
IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlIDogImJlZ2FuIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkIDogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHggOiAke1h9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgeSA6ICR7WX0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB4IDogJHt4fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgOiAke3l9LAogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlc3N1cmUgOiAwCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBdCkBAIC00MCw4ICs1MCw4IEBAIGZ1bmN0aW9uIGxvbmdQcmVzc0FuZEhvbGRB
dFBvaW50KFgsIFkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgOiAiZmluZ2Vy
IiwKICAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlIDogIm1vdmVkIiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGlkIDogMSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHggOiAke1h9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgeSA6ICR7WX0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB4IDogJHt4fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgOiAke3l9LAogICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlc3N1cmUgOiAwCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBdCkBAIC0xMDgsNiArMTE4LDUxIEBAIGZ1bmN0aW9uIHRvdWNoQW5kRHJhZ0Zy
b21Qb2ludFRvUG9pbnQoc3QKICAgICB9KSgpO2AKIH0KIAorZnVuY3Rpb24gaG9sZEF0UG9pbnQo
eCwgeSkKK3sKKyAgICByZXR1cm4gYAorICAgIChmdW5jdGlvbigpIHsKKyAgICB2YXIgZXZlbnRT
dHJlYW0gPSB7CisgICAgZXZlbnRzIDogWworICAgICAgICB7CisgICAgICAgICAgICBpbnRlcnBv
bGF0ZSA6ICJsaW5lYXIiLAorICAgICAgICAgICAgdGltZXN0ZXA6IDAuMSwKKyAgICAgICAgICAg
IGNvb3JkaW5hdGVTcGFjZSA6ICJjb250ZW50IiwKKyAgICAgICAgICAgIHN0YXJ0RXZlbnQgOiB7
CisgICAgICAgICAgICAgICAgaW5wdXRUeXBlIDogImhhbmQiLAorICAgICAgICAgICAgICAgIHRp
bWVPZmZzZXQgOiAwLAorICAgICAgICAgICAgICAgIHRvdWNoZXMgOiBbCisgICAgICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0VHlwZSA6ICJmaW5nZXIiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UgOiAibW92ZWQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgaWQgOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAgeCA6ICR7eH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICB5IDogJHt5fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXNzdXJlIDogMAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAg
ICAgICAgICAgfSwKKyAgICAgICAgICAgIGVuZEV2ZW50IDogeworICAgICAgICAgICAgICAgIGlu
cHV0VHlwZSA6ICJoYW5kIiwKKyAgICAgICAgICAgICAgICB0aW1lT2Zmc2V0IDogNS4wLAorICAg
ICAgICAgICAgICAgIHRvdWNoZXMgOiBbCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlucHV0VHlwZSA6ICJmaW5nZXIiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgcGhhc2UgOiAibW92ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgaWQgOiAxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgeCA6ICR7eH0sCisgICAgICAgICAgICAgICAgICAgICAg
ICB5IDogJHt5fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlIDogMAorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgfQorICAgIH1d
fTsKKyAgICAKKyAgICB1aUNvbnRyb2xsZXIuc2VuZEV2ZW50U3RyZWFtKEpTT04uc3RyaW5naWZ5
KGV2ZW50U3RyZWFtKSwgZnVuY3Rpb24oKSB7fSk7CisgICAgICAgIHVpQ29udHJvbGxlci51aVNj
cmlwdENvbXBsZXRlKCk7CisgICAgfSkoKTtgCit9CisKIGZ1bmN0aW9uIGNvbnRpbnVlVG91Y2hB
bmREcmFnRnJvbVBvaW50VG9Qb2ludChzdGFydFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSkKIHsKICAg
ICByZXR1cm4gYAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329527</attachid>
            <date>2017-12-15 15:33:47 -0800</date>
            <delta_ts>2017-12-15 16:49:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180789-20171215153346.patch</filename>
            <type>text/plain</type>
            <size>22191</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTEyLTEzICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBBdXRv
c2Nyb2xsaW5nIGluIGNvbnRlbnRlZGl0YWJsZSBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY3RpdmF0ZSB0aGUgYXV0b3Njcm9sbENvbnRy
b2xsZXIgdG8gc2Nyb2xsIHRvIHRoZSBwb3NpdGlvbiBwcm92aWRlZCB0byB1cyBieSB0aGUKKyAg
ICAgICAgVUlQcm9jZXNzLiBBbGxvd3MgZm9yIHNjcm9sbGluZyBpbiBjb250ZW50RWRpdGFibGUg
Zm9yIFdlYktpdDIKKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10
by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLmh0bWwKKworICAgICAgICAqIHBh
Z2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b3Njcm9s
bENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW1lckZpcmVkKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRhdGVBdXRvc2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZv
clNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzdGFydFRleHRBdXRvc2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuY2VsVGV4dEF1dG9zY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9z
Y3JvbGwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRh
dGVBdXRvc2Nyb2xsKToKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVmZmVj
dGl2ZU1vdXNlUG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsIGNvbnN0KTogRGVsZXRlZC4K
KwogMjAxNy0xMi0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IEdldCByaWQgb2YgbWljcm90YXNrIGluIFNlcnZpY2VXb3JrZXJDb250YWluZXI6OmpvYlJlc29s
dmVkV2l0aFJlZ2lzdHJhdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9z
Y3JvbGxDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MywxNCAr
MjQzLDE0IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW0KICAgICAg
ICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKG1fZHJhZ0FuZERyb3BBdXRv
c2Nyb2xsUmVmZXJlbmNlUG9zaXRpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEF1dG9z
Y3JvbGxGb3JTZWxlY3Rpb246IHsKLSAgICAgICAgaWYgKCFmcmFtZS5ldmVudEhhbmRsZXIoKS5t
b3VzZVByZXNzZWQoKSkgeworICAgICAgICBpZiAoIWZyYW1lLmV2ZW50SGFuZGxlcigpLnNob3Vs
ZFVwZGF0ZUF1dG9zY3JvbGwoKSkgewogICAgICAgICAgICAgc3RvcEF1dG9zY3JvbGxUaW1lcigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKICAgICAgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkudXBkYXRlU2VsZWN0aW9uRm9yTW91c2VE
cmFnKCk7CiAjZW5kaWYKLSAgICAgICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXItPmF1dG9zY3JvbGwo
ZnJhbWUuZXZlbnRIYW5kbGVyKCkuZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZvclNlbGVjdGlvbkF1
dG9zY3JvbGwoKSk7CisgICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKGZy
YW1lLmV2ZW50SGFuZGxlcigpLnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgp
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgTm9BdXRvc2Nyb2xsOgpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMjI1NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjc2
LDE2ICsyNjc2LDMwIEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlmeUlmRW5kR2UK
IHsKIH0KIAotSW50UG9pbnQgRXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9y
U2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0Cit2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNj
aGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKQoreworICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7Cit9CisgICAgCisjaWYgIVBMQVRGT1JN
KElPUykKKyAgICAKK0ludFBvaW50IEV2ZW50SGFuZGxlcjo6dGFyZ2V0UG9zaXRpb25Gb3JTZWxl
Y3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9sYXN0S25vd25Nb3VzZVBv
c2l0aW9uOwogfQotCi12b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdM
YXRjaGVkU3RhdGVJZk5lZWRlZChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKQorICAgIAorI2Vu
ZGlmIC8vICFQTEFURk9STShJT1MpCisgICAgCisjZW5kaWYgLy8gIVBMQVRGT1JNKE1BQykKKyAg
ICAKKyNpZiAhUExBVEZPUk0oSU9TKQorICAgIAorYm9vbCBFdmVudEhhbmRsZXI6OnNob3VsZFVw
ZGF0ZUF1dG9zY3JvbGwoKQogewotICAgIGNsZWFyTGF0Y2hlZFN0YXRlKCk7CisgICAgcmV0dXJu
IG1vdXNlUHJlc3NlZCgpOwogfQotI2VuZGlmCisgICAgCisjZW5kaWYgLy8gIVBMQVRGT1JNKElP
UykKIAogV2lkZ2V0KiBFdmVudEhhbmRsZXI6OndpZGdldEZvckV2ZW50VGFyZ2V0KEVsZW1lbnQq
IGV2ZW50VGFyZ2V0KQogewpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZp
c2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJMYXlvdXRQb2ludC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5o
IgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNjcm9sbFR5cGVzLmgiCiAj
aW5jbHVkZSAiVGV4dEV2ZW50SW5wdXRUeXBlLmgiCiAjaW5jbHVkZSAiVGV4dEdyYW51bGFyaXR5
LmgiCkBAIC0xODgsNyArMTg5LDggQEAgcHVibGljOgogICAgIEludFBvaW50IGxhc3RLbm93bk1v
dXNlR2xvYmFsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2xhc3RLbm93bk1vdXNlR2xvYmFs
UG9zaXRpb247IH0KICAgICBDdXJzb3IgY3VycmVudE1vdXNlQ3Vyc29yKCkgY29uc3QgeyByZXR1
cm4gbV9jdXJyZW50TW91c2VDdXJzb3I7IH0KIAotICAgIEludFBvaW50IGVmZmVjdGl2ZU1vdXNl
UG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsKCkgY29uc3Q7CisgICAgSW50UG9pbnQgdGFy
Z2V0UG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsKCkgY29uc3Q7CisgICAgYm9vbCBzaG91
bGRVcGRhdGVBdXRvc2Nyb2xsKCk7CiAKICAgICBzdGF0aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFy
Z2V0Tm9kZShOb2RlKik7CiAgICAgc3RhdGljIEZyYW1lKiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1
bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYpOwpAQCAtMzMyLDYgKzMzNCwx
MyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgV0VCQ09SRV9F
WFBPUlQgYm9vbCB0cnlUb0JlZ2luRGF0YUludGVyYWN0aW9uQXRQb2ludChjb25zdCBJbnRQb2lu
dCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbik7CiAjZW5k
aWYKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFy
dFRleHRBdXRvc2Nyb2xsKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvc2l0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNhbmNlbFRleHRBdXRvc2Nyb2xs
KCk7CisgICAgSW50UG9pbnQgbV90YXJnZXRBdXRvc2Nyb2xsUG9zaXRpb247CisgICAgYm9vbCBt
X2lzQXV0b3Njcm9sbEFjdGl2ZSB7IGZhbHNlIH07CisjZW5kaWYKIAogcHJpdmF0ZToKICNpZiBF
TkFCTEUoRFJBR19TVVBQT1JUKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRI
YW5kbGVySU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50
SGFuZGxlcklPUy5tbQkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9p
b3MvRXZlbnRIYW5kbGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBACiAj
aW1wb3J0ICJFdmVudEhhbmRsZXIuaCIKIAogI2ltcG9ydCAiQVhPYmplY3RDYWNoZS5oIgorI2lt
cG9ydCAiQXV0b3Njcm9sbENvbnRyb2xsZXIuaCIKICNpbXBvcnQgIkNocm9tZS5oIgogI2ltcG9y
dCAiQ2hyb21lQ2xpZW50LmgiCiAjaW1wb3J0ICJEYXRhVHJhbnNmZXIuaCIKQEAgLTU1OCw2ICs1
NTksMjkgQEAgUGxhdGZvcm1Nb3VzZUV2ZW50IEV2ZW50SGFuZGxlcjo6Y3VycmVudAogewogICAg
IHJldHVybiBQbGF0Zm9ybUV2ZW50RmFjdG9yeTo6Y3JlYXRlUGxhdGZvcm1Nb3VzZUV2ZW50KGN1
cnJlbnRFdmVudCgpKTsKIH0KKyAgICAKK3ZvaWQgRXZlbnRIYW5kbGVyOjpzdGFydFRleHRBdXRv
c2Nyb2xsKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9u
KQoreworICAgIG1fdGFyZ2V0QXV0b3Njcm9sbFBvc2l0aW9uID0gcm91bmRlZEludFBvaW50KHBv
c2l0aW9uKTsKKyAgICBtX2lzQXV0b3Njcm9sbEFjdGl2ZSA9IHRydWU7CisgICAgbV9hdXRvc2Ny
b2xsQ29udHJvbGxlci0+c3RhcnRBdXRvc2Nyb2xsRm9yU2VsZWN0aW9uKHJlbmRlcmVyKTsKK30K
Kwordm9pZCBFdmVudEhhbmRsZXI6OmNhbmNlbFRleHRBdXRvc2Nyb2xsKCkKK3sKKyAgICBtX2lz
QXV0b3Njcm9sbEFjdGl2ZSA9IGZhbHNlOworICAgIG1fYXV0b3Njcm9sbENvbnRyb2xsZXItPnN0
b3BBdXRvc2Nyb2xsVGltZXIoKTsKK30KKyAgICAKK0ludFBvaW50IEV2ZW50SGFuZGxlcjo6dGFy
Z2V0UG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV90YXJnZXRBdXRvc2Nyb2xsUG9zaXRpb247Cit9CisgICAgCitib29sIEV2ZW50SGFuZGxlcjo6
c2hvdWxkVXBkYXRlQXV0b3Njcm9sbCgpCit7CisgICAgcmV0dXJuIG1faXNBdXRvc2Nyb2xsQWN0
aXZlOworfQogCiAjaWYgRU5BQkxFKERSQUdfU1VQUE9SVCkKIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQkocmV2aXNpb24gMjI1NDE4KQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTQxLDcgKzExNDEsNyBAQCBzdGF0aWMgSW50U2l6ZSBhdXRvc2Nyb2xsQWRqdXN0bWVudEZh
Y3RvCiAgICAgcmV0dXJuIGFkanVzdG1lbnRGYWN0b3I7CiB9CiAKLUludFBvaW50IEV2ZW50SGFu
ZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25z
dAorSW50UG9pbnQgRXZlbnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9z
Y3JvbGwoKSBjb25zdAogewogICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKTsKICAgICBp
ZiAoIXBhZ2UpCkluZGV4OiBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjI1ODg4KQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMCBAQAorMjAxNy0xMi0xMyAg
TWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBv
cnQgQXV0b3Njcm9sbGluZyBpbiBjb250ZW50ZWRpdGFibGUgZm9yIFdLMgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgwNzg5CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50cyB0aGUgVUlLaXQg
cHJvdG9jb2wgZm9yIGF1dG9zY3JvbGxpbmcgYW5kIGFsZXJ0cyB0aGUgV2ViIFByb2Nlc3MgdG8g
c3RhcnQKKyAgICAgICAgKG9yIHN0b3ApIGFuIGF1dG9zY3JvbGwgdG8gdGhlIHNwZWNpZmllZCBw
b3NpdGlvbi4gQWxsb3dzIGZvciBzY3JvbGxpbmcgaW4gY29udGVudGVkaXRhYmxlCisgICAgICAg
IGluIFdlYktpdDIuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmg6Cisg
ICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW06CisgICAgICAgICgtW1dLQ29udGVudFZpZXcgc3Rh
cnRBdXRvc2Nyb2xsOl0pOgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IGNhbmNlbEF1dG9zY3Jv
bGxdKToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzY3JvbGxTZWxlY3Rpb25Ub1Zpc2libGU6
XSk6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW06CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6CisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6Y2FuY2VsQXV0b3Njcm9sbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9s
bEF0UG9zaXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpjYW5jZWxBdXRvc2Nyb2xs
KToKKwogMjAxNy0xMi0xMyAgRGFuaWVsIEJhdGVzICA8ZGFiYXRlc0BhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIG1vcmUgYXV0byBmaWxsIGJ1dHRvbiB0eXBlcwpJbmRleDogU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9QbGF0Zm9ybS9zcGkvaW9zL1VJS2l0U1BJLmgJKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJj
ZS9XZWJLaXQvUGxhdGZvcm0vc3BpL2lvcy9VSUtpdFNQSS5oCSh3b3JraW5nIGNvcHkpCkBAIC02
MjUsNiArNjI1LDEzIEBAIHR5cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIFVJV0tHZXN0dXJlVHkK
IC0gKENHUmVjdCl1bm9ic2N1cmVkQ29udGVudFJlY3Q7CiBAZW5kCiAKK0Bwcm90b2NvbCBVSVRl
eHRBdXRvc2Nyb2xsaW5nCistICh2b2lkKXN0YXJ0QXV0b3Njcm9sbDooQ0dQb2ludClwb2ludDsK
Ky0gKHZvaWQpY2FuY2VsQXV0b3Njcm9sbDsKKy0gKHZvaWQpc2Nyb2xsU2VsZWN0aW9uVG9WaXNp
YmxlOihCT09MKWFuaW1hdGVkOworQGVuZAorCisKIEBwcm90b2NvbCBVSVdlYkZvcm1BY2Nlc3Nv
cnlEZWxlZ2F0ZTsKIAogQGludGVyZmFjZSBVSVdlYkZvcm1BY2Nlc3NvcnkgOiBVSUlucHV0Vmll
dwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHJldmlzaW9uIDIy
NTQxOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NzAsNiArNTcwLDggQEAgcHVibGljOgogICAgIHZvaWQgcmVxdWVzdFJlY3Rz
QXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiwg
V1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiYs
IENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIGF1dG9maWxsTG9naW5DcmVkZW50
aWFscyhjb25zdCBTdHJpbmcmIHVzZXJuYW1lLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkKTsKICAg
ICB2b2lkIHN0b3JlU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eShib29sKTsKKyAgICB2b2lkIHN0
YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYpOworICAg
IHZvaWQgY2FuY2VsQXV0b3Njcm9sbCgpOwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQog
ICAgIHZvaWQgZGlkUGVyZm9ybURhdGFJbnRlcmFjdGlvbkNvbnRyb2xsZXJPcGVyYXRpb24oYm9v
bCBoYW5kbGVkKTsKICAgICB2b2lkIGRpZEhhbmRsZVN0YXJ0RGF0YUludGVyYWN0aW9uUmVxdWVz
dChib29sIHN0YXJ0ZWQpOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29u
dGVudFZpZXdJbnRlcmFjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24uaAkocmV2aXNpb24gMjI1NDE4KQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNDEsNyArMjQxLDcgQEAgc3RydWN0IFdLQXV0b0NvcnJlY3Rpb25E
YXRhIHsKIAogQGVuZAogCi1AaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24p
IDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9ybUFjY2Vzc29yeURl
bGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLRmlsZVVwbG9hZFBhbmVsRGVs
ZWdhdGUsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZQorQGludGVyZmFjZSBXS0NvbnRl
bnRWaWV3IChXS0ludGVyYWN0aW9uKSA8VUlHZXN0dXJlUmVjb2duaXplckRlbGVnYXRlLCBVSVdl
YlRvdWNoRXZlbnRzR2VzdHVyZVJlY29nbml6ZXJEZWxlZ2F0ZSwgVUlUZXh0SW5wdXRQcml2YXRl
LCBVSVdlYkZvcm1BY2Nlc3NvcnlEZWxlZ2F0ZSwgVUlXS0ludGVyYWN0aW9uVmlld1Byb3RvY29s
LCBXS0ZpbGVVcGxvYWRQYW5lbERlbGVnYXRlLCBXS0FjdGlvblNoZWV0QXNzaXN0YW50RGVsZWdh
dGUsIFVJVGV4dEF1dG9zY3JvbGxpbmcKICNpZiBFTkFCTEUoREFUQV9JTlRFUkFDVElPTikKICAg
ICAsIFVJRHJhZ0ludGVyYWN0aW9uRGVsZWdhdGUsIFVJRHJvcEludGVyYWN0aW9uRGVsZWdhdGUK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC02ODYsNiArNjg2LDIzIEBAIC0gKENHUmVjdCl1bm9ic2N1cmVkQ29udGVudFJl
Y3QKICAgICByZXR1cm4gX3BhZ2UtPnVub2JzY3VyZWRDb250ZW50UmVjdCgpOwogfQogCisKKy8v
IEBwcm90b2NvbCBVSVRleHRBdXRvc2Nyb2xsaW5nCistICh2b2lkKXN0YXJ0QXV0b3Njcm9sbDoo
Q0dQb2ludClwb2ludAoreworICAgIF9wYWdlLT5zdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKHBv
aW50KTsKK30KKy0gKHZvaWQpY2FuY2VsQXV0b3Njcm9sbAoreworICAgIF9wYWdlLT5jYW5jZWxB
dXRvc2Nyb2xsKCk7Cit9CistICh2b2lkKXNjcm9sbFNlbGVjdGlvblRvVmlzaWJsZTooQk9PTClh
bmltYXRlZAoreworICAgIC8vIHVzZWQgdG8gc2Nyb2xsIHNlbGVjdGlvbiBvbiBrZXlib2FyZCB1
cDsgd2UgYWxyZWFkeSBzY3JvbGwgdG8gdmlzaWJsZQorfQorLy8gQGVuZCBVSVRleHRBdXRvc2Ny
b2xsaW5nCisKKwogLSAodm9pZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtl
eVBhdGggb2ZPYmplY3Q6KGlkKW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBj
b250ZXh0Oih2b2lkICopY29udGV4dAogewogICAgIEFTU0VSVChba2V5UGF0aCBpc0VxdWFsVG9T
dHJpbmc6QCJ0cmFuc2Zvcm0iXSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3Mv
V2ViUGFnZVByb3h5SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcx
OCw2ICs3MTgsMTYgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnN0b3JlU2VsZWN0aW9uRm9yQWNjZQog
ICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcmVTZWxlY3Rpb25Gb3JB
Y2Nlc3NpYmlsaXR5KHNob3VsZFN0b3JlKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQ
cm94eTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50
JiBwb3NpdGlvbikKK3sKKyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0
YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24ocG9zaXRpb24pLCBtX3BhZ2VJRCk7Cit9CisgICAgCit2
b2lkIFdlYlBhZ2VQcm94eTo6Y2FuY2VsQXV0b3Njcm9sbCgpCit7CisgICAgbV9wcm9jZXNzLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpDYW5jZWxBdXRvc2Nyb2xsKCksIG1fcGFnZUlEKTsKK30K
Kwogdm9pZCBXZWJQYWdlUHJveHk6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNl
dCwgV1RGOjpGdW5jdGlvbjx2b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1
bmN0aW9uKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5
Miw2ICs1OTIsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0
aFNlbGVjdGlvbk9mZnNldCh1aW50MzJfdCwgaW50MzJfdCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9p
ZCBnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCwgY29uc3QgU3RyaW5n
JiwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHko
Ym9vbCk7CisgICAgdm9pZCBzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6
OkZsb2F0UG9pbnQmKTsKKyAgICB2b2lkIGNhbmNlbEF1dG9zY3JvbGwoKTsKIAogICAgIHZvaWQg
Y29udGVudFNpemVDYXRlZ29yeURpZENoYW5nZShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIG1l
c3NhZ2VzIC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogICAgIEdldFJlY3RzRm9yR3JhbnVs
YXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9m
ZnNldCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgR2V0UmVjdHNBdFNlbGVj
dGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBTdHJpbmcgdGV4dCwgV2ViS2l0OjpD
YWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgU3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5
KGJvb2wgc2hvdWxkU3RvcmUpCisgICAgU3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihXZWJDb3Jl
OjpGbG9hdFBvaW50IHBvc2l0aW9uKQorICAgIENhbmNlbEF1dG9zY3JvbGwoKQogI2VuZGlmCiAK
ICAgICBTZXRDb250cm9sbGVkQnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1t
CShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9p
b3MvV2ViUGFnZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM4Miw2ICsxMzgyLDE3IEBAIHZv
aWQgV2ViUGFnZTo6bW92ZVNlbGVjdGlvbkJ5T2Zmc2V0KGludDMKICAgICAgICAgZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgp
LCBwb3NpdGlvbiwgcG9zaXRpb24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlLCBV
c2VyVHJpZ2dlcmVkKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxs
YmFjayhjYWxsYmFja0lEKSk7CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9s
bEF0UG9zaXRpb24oY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAg
aWYgKG1fYXNzaXN0ZWROb2RlKQorICAgICAgICBtX3BhZ2UtPm1haW5GcmFtZSgpLmV2ZW50SGFu
ZGxlcigpLnN0YXJ0VGV4dEF1dG9zY3JvbGwobV9hc3Npc3RlZE5vZGUtPnJlbmRlcmVyKCksIHBv
c2l0aW9uKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6Y2FuY2VsQXV0b3Njcm9sbCgpCit7Cisg
ICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5jYW5jZWxUZXh0QXV0b3Njcm9s
bCgpOworfQogCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0
aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9z
L2RyYWctdG8tYXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL2RyYWctdG8t
YXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1leHBlY3RlZC50eHQJKG5vbmV4aXN0
ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL2RyYWctdG8tYXV0b3Nj
cm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzIEBACitQQVNTOiBUZXh0IEJveCBoYXMgYmVlbiBzY3JvbGxlZC4KK1BBU1M6
IENvcnJlY3QgQ3Vyc29yIExvY2F0aW9uCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRz
L3RvdWNoL2lvcy9kcmFnLXRvLWF1dG9zY3JvbGwtaW4tc2luZ2xlLWxpbmUtZWRpdGFibGUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10
by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLmh0bWwJKG5vbmV4aXN0ZW50KQor
KysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL2RyYWctdG8tYXV0b3Njcm9sbC1p
bi1zaW5nbGUtbGluZS1lZGl0YWJsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzgg
QEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvYmFzaWMtZ2VzdHVyZXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJy
ZXNvdXJjZXMvZ2VzdHVyZS1oZWxwZXJzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0PgorICAg
ICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAg
ICAgIH0KKyAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICghdGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnOworICAgICAgICAgICAg
dmFyIHNjcm9sbEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0Ym94Jyk7CisgICAg
ICAgICAgICB2YXIgdGFyZ2V0UmVjdCA9IHNjcm9sbEJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qo
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHRhcFBvaW50WCA9IHRhcmdldFJlY3Qu
eCt0YXJnZXRSZWN0LndpZHRoIC8gMjsKKyAgICAgICAgICAgIHZhciB0YXBQb2ludFkgPSB0YXJn
ZXRSZWN0LnkrdGFyZ2V0UmVjdC5oZWlnaHQgLyAyOworICAgICAgICAgICAgdmFyIGRyYWdYID0g
dGFyZ2V0UmVjdC54ICsgdGFyZ2V0UmVjdC53aWR0aDsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgdmFyIHRleHRMZW5ndGggPSBzY3JvbGxCb3gudmFsdWUubGVuZ3RoOworCisgICAgICAgICAg
ICBpZiAodGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkgeworICAgICAgICAgICAgICAgIHRlc3RSdW5u
ZXIucnVuVUlTY3JpcHQodGFwQXRQb2ludCh0YXBQb2ludFgsIHRhcFBvaW50WSksIGZ1bmN0aW9u
KCkgeworICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IC8vIHdhaXQg
YSBzcGVsbCB3aGlsZSB0aGUga2V5Ym9hcmQgY29tZXMgdXAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQobG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQodGFwUG9p
bnRYLCB0YXBQb2ludFkpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGNvbnRpbnVlVG91Y2hBbmREcmFnRnJvbVBvaW50VG9Q
b2ludCh0YXBQb2ludFgsIHRhcFBvaW50WSwgZHJhZ1gsIHRhcFBvaW50WSksIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0
KGhvbGRBdFBvaW50KGRyYWdYLCB0YXBQb2ludFksIDIuMCksIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChsaWZ0
VXBBdFBvaW50KGRyYWdYLCB0YXBQb2ludFkpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsQm94LnNjcm9sbExlZnQgPiAwICkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdQ
QVNTOiBUZXh0IEJveCBoYXMgYmVlbiBzY3JvbGxlZC4nOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cHV0ICs9ICdGQUlMOiBUZXh0IEJveCBoYXMgbm90IGJlZW4gc2Nyb2xs
ZWQnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAn
PGJyPic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgo
c2Nyb2xsQm94LnNlbGVjdGlvblN0YXJ0ID09IHNjcm9sbEJveC5zZWxlY3Rpb25FbmQpICYmIChz
Y3JvbGxCb3guc2VsZWN0aW9uU3RhcnQgPT0gdGV4dExlbmd0aCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAnUEFTUzogQ29ycmVjdCBDdXJz
b3IgTG9jYXRpb24nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9
ICdGQUlMOiBjdXJzb3IgaXMgYXQgYW4gdW5leHBlY3RlZCBwb3NpdGlvbjonICsgc2Nyb2xsQm94
LnNlbGVjdGlvblN0YXJ0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHB1dCArPSAnPGJyPic7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCd0YXJnZXQnKS5pbm5lckhUTUwgPSBvdXRwdXQ7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfSwgNTAwKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIAorICAgICAgICB3aW5kb3cu
YWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJ1blRlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4K
KyAgICA8c3R5bGU+CisgICAgICAgICN0YXJnZXQgeworICAgICAgICAgICAgaGVpZ2h0OiAxMDBw
eDsKKyAgICAgICAgICAgIHdpZHRoOiAzMDBweDsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29s
b3I6IHNpbHZlcjsKKyAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CisgICAgICAg
ICAgICBmb250LXNpemU6IDE4cHg7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorICAgIDxtZXRh
IG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJpbml0aWFsLXNjYWxlPTEiPgorPC9oZWFkPgorPGJv
ZHk+CisgICAgPGRpdiBpZD0idGFyZ2V0Ij4KKyAgICAgICAgPGlucHV0IGlkPSJ0ZXh0Ym94IiB0
eXBlPSJ0ZXh0IiB2YWx1ZT0iTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVy
IGFkaXBpc2NpbmcgZWxpdCIgc2l6ZT0iMjUiPjxicj4KKyAgICAgICAgCisgICAgICAgIFRoaXMg
dGVzdCByZXF1aXJlcyBVSVNjcmlwdENvbnRyb2xsZXIgdG8gcnVuLgorICAgIDwvZGl2PgorPC9i
b2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL3Jl
c291cmNlcy9iYXNpYy1nZXN0dXJlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2V2ZW50cy90b3VjaC9pb3MvcmVzb3VyY2VzL2Jhc2ljLWdlc3R1cmVzLmpzCShyZXZpc2lvbiAy
MjU0MTgpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvcmVzb3VyY2VzL2Jh
c2ljLWdlc3R1cmVzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC04LDcgKzgsMTcgQEAgZnVuY3Rpb24g
bG9uZ1ByZXNzQXRQb2ludCh4LCB5KQogICAgIH0pKCk7YAogfQogCi1mdW5jdGlvbiBsb25nUHJl
c3NBbmRIb2xkQXRQb2ludChYLCBZKQorZnVuY3Rpb24gbGlmdFVwQXRQb2ludCh4LCB5KQorewor
ICAgIHJldHVybiBgCisgICAgKGZ1bmN0aW9uKCkgeworICAgICAgICB1aUNvbnRyb2xsZXIubGlm
dFVwQXRQb2ludCgke3h9LCAke3l9LCAxLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHVpQ29u
dHJvbGxlci51aVNjcmlwdENvbXBsZXRlKCk7CisgICAgICAgIH0pOworICAgIH0pKCk7YAorfQor
CitmdW5jdGlvbiBsb25nUHJlc3NBbmRIb2xkQXRQb2ludCh4LCB5KQogewogICAgIHJldHVybiBg
CiAgICAgKGZ1bmN0aW9uKCkgewpAQCAtMjYsOCArMzYsOCBAQCBmdW5jdGlvbiBsb25nUHJlc3NB
bmRIb2xkQXRQb2ludChYLCBZKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRUeXBlIDog
ImZpbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSA6ICJiZWdhbiIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCA6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICB4IDog
JHtYfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgOiAke1l9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgeCA6ICR7eH0sCisgICAgICAgICAgICAgICAgICAgICAgICB5IDogJHt5fSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlIDogMAogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgXQpAQCAtNDAsOCArNTAsOCBAQCBmdW5jdGlvbiBsb25nUHJlc3NB
bmRIb2xkQXRQb2ludChYLCBZKQogICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRUeXBlIDog
ImZpbmdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSA6ICJtb3ZlZCIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZCA6IDEsCi0gICAgICAgICAgICAgICAgICAgICAgICB4IDog
JHtYfSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHkgOiAke1l9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgeCA6ICR7eH0sCisgICAgICAgICAgICAgICAgICAgICAgICB5IDogJHt5fSwKICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXNzdXJlIDogMAogICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgXQpAQCAtMTA4LDYgKzExOCw1MSBAQCBmdW5jdGlvbiB0b3VjaEFu
ZERyYWdGcm9tUG9pbnRUb1BvaW50KHN0CiAgICAgfSkoKTtgCiB9CiAKK2Z1bmN0aW9uIGhvbGRB
dFBvaW50KHgsIHkpCit7CisgICAgcmV0dXJuIGAKKyAgICAoZnVuY3Rpb24oKSB7CisgICAgdmFy
IGV2ZW50U3RyZWFtID0geworICAgIGV2ZW50cyA6IFsKKyAgICAgICAgeworICAgICAgICAgICAg
aW50ZXJwb2xhdGUgOiAibGluZWFyIiwKKyAgICAgICAgICAgIHRpbWVzdGVwOiAwLjEsCisgICAg
ICAgICAgICBjb29yZGluYXRlU3BhY2UgOiAiY29udGVudCIsCisgICAgICAgICAgICBzdGFydEV2
ZW50IDogeworICAgICAgICAgICAgICAgIGlucHV0VHlwZSA6ICJoYW5kIiwKKyAgICAgICAgICAg
ICAgICB0aW1lT2Zmc2V0IDogMCwKKyAgICAgICAgICAgICAgICB0b3VjaGVzIDogWworICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgOiAiZmlu
Z2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBoYXNlIDogIm1vdmVkIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlkIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHggOiAke3h9
LAorICAgICAgICAgICAgICAgICAgICAgICAgeSA6ICR7eX0sCisgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVzc3VyZSA6IDAKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IF0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlbmRFdmVudCA6IHsKKyAgICAgICAgICAg
ICAgICBpbnB1dFR5cGUgOiAiaGFuZCIsCisgICAgICAgICAgICAgICAgdGltZU9mZnNldCA6IDUu
MCwKKyAgICAgICAgICAgICAgICB0b3VjaGVzIDogWworICAgICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnB1dFR5cGUgOiAiZmluZ2VyIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBoYXNlIDogIm1vdmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk
IDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHggOiAke3h9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgeSA6ICR7eX0sCisgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZSA6IDAK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH0K
KyAgICB9XX07CisgICAgCisgICAgdWlDb250cm9sbGVyLnNlbmRFdmVudFN0cmVhbShKU09OLnN0
cmluZ2lmeShldmVudFN0cmVhbSksIGZ1bmN0aW9uKCkge30pOworICAgICAgICB1aUNvbnRyb2xs
ZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgIH0pKCk7YAorfQorCiBmdW5jdGlvbiBjb250aW51
ZVRvdWNoQW5kRHJhZ0Zyb21Qb2ludFRvUG9pbnQoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFkp
CiB7CiAgICAgcmV0dXJuIGAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>329542</attachid>
            <date>2017-12-15 16:49:28 -0800</date>
            <delta_ts>2017-12-15 18:19:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-180789-20171215164927.patch</filename>
            <type>text/plain</type>
            <size>23455</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDE3LTEyLTEzICBNZWdhbiBH
YXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBBdXRv
c2Nyb2xsaW5nIGluIGNvbnRlbnRlZGl0YWJsZSBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODA3ODkKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBY3RpdmF0ZSB0aGUgYXV0b3Njcm9sbENvbnRy
b2xsZXIgdG8gc2Nyb2xsIHRvIHRoZSBwb3NpdGlvbiBwcm92aWRlZCB0byB1cyBieSB0aGUKKyAg
ICAgICAgVUlQcm9jZXNzLiBBbGxvd3MgZm9yIHNjcm9sbGluZyBpbiBjb250ZW50RWRpdGFibGUg
Zm9yIFdlYktpdDIKKworICAgICAgICBUZXN0OiBmYXN0L2V2ZW50cy90b3VjaC9pb3MvZHJhZy10
by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLmh0bWwKKworICAgICAgICAqIHBh
Z2UvQXV0b3Njcm9sbENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXV0b3Njcm9s
bENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW1lckZpcmVkKToKKyAgICAgICAgKiBwYWdlL0V2ZW50
SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hl
ZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZl
bnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRhdGVBdXRvc2Nyb2xsKToK
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZv
clNlbGVjdGlvbkF1dG9zY3JvbGwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvRXZl
bnRIYW5kbGVyLmg6CisgICAgICAgICogcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzdGFydFRleHRBdXRvc2Nyb2xsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6Y2FuY2VsVGV4dEF1dG9zY3JvbGwpOgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9z
Y3JvbGwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzaG91bGRVcGRh
dGVBdXRvc2Nyb2xsKToKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmVmZmVj
dGl2ZU1vdXNlUG9zaXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsIGNvbnN0KTogRGVsZXRlZC4K
KwogMjAxNy0xMi0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IEdldCByaWQgb2YgbWljcm90YXNrIGluIFNlcnZpY2VXb3JrZXJDb250YWluZXI6OmpvYlJlc29s
dmVkV2l0aFJlZ2lzdHJhdGlvbigpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9zY3Jv
bGxDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0F1dG9z
Y3JvbGxDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYkNvcmUv
cGFnZS9BdXRvc2Nyb2xsQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MywxNCAr
MjQzLDE0IEBAIHZvaWQgQXV0b3Njcm9sbENvbnRyb2xsZXI6OmF1dG9zY3JvbGxUaW0KICAgICAg
ICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKG1fZHJhZ0FuZERyb3BBdXRv
c2Nyb2xsUmVmZXJlbmNlUG9zaXRpb24pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEF1dG9z
Y3JvbGxGb3JTZWxlY3Rpb246IHsKLSAgICAgICAgaWYgKCFmcmFtZS5ldmVudEhhbmRsZXIoKS5t
b3VzZVByZXNzZWQoKSkgeworICAgICAgICBpZiAoIWZyYW1lLmV2ZW50SGFuZGxlcigpLnNob3Vs
ZFVwZGF0ZUF1dG9zY3JvbGwoKSkgewogICAgICAgICAgICAgc3RvcEF1dG9zY3JvbGxUaW1lcigp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKERSQUdfU1VQUE9S
VCkKICAgICAgICAgZnJhbWUuZXZlbnRIYW5kbGVyKCkudXBkYXRlU2VsZWN0aW9uRm9yTW91c2VE
cmFnKCk7CiAjZW5kaWYKLSAgICAgICAgbV9hdXRvc2Nyb2xsUmVuZGVyZXItPmF1dG9zY3JvbGwo
ZnJhbWUuZXZlbnRIYW5kbGVyKCkuZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZvclNlbGVjdGlvbkF1
dG9zY3JvbGwoKSk7CisgICAgICAgIG1fYXV0b3Njcm9sbFJlbmRlcmVyLT5hdXRvc2Nyb2xsKGZy
YW1lLmV2ZW50SGFuZGxlcigpLnRhcmdldFBvc2l0aW9uSW5XaW5kb3dGb3JTZWxlY3Rpb25BdXRv
c2Nyb2xsKCkpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBOb0F1dG9zY3JvbGw6
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMjU0MTgp
CisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2NzYsMTYgKzI2NzYsMzAgQEAgdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtTm90aWZ5
SWZFbmRHZQogewogfQogCi1JbnRQb2ludCBFdmVudEhhbmRsZXI6OmVmZmVjdGl2ZU1vdXNlUG9z
aXRpb25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKK3ZvaWQgRXZlbnRIYW5kbGVyOjpj
bGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYpCit7CisgICAgY2xlYXJMYXRjaGVkU3RhdGUoKTsKK30KKyAgICAKKyNpZiAh
UExBVEZPUk0oSU9TKQorICAgIAorSW50UG9pbnQgRXZlbnRIYW5kbGVyOjp0YXJnZXRQb3NpdGlv
bkluV2luZG93Rm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1f
bGFzdEtub3duTW91c2VQb3NpdGlvbjsKIH0KLQotdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyT3JT
Y2hlZHVsZUNsZWFyaW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JikKKyAgICAKKyNlbmRpZiAvLyAhUExBVEZPUk0oSU9TKQorICAgIAorI2VuZGlmIC8vICFQ
TEFURk9STShNQUMpCisgICAgCisjaWYgIVBMQVRGT1JNKElPUykKKyAgICAKK2Jvb2wgRXZlbnRI
YW5kbGVyOjpzaG91bGRVcGRhdGVBdXRvc2Nyb2xsKCkKIHsKLSAgICBjbGVhckxhdGNoZWRTdGF0
ZSgpOworICAgIHJldHVybiBtb3VzZVByZXNzZWQoKTsKIH0KLSNlbmRpZgorICAgIAorI2VuZGlm
IC8vICFQTEFURk9STShJT1MpCiAKIFdpZGdldCogRXZlbnRIYW5kbGVyOjp3aWRnZXRGb3JFdmVu
dFRhcmdldChFbGVtZW50KiBldmVudFRhcmdldCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVu
dEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkhp
dFRlc3RSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiTGF5b3V0UG9pbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybU1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJT
Y3JvbGxUeXBlcy5oIgogI2luY2x1ZGUgIlRleHRFdmVudElucHV0VHlwZS5oIgogI2luY2x1ZGUg
IlRleHRHcmFudWxhcml0eS5oIgpAQCAtMTg4LDcgKzE4OSw4IEBAIHB1YmxpYzoKICAgICBJbnRQ
b2ludCBsYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uOyB9CiAgICAgQ3Vyc29yIGN1cnJlbnRNb3VzZUN1cnNv
cigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE1vdXNlQ3Vyc29yOyB9CiAKLSAgICBJbnRQb2lu
dCBlZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0Owor
ICAgIEludFBvaW50IHRhcmdldFBvc2l0aW9uSW5XaW5kb3dGb3JTZWxlY3Rpb25BdXRvc2Nyb2xs
KCkgY29uc3Q7CisgICAgYm9vbCBzaG91bGRVcGRhdGVBdXRvc2Nyb2xsKCk7CiAKICAgICBzdGF0
aWMgRnJhbWUqIHN1YmZyYW1lRm9yVGFyZ2V0Tm9kZShOb2RlKik7CiAgICAgc3RhdGljIEZyYW1l
KiBzdWJmcmFtZUZvckhpdFRlc3RSZXN1bHQoY29uc3QgTW91c2VFdmVudFdpdGhIaXRUZXN0UmVz
dWx0cyYpOwpAQCAtMzMyLDYgKzMzNCwxMyBAQCBwdWJsaWM6CiAjaWYgRU5BQkxFKERBVEFfSU5U
RVJBQ1RJT04pCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCB0cnlUb0JlZ2luRGF0YUludGVyYWN0
aW9uQXRQb2ludChjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbik7CiAjZW5kaWYKKyAgICAKKyNpZiBQTEFURk9STShJT1MpCisgICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBzdGFydFRleHRBdXRvc2Nyb2xsKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGNhbmNlbFRleHRBdXRvc2Nyb2xsKCk7CisgICAgSW50UG9pbnQgbV90YXJnZXRBdXRvc2Ny
b2xsUG9zaXRpb25JbldpbmRvdzsKKyAgICBib29sIG1faXNBdXRvc2Nyb2xsaW5nIHsgZmFsc2Ug
fTsKKyNlbmRpZgogCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRXZlbnRIYW5kbGVySU9TLm1tCShyZXZpc2lvbiAyMjU0
MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0JKHdvcmtp
bmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbXBvcnQgIkV2ZW50SGFuZGxlci5oIgogCiAj
aW1wb3J0ICJBWE9iamVjdENhY2hlLmgiCisjaW1wb3J0ICJBdXRvc2Nyb2xsQ29udHJvbGxlci5o
IgogI2ltcG9ydCAiQ2hyb21lLmgiCiAjaW1wb3J0ICJDaHJvbWVDbGllbnQuaCIKICNpbXBvcnQg
IkRhdGFUcmFuc2Zlci5oIgpAQCAtNTU4LDYgKzU1OSwyOSBAQCBQbGF0Zm9ybU1vdXNlRXZlbnQg
RXZlbnRIYW5kbGVyOjpjdXJyZW50CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtRXZlbnRGYWN0b3J5
OjpjcmVhdGVQbGF0Zm9ybU1vdXNlRXZlbnQoY3VycmVudEV2ZW50KCkpOwogfQorICAgIAordm9p
ZCBFdmVudEhhbmRsZXI6OnN0YXJ0VGV4dEF1dG9zY3JvbGwoUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgbV90YXJnZXRBdXRvc2Nyb2xs
UG9zaXRpb25JbldpbmRvdyA9IHJvdW5kZWRJbnRQb2ludChwb3NpdGlvbik7CisgICAgbV9pc0F1
dG9zY3JvbGxpbmcgPSB0cnVlOworICAgIG1fYXV0b3Njcm9sbENvbnRyb2xsZXItPnN0YXJ0QXV0
b3Njcm9sbEZvclNlbGVjdGlvbihyZW5kZXJlcik7Cit9CisKK3ZvaWQgRXZlbnRIYW5kbGVyOjpj
YW5jZWxUZXh0QXV0b3Njcm9sbCgpCit7CisgICAgbV9pc0F1dG9zY3JvbGxpbmcgPSBmYWxzZTsK
KyAgICBtX2F1dG9zY3JvbGxDb250cm9sbGVyLT5zdG9wQXV0b3Njcm9sbFRpbWVyKCk7Cit9Cisg
ICAgCitJbnRQb2ludCBFdmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uSW5XaW5kb3dGb3JTZWxl
Y3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90YXJnZXRBdXRvc2Nyb2xs
UG9zaXRpb25JbldpbmRvdzsKK30KKyAgICAKK2Jvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRVcGRh
dGVBdXRvc2Nyb2xsKCkKK3sKKyAgICByZXR1cm4gbV9pc0F1dG9zY3JvbGxpbmc7Cit9CiAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTExNDEsNyArMTE0
MSw3IEBAIHN0YXRpYyBJbnRTaXplIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG8KICAgICByZXR1
cm4gYWRqdXN0bWVudEZhY3RvcjsKIH0KIAotSW50UG9pbnQgRXZlbnRIYW5kbGVyOjplZmZlY3Rp
dmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0CitJbnRQb2ludCBF
dmVudEhhbmRsZXI6OnRhcmdldFBvc2l0aW9uSW5XaW5kb3dGb3JTZWxlY3Rpb25BdXRvc2Nyb2xs
KCkgY29uc3QKIHsKICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7CiAgICAgaWYgKCFw
YWdlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZp
c2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzUyLDkgKzI3NTIsOSBAQCBMYXlvdXRSZWN0IFJlbmRlckxh
eWVyOjpnZXRSZWN0VG9FeHBvc2UoCiAgICAgcmV0dXJuIExheW91dFJlY3QoTGF5b3V0UG9pbnQo
eCwgeSksIHZpc2libGVSZWN0LnNpemUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyTGF5ZXI6OmF1dG9z
Y3JvbGwoY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uKQordm9pZCBSZW5kZXJMYXllcjo6YXV0b3Nj
cm9sbChjb25zdCBJbnRQb2ludCYgcG9zaXRpb25JbldpbmRvdykKIHsKLSAgICBJbnRQb2ludCBj
dXJyZW50RG9jdW1lbnRQb3NpdGlvbiA9IHJlbmRlcmVyKCkudmlldygpLmZyYW1lVmlldygpLndp
bmRvd1RvQ29udGVudHMocG9zaXRpb24pOworICAgIEludFBvaW50IGN1cnJlbnREb2N1bWVudFBv
c2l0aW9uID0gcmVuZGVyZXIoKS52aWV3KCkuZnJhbWVWaWV3KCkud2luZG93VG9Db250ZW50cyhw
b3NpdGlvbkluV2luZG93KTsKICAgICBzY3JvbGxSZWN0VG9WaXNpYmxlKFNlbGVjdGlvblJldmVh
bE1vZGU6OlJldmVhbCwgTGF5b3V0UmVjdChjdXJyZW50RG9jdW1lbnRQb3NpdGlvbiwgTGF5b3V0
U2l6ZSgxLCAxKSksIGZhbHNlLCBTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQs
IFNjcm9sbEFsaWdubWVudDo6YWxpZ25Ub0VkZ2VJZk5lZWRlZCk7CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMjU4ODgpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE3LTEyLTEzICBNZWdhbiBHYXJkbmVyICA8bWVnYW5f
Z2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBBdXRvc2Nyb2xsaW5nIGluIGNv
bnRlbnRlZGl0YWJsZSBmb3IgV0syCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODA3ODkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBJbXBsZW1lbnRzIHRoZSBVSUtpdCBwcm90b2NvbCBmb3IgYXV0b3Njcm9s
bGluZyBhbmQgYWxlcnRzIHRoZSBXZWIgUHJvY2VzcyB0byBzdGFydAorICAgICAgICAob3Igc3Rv
cCkgYW4gYXV0b3Njcm9sbCB0byB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLiBBbGxvd3MgZm9yIHNj
cm9sbGluZyBpbiBjb250ZW50ZWRpdGFibGUKKyAgICAgICAgaW4gV2ViS2l0Mi4KKworICAgICAg
ICAqIFBsYXRmb3JtL3NwaS9pb3MvVUlLaXRTUEkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6CisgICAgICAgICogVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24uaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBzdGFydEF1dG9zY3JvbGw6XSk6CisgICAg
ICAgICgtW1dLQ29udGVudFZpZXcgY2FuY2VsQXV0b3Njcm9sbF0pOgorICAgICAgICAoLVtXS0Nv
bnRlbnRWaWV3IHNjcm9sbFNlbGVjdGlvblRvVmlzaWJsZTpdKToKKyAgICAgICAgKiBVSVByb2Nl
c3MvaW9zL1dlYlBhZ2VQcm94eUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5
OjpzdGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVBy
b3h5OjpjYW5jZWxBdXRvc2Nyb2xsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6c3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlBhZ2U6OmNhbmNlbEF1dG9zY3JvbGwpOgorCiAyMDE3LTEyLTEzICBEYW5p
ZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbW9yZSBhdXRvIGZp
bGwgYnV0dG9uIHR5cGVzCkluZGV4OiBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlL
aXRTUEkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1BsYXRmb3JtL3NwaS9pb3MvVUlL
aXRTUEkuaAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYktpdC9QbGF0Zm9ybS9zcGkv
aW9zL1VJS2l0U1BJLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyNSw2ICs2MjUsMTMgQEAgdHlwZWRl
ZiBOU19FTlVNKE5TSW50ZWdlciwgVUlXS0dlc3R1cmVUeQogLSAoQ0dSZWN0KXVub2JzY3VyZWRD
b250ZW50UmVjdDsKIEBlbmQKIAorQHByb3RvY29sIFVJVGV4dEF1dG9zY3JvbGxpbmcKKy0gKHZv
aWQpc3RhcnRBdXRvc2Nyb2xsOihDR1BvaW50KXBvaW50OworLSAodm9pZCljYW5jZWxBdXRvc2Ny
b2xsOworLSAodm9pZClzY3JvbGxTZWxlY3Rpb25Ub1Zpc2libGU6KEJPT0wpYW5pbWF0ZWQ7CitA
ZW5kCisKKwogQHByb3RvY29sIFVJV2ViRm9ybUFjY2Vzc29yeURlbGVnYXRlOwogCiBAaW50ZXJm
YWNlIFVJV2ViRm9ybUFjY2Vzc29yeSA6IFVJSW5wdXRWaWV3CkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaAkocmV2aXNpb24gMjI1NDE4KQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3MCw2ICs1NzAs
OCBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXF1ZXN0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhU
ZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmLCBXVEY6OkZ1bmN0aW9uPHZvaWQoY29u
c3QgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+JiwgQ2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYpOwogICAgIHZvaWQgYXV0b2ZpbGxMb2dpbkNyZWRlbnRpYWxzKGNvbnN0IFN0cmluZyYgdXNl
cm5hbWUsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQpOwogICAgIHZvaWQgc3RvcmVTZWxlY3Rpb25G
b3JBY2Nlc3NpYmlsaXR5KGJvb2wpOworICAgIHZvaWQgc3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlv
bihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50Jik7CisgICAgdm9pZCBjYW5jZWxBdXRvc2Nyb2xs
KCk7CiAjaWYgRU5BQkxFKERBVEFfSU5URVJBQ1RJT04pCiAgICAgdm9pZCBkaWRQZXJmb3JtRGF0
YUludGVyYWN0aW9uQ29udHJvbGxlck9wZXJhdGlvbihib29sIGhhbmRsZWQpOwogICAgIHZvaWQg
ZGlkSGFuZGxlU3RhcnREYXRhSW50ZXJhY3Rpb25SZXF1ZXN0KGJvb2wgc3RhcnRlZCk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5oCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MSw3
ICsyNDEsNyBAQCBzdHJ1Y3QgV0tBdXRvQ29ycmVjdGlvbkRhdGEgewogCiBAZW5kCiAKLUBpbnRl
cmZhY2UgV0tDb250ZW50VmlldyAoV0tJbnRlcmFjdGlvbikgPFVJR2VzdHVyZVJlY29nbml6ZXJE
ZWxlZ2F0ZSwgVUlXZWJUb3VjaEV2ZW50c0dlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJVGV4
dElucHV0UHJpdmF0ZSwgVUlXZWJGb3JtQWNjZXNzb3J5RGVsZWdhdGUsIFVJV0tJbnRlcmFjdGlv
blZpZXdQcm90b2NvbCwgV0tGaWxlVXBsb2FkUGFuZWxEZWxlZ2F0ZSwgV0tBY3Rpb25TaGVldEFz
c2lzdGFudERlbGVnYXRlCitAaW50ZXJmYWNlIFdLQ29udGVudFZpZXcgKFdLSW50ZXJhY3Rpb24p
IDxVSUdlc3R1cmVSZWNvZ25pemVyRGVsZWdhdGUsIFVJV2ViVG91Y2hFdmVudHNHZXN0dXJlUmVj
b2duaXplckRlbGVnYXRlLCBVSVRleHRJbnB1dFByaXZhdGUsIFVJV2ViRm9ybUFjY2Vzc29yeURl
bGVnYXRlLCBVSVdLSW50ZXJhY3Rpb25WaWV3UHJvdG9jb2wsIFdLRmlsZVVwbG9hZFBhbmVsRGVs
ZWdhdGUsIFdLQWN0aW9uU2hlZXRBc3Npc3RhbnREZWxlZ2F0ZSwgVUlUZXh0QXV0b3Njcm9sbGlu
ZwogI2lmIEVOQUJMRShEQVRBX0lOVEVSQUNUSU9OKQogICAgICwgVUlEcmFnSW50ZXJhY3Rpb25E
ZWxlZ2F0ZSwgVUlEcm9wSW50ZXJhY3Rpb25EZWxlZ2F0ZQogI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0JKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
S0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0JKHdvcmtpbmcgY29weSkKQEAgLTY4Niw2ICs2ODYs
MjUgQEAgLSAoQ0dSZWN0KXVub2JzY3VyZWRDb250ZW50UmVjdAogICAgIHJldHVybiBfcGFnZS0+
dW5vYnNjdXJlZENvbnRlbnRSZWN0KCk7CiB9CiAKKworLy8gQHByb3RvY29sIFVJVGV4dEF1dG9z
Y3JvbGxpbmcKKy0gKHZvaWQpc3RhcnRBdXRvc2Nyb2xsOihDR1BvaW50KXBvaW50Cit7CisgICAg
X3BhZ2UtPnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24ocG9pbnQpOworfQorCistICh2b2lkKWNh
bmNlbEF1dG9zY3JvbGwKK3sKKyAgICBfcGFnZS0+Y2FuY2VsQXV0b3Njcm9sbCgpOworfQorCist
ICh2b2lkKXNjcm9sbFNlbGVjdGlvblRvVmlzaWJsZTooQk9PTClhbmltYXRlZAoreworICAgIC8v
IHVzZWQgdG8gc2Nyb2xsIHNlbGVjdGlvbiBvbiBrZXlib2FyZCB1cDsgd2UgYWxyZWFkeSBzY3Jv
bGwgdG8gdmlzaWJsZQorfQorLy8gQGVuZCBVSVRleHRBdXRvc2Nyb2xsaW5nCisKKwogLSAodm9p
ZClvYnNlcnZlVmFsdWVGb3JLZXlQYXRoOihOU1N0cmluZyAqKWtleVBhdGggb2ZPYmplY3Q6KGlk
KW9iamVjdCBjaGFuZ2U6KE5TRGljdGlvbmFyeSAqKWNoYW5nZSBjb250ZXh0Oih2b2lkICopY29u
dGV4dAogewogICAgIEFTU0VSVChba2V5UGF0aCBpc0VxdWFsVG9TdHJpbmc6QCJ0cmFuc2Zvcm0i
XSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvV2ViUGFnZVByb3h5SU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9XZWJQYWdlUHJveHlJ
T1MubW0JKHJldmlzaW9uIDIyNTQxOCkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9X
ZWJQYWdlUHJveHlJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTcxOCw2ICs3MTgsMTYgQEAgdm9p
ZCBXZWJQYWdlUHJveHk6OnN0b3JlU2VsZWN0aW9uRm9yQWNjZQogICAgIG1fcHJvY2Vzcy0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6U3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KHNob3Vs
ZFN0b3JlKSwgbV9wYWdlSUQpOwogfQogCit2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnRBdXRvc2Ny
b2xsQXRQb3NpdGlvbihjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JiBwb3NpdGlvbikKK3sKKyAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlN0YXJ0QXV0b3Njcm9sbEF0UG9z
aXRpb24ocG9zaXRpb24pLCBtX3BhZ2VJRCk7Cit9CisgICAgCit2b2lkIFdlYlBhZ2VQcm94eTo6
Y2FuY2VsQXV0b3Njcm9sbCgpCit7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpDYW5jZWxBdXRvc2Nyb2xsKCksIG1fcGFnZUlEKTsKK30KKwogdm9pZCBXZWJQYWdlUHJv
eHk6Om1vdmVTZWxlY3Rpb25CeU9mZnNldChpbnQzMl90IG9mZnNldCwgV1RGOjpGdW5jdGlvbjx2
b2lkIChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFja0Z1bmN0aW9uKQogewogICAgIGlm
ICghaXNWYWxpZCgpKSB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCShyZXZpc2lvbiAyMjU0MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Miw2ICs1OTIsOCBAQCBwdWJs
aWM6CiAgICAgdm9pZCBnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldCh1
aW50MzJfdCwgaW50MzJfdCwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBnZXRSZWN0c0F0U2VsZWN0
aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJfdCwgY29uc3QgU3RyaW5nJiwgQ2FsbGJhY2tJRCk7CiAg
ICAgdm9pZCBzdG9yZVNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkoYm9vbCk7CisgICAgdm9pZCBz
dGFydEF1dG9zY3JvbGxBdFBvc2l0aW9uKGNvbnN0IFdlYkNvcmU6OkZsb2F0UG9pbnQmKTsKKyAg
ICB2b2lkIGNhbmNlbEF1dG9zY3JvbGwoKTsKIAogICAgIHZvaWQgY29udGVudFNpemVDYXRlZ29y
eURpZENoYW5nZShjb25zdCBTdHJpbmcmKTsKIApJbmRleDogU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCShyZXZpc2lvbiAyMjU0
MTgpCisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2Vz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC05OSw2ICs5OSw4IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ug
TGVnYWN5UmVjZWl2ZXIgewogICAgIEdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9u
T2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNldCwgV2ViS2l0OjpDYWxs
YmFja0lEIGNhbGxiYWNrSUQpCiAgICAgR2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0
KGludDMyX3Qgb2Zmc2V0LCBTdHJpbmcgdGV4dCwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNr
SUQpCiAgICAgU3RvcmVTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5KGJvb2wgc2hvdWxkU3RvcmUp
CisgICAgU3RhcnRBdXRvc2Nyb2xsQXRQb3NpdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IHBvc2l0
aW9uKQorICAgIENhbmNlbEF1dG9zY3JvbGwoKQogI2VuZGlmCiAKICAgICBTZXRDb250cm9sbGVk
QnlBdXRvbWF0aW9uKGJvb2wgY29udHJvbGxlZCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCShyZXZpc2lvbiAyMjU0MTgp
CisrKyBTb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTM4Miw2ICsxMzgyLDE3IEBAIHZvaWQgV2ViUGFnZTo6bW92ZVNl
bGVjdGlvbkJ5T2Zmc2V0KGludDMKICAgICAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
ZWRSYW5nZShSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwb3NpdGlvbiwgcG9zaXRp
b24pLnB0cigpLCBwb3NpdGlvbi5hZmZpbml0eSgpLCB0cnVlLCBVc2VyVHJpZ2dlcmVkKTsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lEKSk7
CiB9CisgICAgCit2b2lkIFdlYlBhZ2U6OnN0YXJ0QXV0b3Njcm9sbEF0UG9zaXRpb24oY29uc3Qg
V2ViQ29yZTo6RmxvYXRQb2ludCYgcG9zaXRpb24pCit7CisgICAgaWYgKG1fYXNzaXN0ZWROb2Rl
ICYmIG1fYXNzaXN0ZWROb2RlLT5yZW5kZXJlcigpKQorICAgICAgICBtX3BhZ2UtPm1haW5GcmFt
ZSgpLmV2ZW50SGFuZGxlcigpLnN0YXJ0VGV4dEF1dG9zY3JvbGwobV9hc3Npc3RlZE5vZGUtPnJl
bmRlcmVyKCksIHBvc2l0aW9uKTsKK30KKyAgICAKK3ZvaWQgV2ViUGFnZTo6Y2FuY2VsQXV0b3Nj
cm9sbCgpCit7CisgICAgbV9wYWdlLT5tYWluRnJhbWUoKS5ldmVudEhhbmRsZXIoKS5jYW5jZWxU
ZXh0QXV0b3Njcm9sbCgpOworfQogCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJp
dHlXaXRoU2VsZWN0aW9uT2Zmc2V0KHVpbnQzMl90IGdyYW51bGFyaXR5LCBpbnQzMl90IG9mZnNl
dCwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9ldmVu
dHMvdG91Y2gvaW9zL2RyYWctdG8tYXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gv
aW9zL2RyYWctdG8tYXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1leHBlY3RlZC50
eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL2Ry
YWctdG8tYXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzIEBACitQQVNTOiBUZXh0IEJveCBoYXMgYmVlbiBzY3Jv
bGxlZC4KK1BBU1M6IENvcnJlY3QgQ3Vyc29yIExvY2F0aW9uCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvZXZlbnRzL3RvdWNoL2lvcy9kcmFnLXRvLWF1dG9zY3JvbGwtaW4tc2luZ2xlLWxpbmUt
ZWRpdGFibGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3Vj
aC9pb3MvZHJhZy10by1hdXRvc2Nyb2xsLWluLXNpbmdsZS1saW5lLWVkaXRhYmxlLmh0bWwJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvdG91Y2gvaW9zL2RyYWctdG8t
YXV0b3Njcm9sbC1pbi1zaW5nbGUtbGluZS1lZGl0YWJsZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzggQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvYmFzaWMtZ2VzdHVyZXMuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvZ2VzdHVyZS1oZWxwZXJzLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0PgorICAgICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKKyAgICAgICAgICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVzdFJ1bm5lci53YWl0VW50aWxE
b25lKCk7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghdGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnOwor
ICAgICAgICAgICAgdmFyIHNjcm9sbEJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0ZXh0
Ym94Jyk7CisgICAgICAgICAgICB2YXIgdGFyZ2V0UmVjdCA9IHNjcm9sbEJveC5nZXRCb3VuZGlu
Z0NsaWVudFJlY3QoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdmFyIHRhcFBvaW50WCA9
IHRhcmdldFJlY3QueCt0YXJnZXRSZWN0LndpZHRoIC8gMjsKKyAgICAgICAgICAgIHZhciB0YXBQ
b2ludFkgPSB0YXJnZXRSZWN0LnkrdGFyZ2V0UmVjdC5oZWlnaHQgLyAyOworICAgICAgICAgICAg
dmFyIGRyYWdYID0gdGFyZ2V0UmVjdC54ICsgdGFyZ2V0UmVjdC53aWR0aDsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgdmFyIHRleHRMZW5ndGggPSBzY3JvbGxCb3gudmFsdWUubGVuZ3RoOwor
CisgICAgICAgICAgICBpZiAodGVzdFJ1bm5lci5ydW5VSVNjcmlwdCkgeworICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQodGFwQXRQb2ludCh0YXBQb2ludFgsIHRhcFBvaW50
WSksIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2Ny
aXB0KGRpZFNob3dLZXlib2FyZCgpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRlc3RSdW5uZXIucnVuVUlTY3JpcHQobG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQodGFwUG9p
bnRYLCB0YXBQb2ludFkpLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0KGNvbnRpbnVlVG91Y2hBbmREcmFnRnJvbVBvaW50VG9Q
b2ludCh0YXBQb2ludFgsIHRhcFBvaW50WSwgZHJhZ1gsIHRhcFBvaW50WSksIGZ1bmN0aW9uKCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyLnJ1blVJU2NyaXB0
KGhvbGRBdFBvaW50KGRyYWdYLCB0YXBQb2ludFksIDIuMCksIGZ1bmN0aW9uKCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ydW5VSVNjcmlwdChjb250
aW51ZVRvdWNoQW5kRHJhZ0Zyb21Qb2ludFRvUG9pbnQoZHJhZ1gsIHRhcFBvaW50WSwgZHJhZ1gr
NSwgdGFwUG9pbnRZKSwgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNjcm9sbEJveC5zY3JvbGxMZWZ0ID4gMCApCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAnUEFTUzogVGV4dCBCb3gg
aGFzIGJlZW4gc2Nyb2xsZWQuJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHB1dCArPSAnRkFJTDogVGV4dCBCb3ggaGFzIG5vdCBiZWVuIHNjcm9sbGVkJzsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJzxicj4nOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNjcm9sbEJveC5zZWxl
Y3Rpb25TdGFydCA9PSBzY3JvbGxCb3guc2VsZWN0aW9uRW5kKSAmJiAoc2Nyb2xsQm94LnNlbGVj
dGlvblN0YXJ0ID09IHRleHRMZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwdXQgKz0gJ1BBU1M6IENvcnJlY3QgQ3Vyc29yIExvY2F0aW9uJzsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCArPSAnRkFJTDogY3Vyc29y
IGlzIGF0IGFuIHVuZXhwZWN0ZWQgcG9zaXRpb246JyArIHNjcm9sbEJveC5zZWxlY3Rpb25TdGFy
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gJzxi
cj4nOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0
JykuaW5uZXJIVE1MID0gb3V0cHV0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgCisgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCds
b2FkJywgcnVuVGVzdCwgZmFsc2UpOworICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZT4KKyAgICAg
ICAgI3RhcmdldCB7CisgICAgICAgICAgICBoZWlnaHQ6IDEwMHB4OworICAgICAgICAgICAgd2lk
dGg6IDMwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogc2lsdmVyOworICAgICAg
ICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICAgICAgICAgIGZvbnQtc2l6ZTogMThw
eDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+CisgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNv
bnRlbnQ9ImluaXRpYWwtc2NhbGU9MSI+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGlkPSJ0
YXJnZXQiPgorICAgICAgICA8aW5wdXQgaWQ9InRleHRib3giIHR5cGU9InRleHQiIHZhbHVlPSJM
b3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0IiBz
aXplPSIyNSI+PGJyPgorICAgICAgICAKKyAgICAgICAgVGhpcyB0ZXN0IHJlcXVpcmVzIFVJU2Ny
aXB0Q29udHJvbGxlciB0byBydW4uCisgICAgPC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy90b3VjaC9pb3MvcmVzb3VyY2VzL2Jhc2ljLWdlc3R1
cmVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2lvcy9y
ZXNvdXJjZXMvYmFzaWMtZ2VzdHVyZXMuanMJKHJldmlzaW9uIDIyNTQxOCkKKysrIExheW91dFRl
c3RzL2Zhc3QvZXZlbnRzL3RvdWNoL2lvcy9yZXNvdXJjZXMvYmFzaWMtZ2VzdHVyZXMuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorZnVuY3Rpb24gZGlkU2hvd0tleWJvYXJkKCkK
K3sKKwlyZXR1cm4gYAorCShmdW5jdGlvbigpIHsKKyAgICAgICAgdWlDb250cm9sbGVyLmRpZFNo
b3dLZXlib2FyZENhbGxiYWNrID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICB1aUNvbnRyb2xs
ZXIudWlTY3JpcHRDb21wbGV0ZSgpOworCQl9CisgICAgfSkoKTtgCit9CisKKwogZnVuY3Rpb24g
bG9uZ1ByZXNzQXRQb2ludCh4LCB5KQogewogICAgIHJldHVybiBgCkBAIC04LDcgKzE5LDE3IEBA
IGZ1bmN0aW9uIGxvbmdQcmVzc0F0UG9pbnQoeCwgeSkKICAgICB9KSgpO2AKIH0KIAotZnVuY3Rp
b24gbG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQoWCwgWSkKK2Z1bmN0aW9uIGxpZnRVcEF0UG9pbnQo
eCwgeSkKK3sKKyAgICByZXR1cm4gYAorICAgIChmdW5jdGlvbigpIHsKKyAgICAgICAgdWlDb250
cm9sbGVyLmxpZnRVcEF0UG9pbnQoJHt4fSwgJHt5fSwgMSwgZnVuY3Rpb24oKSB7CisgICAgICAg
ICAgICB1aUNvbnRyb2xsZXIudWlTY3JpcHRDb21wbGV0ZSgpOworICAgICAgICB9KTsKKyAgICB9
KSgpO2AKK30KKworZnVuY3Rpb24gbG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQoeCwgeSkKIHsKICAg
ICByZXR1cm4gYAogICAgIChmdW5jdGlvbigpIHsKQEAgLTI2LDggKzQ3LDggQEAgZnVuY3Rpb24g
bG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQoWCwgWSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0VHlwZSA6ICJmaW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UgOiAiYmVn
YW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgaWQgOiAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgeCA6ICR7WH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB5IDogJHtZfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHggOiAke3h9LAorICAgICAgICAgICAgICAgICAgICAgICAgeSA6
ICR7eX0sCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZSA6IDAKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIF0KQEAgLTQwLDggKzYxLDggQEAgZnVuY3Rpb24g
bG9uZ1ByZXNzQW5kSG9sZEF0UG9pbnQoWCwgWSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
cHV0VHlwZSA6ICJmaW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgcGhhc2UgOiAibW92
ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgaWQgOiAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgeCA6ICR7WH0sCi0gICAgICAgICAgICAgICAgICAgICAgICB5IDogJHtZfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHggOiAke3h9LAorICAgICAgICAgICAgICAgICAgICAgICAgeSA6
ICR7eX0sCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzc3VyZSA6IDAKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIF0KQEAgLTEwOCw2ICsxMjksNTEgQEAgZnVuY3Rp
b24gdG91Y2hBbmREcmFnRnJvbVBvaW50VG9Qb2ludChzdAogICAgIH0pKCk7YAogfQogCitmdW5j
dGlvbiBob2xkQXRQb2ludCh4LCB5KQoreworICAgIHJldHVybiBgCisgICAgKGZ1bmN0aW9uKCkg
eworICAgIHZhciBldmVudFN0cmVhbSA9IHsKKyAgICBldmVudHMgOiBbCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGludGVycG9sYXRlIDogImxpbmVhciIsCisgICAgICAgICAgICB0aW1lc3RlcDog
MC4xLAorICAgICAgICAgICAgY29vcmRpbmF0ZVNwYWNlIDogImNvbnRlbnQiLAorICAgICAgICAg
ICAgc3RhcnRFdmVudCA6IHsKKyAgICAgICAgICAgICAgICBpbnB1dFR5cGUgOiAiaGFuZCIsCisg
ICAgICAgICAgICAgICAgdGltZU9mZnNldCA6IDAsCisgICAgICAgICAgICAgICAgdG91Y2hlcyA6
IFsKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRU
eXBlIDogImZpbmdlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSA6ICJtb3ZlZCIs
CisgICAgICAgICAgICAgICAgICAgICAgICBpZCA6IDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICB4IDogJHt4fSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHkgOiAke3l9LAorICAgICAgICAg
ICAgICAgICAgICAgICAgcHJlc3N1cmUgOiAwCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBdCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZW5kRXZlbnQgOiB7Cisg
ICAgICAgICAgICAgICAgaW5wdXRUeXBlIDogImhhbmQiLAorICAgICAgICAgICAgICAgIHRpbWVP
ZmZzZXQgOiA1LjAsCisgICAgICAgICAgICAgICAgdG91Y2hlcyA6IFsKKyAgICAgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRUeXBlIDogImZpbmdlciIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBwaGFzZSA6ICJtb3ZlZCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZCA6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICB4IDogJHt4fSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHkgOiAke3l9LAorICAgICAgICAgICAgICAgICAgICAgICAgcHJl
c3N1cmUgOiAwCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBdCisgICAg
ICAgICAgICB9CisgICAgfV19OworICAgIAorICAgIHVpQ29udHJvbGxlci5zZW5kRXZlbnRTdHJl
YW0oSlNPTi5zdHJpbmdpZnkoZXZlbnRTdHJlYW0pLCBmdW5jdGlvbigpIHt9KTsKKyAgICAgICAg
dWlDb250cm9sbGVyLnVpU2NyaXB0Q29tcGxldGUoKTsKKyAgICB9KSgpO2AKK30KKwogZnVuY3Rp
b24gY29udGludWVUb3VjaEFuZERyYWdGcm9tUG9pbnRUb1BvaW50KHN0YXJ0WCwgc3RhcnRZLCBl
bmRYLCBlbmRZKQogewogICAgIHJldHVybiBgCg==
</data>
<flag name="review"
          id="348627"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="348635"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>