<?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>145209</bug_id>
          
          <creation_ts>2015-05-20 03:07:22 -0700</creation_ts>
          <short_desc>Use modern for-loops in WebCore/svg.</short_desc>
          <delta_ts>2015-05-24 11:31:50 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>145277</dependson>
    
    <dependson>145284</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Hunseop Jeong">hs85.jeong</reporter>
          <assigned_to name="Hunseop Jeong">hs85.jeong</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>jake.nielsen.webkit</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096216</commentid>
    <comment_count>0</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-20 03:07:22 -0700</bug_when>
    <thetext>Use the modern loops in WebCore/svg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096223</commentid>
    <comment_count>1</comment_count>
      <attachid>253438</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-20 04:10:57 -0700</bug_when>
    <thetext>Created attachment 253438
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096237</commentid>
    <comment_count>2</comment_count>
      <attachid>253438</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-20 08:39:02 -0700</bug_when>
    <thetext>Comment on attachment 253438
Patch

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

&gt; Source/WebCore/svg/SVGAnimatedPath.cpp:58
&gt; +    for (auto&amp; seg : result)

Should be named &quot;segment&quot; rather than &quot;seg&quot;.

&gt; Source/WebCore/svg/SVGPathByteStream.h:65
&gt;      void append(SVGPathByteStream* other)
&gt;      {
&gt; -        for (DataIterator it = other-&gt;begin(); it != other-&gt;end(); ++it)
&gt; -            append(*it);
&gt; +        for (auto&amp; stream : *other)
&gt; +            append(stream);
&gt;      }

Since this assumes the other is non-null, we should come back here and change that argument to be a reference rather than a pointer.

&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:98
&gt; +    for (auto&amp; reference : this-&gt;effectReferences(effect))

No need for &quot;this-&gt;&quot; any more, since the refactoring got rid of the local variable named effectReferences.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096549</commentid>
    <comment_count>3</comment_count>
      <attachid>253517</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-21 04:06:11 -0700</bug_when>
    <thetext>Created attachment 253517
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096554</commentid>
    <comment_count>4</comment_count>
      <attachid>253517</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-21 04:20:19 -0700</bug_when>
    <thetext>Comment on attachment 253517
Patch

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

&gt; Source/WebCore/svg/SVGAnimatedPath.cpp:59
&gt; +        segment-&gt;animationStarted(byteStream.get(), &amp;baseValue);

Changed the &apos;seg&apos; to &apos;segment&apos;. Done.

&gt; Source/WebCore/svg/SVGPathByteStream.h:64
&gt; +            append(stream);

Changed the argument to use the reference.

&gt; Source/WebCore/svg/SVGPathUtilities.cpp:158
&gt; +        result-&gt;append(*appendedByteStream);

I modify here, as the append() was modified to use the reference.

&gt; Source/WebCore/svg/graphics/filters/SVGFilterBuilder.cpp:99
&gt; +        clearResultsRecursive(reference);

Removed &apos;this-&gt;&apos;. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096591</commentid>
    <comment_count>5</comment_count>
      <attachid>253517</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-05-21 09:46:01 -0700</bug_when>
    <thetext>Comment on attachment 253517
Patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests, no new tests.

There is no reason to include a line like this in change log. If you keep this line, you use it to explain why there are no new tests. If you think it goes without saying, then please delete this line in future patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096603</commentid>
    <comment_count>6</comment_count>
      <attachid>253517</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 10:34:20 -0700</bug_when>
    <thetext>Comment on attachment 253517
Patch

Clearing flags on attachment: 253517

Committed r184718: &lt;http://trac.webkit.org/changeset/184718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096604</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 10:34:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096638</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-21 11:28:31 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 145277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096668</commentid>
    <comment_count>9</comment_count>
    <who name="Jake Nielsen">jake.nielsen.webkit</who>
    <bug_when>2015-05-21 14:15:00 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Re-opened since this is blocked by bug 145277

Looks like this caused some tests to start crashing:
https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20WK2%20%28Tests%29/builds/4483/steps/layout-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096673</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-21 14:35:20 -0700</bug_when>
    <thetext>So, rolling out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096690</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-21 16:13:58 -0700</bug_when>
    <thetext>In addition to assertions, this introduced a use-after-free detected by ASan and GuardMalloc.

==97888==ERROR: AddressSanitizer: heap-use-after-free on address 0x6060006acac8 at pc 0x00011c7a3a0b bp 0x7fff50dc2100 sp 0x7fff50dc20f8
READ of size 8 at 0x6060006acac8 thread T0
==97888==WARNING: failed to fork external symbolizer (errno: 1)
    #0 0x11c7a3a0a in bool WTF::HashTraitsEmptyValueChecker&lt;WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, false&gt;::isEmptyValue&lt;WebCore::SVGSVGElement*&gt;(WebCore::SVGSVGElement* const&amp;) (WebCore.framework/Versions/A/WebCore+0x21ffa0a)
    #1 0x11c7a37dd in WTF::HashTable&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::isEmptyOrDeletedBucket(WebCore::SVGSVGElement* const&amp;) (WebCore.framework/Versions/A/WebCore+0x21ff7dd)
    #2 0x11c7a67ac in WTF::HashTableConstIterator&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::skipEmptyBuckets() (WebCore.framework/Versions/A/WebCore+0x22027ac)
    #3 0x11c7a6bdd in WTF::HashTableConstIterator&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::operator++() (WebCore.framework/Versions/A/WebCore+0x2202bdd)
    #4 0x11c7a08bd in WTF::HashTableConstIteratorAdapter&lt;WTF::HashTable&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;, WebCore::SVGSVGElement*&gt;::operator++() (WebCore.framework/Versions/A/WebCore+0x21fc8bd)
    #5 0x11a913da7 in WebCore::SVGDocumentExtensions::dispatchSVGLoadEventToOutermostSVGElements() (WebCore.framework/Versions/A/WebCore+0x36fda7)
    #6 0x11a637dfa in WebCore::Document::implicitClose() (WebCore.framework/Versions/A/WebCore+0x93dfa)
    #7 0x11a636dfb in WebCore::FrameLoader::checkCompleted() (WebCore.framework/Versions/A/WebCore+0x92dfb)
    #8 0x11ac77123 in WebCore::CachedResourceLoader::loadDone(WebCore::CachedResource*, bool) (WebCore.framework/Versions/A/WebCore+0x6d3123)
    #9 0x11a6dece1 in WebCore::SubresourceLoader::notifyDone() (WebCore.framework/Versions/A/WebCore+0x13ace1)
    #10 0x11a6ddd40 in WebCore::SubresourceLoader::didFinishLoading(double) (WebCore.framework/Versions/A/WebCore+0x139d40)
    #11 0x117d42555 in void IPC::handleMessage&lt;Messages::WebResourceLoader::DidFinishResourceLoad, WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(double)&gt;(IPC::MessageDecoder&amp;, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(double)) (WebKit.framework/WebKit+0x93c555)
    #12 0x117d417ca in WebKit::WebResourceLoader::didReceiveWebResourceLoaderMessage(IPC::Connection&amp;, IPC::MessageDecoder&amp;) (WebKit.framework/WebKit+0x93b7ca)
    #13 0x11777ea8a in WebKit::NetworkProcessConnection::didReceiveMessage(IPC::Connection&amp;, IPC::MessageDecoder&amp;) (WebKit.framework/WebKit+0x378a8a)
    #14 0x1175ed5d6 in IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::MessageDecoder, std::__1::default_delete&lt;IPC::MessageDecoder&gt; &gt;) (WebKit.framework/WebKit+0x1e75d6)
    #15 0x1175f3ddc in IPC::Connection::dispatchOneMessage() (WebKit.framework/WebKit+0x1edddc)
    #16 0x119c0dcf4 in WTF::RunLoop::performWork() (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xd10cf4)
    #17 0x119c0eb9e in WTF::RunLoop::performWork(void*) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xd11b9e)
    #18 0x7fff82c1ca00 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation+0x80a00)
    #19 0x7fff82c0eb8c in __CFRunLoopDoSources0 (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation+0x72b8c)
    #20 0x7fff82c0e1be in __CFRunLoopRun (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation+0x721be)
    #21 0x7fff82c0dbd7 in CFRunLoopRunSpecific (/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation+0x71bd7)
    #22 0x7fff90e7156e in RunCurrentEventLoopInMode (/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox+0x3256e)
    #23 0x7fff90e712e9 in ReceiveNextEventCommon (/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox+0x322e9)
    #24 0x7fff90e7112a in _BlockUntilNextEventMatchingListInModeWithFilter (/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox+0x3212a)
    #25 0x7fff8e94198a in _DPSNextEvent (/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit+0x9198a)
    #26 0x7fff8e940f37 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit+0x90f37)
    #27 0x7fff8e936bd2 in -[NSApplication run] (/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit+0x86bd2)
    #28 0x7fff8e8b3323 in NSApplicationMain (/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit+0x3323)
    #29 0x7fff87bf1957 in _xpc_objc_main (/usr/lib/system/libxpc.dylib+0x16957)
    #30 0x7fff87bf305f in xpc_main (/usr/lib/system/libxpc.dylib+0x1805f)
    #31 0x10ee3c929 in ?? (WebKit.framework/Versions/A/XPCServices/com.apple.WebKit.WebContent.Development.xpc/Contents/MacOS/com.apple.WebKit.WebContent.Development+0x100001929)
    #32 0x7fff90d395c8 in start (/usr/lib/system/libdyld.dylib+0x35c8)
    #33 0x0  (&lt;unknown module&gt;)
 
0x6060006acac8 is located 8 bytes inside of 64-byte region [0x6060006acac0,0x6060006acb00)
freed by thread T0 here:
    #0 0x10ee92b89 in wrap_free (/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/7.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib+0x42b89)
    #1 0x119c420d0 in bmalloc::Deallocator::deallocateSlowCase(void*) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xd450d0)
    #2 0x11c7a3732 in WTF::HashTable&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::rehash(unsigned int, WebCore::SVGSVGElement**) (WebCore.framework/Versions/A/WebCore+0x21ff732)
    #3 0x11c7a3119 in WTF::HashTable&lt;WebCore::SVGSVGElement*, WebCore::SVGSVGElement*, WTF::IdentityExtractor, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::add(WebCore::SVGSVGElement* const&amp;) (WebCore.framework/Versions/A/WebCore+0x21ff119)
    #4 0x11c79ffbd in WTF::HashSet&lt;WebCore::SVGSVGElement*, WTF::PtrHash&lt;WebCore::SVGSVGElement*&gt;, WTF::HashTraits&lt;WebCore::SVGSVGElement*&gt; &gt;::add(WebCore::SVGSVGElement* const&amp;) (WebCore.framework/Versions/A/WebCore+0x21fbfbd)
    #5 0x11a865bb7 in WebCore::SVGDocumentExtensions::addTimeContainer(WebCore::SVGSVGElement*) (WebCore.framework/Versions/A/WebCore+0x2c1bb7)
    #6 0x11c883936 in WebCore::SVGSVGElement::insertedInto(WebCore::ContainerNode&amp;) (WebCore.framework/Versions/A/WebCore+0x22df936)
    #7 0x11ad354c9 in WebCore::ChildNodeInsertionNotifier::notifyNodeInsertedIntoDocument(WebCore::Node&amp;) (WebCore.framework/Versions/A/WebCore+0x7914c9)
    #8 0x11ad346fb in WebCore::ChildNodeInsertionNotifier::notify(WebCore::Node&amp;) (WebCore.framework/Versions/A/WebCore+0x7906fb)
    #9 0x11ad2e246 in WebCore::ContainerNode::updateTreeAfterInsertion(WebCore::Node&amp;) (WebCore.framework/Versions/A/WebCore+0x78a246)
    #10 0x11ad2ddcc in WebCore::ContainerNode::appendChild(WTF::PassRefPtr&lt;WebCore::Node&gt;, int&amp;) (WebCore.framework/Versions/A/WebCore+0x789dcc)
    #11 0x11c07aae5 in WebCore::Node::appendChild(WTF::PassRefPtr&lt;WebCore::Node&gt;, int&amp;) (WebCore.framework/Versions/A/WebCore+0x1ad6ae5)
    #12 0x11a7440b1 in WebCore::JSNode::appendChild(JSC::ExecState*) (WebCore.framework/Versions/A/WebCore+0x1a00b1)
    #13 0x11a743ef3 in WebCore::jsNodePrototypeFunctionAppendChild(JSC::ExecState*) (WebCore.framework/Versions/A/WebCore+0x19fef3)
    #14 0x3bc07d601027  (&lt;unknown module&gt;)
    #15 0x1199daa03 in llint_entry (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xadda03)
    #16 0x1199daa03 in llint_entry (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xadda03)
    #17 0x1199dab6e in llint_entry (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xaddb6e)
    #18 0x1199daa6e in llint_entry (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xadda6e)
    #19 0x1199d4ed5 in vmEntryToJavaScript (JavaScriptCore.framework/Versions/A/JavaScriptCore+0xad7ed5)
    #20 0x1197e197f in JSC::JITCode::execute(JSC::VM*, JSC::ProtoCallFrame*) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0x8e497f)
    #21 0x118f6f25a in JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0x7225a)
    #22 0x118f6ee71 in JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0x71e71)
    #23 0x119244291 in JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, JSC::JSValue*) (JavaScriptCore.framework/Versions/A/JavaScriptCore+0x347291)
    #24 0x11b7feb07 in WebCore::JSMainThreadExecState::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;, JSC::JSValue*) (WebCore.framework/Versions/A/WebCore+0x125ab07)
    #25 0x11a78590e in WebCore::JSEventListener::handleEvent(WebCore::ScriptExecutionContext*, WebCore::Event*) (WebCore.framework/Versions/A/WebCore+0x1e190e)
    #26 0x11b1fc18e in WebCore::EventTarget::fireEventListeners(WebCore::Event*, WebCore::EventTargetData*, WTF::Vector&lt;WebCore::RegisteredEventListener, 1ul, WTF::CrashOnOverflow, 16ul&gt;&amp;) (WebCore.framework/Versions/A/WebCore+0xc5818e)
    #27 0x11a5f90c1 in WebCore::EventTarget::fireEventListeners(WebCore::Event*) (WebCore.framework/Versions/A/WebCore+0x550c1)
    #28 0x11b1d8297 in WebCore::EventContext::handleLocalEvents(WebCore::Event&amp;) const (WebCore.framework/Versions/A/WebCore+0xc34297)
    #29 0x11b1da113 in WebCore::dispatchEventInDOM(WebCore::Event&amp;, WebCore::EventPath const&amp;, WebCore::WindowEventContext&amp;) (WebCore.framework/Versions/A/WebCore+0xc36113)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096778</commentid>
    <comment_count>12</comment_count>
      <attachid>253517</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-21 21:30:32 -0700</bug_when>
    <thetext>Comment on attachment 253517
Patch

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

&gt; Source/WebCore/svg/SVGDocumentExtensions.cpp:120
&gt;      Vector&lt;RefPtr&lt;SVGSVGElement&gt;&gt; timeContainers;
&gt;      timeContainers.appendRange(m_timeContainers.begin(), m_timeContainers.end());
&gt;  
&gt; -    auto end = timeContainers.end();
&gt; -    for (auto it = timeContainers.begin(); it != end; ++it) {
&gt; -        SVGSVGElement* outerSVG = (*it).get();
&gt; -        if (!outerSVG-&gt;isOutermostSVGSVGElement())
&gt; +    for (auto&amp; container : m_timeContainers) {
&gt; +        if (!container-&gt;isOutermostSVGSVGElement())

My mistake,,, I used the &apos;m_timeContainers&apos; instead of the &apos;timeContainers&apos;.
I will change it and then make the new patch.
Thanks for your check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096795</commentid>
    <comment_count>13</comment_count>
      <attachid>253579</attachid>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-21 23:34:21 -0700</bug_when>
    <thetext>Created attachment 253579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096797</commentid>
    <comment_count>14</comment_count>
    <who name="Hunseop Jeong">hs85.jeong</who>
    <bug_when>2015-05-21 23:37:47 -0700</bug_when>
    <thetext>I checked debug build and tested the fuilure test in https://build.webkit.org/builders/Apple%20Yosemite%20Debug%20WK2%20%28Tests%29/builds/4483/steps/layout-test/logs/stdio. All passed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097163</commentid>
    <comment_count>15</comment_count>
      <attachid>253579</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-24 11:31:44 -0700</bug_when>
    <thetext>Comment on attachment 253579
Patch

Clearing flags on attachment: 253579

Committed r184844: &lt;http://trac.webkit.org/changeset/184844&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097164</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-05-24 11:31:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253438</attachid>
            <date>2015-05-20 04:10:57 -0700</date>
            <delta_ts>2015-05-21 04:05:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145209-20150520201052.patch</filename>
            <type>text/plain</type>
            <size>33075</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ViNTFlNDliYjk5ZjNl
YTU4Y2FjMTdjZTNmMGI3OTJiYTgyYTg4NC4uZWMxYzE4ZTI5NTk1ZTk0MTYwMDc4MzhiODljZDFj
Nzk1MTNhNGNjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA1LTIwICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL3N2Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IHRlc3RzLgorCisgICAgICAg
ICogc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9w
ZXJ0eVR5cGVzQXJlQ29uc2lzdGVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkUGF0aC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmlt
VmFsQW5pbWF0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpleGVjdXRlQWN0aW9u
KToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3Zn
L1NWR0N1cnNvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVu
dDo6flNWR0N1cnNvckVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpwYXVzZUFu
aW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnBh
dXNlQW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OmRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1vc3RTVkdFbGVtZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3Vy
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxl
bWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50
RXh0ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvcHVsYXRlQXR0cmli
dXRlTmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZUF0
dHJpYnV0ZU5hbWVUb0FuaW1hdGVkUHJvcGVydHlUeXBlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OnBvcHVsYXRlQ1NTUHJvcGVydHlXaXRoU1ZHRE9NTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGVN
YXApOgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9hZExpc3RlbmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZH
R2x5cGhTZWxlY3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGb250RWxlbWVudDo6cmVnaXN0ZXJMaWdhdHVyZXNJbkdseXBoQ2Fj
aGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHS2VybmluZ01hcDo6aW5zZXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OnN0cmluZ01hdGNoZXNVbmljb2RlUmFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoQnl0ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFw
cGVuZCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAg
ICogc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NN
SUxFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlM
RWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01J
TEVsZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHU01JTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UpOgor
ICAgICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToK
KyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAg
ICAgICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdMaXN0UHJvcGVydHk6OmRldGFjaExpc3RXcmFwcGVyc0FuZFJlc2l6ZSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNsZWFyQ29udGV4
dEFuZFJvbGVzKToKKwogMjAxNS0wNS0xOSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAbmF2ZXJj
b3JwLmNvbT4KIAogICAgICAgICBbRUZMXSBVc2UgR1NpbXBsZVByb3h5UmVzb2x2ZXIgaW5zdGVh
ZCBvZiBjdXN0b20gU291cFByb3h5UmVzb2x2ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50QmFzZS5jcHAKaW5kZXggZTUwNjVjZWIyNzU0ZGFjZTg4OGQ0YTA2ODc5NGVi
Y2JjMWQzNzk4OS4uY2VkZDljYTI0OWViMWQ5ZjdlYWY5ZDFjZjkxZmFjODY3NWI1MGZjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKQEAgLTE3MSwx
MiArMTcxLDExIEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1lbnRCYXNlOjpjYWxjdWxhdGVGcm9tQW5k
QnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5nLCBjCiAjaWZuZGVmIE5ERUJVRwogc3Rh
dGljIGlubGluZSBib29sIHByb3BlcnR5VHlwZXNBcmVDb25zaXN0ZW50KEFuaW1hdGVkUHJvcGVy
dHlUeXBlIGV4cGVjdGVkUHJvcGVydHlUeXBlLCBjb25zdCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9w
ZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVy
dHlMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhbmltYXRlZFR5cGVzLmVuZCgpOwotICAgIGZv
ciAoU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFu
aW1hdGVkVHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgaXQtPnByb3BlcnRpZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSAhPSBpdC0+cHJvcGVydGllc1tpXS0+YW5pbWF0ZWRQ
cm9wZXJ0eVR5cGUoKSkgeworICAgIGZvciAoYXV0byYgdHlwZSA6IGFuaW1hdGVkVHlwZXMpIHsK
KyAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHR5cGUucHJvcGVydGllcygpKSB7CisgICAg
ICAgICAgICBpZiAoZXhwZWN0ZWRQcm9wZXJ0eVR5cGUgIT0gcHJvcGVydHktPmFuaW1hdGVkUHJv
cGVydHlUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGFsbG93
ZWQgaW5jb25zaXN0ZW5jeS4gU1ZHQW5pbWF0ZWRBbmdsZUFuaW1hdG9yIGhhbmRsZXMgYm90aCBT
VkdBbmltYXRlZEFuZ2xlICYgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiBmb3IgbWFya2VycyBvcmll
bnQgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSA9
PSBBbmltYXRlZEFuZ2xlICYmIGl0LT5wcm9wZXJ0aWVzW2ldLT5hbmltYXRlZFByb3BlcnR5VHlw
ZSgpID09IEFuaW1hdGVkRW51bWVyYXRpb24pCisgICAgICAgICAgICAgICAgaWYgKGV4cGVjdGVk
UHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgcHJvcGVydHktPmFuaW1hdGVkUHJvcGVy
dHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcAppbmRleCBmYmE4YTYxZDJmODg1NDY1
NjAwMzQxN2MzZWM1MTQwMDJlNjBhMDEzLi5kYWRmM2U0NzgwYmExNjhjM2VmMTk0ZThlOTVmOWQ4
ZjgyZTM5Yjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRo
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcApAQCAtNTAs
MTUgKzUwLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdBbmltYXRlZFR5cGU+IFNWR0FuaW1hdGVk
UGF0aEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRpb24oCiAKICAgICBWZWN0b3I8UmVmUHRy
PFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+PiByZXN1bHQ7CiAKLSAgICBT
VkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFuaW1h
dGVkVHlwZXMuZW5kKCk7Ci0gICAgZm9yIChTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYW5pbWF0ZWRUeXBlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5
cGU8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZj4oaXQtPnByb3BlcnRpZXNb
MF0uZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUgOiBhbmltYXRlZFR5cGVzKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPFNWR0FuaW1h
dGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KHR5cGUucHJvcGVydGllc1swXS5nZXQoKSkp
OwogCiAgICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJsb2NrZXIoKnByb3Bl
cnR5LT5jb250ZXh0RWxlbWVudCgpKTsKIAotICAgIHNpemVfdCByZXN1bHRTaXplID0gcmVzdWx0
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdFNpemU7ICsraSkKLSAg
ICAgICAgcmVzdWx0W2ldLT5hbmltYXRpb25TdGFydGVkKGJ5dGVTdHJlYW0uZ2V0KCksICZiYXNl
VmFsdWUpOworICAgIGZvciAoYXV0byYgc2VnIDogcmVzdWx0KQorICAgICAgICBzZWctPmFuaW1h
dGlvblN0YXJ0ZWQoYnl0ZVN0cmVhbS5nZXQoKSwgJmJhc2VWYWx1ZSk7CiAKICAgICByZXR1cm4g
U1ZHQW5pbWF0ZWRUeXBlOjpjcmVhdGVQYXRoKFdURjo6bW92ZShieXRlU3RyZWFtKSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFR5cGVBbmltYXRvci5oCmluZGV4IDc1MmU5
YjIzMmExZmU3ZThlMDRjZDE3OTY0NTJjYzkwNzI5YmU1ODYuLmNiYzNhNjI0MDE0Zjg3YTJkMmI3
MzI5NTczOGI0YzJiYWI3MDc2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlZFR5cGVBbmltYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRl
ZFR5cGVBbmltYXRvci5oCkBAIC0xOTEsMTAgKzE5MSw5IEBAIHByaXZhdGU6CiAgICAgICAgIC8v
IEZJWE1FOiBDYW4ndCB1c2UgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRhdGVCbG9ja2VyIGJlY2F1
c2Ugb2YgY2lyY3VsYXIgaGVhZGVyIGRlcGVuZGVuY3kuIFdvdWxkIGJlIG5pY2UgdG8gdW50YW5n
bGUgdGhpcy4KICAgICAgICAgc2V0SW5zdGFuY2VVcGRhdGVzQmxvY2tlZCgqYW5pbWF0ZWRUeXBl
c1swXS5lbGVtZW50LCB0cnVlKTsKIAotICAgICAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0
eUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGFuaW1hdGVkVHlwZXMuZW5kKCk7Ci0gICAgICAg
IGZvciAoU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGFuaW1hdGVkVHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih3aGljaFByb3BlcnR5IDwgaXQtPnByb3Bl
cnRpZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIEFuaW1WYWxUeXBlKiBwcm9wZXJ0eSA9IGNhc3RB
bmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlPihpdC0+cHJvcGVydGllc1t3
aGljaFByb3BlcnR5XS5nZXQoKSk7CisgICAgICAgIGZvciAoYXV0byYgYW5pbWF0ZWRUeXBlIDog
YW5pbWF0ZWRUeXBlcykgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04od2hpY2hQcm9wZXJ0eSA8IGFuaW1hdGVkVHlwZS5wcm9wZXJ0aWVzLnNpemUoKSk7Cisg
ICAgICAgICAgICBBbmltVmFsVHlwZSogcHJvcGVydHkgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRv
QWN0dWFsVHlwZTxBbmltVmFsVHlwZT4oYW5pbWF0ZWRUeXBlLnByb3BlcnRpZXNbd2hpY2hQcm9w
ZXJ0eV0uZ2V0KCkpOwogCiAgICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgICAgICAg
ICAgY2FzZSBTdGFydEFuaW1hdGlvbkFjdGlvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmlt
YXRpb25FbGVtZW50LmNwcAppbmRleCA1YmExOWJjZmFjYjE4OGJmZWViYTAxZGIyYjhjMTU2Y2I2
NDdhZGIxLi4zNDYyOGFkNDE5MTllNjJlZGNlNzQ1Mzg4NDEyYWQyYmYyNWU1NmM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCkBAIC0xNjcsOCArMTY3LDgg
QEAgdm9pZCBTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWMKICAgICAgICAgLy8gYW5kIHdoaXRlIHNwYWNlIGJl
Zm9yZSBhbmQgYWZ0ZXIgc2VtaWNvbG9uIHNlcGFyYXRvcnMsIGlzIGFsbG93ZWQgYW5kIHdpbGwg
YmUgaWdub3JlZC4KICAgICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvYW5pbWF0
ZS5odG1sI1ZhbHVlc0F0dHJpYnV0ZQogICAgICAgICB2YWx1ZS5zdHJpbmcoKS5zcGxpdCgnOycs
IG1fdmFsdWVzKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fdmFsdWVzLnNp
emUoKTsgKytpKQotICAgICAgICAgICAgbV92YWx1ZXNbaV0gPSBtX3ZhbHVlc1tpXS5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IG1fdmFsdWVzKQorICAgICAg
ICAgICAgdmFsdWUgPSB2YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKTsKIAogICAgICAgICB1cGRhdGVB
bmltYXRpb25Nb2RlKCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDdXJz
b3JFbGVtZW50LmNwcAppbmRleCBkNTRlYzQ2YzY3YWRlZmE0YjQ5ODQ5ZjE0Y2ZkZmUzNzJkOGUw
NmMwLi40YmQ0M2RhZWM5ZThlMDM3ZjExZDg4MDVhY2I3N2NjYjA2NjM3NzcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCkBAIC01OCw5ICs1OCw4IEBAIFJlZjxTVkdD
dXJzb3JFbGVtZW50PiBTVkdDdXJzb3JFbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jCiAKIFNWR0N1cnNvckVsZW1lbnQ6On5TVkdDdXJzb3JFbGVtZW50KCkK
IHsKLSAgICBIYXNoU2V0PFNWR0VsZW1lbnQqPjo6aXRlcmF0b3IgZW5kID0gbV9jbGllbnRzLmVu
ZCgpOwotICAgIGZvciAoSGFzaFNldDxTVkdFbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9jbGll
bnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCppdCktPmN1cnNvckVsZW1l
bnRSZW1vdmVkKCk7CisgICAgZm9yIChhdXRvJiBjbGllbnQgOiBtX2NsaWVudHMpCisgICAgICAg
IGNsaWVudC0+Y3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKIH0KIAogYm9vbCBTVkdDdXJzb3JFbGVt
ZW50Ojppc1N1cHBvcnRlZEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKaW5kZXggYTQ3
YWRkNWE2MjVjZDMwZDIwZjNmN2IyOWJmYzc4YTkyNzYxNDNlNS4uYWIyOWQyMWMxMGFjZGNkZjdj
NDIwMWJmYzA2MzYyYTMxODVkZWNiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5jcHAKQEAgLTEwMSwxNiArMTAxLDE0IEBAIHZvaWQgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zOjpzdGFydEFuaW1hdGlvbnMoKQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6cGF1c2VBbmltYXRpb25zKCkKIHsKLSAgICBhdXRvIGVuZCA9IG1fdGltZUNvbnRhaW5lcnMu
ZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV90aW1lQ29udGFpbmVycy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICBmb3Ig
KGF1dG8mIGNvbnRhaW5lciA6IG1fdGltZUNvbnRhaW5lcnMpCisgICAgICAgIGNvbnRhaW5lci0+
cGF1c2VBbmltYXRpb25zKCk7CiB9CiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnBh
dXNlQW5pbWF0aW9ucygpCiB7Ci0gICAgYXV0byBlbmQgPSBtX3RpbWVDb250YWluZXJzLmVuZCgp
OwotICAgIGZvciAoYXV0byBpdCA9IG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICAoKml0KS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKGF1
dG8mIGNvbnRhaW5lciA6IG1fdGltZUNvbnRhaW5lcnMpCisgICAgICAgIGNvbnRhaW5lci0+dW5w
YXVzZUFuaW1hdGlvbnMoKTsKIH0KIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmRpc3Bh
dGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1vc3RTVkdFbGVtZW50cygpCkBAIC0xMTgsMTIgKzExNiwx
MCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlzcGF0Y2hTVkdMb2FkRXZlbnRUb091
dGVybW9zdFNWR0VsZW1lbnRzKCkKICAgICBWZWN0b3I8UmVmUHRyPFNWR1NWR0VsZW1lbnQ+PiB0
aW1lQ29udGFpbmVyczsKICAgICB0aW1lQ29udGFpbmVycy5hcHBlbmRSYW5nZShtX3RpbWVDb250
YWluZXJzLmJlZ2luKCksIG1fdGltZUNvbnRhaW5lcnMuZW5kKCkpOwogCi0gICAgYXV0byBlbmQg
PSB0aW1lQ29udGFpbmVycy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSB0aW1lQ29udGFpbmVy
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHU1ZHRWxlbWVudCogb3V0
ZXJTVkcgPSAoKml0KS5nZXQoKTsKLSAgICAgICAgaWYgKCFvdXRlclNWRy0+aXNPdXRlcm1vc3RT
VkdTVkdFbGVtZW50KCkpCisgICAgZm9yIChhdXRvJiBjb250YWluZXIgOiBtX3RpbWVDb250YWlu
ZXJzKSB7CisgICAgICAgIGlmICghY29udGFpbmVyLT5pc091dGVybW9zdFNWR1NWR0VsZW1lbnQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBvdXRlclNWRy0+c2VuZFNWR0xvYWRF
dmVudElmUG9zc2libGUoKTsKKyAgICAgICAgY29udGFpbmVyLT5zZW5kU1ZHTG9hZEV2ZW50SWZQ
b3NzaWJsZSgpOwogICAgIH0KIH0KIApAQCAtMTcxLDkgKzE2Nyw3IEBAIGJvb2wgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jlc291cmNlcyhFbGVtZW50KiBlbGVt
ZW50KSBjb25zCiAgICAgLy8gVGhpcyBhbGdvcml0aG0gdGFrZXMgdGltZSBwcm9wb3J0aW9uYWwg
dG8gdGhlIG51bWJlciBvZiBwZW5kaW5nIHJlc291cmNlcyBhbmQgbmVlZCBub3QuCiAgICAgLy8g
SWYgcGVyZm9ybWFuY2UgYmVjb21lcyBhbiBpc3N1ZSB3ZSBjYW4ga2VlcCBhIGNvdW50ZWQgc2V0
IG9mIGVsZW1lbnRzIGFuZCBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGVmZmljaWVudGx5LgogICAgIEFT
U0VSVChlbGVtZW50KTsKLSAgICBhdXRvIGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsK
LSAgICBmb3IgKGF1dG8gaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWUu
Z2V0KCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50cyA6IG1fcGVuZGluZ1Jlc291cmNlcy52YWx1
ZXMoKSkgewogICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogCiAgICAgICAgIGlmIChlbGVtZW50
cy0+Y29udGFpbnMoZWxlbWVudCkpCkBAIC0yMDUsNDMgKzE5OSwzOSBAQCB2b2lkIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVudEZyb21QZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQq
IGVsZW1lbnQpCiAgICAgLy8gUmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gcGVuZGluZyByZXNvdXJj
ZXMuCiAgICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXMuaXNFbXB0eSgpICYmIGVsZW1lbnQtPmhh
c1BlbmRpbmdSZXNvdXJjZXMoKSkgewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0Jl
UmVtb3ZlZDsKLSAgICAgICAgYXV0byBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXMuZW5kKCk7Ci0g
ICAgICAgIGZvciAoYXV0byBpdCA9IG1fcGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+
dmFsdWUuZ2V0KCk7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiBtX3BlbmRpbmdSZXNv
dXJjZXMpIHsKKyAgICAgICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVudHMgPSByZXNvdXJj
ZS52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7CiAgICAgICAgICAg
ICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAgICBlbGVtZW50cy0+
cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICAgICAg
ICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAgICB9CiAKICAgICAg
ICAgY2xlYXJIYXNQZW5kaW5nUmVzb3VyY2VzSWZQb3NzaWJsZShlbGVtZW50KTsKIAogICAgICAg
ICAvLyBXZSB1c2UgdGhlIHJlbW92ZVBlbmRpbmdSZXNvdXJjZSBmdW5jdGlvbiBoZXJlIGJlY2F1
c2UgaXQgZGVhbHMgd2l0aCBzZXQgbGlmZXRpbWUgY29ycmVjdGx5LgotICAgICAgICBhdXRvIHZl
Y3RvckVuZCA9IHRvQmVSZW1vdmVkLmVuZCgpOwotICAgICAgICBmb3IgKGF1dG8gaXQgPSB0b0Jl
UmVtb3ZlZC5iZWdpbigpOyBpdCAhPSB2ZWN0b3JFbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1v
dmVQZW5kaW5nUmVzb3VyY2UoKml0KTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHRv
QmVSZW1vdmVkKQorICAgICAgICAgICAgcmVtb3ZlUGVuZGluZ1Jlc291cmNlKHJlc291cmNlKTsK
ICAgICB9CiAKICAgICAvLyBSZW1vdmUgdGhlIGVsZW1lbnQgZnJvbSBwZW5kaW5nIHJlc291cmNl
cyB0aGF0IHdlcmUgc2NoZWR1bGVkIGZvciByZW1vdmFsLgogICAgIGlmICghbV9wZW5kaW5nUmVz
b3VyY2VzRm9yUmVtb3ZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgVmVjdG9yPEF0b21pY1N0cmlu
Zz4gdG9CZVJlbW92ZWQ7Ci0gICAgICAgIGF1dG8gZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzRm9y
UmVtb3ZhbC5lbmQoKTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9wZW5kaW5nUmVzb3VyY2Vz
Rm9yUmVtb3ZhbC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIFBlbmRp
bmdFbGVtZW50cyogZWxlbWVudHMgPSBpdC0+dmFsdWUuZ2V0KCk7CisgICAgICAgIGZvciAoYXV0
byYgcmVzb3VyY2UgOiBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsKSB7CisgICAgICAgICAg
ICBQZW5kaW5nRWxlbWVudHMqIGVsZW1lbnRzID0gcmVzb3VyY2UudmFsdWUuZ2V0KCk7CiAgICAg
ICAgICAgICBBU1NFUlQoZWxlbWVudHMpOwogICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50cy0+
aXNFbXB0eSgpKTsKIAogICAgICAgICAgICAgZWxlbWVudHMtPnJlbW92ZShlbGVtZW50KTsKICAg
ICAgICAgICAgIGlmIChlbGVtZW50cy0+aXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRvQmVS
ZW1vdmVkLmFwcGVuZChpdC0+a2V5KTsKKyAgICAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBl
bmQocmVzb3VyY2Uua2V5KTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgcmVt
b3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVtb3ZhbCBmdW5jdGlvbiBoZXJlIGJlY2F1c2UgaXQgZGVh
bHMgd2l0aCBzZXQgbGlmZXRpbWUgY29ycmVjdGx5LgotICAgICAgICBhdXRvIHZlY3RvckVuZCA9
IHRvQmVSZW1vdmVkLmVuZCgpOwotICAgICAgICBmb3IgKGF1dG8gaXQgPSB0b0JlUmVtb3ZlZC5i
ZWdpbigpOyBpdCAhPSB2ZWN0b3JFbmQ7ICsraXQpCi0gICAgICAgICAgICByZW1vdmVQZW5kaW5n
UmVzb3VyY2VGb3JSZW1vdmFsKCppdCk7CisgICAgICAgIGZvciAoYXV0byYgcmVzb3VyY2UgOiB0
b0JlUmVtb3ZlZCkKKyAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdSZXNvdXJjZUZvclJlbW92YWwo
cmVzb3VyY2UpOwogICAgIH0KIH0KIApAQCAtMzE3LDE4ICszMDcsMTYgQEAgdm9pZCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KFNWR0Vs
ZW1lbnQqIHJlZmUKIHsKICAgICBWZWN0b3I8U1ZHRWxlbWVudCo+IHRvQmVSZW1vdmVkOwogCi0g
ICAgYXV0byBlbmQgPSBtX2VsZW1lbnREZXBlbmRlbmNpZXMuZW5kKCk7Ci0gICAgZm9yIChhdXRv
IGl0ID0gbV9lbGVtZW50RGVwZW5kZW5jaWVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewot
ICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVuY2VkRWxlbWVudCA9IGl0LT5rZXk7Ci0gICAgICAg
IEhhc2hTZXQ8U1ZHRWxlbWVudCo+JiByZWZlcmVuY2luZ0VsZW1lbnRzID0gKml0LT52YWx1ZTsK
KyAgICBmb3IgKGF1dG8mIGRlcGVuZGVuY3kgOiBtX2VsZW1lbnREZXBlbmRlbmNpZXMpIHsKKyAg
ICAgICAgU1ZHRWxlbWVudCogcmVmZXJlbmNlZEVsZW1lbnQgPSBkZXBlbmRlbmN5LmtleTsKKyAg
ICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4mIHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqZGVwZW5k
ZW5jeS52YWx1ZTsKICAgICAgICAgcmVmZXJlbmNpbmdFbGVtZW50cy5yZW1vdmUocmVmZXJlbmNp
bmdFbGVtZW50KTsKICAgICAgICAgaWYgKHJlZmVyZW5jaW5nRWxlbWVudHMuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJlZmVyZW5jZWRFbGVtZW50KTsKICAgICB9
CiAKLSAgICBhdXRvIHZlY3RvckVuZCA9IHRvQmVSZW1vdmVkLmVuZCgpOwotICAgIGZvciAoYXV0
byBpdCA9IHRvQmVSZW1vdmVkLmJlZ2luKCk7IGl0ICE9IHZlY3RvckVuZDsgKytpdCkKLSAgICAg
ICAgbV9lbGVtZW50RGVwZW5kZW5jaWVzLnJlbW92ZSgqaXQpOworICAgIGZvciAoYXV0byYgZWxl
bWVudCA6IHRvQmVSZW1vdmVkKQorICAgICAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMucmVtb3Zl
KGVsZW1lbnQpOwogfQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVidWlsZEVsZW1l
bnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBkMzFiNDI3NTIzZTRmMTViOTQw
YzhlMGY1YjQzYjM5NGNjZDU5MzIyLi40ZmM5ZmZlMGJmOGI2YWY2YjY1MGQwNjU0NzFiNzg3NzA4
ZGYyMDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC0xNTAsOCArMTUwLDggQEAg
c3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHBvcHVsYXRlQXR0cmlidXRlTmFtZVRvQ1NTUHJvcGVy
dHlJRE1hcChIYXNoTWFwPEF0b21pY1MKICAgICAgICAgJnlBdHRyLAogICAgIH07CiAKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChhdHRyaWJ1dGVOYW1lcyk7
ICsraSkgewotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IGF0dHJpYnV0
ZU5hbWVzW2ldLT5sb2NhbE5hbWUoKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBhdHRyaWJ1dGVO
YW1lcykgeworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSA9IG5hbWUtPmxv
Y2FsTmFtZSgpOwogICAgICAgICBtYXAuYWRkKGxvY2FsTmFtZS5pbXBsKCksIGNzc1Byb3BlcnR5
SUQobG9jYWxOYW1lKSk7CiAgICAgfQogCkBAIC0yMjksOCArMjI5LDggQEAgc3RhdGljIE5FVkVS
X0lOTElORSB2b2lkIHBvcHVsYXRlQXR0cmlidXRlTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGVN
YXAoSGFzaE1hcDwKICAgICAgICAgeyB3b3JkX3NwYWNpbmdBdHRyLCBBbmltYXRlZExlbmd0aCB9
LAogICAgIH07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdU
SCh0YWJsZSk7ICsraSkKLSAgICAgICAgbWFwLmFkZCh0YWJsZVtpXS5hdHRyaWJ1dGVOYW1lLmlt
cGwoKSwgdGFibGVbaV0udHlwZSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRhYmxlKQorICAg
ICAgICBtYXAuYWRkKGVudHJ5LmF0dHJpYnV0ZU5hbWUuaW1wbCgpLCBlbnRyeS50eXBlKTsKIH0K
IAogc3RhdGljIGlubGluZSBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5hbWVJbXBs
KiwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGU+JiBhdHRyaWJ1dGVOYW1lVG9BbmltYXRlZFByb3BlcnR5
VHlwZU1hcCgpCkBAIC0yNjMsOCArMjYzLDggQEAgc3RhdGljIE5FVkVSX0lOTElORSB2b2lkIHBv
cHVsYXRlQ1NTUHJvcGVydHlXaXRoU1ZHRE9NTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGUKICAg
ICAgICAgeyB5QXR0ciwgQW5pbWF0ZWRMZW5ndGggfSwKICAgICB9OwogCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgodGFibGUpOyArK2kpCi0gICAgICAgIG1h
cC5hZGQodGFibGVbaV0uYXR0cmlidXRlTmFtZS5pbXBsKCksIHRhYmxlW2ldLnR5cGUpOworICAg
IGZvciAoYXV0byYgZW50cnkgOiB0YWJsZSkKKyAgICAgICAgbWFwLmFkZChlbnRyeS5hdHRyaWJ1
dGVOYW1lLmltcGwoKSwgZW50cnkudHlwZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSGFzaE1hcDxR
dWFsaWZpZWROYW1lOjpRdWFsaWZpZWROYW1lSW1wbCosIEFuaW1hdGVkUHJvcGVydHlUeXBlPiYg
Y3NzUHJvcGVydHlXaXRoU1ZHRE9NTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGVNYXAoKQpAQCAt
NjM5LDggKzYzOSw4IEBAIHN0YXRpYyBib29sIGhhc0xvYWRMaXN0ZW5lcihFbGVtZW50KiBlbGVt
ZW50KQogCiAgICAgZm9yIChlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxl
bWVudCgpOyBlbGVtZW50OyBlbGVtZW50ID0gZWxlbWVudC0+cGFyZW50T3JTaGFkb3dIb3N0RWxl
bWVudCgpKSB7CiAgICAgICAgIGNvbnN0IEV2ZW50TGlzdGVuZXJWZWN0b3ImIGVudHJ5ID0gZWxl
bWVudC0+Z2V0RXZlbnRMaXN0ZW5lcnMoZXZlbnROYW1lcygpLmxvYWRFdmVudCk7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW50cnkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmIChlbnRyeVtpXS51c2VDYXB0dXJlKQorICAgICAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDog
ZW50cnkpIHsKKyAgICAgICAgICAgIGlmIChsaXN0ZW5lci51c2VDYXB0dXJlKQogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5jcHAKaW5kZXggNTI4OTQwMzdiMjQ5YWQ5NWNiZmJjNjE4NGRiZDg5NjBiMGNiZDcxOS4u
NjEwNDc1MjY5ZDhkYjhmNWRhN2Y1NWYxMThjNzNmZDM2MjZkMzI5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udERhdGEuY3BwCkBAIC0xNjEsMTkgKzE2MSwxNyBAQCBib29sIFNWR0ZvbnREYXRhOjph
cHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaERhdGEm
IGdseQogICAgIH0KIAogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwotICAgIHNpemVfdCBh
bHRHbHlwaE5hbWVzU2l6ZSA9IGFsdEdseXBoTmFtZXMuc2l6ZSgpOwotICAgIGlmIChhbHRHbHlw
aE5hbWVzU2l6ZSkgewotICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgYWx0
R2x5cGhOYW1lc1NpemU7ICsraW5kZXgpCi0gICAgICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1l
bnQtPmNvbGxlY3RHbHlwaHNGb3JHbHlwaE5hbWUoYWx0R2x5cGhOYW1lc1tpbmRleF0sIGdseXBo
cyk7CisgICAgaWYgKCFhbHRHbHlwaE5hbWVzLmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKGF1
dG8mIG5hbWUgOiBhbHRHbHlwaE5hbWVzKQorICAgICAgICAgICAgYXNzb2NpYXRlZEZvbnRFbGVt
ZW50LT5jb2xsZWN0R2x5cGhzRm9yR2x5cGhOYW1lKG5hbWUsIGdseXBocyk7CiAKICAgICAgICAg
Ly8gQXNzaWduIHRoZSB1bmljb2RlU3RyaW5nTGVuZ3RoIG5vdyB0aGF0IGl0cyBrbm93bi4KLSAg
ICAgICAgc2l6ZV90IGdseXBoc1NpemUgPSBnbHlwaHMuc2l6ZSgpOwotICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGdseXBoc1NpemU7ICsraSkKLSAgICAgICAgICAgIGdseXBoc1tpXS51
bmljb2RlU3RyaW5nTGVuZ3RoID0gcnVuLmxlbmd0aCgpOworICAgICAgICBmb3IgKGF1dG8mIGds
eXBoIDogZ2x5cGhzKQorICAgICAgICAgICAgZ2x5cGgudW5pY29kZVN0cmluZ0xlbmd0aCA9IHJ1
bi5sZW5ndGgoKTsKIAogICAgICAgICAvLyBEbyBub3QgY2hlY2sgYWx0IGdseXBocyBmb3IgY29t
cGF0aWJpbGl0eS4gSnVzdCByZXR1cm4gdGhlIGZpcnN0IG9uZS4KICAgICAgICAgLy8gTGF0ZXIg
Y29kZSB3aWxsIGZhaWwgaWYgd2UgZG8gbm90IGRvIHRoaXMgYW5kIHRoZSBnbHlwaCBpcyBpbmNv
bXBhdGlibGUuCi0gICAgICAgIGlmIChnbHlwaHNTaXplKSB7CisgICAgICAgIGlmICghZ2x5cGhz
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgU1ZHR2x5cGgmIHN2Z0dseXBoID0gZ2x5cGhzWzBd
OwogICAgICAgICAgICAgaXRlcmF0b3Iuc2V0TGFzdEdseXBoTmFtZShzdmdHbHlwaC5nbHlwaE5h
bWUpOwogICAgICAgICAgICAgZ2x5cGhEYXRhLmdseXBoID0gc3ZnR2x5cGgudGFibGVFbnRyeTsK
QEAgLTE5MSwxNiArMTg5LDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxl
Y3Rpb24oV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoRGF0YSYgZ2x5CiAgICAgICAgIGFz
c29jaWF0ZWRGb250RWxlbWVudC0+Y29sbGVjdEdseXBoc0ZvclN0cmluZyhyZW1haW5pbmdUZXh0
SW5SdW4sIGdseXBocyk7CiAgICAgfQogCi0gICAgc2l6ZV90IGdseXBoc1NpemUgPSBnbHlwaHMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhzU2l6ZTsgKytpKSB7Ci0g
ICAgICAgIFNWR0dseXBoJiBzdmdHbHlwaCA9IGdseXBoc1tpXTsKLSAgICAgICAgaWYgKHN2Z0ds
eXBoLmlzUGFydE9mTGlnYXR1cmUpCisgICAgZm9yIChhdXRvJiBnbHlwaCA6IGdseXBocykgewor
ICAgICAgICBpZiAoZ2x5cGguaXNQYXJ0T2ZMaWdhdHVyZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICBpZiAoIWlzQ29tcGF0aWJsZUdseXBoKHN2Z0dseXBoLCBpc1ZlcnRpY2FsVGV4
dCwgbGFuZ3VhZ2UsIGFyYWJpY0Zvcm1zLCBjdXJyZW50Q2hhcmFjdGVyLCBjdXJyZW50Q2hhcmFj
dGVyICsgc3ZnR2x5cGgudW5pY29kZVN0cmluZ0xlbmd0aCkpCisgICAgICAgIGlmICghaXNDb21w
YXRpYmxlR2x5cGgoZ2x5cGgsIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgYXJhYmljRm9ybXMs
IGN1cnJlbnRDaGFyYWN0ZXIsIGN1cnJlbnRDaGFyYWN0ZXIgKyBnbHlwaC51bmljb2RlU3RyaW5n
TGVuZ3RoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpdGVyYXRvci5zZXRMYXN0
R2x5cGhOYW1lKHN2Z0dseXBoLmdseXBoTmFtZSk7Ci0gICAgICAgIGdseXBoRGF0YS5nbHlwaCA9
IHN2Z0dseXBoLnRhYmxlRW50cnk7Ci0gICAgICAgIGFkdmFuY2VMZW5ndGggPSBzdmdHbHlwaC51
bmljb2RlU3RyaW5nTGVuZ3RoOworICAgICAgICBpdGVyYXRvci5zZXRMYXN0R2x5cGhOYW1lKGds
eXBoLmdseXBoTmFtZSk7CisgICAgICAgIGdseXBoRGF0YS5nbHlwaCA9IGdseXBoLnRhYmxlRW50
cnk7CisgICAgICAgIGFkdmFuY2VMZW5ndGggPSBnbHlwaC51bmljb2RlU3RyaW5nTGVuZ3RoOwog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1l
bnQuY3BwCmluZGV4IDFhMDY5MTMwZTcxZmJlNzlmZGUxMTllYjg2ZmYyMTFhNDBlMzAzZmYuLjEx
NDg4MTIyNDljMjhlNzQ0ZTZkNzliMjlkOWYwNTM3ODY0Yjg5NjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnRFbGVtZW50LmNwcApAQCAtODYsMTAgKzg2LDcgQEAgdm9pZCBTVkdGb250RWxlbWVu
dDo6cmVnaXN0ZXJMaWdhdHVyZXNJbkdseXBoQ2FjaGUoVmVjdG9yPFN0cmluZz4mIGxpZ2F0dXJl
cykKICAgICAvLyB3aWxsIG5vdCBiZSBhYmxlIHRvIGZpbmQgYSBnbHlwaCBmb3IgImYiLCBidXQg
aGFuZGxlcyB0aGUgZmFsbGJhY2sKICAgICAvLyBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uIHByb3Bl
cmx5IHRocm91Z2ggZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKCkuCiAgICAgVmVjdG9yPFNWR0dseXBo
PiBnbHlwaHM7Ci0gICAgc2l6ZV90IGxpZ2F0dXJlc1NpemUgPSBsaWdhdHVyZXMuc2l6ZSgpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlnYXR1cmVzU2l6ZTsgKytpKSB7Ci0gICAgICAg
IGNvbnN0IFN0cmluZyYgdW5pY29kZSA9IGxpZ2F0dXJlc1tpXTsKLQorICAgIGZvciAoYXV0byYg
dW5pY29kZSA6IGxpZ2F0dXJlcykgewogICAgICAgICB1bnNpZ25lZCB1bmljb2RlTGVuZ3RoID0g
dW5pY29kZS5sZW5ndGgoKTsKICAgICAgICAgQVNTRVJUKHVuaWNvZGVMZW5ndGggPiAxKTsKIApA
QCAtMTc0LDI3ICsxNzEsMjMgQEAgdm9pZCBTVkdLZXJuaW5nTWFwOjppbnNlcnQoY29uc3QgU1ZH
S2VybmluZ1BhaXImIGtlcm5pbmdQYWlyKQogICAgIHN2Z0tlcm5pbmcudW5pY29kZU5hbWUyID0g
a2VybmluZ1BhaXIudW5pY29kZU5hbWUyOwogICAgIHN2Z0tlcm5pbmcuZ2x5cGhOYW1lMiA9IGtl
cm5pbmdQYWlyLmdseXBoTmFtZTI7CiAKLSAgICBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJh
dG9yIHVJdCA9IGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMS5iZWdpbigpOwotICAgIGNvbnN0IEhh
c2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdUVuZCA9IGtlcm5pbmdQYWlyLnVuaWNvZGVO
YW1lMS5lbmQoKTsKLSAgICBmb3IgKDsgdUl0ICE9IHVFbmQ7ICsrdUl0KSB7Ci0gICAgICAgIGlm
ICh1bmljb2RlTWFwLmNvbnRhaW5zKCp1SXQpKQotICAgICAgICAgICAgdW5pY29kZU1hcC5nZXQo
KnVJdCktPmFwcGVuZChzdmdLZXJuaW5nKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBrZXJuaW5n
UGFpci51bmljb2RlTmFtZTEpIHsKKyAgICAgICAgaWYgKHVuaWNvZGVNYXAuY29udGFpbnMobmFt
ZSkpCisgICAgICAgICAgICB1bmljb2RlTWFwLmdldChuYW1lKS0+YXBwZW5kKHN2Z0tlcm5pbmcp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGF1dG8gbmV3VmVjdG9yID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdLZXJuaW5nVmVjdG9yPigpOwogICAgICAgICAgICAgbmV3VmVjdG9yLT5hcHBl
bmQoc3ZnS2VybmluZyk7Ci0gICAgICAgICAgICB1bmljb2RlTWFwLmFkZCgqdUl0LCBXVEY6Om1v
dmUobmV3VmVjdG9yKSk7CisgICAgICAgICAgICB1bmljb2RlTWFwLmFkZChuYW1lLCBXVEY6Om1v
dmUobmV3VmVjdG9yKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBIYXNoU2V0PFN0cmluZz46
OmNvbnN0X2l0ZXJhdG9yIGdJdCA9IGtlcm5pbmdQYWlyLmdseXBoTmFtZTEuYmVnaW4oKTsKLSAg
ICBjb25zdCBIYXNoU2V0PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGdFbmQgPSBrZXJuaW5nUGFp
ci5nbHlwaE5hbWUxLmVuZCgpOwotICAgIGZvciAoOyBnSXQgIT0gZ0VuZDsgKytnSXQpIHsKLSAg
ICAgICAgaWYgKGdseXBoTWFwLmNvbnRhaW5zKCpnSXQpKQotICAgICAgICAgICAgZ2x5cGhNYXAu
Z2V0KCpnSXQpLT5hcHBlbmQoc3ZnS2VybmluZyk7CisgICAgZm9yIChhdXRvJiBuYW1lIDoga2Vy
bmluZ1BhaXIuZ2x5cGhOYW1lMSkgeworICAgICAgICBpZiAoZ2x5cGhNYXAuY29udGFpbnMobmFt
ZSkpCisgICAgICAgICAgICBnbHlwaE1hcC5nZXQobmFtZSktPmFwcGVuZChzdmdLZXJuaW5nKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhdXRvIG5ld1ZlY3RvciA9IHN0ZDo6bWFrZV91
bmlxdWU8U1ZHS2VybmluZ1ZlY3Rvcj4oKTsKICAgICAgICAgICAgIG5ld1ZlY3Rvci0+YXBwZW5k
KHN2Z0tlcm5pbmcpOwotICAgICAgICAgICAgZ2x5cGhNYXAuYWRkKCpnSXQsIFdURjo6bW92ZShu
ZXdWZWN0b3IpKTsKKyAgICAgICAgICAgIGdseXBoTWFwLmFkZChuYW1lLCBXVEY6Om1vdmUobmV3
VmVjdG9yKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIwOSw5ICsyMDIsOCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgc3RyaW5nTWF0Y2hlc1VuaWNvZGVSYW5nZShjb25zdCBTdHJpbmcmIHVuaWNv
ZGVTdHJpbmcsIGNvbnN0CiAKICAgICBpZiAoIXJhbmdlcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
VUNoYXIgZmlyc3RDaGFyID0gdW5pY29kZVN0cmluZ1swXTsKLSAgICAgICAgY29uc3QgVW5pY29k
ZVJhbmdlczo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcmFuZ2VzLmVuZCgpOwotICAgICAgICBmb3Ig
KFVuaWNvZGVSYW5nZXM6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcmFuZ2VzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgaWYgKGZpcnN0Q2hhciA+PSBpdC0+Zmlyc3QgJiYg
Zmlyc3RDaGFyIDw9IGl0LT5zZWNvbmQpCisgICAgICAgIGZvciAoYXV0byYgcmFuZ2UgOiByYW5n
ZXMpIHsKKyAgICAgICAgICAgIGlmIChmaXJzdENoYXIgPj0gcmFuZ2UuZmlyc3QgJiYgZmlyc3RD
aGFyIDw9IHJhbmdlLnNlY29uZCkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQnl0ZVN0
cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKaW5kZXggOWQ5
ZDJhMmIyM2M2MDBmZWJiNTM0MGNiY2RkMWI2MWRkYzNiOWYxNS4uNzVkM2I4YTBhMjRjMGYxMTk2
NWI2YzU0MmJjZmQ5Yzk5OTYxMzNkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R1BhdGhCeXRlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3Ry
ZWFtLmgKQEAgLTYwLDggKzYwLDggQEAgcHVibGljOgogICAgIHZvaWQgYXBwZW5kKHVuc2lnbmVk
IGNoYXIgYnl0ZSkgeyBtX2RhdGEuYXBwZW5kKGJ5dGUpOyB9CiAgICAgdm9pZCBhcHBlbmQoU1ZH
UGF0aEJ5dGVTdHJlYW0qIG90aGVyKQogICAgIHsKLSAgICAgICAgZm9yIChEYXRhSXRlcmF0b3Ig
aXQgPSBvdGhlci0+YmVnaW4oKTsgaXQgIT0gb3RoZXItPmVuZCgpOyArK2l0KQotICAgICAgICAg
ICAgYXBwZW5kKCppdCk7CisgICAgICAgIGZvciAoYXV0byYgc3RyZWFtIDogKm90aGVyKQorICAg
ICAgICAgICAgYXBwZW5kKHN0cmVhbSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXIoKSB7IG1fZGF0
YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1fZGF0YS5z
aXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRp
bWVDb250YWluZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNv
bnRhaW5lci5jcHAKaW5kZXggNTMyNjhhZGEzNmVhNTM1ZmE3OGU3YmNlNjRjY2QyMDJmZmU5MWU1
ZC4uMzk5Y2NiNDk3OTM5MjRlODkxZTBiMTc3MWFhNmE2OGFkY2VjYjMzMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHAKQEAgLTE4
NywxMSArMTg3LDkgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZChTTUlMVGlt
ZSB0aW1lKQogI2lmbmRlZiBOREVCVUcKICAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25z
Q2hhbmdlcyA9IHRydWU7CiAjZW5kaWYKLSAgICBmb3IgKGF1dG8mIGl0IDogbV9zY2hlZHVsZWRB
bmltYXRpb25zKSB7Ci0gICAgICAgIEFuaW1hdGlvbnNWZWN0b3IqIHNjaGVkdWxlZCA9IGl0LnZh
bHVlLmdldCgpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gc2NoZWR1bGVkLT5zaXplKCk7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyBuKyspCi0gICAgICAgICAgICBz
Y2hlZHVsZWQtPmF0KG4pLT5yZXNldCgpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9z
Y2hlZHVsZWRBbmltYXRpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgZWxlbWVu
dCA6ICphbmltYXRpb24pCisgICAgICAgICAgICBlbGVtZW50LT5yZXNldCgpOwogICAgIH0KICNp
Zm5kZWYgTkRFQlVHCiAgICAgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSBm
YWxzZTsKQEAgLTI3NCw5ICsyNzIsNyBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVB
bmltYXRpb25zKFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vla1RvVGltZSkKICAgICAgICAgc29y
dEJ5UHJpb3JpdHkoKnNjaGVkdWxlZCwgZWxhcHNlZCk7CiAKICAgICAgICAgU1ZHU01JTEVsZW1l
bnQqIHJlc3VsdEVsZW1lbnQgPSAwOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gc2NoZWR1bGVk
LT5zaXplKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyBuKyspIHsK
LSAgICAgICAgICAgIFNWR1NNSUxFbGVtZW50KiBhbmltYXRpb24gPSBzY2hlZHVsZWQtPmF0KG4p
OworICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6ICpzY2hlZHVsZWQpIHsKICAgICAgICAg
ICAgIEFTU0VSVChhbmltYXRpb24tPnRpbWVDb250YWluZXIoKSA9PSB0aGlzKTsKICAgICAgICAg
ICAgIEFTU0VSVChhbmltYXRpb24tPnRhcmdldEVsZW1lbnQoKSk7CiAgICAgICAgICAgICBBU1NF
UlQoYW5pbWF0aW9uLT5oYXNWYWxpZEF0dHJpYnV0ZU5hbWUoKSk7CkBAIC0zMDEsOCArMjk3LDcg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFw
c2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAgICAgICAgICBhbmltYXRpb25zVG9BcHBseS5hcHBl
bmQocmVzdWx0RWxlbWVudCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgYW5pbWF0aW9uc1RvQXBw
bHlTaXplID0gYW5pbWF0aW9uc1RvQXBwbHkuc2l6ZSgpOwotICAgIGlmICghYW5pbWF0aW9uc1Rv
QXBwbHlTaXplKSB7CisgICAgaWYgKGFuaW1hdGlvbnNUb0FwcGx5LmlzRW1wdHkoKSkgewogI2lm
bmRlZiBOREVCVUcKICAgICAgICAgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMg
PSBmYWxzZTsKICNlbmRpZgpAQCAtMzExLDggKzMwNiw4IEBAIHZvaWQgU01JTFRpbWVDb250YWlu
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9vbCBzZWVrVG9UaW1lKQog
ICAgIH0KIAogICAgIC8vIEFwcGx5IHJlc3VsdHMgdG8gdGFyZ2V0IGVsZW1lbnRzLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRpb25zVG9BcHBseVNpemU7ICsraSkKLSAgICAg
ICAgYW5pbWF0aW9uc1RvQXBwbHlbaV0tPmFwcGx5UmVzdWx0c1RvVGFyZ2V0KCk7CisgICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBhbmltYXRpb25zVG9BcHBseSkKKyAgICAgICAgYW5pbWF0aW9u
LT5hcHBseVJlc3VsdHNUb1RhcmdldCgpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIG1fcHJldmVu
dFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwCmluZGV4IGY1Y2FmNzRlNzE0MDY3Njcy
NTJjODM1YjAyZDFiYWQxMTUxMzA1YTkuLmM5OTBhYWE5MGZhOWJhZWE2YzdmZThmNGMyMDNkODQ1
YzI4ZGIxYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01J
TEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVs
ZW1lbnQuY3BwCkBAIC00MjEsMTQgKzQyMSwxNCBAQCB2b2lkIFNWR1NNSUxFbGVtZW50OjpwYXJz
ZUJlZ2luT3JFbmQoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZywgQmVnaW5PckVuZCBiZWdpbgog
ICAgIGlmIChiZWdpbk9yRW5kID09IEVuZCkKICAgICAgICAgbV9oYXNFbmRFdmVudENvbmRpdGlv
bnMgPSBmYWxzZTsKICAgICBIYXNoU2V0PGRvdWJsZT4gZXhpc3Rpbmc7Ci0gICAgZm9yICh1bnNp
Z25lZCBuID0gMDsgbiA8IHRpbWVMaXN0LnNpemUoKTsgKytuKQotICAgICAgICBleGlzdGluZy5h
ZGQodGltZUxpc3Rbbl0udGltZSgpLnZhbHVlKCkpOworICAgIGZvciAoYXV0byYgdGltZSA6IHRp
bWVMaXN0KQorICAgICAgICBleGlzdGluZy5hZGQodGltZS50aW1lKCkudmFsdWUoKSk7CiAgICAg
VmVjdG9yPFN0cmluZz4gc3BsaXRTdHJpbmc7CiAgICAgcGFyc2VTdHJpbmcuc3BsaXQoJzsnLCBz
cGxpdFN0cmluZyk7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHNwbGl0U3RyaW5nLnNp
emUoKTsgKytuKSB7Ci0gICAgICAgIFNNSUxUaW1lIHZhbHVlID0gcGFyc2VDbG9ja1ZhbHVlKHNw
bGl0U3RyaW5nW25dKTsKKyAgICBmb3IgKGF1dG8mIHN0cmluZyA6IHNwbGl0U3RyaW5nKSB7Cisg
ICAgICAgIFNNSUxUaW1lIHZhbHVlID0gcGFyc2VDbG9ja1ZhbHVlKHN0cmluZyk7CiAgICAgICAg
IGlmICh2YWx1ZS5pc1VucmVzb2x2ZWQoKSkKLSAgICAgICAgICAgIHBhcnNlQ29uZGl0aW9uKHNw
bGl0U3RyaW5nW25dLCBiZWdpbk9yRW5kKTsKKyAgICAgICAgICAgIHBhcnNlQ29uZGl0aW9uKHN0
cmluZywgYmVnaW5PckVuZCk7CiAgICAgICAgIGVsc2UgaWYgKCFleGlzdGluZy5jb250YWlucyh2
YWx1ZS52YWx1ZSgpKSkKICAgICAgICAgICAgIHRpbWVMaXN0LmFwcGVuZChTTUlMVGltZVdpdGhP
cmlnaW4odmFsdWUsIFNNSUxUaW1lV2l0aE9yaWdpbjo6UGFyc2VyT3JpZ2luKSk7CiAgICAgfQpA
QCAtNTE4LDggKzUxOCw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNvbm5lY3RDb25kaXRpb25z
KCkKICAgICBpZiAobV9jb25kaXRpb25zQ29ubmVjdGVkKQogICAgICAgICBkaXNjb25uZWN0Q29u
ZGl0aW9ucygpOwogICAgIG1fY29uZGl0aW9uc0Nvbm5lY3RlZCA9IHRydWU7Ci0gICAgZm9yICh1
bnNpZ25lZCBuID0gMDsgbiA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgewotICAgICAgICBD
b25kaXRpb24mIGNvbmRpdGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICBmb3IgKGF1dG8mIGNv
bmRpdGlvbiA6IG1fY29uZGl0aW9ucykgewogICAgICAgICBpZiAoY29uZGl0aW9uLm1fdHlwZSA9
PSBDb25kaXRpb246OkV2ZW50QmFzZSkgewogICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24u
bV9zeW5jYmFzZSk7CiAgICAgICAgICAgICBFbGVtZW50KiBldmVudEJhc2UgPSBldmVudEJhc2VG
b3IoY29uZGl0aW9uKTsKQEAgLTU0Nyw4ICs1NDYsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpk
aXNjb25uZWN0Q29uZGl0aW9ucygpCiAgICAgaWYgKCFtX2NvbmRpdGlvbnNDb25uZWN0ZWQpCiAg
ICAgICAgIHJldHVybjsKICAgICBtX2NvbmRpdGlvbnNDb25uZWN0ZWQgPSBmYWxzZTsKLSAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgbV9jb25kaXRpb25zLnNpemUoKTsgKytuKSB7Ci0gICAg
ICAgIENvbmRpdGlvbiYgY29uZGl0aW9uID0gbV9jb25kaXRpb25zW25dOworICAgIGZvciAoYXV0
byYgY29uZGl0aW9uIDogbV9jb25kaXRpb25zKSB7CiAgICAgICAgIGlmIChjb25kaXRpb24ubV90
eXBlID09IENvbmRpdGlvbjo6RXZlbnRCYXNlKSB7CiAgICAgICAgICAgICBBU1NFUlQoIWNvbmRp
dGlvbi5tX3N5bmNiYXNlKTsKICAgICAgICAgICAgIGlmICghY29uZGl0aW9uLm1fZXZlbnRMaXN0
ZW5lcikKQEAgLTExMjYsOSArMTEyNCw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6Om5vdGlmeURl
cGVuZGVudHNJbnRlcnZhbENoYW5nZWQoTmV3T3JFeGlzdGluZ0ludGVydmFsIG5ld09yCiAgICAg
ICAgIHJldHVybjsKICAgICBsb29wQnJlYWtlci5hZGQodGhpcyk7CiAgICAgCi0gICAgVGltZURl
cGVuZGVudFNldDo6aXRlcmF0b3IgZW5kID0gbV90aW1lRGVwZW5kZW50cy5lbmQoKTsKLSAgICBm
b3IgKFRpbWVEZXBlbmRlbnRTZXQ6Oml0ZXJhdG9yIGl0ID0gbV90aW1lRGVwZW5kZW50cy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgU1ZHU01JTEVsZW1lbnQqIGRlcGVuZGVu
dCA9ICppdDsKKyAgICBmb3IgKGF1dG8mIGRlcGVuZGVudCA6IG1fdGltZURlcGVuZGVudHMpIHsK
ICAgICAgICAgZGVwZW5kZW50LT5jcmVhdGVJbnN0YW5jZVRpbWVzRnJvbVN5bmNiYXNlKHRoaXMs
IG5ld09yRXhpc3RpbmcpOwogICAgIH0KIApAQCAtMTEzOSw4ICsxMTM1LDcgQEAgdm9pZCBTVkdT
TUlMRWxlbWVudDo6Y3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZShTVkdTTUlMRWxlbWVu
dCogc3luY2Jhc2UsIE4KIHsKICAgICAvLyBGSVhNRTogVG8gYmUgcmVhbGx5IGNvcnJlY3QsIHRo
aXMgc2hvdWxkIGhhbmRsZSB1cGRhdGluZyBleGlzaW5nIGludGVydmFsIGJ5IGNoYW5naW5nIAog
ICAgIC8vIHRoZSBhc3NvY2lhdGVkIHRpbWVzIGluc3RlYWQgb2YgY3JlYXRpbmcgbmV3IG9uZXMu
Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikg
ewotICAgICAgICBDb25kaXRpb24mIGNvbmRpdGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICBm
b3IgKGF1dG8mIGNvbmRpdGlvbiA6IG1fY29uZGl0aW9ucykgewogICAgICAgICBpZiAoY29uZGl0
aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OlN5bmNiYXNlICYmIGNvbmRpdGlvbi5tX3N5bmNiYXNl
ID09IHN5bmNiYXNlKSB7CiAgICAgICAgICAgICBBU1NFUlQoY29uZGl0aW9uLm1fbmFtZSA9PSAi
YmVnaW4iIHx8IGNvbmRpdGlvbi5tX25hbWUgPT0gImVuZCIpOwogICAgICAgICAgICAgLy8gTm8g
bmVzdGVkIHRpbWUgY29udGFpbmVycyBpbiBTVkcsIG5vIG5lZWQgZm9yIGNyYXp5IHRpbWUgc3Bh
Y2UgY29udmVyc2lvbnMuIFBoZXchCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9n
cmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCmluZGV4IDRiYjFhMGFhZDdmMzNh
YmYyMzhhZDE0ZWExMWFkNTBhNjBiNDkyODQuLmM1NmI1Yzc0N2YwMDlhYTg5MzVjMjZmNjQ3MDhm
ODQzMDU1OGQxMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0
ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGlj
cy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwCkBAIC05NSwxMCArOTUsOCBAQCB2b2lkIFNW
R0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShGaWx0ZXJFZmZlY3QqIGVmZmVj
dCkKIAogICAgIGVmZmVjdC0+Y2xlYXJSZXN1bHQoKTsKIAotICAgIEhhc2hTZXQ8RmlsdGVyRWZm
ZWN0Kj4mIGVmZmVjdFJlZmVyZW5jZXMgPSB0aGlzLT5lZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCk7
Ci0gICAgSGFzaFNldDxGaWx0ZXJFZmZlY3QqPjo6aXRlcmF0b3IgZW5kID0gZWZmZWN0UmVmZXJl
bmNlcy5lbmQoKTsKLSAgICBmb3IgKEhhc2hTZXQ8RmlsdGVyRWZmZWN0Kj46Oml0ZXJhdG9yIGl0
ID0gZWZmZWN0UmVmZXJlbmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICBj
bGVhclJlc3VsdHNSZWN1cnNpdmUoKml0KTsKKyAgICBmb3IgKGF1dG8mIHJlZmVyZW5jZSA6IHRo
aXMtPmVmZmVjdFJlZmVyZW5jZXMoZWZmZWN0KSkKKyAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJz
aXZlKHJlZmVyZW5jZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuaApp
bmRleCAyYjFkZDJmNmUyY2Y1Zjk2OWM5Yjg4MDRjODhmYjU3N2VkMGVhZjFlLi4wODY3ZDI4OWNi
MTlhNDRmOThlMGQyZDI0ODM2YmZkMjU4YmEyZDUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oCkBAIC02Miw5ICs2
Miw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgaW5saW5lIHZvaWQgYWRkQnVpbHRpbkVmZmVj
dHMoKQogICAgIHsKLSAgICAgICAgSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJF
ZmZlY3Q+Pjo6aXRlcmF0b3IgZW5kID0gbV9idWlsdGluRWZmZWN0cy5lbmQoKTsKLSAgICAgICAg
Zm9yIChIYXNoTWFwPEF0b21pY1N0cmluZywgUmVmUHRyPEZpbHRlckVmZmVjdD4+OjppdGVyYXRv
ciBpdGVyYXRvciA9IG1fYnVpbHRpbkVmZmVjdHMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gZW5kOyAr
K2l0ZXJhdG9yKQotICAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNlcy5hZGQoaXRlcmF0b3It
PnZhbHVlLCBGaWx0ZXJFZmZlY3RTZXQoKSk7CisgICAgICAgIGZvciAoYXV0byYgZWZmZWN0IDog
bV9idWlsdGluRWZmZWN0cy52YWx1ZXMoKSkKKyAgICAgICAgICAgIG1fZWZmZWN0UmVmZXJlbmNl
cy5hZGQoZWZmZWN0LCBGaWx0ZXJFZmZlY3RTZXQoKSk7CiAgICAgfQogCiAgICAgSGFzaE1hcDxB
dG9taWNTdHJpbmcsIFJlZlB0cjxGaWx0ZXJFZmZlY3Q+PiBtX2J1aWx0aW5FZmZlY3RzOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0
eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5
LmNwcAppbmRleCA0OWRjOGZjNTU5OWU1NThhMGZhNzNmYzBhYzViMmJiZmM0MmQ1OWI1Li5hYjEx
NGFiMmNhMjBjMjI0ZjNlMTQ5NDU0ZjJhODEwNmNhZjk3MGRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdBbmltYXRlZFByb3BlcnR5LmNwcApAQCAtMzcs
MTAgKzM3LDkgQEAgU1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eShTVkdF
bGVtZW50KiBjb250ZXh0RWxlbWVudCwgY29uc3QgUXVhbGkKIFNWR0FuaW1hdGVkUHJvcGVydHk6
On5TVkdBbmltYXRlZFByb3BlcnR5KCkKIHsKICAgICAvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGNh
Y2hlLgotICAgIENhY2hlJiBjYWNoZSA9ICphbmltYXRlZFByb3BlcnR5Q2FjaGUoKTsKLSAgICBm
b3IgKGF1dG8gaXQgPSBjYWNoZS5iZWdpbigpLCBlbmQgPSBjYWNoZS5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUgPT0gdGhpcykgewotICAgICAgICAgICAg
Y2FjaGUucmVtb3ZlKGl0KTsKKyAgICBmb3IgKGF1dG8mIGNhY2hlIDogKmFuaW1hdGVkUHJvcGVy
dHlDYWNoZSgpKSB7CisgICAgICAgIGlmIChjYWNoZS52YWx1ZSA9PSB0aGlzKSB7CisgICAgICAg
ICAgICBhbmltYXRlZFByb3BlcnR5Q2FjaGUoKS0+cmVtb3ZlKGNhY2hlLmtleSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5LmgKaW5kZXggNDgwODg0ZWE3MmNhN2QwZGE2N2MxMzBl
M2YyM2RkNzgxZGZjYmNhYy4uNzc3ODhlMTAyMjQ4ZDUwMjUyYzgwMTRmNzdhMDY1ZDFiYWQ5NTlk
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3Bl
cnR5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5
LmgKQEAgLTYyLDkgKzYyLDggQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gU2VlIFNWR1By
b3BlcnR5VGVhck9mZjo6ZGV0YWNoV3JhcHBlcigpIGZvciBhbiBleHBsYW5hdGlvbiBhYm91dCB3
aGF0J3MgaGFwcGVuaW5nIGhlcmUuCiAgICAgICAgIEFTU0VSVCh3cmFwcGVycyk7Ci0gICAgICAg
IHVuc2lnbmVkIHNpemUgPSB3cmFwcGVycy0+c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoTGlzdEl0ZW1UZWFyT2Zm
KiBpdGVtID0gd3JhcHBlcnMtPmF0KGkpLmdldCgpKQorICAgICAgICBmb3IgKGF1dG8mIGl0ZW0g
OiAqd3JhcHBlcnMpIHsKKyAgICAgICAgICAgIGlmIChpdGVtKQogICAgICAgICAgICAgICAgIGl0
ZW0tPmRldGFjaFdyYXBwZXIoKTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zi5jcHAKaW5kZXggNTExN2NlNjJjYTdkZmI5N2YzZWZiZDZhODNmYzQxOWJkMWY5NjJhZi4uMzk5
Mjc0MWY5ZmRkMWYyNTcxZDU3N2EzYmFhMGIwY2Y0NmI0NzY5MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVy
dHlUZWFyT2ZmLmNwcApAQCAtMzAsOSArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB2b2lk
IFNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjbGVhckNvbnRleHRBbmRSb2xlcygpCiB7
CiAgICAgQVNTRVJUKG1fdmFsdWVzKTsKLSAgICB1bnNpZ25lZCBzaXplID0gbV92YWx1ZXMtPnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAg
IExpc3RJdGVtVHlwZSBpdGVtID0gbV92YWx1ZXMtPmF0KGkpOworICAgIGZvciAoYXV0byYgaXRl
bSA6ICptX3ZhbHVlcykgewogICAgICAgICBzdGF0aWNfY2FzdDxTVkdQYXRoU2VnV2l0aENvbnRl
eHQqPihpdGVtLmdldCgpKS0+c2V0Q29udGV4dEFuZFJvbGUoMCwgUGF0aFNlZ1VuZGVmaW5lZFJv
bGUpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253517</attachid>
            <date>2015-05-21 04:06:11 -0700</date>
            <delta_ts>2015-05-21 23:34:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145209-20150521200605.patch</filename>
            <type>text/plain</type>
            <size>33730</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg5MjAwMTdmMWVkYjFk
YmQ2YjRlY2E3NjRjMTE5YTNmYmQ3ODcxNi4uNDdiNGYxMzBhMjYzZDFkMjAyODQxNTEzOTdhNDE2
ZmYxMzZmYTI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA1LTIxICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL3N2Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IHRlc3RzLgorCisgICAgICAgICog
c3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0
eVR5cGVzQXJlQ29uc2lzdGVudCk6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkUGF0aC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFBhdGhBbmltYXRvcjo6c3RhcnRBbmltVmFs
QW5pbWF0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVkVHlwZUFuaW1hdG9yOjpleGVjdXRlQWN0aW9uKToK
KyAgICAgICAgKiBzdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdBbmltYXRpb25FbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6CisgICAgICAgICogc3ZnL1NW
R0N1cnNvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6
flNWR0N1cnNvckVsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpwYXVzZUFuaW1h
dGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnBhdXNl
QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmRp
c3BhdGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1vc3RTVkdFbGVtZW50cyk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdpdGhQZW5kaW5nUmVzb3VyY2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlRWxlbWVu
dEZyb21QZW5kaW5nUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6cmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQpOgorICAgICAgICAq
IHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvcHVsYXRlQXR0cmlidXRl
TmFtZVRvQ1NTUHJvcGVydHlJRE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZUF0dHJp
YnV0ZU5hbWVUb0FuaW1hdGVkUHJvcGVydHlUeXBlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OnBv
cHVsYXRlQ1NTUHJvcGVydHlXaXRoU1ZHRE9NTmFtZVRvQW5pbWF0ZWRQcm9wZXJ0eVR5cGVNYXAp
OgorICAgICAgICAoV2ViQ29yZTo6aGFzTG9hZExpc3RlbmVyKToKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RWxlbWVudDo6cmVnaXN0ZXJMaWdhdHVyZXNJbkdseXBoQ2FjaGUp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHS2VybmluZ01hcDo6aW5zZXJ0KToKKyAgICAgICAgKFdl
YkNvcmU6OnN0cmluZ01hdGNoZXNVbmljb2RlUmFuZ2UpOgorICAgICAgICAqIHN2Zy9TVkdQYXRo
Qnl0ZVN0cmVhbS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06OmFwcGVu
ZCk6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TTUlMVGltZUNvbnRhaW5lci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6c2V0RWxhcHNlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyk6CisgICAgICAgICog
c3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdT
TUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxF
bGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxl
bWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU01JTEVs
ZW1lbnQ6Om5vdGlmeURlcGVuZGVudHNJbnRlcnZhbENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OmNyZWF0ZUluc3RhbmNlVGltZXNGcm9tU3luY2Jhc2UpOgorICAg
ICAgICAqIHN2Zy9ncmFwaGljcy9maWx0ZXJzL1NWR0ZpbHRlckJ1aWxkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6Y2xlYXJSZXN1bHRzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaWx0ZXJCdWlsZGVyOjphZGRCdWlsdGluRWZmZWN0cyk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSk6CisgICAgICAg
ICogc3ZnL3Byb3BlcnRpZXMvU1ZHTGlzdFByb3BlcnR5Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaXN0UHJvcGVydHk6OmRldGFjaExpc3RXcmFwcGVyc0FuZFJlc2l6ZSk6CisgICAgICAgICog
c3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY6OmNsZWFyQ29udGV4dEFu
ZFJvbGVzKToKKwogMjAxNS0wNS0yMSAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUHVyZ2UgUGFzc1JlZlB0ciBpbiBXZWJDb3JlL01vZHVsZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVFbGVtZW50QmFzZS5jcHAKaW5kZXggZTUwNjVj
ZWIyNzU0ZGFjZTg4OGQ0YTA2ODc5NGViY2JjMWQzNzk4OS4uY2VkZDljYTI0OWViMWQ5ZjdlYWY5
ZDFjZjkxZmFjODY3NWI1MGZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVFbGVtZW50QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVF
bGVtZW50QmFzZS5jcHAKQEAgLTE3MSwxMiArMTcxLDExIEBAIGJvb2wgU1ZHQW5pbWF0ZUVsZW1l
bnRCYXNlOjpjYWxjdWxhdGVGcm9tQW5kQnlWYWx1ZXMoY29uc3QgU3RyaW5nJiBmcm9tU3RyaW5n
LCBjCiAjaWZuZGVmIE5ERUJVRwogc3RhdGljIGlubGluZSBib29sIHByb3BlcnR5VHlwZXNBcmVD
b25zaXN0ZW50KEFuaW1hdGVkUHJvcGVydHlUeXBlIGV4cGVjdGVkUHJvcGVydHlUeXBlLCBjb25z
dCBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3QmIGFuaW1hdGVkVHlwZXMpCiB7Ci0gICAg
U1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBhbmlt
YXRlZFR5cGVzLmVuZCgpOwotICAgIGZvciAoU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFuaW1hdGVkVHlwZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaXQtPnByb3BlcnRpZXMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5VHlwZSAhPSBpdC0+
cHJvcGVydGllc1tpXS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgeworICAgIGZvciAoYXV0byYg
dHlwZSA6IGFuaW1hdGVkVHlwZXMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6IHR5
cGUucHJvcGVydGllcygpKSB7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRQcm9wZXJ0eVR5cGUg
IT0gcHJvcGVydHktPmFuaW1hdGVkUHJvcGVydHlUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBvbmx5IGFsbG93ZWQgaW5jb25zaXN0ZW5jeS4gU1ZHQW5pbWF0ZWRBbmds
ZUFuaW1hdG9yIGhhbmRsZXMgYm90aCBTVkdBbmltYXRlZEFuZ2xlICYgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbiBmb3IgbWFya2VycyBvcmllbnQgYXR0cmlidXRlLgotICAgICAgICAgICAgICAgIGlm
IChleHBlY3RlZFByb3BlcnR5VHlwZSA9PSBBbmltYXRlZEFuZ2xlICYmIGl0LT5wcm9wZXJ0aWVz
W2ldLT5hbmltYXRlZFByb3BlcnR5VHlwZSgpID09IEFuaW1hdGVkRW51bWVyYXRpb24pCisgICAg
ICAgICAgICAgICAgaWYgKGV4cGVjdGVkUHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYg
cHJvcGVydHktPmFuaW1hdGVkUHJvcGVydHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0FuaW1hdGVkUGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNw
cAppbmRleCBmYmE4YTYxZDJmODg1NDY1NjAwMzQxN2MzZWM1MTQwMDJlNjBhMDEzLi44MDk3NDc3
NmUyMjM5ZjQzOWQzZGJhNmE5MzdlNTljMDU4NjJiNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
QW5pbWF0ZWRQYXRoLmNwcApAQCAtNTAsMTUgKzUwLDEzIEBAIHN0ZDo6dW5pcXVlX3B0cjxTVkdB
bmltYXRlZFR5cGU+IFNWR0FuaW1hdGVkUGF0aEFuaW1hdG9yOjpzdGFydEFuaW1WYWxBbmltYXRp
b24oCiAKICAgICBWZWN0b3I8UmVmUHRyPFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRl
YXJPZmY+PiByZXN1bHQ7CiAKLSAgICBTVkdFbGVtZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGFuaW1hdGVkVHlwZXMuZW5kKCk7Ci0gICAgZm9yIChTVkdFbGVt
ZW50QW5pbWF0ZWRQcm9wZXJ0eUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYW5pbWF0ZWRUeXBl
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2FzdEFu
aW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5
VGVhck9mZj4oaXQtPnByb3BlcnRpZXNbMF0uZ2V0KCkpKTsKKyAgICBmb3IgKGF1dG8mIHR5cGUg
OiBhbmltYXRlZFR5cGVzKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhc3RBbmltYXRlZFByb3Bl
cnR5VG9BY3R1YWxUeXBlPFNWR0FuaW1hdGVkUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmY+KHR5
cGUucHJvcGVydGllc1swXS5nZXQoKSkpOwogCiAgICAgU1ZHRWxlbWVudDo6SW5zdGFuY2VVcGRh
dGVCbG9ja2VyIGJsb2NrZXIoKnByb3BlcnR5LT5jb250ZXh0RWxlbWVudCgpKTsKIAotICAgIHNp
emVfdCByZXN1bHRTaXplID0gcmVzdWx0LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHJlc3VsdFNpemU7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldLT5hbmltYXRpb25TdGFydGVk
KGJ5dGVTdHJlYW0uZ2V0KCksICZiYXNlVmFsdWUpOworICAgIGZvciAoYXV0byYgc2VnbWVudCA6
IHJlc3VsdCkKKyAgICAgICAgc2VnbWVudC0+YW5pbWF0aW9uU3RhcnRlZChieXRlU3RyZWFtLmdl
dCgpLCAmYmFzZVZhbHVlKTsKIAogICAgIHJldHVybiBTVkdBbmltYXRlZFR5cGU6OmNyZWF0ZVBh
dGgoV1RGOjptb3ZlKGJ5dGVTdHJlYW0pKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdBbmltYXRlZFR5cGVBbmltYXRvci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Fu
aW1hdGVkVHlwZUFuaW1hdG9yLmgKaW5kZXggNzUyZTliMjMyYTFmZTdlOGUwNGNkMTc5NjQ1MmNj
OTA3MjliZTU4Ni4uY2JjM2E2MjQwMTRmODdhMmQyYjczMjk1NzM4YjRjMmJhYjcwNzY3MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmgKQEAgLTE5MSwx
MCArMTkxLDkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IENhbid0IHVzZSBTVkdFbGVt
ZW50OjpJbnN0YW5jZVVwZGF0ZUJsb2NrZXIgYmVjYXVzZSBvZiBjaXJjdWxhciBoZWFkZXIgZGVw
ZW5kZW5jeS4gV291bGQgYmUgbmljZSB0byB1bnRhbmdsZSB0aGlzLgogICAgICAgICBzZXRJbnN0
YW5jZVVwZGF0ZXNCbG9ja2VkKCphbmltYXRlZFR5cGVzWzBdLmVsZW1lbnQsIHRydWUpOwogCi0g
ICAgICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gYW5pbWF0ZWRUeXBlcy5lbmQoKTsKLSAgICAgICAgZm9yIChTVkdFbGVtZW50QW5pbWF0ZWRQ
cm9wZXJ0eUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYW5pbWF0ZWRUeXBlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKHdoaWNoUHJvcGVydHkgPCBpdC0+cHJvcGVydGllcy5zaXplKCkpOwotICAgICAgICAg
ICAgQW5pbVZhbFR5cGUqIHByb3BlcnR5ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5
cGU8QW5pbVZhbFR5cGU+KGl0LT5wcm9wZXJ0aWVzW3doaWNoUHJvcGVydHldLmdldCgpKTsKKyAg
ICAgICAgZm9yIChhdXRvJiBhbmltYXRlZFR5cGUgOiBhbmltYXRlZFR5cGVzKSB7CisgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTih3aGljaFByb3BlcnR5IDwgYW5p
bWF0ZWRUeXBlLnByb3BlcnRpZXMuc2l6ZSgpKTsKKyAgICAgICAgICAgIEFuaW1WYWxUeXBlKiBw
cm9wZXJ0eSA9IGNhc3RBbmltYXRlZFByb3BlcnR5VG9BY3R1YWxUeXBlPEFuaW1WYWxUeXBlPihh
bmltYXRlZFR5cGUucHJvcGVydGllc1t3aGljaFByb3BlcnR5XS5nZXQoKSk7CiAKICAgICAgICAg
ICAgIHN3aXRjaCAoYWN0aW9uKSB7CiAgICAgICAgICAgICBjYXNlIFN0YXJ0QW5pbWF0aW9uQWN0
aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCmluZGV4IDVi
YTE5YmNmYWNiMTg4YmZlZWJhMDFkYjJiOGMxNTZjYjY0N2FkYjEuLjM0NjI4YWQ0MTkxOWU2MmVk
Y2U3NDUzODg0MTJhZDJiZjI1ZTU2YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdBbmltYXRpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0
aW9uRWxlbWVudC5jcHAKQEAgLTE2Nyw4ICsxNjcsOCBAQCB2b2lkIFNWR0FuaW1hdGlvbkVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
YwogICAgICAgICAvLyBhbmQgd2hpdGUgc3BhY2UgYmVmb3JlIGFuZCBhZnRlciBzZW1pY29sb24g
c2VwYXJhdG9ycywgaXMgYWxsb3dlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLgogICAgICAgICAvLyBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9hbmltYXRlLmh0bWwjVmFsdWVzQXR0cmlidXRlCiAg
ICAgICAgIHZhbHVlLnN0cmluZygpLnNwbGl0KCc7JywgbV92YWx1ZXMpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV92YWx1ZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X3ZhbHVlc1tpXSA9IG1fdmFsdWVzW2ldLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICBmb3Ig
KGF1dG8mIHZhbHVlIDogbV92YWx1ZXMpCisgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnN0cmlw
V2hpdGVTcGFjZSgpOwogCiAgICAgICAgIHVwZGF0ZUFuaW1hdGlvbk1vZGUoKTsKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCmluZGV4IGQ1NGVj
NDZjNjdhZGVmYTRiNDk4NDlmMTRjZmRmZTM3MmQ4ZTA2YzAuLjRiZDQzZGFlYzllOGUwMzdmMTFk
ODgwNWFjYjc3Y2NiMDY2Mzc3NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdD
dXJzb3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHAKQEAgLTU4LDkgKzU4LDggQEAgUmVmPFNWR0N1cnNvckVsZW1lbnQ+IFNWR0N1cnNvckVs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2MKIAogU1ZHQ3Vy
c29yRWxlbWVudDo6flNWR0N1cnNvckVsZW1lbnQoKQogewotICAgIEhhc2hTZXQ8U1ZHRWxlbWVu
dCo+OjppdGVyYXRvciBlbmQgPSBtX2NsaWVudHMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFNW
R0VsZW1lbnQqPjo6aXRlcmF0b3IgaXQgPSBtX2NsaWVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KQotICAgICAgICAoKml0KS0+Y3Vyc29yRWxlbWVudFJlbW92ZWQoKTsKKyAgICBmb3IgKGF1
dG8mIGNsaWVudCA6IG1fY2xpZW50cykKKyAgICAgICAgY2xpZW50LT5jdXJzb3JFbGVtZW50UmVt
b3ZlZCgpOwogfQogCiBib29sIFNWR0N1cnNvckVsZW1lbnQ6OmlzU3VwcG9ydGVkQXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmNwcAppbmRleCBhNDdhZGQ1YTYyNWNkMzBkMjBmM2Y3YjI5YmZj
NzhhOTI3NjE0M2U1Li5hYjI5ZDIxYzEwYWNkY2RmN2M0MjAxYmZjMDYzNjJhMzE4NWRlY2I0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcApAQCAtMTAx
LDE2ICsxMDEsMTQgQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnN0YXJ0QW5pbWF0aW9u
cygpCiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpwYXVzZUFuaW1hdGlvbnMoKQogewot
ICAgIGF1dG8gZW5kID0gbV90aW1lQ29udGFpbmVycy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3RpbWVDb250YWluZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPnBhdXNlQW5pbWF0aW9ucygpOworICAgIGZvciAoYXV0byYgY29udGFpbmVyIDogbV90aW1l
Q29udGFpbmVycykKKyAgICAgICAgY29udGFpbmVyLT5wYXVzZUFuaW1hdGlvbnMoKTsKIH0KIAog
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnVucGF1c2VBbmltYXRpb25zKCkKIHsKLSAgICBh
dXRvIGVuZCA9IG1fdGltZUNvbnRhaW5lcnMuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gbV90
aW1lQ29udGFpbmVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT51
bnBhdXNlQW5pbWF0aW9ucygpOworICAgIGZvciAoYXV0byYgY29udGFpbmVyIDogbV90aW1lQ29u
dGFpbmVycykKKyAgICAgICAgY29udGFpbmVyLT51bnBhdXNlQW5pbWF0aW9ucygpOwogfQogCiB2
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6ZGlzcGF0Y2hTVkdMb2FkRXZlbnRUb091dGVybW9z
dFNWR0VsZW1lbnRzKCkKQEAgLTExOCwxMiArMTE2LDEwIEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpkaXNwYXRjaFNWR0xvYWRFdmVudFRvT3V0ZXJtb3N0U1ZHRWxlbWVudHMoKQogICAg
IFZlY3RvcjxSZWZQdHI8U1ZHU1ZHRWxlbWVudD4+IHRpbWVDb250YWluZXJzOwogICAgIHRpbWVD
b250YWluZXJzLmFwcGVuZFJhbmdlKG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKSwgbV90aW1lQ29u
dGFpbmVycy5lbmQoKSk7CiAKLSAgICBhdXRvIGVuZCA9IHRpbWVDb250YWluZXJzLmVuZCgpOwot
ICAgIGZvciAoYXV0byBpdCA9IHRpbWVDb250YWluZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBTVkdTVkdFbGVtZW50KiBvdXRlclNWRyA9ICgqaXQpLmdldCgpOwotICAg
ICAgICBpZiAoIW91dGVyU1ZHLT5pc091dGVybW9zdFNWR1NWR0VsZW1lbnQoKSkKKyAgICBmb3Ig
KGF1dG8mIGNvbnRhaW5lciA6IG1fdGltZUNvbnRhaW5lcnMpIHsKKyAgICAgICAgaWYgKCFjb250
YWluZXItPmlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIG91dGVyU1ZHLT5zZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaWJsZSgpOworICAgICAg
ICBjb250YWluZXItPnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKCk7CiAgICAgfQogfQogCkBA
IC0xNzEsOSArMTY3LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVudFdp
dGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnMKICAgICAvLyBUaGlzIGFs
Z29yaXRobSB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBlbmRpbmcg
cmVzb3VyY2VzIGFuZCBuZWVkIG5vdC4KICAgICAvLyBJZiBwZXJmb3JtYW5jZSBiZWNvbWVzIGFu
IGlzc3VlIHdlIGNhbiBrZWVwIGEgY291bnRlZCBzZXQgb2YgZWxlbWVudHMgYW5kIGFuc3dlciB0
aGUgcXVlc3Rpb24gZWZmaWNpZW50bHkuCiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGF1dG8g
ZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1fcGVu
ZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGVuZGlu
Z0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICBmb3IgKGF1dG8mIGVs
ZW1lbnRzIDogbV9wZW5kaW5nUmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIEFTU0VSVChl
bGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkKQEAg
LTIwNSw0MyArMTk5LDM5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVFbGVt
ZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKICAgICAvLyBSZW1vdmUg
dGhlIGVsZW1lbnQgZnJvbSBwZW5kaW5nIHJlc291cmNlcy4KICAgICBpZiAoIW1fcGVuZGluZ1Jl
c291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7CiAg
ICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwotICAgICAgICBhdXRvIGVu
ZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9w
ZW5kaW5nUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAg
UGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9y
IChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jlc291cmNlcykgeworICAgICAgICAgICAgUGVu
ZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IHJlc291cmNlLnZhbHVlLmdldCgpOwogICAgICAgICAg
ICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlzRW1w
dHkoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAgICAgICAg
ICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0JlUmVtb3Zl
ZC5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHJl
c291cmNlLmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBjbGVhckhhc1BlbmRpbmdSZXNvdXJj
ZXNJZlBvc3NpYmxlKGVsZW1lbnQpOwogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgcmVtb3ZlUGVu
ZGluZ1Jlc291cmNlIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBsaWZl
dGltZSBjb3JyZWN0bHkuCi0gICAgICAgIGF1dG8gdmVjdG9yRW5kID0gdG9CZVJlbW92ZWQuZW5k
KCk7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHRvQmVSZW1vdmVkLmJlZ2luKCk7IGl0ICE9IHZl
Y3RvckVuZDsgKytpdCkKLSAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdSZXNvdXJjZSgqaXQpOwor
ICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogdG9CZVJlbW92ZWQpCisgICAgICAgICAgICBy
ZW1vdmVQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIH0KIAogICAgIC8vIFJlbW92ZSB0
aGUgZWxlbWVudCBmcm9tIHBlbmRpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZm9y
IHJlbW92YWwuCiAgICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmlzRW1wdHko
KSkgewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3ZlZDsKLSAgICAgICAg
YXV0byBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmVuZCgpOwotICAgICAgICBm
b3IgKGF1dG8gaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0
LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jl
c291cmNlc0ZvclJlbW92YWwpIHsKKyAgICAgICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxlbWVu
dHMgPSByZXNvdXJjZS52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50cyk7
CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAgICAg
ICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRzLT5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkpOwor
ICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JSZW1v
dmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBsaWZldGltZSBjb3Jy
ZWN0bHkuCi0gICAgICAgIGF1dG8gdmVjdG9yRW5kID0gdG9CZVJlbW92ZWQuZW5kKCk7Ci0gICAg
ICAgIGZvciAoYXV0byBpdCA9IHRvQmVSZW1vdmVkLmJlZ2luKCk7IGl0ICE9IHZlY3RvckVuZDsg
KytpdCkKLSAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdSZXNvdXJjZUZvclJlbW92YWwoKml0KTsK
KyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHRvQmVSZW1vdmVkKQorICAgICAgICAgICAg
cmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVtb3ZhbChyZXNvdXJjZSk7CiAgICAgfQogfQogCkBA
IC0zMTcsMTggKzMwNywxNiBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3ZlQWxs
VGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZQogewogICAgIFZlY3Rv
cjxTVkdFbGVtZW50Kj4gdG9CZVJlbW92ZWQ7CiAKLSAgICBhdXRvIGVuZCA9IG1fZWxlbWVudERl
cGVuZGVuY2llcy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX2VsZW1lbnREZXBlbmRlbmNp
ZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJlZmVy
ZW5jZWRFbGVtZW50ID0gaXQtPmtleTsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4mIHJl
ZmVyZW5jaW5nRWxlbWVudHMgPSAqaXQtPnZhbHVlOworICAgIGZvciAoYXV0byYgZGVwZW5kZW5j
eSA6IG1fZWxlbWVudERlcGVuZGVuY2llcykgeworICAgICAgICBTVkdFbGVtZW50KiByZWZlcmVu
Y2VkRWxlbWVudCA9IGRlcGVuZGVuY3kua2V5OworICAgICAgICBIYXNoU2V0PFNWR0VsZW1lbnQq
PiYgcmVmZXJlbmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOwogICAgICAgICByZWZl
cmVuY2luZ0VsZW1lbnRzLnJlbW92ZShyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAgICBpZiAo
cmVmZXJlbmNpbmdFbGVtZW50cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0b0JlUmVtb3ZlZC5h
cHBlbmQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIH0KIAotICAgIGF1dG8gdmVjdG9yRW5kID0g
dG9CZVJlbW92ZWQuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gdG9CZVJlbW92ZWQuYmVnaW4o
KTsgaXQgIT0gdmVjdG9yRW5kOyArK2l0KQotICAgICAgICBtX2VsZW1lbnREZXBlbmRlbmNpZXMu
cmVtb3ZlKCppdCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9CZVJlbW92ZWQpCisgICAg
ICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5yZW1vdmUoZWxlbWVudCk7CiB9CiAKIHZvaWQgU1ZH
RG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkRWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuY3BwCmluZGV4IGQzMWI0Mjc1MjNlNGYxNWI5NDBjOGUwZjViNDNiMzk0Y2NkNTkzMjIuLjRm
YzlmZmUwYmY4YjZhZjZiNjUwZDA2NTQ3MWI3ODc3MDhkZjIwNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
RWxlbWVudC5jcHAKQEAgLTE1MCw4ICsxNTAsOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQg
cG9wdWxhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKEhhc2hNYXA8QXRvbWljUwog
ICAgICAgICAmeUF0dHIsCiAgICAgfTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBX
VEZfQVJSQVlfTEVOR1RIKGF0dHJpYnV0ZU5hbWVzKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gYXR0cmlidXRlTmFtZXNbaV0tPmxvY2FsTmFtZSgpOwor
ICAgIGZvciAoYXV0byYgbmFtZSA6IGF0dHJpYnV0ZU5hbWVzKSB7CisgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7CiAgICAgICAgIG1hcC5h
ZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsKICAgICB9CiAK
QEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcG9wdWxhdGVBdHRy
aWJ1dGVOYW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcChIYXNoTWFwPAogICAgICAgICB7IHdv
cmRfc3BhY2luZ0F0dHIsIEFuaW1hdGVkTGVuZ3RoIH0sCiAgICAgfTsKIAotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHRhYmxlKTsgKytpKQotICAgICAgICBt
YXAuYWRkKHRhYmxlW2ldLmF0dHJpYnV0ZU5hbWUuaW1wbCgpLCB0YWJsZVtpXS50eXBlKTsKKyAg
ICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCisgICAgICAgIG1hcC5hZGQoZW50cnkuYXR0cmli
dXRlTmFtZS5pbXBsKCksIGVudHJ5LnR5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEhhc2hNYXA8
UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqLCBBbmltYXRlZFByb3BlcnR5VHlwZT4m
IGF0dHJpYnV0ZU5hbWVUb0FuaW1hdGVkUHJvcGVydHlUeXBlTWFwKCkKQEAgLTI2Myw4ICsyNjMs
OCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcG9wdWxhdGVDU1NQcm9wZXJ0eVdpdGhTVkdE
T01OYW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZQogICAgICAgICB7IHlBdHRyLCBBbmltYXRlZExl
bmd0aCB9LAogICAgIH07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FSUkFZ
X0xFTkdUSCh0YWJsZSk7ICsraSkKLSAgICAgICAgbWFwLmFkZCh0YWJsZVtpXS5hdHRyaWJ1dGVO
YW1lLmltcGwoKSwgdGFibGVbaV0udHlwZSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRhYmxl
KQorICAgICAgICBtYXAuYWRkKGVudHJ5LmF0dHJpYnV0ZU5hbWUuaW1wbCgpLCBlbnRyeS50eXBl
KTsKIH0KIAogc3RhdGljIGlubGluZSBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmllZE5h
bWVJbXBsKiwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGU+JiBjc3NQcm9wZXJ0eVdpdGhTVkdET01OYW1l
VG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcCgpCkBAIC02MzksOCArNjM5LDggQEAgc3RhdGljIGJv
b2wgaGFzTG9hZExpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICBmb3IgKGVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7IGVsZW1lbnQ7IGVsZW1lbnQg
PSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKICAgICAgICAgY29uc3Qg
RXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkgPSBlbGVtZW50LT5nZXRFdmVudExpc3RlbmVycyhl
dmVudE5hbWVzKCkubG9hZEV2ZW50KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBl
bnRyeS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGVudHJ5W2ldLnVzZUNhcHR1cmUp
CisgICAgICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBlbnRyeSkgeworICAgICAgICAgICAgaWYg
KGxpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCA1Mjg5NDAzN2Iy
NDlhZDk1Y2JmYmM2MTg0ZGJkODk2MGIwY2JkNzE5Li42MTA0NzUyNjlkOGRiOGY1ZGE3ZjU1ZjEx
OGM3M2ZkMzYyNmQzMjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE2MSwx
OSArMTYxLDE3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lk
dGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoRGF0YSYgZ2x5CiAgICAgfQogCiAgICAgVmVjdG9y
PFNWR0dseXBoPiBnbHlwaHM7Ci0gICAgc2l6ZV90IGFsdEdseXBoTmFtZXNTaXplID0gYWx0R2x5
cGhOYW1lcy5zaXplKCk7Ci0gICAgaWYgKGFsdEdseXBoTmFtZXNTaXplKSB7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhbHRHbHlwaE5hbWVzU2l6ZTsgKytpbmRleCkK
LSAgICAgICAgICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Y29sbGVjdEdseXBoc0ZvckdseXBo
TmFtZShhbHRHbHlwaE5hbWVzW2luZGV4XSwgZ2x5cGhzKTsKKyAgICBpZiAoIWFsdEdseXBoTmFt
ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IGFsdEdseXBoTmFtZXMp
CisgICAgICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmNvbGxlY3RHbHlwaHNGb3JHbHlw
aE5hbWUobmFtZSwgZ2x5cGhzKTsKIAogICAgICAgICAvLyBBc3NpZ24gdGhlIHVuaWNvZGVTdHJp
bmdMZW5ndGggbm93IHRoYXQgaXRzIGtub3duLgotICAgICAgICBzaXplX3QgZ2x5cGhzU2l6ZSA9
IGdseXBocy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhzU2l6
ZTsgKytpKQotICAgICAgICAgICAgZ2x5cGhzW2ldLnVuaWNvZGVTdHJpbmdMZW5ndGggPSBydW4u
bGVuZ3RoKCk7CisgICAgICAgIGZvciAoYXV0byYgZ2x5cGggOiBnbHlwaHMpCisgICAgICAgICAg
ICBnbHlwaC51bmljb2RlU3RyaW5nTGVuZ3RoID0gcnVuLmxlbmd0aCgpOwogCiAgICAgICAgIC8v
IERvIG5vdCBjaGVjayBhbHQgZ2x5cGhzIGZvciBjb21wYXRpYmlsaXR5LiBKdXN0IHJldHVybiB0
aGUgZmlyc3Qgb25lLgogICAgICAgICAvLyBMYXRlciBjb2RlIHdpbGwgZmFpbCBpZiB3ZSBkbyBu
b3QgZG8gdGhpcyBhbmQgdGhlIGdseXBoIGlzIGluY29tcGF0aWJsZS4KLSAgICAgICAgaWYgKGds
eXBoc1NpemUpIHsKKyAgICAgICAgaWYgKCFnbHlwaHMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAg
ICBTVkdHbHlwaCYgc3ZnR2x5cGggPSBnbHlwaHNbMF07CiAgICAgICAgICAgICBpdGVyYXRvci5z
ZXRMYXN0R2x5cGhOYW1lKHN2Z0dseXBoLmdseXBoTmFtZSk7CiAgICAgICAgICAgICBnbHlwaERh
dGEuZ2x5cGggPSBzdmdHbHlwaC50YWJsZUVudHJ5OwpAQCAtMTkxLDE2ICsxODksMTQgQEAgYm9v
bCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiBpdGVy
YXRvciwgR2x5cGhEYXRhJiBnbHkKICAgICAgICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5jb2xs
ZWN0R2x5cGhzRm9yU3RyaW5nKHJlbWFpbmluZ1RleHRJblJ1biwgZ2x5cGhzKTsKICAgICB9CiAK
LSAgICBzaXplX3QgZ2x5cGhzU2l6ZSA9IGdseXBocy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBnbHlwaHNTaXplOyArK2kpIHsKLSAgICAgICAgU1ZHR2x5cGgmIHN2Z0dseXBo
ID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoc3ZnR2x5cGguaXNQYXJ0T2ZMaWdhdHVyZSkKKyAg
ICBmb3IgKGF1dG8mIGdseXBoIDogZ2x5cGhzKSB7CisgICAgICAgIGlmIChnbHlwaC5pc1BhcnRP
ZkxpZ2F0dXJlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghaXNDb21wYXRp
YmxlR2x5cGgoc3ZnR2x5cGgsIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgYXJhYmljRm9ybXMs
IGN1cnJlbnRDaGFyYWN0ZXIsIGN1cnJlbnRDaGFyYWN0ZXIgKyBzdmdHbHlwaC51bmljb2RlU3Ry
aW5nTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFpc0NvbXBhdGlibGVHbHlwaChnbHlwaCwgaXNWZXJ0
aWNhbFRleHQsIGxhbmd1YWdlLCBhcmFiaWNGb3JtcywgY3VycmVudENoYXJhY3RlciwgY3VycmVu
dENoYXJhY3RlciArIGdseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGl0ZXJhdG9yLnNldExhc3RHbHlwaE5hbWUoc3ZnR2x5cGguZ2x5cGhO
YW1lKTsKLSAgICAgICAgZ2x5cGhEYXRhLmdseXBoID0gc3ZnR2x5cGgudGFibGVFbnRyeTsKLSAg
ICAgICAgYWR2YW5jZUxlbmd0aCA9IHN2Z0dseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGg7CisgICAg
ICAgIGl0ZXJhdG9yLnNldExhc3RHbHlwaE5hbWUoZ2x5cGguZ2x5cGhOYW1lKTsKKyAgICAgICAg
Z2x5cGhEYXRhLmdseXBoID0gZ2x5cGgudGFibGVFbnRyeTsKKyAgICAgICAgYWR2YW5jZUxlbmd0
aCA9IGdseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGg7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKaW5kZXggMWEwNjkxMzBlNzFm
YmU3OWZkZTExOWViODZmZjIxMWE0MGUzMDNmZi4uMTE0ODgxMjI0OWMyOGU3NDRlNmQ3OWIyOWQ5
ZjA1Mzc4NjRiODk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCkBAIC04
NiwxMCArODYsNyBAQCB2b2lkIFNWR0ZvbnRFbGVtZW50OjpyZWdpc3RlckxpZ2F0dXJlc0luR2x5
cGhDYWNoZShWZWN0b3I8U3RyaW5nPiYgbGlnYXR1cmVzKQogICAgIC8vIHdpbGwgbm90IGJlIGFi
bGUgdG8gZmluZCBhIGdseXBoIGZvciAiZiIsIGJ1dCBoYW5kbGVzIHRoZSBmYWxsYmFjawogICAg
IC8vIGNoYXJhY3RlciBzdWJzdGl0dXRpb24gcHJvcGVybHkgdGhyb3VnaCBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoKS4KICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKLSAgICBzaXplX3QgbGln
YXR1cmVzU2l6ZSA9IGxpZ2F0dXJlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsaWdhdHVyZXNTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiB1bmljb2RlID0g
bGlnYXR1cmVzW2ldOwotCisgICAgZm9yIChhdXRvJiB1bmljb2RlIDogbGlnYXR1cmVzKSB7CiAg
ICAgICAgIHVuc2lnbmVkIHVuaWNvZGVMZW5ndGggPSB1bmljb2RlLmxlbmd0aCgpOwogICAgICAg
ICBBU1NFUlQodW5pY29kZUxlbmd0aCA+IDEpOwogCkBAIC0xNzQsMjcgKzE3MSwyMyBAQCB2b2lk
IFNWR0tlcm5pbmdNYXA6Omluc2VydChjb25zdCBTVkdLZXJuaW5nUGFpciYga2VybmluZ1BhaXIp
CiAgICAgc3ZnS2VybmluZy51bmljb2RlTmFtZTIgPSBrZXJuaW5nUGFpci51bmljb2RlTmFtZTI7
CiAgICAgc3ZnS2VybmluZy5nbHlwaE5hbWUyID0ga2VybmluZ1BhaXIuZ2x5cGhOYW1lMjsKIAot
ICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdUl0ID0ga2VybmluZ1BhaXIudW5p
Y29kZU5hbWUxLmJlZ2luKCk7Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciB1RW5kID0ga2VybmluZ1BhaXIudW5pY29kZU5hbWUxLmVuZCgpOwotICAgIGZvciAoOyB1
SXQgIT0gdUVuZDsgKyt1SXQpIHsKLSAgICAgICAgaWYgKHVuaWNvZGVNYXAuY29udGFpbnMoKnVJ
dCkpCi0gICAgICAgICAgICB1bmljb2RlTWFwLmdldCgqdUl0KS0+YXBwZW5kKHN2Z0tlcm5pbmcp
OworICAgIGZvciAoYXV0byYgbmFtZSA6IGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkgeworICAg
ICAgICBpZiAodW5pY29kZU1hcC5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIHVuaWNvZGVN
YXAuZ2V0KG5hbWUpLT5hcHBlbmQoc3ZnS2VybmluZyk7CiAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgYXV0byBuZXdWZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0tlcm5pbmdWZWN0b3I+
KCk7CiAgICAgICAgICAgICBuZXdWZWN0b3ItPmFwcGVuZChzdmdLZXJuaW5nKTsKLSAgICAgICAg
ICAgIHVuaWNvZGVNYXAuYWRkKCp1SXQsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKKyAgICAgICAg
ICAgIHVuaWNvZGVNYXAuYWRkKG5hbWUsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZ0l0ID0ga2Vy
bmluZ1BhaXIuZ2x5cGhOYW1lMS5iZWdpbigpOwotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZ0VuZCA9IGtlcm5pbmdQYWlyLmdseXBoTmFtZTEuZW5kKCk7Ci0gICAg
Zm9yICg7IGdJdCAhPSBnRW5kOyArK2dJdCkgewotICAgICAgICBpZiAoZ2x5cGhNYXAuY29udGFp
bnMoKmdJdCkpCi0gICAgICAgICAgICBnbHlwaE1hcC5nZXQoKmdJdCktPmFwcGVuZChzdmdLZXJu
aW5nKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBrZXJuaW5nUGFpci5nbHlwaE5hbWUxKSB7Cisg
ICAgICAgIGlmIChnbHlwaE1hcC5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIGdseXBoTWFw
LmdldChuYW1lKS0+YXBwZW5kKHN2Z0tlcm5pbmcpOwogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIGF1dG8gbmV3VmVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdLZXJuaW5nVmVjdG9yPigp
OwogICAgICAgICAgICAgbmV3VmVjdG9yLT5hcHBlbmQoc3ZnS2VybmluZyk7Ci0gICAgICAgICAg
ICBnbHlwaE1hcC5hZGQoKmdJdCwgV1RGOjptb3ZlKG5ld1ZlY3RvcikpOworICAgICAgICAgICAg
Z2x5cGhNYXAuYWRkKG5hbWUsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMjA5LDkgKzIwMiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdHJpbmdNYXRjaGVz
VW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgdW5pY29kZVN0cmluZywgY29uc3QKIAogICAgIGlm
ICghcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBVQ2hhciBmaXJzdENoYXIgPSB1bmljb2Rl
U3RyaW5nWzBdOwotICAgICAgICBjb25zdCBVbmljb2RlUmFuZ2VzOjpjb25zdF9pdGVyYXRvciBl
bmQgPSByYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoVW5pY29kZVJhbmdlczo6Y29uc3RfaXRl
cmF0b3IgaXQgPSByYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAg
ICBpZiAoZmlyc3RDaGFyID49IGl0LT5maXJzdCAmJiBmaXJzdENoYXIgPD0gaXQtPnNlY29uZCkK
KyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlcykgeworICAgICAgICAgICAgaWYgKGZp
cnN0Q2hhciA+PSByYW5nZS5maXJzdCAmJiBmaXJzdENoYXIgPD0gcmFuZ2Uuc2Vjb25kKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlkMmEyYjIzYzYwMGZlYmI1MzQwY2JjZGQx
YjYxZGRjM2I5ZjE1Li5hNzVhYjQ2NzJlMjlhMDFjNGFmNGVmNDlkNGVkZDRhNWJjMjk1YjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNTgsMTAgKzU4LDEwIEBA
IHB1YmxpYzoKICAgICBEYXRhSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4o
KTsgfQogICAgIERhdGFJdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0KICAg
ICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChieXRlKTsg
fQotICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikKKyAgICB2b2lkIGFw
cGVuZChTVkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpCiAgICAgewotICAgICAgICBmb3IgKERhdGFJ
dGVyYXRvciBpdCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+ZW5kKCk7ICsraXQpCi0g
ICAgICAgICAgICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRvIHN0cmVhbSA6IG90aGVy
KQorICAgICAgICAgICAgYXBwZW5kKHN0cmVhbSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXIoKSB7
IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIW1f
ZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRp
bGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAppbmRl
eCBjMzIzOTUyMjE1NzI1ZDdkOWFjZmE5N2U4NTVmOWMxMzQwY2M4ZGFlLi43MTA2MDU2YzM5MDFk
ODRhYzkyNmFkMWMzYmIyZDYxMzVkNWVmMzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhV
dGlsaXRpZXMuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBhcHBlbmRTVkdQYXRoQnl0ZVN0
cmVhbUZyb21TVkdQYXRoU2VnKFBhc3NSZWZQdHI8U1ZHUGF0aFNlZz4gcGF0aFNlZywgU1ZHUGEK
ICAgICBwYXJzZXItPmNsZWFudXAoKTsKIAogICAgIGlmIChvaykKLSAgICAgICAgcmVzdWx0LT5h
cHBlbmQoYXBwZW5kZWRCeXRlU3RyZWFtLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBlbmQo
KmFwcGVuZGVkQnl0ZVN0cmVhbSk7CiAKICAgICByZXR1cm4gb2s7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IDUzMjY4
YWRhMzZlYTUzNWZhNzhlN2JjZTY0Y2NkMjAyZmZlOTFlNWQuLjM5OWNjYjQ5NzkzOTI0ZTg5MWUw
YjE3NzFhYTZhNjhhZGNlY2IzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9hbmlt
YXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0xODcsMTEgKzE4Nyw5IEBAIHZvaWQgU01J
TFRpbWVDb250YWluZXI6OnNldEVsYXBzZWQoU01JTFRpbWUgdGltZSkKICNpZm5kZWYgTkRFQlVH
CiAgICAgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSB0cnVlOwogI2VuZGlm
Ci0gICAgZm9yIChhdXRvJiBpdCA6IG1fc2NoZWR1bGVkQW5pbWF0aW9ucykgewotICAgICAgICBB
bmltYXRpb25zVmVjdG9yKiBzY2hlZHVsZWQgPSBpdC52YWx1ZS5nZXQoKTsKLSAgICAgICAgdW5z
aWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIG4g
PSAwOyBuIDwgc2l6ZTsgbisrKQotICAgICAgICAgICAgc2NoZWR1bGVkLT5hdChuKS0+cmVzZXQo
KTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy52YWx1
ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiAqYW5pbWF0aW9uKQorICAgICAg
ICAgICAgZWxlbWVudC0+cmVzZXQoKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIG1fcHJl
dmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CkBAIC0yNzQsOSArMjcyLDcg
QEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBlbGFw
c2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAgICAgIHNvcnRCeVByaW9yaXR5KCpzY2hlZHVsZWQs
IGVsYXBzZWQpOwogCiAgICAgICAgIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50ID0gMDsK
LSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+c2l6ZSgpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgbisrKSB7Ci0gICAgICAgICAgICBTVkdTTUlMRWxl
bWVudCogYW5pbWF0aW9uID0gc2NoZWR1bGVkLT5hdChuKTsKKyAgICAgICAgZm9yIChhdXRvJiBh
bmltYXRpb24gOiAqc2NoZWR1bGVkKSB7CiAgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50
aW1lQ29udGFpbmVyKCkgPT0gdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9uLT50
YXJnZXRFbGVtZW50KCkpOwogICAgICAgICAgICAgQVNTRVJUKGFuaW1hdGlvbi0+aGFzVmFsaWRB
dHRyaWJ1dGVOYW1lKCkpOwpAQCAtMzAxLDggKzI5Nyw3IEBAIHZvaWQgU01JTFRpbWVDb250YWlu
ZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9vbCBzZWVrVG9UaW1lKQog
ICAgICAgICAgICAgYW5pbWF0aW9uc1RvQXBwbHkuYXBwZW5kKHJlc3VsdEVsZW1lbnQpOwogICAg
IH0KIAotICAgIHVuc2lnbmVkIGFuaW1hdGlvbnNUb0FwcGx5U2l6ZSA9IGFuaW1hdGlvbnNUb0Fw
cGx5LnNpemUoKTsKLSAgICBpZiAoIWFuaW1hdGlvbnNUb0FwcGx5U2l6ZSkgeworICAgIGlmIChh
bmltYXRpb25zVG9BcHBseS5pc0VtcHR5KCkpIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgIG1f
cHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CiAjZW5kaWYKQEAgLTMx
MSw4ICszMDYsOCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25zKFNN
SUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vla1RvVGltZSkKICAgICB9CiAKICAgICAvLyBBcHBseSBy
ZXN1bHRzIHRvIHRhcmdldCBlbGVtZW50cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YW5pbWF0aW9uc1RvQXBwbHlTaXplOyArK2kpCi0gICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5W2ld
LT5hcHBseVJlc3VsdHNUb1RhcmdldCgpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogYW5p
bWF0aW9uc1RvQXBwbHkpCisgICAgICAgIGFuaW1hdGlvbi0+YXBwbHlSZXN1bHRzVG9UYXJnZXQo
KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25zQ2hh
bmdlcyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlvbi9T
VkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxF
bGVtZW50LmNwcAppbmRleCBmNWNhZjc0ZTcxNDA2NzY3MjUyYzgzNWIwMmQxYmFkMTE1MTMwNWE5
Li5jOTkwYWFhOTBmYTliYWVhNmM3ZmU4ZjRjMjAzZDg0NWMyOGRiMWMwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDIxLDE0ICs0
MjEsMTQgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKGNvbnN0IFN0cmlu
ZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KICAgICBpZiAoYmVnaW5PckVuZCA9PSBF
bmQpCiAgICAgICAgIG1faGFzRW5kRXZlbnRDb25kaXRpb25zID0gZmFsc2U7CiAgICAgSGFzaFNl
dDxkb3VibGU+IGV4aXN0aW5nOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aW1lTGlz
dC5zaXplKCk7ICsrbikKLSAgICAgICAgZXhpc3RpbmcuYWRkKHRpbWVMaXN0W25dLnRpbWUoKS52
YWx1ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHRpbWUgOiB0aW1lTGlzdCkKKyAgICAgICAgZXhpc3Rp
bmcuYWRkKHRpbWUudGltZSgpLnZhbHVlKCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0U3Ry
aW5nOwogICAgIHBhcnNlU3RyaW5nLnNwbGl0KCc7Jywgc3BsaXRTdHJpbmcpOwotICAgIGZvciAo
dW5zaWduZWQgbiA9IDA7IG4gPCBzcGxpdFN0cmluZy5zaXplKCk7ICsrbikgewotICAgICAgICBT
TUlMVGltZSB2YWx1ZSA9IHBhcnNlQ2xvY2tWYWx1ZShzcGxpdFN0cmluZ1tuXSk7CisgICAgZm9y
IChhdXRvJiBzdHJpbmcgOiBzcGxpdFN0cmluZykgeworICAgICAgICBTTUlMVGltZSB2YWx1ZSA9
IHBhcnNlQ2xvY2tWYWx1ZShzdHJpbmcpOwogICAgICAgICBpZiAodmFsdWUuaXNVbnJlc29sdmVk
KCkpCi0gICAgICAgICAgICBwYXJzZUNvbmRpdGlvbihzcGxpdFN0cmluZ1tuXSwgYmVnaW5PckVu
ZCk7CisgICAgICAgICAgICBwYXJzZUNvbmRpdGlvbihzdHJpbmcsIGJlZ2luT3JFbmQpOwogICAg
ICAgICBlbHNlIGlmICghZXhpc3RpbmcuY29udGFpbnModmFsdWUudmFsdWUoKSkpCiAgICAgICAg
ICAgICB0aW1lTGlzdC5hcHBlbmQoU01JTFRpbWVXaXRoT3JpZ2luKHZhbHVlLCBTTUlMVGltZVdp
dGhPcmlnaW46OlBhcnNlck9yaWdpbikpOwogICAgIH0KQEAgLTUxOCw4ICs1MTgsNyBAQCB2b2lk
IFNWR1NNSUxFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucygpCiAgICAgaWYgKG1fY29uZGl0aW9u
c0Nvbm5lY3RlZCkKICAgICAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKICAgICBtX2NvbmRp
dGlvbnNDb25uZWN0ZWQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBtX2Nv
bmRpdGlvbnMuc2l6ZSgpOyArK24pIHsKLSAgICAgICAgQ29uZGl0aW9uJiBjb25kaXRpb24gPSBt
X2NvbmRpdGlvbnNbbl07CisgICAgZm9yIChhdXRvJiBjb25kaXRpb24gOiBtX2NvbmRpdGlvbnMp
IHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0aW9uOjpFdmVudEJhc2Up
IHsKICAgICAgICAgICAgIEFTU0VSVCghY29uZGl0aW9uLm1fc3luY2Jhc2UpOwogICAgICAgICAg
ICAgRWxlbWVudCogZXZlbnRCYXNlID0gZXZlbnRCYXNlRm9yKGNvbmRpdGlvbik7CkBAIC01NDcs
OCArNTQ2LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMoKQog
ICAgIGlmICghbV9jb25kaXRpb25zQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAgICAgbV9j
b25kaXRpb25zQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsgbiA8
IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgewotICAgICAgICBDb25kaXRpb24mIGNvbmRpdGlv
biA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICBmb3IgKGF1dG8mIGNvbmRpdGlvbiA6IG1fY29uZGl0
aW9ucykgewogICAgICAgICBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OkV2ZW50
QmFzZSkgewogICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9zeW5jYmFzZSk7CiAgICAg
ICAgICAgICBpZiAoIWNvbmRpdGlvbi5tX2V2ZW50TGlzdGVuZXIpCkBAIC0xMTI2LDkgKzExMjQs
NyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2Vk
KE5ld09yRXhpc3RpbmdJbnRlcnZhbCBuZXdPcgogICAgICAgICByZXR1cm47CiAgICAgbG9vcEJy
ZWFrZXIuYWRkKHRoaXMpOwogICAgIAotICAgIFRpbWVEZXBlbmRlbnRTZXQ6Oml0ZXJhdG9yIGVu
ZCA9IG1fdGltZURlcGVuZGVudHMuZW5kKCk7Ci0gICAgZm9yIChUaW1lRGVwZW5kZW50U2V0Ojpp
dGVyYXRvciBpdCA9IG1fdGltZURlcGVuZGVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7
Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBkZXBlbmRlbnQgPSAqaXQ7CisgICAgZm9yIChhdXRv
JiBkZXBlbmRlbnQgOiBtX3RpbWVEZXBlbmRlbnRzKSB7CiAgICAgICAgIGRlcGVuZGVudC0+Y3Jl
YXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZSh0aGlzLCBuZXdPckV4aXN0aW5nKTsKICAgICB9
CiAKQEAgLTExMzksOCArMTEzNSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNyZWF0ZUluc3Rh
bmNlVGltZXNGcm9tU3luY2Jhc2UoU1ZHU01JTEVsZW1lbnQqIHN5bmNiYXNlLCBOCiB7CiAgICAg
Ly8gRklYTUU6IFRvIGJlIHJlYWxseSBjb3JyZWN0LCB0aGlzIHNob3VsZCBoYW5kbGUgdXBkYXRp
bmcgZXhpc2luZyBpbnRlcnZhbCBieSBjaGFuZ2luZyAKICAgICAvLyB0aGUgYXNzb2NpYXRlZCB0
aW1lcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVzLgotICAgIGZvciAodW5zaWduZWQgbiA9
IDA7IG4gPCBtX2NvbmRpdGlvbnMuc2l6ZSgpOyArK24pIHsKLSAgICAgICAgQ29uZGl0aW9uJiBj
b25kaXRpb24gPSBtX2NvbmRpdGlvbnNbbl07CisgICAgZm9yIChhdXRvJiBjb25kaXRpb24gOiBt
X2NvbmRpdGlvbnMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0aW9u
OjpTeW5jYmFzZSAmJiBjb25kaXRpb24ubV9zeW5jYmFzZSA9PSBzeW5jYmFzZSkgewogICAgICAg
ICAgICAgQVNTRVJUKGNvbmRpdGlvbi5tX25hbWUgPT0gImJlZ2luIiB8fCBjb25kaXRpb24ubV9u
YW1lID09ICJlbmQiKTsKICAgICAgICAgICAgIC8vIE5vIG5lc3RlZCB0aW1lIGNvbnRhaW5lcnMg
aW4gU1ZHLCBubyBuZWVkIGZvciBjcmF6eSB0aW1lIHNwYWNlIGNvbnZlcnNpb25zLiBQaGV3IQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVy
QnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0
ZXJCdWlsZGVyLmNwcAppbmRleCA0YmIxYTBhYWQ3ZjMzYWJmMjM4YWQxNGVhMTFhZDUwYTYwYjQ5
Mjg0Li41MmJhNGU5MWQzODA3YTRjNzAxZDQzMDkzZTE4OWFhYWQ2MjViMjJkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWls
ZGVyLmNwcApAQCAtOTUsMTAgKzk1LDggQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVhclJl
c3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCiAKICAgICBlZmZlY3QtPmNsZWFy
UmVzdWx0KCk7CiAKLSAgICBIYXNoU2V0PEZpbHRlckVmZmVjdCo+JiBlZmZlY3RSZWZlcmVuY2Vz
ID0gdGhpcy0+ZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpOwotICAgIEhhc2hTZXQ8RmlsdGVyRWZm
ZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IGVmZmVjdFJlZmVyZW5jZXMuZW5kKCk7Ci0gICAgZm9yIChI
YXNoU2V0PEZpbHRlckVmZmVjdCo+OjppdGVyYXRvciBpdCA9IGVmZmVjdFJlZmVyZW5jZXMuYmVn
aW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZlKCpp
dCk7CisgICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVjdCkp
CisgICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3Mv
ZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggMmIxZGQyZjZlMmNmNWY5NjljOWI4ODA0
Yzg4ZmI1NzdlZDBlYWYxZS4uMDg2N2QyODljYjE5YTQ0Zjk4ZTBkMmQyNDgzNmJmZDI1OGJhMmQ1
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJzL1NW
R0ZpbHRlckJ1aWxkZXIuaApAQCAtNjIsOSArNjIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAg
IGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAgICB7Ci0gICAgICAgIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj46Oml0ZXJhdG9yIGVuZCA9IG1fYnVp
bHRpbkVmZmVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcsIFJl
ZlB0cjxGaWx0ZXJFZmZlY3Q+Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZlY3Rz
LmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKLSAgICAgICAgICAgICBtX2Vm
ZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZmZWN0U2V0KCkpOwor
ICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkpCisg
ICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0U2V0
KCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZm
ZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9w
cm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3By
b3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAKaW5kZXggNDlkYzhmYzU1OTllNTU4YTBm
YTczZmMwYWM1YjJiYmZjNDJkNTliNS4uYWIxMTRhYjJjYTIwYzIyNGYzZTE0OTQ1NGYyYTgxMDZj
YWY5NzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHQW5p
bWF0ZWRQcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eS5jcHAKQEAgLTM3LDEwICszNyw5IEBAIFNWR0FuaW1hdGVkUHJvcGVy
dHk6OlNWR0FuaW1hdGVkUHJvcGVydHkoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNvbnN0
IFF1YWxpCiBTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSgpCiB7CiAg
ICAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBjYWNoZS4KLSAgICBDYWNoZSYgY2FjaGUgPSAqYW5p
bWF0ZWRQcm9wZXJ0eUNhY2hlKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2FjaGUuYmVnaW4oKSwg
ZW5kID0gY2FjaGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZh
bHVlID09IHRoaXMpIHsKLSAgICAgICAgICAgIGNhY2hlLnJlbW92ZShpdCk7CisgICAgZm9yIChh
dXRvJiBjYWNoZSA6ICphbmltYXRlZFByb3BlcnR5Q2FjaGUoKSkgeworICAgICAgICBpZiAoY2Fj
aGUudmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgYW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCkt
PnJlbW92ZShjYWNoZS5rZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJvcGVy
dHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCmlu
ZGV4IDQ4MDg4NGVhNzJjYTdkMGRhNjdjMTMwZTNmMjNkZDc4MWRmY2JjYWMuLjc3Nzg4ZTEwMjI0
OGQ1MDI1MmM4MDE0Zjc3YTA2NWQxYmFkOTU5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCkBAIC02Miw5ICs2Miw4IEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIC8vIFNlZSBTVkdQcm9wZXJ0eVRlYXJPZmY6OmRldGFjaFdyYXBwZXIo
KSBmb3IgYW4gZXhwbGFuYXRpb24gYWJvdXQgd2hhdCdzIGhhcHBlbmluZyBoZXJlLgogICAgICAg
ICBBU1NFUlQod3JhcHBlcnMpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gd3JhcHBlcnMtPnNp
emUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAg
ICAgICAgICAgaWYgKExpc3RJdGVtVGVhck9mZiogaXRlbSA9IHdyYXBwZXJzLT5hdChpKS5nZXQo
KSkKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKndyYXBwZXJzKSB7CisgICAgICAgICAgICBp
ZiAoaXRlbSkKICAgICAgICAgICAgICAgICBpdGVtLT5kZXRhY2hXcmFwcGVyKCk7CiAgICAgICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0aFNl
Z0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCmluZGV4IDUxMTdjZTYyY2E3ZGZiOTdm
M2VmYmQ2YTgzZmM0MTliZDFmOTYyYWYuLjM5OTI3NDFmOWZkZDFmMjU3MWQ1NzdhM2JhYTBiMGNm
NDZiNDc2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR1Bh
dGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJv
cGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAKQEAgLTMwLDkgKzMwLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zjo6Y2xlYXJDb250ZXh0QW5kUm9sZXMoKQogewogICAgIEFTU0VSVChtX3ZhbHVlcyk7Ci0gICAg
dW5zaWduZWQgc2l6ZSA9IG1fdmFsdWVzLT5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBMaXN0SXRlbVR5cGUgaXRlbSA9IG1fdmFsdWVz
LT5hdChpKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiAqbV92YWx1ZXMpIHsKICAgICAgICAgc3Rh
dGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4oaXRlbS5nZXQoKSktPnNldENvbnRleHRB
bmRSb2xlKDAsIFBhdGhTZWdVbmRlZmluZWRSb2xlKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253579</attachid>
            <date>2015-05-21 23:34:21 -0700</date>
            <delta_ts>2015-05-24 11:31:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145209-20150522153414.patch</filename>
            <type>text/plain</type>
            <size>33733</size>
            <attacher name="Hunseop Jeong">hs85.jeong</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg5MjAwMTdmMWVkYjFk
YmQ2YjRlY2E3NjRjMTE5YTNmYmQ3ODcxNi4uZjNlNGQzZWQ0ODQwYWZhMmUwZDQ3OWQxZTY1MWMz
YzA2MjIzZjA3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYyIEBACisyMDE1LTA1LTIxICBIdW5z
ZW9wIEplb25nICA8aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KKworICAgICAgICBVc2UgbW9kZXJu
IGZvci1sb29wcyBpbiBXZWJDb3JlL3N2Zy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0NTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlcy4KKworICAg
ICAgICAqIHN2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cHJvcGVydHlUeXBlc0FyZUNvbnNpc3RlbnQpOgorICAgICAgICAqIHN2Zy9TVkdBbmltYXRlZFBh
dGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OnN0YXJ0
QW5pbVZhbEFuaW1hdGlvbik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9y
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdBbmltYXRlZFR5cGVBbmltYXRvcjo6ZXhlY3V0ZUFj
dGlvbik6CisgICAgICAgICogc3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQW5pbWF0aW9uRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOgorICAgICAgICAq
IHN2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVs
ZW1lbnQ6On5TVkdDdXJzb3JFbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cGF1
c2VBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6
dW5wYXVzZUFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpkaXNwYXRjaFNWR0xvYWRFdmVudFRvT3V0ZXJtb3N0U1ZHRWxlbWVudHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjppc0VsZW1lbnRXaXRoUGVuZGluZ1Jl
c291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlbW92
ZUVsZW1lbnRGcm9tUGVuZGluZ1Jlc291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnJlbW92ZUFsbFRhcmdldFJlZmVyZW5jZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKiBzdmcvU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwb3B1bGF0ZUF0
dHJpYnV0ZU5hbWVUb0NTU1Byb3BlcnR5SURNYXApOgorICAgICAgICAoV2ViQ29yZTo6cG9wdWxh
dGVBdHRyaWJ1dGVOYW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcCk6CisgICAgICAgIChXZWJD
b3JlOjpwb3B1bGF0ZUNTU1Byb3BlcnR5V2l0aFNWR0RPTU5hbWVUb0FuaW1hdGVkUHJvcGVydHlU
eXBlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0xvYWRMaXN0ZW5lcik6CisgICAgICAgICog
c3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjphcHBs
eVNWR0dseXBoU2VsZWN0aW9uKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udEVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEVsZW1lbnQ6OnJlZ2lzdGVyTGlnYXR1cmVzSW5HbHlw
aENhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0tlcm5pbmdNYXA6Omluc2VydCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdHJpbmdNYXRjaGVzVW5pY29kZVJhbmdlKToKKyAgICAgICAgKiBzdmcv
U1ZHUGF0aEJ5dGVTdHJlYW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCeXRlU3RyZWFt
OjphcHBlbmQpOgorICAgICAgICAqIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnNldEVsYXBzZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U01JTFRpbWVDb250YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMpOgorICAg
ICAgICAqIHN2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU01JTEVsZW1lbnQ6OnBhcnNlQmVnaW5PckVuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTTUlMRWxlbWVudDo6Y29ubmVjdENvbmRpdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U01JTEVsZW1lbnQ6OmRpc2Nvbm5lY3RDb25kaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1NNSUxFbGVtZW50Ojpub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFuZ2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpjcmVhdGVJbnN0YW5jZVRpbWVzRnJvbVN5bmNiYXNl
KToKKyAgICAgICAgKiBzdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckJ1aWxkZXI6OmNsZWFyUmVzdWx0c1JlY3Vyc2l2
ZSk6CisgICAgICAgICogc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmlsdGVyQnVpbGRlci5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRmlsdGVyQnVpbGRlcjo6YWRkQnVpbHRpbkVmZmVjdHMpOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZWRQcm9wZXJ0eTo6flNWR0FuaW1hdGVkUHJvcGVydHkpOgor
ICAgICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHTGlzdFByb3BlcnR5OjpkZXRhY2hMaXN0V3JhcHBlcnNBbmRSZXNpemUpOgorICAg
ICAgICAqIHN2Zy9wcm9wZXJ0aWVzL1NWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmOjpjbGVhckNv
bnRleHRBbmRSb2xlcyk6CisKIDIwMTUtMDUtMjEgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFB1cmdlIFBhc3NSZWZQdHIgaW4gV2ViQ29yZS9Nb2R1
bGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCmluZGV4
IGU1MDY1Y2ViMjc1NGRhY2U4ODhkNGEwNjg3OTRlYmNiYzFkMzc5ODkuLjlmMGI4NTAxNmI4MDNm
NWRjNDc2YjcyM2IwM2ViNjhmMDU3OGEyZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlRWxlbWVudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRlRWxlbWVudEJhc2UuY3BwCkBAIC0xNzEsMTIgKzE3MSwxMSBAQCBib29sIFNWR0FuaW1h
dGVFbGVtZW50QmFzZTo6Y2FsY3VsYXRlRnJvbUFuZEJ5VmFsdWVzKGNvbnN0IFN0cmluZyYgZnJv
bVN0cmluZywgYwogI2lmbmRlZiBOREVCVUcKIHN0YXRpYyBpbmxpbmUgYm9vbCBwcm9wZXJ0eVR5
cGVzQXJlQ29uc2lzdGVudChBbmltYXRlZFByb3BlcnR5VHlwZSBleHBlY3RlZFByb3BlcnR5VHlw
ZSwgY29uc3QgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0JiBhbmltYXRlZFR5cGVzKQog
ewotICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gYW5pbWF0ZWRUeXBlcy5lbmQoKTsKLSAgICBmb3IgKFNWR0VsZW1lbnRBbmltYXRlZFByb3Bl
cnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbmltYXRlZFR5cGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGl0LT5wcm9wZXJ0
aWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoZXhwZWN0ZWRQcm9wZXJ0eVR5cGUg
IT0gaXQtPnByb3BlcnRpZXNbaV0tPmFuaW1hdGVkUHJvcGVydHlUeXBlKCkpIHsKKyAgICBmb3Ig
KGF1dG8mIHR5cGUgOiBhbmltYXRlZFR5cGVzKSB7CisgICAgICAgIGZvciAoYXV0byYgcHJvcGVy
dHkgOiB0eXBlLnByb3BlcnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChleHBlY3RlZFByb3BlcnR5
VHlwZSAhPSBwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSkgewogICAgICAgICAgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIG9ubHkgYWxsb3dlZCBpbmNvbnNpc3RlbmN5LiBTVkdBbmltYXRl
ZEFuZ2xlQW5pbWF0b3IgaGFuZGxlcyBib3RoIFNWR0FuaW1hdGVkQW5nbGUgJiBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uIGZvciBtYXJrZXJzIG9yaWVudCBhdHRyaWJ1dGUuCi0gICAgICAgICAgICAg
ICAgaWYgKGV4cGVjdGVkUHJvcGVydHlUeXBlID09IEFuaW1hdGVkQW5nbGUgJiYgaXQtPnByb3Bl
cnRpZXNbaV0tPmFuaW1hdGVkUHJvcGVydHlUeXBlKCkgPT0gQW5pbWF0ZWRFbnVtZXJhdGlvbikK
KyAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRQcm9wZXJ0eVR5cGUgPT0gQW5pbWF0ZWRBbmds
ZSAmJiBwcm9wZXJ0eS0+YW5pbWF0ZWRQcm9wZXJ0eVR5cGUoKSA9PSBBbmltYXRlZEVudW1lcmF0
aW9uKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQW5pbWF0ZWRQYXRoLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBh
dGguY3BwCmluZGV4IGZiYThhNjFkMmY4ODU0NjU2MDAzNDE3YzNlYzUxNDAwMmU2MGEwMTMuLjgw
OTc0Nzc2ZTIyMzlmNDM5ZDNkYmE2YTkzN2U1OWMwNTg2MmI0OWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdBbmltYXRlZFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdBbmltYXRlZFBhdGguY3BwCkBAIC01MCwxNSArNTAsMTMgQEAgc3RkOjp1bmlxdWVfcHRy
PFNWR0FuaW1hdGVkVHlwZT4gU1ZHQW5pbWF0ZWRQYXRoQW5pbWF0b3I6OnN0YXJ0QW5pbVZhbEFu
aW1hdGlvbigKIAogICAgIFZlY3RvcjxSZWZQdHI8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3Bl
cnR5VGVhck9mZj4+IHJlc3VsdDsKIAotICAgIFNWR0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlz
dDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gYW5pbWF0ZWRUeXBlcy5lbmQoKTsKLSAgICBmb3IgKFNW
R0VsZW1lbnRBbmltYXRlZFByb3BlcnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbmltYXRl
ZFR5cGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChj
YXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0dWFsVHlwZTxTVkdBbmltYXRlZFBhdGhTZWdMaXN0UHJv
cGVydHlUZWFyT2ZmPihpdC0+cHJvcGVydGllc1swXS5nZXQoKSkpOworICAgIGZvciAoYXV0byYg
dHlwZSA6IGFuaW1hdGVkVHlwZXMpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoY2FzdEFuaW1hdGVk
UHJvcGVydHlUb0FjdHVhbFR5cGU8U1ZHQW5pbWF0ZWRQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9m
Zj4odHlwZS5wcm9wZXJ0aWVzWzBdLmdldCgpKSk7CiAKICAgICBTVkdFbGVtZW50OjpJbnN0YW5j
ZVVwZGF0ZUJsb2NrZXIgYmxvY2tlcigqcHJvcGVydHktPmNvbnRleHRFbGVtZW50KCkpOwogCi0g
ICAgc2l6ZV90IHJlc3VsdFNpemUgPSByZXN1bHQuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVzdWx0U2l6ZTsgKytpKQotICAgICAgICByZXN1bHRbaV0tPmFuaW1hdGlvblN0
YXJ0ZWQoYnl0ZVN0cmVhbS5nZXQoKSwgJmJhc2VWYWx1ZSk7CisgICAgZm9yIChhdXRvJiBzZWdt
ZW50IDogcmVzdWx0KQorICAgICAgICBzZWdtZW50LT5hbmltYXRpb25TdGFydGVkKGJ5dGVTdHJl
YW0uZ2V0KCksICZiYXNlVmFsdWUpOwogCiAgICAgcmV0dXJuIFNWR0FuaW1hdGVkVHlwZTo6Y3Jl
YXRlUGF0aChXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0FuaW1hdGVkVHlwZUFuaW1hdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaAppbmRleCA3NTJlOWIyMzJhMWZlN2U4ZTA0Y2QxNzk2
NDUyY2M5MDcyOWJlNTg2Li5jYmMzYTYyNDAxNGY4N2EyZDJiNzMyOTU3MzhiNGMyYmFiNzA3Njcy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0ZWRUeXBlQW5pbWF0b3IuaApAQCAt
MTkxLDEwICsxOTEsOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogQ2FuJ3QgdXNlIFNW
R0VsZW1lbnQ6Okluc3RhbmNlVXBkYXRlQmxvY2tlciBiZWNhdXNlIG9mIGNpcmN1bGFyIGhlYWRl
ciBkZXBlbmRlbmN5LiBXb3VsZCBiZSBuaWNlIHRvIHVudGFuZ2xlIHRoaXMuCiAgICAgICAgIHNl
dEluc3RhbmNlVXBkYXRlc0Jsb2NrZWQoKmFuaW1hdGVkVHlwZXNbMF0uZWxlbWVudCwgdHJ1ZSk7
CiAKLSAgICAgICAgU1ZHRWxlbWVudEFuaW1hdGVkUHJvcGVydHlMaXN0Ojpjb25zdF9pdGVyYXRv
ciBlbmQgPSBhbmltYXRlZFR5cGVzLmVuZCgpOwotICAgICAgICBmb3IgKFNWR0VsZW1lbnRBbmlt
YXRlZFByb3BlcnR5TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhbmltYXRlZFR5cGVzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04od2hpY2hQcm9wZXJ0eSA8IGl0LT5wcm9wZXJ0aWVzLnNpemUoKSk7Ci0gICAg
ICAgICAgICBBbmltVmFsVHlwZSogcHJvcGVydHkgPSBjYXN0QW5pbWF0ZWRQcm9wZXJ0eVRvQWN0
dWFsVHlwZTxBbmltVmFsVHlwZT4oaXQtPnByb3BlcnRpZXNbd2hpY2hQcm9wZXJ0eV0uZ2V0KCkp
OworICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGVkVHlwZSA6IGFuaW1hdGVkVHlwZXMpIHsKKyAg
ICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKHdoaWNoUHJvcGVydHkg
PCBhbmltYXRlZFR5cGUucHJvcGVydGllcy5zaXplKCkpOworICAgICAgICAgICAgQW5pbVZhbFR5
cGUqIHByb3BlcnR5ID0gY2FzdEFuaW1hdGVkUHJvcGVydHlUb0FjdHVhbFR5cGU8QW5pbVZhbFR5
cGU+KGFuaW1hdGVkVHlwZS5wcm9wZXJ0aWVzW3doaWNoUHJvcGVydHldLmdldCgpKTsKIAogICAg
ICAgICAgICAgc3dpdGNoIChhY3Rpb24pIHsKICAgICAgICAgICAgIGNhc2UgU3RhcnRBbmltYXRp
b25BY3Rpb246CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQW5pbWF0aW9uRWxlbWVudC5jcHAKaW5k
ZXggNWJhMTliY2ZhY2IxODhiZmVlYmEwMWRiMmI4YzE1NmNiNjQ3YWRiMS4uMzQ2MjhhZDQxOTE5
ZTYyZWRjZTc0NTM4ODQxMmFkMmJmMjVlNTZjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FuaW1hdGlvbkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdB
bmltYXRpb25FbGVtZW50LmNwcApAQCAtMTY3LDggKzE2Nyw4IEBAIHZvaWQgU1ZHQW5pbWF0aW9u
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3Qg
QXRvbWljCiAgICAgICAgIC8vIGFuZCB3aGl0ZSBzcGFjZSBiZWZvcmUgYW5kIGFmdGVyIHNlbWlj
b2xvbiBzZXBhcmF0b3JzLCBpcyBhbGxvd2VkIGFuZCB3aWxsIGJlIGlnbm9yZWQuCiAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2FuaW1hdGUuaHRtbCNWYWx1ZXNBdHRyaWJ1
dGUKICAgICAgICAgdmFsdWUuc3RyaW5nKCkuc3BsaXQoJzsnLCBtX3ZhbHVlcyk7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3ZhbHVlcy5zaXplKCk7ICsraSkKLSAgICAgICAg
ICAgIG1fdmFsdWVzW2ldID0gbV92YWx1ZXNbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAg
IGZvciAoYXV0byYgdmFsdWUgOiBtX3ZhbHVlcykKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUu
c3RyaXBXaGl0ZVNwYWNlKCk7CiAKICAgICAgICAgdXBkYXRlQW5pbWF0aW9uTW9kZSgpOwogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAKaW5kZXgg
ZDU0ZWM0NmM2N2FkZWZhNGI0OTg0OWYxNGNmZGZlMzcyZDhlMDZjMC4uNGJkNDNkYWVjOWU4ZTAz
N2YxMWQ4ODA1YWNiNzdjY2IwNjYzNzc3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0N1cnNvckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdDdXJzb3JF
bGVtZW50LmNwcApAQCAtNTgsOSArNTgsOCBAQCBSZWY8U1ZHQ3Vyc29yRWxlbWVudD4gU1ZHQ3Vy
c29yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvYwogCiBT
VkdDdXJzb3JFbGVtZW50Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiB7Ci0gICAgSGFzaFNldDxTVkdF
bGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKLSAgICBmb3IgKEhhc2hT
ZXQ8U1ZHRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCi0gICAgICAgICgqaXQpLT5jdXJzb3JFbGVtZW50UmVtb3ZlZCgpOworICAgIGZv
ciAoYXV0byYgY2xpZW50IDogbV9jbGllbnRzKQorICAgICAgICBjbGllbnQtPmN1cnNvckVsZW1l
bnRSZW1vdmVkKCk7CiB9CiAKIGJvb2wgU1ZHQ3Vyc29yRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCmluZGV4IGE0N2FkZDVhNjI1Y2QzMGQyMGYzZjdi
MjliZmM3OGE5Mjc2MTQzZTUuLjNhZDVmZjYwZDNmNDQ1YjdlZDZjNzg4NmE0ZTQzZmQ2NGE2M2U5
MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCkBA
IC0xMDEsMTYgKzEwMSwxNCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c3RhcnRBbmlt
YXRpb25zKCkKIAogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnBhdXNlQW5pbWF0aW9ucygp
CiB7Ci0gICAgYXV0byBlbmQgPSBtX3RpbWVDb250YWluZXJzLmVuZCgpOwotICAgIGZvciAoYXV0
byBpdCA9IG1fdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAg
ICAoKml0KS0+cGF1c2VBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBjb250YWluZXIgOiBt
X3RpbWVDb250YWluZXJzKQorICAgICAgICBjb250YWluZXItPnBhdXNlQW5pbWF0aW9ucygpOwog
fQogCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6dW5wYXVzZUFuaW1hdGlvbnMoKQogewot
ICAgIGF1dG8gZW5kID0gbV90aW1lQ29udGFpbmVycy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQg
PSBtX3RpbWVDb250YWluZXJzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgKCpp
dCktPnVucGF1c2VBbmltYXRpb25zKCk7CisgICAgZm9yIChhdXRvJiBjb250YWluZXIgOiBtX3Rp
bWVDb250YWluZXJzKQorICAgICAgICBjb250YWluZXItPnVucGF1c2VBbmltYXRpb25zKCk7CiB9
CiAKIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpkaXNwYXRjaFNWR0xvYWRFdmVudFRvT3V0
ZXJtb3N0U1ZHRWxlbWVudHMoKQpAQCAtMTE4LDEyICsxMTYsMTAgQEAgdm9pZCBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmRpc3BhdGNoU1ZHTG9hZEV2ZW50VG9PdXRlcm1vc3RTVkdFbGVtZW50cygp
CiAgICAgVmVjdG9yPFJlZlB0cjxTVkdTVkdFbGVtZW50Pj4gdGltZUNvbnRhaW5lcnM7CiAgICAg
dGltZUNvbnRhaW5lcnMuYXBwZW5kUmFuZ2UobV90aW1lQ29udGFpbmVycy5iZWdpbigpLCBtX3Rp
bWVDb250YWluZXJzLmVuZCgpKTsKIAotICAgIGF1dG8gZW5kID0gdGltZUNvbnRhaW5lcnMuZW5k
KCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gdGltZUNvbnRhaW5lcnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KSB7Ci0gICAgICAgIFNWR1NWR0VsZW1lbnQqIG91dGVyU1ZHID0gKCppdCkuZ2V0KCk7
Ci0gICAgICAgIGlmICghb3V0ZXJTVkctPmlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVudCgpKQorICAg
IGZvciAoYXV0byYgY29udGFpbmVyIDogdGltZUNvbnRhaW5lcnMpIHsKKyAgICAgICAgaWYgKCFj
b250YWluZXItPmlzT3V0ZXJtb3N0U1ZHU1ZHRWxlbWVudCgpKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIG91dGVyU1ZHLT5zZW5kU1ZHTG9hZEV2ZW50SWZQb3NzaWJsZSgpOworICAg
ICAgICBjb250YWluZXItPnNlbmRTVkdMb2FkRXZlbnRJZlBvc3NpYmxlKCk7CiAgICAgfQogfQog
CkBAIC0xNzEsOSArMTY3LDcgQEAgYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmlzRWxlbWVu
dFdpdGhQZW5kaW5nUmVzb3VyY2VzKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnMKICAgICAvLyBUaGlz
IGFsZ29yaXRobSB0YWtlcyB0aW1lIHByb3BvcnRpb25hbCB0byB0aGUgbnVtYmVyIG9mIHBlbmRp
bmcgcmVzb3VyY2VzIGFuZCBuZWVkIG5vdC4KICAgICAvLyBJZiBwZXJmb3JtYW5jZSBiZWNvbWVz
IGFuIGlzc3VlIHdlIGNhbiBrZWVwIGEgY291bnRlZCBzZXQgb2YgZWxlbWVudHMgYW5kIGFuc3dl
ciB0aGUgcXVlc3Rpb24gZWZmaWNpZW50bHkuCiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGF1
dG8gZW5kID0gbV9wZW5kaW5nUmVzb3VyY2VzLmVuZCgpOwotICAgIGZvciAoYXV0byBpdCA9IG1f
cGVuZGluZ1Jlc291cmNlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgUGVu
ZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICBmb3IgKGF1dG8m
IGVsZW1lbnRzIDogbV9wZW5kaW5nUmVzb3VyY2VzLnZhbHVlcygpKSB7CiAgICAgICAgIEFTU0VS
VChlbGVtZW50cyk7CiAKICAgICAgICAgaWYgKGVsZW1lbnRzLT5jb250YWlucyhlbGVtZW50KSkK
QEAgLTIwNSw0MyArMTk5LDM5IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZW1vdmVF
bGVtZW50RnJvbVBlbmRpbmdSZXNvdXJjZXMoRWxlbWVudCogZWxlbWVudCkKICAgICAvLyBSZW1v
dmUgdGhlIGVsZW1lbnQgZnJvbSBwZW5kaW5nIHJlc291cmNlcy4KICAgICBpZiAoIW1fcGVuZGlu
Z1Jlc291cmNlcy5pc0VtcHR5KCkgJiYgZWxlbWVudC0+aGFzUGVuZGluZ1Jlc291cmNlcygpKSB7
CiAgICAgICAgIFZlY3RvcjxBdG9taWNTdHJpbmc+IHRvQmVSZW1vdmVkOwotICAgICAgICBhdXRv
IGVuZCA9IG1fcGVuZGluZ1Jlc291cmNlcy5lbmQoKTsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0g
bV9wZW5kaW5nUmVzb3VyY2VzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICAg
ICAgUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAg
Zm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGluZ1Jlc291cmNlcykgeworICAgICAgICAgICAg
UGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9IHJlc291cmNlLnZhbHVlLmdldCgpOwogICAgICAg
ICAgICAgQVNTRVJUKGVsZW1lbnRzKTsKICAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudHMtPmlz
RW1wdHkoKSk7CiAKICAgICAgICAgICAgIGVsZW1lbnRzLT5yZW1vdmUoZWxlbWVudCk7CiAgICAg
ICAgICAgICBpZiAoZWxlbWVudHMtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICB0b0JlUmVt
b3ZlZC5hcHBlbmQoaXQtPmtleSk7CisgICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5k
KHJlc291cmNlLmtleSk7CiAgICAgICAgIH0KIAogICAgICAgICBjbGVhckhhc1BlbmRpbmdSZXNv
dXJjZXNJZlBvc3NpYmxlKGVsZW1lbnQpOwogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgcmVtb3Zl
UGVuZGluZ1Jlc291cmNlIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBs
aWZldGltZSBjb3JyZWN0bHkuCi0gICAgICAgIGF1dG8gdmVjdG9yRW5kID0gdG9CZVJlbW92ZWQu
ZW5kKCk7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IHRvQmVSZW1vdmVkLmJlZ2luKCk7IGl0ICE9
IHZlY3RvckVuZDsgKytpdCkKLSAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdSZXNvdXJjZSgqaXQp
OworICAgICAgICBmb3IgKGF1dG8mIHJlc291cmNlIDogdG9CZVJlbW92ZWQpCisgICAgICAgICAg
ICByZW1vdmVQZW5kaW5nUmVzb3VyY2UocmVzb3VyY2UpOwogICAgIH0KIAogICAgIC8vIFJlbW92
ZSB0aGUgZWxlbWVudCBmcm9tIHBlbmRpbmcgcmVzb3VyY2VzIHRoYXQgd2VyZSBzY2hlZHVsZWQg
Zm9yIHJlbW92YWwuCiAgICAgaWYgKCFtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmlzRW1w
dHkoKSkgewogICAgICAgICBWZWN0b3I8QXRvbWljU3RyaW5nPiB0b0JlUmVtb3ZlZDsKLSAgICAg
ICAgYXV0byBlbmQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmVuZCgpOwotICAgICAg
ICBmb3IgKGF1dG8gaXQgPSBtX3BlbmRpbmdSZXNvdXJjZXNGb3JSZW1vdmFsLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgewotICAgICAgICAgICAgUGVuZGluZ0VsZW1lbnRzKiBlbGVtZW50cyA9
IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IG1fcGVuZGlu
Z1Jlc291cmNlc0ZvclJlbW92YWwpIHsKKyAgICAgICAgICAgIFBlbmRpbmdFbGVtZW50cyogZWxl
bWVudHMgPSByZXNvdXJjZS52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50
cyk7CiAgICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnRzLT5pc0VtcHR5KCkpOwogCiAgICAgICAg
ICAgICBlbGVtZW50cy0+cmVtb3ZlKGVsZW1lbnQpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnRz
LT5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKGl0LT5rZXkp
OworICAgICAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZChyZXNvdXJjZS5rZXkpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSByZW1vdmVQZW5kaW5nUmVzb3VyY2VGb3JS
ZW1vdmFsIGZ1bmN0aW9uIGhlcmUgYmVjYXVzZSBpdCBkZWFscyB3aXRoIHNldCBsaWZldGltZSBj
b3JyZWN0bHkuCi0gICAgICAgIGF1dG8gdmVjdG9yRW5kID0gdG9CZVJlbW92ZWQuZW5kKCk7Ci0g
ICAgICAgIGZvciAoYXV0byBpdCA9IHRvQmVSZW1vdmVkLmJlZ2luKCk7IGl0ICE9IHZlY3RvckVu
ZDsgKytpdCkKLSAgICAgICAgICAgIHJlbW92ZVBlbmRpbmdSZXNvdXJjZUZvclJlbW92YWwoKml0
KTsKKyAgICAgICAgZm9yIChhdXRvJiByZXNvdXJjZSA6IHRvQmVSZW1vdmVkKQorICAgICAgICAg
ICAgcmVtb3ZlUGVuZGluZ1Jlc291cmNlRm9yUmVtb3ZhbChyZXNvdXJjZSk7CiAgICAgfQogfQog
CkBAIC0zMTcsMTggKzMwNywxNiBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVtb3Zl
QWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1lbnQoU1ZHRWxlbWVudCogcmVmZQogewogICAgIFZl
Y3RvcjxTVkdFbGVtZW50Kj4gdG9CZVJlbW92ZWQ7CiAKLSAgICBhdXRvIGVuZCA9IG1fZWxlbWVu
dERlcGVuZGVuY2llcy5lbmQoKTsKLSAgICBmb3IgKGF1dG8gaXQgPSBtX2VsZW1lbnREZXBlbmRl
bmNpZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIFNWR0VsZW1lbnQqIHJl
ZmVyZW5jZWRFbGVtZW50ID0gaXQtPmtleTsKLSAgICAgICAgSGFzaFNldDxTVkdFbGVtZW50Kj4m
IHJlZmVyZW5jaW5nRWxlbWVudHMgPSAqaXQtPnZhbHVlOworICAgIGZvciAoYXV0byYgZGVwZW5k
ZW5jeSA6IG1fZWxlbWVudERlcGVuZGVuY2llcykgeworICAgICAgICBTVkdFbGVtZW50KiByZWZl
cmVuY2VkRWxlbWVudCA9IGRlcGVuZGVuY3kua2V5OworICAgICAgICBIYXNoU2V0PFNWR0VsZW1l
bnQqPiYgcmVmZXJlbmNpbmdFbGVtZW50cyA9ICpkZXBlbmRlbmN5LnZhbHVlOwogICAgICAgICBy
ZWZlcmVuY2luZ0VsZW1lbnRzLnJlbW92ZShyZWZlcmVuY2luZ0VsZW1lbnQpOwogICAgICAgICBp
ZiAocmVmZXJlbmNpbmdFbGVtZW50cy5pc0VtcHR5KCkpCiAgICAgICAgICAgICB0b0JlUmVtb3Zl
ZC5hcHBlbmQocmVmZXJlbmNlZEVsZW1lbnQpOwogICAgIH0KIAotICAgIGF1dG8gdmVjdG9yRW5k
ID0gdG9CZVJlbW92ZWQuZW5kKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gdG9CZVJlbW92ZWQuYmVn
aW4oKTsgaXQgIT0gdmVjdG9yRW5kOyArK2l0KQotICAgICAgICBtX2VsZW1lbnREZXBlbmRlbmNp
ZXMucmVtb3ZlKCppdCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogdG9CZVJlbW92ZWQpCisg
ICAgICAgIG1fZWxlbWVudERlcGVuZGVuY2llcy5yZW1vdmUoZWxlbWVudCk7CiB9CiAKIHZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZWJ1aWxkRWxlbWVudHMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCmluZGV4IGQzMWI0Mjc1MjNlNGYxNWI5NDBjOGUwZjViNDNiMzk0Y2NkNTkzMjIu
LjRmYzlmZmUwYmY4YjZhZjZiNjUwZDA2NTQ3MWI3ODc3MDhkZjIwNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5jcHAKQEAgLTE1MCw4ICsxNTAsOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZv
aWQgcG9wdWxhdGVBdHRyaWJ1dGVOYW1lVG9DU1NQcm9wZXJ0eUlETWFwKEhhc2hNYXA8QXRvbWlj
UwogICAgICAgICAmeUF0dHIsCiAgICAgfTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBXVEZfQVJSQVlfTEVOR1RIKGF0dHJpYnV0ZU5hbWVzKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gYXR0cmlidXRlTmFtZXNbaV0tPmxvY2FsTmFtZSgp
OworICAgIGZvciAoYXV0byYgbmFtZSA6IGF0dHJpYnV0ZU5hbWVzKSB7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gbmFtZS0+bG9jYWxOYW1lKCk7CiAgICAgICAgIG1h
cC5hZGQobG9jYWxOYW1lLmltcGwoKSwgY3NzUHJvcGVydHlJRChsb2NhbE5hbWUpKTsKICAgICB9
CiAKQEAgLTIyOSw4ICsyMjksOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcG9wdWxhdGVB
dHRyaWJ1dGVOYW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcChIYXNoTWFwPAogICAgICAgICB7
IHdvcmRfc3BhY2luZ0F0dHIsIEFuaW1hdGVkTGVuZ3RoIH0sCiAgICAgfTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKHRhYmxlKTsgKytpKQotICAgICAg
ICBtYXAuYWRkKHRhYmxlW2ldLmF0dHJpYnV0ZU5hbWUuaW1wbCgpLCB0YWJsZVtpXS50eXBlKTsK
KyAgICBmb3IgKGF1dG8mIGVudHJ5IDogdGFibGUpCisgICAgICAgIG1hcC5hZGQoZW50cnkuYXR0
cmlidXRlTmFtZS5pbXBsKCksIGVudHJ5LnR5cGUpOwogfQogCiBzdGF0aWMgaW5saW5lIEhhc2hN
YXA8UXVhbGlmaWVkTmFtZTo6UXVhbGlmaWVkTmFtZUltcGwqLCBBbmltYXRlZFByb3BlcnR5VHlw
ZT4mIGF0dHJpYnV0ZU5hbWVUb0FuaW1hdGVkUHJvcGVydHlUeXBlTWFwKCkKQEAgLTI2Myw4ICsy
NjMsOCBAQCBzdGF0aWMgTkVWRVJfSU5MSU5FIHZvaWQgcG9wdWxhdGVDU1NQcm9wZXJ0eVdpdGhT
VkdET01OYW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZQogICAgICAgICB7IHlBdHRyLCBBbmltYXRl
ZExlbmd0aCB9LAogICAgIH07CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgV1RGX0FS
UkFZX0xFTkdUSCh0YWJsZSk7ICsraSkKLSAgICAgICAgbWFwLmFkZCh0YWJsZVtpXS5hdHRyaWJ1
dGVOYW1lLmltcGwoKSwgdGFibGVbaV0udHlwZSk7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IHRh
YmxlKQorICAgICAgICBtYXAuYWRkKGVudHJ5LmF0dHJpYnV0ZU5hbWUuaW1wbCgpLCBlbnRyeS50
eXBlKTsKIH0KIAogc3RhdGljIGlubGluZSBIYXNoTWFwPFF1YWxpZmllZE5hbWU6OlF1YWxpZmll
ZE5hbWVJbXBsKiwgQW5pbWF0ZWRQcm9wZXJ0eVR5cGU+JiBjc3NQcm9wZXJ0eVdpdGhTVkdET01O
YW1lVG9BbmltYXRlZFByb3BlcnR5VHlwZU1hcCgpCkBAIC02MzksOCArNjM5LDggQEAgc3RhdGlj
IGJvb2wgaGFzTG9hZExpc3RlbmVyKEVsZW1lbnQqIGVsZW1lbnQpCiAKICAgICBmb3IgKGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCk7IGVsZW1lbnQ7IGVsZW1l
bnQgPSBlbGVtZW50LT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKICAgICAgICAgY29u
c3QgRXZlbnRMaXN0ZW5lclZlY3RvciYgZW50cnkgPSBlbGVtZW50LT5nZXRFdmVudExpc3RlbmVy
cyhldmVudE5hbWVzKCkubG9hZEV2ZW50KTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBlbnRyeS5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKGVudHJ5W2ldLnVzZUNhcHR1
cmUpCisgICAgICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBlbnRyeSkgeworICAgICAgICAgICAg
aWYgKGxpc3RlbmVyLnVzZUNhcHR1cmUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERh
dGEuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCA1Mjg5NDAz
N2IyNDlhZDk1Y2JmYmM2MTg0ZGJkODk2MGIwY2JkNzE5Li42MTA0NzUyNjlkOGRiOGY1ZGE3ZjU1
ZjExOGM3M2ZkMzYyNmQzMjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE2
MSwxOSArMTYxLDE3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24o
V2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoRGF0YSYgZ2x5CiAgICAgfQogCiAgICAgVmVj
dG9yPFNWR0dseXBoPiBnbHlwaHM7Ci0gICAgc2l6ZV90IGFsdEdseXBoTmFtZXNTaXplID0gYWx0
R2x5cGhOYW1lcy5zaXplKCk7Ci0gICAgaWYgKGFsdEdseXBoTmFtZXNTaXplKSB7Ci0gICAgICAg
IGZvciAoc2l6ZV90IGluZGV4ID0gMDsgaW5kZXggPCBhbHRHbHlwaE5hbWVzU2l6ZTsgKytpbmRl
eCkKLSAgICAgICAgICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Y29sbGVjdEdseXBoc0Zvckds
eXBoTmFtZShhbHRHbHlwaE5hbWVzW2luZGV4XSwgZ2x5cGhzKTsKKyAgICBpZiAoIWFsdEdseXBo
TmFtZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAoYXV0byYgbmFtZSA6IGFsdEdseXBoTmFt
ZXMpCisgICAgICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmNvbGxlY3RHbHlwaHNGb3JH
bHlwaE5hbWUobmFtZSwgZ2x5cGhzKTsKIAogICAgICAgICAvLyBBc3NpZ24gdGhlIHVuaWNvZGVT
dHJpbmdMZW5ndGggbm93IHRoYXQgaXRzIGtub3duLgotICAgICAgICBzaXplX3QgZ2x5cGhzU2l6
ZSA9IGdseXBocy5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZ2x5cGhz
U2l6ZTsgKytpKQotICAgICAgICAgICAgZ2x5cGhzW2ldLnVuaWNvZGVTdHJpbmdMZW5ndGggPSBy
dW4ubGVuZ3RoKCk7CisgICAgICAgIGZvciAoYXV0byYgZ2x5cGggOiBnbHlwaHMpCisgICAgICAg
ICAgICBnbHlwaC51bmljb2RlU3RyaW5nTGVuZ3RoID0gcnVuLmxlbmd0aCgpOwogCiAgICAgICAg
IC8vIERvIG5vdCBjaGVjayBhbHQgZ2x5cGhzIGZvciBjb21wYXRpYmlsaXR5LiBKdXN0IHJldHVy
biB0aGUgZmlyc3Qgb25lLgogICAgICAgICAvLyBMYXRlciBjb2RlIHdpbGwgZmFpbCBpZiB3ZSBk
byBub3QgZG8gdGhpcyBhbmQgdGhlIGdseXBoIGlzIGluY29tcGF0aWJsZS4KLSAgICAgICAgaWYg
KGdseXBoc1NpemUpIHsKKyAgICAgICAgaWYgKCFnbHlwaHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICBTVkdHbHlwaCYgc3ZnR2x5cGggPSBnbHlwaHNbMF07CiAgICAgICAgICAgICBpdGVyYXRv
ci5zZXRMYXN0R2x5cGhOYW1lKHN2Z0dseXBoLmdseXBoTmFtZSk7CiAgICAgICAgICAgICBnbHlw
aERhdGEuZ2x5cGggPSBzdmdHbHlwaC50YWJsZUVudHJ5OwpAQCAtMTkxLDE2ICsxODksMTQgQEAg
Ym9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiBp
dGVyYXRvciwgR2x5cGhEYXRhJiBnbHkKICAgICAgICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5j
b2xsZWN0R2x5cGhzRm9yU3RyaW5nKHJlbWFpbmluZ1RleHRJblJ1biwgZ2x5cGhzKTsKICAgICB9
CiAKLSAgICBzaXplX3QgZ2x5cGhzU2l6ZSA9IGdseXBocy5zaXplKCk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBnbHlwaHNTaXplOyArK2kpIHsKLSAgICAgICAgU1ZHR2x5cGgmIHN2Z0ds
eXBoID0gZ2x5cGhzW2ldOwotICAgICAgICBpZiAoc3ZnR2x5cGguaXNQYXJ0T2ZMaWdhdHVyZSkK
KyAgICBmb3IgKGF1dG8mIGdseXBoIDogZ2x5cGhzKSB7CisgICAgICAgIGlmIChnbHlwaC5pc1Bh
cnRPZkxpZ2F0dXJlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghaXNDb21w
YXRpYmxlR2x5cGgoc3ZnR2x5cGgsIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgYXJhYmljRm9y
bXMsIGN1cnJlbnRDaGFyYWN0ZXIsIGN1cnJlbnRDaGFyYWN0ZXIgKyBzdmdHbHlwaC51bmljb2Rl
U3RyaW5nTGVuZ3RoKSkKKyAgICAgICAgaWYgKCFpc0NvbXBhdGlibGVHbHlwaChnbHlwaCwgaXNW
ZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBhcmFiaWNGb3JtcywgY3VycmVudENoYXJhY3RlciwgY3Vy
cmVudENoYXJhY3RlciArIGdseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGgpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGl0ZXJhdG9yLnNldExhc3RHbHlwaE5hbWUoc3ZnR2x5cGguZ2x5
cGhOYW1lKTsKLSAgICAgICAgZ2x5cGhEYXRhLmdseXBoID0gc3ZnR2x5cGgudGFibGVFbnRyeTsK
LSAgICAgICAgYWR2YW5jZUxlbmd0aCA9IHN2Z0dseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGg7Cisg
ICAgICAgIGl0ZXJhdG9yLnNldExhc3RHbHlwaE5hbWUoZ2x5cGguZ2x5cGhOYW1lKTsKKyAgICAg
ICAgZ2x5cGhEYXRhLmdseXBoID0gZ2x5cGgudGFibGVFbnRyeTsKKyAgICAgICAgYWR2YW5jZUxl
bmd0aCA9IGdseXBoLnVuaWNvZGVTdHJpbmdMZW5ndGg7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RWxlbWVudC5jcHAKaW5kZXggMWEwNjkxMzBl
NzFmYmU3OWZkZTExOWViODZmZjIxMWE0MGUzMDNmZi4uMTE0ODgxMjI0OWMyOGU3NDRlNmQ3OWIy
OWQ5ZjA1Mzc4NjRiODk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEVsZW1lbnQuY3BwCkBA
IC04NiwxMCArODYsNyBAQCB2b2lkIFNWR0ZvbnRFbGVtZW50OjpyZWdpc3RlckxpZ2F0dXJlc0lu
R2x5cGhDYWNoZShWZWN0b3I8U3RyaW5nPiYgbGlnYXR1cmVzKQogICAgIC8vIHdpbGwgbm90IGJl
IGFibGUgdG8gZmluZCBhIGdseXBoIGZvciAiZiIsIGJ1dCBoYW5kbGVzIHRoZSBmYWxsYmFjawog
ICAgIC8vIGNoYXJhY3RlciBzdWJzdGl0dXRpb24gcHJvcGVybHkgdGhyb3VnaCBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoKS4KICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKLSAgICBzaXplX3Qg
bGlnYXR1cmVzU2l6ZSA9IGxpZ2F0dXJlcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsaWdhdHVyZXNTaXplOyArK2kpIHsKLSAgICAgICAgY29uc3QgU3RyaW5nJiB1bmljb2Rl
ID0gbGlnYXR1cmVzW2ldOwotCisgICAgZm9yIChhdXRvJiB1bmljb2RlIDogbGlnYXR1cmVzKSB7
CiAgICAgICAgIHVuc2lnbmVkIHVuaWNvZGVMZW5ndGggPSB1bmljb2RlLmxlbmd0aCgpOwogICAg
ICAgICBBU1NFUlQodW5pY29kZUxlbmd0aCA+IDEpOwogCkBAIC0xNzQsMjcgKzE3MSwyMyBAQCB2
b2lkIFNWR0tlcm5pbmdNYXA6Omluc2VydChjb25zdCBTVkdLZXJuaW5nUGFpciYga2VybmluZ1Bh
aXIpCiAgICAgc3ZnS2VybmluZy51bmljb2RlTmFtZTIgPSBrZXJuaW5nUGFpci51bmljb2RlTmFt
ZTI7CiAgICAgc3ZnS2VybmluZy5nbHlwaE5hbWUyID0ga2VybmluZ1BhaXIuZ2x5cGhOYW1lMjsK
IAotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgdUl0ID0ga2VybmluZ1BhaXIu
dW5pY29kZU5hbWUxLmJlZ2luKCk7Ci0gICAgY29uc3QgSGFzaFNldDxTdHJpbmc+Ojpjb25zdF9p
dGVyYXRvciB1RW5kID0ga2VybmluZ1BhaXIudW5pY29kZU5hbWUxLmVuZCgpOwotICAgIGZvciAo
OyB1SXQgIT0gdUVuZDsgKyt1SXQpIHsKLSAgICAgICAgaWYgKHVuaWNvZGVNYXAuY29udGFpbnMo
KnVJdCkpCi0gICAgICAgICAgICB1bmljb2RlTWFwLmdldCgqdUl0KS0+YXBwZW5kKHN2Z0tlcm5p
bmcpOworICAgIGZvciAoYXV0byYgbmFtZSA6IGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkgewor
ICAgICAgICBpZiAodW5pY29kZU1hcC5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIHVuaWNv
ZGVNYXAuZ2V0KG5hbWUpLT5hcHBlbmQoc3ZnS2VybmluZyk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgYXV0byBuZXdWZWN0b3IgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR0tlcm5pbmdWZWN0
b3I+KCk7CiAgICAgICAgICAgICBuZXdWZWN0b3ItPmFwcGVuZChzdmdLZXJuaW5nKTsKLSAgICAg
ICAgICAgIHVuaWNvZGVNYXAuYWRkKCp1SXQsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKKyAgICAg
ICAgICAgIHVuaWNvZGVNYXAuYWRkKG5hbWUsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIEhhc2hTZXQ8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZ0l0ID0g
a2VybmluZ1BhaXIuZ2x5cGhOYW1lMS5iZWdpbigpOwotICAgIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
Pjo6Y29uc3RfaXRlcmF0b3IgZ0VuZCA9IGtlcm5pbmdQYWlyLmdseXBoTmFtZTEuZW5kKCk7Ci0g
ICAgZm9yICg7IGdJdCAhPSBnRW5kOyArK2dJdCkgewotICAgICAgICBpZiAoZ2x5cGhNYXAuY29u
dGFpbnMoKmdJdCkpCi0gICAgICAgICAgICBnbHlwaE1hcC5nZXQoKmdJdCktPmFwcGVuZChzdmdL
ZXJuaW5nKTsKKyAgICBmb3IgKGF1dG8mIG5hbWUgOiBrZXJuaW5nUGFpci5nbHlwaE5hbWUxKSB7
CisgICAgICAgIGlmIChnbHlwaE1hcC5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIGdseXBo
TWFwLmdldChuYW1lKS0+YXBwZW5kKHN2Z0tlcm5pbmcpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIGF1dG8gbmV3VmVjdG9yID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdLZXJuaW5nVmVjdG9y
PigpOwogICAgICAgICAgICAgbmV3VmVjdG9yLT5hcHBlbmQoc3ZnS2VybmluZyk7Ci0gICAgICAg
ICAgICBnbHlwaE1hcC5hZGQoKmdJdCwgV1RGOjptb3ZlKG5ld1ZlY3RvcikpOworICAgICAgICAg
ICAgZ2x5cGhNYXAuYWRkKG5hbWUsIFdURjo6bW92ZShuZXdWZWN0b3IpKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMjA5LDkgKzIwMiw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdHJpbmdNYXRj
aGVzVW5pY29kZVJhbmdlKGNvbnN0IFN0cmluZyYgdW5pY29kZVN0cmluZywgY29uc3QKIAogICAg
IGlmICghcmFuZ2VzLmlzRW1wdHkoKSkgewogICAgICAgICBVQ2hhciBmaXJzdENoYXIgPSB1bmlj
b2RlU3RyaW5nWzBdOwotICAgICAgICBjb25zdCBVbmljb2RlUmFuZ2VzOjpjb25zdF9pdGVyYXRv
ciBlbmQgPSByYW5nZXMuZW5kKCk7Ci0gICAgICAgIGZvciAoVW5pY29kZVJhbmdlczo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSByYW5nZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
ICAgICBpZiAoZmlyc3RDaGFyID49IGl0LT5maXJzdCAmJiBmaXJzdENoYXIgPD0gaXQtPnNlY29u
ZCkKKyAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHJhbmdlcykgeworICAgICAgICAgICAgaWYg
KGZpcnN0Q2hhciA+PSByYW5nZS5maXJzdCAmJiBmaXJzdENoYXIgPD0gcmFuZ2Uuc2Vjb25kKQog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAppbmRleCA5ZDlkMmEyYjIzYzYwMGZlYmI1MzQwY2Jj
ZGQxYjYxZGRjM2I5ZjE1Li5hNzVhYjQ2NzJlMjlhMDFjNGFmNGVmNDlkNGVkZDRhNWJjMjk1YjYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNTgsMTAgKzU4LDEw
IEBAIHB1YmxpYzoKICAgICBEYXRhSXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVn
aW4oKTsgfQogICAgIERhdGFJdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2RhdGEuZW5kKCk7IH0K
ICAgICB2b2lkIGFwcGVuZCh1bnNpZ25lZCBjaGFyIGJ5dGUpIHsgbV9kYXRhLmFwcGVuZChieXRl
KTsgfQotICAgIHZvaWQgYXBwZW5kKFNWR1BhdGhCeXRlU3RyZWFtKiBvdGhlcikKKyAgICB2b2lk
IGFwcGVuZChTVkdQYXRoQnl0ZVN0cmVhbSYgb3RoZXIpCiAgICAgewotICAgICAgICBmb3IgKERh
dGFJdGVyYXRvciBpdCA9IG90aGVyLT5iZWdpbigpOyBpdCAhPSBvdGhlci0+ZW5kKCk7ICsraXQp
Ci0gICAgICAgICAgICBhcHBlbmQoKml0KTsKKyAgICAgICAgZm9yIChhdXRvIHN0cmVhbSA6IG90
aGVyKQorICAgICAgICAgICAgYXBwZW5kKHN0cmVhbSk7CiAgICAgfQogICAgIHZvaWQgY2xlYXIo
KSB7IG1fZGF0YS5jbGVhcigpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4g
IW1fZGF0YS5zaXplKCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
VXRpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcApp
bmRleCBjMzIzOTUyMjE1NzI1ZDdkOWFjZmE5N2U4NTVmOWMxMzQwY2M4ZGFlLi43MTA2MDU2YzM5
MDFkODRhYzkyNmFkMWMzYmIyZDYxMzVkNWVmMzc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhVdGlsaXRpZXMuY3BwCkBAIC0xNTUsNyArMTU1LDcgQEAgYm9vbCBhcHBlbmRTVkdQYXRoQnl0
ZVN0cmVhbUZyb21TVkdQYXRoU2VnKFBhc3NSZWZQdHI8U1ZHUGF0aFNlZz4gcGF0aFNlZywgU1ZH
UGEKICAgICBwYXJzZXItPmNsZWFudXAoKTsKIAogICAgIGlmIChvaykKLSAgICAgICAgcmVzdWx0
LT5hcHBlbmQoYXBwZW5kZWRCeXRlU3RyZWFtLmdldCgpKTsKKyAgICAgICAgcmVzdWx0LT5hcHBl
bmQoKmFwcGVuZGVkQnl0ZVN0cmVhbSk7CiAKICAgICByZXR1cm4gb2s7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCmluZGV4IDUz
MjY4YWRhMzZlYTUzNWZhNzhlN2JjZTY0Y2NkMjAyZmZlOTFlNWQuLjM5OWNjYjQ5NzkzOTI0ZTg5
MWUwYjE3NzFhYTZhNjhhZGNlY2IzMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9h
bmltYXRpb24vU01JTFRpbWVDb250YWluZXIuY3BwCkBAIC0xODcsMTEgKzE4Nyw5IEBAIHZvaWQg
U01JTFRpbWVDb250YWluZXI6OnNldEVsYXBzZWQoU01JTFRpbWUgdGltZSkKICNpZm5kZWYgTkRF
QlVHCiAgICAgbV9wcmV2ZW50U2NoZWR1bGVkQW5pbWF0aW9uc0NoYW5nZXMgPSB0cnVlOwogI2Vu
ZGlmCi0gICAgZm9yIChhdXRvJiBpdCA6IG1fc2NoZWR1bGVkQW5pbWF0aW9ucykgewotICAgICAg
ICBBbmltYXRpb25zVmVjdG9yKiBzY2hlZHVsZWQgPSBpdC52YWx1ZS5nZXQoKTsKLSAgICAgICAg
dW5zaWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+c2l6ZSgpOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IG4gPSAwOyBuIDwgc2l6ZTsgbisrKQotICAgICAgICAgICAgc2NoZWR1bGVkLT5hdChuKS0+cmVz
ZXQoKTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fc2NoZWR1bGVkQW5pbWF0aW9ucy52
YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiAqYW5pbWF0aW9uKQorICAg
ICAgICAgICAgZWxlbWVudC0+cmVzZXQoKTsKICAgICB9CiAjaWZuZGVmIE5ERUJVRwogICAgIG1f
cHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CkBAIC0yNzQsOSArMjcy
LDcgQEAgdm9pZCBTTUlMVGltZUNvbnRhaW5lcjo6dXBkYXRlQW5pbWF0aW9ucyhTTUlMVGltZSBl
bGFwc2VkLCBib29sIHNlZWtUb1RpbWUpCiAgICAgICAgIHNvcnRCeVByaW9yaXR5KCpzY2hlZHVs
ZWQsIGVsYXBzZWQpOwogCiAgICAgICAgIFNWR1NNSUxFbGVtZW50KiByZXN1bHRFbGVtZW50ID0g
MDsKLSAgICAgICAgdW5zaWduZWQgc2l6ZSA9IHNjaGVkdWxlZC0+c2l6ZSgpOwotICAgICAgICBm
b3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgbisrKSB7Ci0gICAgICAgICAgICBTVkdTTUlM
RWxlbWVudCogYW5pbWF0aW9uID0gc2NoZWR1bGVkLT5hdChuKTsKKyAgICAgICAgZm9yIChhdXRv
JiBhbmltYXRpb24gOiAqc2NoZWR1bGVkKSB7CiAgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9u
LT50aW1lQ29udGFpbmVyKCkgPT0gdGhpcyk7CiAgICAgICAgICAgICBBU1NFUlQoYW5pbWF0aW9u
LT50YXJnZXRFbGVtZW50KCkpOwogICAgICAgICAgICAgQVNTRVJUKGFuaW1hdGlvbi0+aGFzVmFs
aWRBdHRyaWJ1dGVOYW1lKCkpOwpAQCAtMzAxLDggKzI5Nyw3IEBAIHZvaWQgU01JTFRpbWVDb250
YWluZXI6OnVwZGF0ZUFuaW1hdGlvbnMoU01JTFRpbWUgZWxhcHNlZCwgYm9vbCBzZWVrVG9UaW1l
KQogICAgICAgICAgICAgYW5pbWF0aW9uc1RvQXBwbHkuYXBwZW5kKHJlc3VsdEVsZW1lbnQpOwog
ICAgIH0KIAotICAgIHVuc2lnbmVkIGFuaW1hdGlvbnNUb0FwcGx5U2l6ZSA9IGFuaW1hdGlvbnNU
b0FwcGx5LnNpemUoKTsKLSAgICBpZiAoIWFuaW1hdGlvbnNUb0FwcGx5U2l6ZSkgeworICAgIGlm
IChhbmltYXRpb25zVG9BcHBseS5pc0VtcHR5KCkpIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAg
IG1fcHJldmVudFNjaGVkdWxlZEFuaW1hdGlvbnNDaGFuZ2VzID0gZmFsc2U7CiAjZW5kaWYKQEAg
LTMxMSw4ICszMDYsOCBAQCB2b2lkIFNNSUxUaW1lQ29udGFpbmVyOjp1cGRhdGVBbmltYXRpb25z
KFNNSUxUaW1lIGVsYXBzZWQsIGJvb2wgc2Vla1RvVGltZSkKICAgICB9CiAKICAgICAvLyBBcHBs
eSByZXN1bHRzIHRvIHRhcmdldCBlbGVtZW50cy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYW5pbWF0aW9uc1RvQXBwbHlTaXplOyArK2kpCi0gICAgICAgIGFuaW1hdGlvbnNUb0FwcGx5
W2ldLT5hcHBseVJlc3VsdHNUb1RhcmdldCgpOworICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
YW5pbWF0aW9uc1RvQXBwbHkpCisgICAgICAgIGFuaW1hdGlvbi0+YXBwbHlSZXN1bHRzVG9UYXJn
ZXQoKTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBtX3ByZXZlbnRTY2hlZHVsZWRBbmltYXRpb25z
Q2hhbmdlcyA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2FuaW1hdGlv
bi9TVkdTTUlMRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NN
SUxFbGVtZW50LmNwcAppbmRleCBmNWNhZjc0ZTcxNDA2NzY3MjUyYzgzNWIwMmQxYmFkMTE1MTMw
NWE5Li5jOTkwYWFhOTBmYTliYWVhNmM3ZmU4ZjRjMjAzZDg0NWMyOGRiMWMwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmNwcApAQCAtNDIxLDE0
ICs0MjEsMTQgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6cGFyc2VCZWdpbk9yRW5kKGNvbnN0IFN0
cmluZyYgcGFyc2VTdHJpbmcsIEJlZ2luT3JFbmQgYmVnaW4KICAgICBpZiAoYmVnaW5PckVuZCA9
PSBFbmQpCiAgICAgICAgIG1faGFzRW5kRXZlbnRDb25kaXRpb25zID0gZmFsc2U7CiAgICAgSGFz
aFNldDxkb3VibGU+IGV4aXN0aW5nOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCB0aW1l
TGlzdC5zaXplKCk7ICsrbikKLSAgICAgICAgZXhpc3RpbmcuYWRkKHRpbWVMaXN0W25dLnRpbWUo
KS52YWx1ZSgpKTsKKyAgICBmb3IgKGF1dG8mIHRpbWUgOiB0aW1lTGlzdCkKKyAgICAgICAgZXhp
c3RpbmcuYWRkKHRpbWUudGltZSgpLnZhbHVlKCkpOwogICAgIFZlY3RvcjxTdHJpbmc+IHNwbGl0
U3RyaW5nOwogICAgIHBhcnNlU3RyaW5nLnNwbGl0KCc7Jywgc3BsaXRTdHJpbmcpOwotICAgIGZv
ciAodW5zaWduZWQgbiA9IDA7IG4gPCBzcGxpdFN0cmluZy5zaXplKCk7ICsrbikgewotICAgICAg
ICBTTUlMVGltZSB2YWx1ZSA9IHBhcnNlQ2xvY2tWYWx1ZShzcGxpdFN0cmluZ1tuXSk7CisgICAg
Zm9yIChhdXRvJiBzdHJpbmcgOiBzcGxpdFN0cmluZykgeworICAgICAgICBTTUlMVGltZSB2YWx1
ZSA9IHBhcnNlQ2xvY2tWYWx1ZShzdHJpbmcpOwogICAgICAgICBpZiAodmFsdWUuaXNVbnJlc29s
dmVkKCkpCi0gICAgICAgICAgICBwYXJzZUNvbmRpdGlvbihzcGxpdFN0cmluZ1tuXSwgYmVnaW5P
ckVuZCk7CisgICAgICAgICAgICBwYXJzZUNvbmRpdGlvbihzdHJpbmcsIGJlZ2luT3JFbmQpOwog
ICAgICAgICBlbHNlIGlmICghZXhpc3RpbmcuY29udGFpbnModmFsdWUudmFsdWUoKSkpCiAgICAg
ICAgICAgICB0aW1lTGlzdC5hcHBlbmQoU01JTFRpbWVXaXRoT3JpZ2luKHZhbHVlLCBTTUlMVGlt
ZVdpdGhPcmlnaW46OlBhcnNlck9yaWdpbikpOwogICAgIH0KQEAgLTUxOCw4ICs1MTgsNyBAQCB2
b2lkIFNWR1NNSUxFbGVtZW50Ojpjb25uZWN0Q29uZGl0aW9ucygpCiAgICAgaWYgKG1fY29uZGl0
aW9uc0Nvbm5lY3RlZCkKICAgICAgICAgZGlzY29ubmVjdENvbmRpdGlvbnMoKTsKICAgICBtX2Nv
bmRpdGlvbnNDb25uZWN0ZWQgPSB0cnVlOwotICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBt
X2NvbmRpdGlvbnMuc2l6ZSgpOyArK24pIHsKLSAgICAgICAgQ29uZGl0aW9uJiBjb25kaXRpb24g
PSBtX2NvbmRpdGlvbnNbbl07CisgICAgZm9yIChhdXRvJiBjb25kaXRpb24gOiBtX2NvbmRpdGlv
bnMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0aW9uOjpFdmVudEJh
c2UpIHsKICAgICAgICAgICAgIEFTU0VSVCghY29uZGl0aW9uLm1fc3luY2Jhc2UpOwogICAgICAg
ICAgICAgRWxlbWVudCogZXZlbnRCYXNlID0gZXZlbnRCYXNlRm9yKGNvbmRpdGlvbik7CkBAIC01
NDcsOCArNTQ2LDcgQEAgdm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlzY29ubmVjdENvbmRpdGlvbnMo
KQogICAgIGlmICghbV9jb25kaXRpb25zQ29ubmVjdGVkKQogICAgICAgICByZXR1cm47CiAgICAg
bV9jb25kaXRpb25zQ29ubmVjdGVkID0gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gMDsg
biA8IG1fY29uZGl0aW9ucy5zaXplKCk7ICsrbikgewotICAgICAgICBDb25kaXRpb24mIGNvbmRp
dGlvbiA9IG1fY29uZGl0aW9uc1tuXTsKKyAgICBmb3IgKGF1dG8mIGNvbmRpdGlvbiA6IG1fY29u
ZGl0aW9ucykgewogICAgICAgICBpZiAoY29uZGl0aW9uLm1fdHlwZSA9PSBDb25kaXRpb246OkV2
ZW50QmFzZSkgewogICAgICAgICAgICAgQVNTRVJUKCFjb25kaXRpb24ubV9zeW5jYmFzZSk7CiAg
ICAgICAgICAgICBpZiAoIWNvbmRpdGlvbi5tX2V2ZW50TGlzdGVuZXIpCkBAIC0xMTI2LDkgKzEx
MjQsNyBAQCB2b2lkIFNWR1NNSUxFbGVtZW50Ojpub3RpZnlEZXBlbmRlbnRzSW50ZXJ2YWxDaGFu
Z2VkKE5ld09yRXhpc3RpbmdJbnRlcnZhbCBuZXdPcgogICAgICAgICByZXR1cm47CiAgICAgbG9v
cEJyZWFrZXIuYWRkKHRoaXMpOwogICAgIAotICAgIFRpbWVEZXBlbmRlbnRTZXQ6Oml0ZXJhdG9y
IGVuZCA9IG1fdGltZURlcGVuZGVudHMuZW5kKCk7Ci0gICAgZm9yIChUaW1lRGVwZW5kZW50U2V0
OjppdGVyYXRvciBpdCA9IG1fdGltZURlcGVuZGVudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KSB7Ci0gICAgICAgIFNWR1NNSUxFbGVtZW50KiBkZXBlbmRlbnQgPSAqaXQ7CisgICAgZm9yIChh
dXRvJiBkZXBlbmRlbnQgOiBtX3RpbWVEZXBlbmRlbnRzKSB7CiAgICAgICAgIGRlcGVuZGVudC0+
Y3JlYXRlSW5zdGFuY2VUaW1lc0Zyb21TeW5jYmFzZSh0aGlzLCBuZXdPckV4aXN0aW5nKTsKICAg
ICB9CiAKQEAgLTExMzksOCArMTEzNSw3IEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OmNyZWF0ZUlu
c3RhbmNlVGltZXNGcm9tU3luY2Jhc2UoU1ZHU01JTEVsZW1lbnQqIHN5bmNiYXNlLCBOCiB7CiAg
ICAgLy8gRklYTUU6IFRvIGJlIHJlYWxseSBjb3JyZWN0LCB0aGlzIHNob3VsZCBoYW5kbGUgdXBk
YXRpbmcgZXhpc2luZyBpbnRlcnZhbCBieSBjaGFuZ2luZyAKICAgICAvLyB0aGUgYXNzb2NpYXRl
ZCB0aW1lcyBpbnN0ZWFkIG9mIGNyZWF0aW5nIG5ldyBvbmVzLgotICAgIGZvciAodW5zaWduZWQg
biA9IDA7IG4gPCBtX2NvbmRpdGlvbnMuc2l6ZSgpOyArK24pIHsKLSAgICAgICAgQ29uZGl0aW9u
JiBjb25kaXRpb24gPSBtX2NvbmRpdGlvbnNbbl07CisgICAgZm9yIChhdXRvJiBjb25kaXRpb24g
OiBtX2NvbmRpdGlvbnMpIHsKICAgICAgICAgaWYgKGNvbmRpdGlvbi5tX3R5cGUgPT0gQ29uZGl0
aW9uOjpTeW5jYmFzZSAmJiBjb25kaXRpb24ubV9zeW5jYmFzZSA9PSBzeW5jYmFzZSkgewogICAg
ICAgICAgICAgQVNTRVJUKGNvbmRpdGlvbi5tX25hbWUgPT0gImJlZ2luIiB8fCBjb25kaXRpb24u
bV9uYW1lID09ICJlbmQiKTsKICAgICAgICAgICAgIC8vIE5vIG5lc3RlZCB0aW1lIGNvbnRhaW5l
cnMgaW4gU1ZHLCBubyBuZWVkIGZvciBjcmF6eSB0aW1lIHNwYWNlIGNvbnZlcnNpb25zLiBQaGV3
IQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZHRmls
dGVyQnVpbGRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdG
aWx0ZXJCdWlsZGVyLmNwcAppbmRleCA0YmIxYTBhYWQ3ZjMzYWJmMjM4YWQxNGVhMTFhZDUwYTYw
YjQ5Mjg0Li41MmJhNGU5MWQzODA3YTRjNzAxZDQzMDkzZTE4OWFhYWQ2MjViMjJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhpY3MvZmlsdGVycy9TVkdGaWx0ZXJC
dWlsZGVyLmNwcApAQCAtOTUsMTAgKzk1LDggQEAgdm9pZCBTVkdGaWx0ZXJCdWlsZGVyOjpjbGVh
clJlc3VsdHNSZWN1cnNpdmUoRmlsdGVyRWZmZWN0KiBlZmZlY3QpCiAKICAgICBlZmZlY3QtPmNs
ZWFyUmVzdWx0KCk7CiAKLSAgICBIYXNoU2V0PEZpbHRlckVmZmVjdCo+JiBlZmZlY3RSZWZlcmVu
Y2VzID0gdGhpcy0+ZWZmZWN0UmVmZXJlbmNlcyhlZmZlY3QpOwotICAgIEhhc2hTZXQ8RmlsdGVy
RWZmZWN0Kj46Oml0ZXJhdG9yIGVuZCA9IGVmZmVjdFJlZmVyZW5jZXMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoU2V0PEZpbHRlckVmZmVjdCo+OjppdGVyYXRvciBpdCA9IGVmZmVjdFJlZmVyZW5jZXMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgY2xlYXJSZXN1bHRzUmVjdXJzaXZl
KCppdCk7CisgICAgZm9yIChhdXRvJiByZWZlcmVuY2UgOiBlZmZlY3RSZWZlcmVuY2VzKGVmZmVj
dCkpCisgICAgICAgIGNsZWFyUmVzdWx0c1JlY3Vyc2l2ZShyZWZlcmVuY2UpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvZ3JhcGhp
Y3MvZmlsdGVycy9TVkdGaWx0ZXJCdWlsZGVyLmgKaW5kZXggMmIxZGQyZjZlMmNmNWY5NjljOWI4
ODA0Yzg4ZmI1NzdlZDBlYWYxZS4uMDg2N2QyODljYjE5YTQ0Zjk4ZTBkMmQyNDgzNmJmZDI1OGJh
MmQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL2dyYXBoaWNzL2ZpbHRlcnMvU1ZH
RmlsdGVyQnVpbGRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9ncmFwaGljcy9maWx0ZXJz
L1NWR0ZpbHRlckJ1aWxkZXIuaApAQCAtNjIsOSArNjIsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIGlubGluZSB2b2lkIGFkZEJ1aWx0aW5FZmZlY3RzKCkKICAgICB7Ci0gICAgICAgIEhhc2hN
YXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVyRWZmZWN0Pj46Oml0ZXJhdG9yIGVuZCA9IG1f
YnVpbHRpbkVmZmVjdHMuZW5kKCk7Ci0gICAgICAgIGZvciAoSGFzaE1hcDxBdG9taWNTdHJpbmcs
IFJlZlB0cjxGaWx0ZXJFZmZlY3Q+Pjo6aXRlcmF0b3IgaXRlcmF0b3IgPSBtX2J1aWx0aW5FZmZl
Y3RzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGVuZDsgKytpdGVyYXRvcikKLSAgICAgICAgICAgICBt
X2VmZmVjdFJlZmVyZW5jZXMuYWRkKGl0ZXJhdG9yLT52YWx1ZSwgRmlsdGVyRWZmZWN0U2V0KCkp
OworICAgICAgICBmb3IgKGF1dG8mIGVmZmVjdCA6IG1fYnVpbHRpbkVmZmVjdHMudmFsdWVzKCkp
CisgICAgICAgICAgICBtX2VmZmVjdFJlZmVyZW5jZXMuYWRkKGVmZmVjdCwgRmlsdGVyRWZmZWN0
U2V0KCkpOwogICAgIH0KIAogICAgIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8RmlsdGVy
RWZmZWN0Pj4gbV9idWlsdGluRWZmZWN0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2
Zy9wcm9wZXJ0aWVzL1NWR0FuaW1hdGVkUHJvcGVydHkuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L3Byb3BlcnRpZXMvU1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAKaW5kZXggNDlkYzhmYzU1OTllNTU4
YTBmYTczZmMwYWM1YjJiYmZjNDJkNTliNS4uYWIxMTRhYjJjYTIwYzIyNGYzZTE0OTQ1NGYyYTgx
MDZjYWY5NzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZH
QW5pbWF0ZWRQcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMv
U1ZHQW5pbWF0ZWRQcm9wZXJ0eS5jcHAKQEAgLTM3LDEwICszNyw5IEBAIFNWR0FuaW1hdGVkUHJv
cGVydHk6OlNWR0FuaW1hdGVkUHJvcGVydHkoU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQsIGNv
bnN0IFF1YWxpCiBTVkdBbmltYXRlZFByb3BlcnR5Ojp+U1ZHQW5pbWF0ZWRQcm9wZXJ0eSgpCiB7
CiAgICAgLy8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBjYWNoZS4KLSAgICBDYWNoZSYgY2FjaGUgPSAq
YW5pbWF0ZWRQcm9wZXJ0eUNhY2hlKCk7Ci0gICAgZm9yIChhdXRvIGl0ID0gY2FjaGUuYmVnaW4o
KSwgZW5kID0gY2FjaGUuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQt
PnZhbHVlID09IHRoaXMpIHsKLSAgICAgICAgICAgIGNhY2hlLnJlbW92ZShpdCk7CisgICAgZm9y
IChhdXRvJiBjYWNoZSA6ICphbmltYXRlZFByb3BlcnR5Q2FjaGUoKSkgeworICAgICAgICBpZiAo
Y2FjaGUudmFsdWUgPT0gdGhpcykgeworICAgICAgICAgICAgYW5pbWF0ZWRQcm9wZXJ0eUNhY2hl
KCktPnJlbW92ZShjYWNoZS5rZXkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvcHJvcGVydGllcy9TVkdMaXN0UHJv
cGVydHkuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5o
CmluZGV4IDQ4MDg4NGVhNzJjYTdkMGRhNjdjMTMwZTNmMjNkZDc4MWRmY2JjYWMuLjc3Nzg4ZTEw
MjI0OGQ1MDI1MmM4MDE0Zjc3YTA2NWQxYmFkOTU5ZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9wcm9wZXJ0aWVzL1NWR0xpc3RQcm9wZXJ0eS5oCkBAIC02Miw5ICs2Miw4IEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIC8vIFNlZSBTVkdQcm9wZXJ0eVRlYXJPZmY6OmRldGFjaFdyYXBw
ZXIoKSBmb3IgYW4gZXhwbGFuYXRpb24gYWJvdXQgd2hhdCdzIGhhcHBlbmluZyBoZXJlLgogICAg
ICAgICBBU1NFUlQod3JhcHBlcnMpOwotICAgICAgICB1bnNpZ25lZCBzaXplID0gd3JhcHBlcnMt
PnNpemUoKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewot
ICAgICAgICAgICAgaWYgKExpc3RJdGVtVGVhck9mZiogaXRlbSA9IHdyYXBwZXJzLT5hdChpKS5n
ZXQoKSkKKyAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogKndyYXBwZXJzKSB7CisgICAgICAgICAg
ICBpZiAoaXRlbSkKICAgICAgICAgICAgICAgICBpdGVtLT5kZXRhY2hXcmFwcGVyKCk7CiAgICAg
ICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRpZXMvU1ZHUGF0
aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL3Byb3BlcnRp
ZXMvU1ZHUGF0aFNlZ0xpc3RQcm9wZXJ0eVRlYXJPZmYuY3BwCmluZGV4IDUxMTdjZTYyY2E3ZGZi
OTdmM2VmYmQ2YTgzZmM0MTliZDFmOTYyYWYuLjM5OTI3NDFmOWZkZDFmMjU3MWQ1NzdhM2JhYTBi
MGNmNDZiNDc2OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9wcm9wZXJ0aWVzL1NW
R1BhdGhTZWdMaXN0UHJvcGVydHlUZWFyT2ZmLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcv
cHJvcGVydGllcy9TVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVhck9mZi5jcHAKQEAgLTMwLDkgKzMw
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogdm9pZCBTVkdQYXRoU2VnTGlzdFByb3BlcnR5VGVh
ck9mZjo6Y2xlYXJDb250ZXh0QW5kUm9sZXMoKQogewogICAgIEFTU0VSVChtX3ZhbHVlcyk7Ci0g
ICAgdW5zaWduZWQgc2l6ZSA9IG1fdmFsdWVzLT5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBMaXN0SXRlbVR5cGUgaXRlbSA9IG1fdmFs
dWVzLT5hdChpKTsKKyAgICBmb3IgKGF1dG8mIGl0ZW0gOiAqbV92YWx1ZXMpIHsKICAgICAgICAg
c3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ1dpdGhDb250ZXh0Kj4oaXRlbS5nZXQoKSktPnNldENvbnRl
eHRBbmRSb2xlKDAsIFBhdGhTZWdVbmRlZmluZWRSb2xlKTsKICAgICB9CiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>