<?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>56325</bug_id>
          
          <creation_ts>2011-03-14 12:51:06 -0700</creation_ts>
          <short_desc>ASSERTION FAILED: paused() in AnimationBase::updateStateMachine()</short_desc>
          <delta_ts>2011-03-23 12:12:48 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>56242</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>pfeldman</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>367147</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-03-14 12:51:06 -0700</bug_when>
    <thetext>I&apos;m hitting this assertion locally on transitions/mask-transitions.html. http://trac.webkit.org/changeset/80846 was in the area recently so I thought you might have more insight.

ASSERTION FAILED: paused()
/Volumes/work/WebKit/Source/WebCore/page/animation/AnimationBase.cpp(1149) : void WebCore::AnimationBase::updateStateMachine(WebCore::AnimationBase::AnimStateInput, double)
1   WebCore::AnimationBase::updateStateMachine(WebCore::AnimationBase::AnimStateInput, double)
2   WebCore::AnimationBase::onAnimationStartResponse(double)
3   WebCore::AnimationControllerPrivate::startTimeResponse(double)
4   WebCore::AnimationControllerPrivate::receivedStartTimeResponse(double)
5   WebCore::AnimationBase::freezeAtTime(double)
6   WebCore::CompositeAnimation::pauseTransitionAtTime(int, double)
7   WebCore::CompositeAnimation::pauseTransitionAtTime(int, double)
8   WebCore::AnimationControllerPrivate::pauseTransitionAtTime(WebCore::RenderObject*, WTF::String const&amp;, double)
9   WebCore::AnimationController::pauseTransitionAtTime(WebCore::RenderObject*, WTF::String const&amp;, double)
10  -[WebFrame(WebPrivate) _pauseTransitionOfProperty:onNode:atTime:]
11  LayoutTestController::pauseTransitionAtTimeOnElementWithId(OpaqueJSString*, double, OpaqueJSString*)
12  pauseTransitionAtTimeOnElementWithIdCallback(OpaqueJSContext const*, OpaqueJSValue*, OpaqueJSValue*, unsigned long, OpaqueJSValue const* const*, OpaqueJSValue const**)
13  JSC::JSCallbackFunction::call(JSC::ExecState*)
14  cti_op_call_NotJSFunction
15  jscGeneratedNativeCode
16  JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
17  JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
18  JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
19  WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
20  WebCore::ScheduledAction::executeFunctionInContext(JSC::JSGlobalObject*, JSC::JSValue, WebCore::ScriptExecutionContext*)
21  WebCore::ScheduledAction::execute(WebCore::Document*)
22  WebCore::ScheduledAction::execute(WebCore::ScriptExecutionContext*)
23  WebCore::DOMTimer::fired()
24  WebCore::ThreadTimers::sharedTimerFiredInternal()
25  WebCore::ThreadTimers::sharedTimerFired()
26  WebCore::timerFired(__CFRunLoopTimer*, void*)
27  __CFRunLoopRun
28  CFRunLoopRunSpecific
29  -[NSRunLoop(NSRunLoop) runMode:beforeDate:]
30  runTest(std::string const&amp;)
31  runTestingServerLoop()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367153</commentid>
    <comment_count>1</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2011-03-14 13:02:39 -0700</bug_when>
    <thetext>Commenting out the new &quot;if (m_object)&quot; guard in ~AnimationBase() fixes it for me.

Removing that also fixes transitions/interrupted-accelerated-transition.html (filed as bug 56242).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370029</commentid>
    <comment_count>2</comment_count>
      <attachid>86246</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-18 17:20:04 -0700</bug_when>
    <thetext>Created attachment 86246
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370034</commentid>
    <comment_count>3</comment_count>
      <attachid>86246</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-18 17:31:04 -0700</bug_when>
    <thetext>Comment on attachment 86246
Patch

Withdrawing. Doesn&apos;t yet fix something I hoped it would. I now have a nice testcase!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370035</commentid>
    <comment_count>4</comment_count>
      <attachid>86246</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-18 17:31:41 -0700</bug_when>
    <thetext>Comment on attachment 86246
Patch

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

&gt; Source/WebCore/ChangeLog:13
&gt; +        from the sets into AnimationController, where it belongs.

Into AnimationControllerPrivate, right?

&gt; Source/WebCore/page/animation/AnimationController.cpp:372
&gt; +    if (m_startTimeResponseWaiters.contains(animation))
&gt; +        m_startTimeResponseWaiters.remove(animation);

This does two hash lookups. There&apos;s no point calling contains().

&gt; Source/WebCore/page/animation/AnimationController.cpp:385
&gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt;::const_iterator it = m_styleAvailableWaiters.begin();

You should add a typedef for HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt;

&gt; Source/WebCore/page/animation/AnimationController.cpp:388
&gt; +        (*it)-&gt;styleAvailable();

Are you sure that this can never re-ender this method?

&gt; Source/WebCore/page/animation/AnimationController.cpp:423
&gt; +    if (m_startTimeResponseWaiters.size())

Use !isEmpty()

&gt; Source/WebCore/page/animation/AnimationController.cpp:434
&gt; +        (*it)-&gt;onAnimationStartResponse(time);

Can this ever re-enter this method?

&gt; Source/WebCore/page/animation/AnimationController.cpp:437
&gt; +    m_waitingForStartTimeResponse = false;

Do we need m_waitingForStartTimeResponse? Can we just check !m_startTimeResponseWaiters.isEmpty()?

&gt; Source/WebCore/page/animation/AnimationControllerPrivate.h:128
&gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt; m_styleAvailableWaiters;
&gt;      
&gt; -    AnimationBase* m_startTimeResponseWaiters;
&gt; -    AnimationBase* m_lastStartTimeResponseWaiter;
&gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt; m_startTimeResponseWaiters;

I was never a fan of the &apos;waiters&apos; terminology. Maybe rename to &apos;animationsWaitingFor...&apos;?

&gt; Source/WebCore/page/animation/CompositeAnimation.cpp:180
&gt; +            animationController()-&gt;removeFromStyleAvailableWaitList(anim);
&gt; +            animationController()-&gt;removeFromStartTimeResponseWaitList(anim);

Maybe wrap these two calls up in a AnimationControllerPrivate::animationWillBeRemoved() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370072</commentid>
    <comment_count>5</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-18 18:51:31 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 86246 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86246&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:13
&gt; &gt; +        from the sets into AnimationController, where it belongs.
&gt; 
&gt; Into AnimationControllerPrivate, right?

Yes

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:372
&gt; &gt; +    if (m_startTimeResponseWaiters.contains(animation))
&gt; &gt; +        m_startTimeResponseWaiters.remove(animation);
&gt; 
&gt; This does two hash lookups. There&apos;s no point calling contains().

OK

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:385
&gt; &gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt;::const_iterator it = m_styleAvailableWaiters.begin();
&gt; 
&gt; You should add a typedef for HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt;

OK

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:388
&gt; &gt; +        (*it)-&gt;styleAvailable();
&gt; 
&gt; Are you sure that this can never re-ender this method?

We couldn&apos;t re-enter it, but the previous code did some very subtle things (probably unintentionally) with moving things to/from the waiting lists as it was iterating here. This new code is pretty careful about keeping the lists clean at all times.

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:423
&gt; &gt; +    if (m_startTimeResponseWaiters.size())
&gt; 
&gt; Use !isEmpty()

OK

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:434
&gt; &gt; +        (*it)-&gt;onAnimationStartResponse(time);
&gt; 
&gt; Can this ever re-enter this method?

See above

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationController.cpp:437
&gt; &gt; +    m_waitingForStartTimeResponse = false;
&gt; 
&gt; Do we need m_waitingForStartTimeResponse? Can we just check !m_startTimeResponseWaiters.isEmpty()?

No, because the animation doesn&apos;t always have to wait for start time. The state machine makes that decision, and as soon as one animation is added that is flagged, then all the existing ones are too.

&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationControllerPrivate.h:128
&gt; &gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt; m_styleAvailableWaiters;
&gt; &gt;      
&gt; &gt; -    AnimationBase* m_startTimeResponseWaiters;
&gt; &gt; -    AnimationBase* m_lastStartTimeResponseWaiter;
&gt; &gt; +    HashSet&lt;RefPtr&lt;AnimationBase&gt; &gt; m_startTimeResponseWaiters;
&gt; 
&gt; I was never a fan of the &apos;waiters&apos; terminology. Maybe rename to &apos;animationsWaitingFor...&apos;?

OK

&gt; 
&gt; &gt; Source/WebCore/page/animation/CompositeAnimation.cpp:180
&gt; &gt; +            animationController()-&gt;removeFromStyleAvailableWaitList(anim);
&gt; &gt; +            animationController()-&gt;removeFromStartTimeResponseWaitList(anim);
&gt; 
&gt; Maybe wrap these two calls up in a AnimationControllerPrivate::animationWillBeRemoved() method.

OK</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370073</commentid>
    <comment_count>6</comment_count>
      <attachid>86253</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-18 18:52:30 -0700</bug_when>
    <thetext>Created attachment 86253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370074</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-18 18:53:11 -0700</bug_when>
    <thetext>Now with a test case that exercises the new code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370366</commentid>
    <comment_count>8</comment_count>
      <attachid>86253</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-03-21 07:24:23 -0700</bug_when>
    <thetext>Comment on attachment 86253
Patch

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

All looks good and I like the earlier flushing of the lists. But I don&apos;t see how you can guarantee that the AnimationBase won&apos;t be in one of the lists when it gets destroyed.

&gt; Source/WebCore/page/animation/AnimationBase.cpp:-819
&gt; -

Why is this no longer necessary? Isn&apos;t it still possible for it to be destroyed when it is still in one of the lists?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370906</commentid>
    <comment_count>9</comment_count>
      <attachid>86366</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-21 14:36:09 -0700</bug_when>
    <thetext>Created attachment 86366
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370919</commentid>
    <comment_count>10</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-21 14:43:29 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 86253 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86253&amp;action=review
&gt; 
&gt; All looks good and I like the earlier flushing of the lists. But I don&apos;t see how you can guarantee that the AnimationBase won&apos;t be in one of the lists when it gets destroyed.
&gt; 
&gt; &gt; Source/WebCore/page/animation/AnimationBase.cpp:-819
&gt; &gt; -
&gt; 
&gt; Why is this no longer necessary? Isn&apos;t it still possible for it to be destroyed when it is still in one of the lists?

Because an AnimationBase can only be destroyed after it is removed from the lists in CompositeAnimation - the code in updateKeyframeAnimations and updateTransitions. Before it is removed from the CompositeAnimation lists, I call  animationController()-&gt;animationWillBeRemoved().

The AnimationBase may still stick around after that, if JS has a reference via a WebKitAnimation, but it certainly should not be in the waiting lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370922</commentid>
    <comment_count>11</comment_count>
      <attachid>86366</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-03-21 14:46:28 -0700</bug_when>
    <thetext>Comment on attachment 86366
Patch

Looks good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370923</commentid>
    <comment_count>12</comment_count>
      <attachid>86366</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-03-21 14:47:34 -0700</bug_when>
    <thetext>Comment on attachment 86366
Patch

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

&gt; LayoutTests/animations/body-removal-crash.html:35
&gt; +&lt;html&gt;
&gt; +&lt;head&gt;
&gt; +  &lt;style id=&quot;a&quot; type=&quot;text/css&quot; media=&quot;screen&quot;&gt;
&gt; +    #box {
&gt; +      -webkit-animation-duration: 2s;
&gt; +      -webkit-animation-timing-function: linear;
&gt; +      -webkit-animation-name: anim;
&gt; +      background-color: blue;
&gt; +      width: 100px;
&gt; +      height: 100px;
&gt; +    }
&gt; +    @-webkit-keyframes anim {
&gt; +        from { -webkit-transform: rotate(0) scale(1,1); }
&gt; +        to   { -webkit-transform: rotate(360deg) scale(2,4); }
&gt; +    }
&gt; +  &lt;/style&gt;
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;div id=&quot;box&quot;&gt;
&gt; +&lt;/div&gt;
&gt; +&lt;/body&gt;
&gt; +&lt;/html&gt;
&gt; +
&gt; +&lt;script&gt; 
&gt; +function crash() {
&gt; +    // trigger style processing
&gt; +    document.alinkColor = &quot;aaa&quot;;
&gt; +    // now remove the body and insert it in a different location
&gt; +    var elem = document.body;
&gt; +    elem.parentNode.removeChild(elem);
&gt; +    document.getElementById(&quot;a&quot;).parentNode.insertBefore(elem, document.getElementById(&quot;a&quot;).nextSibling);
&gt; +}
&gt; +
&gt; +crash();
&gt; +&lt;/script&gt;

This doesn&apos;t need to be a pixel test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370939</commentid>
    <comment_count>13</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2011-03-21 15:06:09 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	LayoutTests/ChangeLog
	M	LayoutTests/animations/3d/transform-origin-vs-functions.html
	A	LayoutTests/animations/body-removal-crash-expected.txt
	A	LayoutTests/animations/body-removal-crash.html
	M	Source/WebCore/ChangeLog
	M	Source/WebCore/page/animation/AnimationBase.cpp
	M	Source/WebCore/page/animation/AnimationBase.h
	M	Source/WebCore/page/animation/AnimationController.cpp
	M	Source/WebCore/page/animation/AnimationControllerPrivate.h
	M	Source/WebCore/page/animation/CompositeAnimation.cpp
Committed r81613</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370972</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-21 15:59:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/81613 might have broken Chromium Mac Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372324</commentid>
    <comment_count>15</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-03-23 12:12:48 -0700</bug_when>
    <thetext>We started seeing following crash on Chromium reliability bots somewhere around this land.

Stack trace:
chrome_25a0000!WebCore::ImplicitAnimation::~ImplicitAnimation+0x16 [c:\b\build\slave\win\build\src\third_party\webkit\source\webcore\page\animation\implicitanimation.cpp @ 58]
chrome_25a0000!WebCore::ImplicitAnimation::`scalar deleting destructor&apos;+0x8
chrome_25a0000!WTF::HashTable&lt;WTF::RefPtr&lt;WebCore::AnimationBase&gt;,WTF::RefPtr&lt;WebCore::AnimationBase&gt;,WTF::IdentityExtractor&lt;WTF::RefPtr&lt;WebCore::AnimationBase&gt; &gt;,WTF::PtrHash&lt;WTF::RefPtr&lt;WebCore::AnimationBase&gt; &gt;,WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::AnimationBase&gt; &gt;,WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::AnimationBase&gt; &gt; &gt;::deallocateTable+0x3a [c:\b\build\slave\win\build\src\third_party\webkit\source\javascriptcore\wtf\hashtable.h @ 891]
chrome_25a0000!WebCore::AnimationControllerPrivate::~AnimationControllerPrivate+0x29 [c:\b\build\slave\win\build\src\third_party\webkit\source\webcore\page\animation\animationcontroller.cpp @ 64]
chrome_25a0000!WebCore::AnimationController::~AnimationController+0xe [c:\b\build\slave\win\build\src\third_party\webkit\source\webcore\page\animation\animationcontroller.cpp @ 462]
chrome_25a0000!WebCore::Frame::~Frame+0x140 [c:\b\build\slave\win\build\src\third_party\webkit\source\webcore\page\frame.cpp @ 245]
chrome_25a0000!WebCore::Page::~Page+0x309 [c:\b\build\slave\win\build\src\third_party\webkit\source\webcore\page\page.cpp @ 215]
chrome_25a0000!WebKit::WebViewImpl::close+0x60 [c:\b\build\slave\win\build\src\third_party\webkit\source\webkit\chromium\src\webviewimpl.cpp @ 940]
chrome_25a0000!RenderWidget::Close+0x10 [c:\b\build\slave\win\build\src\content\renderer\render_widget.cc @ 824]
chrome_25a0000!RenderView::Close+0xc [c:\b\build\slave\win\build\src\content\renderer\render_view.cc @ 5056]
chrome_25a0000!MessageLoop::RunTask+0xf0 [c:\b\build\slave\win\build\src\base\message_loop.cc @ 368]
chrome_25a0000!MessageLoop::DoWork+0x176 [c:\b\build\slave\win\build\src\base\message_loop.cc @ 569]
chrome_25a0000!base::MessagePumpDefault::Run+0x122 [c:\b\build\slave\win\build\src\base\message_pump_default.cc @ 50]
chrome_25a0000!MessageLoop::RunInternal+0x9e [c:\b\build\slave\win\build\src\base\message_loop.cc @ 342]
chrome_25a0000!MessageLoop::Run+0x5b [c:\b\build\slave\win\build\src\base\message_loop.cc @ 240]
chrome_25a0000!RendererMain+0x391 [c:\b\build\slave\win\build\src\chrome\renderer\renderer_main.cc @ 335]
chrome_25a0000!`anonymous namespace&apos;::RunNamedProcessTypeMain+0x10f [c:\b\build\slave\win\build\src\chrome\app\chrome_main.cc @ 476]
chrome_25a0000!ChromeMain+0x7e3 [c:\b\build\slave\win\build\src\chrome\app\chrome_main.cc @ 787]
chrome!MainDllLoader::Launch+0x194 [c:\b\build\slave\win\build\src\chrome\app\client_util.cc @ 289]
chrome!wWinMain+0xa1 [c:\b\build\slave\win\build\src\chrome\app\chrome_exe_main_win.cc @ 47]
chrome!__tmainCRTStartup+0x112 [f:\dd\vctools\crt_bld\self_x86\crt\src\crt0.c @ 263]
WARNING: Stack unwind information not available. Following frames may be wrong.
kernel32!RegisterWaitForInputIdle+0x49</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86246</attachid>
            <date>2011-03-18 17:20:04 -0700</date>
            <delta_ts>2011-03-18 18:52:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56325-20110319112002.patch</filename>
            <type>text/plain</type>
            <size>16548</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEzMDMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNjFlOTMzNTI4NWI3NDM4ZmZiMjJh
OWJlMGZmY2Q1NjEzNTFkMjdjLi4xMDNkMjBiZWFlOTMwYmQ4ZTY1NTBiYjdjNjk1MTZiZDAzY2Fk
YjkxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTEtMDMtMTggIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjMyNQorICAg
ICAgICBBU1NFUlRJT04gRkFJTEVEOiBwYXVzZWQoKSBpbiBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUoKQorCisgICAgICAgIFdoaWxlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRo
aXMgYnVnLCB0aGlzIHRlc3Qgd291bGQgb2NjYXNpb25hbGx5CisgICAgICAgIGZhaWwgYmVjYXVz
ZSBpdCBkZXBlbmRlZCBvbiB0aGUgb3JkZXIgb2YgZXZlbnRzIGJlaW5nIGZpcmVkLiBUaGUKKyAg
ICAgICAgdXBkYXRlIHRvIHRoZSB3YXkgYW5pbWF0aW9ucyBhcmUga2VlcGluZyB0aGVpciBzdGF0
ZSB0cmlnZ2VyZWQgdGhpcworICAgICAgICBtb3JlIG9mdGVuLiBOb3cgdGhlIG91dHB1dCBpcyBz
b3J0ZWQgYmVmb3JlIGZpbmlzaGluZyB0aGUgdGVzdC4KKworICAgICAgICAqIGFuaW1hdGlvbnMv
M2QvdHJhbnNmb3JtLW9yaWdpbi12cy1mdW5jdGlvbnMuaHRtbDoKKwogMjAxMS0wMy0xNiAgRGF2
aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVXBkYXRlIHRlc3QgZXhw
ZWN0YXRpb25zIGR1ZSB0byByODEyODAgKG1lZGlhL2NvbnRyb2xzLXdpdGhvdXQtcHJlbG9hZC5o
dG1sKSwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvM2QvdHJhbnNmb3JtLW9y
aWdpbi12cy1mdW5jdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvM2QvdHJhbnNm
b3JtLW9yaWdpbi12cy1mdW5jdGlvbnMuaHRtbAppbmRleCA5ZDk5NzhkZjkxOWFmOWMyMDlkOGUy
ZjkwN2VhYzUzOTQwMDMzNzBmLi43NjI0N2QwNDA0YTNmOWU0ZmFhY2IwMmVlM2QzMWI5ZGY1NzIy
MGQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zLzNkL3RyYW5zZm9ybS1vcmln
aW4tdnMtZnVuY3Rpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy8zZC90cmFu
c2Zvcm0tb3JpZ2luLXZzLWZ1bmN0aW9ucy5odG1sCkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICAgIH0KIAotICAgICAg
cmVzdWx0ID0gIiI7CisgICAgICByZXN1bHRFbnRyaWVzID0gW107CiAKICAgICAgIGNvbnN0IGV4
cGVjdGVkID0gewogICAgICAgICAgICJiMSIgOiBbIDAsMCwtMSwwLCAwLDEsMCwwLCAxLDAsMCww
LCAwLDAsMCwxIF0sCkBAIC04NywxNyArODcsMTggQEAKICAgICAgICAgICAgICAgdmFyIGFjdHVh
bCA9IHBhcnNlRmxvYXQoYXJyYXlbaV0pOwogICAgICAgICAgICAgICB2YXIgZXhwZWN0ID0gZXhw
ZWN0ZWRbaWRdW2ldOwogICAgICAgICAgICAgICBpZiAoIWlzRXF1YWwoYWN0dWFsLCBleHBlY3Qp
KSB7Ci0gICAgICAgICAgICAgICAgICByZXN1bHQgKz0gIkZBSUwoZWxlbWVudCAnIitpZCsiJyBt
YXRyaXhbIitpKyJdJyB3YXM6IithY3R1YWwrIiwgZXhwZWN0ZWQ6IitleHBlY3QrIik8YnI+IjsK
KyAgICAgICAgICAgICAgICAgIHJlc3VsdEVudHJpZXMucHVzaCgiRkFJTChlbGVtZW50ICciK2lk
KyInIG1hdHJpeFsiK2krIl0nIHdhczoiK2FjdHVhbCsiLCBleHBlY3RlZDoiK2V4cGVjdCsiKTxi
cj4iKTsKICAgICAgICAgICAgICAgICAgIHBhc3MgPSBmYWxzZTsKICAgICAgICAgICAgICAgfQog
ICAgICAgICAgIH0KICAgICAgICAgICAKICAgICAgICAgICBpZiAocGFzcykKLSAgICAgICAgICAg
IHJlc3VsdCArPSAiUEFTUyhlbGVtZW50ICciK2lkKyInIG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUp
PGJyPiI7CisgICAgICAgICAgICByZXN1bHRFbnRyaWVzLnB1c2goIlBBU1MoZWxlbWVudCAnIitp
ZCsiJyBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlKTxicj4iKTsKICAgICAgICAgICAKICAgICAgICAg
ICBudW1TbmFwc2hvdHMrKzsKICAgICAgICAgICBpZiAobnVtU25hcHNob3RzID09IDIpIHsKLSAg
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlubmVySFRNTCA9
IHJlc3VsdDsKKyAgICAgICAgICAgICAgcmVzdWx0RW50cmllcy5zb3J0KCk7CisgICAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUwgPSByZXN1bHRF
bnRyaWVzLmpvaW4oIiIpOwogICAgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKQogICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOwogICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NmUxMjg0NGI3ZWQ4N2MwZThkNDEwNDIx
OWY5ZDFiNmQ5ZjZmNWI1Li4xMjA1ODViNmY0NDc3NDlkNmY1ZjM4MDNlMTdmOGNlODViNzU2MjQ3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDMtMTggIERlYW4gSmFja3NvbiAg
PGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjMyNQor
ICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBwYXVzZWQoKSBpbiBBbmltYXRpb25CYXNlOjp1cGRh
dGVTdGF0ZU1hY2hpbmUoKQorCisgICAgICAgIEFuaW1hdGlvbkJhc2UgaGFkIGEgY3VzdG9tIGxp
bmtlZC1saXN0L3NlbGYtcG9pbnRlciBmb3Iga2VlcGluZworICAgICAgICB0cmFjayBvZiBhbmlt
YXRpb25zIHRoYXQgbmVlZGVkIHRvIGJlIG5vdGlmaWVkIG9mIHN0eWxlIHVwZGF0ZXMKKyAgICAg
ICAgYW5kIHN0YXJ0IHByb2dyZXNzLiBUaGlzIGNhdXNlZCBwcm9ibGVtcyB3aGVuIEFuaW1hdGlv
bkJhc2Ugd2FzCisgICAgICAgIGRlc3Ryb3llZCwgc2luY2UgdGhlIHBvaW50ZXIgd2Fzbid0IG1h
bmFnZWQgaW4gYW55IHdheS4gSSByZXBsYWNlZAorICAgICAgICB0aGVzZSBwb2ludGVycyB3aXRo
IEhhc2hTZXRzIGFuZCBtb3ZlZCB0aGUgY29kZSB0aGF0IHJlbW92ZXMgYW5pbWF0aW9ucworICAg
ICAgICBmcm9tIHRoZSBzZXRzIGludG8gQW5pbWF0aW9uQ29udHJvbGxlciwgd2hlcmUgaXQgYmVs
b25ncy4KKworICAgICAgICBUaGlzIHNob3VsZCBzdG9wIHRoZSBzdHlsZSB1cGRhdGVzIGJlaW5n
IGNhbGxlZCBvbiBub24tYWN0aXZlIGFuaW1hdGlvbnMKKyAgICAgICAgKHdoaWNoIHdhcyB0aGUg
Y2F1c2Ugb2YgdGhlIHN0YXRlIG1hY2hpbmUgZXJyb3IgaGVyZSkgYW5kIHNob3VsZCBhbHNvCisg
ICAgICAgIHN0b3AgYSBmZXcgb2YgdGhlIHJlbGF0ZWQgZmxha2V5IHRlc3QgZmFpbHVyZXMgYW5k
IG9jY2FzaW9uYWwgY3Jhc2hlcy4KKworICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFz
ZSk6CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAt
IFJlbW92ZSB0aGUgbGlua2VkLWxpc3QgcG9pbnRlcnMKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1h
dGlvbkJhc2U6On5BbmltYXRpb25CYXNlKToKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJv
bVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKToKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oOgorICAgICAgICAtIHVzZSBhIEhh
c2hTZXQgcmF0aGVyIHRoYW4gYW4gQW5pbWF0aW9uQmFzZSogcG9pbnRlci4KKyAgICAgICAgKiBw
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6CisgICAgICAg
IC0gcmVtb3ZlIHRoZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0cyB3
aGVuIHdlIGtub3cKKyAgICAgICAgICB0aGV5IGFyZSBubyBsb25nZXIgYWN0aXZlIChyYXRoZXIg
dGhhbiB3YWl0aW5nIGZvciB0aGUgQW5pbWF0aW9uQmFzZQorICAgICAgICAgIHRvIGRvIGl0IHdo
ZW4gZGVzdHJ1Y3RpbmcpCisKIDIwMTEtMDMtMTYgIEtlaXRoIEt5eml2YXQgIDxrZWl0aC5reXpp
dmF0QG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRleCAz
ODIyZDM4Mzc5YmQ0MWMyZGRhOGYyMmUwYjJiODhmNDMyNjBiMDYxLi5kYWU5MGYyNDRiMjgzMGMw
ODU2Mzk2NTY4ZTRkODNmOWY0YTZiODZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApAQCAtNzk4LDcgKzc5OCw2IEBAIEFuaW1hdGlvbkJh
c2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyCiAgICAgLCBtX2lzQWNjZWxlcmF0ZWQoZmFsc2UpCiAgICAgLCBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdFZhbGlkKGZhbHNlKQogICAgICwgbV9uZXh0SXRlcmF0aW9uRHVyYXRp
b24oLTEpCi0gICAgLCBtX25leHQoMCkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJh
dGlvbgogICAgIG1fdG90YWxEdXJhdGlvbiA9IC0xOwpAQCAtODA2LDE3ICs4MDUsNiBAQCBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlcgogICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlv
bi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwogfQogCi1Bbmlt
YXRpb25CYXNlOjp+QW5pbWF0aW9uQmFzZSgpCi17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHJlbmRl
cmVyLCByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIHdhaXQgbGlzdHMuIFdlIGNhbiBnZXQgaW50
bwotICAgIC8vIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlcmUgaXMgbm8gcmVuZGVyZXIgd2hlbiB0
aGUgYmluZGluZyBoYXMgYSByZWZlcmVuY2UgdG8KLSAgICAvLyB0aGlzIG9iamVjdCwgYnV0IHRo
ZSBlbGVtZW50IGhhcyBzaW5jZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAg
aWYgKG1fb2JqZWN0KSB7Ci0gICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIo
KS0+cmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QodGhpcyk7Ci0gICAgICAgIG1fY29t
cEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNl
V2FpdExpc3QodGhpcyk7Ci0gICAgfQotfQotCiBib29sIEFuaW1hdGlvbkJhc2U6OnByb3BlcnRp
ZXNFcXVhbChpbnQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKQogewogICAgIGVuc3VyZVByb3BlcnR5TWFwKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKaW5kZXggYzVhZjBhMGY1YWU4MDAxNTZhZjkwOGU2
YTdkYzU2OGEyN2IyZDY0NC4uMWFiMTRlM2FkMzE4ZTlkZGI4OWQ3NGMzZGU0Y2VlZjc3NDAzMzNm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaApA
QCAtNTEsNyArNTEsNyBAQCBjbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIFJlZkNvdW50ZWQ8
QW5pbWF0aW9uQmFzZT4gewogCiBwdWJsaWM6CiAgICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmlt
YXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0pOwotICAgIHZpcnR1YWwgfkFuaW1hdGlvbkJhc2UoKTsKKyAgICB2aXJ0
dWFsIH5BbmltYXRpb25CYXNlKCkgeyB9CiAKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KICAgICB2b2lkIGNsZWFyUmVuZGVyZXIoKSB7IG1f
b2JqZWN0ID0gMDsgfQpAQCAtMTczLDkgKzE3Myw2IEBAIHB1YmxpYzoKICAgICBkb3VibGUgZ2V0
RWxhcHNlZFRpbWUoKSBjb25zdDsKICAgICAvLyBTZXR0aW5nIHRoZSBlbGFwc2VkIHRpbWUgd2ls
bCBhZGp1c3QgdGhlIHN0YXJ0IHRpbWUgYW5kIHBvc3NpYmx5IHBhdXNlIHRpbWUuCiAgICAgdm9p
ZCBzZXRFbGFwc2VkVGltZShkb3VibGUpOwotCi0gICAgQW5pbWF0aW9uQmFzZSogbmV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fbmV4dDsgfQotICAgIHZvaWQgc2V0TmV4dChBbmltYXRpb25CYXNlKiBh
bmltYXRpb24pIHsgbV9uZXh0ID0gYW5pbWF0aW9uOyB9CiAgICAgCiAgICAgdm9pZCBzdHlsZUF2
YWlsYWJsZSgpIAogICAgIHsKQEAgLTIzOCw4ICsyMzUsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOwogICAgIGRvdWJsZSBtX3RvdGFsRHVyYXRp
b24sIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uOwogICAgIAotICAgIEFuaW1hdGlvbkJhc2UqIG1f
bmV4dDsKLSAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZvaWQgZW5zdXJlUHJvcGVydHlNYXAo
KTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkNvbnRyb2xsZXIuY3BwCmluZGV4IGE3MzAwNjU4MWZlZWJkMWU3OTY0YTYxMmViMWIxNDRmODVl
ZWExNTEuLjNmYTU3MDViNDNhN2MwMGQ0ZGVlMjk0MTJiYzgxMGFjNTc4YmFkYzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIu
Y3BwCkBAIC01MywxMCArNTMsOCBAQCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqIGZyYW1lKQogICAgICwgbV91cGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0
ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQpCiAgICAgLCBtX2ZyYW1lKGZyYW1lKQogICAg
ICwgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoY0JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZU5v
dFNldCkKLSAgICAsIG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzKDApCi0gICAgLCBtX2xhc3RTdHls
ZUF2YWlsYWJsZVdhaXRlcigwKQotICAgICwgbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMoMCkK
LSAgICAsIG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNlV2FpdGVyKDApCisgICAgLCBtX3N0eWxlQXZh
aWxhYmxlV2FpdGVycygpCisgICAgLCBtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVycygpCiAgICAg
LCBtX3dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShmYWxzZSkKIHsKIH0KQEAgLTM2OSw0NyAr
MzY3LDI3IEBAIHVuc2lnbmVkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uKQog
ewotICAgIEFTU0VSVCghYW5pbWF0aW9uLT5uZXh0KCkpOwotICAgIAotICAgIGlmIChtX3N0eWxl
QXZhaWxhYmxlV2FpdGVycykKLSAgICAgICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXItPnNl
dE5leHQoYW5pbWF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3R5bGVBdmFpbGFibGVXYWl0
ZXJzID0gYW5pbWF0aW9uOwotICAgICAgICAKLSAgICBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRl
ciA9IGFuaW1hdGlvbjsKLSAgICBhbmltYXRpb24tPnNldE5leHQoMCk7CisgICAgLy8gTWFrZSBz
dXJlIHRoaXMgYW5pbWF0aW9uIGlzIG5vdCBpbiB0aGUgc3RhcnQgdGltZSB3YWl0ZXJzCisgICAg
aWYgKG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzLmNvbnRhaW5zKGFuaW1hdGlvbikpCisgICAg
ICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzLnJlbW92ZShhbmltYXRpb24pOworCisgICAg
bV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMuYWRkKGFuaW1hdGlvbik7CiB9CiAKIHZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KEFu
aW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQogewotICAgIEFuaW1hdGlvbkJhc2UqIHBy
ZXZBbmltYXRpb24gPSAwOwotICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uID0gbV9z
dHlsZUF2YWlsYWJsZVdhaXRlcnM7IGFuaW1hdGlvbjsgYW5pbWF0aW9uID0gYW5pbWF0aW9uLT5u
ZXh0KCkpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbiA9PSBhbmltYXRpb25Ub1JlbW92ZSkgewot
ICAgICAgICAgICAgaWYgKHByZXZBbmltYXRpb24pCi0gICAgICAgICAgICAgICAgcHJldkFuaW1h
dGlvbi0+c2V0TmV4dChhbmltYXRpb24tPm5leHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMgPSBhbmltYXRpb24tPm5leHQoKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVy
ID09IGFuaW1hdGlvbikKLSAgICAgICAgICAgICAgICBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRl
ciA9IHByZXZBbmltYXRpb247Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBhbmltYXRp
b25Ub1JlbW92ZS0+c2V0TmV4dCgwKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBtX3N0eWxlQXZh
aWxhYmxlV2FpdGVycy5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUpOwogfQogCiB2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCiB7CiAgICAgLy8gR28gdGhy
b3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLSAgICBmb3Ig
KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiA9IG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzOyBhbmlt
YXRpb247ICkgewotICAgICAgICBBbmltYXRpb25CYXNlKiBuZXh0QW5pbWF0aW9uID0gYW5pbWF0
aW9uLT5uZXh0KCk7Ci0gICAgICAgIGFuaW1hdGlvbi0+c2V0TmV4dCgwKTsKLSAgICAgICAgYW5p
bWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotICAgICAgICBhbmltYXRpb24gPSBuZXh0QW5pbWF0
aW9uOwotICAgIH0KLSAgICAKLSAgICBtX3N0eWxlQXZhaWxhYmxlV2FpdGVycyA9IDA7Ci0gICAg
bV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXIgPSAwOworICAgIEhhc2hTZXQ8UmVmUHRyPEFuaW1h
dGlvbkJhc2U+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMu
YmVnaW4oKTsKKyAgICBIYXNoU2V0PFJlZlB0cjxBbmltYXRpb25CYXNlPiA+Ojpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3N0eWxlQXZhaWxhYmxlV2FpdGVycy5lbmQoKTsKKyAgICBmb3IgKDsgaXQg
IT0gZW5kOyArK2l0KQorICAgICAgICAoKml0KS0+c3R5bGVBdmFpbGFibGUoKTsKKworICAgIG1f
c3R5bGVBdmFpbGFibGVXYWl0ZXJzLmNsZWFyKCk7CiB9CiAKIHZvaWQgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNl
KiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQpAQCAtNDMxLDU0ICs0MDksMzIgQEAg
dm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdGFydFRpbWVSZXNwb25zZVdh
aXRMaXN0KEFuaW1hdGlvbkJhc2UqIGEKICAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxs
IHNvZnR3YXJlIGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUg
CiAgICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KICAgICAvLwotICAgIEFTU0VSVCgh
YW5pbWF0aW9uLT5uZXh0KCkpOwogICAgIAogICAgIGlmICh3aWxsR2V0UmVzcG9uc2UpCiAgICAg
ICAgIG1fd2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlID0gdHJ1ZTsKICAgICAKLSAgICBpZiAo
bV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMpCi0gICAgICAgIG1fbGFzdFN0YXJ0VGltZVJlc3Bv
bnNlV2FpdGVyLT5zZXROZXh0KGFuaW1hdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBtX3N0YXJ0
VGltZVJlc3BvbnNlV2FpdGVycyA9IGFuaW1hdGlvbjsKLSAgICAgICAgCi0gICAgbV9sYXN0U3Rh
cnRUaW1lUmVzcG9uc2VXYWl0ZXIgPSBhbmltYXRpb247Ci0gICAgYW5pbWF0aW9uLT5zZXROZXh0
KDApOworICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzLmFkZChhbmltYXRpb24pOwogfQog
CiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tU3RhcnRUaW1lUmVz
cG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKIHsKLSAgICBB
bmltYXRpb25CYXNlKiBwcmV2QW5pbWF0aW9uID0gMDsKLSAgICBmb3IgKEFuaW1hdGlvbkJhc2Uq
IGFuaW1hdGlvbiA9IG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzOyBhbmltYXRpb247IGFuaW1h
dGlvbiA9IGFuaW1hdGlvbi0+bmV4dCgpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24gPT0gYW5p
bWF0aW9uVG9SZW1vdmUpIHsKLSAgICAgICAgICAgIGlmIChwcmV2QW5pbWF0aW9uKQotICAgICAg
ICAgICAgICAgIHByZXZBbmltYXRpb24tPnNldE5leHQoYW5pbWF0aW9uLT5uZXh0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJz
ID0gYW5pbWF0aW9uLT5uZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2xh
c3RTdGFydFRpbWVSZXNwb25zZVdhaXRlciA9PSBhbmltYXRpb24pCi0gICAgICAgICAgICAgICAg
bV9sYXN0U3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXIgPSBwcmV2QW5pbWF0aW9uOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYW5pbWF0aW9uVG9SZW1vdmUtPnNldE5leHQoMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJldkFuaW1hdGlvbiA9IGFuaW1hdGlvbjsKLSAgICB9CisgICAgbV9z
dGFydFRpbWVSZXNwb25zZVdhaXRlcnMucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKICAgICAK
LSAgICBpZiAoIW1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzKQorICAgIGlmIChtX3N0YXJ0VGlt
ZVJlc3BvbnNlV2FpdGVycy5zaXplKCkpCiAgICAgICAgIG1fd2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlID0gZmFsc2U7CiB9CiAKIHZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSB0aW1lKQogewogICAgIC8vIEdvIHRocm91Z2ggbGlzdCBv
ZiB3YWl0ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChBbmltYXRpb25C
YXNlKiBhbmltYXRpb24gPSBtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVyczsgYW5pbWF0aW9uOyAp
IHsKLSAgICAgICAgQW5pbWF0aW9uQmFzZSogbmV4dEFuaW1hdGlvbiA9IGFuaW1hdGlvbi0+bmV4
dCgpOwotICAgICAgICBhbmltYXRpb24tPnNldE5leHQoMCk7Ci0gICAgICAgIGFuaW1hdGlvbi0+
b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHRpbWUpOwotICAgICAgICBhbmltYXRpb24gPSBuZXh0
QW5pbWF0aW9uOwotICAgIH0KKworICAgIEhhc2hTZXQ8UmVmUHRyPEFuaW1hdGlvbkJhc2U+ID46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMuYmVnaW4oKTsK
KyAgICBIYXNoU2V0PFJlZlB0cjxBbmltYXRpb25CYXNlPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVycy5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICAoKml0KS0+b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHRpbWUpOwog
ICAgIAotICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzID0gMDsKLSAgICBtX2xhc3RTdGFy
dFRpbWVSZXNwb25zZVdhaXRlciA9IDA7CisgICAgbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMu
Y2xlYXIoKTsKKyAgICBtX3dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSA9IGZhbHNlOwogfQog
CiBQYXNzUmVmUHRyPFdlYktpdEFuaW1hdGlvbkxpc3Q+IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphbmltYXRpb25zRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZS5oCmluZGV4IDg4YjgyYTRmMWM1OWM1OTU2ZWU0ZDY2MjMxMWIzNzI3
NzBkMmY0ZmIuLmRjZGY3NDBhNTM4MWY4MTE1OTM3NGE0Njk3N2Q0ZjgwN2YzZThiMTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtODksMTAgKzkw
LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoZG91Ymxl
KTsKICAgICAKICAgICB2b2lkIGFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25C
YXNlKik7Ci0gICAgdm9pZCByZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRp
b25CYXNlKik7ICAgIAotICAgIAorICAgIHZvaWQgcmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2Fp
dExpc3QoQW5pbWF0aW9uQmFzZSopOworCiAgICAgdm9pZCBhZGRUb1N0YXJ0VGltZVJlc3BvbnNl
V2FpdExpc3QoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsKLSAgICB2b2lk
IHJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsgICAg
CisgICAgdm9pZCByZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25C
YXNlKik7CiAgICAgCiAgICAgUGFzc1JlZlB0cjxXZWJLaXRBbmltYXRpb25MaXN0PiBhbmltYXRp
b25zRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KikgY29uc3Q7CiAgICAgCkBAIC0xMjIsMTEgKzEy
Myw5IEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZUNoYW5nZXNU
b0Rpc3BhdGNoOwogICAgIAogICAgIGRvdWJsZSBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZTsK
LSAgICBBbmltYXRpb25CYXNlKiBtX3N0eWxlQXZhaWxhYmxlV2FpdGVyczsKLSAgICBBbmltYXRp
b25CYXNlKiBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlcjsKKyAgICBIYXNoU2V0PFJlZlB0cjxB
bmltYXRpb25CYXNlPiA+IG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzOwogICAgIAotICAgIEFuaW1h
dGlvbkJhc2UqIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzOwotICAgIEFuaW1hdGlvbkJhc2Uq
IG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNlV2FpdGVyOworICAgIEhhc2hTZXQ8UmVmUHRyPEFuaW1h
dGlvbkJhc2U+ID4gbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnM7CiAgICAgYm9vbCBtX3dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCmluZGV4IDhiOWMxM2RkZTg1ZDM0
ZGM4NzQzZDVkMjE3YmFlOTNmMzhlOWRiYzcuLjVkMWNjMTIzMjJiMmY1MjNkN2VmYWZlNGYxNmU5
MGZjOTNlNTNhNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q29tcG9zaXRlQW5pbWF0aW9uLmNwcApAQCAtMTc1LDggKzE3NSwxMSBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVu
ZGVyU3R5bGUqCiAgICAgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFu
aW0gPSBpdC0+c2Vjb25kLmdldCgpOwotICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKQorICAg
ICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKSB7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9s
bGVyKCktPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KGFuaW0pOworICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0
TGlzdChhbmltKTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRp
bmdQcm9wZXJ0eSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyByZW1vdmUgdGhl
IHRyYW5zaXRpb25zIGZyb20gdGhlIGxpc3QKQEAgLTI1Niw2ICsyNTksOCBAQCB2b2lkIENvbXBv
c2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIFJlbmRlcgogICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0g
aXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDAp
IHsKICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFt
ZSgpLmltcGwoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPnJlbW92ZUZy
b21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KGtleWZyYW1lQW5pbSk7CisgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KGtl
eWZyYW1lQW5pbSk7CiAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPmNsZWFyUmVuZGVyZXIoKTsK
ICAgICAgICAgfQogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86253</attachid>
            <date>2011-03-18 18:52:30 -0700</date>
            <delta_ts>2011-03-21 14:35:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56325-20110319125227.patch</filename>
            <type>text/plain</type>
            <size>26651</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEzMDMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNjFlOTMzNTI4NWI3NDM4ZmZiMjJh
OWJlMGZmY2Q1NjEzNTFkMjdjLi44OTY0N2FkMWJlZmI1ODNkNDMyNDk4NmQyOGJkNGQ1MDNkNTI3
MzA3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDMtMTggIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjMyNQorICAg
ICAgICBBU1NFUlRJT04gRkFJTEVEOiBwYXVzZWQoKSBpbiBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUoKQorCisgICAgICAgIEFkZCBhIGZ1enppbmcgdGVzdCB0aGF0IGNhdXNlZCBh
IGNyYXNoIC0gbW9yZSBzZXJpb3VzIHRoYW4gdGhlCisgICAgICAgIGFzc2VydGlvbi4KKworICAg
ICAgICBXaGlsZSBub3QgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGlzIGJ1ZywgdGhlCisgICAgICAg
IHRyYW5zZm9ybS1vcmlnaW4tdnMtZnVuY3Rpb25zIHRlc3Qgd291bGQgb2NjYXNpb25hbGx5IGZh
aWwgYmVjYXVzZSBpdAorICAgICAgICBkZXBlbmRlZCBvbiB0aGUgb3JkZXIgb2YgZXZlbnRzIGJl
aW5nIGZpcmVkLiBUaGUgdXBkYXRlIHRvIHRoZSB3YXkKKyAgICAgICAgYW5pbWF0aW9ucyBhcmUg
a2VlcGluZyB0aGVpciBzdGF0ZSB0cmlnZ2VyZWQgdGhpcyBtb3JlIG9mdGVuLiBOb3cgdGhlCisg
ICAgICAgIG91dHB1dCBpcyBzb3J0ZWQgYmVmb3JlIGZpbmlzaGluZyB0aGUgdGVzdC4KKworICAg
ICAgICAqIGFuaW1hdGlvbnMvM2QvdHJhbnNmb3JtLW9yaWdpbi12cy1mdW5jdGlvbnMuaHRtbDoK
KyAgICAgICAgKiBhbmltYXRpb25zL2JvZHktcmVtb3ZhbC1jcmFzaC5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2gtZXhwZWN0
ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hbmltYXRpb25zL2Jv
ZHktcmVtb3ZhbC1jcmFzaC1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9hbmltYXRpb25zL2JvZHktcmVtb3ZhbC1jcmFzaC1leHBlY3RlZC50eHQ6IEFkZGVkLgor
CiAyMDExLTAzLTE2ICBEYXZpZCBMZXZpbiAgPGxldmluQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBVcGRhdGUgdGVzdCBleHBlY3RhdGlvbnMgZHVlIHRvIHI4MTI4MCAobWVkaWEvY29udHJvbHMt
d2l0aG91dC1wcmVsb2FkLmh0bWwpLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy8zZC90cmFuc2Zvcm0tb3JpZ2luLXZzLWZ1bmN0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvYW5p
bWF0aW9ucy8zZC90cmFuc2Zvcm0tb3JpZ2luLXZzLWZ1bmN0aW9ucy5odG1sCmluZGV4IDlkOTk3
OGRmOTE5YWY5YzIwOWQ4ZTJmOTA3ZWFjNTM5NDAwMzM3MGYuLjc2MjQ3ZDA0MDRhM2Y5ZTRmYWFj
YjAyZWUzZDMxYjlkZjU3MjIwZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMv
M2QvdHJhbnNmb3JtLW9yaWdpbi12cy1mdW5jdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9h
bmltYXRpb25zLzNkL3RyYW5zZm9ybS1vcmlnaW4tdnMtZnVuY3Rpb25zLmh0bWwKQEAgLTYwLDcg
KzYwLDcgQEAKICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwog
ICAgICAgfQogCi0gICAgICByZXN1bHQgPSAiIjsKKyAgICAgIHJlc3VsdEVudHJpZXMgPSBbXTsK
IAogICAgICAgY29uc3QgZXhwZWN0ZWQgPSB7CiAgICAgICAgICAgImIxIiA6IFsgMCwwLC0xLDAs
IDAsMSwwLDAsIDEsMCwwLDAsIDAsMCwwLDEgXSwKQEAgLTg3LDE3ICs4NywxOCBAQAogICAgICAg
ICAgICAgICB2YXIgYWN0dWFsID0gcGFyc2VGbG9hdChhcnJheVtpXSk7CiAgICAgICAgICAgICAg
IHZhciBleHBlY3QgPSBleHBlY3RlZFtpZF1baV07CiAgICAgICAgICAgICAgIGlmICghaXNFcXVh
bChhY3R1YWwsIGV4cGVjdCkpIHsKLSAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiRkFJTChl
bGVtZW50ICciK2lkKyInIG1hdHJpeFsiK2krIl0nIHdhczoiK2FjdHVhbCsiLCBleHBlY3RlZDoi
K2V4cGVjdCsiKTxicj4iOworICAgICAgICAgICAgICAgICAgcmVzdWx0RW50cmllcy5wdXNoKCJG
QUlMKGVsZW1lbnQgJyIraWQrIicgbWF0cml4WyIraSsiXScgd2FzOiIrYWN0dWFsKyIsIGV4cGVj
dGVkOiIrZXhwZWN0KyIpPGJyPiIpOwogICAgICAgICAgICAgICAgICAgcGFzcyA9IGZhbHNlOwog
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgfQogICAgICAgICAgIAogICAgICAgICAgIGlmIChw
YXNzKQotICAgICAgICAgICAgcmVzdWx0ICs9ICJQQVNTKGVsZW1lbnQgJyIraWQrIicgbWF0Y2hl
cyBleHBlY3RlZCB2YWx1ZSk8YnI+IjsKKyAgICAgICAgICAgIHJlc3VsdEVudHJpZXMucHVzaCgi
UEFTUyhlbGVtZW50ICciK2lkKyInIG1hdGNoZXMgZXhwZWN0ZWQgdmFsdWUpPGJyPiIpOwogICAg
ICAgICAgIAogICAgICAgICAgIG51bVNuYXBzaG90cysrOwogICAgICAgICAgIGlmIChudW1TbmFw
c2hvdHMgPT0gMikgewotICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncmVz
dWx0JykuaW5uZXJIVE1MID0gcmVzdWx0OworICAgICAgICAgICAgICByZXN1bHRFbnRyaWVzLnNv
cnQoKTsKKyAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Jlc3VsdCcpLmlu
bmVySFRNTCA9IHJlc3VsdEVudHJpZXMuam9pbigiIik7CiAgICAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCiAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CiAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL2FuaW1h
dGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlhYmVkMDI0YmZlYjUz
YzFlNTEwNWRhODg0MzJmZmY5MzFhMGMxMwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLmh0bWwKQEAgLTAsMCArMSwzMyBAQAorPGh0
bWw+Cis8aGVhZD4KKyAgPHN0eWxlIGlkPSJhIiB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVl
biI+CisgICAgI2JveCB7CisgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMnM7Cisg
ICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGxpbmVhcjsKKyAgICAgIC13
ZWJraXQtYW5pbWF0aW9uLW5hbWU6IGFuaW07CisgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVl
OworICAgICAgd2lkdGg6IDEwMHB4OworICAgICAgaGVpZ2h0OiAxMDBweDsKKyAgICB9CisgICAg
QC13ZWJraXQta2V5ZnJhbWVzIGFuaW0geworICAgICAgICBmcm9tIHsgLXdlYmtpdC10cmFuc2Zv
cm06IHJvdGF0ZSgwKSBzY2FsZSgxLDEpOyB9CisgICAgICAgIHRvICAgeyAtd2Via2l0LXRyYW5z
Zm9ybTogcm90YXRlKDM2MGRlZykgc2NhbGUoMiw0KTsgfQorICAgIH0KKyAgPC9zdHlsZT4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0iYm94Ij4KKzwvZGl2PgorPC9ib2R5PgorPC9odG1sPgor
Cis8c2NyaXB0PiAKK2Z1bmN0aW9uIGNyYXNoKCkgeworICAgIGRvY3VtZW50LmFsaW5rQ29sb3Ig
PSAiJTI1cyUyNXMlMjVzJTI1cyUyNXMlMjVzIjsKKyAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmJv
ZHk7CisgICAgZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGVsZW0pOworICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJhIikucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWxlbSwgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImEiKS5uZXh0U2libGluZyk7Cit9CisKK2NyYXNoKCk7Cis8L3Nj
cmlwdD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hbmltYXRpb25zL2Jv
ZHktcmVtb3ZhbC1jcmFzaC1leHBlY3RlZC5jaGVja3N1bSBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9hbmltYXRpb25zL2JvZHktcmVtb3ZhbC1jcmFzaC1leHBlY3RlZC5jaGVja3N1bQpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kNjlhMzcxYmQxNjRmMDY1NzdkZTIyYTU0OWNhYjg0YzRlNzI5MzhjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1v
dmFsLWNyYXNoLWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKKzg1M2RlMDA1NjdkMTIx
YmVhMGI3YmVjZTY2YTVkNjFjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNo
LWV4cGVjdGVkLnBuZyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9hbmltYXRpb25zL2JvZHkt
cmVtb3ZhbC1jcmFzaC1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzg5MjE2ODg2ZDdjZjkzZTkx
MmYzY2Q3OTU5YjZlNTBhYTk1MjM2NApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA0NjMKemNt
ZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMUIlUWxZYnBTOC1lbyNGMlk1Tz1EK0Nu
ZnIpQjEoCnpHQjh2eXd1WVJ+N0lxWipYT18zfWYpWW5tSHM3WC0yfSspa3QyMTEkbkVlJEAlSTNL
KHpzKz8qaW1+VWxKaFJ2RAp6KVY0MHxjPUc2Pyk7LXNeMyklbFMkVz90dihmNFlOYUBEeEVTfGUk
cHhiRFpaY3xPfmd6QitLTz8oO3FLX3FGK0QKel9aZkpMRX00OTdWMHByT0paTzwlVz1AUyQpfUlj
QnpEMW1sQ2FSJmctfXRHcElXYHludGJUckBpb1k+Qj5+UXQoCnpAPWZKeVhJPEpoaUBvS3EhdnB0
T0g/PW1yN2NiPEI2a19WSXh4WX5KY25RYi0kMlVIYD45X1EmdFQ/IXBVKSVPYgp6cSo5SDhzcVZS
WS15T2tjUldDYTxkc3N+UVN7UChFPVgmPik+JDI+YmQxPVFeMjwtS3J1eCQ2NGNkTF5ZJmhoKWsK
ekgofkdHRkxpI0tAN1d6dkpqNS16KjR9TUxANFQtKVNNNDdxSzN3d2JOU20jVWd6MStiMzhMR2pS
e2soT0JvWiYrCnp0RyswdEBUTU5gI35KSlhoSkVzQ0R3dHEjRGtaVUBJTGdFU3g9LUdaVUcxIzNZ
UylGPUtQbkZrZHwyNXBvUE9gaAp6LVNAN3luQVJLYyQ/ezA/JTtOUDM1TzhIbG9VdExtcTBMNmgm
fTM3UXo0QkB7PkItZWJyN0Jzd09PamtSSSMhJEEKenZFM2ZIPGdVIz40VytePCZSYVBxe2MtJUt3
Zj8wNCk1QFF4Vj5hOWZgI3hwdT57K2AkSitNQ2RibW1TZXgkQm90CnpKVENUKXRDQFBHWTt3NSF2
XkFBZ2R1RnxudlZSamstU0FuSFk1JFNwNFpsQz8jIW8jblU5KDV6PTtQNE91ZUA3SQp6cVlUYU8m
KEVwMXd0YntgVVReRVE7PGNVSz0zJXBecn5sM0pgMkI5eHAyXlFiZkJNSUx7ckQmUz8yK1YwbnVj
bSsKelVDJExlcnl0ZShJTyZHPllWSm5+eHlMIT9QSG9lP2xzb2E0JUdIRX5TJG4/ZiRKJDMlPn4q
Vz5gNUhKeV4zMGA+CnomaFBieXZ7RnB3PyZRbj0pcW5mPUFNcSNPeVBuVjJWQTlXZGFBTX1KK35D
NlowdC1gQDxgdTdGNjVvSFpfUVNUawp6PzhTOCFlXj9ASFIqUzYtR00lcm1oZiRgaXktTXpkPThW
aEpyayVBNllTKT1SZERxS1JOa0x9PFphVzdCVTAxIUgKej5NZ2M7V0B5c092S3VvbSVqVUB9dn4+
REBXVnUpQjxYYEpRM1UydGpBP1dBTkg5PEcpe0dfZm1QWENwRVY5I0lJCnowfk90ITM9OWVrby1V
M2Q2Xnc3TVp7JWZBOzkpVUxfJj05OXNibHBWKjBAY1Y/I3dHY0V2VnFvemApNEYhWGNwRwp6cGRl
c3p1I0ZTS2g2dlUkR0NtUm5Oa1A/fFV9NW9hJWs2K14wRSNqYFZqcTxzNFdINVUwblM2Q2BEMyh2
NyVkLTEKej5qITlzSSRBJUR3aHU8ek4yQmUtKGV+a0pgKjVePDI8JjV5d3ZSe0skRHs0eihmMDla
YHhyZG5IcmhXSj9IYFF4Cno0QFViM3F5Mi0/ez1zUGZWNj1aUStDTGhkVW1Uclo5aTNtTV9XYihB
YEVvaTg0NkYtNFlYTF52OGwhRUUoWUQ1RApqVFZ1NFhHMSVHfmpvZEg4SW83MH5uSUhqTnhYOXE/
PmdUZX5EV000ZnFrR3dGCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2gtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFs
LWNyYXNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDFmOTkwZmVhMGNmM2IzMDYyZTdhZTRj
MjYzMDgyMWFiMjFjNWUzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDQgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDAp
IHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2Nr
IHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5NmUxMjg0NGI3ZWQ4
N2MwZThkNDEwNDIxOWY5ZDFiNmQ5ZjZmNWI1Li5mZTkxYTk2MzdmOWFkMzVmNmRlZmY5YzAyMDAz
Nzk2ZjQ0YWNmY2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDMtMTggIERl
YW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjMyNQorICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBwYXVzZWQoKSBpbiBBbmltYXRp
b25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoKQorCisgICAgICAgIEFuaW1hdGlvbkJhc2UgaGFk
IGEgY3VzdG9tIGxpbmtlZC1saXN0L3NlbGYtcG9pbnRlciBmb3Iga2VlcGluZworICAgICAgICB0
cmFjayBvZiBhbmltYXRpb25zIHRoYXQgbmVlZGVkIHRvIGJlIG5vdGlmaWVkIG9mIHN0eWxlIHVw
ZGF0ZXMKKyAgICAgICAgYW5kIHN0YXJ0IHByb2dyZXNzLiBUaGlzIGNhdXNlZCBwcm9ibGVtcyB3
aGVuIEFuaW1hdGlvbkJhc2Ugd2FzCisgICAgICAgIGRlc3Ryb3llZCwgc2luY2UgdGhlIHBvaW50
ZXIgd2Fzbid0IG1hbmFnZWQgaW4gYW55IHdheS4gSSByZXBsYWNlZAorICAgICAgICB0aGVzZSBw
b2ludGVycyB3aXRoIEhhc2hTZXRzIGFuZCBtb3ZlZCB0aGUgY29kZSB0aGF0IHJlbW92ZXMgYW5p
bWF0aW9ucworICAgICAgICBmcm9tIHRoZSBzZXRzIGludG8gQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUsIHdoZXJlIGl0IGJlbG9uZ3MuCisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiBpcyBh
bHNvIG1vcmUgY2FyZWZ1bCB0byB0ZWxsIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlCisgICAg
ICAgIHdoZW4gaXQgbm8gbG9uZ2VyIG5lZWRzIHRvIGtlZXAgdHJhY2sgb2Ygd2FpdGluZyBhbmlt
YXRpb25zLgorCisgICAgICAgIFRoaXMgc2hvdWxkIHN0b3AgdGhlIHN0eWxlIHVwZGF0ZXMgYmVp
bmcgY2FsbGVkIG9uIG5vbi1hY3RpdmUgYW5pbWF0aW9ucworICAgICAgICAod2hpY2ggd2FzIHRo
ZSBjYXVzZSBvZiB0aGUgc3RhdGUgbWFjaGluZSBlcnJvciBoZXJlKSBhbmQgc2hvdWxkIGFsc28K
KyAgICAgICAgc3RvcCBhIGZldyBvZiB0aGUgcmVsYXRlZCBmbGFrZXkgdGVzdCBmYWlsdXJlcyBh
bmQgb2NjYXNpb25hbCBjcmFzaGVzLgorCisgICAgICAgIFRlc3Q6IGFuaW1hdGlvbnMvYm9keS1y
ZW1vdmFsLWNyYXNoLmh0bWwKKworICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZSk6
CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUpOgor
ICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkFuaW1hdGlvbkJhc2U6On5BbmltYXRpb25CYXNlKToKKyAgICAgICAgLSBSZW1vdmUgdGhl
IGxpbmtlZC1saXN0CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlv
bnNXYWl0aW5nRm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OnN0eWxlQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZCk6CisgICAgICAgIC0gTmV3IG1ldGhvZCB0byByZW1vdmUgYW5pbWF0aW9ucyBm
cm9tIHRoZSB3YWl0aW5nIGxpc3RzCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUuaDoKKyAgICAgICAgLSB1c2UgYSBIYXNoU2V0IHJhdGhlciB0aGFu
IGFuIEFuaW1hdGlvbkJhc2UqIHBvaW50ZXIuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlv
bjo6fkNvbXBvc2l0ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OmNsZWFyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0
aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmlt
YXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyk6CisgICAgICAgIC0gcmVtb3ZlIHRoZSBh
bmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0cyB3aGVuIHdlIGtub3cKKyAg
ICAgICAgICB0aGV5IGFyZSBubyBsb25nZXIgYWN0aXZlIChyYXRoZXIgdGhhbiB3YWl0aW5nIGZv
ciB0aGUgQW5pbWF0aW9uQmFzZQorICAgICAgICAgIHRvIGRvIGl0IHdoZW4gZGVzdHJ1Y3Rpbmcp
CisKIDIwMTEtMDMtMTYgIEtlaXRoIEt5eml2YXQgIDxrZWl0aC5reXppdmF0QG5va2lhLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBBbmRyZWFzIEtsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAppbmRleCAzODIyZDM4Mzc5YmQ0MWMy
ZGRhOGYyMmUwYjJiODhmNDMyNjBiMDYxLi42YjQ5MGVhNzBiMDQ1MzZjM2Q2NWUwM2I0OWFjNDg5
NjFlYjVjMjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcApAQCAtNzk4LDcgKzc5OCw2IEBAIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJh
c2UoY29uc3QgQW5pbWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyCiAg
ICAgLCBtX2lzQWNjZWxlcmF0ZWQoZmFsc2UpCiAgICAgLCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlz
dFZhbGlkKGZhbHNlKQogICAgICwgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24oLTEpCi0gICAgLCBt
X25leHQoMCkKIHsKICAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlvbgogICAgIG1fdG90
YWxEdXJhdGlvbiA9IC0xOwpAQCAtODA2LDE3ICs4MDUsNiBAQCBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcgogICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAq
IG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwogfQogCi1BbmltYXRpb25CYXNlOjp+QW5p
bWF0aW9uQmFzZSgpCi17Ci0gICAgLy8gSWYgd2UgaGF2ZSBhIHJlbmRlcmVyLCByZW1vdmUgb3Vy
c2VsdmVzIGZyb20gdGhlIHdhaXQgbGlzdHMuIFdlIGNhbiBnZXQgaW50bwotICAgIC8vIHRoZSBz
aXR1YXRpb24gd2hlcmUgdGhlcmUgaXMgbm8gcmVuZGVyZXIgd2hlbiB0aGUgYmluZGluZyBoYXMg
YSByZWZlcmVuY2UgdG8KLSAgICAvLyB0aGlzIG9iamVjdCwgYnV0IHRoZSBlbGVtZW50IGhhcyBz
aW5jZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCi0gICAgaWYgKG1fb2JqZWN0KSB7
Ci0gICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbVN0
eWxlQXZhaWxhYmxlV2FpdExpc3QodGhpcyk7Ci0gICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QodGhpcyk7
Ci0gICAgfQotfQotCiBib29sIEFuaW1hdGlvbkJhc2U6OnByb3BlcnRpZXNFcXVhbChpbnQgcHJv
cCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQogewogICAgIGVu
c3VyZVByb3BlcnR5TWFwKCk7CkBAIC05NDEsNyArOTI5LDcgQEAgdm9pZCBBbmltYXRpb25CYXNl
Ojp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkK
ICAgICAvLyBJZiB3ZSBnZXQgQW5pbWF0aW9uU3RhdGVJbnB1dFJlc3RhcnRBbmltYXRpb24gdGhl
biB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuCiAgICAgaWYg
KGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRNYWtlTmV3KSB7CiAgICAgICAgIGlmIChtX2Fu
aW1TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAg
ICAgICAgbV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tU3R5bGVB
dmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7
CiAgICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVOZXc7CiAgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKICAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKQEAgLTk1Myw3ICs5NDEsNyBA
QCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBp
bnB1dCwgZG91YmxlIHBhcmFtKQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXRSZXN0YXJ0QW5pbWF0aW9uKSB7CiAgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wQW5pbS0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0
aGlzKTsKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUodGhpcyk7CiAgICAgICAgIG1fYW5pbVN0
YXRlID0gQW5pbWF0aW9uU3RhdGVOZXc7CiAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKICAgICAg
ICAgbV9wYXVzZVRpbWUgPSAtMTsKQEAgLTk2OCw3ICs5NTYsNyBAQCB2b2lkIEFuaW1hdGlvbkJh
c2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFt
KQogCiAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXRFbmRBbmltYXRpb24pIHsK
ICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25Db250cm9sbGVyKCkt
PnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KHRoaXMpOworICAgICAgICAgICAgbV9j
b21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdHlsZSh0aGlzKTsKICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZURv
bmU7CiAgICAgICAgIGVuZEFuaW1hdGlvbigpOwogICAgICAgICByZXR1cm47CkBAIC0xMDA4LDcg
Kzk5Niw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0
ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFt
ID49IDApOwogICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0
aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3Rh
cnQgdGltZQogICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gQW5pbWF0aW9uU3RhdGVTdGFy
dFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRp
b25Db250cm9sbGVyKCktPmFkZFRvU3R5bGVBdmFpbGFibGVXYWl0TGlzdCh0aGlzKTsKKyAgICAg
ICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25Db250cm9sbGVyKCktPmFkZFRvQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKIAogICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIg
YSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KICAgICAgICAgICAgICAgICBp
ZiAobV9vYmplY3QpCkBAIC0xMDQzLDcgKzEwMzEsNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVw
ZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAg
ICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1tX2FuaW1hdGlvbi0+ZGVsYXkoKTsK
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24odGltZU9m
ZnNldCk7CiAKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5hZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QodGhpcywgc3RhcnRlZCk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOwog
ICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMTcyLDcgKzExNjAsNyBAQCB2b2lk
IEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3RhdGVJbnB1dCBpbnB1dCwg
ZG91YmxlIHBhcmFtKQogICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9zdGFydFRpbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wQW5pbS0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QodGhp
cywgc3RhcnRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRp
b25Db250cm9sbGVyKCktPmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZSh0aGlzLCBzdGFydGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRl
ZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKaW5kZXggYzVh
ZjBhMGY1YWU4MDAxNTZhZjkwOGU2YTdkYzU2OGEyN2IyZDY0NC4uMWFiMTRlM2FkMzE4ZTlkZGI4
OWQ3NGMzZGU0Y2VlZjc3NDAzMzNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaApAQCAtNTEsNyArNTEsNyBAQCBjbGFzcyBBbmltYXRpb25CYXNl
IDogcHVibGljIFJlZkNvdW50ZWQ8QW5pbWF0aW9uQmFzZT4gewogCiBwdWJsaWM6CiAgICAgQW5p
bWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pOwotICAgIHZpcnR1YWwgfkFuaW1h
dGlvbkJhc2UoKTsKKyAgICB2aXJ0dWFsIH5BbmltYXRpb25CYXNlKCkgeyB9CiAKICAgICBSZW5k
ZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7IH0KICAgICB2b2lk
IGNsZWFyUmVuZGVyZXIoKSB7IG1fb2JqZWN0ID0gMDsgfQpAQCAtMTczLDkgKzE3Myw2IEBAIHB1
YmxpYzoKICAgICBkb3VibGUgZ2V0RWxhcHNlZFRpbWUoKSBjb25zdDsKICAgICAvLyBTZXR0aW5n
IHRoZSBlbGFwc2VkIHRpbWUgd2lsbCBhZGp1c3QgdGhlIHN0YXJ0IHRpbWUgYW5kIHBvc3NpYmx5
IHBhdXNlIHRpbWUuCiAgICAgdm9pZCBzZXRFbGFwc2VkVGltZShkb3VibGUpOwotCi0gICAgQW5p
bWF0aW9uQmFzZSogbmV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fbmV4dDsgfQotICAgIHZvaWQgc2V0
TmV4dChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pIHsgbV9uZXh0ID0gYW5pbWF0aW9uOyB9CiAg
ICAgCiAgICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpIAogICAgIHsKQEAgLTIzOCw4ICsyMzUsNiBA
QCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkOwogICAg
IGRvdWJsZSBtX3RvdGFsRHVyYXRpb24sIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uOwogICAgIAot
ICAgIEFuaW1hdGlvbkJhc2UqIG1fbmV4dDsKLSAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZW5zdXJlUHJvcGVydHlNYXAoKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmluZGV4IGE3MzAwNjU4MWZlZWJk
MWU3OTY0YTYxMmViMWIxNDRmODVlZWExNTEuLjk5OTI5NzA3NjM4OGE3MDI4MmI1OTA3ZmZkYzQ2
MWUxYjQyODllZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01MywxMCArNTMsOCBAQCBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUqIGZyYW1lKQog
ICAgICwgbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcih0aGlzLCAmQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQpCiAgICAg
LCBtX2ZyYW1lKGZyYW1lKQogICAgICwgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoY0JlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZU5vdFNldCkKLSAgICAsIG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJz
KDApCi0gICAgLCBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlcigwKQotICAgICwgbV9zdGFydFRp
bWVSZXNwb25zZVdhaXRlcnMoMCkKLSAgICAsIG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNlV2FpdGVy
KDApCisgICAgLCBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKQorICAgICwgbV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCkKICAgICAsIG1fd2FpdGluZ0ZvclN0YXJ0
VGltZVJlc3BvbnNlKGZhbHNlKQogewogfQpAQCAtMzY3LDUyICszNjUsMzEgQEAgdW5zaWduZWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNv
bnN0CiAgICAgcmV0dXJuIGNvdW50OwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9u
KQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbikKIHsKLSAgICBBU1NFUlQoIWFuaW1h
dGlvbi0+bmV4dCgpKTsKLSAgICAKLSAgICBpZiAobV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMpCi0g
ICAgICAgIG1fbGFzdFN0eWxlQXZhaWxhYmxlV2FpdGVyLT5zZXROZXh0KGFuaW1hdGlvbik7Ci0g
ICAgZWxzZQotICAgICAgICBtX3N0eWxlQXZhaWxhYmxlV2FpdGVycyA9IGFuaW1hdGlvbjsKLSAg
ICAgICAgCi0gICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXIgPSBhbmltYXRpb247Ci0gICAg
YW5pbWF0aW9uLT5zZXROZXh0KDApOwotfQotCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpyZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmlt
YXRpb25Ub1JlbW92ZSkKLXsKLSAgICBBbmltYXRpb25CYXNlKiBwcmV2QW5pbWF0aW9uID0gMDsK
LSAgICBmb3IgKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiA9IG1fc3R5bGVBdmFpbGFibGVXYWl0
ZXJzOyBhbmltYXRpb247IGFuaW1hdGlvbiA9IGFuaW1hdGlvbi0+bmV4dCgpKSB7Ci0gICAgICAg
IGlmIChhbmltYXRpb24gPT0gYW5pbWF0aW9uVG9SZW1vdmUpIHsKLSAgICAgICAgICAgIGlmIChw
cmV2QW5pbWF0aW9uKQotICAgICAgICAgICAgICAgIHByZXZBbmltYXRpb24tPnNldE5leHQoYW5p
bWF0aW9uLT5uZXh0KCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3R5
bGVBdmFpbGFibGVXYWl0ZXJzID0gYW5pbWF0aW9uLT5uZXh0KCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlciA9PSBhbmltYXRpb24pCi0g
ICAgICAgICAgICAgICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXIgPSBwcmV2QW5pbWF0aW9u
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYW5pbWF0aW9uVG9SZW1vdmUtPnNldE5l
eHQoMCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgLy8gTWFrZSBzdXJlIHRoaXMgYW5pbWF0aW9u
IGlzIG5vdCBpbiB0aGUgc3RhcnQgdGltZSB3YWl0ZXJzCisgICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZShhbmltYXRpb24pOworCisgICAgbV9hbmltYXRp
b25zV2FpdGluZ0ZvclN0eWxlLmFkZChhbmltYXRpb24pOworfQorCit2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmlt
YXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKK3sKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUucmVtb3ZlKGFuaW1hdGlvblRvUmVtb3ZlKTsKIH0KIAogdm9pZCBBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFpbGFibGUoKQogewogICAgIC8vIEdvIHRocm91Z2gg
bGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChBbmlt
YXRpb25CYXNlKiBhbmltYXRpb24gPSBtX3N0eWxlQXZhaWxhYmxlV2FpdGVyczsgYW5pbWF0aW9u
OyApIHsKLSAgICAgICAgQW5pbWF0aW9uQmFzZSogbmV4dEFuaW1hdGlvbiA9IGFuaW1hdGlvbi0+
bmV4dCgpOwotICAgICAgICBhbmltYXRpb24tPnNldE5leHQoMCk7Ci0gICAgICAgIGFuaW1hdGlv
bi0+c3R5bGVBdmFpbGFibGUoKTsKLSAgICAgICAgYW5pbWF0aW9uID0gbmV4dEFuaW1hdGlvbjsK
LSAgICB9Ci0gICAgCi0gICAgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMgPSAwOwotICAgIG1fbGFz
dFN0eWxlQXZhaWxhYmxlV2FpdGVyID0gMDsKKyAgICBXYWl0aW5nQW5pbWF0aW9uc1NldDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYmVnaW4oKTsKKyAg
ICBXYWl0aW5nQW5pbWF0aW9uc1NldDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlLmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgICgqaXQpLT5zdHlsZUF2YWlsYWJsZSgpOworCisgICAgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlLmNsZWFyKCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFk
ZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24sIGJv
b2wgd2lsbEdldFJlc3BvbnNlKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UqIGFu
aW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCiB7CiAgICAgLy8gSWYgd2lsbEdldFJlc3Bv
bnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IHdhaXRpbmcg
Zm9yIGEgcmVzcG9uc2UKICAgICAvLyAod2hpY2ggd2lsbCBjb21lIGluIGFzIGEgY2FsbCB0byBu
b3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgpAQCAtNDMxLDU0ICs0MDgsMzggQEAgdm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFu
aW1hdGlvbkJhc2UqIGEKICAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNvZnR3YXJl
IGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCiAgICAgLy8g
dXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KICAgICAvLwotICAgIEFTU0VSVCghYW5pbWF0aW9u
LT5uZXh0KCkpOwogICAgIAogICAgIGlmICh3aWxsR2V0UmVzcG9uc2UpCiAgICAgICAgIG1fd2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlID0gdHJ1ZTsKICAgICAKLSAgICBpZiAobV9zdGFydFRp
bWVSZXNwb25zZVdhaXRlcnMpCi0gICAgICAgIG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNlV2FpdGVy
LT5zZXROZXh0KGFuaW1hdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBtX3N0YXJ0VGltZVJlc3Bv
bnNlV2FpdGVycyA9IGFuaW1hdGlvbjsKLSAgICAgICAgCi0gICAgbV9sYXN0U3RhcnRUaW1lUmVz
cG9uc2VXYWl0ZXIgPSBhbmltYXRpb247Ci0gICAgYW5pbWF0aW9uLT5zZXROZXh0KDApOwotfQot
Ci12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tU3RhcnRUaW1lUmVz
cG9uc2VXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92ZSkKLXsKLSAgICBB
bmltYXRpb25CYXNlKiBwcmV2QW5pbWF0aW9uID0gMDsKLSAgICBmb3IgKEFuaW1hdGlvbkJhc2Uq
IGFuaW1hdGlvbiA9IG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzOyBhbmltYXRpb247IGFuaW1h
dGlvbiA9IGFuaW1hdGlvbi0+bmV4dCgpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24gPT0gYW5p
bWF0aW9uVG9SZW1vdmUpIHsKLSAgICAgICAgICAgIGlmIChwcmV2QW5pbWF0aW9uKQotICAgICAg
ICAgICAgICAgIHByZXZBbmltYXRpb24tPnNldE5leHQoYW5pbWF0aW9uLT5uZXh0KCkpOwotICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJz
ID0gYW5pbWF0aW9uLT5uZXh0KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtX2xh
c3RTdGFydFRpbWVSZXNwb25zZVdhaXRlciA9PSBhbmltYXRpb24pCi0gICAgICAgICAgICAgICAg
bV9sYXN0U3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXIgPSBwcmV2QW5pbWF0aW9uOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgYW5pbWF0aW9uVG9SZW1vdmUtPnNldE5leHQoMCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJldkFuaW1hdGlvbiA9IGFuaW1hdGlvbjsKLSAgICB9CisgICAgbV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmFkZChhbmltYXRpb24pOworfQor
Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlKiBhbmltYXRpb25Ub1JlbW92
ZSkKK3sKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVtb3Zl
KGFuaW1hdGlvblRvUmVtb3ZlKTsKICAgICAKLSAgICBpZiAoIW1fc3RhcnRUaW1lUmVzcG9uc2VX
YWl0ZXJzKQorICAgIGlmICghbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
LmlzRW1wdHkoKSkKICAgICAgICAgbV93YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UgPSBmYWxz
ZTsKIH0KIAogdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9u
c2UoZG91YmxlIHRpbWUpCiB7CiAgICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5k
IHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLSAgICBmb3IgKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlv
biA9IG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzOyBhbmltYXRpb247ICkgewotICAgICAgICBB
bmltYXRpb25CYXNlKiBuZXh0QW5pbWF0aW9uID0gYW5pbWF0aW9uLT5uZXh0KCk7Ci0gICAgICAg
IGFuaW1hdGlvbi0+c2V0TmV4dCgwKTsKLSAgICAgICAgYW5pbWF0aW9uLT5vbkFuaW1hdGlvblN0
YXJ0UmVzcG9uc2UodGltZSk7Ci0gICAgICAgIGFuaW1hdGlvbiA9IG5leHRBbmltYXRpb247Ci0g
ICAgfQorCisgICAgV2FpdGluZ0FuaW1hdGlvbnNTZXQ6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmJlZ2luKCk7CisgICAgV2FpdGlu
Z0FuaW1hdGlvbnNTZXQ6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5lbmQoKTsKKyAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KQor
ICAgICAgICAoKml0KS0+b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHRpbWUpOwogICAgIAotICAg
IG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzID0gMDsKLSAgICBtX2xhc3RTdGFydFRpbWVSZXNw
b25zZVdhaXRlciA9IDA7CisgICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3Bv
bnNlLmNsZWFyKCk7CisgICAgbV93YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UgPSBmYWxzZTsK
K30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVt
b3ZlZChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit7CisgICAgcmVtb3ZlRnJvbUFuaW1hdGlv
bnNXYWl0aW5nRm9yU3R5bGUoYW5pbWF0aW9uKTsKKyAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShhbmltYXRpb24pOwogfQogCiBQYXNzUmVmUHRyPFdl
YktpdEFuaW1hdGlvbkxpc3Q+IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25z
Rm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oCmluZGV4IDg4YjgyYTRmMWM1OWM1OTU2ZWU0ZDY2MjMxMWIzNzI3NzBkMmY0ZmIuLjBmOWUw
NzY2NTFiMzg4ODVkNGEyZjkyNjcyMjE5NjY3MDM1YTQ0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpAQCAtODgsMTIgKzg5LDE0IEBAIHB1YmxpYzoK
ICAgICB2b2lkIGVuZEFuaW1hdGlvblVwZGF0ZSgpOwogICAgIHZvaWQgcmVjZWl2ZWRTdGFydFRp
bWVSZXNwb25zZShkb3VibGUpOwogICAgIAotICAgIHZvaWQgYWRkVG9TdHlsZUF2YWlsYWJsZVdh
aXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsKLSAgICB2b2lkIHJlbW92ZUZyb21TdHlsZUF2YWlsYWJs
ZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqKTsgICAgCi0gICAgCi0gICAgdm9pZCBhZGRUb1N0YXJ0
VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3BvbnNl
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1hdGlv
bkJhc2UqKTsgICAgCi0gICAgCisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSopOworICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoQW5pbWF0aW9uQmFzZSopOworCisgICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSosIGJvb2wgd2lsbEdldFJlc3Bv
bnNlKTsKKyAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKEFuaW1hdGlvbkJhc2UqKTsKKworICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChBbmltYXRpb25CYXNlKik7CisKICAgICBQYXNzUmVmUHRyPFdlYktpdEFuaW1hdGlvbkxpc3Q+
IGFuaW1hdGlvbnNGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QqKSBjb25zdDsKICAgICAKIHByaXZh
dGU6CkBAIC0xMjIsMTEgKzEyNSwxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8Tm9k
ZT4gPiBtX25vZGVDaGFuZ2VzVG9EaXNwYXRjaDsKICAgICAKICAgICBkb3VibGUgbV9iZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWU7Ci0gICAgQW5pbWF0aW9uQmFzZSogbV9zdHlsZUF2YWlsYWJsZVdh
aXRlcnM7Ci0gICAgQW5pbWF0aW9uQmFzZSogbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0ZXI7Ci0g
ICAgCi0gICAgQW5pbWF0aW9uQmFzZSogbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnM7Ci0gICAg
QW5pbWF0aW9uQmFzZSogbV9sYXN0U3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXI7CisKKyAgICB0eXBl
ZGVmIEhhc2hTZXQ8UmVmUHRyPEFuaW1hdGlvbkJhc2U+ID4gV2FpdGluZ0FuaW1hdGlvbnNTZXQ7
CisgICAgV2FpdGluZ0FuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlOwor
ICAgIFdhaXRpbmdBbmltYXRpb25zU2V0IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVS
ZXNwb25zZTsKICAgICBib29sIG1fd2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlOwogfTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlv
bi5jcHAKaW5kZXggOGI5YzEzZGRlODVkMzRkYzg3NDNkNWQyMTdiYWU5M2YzOGU5ZGJjNy4uYjc0
NTNjM2E4NjUxMmY0ZTJmNzUxZmVhNzk1ZGZjYzM3MTRhNjRiMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCkBAIC00NCw2
ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIENvbXBvc2l0ZUFuaW1hdGlvbjo6fkNvbXBv
c2l0ZUFuaW1hdGlvbigpCiB7CiAgICAgLy8gVG9zcyB0aGUgcmVmcyB0byBhbGwgYW5pbWF0aW9u
cworICAgIAogICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jbGVhcigpOwogfQpAQCAtNTYsNiArNTcsNyBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6Y2xlYXJSZW5kZXJlcigpCiAgICAgICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIHRyYW5zaXRpb25zRW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICAg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gdHJhbnNpdGlvbnNFbmQ7ICsraXQpIHsKICAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiB0cmFuc2l0aW9uID0gaXQtPnNlY29uZC5nZXQoKTsK
KyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZCh0cmFuc2l0aW9uKTsKICAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyUmVuZGVyZXIoKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTY0LDYgKzY2LDcgQEAgdm9pZCBDb21wb3NpdGVBbmltYXRp
b246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICBBbmltYXRpb25OYW1lTWFwOjpjb25zdF9pdGVy
YXRvciBhbmltYXRpb25zRW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CiAgICAgICAg
IGZvciAoQW5pbWF0aW9uTmFtZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5iZWdpbigpOyBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgICAgICAg
ICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoYW5pbSk7CiAg
ICAgICAgICAgICBhbmltLT5jbGVhclJlbmRlcmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC0x
NzUsOCArMTc4LDEwIEBAIHZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSoKICAgICBlbmQgPSBtX3RyYW5z
aXRpb25zLmVuZCgpOwogICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewog
ICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7Ci0gICAg
ICAgIGlmICghYW5pbS0+YWN0aXZlKCkpCisgICAgICAgIGlmICghYW5pbS0+YWN0aXZlKCkpIHsK
KyAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChhbmltKTsKICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChhbmltLT5hbmltYXRpbmdQ
cm9wZXJ0eSgpKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8vIE5vdyByZW1vdmUgdGhlIHRy
YW5zaXRpb25zIGZyb20gdGhlIGxpc3QKQEAgLTI1Niw2ICsyNjEsNyBAQCB2b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVy
ZXIsIFJlbmRlcgogICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbioga2V5ZnJhbWVBbmltID0gaXQt
PnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYgKGtleWZyYW1lQW5pbS0+aW5kZXgoKSA8IDApIHsK
ICAgICAgICAgICAgIGFuaW1zVG9CZVJlbW92ZWQuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgp
LmltcGwoKSk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoa2V5ZnJhbWVBbmltKTsKICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+Y2xl
YXJSZW5kZXJlcigpOwogICAgICAgICB9CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86366</attachid>
            <date>2011-03-21 14:36:09 -0700</date>
            <delta_ts>2011-03-21 14:47:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-56325-20110322083605.patch</filename>
            <type>text/plain</type>
            <size>26550</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODEzMDMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlNjFlOTMzNTI4NWI3NDM4ZmZiMjJh
OWJlMGZmY2Q1NjEzNTFkMjdjLi4wYzI2OWFjM2IwMGIyMWQyYjA3Y2M0NmRiYTg0OTgwNzkwODRk
ZmU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTEtMDMtMTggIERlYW4gSmFja3NvbiAgPGRp
bm9AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjMyNQorICAg
ICAgICBBU1NFUlRJT04gRkFJTEVEOiBwYXVzZWQoKSBpbiBBbmltYXRpb25CYXNlOjp1cGRhdGVT
dGF0ZU1hY2hpbmUoKQorCisgICAgICAgIEFkZCBhIHRlc3QgdGhhdCB0cmlnZ2VycyB0aGUgYXNz
ZXJ0aW9uIGJ5IHJlbW92aW5nIHRoZSA8Ym9keT4KKyAgICAgICAgZWxlbWVudCBhbmQgcmUtaW5z
ZXJ0aW5nIGl0LgorCisgICAgICAgIFdoaWxlIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvIHRoaXMg
YnVnLCB0aGUKKyAgICAgICAgdHJhbnNmb3JtLW9yaWdpbi12cy1mdW5jdGlvbnMgdGVzdCB3b3Vs
ZCBvY2Nhc2lvbmFsbHkgZmFpbCBiZWNhdXNlIGl0CisgICAgICAgIGRlcGVuZGVkIG9uIHRoZSBv
cmRlciBvZiBldmVudHMgYmVpbmcgZmlyZWQuIFRoZSB1cGRhdGUgdG8gdGhlIHdheQorICAgICAg
ICBhbmltYXRpb25zIGFyZSBrZWVwaW5nIHRoZWlyIHN0YXRlIHRyaWdnZXJlZCB0aGlzIG1vcmUg
b2Z0ZW4uIE5vdyB0aGUKKyAgICAgICAgb3V0cHV0IGlzIHNvcnRlZCBiZWZvcmUgZmluaXNoaW5n
IHRoZSB0ZXN0LgorCisgICAgICAgICogYW5pbWF0aW9ucy8zZC90cmFuc2Zvcm0tb3JpZ2luLXZz
LWZ1bmN0aW9ucy5odG1sOgorICAgICAgICAqIGFuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNo
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9hbmltYXRpb25zL2JvZHktcmVt
b3ZhbC1jcmFzaC1leHBlY3RlZC5jaGVja3N1bTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
bWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLWV4cGVjdGVkLnBuZzogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisKIDIwMTEtMDMtMTYgIERhdmlkIExldmluICA8bGV2aW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVwZGF0ZSB0ZXN0IGV4cGVjdGF0aW9ucyBkdWUgdG8gcjgxMjgw
IChtZWRpYS9jb250cm9scy13aXRob3V0LXByZWxvYWQuaHRtbCksCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9hbmltYXRpb25zLzNkL3RyYW5zZm9ybS1vcmlnaW4tdnMtZnVuY3Rpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy9hbmltYXRpb25zLzNkL3RyYW5zZm9ybS1vcmlnaW4tdnMtZnVuY3Rpb25z
Lmh0bWwKaW5kZXggOWQ5OTc4ZGY5MTlhZjljMjA5ZDhlMmY5MDdlYWM1Mzk0MDAzMzcwZi4uNzYy
NDdkMDQwNGEzZjllNGZhYWNiMDJlZTNkMzFiOWRmNTcyMjBkNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvYW5pbWF0aW9ucy8zZC90cmFuc2Zvcm0tb3JpZ2luLXZzLWZ1bmN0aW9ucy5odG1sCisr
KyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvM2QvdHJhbnNmb3JtLW9yaWdpbi12cy1mdW5jdGlv
bnMuaHRtbApAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CiAgICAgICB9CiAKLSAgICAgIHJlc3VsdCA9ICIiOworICAgICAgcmVz
dWx0RW50cmllcyA9IFtdOwogCiAgICAgICBjb25zdCBleHBlY3RlZCA9IHsKICAgICAgICAgICAi
YjEiIDogWyAwLDAsLTEsMCwgMCwxLDAsMCwgMSwwLDAsMCwgMCwwLDAsMSBdLApAQCAtODcsMTcg
Kzg3LDE4IEBACiAgICAgICAgICAgICAgIHZhciBhY3R1YWwgPSBwYXJzZUZsb2F0KGFycmF5W2ld
KTsKICAgICAgICAgICAgICAgdmFyIGV4cGVjdCA9IGV4cGVjdGVkW2lkXVtpXTsKICAgICAgICAg
ICAgICAgaWYgKCFpc0VxdWFsKGFjdHVhbCwgZXhwZWN0KSkgewotICAgICAgICAgICAgICAgICAg
cmVzdWx0ICs9ICJGQUlMKGVsZW1lbnQgJyIraWQrIicgbWF0cml4WyIraSsiXScgd2FzOiIrYWN0
dWFsKyIsIGV4cGVjdGVkOiIrZXhwZWN0KyIpPGJyPiI7CisgICAgICAgICAgICAgICAgICByZXN1
bHRFbnRyaWVzLnB1c2goIkZBSUwoZWxlbWVudCAnIitpZCsiJyBtYXRyaXhbIitpKyJdJyB3YXM6
IithY3R1YWwrIiwgZXhwZWN0ZWQ6IitleHBlY3QrIik8YnI+Iik7CiAgICAgICAgICAgICAgICAg
ICBwYXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICB9CiAgICAgICAgICAg
CiAgICAgICAgICAgaWYgKHBhc3MpCi0gICAgICAgICAgICByZXN1bHQgKz0gIlBBU1MoZWxlbWVu
dCAnIitpZCsiJyBtYXRjaGVzIGV4cGVjdGVkIHZhbHVlKTxicj4iOworICAgICAgICAgICAgcmVz
dWx0RW50cmllcy5wdXNoKCJQQVNTKGVsZW1lbnQgJyIraWQrIicgbWF0Y2hlcyBleHBlY3RlZCB2
YWx1ZSk8YnI+Iik7CiAgICAgICAgICAgCiAgICAgICAgICAgbnVtU25hcHNob3RzKys7CiAgICAg
ICAgICAgaWYgKG51bVNuYXBzaG90cyA9PSAyKSB7Ci0gICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5pbm5lckhUTUwgPSByZXN1bHQ7CisgICAgICAgICAgICAg
IHJlc3VsdEVudHJpZXMuc29ydCgpOworICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgncmVzdWx0JykuaW5uZXJIVE1MID0gcmVzdWx0RW50cmllcy5qb2luKCIiKTsKICAgICAg
ICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKICAgICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKICAgICAgICAgICB9CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2JvZHktcmVtb3ZhbC1jcmFzaC5odG1sIGIv
TGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2guaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMWIyZTI1MGVmYmRjMzczOWRkZWMzYzNlZGVlNzA1OGM4YzZhOWIwCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2guaHRtbApAQCAt
MCwwICsxLDM1IEBACis8aHRtbD4KKzxoZWFkPgorICA8c3R5bGUgaWQ9ImEiIHR5cGU9InRleHQv
Y3NzIiBtZWRpYT0ic2NyZWVuIj4KKyAgICAjYm94IHsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9u
LWR1cmF0aW9uOiAyczsKKyAgICAgIC13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjog
bGluZWFyOworICAgICAgLXdlYmtpdC1hbmltYXRpb24tbmFtZTogYW5pbTsKKyAgICAgIGJhY2tn
cm91bmQtY29sb3I6IGJsdWU7CisgICAgICB3aWR0aDogMTAwcHg7CisgICAgICBoZWlnaHQ6IDEw
MHB4OworICAgIH0KKyAgICBALXdlYmtpdC1rZXlmcmFtZXMgYW5pbSB7CisgICAgICAgIGZyb20g
eyAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDApIHNjYWxlKDEsMSk7IH0KKyAgICAgICAgdG8g
ICB7IC13ZWJraXQtdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKSBzY2FsZSgyLDQpOyB9CisgICAg
fQorICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJib3giPgorPC9kaXY+Cis8
L2JvZHk+Cis8L2h0bWw+CisKKzxzY3JpcHQ+IAorZnVuY3Rpb24gY3Jhc2goKSB7CisgICAgLy8g
dHJpZ2dlciBzdHlsZSBwcm9jZXNzaW5nCisgICAgZG9jdW1lbnQuYWxpbmtDb2xvciA9ICJhYWEi
OworICAgIC8vIG5vdyByZW1vdmUgdGhlIGJvZHkgYW5kIGluc2VydCBpdCBpbiBhIGRpZmZlcmVu
dCBsb2NhdGlvbgorICAgIHZhciBlbGVtID0gZG9jdW1lbnQuYm9keTsKKyAgICBlbGVtLnBhcmVu
dE5vZGUucmVtb3ZlQ2hpbGQoZWxlbSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImEi
KS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtLCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
YSIpLm5leHRTaWJsaW5nKTsKK30KKworY3Jhc2goKTsKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLWV4
cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9k
eS1yZW1vdmFsLWNyYXNoLWV4cGVjdGVkLmNoZWNrc3VtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2OWEzNzFiZDE2
NGYwNjU3N2RlMjJhNTQ5Y2FiODRjNGU3MjkzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2gtZXhwZWN0ZWQu
Y2hlY2tzdW0KQEAgLTAsMCArMSBAQAorODUzZGUwMDU2N2QxMjFiZWEwYjdiZWNlNjZhNWQ2MWMK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2gtZXhwZWN0ZWQucG5nIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2FuaW1hdGlvbnMvYm9keS1yZW1vdmFsLWNyYXNoLWV4cGVj
dGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4zODkyMTY4ODZkN2NmOTNlOTEyZjNjZDc5NTliNmU1MGFhOTUy
MzY0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDQ2Mwp6Y21lQVNATj8ob2xIeWB1VkJxIWlh
MHl+eVV7K3ZZVjJhPmkxQiVRbFlicFM4LWVvI0YyWTVPPUQrQ25mcilCMSgKekdCOHZ5d3VZUn43
SXFaKlhPXzN9ZilZbm1IczdYLTJ9KylrdDIxMSRuRWUkQCVJM0soenMrPyppbX5VbEpoUnZECnop
VjQwfGM9RzY/KTstc14zKSVsUyRXP3R2KGY0WU5hQER4RVN8ZSRweGJEWlpjfE9+Z3pCK0tPPyg7
cUtfcUYrRAp6X1pmSkxFfTQ5N1YwcHJPSlpPPCVXPUBTJCl9SWNCekQxbWxDYVImZy19dEdwSVdg
eW50YlRyQGlvWT5CPn5RdCgKekA9Zkp5WEk8SmhpQG9LcSF2cHRPSD89bXI3Y2I8QjZrX1ZJeHhZ
fkpjblFiLSQyVUhgPjlfUSZ0VD8hcFUpJU9iCnpxKjlIOHNxVlJZLXlPa2NSV0NhPGRzc35RU3tQ
KEU9WCY+KT4kMj5iZDE9UV4yPC1LcnV4JDY0Y2RMXlkmaGgpawp6SCh+R0dGTGkjS0A3V3p2Smo1
LXoqNH1NTEA0VC0pU000N3FLM3d3Yk5TbSNVZ3oxK2IzOExHalJ7ayhPQm9aJisKenRHKzB0QFRN
TmAjfkpKWGhKRXNDRHd0cSNEa1pVQElMZ0VTeD0tR1pVRzEjM1lTKUY9S1BuRmtkfDI1cG9QT2Bo
CnotU0A3eW5BUktjJD97MD8lO05QMzVPOEhsb1V0TG1xMEw2aCZ9MzdRejRCQHs+Qi1lYnI3QnN3
T09qa1JJIyEkQQp6dkUzZkg8Z1UjPjRXK148JlJhUHF7Yy0lS3dmPzA0KTVAUXhWPmE5ZmAjeHB1
PnsrYCRKK01DZGJtbVNleCRCb3QKekpUQ1QpdENAUEdZO3c1IXZeQUFnZHVGfG52VlJqay1TQW5I
WTUkU3A0WmxDPyMhbyNuVTkoNXo9O1A0T3VlQDdJCnpxWVRhTyYoRXAxd3Rie2BVVF5FUTs8Y1VL
PTMlcF5yfmwzSmAyQjl4cDJeUWJmQk1JTHtyRCZTPzIrVjBudWNtKwp6VUMkTGVyeXRlKElPJkc+
WVZKbn54eUwhP1BIb2U/bHNvYTQlR0hFflMkbj9mJEokMyU+fipXPmA1SEp5XjMwYD4KeiZoUGJ5
dntGcHc/JlFuPSlxbmY9QU1xI095UG5WMlZBOVdkYUFNfUorfkM2WjB0LWBAPGB1N0Y2NW9IWl9R
U1RrCno/OFM4IWVeP0BIUipTNi1HTSVybWhmJGBpeS1NemQ9OFZoSnJrJUE2WVMpPVJkRHFLUk5r
TH08WmFXN0JVMDEhSAp6Pk1nYztXQHlzT3ZLdW9tJWpVQH12fj5EQFdWdSlCPFhgSlEzVTJ0akE/
V0FOSDk8Ryl7R19mbVBYQ3BFVjkjSUkKejB+T3QhMz05ZWtvLVUzZDZedzdNWnslZkE7OSlVTF8m
PTk5c2JscFYqMEBjVj8jd0djRXZWcW96YCk0RiFYY3BHCnpwZGVzenUjRlNLaDZ2VSRHQ21Sbk5r
UD98VX01b2ElazYrXjBFI2pgVmpxPHM0V0g1VTBuUzZDYEQzKHY3JWQtMQp6PmohOXNJJEElRHdo
dTx6TjJCZS0oZX5rSmAqNV48MjwmNXl3dlJ7SyREezR6KGYwOVpgeHJkbkhyaFdKP0hgUXgKejRA
VWIzcXkyLT97PXNQZlY2PVpRK0NMaGRVbVRyWjlpM21NX1diKEFgRW9pODQ2Ri00WVhMXnY4bCFF
RShZRDVECmpUVnU0WEcxJUd+am9kSDhJbzcwfm5JSGpOeFg5cT8+Z1RlfkRXTTRmcWtHd0YKCmxp
dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9hbmltYXRpb25zL2JvZHktcmVtb3ZhbC1jcmFzaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2gtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmVkMWY5OTBmZWEwY2YzYjMwNjJlN2FlNGMyNjMwODIxYWIyMWM1ZTMKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvYW5pbWF0aW9ucy9ib2R5
LXJlbW92YWwtY3Jhc2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNCBAQAorbGF5ZXIgYXQgKDAs
MCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXll
ciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNp
emUgODAweDYwMApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk2ZTEyODQ0YjdlZDg3YzBlOGQ0MTA0MjE5ZjlkMWI2
ZDlmNmY1YjUuLmZlOTFhOTYzN2Y5YWQzNWY2ZGVmZjljMDIwMDM3OTZmNDRhY2ZjYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSw1MiBAQAorMjAxMS0wMy0xOCAgRGVhbiBKYWNrc29uICA8ZGlub0Bh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU2MzI1CisgICAgICAg
IEFTU0VSVElPTiBGQUlMRUQ6IHBhdXNlZCgpIGluIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRl
TWFjaGluZSgpCisKKyAgICAgICAgQW5pbWF0aW9uQmFzZSBoYWQgYSBjdXN0b20gbGlua2VkLWxp
c3Qvc2VsZi1wb2ludGVyIGZvciBrZWVwaW5nCisgICAgICAgIHRyYWNrIG9mIGFuaW1hdGlvbnMg
dGhhdCBuZWVkZWQgdG8gYmUgbm90aWZpZWQgb2Ygc3R5bGUgdXBkYXRlcworICAgICAgICBhbmQg
c3RhcnQgcHJvZ3Jlc3MuIFRoaXMgY2F1c2VkIHByb2JsZW1zIHdoZW4gQW5pbWF0aW9uQmFzZSB3
YXMKKyAgICAgICAgZGVzdHJveWVkLCBzaW5jZSB0aGUgcG9pbnRlciB3YXNuJ3QgbWFuYWdlZCBp
biBhbnkgd2F5LiBJIHJlcGxhY2VkCisgICAgICAgIHRoZXNlIHBvaW50ZXJzIHdpdGggSGFzaFNl
dHMgYW5kIG1vdmVkIHRoZSBjb2RlIHRoYXQgcmVtb3ZlcyBhbmltYXRpb25zCisgICAgICAgIGZy
b20gdGhlIHNldHMgaW50byBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSwgd2hlcmUgaXQgYmVs
b25ncy4KKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uIGlzIGFsc28gbW9yZSBjYXJlZnVsIHRv
IHRlbGwgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUKKyAgICAgICAgd2hlbiBpdCBubyBsb25n
ZXIgbmVlZHMgdG8ga2VlcCB0cmFjayBvZiB3YWl0aW5nIGFuaW1hdGlvbnMuCisKKyAgICAgICAg
VGhpcyBzaG91bGQgc3RvcCB0aGUgc3R5bGUgdXBkYXRlcyBiZWluZyBjYWxsZWQgb24gbm9uLWFj
dGl2ZSBhbmltYXRpb25zCisgICAgICAgICh3aGljaCB3YXMgdGhlIGNhdXNlIG9mIHRoZSBzdGF0
ZSBtYWNoaW5lIGVycm9yIGhlcmUpIGFuZCBzaG91bGQgYWxzbworICAgICAgICBzdG9wIGEgZmV3
IG9mIHRoZSByZWxhdGVkIGZsYWtleSB0ZXN0IGZhaWx1cmVzIGFuZCBvY2Nhc2lvbmFsIGNyYXNo
ZXMuCisKKyAgICAgICAgVGVzdDogYW5pbWF0aW9ucy9ib2R5LXJlbW92YWwtY3Jhc2guaHRtbAor
CisgICAgICAgICogcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZSk6CisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5oOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQmFzZTo6
fkFuaW1hdGlvbkJhc2UpOgorICAgICAgICAtIFJlbW92ZSB0aGUgbGlua2VkLWxpc3QKKyAgICAg
ICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVBdmFp
bGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFk
ZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSk6CisgICAgICAgIChXZWJD
b3JlOjpBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6QW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKToKKyAgICAg
ICAgLSBOZXcgbWV0aG9kIHRvIHJlbW92ZSBhbmltYXRpb25zIGZyb20gdGhlIHdhaXRpbmcgbGlz
dHMKKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
OgorICAgICAgICAtIHVzZSBhIEhhc2hTZXQgcmF0aGVyIHRoYW4gYW4gQW5pbWF0aW9uQmFzZSog
cG9pbnRlci4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRp
b25zKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJh
bWVBbmltYXRpb25zKToKKyAgICAgICAgLSByZW1vdmUgdGhlIGFuaW1hdGlvbnMgYW5kIHRyYW5z
aXRpb25zIGZyb20gdGhlIGxpc3RzIHdoZW4gd2Uga25vdworICAgICAgICAgIHRoZXkgYXJlIG5v
IGxvbmdlciBhY3RpdmUgKHJhdGhlciB0aGFuIHdhaXRpbmcgZm9yIHRoZSBBbmltYXRpb25CYXNl
CisgICAgICAgICAgdG8gZG8gaXQgd2hlbiBkZXN0cnVjdGluZykKKwogMjAxMS0wMy0xNiAgS2Vp
dGggS3l6aXZhdCAgPGtlaXRoLmt5eml2YXRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEFuZHJlYXMgS2xpbmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Fu
aW1hdGlvbkJhc2UuY3BwCmluZGV4IDM4MjJkMzgzNzliZDQxYzJkZGE4ZjIyZTBiMmI4OGY0MzI2
MGIwNjEuLjZiNDkwZWE3MGIwNDUzNmMzZDY1ZTAzYjQ5YWM0ODk2MWViNWMyNTEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCkBAIC03OTgs
NyArNzk4LDYgQEAgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24q
IHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIKICAgICAsIG1faXNBY2NlbGVyYXRl
ZChmYWxzZSkKICAgICAsIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQoZmFsc2UpCiAgICAg
LCBtX25leHRJdGVyYXRpb25EdXJhdGlvbigtMSkKLSAgICAsIG1fbmV4dCgwKQogewogICAgIC8v
IENvbXB1dGUgdGhlIHRvdGFsIGR1cmF0aW9uCiAgICAgbV90b3RhbER1cmF0aW9uID0gLTE7CkBA
IC04MDYsMTcgKzgwNSw2IEBAIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5p
bWF0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyCiAgICAgICAgIG1fdG90
YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJh
dGlvbkNvdW50KCk7CiB9CiAKLUFuaW1hdGlvbkJhc2U6On5BbmltYXRpb25CYXNlKCkKLXsKLSAg
ICAvLyBJZiB3ZSBoYXZlIGEgcmVuZGVyZXIsIHJlbW92ZSBvdXJzZWx2ZXMgZnJvbSB0aGUgd2Fp
dCBsaXN0cy4gV2UgY2FuIGdldCBpbnRvCi0gICAgLy8gdGhlIHNpdHVhdGlvbiB3aGVyZSB0aGVy
ZSBpcyBubyByZW5kZXJlciB3aGVuIHRoZSBiaW5kaW5nIGhhcyBhIHJlZmVyZW5jZSB0bwotICAg
IC8vIHRoaXMgb2JqZWN0LCBidXQgdGhlIGVsZW1lbnQgaGFzIHNpbmNlIGJlZW4gcmVtb3ZlZCBm
cm9tIHRoZSBkb2N1bWVudC4KLSAgICBpZiAobV9vYmplY3QpIHsKLSAgICAgICAgbV9jb21wQW5p
bS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tU3R5bGVBdmFpbGFibGVXYWl0TGlz
dCh0aGlzKTsKLSAgICAgICAgbV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1v
dmVGcm9tU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCh0aGlzKTsKLSAgICB9Ci19Ci0KIGJvb2wg
QW5pbWF0aW9uQmFzZTo6cHJvcGVydGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCiB7CiAgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsK
QEAgLTk0MSw3ICs5MjksNyBAQCB2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGlu
ZShBbmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogICAgIC8vIElmIHdlIGdldCBB
bmltYXRpb25TdGF0ZUlucHV0UmVzdGFydEFuaW1hdGlvbiB0aGVuIHdlIGZvcmNlIGEgbmV3IGFu
aW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZS4KICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dE1ha2VOZXcpIHsKICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlv
blN0YXRlU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBBbmltLT5h
bmltYXRpb25Db250cm9sbGVyKCktPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KHRo
aXMpOworICAgICAgICAgICAgbV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1v
dmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSh0aGlzKTsKICAgICAgICAgbV9hbmltU3Rh
dGUgPSBBbmltYXRpb25TdGF0ZU5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwogICAgICAg
ICBtX3BhdXNlVGltZSA9IC0xOwpAQCAtOTUzLDcgKzk0MSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFz
ZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0p
CiAKICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dFJlc3RhcnRBbmltYXRpb24p
IHsKICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IEFuaW1hdGlvblN0YXRlU3RhcnRXYWl0U3R5
bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25Db250cm9sbGVy
KCktPnJlbW92ZUZyb21TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KHRoaXMpOworICAgICAgICAgICAg
bV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZW1vdmVGcm9tQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdHlsZSh0aGlzKTsKICAgICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0
ZU5ldzsKICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwogICAgICAgICBtX3BhdXNlVGltZSA9IC0x
OwpAQCAtOTY4LDcgKzk1Niw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAKICAgICBpZiAoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dEVuZEFuaW1hdGlvbikgewogICAgICAgICBpZiAobV9hbmlt
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGVTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAg
ICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVtb3ZlRnJvbVN0eWxlQXZh
aWxhYmxlV2FpdExpc3QodGhpcyk7CisgICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25D
b250cm9sbGVyKCktPnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKHRoaXMpOwog
ICAgICAgICBtX2FuaW1TdGF0ZSA9IEFuaW1hdGlvblN0YXRlRG9uZTsKICAgICAgICAgZW5kQW5p
bWF0aW9uKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTEwMDgsNyArOTk2LDcgQEAgdm9pZCBBbmlt
YXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJs
ZSBwYXJhbSkKICAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CiAgICAgICAgICAg
ICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3Rh
cnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCiAgICAgICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBBbmltYXRpb25TdGF0ZVN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxl
OwotICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRk
VG9TdHlsZUF2YWlsYWJsZVdhaXRMaXN0KHRoaXMpOworICAgICAgICAgICAgICAgIG1fY29tcEFu
aW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KHRoaXMpOwogCiAgICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4g
c3RhcnQgdGhlIGFuaW1hdGlvbgogICAgICAgICAgICAgICAgIGlmIChtX29iamVjdCkKQEAgLTEw
NDMsNyArMTAzMSw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lT2Zmc2V0ID0gLW1fYW5pbWF0aW9uLT5kZWxheSgpOwogICAgICAgICAgICAgICAgICAg
ICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0KTsKIAotICAgICAgICAg
ICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25Db250cm9sbGVyKCktPmFkZFRvU3RhcnRU
aW1lUmVzcG9uc2VXYWl0TGlzdCh0aGlzLCBzdGFydGVkKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9jb21wQW5pbS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5hZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UodGhpcywgc3RhcnRlZCk7CiAgICAgICAgICAgICAgICAgICAg
IG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfSBlbHNlIHsKQEAgLTExNzIsNyArMTE2MCw3IEBAIHZvaWQgQW5pbWF0aW9uQmFzZTo6dXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUgcGFyYW0pCiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0g
c3RhcnRBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBBbmltLT5hbmltYXRpb25Db250cm9sbGVy
KCktPmFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlzdCh0aGlzLCBzdGFydGVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fY29tcEFuaW0tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+YWRk
VG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKHRoaXMsIHN0YXJ0ZWQpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAppbmRleCBjNWFmMGEwZjVhZTgwMDE1NmFmOTA4
ZTZhN2RjNTY4YTI3YjJkNjQ0Li4xYWIxNGUzYWQzMThlOWRkYjg5ZDc0YzNkZTRjZWVmNzc0MDMz
M2YyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5o
CkBAIC01MSw3ICs1MSw3IEBAIGNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgUmVmQ291bnRl
ZDxBbmltYXRpb25CYXNlPiB7CiAKIHB1YmxpYzoKICAgICBBbmltYXRpb25CYXNlKGNvbnN0IEFu
aW1hdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgQ29tcG9zaXRlQW5p
bWF0aW9uKiBjb21wQW5pbSk7Ci0gICAgdmlydHVhbCB+QW5pbWF0aW9uQmFzZSgpOworICAgIHZp
cnR1YWwgfkFuaW1hdGlvbkJhc2UoKSB7IH0KIAogICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIo
KSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQogICAgIHZvaWQgY2xlYXJSZW5kZXJlcigpIHsg
bV9vYmplY3QgPSAwOyB9CkBAIC0xNzMsOSArMTczLDYgQEAgcHVibGljOgogICAgIGRvdWJsZSBn
ZXRFbGFwc2VkVGltZSgpIGNvbnN0OwogICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3
aWxsIGFkanVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KICAgICB2
b2lkIHNldEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0KLSAgICBBbmltYXRpb25CYXNlKiBuZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV9uZXh0OyB9Ci0gICAgdm9pZCBzZXROZXh0KEFuaW1hdGlvbkJhc2Uq
IGFuaW1hdGlvbikgeyBtX25leHQgPSBhbmltYXRpb247IH0KICAgICAKICAgICB2b2lkIHN0eWxl
QXZhaWxhYmxlKCkgCiAgICAgewpAQCAtMjM4LDggKzIzNSw2IEBAIHByb3RlY3RlZDoKICAgICBi
b29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQ7CiAgICAgZG91YmxlIG1fdG90YWxEdXJh
dGlvbiwgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb247CiAgICAgCi0gICAgQW5pbWF0aW9uQmFzZSog
bV9uZXh0OwotICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBlbnN1cmVQcm9wZXJ0eU1h
cCgpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1h
dGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKaW5kZXggYTczMDA2NTgxZmVlYmQxZTc5NjRhNjEyZWIxYjE0NGY4
NWVlYTE1MS4uOTk5Mjk3MDc2Mzg4YTcwMjgyYjU5MDdmZmRjNDYxZTFiNDI4OWVkMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKQEAgLTUzLDEwICs1Myw4IEBAIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSogZnJhbWUpCiAgICAgLCBtX3VwZGF0ZVN0eWxl
SWZOZWVkZWREaXNwYXRjaGVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBk
YXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCkKICAgICAsIG1fZnJhbWUoZnJhbWUpCiAg
ICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZShjQmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
Tm90U2V0KQotICAgICwgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMoMCkKLSAgICAsIG1fbGFzdFN0
eWxlQXZhaWxhYmxlV2FpdGVyKDApCi0gICAgLCBtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVycygw
KQotICAgICwgbV9sYXN0U3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXIoMCkKKyAgICAsIG1fYW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZSgpCisgICAgLCBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lUmVzcG9uc2UoKQogICAgICwgbV93YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoZmFsc2Up
CiB7CiB9CkBAIC0zNjcsNTIgKzM2NSwzMSBAQCB1bnNpZ25lZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKICAgICByZXR1cm4gY291
bnQ7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZFRvU3R5bGVBdmFp
bGFibGVXYWl0TGlzdChBbmltYXRpb25CYXNlKiBhbmltYXRpb24pCit2b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9u
QmFzZSogYW5pbWF0aW9uKQogewotICAgIEFTU0VSVCghYW5pbWF0aW9uLT5uZXh0KCkpOwotICAg
IAotICAgIGlmIChtX3N0eWxlQXZhaWxhYmxlV2FpdGVycykKLSAgICAgICAgbV9sYXN0U3R5bGVB
dmFpbGFibGVXYWl0ZXItPnNldE5leHQoYW5pbWF0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
c3R5bGVBdmFpbGFibGVXYWl0ZXJzID0gYW5pbWF0aW9uOwotICAgICAgICAKLSAgICBtX2xhc3RT
dHlsZUF2YWlsYWJsZVdhaXRlciA9IGFuaW1hdGlvbjsKLSAgICBhbmltYXRpb24tPnNldE5leHQo
MCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21TdHls
ZUF2YWlsYWJsZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQotewot
ICAgIEFuaW1hdGlvbkJhc2UqIHByZXZBbmltYXRpb24gPSAwOwotICAgIGZvciAoQW5pbWF0aW9u
QmFzZSogYW5pbWF0aW9uID0gbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnM7IGFuaW1hdGlvbjsgYW5p
bWF0aW9uID0gYW5pbWF0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbiA9PSBh
bmltYXRpb25Ub1JlbW92ZSkgewotICAgICAgICAgICAgaWYgKHByZXZBbmltYXRpb24pCi0gICAg
ICAgICAgICAgICAgcHJldkFuaW1hdGlvbi0+c2V0TmV4dChhbmltYXRpb24tPm5leHQoKSk7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9zdHlsZUF2YWlsYWJsZVdhaXRlcnMg
PSBhbmltYXRpb24tPm5leHQoKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbGFz
dFN0eWxlQXZhaWxhYmxlV2FpdGVyID09IGFuaW1hdGlvbikKLSAgICAgICAgICAgICAgICBtX2xh
c3RTdHlsZUF2YWlsYWJsZVdhaXRlciA9IHByZXZBbmltYXRpb247Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBhbmltYXRpb25Ub1JlbW92ZS0+c2V0TmV4dCgwKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICAvLyBNYWtlIHN1cmUgdGhpcyBhbmltYXRpb24gaXMgbm90IGluIHRoZSBzdGFy
dCB0aW1lIHdhaXRlcnMKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UucmVtb3ZlKGFuaW1hdGlvbik7CisKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUu
YWRkKGFuaW1hdGlvbik7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlv
blRvUmVtb3ZlKQoreworICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoYW5p
bWF0aW9uVG9SZW1vdmUpOwogfQogCiB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
dHlsZUF2YWlsYWJsZSgpCiB7CiAgICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5k
IHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLSAgICBmb3IgKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlv
biA9IG1fc3R5bGVBdmFpbGFibGVXYWl0ZXJzOyBhbmltYXRpb247ICkgewotICAgICAgICBBbmlt
YXRpb25CYXNlKiBuZXh0QW5pbWF0aW9uID0gYW5pbWF0aW9uLT5uZXh0KCk7Ci0gICAgICAgIGFu
aW1hdGlvbi0+c2V0TmV4dCgwKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgp
OwotICAgICAgICBhbmltYXRpb24gPSBuZXh0QW5pbWF0aW9uOwotICAgIH0KLSAgICAKLSAgICBt
X3N0eWxlQXZhaWxhYmxlV2FpdGVycyA9IDA7Ci0gICAgbV9sYXN0U3R5bGVBdmFpbGFibGVXYWl0
ZXIgPSAwOworICAgIFdhaXRpbmdBbmltYXRpb25zU2V0Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
YW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5iZWdpbigpOworICAgIFdhaXRpbmdBbmltYXRpb25z
U2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuZW5k
KCk7CisgICAgZm9yICg7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgKCppdCktPnN0eWxlQXZh
aWxhYmxlKCk7CisKKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuY2xlYXIoKTsKIH0K
IAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9TdGFydFRpbWVSZXNwb25z
ZVdhaXRMaXN0KEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2Up
Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uLCBib29sIHdpbGxH
ZXRSZXNwb25zZSkKIHsKICAgICAvLyBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgdHJ1ZSwgaXQgbWVh
bnMgdGhpcyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2FpdGluZyBmb3IgYSByZXNwb25zZQogICAg
IC8vICh3aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoKSkuCkBAIC00MzEsNTQgKzQwOCwzOCBAQCB2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphZGRUb1N0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSogYQogICAg
IC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAKICAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVk
IGN5Y2xlLgogICAgIC8vCi0gICAgQVNTRVJUKCFhbmltYXRpb24tPm5leHQoKSk7CiAgICAgCiAg
ICAgaWYgKHdpbGxHZXRSZXNwb25zZSkKICAgICAgICAgbV93YWl0aW5nRm9yU3RhcnRUaW1lUmVz
cG9uc2UgPSB0cnVlOwogICAgIAotICAgIGlmIChtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVycykK
LSAgICAgICAgbV9sYXN0U3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXItPnNldE5leHQoYW5pbWF0aW9u
KTsKLSAgICBlbHNlCi0gICAgICAgIG1fc3RhcnRUaW1lUmVzcG9uc2VXYWl0ZXJzID0gYW5pbWF0
aW9uOwotICAgICAgICAKLSAgICBtX2xhc3RTdGFydFRpbWVSZXNwb25zZVdhaXRlciA9IGFuaW1h
dGlvbjsKLSAgICBhbmltYXRpb24tPnNldE5leHQoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21TdGFydFRpbWVSZXNwb25zZVdhaXRMaXN0KEFuaW1h
dGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIEFuaW1hdGlvbkJhc2UqIHByZXZB
bmltYXRpb24gPSAwOwotICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uID0gbV9zdGFy
dFRpbWVSZXNwb25zZVdhaXRlcnM7IGFuaW1hdGlvbjsgYW5pbWF0aW9uID0gYW5pbWF0aW9uLT5u
ZXh0KCkpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbiA9PSBhbmltYXRpb25Ub1JlbW92ZSkgewot
ICAgICAgICAgICAgaWYgKHByZXZBbmltYXRpb24pCi0gICAgICAgICAgICAgICAgcHJldkFuaW1h
dGlvbi0+c2V0TmV4dChhbmltYXRpb24tPm5leHQoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMgPSBhbmltYXRpb24tPm5leHQo
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNl
V2FpdGVyID09IGFuaW1hdGlvbikKLSAgICAgICAgICAgICAgICBtX2xhc3RTdGFydFRpbWVSZXNw
b25zZVdhaXRlciA9IHByZXZBbmltYXRpb247Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICBhbmltYXRpb25Ub1JlbW92ZS0+c2V0TmV4dCgwKTsKLSAgICAgICAgfQotICAgICAgICBwcmV2
QW5pbWF0aW9uID0gYW5pbWF0aW9uOwotICAgIH0KKyAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UuYWRkKGFuaW1hdGlvbik7Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKEFuaW1hdGlvbkJhc2UqIGFuaW1hdGlvblRvUmVtb3ZlKQoreworICAgIG1fYW5pbWF0
aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoYW5pbWF0aW9uVG9SZW1vdmUp
OwogICAgIAotICAgIGlmICghbV9zdGFydFRpbWVSZXNwb25zZVdhaXRlcnMpCisgICAgaWYgKCFt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuaXNFbXB0eSgpKQogICAgICAg
ICBtX3dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSA9IGZhbHNlOwogfQogCiB2b2lkIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShkb3VibGUgdGltZSkKIHsK
ICAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQgc2VuZCB0aGVtIG9uIHRoZWly
IHdheQotICAgIGZvciAoQW5pbWF0aW9uQmFzZSogYW5pbWF0aW9uID0gbV9zdGFydFRpbWVSZXNw
b25zZVdhaXRlcnM7IGFuaW1hdGlvbjsgKSB7Ci0gICAgICAgIEFuaW1hdGlvbkJhc2UqIG5leHRB
bmltYXRpb24gPSBhbmltYXRpb24tPm5leHQoKTsKLSAgICAgICAgYW5pbWF0aW9uLT5zZXROZXh0
KDApOwotICAgICAgICBhbmltYXRpb24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsK
LSAgICAgICAgYW5pbWF0aW9uID0gbmV4dEFuaW1hdGlvbjsKLSAgICB9CisKKyAgICBXYWl0aW5n
QW5pbWF0aW9uc1NldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UuYmVnaW4oKTsKKyAgICBXYWl0aW5nQW5pbWF0aW9uc1NldDo6Y29u
c3RfaXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
LmVuZCgpOworICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgICgqaXQpLT5vbkFu
aW1hdGlvblN0YXJ0UmVzcG9uc2UodGltZSk7CiAgICAgCi0gICAgbV9zdGFydFRpbWVSZXNwb25z
ZVdhaXRlcnMgPSAwOwotICAgIG1fbGFzdFN0YXJ0VGltZVJlc3BvbnNlV2FpdGVyID0gMDsKKyAg
ICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKKyAgICBt
X3dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSA9IGZhbHNlOworfQorCit2b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2Uq
IGFuaW1hdGlvbikKK3sKKyAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShh
bmltYXRpb24pOworICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKGFuaW1hdGlvbik7CiB9CiAKIFBhc3NSZWZQdHI8V2ViS2l0QW5pbWF0aW9uTGlzdD4g
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbnNGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKaW5kZXggODhiODJhNGYx
YzU5YzU5NTZlZTRkNjYyMzExYjM3Mjc3MGQyZjRmYi4uMGY5ZTA3NjY1MWIzODg4NWQ0YTJmOTI2
NzIyMTk2NjcwMzVhNDQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUaW1lci5oIgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CkBAIC04OCwxMiArODksMTQgQEAgcHVibGljOgogICAgIHZvaWQgZW5kQW5pbWF0
aW9uVXBkYXRlKCk7CiAgICAgdm9pZCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKGRvdWJsZSk7
CiAgICAgCi0gICAgdm9pZCBhZGRUb1N0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9uQmFz
ZSopOwotICAgIHZvaWQgcmVtb3ZlRnJvbVN0eWxlQXZhaWxhYmxlV2FpdExpc3QoQW5pbWF0aW9u
QmFzZSopOyAgICAKLSAgICAKLSAgICB2b2lkIGFkZFRvU3RhcnRUaW1lUmVzcG9uc2VXYWl0TGlz
dChBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOwotICAgIHZvaWQgcmVtb3Zl
RnJvbVN0YXJ0VGltZVJlc3BvbnNlV2FpdExpc3QoQW5pbWF0aW9uQmFzZSopOyAgICAKLSAgICAK
KyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlKik7
CisgICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25C
YXNlKik7CisKKyAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZShBbmltYXRpb25CYXNlKiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpOworICAgIHZvaWQgcmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFz
ZSopOworCisgICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UqKTsK
KwogICAgIFBhc3NSZWZQdHI8V2ViS2l0QW5pbWF0aW9uTGlzdD4gYW5pbWF0aW9uc0ZvclJlbmRl
cmVyKFJlbmRlck9iamVjdCopIGNvbnN0OwogICAgIAogcHJpdmF0ZToKQEAgLTEyMiwxMSArMTI1
LDEwIEBAIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxOb2RlPiA+IG1fbm9kZUNoYW5nZXNU
b0Rpc3BhdGNoOwogICAgIAogICAgIGRvdWJsZSBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZTsK
LSAgICBBbmltYXRpb25CYXNlKiBtX3N0eWxlQXZhaWxhYmxlV2FpdGVyczsKLSAgICBBbmltYXRp
b25CYXNlKiBtX2xhc3RTdHlsZUF2YWlsYWJsZVdhaXRlcjsKLSAgICAKLSAgICBBbmltYXRpb25C
YXNlKiBtX3N0YXJ0VGltZVJlc3BvbnNlV2FpdGVyczsKLSAgICBBbmltYXRpb25CYXNlKiBtX2xh
c3RTdGFydFRpbWVSZXNwb25zZVdhaXRlcjsKKworICAgIHR5cGVkZWYgSGFzaFNldDxSZWZQdHI8
QW5pbWF0aW9uQmFzZT4gPiBXYWl0aW5nQW5pbWF0aW9uc1NldDsKKyAgICBXYWl0aW5nQW5pbWF0
aW9uc1NldCBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGU7CisgICAgV2FpdGluZ0FuaW1hdGlv
bnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlOwogICAgIGJvb2wg
bV93YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAppbmRleCA4YjljMTNk
ZGU4NWQzNGRjODc0M2Q1ZDIxN2JhZTkzZjM4ZTlkYmM3Li4yNzQwOWQ5MGMyODdkYjAxNmQ1NjM2
Yjk0YzgwYTU3NTQyNmJmMjNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKQEAgLTU2LDYgKzU2LDcgQEAgdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OmNsZWFyUmVuZGVyZXIoKQogICAgICAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciB0cmFuc2l0aW9uc0VuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CiAgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IHRyYW5zaXRpb25zRW5kOyAr
K2l0KSB7CiAgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogdHJhbnNpdGlvbiA9IGl0LT5z
ZWNvbmQuZ2V0KCk7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQodHJhbnNpdGlvbik7CiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVh
clJlbmRlcmVyKCk7CiAgICAgICAgIH0KICAgICB9CkBAIC02NCw2ICs2NSw3IEBAIHZvaWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpjbGVhclJlbmRlcmVyKCkKICAgICAgICAgQW5pbWF0aW9uTmFtZU1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVu
ZCgpOwogICAgICAgICBmb3IgKEFuaW1hdGlvbk5hbWVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
ewogICAgICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kLmdldCgp
OworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5hbmltYXRpb25XaWxsQmVSZW1v
dmVkKGFuaW0pOwogICAgICAgICAgICAgYW5pbS0+Y2xlYXJSZW5kZXJlcigpOwogICAgICAgICB9
CiAgICAgfQpAQCAtMTc1LDggKzE3NywxMCBAQCB2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqCiAgICAg
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKICAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
LmdldCgpOwotICAgICAgICBpZiAoIWFuaW0tPmFjdGl2ZSgpKQorICAgICAgICBpZiAoIWFuaW0t
PmFjdGl2ZSgpKSB7CisgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCktPmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoYW5pbSk7CiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQoYW5p
bS0+YW5pbWF0aW5nUHJvcGVydHkoKSk7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBOb3cg
cmVtb3ZlIHRoZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0CkBAIC0yNTYsNiArMjYwLDcgQEAg
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXIKICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtleWZy
YW1lQW5pbSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0tPmlu
ZGV4KCkgPCAwKSB7CiAgICAgICAgICAgICBhbmltc1RvQmVSZW1vdmVkLmFwcGVuZChrZXlmcmFt
ZUFuaW0tPm5hbWUoKS5pbXBsKCkpOworICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigp
LT5hbmltYXRpb25XaWxsQmVSZW1vdmVkKGtleWZyYW1lQW5pbSk7CiAgICAgICAgICAgICBrZXlm
cmFtZUFuaW0tPmNsZWFyUmVuZGVyZXIoKTsKICAgICAgICAgfQogICAgIH0K
</data>
<flag name="review"
          id="78614"
          type_id="1"
          status="+"
          setter="cmarrin"
    />
          </attachment>
      

    </bug>

</bugzilla>