<?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>122313</bug_id>
          
          <creation_ts>2013-10-03 21:03:01 -0700</creation_ts>
          <short_desc>FocusController::advanceFocus spends a lot of time in HTMLMapElement::imageElement</short_desc>
          <delta_ts>2013-10-07 09:55:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>psolanki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>936089</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-03 21:03:01 -0700</bug_when>
    <thetext>On a web page with lots of map/area elements, we end up spending a lot of time inside HTMLMapElement::imageElement because the HTMLCollection used to traverse through image elements isn&apos;t cached, resulting in O(n^2) time complexity.

Running Time	Self		Symbol Name
7711.0ms  100.0%	0.0	 	                      WebKit::handleKeyEvent(WebKit::WebKeyboardEvent const&amp;, WebCore::Page*)
7711.0ms  100.0%	0.0	 	                       WebCore::EventHandler::keyEvent(WebCore::PlatformKeyboardEvent const&amp;)
7711.0ms  100.0%	0.0	 	                        WebCore::EventTarget::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;, int&amp;)
7711.0ms  100.0%	0.0	 	                         WebCore::Node::dispatchEvent(WTF::PassRefPtr&lt;WebCore::Event&gt;)
7711.0ms  100.0%	0.0	 	                          WebCore::EventDispatcher::dispatchEvent(WebCore::Node*, WTF::PassRefPtr&lt;WebCore::EventDispatchMediator&gt;)
7711.0ms  100.0%	0.0	 	                           WebCore::EventDispatchMediator::dispatchEvent(WebCore::EventDispatcher*) const
7711.0ms  100.0%	0.0	 	                            WebCore::EventDispatcher::dispatch()
7711.0ms  100.0%	0.0	 	                             WebCore::EventDispatcher::dispatchEventPostProcess(void*)
7711.0ms  100.0%	0.0	 	                              WebCore::HTMLInputElement::defaultEventHandler(WebCore::Event*)
7711.0ms  100.0%	0.0	 	                               WebCore::Node::defaultEventHandler(WebCore::Event*)
7711.0ms  100.0%	0.0	 	                                WebCore::EventHandler::defaultKeyboardEventHandler(WebCore::KeyboardEvent*)
7711.0ms  100.0%	0.0	 	                                 WebCore::FocusController::advanceFocus(WebCore::FocusDirection, WebCore::KeyboardEvent*, bool)
7711.0ms  100.0%	0.0	 	                                  WebCore::FocusController::advanceFocusInDocumentOrder(WebCore::FocusDirection, WebCore::KeyboardEvent*, bool)
7711.0ms  100.0%	0.0	 	                                   WebCore::FocusController::findFocusableElementAcrossFocusScope(WebCore::FocusDirection, WebCore::FocusNavigationScope, WebCore::Node*, WebCore::KeyboardEvent*)
7711.0ms  100.0%	0.0	 	                                    WebCore::FocusController::findFocusableElementRecursively(WebCore::FocusDirection, WebCore::FocusNavigationScope, WebCore::Node*, WebCore::KeyboardEvent*)
7711.0ms  100.0%	0.0	 	                                     WebCore::FocusController::nextFocusableElement(WebCore::FocusNavigationScope, WebCore::Node*, WebCore::KeyboardEvent*)
7711.0ms  100.0%	0.0	 	                                      WebCore::FocusController::findElementWithExactTabIndex(WebCore::Node*, int, WebCore::KeyboardEvent*, WebCore::FocusDirection)
7711.0ms  100.0%	0.0	 	                                       WebCore::HTMLAreaElement::isKeyboardFocusable(WebCore::KeyboardEvent*) const
7711.0ms  100.0%	1.0	 	                                        WebCore::HTMLAreaElement::isFocusable() const
7710.0ms   99.9%	0.0	 	                                         WebCore::HTMLMapElement::imageElement()
7683.0ms   99.6%	0.0	 	                                          WebCore::LiveNodeListBase::item(unsigned int) const

&lt;rdar://problem/14920728&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936092</commentid>
    <comment_count>1</comment_count>
      <attachid>213329</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-03 21:04:01 -0700</bug_when>
    <thetext>Created attachment 213329
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936111</commentid>
    <comment_count>2</comment_count>
      <attachid>213335</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-03 22:20:24 -0700</bug_when>
    <thetext>Created attachment 213335
Fixes the bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936120</commentid>
    <comment_count>3</comment_count>
      <attachid>213335</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-10-04 00:10:59 -0700</bug_when>
    <thetext>Comment on attachment 213335
Fixes the bug

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

r=me with some improvements.

&gt; Source/WebCore/dom/Document.h:262
&gt; +    void addImageElementByLowercasedUsemap(const AtomicString&amp;, HTMLImageElement*);
&gt; +    void removeImageElementByLowercasedUsemap(const AtomicString&amp;, HTMLImageElement*);

HTMLImageElement* -&gt; HTMLImageElement&amp; since these don&apos;t accept null.

&gt; Source/WebCore/html/HTMLImageElement.cpp:139
&gt; +        const AtomicString&amp; usemap = fastGetAttribute(HTMLNames::usemapAttr);

You already have the usemap attribute in the &quot;value&quot; argument variable here, no need to search for it.

&gt; Source/WebCore/html/HTMLImageElement.cpp:141
&gt; +            m_lowercasedUsemap = usemap.string().substring(1).lower().impl();

Is the .impl() really needed?

&gt; Source/WebCore/html/HTMLImageElement.cpp:324
&gt; +    ASSERT(const_cast&lt;AtomicStringImpl*&gt;(&amp;name)-&gt;lower() == &amp;name);

This would look ~1% nicer as:
ASSERT(const_cast&lt;AtomicStringImpl&amp;&gt;(name).lower() == &amp;name);

&gt; Source/WebCore/html/HTMLMapElement.cpp:82
&gt; +    return document().imageElementByUsemap(m_name.lower());

You could make this even faster by caching a lowercase version of the map&apos;s name in a member variable.
I don&apos;t know what your test case is, so I don&apos;t know if it&apos;d be worth much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936421</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 16:32:07 -0700</bug_when>
    <thetext>Committed r156925: &lt;http://trac.webkit.org/changeset/156925&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936530</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-04 23:54:25 -0700</bug_when>
    <thetext>Fixed intermittent assertion failures reported by ap in http://trac.webkit.org/changeset/156950.

e.g.
http://build.webkit.org/results/Apple%20Lion%20Debug%20WK2%20(Tests)/r156929%20(11902)/fast/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map-crash-log.txt

CRASHING TEST: fast/images/imagemap-dynamic-area-updates.html

Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x00000001077f9a6a WTFCrash + 42 (Assertions.cpp:342)
1   com.apple.WebCore             	0x0000000108b7d2ba WebCore::Element* WebCore::DocumentOrderedMap::get&lt;&amp;(WebCore::keyMatchesLowercasedUsemap(WTF::AtomicStringImpl const*, WebCore::Element*))&gt;(WTF::AtomicStringImpl const*, WebCore::TreeScope const*) const + 554 (DocumentOrderedMap.cpp:155)
2   com.apple.WebCore             	0x0000000108b7c105 WebCore::DocumentOrderedMap::getElementByLowercasedUsemap(WTF::AtomicStringImpl const*, WebCore::TreeScope const*) const + 37 (DocumentOrderedMap.cpp:181)
3   com.apple.WebCore             	0x0000000108b195e1 WebCore::Document::imageElementByLowercasedUsemap(WTF::AtomicString const&amp;) const + 81 (Document.cpp:722)
4   com.apple.WebCore             	0x0000000108f85ff7 WebCore::HTMLMapElement::imageElement() + 71 (HTMLMapElement.cpp:82)
5   com.apple.WebCore             	0x0000000108f029b6 WebCore::HTMLAreaElement::imageElement() const + 86 (HTMLAreaElement.cpp:190)
6   com.apple.WebCore             	0x0000000108f02a19 WebCore::HTMLAreaElement::isFocusable() const + 25 (HTMLAreaElement.cpp:205)
7   com.apple.WebCore             	0x0000000108b17393 WebCore::Document::resetHiddenFocusElementTimer(WebCore::Timer&lt;WebCore::Document&gt;*) + 147 (Document.cpp:4731)
8   com.apple.WebCore             	0x0000000108b54cb3 WebCore::Timer&lt;WebCore::Document&gt;::fired() + 115 (Timer.h:114)
9   com.apple.WebCore             	0x0000000109f6f4e3 WebCore::ThreadTimers::sharedTimerFiredInternal() + 307 (ThreadTimers.cpp:132)
10  com.apple.WebCore             	0x0000000109f6f1f9 WebCore::ThreadTimers::sharedTimerFired() + 25 (ThreadTimers.cpp:106)
11  com.apple.WebCore             	0x0000000109d0da73 _ZN7WebCoreL10timerFiredEP16__CFRunLoopTimerPv + 67 (SharedTimerMac.mm:134)
12  com.apple.CoreFoundation      	0x00007fff8dc0c934 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
13  com.apple.CoreFoundation      	0x00007fff8dc0c486 __CFRunLoopDoTimer + 534
14  com.apple.CoreFoundation      	0x00007fff8dbece11 __CFRunLoopRun + 1617
15  com.apple.CoreFoundation      	0x00007fff8dbec486 CFRunLoopRunSpecific + 230
16  com.apple.HIToolbox           	0x00007fff988f82bf RunCurrentEventLoopInMode + 277
17  com.apple.HIToolbox           	0x00007fff988ff56d ReceiveNextEventCommon + 355
18  com.apple.HIToolbox           	0x00007fff988ff3fa BlockUntilNextEventMatchingListInMode + 62
19  com.apple.AppKit              	0x00007fff8c450779 _DPSNextEvent + 659
20  com.apple.AppKit              	0x00007fff8c45007d -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 135
21  com.apple.AppKit              	0x00007fff8c44c9b9 -[NSApplication run] + 470
22  com.apple.WebCore             	0x0000000109c5a9b2 WebCore::RunLoop::run() + 114 (RunLoopMac.mm:44)
23  com.apple.WebKit2             	0x0000000105cc12bc int WebKit::ChildProcessMain&lt;WebKit::WebProcess, WebKit::WebContentProcessMainDelegate&gt;(int, char**) + 604 (ChildProcessEntryPoint.h:92)
24  com.apple.WebKit2             	0x0000000105cc104b WebContentProcessMain + 27 (WebContentProcessMain.mm:179)
25  com.apple.WebProcess          	0x0000000105980acd _ZN6WebKitL13BootstrapMainEiPPc + 381
26  com.apple.WebProcess          	0x0000000105980942 main + 34
27  com.apple.WebProcess          	0x0000000105980914 start + 52</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936579</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-05 08:54:43 -0700</bug_when>
    <thetext>Looks like the follow-up fix broke a test on perfbot. It&apos;s quite surprising, but it already failed three times in a row after this commit.

Running Bindings/typed-array-construct-from-same-type.html (20 of 115)
error: Bindings/typed-array-construct-from-same-type.html
2013-10-05 05:24:44.800 DumpRenderTree[15052:707] CoreText CopyPropertiesForFontsMatchingRequest received mig IPC error (FFFFFFFFFFFFFECC) from font server
FAILED
Finished: 9.988322 s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>936603</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-10-05 10:38:37 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Looks like the follow-up fix broke a test on perfbot. It&apos;s quite surprising, but it already failed three times in a row after this commit.
&gt; 
&gt; Running Bindings/typed-array-construct-from-same-type.html (20 of 115)
&gt; error: Bindings/typed-array-construct-from-same-type.html
&gt; 2013-10-05 05:24:44.800 DumpRenderTree[15052:707] CoreText CopyPropertiesForFontsMatchingRequest received mig IPC error (FFFFFFFFFFFFFECC) from font server
&gt; FAILED
&gt; Finished: 9.988322 s

On which bot are you seeing this failure?

http://build.webkit.org/waterfall?show=Apple%20Lion%20Release%20%28Perf%29&amp;show=Apple%20MountainLion%20Release%20%28Perf%29

looks green.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>937106</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-10-07 09:55:42 -0700</bug_when>
    <thetext>I must have been confused. I no longer see that happening repeatedly.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213329</attachid>
            <date>2013-10-03 21:04:01 -0700</date>
            <delta_ts>2013-10-03 22:20:21 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>wip122313</filename>
            <type>text/plain</type>
            <size>9709</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTU2ODI5KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBA
QAogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIZWFk
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rpb24uaCIKQEAg
LTcwNiw2ICs3MDcsMjEgQEAKICAgICBtX2VsZW1lbnRzQnlBY2Nlc3NLZXkuY2xlYXIoKTsKIH0K
IAordm9pZCBEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBy
ZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5hZGQobmFtZS5pbXBsKCksIGVsZW1lbnQpOworfQorCit2
b2lkIERvY3VtZW50OjpyZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJl
dHVybiBtX2ltYWdlc0J5VXNlbWFwLnJlbW92ZShuYW1lLmltcGwoKSwgZWxlbWVudCk7Cit9CisK
K0hUTUxJbWFnZUVsZW1lbnQqIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeVVzZW1hcChjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAu
Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChuYW1lLmltcGwoKSwgdGhpcyk7Cit9CisKIFNl
bGVjdG9yUXVlcnlDYWNoZSYgRG9jdW1lbnQ6OnNlbGVjdG9yUXVlcnlDYWNoZSgpCiB7CiAgICAg
aWYgKCFtX3NlbGVjdG9yUXVlcnlDYWNoZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZp
c2lvbiAxNTY4MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBACiBjbGFzcyBIVE1MRnJhbWVPd25lckVsZW1lbnQ7CiBj
bGFzcyBIVE1MSGVhZEVsZW1lbnQ7CiBjbGFzcyBIVE1MSUZyYW1lRWxlbWVudDsKK2NsYXNzIEhU
TUxJbWFnZUVsZW1lbnQ7CiBjbGFzcyBIVE1MTWFwRWxlbWVudDsKIGNsYXNzIEhUTUxOYW1lQ29s
bGVjdGlvbjsKIGNsYXNzIEhUTUxTY3JpcHRFbGVtZW50OwpAQCAtMjU3LDYgKzI1OCwxMCBAQAog
ICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUFjY2Vzc0tleShjb25zdCBTdHJpbmcmIGtleSk7CiAg
ICAgdm9pZCBpbnZhbGlkYXRlQWNjZXNzS2V5TWFwKCk7CiAKKyAgICB2b2lkIGFkZEltYWdlRWxl
bWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmcmLCBIVE1MSW1hZ2VFbGVt
ZW50Kik7CisgICAgdm9pZCByZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29u
c3QgQXRvbWljU3RyaW5nJiwgSFRNTEltYWdlRWxlbWVudCopOworICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGltYWdlRWxlbWVudEJ5VXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZyYpIGNvbnN0OworCiAg
ICAgU2VsZWN0b3JRdWVyeUNhY2hlJiBzZWxlY3RvclF1ZXJ5Q2FjaGUoKTsKIAogICAgIC8vIERP
TSBtZXRob2RzICYgYXR0cmlidXRlcyBmb3IgRG9jdW1lbnQKQEAgLTE0NTAsNiArMTQ1NSw4IEBA
CiAgICAgSGFzaE1hcDxTdHJpbmdJbXBsKiwgRWxlbWVudCosIENhc2VGb2xkaW5nSGFzaD4gbV9l
bGVtZW50c0J5QWNjZXNzS2V5OwogICAgIGJvb2wgbV9hY2Nlc3NLZXlNYXBWYWxpZDsKIAorICAg
IERvY3VtZW50T3JkZXJlZE1hcCBtX2ltYWdlc0J5VXNlbWFwOworCiAgICAgT3duUHRyPFNlbGVj
dG9yUXVlcnlDYWNoZT4gbV9zZWxlY3RvclF1ZXJ5Q2FjaGU7CiAKICAgICBEb2N1bWVudENsYXNz
RmxhZ3MgbV9kb2N1bWVudENsYXNzZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRPcmRlcmVkTWFwLmNwcAkocmV2aXNpb24gMTU2ODI5KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50T3JkZXJlZE1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
IAogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFbGVtZW50VHJhdmVyc2FsLmgiCisj
aW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxMYWJlbEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTWFwRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lQ29sbGVj
dGlvbi5oIgpAQCAtNjMsNiArNjQsMTIgQEAKICAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChl
bGVtZW50KSAmJiB0b0hUTUxNYXBFbGVtZW50KGVsZW1lbnQpLT5nZXROYW1lKCkubG93ZXIoKS5p
bXBsKCkgPT0ga2V5OwogfQogCitpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJjYXNlZFVzZW1h
cChjb25zdCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
Ly8gRklYTUU6IEhUTUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgbWF0Y2ggYm90aCBp
bWFnZSBhbmQgb2JqZWN0IGVsZW1lbnRzLgorICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQo
ZWxlbWVudCkgJiYgdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpLT5tYXRjaGVzTG93ZXJjYXNl
ZFVzZW1hcCgqa2V5KTsKK30KKwogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmli
dXRlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKICAg
ICByZXR1cm4gaXNIVE1MTGFiZWxFbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0ga2V5OwpAQCAtMTY0LDYgKzE3MSwxMSBAQAogICAgIHJl
dHVybiBnZXQ8a2V5TWF0Y2hlc01hcE5hbWU+KGtleSwgc2NvcGUpOwogfQogCitIVE1MSW1hZ2VF
bGVtZW50KiBEb2N1bWVudE9yZGVyZWRNYXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAo
Y29uc3QgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBjb25z
dAoreworICAgIHJldHVybiB0b0hUTUxJbWFnZUVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMb3dlcmNh
c2VkVXNlbWFwPihrZXksIHNjb3BlKSk7Cit9CisKIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1h
cDo6Z2V0RWxlbWVudEJ5TG93ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCog
a2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBjb25zdAogewogICAgIHJldHVybiBnZXQ8a2V5
TWF0Y2hlc0xvd2VyY2FzZWRNYXBOYW1lPihrZXksIHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmgJKHJldmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRN
TEltYWdlRWxlbWVudDsKIGNsYXNzIFRyZWVTY29wZTsKIAogY2xhc3MgRG9jdW1lbnRPcmRlcmVk
TWFwIHsKQEAgLTU1LDYgKzU2LDcgQEAKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlJZChjb25z
dCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CiAgICAgRWxlbWVu
dCogZ2V0RWxlbWVudEJ5TmFtZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNj
b3BlKikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TWFwTmFtZShjb25zdCBBdG9t
aWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CisgICAgSFRNTEltYWdlRWxl
bWVudCogZ2V0RWxlbWVudEJ5TG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBs
KiwgY29uc3QgVHJlZVNjb3BlKikgY29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5TG93
ZXJjYXNlZE1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSop
IGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxhYmVsRm9yQXR0cmlidXRlKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlXaW5kb3dOYW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nSW1wbCosIGNv
bnN0IFRyZWVTY29wZSopIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTY4MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMsOSArMTIzLDI1IEBACiAg
ICAgfSBlbHNlIGlmIChuYW1lID09IHNyY0F0dHIgfHwgbmFtZSA9PSBzcmNzZXRBdHRyKSB7CiAg
ICAgICAgIG1fYmVzdEZpdEltYWdlVVJMID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRl
cyhkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0
ciksIGZhc3RHZXRBdHRyaWJ1dGUoc3Jjc2V0QXR0cikpOwogICAgICAgICBtX2ltYWdlTG9hZGVy
LnVwZGF0ZUZyb21FbGVtZW50SWdub3JpbmdQcmV2aW91c0Vycm9yKCk7Ci0gICAgfSBlbHNlIGlm
IChuYW1lID09IHVzZW1hcEF0dHIpCisgICAgfSBlbHNlIGlmIChuYW1lID09IHVzZW1hcEF0dHIp
IHsKICAgICAgICAgc2V0SXNMaW5rKCF2YWx1ZS5pc051bGwoKSAmJiAhc2hvdWxkUHJvaGliaXRM
aW5rcyh0aGlzKSk7Ci0gICAgZWxzZSBpZiAobmFtZSA9PSBvbmJlZm9yZWxvYWRBdHRyKQorCisg
ICAgICAgIGlmICghbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgZG9j
dW1lbnQoKS5yZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAobV9sb3dlcmNhc2Vk
VXNlbWFwLCB0aGlzKTsKKworICAgICAgICAvLyBUaGUgSFRNTEltYWdlRWxlbWVudCdzIHVzZU1h
cCgpIHZhbHVlIGluY2x1ZGVzIHRoZSAnIycgc3ltYm9sIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNo
IGhhcyB0byBiZSBzdHJpcHBlZCBvZmYuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hl
Y2sgdGhhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzICcjJy4KKyAgICAgICAgLy8gRklYTUU6IEhU
TUw1IHNwZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5n
IGJlZm9yZSAnIycuCisgICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMg
d2Ugc2hvdWxkIGlnbm9yZSB1c2VtYXAgYXR0cmlidXRlcyB3aXRob3V0ICMuCisgICAgICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdXNlbWFwID0gZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnVz
ZW1hcEF0dHIpOworICAgICAgICBpZiAodXNlbWFwLmxlbmd0aCgpID4gMSkKKyAgICAgICAgICAg
IG1fbG93ZXJjYXNlZFVzZW1hcCA9IHVzZW1hcC5zdHJpbmcoKS5zdWJzdHJpbmcoMSkubG93ZXIo
KS5pbXBsKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG93ZXJjYXNlZFVzZW1hcCA9
IG51bGxBdG9tOworCisgICAgICAgIGlmICghbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQor
ICAgICAgICAgICAgZG9jdW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAo
bV9sb3dlcmNhc2VkVXNlbWFwLCB0aGlzKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb25iZWZv
cmVsb2FkQXR0cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuYmVmb3JlbG9hZEV2ZW50LCBuYW1lLCB2YWx1ZSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBj
b21wb3NpdGVBdHRyKSB7CiAgICAgICAgIC8vIEZJWE1FOiBpbWFnZXMgZG9uJ3Qgc3VwcG9ydCBi
bGVuZCBtb2RlcyBpbiB0aGVpciBjb21wb3NpdGluZyBhdHRyaWJ1dGUuCkBAIC0yMDYsNiArMjIy
LDkgQEAKICAgICAgICAgICAgIG1fZm9ybS0+cmVnaXN0ZXJJbWdFbGVtZW50KHRoaXMpOwogICAg
IH0KIAorICAgIGlmIChpbnNlcnRpb25Qb2ludC0+aW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2Fz
ZWRVc2VtYXAuaXNOdWxsKCkpCisgICAgICAgIGRvY3VtZW50KCkuYWRkSW1hZ2VFbGVtZW50QnlM
b3dlcmNhc2VkVXNlbWFwKG1fbG93ZXJjYXNlZFVzZW1hcCwgdGhpcyk7CisKICAgICAvLyBJZiB3
ZSBoYXZlIGJlZW4gaW5zZXJ0ZWQgZnJvbSBhIHJlbmRlcmVyLWxlc3MgZG9jdW1lbnQsCiAgICAg
Ly8gb3VyIGxvYWRlciBtYXkgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgaW1hZ2UsIHNvIGRvIGl0IG5v
dy4KICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiAhbV9pbWFnZUxvYWRl
ci5pbWFnZSgpKQpAQCAtMjE4LDYgKzIzNywxMCBAQAogewogICAgIGlmIChtX2Zvcm0pCiAgICAg
ICAgIG1fZm9ybS0+cmVtb3ZlSW1nRWxlbWVudCh0aGlzKTsKKworICAgIGlmIChpbnNlcnRpb25Q
b2ludC0+aW5Eb2N1bWVudCgpICYmICFtX2xvd2VyY2FzZWRVc2VtYXAuaXNOdWxsKCkpCisgICAg
ICAgIGRvY3VtZW50KCkucmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKG1fbG93
ZXJjYXNlZFVzZW1hcCwgdGhpcyk7CisKICAgICBtX2Zvcm0gPSAwOwogICAgIEhUTUxFbGVtZW50
OjpyZW1vdmVkRnJvbShpbnNlcnRpb25Qb2ludCk7CiB9CkBAIC0yOTMsNiArMzE2LDEyIEBACiAg
ICAgICAgIHx8IEhUTUxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiti
b29sIEhUTUxJbWFnZUVsZW1lbnQ6Om1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNvbnN0X2Nhc3Q8QXRvbWlj
U3RyaW5nSW1wbCo+KCZuYW1lKS0+bG93ZXIoKSA9PSAmbmFtZSk7CisgICAgcmV0dXJuIG1fbG93
ZXJjYXNlZFVzZW1hcC5pbXBsKCkgPT0gJm5hbWU7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYg
SFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGFsdEF0dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJl
dmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBACiAKICAgICB2b2lkIHNldExvYWRNYW51
YWxseShib29sIGxvYWRNYW51YWxseSkgeyBtX2ltYWdlTG9hZGVyLnNldExvYWRNYW51YWxseShs
b2FkTWFudWFsbHkpOyB9CiAKKyAgICBib29sIG1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwmKSBjb25zdDsKKwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWx0
KCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEhlaWdodChpbnQpOwpAQCAtMTAyLDYgKzEwNCw4IEBA
CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29u
c3QgT1ZFUlJJREU7CiAKKyAgICBib29sIGhhc1ZhbGlkVXNlbWFwKCkgY29uc3Q7CisKICAgICB2
aXJ0dWFsIGJvb2wgZHJhZ2dhYmxlKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIHZvaWQgYWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mKSBjb25zdDsKQEAgLTExNyw2
ICsxMjEsNyBAQAogICAgIEhUTUxGb3JtRWxlbWVudCogbV9mb3JtOwogICAgIENvbXBvc2l0ZU9w
ZXJhdG9yIG1fY29tcG9zaXRlT3BlcmF0b3I7CiAgICAgQXRvbWljU3RyaW5nIG1fYmVzdEZpdElt
YWdlVVJMOworICAgIEF0b21pY1N0cmluZyBtX2xvd2VyY2FzZWRVc2VtYXA7CiB9OwogCiBFTEVN
RU5UX1RZUEVfQ0FTVFMoSFRNTEltYWdlRWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTY4MjkpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksMjAgKzc5LDcgQEAK
IAogSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgpCiB7Ci0g
ICAgUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBkb2N1bWVudCgpLmltYWdlcygpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IE5vZGUqIGN1cnIgPSBpbWFnZXMtPml0ZW0oaSk7IGkr
KykgewotICAgICAgICBpZiAoIWlzSFRNTEltYWdlRWxlbWVudChjdXJyKSkKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIEhUTUxJbWFnZUVsZW1lbnQncyB1
c2VNYXAoKSB2YWx1ZSBpbmNsdWRlcyB0aGUgJyMnIHN5bWJvbCBhdCB0aGUgYmVnaW5uaW5nLAot
ICAgICAgICAvLyB3aGljaCBoYXMgdG8gYmUgc3RyaXBwZWQgb2ZmLgotICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSB0b0hUTUxJbWFnZUVsZW1lbnQoY3Vycik7Ci0gICAg
ICAgIFN0cmluZyB1c2VNYXBOYW1lID0gaW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUodXNlbWFw
QXR0cikuc3RyaW5nKCkuc3Vic3RyaW5nKDEpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UodXNlTWFwTmFtZSwgbV9uYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBpbWFnZUVsZW1lbnQ7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiAwOyAgICAKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5p
bWFnZUVsZW1lbnRCeVVzZW1hcChtX25hbWUubG93ZXIoKSk7CiB9CiAKIHZvaWQgSFRNTE1hcEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>213335</attachid>
            <date>2013-10-03 22:20:24 -0700</date>
            <delta_ts>2013-10-04 00:10:59 -0700</delta_ts>
            <desc>Fixes the bug</desc>
            <filename>bug-122313-20131003222024.patch</filename>
            <type>text/plain</type>
            <size>12208</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1Njg3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTEwLTAzICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIEZvY3VzQ29udHJvbGxlcjo6YWR2
YW5jZUZvY3VzIHNwZW5kcyBhIGxvdCBvZiB0aW1lIGluIEhUTUxNYXBFbGVtZW50OjppbWFnZUVs
ZW1lbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
MjMxMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
ZSBidWcgd2FzIGNhdXNlZCBieSBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50IHRyYXZlcnNp
bmcgdGhlIGVudGlyZSBkb2N1bWVudCB0byBsb29rIGZvcgorICAgICAgICB0aGUgaW1hZ2UgZWxl
bWVudCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBtYXAgZWxlbWVudC4gQmVjYXVzZSBIVE1MQ29s
bGVjdGlvbiB1c2VkIHRvIGZpbmQgdGhlCisgICAgICAgIGltYWdlIGVsZW1lbnQgaXMgbm90IGNh
Y2hlZCwgaXQgdHJhdmVyc2VkIHRoZSBlbnRpcmUgZG9jdW1lbnQgb24gZXZlcnkgYXJlYSBlbGVt
ZW50IHdlIHZpc2l0LAorICAgICAgICByZXN1bHRpbmcgaW4gTyhuXjIpIGJlaGF2aW9yLgorCisg
ICAgICAgIEZpeGVkIHRoZSBidWcgYnkgYWRkaW5nIHRoZSBuYW1lLXRvLWltYWdlLWVsZW1lbnQg
bWFwIG9uIGRvY3VtZW50IHRvIGF2b2lkIHRoZSB0cmF2ZXJzYWwgaW4KKyAgICAgICAgSFRNTE1h
cEVsZW1lbnQ6OmltYWdlRWxlbWVudC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YWRkSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNl
bWFwKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVt
ZW50QnlMb3dlcmNhc2VkVXNlbWFwKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6aW1hZ2VFbGVtZW50QnlVc2VtYXApOiBBZGRlZC4KKworICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5oOiBBZGRlZCBtX2ltYWdlc0J5VXNlbWFwLgorCisgICAgICAgICogZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjprZXlNYXRjaGVzTG93ZXJjYXNlZFVzZW1h
cCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRPcmRlcmVkTWFwOjpnZXRFbGVt
ZW50QnlMb3dlcmNhc2VkVXNlbWFwKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnRP
cmRlcmVkTWFwLmg6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKTogVXBkYXRlIHRo
ZSBuYW1lLXRvLXVzZW1hcCBtYXAuIFRoZSBjb2RlIHRvIHBhcnNlCisgICAgICAgIHRoZSB1c2Vt
YXAgYXR0cmlidXRlIGFuZCBzdHJpcCAjIHdhcyBtb3ZlZCBmcm9tIEhUTUxNYXBFbGVtZW50Ojpp
bWFnZUVsZW1lbnQuCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjppbnNlcnRl
ZEludG8pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnJlbW92
ZWRGcm9tKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjptYXRj
aGVzTG93ZXJjYXNlZFVzZW1hcCk6IEFkZGVkOyBjYWxsZWQgYnkgRG9jdW1lbnRPcmRlcmVkTWFw
LgorCisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6CisKKyAgICAgICAgKiBodG1s
L0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNYXBFbGVtZW50Ojpp
bWFnZUVsZW1lbnQpOiBDYWxsIERvY3VtZW50OjppbWFnZUVsZW1lbnRCeVVzZW1hcCBpbnN0ZWFk
IG9mCisgICAgICAgIGxvb2tpbmcgdGhyb3VnaCBhbGwgaW1hZ2UgZWxlbWVudHMgaW4gdGhlIGRv
Y3VtZW50LgorCiAyMDEzLTEwLTAzICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgQXNzZXJ0IHRoYXQgd2UgZG9uJ3QgdHJ5IHRvIGluZGV4IHBhc3QgdGhl
IGVuZCBvZiB0aGUgbV9jb3JlVGV4dEluZGljZXMgYXJyYXkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAkocmV2aXNpb24gMTU2ODI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQAogI2luY2x1ZGUgIkhUTUxGcmFt
ZU93bmVyRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxJRnJhbWVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rpb24uaCIKQEAgLTcwNiw2ICs3MDcsMjEgQEAgdm9p
ZCBEb2N1bWVudDo6aW52YWxpZGF0ZUFjY2Vzc0tleU1hcCgpCiAgICAgbV9lbGVtZW50c0J5QWNj
ZXNzS2V5LmNsZWFyKCk7CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OmFkZEltYWdlRWxlbWVudEJ5TG93
ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIEhUTUxJbWFnZUVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgcmV0dXJuIG1faW1hZ2VzQnlVc2VtYXAuYWRkKG5hbWUuaW1wbCgp
LCBlbGVtZW50KTsKK30KKwordm9pZCBEb2N1bWVudDo6cmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dl
cmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgSFRNTEltYWdlRWxlbWVudCog
ZWxlbWVudCkKK3sKKyAgICByZXR1cm4gbV9pbWFnZXNCeVVzZW1hcC5yZW1vdmUobmFtZS5pbXBs
KCksIGVsZW1lbnQpOworfQorCitIVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudDo6aW1hZ2VFbGVt
ZW50QnlVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIHJldHVy
biBtX2ltYWdlc0J5VXNlbWFwLmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAobmFtZS5pbXBs
KCksIHRoaXMpOworfQorCiBTZWxlY3RvclF1ZXJ5Q2FjaGUmIERvY3VtZW50OjpzZWxlY3RvclF1
ZXJ5Q2FjaGUoKQogewogICAgIGlmICghbV9zZWxlY3RvclF1ZXJ5Q2FjaGUpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuaAkocmV2aXNpb24gMTU2ODI5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBjbGFzcyBIVE1MRWxl
bWVudDsKIGNsYXNzIEhUTUxGcmFtZU93bmVyRWxlbWVudDsKIGNsYXNzIEhUTUxIZWFkRWxlbWVu
dDsKIGNsYXNzIEhUTUxJRnJhbWVFbGVtZW50OworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNs
YXNzIEhUTUxNYXBFbGVtZW50OwogY2xhc3MgSFRNTE5hbWVDb2xsZWN0aW9uOwogY2xhc3MgSFRN
TFNjcmlwdEVsZW1lbnQ7CkBAIC0yNTcsNiArMjU4LDEwIEBAIHB1YmxpYzoKICAgICBFbGVtZW50
KiBnZXRFbGVtZW50QnlBY2Nlc3NLZXkoY29uc3QgU3RyaW5nJiBrZXkpOwogICAgIHZvaWQgaW52
YWxpZGF0ZUFjY2Vzc0tleU1hcCgpOwogCisgICAgdm9pZCBhZGRJbWFnZUVsZW1lbnRCeUxvd2Vy
Y2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nJiwgSFRNTEltYWdlRWxlbWVudCopOworICAg
IHZvaWQgcmVtb3ZlSW1hZ2VFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0
cmluZyYsIEhUTUxJbWFnZUVsZW1lbnQqKTsKKyAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVs
ZW1lbnRCeVVzZW1hcChjb25zdCBBdG9taWNTdHJpbmcmKSBjb25zdDsKKwogICAgIFNlbGVjdG9y
UXVlcnlDYWNoZSYgc2VsZWN0b3JRdWVyeUNhY2hlKCk7CiAKICAgICAvLyBET00gbWV0aG9kcyAm
IGF0dHJpYnV0ZXMgZm9yIERvY3VtZW50CkBAIC0xNDUwLDYgKzE0NTUsOCBAQCBwcml2YXRlOgog
ICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIEVsZW1lbnQqLCBDYXNlRm9sZGluZ0hhc2g+IG1fZWxl
bWVudHNCeUFjY2Vzc0tleTsKICAgICBib29sIG1fYWNjZXNzS2V5TWFwVmFsaWQ7CiAKKyAgICBE
b2N1bWVudE9yZGVyZWRNYXAgbV9pbWFnZXNCeVVzZW1hcDsKKwogICAgIE93blB0cjxTZWxlY3Rv
clF1ZXJ5Q2FjaGU+IG1fc2VsZWN0b3JRdWVyeUNhY2hlOwogCiAgICAgRG9jdW1lbnRDbGFzc0Zs
YWdzIG1fZG9jdW1lbnRDbGFzc2VzOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
T3JkZXJlZE1hcC5jcHAJKHJldmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE9yZGVyZWRNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAK
ICNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRWxlbWVudFRyYXZlcnNhbC5oIgorI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTGFiZWxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZUNvbGxlY3Rp
b24uaCIKQEAgLTYzLDYgKzY0LDEyIEBAIGlubGluZSBib29sIGtleU1hdGNoZXNMb3dlcmNhc2Vk
TWFwTmFtZSgKICAgICByZXR1cm4gaXNIVE1MTWFwRWxlbWVudChlbGVtZW50KSAmJiB0b0hUTUxN
YXBFbGVtZW50KGVsZW1lbnQpLT5nZXROYW1lKCkubG93ZXIoKS5pbXBsKCkgPT0ga2V5OwogfQog
CitpbmxpbmUgYm9vbCBrZXlNYXRjaGVzTG93ZXJjYXNlZFVzZW1hcChjb25zdCBBdG9taWNTdHJp
bmdJbXBsKiBrZXksIEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgLy8gRklYTUU6IEhUTUw1IHNw
ZWNpZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgbWF0Y2ggYm90aCBpbWFnZSBhbmQgb2JqZWN0IGVs
ZW1lbnRzLgorICAgIHJldHVybiBpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkgJiYgdG9IVE1M
SW1hZ2VFbGVtZW50KGVsZW1lbnQpLT5tYXRjaGVzTG93ZXJjYXNlZFVzZW1hcCgqa2V5KTsKK30K
KwogaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZ0ltcGwqIGtleSwgRWxlbWVudCogZWxlbWVudCkKIHsKICAgICByZXR1cm4gaXNIVE1MTGFi
ZWxFbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShmb3JBdHRyKS5pbXBs
KCkgPT0ga2V5OwpAQCAtMTY5LDYgKzE3NiwxMSBAQCBFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCCiAgICAgcmV0dXJuIGdldDxrZXlNYXRjaGVzTG93ZXJjYXNlZE1hcE5h
bWU+KGtleSwgc2NvcGUpOwogfQogCitIVE1MSW1hZ2VFbGVtZW50KiBEb2N1bWVudE9yZGVyZWRN
YXA6OmdldEVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCog
a2V5LCBjb25zdCBUcmVlU2NvcGUqIHNjb3BlKSBjb25zdAoreworICAgIHJldHVybiB0b0hUTUxJ
bWFnZUVsZW1lbnQoZ2V0PGtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwPihrZXksIHNjb3BlKSk7
Cit9CisKIEVsZW1lbnQqIERvY3VtZW50T3JkZXJlZE1hcDo6Z2V0RWxlbWVudEJ5TGFiZWxGb3JB
dHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBjb25zdCBUcmVlU2NvcGUqIHNj
b3BlKSBjb25zdAogewogICAgIHJldHVybiBnZXQ8a2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRl
PihrZXksIHNjb3BlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFw
LmgJKHJldmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVy
ZWRNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFbGVtZW50OworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNzIFRy
ZWVTY29wZTsKIAogY2xhc3MgRG9jdW1lbnRPcmRlcmVkTWFwIHsKQEAgLTU2LDYgKzU3LDcgQEAg
cHVibGljOgogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeU5hbWUoY29uc3QgQXRvbWljU3RyaW5n
SW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRC
eU1hcE5hbWUoY29uc3QgQXRvbWljU3RyaW5nSW1wbCosIGNvbnN0IFRyZWVTY29wZSopIGNvbnN0
OwogICAgIEVsZW1lbnQqIGdldEVsZW1lbnRCeUxvd2VyY2FzZWRNYXBOYW1lKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKKyAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBnZXRFbGVtZW50QnlMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwq
LCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBnZXRFbGVtZW50QnlMYWJl
bEZvckF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgY29uc3QgVHJlZVNjb3BlKikg
Y29uc3Q7CiAgICAgRWxlbWVudCogZ2V0RWxlbWVudEJ5V2luZG93TmFtZWRJdGVtKGNvbnN0IEF0
b21pY1N0cmluZ0ltcGwqLCBjb25zdCBUcmVlU2NvcGUqKSBjb25zdDsKICAgICBFbGVtZW50KiBn
ZXRFbGVtZW50QnlEb2N1bWVudE5hbWVkSXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsKiwgY29u
c3QgVHJlZVNjb3BlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw5ICsxMjMsMjggQEAgdm9p
ZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjbwogICAgIH0gZWxzZSBpZiAobmFt
ZSA9PSBzcmNBdHRyIHx8IG5hbWUgPT0gc3Jjc2V0QXR0cikgewogICAgICAgICBtX2Jlc3RGaXRJ
bWFnZVVSTCA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpLCBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0R2V0QXR0cmli
dXRlKHNyY3NldEF0dHIpKTsKICAgICAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVu
dElnbm9yaW5nUHJldmlvdXNFcnJvcigpOwotICAgIH0gZWxzZSBpZiAobmFtZSA9PSB1c2VtYXBB
dHRyKQorICAgIH0gZWxzZSBpZiAobmFtZSA9PSB1c2VtYXBBdHRyKSB7CiAgICAgICAgIHNldElz
TGluayghdmFsdWUuaXNOdWxsKCkgJiYgIXNob3VsZFByb2hpYml0TGlua3ModGhpcykpOwotICAg
IGVsc2UgaWYgKG5hbWUgPT0gb25iZWZvcmVsb2FkQXR0cikKKworICAgICAgICBpZiAobV9sb3dl
cmNhc2VkVXNlbWFwID09IHZhbHVlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
ICghbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS5y
ZW1vdmVJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAobV9sb3dlcmNhc2VkVXNlbWFwLCB0
aGlzKTsKKworICAgICAgICAvLyBUaGUgSFRNTEltYWdlRWxlbWVudCdzIHVzZU1hcCgpIHZhbHVl
IGluY2x1ZGVzIHRoZSAnIycgc3ltYm9sIGF0IHRoZSBiZWdpbm5pbmcsIHdoaWNoIGhhcyB0byBi
ZSBzdHJpcHBlZCBvZmYuCisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgdGhhdCB0
aGUgZmlyc3QgY2hhcmFjdGVyIGlzICcjJy4KKyAgICAgICAgLy8gRklYTUU6IEhUTUw1IHNwZWNp
ZmljYXRpb24gc2F5cyB3ZSBzaG91bGQgc3RyaXAgYW55IGxlYWRpbmcgc3RyaW5nIGJlZm9yZSAn
IycuCisgICAgICAgIC8vIEZJWE1FOiBIVE1MNSBzcGVjaWZpY2F0aW9uIHNheXMgd2Ugc2hvdWxk
IGlnbm9yZSB1c2VtYXAgYXR0cmlidXRlcyB3aXRob3V0ICMuCisgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgdXNlbWFwID0gZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnVzZW1hcEF0dHIp
OworICAgICAgICBpZiAodXNlbWFwLmxlbmd0aCgpID4gMSkKKyAgICAgICAgICAgIG1fbG93ZXJj
YXNlZFVzZW1hcCA9IHVzZW1hcC5zdHJpbmcoKS5zdWJzdHJpbmcoMSkubG93ZXIoKS5pbXBsKCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbG93ZXJjYXNlZFVzZW1hcCA9IG51bGxBdG9t
OworCisgICAgICAgIGlmICghbV9sb3dlcmNhc2VkVXNlbWFwLmlzTnVsbCgpKQorICAgICAgICAg
ICAgZG9jdW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAobV9sb3dlcmNh
c2VkVXNlbWFwLCB0aGlzKTsKKyAgICB9IGVsc2UgaWYgKG5hbWUgPT0gb25iZWZvcmVsb2FkQXR0
cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3Jl
bG9hZEV2ZW50LCBuYW1lLCB2YWx1ZSk7CiAgICAgZWxzZSBpZiAobmFtZSA9PSBjb21wb3NpdGVB
dHRyKSB7CiAgICAgICAgIC8vIEZJWE1FOiBpbWFnZXMgZG9uJ3Qgc3VwcG9ydCBibGVuZCBtb2Rl
cyBpbiB0aGVpciBjb21wb3NpdGluZyBhdHRyaWJ1dGUuCkBAIC0yMDYsNiArMjI1LDkgQEAgTm9k
ZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MSQogICAgICAgICAgICAgbV9mb3Jt
LT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CiAgICAgfQogCisgICAgaWYgKGluc2VydGlvblBv
aW50LT5pbkRvY3VtZW50KCkgJiYgIW1fbG93ZXJjYXNlZFVzZW1hcC5pc051bGwoKSkKKyAgICAg
ICAgZG9jdW1lbnQoKS5hZGRJbWFnZUVsZW1lbnRCeUxvd2VyY2FzZWRVc2VtYXAobV9sb3dlcmNh
c2VkVXNlbWFwLCB0aGlzKTsKKwogICAgIC8vIElmIHdlIGhhdmUgYmVlbiBpbnNlcnRlZCBmcm9t
IGEgcmVuZGVyZXItbGVzcyBkb2N1bWVudCwKICAgICAvLyBvdXIgbG9hZGVyIG1heSBoYXZlIG5v
dCBmZXRjaGVkIHRoZSBpbWFnZSwgc28gZG8gaXQgbm93LgogICAgIGlmIChpbnNlcnRpb25Qb2lu
dC0+aW5Eb2N1bWVudCgpICYmICFtX2ltYWdlTG9hZGVyLmltYWdlKCkpCkBAIC0yMTgsNiArMjQw
LDEwIEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGEKIHsKICAgICBp
ZiAobV9mb3JtKQogICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CisKKyAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQtPmluRG9jdW1lbnQoKSAmJiAhbV9sb3dlcmNhc2VkVXNlbWFw
LmlzTnVsbCgpKQorICAgICAgICBkb2N1bWVudCgpLnJlbW92ZUltYWdlRWxlbWVudEJ5TG93ZXJj
YXNlZFVzZW1hcChtX2xvd2VyY2FzZWRVc2VtYXAsIHRoaXMpOworCiAgICAgbV9mb3JtID0gMDsK
ICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb20oaW5zZXJ0aW9uUG9pbnQpOwogfQpAQCAtMjkz
LDYgKzMxOSwxMiBAQCBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKGNvCiAg
ICAgICAgIHx8IEhUTUxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShhdHRyaWJ1dGUpOwogfQogCiti
b29sIEhUTUxJbWFnZUVsZW1lbnQ6Om1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21p
Y1N0cmluZ0ltcGwmIG5hbWUpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNvbnN0X2Nhc3Q8QXRvbWlj
U3RyaW5nSW1wbCo+KCZuYW1lKS0+bG93ZXIoKSA9PSAmbmFtZSk7CisgICAgcmV0dXJuIG1fbG93
ZXJjYXNlZFVzZW1hcC5pbXBsKCkgPT0gJm5hbWU7Cit9CisKIGNvbnN0IEF0b21pY1N0cmluZyYg
SFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29uc3QKIHsKICAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KGFsdEF0dHIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJl
dmlzaW9uIDE1NjgyOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgc2V0
TG9hZE1hbnVhbGx5KGJvb2wgbG9hZE1hbnVhbGx5KSB7IG1faW1hZ2VMb2FkZXIuc2V0TG9hZE1h
bnVhbGx5KGxvYWRNYW51YWxseSk7IH0KIAorICAgIGJvb2wgbWF0Y2hlc0xvd2VyY2FzZWRVc2Vt
YXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYpIGNvbnN0OworCiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhbHQoKSBjb25zdDsKIAogICAgIHZvaWQgc2V0SGVpZ2h0KGludCk7CkBAIC0xMTcsNiAr
MTE5LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MRm9ybUVsZW1lbnQqIG1fZm9ybTsKICAgICBDb21w
b3NpdGVPcGVyYXRvciBtX2NvbXBvc2l0ZU9wZXJhdG9yOwogICAgIEF0b21pY1N0cmluZyBtX2Jl
c3RGaXRJbWFnZVVSTDsKKyAgICBBdG9taWNTdHJpbmcgbV9sb3dlcmNhc2VkVXNlbWFwOwogfTsK
IAogRUxFTUVOVF9UWVBFX0NBU1RTKEhUTUxJbWFnZUVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTU2ODI5KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDIwICs3
OSw3IEBAIGJvb2wgSFRNTE1hcEVsZW1lbnQ6Om1hcE1vdXNlRXZlbnQoTGF5b3UKIAogSFRNTElt
YWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgpCiB7Ci0gICAgUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBkb2N1bWVudCgpLmltYWdlcygpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IE5vZGUqIGN1cnIgPSBpbWFnZXMtPml0ZW0oaSk7IGkrKykgewotICAg
ICAgICBpZiAoIWlzSFRNTEltYWdlRWxlbWVudChjdXJyKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIEhUTUxJbWFnZUVsZW1lbnQncyB1c2VNYXAoKSB2
YWx1ZSBpbmNsdWRlcyB0aGUgJyMnIHN5bWJvbCBhdCB0aGUgYmVnaW5uaW5nLAotICAgICAgICAv
LyB3aGljaCBoYXMgdG8gYmUgc3RyaXBwZWQgb2ZmLgotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZUVsZW1lbnQgPSB0b0hUTUxJbWFnZUVsZW1lbnQoY3Vycik7Ci0gICAgICAgIFN0cmlu
ZyB1c2VNYXBOYW1lID0gaW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikuc3Ry
aW5nKCkuc3Vic3RyaW5nKDEpOwotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodXNlTWFw
TmFtZSwgbV9uYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBpbWFnZUVsZW1lbnQ7Ci0gICAgfQot
ICAgIAotICAgIHJldHVybiAwOyAgICAKKyAgICByZXR1cm4gZG9jdW1lbnQoKS5pbWFnZUVsZW1l
bnRCeVVzZW1hcChtX25hbWUubG93ZXIoKSk7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnQ6OnBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUpCg==
</data>
<flag name="review"
          id="235679"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="235683"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>