<?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>189558</bug_id>
          
          <creation_ts>2018-09-12 14:25:04 -0700</creation_ts>
          <short_desc>[JSC] Heap::reportExtraMemoryVisited shows contention if we have many JSString</short_desc>
          <delta_ts>2018-09-22 15:20:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>189855</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ap</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>realdawei</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>saam</cc>
    
    <cc>tsavell</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1459101</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-12 14:25:04 -0700</bug_when>
    <thetext>When running web-tooling-benchmark postcss test on Linux JSCOnly port, we get the following result in `perf report`.

  10.95%  AutomaticThread  libJavaScriptCore.so.1.0.0  [.] JSC::Heap::reportExtraMemoryVisited

This is because postcss produces bunch of JSString, which requires reportExtraMemoryVisited calls in visitChildren.
And since reportExtraMemoryVisited attempts to update atomic counter, if we have bunch of marking threads, it just becomes contended!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1459186</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-09-12 17:40:25 -0700</bug_when>
    <thetext>Nice find. Seems like we can update that shared value less frequently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461327</commentid>
    <comment_count>2</comment_count>
      <attachid>350197</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-20 07:03:20 -0700</bug_when>
    <thetext>Created attachment 350197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461332</commentid>
    <comment_count>3</comment_count>
      <attachid>350197</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-20 07:35:02 -0700</bug_when>
    <thetext>Comment on attachment 350197
Patch

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

r=me

&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:162
&gt; +        // FIXME: Change this to use SaturatedArithmetic when available.
&gt; +        // https://bugs.webkit.org/show_bug.cgi?id=170411
&gt; +        Checked&lt;size_t, RecordOverflow&gt; checkedNewSize = m_extraMemorySize;
&gt; +        checkedNewSize += size;
&gt; +        m_extraMemorySize = UNLIKELY(checkedNewSize.hasOverflowed()) ? std::numeric_limits&lt;size_t&gt;::max() : checkedNewSize.unsafeGet();

I suggest just making m_extraMemorySize a Checked&lt;size_t, RecordOverflow&gt; instead to simplify this.  That way, we won&apos;t be checking hasOverflowed() repeatedly.  Note: the Checked add operator would already have checked hasOverflowed().  Only need to check overflow in propagateExternalMemoryVisitedIfNecessary().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461634</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-20 18:11:24 -0700</bug_when>
    <thetext>Committed r236296: &lt;https://trac.webkit.org/changeset/236296&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461635</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-09-20 18:12:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/44663957&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461637</commentid>
    <comment_count>6</comment_count>
      <attachid>350197</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-09-20 18:12:33 -0700</bug_when>
    <thetext>Comment on attachment 350197
Patch

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

&gt;&gt; Source/JavaScriptCore/heap/SlotVisitorInlines.h:162
&gt;&gt; +        m_extraMemorySize = UNLIKELY(checkedNewSize.hasOverflowed()) ? std::numeric_limits&lt;size_t&gt;::max() : checkedNewSize.unsafeGet();
&gt; 
&gt; I suggest just making m_extraMemorySize a Checked&lt;size_t, RecordOverflow&gt; instead to simplify this.  That way, we won&apos;t be checking hasOverflowed() repeatedly.  Note: the Checked add operator would already have checked hasOverflowed().  Only need to check overflow in propagateExternalMemoryVisitedIfNecessary().

Sounds nice. Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1461908</commentid>
    <comment_count>7</comment_count>
    <who name="Dawei Fenton (:realdawei)">realdawei</who>
    <bug_when>2018-09-21 10:37:07 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; Committed r236296: &lt;https://trac.webkit.org/changeset/236296&gt;

seeing crashes on the Sierra performance bot after this revision.

sample output: https://build.webkit.org/builders/Apple%20Sierra%20Release%20WK2%20%28Perf%29/builds/1661/steps/perf-test/logs/stdio
Running Speedometer (184 of 185)
crash: Speedometer
FAILED
Finished: 8.206435 s


crash log:
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x000000010e6ac900 JSC::JSRopeString::resolveRope(JSC::ExecState*) const + 496 (JSCellInlines.h:144)
1   com.apple.JavaScriptCore      	0x000000010e64add4 JSC::getCalculatedDisplayName(JSC::VM&amp;, JSC::JSObject*) + 372 (JSFunction.cpp:651)
2   com.apple.JavaScriptCore      	0x000000010e3e6f36 JSC::StackVisitor::Frame::functionName() const + 134 (StackVisitor.cpp:298)
3   com.apple.JavaScriptCore      	0x000000010e3c9d92 Inspector::CreateScriptCallStackFunctor::operator()(JSC::StackVisitor&amp;) const + 82 (ScriptCallStackFactory.cpp:71)
4   com.apple.JavaScriptCore      	0x000000010e3c43fb void JSC::ExecState::iterate&lt;(JSC::StackVisitor::EmptyEntryFrameAction)0, Inspector::CreateScriptCallStackFunctor&gt;(Inspector::CreateScriptCallStackFunctor const&amp;) + 107 (CallFrame.h:284)
5   com.apple.JavaScriptCore      	0x000000010e3c44c2 Inspector::createScriptCallStackForConsole(JSC::ExecState*, unsigned long) + 114 (ScriptCallStackFactory.cpp:117)
6   com.apple.JavaScriptCore      	0x000000010e362b1f Inspector::ConsoleMessage::autogenerateMetadata(JSC::ExecState*) + 47 (RefPtr.h:181)
7   com.apple.WebCore             	0x000000010b43e44d WebCore::PageConsoleClient::messageWithTypeAndLevel(JSC::MessageType, JSC::MessageLevel, JSC::ExecState*, WTF::Ref&lt;Inspector::ScriptArguments, WTF::DumbPtrTraits&lt;Inspector::ScriptArguments&gt; &gt;&amp;&amp;) + 125 (PageConsoleClient.cpp:168)
8   com.apple.JavaScriptCore      	0x000000010e5eb4f7 JSC::consoleLogWithLevel(JSC::ExecState*, JSC::MessageLevel) + 135 (ConsoleObject.cpp:117)
9   ???                           	0x0000045eac32c177 0 + 4804662444407
10  ???                           	0x0000045eac60f99c 0 + 4804665473436
11  com.apple.JavaScriptCore      	0x000000010dea5a04 llint_entry + 26817
12  com.apple.JavaScriptCore      	0x000000010dea5a04 llint_entry + 26817
13  com.apple.JavaScriptCore      	0x000000010dea5a04 llint_entry + 26817
14  com.apple.JavaScriptCore      	0x000000010dea5d97 llint_entry + 27732
15  com.apple.JavaScriptCore      	0x000000010dea5a04 llint_entry + 26817
16  com.apple.JavaScriptCore      	0x000000010dea5cfa llint_entry + 27575
17  com.apple.JavaScriptCore      	0x000000010dea5a04 llint_entry + 26817
18  com.apple.JavaScriptCore      	0x000000010de9ef89 vmEntryToJavaScript + 200
19  com.apple.JavaScriptCore      	0x000000010e3e328a JSC::Interpreter::executeProgram(JSC::SourceCode const&amp;, JSC::ExecState*, JSC::JSObject*) + 11146 (Interpreter.cpp:834)
20  com.apple.JavaScriptCore      	0x000000010e5e4f23 JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 307 (Completion.cpp:103)
21  com.apple.WebCore             	0x000000010ade3084 WebCore::JSExecState::profiledEvaluate(JSC::ExecState*, JSC::ProfilingReason, JSC::SourceCode const&amp;, JSC::JSValue, WTF::NakedPtr&lt;JSC::Exception&gt;&amp;) + 84 (JSExecState.h:80)
22  com.apple.WebCore             	0x000000010ade2f08 WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld&amp;, WebCore::ExceptionDetails*) + 184 (ScriptController.cpp:131)
23  com.apple.WebCore             	0x000000010b05614a WebCore::ScriptElement::executeClassicScript(WebCore::ScriptSourceCode const&amp;) + 538 (ScriptElement.cpp:388)
24  com.apple.WebCore             	0x000000010b0264a3 WebCore::LoadableClassicScript::execute(WebCore::ScriptElement&amp;) + 147 (LoadableClassicScript.cpp:123)
25  com.apple.WebCore             	0x000000010b0563bd WebCore::ScriptElement::executeScriptAndDispatchEvent(WebCore::LoadableScript&amp;) + 173 (ScriptElement.cpp:427)
26  com.apple.WebCore             	0x000000010b26a16b WebCore::HTMLScriptRunner::executeParsingBlockingScripts() + 203 (HTMLScriptRunner.cpp:164)
27  com.apple.WebCore             	0x000000010b2602fc WebCore::HTMLDocumentParser::notifyFinished(WebCore::PendingScript&amp;) + 60 (HTMLDocumentParser.cpp:564)
28  com.apple.WebCore             	0x000000010b040a23 WebCore::PendingScript::notifyFinished(WebCore::LoadableScript&amp;) + 35 (RefCounted.h:144)
29  com.apple.WebCore             	0x000000010b02639c WebCore::LoadableScript::notifyClientFinished() + 300 (LoadableScript.cpp:59)
30  com.apple.WebCore             	0x000000010b026256 WebCore::LoadableClassicScript::notifyFinished(WebCore::CachedResource&amp;) + 1238 (LoadableClassicScript.cpp:118)
31  com.apple.WebCore             	0x000000010b3b4153 WebCore::CachedResource::checkNotify() + 195 (Vector.h:686)
32  com.apple.WebCore             	0x000000010b385eb0 WebCore::SubresourceLoader::didFinishLoading(WebCore::NetworkLoadMetrics const&amp;) + 1168 (SubresourceLoader.cpp:636)
33  com.apple.WebKit              	0x00000001082067b2 WebKit::WebResourceLoader::didFinishResourceLoad(WebCore::NetworkLoadMetrics const&amp;) + 220 (WebResourceLoader.cpp:162)
34  com.apple.WebKit              	0x00000001082e23b7 void IPC::handleMessage&lt;Messages::WebResourceLoader::DidFinishResourceLoad, WebKit::WebResourceLoader, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&amp;)&gt;(IPC::Decoder&amp;, WebKit::WebResourceLoader*, void (WebKit::WebResourceLoader::*)(WebCore::NetworkLoadMetrics const&amp;)) + 137 (HandleMessage.h:134)
35  com.apple.WebKit              	0x0000000108200739 WebKit::NetworkProcessConnection::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) + 777 (NetworkProcessConnection.cpp:120)
36  com.apple.WebKit              	0x0000000107ed4546 IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;) + 108 (Connection.cpp:986)
37  com.apple.WebKit              	0x0000000107ed7afd IPC::Connection::dispatchOneIncomingMessage() + 179 (Connection.cpp:1053)
38  com.apple.JavaScriptCore      	0x000000010dcd652f WTF::RunLoop::performWork() + 447 (RunLoop.cpp:123)
39  com.apple.JavaScriptCore      	0x000000010dcd6762 WTF::RunLoop::performWork(void*) + 34 (RunLoopCF.cpp:39)
40  com.apple.CoreFoundation      	0x00007fff988e93e1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 17
41  com.apple.CoreFoundation      	0x00007fff988ca65c __CFRunLoopDoSources0 + 556
42  com.apple.CoreFoundation      	0x00007fff988c9b46 __CFRunLoopRun + 934
43  com.apple.CoreFoundation      	0x00007fff988c9544 CFRunLoopRunSpecific + 420
44  com.apple.HIToolbox           	0x00007fff97e28ebc RunCurrentEventLoopInMode + 240
45  com.apple.HIToolbox           	0x00007fff97e28cf1 ReceiveNextEventCommon + 432
46  com.apple.HIToolbox           	0x00007fff97e28b26 _BlockUntilNextEventMatchingListInModeWithFilter + 71
47  com.apple.AppKit              	0x00007fff963bfa54 _DPSNextEvent + 1120
48  com.apple.AppKit              	0x00007fff96b3b7ee -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 2796
49  com.apple.AppKit              	0x00007fff963b43db -[NSApplication run] + 926
50  com.apple.AppKit              	0x00007fff9637ee0e NSApplicationMain + 1237
51  libxpc.dylib                  	0x00007fffae6e28c7 _xpc_objc_main + 775
52  libxpc.dylib                  	0x00007fffae6e12e4 xpc_main + 494
53  com.apple.WebKit.WebContent   	0x0000000107eba68d WebKit::XPCServiceMain(int, char const**) + 490 (XPCServiceMain.mm:123)
54  com.apple.WebKit.WebContent   	0x0000000107eba81b main + 9 (XPCServiceMain.mm:46)
55  libdyld.dylib                 	0x000</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462057</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-09-21 13:36:51 -0700</bug_when>
    <thetext>(In reply to Dawei Fenton (:realdawei) from comment #7)
&gt; (In reply to Yusuke Suzuki from comment #4)
&gt; &gt; Committed r236296: &lt;https://trac.webkit.org/changeset/236296&gt;
&gt; 
&gt; seeing crashes on the Sierra performance bot after this revision.

I&apos;m fixing this in https://bugs.webkit.org/show_bug.cgi?id=189855.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462063</commentid>
    <comment_count>9</comment_count>
    <who name="Dawei Fenton (:realdawei)">realdawei</who>
    <bug_when>2018-09-21 13:46:43 -0700</bug_when>
    <thetext>(In reply to Mark Lam from comment #8)
&gt; (In reply to Dawei Fenton (:realdawei) from comment #7)
&gt; &gt; (In reply to Yusuke Suzuki from comment #4)
&gt; &gt; &gt; Committed r236296: &lt;https://trac.webkit.org/changeset/236296&gt;
&gt; &gt; 
&gt; &gt; seeing crashes on the Sierra performance bot after this revision.
&gt; 
&gt; I&apos;m fixing this in https://bugs.webkit.org/show_bug.cgi?id=189855.

great thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1462419</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2018-09-22 15:16:21 -0700</bug_when>
    <thetext>Sounds like this hasn&apos;t been rolled back, so marking as resolved again.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>350197</attachid>
            <date>2018-09-20 07:03:20 -0700</date>
            <delta_ts>2018-09-20 07:35:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-189558-20180920230319.patch</filename>
            <type>text/plain</type>
            <size>10101</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM2MjU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
MWY1OTA5MWM1NTY1NzdmMmM4ZDYyOTJjMmU2YmRkN2UyZjA3MzUwLi44MDlmMjBlYjkxZWZmOGJj
NTkwMzU0Mjg4ZTYwYzQwMzJjNzA4ODE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MSBAQAorMjAxOC0wOS0yMCAgWXVzdWtlIFN1enVraSAgPHl1c3VrZXN1enVraUBzbG93
c3RhcnQub3JnPgorCisgICAgICAgIFtKU0NdIEhlYXA6OnJlcG9ydEV4dHJhTWVtb3J5VmlzaXRl
ZCBzaG93cyBjb250ZW50aW9uIGlmIHdlIGhhdmUgbWFueSBKU1N0cmluZworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg5NTU4CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2hlbiBydW5uaW5nIHdlYi10b29s
aW5nLWJlbmNobWFyayBwb3N0Y3NzIHRlc3Qgb24gTGludXggSlNDT25seSBwb3J0LCB3ZSBnZXQg
dGhlIGZvbGxvd2luZyByZXN1bHQgaW4gYHBlcmYgcmVwb3J0YC4KKworICAgICAgICAgICAgMTAu
OTUlICBBdXRvbWF0aWNUaHJlYWQgIGxpYkphdmFTY3JpcHRDb3JlLnNvLjEuMC4wICBbLl0gSlND
OjpIZWFwOjpyZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQKKworICAgICAgICBUaGlzIGlzIGJlY2F1
c2UgcG9zdGNzcyBwcm9kdWNlcyBidW5jaCBvZiBKU1N0cmluZywgd2hpY2ggcmVxdWlyZSByZXBv
cnRFeHRyYU1lbW9yeVZpc2l0ZWQgY2FsbHMgaW4gSlNTdHJpbmc6OnZpc2l0Q2hpbGRyZW4uCisg
ICAgICAgIEFuZCBzaW5jZSByZXBvcnRFeHRyYU1lbW9yeVZpc2l0ZWQgYXR0ZW1wdHMgdG8gdXBk
YXRlIGF0b21pYyBjb3VudGVyLCBpZiB3ZSBoYXZlIGJ1bmNoIG9mIG1hcmtpbmcgdGhyZWFkcywg
aXQgYmVjb21lcyBzdXBlciBjb250ZW5kZWQuCisKKyAgICAgICAgVGhpcyBwYXRjaCByZWR1Y2Vz
IHRoZSBmcmVxdWVuY3kgb2YgdXBkYXRpbmcgdGhlIGF0b21pYyBjb3VudGVyLiBFYWNoIFNsb3RW
aXNpdG9yIGhhcyBwZXItU2xvdFZpc2l0b3IgbV9leHRyYU1lbW9yeVNpemUgY291bnRlci4KKyAg
ICAgICAgQW5kIHdlIHByb3BhZ2F0ZSB0aGlzIHZhbHVlIHRvIHRoZSBnbG9iYWwgYXRvbWljIGNv
dW50ZXIgd2hlbiByZWJhbGFuY2UgaGFwcGVucy4KKworICAgICAgICBXZSBhbHNvIHJlZHVjZSBI
ZWFwQ2VsbDo6aGVhcCgpIGFjY2VzcyBieSB1c2luZyBgdm0uaGVhcGAuCisKKyAgICAgICAgKiBo
ZWFwL1Nsb3RWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmRpZFN0YXJ0
TWFya2luZyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwcm9wYWdhdGVFeHRlcm5hbE1l
bW9yeVZpc2l0ZWRJZk5lY2Vzc2FyeSk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFp
bik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpwZXJmb3JtSW5jcmVtZW50T2ZEcmFpbmlu
Zyk6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjpkcmFpbkluUGFyYWxsZWxQYXNzaXZlbHkp
OgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNp
dG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1v
cnlWaXNpdGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVRvQXRvbWljU3RyaW5nIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZSBjb25zdCk6CisgICAgICAgICogcnVu
dGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoKKyAgICAgICAg
KEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICog
d2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNwcDoKKyAgICAgICAgKEpTQzo6SlNXZWJBc3Nl
bWJseU1lbW9yeTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDE4LTA5LTIwICBGdWppaSBIaXJvbm9y
aSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIFtXaW5dW0NsYW5nXSBKSVRN
YXRoSUMuaDogZXJyb3I6IG1pc3NpbmcgJ3RlbXBsYXRlJyBrZXl3b3JkIHByaW9yIHRvIGRlcGVu
ZGVudCB0ZW1wbGF0ZSBuYW1lICdyZXRhZ2dlZCcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1Nsb3RWaXNpdG9yLmNwcAppbmRleCAzM2MzN2ZjNmU4OWIyOGI2MzQ3ODY5ZGJlMGRhYzc3ZGIx
ZWFiMzU3Li42Y2FkZTBjN2JhNmIwN2RlOWNjYjAwOWExY2FhZWU4YmY1MjlhYmI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC05OSw4ICs5OSwxNyBA
QCBTbG90VmlzaXRvcjo6flNsb3RWaXNpdG9yKCkKIAogdm9pZCBTbG90VmlzaXRvcjo6ZGlkU3Rh
cnRNYXJraW5nKCkKIHsKLSAgICBpZiAoaGVhcCgpLT5jb2xsZWN0aW9uU2NvcGUoKSA9PSBDb2xs
ZWN0aW9uU2NvcGU6OkVkZW4pCi0gICAgICAgIHJlc2V0KCk7CisgICAgYXV0byBzY29wZSA9IGhl
YXAoKS0+Y29sbGVjdGlvblNjb3BlKCk7CisgICAgaWYgKHNjb3BlKSB7CisgICAgICAgIHN3aXRj
aCAoKnNjb3BlKSB7CisgICAgICAgIGNhc2UgQ29sbGVjdGlvblNjb3BlOjpFZGVuOgorICAgICAg
ICAgICAgcmVzZXQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbGxlY3Rp
b25TY29wZTo6RnVsbDoKKyAgICAgICAgICAgIG1fZXh0cmFNZW1vcnlTaXplID0gMDsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQogCiAgICAgaWYgKEhlYXBQcm9maWxlciog
aGVhcFByb2ZpbGVyID0gdm0oKS5oZWFwUHJvZmlsZXIoKSkKICAgICAgICAgbV9oZWFwU25hcHNo
b3RCdWlsZGVyID0gaGVhcFByb2ZpbGVyLT5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKTsKQEAgLTM5
Nyw2ICs0MDYsMTQgQEAgdm9pZCBTbG90VmlzaXRvcjo6dmlzaXRBc0NvbnN0cmFpbnQoY29uc3Qg
SlNDZWxsKiBjZWxsKQogICAgIHZpc2l0Q2hpbGRyZW4oY2VsbCk7CiB9CiAKK2lubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjpwcm9wYWdhdGVFeHRlcm5hbE1lbW9yeVZpc2l0ZWRJZk5lY2Vzc2FyeSgp
Cit7CisgICAgaWYgKG1faXNGaXJzdFZpc2l0ICYmIG1fZXh0cmFNZW1vcnlTaXplKSB7CisgICAg
ICAgIGhlYXAoKS0+cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKG1fZXh0cmFNZW1vcnlTaXplKTsK
KyAgICAgICAgbV9leHRyYU1lbW9yeVNpemUgPSAwOworICAgIH0KK30KKwogdm9pZCBTbG90Vmlz
aXRvcjo6ZG9uYXRlS25vd25QYXJhbGxlbChNYXJrU3RhY2tBcnJheSYgZnJvbSwgTWFya1N0YWNr
QXJyYXkmIHRvKQogewogICAgIC8vIE5PVEU6IEJlY2F1c2Ugd2UgcmUtdHJ5IG9mdGVuLCB3ZSBj
YW4gYWZmb3JkIHRvIGJlIGNvbnNlcnZhdGl2ZSwgYW5kCkBAIC00ODMsNiArNTAwLDcgQEAgTkVW
RVJfSU5MSU5FIHZvaWQgU2xvdFZpc2l0b3I6OmRyYWluKE1vbm90b25pY1RpbWUgdGltZW91dCkK
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRDaGlsZHJlbihzdGFjay5yZW1vdmVMYXN0KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CiAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgcHJvcGFnYXRlRXh0ZXJuYWxNZW1vcnlWaXNpdGVkSWZOZWNlc3Nhcnko
KTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlKQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIApAQCAtNTM5LDYgKzU1Nyw3IEBAIHNpemVfdCBTbG90
VmlzaXRvcjo6cGVyZm9ybUluY3JlbWVudE9mRHJhaW5pbmcoc2l6ZV90IGJ5dGVzUmVxdWVzdGVk
KQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJdGVy
YXRpb25TdGF0dXM6OkRvbmU7CiAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBwcm9w
YWdhdGVFeHRlcm5hbE1lbW9yeVZpc2l0ZWRJZk5lY2Vzc2FyeSgpOwogICAgICAgICAgICAgaWYg
KHN0YXR1cyA9PSBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgbV9yaWdodFRvUnVuLnNhZmVwb2ludCgpOwpAQCAtNjk2LDcgKzcx
NSw3IEBAIFNsb3RWaXNpdG9yOjpTaGFyZWREcmFpblJlc3VsdCBTbG90VmlzaXRvcjo6ZHJhaW5J
blBhcmFsbGVsUGFzc2l2ZWx5KE1vbm90b25pY1RpCiAgICAgICAgIHJldHVybiBkcmFpbkluUGFy
YWxsZWwodGltZW91dCk7CiAgICAgfQogCi0gICAgZG9uYXRlQWxsKGhvbGRMb2NrKG1faGVhcC5t
X21hcmtpbmdNdXRleCkpOworICAgIGRvbmF0ZUFsbCgpOwogICAgIHJldHVybiB3YWl0Rm9yVGVy
bWluYXRpb24odGltZW91dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90Vmlz
aXRvci5oCmluZGV4IGVlNTkwZWZhMDU3OTU3YTU5OThiZTFkYzY5YWEzZDA1MWI3MzEzN2MuLjZk
ZjdhNjUyY2RkZjcwYmQ0NTQxN2ZiZDIwYmI5NDQ1ZmM0ODRmMjYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaApAQCAtMjE2LDYgKzIxNiw4IEBAIGNsYXNzIFNsb3RW
aXNpdG9yIHsKICAgICB2b2lkIG5vdGVMaXZlQXV4aWxpYXJ5Q2VsbChIZWFwQ2VsbCopOwogICAg
IAogICAgIHZvaWQgdmlzaXRDaGlsZHJlbihjb25zdCBKU0NlbGwqKTsKKworICAgIHZvaWQgcHJv
cGFnYXRlRXh0ZXJuYWxNZW1vcnlWaXNpdGVkSWZOZWNlc3NhcnkoKTsKICAgICAKICAgICB2b2lk
IGRvbmF0ZUtub3duUGFyYWxsZWwoKTsKICAgICB2b2lkIGRvbmF0ZUtub3duUGFyYWxsZWwoTWFy
a1N0YWNrQXJyYXkmIGZyb20sIE1hcmtTdGFja0FycmF5JiB0byk7CkBAIC0yMzcsNiArMjM5LDcg
QEAgY2xhc3MgU2xvdFZpc2l0b3IgewogICAgIHNpemVfdCBtX2J5dGVzVmlzaXRlZDsKICAgICBz
aXplX3QgbV92aXNpdENvdW50OwogICAgIHNpemVfdCBtX25vbkNlbGxWaXNpdENvdW50IHsgMCB9
OyAvLyBVc2VkIGZvciBpbmNyZW1lbnRhbCBkcmFpbmluZywgaWdub3JlZCBvdGhlcndpc2UuCisg
ICAgc2l6ZV90IG1fZXh0cmFNZW1vcnlTaXplIHsgMCB9OwogICAgIGJvb2wgbV9pc0luUGFyYWxs
ZWxNb2RlOwogCiAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKaW5kZXggZjM2ZDE3YjQ3
MjgyZmFkNDkyZDgyMjE2NDI3MzgzYTczMDYwZmUzOC4uODRhNTU4ZTUxMjJhNDI1MjhmOWU5NjEz
YzdkZmRkMWVhOThlNzRkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
U2xvdFZpc2l0b3JJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xv
dFZpc2l0b3JJbmxpbmVzLmgKQEAgLTE1NCw4ICsxNTQsMTIgQEAgaW5saW5lIGJvb2wgU2xvdFZp
c2l0b3I6OmNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKiBwdHIpIGNvbnN0CiBpbmxpbmUgdm9pZCBT
bG90VmlzaXRvcjo6cmVwb3J0RXh0cmFNZW1vcnlWaXNpdGVkKHNpemVfdCBzaXplKQogewogICAg
IGlmIChtX2lzRmlyc3RWaXNpdCkgewotICAgICAgICBoZWFwKCktPnJlcG9ydEV4dHJhTWVtb3J5
VmlzaXRlZChzaXplKTsKICAgICAgICAgbV9ub25DZWxsVmlzaXRDb3VudCArPSBzaXplOworICAg
ICAgICAvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG8gdXNlIFNhdHVyYXRlZEFyaXRobWV0aWMgd2hl
biBhdmFpbGFibGUuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA0MTEKKyAgICAgICAgQ2hlY2tlZDxzaXplX3QsIFJlY29yZE92ZXJmbG93PiBj
aGVja2VkTmV3U2l6ZSA9IG1fZXh0cmFNZW1vcnlTaXplOworICAgICAgICBjaGVja2VkTmV3U2l6
ZSArPSBzaXplOworICAgICAgICBtX2V4dHJhTWVtb3J5U2l6ZSA9IFVOTElLRUxZKGNoZWNrZWRO
ZXdTaXplLmhhc092ZXJmbG93ZWQoKSkgPyBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1h
eCgpIDogY2hlY2tlZE5ld1NpemUudW5zYWZlR2V0KCk7CiAgICAgfQogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKaW5kZXggZDljNDIzNGYxMDA2OWVhMjM5
NjdhYTQxNjkzNjQ1Zjg2ZjJjYzk3My4uZDMxY2E2YjZhNGNhYzc3NTE2MDMwZDhmNGNlOGEyODAy
YmNmODRmNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcApA
QCAtMjA1LDcgKzIwNSw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVRvQXRvbWlj
U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIAogICAgIC8vIElmIHdlIHJlc29sdmVkIGEg
c3RyaW5nIHRoYXQgZGlkbid0IHByZXZpb3VzbHkgZXhpc3QsIG5vdGlmeSB0aGUgaGVhcCB0aGF0
IHdlJ3ZlIGdyb3duLgogICAgIGlmIChtX3ZhbHVlLmltcGwoKS0+aGFzT25lUmVmKCkpCi0gICAg
ICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5QWxsb2NhdGVkKG1fdmFsdWUu
aW1wbCgpLT5jb3N0KCkpOworICAgICAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5QWxsb2Nh
dGVkKG1fdmFsdWUuaW1wbCgpLT5jb3N0KCkpOwogfQogCiB2b2lkIEpTUm9wZVN0cmluZzo6Y2xl
YXJGaWJlcnMoKSBjb25zdApAQCAtMjY0LDcgKzI2NCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpy
ZXNvbHZlUm9wZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgaWYgKGlzOEJpdCgpKSB7CiAg
ICAgICAgIExDaGFyKiBidWZmZXI7CiAgICAgICAgIGlmIChhdXRvIG5ld0ltcGwgPSBTdHJpbmdJ
bXBsOjp0cnlDcmVhdGVVbmluaXRpYWxpemVkKGxlbmd0aCgpLCBidWZmZXIpKSB7Ci0gICAgICAg
ICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBs
LT5jb3N0KCkpOworICAgICAgICAgICAgZXhlYy0+dm0oKS5oZWFwLnJlcG9ydEV4dHJhTWVtb3J5
QWxsb2NhdGVkKG5ld0ltcGwtPmNvc3QoKSk7CiAgICAgICAgICAgICBtX3ZhbHVlID0gV1RGTW92
ZShuZXdJbXBsKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG91dE9mTWVtb3J5KGV4
ZWMpOwpAQCAtMjc4LDcgKzI3OCw3IEBAIHZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZShF
eGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgCiAgICAgVUNoYXIqIGJ1ZmZlcjsKICAgICBpZiAo
YXV0byBuZXdJbXBsID0gU3RyaW5nSW1wbDo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChsZW5ndGgo
KSwgYnVmZmVyKSkgewotICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9y
eUFsbG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOworICAgICAgICBleGVjLT52bSgpLmhlYXAucmVw
b3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1wbC0+Y29zdCgpKTsKICAgICAgICAgbV92YWx1
ZSA9IFdURk1vdmUobmV3SW1wbCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgb3V0T2ZNZW1vcnko
ZXhlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmlu
Zy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAppbmRleCA3Yzc2
OTA5NDcyOTM3MGMwNjUyYTdiZTA4NjU2NjMzZjk2ZDYwMTZkLi4yOTBjOGM3NDc4ZDQ1ODAwYmJi
NWViZWRkNTVmYjEyODIyOTgzODlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBjbGFzcyBKU1N0cmluZyA6IHB1YmxpYyBKU0Nl
bGwgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgICAgIHNldExlbmd0
aChsZW5ndGgpOwogICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsK
LSAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoY29z
dCk7CisgICAgICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQoY29zdCk7CiAg
ICAgfQogCiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9KU1dlYkFzc2VtYmx5SW5zdGFuY2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcAppbmRleCBlMGI4ZTBjNGVlYWY1ZGJhMTg3
OTBkZDExMmEwYjY5ODllNTc2MGM2Li5hYmM3ZmFlNDhlZjc4YmFlN2VmMzRjYmU0ZjM1NmFiZjg0
ZWEwM2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFz
c2VtYmx5SW5zdGFuY2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgdm9pZCBKU1dlYkFzc2Vt
Ymx5SW5zdGFuY2U6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNXZWJBc3NlbWJseU1vZHVsZSog
bW9kdWxlLAogICAgIG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0LnNldCh2bSwgdGhpcywgbW9kdWxl
TmFtZXNwYWNlT2JqZWN0KTsKICAgICBtX2NhbGxlZS5zZXQodm0sIHRoaXMsIG1vZHVsZS0+Y2Fs
bGVlKCkpOwogCi0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtX2luc3Rh
bmNlLT5leHRyYU1lbW9yeUFsbG9jYXRlZCgpKTsKKyAgICB2bS5oZWFwLnJlcG9ydEV4dHJhTWVt
b3J5QWxsb2NhdGVkKG1faW5zdGFuY2UtPmV4dHJhTWVtb3J5QWxsb2NhdGVkKCkpOwogfQogCiB2
b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TWVtb3J5LmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3Bw
CmluZGV4IGM5MGFjOTNhMjQ3YTNmYzQ0NzZkNTdlOGE2YmVlNjE3Y2Y1OWIzM2EuLjU2NTYyNTI2
Y2ZlNzE3OGIyNzM4ZTkyNjVkN2IyODVhM2U0NzY0NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNZW1vcnkuY3BwCkBAIC0xMzMsNyAr
MTMzLDcgQEAgdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyh2
bSwgaW5mbygpKSk7Ci0gICAgaGVhcCgpLT5yZXBvcnRFeHRyYU1lbW9yeUFsbG9jYXRlZChtZW1v
cnkoKS5zaXplKCkpOworICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobWVt
b3J5KCkuc2l6ZSgpKTsKIH0KIAogdm9pZCBKU1dlYkFzc2VtYmx5TWVtb3J5OjpkZXN0cm95KEpT
Q2VsbCogY2VsbCkK
</data>
<flag name="review"
          id="367678"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>