<?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>156420</bug_id>
          
          <creation_ts>2016-04-08 14:59:53 -0700</creation_ts>
          <short_desc>Use WeakPtrs to avoid using deallocated Widgets and ScrollableAreas</short_desc>
          <delta_ts>2016-04-11 20:07:11 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          <dependson>150871</dependson>
    
    <dependson>156409</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1182321</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-08 14:59:53 -0700</bug_when>
    <thetext>Bugs 150871 and 156409 were caused by Events destroying elements that were currently in use to handle wheel events. Since the EventHandler logic held onto raw pointers to these elements (not expecting them to be destroyed during the same method call), we would dereference these invalid pointers causing crashes and other problems.

We can do a better job by using WeakPtrs (instead of bare pointers) that will become null when the underlying object is destroyed. This will convert various use-after-free problems into null-pointer dereferences, which are much safer, and easier to find. By using proper null checking, we can avoid crashes and ensure proper behavior in these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182346</commentid>
    <comment_count>1</comment_count>
      <attachid>276050</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-08 16:13:54 -0700</bug_when>
    <thetext>Created attachment 276050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182373</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-04-08 17:11:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/25637378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182375</commentid>
    <comment_count>3</comment_count>
      <attachid>276060</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-08 17:13:13 -0700</bug_when>
    <thetext>Created attachment 276060
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182391</commentid>
    <comment_count>4</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-08 17:41:01 -0700</bug_when>
    <thetext>Oh -- I see I should have skipped this on iOS, just like the original &quot;iframe&quot; test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182394</commentid>
    <comment_count>5</comment_count>
      <attachid>276066</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-08 17:45:47 -0700</bug_when>
    <thetext>Created attachment 276066
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182576</commentid>
    <comment_count>6</comment_count>
      <attachid>276066</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-10 17:21:49 -0700</bug_when>
    <thetext>Comment on attachment 276066
Patch

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

Generally I think this is a good solution, but I think it’s not as tight as it could be.

&gt; Source/WebCore/page/EventHandler.cpp:2613
&gt; +static WeakPtr&lt;RenderWidget&gt; widgetForElement(const Element&amp; element)

This used to return the widget. Now it just returns the renderer. Keeping the class name the same is a little bit peculiar. Maybe even call it renderWidgetForElement. But also, it’s only called in one place; I don’t think it’s all that helpful a function.

&gt; Source/WebCore/page/EventHandler.cpp:2622
&gt; -    RenderElement* target = element.renderer();
&gt; -    if (!target)
&gt; -        return nullptr;
&gt; +    WeakPtr&lt;RenderWidget&gt; widget;
&gt;  
&gt; -    if (!is&lt;RenderWidget&gt;(target))
&gt; -        return nullptr;
&gt; +    if (RenderElement* target = element.renderer()) {
&gt; +        if (is&lt;RenderWidget&gt;(target))
&gt; +            widget = downcast&lt;RenderWidget&gt;(*target).createWeakPtr();
&gt; +    }
&gt;  
&gt; -    return downcast&lt;RenderWidget&gt;(*target).widget();
&gt; +    return widget;

As long as we are rewriting this, I suggest we use early return to tighten it up:

    auto* renderer = element.renderer();
    if (!is&lt;RenderWidget&gt;(renderer))
        return nullptr;
    return downcast&lt;RenderWidget&gt;(*renderer).createWeakPtr();

&gt; Source/WebCore/page/EventHandler.cpp:2680
&gt; +                if (passWheelEventToWidget(event, *renderWidget-&gt;widget())) {
&gt; +                    m_isHandlingWheelEvent = false;
&gt; +
&gt; +                    // We do another check on the widget because the event handler can run JS which results in the frame getting destroyed.
&gt; +                    if (!renderWidget || !renderWidget-&gt;widget())
&gt; +                        return false;
&gt; +
&gt; +                    if (scrollableArea)
&gt; +                        scrollableArea-&gt;setScrolledProgrammatically(false);
&gt; +                    platformNotifyIfEndGesture(adjustedEvent, scrollableArea);
&gt; +                    if (!renderWidget-&gt;widget()-&gt;platformWidget())
&gt; +                        return true;
&gt; +                    return platformCompletePlatformWidgetWheelEvent(event, *renderWidget-&gt;widget(), scrollableContainer.get());
&gt; +                }

I think we should consider putting all of this into a helper function and factoring it out of handleWheelEvent entirely; handleWheelEvent is pretty huge. Combined with the suggestion above, it would look something like this:

    auto* renderer = element.renderer();
    if (is&lt;RenderWidget&gt;(renderer) &amp;&amp; downcast&lt;RenderWidget&gt;(*renderer).widget())
        return passWheelEventToWidget(event, adjustedEvent, downcast&lt;RenderWidget&gt;(*renderer), scrollableContainer, scrollableArea);

The WeakPtr for the RenderWidget could be created inside the passWheelEventToWidget function.

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:879
&gt; -    Widget* widget = widgetForEventTarget(eventTarget);
&gt; -    if (!widget)
&gt; -        return nullptr;
&gt; -    
&gt; -    if (!widget-&gt;isScrollView())
&gt; -        return nullptr;
&gt; -    
&gt; -    return reinterpret_cast&lt;ScrollView*&gt;(widget);
&gt; +    WeakPtr&lt;ScrollableArea&gt; scrollableArea;
&gt; +
&gt; +    if (Widget* widget = widgetForEventTarget(eventTarget)) {
&gt; +        if (widget-&gt;isScrollView())
&gt; +            scrollableArea = reinterpret_cast&lt;ScrollView*&gt;(widget)-&gt;createScrollableAreaWeakPtr();
&gt; +    }
&gt; +
&gt; +    return scrollableArea;

Again, early return makes a tighter function:

    auto* widget = widgetForEventTarget(eventTarget);
    if (!widget || !widget-&gt;isScrollView())
        return nullptr;
    return reinterpret_cast&lt;ScrollView*&gt;(widget)-&gt;createScrollableAreaWeakPtr();

By the way, really unclear why it’s reinterpret_cast and not static_cast. Please use static_cast instead unless there is some really good reason not to.

Also seems bad that EventHandler and EventHandlerMac have code that’s close to identical but copied and pasted. Maybe fix that by making some of these static member functions in EventHandler.cpp?

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:929
&gt; -    ScrollableArea* scrollableArea = nullptr;
&gt; +    WeakPtr&lt;ScrollableArea&gt; scrollableArea;
&gt;  
&gt; -    if (RenderBox* box = container.renderBox())
&gt; -        scrollableArea = scrollableAreaForBox(*box);
&gt; +    if (RenderBox* box = container.renderBox()) {
&gt; +        ScrollableArea* scrollableAreaPtr = scrollableAreaForBox(*box);
&gt; +        scrollableArea = scrollableAreaPtr-&gt;createScrollableAreaWeakPtr();
&gt; +    }
&gt;  
&gt;      return scrollableArea;

Early return will be better here too:

    auto* box = container.renderBox();
    if (!box)
        return nullptr;
    return scrollableAreaForBox(*box)-&gt;createScrollableAreaWeakPtr();

What guarantees scrollableAreaForBox won’t return nullptr? The old code did not depend on this, and so maybe the new code should not either. If it’s guaranteed to return non-null, should it return a reference instead of a pointer?

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:992
&gt; +            bool startingAtScrollLimit = scrolledToEdgeInDominantDirection(*scrollableContainer, *scrollableArea.get(), wheelEvent.deltaX(), wheelEvent.deltaY());

What guarantees scrollableArea.get() won’t return a nullptr? It’s not OK to use * on a nullptr.

&gt; Source/WebCore/platform/ScrollableArea.h:67
&gt; +    WeakPtr&lt;ScrollableArea&gt; createScrollableAreaWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }

I think this should just be named createWeakPtr. I don’t think it enhances anything to repeat the class name. I suppose at one point it seemed that we would add a weak pointer factory for both Widget and ScrollableArea and I suppose if we had done that then we would need to disambiguate either by using this kind of function name or by using a typecast. But I don’t think there is a conflict that matters in practice in the current patch.

Seems a bit inconsistent that for Widget we chose to use the WeakPtrFactory that already exists for RenderWidget and not create a new one for Widget, then re-get the Widget from the RenderWidget each time. But for ScrollableArea we chose to add a new factory. Not sure which is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182618</commentid>
    <comment_count>7</comment_count>
      <attachid>276131</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-11 00:47:11 -0700</bug_when>
    <thetext>Created attachment 276131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182801</commentid>
    <comment_count>8</comment_count>
      <attachid>276066</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-11 13:10:54 -0700</bug_when>
    <thetext>Comment on attachment 276066
Patch

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

Thank you for reviewing this. I thought these notes had been committed to the bug previously, but I guess I never committed the comments. I&apos;ve tried to recapture them here.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2613
&gt;&gt; +static WeakPtr&lt;RenderWidget&gt; widgetForElement(const Element&amp; element)
&gt; 
&gt; This used to return the widget. Now it just returns the renderer. Keeping the class name the same is a little bit peculiar. Maybe even call it renderWidgetForElement. But also, it’s only called in one place; I don’t think it’s all that helpful a function.

In keeping with some later comments you made, I&apos;ll change this tinderbox a WeakPtr to widget. That cleans up some other logic.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2622
&gt;&gt; +    return widget;
&gt; 
&gt; As long as we are rewriting this, I suggest we use early return to tighten it up:
&gt; 
&gt;     auto* renderer = element.renderer();
&gt;     if (!is&lt;RenderWidget&gt;(renderer))
&gt;         return nullptr;
&gt;     return downcast&lt;RenderWidget&gt;(*renderer).createWeakPtr();

Will do.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2680
&gt;&gt; +                }
&gt; 
&gt; I think we should consider putting all of this into a helper function and factoring it out of handleWheelEvent entirely; handleWheelEvent is pretty huge. Combined with the suggestion above, it would look something like this:
&gt; 
&gt;     auto* renderer = element.renderer();
&gt;     if (is&lt;RenderWidget&gt;(renderer) &amp;&amp; downcast&lt;RenderWidget&gt;(*renderer).widget())
&gt;         return passWheelEventToWidget(event, adjustedEvent, downcast&lt;RenderWidget&gt;(*renderer), scrollableContainer, scrollableArea);
&gt; 
&gt; The WeakPtr for the RenderWidget could be created inside the passWheelEventToWidget function.

I can take the innermost clause and make it a function, but the outermost tests gate whether we execute the inner clause and return early, or drop down to later processing.

I&apos;m also going to rename &apos;passWheelEventToWidget&apos; to better reflect that this is also a test that controls whether we perform the steps beneath.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:879
&gt;&gt; +    return scrollableArea;
&gt; 
&gt; Again, early return makes a tighter function:
&gt; 
&gt;     auto* widget = widgetForEventTarget(eventTarget);
&gt;     if (!widget || !widget-&gt;isScrollView())
&gt;         return nullptr;
&gt;     return reinterpret_cast&lt;ScrollView*&gt;(widget)-&gt;createScrollableAreaWeakPtr();
&gt; 
&gt; By the way, really unclear why it’s reinterpret_cast and not static_cast. Please use static_cast instead unless there is some really good reason not to.
&gt; 
&gt; Also seems bad that EventHandler and EventHandlerMac have code that’s close to identical but copied and pasted. Maybe fix that by making some of these static member functions in EventHandler.cpp?

In my latest patch I tried to clean this up slightly, but I think it would be better to address more cleanup a second patch.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:929
&gt;&gt;      return scrollableArea;
&gt; 
&gt; Early return will be better here too:
&gt; 
&gt;     auto* box = container.renderBox();
&gt;     if (!box)
&gt;         return nullptr;
&gt;     return scrollableAreaForBox(*box)-&gt;createScrollableAreaWeakPtr();
&gt; 
&gt; What guarantees scrollableAreaForBox won’t return nullptr? The old code did not depend on this, and so maybe the new code should not either. If it’s guaranteed to return non-null, should it return a reference instead of a pointer?

You are right -- that could be null and should be protected against. I&apos;ll revise the function.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:992
&gt;&gt; +            bool startingAtScrollLimit = scrolledToEdgeInDominantDirection(*scrollableContainer, *scrollableArea.get(), wheelEvent.deltaX(), wheelEvent.deltaY());
&gt; 
&gt; What guarantees scrollableArea.get() won’t return a nullptr? It’s not OK to use * on a nullptr.

I believe the WeakPtr book test (line 991) will fail if the pointer is null.

&gt;&gt; Source/WebCore/platform/ScrollableArea.h:67
&gt;&gt; +    WeakPtr&lt;ScrollableArea&gt; createScrollableAreaWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
&gt; 
&gt; I think this should just be named createWeakPtr. I don’t think it enhances anything to repeat the class name. I suppose at one point it seemed that we would add a weak pointer factory for both Widget and ScrollableArea and I suppose if we had done that then we would need to disambiguate either by using this kind of function name or by using a typecast. But I don’t think there is a conflict that matters in practice in the current patch.
&gt; 
&gt; Seems a bit inconsistent that for Widget we chose to use the WeakPtrFactory that already exists for RenderWidget and not create a new one for Widget, then re-get the Widget from the RenderWidget each time. But for ScrollableArea we chose to add a new factory. Not sure which is better.

Will do. As I mentioned earlier, I revised the code to use a WeakPtr&lt;Widget&gt; as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182803</commentid>
    <comment_count>9</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-11 13:14:11 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 276066 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=276066&amp;action=review
&gt; 
&gt; In keeping with some later comments you made, I&apos;ll change this tinderbox a
&gt; WeakPtr to widget. That cleans up some other logic.

&apos;Tinderbox&apos; is clearly iPhone speak for &quot;to return&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182908</commentid>
    <comment_count>10</comment_count>
      <attachid>276131</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-11 18:35:33 -0700</bug_when>
    <thetext>Comment on attachment 276131
Patch

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

&gt; Source/WebCore/page/EventHandler.cpp:2617
&gt; +    

Shouldn’t add this leading whitespace.

&gt; Source/WebCore/page/EventHandler.cpp:2621
&gt; -
&gt; +    

Shouldn’t add this leading whitespace.

&gt; Source/WebCore/page/EventHandler.cpp:2634
&gt; +bool EventHandler::completeWidgetWheelEvent(const PlatformWheelEvent&amp; event, WeakPtr&lt;Widget&gt;&amp; widget, WeakPtr&lt;ScrollableArea&gt;&amp; scrollableArea, ContainerNode* scrollableContainer)

The WeakPtr arguments should be const&amp;, not non-const&amp;.

&gt; Source/WebCore/page/mac/EventHandlerMac.mm:909
&gt; +        return WeakPtr&lt;ScrollableArea&gt;();

Can all the lines like this change to:

    return { };

If so, I think that reads better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182935</commentid>
    <comment_count>11</comment_count>
      <attachid>276131</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-11 19:58:24 -0700</bug_when>
    <thetext>Comment on attachment 276131
Patch

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

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2617
&gt;&gt; +    
&gt; 
&gt; Shouldn’t add this leading whitespace.

Will fix.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2621
&gt;&gt; +    
&gt; 
&gt; Shouldn’t add this leading whitespace.

Will fix.

&gt;&gt; Source/WebCore/page/EventHandler.cpp:2634
&gt;&gt; +bool EventHandler::completeWidgetWheelEvent(const PlatformWheelEvent&amp; event, WeakPtr&lt;Widget&gt;&amp; widget, WeakPtr&lt;ScrollableArea&gt;&amp; scrollableArea, ContainerNode* scrollableContainer)
&gt; 
&gt; The WeakPtr arguments should be const&amp;, not non-const&amp;.

Will fix.

&gt;&gt; Source/WebCore/page/mac/EventHandlerMac.mm:909
&gt;&gt; +        return WeakPtr&lt;ScrollableArea&gt;();
&gt; 
&gt; Can all the lines like this change to:
&gt; 
&gt;     return { };
&gt; 
&gt; If so, I think that reads better.

This works. I&apos;ll make the change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1182937</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-04-11 20:07:11 -0700</bug_when>
    <thetext>Committed r199331: &lt;http://trac.webkit.org/changeset/199331&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276050</attachid>
            <date>2016-04-08 16:13:54 -0700</date>
            <delta_ts>2016-04-08 17:13:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156420-20160408161358.patch</filename>
            <type>text/plain</type>
            <size>17375</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDE2LTA0LTA4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXZWFrUHRycyB0byBh
dm9pZCB1c2luZyBkZWFsbG9jYXRlZCBXaWRnZXRzIGFuZCBTY3JvbGxhYmxlQXJlYXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQyMAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEF2b2lkIHRoZSByaXNr
IG9mIHVzaW5nIGRlYWxsb2NhdGVkIFdpZGdldHMgYW5kIFNjcm9sbGFibGVBcmVhcyBieSB1c2lu
ZyBXZWFrUHRycyBpbnN0ZWFkIG9mCisgICAgICAgIGJhcmUgcG9pbnRlcnMuIFRoaXMgYWxsb3dz
IHVzIHRvIHJlbW92ZSBzb21lIGV4cGxpY2l0IGNhbGxzIHRvIGdldCBTY3JvbGxhYmxlQXJlYSBh
bmQgV2lkZ2V0CisgICAgICAgIG1lbWJlcnMgaW4gdGhlIGV2ZW50IGhhbmRsaW5nIGxvZ2ljLiBJ
bnN0ZWFkLCBudWxsIGNoZWNrcyBhcmUgc3VmZmljaWVudCB0byBlbnN1cmUgd2UgbmV2ZXIKKyAg
ICAgICAgYWNjaWRlbnRhbGx5IGRlcmVmZXJlbmNlIGEgZGVsZXRlZCBlbGVtZW50LgorCisgICAg
ICAgIDEuIE1vZGlmeSB0aGUgU2Nyb2xsYWJsZUFyZWEgY2xhc3MgdG8gc3VwcG9ydCB2ZW5kaW5n
IFdlYWtQdHJzLgorICAgICAgICAyLiBNb2RpZnkgdGhlIEV2ZW50IEhhbmRsaW5nIGNvZGUgdG8g
dXNlIFdlYWtQdHJzIHRvIGhvbGQgU2Nyb2xsYWJsZUFyZWEgYW5kIFJlbmRlcldpZGdldAorICAg
ICAgICAgICBvYmplY3RzLCBhbmQgdG8gbnVsbC1jaGVjayB0aGVzZSBlbGVtZW50cyBhZnRlciBl
dmVudCBoYW5kbGluZyBkaXNwYXRjaGluZyBpcyBmaW5pc2hlZAorICAgICAgICAgICB0byBoYW5k
bGUgY2FzZXMgd2hlcmUgdGhlc2Ugb2JqZWN0cyBhcmUgZGVzdHJveWVkLgorCisgICAgICAgIFRl
c3RlZCBieSBleGlzdGluZyBldmVudCBoYW5kbGluZyBjb2RlLgorCisgICAgICAgICogcGFnZS9F
dmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9y
bVByZXBhcmVGb3JXaGVlbEV2ZW50cyk6IENoYW5nZSBzaWduYXR1cmUgZm9yIFdlYWtQdHIuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtTm90aWZ5
SWZFbmRHZXN0dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjp3aWRnZXRGb3JFbGVtZW50
KTogQ2hhbmdlIHRvIHJldHVybiBhIFdlYWtQdHIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQpOiBVc2UgV2Vha1B0cnMgdG8gaG9sZCBlbGVtZW50cyB0
aGF0IG1pZ2h0IGJlIGRlc3Ryb3llZAorICAgICAgICBkdXJpbmcgZXZlbnQgaGFuZGxpbmcuCisg
ICAgICAgICogcGFnZS9FdmVudEhhbmRsZXIuaDoKKyAgICAgICAgKiBwYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxlQXJlYUZvckV2ZW50VGFy
Z2V0KTogUmVuYW1lZCBmcm9tIHNjcm9sbFZpZXdGb3JFdmVudFRhcmdldC4gUmV0dXJuCisgICAg
ICAgIGEgV2Vha1B0ciByYXRoZXIgdGhhbiBhIGJhcmUgcG9pbnRlci4KKyAgICAgICAgKFdlYkNv
cmU6OnNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSk6IFJldHVybiBXZWFrUHRyIHJhdGhl
ciB0aGFuIGJhcmUgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxh
dGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMpOiBDb252ZXJ0IHRvIFdlYWtQdHJzLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxh
dGZvcm1XaWRnZXRXaGVlbEV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhh
bmRsZXI6OnBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpzY3JvbGxWaWV3Rm9yRXZlbnRUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL1Njcm9sbGFibGVBcmVhLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9TY3JvbGxhYmxlQXJl
YS5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFyZWE6OmNyZWF0ZVNjcm9sbGFibGVB
cmVhV2Vha1B0cik6IEFkZGVkLgorCiAyMDE2LTA0LTA4ICBCcmFkeSBFaWRzb24gIDxiZWlkc29u
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb2Rlcm4gSURCOiBNYWtlIElEQkdldFJlc3VsdCBjb250
YWluIGFuIElEQlZhbHVlIGluc3RlYWQgb2YgYSBidWZmZXIsIGFuZCByZW1vdmUgdW51c2VkIG1l
dGhvZHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAx
OTkyNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI1NzEsNyArMjU3MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJu
VmVydGljYWxUaWMKIAogI2lmICFQTEFURk9STShNQUMpCiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBj
b25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiwgUmVmUHRyPENvbnRhaW5lck5v
ZGU+JiwgU2Nyb2xsYWJsZUFyZWEqJiwgYm9vbCYpCit2b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZv
cm1QcmVwYXJlRm9yV2hlZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3Qg
SGl0VGVzdFJlc3VsdCYsIFJlZlB0cjxFbGVtZW50PiYsIFJlZlB0cjxDb250YWluZXJOb2RlPiYs
IFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiwgYm9vbCYpCiB7CiB9CiAKQEAgLTI1ODAsNyArMjU4
MCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVJlY29yZFdoZWVsRXYKICAgICBtX2Zy
YW1lLm1haW5GcmFtZSgpLndoZWVsRXZlbnREZWx0YUZpbHRlcigpLT51cGRhdGVGcm9tRGVsdGEo
RmxvYXRTaXplKGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVkoKSkpOwogfQogCi1ib29sIEV2
ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiBldmVudCwgQ29udGFpbmVyTm9kZSosIFNjcm9sbGFibGVBcmVhKikKK2Jvb2wgRXZl
bnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVs
RXZlbnQmIGV2ZW50LCBDb250YWluZXJOb2RlKiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQog
ewogICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24gdGhlIGZyYW1lIHZpZXcgYmVjYXVzZSB0
aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdl
dHRpbmcgZGVzdHJveWVkLgogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwpA
QCAtMjU5NSw3ICsyNTk1LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQ
bGF0ZgogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1O
b3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgU2Nyb2xsYWJsZUFy
ZWEqKQordm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKGNvbnN0
IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JikKIHsKIH0KIApA
QCAtMjYxMCwxNiArMjYxMCwxNiBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxl
Q2xlYXJpCiB9CiAjZW5kaWYKIAotc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRWxlbWVudChjb25z
dCBFbGVtZW50JiBlbGVtZW50KQorc3RhdGljIFdlYWtQdHI8UmVuZGVyV2lkZ2V0PiB3aWRnZXRG
b3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgUmVuZGVyRWxlbWVudCog
dGFyZ2V0ID0gZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICghdGFyZ2V0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBXZWFrUHRyPFJlbmRlcldpZGdldD4gd2lkZ2V0OwogCi0gICAg
aWYgKCFpczxSZW5kZXJXaWRnZXQ+KHRhcmdldCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmIChSZW5kZXJFbGVtZW50KiB0YXJnZXQgPSBlbGVtZW50LnJlbmRlcmVyKCkpIHsKKyAg
ICAgICAgaWYgKGlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSkKKyAgICAgICAgICAgIHdpZGdldCA9
IGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkuY3JlYXRlV2Vha1B0cigpOworICAgIH0K
IAotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpOwor
ICAgIHJldHVybiB3aWRnZXQ7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2
ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQpCkBAIC0yNjQzLDcgKzI2NDMsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlV2hlZWxFdmVudChjb25zCiAKICAgICBSZWZQdHI8
RWxlbWVudD4gZWxlbWVudCA9IHJlc3VsdC5pbm5lckVsZW1lbnQoKTsKICAgICBSZWZQdHI8Q29u
dGFpbmVyTm9kZT4gc2Nyb2xsYWJsZUNvbnRhaW5lcjsKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Ny
b2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9s
bGFibGVBcmVhOwogICAgIGJvb2wgaXNPdmVyV2lkZ2V0ID0gcmVzdWx0LmlzT3ZlcldpZGdldCgp
OwogICAgIHBsYXRmb3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKGV2ZW50LCByZXN1bHQsIGVsZW1l
bnQsIHNjcm9sbGFibGVDb250YWluZXIsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwog
CkBAIC0yNjYyLDIxICsyNjYyLDIyIEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2
ZW50KGNvbnMKIAogICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgIGlmIChpc092ZXJXaWRnZXQp
IHsKLSAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gd2lkZ2V0Rm9yRWxlbWVudCgqZWxlbWVu
dCk7Ci0gICAgICAgICAgICBpZiAod2lkZ2V0ICYmIHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoZXZl
bnQsICp3aWRnZXQpKSB7Ci0gICAgICAgICAgICAgICAgbV9pc0hhbmRsaW5nV2hlZWxFdmVudCA9
IGZhbHNlOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgZG8gYW5vdGhlciBjaGVjayBvbiB0aGUg
d2lkZ2V0IGJlY2F1c2UgdGhlIGV2ZW50IGhhbmRsZXIgY2FuIHJ1biBKUyB3aGljaCByZXN1bHRz
IGluIHRoZSBmcmFtZSBnZXR0aW5nIGRlc3Ryb3llZC4KLSAgICAgICAgICAgICAgICBXaWRnZXQq
IHdpZGdldCA9IHdpZGdldEZvckVsZW1lbnQoKmVsZW1lbnQpOwotICAgICAgICAgICAgICAgIGlm
ICghd2lkZ2V0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEpCi0gICAgICAgICAgICAgICAgICAgIHNjcm9sbGFi
bGVBcmVhLT5zZXRTY3JvbGxlZFByb2dyYW1tYXRpY2FsbHkoZmFsc2UpOwotICAgICAgICAgICAg
ICAgIHBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKGFkanVzdGVkRXZlbnQsIHNjcm9sbGFibGVB
cmVhKTsKLSAgICAgICAgICAgICAgICBpZiAoIXdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHBs
YXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQoZXZlbnQsICp3aWRnZXQsIHNj
cm9sbGFibGVDb250YWluZXIuZ2V0KCkpOworICAgICAgICAgICAgV2Vha1B0cjxSZW5kZXJXaWRn
ZXQ+IHJlbmRlcldpZGdldCA9IHdpZGdldEZvckVsZW1lbnQoKmVsZW1lbnQpOworICAgICAgICAg
ICAgaWYgKHJlbmRlcldpZGdldCAmJiByZW5kZXJXaWRnZXQtPndpZGdldCgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoZXZlbnQsICpyZW5kZXJXaWRnZXQt
PndpZGdldCgpKSkgeworICAgICAgICAgICAgICAgICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50
ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gYW5vdGhlciBjaGVjayBv
biB0aGUgd2lkZ2V0IGJlY2F1c2UgdGhlIGV2ZW50IGhhbmRsZXIgY2FuIHJ1biBKUyB3aGljaCBy
ZXN1bHRzIGluIHRoZSBmcmFtZSBnZXR0aW5nIGRlc3Ryb3llZC4KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFyZW5kZXJXaWRnZXQgfHwgIXJlbmRlcldpZGdldC0+d2lkZ2V0KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHNjcm9sbGFibGVBcmVhKQorICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEt
PnNldFNjcm9sbGVkUHJvZ3JhbW1hdGljYWxseShmYWxzZSk7CisgICAgICAgICAgICAgICAgICAg
IHBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKGFkanVzdGVkRXZlbnQsIHNjcm9sbGFibGVBcmVh
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW5kZXJXaWRnZXQtPndpZGdldCgpLT5wbGF0
Zm9ybVdpZGdldCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybUNvbXBsZXRlUGxhdGZvcm1XaWRnZXRXaGVl
bEV2ZW50KGV2ZW50LCAqcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSwgc2Nyb2xsYWJsZUNvbnRhaW5l
ci5nZXQoKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMTk5MjQ0KQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIw
NCwxMSArMjA0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZmF1bHRXaGVlbEV2ZW50SGFuZGxl
cihOb2RlKiwgV2hlZWxFdmVudCopOwogICAgIGJvb2wgaGFuZGxlUGFzdGVHbG9iYWxTZWxlY3Rp
b24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAgICB2b2lkIHBsYXRmb3JtUHJlcGFy
ZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RS
ZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mIGV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFNjcm9sbGFibGVBcmVhKiYsIGJvb2wmIGlzT3Zlcldp
ZGdldCk7CisgICAgdm9pZCBwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQbGF0
Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiBl
dmVudFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBX
ZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmIGlzT3ZlcldpZGdldCk7CiAgICAgdm9pZCBw
bGF0Zm9ybVJlY29yZFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50Jik7Ci0gICAg
Ym9vbCBwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
LCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyLCBTY3JvbGxhYmxlQXJlYSopOwor
ICAgIGJvb2wgcGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2
ZW50JiwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vha1B0cjxTY3JvbGxh
YmxlQXJlYT4mKTsKICAgICBib29sIHBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVs
RXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgV2lkZ2V0JiwgQ29udGFpbmVy
Tm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcik7Ci0gICAgdm9pZCBwbGF0Zm9ybU5vdGlmeUlmRW5k
R2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxhYmxlQXJlYSopOworICAg
IHZvaWQgcGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKIAogI2lmIEVOQUJMRShJT1NfVE9VQ0hfRVZF
TlRTKSB8fCBFTkFCTEUoSU9TX0dFU1RVUkVfRVZFTlRTKQogICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxUb3VjaD4+IFRvdWNoQXJyYXk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RXZlbnRIYW5kbGVyTWFjLm1tCShyZXZpc2lvbiAxOTkyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg2NywxNiArODY3
LDE2IEBAIHN0YXRpYyBXaWRnZXQqIHdpZGdldEZvckV2ZW50VGFyZ2V0KEVsZW0KICAgICByZXR1
cm4gZG93bmNhc3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKTsKIH0KIAotc3RhdGlj
IFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdGb3JFdmVudFRhcmdldChFbGVtZW50KiBldmVudFRhcmdl
dCkKK3N0YXRpYyBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBzY3JvbGxhYmxlQXJlYUZvckV2ZW50
VGFyZ2V0KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQogewotICAgIFdpZGdldCogd2lkZ2V0ID0gd2lk
Z2V0Rm9yRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpOwotICAgIGlmICghd2lkZ2V0KQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBpZiAoIXdpZGdldC0+aXNTY3JvbGxWaWV3KCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PFNjcm9sbFZpZXcqPih3aWRnZXQpOworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNj
cm9sbGFibGVBcmVhOworCisgICAgaWYgKFdpZGdldCogd2lkZ2V0ID0gd2lkZ2V0Rm9yRXZlbnRU
YXJnZXQoZXZlbnRUYXJnZXQpKSB7CisgICAgICAgIGlmICh3aWRnZXQtPmlzU2Nyb2xsVmlldygp
KQorICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSByZWludGVycHJldF9jYXN0PFNjcm9sbFZp
ZXcqPih3aWRnZXQpLT5jcmVhdGVTY3JvbGxhYmxlQXJlYVdlYWtQdHIoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gc2Nyb2xsYWJsZUFyZWE7CiB9CiAgICAgCiBzdGF0aWMgYm9vbCBldmVudFRhcmdl
dElzUGxhdGZvcm1XaWRnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCkBAIC05MTcsMTIgKzkxNywx
NCBAQCBzdGF0aWMgYm9vbCBsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCi1zdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQ29u
dGFpbmVyTm9kZShDb250YWluZXJOb2RlJiBjb250YWluZXIpCitzdGF0aWMgV2Vha1B0cjxTY3Jv
bGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKENvbnRhaW5lck5vZGUm
IGNvbnRhaW5lcikKIHsKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBudWxs
cHRyOworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhOwogCi0gICAg
aWYgKFJlbmRlckJveCogYm94ID0gY29udGFpbmVyLnJlbmRlckJveCgpKQotICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yQm94KCpib3gpOworICAgIGlmIChSZW5kZXJC
b3gqIGJveCA9IGNvbnRhaW5lci5yZW5kZXJCb3goKSkgeworICAgICAgICBTY3JvbGxhYmxlQXJl
YSogc2Nyb2xsYWJsZUFyZWFQdHIgPSBzY3JvbGxhYmxlQXJlYUZvckJveCgqYm94KTsKKyAgICAg
ICAgc2Nyb2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYVB0ci0+Y3JlYXRlU2Nyb2xsYWJsZUFy
ZWFXZWFrUHRyKCk7CisgICAgfQogCiAgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhOwogfQpAQCAt
OTU3LDI3ICs5NTksMjUgQEAgdm9pZCBFdmVudEhhbmRsZXI6OmNsZWFyT3JTY2hlZHVsZUNsZWFy
aQogICAgIH0KIH0KIAotdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZvcldoZWVs
RXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgY29uc3QgSGl0VGVz
dFJlc3VsdCYgcmVzdWx0LCBSZWZQdHI8RWxlbWVudD4mIHdoZWVsRXZlbnRUYXJnZXQsIFJlZlB0
cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRhaW5lciwgU2Nyb2xsYWJsZUFyZWEqJiBz
Y3JvbGxhYmxlQXJlYSwgYm9vbCYgaXNPdmVyV2lkZ2V0KQordm9pZCBFdmVudEhhbmRsZXI6OnBs
YXRmb3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hl
ZWxFdmVudCwgY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0LCBSZWZQdHI8RWxlbWVudD4mIHdo
ZWVsRXZlbnRUYXJnZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Nyb2xsYWJsZUNvbnRhaW5l
ciwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhLCBib29sJiBpc092ZXJX
aWRnZXQpCiB7CiAgICAgY2xlYXJPclNjaGVkdWxlQ2xlYXJpbmdMYXRjaGVkU3RhdGVJZk5lZWRl
ZCh3aGVlbEV2ZW50KTsKIAogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwog
Ci0gICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IG51bGxwdHI7Ci0gICAgc2Nyb2xsYWJsZUFyZWEg
PSBudWxscHRyOwogICAgIGlmICghdmlldykKICAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9
IHdoZWVsRXZlbnRUYXJnZXQ7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChldmVudFRhcmdldElz
UGxhdGZvcm1XaWRnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSkpIHsKICAgICAgICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OwotICAgICAgICAgICAgc2Nyb2xs
YWJsZUFyZWEgPSBzY3JvbGxWaWV3Rm9yRXZlbnRUYXJnZXQod2hlZWxFdmVudFRhcmdldC5nZXQo
KSk7CisgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRU
YXJnZXQod2hlZWxFdmVudFRhcmdldC5nZXQoKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gZmluZEVuY2xvc2luZ1Njcm9sbGFibGVDb250YWlu
ZXIod2hlZWxFdmVudFRhcmdldC5nZXQoKSwgd2hlZWxFdmVudC5kZWx0YVgoKSwgd2hlZWxFdmVu
dC5kZWx0YVkoKSk7CiAgICAgICAgICAgICBpZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciAmJiAhaXM8
SFRNTElGcmFtZUVsZW1lbnQ+KHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCkpKQogICAgICAgICAgICAg
ICAgIHNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKCpzY3Jv
bGxhYmxlQ29udGFpbmVyKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSB2aWV3LT5mcmFtZSgpLmRvY3VtZW50KCktPmJvZHlPckZyYW1l
c2V0KCk7Ci0gICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSB2aWV3OworICAgICAgICAg
ICAgICAgIHNjcm9sbGFibGVBcmVhID0gdmlldy0+Y3JlYXRlU2Nyb2xsYWJsZUFyZWFXZWFrUHRy
KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC05ODksNyArOTg5LDcgQEAg
dm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZvcldoZQogICAgIFNjcm9sbExhdGNo
aW5nU3RhdGUqIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxhdGNoaW5nU3Rh
dGUoKTsKICAgICBpZiAod2hlZWxFdmVudC5zaG91bGRDb25zaWRlckxhdGNoaW5nKCkpIHsKICAg
ICAgICAgaWYgKHNjcm9sbGFibGVDb250YWluZXIgJiYgc2Nyb2xsYWJsZUFyZWEpIHsKLSAgICAg
ICAgICAgIGJvb2wgc3RhcnRpbmdBdFNjcm9sbExpbWl0ID0gc2Nyb2xsZWRUb0VkZ2VJbkRvbWlu
YW50RGlyZWN0aW9uKCpzY3JvbGxhYmxlQ29udGFpbmVyLCAqc2Nyb2xsYWJsZUFyZWEsIHdoZWVs
RXZlbnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOworICAgICAgICAgICAgYm9vbCBz
dGFydGluZ0F0U2Nyb2xsTGltaXQgPSBzY3JvbGxlZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24o
KnNjcm9sbGFibGVDb250YWluZXIsICpzY3JvbGxhYmxlQXJlYS5nZXQoKSwgd2hlZWxFdmVudC5k
ZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7CiAgICAgICAgICAgICBpZiAoIXN0YXJ0aW5n
QXRTY3JvbGxMaW1pdCkgewogICAgICAgICAgICAgICAgIG1fZnJhbWUubWFpbkZyYW1lKCkucHVz
aE5ld0xhdGNoaW5nU3RhdGUoKTsKICAgICAgICAgICAgICAgICBsYXRjaGluZ1N0YXRlID0gbV9m
cmFtZS5tYWluRnJhbWUoKS5sYXRjaGluZ1N0YXRlKCk7CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQCBz
dGF0aWMgRnJhbWVWaWV3KiBmcmFtZVZpZXdGb3JMYXRjaGluZ1N0CiAgICAgcmV0dXJuIGxhdGNo
aW5nU3RhdGUtPmZyYW1lKCkgPyBsYXRjaGluZ1N0YXRlLT5mcmFtZSgpLT52aWV3KCkgOiBmcmFt
ZS52aWV3KCk7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxF
dmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIENvbnRhaW5lck5vZGUq
IHNjcm9sbGFibGVDb250YWluZXIsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK2Jv
b2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9y
bVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIENvbnRhaW5lck5vZGUqIHNjcm9sbGFibGVDb250YWlu
ZXIsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsKICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNr
IG9uIHRoZSBmcmFtZSB2aWV3IGJlY2F1c2UgdGhlIGV2ZW50IGhhbmRsZXIgY2FuIHJ1biBKUyB3
aGljaCByZXN1bHRzIGluIHRoZSBmcmFtZSBnZXR0aW5nIGRlc3Ryb3llZC4KQEAgLTEwNjAsNyAr
MTA2MCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWwKICAgICAg
ICAgbV9pc0hhbmRsaW5nV2hlZWxFdmVudCA9IGZhbHNlOwogCiAgICAgICAgIC8vIFdlYktpdDIg
Y29kZSBwYXRoCi0gICAgICAgIGlmICghZnJhbWVIYXNQbGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAm
JiAhbGF0Y2hpbmdTdGF0ZS0+c3RhcnRlZEdlc3R1cmVBdFNjcm9sbExpbWl0KCkgJiYgc2Nyb2xs
YWJsZUNvbnRhaW5lciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxlQ29udGFpbmVyKCkgJiYg
c2Nyb2xsYWJsZUFyZWEgJiYgdmlldyAhPSBzY3JvbGxhYmxlQXJlYSkgeworICAgICAgICBpZiAo
IWZyYW1lSGFzUGxhdGZvcm1XaWRnZXQobV9mcmFtZSkgJiYgIWxhdGNoaW5nU3RhdGUtPnN0YXJ0
ZWRHZXN0dXJlQXRTY3JvbGxMaW1pdCgpICYmIHNjcm9sbGFibGVDb250YWluZXIgPT0gbGF0Y2hp
bmdTdGF0ZS0+c2Nyb2xsYWJsZUNvbnRhaW5lcigpICYmIHNjcm9sbGFibGVBcmVhICYmIHZpZXcg
IT0gc2Nyb2xsYWJsZUFyZWEuZ2V0KCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGRpZCBub3Qg
c3RhcnQgYXQgdGhlIHNjcm9sbCBsaW1pdCwgZG8gbm90IHBhc3MgdGhlIGV2ZW50IG9uIHRvIGJl
IGhhbmRsZWQgYnkgZW5jbG9zaW5nIHNjcm9sbGFibGUgcmVnaW9ucy4KICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xMDc4LDcgKzEwNzgsNyBAQCBib29sIEV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsCiAgICAgICAgIH0KIAogICAgICAgICAvLyBJZiB0
aGUgcGxhdGZvcm0gd2lkZ2V0IGlzIGhhbmRsaW5nIHRoZSBldmVudCwgd2UgYWx3YXlzIHdhbnQg
dG8gcmV0dXJuIGZhbHNlLgotICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEgPT0gdmlldyAmJiB2
aWV3LT5wbGF0Zm9ybVdpZGdldCgpKQorICAgICAgICBpZiAoc2Nyb2xsYWJsZUFyZWEuZ2V0KCkg
PT0gdmlldyAmJiB2aWV3LT5wbGF0Zm9ybVdpZGdldCgpKQogICAgICAgICAgICAgZGlkSGFuZGxl
V2hlZWxFdmVudCA9IGZhbHNlOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIGRpZEhhbmRsZVdo
ZWVsRXZlbnQ7CkBAIC0xMTA1LDcgKzExMDUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZv
cm1Db21wbGV0ZVBsYXRmCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEV2ZW50SGFuZGxl
cjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3
aGVlbEV2ZW50LCBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEpCit2b2lkIEV2ZW50SGFu
ZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
JiB3aGVlbEV2ZW50LCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFyZWEpCiB7
CiAgICAgaWYgKCFzY3JvbGxhYmxlQXJlYSkKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gMTk5MjQ0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxMCArNDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFNhbWVT
aXplQXNTY3JvbGxhYmxlQXJlYSB7CiAgICAgdmlydHVhbCB+U2FtZVNpemVBc1Njcm9sbGFibGVB
cmVhKCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkKiBwb2ludGVyc1sz
XTsKKyAgICB2b2lkKiBwb2ludGVyc1s0XTsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kaWNlc1sy
XTsKICNlbHNlCi0gICAgdm9pZCogcG9pbnRlcjsKKyAgICB2b2lkKiBwb2ludGVyWzJdOwogI2Vu
ZGlmCiAgICAgSW50UG9pbnQgb3JpZ2luOwogICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAx
OTkyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAx
MSwgMjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsNiArNjQsOCBAQCBwdWJsaWM6CiAK
ICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50Jik7CiAKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBjcmVhdGVTY3JvbGxh
YmxlQXJlYVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtQdHJGYWN0b3J5LmNyZWF0ZVdlYWtQdHIo
KTsgfQorCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBjb25zdCBWZWN0b3I8TGF5
b3V0VW5pdD4qIGhvcml6b250YWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpv
bnRhbFNuYXBPZmZzZXRzLmdldCgpOyB9OwogICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0Piog
dmVydGljYWxTbmFwT2Zmc2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxTbmFwT2Zmc2V0
cy5nZXQoKTsgfTsKQEAgLTM0OSw2ICszNTIsOCBAQCBwcml2YXRlOgogCiAgICAgbXV0YWJsZSBz
dGQ6OnVuaXF1ZV9wdHI8U2Nyb2xsQW5pbWF0b3I+IG1fc2Nyb2xsQW5pbWF0b3I7CiAKKyAgICBX
ZWFrUHRyRmFjdG9yeTxTY3JvbGxhYmxlQXJlYT4gbV93ZWFrUHRyRmFjdG9yeSB7IHRoaXMgfTsK
KwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxMYXlvdXRVbml0Pj4gbV9ob3Jpem9udGFsU25hcE9mZnNldHM7CiAgICAgc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxMYXlvdXRVbml0Pj4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276060</attachid>
            <date>2016-04-08 17:13:13 -0700</date>
            <delta_ts>2016-04-08 17:45:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156420-20160408171318.patch</filename>
            <type>text/plain</type>
            <size>20612</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA0LTA4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXZWFrUHRycyB0byBh
dm9pZCB1c2luZyBkZWFsbG9jYXRlZCBXaWRnZXRzIGFuZCBTY3JvbGxhYmxlQXJlYXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQyMAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjU2MzczNzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgdGhlIHJpc2sgb2YgdXNpbmcgZGVhbGxvY2F0ZWQg
V2lkZ2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzIGJ5IHVzaW5nIFdlYWtQdHJzIGluc3RlYWQgb2YK
KyAgICAgICAgYmFyZSBwb2ludGVycy4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHNvbWUgZXhw
bGljaXQgY2FsbHMgdG8gZ2V0IFNjcm9sbGFibGVBcmVhIGFuZCBXaWRnZXQKKyAgICAgICAgbWVt
YmVycyBpbiB0aGUgZXZlbnQgaGFuZGxpbmcgbG9naWMuIEluc3RlYWQsIG51bGwgY2hlY2tzIGFy
ZSBzdWZmaWNpZW50IHRvIGVuc3VyZSB3ZSBuZXZlcgorICAgICAgICBhY2NpZGVudGFsbHkgZGVy
ZWZlcmVuY2UgYSBkZWxldGVkIGVsZW1lbnQuCisKKyAgICAgICAgMS4gTW9kaWZ5IHRoZSBTY3Jv
bGxhYmxlQXJlYSBjbGFzcyB0byBzdXBwb3J0IHZlbmRpbmcgV2Vha1B0cnMuCisgICAgICAgIDIu
IE1vZGlmeSB0aGUgRXZlbnQgSGFuZGxpbmcgY29kZSB0byB1c2UgV2Vha1B0cnMgdG8gaG9sZCBT
Y3JvbGxhYmxlQXJlYSBhbmQgUmVuZGVyV2lkZ2V0CisgICAgICAgICAgIG9iamVjdHMsIGFuZCB0
byBudWxsLWNoZWNrIHRoZXNlIGVsZW1lbnRzIGFmdGVyIGV2ZW50IGhhbmRsaW5nIGRpc3BhdGNo
aW5nIGlzIGZpbmlzaGVkCisgICAgICAgICAgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVzZSBv
YmplY3RzIGFyZSBkZXN0cm95ZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvd2hlZWwt
ZXZlbnQtZGVzdHJveXMtZnJhbWUuaHRtbAorICAgICAgICAgICAgICBmYXN0L2V2ZW50cy93aGVl
bC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFy
ZUZvcldoZWVsRXZlbnRzKTogQ2hhbmdlIHNpZ25hdHVyZSBmb3IgV2Vha1B0ci4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdl
c3R1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOiBDaGFu
Z2UgdG8gcmV0dXJuIGEgV2Vha1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlV2hlZWxFdmVudCk6IFVzZSBXZWFrUHRycyB0byBob2xkIGVsZW1lbnRzIHRoYXQgbWln
aHQgYmUgZGVzdHJveWVkCisgICAgICAgIGR1cmluZyBldmVudCBoYW5kbGluZy4KKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQpOiBS
ZW5hbWVkIGZyb20gc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0LiBSZXR1cm4KKyAgICAgICAgYSBX
ZWFrUHRyIHJhdGhlciB0aGFuIGEgYmFyZSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKTogUmV0dXJuIFdlYWtQdHIgcmF0aGVyIHRoYW4g
YmFyZSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVBy
ZXBhcmVGb3JXaGVlbEV2ZW50cyk6IENvbnZlcnQgdG8gV2Vha1B0cnMuCisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdp
ZGdldFdoZWVsRXZlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cm9sbFZpZXdGb3JFdmVudFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYWJsZUFyZWFXZWFr
UHRyKTogQWRkZWQuCisKIDIwMTYtMDQtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IE1ha2UgSURCR2V0UmVzdWx0IGNvbnRhaW4gYW4g
SURCVmFsdWUgaW5zdGVhZCBvZiBhIGJ1ZmZlciwgYW5kIHJlbW92ZSB1bnVzZWQgbWV0aG9kcy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE5OTI0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU3MSw3ICsyNTcxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNob3VsZFR1cm5WZXJ0aWNh
bFRpYwogCiAjaWYgIVBMQVRGT1JNKE1BQykKIAotdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3Jt
UHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhp
dFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mLCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mLCBT
Y3JvbGxhYmxlQXJlYSomLCBib29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBh
cmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0
UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJikKIHsKIH0KIApAQCAtMjU4MCw3ICsyNTgwLDcgQEAg
dm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUmVjb3JkV2hlZWxFdgogICAgIG1fZnJhbWUubWFp
bkZyYW1lKCkud2hlZWxFdmVudERlbHRhRmlsdGVyKCktPnVwZGF0ZUZyb21EZWx0YShGbG9hdFNp
emUoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRlbHRhWSgpKSk7CiB9CiAKLWJvb2wgRXZlbnRIYW5k
bGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IGV2ZW50LCBDb250YWluZXJOb2RlKiwgU2Nyb2xsYWJsZUFyZWEqKQorYm9vbCBFdmVudEhhbmRs
ZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
ZXZlbnQsIENvbnRhaW5lck5vZGUqLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiAgICAg
Ly8gV2UgZG8gYW5vdGhlciBjaGVjayBvbiB0aGUgZnJhbWUgdmlldyBiZWNhdXNlIHRoZSBldmVu
dCBoYW5kbGVyIGNhbiBydW4gSlMgd2hpY2ggcmVzdWx0cyBpbiB0aGUgZnJhbWUgZ2V0dGluZyBk
ZXN0cm95ZWQuCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CkBAIC0yNTk1
LDcgKzI1OTUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlmeUlm
RW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxhYmxlQXJlYSopCit2
b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogfQogCkBAIC0yNjEw
LDE2ICsyNjEwLDE2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmkK
IH0KICNlbmRpZgogCi1zdGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCitzdGF0aWMgV2Vha1B0cjxSZW5kZXJXaWRnZXQ+IHdpZGdldEZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZW5kZXJFbGVtZW50KiB0YXJnZXQg
PSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFdlYWtQdHI8UmVuZGVyV2lkZ2V0PiB3aWRnZXQ7CiAKLSAgICBpZiAoIWlz
PFJlbmRlcldpZGdldD4odGFyZ2V0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KFJlbmRlckVsZW1lbnQqIHRhcmdldCA9IGVsZW1lbnQucmVuZGVyZXIoKSkgeworICAgICAgICBp
ZiAoaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQpKQorICAgICAgICAgICAgd2lkZ2V0ID0gZG93bmNh
c3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS5jcmVhdGVXZWFrUHRyKCk7CisgICAgfQogCi0gICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkud2lkZ2V0KCk7CisgICAgcmV0
dXJuIHdpZGdldDsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKQEAgLTI2NDMsNyArMjY0Myw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnMKIAogICAgIFJlZlB0cjxFbGVtZW50
PiBlbGVtZW50ID0gcmVzdWx0LmlubmVyRWxlbWVudCgpOwogICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiBzY3JvbGxhYmxlQ29udGFpbmVyOwotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSA9IG51bGxwdHI7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFy
ZWE7CiAgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7CiAgICAg
cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMoZXZlbnQsIHJlc3VsdCwgZWxlbWVudCwgc2Ny
b2xsYWJsZUNvbnRhaW5lciwgc2Nyb2xsYWJsZUFyZWEsIGlzT3ZlcldpZGdldCk7CiAKQEAgLTI2
NjIsMjEgKzI2NjIsMjIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29u
cwogCiAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewotICAg
ICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KTsKLSAg
ICAgICAgICAgIGlmICh3aWRnZXQgJiYgcGFzc1doZWVsRXZlbnRUb1dpZGdldChldmVudCwgKndp
ZGdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIG9uIHRoZSB3aWRnZXQg
YmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhl
IGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgotICAgICAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0
ID0gd2lkZ2V0Rm9yRWxlbWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF3aWRn
ZXQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAg
IGlmIChzY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEt
PnNldFNjcm9sbGVkUHJvZ3JhbW1hdGljYWxseShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcGxh
dGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoYWRqdXN0ZWRFdmVudCwgc2Nyb2xsYWJsZUFyZWEpOwot
ICAgICAgICAgICAgICAgIGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1D
b21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdldCwgc2Nyb2xsYWJs
ZUNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgICAgICBXZWFrUHRyPFJlbmRlcldpZGdldD4gcmVu
ZGVyV2lkZ2V0ID0gd2lkZ2V0Rm9yRWxlbWVudCgqZWxlbWVudCk7CisgICAgICAgICAgICBpZiAo
cmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocGFzc1doZWVsRXZlbnRUb1dpZGdldChldmVudCwgKnJlbmRlcldpZGdldC0+d2lkZ2V0
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faXNIYW5kbGluZ1doZWVsRXZlbnQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIG9uIHRoZSB3
aWRnZXQgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMg
aW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgorICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlbmRlcldpZGdldCB8fCAhcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Ny
b2xsZWRQcm9ncmFtbWF0aWNhbGx5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZv
cm1Ob3RpZnlJZkVuZEdlc3R1cmUoYWRqdXN0ZWRFdmVudCwgc2Nyb2xsYWJsZUFyZWEpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcldpZGdldC0+d2lkZ2V0KCktPnBsYXRmb3JtV2lk
Z2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQo
ZXZlbnQsICpyZW5kZXJXaWRnZXQtPndpZGdldCgpLCBzY3JvbGxhYmxlQ29udGFpbmVyLmdldCgp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAxOTkyNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA0LDExICsy
MDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUq
LCBXaGVlbEV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVQYXN0ZUdsb2JhbFNlbGVjdGlvbihjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIHZvaWQgcGxhdGZvcm1QcmVwYXJlRm9yV2hl
ZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYs
IFJlZlB0cjxFbGVtZW50PiYgZXZlbnRUYXJnZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Ny
b2xsYWJsZUNvbnRhaW5lciwgU2Nyb2xsYWJsZUFyZWEqJiwgYm9vbCYgaXNPdmVyV2lkZ2V0KTsK
KyAgICB2b2lkIHBsYXRmb3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mIGV2ZW50VGFy
Z2V0LCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+JiwgYm9vbCYgaXNPdmVyV2lkZ2V0KTsKICAgICB2b2lkIHBsYXRmb3Jt
UmVjb3JkV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICBib29sIHBs
YXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIENvbnRh
aW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIsIFNjcm9sbGFibGVBcmVhKik7CisgICAgYm9v
bCBwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBD
b250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVh
PiYpOwogICAgIGJvb2wgcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBDb250YWluZXJOb2RlKiBz
Y3JvbGxhYmxlQ29udGFpbmVyKTsKLSAgICB2b2lkIHBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJl
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFNjcm9sbGFibGVBcmVhKik7CisgICAgdm9pZCBw
bGF0Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXZWFr
UHRyPFNjcm9sbGFibGVBcmVhPiYpOwogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpIHx8
IEVOQUJMRShJT1NfR0VTVFVSRV9FVkVOVFMpCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFRv
dWNoPj4gVG91Y2hBcnJheTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0JKHJldmlzaW9uIDE5OTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODY3LDE2ICs4NjcsMTYgQEAg
c3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbQogICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpOwogfQogCi1zdGF0aWMgU2Nyb2xs
Vmlldyogc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQorc3Rh
dGljIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQo
RWxlbWVudCogZXZlbnRUYXJnZXQpCiB7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JF
dmVudFRhcmdldChldmVudFRhcmdldCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIGlmICghd2lkZ2V0LT5pc1Njcm9sbFZpZXcoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Ny
b2xsVmlldyo+KHdpZGdldCk7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJs
ZUFyZWE7CisKKyAgICBpZiAoV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JFdmVudFRhcmdldChl
dmVudFRhcmdldCkpIHsKKyAgICAgICAgaWYgKHdpZGdldC0+aXNTY3JvbGxWaWV3KCkpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHdp
ZGdldCktPmNyZWF0ZVNjcm9sbGFibGVBcmVhV2Vha1B0cigpOworICAgIH0KKworICAgIHJldHVy
biBzY3JvbGxhYmxlQXJlYTsKIH0KICAgICAKIHN0YXRpYyBib29sIGV2ZW50VGFyZ2V0SXNQbGF0
Zm9ybVdpZGdldChFbGVtZW50KiBldmVudFRhcmdldCkKQEAgLTkxNywxMiArOTE3LDE0IEBAIHN0
YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2YKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJO
b2RlKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKK3N0YXRpYyBXZWFrUHRyPFNjcm9sbGFibGVB
cmVhPiBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoQ29udGFpbmVyTm9kZSYgY29udGFp
bmVyKQogewotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IG51bGxwdHI7Cisg
ICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CiAKLSAgICBpZiAoUmVu
ZGVyQm94KiBib3ggPSBjb250YWluZXIucmVuZGVyQm94KCkpCi0gICAgICAgIHNjcm9sbGFibGVB
cmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JCb3goKmJveCk7CisgICAgaWYgKFJlbmRlckJveCogYm94
ID0gY29udGFpbmVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYVB0ciA9IHNjcm9sbGFibGVBcmVhRm9yQm94KCpib3gpOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhUHRyLT5jcmVhdGVTY3JvbGxhYmxlQXJlYVdlYWtQ
dHIoKTsKKyAgICB9CiAKICAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWE7CiB9CkBAIC05NTcsMjcg
Kzk1OSwyNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpCiAgICAg
fQogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVudFRhcmdldCwgUmVmUHRyPENvbnRh
aW5lck5vZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBTY3JvbGxhYmxlQXJlYSomIHNjcm9sbGFi
bGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQpCit2b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Q
cmVwYXJlRm9yV2hlZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVu
dFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBXZWFr
UHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFyZWEsIGJvb2wmIGlzT3ZlcldpZGdldCkK
IHsKICAgICBjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKHdoZWVs
RXZlbnQpOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAKLSAgICBz
Y3JvbGxhYmxlQ29udGFpbmVyID0gbnVsbHB0cjsKLSAgICBzY3JvbGxhYmxlQXJlYSA9IG51bGxw
dHI7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gd2hlZWxF
dmVudFRhcmdldDsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0SXNQbGF0Zm9y
bVdpZGdldCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKSkgewogICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IHdoZWVsRXZlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YSA9IHNjcm9sbFZpZXdGb3JFdmVudFRhcmdldCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JFdmVudFRhcmdldCh3
aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcih3aGVl
bEV2ZW50VGFyZ2V0LmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRh
WSgpKTsKICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyICYmICFpczxIVE1MSUZy
YW1lRWxlbWVudD4od2hlZWxFdmVudFRhcmdldC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoKnNjcm9sbGFibGVD
b250YWluZXIpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IHZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHZpZXc7CisgICAgICAgICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEgPSB2aWV3LT5jcmVhdGVTY3JvbGxhYmxlQXJlYVdlYWtQdHIoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlCiAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0
ZSogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUubWFpbkZyYW1lKCkubGF0Y2hpbmdTdGF0ZSgpOwog
ICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSkgewogICAgICAgICBp
ZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciAmJiBzY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAg
Ym9vbCBzdGFydGluZ0F0U2Nyb2xsTGltaXQgPSBzY3JvbGxlZFRvRWRnZUluRG9taW5hbnREaXJl
Y3Rpb24oKnNjcm9sbGFibGVDb250YWluZXIsICpzY3JvbGxhYmxlQXJlYSwgd2hlZWxFdmVudC5k
ZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7CisgICAgICAgICAgICBib29sIHN0YXJ0aW5n
QXRTY3JvbGxMaW1pdCA9IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xs
YWJsZUNvbnRhaW5lciwgKnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKICAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9s
bExpbWl0KSB7CiAgICAgICAgICAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5wdXNoTmV3TGF0
Y2hpbmdTdGF0ZSgpOwogICAgICAgICAgICAgICAgIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1h
aW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKQEAgLTEwNDcsNyArMTA0Nyw3IEBAIHN0YXRpYyBG
cmFtZVZpZXcqIGZyYW1lVmlld0ZvckxhdGNoaW5nU3QKICAgICByZXR1cm4gbGF0Y2hpbmdTdGF0
ZS0+ZnJhbWUoKSA/IGxhdGNoaW5nU3RhdGUtPmZyYW1lKCktPnZpZXcoKSA6IGZyYW1lLnZpZXco
KTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xs
YWJsZUNvbnRhaW5lciwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorYm9vbCBFdmVu
dEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQogewogICAgIEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUudmlldygpOwogICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24gdGhl
IGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJl
c3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgpAQCAtMTA2MCw3ICsxMDYwLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbAogICAgICAgICBtX2lz
SGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBh
dGgKLSAgICAgICAgaWYgKCFmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmICFsYXRj
aGluZ1N0YXRlLT5zdGFydGVkR2VzdHVyZUF0U2Nyb2xsTGltaXQoKSAmJiBzY3JvbGxhYmxlQ29u
dGFpbmVyID09IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKSAmJiBzY3JvbGxh
YmxlQXJlYSAmJiB2aWV3ICE9IHNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGlmICghZnJhbWVI
YXNQbGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAmJiAhbGF0Y2hpbmdTdGF0ZS0+c3RhcnRlZEdlc3R1
cmVBdFNjcm9sbExpbWl0KCkgJiYgc2Nyb2xsYWJsZUNvbnRhaW5lciA9PSBsYXRjaGluZ1N0YXRl
LT5zY3JvbGxhYmxlQ29udGFpbmVyKCkgJiYgc2Nyb2xsYWJsZUFyZWEgJiYgdmlldyAhPSBzY3Jv
bGxhYmxlQXJlYS5nZXQoKSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBzdGFydCBh
dCB0aGUgc2Nyb2xsIGxpbWl0LCBkbyBub3QgcGFzcyB0aGUgZXZlbnQgb24gdG8gYmUgaGFuZGxl
ZCBieSBlbmNsb3Npbmcgc2Nyb2xsYWJsZSByZWdpb25zLgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybUNvbXBsZXRlV2hlZWwKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBwbGF0
Zm9ybSB3aWRnZXQgaXMgaGFuZGxpbmcgdGhlIGV2ZW50LCB3ZSBhbHdheXMgd2FudCB0byByZXR1
cm4gZmFsc2UuCi0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSA9PSB2aWV3ICYmIHZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS5nZXQoKSA9PSB2aWV3
ICYmIHZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICBkaWRIYW5kbGVXaGVlbEV2
ZW50ID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZGlkSGFuZGxlV2hlZWxFdmVu
dDsKQEAgLTExMDUsNyArMTEwNSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBs
ZXRlUGxhdGYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0
Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBp
ZiAoIXNjcm9sbGFibGVBcmVhKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCShyZXZpc2lvbiAxOTkyNDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEwICs0OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgU2FtZVNpemVBc1Nj
cm9sbGFibGVBcmVhIHsKICAgICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEoKTsK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQqIHBvaW50ZXJzWzNdOworICAg
IHZvaWQqIHBvaW50ZXJzWzRdOwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRpY2VzWzJdOwogI2Vs
c2UKLSAgICB2b2lkKiBwb2ludGVyOworICAgIHZvaWQqIHBvaW50ZXJbMl07CiAjZW5kaWYKICAg
ICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE5OTI0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKTsKIAorICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IGNyZWF0ZVNjcm9sbGFibGVBcmVh
V2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0
PiogaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU25h
cE9mZnNldHMuZ2V0KCk7IH07CiAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiB2ZXJ0aWNh
bFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzLmdldCgp
OyB9OwpAQCAtMzQ5LDYgKzM1Miw4IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIAorICAgIFdlYWtQdHJG
YWN0b3J5PFNjcm9sbGFibGVBcmVhPiBtX3dlYWtQdHJGYWN0b3J5IHsgdGhpcyB9OworCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPExheW91
dFVuaXQ+PiBtX2hvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPExheW91dFVuaXQ+PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxOTkyNTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNCBAQAorMjAxNi0wNC0wOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgV2Vha1B0cnMgdG8gYXZvaWQgdXNpbmcgZGVhbGxvY2F0ZWQgV2lk
Z2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTY0MjAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1NjM3Mzc4
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy5o
dG1sOiBBZGRlZC4KKwogMjAxNi0wNC0wOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29t
PgogCiAgICAgICAgIEZvY3VzIHJpbmcgZHJhd24gYXQgaW5jb3JyZWN0IGxvY2F0aW9uIG9uIGlt
YWdlIG1hcCB3aXRoIENTUyB0cmFuc2Zvcm0uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ct
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hl
ZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jhc2guCisKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3cuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95
cy1vdmVyZmxvdy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
d2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4K
KyAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uTG9hZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBkaXZUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7
CisgICAgICAgICAgICB2YXIgZGl2VGFyZ2V0Qm91bmRzID0gZGl2VGFyZ2V0LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOworCisgICAgICAgICAgICBkaXZUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcign
d2hlZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZGl2
IGR1cmluZyBldmVudCBmaXJpbmcgY2F1c2VzIGNyYXNoLgorICAgICAgICAgICAgICAgIGlmIChk
aXZUYXJnZXQucGFyZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZGl2VGFyZ2V0LnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoZGl2VGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
aWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhkaXZUYXJnZXRCb3VuZHMubGVmdCArIDEw
LCBkaXZUYXJnZXRCb3VuZHMudG9wICsgMTApOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnYmVnYW4nLCAnbm9u
ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1v
bWVudHVtUGhhc2VzKDAsIC0xLCAnY2hhbmdlZCcsICdub25lJyk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEsICdj
aGFuZ2VkJywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlX
aXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAwLCAnZW5kZWQnLCAnbm9uZScpOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpOyI+Cisg
ICAgPHA+VGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jhc2guPHA+CisgICAgPGRpdiBpZD0icGFyZW50
IiBzdHlsZT0iaGVpZ2h0OiAyMDAwcHg7IHdpZHRoOiAyMDAwcHg7Ij4KKyAgICAgICAgPGRpdiBp
ZD0iaG9sZGVyIiBjbGFzcz0ic2Nyb2xsYWJsZV9yZWdpb24iIj4KKyAgICAgICAgICAgIDxkaXYg
aWQ9InRhcmdldCIgc3R5bGU9J292ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6IGhpZGRlbjsg
bWF4LWhlaWdodDogMzUwcHg7Jz4KKyAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSdoZWlnaHQ6
MTAwMHB4Jz5XaGVlbCBIZXJlLjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwv
ZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276066</attachid>
            <date>2016-04-08 17:45:47 -0700</date>
            <delta_ts>2016-04-11 00:47:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156420-20160408174552.patch</filename>
            <type>text/plain</type>
            <size>21297</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ1IEBACisyMDE2LTA0LTA4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXZWFrUHRycyB0byBh
dm9pZCB1c2luZyBkZWFsbG9jYXRlZCBXaWRnZXRzIGFuZCBTY3JvbGxhYmxlQXJlYXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQyMAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjU2MzczNzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQXZvaWQgdGhlIHJpc2sgb2YgdXNpbmcgZGVhbGxvY2F0ZWQg
V2lkZ2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzIGJ5IHVzaW5nIFdlYWtQdHJzIGluc3RlYWQgb2YK
KyAgICAgICAgYmFyZSBwb2ludGVycy4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHNvbWUgZXhw
bGljaXQgY2FsbHMgdG8gZ2V0IFNjcm9sbGFibGVBcmVhIGFuZCBXaWRnZXQKKyAgICAgICAgbWVt
YmVycyBpbiB0aGUgZXZlbnQgaGFuZGxpbmcgbG9naWMuIEluc3RlYWQsIG51bGwgY2hlY2tzIGFy
ZSBzdWZmaWNpZW50IHRvIGVuc3VyZSB3ZSBuZXZlcgorICAgICAgICBhY2NpZGVudGFsbHkgZGVy
ZWZlcmVuY2UgYSBkZWxldGVkIGVsZW1lbnQuCisKKyAgICAgICAgMS4gTW9kaWZ5IHRoZSBTY3Jv
bGxhYmxlQXJlYSBjbGFzcyB0byBzdXBwb3J0IHZlbmRpbmcgV2Vha1B0cnMuCisgICAgICAgIDIu
IE1vZGlmeSB0aGUgRXZlbnQgSGFuZGxpbmcgY29kZSB0byB1c2UgV2Vha1B0cnMgdG8gaG9sZCBT
Y3JvbGxhYmxlQXJlYSBhbmQgUmVuZGVyV2lkZ2V0CisgICAgICAgICAgIG9iamVjdHMsIGFuZCB0
byBudWxsLWNoZWNrIHRoZXNlIGVsZW1lbnRzIGFmdGVyIGV2ZW50IGhhbmRsaW5nIGRpc3BhdGNo
aW5nIGlzIGZpbmlzaGVkCisgICAgICAgICAgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVzZSBv
YmplY3RzIGFyZSBkZXN0cm95ZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvd2hlZWwt
ZXZlbnQtZGVzdHJveXMtZnJhbWUuaHRtbAorICAgICAgICAgICAgICBmYXN0L2V2ZW50cy93aGVl
bC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFu
ZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFy
ZUZvcldoZWVsRXZlbnRzKTogQ2hhbmdlIHNpZ25hdHVyZSBmb3IgV2Vha1B0ci4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdl
c3R1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOiBDaGFu
Z2UgdG8gcmV0dXJuIGEgV2Vha1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
aGFuZGxlV2hlZWxFdmVudCk6IFVzZSBXZWFrUHRycyB0byBob2xkIGVsZW1lbnRzIHRoYXQgbWln
aHQgYmUgZGVzdHJveWVkCisgICAgICAgIGR1cmluZyBldmVudCBoYW5kbGluZy4KKyAgICAgICAg
KiBwYWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQpOiBS
ZW5hbWVkIGZyb20gc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0LiBSZXR1cm4KKyAgICAgICAgYSBX
ZWFrUHRyIHJhdGhlciB0aGFuIGEgYmFyZSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6c2Ny
b2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKTogUmV0dXJuIFdlYWtQdHIgcmF0aGVyIHRoYW4g
YmFyZSBwb2ludGVyLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVBy
ZXBhcmVGb3JXaGVlbEV2ZW50cyk6IENvbnZlcnQgdG8gV2Vha1B0cnMuCisgICAgICAgIChXZWJD
b3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdp
ZGdldFdoZWVsRXZlbnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6
cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cm9sbFZpZXdGb3JFdmVudFRhcmdldCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vU2Ny
b2xsYWJsZUFyZWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlU2Nyb2xsYWJsZUFyZWFXZWFr
UHRyKTogQWRkZWQuCisKIDIwMTYtMDQtMDggIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUu
Y29tPgogCiAgICAgICAgIE1vZGVybiBJREI6IE1ha2UgSURCR2V0UmVzdWx0IGNvbnRhaW4gYW4g
SURCVmFsdWUgaW5zdGVhZCBvZiBhIGJ1ZmZlciwgYW5kIHJlbW92ZSB1bnVzZWQgbWV0aG9kcy4K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDE5OTI0NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjU3MSw3ICsyNTcxLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnNob3VsZFR1cm5WZXJ0aWNh
bFRpYwogCiAjaWYgIVBMQVRGT1JNKE1BQykKIAotdm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3Jt
UHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0IEhp
dFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mLCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mLCBT
Y3JvbGxhYmxlQXJlYSomLCBib29sJikKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBh
cmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0
UmVzdWx0JiwgUmVmUHRyPEVsZW1lbnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mLCBib29sJikKIHsKIH0KIApAQCAtMjU4MCw3ICsyNTgwLDcgQEAg
dm9pZCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtUmVjb3JkV2hlZWxFdgogICAgIG1fZnJhbWUubWFp
bkZyYW1lKCkud2hlZWxFdmVudERlbHRhRmlsdGVyKCktPnVwZGF0ZUZyb21EZWx0YShGbG9hdFNp
emUoZXZlbnQuZGVsdGFYKCksIGV2ZW50LmRlbHRhWSgpKSk7CiB9CiAKLWJvb2wgRXZlbnRIYW5k
bGVyOjpwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQm
IGV2ZW50LCBDb250YWluZXJOb2RlKiwgU2Nyb2xsYWJsZUFyZWEqKQorYm9vbCBFdmVudEhhbmRs
ZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYg
ZXZlbnQsIENvbnRhaW5lck5vZGUqLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYpCiB7CiAgICAg
Ly8gV2UgZG8gYW5vdGhlciBjaGVjayBvbiB0aGUgZnJhbWUgdmlldyBiZWNhdXNlIHRoZSBldmVu
dCBoYW5kbGVyIGNhbiBydW4gSlMgd2hpY2ggcmVzdWx0cyBpbiB0aGUgZnJhbWUgZ2V0dGluZyBk
ZXN0cm95ZWQuCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CkBAIC0yNTk1
LDcgKzI1OTUsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVBsYXRmCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlmeUlm
RW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxhYmxlQXJlYSopCit2
b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogfQogCkBAIC0yNjEw
LDE2ICsyNjEwLDE2IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjpjbGVhck9yU2NoZWR1bGVDbGVhcmkK
IH0KICNlbmRpZgogCi1zdGF0aWMgV2lkZ2V0KiB3aWRnZXRGb3JFbGVtZW50KGNvbnN0IEVsZW1l
bnQmIGVsZW1lbnQpCitzdGF0aWMgV2Vha1B0cjxSZW5kZXJXaWRnZXQ+IHdpZGdldEZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBSZW5kZXJFbGVtZW50KiB0YXJnZXQg
PSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIFdlYWtQdHI8UmVuZGVyV2lkZ2V0PiB3aWRnZXQ7CiAKLSAgICBpZiAoIWlz
PFJlbmRlcldpZGdldD4odGFyZ2V0KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KFJlbmRlckVsZW1lbnQqIHRhcmdldCA9IGVsZW1lbnQucmVuZGVyZXIoKSkgeworICAgICAgICBp
ZiAoaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQpKQorICAgICAgICAgICAgd2lkZ2V0ID0gZG93bmNh
c3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS5jcmVhdGVXZWFrUHRyKCk7CisgICAgfQogCi0gICAg
cmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdldCkud2lkZ2V0KCk7CisgICAgcmV0
dXJuIHdpZGdldDsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCkKQEAgLTI2NDMsNyArMjY0Myw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnMKIAogICAgIFJlZlB0cjxFbGVtZW50
PiBlbGVtZW50ID0gcmVzdWx0LmlubmVyRWxlbWVudCgpOwogICAgIFJlZlB0cjxDb250YWluZXJO
b2RlPiBzY3JvbGxhYmxlQ29udGFpbmVyOwotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxl
QXJlYSA9IG51bGxwdHI7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFy
ZWE7CiAgICAgYm9vbCBpc092ZXJXaWRnZXQgPSByZXN1bHQuaXNPdmVyV2lkZ2V0KCk7CiAgICAg
cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMoZXZlbnQsIHJlc3VsdCwgZWxlbWVudCwgc2Ny
b2xsYWJsZUNvbnRhaW5lciwgc2Nyb2xsYWJsZUFyZWEsIGlzT3ZlcldpZGdldCk7CiAKQEAgLTI2
NjIsMjEgKzI2NjIsMjIgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29u
cwogCiAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewotICAg
ICAgICAgICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KTsKLSAg
ICAgICAgICAgIGlmICh3aWRnZXQgJiYgcGFzc1doZWVsRXZlbnRUb1dpZGdldChldmVudCwgKndp
ZGdldCkpIHsKLSAgICAgICAgICAgICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7
Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIG9uIHRoZSB3aWRnZXQg
YmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhl
IGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgotICAgICAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0
ID0gd2lkZ2V0Rm9yRWxlbWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF3aWRn
ZXQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAg
IGlmIChzY3JvbGxhYmxlQXJlYSkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEt
PnNldFNjcm9sbGVkUHJvZ3JhbW1hdGljYWxseShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcGxh
dGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoYWRqdXN0ZWRFdmVudCwgc2Nyb2xsYWJsZUFyZWEpOwot
ICAgICAgICAgICAgICAgIGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1D
b21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdldCwgc2Nyb2xsYWJs
ZUNvbnRhaW5lci5nZXQoKSk7CisgICAgICAgICAgICBXZWFrUHRyPFJlbmRlcldpZGdldD4gcmVu
ZGVyV2lkZ2V0ID0gd2lkZ2V0Rm9yRWxlbWVudCgqZWxlbWVudCk7CisgICAgICAgICAgICBpZiAo
cmVuZGVyV2lkZ2V0ICYmIHJlbmRlcldpZGdldC0+d2lkZ2V0KCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAocGFzc1doZWVsRXZlbnRUb1dpZGdldChldmVudCwgKnJlbmRlcldpZGdldC0+d2lkZ2V0
KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG1faXNIYW5kbGluZ1doZWVsRXZlbnQgPSBmYWxz
ZTsKKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIG9uIHRoZSB3
aWRnZXQgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMg
aW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgorICAgICAgICAgICAgICAgICAgICBpZiAo
IXJlbmRlcldpZGdldCB8fCAhcmVuZGVyV2lkZ2V0LT53aWRnZXQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoc2Nyb2xs
YWJsZUFyZWEpCisgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Ny
b2xsZWRQcm9ncmFtbWF0aWNhbGx5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICAgICAgcGxhdGZv
cm1Ob3RpZnlJZkVuZEdlc3R1cmUoYWRqdXN0ZWRFdmVudCwgc2Nyb2xsYWJsZUFyZWEpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIXJlbmRlcldpZGdldC0+d2lkZ2V0KCktPnBsYXRmb3JtV2lk
Z2V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQo
ZXZlbnQsICpyZW5kZXJXaWRnZXQtPndpZGdldCgpLCBzY3JvbGxhYmxlQ29udGFpbmVyLmdldCgp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAxOTkyNDQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjA0LDExICsy
MDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgZGVmYXVsdFdoZWVsRXZlbnRIYW5kbGVyKE5vZGUq
LCBXaGVlbEV2ZW50Kik7CiAgICAgYm9vbCBoYW5kbGVQYXN0ZUdsb2JhbFNlbGVjdGlvbihjb25z
dCBQbGF0Zm9ybU1vdXNlRXZlbnQmKTsKIAotICAgIHZvaWQgcGxhdGZvcm1QcmVwYXJlRm9yV2hl
ZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYs
IFJlZlB0cjxFbGVtZW50PiYgZXZlbnRUYXJnZXQsIFJlZlB0cjxDb250YWluZXJOb2RlPiYgc2Ny
b2xsYWJsZUNvbnRhaW5lciwgU2Nyb2xsYWJsZUFyZWEqJiwgYm9vbCYgaXNPdmVyV2lkZ2V0KTsK
KyAgICB2b2lkIHBsYXRmb3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hl
ZWxFdmVudCYsIGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mIGV2ZW50VGFy
Z2V0LCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFdlYWtQdHI8
U2Nyb2xsYWJsZUFyZWE+JiwgYm9vbCYgaXNPdmVyV2lkZ2V0KTsKICAgICB2b2lkIHBsYXRmb3Jt
UmVjb3JkV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmKTsKLSAgICBib29sIHBs
YXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIENvbnRh
aW5lck5vZGUqIHNjcm9sbGFibGVDb250YWluZXIsIFNjcm9sbGFibGVBcmVhKik7CisgICAgYm9v
bCBwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBD
b250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVh
PiYpOwogICAgIGJvb2wgcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hlZWxFdmVudChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBXaWRnZXQmLCBDb250YWluZXJOb2RlKiBz
Y3JvbGxhYmxlQ29udGFpbmVyKTsKLSAgICB2b2lkIHBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJl
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFNjcm9sbGFibGVBcmVhKik7CisgICAgdm9pZCBw
bGF0Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBXZWFr
UHRyPFNjcm9sbGFibGVBcmVhPiYpOwogCiAjaWYgRU5BQkxFKElPU19UT1VDSF9FVkVOVFMpIHx8
IEVOQUJMRShJT1NfR0VTVFVSRV9FVkVOVFMpCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFRv
dWNoPj4gVG91Y2hBcnJheTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFu
ZGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhh
bmRsZXJNYWMubW0JKHJldmlzaW9uIDE5OTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L0V2ZW50SGFuZGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODY3LDE2ICs4NjcsMTYgQEAg
c3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbQogICAgIHJldHVybiBkb3du
Y2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpOwogfQogCi1zdGF0aWMgU2Nyb2xs
Vmlldyogc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50VGFyZ2V0KQorc3Rh
dGljIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9yRXZlbnRUYXJnZXQo
RWxlbWVudCogZXZlbnRUYXJnZXQpCiB7Ci0gICAgV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JF
dmVudFRhcmdldChldmVudFRhcmdldCk7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIAotICAgIGlmICghd2lkZ2V0LT5pc1Njcm9sbFZpZXcoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2Ny
b2xsVmlldyo+KHdpZGdldCk7CisgICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJs
ZUFyZWE7CisKKyAgICBpZiAoV2lkZ2V0KiB3aWRnZXQgPSB3aWRnZXRGb3JFdmVudFRhcmdldChl
dmVudFRhcmdldCkpIHsKKyAgICAgICAgaWYgKHdpZGdldC0+aXNTY3JvbGxWaWV3KCkpCisgICAg
ICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2Nyb2xsVmlldyo+KHdp
ZGdldCktPmNyZWF0ZVNjcm9sbGFibGVBcmVhV2Vha1B0cigpOworICAgIH0KKworICAgIHJldHVy
biBzY3JvbGxhYmxlQXJlYTsKIH0KICAgICAKIHN0YXRpYyBib29sIGV2ZW50VGFyZ2V0SXNQbGF0
Zm9ybVdpZGdldChFbGVtZW50KiBldmVudFRhcmdldCkKQEAgLTkxNywxMiArOTE3LDE0IEBAIHN0
YXRpYyBib29sIGxhdGNoaW5nSXNMb2NrZWRUb0FuY2VzdG9yT2YKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXN0YXRpYyBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJO
b2RlKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikKK3N0YXRpYyBXZWFrUHRyPFNjcm9sbGFibGVB
cmVhPiBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoQ29udGFpbmVyTm9kZSYgY29udGFp
bmVyKQogewotICAgIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSA9IG51bGxwdHI7Cisg
ICAgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4gc2Nyb2xsYWJsZUFyZWE7CiAKLSAgICBpZiAoUmVu
ZGVyQm94KiBib3ggPSBjb250YWluZXIucmVuZGVyQm94KCkpCi0gICAgICAgIHNjcm9sbGFibGVB
cmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JCb3goKmJveCk7CisgICAgaWYgKFJlbmRlckJveCogYm94
ID0gY29udGFpbmVyLnJlbmRlckJveCgpKSB7CisgICAgICAgIFNjcm9sbGFibGVBcmVhKiBzY3Jv
bGxhYmxlQXJlYVB0ciA9IHNjcm9sbGFibGVBcmVhRm9yQm94KCpib3gpOworICAgICAgICBzY3Jv
bGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVhUHRyLT5jcmVhdGVTY3JvbGxhYmxlQXJlYVdlYWtQ
dHIoKTsKKyAgICB9CiAKICAgICByZXR1cm4gc2Nyb2xsYWJsZUFyZWE7CiB9CkBAIC05NTcsMjcg
Kzk1OSwyNSBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpCiAgICAg
fQogfQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBjb25zdCBIaXRUZXN0UmVzdWx0
JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVudFRhcmdldCwgUmVmUHRyPENvbnRh
aW5lck5vZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBTY3JvbGxhYmxlQXJlYSomIHNjcm9sbGFi
bGVBcmVhLCBib29sJiBpc092ZXJXaWRnZXQpCit2b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Q
cmVwYXJlRm9yV2hlZWxFdmVudHMoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiB3aGVlbEV2ZW50
LCBjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIFJlZlB0cjxFbGVtZW50PiYgd2hlZWxFdmVu
dFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY3JvbGxhYmxlQ29udGFpbmVyLCBXZWFr
UHRyPFNjcm9sbGFibGVBcmVhPiYgc2Nyb2xsYWJsZUFyZWEsIGJvb2wmIGlzT3ZlcldpZGdldCkK
IHsKICAgICBjbGVhck9yU2NoZWR1bGVDbGVhcmluZ0xhdGNoZWRTdGF0ZUlmTmVlZGVkKHdoZWVs
RXZlbnQpOwogCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAKLSAgICBz
Y3JvbGxhYmxlQ29udGFpbmVyID0gbnVsbHB0cjsKLSAgICBzY3JvbGxhYmxlQXJlYSA9IG51bGxw
dHI7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gd2hlZWxF
dmVudFRhcmdldDsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKGV2ZW50VGFyZ2V0SXNQbGF0Zm9y
bVdpZGdldCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKSkgewogICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IHdoZWVsRXZlbnRUYXJnZXQ7Ci0gICAgICAgICAgICBzY3JvbGxhYmxlQXJl
YSA9IHNjcm9sbFZpZXdGb3JFdmVudFRhcmdldCh3aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKKyAg
ICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Nyb2xsYWJsZUFyZWFGb3JFdmVudFRhcmdldCh3
aGVlbEV2ZW50VGFyZ2V0LmdldCgpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNj
cm9sbGFibGVDb250YWluZXIgPSBmaW5kRW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lcih3aGVl
bEV2ZW50VGFyZ2V0LmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRh
WSgpKTsKICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxlQ29udGFpbmVyICYmICFpczxIVE1MSUZy
YW1lRWxlbWVudD4od2hlZWxFdmVudFRhcmdldC5nZXQoKSkpCiAgICAgICAgICAgICAgICAgc2Ny
b2xsYWJsZUFyZWEgPSBzY3JvbGxhYmxlQXJlYUZvckNvbnRhaW5lck5vZGUoKnNjcm9sbGFibGVD
b250YWluZXIpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2Nyb2xsYWJs
ZUNvbnRhaW5lciA9IHZpZXctPmZyYW1lKCkuZG9jdW1lbnQoKS0+Ym9keU9yRnJhbWVzZXQoKTsK
LSAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHZpZXc7CisgICAgICAgICAgICAgICAg
c2Nyb2xsYWJsZUFyZWEgPSB2aWV3LT5jcmVhdGVTY3JvbGxhYmxlQXJlYVdlYWtQdHIoKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTk4OSw3ICs5ODksNyBAQCB2b2lkIEV2
ZW50SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlCiAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0
ZSogbGF0Y2hpbmdTdGF0ZSA9IG1fZnJhbWUubWFpbkZyYW1lKCkubGF0Y2hpbmdTdGF0ZSgpOwog
ICAgIGlmICh3aGVlbEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSkgewogICAgICAgICBp
ZiAoc2Nyb2xsYWJsZUNvbnRhaW5lciAmJiBzY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAg
Ym9vbCBzdGFydGluZ0F0U2Nyb2xsTGltaXQgPSBzY3JvbGxlZFRvRWRnZUluRG9taW5hbnREaXJl
Y3Rpb24oKnNjcm9sbGFibGVDb250YWluZXIsICpzY3JvbGxhYmxlQXJlYSwgd2hlZWxFdmVudC5k
ZWx0YVgoKSwgd2hlZWxFdmVudC5kZWx0YVkoKSk7CisgICAgICAgICAgICBib29sIHN0YXJ0aW5n
QXRTY3JvbGxMaW1pdCA9IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xs
YWJsZUNvbnRhaW5lciwgKnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKICAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9s
bExpbWl0KSB7CiAgICAgICAgICAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5wdXNoTmV3TGF0
Y2hpbmdTdGF0ZSgpOwogICAgICAgICAgICAgICAgIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1h
aW5GcmFtZSgpLmxhdGNoaW5nU3RhdGUoKTsKQEAgLTEwNDcsNyArMTA0Nyw3IEBAIHN0YXRpYyBG
cmFtZVZpZXcqIGZyYW1lVmlld0ZvckxhdGNoaW5nU3QKICAgICByZXR1cm4gbGF0Y2hpbmdTdGF0
ZS0+ZnJhbWUoKSA/IGxhdGNoaW5nU3RhdGUtPmZyYW1lKCktPnZpZXcoKSA6IGZyYW1lLnZpZXco
KTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNv
bnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xs
YWJsZUNvbnRhaW5lciwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorYm9vbCBFdmVu
dEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vh
a1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQogewogICAgIEZyYW1lVmlldyog
dmlldyA9IG1fZnJhbWUudmlldygpOwogICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24gdGhl
IGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJl
c3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgpAQCAtMTA2MCw3ICsxMDYwLDcg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbAogICAgICAgICBtX2lz
SGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBh
dGgKLSAgICAgICAgaWYgKCFmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmICFsYXRj
aGluZ1N0YXRlLT5zdGFydGVkR2VzdHVyZUF0U2Nyb2xsTGltaXQoKSAmJiBzY3JvbGxhYmxlQ29u
dGFpbmVyID09IGxhdGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKSAmJiBzY3JvbGxh
YmxlQXJlYSAmJiB2aWV3ICE9IHNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGlmICghZnJhbWVI
YXNQbGF0Zm9ybVdpZGdldChtX2ZyYW1lKSAmJiAhbGF0Y2hpbmdTdGF0ZS0+c3RhcnRlZEdlc3R1
cmVBdFNjcm9sbExpbWl0KCkgJiYgc2Nyb2xsYWJsZUNvbnRhaW5lciA9PSBsYXRjaGluZ1N0YXRl
LT5zY3JvbGxhYmxlQ29udGFpbmVyKCkgJiYgc2Nyb2xsYWJsZUFyZWEgJiYgdmlldyAhPSBzY3Jv
bGxhYmxlQXJlYS5nZXQoKSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBzdGFydCBh
dCB0aGUgc2Nyb2xsIGxpbWl0LCBkbyBub3QgcGFzcyB0aGUgZXZlbnQgb24gdG8gYmUgaGFuZGxl
ZCBieSBlbmNsb3Npbmcgc2Nyb2xsYWJsZSByZWdpb25zLgogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTEwNzgsNyArMTA3OCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybUNvbXBsZXRlV2hlZWwKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBwbGF0
Zm9ybSB3aWRnZXQgaXMgaGFuZGxpbmcgdGhlIGV2ZW50LCB3ZSBhbHdheXMgd2FudCB0byByZXR1
cm4gZmFsc2UuCi0gICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSA9PSB2aWV3ICYmIHZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS5nZXQoKSA9PSB2aWV3
ICYmIHZpZXctPnBsYXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICBkaWRIYW5kbGVXaGVlbEV2
ZW50ID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZGlkSGFuZGxlV2hlZWxFdmVu
dDsKQEAgLTExMDUsNyArMTEwNSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBs
ZXRlUGxhdGYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0
Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZl
bnQsIFNjcm9sbGFibGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybU5vdGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVs
RXZlbnQsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBp
ZiAoIXNjcm9sbGFibGVBcmVhKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCShyZXZpc2lvbiAxOTkyNDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDEwICs0OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBzdHJ1Y3QgU2FtZVNpemVBc1Nj
cm9sbGFibGVBcmVhIHsKICAgICB2aXJ0dWFsIH5TYW1lU2l6ZUFzU2Nyb2xsYWJsZUFyZWEoKTsK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHZvaWQqIHBvaW50ZXJzWzNdOworICAg
IHZvaWQqIHBvaW50ZXJzWzRdOwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRpY2VzWzJdOwogI2Vs
c2UKLSAgICB2b2lkKiBwb2ludGVyOworICAgIHZvaWQqIHBvaW50ZXJbMl07CiAjZW5kaWYKICAg
ICBJbnRQb2ludCBvcmlnaW47CiAgICAgdW5zaWduZWQgYml0ZmllbGRzIDogMTY7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHJldmlzaW9uIDE5OTI0NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDExLCAyMDE0
LTIwMTUgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4LTIwMTYgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxiYXIu
aCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC02Myw2ICs2NCw4IEBAIHB1YmxpYzoKIAogICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZl
bnQmKTsKIAorICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IGNyZWF0ZVNjcm9sbGFibGVBcmVh
V2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3RvcnkuY3JlYXRlV2Vha1B0cigpOyB9CisK
ICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogICAgIGNvbnN0IFZlY3RvcjxMYXlvdXRVbml0
PiogaG9yaXpvbnRhbFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9udGFsU25h
cE9mZnNldHMuZ2V0KCk7IH07CiAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiB2ZXJ0aWNh
bFNuYXBPZmZzZXRzKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbFNuYXBPZmZzZXRzLmdldCgp
OyB9OwpAQCAtMzQ5LDYgKzM1Miw4IEBAIHByaXZhdGU6CiAKICAgICBtdXRhYmxlIHN0ZDo6dW5p
cXVlX3B0cjxTY3JvbGxBbmltYXRvcj4gbV9zY3JvbGxBbmltYXRvcjsKIAorICAgIFdlYWtQdHJG
YWN0b3J5PFNjcm9sbGFibGVBcmVhPiBtX3dlYWtQdHJGYWN0b3J5IHsgdGhpcyB9OworCiAjaWYg
RU5BQkxFKENTU19TQ1JPTExfU05BUCkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPExheW91
dFVuaXQ+PiBtX2hvcml6b250YWxTbmFwT2Zmc2V0czsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPExheW91dFVuaXQ+PiBtX3ZlcnRpY2FsU25hcE9mZnNldHM7CkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAxOTkyNTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNSBAQAorMjAxNi0wNC0wOCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFtQGFwcGxlLmNv
bT4KKworICAgICAgICBVc2UgV2Vha1B0cnMgdG8gYXZvaWQgdXNpbmcgZGVhbGxvY2F0ZWQgV2lk
Z2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTY0MjAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI1NjM3Mzc4
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rlc3RFeHBlY3Rh
dGlvbnM6IFNraXAgd2hlZWwtZXZlbnQgdGVzdCBvbiBpT1MuCisKIDIwMTYtMDQtMDggIFphbGFu
IEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBGb2N1cyByaW5nIGRyYXduIGF0
IGluY29ycmVjdCBsb2NhdGlvbiBvbiBpbWFnZSBtYXAgd2l0aCBDU1MgdHJhbnNmb3JtLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ct
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVs
LWV2ZW50LWRlc3Ryb3lzLW92ZXJmbG93LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsLWV2ZW50LWRlc3Ryb3lzLW92ZXJmbG93LWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMgQEAKK1RoaXMgdGVzdCBzaG91bGQg
bm90IGNyYXNoLgorCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsLWV2ZW50
LWRlc3Ryb3lzLW92ZXJmbG93Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9l
dmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3cuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvZXZlbnRzL3doZWVsLWV2ZW50LWRlc3Ryb3lzLW92ZXJmbG93Lmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cuZXZlbnRTZW5kZXIp
IHsKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgdGVz
dFJ1bm5lci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBv
bkxvYWQoKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZGl2VGFyZ2V0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ3RhcmdldCcpOworICAgICAgICAgICAgdmFyIGRpdlRhcmdldEJvdW5k
cyA9IGRpdlRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKKworICAgICAgICAgICAgZGl2
VGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoJ3doZWVsJywgZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgLy8gUmVtb3ZpbmcgdGhlIGRpdiBkdXJpbmcgZXZlbnQgZmlyaW5nIGNhdXNlcyBjcmFz
aC4KKyAgICAgICAgICAgICAgICBpZiAoZGl2VGFyZ2V0LnBhcmVudE5vZGUpCisgICAgICAgICAg
ICAgICAgICAgIGRpdlRhcmdldC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpdlRhcmdldCk7Cisg
ICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHRlc3RSdW5uZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgICAgIH0sIDApOworICAgICAg
ICAgICAgfSk7CisKKyAgICAgICAgICAgIGlmICghd2luZG93LmV2ZW50U2VuZGVyKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VNb3ZlVG8o
ZGl2VGFyZ2V0Qm91bmRzLmxlZnQgKyAxMCwgZGl2VGFyZ2V0Qm91bmRzLnRvcCArIDEwKTsKKyAg
ICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBo
YXNlcygwLCAtMSwgJ2JlZ2FuJywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1v
dXNlU2Nyb2xsQnlXaXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAtMSwgJ2NoYW5nZWQnLCAn
bm9uZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFu
ZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnY2hhbmdlZCcsICdub25lJyk7CisgICAgICAgICAgICBl
dmVudFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgMCwg
J2VuZGVkJywgJ25vbmUnKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHkgb25sb2FkPSJvbkxvYWQoKTsiPgorICAgIDxwPlRoaXMgdGVzdCBzaG91bGQgbm90IGNyYXNo
LjxwPgorICAgIDxkaXYgaWQ9InBhcmVudCIgc3R5bGU9ImhlaWdodDogMjAwMHB4OyB3aWR0aDog
MjAwMHB4OyI+CisgICAgICAgIDxkaXYgaWQ9ImhvbGRlciIgY2xhc3M9InNjcm9sbGFibGVfcmVn
aW9uIiI+CisgICAgICAgICAgICA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSdvdmVyZmxvdy15OiBh
dXRvOyBvdmVyZmxvdy14OiBoaWRkZW47IG1heC1oZWlnaHQ6IDM1MHB4Oyc+CisgICAgICAgICAg
ICAgICAgPGRpdiBzdHlsZT0naGVpZ2h0OjEwMDBweCc+V2hlZWwgSGVyZS48L2Rpdj4KKyAgICAg
ICAgICAgIDwvZGl2PgorICAgICAgICA8L2Rpdj4KKyAgICA8L2Rpdj4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVzdEV4cGVjdGF0
aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rl
c3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDE5OTI0NCkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy1zaW11bGF0b3IvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpAQCAtNTgsNiAr
NTgsNyBAQCBmYXN0L2hpc3RvcnkvcGFnZS1jYWNoZS1zdXNwZW5kZWQtYXVkaW9jCiBmYXN0L3Nj
cm9sbGluZy9pZnJhbWUtc2Nyb2xsYWJsZS1hZnRlci1iYWNrLmh0bWwgWyBTa2lwIF0KIGZhc3Qv
c2Nyb2xsaW5nL292ZXJmbG93LXNjcm9sbGFibGUtYWZ0ZXItYmFjay5odG1sIFsgU2tpcCBdCiBm
YXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95cy1mcmFtZS5odG1sIFsgU2tpcCBdCitmYXN0
L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy5odG1sIFsgU2tpcCBdCiAKICMg
Tm90IHN1cHBvcnRlZCBvbiBpT1MKIGJhdHRlcnlzdGF0dXMK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>276131</attachid>
            <date>2016-04-11 00:47:11 -0700</date>
            <delta_ts>2016-04-11 18:35:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-156420-20160411004717.patch</filename>
            <type>text/plain</type>
            <size>27371</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTI4OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE2LTA0LTEwICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBXZWFrUHRycyB0byBh
dm9pZCB1c2luZyBkZWFsbG9jYXRlZCBXaWRnZXRzIGFuZCBTY3JvbGxhYmxlQXJlYXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjQyMAorICAgICAg
ICA8cmRhcjovL3Byb2JsZW0vMjU2MzczNzg+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
QWRsZXIuCisKKyAgICAgICAgQXZvaWQgdGhlIHJpc2sgb2YgdXNpbmcgZGVhbGxvY2F0ZWQgV2lk
Z2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzIGJ5IHVzaW5nIFdlYWtQdHJzIGluc3RlYWQgb2YKKyAg
ICAgICAgYmFyZSBwb2ludGVycy4gVGhpcyBhbGxvd3MgdXMgdG8gcmVtb3ZlIHNvbWUgZXhwbGlj
aXQgY2FsbHMgdG8gZ2V0IFNjcm9sbGFibGVBcmVhIGFuZCBXaWRnZXQKKyAgICAgICAgbWVtYmVy
cyBpbiB0aGUgZXZlbnQgaGFuZGxpbmcgbG9naWMuIEluc3RlYWQsIG51bGwgY2hlY2tzIGFyZSBz
dWZmaWNpZW50IHRvIGVuc3VyZSB3ZSBuZXZlcgorICAgICAgICBhY2NpZGVudGFsbHkgZGVyZWZl
cmVuY2UgYSBkZWxldGVkIGVsZW1lbnQuCisKKyAgICAgICAgMS4gTW9kaWZ5IHRoZSBTY3JvbGxh
YmxlQXJlYSBjbGFzcyB0byBzdXBwb3J0IHZlbmRpbmcgV2Vha1B0cnMuCisgICAgICAgIDIuIE1v
ZGlmeSB0aGUgRXZlbnQgSGFuZGxpbmcgY29kZSB0byB1c2UgV2Vha1B0cnMgdG8gaG9sZCBTY3Jv
bGxhYmxlQXJlYSBhbmQgUmVuZGVyV2lkZ2V0CisgICAgICAgICAgIG9iamVjdHMsIGFuZCB0byBu
dWxsLWNoZWNrIHRoZXNlIGVsZW1lbnRzIGFmdGVyIGV2ZW50IGhhbmRsaW5nIGRpc3BhdGNoaW5n
IGlzIGZpbmlzaGVkCisgICAgICAgICAgIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGVzZSBvYmpl
Y3RzIGFyZSBkZXN0cm95ZWQuCisKKyAgICAgICAgVGVzdDogZmFzdC9ldmVudHMvd2hlZWwtZXZl
bnQtZGVzdHJveXMtZnJhbWUuaHRtbAorICAgICAgICAgICAgICBmYXN0L2V2ZW50cy93aGVlbC1l
dmVudC1kZXN0cm95cy1vdmVyZmxvdy5odG1sCisKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtUHJlcGFyZUZv
cldoZWVsRXZlbnRzKTogQ2hhbmdlIHNpZ25hdHVyZSBmb3IgV2Vha1B0ci4KKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1
cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OndpZGdldEZvckVsZW1lbnQpOiBDaGFuZ2Ug
dG8gcmV0dXJuIGEgV2Vha1B0ci4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFu
ZGxlV2hlZWxFdmVudCk6IFVzZSBXZWFrUHRycyB0byBob2xkIGVsZW1lbnRzIHRoYXQgbWlnaHQg
YmUgZGVzdHJveWVkCisgICAgICAgIGR1cmluZyBldmVudCBoYW5kbGluZy4KKyAgICAgICAgKiBw
YWdlL0V2ZW50SGFuZGxlci5oOgorICAgICAgICAqIHBhZ2UvbWFjL0V2ZW50SGFuZGxlckVmbC5j
cHA6IFJlbmFtZSBwYXNzV2hlZWxFdmVudFRvV2lkZ2V0IHRvIHdpZGdldERpZEhhbmRsZVdoZWVs
RXZlbnQuCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyR3RrLmNwcDogRGl0dG8uCisg
ICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVySU9TLm1tOiBEaXR0by4KKyAgICAgICAgKiBw
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpzY3JvbGxhYmxl
QXJlYUZvckV2ZW50VGFyZ2V0KTogUmVuYW1lZCBmcm9tIHNjcm9sbFZpZXdGb3JFdmVudFRhcmdl
dC4gUmV0dXJuCisgICAgICAgIGEgV2Vha1B0ciByYXRoZXIgdGhhbiBhIGJhcmUgcG9pbnRlci4K
KyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZSk6IFJldHVy
biBXZWFrUHRyIHJhdGhlciB0aGFuIGJhcmUgcG9pbnRlci4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50SGFuZGxlcjo6Y29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2
ZW50cyk6IENvbnZlcnQgdG8gV2Vha1B0cnMuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRs
ZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdpZGdldFdoZWVsRXZlbnQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJ
ZkVuZEdlc3R1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6d2lk
Z2V0RGlkSGFuZGxlV2hlZWxFdmVudCk6IFJlbmFtZWQgZnJvbSBwYXNzV2hlZWxFdmVudFRvV2lk
Z2V0LgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjp3aWRnZXRGb3JFdmVudFRhcmdl
dCk6IENvbnZlcnRlZCBmcm9tIHN0YXRpYyBmdW5jdGlvbiB0byBzdGF0aWMKKyAgICAgICAgbWV0
aG9kIHNvIGl0IGNhbiBiZSBzaGFyZWQgd2l0aCBFdmVudEhhbmRsZXJNYWMuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JvbGxWaWV3Rm9yRXZlbnRUYXJnZXQpOiBEZWxldGVkLgorICAgICAgICAqIHBh
Z2UvbWFjL0V2ZW50SGFuZGxlcldpbi5jcHA6IFJlbmFtZSBwYXNzV2hlZWxFdmVudFRvV2lkZ2V0
IHRvIHdpZGdldERpZEhhbmRsZVdoZWVsRXZlbnQuCisgICAgICAgICogcGxhdGZvcm0vU2Nyb2xs
YWJsZUFyZWEuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxhYmxlQXJlYTo6Y3JlYXRlV2Vha1B0cik6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL1dpZGdldC5oOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYWJsZUFy
ZWE6OmNyZWF0ZVdlYWtQdHIpOiBBZGRlZC4KKwogMjAxNi0wNC0xMCAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIEZpeCB0aGUgYnVpbGQuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAxOTkyODgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1NzEsNyArMjU3MSw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzaG91bGRUdXJuVmVydGljYWxUaWMKIAogI2lmICFQTEFU
Rk9STShNQUMpCiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2
ZW50cyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVm
UHRyPEVsZW1lbnQ+JiwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiwgU2Nyb2xsYWJsZUFyZWEqJiwg
Ym9vbCYpCit2b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1QcmVwYXJlRm9yV2hlZWxFdmVudHMo
Y29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgSGl0VGVzdFJlc3VsdCYsIFJlZlB0cjxF
bGVtZW50PiYsIFJlZlB0cjxDb250YWluZXJOb2RlPiYsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+
JiwgYm9vbCYpCiB7CiB9CiAKQEAgLTI1ODAsNyArMjU4MCw3IEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpwbGF0Zm9ybVJlY29yZFdoZWVsRXYKICAgICBtX2ZyYW1lLm1haW5GcmFtZSgpLndoZWVsRXZl
bnREZWx0YUZpbHRlcigpLT51cGRhdGVGcm9tRGVsdGEoRmxvYXRTaXplKGV2ZW50LmRlbHRhWCgp
LCBldmVudC5kZWx0YVkoKSkpOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Db21w
bGV0ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgQ29udGFpbmVy
Tm9kZSosIFNjcm9sbGFibGVBcmVhKikKK2Jvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBs
ZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBDb250YWluZXJO
b2RlKiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKQogewogICAgIC8vIFdlIGRvIGFub3RoZXIg
Y2hlY2sgb24gdGhlIGZyYW1lIHZpZXcgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVu
IEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgogICAgIEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUudmlldygpOwpAQCAtMjU5NSw3ICsyNTk1LDcgQEAgYm9v
bCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVQbGF0ZgogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIEV2ZW50SGFuZGxlcjo6cGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3Qg
UGxhdGZvcm1XaGVlbEV2ZW50JiwgU2Nyb2xsYWJsZUFyZWEqKQordm9pZCBFdmVudEhhbmRsZXI6
OnBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdl
YWtQdHI8U2Nyb2xsYWJsZUFyZWE+JikKIHsKIH0KIApAQCAtMjYxMCwxOCArMjYxMCw0NiBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6Y2xlYXJPclNjaGVkdWxlQ2xlYXJpCiB9CiAjZW5kaWYKIAotc3Rh
dGljIFdpZGdldCogd2lkZ2V0Rm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50KQorV2lk
Z2V0KiBFdmVudEhhbmRsZXI6OndpZGdldEZvckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50VGFy
Z2V0KQogewotICAgIFJlbmRlckVsZW1lbnQqIHRhcmdldCA9IGVsZW1lbnQucmVuZGVyZXIoKTsK
LSAgICBpZiAoIXRhcmdldCkKKyAgICBpZiAoIWV2ZW50VGFyZ2V0KQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQorICAgIAorICAgIGF1dG8qIHRhcmdldCA9IGV2ZW50VGFyZ2V0LT5yZW5kZXJl
cigpOwogICAgIGlmICghaXM8UmVuZGVyV2lkZ2V0Pih0YXJnZXQpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQorICAgIAogICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJXaWRnZXQ+KCp0YXJn
ZXQpLndpZGdldCgpOwogfQogCitzdGF0aWMgV2Vha1B0cjxXaWRnZXQ+IHdpZGdldEZvckVsZW1l
bnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvIHRhcmdldCA9IGVsZW1lbnQu
cmVuZGVyZXIoKTsKKyAgICBpZiAoIWlzPFJlbmRlcldpZGdldD4odGFyZ2V0KSB8fCAhZG93bmNh
c3Q8UmVuZGVyV2lkZ2V0PigqdGFyZ2V0KS53aWRnZXQoKSkKKyAgICAgICAgcmV0dXJuIFdlYWtQ
dHI8V2lkZ2V0PigpOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlcldpZGdldD4oKnRhcmdl
dCkud2lkZ2V0KCktPmNyZWF0ZVdlYWtQdHIoKTsKK30KKworYm9vbCBFdmVudEhhbmRsZXI6OmNv
bXBsZXRlV2lkZ2V0V2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIGV2ZW50LCBX
ZWFrUHRyPFdpZGdldD4mIHdpZGdldCwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mIHNjcm9sbGFi
bGVBcmVhLCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyKQoreworICAgIG1faXNI
YW5kbGluZ1doZWVsRXZlbnQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBXZSBkbyBhbm90aGVyIGNo
ZWNrIG9uIHRoZSB3aWRnZXQgYmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdo
aWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgorICAgIGlmICghd2lk
Z2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKHNjcm9sbGFibGVBcmVh
KQorICAgICAgICBzY3JvbGxhYmxlQXJlYS0+c2V0U2Nyb2xsZWRQcm9ncmFtbWF0aWNhbGx5KGZh
bHNlKTsKKworICAgIHBsYXRmb3JtTm90aWZ5SWZFbmRHZXN0dXJlKGV2ZW50LCBzY3JvbGxhYmxl
QXJlYSk7CisKKyAgICBpZiAoIXdpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3JtV2lkZ2V0V2hl
ZWxFdmVudChldmVudCwgKndpZGdldC5nZXQoKSwgc2Nyb2xsYWJsZUNvbnRhaW5lcik7Cit9CisK
IGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxF
dmVudCYgZXZlbnQpCiB7CiAgICAgUmVuZGVyVmlldyogcmVuZGVyVmlldyA9IG1fZnJhbWUuY29u
dGVudFJlbmRlcmVyKCk7CkBAIC0yNjQzLDcgKzI2NzEsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6
aGFuZGxlV2hlZWxFdmVudChjb25zCiAKICAgICBSZWZQdHI8RWxlbWVudD4gZWxlbWVudCA9IHJl
c3VsdC5pbm5lckVsZW1lbnQoKTsKICAgICBSZWZQdHI8Q29udGFpbmVyTm9kZT4gc2Nyb2xsYWJs
ZUNvbnRhaW5lcjsKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRy
OworICAgIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhOwogICAgIGJvb2wg
aXNPdmVyV2lkZ2V0ID0gcmVzdWx0LmlzT3ZlcldpZGdldCgpOwogICAgIHBsYXRmb3JtUHJlcGFy
ZUZvcldoZWVsRXZlbnRzKGV2ZW50LCByZXN1bHQsIGVsZW1lbnQsIHNjcm9sbGFibGVDb250YWlu
ZXIsIHNjcm9sbGFibGVBcmVhLCBpc092ZXJXaWRnZXQpOwogCkBAIC0yNjYyLDIxICsyNjkwLDkg
QEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZVdoZWVsRXZlbnQoY29ucwogCiAgICAgaWYgKGVs
ZW1lbnQpIHsKICAgICAgICAgaWYgKGlzT3ZlcldpZGdldCkgewotICAgICAgICAgICAgV2lkZ2V0
KiB3aWRnZXQgPSB3aWRnZXRGb3JFbGVtZW50KCplbGVtZW50KTsKLSAgICAgICAgICAgIGlmICh3
aWRnZXQgJiYgcGFzc1doZWVsRXZlbnRUb1dpZGdldChldmVudCwgKndpZGdldCkpIHsKLSAgICAg
ICAgICAgICAgICBtX2lzSGFuZGxpbmdXaGVlbEV2ZW50ID0gZmFsc2U7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBXZSBkbyBhbm90aGVyIGNoZWNrIG9uIHRoZSB3aWRnZXQgYmVjYXVzZSB0aGUgZXZl
bnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhlIGZyYW1lIGdldHRpbmcg
ZGVzdHJveWVkLgotICAgICAgICAgICAgICAgIFdpZGdldCogd2lkZ2V0ID0gd2lkZ2V0Rm9yRWxl
bWVudCgqZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF3aWRnZXQpCi0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgICAgIGlmIChzY3JvbGxhYmxl
QXJlYSkKLSAgICAgICAgICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEtPnNldFNjcm9sbGVkUHJv
Z3JhbW1hdGljYWxseShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgcGxhdGZvcm1Ob3RpZnlJZkVu
ZEdlc3R1cmUoYWRqdXN0ZWRFdmVudCwgc2Nyb2xsYWJsZUFyZWEpOwotICAgICAgICAgICAgICAg
IGlmICghd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpKQotICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcGxhdGZvcm1Db21wbGV0ZVBsYXRmb3Jt
V2lkZ2V0V2hlZWxFdmVudChldmVudCwgKndpZGdldCwgc2Nyb2xsYWJsZUNvbnRhaW5lci5nZXQo
KSk7CisgICAgICAgICAgICBpZiAoV2Vha1B0cjxXaWRnZXQ+IHdpZGdldCA9IHdpZGdldEZvckVs
ZW1lbnQoKmVsZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgaWYgKHdpZGdldERpZEhhbmRsZVdo
ZWVsRXZlbnQoZXZlbnQsICp3aWRnZXQuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm4gY29tcGxldGVXaWRnZXRXaGVlbEV2ZW50KGFkanVzdGVkRXZlbnQsIHdpZGdldCwgc2Nyb2xs
YWJsZUFyZWEsIHNjcm9sbGFibGVDb250YWluZXIuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMTk5
Mjg4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNiBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTIwNCwxMSArMjA0LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIGRlZmF1bHRXaGVlbEV2
ZW50SGFuZGxlcihOb2RlKiwgV2hlZWxFdmVudCopOwogICAgIGJvb2wgaGFuZGxlUGFzdGVHbG9i
YWxTZWxlY3Rpb24oY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50Jik7CiAKLSAgICB2b2lkIHBsYXRm
b3JtUHJlcGFyZUZvcldoZWVsRXZlbnRzKGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIGNvbnN0
IEhpdFRlc3RSZXN1bHQmLCBSZWZQdHI8RWxlbWVudD4mIGV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29u
dGFpbmVyTm9kZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFNjcm9sbGFibGVBcmVhKiYsIGJvb2wm
IGlzT3ZlcldpZGdldCk7CisgICAgdm9pZCBwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyhj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBjb25zdCBIaXRUZXN0UmVzdWx0JiwgUmVmUHRyPEVs
ZW1lbnQ+JiBldmVudFRhcmdldCwgUmVmUHRyPENvbnRhaW5lck5vZGU+JiBzY3JvbGxhYmxlQ29u
dGFpbmVyLCBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiYsIGJvb2wmIGlzT3ZlcldpZGdldCk7CiAg
ICAgdm9pZCBwbGF0Zm9ybVJlY29yZFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50
Jik7Ci0gICAgYm9vbCBwbGF0Zm9ybUNvbXBsZXRlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmLCBDb250YWluZXJOb2RlKiBzY3JvbGxhYmxlQ29udGFpbmVyLCBTY3JvbGxhYmxl
QXJlYSopOworICAgIGJvb2wgcGxhdGZvcm1Db21wbGV0ZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZv
cm1XaGVlbEV2ZW50JiwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vha1B0
cjxTY3JvbGxhYmxlQXJlYT4mKTsKICAgICBib29sIHBsYXRmb3JtQ29tcGxldGVQbGF0Zm9ybVdp
ZGdldFdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgY29uc3QgV2lkZ2V0Jiwg
Q29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lcik7Ci0gICAgdm9pZCBwbGF0Zm9ybU5v
dGlmeUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmLCBTY3JvbGxhYmxlQXJl
YSopOworICAgIHZvaWQgcGxhdGZvcm1Ob3RpZnlJZkVuZEdlc3R1cmUoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiwgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4mKTsKIAogI2lmIEVOQUJMRShJT1Nf
VE9VQ0hfRVZFTlRTKSB8fCBFTkFCTEUoSU9TX0dFU1RVUkVfRVZFTlRTKQogICAgIHR5cGVkZWYg
VmVjdG9yPFJlZlB0cjxUb3VjaD4+IFRvdWNoQXJyYXk7CkBAIC0zMTgsNiArMzE4LDggQEAgcHVi
bGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0SW1tZWRpYXRlQWN0aW9uU3RhZ2UoSW1t
ZWRpYXRlQWN0aW9uU3RhZ2Ugc3RhZ2UpOwogICAgIEltbWVkaWF0ZUFjdGlvblN0YWdlIGltbWVk
aWF0ZUFjdGlvblN0YWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbW1lZGlhdGVBY3Rpb25TdGFnZTsg
fQogCisgICAgc3RhdGljIFdpZGdldCogd2lkZ2V0Rm9yRXZlbnRUYXJnZXQoRWxlbWVudCogZXZl
bnRUYXJnZXQpOworCiBwcml2YXRlOgogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgc3Rh
dGljIERyYWdTdGF0ZSYgZHJhZ1N0YXRlKCk7CkBAIC00MTUsNyArNDE3LDggQEAgcHJpdmF0ZToK
ICAgICBib29sIHBhc3NXaWRnZXRNb3VzZURvd25FdmVudFRvV2lkZ2V0KFJlbmRlcldpZGdldCop
OwogCiAgICAgYm9vbCBwYXNzTW91c2VEb3duRXZlbnRUb1dpZGdldChXaWRnZXQqKTsKLSAgICBi
b29sIHBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiwgV2lk
Z2V0Jik7CisgICAgYm9vbCB3aWRnZXREaWRIYW5kbGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYsIFdpZGdldCYpOworICAgIGJvb2wgY29tcGxldGVXaWRnZXRXaGVlbEV2ZW50
KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdlYWtQdHI8V2lkZ2V0PiYsIFdlYWtQdHI8U2Ny
b2xsYWJsZUFyZWE+JiwgQ29udGFpbmVyTm9kZSopOwogCiAgICAgdm9pZCBkZWZhdWx0U3BhY2VF
dmVudEhhbmRsZXIoS2V5Ym9hcmRFdmVudCopOwogICAgIHZvaWQgZGVmYXVsdEJhY2tzcGFjZUV2
ZW50SGFuZGxlcihLZXlib2FyZEV2ZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2Vm
bC9FdmVudEhhbmRsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
ZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAJKHJldmlzaW9uIDE5OTI4OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvZWZsL0V2ZW50SGFuZGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcg
Kzg3LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmV2ZW50QWN0aXZhdGVkVmlldyhjbwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRn
ZXQoY29uc3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0JiB3aWRnZXQpCitib29s
IEV2ZW50SGFuZGxlcjo6d2lkZ2V0RGlkSGFuZGxlV2hlZWxFdmVudChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50LCBXaWRnZXQmIHdpZGdldCkKIHsKICAgICBpZiAoIWlzPEZyYW1lVmll
dz4od2lkZ2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9ndGsvRXZlbnRIYW5kbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCShyZXZpc2lvbiAxOTkyODgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL2d0ay9FdmVudEhhbmRsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpldmVudEFjdGl2YXRlZFZpZXcoY28K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hlZWxFdmVu
dFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgZXZlbnQsIFdpZGdldCYgd2lkZ2V0
KQorYm9vbCBFdmVudEhhbmRsZXI6OndpZGdldERpZEhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2V0JiB3aWRnZXQpCiB7CiAgICAgaWYgKCFpczxG
cmFtZVZpZXc+KHdpZGdldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL2lvcy9FdmVudEhhbmRsZXJJT1MubW0JKHJldmlzaW9uIDE5OTI4OCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0V2ZW50SGFuZGxlcklPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNDA2LDcgKzQwNiw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzU3ViZnJhbWVFdmVu
dFRvU3UKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzV2hl
ZWxFdmVudFRvV2lkZ2V0KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYsIFdpZGdldCYgd2lkZ2V0
KQorYm9vbCBFdmVudEhhbmRsZXI6OndpZGdldERpZEhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxh
dGZvcm1XaGVlbEV2ZW50JiwgV2lkZ2V0JiB3aWRnZXQpCiB7CiAgICAgQkVHSU5fQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRs
ZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5k
bGVyTWFjLm1tCShyZXZpc2lvbiAxOTkyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9F
dmVudEhhbmRsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ2Myw3ICs0NjMsNyBAQCBzdGF0
aWMgdm9pZCBzZWxmUmV0YWluaW5nTlNTY3JvbGxWaWV3U2NyCiAgICAgICAgIFtzZWxmIHJlbGVh
c2VdOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25z
dCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFdpZGdldCYgd2lkZ2V0KQorYm9vbCBF
dmVudEhhbmRsZXI6OndpZGdldERpZEhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50JiB3aGVlbEV2ZW50LCBXaWRnZXQmIHdpZGdldCkKIHsKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKQEAgLTg1NSwzMyArODU1LDE4IEBAIHN0YXRpYyBib29sIHNjcm9s
bGVkVG9FZGdlSW5Eb21pbmFudERpcmUKICAgICByZXR1cm4gYXJlYS5zY3JvbGxlZFRvVG9wKCk7
CiB9CiAKLXN0YXRpYyBXaWRnZXQqIHdpZGdldEZvckV2ZW50VGFyZ2V0KEVsZW1lbnQqIGV2ZW50
VGFyZ2V0KQorc3RhdGljIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+IHNjcm9sbGFibGVBcmVhRm9y
RXZlbnRUYXJnZXQoRWxlbWVudCogZXZlbnRUYXJnZXQpCiB7Ci0gICAgaWYgKCFldmVudFRhcmdl
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgYXV0byogdGFyZ2V0ID0gZXZl
bnRUYXJnZXQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFpczxSZW5kZXJXaWRnZXQ+KHRhcmdldCkp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBkb3duY2FzdDxSZW5k
ZXJXaWRnZXQ+KCp0YXJnZXQpLndpZGdldCgpOwotfQorICAgIGF1dG8qIHdpZGdldCA9IEV2ZW50
SGFuZGxlcjo6d2lkZ2V0Rm9yRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpOworICAgIGlmICghd2lk
Z2V0IHx8ICF3aWRnZXQtPmlzU2Nyb2xsVmlldygpKQorICAgICAgICByZXR1cm4gV2Vha1B0cjxT
Y3JvbGxhYmxlQXJlYT4oKTsKIAotc3RhdGljIFNjcm9sbFZpZXcqIHNjcm9sbFZpZXdGb3JFdmVu
dFRhcmdldChFbGVtZW50KiBldmVudFRhcmdldCkKLXsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHdp
ZGdldEZvckV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0KTsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgaWYgKCF3aWRnZXQtPmlzU2Nyb2xsVmlldygp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDxTY3JvbGxWaWV3Kj4od2lkZ2V0KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xs
YWJsZUFyZWEqPihzdGF0aWNfY2FzdDxTY3JvbGxWaWV3Kj4od2lkZ2V0KSktPmNyZWF0ZVdlYWtQ
dHIoKTsKIH0KICAgICAKIHN0YXRpYyBib29sIGV2ZW50VGFyZ2V0SXNQbGF0Zm9ybVdpZGdldChF
bGVtZW50KiBldmVudFRhcmdldCkKIHsKLSAgICBXaWRnZXQqIHdpZGdldCA9IHdpZGdldEZvckV2
ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0KTsKKyAgICBXaWRnZXQqIHdpZGdldCA9IEV2ZW50SGFuZGxl
cjo6d2lkZ2V0Rm9yRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpOwogICAgIGlmICghd2lkZ2V0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCkBAIC05MTcsMTQgKzkwMiwxNyBAQCBzdGF0aWMg
Ym9vbCBsYXRjaGluZ0lzTG9ja2VkVG9BbmNlc3Rvck9mCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1zdGF0aWMgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhRm9yQ29udGFpbmVyTm9kZShD
b250YWluZXJOb2RlJiBjb250YWluZXIpCitzdGF0aWMgV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4g
c2Nyb2xsYWJsZUFyZWFGb3JDb250YWluZXJOb2RlKENvbnRhaW5lck5vZGUmIGNvbnRhaW5lcikK
IHsKLSAgICBTY3JvbGxhYmxlQXJlYSogc2Nyb2xsYWJsZUFyZWEgPSBudWxscHRyOworICAgIGF1
dG8gYm94ID0gY29udGFpbmVyLnJlbmRlckJveCgpOworICAgIGlmICghYm94KQorICAgICAgICBy
ZXR1cm4gV2Vha1B0cjxTY3JvbGxhYmxlQXJlYT4oKTsKIAotICAgIGlmIChSZW5kZXJCb3gqIGJv
eCA9IGNvbnRhaW5lci5yZW5kZXJCb3goKSkKLSAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBzY3Jv
bGxhYmxlQXJlYUZvckJveCgqYm94KTsKLQotICAgIHJldHVybiBzY3JvbGxhYmxlQXJlYTsKKyAg
ICBhdXRvIHNjcm9sbGFibGVBcmVhUHRyID0gc2Nyb2xsYWJsZUFyZWFGb3JCb3goKmJveCk7Cisg
ICAgaWYgKCFzY3JvbGxhYmxlQXJlYVB0cikKKyAgICAgICAgcmV0dXJuIFdlYWtQdHI8U2Nyb2xs
YWJsZUFyZWE+KCk7CisgICAgCisgICAgcmV0dXJuIHNjcm9sbGFibGVBcmVhUHRyLT5jcmVhdGVX
ZWFrUHRyKCk7CiB9CiAKIHN0YXRpYyBib29sIGxhdGNoZWRUb0ZyYW1lT3JCb2R5KENvbnRhaW5l
ck5vZGUmIGNvbnRhaW5lcikKQEAgLTk1NywyNyArOTQ1LDI1IEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjpjbGVhck9yU2NoZWR1bGVDbGVhcmkKICAgICB9CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpw
bGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdo
ZWVsRXZlbnQsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgUmVmUHRyPEVsZW1lbnQ+JiB3
aGVlbEV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9kZT4mIHNjcm9sbGFibGVDb250YWlu
ZXIsIFNjcm9sbGFibGVBcmVhKiYgc2Nyb2xsYWJsZUFyZWEsIGJvb2wmIGlzT3ZlcldpZGdldCkK
K3ZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybVByZXBhcmVGb3JXaGVlbEV2ZW50cyhjb25zdCBQ
bGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJlc3Vs
dCwgUmVmUHRyPEVsZW1lbnQ+JiB3aGVlbEV2ZW50VGFyZ2V0LCBSZWZQdHI8Q29udGFpbmVyTm9k
ZT4mIHNjcm9sbGFibGVDb250YWluZXIsIFdlYWtQdHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxh
YmxlQXJlYSwgYm9vbCYgaXNPdmVyV2lkZ2V0KQogewogICAgIGNsZWFyT3JTY2hlZHVsZUNsZWFy
aW5nTGF0Y2hlZFN0YXRlSWZOZWVkZWQod2hlZWxFdmVudCk7CiAKICAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBtX2ZyYW1lLnZpZXcoKTsKIAotICAgIHNjcm9sbGFibGVDb250YWluZXIgPSBudWxscHRy
OwotICAgIHNjcm9sbGFibGVBcmVhID0gbnVsbHB0cjsKICAgICBpZiAoIXZpZXcpCiAgICAgICAg
IHNjcm9sbGFibGVDb250YWluZXIgPSB3aGVlbEV2ZW50VGFyZ2V0OwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoZXZlbnRUYXJnZXRJc1BsYXRmb3JtV2lkZ2V0KHdoZWVsRXZlbnRUYXJnZXQuZ2V0
KCkpKSB7CiAgICAgICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gd2hlZWxFdmVudFRhcmdl
dDsKLSAgICAgICAgICAgIHNjcm9sbGFibGVBcmVhID0gc2Nyb2xsVmlld0ZvckV2ZW50VGFyZ2V0
KHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCkpOworICAgICAgICAgICAgc2Nyb2xsYWJsZUFyZWEgPSBz
Y3JvbGxhYmxlQXJlYUZvckV2ZW50VGFyZ2V0KHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCkpOwogICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgc2Nyb2xsYWJsZUNvbnRhaW5lciA9IGZpbmRFbmNs
b3NpbmdTY3JvbGxhYmxlQ29udGFpbmVyKHdoZWVsRXZlbnRUYXJnZXQuZ2V0KCksIHdoZWVsRXZl
bnQuZGVsdGFYKCksIHdoZWVsRXZlbnQuZGVsdGFZKCkpOwogICAgICAgICAgICAgaWYgKHNjcm9s
bGFibGVDb250YWluZXIgJiYgIWlzPEhUTUxJRnJhbWVFbGVtZW50Pih3aGVlbEV2ZW50VGFyZ2V0
LmdldCgpKSkKICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHNjcm9sbGFibGVBcmVh
Rm9yQ29udGFpbmVyTm9kZSgqc2Nyb2xsYWJsZUNvbnRhaW5lcik7CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQ29udGFpbmVyID0gdmlldy0+ZnJhbWUoKS5k
b2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpOwotICAgICAgICAgICAgICAgIHNjcm9sbGFibGVB
cmVhID0gdmlldzsKKyAgICAgICAgICAgICAgICBzY3JvbGxhYmxlQXJlYSA9IHN0YXRpY19jYXN0
PFNjcm9sbGFibGVBcmVhKj4odmlldyktPmNyZWF0ZVdlYWtQdHIoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KQEAgLTk4OSw3ICs5NzUsNyBAQCB2b2lkIEV2ZW50SGFuZGxlcjo6
cGxhdGZvcm1QcmVwYXJlRm9yV2hlCiAgICAgU2Nyb2xsTGF0Y2hpbmdTdGF0ZSogbGF0Y2hpbmdT
dGF0ZSA9IG1fZnJhbWUubWFpbkZyYW1lKCkubGF0Y2hpbmdTdGF0ZSgpOwogICAgIGlmICh3aGVl
bEV2ZW50LnNob3VsZENvbnNpZGVyTGF0Y2hpbmcoKSkgewogICAgICAgICBpZiAoc2Nyb2xsYWJs
ZUNvbnRhaW5lciAmJiBzY3JvbGxhYmxlQXJlYSkgewotICAgICAgICAgICAgYm9vbCBzdGFydGlu
Z0F0U2Nyb2xsTGltaXQgPSBzY3JvbGxlZFRvRWRnZUluRG9taW5hbnREaXJlY3Rpb24oKnNjcm9s
bGFibGVDb250YWluZXIsICpzY3JvbGxhYmxlQXJlYSwgd2hlZWxFdmVudC5kZWx0YVgoKSwgd2hl
ZWxFdmVudC5kZWx0YVkoKSk7CisgICAgICAgICAgICBib29sIHN0YXJ0aW5nQXRTY3JvbGxMaW1p
dCA9IHNjcm9sbGVkVG9FZGdlSW5Eb21pbmFudERpcmVjdGlvbigqc2Nyb2xsYWJsZUNvbnRhaW5l
ciwgKnNjcm9sbGFibGVBcmVhLmdldCgpLCB3aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50
LmRlbHRhWSgpKTsKICAgICAgICAgICAgIGlmICghc3RhcnRpbmdBdFNjcm9sbExpbWl0KSB7CiAg
ICAgICAgICAgICAgICAgbV9mcmFtZS5tYWluRnJhbWUoKS5wdXNoTmV3TGF0Y2hpbmdTdGF0ZSgp
OwogICAgICAgICAgICAgICAgIGxhdGNoaW5nU3RhdGUgPSBtX2ZyYW1lLm1haW5GcmFtZSgpLmxh
dGNoaW5nU3RhdGUoKTsKQEAgLTEwNDcsNyArMTAzMyw3IEBAIHN0YXRpYyBGcmFtZVZpZXcqIGZy
YW1lVmlld0ZvckxhdGNoaW5nU3QKICAgICByZXR1cm4gbGF0Y2hpbmdTdGF0ZS0+ZnJhbWUoKSA/
IGxhdGNoaW5nU3RhdGUtPmZyYW1lKCktPnZpZXcoKSA6IGZyYW1lLnZpZXcoKTsKIH0KIAotYm9v
bCBFdmVudEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3Jt
V2hlZWxFdmVudCYgd2hlZWxFdmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5l
ciwgU2Nyb2xsYWJsZUFyZWEqIHNjcm9sbGFibGVBcmVhKQorYm9vbCBFdmVudEhhbmRsZXI6OnBs
YXRmb3JtQ29tcGxldGVXaGVlbEV2ZW50KGNvbnN0IFBsYXRmb3JtV2hlZWxFdmVudCYgd2hlZWxF
dmVudCwgQ29udGFpbmVyTm9kZSogc2Nyb2xsYWJsZUNvbnRhaW5lciwgV2Vha1B0cjxTY3JvbGxh
YmxlQXJlYT4mIHNjcm9sbGFibGVBcmVhKQogewogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZnJh
bWUudmlldygpOwogICAgIC8vIFdlIGRvIGFub3RoZXIgY2hlY2sgb24gdGhlIGZyYW1lIHZpZXcg
YmVjYXVzZSB0aGUgZXZlbnQgaGFuZGxlciBjYW4gcnVuIEpTIHdoaWNoIHJlc3VsdHMgaW4gdGhl
IGZyYW1lIGdldHRpbmcgZGVzdHJveWVkLgpAQCAtMTA2MCw3ICsxMDQ2LDcgQEAgYm9vbCBFdmVu
dEhhbmRsZXI6OnBsYXRmb3JtQ29tcGxldGVXaGVlbAogICAgICAgICBtX2lzSGFuZGxpbmdXaGVl
bEV2ZW50ID0gZmFsc2U7CiAKICAgICAgICAgLy8gV2ViS2l0MiBjb2RlIHBhdGgKLSAgICAgICAg
aWYgKCFmcmFtZUhhc1BsYXRmb3JtV2lkZ2V0KG1fZnJhbWUpICYmICFsYXRjaGluZ1N0YXRlLT5z
dGFydGVkR2VzdHVyZUF0U2Nyb2xsTGltaXQoKSAmJiBzY3JvbGxhYmxlQ29udGFpbmVyID09IGxh
dGNoaW5nU3RhdGUtPnNjcm9sbGFibGVDb250YWluZXIoKSAmJiBzY3JvbGxhYmxlQXJlYSAmJiB2
aWV3ICE9IHNjcm9sbGFibGVBcmVhKSB7CisgICAgICAgIGlmICghZnJhbWVIYXNQbGF0Zm9ybVdp
ZGdldChtX2ZyYW1lKSAmJiAhbGF0Y2hpbmdTdGF0ZS0+c3RhcnRlZEdlc3R1cmVBdFNjcm9sbExp
bWl0KCkgJiYgc2Nyb2xsYWJsZUNvbnRhaW5lciA9PSBsYXRjaGluZ1N0YXRlLT5zY3JvbGxhYmxl
Q29udGFpbmVyKCkgJiYgc2Nyb2xsYWJsZUFyZWEgJiYgdmlldyAhPSBzY3JvbGxhYmxlQXJlYS5n
ZXQoKSkgewogICAgICAgICAgICAgLy8gSWYgd2UgZGlkIG5vdCBzdGFydCBhdCB0aGUgc2Nyb2xs
IGxpbWl0LCBkbyBub3QgcGFzcyB0aGUgZXZlbnQgb24gdG8gYmUgaGFuZGxlZCBieSBlbmNsb3Np
bmcgc2Nyb2xsYWJsZSByZWdpb25zLgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTEwNzgsNyArMTA2NCw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBs
ZXRlV2hlZWwKICAgICAgICAgfQogCiAgICAgICAgIC8vIElmIHRoZSBwbGF0Zm9ybSB3aWRnZXQg
aXMgaGFuZGxpbmcgdGhlIGV2ZW50LCB3ZSBhbHdheXMgd2FudCB0byByZXR1cm4gZmFsc2UuCi0g
ICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYSA9PSB2aWV3ICYmIHZpZXctPnBsYXRmb3JtV2lkZ2V0
KCkpCisgICAgICAgIGlmIChzY3JvbGxhYmxlQXJlYS5nZXQoKSA9PSB2aWV3ICYmIHZpZXctPnBs
YXRmb3JtV2lkZ2V0KCkpCiAgICAgICAgICAgICBkaWRIYW5kbGVXaGVlbEV2ZW50ID0gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZGlkSGFuZGxlV2hlZWxFdmVudDsKQEAgLTExMDUs
NyArMTA5MSw3IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybUNvbXBsZXRlUGxhdGYKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlmeUlm
RW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFNjcm9sbGFi
bGVBcmVhKiBzY3JvbGxhYmxlQXJlYSkKK3ZvaWQgRXZlbnRIYW5kbGVyOjpwbGF0Zm9ybU5vdGlm
eUlmRW5kR2VzdHVyZShjb25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFdlYWtQ
dHI8U2Nyb2xsYWJsZUFyZWE+JiBzY3JvbGxhYmxlQXJlYSkKIHsKICAgICBpZiAoIXNjcm9sbGFi
bGVBcmVhKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3dpbi9F
dmVudEhhbmRsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvd2lu
L0V2ZW50SGFuZGxlcldpbi5jcHAJKHJldmlzaW9uIDE5OTI4OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvd2luL0V2ZW50SGFuZGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzcz
LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NNb3VzZVJlbGVhc2VFdmVudAogICAgIHJldHVy
biB0cnVlOwogfQogCi1ib29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChj
b25zdCBQbGF0Zm9ybVdoZWVsRXZlbnQmIHdoZWVsRXZlbnQsIFdpZGdldCYgd2lkZ2V0KQorYm9v
bCBFdmVudEhhbmRsZXI6OndpZGdldERpZEhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1X
aGVlbEV2ZW50JiB3aGVlbEV2ZW50LCBXaWRnZXQmIHdpZGdldCkKIHsKICAgICBpZiAoIWlzPEZy
YW1lVmlldz4od2lkZ2V0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Njcm9sbGFibGVBcmVhLmNwcAkocmV2aXNpb24gMTk5Mjg4KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00OCwxMCArNDgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IFNhbWVTaXpl
QXNTY3JvbGxhYmxlQXJlYSB7CiAgICAgdmlydHVhbCB+U2FtZVNpemVBc1Njcm9sbGFibGVBcmVh
KCk7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICB2b2lkKiBwb2ludGVyc1szXTsK
KyAgICB2b2lkKiBwb2ludGVyc1s0XTsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kaWNlc1syXTsK
ICNlbHNlCi0gICAgdm9pZCogcG9pbnRlcjsKKyAgICB2b2lkKiBwb2ludGVyWzJdOwogI2VuZGlm
CiAgICAgSW50UG9pbnQgb3JpZ2luOwogICAgIHVuc2lnbmVkIGJpdGZpZWxkcyA6IDE2OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsYWJsZUFyZWEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCShyZXZpc2lvbiAxOTky
ODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TY3JvbGxhYmxlQXJlYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMSwg
MjAxNC0yMDE1IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwOC0yMDE2IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiU2Nyb2xs
YmFyLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsNiArNjQsOCBAQCBwdWJsaWM6CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBib29sIGhhbmRsZVdoZWVsRXZlbnQoY29uc3QgUGxhdGZvcm1XaGVl
bEV2ZW50Jik7CiAKKyAgICBXZWFrUHRyPFNjcm9sbGFibGVBcmVhPiBjcmVhdGVXZWFrUHRyKCkg
eyByZXR1cm4gbV93ZWFrUHRyRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KKwogI2lmIEVOQUJM
RShDU1NfU0NST0xMX1NOQVApCiAgICAgY29uc3QgVmVjdG9yPExheW91dFVuaXQ+KiBob3Jpem9u
dGFsU25hcE9mZnNldHMoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxTbmFwT2Zmc2V0cy5n
ZXQoKTsgfTsKICAgICBjb25zdCBWZWN0b3I8TGF5b3V0VW5pdD4qIHZlcnRpY2FsU25hcE9mZnNl
dHMoKSBjb25zdCB7IHJldHVybiBtX3ZlcnRpY2FsU25hcE9mZnNldHMuZ2V0KCk7IH07CkBAIC0z
NDksNiArMzUyLDggQEAgcHJpdmF0ZToKIAogICAgIG11dGFibGUgc3RkOjp1bmlxdWVfcHRyPFNj
cm9sbEFuaW1hdG9yPiBtX3Njcm9sbEFuaW1hdG9yOwogCisgICAgV2Vha1B0ckZhY3Rvcnk8U2Ny
b2xsYWJsZUFyZWE+IG1fd2Vha1B0ckZhY3RvcnkgeyB0aGlzIH07CisKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8TGF5b3V0VW5pdD4+IG1f
aG9yaXpvbnRhbFNuYXBPZmZzZXRzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8TGF5b3V0
VW5pdD4+IG1fdmVydGljYWxTbmFwT2Zmc2V0czsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdl
dC5oCShyZXZpc2lvbiAxOTkyODgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQ29sbGFib3JhIEx0ZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2FzdHMu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5j
bHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtMTkxLDYgKzE5Miw4IEBAIHB1YmxpYzoKICAgICBX
RUJDT1JFX0VYUE9SVCB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdWaWV3KGNv
bnN0IEludFBvaW50JikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRQb2lu
dCBjb252ZXJ0RnJvbUNvbnRhaW5pbmdWaWV3KGNvbnN0IEludFBvaW50JikgY29uc3Q7CiAKKyAg
ICBXZWFrUHRyPFdpZGdldD4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha1B0ckZhY3Rv
cnkuY3JlYXRlV2Vha1B0cigpOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBpbml0KFBsYXRmb3Jt
V2lkZ2V0KTsgLy8gTXVzdCBiZSBjYWxsZWQgYnkgYWxsIFdpZGdldCBjb25zdHJ1Y3RvcnMgdG8g
aW5pdGlhbGl6ZSBjcm9zcy1wbGF0Zm9ybSBkYXRhLgogCkBAIC0yMTIsNiArMjE1LDcgQEAgcHJp
dmF0ZToKICNlbHNlCiAgICAgUmV0YWluUHRyPE5TVmlldz4gbV93aWRnZXQ7CiAjZW5kaWYKKyAg
ICBXZWFrUHRyRmFjdG9yeTxXaWRnZXQ+IG1fd2Vha1B0ckZhY3RvcnkgeyB0aGlzIH07CiAgICAg
Ym9vbCBtX3NlbGZWaXNpYmxlOwogICAgIGJvb2wgbV9wYXJlbnRWaXNpYmxlOwogCkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTkyODgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wNC0xMCAgQnJlbnQgRnVsZ2hhbSAgPGJmdWxnaGFt
QGFwcGxlLmNvbT4KKworICAgICAgICBVc2UgV2Vha1B0cnMgdG8gYXZvaWQgdXNpbmcgZGVhbGxv
Y2F0ZWQgV2lkZ2V0cyBhbmQgU2Nyb2xsYWJsZUFyZWFzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTY0MjAKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVt
LzI1NjM3Mzc4PgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAg
ICogZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVy
Zmxvdy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3Mtc2ltdWxhdG9yL1Rlc3RF
eHBlY3RhdGlvbnM6IFNraXAgd2hlZWwtZXZlbnQgdGVzdCBvbiBpT1MuCisKIDIwMTYtMDQtMDkg
IENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHIxOTkyNjguCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50
cy93aGVlbC1ldmVudC1kZXN0cm95cy1vdmVyZmxvdy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ct
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hl
ZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3ctZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jhc2guCisKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9ldmVudHMvd2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3cuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2V2ZW50cy93aGVlbC1ldmVudC1kZXN0cm95
cy1vdmVyZmxvdy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9ldmVudHMv
d2hlZWwtZXZlbnQtZGVzdHJveXMtb3ZlcmZsb3cuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdD4K
KyAgICAgICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgeworICAgICAgICAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG9uTG9hZCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBkaXZUYXJnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7
CisgICAgICAgICAgICB2YXIgZGl2VGFyZ2V0Qm91bmRzID0gZGl2VGFyZ2V0LmdldEJvdW5kaW5n
Q2xpZW50UmVjdCgpOworCisgICAgICAgICAgICBkaXZUYXJnZXQuYWRkRXZlbnRMaXN0ZW5lcign
d2hlZWwnLCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZGl2
IGR1cmluZyBldmVudCBmaXJpbmcgY2F1c2VzIGNyYXNoLgorICAgICAgICAgICAgICAgIGlmIChk
aXZUYXJnZXQucGFyZW50Tm9kZSkKKyAgICAgICAgICAgICAgICAgICAgZGl2VGFyZ2V0LnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoZGl2VGFyZ2V0KTsKKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgICAgICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7
CisgICAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg
aWYgKCF3aW5kb3cuZXZlbnRTZW5kZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyhkaXZUYXJnZXRCb3VuZHMubGVmdCArIDEw
LCBkaXZUYXJnZXRCb3VuZHMudG9wICsgMTApOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91
c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1vbWVudHVtUGhhc2VzKDAsIC0xLCAnYmVnYW4nLCAnbm9u
ZScpOworICAgICAgICAgICAgZXZlbnRTZW5kZXIubW91c2VTY3JvbGxCeVdpdGhXaGVlbEFuZE1v
bWVudHVtUGhhc2VzKDAsIC0xLCAnY2hhbmdlZCcsICdub25lJyk7CisgICAgICAgICAgICBldmVu
dFNlbmRlci5tb3VzZVNjcm9sbEJ5V2l0aFdoZWVsQW5kTW9tZW50dW1QaGFzZXMoMCwgLTEsICdj
aGFuZ2VkJywgJ25vbmUnKTsKKyAgICAgICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlU2Nyb2xsQnlX
aXRoV2hlZWxBbmRNb21lbnR1bVBoYXNlcygwLCAwLCAnZW5kZWQnLCAnbm9uZScpOworICAgICAg
ICB9CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpOyI+Cisg
ICAgPHA+VGhpcyB0ZXN0IHNob3VsZCBub3QgY3Jhc2guPHA+CisgICAgPGRpdiBpZD0icGFyZW50
IiBzdHlsZT0iaGVpZ2h0OiAyMDAwcHg7IHdpZHRoOiAyMDAwcHg7Ij4KKyAgICAgICAgPGRpdiBp
ZD0iaG9sZGVyIiBjbGFzcz0ic2Nyb2xsYWJsZV9yZWdpb24iIj4KKyAgICAgICAgICAgIDxkaXYg
aWQ9InRhcmdldCIgc3R5bGU9J292ZXJmbG93LXk6IGF1dG87IG92ZXJmbG93LXg6IGhpZGRlbjsg
bWF4LWhlaWdodDogMzUwcHg7Jz4KKyAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSdoZWlnaHQ6
MTAwMHB4Jz5XaGVlbCBIZXJlLjwvZGl2PgorICAgICAgICAgICAgPC9kaXY+CisgICAgICAgIDwv
ZGl2PgorICAgIDwvZGl2PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vaW9zLXNpbXVsYXRvci9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL3BsYXRmb3JtL2lvcy1zaW11bGF0b3IvVGVzdEV4cGVjdGF0aW9ucwkocmV2aXNpb24g
MTk5Mjg4KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zLXNpbXVsYXRvci9UZXN0RXhwZWN0
YXRpb25zCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw3IEBAIGZhc3QvaGlzdG9yeS9wYWdl
LWNhY2hlLXN1c3BlbmRlZC1hdWRpb2MKIGZhc3Qvc2Nyb2xsaW5nL2lmcmFtZS1zY3JvbGxhYmxl
LWFmdGVyLWJhY2suaHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvb3ZlcmZsb3ctc2Nyb2xs
YWJsZS1hZnRlci1iYWNrLmh0bWwgWyBTa2lwIF0KIGZhc3QvZXZlbnRzL3doZWVsLWV2ZW50LWRl
c3Ryb3lzLWZyYW1lLmh0bWwgWyBTa2lwIF0KK2Zhc3QvZXZlbnRzL3doZWVsLWV2ZW50LWRlc3Ry
b3lzLW92ZXJmbG93Lmh0bWwgWyBTa2lwIF0KIAogIyBOb3Qgc3VwcG9ydGVkIG9uIGlPUwogYmF0
dGVyeXN0YXR1cwo=
</data>
<flag name="review"
          id="300434"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>