<?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>41617</bug_id>
          
          <creation_ts>2010-07-05 08:03:06 -0700</creation_ts>
          <short_desc>Make JS memory stats available via &apos;Performance&apos; object (Web Timing).</short_desc>
          <delta_ts>2011-01-22 19:51:44 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mikhail Naganov">mnaganov</reporter>
          <assigned_to name="Mikhail Naganov">mnaganov</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>pfeldman</cc>
    
    <cc>sam</cc>
    
    <cc>timothy</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246651</commentid>
    <comment_count>0</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-05 08:03:06 -0700</bug_when>
    <thetext>It seems like a more natural place than &apos;console&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246653</commentid>
    <comment_count>1</comment_count>
      <attachid>60536</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-05 08:06:36 -0700</bug_when>
    <thetext>Created attachment 60536
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246817</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-07-05 18:37:15 -0700</bug_when>
    <thetext>As I have noted elsewhere, I do not think we should have this functionality exposed to the web.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246827</commentid>
    <comment_count>3</comment_count>
      <attachid>60536</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-07-05 20:04:08 -0700</bug_when>
    <thetext>Comment on attachment 60536
patch

That sounds like an R- to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246854</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-07-05 22:21:12 -0700</bug_when>
    <thetext>Here is the plan:
1) Move console.memory and console.profiles from console.* to window.performance
2) Do not expose this information unless explicitly allowed with the command line flag
3) Extend WebTiming (performance) spec and make sure we conform to the apis there. If not allowed, we would return 0.

We need this API to be page-facting. We are not necessarily interested in having it web-facing. It can be behind the flag. The use-case here is that web developers run their continuous builds on browsers and get the memory / profiling stats for regression testing. We have a number of large-scale web app builders interested in the feature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247091</commentid>
    <comment_count>5</comment_count>
      <attachid>60635</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-06 08:59:31 -0700</bug_when>
    <thetext>Created attachment 60635
memory stats population is now controlled by a preference, turned off by default</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247179</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-06 12:47:39 -0700</bug_when>
    <thetext>Attachment 60635 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3376343</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247403</commentid>
    <comment_count>7</comment_count>
      <attachid>60708</attachid>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-07 02:10:36 -0700</bug_when>
    <thetext>Created attachment 60708
fixed windows build failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252434</commentid>
    <comment_count>8</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-16 03:00:48 -0700</bug_when>
    <thetext>Manually committed as http://trac.webkit.org/changeset/63537


    2010-07-16  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
    
    	Reviewed by Pavel Feldman.
    
    	Make JS memory stats available via &apos;Performance&apos; object (Web Timing).
    	This statistics is populated only if &apos;WebKitMemoryInfoEnabled&apos;
    	preference is set.
    
    	&apos;console.memory&apos; is kept until Web Timing object becomes visible by
    	default (currently it is hidden under compile-time flag).  These stats
    	are guarded with the same preference.
    
    	https://bugs.webkit.org/show_bug.cgi?id=41617
    
    	* bindings/js/JSConsoleCustom.cpp:
    	* bindings/v8/custom/V8ConsoleCustom.cpp:
    	* page/Console.cpp:
    	(WebCore::Console::disconnectFrame):
    	(WebCore::Console::memory):
    	* page/Console.h:
    	* page/Console.idl:
    	* page/MemoryInfo.cpp:
    	(WebCore::MemoryInfo::MemoryInfo):
    	* page/MemoryInfo.h:
    	(WebCore::MemoryInfo::create):
    	* page/Performance.cpp:
    	(WebCore::Performance::disconnectFrame):
    	(WebCore::Performance::memory):
    	* page/Performance.h:
    	* page/Performance.idl:
    	* page/Settings.cpp:
    	(WebCore::Settings::Settings):
    	* page/Settings.h:
    	(WebCore::Settings::setMemoryInfoEnabled):
    	(WebCore::Settings::memoryInfoEnabled):
    
    	* public/WebSettings.h:
    	* src/WebSettingsImpl.cpp:
    	(WebKit::WebSettingsImpl::setMemoryInfoEnabled):
    	* src/WebSettingsImpl.h:
    
    	* WebKit.order:
    	* WebView/WebPreferenceKeysPrivate.h:
    	* WebView/WebPreferences.mm:
    	(+[WebPreferences initialize]):
    	(-[WebPreferences memoryInfoEnabled]):
    	(-[WebPreferences setMemoryInfoEnabled:]):
    	* WebView/WebPreferencesPrivate.h:
    	* WebView/WebView.mm:
    	(-[WebView _preferencesChangedNotification:]):
    
    	* Interfaces/IWebPreferencesPrivate.idl:
    	* WebPreferenceKeysPrivate.h:
    	* WebPreferences.cpp:
    	(WebPreferences::initializeDefaultSettings):
    	(WebPreferences::memoryInfoEnabled):
    	(WebPreferences::setMemoryInfoEnabled):
    	* WebPreferences.h:
    	* WebView.cpp:
    	(WebView::notifyPreferencesChanged):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252443</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-16 04:02:16 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/63537 might have broken Leopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252610</commentid>
    <comment_count>10</comment_count>
      <attachid>60708</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-07-16 11:03:38 -0700</bug_when>
    <thetext>Comment on attachment 60708
fixed windows build failure

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 7ed5e75..a528ef8 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,39 @@
&gt; +2010-07-07  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make JS memory stats available via &apos;Performance&apos; object (Web Timing).
&gt; +        This statistics is populated only if &apos;WebKitMemoryInfoEnabled&apos;
&gt; +        preference is set.
&gt; +
&gt; +        &apos;console.memory&apos; is kept until Web Timing object becomes visible by
&gt; +        default (currently it is hidden under compile-time flag).  These stats
&gt; +        are guarded with the same preference.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=41617
&gt; +
&gt; +        * bindings/js/JSConsoleCustom.cpp:
&gt; +        * bindings/v8/custom/V8ConsoleCustom.cpp:
&gt; +        * page/Console.cpp:
&gt; +        (WebCore::Console::disconnectFrame):
&gt; +        (WebCore::Console::memory):
&gt; +        * page/Console.h:
&gt; +        * page/Console.idl:
&gt; +        * page/MemoryInfo.cpp:
&gt; +        (WebCore::MemoryInfo::MemoryInfo):
&gt; +        * page/MemoryInfo.h:
&gt; +        (WebCore::MemoryInfo::create):
&gt; +        * page/Performance.cpp:
&gt; +        (WebCore::Performance::disconnectFrame):
&gt; +        (WebCore::Performance::memory):
&gt; +        * page/Performance.h:
&gt; +        * page/Performance.idl:
&gt; +        * page/Settings.cpp:
&gt; +        (WebCore::Settings::Settings):
&gt; +        * page/Settings.h:
&gt; +        (WebCore::Settings::setMemoryInfoEnabled):
&gt; +        (WebCore::Settings::memoryInfoEnabled):
&gt; +
&gt;  2010-07-06  Ilya Tikhonovsky  &lt;loislo@chromium.org&gt;
&gt;  
&gt;          Reviewed by Yury Semikhatsky.
&gt; diff --git a/WebCore/bindings/js/JSConsoleCustom.cpp b/WebCore/bindings/js/JSConsoleCustom.cpp
&gt; index b9b407c..3ad34a3 100644
&gt; --- a/WebCore/bindings/js/JSConsoleCustom.cpp
&gt; +++ b/WebCore/bindings/js/JSConsoleCustom.cpp
&gt; @@ -28,9 +28,7 @@
&gt;  #include &quot;JSConsole.h&quot;
&gt;  
&gt;  #include &quot;Console.h&quot;
&gt; -#include &quot;JSMemoryInfo.h&quot;
&gt;  #include &quot;JSScriptProfile.h&quot;
&gt; -#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;ScriptCallStack.h&quot;
&gt;  #include &quot;ScriptProfile.h&quot;
&gt;  #include &lt;runtime/JSArray.h&gt;
&gt; @@ -57,9 +55,4 @@ JSValue JSConsole::profiles(ExecState* exec) const
&gt;  
&gt;  #endif
&gt;  
&gt; -JSValue JSConsole::memory(ExecState* exec) const
&gt; -{
&gt; -    return toJS(exec, MemoryInfo::create());
&gt; -}
&gt; -
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp b/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
&gt; index 7d1cfc1..9026420 100644
&gt; --- a/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
&gt; +++ b/WebCore/bindings/v8/custom/V8ConsoleCustom.cpp
&gt; @@ -33,10 +33,8 @@
&gt;  #include &quot;V8Console.h&quot;
&gt;  
&gt;  #include &quot;Console.h&quot;
&gt; -#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;ScriptProfile.h&quot;
&gt;  #include &quot;V8Binding.h&quot;
&gt; -#include &quot;V8MemoryInfo.h&quot;
&gt;  #include &quot;V8Proxy.h&quot;
&gt;  #include &quot;V8ScriptProfile.h&quot;
&gt;  
&gt; @@ -57,10 +55,4 @@ v8::Handle&lt;v8::Value&gt; V8Console::profilesAccessorGetter(v8::Local&lt;v8::String&gt; na
&gt;      return result;
&gt;  }
&gt;  
&gt; -v8::Handle&lt;v8::Value&gt; V8Console::memoryAccessorGetter(v8::Local&lt;v8::String&gt;, const v8::AccessorInfo&amp;)
&gt; -{
&gt; -    INC_STATS(&quot;DOM.Console.memoryAccessorGetter&quot;);
&gt; -    return toV8(MemoryInfo::create());
&gt; -}
&gt; -
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/page/Console.cpp b/WebCore/page/Console.cpp
&gt; index 1d6c095..423477a 100644
&gt; --- a/WebCore/page/Console.cpp
&gt; +++ b/WebCore/page/Console.cpp
&gt; @@ -36,6 +36,7 @@
&gt;  #include &quot;FrameLoader.h&quot;
&gt;  #include &quot;FrameTree.h&quot;
&gt;  #include &quot;InspectorController.h&quot;
&gt; +#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;Page.h&quot;
&gt;  #include &quot;PageGroup.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt; @@ -61,6 +62,8 @@ Frame* Console::frame() const
&gt;  
&gt;  void Console::disconnectFrame()
&gt;  {
&gt; +    if (m_memory)
&gt; +        m_memory = 0;
&gt;      m_frame = 0;
&gt;  }
&gt;  
&gt; @@ -456,6 +459,12 @@ void Console::warn(ScriptCallStack* callStack)
&gt;      addMessage(LogMessageType, WarningMessageLevel, callStack);
&gt;  }
&gt;  
&gt; +MemoryInfo* Console::memory() const
&gt; +{
&gt; +    m_memory = MemoryInfo::create(m_frame);
&gt; +    return m_memory.get();
&gt; +}
&gt; +
&gt;  static bool printExceptions = false;
&gt;  
&gt;  bool Console::shouldPrintExceptions()
&gt; diff --git a/WebCore/page/Console.h b/WebCore/page/Console.h
&gt; index 04e743e..3e00050 100644
&gt; --- a/WebCore/page/Console.h
&gt; +++ b/WebCore/page/Console.h
&gt; @@ -29,8 +29,8 @@
&gt;  #ifndef Console_h
&gt;  #define Console_h
&gt;  
&gt; +#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;PlatformString.h&quot;
&gt; -
&gt;  #include &quot;ScriptProfile.h&quot;
&gt;  
&gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt; @@ -43,7 +43,6 @@ typedef Vector&lt;RefPtr&lt;ScriptProfile&gt; &gt; ProfilesArray;
&gt;  #endif
&gt;  
&gt;  class Frame;
&gt; -class MemoryInfo;
&gt;  class Page;
&gt;  class String;
&gt;  class ScriptCallStack;
&gt; @@ -116,6 +115,8 @@ public:
&gt;      const ProfilesArray&amp; profiles() const { return m_profiles; }
&gt;  #endif
&gt;  
&gt; +    MemoryInfo* memory() const;
&gt; +
&gt;  private:
&gt;      inline Page* page() const;
&gt;      void addMessage(MessageType, MessageLevel, ScriptCallStack*, bool acceptNoArguments = false);
&gt; @@ -126,6 +127,7 @@ private:
&gt;  #if ENABLE(JAVASCRIPT_DEBUGGER)
&gt;      ProfilesArray m_profiles;
&gt;  #endif
&gt; +    mutable RefPtr&lt;MemoryInfo&gt; m_memory;
&gt;  };
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/page/Console.idl b/WebCore/page/Console.idl
&gt; index 1506210..b79ff50 100644
&gt; --- a/WebCore/page/Console.idl
&gt; +++ b/WebCore/page/Console.idl
&gt; @@ -61,7 +61,7 @@ module window {
&gt;          [CustomArgumentHandling] void groupCollapsed();
&gt;          void groupEnd();
&gt;  
&gt; -        readonly attribute [CustomGetter] MemoryInfo memory;
&gt; +        readonly attribute MemoryInfo memory;
&gt;      };
&gt;  
&gt;  }
&gt; diff --git a/WebCore/page/MemoryInfo.cpp b/WebCore/page/MemoryInfo.cpp
&gt; index 010a19c..c2247b9 100644
&gt; --- a/WebCore/page/MemoryInfo.cpp
&gt; +++ b/WebCore/page/MemoryInfo.cpp
&gt; @@ -31,17 +31,21 @@
&gt;  #include &quot;config.h&quot;
&gt;  #include &quot;MemoryInfo.h&quot;
&gt;  
&gt; +#include &quot;Frame.h&quot;
&gt;  #include &quot;ScriptGCEvent.h&quot;
&gt; +#include &quot;Settings.h&quot;
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; -MemoryInfo::MemoryInfo()
&gt; +MemoryInfo::MemoryInfo(Frame* frame)
&gt;          : m_totalJSHeapSize(0),
&gt;            m_usedJSHeapSize(0)
&gt;  {
&gt; +    if (frame &amp;&amp; frame-&gt;settings() &amp;&amp; frame-&gt;settings()-&gt;memoryInfoEnabled()) {
&gt;  #if ENABLE(INSPECTOR)
&gt; -    ScriptGCEvent::getHeapSize(m_usedJSHeapSize, m_totalJSHeapSize);
&gt; +        ScriptGCEvent::getHeapSize(m_usedJSHeapSize, m_totalJSHeapSize);
&gt;  #endif
&gt; +    }
&gt;  }
&gt;  
&gt;  } // namespace WebCore
&gt; diff --git a/WebCore/page/MemoryInfo.h b/WebCore/page/MemoryInfo.h
&gt; index e9e0fa5..615e952 100644
&gt; --- a/WebCore/page/MemoryInfo.h
&gt; +++ b/WebCore/page/MemoryInfo.h
&gt; @@ -36,15 +36,17 @@
&gt;  
&gt;  namespace WebCore {
&gt;  
&gt; +class Frame;
&gt; +
&gt;  class MemoryInfo : public RefCounted&lt;MemoryInfo&gt; {
&gt;  public:
&gt; -    static PassRefPtr&lt;MemoryInfo&gt; create() { return adoptRef(new MemoryInfo()); }
&gt; +    static PassRefPtr&lt;MemoryInfo&gt; create(Frame* frame) { return adoptRef(new MemoryInfo(frame)); }
&gt;  
&gt;      size_t totalJSHeapSize() const { return m_totalJSHeapSize; }
&gt;      size_t usedJSHeapSize() const { return m_usedJSHeapSize; }
&gt;  
&gt;  private:
&gt; -    MemoryInfo();
&gt; +    MemoryInfo(Frame*);
&gt;  
&gt;      size_t m_totalJSHeapSize;
&gt;      size_t m_usedJSHeapSize;
&gt; diff --git a/WebCore/page/Performance.cpp b/WebCore/page/Performance.cpp
&gt; index c19ce8f..c4234a7 100644
&gt; --- a/WebCore/page/Performance.cpp
&gt; +++ b/WebCore/page/Performance.cpp
&gt; @@ -31,6 +31,7 @@
&gt;  #include &quot;config.h&quot;
&gt;  #include &quot;Performance.h&quot;
&gt;  
&gt; +#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;Navigation.h&quot;
&gt;  #include &quot;Timing.h&quot;
&gt;  
&gt; @@ -52,6 +53,8 @@ Frame* Performance::frame() const
&gt;  
&gt;  void Performance::disconnectFrame()
&gt;  {
&gt; +    if (m_memory)
&gt; +        m_memory = 0;
&gt;      if (m_navigation) {
&gt;          m_navigation-&gt;disconnectFrame();
&gt;          m_navigation = 0;
&gt; @@ -63,6 +66,12 @@ void Performance::disconnectFrame()
&gt;      m_frame = 0;
&gt;  }
&gt;  
&gt; +MemoryInfo* Performance::memory() const
&gt; +{
&gt; +    m_memory = MemoryInfo::create(m_frame);
&gt; +    return m_memory.get();
&gt; +}
&gt; +
&gt;  Navigation* Performance::navigation() const
&gt;  {
&gt;      if (!m_navigation)
&gt; diff --git a/WebCore/page/Performance.h b/WebCore/page/Performance.h
&gt; index f317076..9736fe7 100644
&gt; --- a/WebCore/page/Performance.h
&gt; +++ b/WebCore/page/Performance.h
&gt; @@ -33,6 +33,7 @@
&gt;  
&gt;  #if ENABLE(WEB_TIMING)
&gt;  
&gt; +#include &quot;MemoryInfo.h&quot;
&gt;  #include &quot;Navigation.h&quot;
&gt;  #include &quot;Timing.h&quot;
&gt;  #include &lt;wtf/PassRefPtr.h&gt;
&gt; @@ -48,12 +49,14 @@ public:
&gt;      Frame* frame() const;
&gt;      void disconnectFrame();
&gt;  
&gt; +    MemoryInfo* memory() const;
&gt;      Navigation* navigation() const;
&gt;      Timing* timing() const;
&gt;  
&gt;  private:
&gt;      Performance(Frame*);
&gt;  
&gt; +    mutable RefPtr&lt;MemoryInfo&gt; m_memory;
&gt;      mutable RefPtr&lt;Navigation&gt; m_navigation;
&gt;      mutable RefPtr&lt;Timing&gt; m_timing;
&gt;      Frame* m_frame;
&gt; diff --git a/WebCore/page/Performance.idl b/WebCore/page/Performance.idl
&gt; index 3885e2c..ffe8b6f 100644
&gt; --- a/WebCore/page/Performance.idl
&gt; +++ b/WebCore/page/Performance.idl
&gt; @@ -34,6 +34,7 @@ module window {
&gt;      interface [Conditional=WEB_TIMING, OmitConstructor] Performance {
&gt;          readonly attribute Navigation navigation;
&gt;          readonly attribute Timing timing;
&gt; +        readonly attribute MemoryInfo memory;
&gt;      };
&gt;  
&gt;  }
&gt; diff --git a/WebCore/page/Settings.cpp b/WebCore/page/Settings.cpp
&gt; index f100688..3a942ed 100644
&gt; --- a/WebCore/page/Settings.cpp
&gt; +++ b/WebCore/page/Settings.cpp
&gt; @@ -136,6 +136,7 @@ Settings::Settings(Page* page)
&gt;      , m_html5TreeBuilderEnabled(false) // Will be deleted soon, do not use.
&gt;      , m_paginateDuringLayoutEnabled(false)
&gt;      , m_dnsPrefetchingEnabled(true)
&gt; +    , m_memoryInfoEnabled(false)
&gt;  {
&gt;      // A Frame may not have been created yet, so we initialize the AtomicString 
&gt;      // hash before trying to use it.
&gt; diff --git a/WebCore/page/Settings.h b/WebCore/page/Settings.h
&gt; index 2ac5d27..b42fe02 100644
&gt; --- a/WebCore/page/Settings.h
&gt; +++ b/WebCore/page/Settings.h
&gt; @@ -310,6 +310,9 @@ namespace WebCore {
&gt;          void setPaginateDuringLayoutEnabled(bool flag) { m_paginateDuringLayoutEnabled = flag; }
&gt;          bool paginateDuringLayoutEnabled() const { return m_paginateDuringLayoutEnabled; }
&gt;  
&gt; +        void setMemoryInfoEnabled(bool flag) { m_memoryInfoEnabled = flag; }
&gt; +        bool memoryInfoEnabled() const { return m_memoryInfoEnabled; }
&gt; +
&gt;      private:
&gt;          Page* m_page;
&gt;          
&gt; @@ -393,6 +396,7 @@ namespace WebCore {
&gt;          bool m_html5TreeBuilderEnabled: 1; // Will be deleted soon, do not use.
&gt;          bool m_paginateDuringLayoutEnabled : 1;
&gt;          bool m_dnsPrefetchingEnabled : 1;
&gt; +        bool m_memoryInfoEnabled: 1;
&gt;      
&gt;  #if USE(SAFARI_THEME)
&gt;          static bool gShouldPaintNativeControls;
&gt; diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
&gt; index 29cf8f4..548463e 100644
&gt; --- a/WebKit/chromium/ChangeLog
&gt; +++ b/WebKit/chromium/ChangeLog
&gt; @@ -1,3 +1,22 @@
&gt; +2010-07-07  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make JS memory stats available via &apos;Performance&apos; object (Web Timing).
&gt; +        This statistics is populated only if &apos;WebKitMemoryInfoEnabled&apos;
&gt; +        preference is set.
&gt; +
&gt; +        &apos;console.memory&apos; is kept until Web Timing object becomes visible by
&gt; +        default (currently it is hidden under compile-time flag).  These stats
&gt; +        are guarded with the same preference.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=41617
&gt; +
&gt; +        * public/WebSettings.h:
&gt; +        * src/WebSettingsImpl.cpp:
&gt; +        (WebKit::WebSettingsImpl::setMemoryInfoEnabled):
&gt; +        * src/WebSettingsImpl.h:
&gt; +
&gt;  2010-07-05  Yury Semikhatsky  &lt;yurys@chromium.org&gt;
&gt;  
&gt;          Reviewed by Pavel Feldman.
&gt; diff --git a/WebKit/chromium/public/WebSettings.h b/WebKit/chromium/public/WebSettings.h
&gt; index de895e1..32cefa1 100644
&gt; --- a/WebKit/chromium/public/WebSettings.h
&gt; +++ b/WebKit/chromium/public/WebSettings.h
&gt; @@ -92,6 +92,7 @@ public:
&gt;      virtual void setEditingBehavior(EditingBehavior) = 0;
&gt;      virtual void setAcceleratedCompositingEnabled(bool) = 0;
&gt;      virtual void setHTML5ParserEnabled(bool) = 0;
&gt; +    virtual void setMemoryInfoEnabled(bool) = 0;
&gt;  
&gt;  protected:
&gt;      ~WebSettings() { }
&gt; diff --git a/WebKit/chromium/src/WebSettingsImpl.cpp b/WebKit/chromium/src/WebSettingsImpl.cpp
&gt; index 7e89a77..6a02ed6 100644
&gt; --- a/WebKit/chromium/src/WebSettingsImpl.cpp
&gt; +++ b/WebKit/chromium/src/WebSettingsImpl.cpp
&gt; @@ -284,4 +284,9 @@ void WebSettingsImpl::setHTML5ParserEnabled(bool enabled)
&gt;      m_settings-&gt;setHTML5ParserEnabled(enabled);
&gt;  }
&gt;  
&gt; +void WebSettingsImpl::setMemoryInfoEnabled(bool enabled)
&gt; +{
&gt; +    m_settings-&gt;setMemoryInfoEnabled(enabled);
&gt; +}
&gt; +
&gt;  } // namespace WebKit
&gt; diff --git a/WebKit/chromium/src/WebSettingsImpl.h b/WebKit/chromium/src/WebSettingsImpl.h
&gt; index 70bd792..fe5db51 100644
&gt; --- a/WebKit/chromium/src/WebSettingsImpl.h
&gt; +++ b/WebKit/chromium/src/WebSettingsImpl.h
&gt; @@ -88,6 +88,7 @@ public:
&gt;      virtual void setEditingBehavior(EditingBehavior);
&gt;      virtual void setAcceleratedCompositingEnabled(bool);
&gt;      virtual void setHTML5ParserEnabled(bool);
&gt; +    virtual void setMemoryInfoEnabled(bool);
&gt;  
&gt;  private:
&gt;      WebCore::Settings* m_settings;
&gt; diff --git a/WebKit/mac/ChangeLog b/WebKit/mac/ChangeLog
&gt; index c59d8b4..3f9b6f6 100644
&gt; --- a/WebKit/mac/ChangeLog
&gt; +++ b/WebKit/mac/ChangeLog
&gt; @@ -1,3 +1,27 @@
&gt; +2010-07-07  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make JS memory stats available via &apos;Performance&apos; object (Web Timing).
&gt; +        This statistics is populated only if &apos;WebKitMemoryInfoEnabled&apos;
&gt; +        preference is set.
&gt; +
&gt; +        &apos;console.memory&apos; is kept until Web Timing object becomes visible by
&gt; +        default (currently it is hidden under compile-time flag).  These stats
&gt; +        are guarded with the same preference.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=41617
&gt; +
&gt; +        * WebKit.order:
&gt; +        * WebView/WebPreferenceKeysPrivate.h:
&gt; +        * WebView/WebPreferences.mm:
&gt; +        (+[WebPreferences initialize]):
&gt; +        (-[WebPreferences memoryInfoEnabled]):
&gt; +        (-[WebPreferences setMemoryInfoEnabled:]):
&gt; +        * WebView/WebPreferencesPrivate.h:
&gt; +        * WebView/WebView.mm:
&gt; +        (-[WebView _preferencesChangedNotification:]):
&gt; +
&gt;  2010-06-23  Philippe Normand  &lt;pnormand@igalia.com&gt;
&gt;  
&gt;          Reviewed by Eric Carlson.
&gt; diff --git a/WebKit/mac/WebKit.order b/WebKit/mac/WebKit.order
&gt; index 1776616..c2b5f5d 100644
&gt; --- a/WebKit/mac/WebKit.order
&gt; +++ b/WebKit/mac/WebKit.order
&gt; @@ -283,6 +283,7 @@ _WKAppVersionCheckLessThan
&gt;  -[WebPreferences(WebPrivate) showRepaintCounter]
&gt;  -[WebPreferences(WebPrivate) pluginAllowedRunTime]
&gt;  -[WebPreferences(WebPrivate) webGLEnabled]
&gt; +-[WebPreferences(WebPrivate) memoryInfoEnabled]
&gt;  -[WebPreferences(WebPrivate) isFrameFlatteningEnabled]
&gt;  -[WebView setMaintainsBackForwardList:]
&gt;  -[WebView setUIDelegate:]
&gt; @@ -1883,6 +1884,7 @@ __ZN24WebDatabaseTrackerClient25dispatchDidModifyDatabaseEPN7WebCore14SecurityOr
&gt;  -[WebPreferences setUsesPageCache:]
&gt;  -[WebPreferences(WebPrivate) setAcceleratedCompositingEnabled:]
&gt;  -[WebPreferences(WebPrivate) setWebGLEnabled:]
&gt; +-[WebPreferences(WebPrivate) setMemoryInfoEnabled:]
&gt;  +[WebPluginDatabase setAdditionalWebPlugInPaths:]
&gt;  -[WebDefaultUIDelegate webView:didDrawRect:]
&gt;  -[WebView(WebPrivate) _setPostsAcceleratedCompositingNotifications:]
&gt; diff --git a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
&gt; index a28be49..4175a5d 100644
&gt; --- a/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
&gt; +++ b/WebKit/mac/WebView/WebPreferenceKeysPrivate.h
&gt; @@ -97,6 +97,7 @@
&gt;  #define WebKitHTML5TreeBuilderEnabledPreferenceKey @&quot;WebKitHTML5TreeBuilderEnabled&quot; // Temporary, do not use.
&gt;  #define WebKitPaginateDuringLayoutEnabledPreferenceKey @&quot;WebKitPaginateDuringLayoutEnabled&quot;
&gt;  #define WebKitDNSPrefetchingEnabledPreferenceKey @&quot;WebKitDNSPrefetchingEnabled&quot;
&gt; +#define WebKitMemoryInfoEnabledPreferenceKey @&quot;WebKitMemoryInfoEnabled&quot;
&gt;  
&gt;  // These are private both because callers should be using the cover methods and because the
&gt;  // cover methods themselves are private.
&gt; diff --git a/WebKit/mac/WebView/WebPreferences.mm b/WebKit/mac/WebView/WebPreferences.mm
&gt; index a376458..6f6230b 100644
&gt; --- a/WebKit/mac/WebView/WebPreferences.mm
&gt; +++ b/WebKit/mac/WebView/WebPreferences.mm
&gt; @@ -363,6 +363,7 @@ static WebCacheModel cacheModelForMainBundle(void)
&gt;          [NSNumber numberWithBool:YES],  WebKitHTML5ParserEnabledPreferenceKey,
&gt;          [NSNumber numberWithBool:NO],   WebKitHTML5TreeBuilderEnabledPreferenceKey,
&gt;          [NSNumber numberWithBool:YES],  WebKitDNSPrefetchingEnabledPreferenceKey,
&gt; +        [NSNumber numberWithBool:NO],   WebKitMemoryInfoEnabledPreferenceKey,
&gt;          nil];
&gt;  
&gt;      // This value shouldn&apos;t ever change, which is assumed in the initialization of WebKitPDFDisplayModePreferenceKey above
&gt; @@ -1281,6 +1282,16 @@ static NSString *classIBCreatorID = nil;
&gt;      [self _setBoolValue:flag forKey:WebKitPaginateDuringLayoutEnabledPreferenceKey];
&gt;  }
&gt;  
&gt; +- (BOOL)memoryInfoEnabled
&gt; +{
&gt; +    return [self _boolValueForKey:WebKitMemoryInfoEnabledPreferenceKey];
&gt; +}
&gt; +
&gt; +- (void)setMemoryInfoEnabled:(BOOL)flag
&gt; +{
&gt; +    [self _setBoolValue:flag forKey:WebKitMemoryInfoEnabledPreferenceKey];
&gt; +}
&gt; +
&gt;  - (WebKitEditingBehavior)editingBehavior
&gt;  {
&gt;      return static_cast&lt;WebKitEditingBehavior&gt;([self _integerValueForKey:WebKitEditingBehaviorPreferenceKey]);
&gt; diff --git a/WebKit/mac/WebView/WebPreferencesPrivate.h b/WebKit/mac/WebView/WebPreferencesPrivate.h
&gt; index e94943f..073b364 100644
&gt; --- a/WebKit/mac/WebView/WebPreferencesPrivate.h
&gt; +++ b/WebKit/mac/WebView/WebPreferencesPrivate.h
&gt; @@ -191,6 +191,9 @@ extern NSString *WebPreferencesRemovedNotification;
&gt;  - (BOOL)usesProxiedOpenPanel;
&gt;  - (void)setUsesProxiedOpenPanel:(BOOL)enabled;
&gt;  
&gt; +- (BOOL)memoryInfoEnabled;
&gt; +- (void)setMemoryInfoEnabled:(BOOL)enabled;
&gt; +
&gt;  // Other private methods
&gt;  - (void)_postPreferencesChangesNotification;
&gt;  + (WebPreferences *)_getInstanceForIdentifier:(NSString *)identifier;
&gt; diff --git a/WebKit/mac/WebView/WebView.mm b/WebKit/mac/WebView/WebView.mm
&gt; index ada00b5..14eb511 100644
&gt; --- a/WebKit/mac/WebView/WebView.mm
&gt; +++ b/WebKit/mac/WebView/WebView.mm
&gt; @@ -1433,6 +1433,7 @@ static bool fastDocumentTeardownEnabled()
&gt;      settings-&gt;setHTML5ParserEnabled([preferences html5ParserEnabled]);
&gt;      settings-&gt;setHTML5TreeBuilderEnabled_DO_NOT_USE([preferences html5TreeBuilderEnabled]);
&gt;      settings-&gt;setPaginateDuringLayoutEnabled([preferences paginateDuringLayoutEnabled]);
&gt; +    settings-&gt;setMemoryInfoEnabled([preferences memoryInfoEnabled]);
&gt;  }
&gt;  
&gt;  static inline IMP getMethod(id o, SEL s)
&gt; diff --git a/WebKit/win/ChangeLog b/WebKit/win/ChangeLog
&gt; index d943cc6..d082867 100644
&gt; --- a/WebKit/win/ChangeLog
&gt; +++ b/WebKit/win/ChangeLog
&gt; @@ -1,3 +1,28 @@
&gt; +2010-07-07  Mikhail Naganov  &lt;mnaganov@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make JS memory stats available via &apos;Performance&apos; object (Web Timing).
&gt; +        This statistics is populated only if &apos;WebKitMemoryInfoEnabled&apos;
&gt; +        preference is set.
&gt; +
&gt; +        &apos;console.memory&apos; is kept until Web Timing object becomes visible by
&gt; +        default (currently it is hidden under compile-time flag).  These stats
&gt; +        are guarded with the same preference.
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=41617
&gt; +
&gt; +        * Interfaces/IWebPreferencesPrivate.idl:
&gt; +        * Interfaces/WebKit.idl: Touched to enforce .idl re-build.
&gt; +        * WebPreferenceKeysPrivate.h:
&gt; +        * WebPreferences.cpp:
&gt; +        (WebPreferences::initializeDefaultSettings):
&gt; +        (WebPreferences::memoryInfoEnabled):
&gt; +        (WebPreferences::setMemoryInfoEnabled):
&gt; +        * WebPreferences.h:
&gt; +        * WebView.cpp:
&gt; +        (WebView::notifyPreferencesChanged):
&gt; +
&gt;  2010-07-03  Jon Honeycutt  &lt;jhoneycutt@apple.com&gt;
&gt;  
&gt;          The missing plug-in indicator should be clickable
&gt; diff --git a/WebKit/win/Interfaces/IWebPreferencesPrivate.idl b/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
&gt; index 119c3ff..bca8d6f 100644
&gt; --- a/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
&gt; +++ b/WebKit/win/Interfaces/IWebPreferencesPrivate.idl
&gt; @@ -115,4 +115,7 @@ interface IWebPreferencesPrivate : IUnknown
&gt;  
&gt;      HRESULT isDNSPrefetchingEnabled([out, retval] BOOL *enabled);
&gt;      HRESULT setDNSPrefetchingEnabled([in] BOOL enabled);
&gt; +
&gt; +    HRESULT memoryInfoEnabled([out, retval] BOOL *enabled);
&gt; +    HRESULT setMemoryInfoEnabled([in] BOOL enabled);
&gt;  }
&gt; diff --git a/WebKit/win/Interfaces/WebKit.idl b/WebKit/win/Interfaces/WebKit.idl
&gt; index 8938501..ce2f213 100644
&gt; --- a/WebKit/win/Interfaces/WebKit.idl
&gt; +++ b/WebKit/win/Interfaces/WebKit.idl
&gt; @@ -300,3 +300,4 @@ library WebKit
&gt;          [default] interface IWebUserContentURLPattern;
&gt;      }
&gt;  }
&gt; +
&gt; diff --git a/WebKit/win/WebPreferenceKeysPrivate.h b/WebKit/win/WebPreferenceKeysPrivate.h
&gt; index 40c86c0..f62905c 100644
&gt; --- a/WebKit/win/WebPreferenceKeysPrivate.h
&gt; +++ b/WebKit/win/WebPreferenceKeysPrivate.h
&gt; @@ -145,3 +145,5 @@
&gt;  #define WebKitCustomDragCursorsEnabledPreferenceKey &quot;WebKitCustomDragCursorsEnabled&quot;
&gt;  
&gt;  #define WebKitDNSPrefetchingEnabledPreferenceKey &quot;WebKitDNSPrefetchingEnabled&quot;
&gt; +
&gt; +#define WebKitMemoryInfoEnabledPreferenceKey &quot;WebKitMemoryInfoEnabled&quot;
&gt; diff --git a/WebKit/win/WebPreferences.cpp b/WebKit/win/WebPreferences.cpp
&gt; index 12b0a72..a1055cb 100644
&gt; --- a/WebKit/win/WebPreferences.cpp
&gt; +++ b/WebKit/win/WebPreferences.cpp
&gt; @@ -263,6 +263,8 @@ void WebPreferences::initializeDefaultSettings()
&gt;  
&gt;      CFDictionaryAddValue(defaults, CFSTR(WebKitDNSPrefetchingEnabledPreferenceKey), kCFBooleanTrue);
&gt;  
&gt; +    CFDictionaryAddValue(defaults, CFSTR(WebKitMemoryInfoEnabledPreferenceKey), kCFBooleanFalse);
&gt; +
&gt;      defaultSettings = defaults;
&gt;  }
&gt;  
&gt; @@ -1485,6 +1487,18 @@ HRESULT WebPreferences::isDNSPrefetchingEnabled(BOOL* enabled)
&gt;      return S_OK;
&gt;  }
&gt;  
&gt; +HRESULT WebPreferences::memoryInfoEnabled(BOOL* enabled)
&gt; +{
&gt; +    *enabled = boolValueForKey(CFSTR(WebKitMemoryInfoEnabledPreferenceKey));
&gt; +    return S_OK;
&gt; +}
&gt; +
&gt; +HRESULT WebPreferences::setMemoryInfoEnabled(BOOL enabled)
&gt; +{
&gt; +    setBoolValue(CFSTR(WebKitMemoryInfoEnabledPreferenceKey), enabled);
&gt; +    return S_OK;
&gt; +}
&gt; +
&gt;  void WebPreferences::willAddToWebView()
&gt;  {
&gt;      ++m_numWebViews;
&gt; diff --git a/WebKit/win/WebPreferences.h b/WebKit/win/WebPreferences.h
&gt; index fc57241..463e1b3 100644
&gt; --- a/WebKit/win/WebPreferences.h
&gt; +++ b/WebKit/win/WebPreferences.h
&gt; @@ -423,6 +423,9 @@ public:
&gt;      virtual HRESULT STDMETHODCALLTYPE setDNSPrefetchingEnabled(BOOL);
&gt;      virtual HRESULT STDMETHODCALLTYPE isDNSPrefetchingEnabled(BOOL*);
&gt;  
&gt; +    virtual HRESULT STDMETHODCALLTYPE setMemoryInfoEnabled(BOOL);
&gt; +    virtual HRESULT STDMETHODCALLTYPE memoryInfoEnabled(BOOL*);
&gt; +
&gt;      // WebPreferences
&gt;  
&gt;      // This method accesses a different preference key than developerExtrasEnabled.
&gt; diff --git a/WebKit/win/WebView.cpp b/WebKit/win/WebView.cpp
&gt; index 441f0f2..4821954 100644
&gt; --- a/WebKit/win/WebView.cpp
&gt; +++ b/WebKit/win/WebView.cpp
&gt; @@ -4751,6 +4751,11 @@ HRESULT WebView::notifyPreferencesChanged(IWebNotification* notification)
&gt;          return hr;
&gt;      settings-&gt;setDNSPrefetchingEnabled(enabled);
&gt;  
&gt; +    hr = prefsPrivate-&gt;memoryInfoEnabled(&amp;enabled);
&gt; +    if (FAILED(hr))
&gt; +        return hr;
&gt; +    settings-&gt;setMemoryInfoEnabled(enabled);
&gt; +
&gt;      if (!m_closeWindowTimer)
&gt;          m_mainFrame-&gt;invalidate(); // FIXME
&gt;  

WebCore/page/Performance.idl:37
 +          readonly attribute MemoryInfo memory;
Is it possible to make this EnabledAtRuntime based on whether WebKitMemoryInfoEnabled is set? It would be nice to avoid having it there with zeros when the preference is disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252640</commentid>
    <comment_count>11</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2010-07-16 12:10:43 -0700</bug_when>
    <thetext>Tony, the current behavior is intentional, see Pavel&apos;s comment (#4). This will prevent getting exceptions about undefined properties in code that uses them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252643</commentid>
    <comment_count>12</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2010-07-16 12:21:10 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Tony, the current behavior is intentional, see Pavel&apos;s comment (#4). This will prevent getting exceptions about undefined properties in code that uses them.

Gotcha. I&apos;m not sure I agree with that approach because any real code would want to check for their presence before accessing them (since it isn&apos;t a standard yet). But it isn&apos;t that big of a deal. If anything, perhaps keeping them there advertises that a feature might exist and prompts developers to search for it and find the flag.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60536</attachid>
            <date>2010-07-05 08:06:36 -0700</date>
            <delta_ts>2010-07-06 08:59:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>41617-patch</filename>
            <type>text/plain</type>
            <size>2625</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MmQ2MGYwNC4uMTBkZGI4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMC0wNy0wNSAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgSlMgbWVtb3J5IHN0YXRzIGF2YWlsYWJsZSB2aWEg
J1BlcmZvcm1hbmNlJyBvYmplY3QgKFdlYiBUaW1pbmcpLgorICAgICAgICBDdXJyZW50bHkgdGhp
cyBmZWF0dXJlIGlzIHVuZGVyIGEgZmxhZy4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2MTcKKworICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2Uu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQZXJmb3JtYW5jZTo6bWVtb3J5KToKKyAgICAgICAgKiBwYWdlL1Bl
cmZvcm1hbmNlLmg6CisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZS5pZGw6CisKIDIwMTAtMDct
MDQgIEFsaWNlIExpdSAgPGFsaWNlLmxpdUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5j
cHAgYi9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3BwCmluZGV4IGMxOWNlOGYuLjUwNDdlZDMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAKKysrIGIvV2ViQ29yZS9w
YWdlL1BlcmZvcm1hbmNlLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCiAKKyNpbmNsdWRlICJNZW1vcnlJbmZvLmgiCiAj
aW5jbHVkZSAiTmF2aWdhdGlvbi5oIgogI2luY2x1ZGUgIlRpbWluZy5oIgogCkBAIC01Miw2ICs1
Myw4IEBAIEZyYW1lKiBQZXJmb3JtYW5jZTo6ZnJhbWUoKSBjb25zdAogCiB2b2lkIFBlcmZvcm1h
bmNlOjpkaXNjb25uZWN0RnJhbWUoKQogeworICAgIGlmIChtX21lbW9yeSkKKyAgICAgICAgbV9t
ZW1vcnkgPSAwOwogICAgIGlmIChtX25hdmlnYXRpb24pIHsKICAgICAgICAgbV9uYXZpZ2F0aW9u
LT5kaXNjb25uZWN0RnJhbWUoKTsKICAgICAgICAgbV9uYXZpZ2F0aW9uID0gMDsKQEAgLTYzLDYg
KzY2LDEyIEBAIHZvaWQgUGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFtZSgpCiAgICAgbV9mcmFt
ZSA9IDA7CiB9CiAKK01lbW9yeUluZm8qIFBlcmZvcm1hbmNlOjptZW1vcnkoKSBjb25zdAorewor
ICAgIG1fbWVtb3J5ID0gTWVtb3J5SW5mbzo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG1fbWVtb3J5
LmdldCgpOworfQorCiBOYXZpZ2F0aW9uKiBQZXJmb3JtYW5jZTo6bmF2aWdhdGlvbigpIGNvbnN0
CiB7CiAgICAgaWYgKCFtX25hdmlnYXRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGVy
Zm9ybWFuY2UuaCBiL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCmluZGV4IGYzMTcwNzYuLjk3
MzZmZTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCisrKyBiL1dlYkNv
cmUvcGFnZS9QZXJmb3JtYW5jZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoV0VC
X1RJTUlORykKIAorI2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9u
LmgiCiAjaW5jbHVkZSAiVGltaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAg
LTQ4LDEyICs0OSwxNCBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAg
dm9pZCBkaXNjb25uZWN0RnJhbWUoKTsKIAorICAgIE1lbW9yeUluZm8qIG1lbW9yeSgpIGNvbnN0
OwogICAgIE5hdmlnYXRpb24qIG5hdmlnYXRpb24oKSBjb25zdDsKICAgICBUaW1pbmcqIHRpbWlu
ZygpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIFBlcmZvcm1hbmNlKEZyYW1lKik7CiAKKyAgICBt
dXRhYmxlIFJlZlB0cjxNZW1vcnlJbmZvPiBtX21lbW9yeTsKICAgICBtdXRhYmxlIFJlZlB0cjxO
YXZpZ2F0aW9uPiBtX25hdmlnYXRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8VGltaW5nPiBtX3Rp
bWluZzsKICAgICBGcmFtZSogbV9mcmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZS5pZGwgYi9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCmluZGV4IDM4ODVlMmMu
LmZmZThiNmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwKKysrIGIv
V2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmlkbApAQCAtMzQsNiArMzQsNyBAQCBtb2R1bGUgd2lu
ZG93IHsKICAgICBpbnRlcmZhY2UgW0NvbmRpdGlvbmFsPVdFQl9USU1JTkcsIE9taXRDb25zdHJ1
Y3Rvcl0gUGVyZm9ybWFuY2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTmF2aWdhdGlv
biBuYXZpZ2F0aW9uOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVGltaW5nIHRpbWluZzsK
KyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIE1lbW9yeUluZm8gbWVtb3J5OwogICAgIH07CiAK
IH0K
</data>
<flag name="review"
          id="48095"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60635</attachid>
            <date>2010-07-06 08:59:31 -0700</date>
            <delta_ts>2010-07-07 02:10:36 -0700</delta_ts>
            <desc>memory stats population is now controlled by a preference, turned off by default</desc>
            <filename>41617-patch</filename>
            <type>text/plain</type>
            <size>22285</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MzRmMTQzNi4uZmIzMTJhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wNy0wNiAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgSlMgbWVtb3J5IHN0YXRzIGF2YWlsYWJsZSB2aWEg
J1BlcmZvcm1hbmNlJyBvYmplY3QgKFdlYiBUaW1pbmcpLgorICAgICAgICBUaGlzIHN0YXRpc3Rp
Y3MgaXMgcG9wdWxhdGVkIG9ubHkgaWYgJ1dlYktpdE1lbW9yeUluZm9FbmFibGVkJworICAgICAg
ICBwcmVmZXJlbmNlIGlzIHNldC4KKworICAgICAgICAnY29uc29sZS5tZW1vcnknIGlzIGtlcHQg
dW50aWwgV2ViIFRpbWluZyBvYmplY3QgYmVjb21lcyB2aXNpYmxlIGJ5CisgICAgICAgIGRlZmF1
bHQgKGN1cnJlbnRseSBpdCBpcyBoaWRkZW4gdW5kZXIgY29tcGlsZS10aW1lIGZsYWcpLiAgVGhl
c2Ugc3RhdHMKKyAgICAgICAgYXJlIGd1YXJkZWQgd2l0aCB0aGUgc2FtZSBwcmVmZXJlbmNlLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTYxNwor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBwYWdlL0Nv
bnNvbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6ZGlzY29ubmVjdEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6Om1lbW9yeSk6CisgICAgICAgICogcGFnZS9Db25z
b2xlLmg6CisgICAgICAgICogcGFnZS9Db25zb2xlLmlkbDoKKyAgICAgICAgKiBwYWdlL01lbW9y
eUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5mbzo6TWVtb3J5SW5mbyk6Cisg
ICAgICAgICogcGFnZS9NZW1vcnlJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbmZv
OjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJmb3JtYW5jZTo6bWVtb3J5KToKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlLmg6CisgICAg
ICAgICogcGFnZS9QZXJmb3JtYW5jZS5pZGw6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2Uv
U2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRNZW1vcnlJbmZvRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6bWVtb3J5SW5mb0VuYWJsZWQpOgor
CiAyMDEwLTA3LTA2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByNjI1MjkuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKaW5kZXggYjliNDA3Yy4uM2FkMzRhMyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcApAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1
ZGUgIkpTQ29uc29sZS5oIgogCiAjaW5jbHVkZSAiQ29uc29sZS5oIgotI2luY2x1ZGUgIkpTTWVt
b3J5SW5mby5oIgogI2luY2x1ZGUgIkpTU2NyaXB0UHJvZmlsZS5oIgotI2luY2x1ZGUgIk1lbW9y
eUluZm8uaCIKICNpbmNsdWRlICJTY3JpcHRDYWxsU3RhY2suaCIKICNpbmNsdWRlICJTY3JpcHRQ
cm9maWxlLmgiCiAjaW5jbHVkZSA8cnVudGltZS9KU0FycmF5Lmg+CkBAIC01Nyw5ICs1NSw0IEBA
IEpTVmFsdWUgSlNDb25zb2xlOjpwcm9maWxlcyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAKICNl
bmRpZgogCi1KU1ZhbHVlIEpTQ29uc29sZTo6bWVtb3J5KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QK
LXsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBNZW1vcnlJbmZvOjpjcmVhdGUoKSk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENv
bnNvbGVDdXN0b20uY3BwCmluZGV4IDdkMWNmYzEuLjkwMjY0MjAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcApAQCAtMzMsMTAgKzMzLDggQEAK
ICNpbmNsdWRlICJWOENvbnNvbGUuaCIKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRl
ICJNZW1vcnlJbmZvLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogI2luY2x1ZGUgIlY4
QmluZGluZy5oIgotI2luY2x1ZGUgIlY4TWVtb3J5SW5mby5oIgogI2luY2x1ZGUgIlY4UHJveHku
aCIKICNpbmNsdWRlICJWOFNjcmlwdFByb2ZpbGUuaCIKIApAQCAtNTcsMTAgKzU1LDQgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q29uc29sZTo6cHJvZmlsZXNBY2Nlc3NvckdldHRlcih2ODo6
TG9jYWw8djg6OlN0cmluZz4gbmEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhDb25zb2xlOjptZW1vcnlBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4sIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mKQotewotICAgIElOQ19TVEFUUygiRE9N
LkNvbnNvbGUubWVtb3J5QWNjZXNzb3JHZXR0ZXIiKTsKLSAgICByZXR1cm4gdG9WOChNZW1vcnlJ
bmZvOjpjcmVhdGUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcCBiL1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAppbmRl
eCAxZDZjMDk1Li40MjM0NzdhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVRyZWUuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiTWVtb3J5SW5mby5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgpAQCAtNjEsNiArNjIsOCBAQCBGcmFtZSogQ29uc29sZTo6ZnJhbWUoKSBjb25zdAogCiB2b2lk
IENvbnNvbGU6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7CisgICAgaWYgKG1fbWVtb3J5KQorICAgICAg
ICBtX21lbW9yeSA9IDA7CiAgICAgbV9mcmFtZSA9IDA7CiB9CiAKQEAgLTQ1Niw2ICs0NTksMTIg
QEAgdm9pZCBDb25zb2xlOjp3YXJuKFNjcmlwdENhbGxTdGFjayogY2FsbFN0YWNrKQogICAgIGFk
ZE1lc3NhZ2UoTG9nTWVzc2FnZVR5cGUsIFdhcm5pbmdNZXNzYWdlTGV2ZWwsIGNhbGxTdGFjayk7
CiB9CiAKK01lbW9yeUluZm8qIENvbnNvbGU6Om1lbW9yeSgpIGNvbnN0Cit7CisgICAgbV9tZW1v
cnkgPSBNZW1vcnlJbmZvOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbWVtb3J5Lmdl
dCgpOworfQorCiBzdGF0aWMgYm9vbCBwcmludEV4Y2VwdGlvbnMgPSBmYWxzZTsKIAogYm9vbCBD
b25zb2xlOjpzaG91bGRQcmludEV4Y2VwdGlvbnMoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdl
L0NvbnNvbGUuaCBiL1dlYkNvcmUvcGFnZS9Db25zb2xlLmgKaW5kZXggMDRlNzQzZS4uMjJjYjE4
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaAorKysgYi9XZWJDb3JlL3BhZ2Uv
Q29uc29sZS5oCkBAIC0yOSw4ICsyOSw4IEBACiAjaWZuZGVmIENvbnNvbGVfaAogI2RlZmluZSBD
b25zb2xlX2gKIAorI2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgotCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmlsZS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KQEAgLTQzLDcgKzQzLDYgQEAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFNjcmlw
dFByb2ZpbGU+ID4gUHJvZmlsZXNBcnJheTsKICNlbmRpZgogCiBjbGFzcyBGcmFtZTsKLWNsYXNz
IE1lbW9yeUluZm87CiBjbGFzcyBQYWdlOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgU2NyaXB0Q2Fs
bFN0YWNrOwpAQCAtMTE2LDYgKzExNSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBQcm9maWxlc0Fy
cmF5JiBwcm9maWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZmlsZXM7IH0KICNlbmRpZgogCisg
ICAgTWVtb3J5SW5mbyogbWVtb3J5KCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIGlubGlu
ZSBQYWdlKiBwYWdlKCkgY29uc3Q7CiAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VUeXBlLCBN
ZXNzYWdlTGV2ZWwsIFNjcmlwdENhbGxTdGFjayosIGJvb2wgYWNjZXB0Tm9Bcmd1bWVudHMgPSBm
YWxzZSk7CkBAIC0xMjYsNiArMTI3LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSkFWQVNDUklQ
VF9ERUJVR0dFUikKICAgICBQcm9maWxlc0FycmF5IG1fcHJvZmlsZXM7CiAjZW5kaWYKKyAgICBt
dXRhYmxlIFJlZlB0cjxNZW1vcnlJbmZvPiBtX21lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbCBiL1dlYkNvcmUv
cGFnZS9Db25zb2xlLmlkbAppbmRleCAxNTA2MjEwLi5iNzlmZjUwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BhZ2UvQ29uc29sZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCkBAIC02
MSw3ICs2MSw3IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5k
bGluZ10gdm9pZCBncm91cENvbGxhcHNlZCgpOwogICAgICAgICB2b2lkIGdyb3VwRW5kKCk7CiAK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIE1lbW9yeUluZm8gbWVt
b3J5OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVtb3J5SW5mbyBtZW1vcnk7CiAgICAg
fTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL01lbW9yeUluZm8uY3BwIGIvV2ViQ29y
ZS9wYWdlL01lbW9yeUluZm8uY3BwCmluZGV4IDAxMGExOWMuLmMyMjQ3YjkgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9NZW1vcnlJbmZvLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvTWVtb3J5SW5m
by5jcHAKQEAgLTMxLDE3ICszMSwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1lbW9yeUluZm8uaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0R0NF
dmVudC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
TWVtb3J5SW5mbzo6TWVtb3J5SW5mbygpCitNZW1vcnlJbmZvOjpNZW1vcnlJbmZvKEZyYW1lKiBm
cmFtZSkKICAgICAgICAgOiBtX3RvdGFsSlNIZWFwU2l6ZSgwKSwKICAgICAgICAgICBtX3VzZWRK
U0hlYXBTaXplKDApCiB7CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zZXR0aW5ncygpICYmIGZy
YW1lLT5zZXR0aW5ncygpLT5tZW1vcnlJbmZvRW5hYmxlZCgpKSB7CiAjaWYgRU5BQkxFKElOU1BF
Q1RPUikKLSAgICBTY3JpcHRHQ0V2ZW50OjpnZXRIZWFwU2l6ZShtX3VzZWRKU0hlYXBTaXplLCBt
X3RvdGFsSlNIZWFwU2l6ZSk7CisgICAgICAgIFNjcmlwdEdDRXZlbnQ6OmdldEhlYXBTaXplKG1f
dXNlZEpTSGVhcFNpemUsIG1fdG90YWxKU0hlYXBTaXplKTsKICNlbmRpZgorICAgIH0KIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL01lbW9yeUlu
Zm8uaCBiL1dlYkNvcmUvcGFnZS9NZW1vcnlJbmZvLmgKaW5kZXggZTllMGZhNS4uNjE1ZTk1MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL01lbW9yeUluZm8uaAorKysgYi9XZWJDb3JlL3BhZ2Uv
TWVtb3J5SW5mby5oCkBAIC0zNiwxNSArMzYsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBGcmFtZTsKKwogY2xhc3MgTWVtb3J5SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPE1l
bW9yeUluZm8+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZW1vcnlJbmZvPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5SW5mbygpKTsgfQorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPE1lbW9yeUluZm8+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNZW1vcnlJbmZvKGZyYW1lKSk7IH0KIAogICAgIHNpemVfdCB0b3RhbEpTSGVh
cFNpemUoKSBjb25zdCB7IHJldHVybiBtX3RvdGFsSlNIZWFwU2l6ZTsgfQogICAgIHNpemVfdCB1
c2VkSlNIZWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZEpTSGVhcFNpemU7IH0KIAogcHJp
dmF0ZToKLSAgICBNZW1vcnlJbmZvKCk7CisgICAgTWVtb3J5SW5mbyhGcmFtZSopOwogCiAgICAg
c2l6ZV90IG1fdG90YWxKU0hlYXBTaXplOwogICAgIHNpemVfdCBtX3VzZWRKU0hlYXBTaXplOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcCBiL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZS5jcHAKaW5kZXggYzE5Y2U4Zi4uYzQyMzRhNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wYWdlL1BlcmZvcm1hbmNlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGVyZm9y
bWFuY2UuaCIKIAorI2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9u
LmgiCiAjaW5jbHVkZSAiVGltaW5nLmgiCiAKQEAgLTUyLDYgKzUzLDggQEAgRnJhbWUqIFBlcmZv
cm1hbmNlOjpmcmFtZSgpIGNvbnN0CiAKIHZvaWQgUGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFt
ZSgpCiB7CisgICAgaWYgKG1fbWVtb3J5KQorICAgICAgICBtX21lbW9yeSA9IDA7CiAgICAgaWYg
KG1fbmF2aWdhdGlvbikgewogICAgICAgICBtX25hdmlnYXRpb24tPmRpc2Nvbm5lY3RGcmFtZSgp
OwogICAgICAgICBtX25hdmlnYXRpb24gPSAwOwpAQCAtNjMsNiArNjYsMTIgQEAgdm9pZCBQZXJm
b3JtYW5jZTo6ZGlzY29ubmVjdEZyYW1lKCkKICAgICBtX2ZyYW1lID0gMDsKIH0KIAorTWVtb3J5
SW5mbyogUGVyZm9ybWFuY2U6Om1lbW9yeSgpIGNvbnN0Cit7CisgICAgbV9tZW1vcnkgPSBNZW1v
cnlJbmZvOjpjcmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbWVtb3J5LmdldCgpOworfQor
CiBOYXZpZ2F0aW9uKiBQZXJmb3JtYW5jZTo6bmF2aWdhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX25hdmlnYXRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBi
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCmluZGV4IGYzMTcwNzYuLjk3MzZmZTcgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoV0VCX1RJTUlORykKIAor
I2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uLmgiCiAjaW5jbHVk
ZSAiVGltaW5nLmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ4LDEyICs0OSwx
NCBAQCBwdWJsaWM6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBkaXNjb25u
ZWN0RnJhbWUoKTsKIAorICAgIE1lbW9yeUluZm8qIG1lbW9yeSgpIGNvbnN0OwogICAgIE5hdmln
YXRpb24qIG5hdmlnYXRpb24oKSBjb25zdDsKICAgICBUaW1pbmcqIHRpbWluZygpIGNvbnN0Owog
CiBwcml2YXRlOgogICAgIFBlcmZvcm1hbmNlKEZyYW1lKik7CiAKKyAgICBtdXRhYmxlIFJlZlB0
cjxNZW1vcnlJbmZvPiBtX21lbW9yeTsKICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0aW9uPiBt
X25hdmlnYXRpb247CiAgICAgbXV0YWJsZSBSZWZQdHI8VGltaW5nPiBtX3RpbWluZzsKICAgICBG
cmFtZSogbV9mcmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwg
Yi9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaWRsCmluZGV4IDM4ODVlMmMuLmZmZThiNmYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlLmlkbApAQCAtMzQsNiArMzQsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICBp
bnRlcmZhY2UgW0NvbmRpdGlvbmFsPVdFQl9USU1JTkcsIE9taXRDb25zdHJ1Y3Rvcl0gUGVyZm9y
bWFuY2UgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTmF2aWdhdGlvbiBuYXZpZ2F0aW9u
OwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgVGltaW5nIHRpbWluZzsKKyAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIE1lbW9yeUluZm8gbWVtb3J5OwogICAgIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3Bw
CmluZGV4IGYxMDA2ODguLjNhOTQyZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5jcHAKKysrIGIvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTM2LDYgKzEzNiw3IEBA
IFNldHRpbmdzOjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9odG1sNVRyZWVCdWlsZGVy
RW5hYmxlZChmYWxzZSkgLy8gV2lsbCBiZSBkZWxldGVkIHNvb24sIGRvIG5vdCB1c2UuCiAgICAg
LCBtX3BhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fZG5zUHJlZmV0
Y2hpbmdFbmFibGVkKHRydWUpCisgICAgLCBtX21lbW9yeUluZm9FbmFibGVkKGZhbHNlKQogewog
ICAgIC8vIEEgRnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNvIHdlIGluaXRp
YWxpemUgdGhlIEF0b21pY1N0cmluZyAKICAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNl
IGl0LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmggYi9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3MuaAppbmRleCAyYWM1ZDI3Li44OGZiMTNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuaAorKysgYi9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaApAQCAtMzEwLDYgKzMx
MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRQYWdpbmF0ZUR1cmlu
Z0xheW91dEVuYWJsZWQoYm9vbCBmbGFnKSB7IG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVk
ID0gZmxhZzsgfQogICAgICAgICBib29sIHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkOyB9CiAKKyAgICAgICAg
dm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sIGZsYWcpIHsgbV9tZW1vcnlJbmZvRW5hYmxl
ZCA9IGZsYWc7IH0KKyAgICAgICAgYm9vbCBtZW1vcnlJbmZvRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbWVtb3J5SW5mb0VuYWJsZWQ7IH0KKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgUGFnZSogbV9wYWdlOwogICAgICAgICAKQEAgLTM5Myw2ICszOTYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIGJvb2wgbV9odG1sNVRyZWVCdWlsZGVyRW5hYmxlZDogMTsgLy8g
V2lsbCBiZSBkZWxldGVkIHNvb24sIGRvIG5vdCB1c2UuCiAgICAgICAgIGJvb2wgbV9wYWdpbmF0
ZUR1cmluZ0xheW91dEVuYWJsZWQgOiAxOwogICAgICAgICBib29sIG1fZG5zUHJlZmV0Y2hpbmdF
bmFibGVkIDogMTsKKyAgICAgICAgYm9vbCBtX21lbW9yeUluZm9FbmFibGVkOiAxOwogICAgIAog
I2lmIFVTRShTQUZBUklfVEhFTUUpCiAgICAgICAgIHN0YXRpYyBib29sIGdTaG91bGRQYWludE5h
dGl2ZUNvbnRyb2xzOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMjljZjhmNC4uZjZmOTIxNyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDctMDYgIE1pa2hhaWwgTmFnYW5vdiAgPG1uYWdh
bm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBNYWtlIEpTIG1lbW9yeSBzdGF0cyBhdmFpbGFibGUgdmlhICdQZXJmb3JtYW5j
ZScgb2JqZWN0IChXZWIgVGltaW5nKS4KKyAgICAgICAgVGhpcyBzdGF0aXN0aWNzIGlzIHBvcHVs
YXRlZCBvbmx5IGlmICdXZWJLaXRNZW1vcnlJbmZvRW5hYmxlZCcKKyAgICAgICAgcHJlZmVyZW5j
ZSBpcyBzZXQuCisKKyAgICAgICAgJ2NvbnNvbGUubWVtb3J5JyBpcyBrZXB0IHVudGlsIFdlYiBU
aW1pbmcgb2JqZWN0IGJlY29tZXMgdmlzaWJsZSBieQorICAgICAgICBkZWZhdWx0IChjdXJyZW50
bHkgaXQgaXMgaGlkZGVuIHVuZGVyIGNvbXBpbGUtdGltZSBmbGFnKS4gIFRoZXNlIHN0YXRzCisg
ICAgICAgIGFyZSBndWFyZGVkIHdpdGggdGhlIHNhbWUgcHJlZmVyZW5jZS4KKworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2MTcKKworICAgICAgICAq
IHB1YmxpYy9XZWJTZXR0aW5ncy5oOgorICAgICAgICAqIHNyYy9XZWJTZXR0aW5nc0ltcGwuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJTZXR0aW5nc0ltcGw6OnNldE1lbW9yeUluZm9FbmFibGVk
KToKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmg6CisKIDIwMTAtMDctMDUgIFl1cnkg
U2VtaWtoYXRza3kgIDx5dXJ5c0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
UGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0
dGluZ3MuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaAppbmRleCBkZTg5
NWUxLi4zMmNlZmExIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRp
bmdzLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCkBAIC05Miw2
ICs5Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKEVk
aXRpbmdCZWhhdmlvcikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nRW5hYmxlZChib29sKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEhUTUw1UGFyc2Vy
RW5hYmxlZChib29sKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVk
KGJvb2wpID0gMDsKIAogcHJvdGVjdGVkOgogICAgIH5XZWJTZXR0aW5ncygpIHsgfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuY3BwCmluZGV4IDdlODlhNzcuLjZhMDJlZDYgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKQEAgLTI4NCw0ICsyODQsOSBA
QCB2b2lkIFdlYlNldHRpbmdzSW1wbDo6c2V0SFRNTDVQYXJzZXJFbmFibGVkKGJvb2wgZW5hYmxl
ZCkKICAgICBtX3NldHRpbmdzLT5zZXRIVE1MNVBhcnNlckVuYWJsZWQoZW5hYmxlZCk7CiB9CiAK
K3ZvaWQgV2ViU2V0dGluZ3NJbXBsOjpzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sIGVuYWJsZWQp
Cit7CisgICAgbV9zZXR0aW5ncy0+c2V0TWVtb3J5SW5mb0VuYWJsZWQoZW5hYmxlZCk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgK
aW5kZXggNzBiZDc5Mi4uZmU1ZGI1MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJTZXR0aW5nc0ltcGwuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1w
bC5oCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0RWRpdGlu
Z0JlaGF2aW9yKEVkaXRpbmdCZWhhdmlvcik7CiAgICAgdmlydHVhbCB2b2lkIHNldEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdFbmFibGVkKGJvb2wpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIVE1MNVBh
cnNlckVuYWJsZWQoYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVk
KGJvb2wpOwogCiBwcml2YXRlOgogICAgIFdlYkNvcmU6OlNldHRpbmdzKiBtX3NldHRpbmdzOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpp
bmRleCBjNTlkOGI0Li5mOGM1NGFhIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTA3LTA2ICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBKUyBtZW1vcnkgc3RhdHMgYXZh
aWxhYmxlIHZpYSAnUGVyZm9ybWFuY2UnIG9iamVjdCAoV2ViIFRpbWluZykuCisgICAgICAgIFRo
aXMgc3RhdGlzdGljcyBpcyBwb3B1bGF0ZWQgb25seSBpZiAnV2ViS2l0TWVtb3J5SW5mb0VuYWJs
ZWQnCisgICAgICAgIHByZWZlcmVuY2UgaXMgc2V0LgorCisgICAgICAgICdjb25zb2xlLm1lbW9y
eScgaXMga2VwdCB1bnRpbCBXZWIgVGltaW5nIG9iamVjdCBiZWNvbWVzIHZpc2libGUgYnkKKyAg
ICAgICAgZGVmYXVsdCAoY3VycmVudGx5IGl0IGlzIGhpZGRlbiB1bmRlciBjb21waWxlLXRpbWUg
ZmxhZykuICBUaGVzZSBzdGF0cworICAgICAgICBhcmUgZ3VhcmRlZCB3aXRoIHRoZSBzYW1lIHBy
ZWZlcmVuY2UuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTQxNjE3CisKKyAgICAgICAgKiBXZWJLaXQub3JkZXI6CisgICAgICAgICogV2ViVmlldy9X
ZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVu
Y2VzLm1tOgorICAgICAgICAoK1tXZWJQcmVmZXJlbmNlcyBpbml0aWFsaXplXSk6CisgICAgICAg
ICgtW1dlYlByZWZlcmVuY2VzIG1lbW9yeUluZm9FbmFibGVkXSk6CisgICAgICAgICgtW1dlYlBy
ZWZlcmVuY2VzIHNldE1lbW9yeUluZm9FbmFibGVkOl0pOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAg
ICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWROb3RpZmljYXRpb246XSk6CisKIDIw
MTAtMDYtMjMgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2Vi
S2l0Lm9yZGVyIGIvV2ViS2l0L21hYy9XZWJLaXQub3JkZXIKaW5kZXggMTc3NjYxNi4uYzJiNWY1
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9XZWJLaXQub3JkZXIKKysrIGIvV2ViS2l0L21hYy9X
ZWJLaXQub3JkZXIKQEAgLTI4Myw2ICsyODMsNyBAQCBfV0tBcHBWZXJzaW9uQ2hlY2tMZXNzVGhh
bgogLVtXZWJQcmVmZXJlbmNlcyhXZWJQcml2YXRlKSBzaG93UmVwYWludENvdW50ZXJdCiAtW1dl
YlByZWZlcmVuY2VzKFdlYlByaXZhdGUpIHBsdWdpbkFsbG93ZWRSdW5UaW1lXQogLVtXZWJQcmVm
ZXJlbmNlcyhXZWJQcml2YXRlKSB3ZWJHTEVuYWJsZWRdCistW1dlYlByZWZlcmVuY2VzKFdlYlBy
aXZhdGUpIG1lbW9yeUluZm9FbmFibGVkXQogLVtXZWJQcmVmZXJlbmNlcyhXZWJQcml2YXRlKSBp
c0ZyYW1lRmxhdHRlbmluZ0VuYWJsZWRdCiAtW1dlYlZpZXcgc2V0TWFpbnRhaW5zQmFja0Zvcndh
cmRMaXN0Ol0KIC1bV2ViVmlldyBzZXRVSURlbGVnYXRlOl0KQEAgLTE4ODMsNiArMTg4NCw3IEBA
IF9fWk4yNFdlYkRhdGFiYXNlVHJhY2tlckNsaWVudDI1ZGlzcGF0Y2hEaWRNb2RpZnlEYXRhYmFz
ZUVQTjdXZWJDb3JlMTRTZWN1cml0eU9yCiAtW1dlYlByZWZlcmVuY2VzIHNldFVzZXNQYWdlQ2Fj
aGU6XQogLVtXZWJQcmVmZXJlbmNlcyhXZWJQcml2YXRlKSBzZXRBY2NlbGVyYXRlZENvbXBvc2l0
aW5nRW5hYmxlZDpdCiAtW1dlYlByZWZlcmVuY2VzKFdlYlByaXZhdGUpIHNldFdlYkdMRW5hYmxl
ZDpdCistW1dlYlByZWZlcmVuY2VzKFdlYlByaXZhdGUpIHNldE1lbW9yeUluZm9FbmFibGVkOl0K
ICtbV2ViUGx1Z2luRGF0YWJhc2Ugc2V0QWRkaXRpb25hbFdlYlBsdWdJblBhdGhzOl0KIC1bV2Vi
RGVmYXVsdFVJRGVsZWdhdGUgd2ViVmlldzpkaWREcmF3UmVjdDpdCiAtW1dlYlZpZXcoV2ViUHJp
dmF0ZSkgX3NldFBvc3RzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ05vdGlmaWNhdGlvbnM6XQpkaWZm
IC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCmluZGV4IGEyOGJl
NDkuLjQxNzVhNWQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaAorKysgYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmgKQEAgLTk3LDYgKzk3LDcgQEAKICNkZWZpbmUgV2ViS2l0SFRNTDVUcmVlQnVpbGRl
ckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SFRNTDVUcmVlQnVpbGRlckVuYWJsZWQiIC8v
IFRlbXBvcmFyeSwgZG8gbm90IHVzZS4KICNkZWZpbmUgV2ViS2l0UGFnaW5hdGVEdXJpbmdMYXlv
dXRFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxl
ZCIKICNkZWZpbmUgV2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkUHJlZmVyZW5jZUtleSBAIldl
YktpdEROU1ByZWZldGNoaW5nRW5hYmxlZCIKKyNkZWZpbmUgV2ViS2l0TWVtb3J5SW5mb0VuYWJs
ZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0TWVtb3J5SW5mb0VuYWJsZWQiCiAKIC8vIFRoZXNlIGFy
ZSBwcml2YXRlIGJvdGggYmVjYXVzZSBjYWxsZXJzIHNob3VsZCBiZSB1c2luZyB0aGUgY292ZXIg
bWV0aG9kcyBhbmQgYmVjYXVzZSB0aGUKIC8vIGNvdmVyIG1ldGhvZHMgdGhlbXNlbHZlcyBhcmUg
cHJpdmF0ZS4KZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQppbmRleCBhMzc2NDU4Li42
ZjYyMzBiIDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0K
KysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC0zNjMsNiArMzYz
LDcgQEAgc3RhdGljIFdlYkNhY2hlTW9kZWwgY2FjaGVNb2RlbEZvck1haW5CdW5kbGUodm9pZCkK
ICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRIVE1MNVBhcnNl
ckVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
Tk9dLCAgIFdlYktpdEhUTUw1VHJlZUJ1aWxkZXJFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAg
ICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sICBXZWJLaXRETlNQcmVmZXRjaGluZ0Vu
YWJsZWRQcmVmZXJlbmNlS2V5LAorICAgICAgICBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6Tk9d
LCAgIFdlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgbmlsXTsK
IAogICAgIC8vIFRoaXMgdmFsdWUgc2hvdWxkbid0IGV2ZXIgY2hhbmdlLCB3aGljaCBpcyBhc3N1
bWVkIGluIHRoZSBpbml0aWFsaXphdGlvbiBvZiBXZWJLaXRQREZEaXNwbGF5TW9kZVByZWZlcmVu
Y2VLZXkgYWJvdmUKQEAgLTEyODEsNiArMTI4MiwxNiBAQCBzdGF0aWMgTlNTdHJpbmcgKmNsYXNz
SUJDcmVhdG9ySUQgPSBuaWw7CiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpX
ZWJLaXRQYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAorLSAo
Qk9PTCltZW1vcnlJbmZvRW5hYmxlZAoreworICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9y
S2V5OldlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleV07Cit9CisKKy0gKHZvaWQp
c2V0TWVtb3J5SW5mb0VuYWJsZWQ6KEJPT0wpZmxhZworeworICAgIFtzZWxmIF9zZXRCb29sVmFs
dWU6ZmxhZyBmb3JLZXk6V2ViS2l0TWVtb3J5SW5mb0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKK30K
KwogLSAoV2ViS2l0RWRpdGluZ0JlaGF2aW9yKWVkaXRpbmdCZWhhdmlvcgogewogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJLaXRFZGl0aW5nQmVoYXZpb3I+KFtzZWxmIF9pbnRlZ2VyVmFsdWVG
b3JLZXk6V2ViS2l0RWRpdGluZ0JlaGF2aW9yUHJlZmVyZW5jZUtleV0pOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCmluZGV4IGU5NDk0M2YuLjA3M2IzNjQgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysg
Yi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTE5MSw2ICsx
OTEsOSBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzUmVtb3ZlZE5vdGlmaWNhdGlv
bjsKIC0gKEJPT0wpdXNlc1Byb3hpZWRPcGVuUGFuZWw7CiAtICh2b2lkKXNldFVzZXNQcm94aWVk
T3BlblBhbmVsOihCT09MKWVuYWJsZWQ7CiAKKy0gKEJPT0wpbWVtb3J5SW5mb0VuYWJsZWQ7Cist
ICh2b2lkKXNldE1lbW9yeUluZm9FbmFibGVkOihCT09MKWVuYWJsZWQ7CisKIC8vIE90aGVyIHBy
aXZhdGUgbWV0aG9kcwogLSAodm9pZClfcG9zdFByZWZlcmVuY2VzQ2hhbmdlc05vdGlmaWNhdGlv
bjsKICsgKFdlYlByZWZlcmVuY2VzICopX2dldEluc3RhbmNlRm9ySWRlbnRpZmllcjooTlNTdHJp
bmcgKilpZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0gYi9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBhZGEwMGI1Li4xNGViNTEx
IDEwMDY0NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQorKysgYi9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTQzMyw2ICsxNDMzLDcgQEAgc3RhdGljIGJvb2wg
ZmFzdERvY3VtZW50VGVhcmRvd25FbmFibGVkKCkKICAgICBzZXR0aW5ncy0+c2V0SFRNTDVQYXJz
ZXJFbmFibGVkKFtwcmVmZXJlbmNlcyBodG1sNVBhcnNlckVuYWJsZWRdKTsKICAgICBzZXR0aW5n
cy0+c2V0SFRNTDVUcmVlQnVpbGRlckVuYWJsZWRfRE9fTk9UX1VTRShbcHJlZmVyZW5jZXMgaHRt
bDVUcmVlQnVpbGRlckVuYWJsZWRdKTsKICAgICBzZXR0aW5ncy0+c2V0UGFnaW5hdGVEdXJpbmdM
YXlvdXRFbmFibGVkKFtwcmVmZXJlbmNlcyBwYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWRdKTsK
KyAgICBzZXR0aW5ncy0+c2V0TWVtb3J5SW5mb0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1lbW9yeUlu
Zm9FbmFibGVkXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSU1QIGdldE1ldGhvZChpZCBvLCBTRUwg
cykKZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vQ2hhbmdlTG9nIGIvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKaW5kZXggZDk0M2NjNi4uYjg3MDk4MCAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0w
NiAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgSlMgbWVtb3J5IHN0YXRz
IGF2YWlsYWJsZSB2aWEgJ1BlcmZvcm1hbmNlJyBvYmplY3QgKFdlYiBUaW1pbmcpLgorICAgICAg
ICBUaGlzIHN0YXRpc3RpY3MgaXMgcG9wdWxhdGVkIG9ubHkgaWYgJ1dlYktpdE1lbW9yeUluZm9F
bmFibGVkJworICAgICAgICBwcmVmZXJlbmNlIGlzIHNldC4KKworICAgICAgICAnY29uc29sZS5t
ZW1vcnknIGlzIGtlcHQgdW50aWwgV2ViIFRpbWluZyBvYmplY3QgYmVjb21lcyB2aXNpYmxlIGJ5
CisgICAgICAgIGRlZmF1bHQgKGN1cnJlbnRseSBpdCBpcyBoaWRkZW4gdW5kZXIgY29tcGlsZS10
aW1lIGZsYWcpLiAgVGhlc2Ugc3RhdHMKKyAgICAgICAgYXJlIGd1YXJkZWQgd2l0aCB0aGUgc2Ft
ZSBwcmVmZXJlbmNlLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00MTYxNworCisgICAgICAgICogSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2
YXRlLmlkbDoKKyAgICAgICAgKiBXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAg
KiBXZWJQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6
ZURlZmF1bHRTZXR0aW5ncyk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6bWVtb3J5SW5mb0Vu
YWJsZWQpOgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnNldE1lbW9yeUluZm9FbmFibGVkKToK
KyAgICAgICAgKiBXZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAg
ICAgICAoV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAxMC0wNy0wMyAg
Sm9uIEhvbmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBtaXNz
aW5nIHBsdWctaW4gaW5kaWNhdG9yIHNob3VsZCBiZSBjbGlja2FibGUKZGlmZiAtLWdpdCBhL1dl
YktpdC93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1dlYktpdC93
aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAppbmRleCAxMTljM2ZmLi5i
Y2E4ZDZmIDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZS5pZGwKKysrIGIvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1By
aXZhdGUuaWRsCkBAIC0xMTUsNCArMTE1LDcgQEAgaW50ZXJmYWNlIElXZWJQcmVmZXJlbmNlc1By
aXZhdGUgOiBJVW5rbm93bgogCiAgICAgSFJFU1VMVCBpc0ROU1ByZWZldGNoaW5nRW5hYmxlZChb
b3V0LCByZXR2YWxdIEJPT0wgKmVuYWJsZWQpOwogICAgIEhSRVNVTFQgc2V0RE5TUHJlZmV0Y2hp
bmdFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKKworICAgIEhSRVNVTFQgbWVtb3J5SW5mb0Vu
YWJsZWQoW291dCwgcmV0dmFsXSBCT09MICplbmFibGVkKTsKKyAgICBIUkVTVUxUIHNldE1lbW9y
eUluZm9FbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC93
aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VL
ZXlzUHJpdmF0ZS5oCmluZGV4IDQwYzg2YzAuLmY2MjkwNWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysrIGIvV2ViS2l0L3dpbi9XZWJQcmVmZXJl
bmNlS2V5c1ByaXZhdGUuaApAQCAtMTQ1LDMgKzE0NSw1IEBACiAjZGVmaW5lIFdlYktpdEN1c3Rv
bURyYWdDdXJzb3JzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdEN1c3RvbURyYWdDdXJzb3Jz
RW5hYmxlZCIKIAogI2RlZmluZSBXZWJLaXRETlNQcmVmZXRjaGluZ0VuYWJsZWRQcmVmZXJlbmNl
S2V5ICJXZWJLaXRETlNQcmVmZXRjaGluZ0VuYWJsZWQiCisKKyNkZWZpbmUgV2ViS2l0TWVtb3J5
SW5mb0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRNZW1vcnlJbmZvRW5hYmxlZCIKZGlmZiAt
LWdpdCBhL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3BwIGIvV2ViS2l0L3dpbi9XZWJQcmVm
ZXJlbmNlcy5jcHAKaW5kZXggMTJiMGE3Mi4uODgwYmFjYyAxMDA2NDQKLS0tIGEvV2ViS2l0L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAK
QEAgLTI2Myw2ICsyNjMsOCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVmYXVs
dFNldHRpbmdzKCkKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihX
ZWJLaXRETlNQcmVmZXRjaGluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhblRydWUp
OwogCisgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdE1lbW9y
eUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CisgICAgCiAgICAg
ZGVmYXVsdFNldHRpbmdzID0gZGVmYXVsdHM7CiB9CiAKQEAgLTE0ODUsNiArMTQ4NywxOCBAQCBI
UkVTVUxUIFdlYlByZWZlcmVuY2VzOjppc0ROU1ByZWZldGNoaW5nRW5hYmxlZChCT09MKiBlbmFi
bGVkKQogICAgIHJldHVybiBTX09LOwogfQogCitIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjptZW1v
cnlJbmZvRW5hYmxlZChCT09MKiBlbmFibGVkKQoreworICAgICplbmFibGVkID0gYm9vbFZhbHVl
Rm9yS2V5KENGU1RSKFdlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSkpOworICAg
IHJldHVybiBTX09LOworfQorCitIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRNZW1vcnlJbmZv
RW5hYmxlZChCT09MIGVuYWJsZWQpCit7CisgICAgc2V0Qm9vbFZhbHVlKENGU1RSKFdlYktpdE1l
bW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSksIGVuYWJsZWQpOworICAgIHJldHVybiBTX09L
OworfQorCiB2b2lkIFdlYlByZWZlcmVuY2VzOjp3aWxsQWRkVG9XZWJWaWV3KCkKIHsKICAgICAr
K21fbnVtV2ViVmlld3M7CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmgg
Yi9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggZmM1NzI0MS4uNDYzZTFiMyAxMDA2
NDQKLS0tIGEvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1dlYktpdC93aW4vV2Vi
UHJlZmVyZW5jZXMuaApAQCAtNDIzLDYgKzQyMyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKEJPT0wpOwog
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBpc0ROU1ByZWZldGNoaW5nRW5h
YmxlZChCT09MKik7CiAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0
TWVtb3J5SW5mb0VuYWJsZWQoQk9PTCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIG1lbW9yeUluZm9FbmFibGVkKEJPT0wqKTsKKwogICAgIC8vIFdlYlByZWZlcmVuY2Vz
CiAKICAgICAvLyBUaGlzIG1ldGhvZCBhY2Nlc3NlcyBhIGRpZmZlcmVudCBwcmVmZXJlbmNlIGtl
eSB0aGFuIGRldmVsb3BlckV4dHJhc0VuYWJsZWQuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dl
YlZpZXcuY3BwIGIvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0NDFmMGYyLi40ODIxOTU0
IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1dlYktpdC93aW4vV2Vi
Vmlldy5jcHAKQEAgLTQ3NTEsNiArNDc1MSwxMSBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVBy
ZWZlcmVuY2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAg
IHJldHVybiBocjsKICAgICBzZXR0aW5ncy0+c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGVuYWJs
ZWQpOwogCisgICAgaHIgPSBwcmVmc1ByaXZhdGUtPm1lbW9yeUluZm9FbmFibGVkKCZlbmFibGVk
KTsKKyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIHNldHRpbmdz
LT5zZXRNZW1vcnlJbmZvRW5hYmxlZChlbmFibGVkKTsKKwogICAgIGlmICghbV9jbG9zZVdpbmRv
d1RpbWVyKQogICAgICAgICBtX21haW5GcmFtZS0+aW52YWxpZGF0ZSgpOyAvLyBGSVhNRQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60708</attachid>
            <date>2010-07-07 02:10:36 -0700</date>
            <delta_ts>2011-01-22 19:51:44 -0800</delta_ts>
            <desc>fixed windows build failure</desc>
            <filename>41617-patch</filename>
            <type>text/plain</type>
            <size>22624</size>
            <attacher name="Mikhail Naganov">mnaganov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
N2VkNWU3NS4uYTUyOGVmOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0wNy0wNyAgTWlraGFpbCBOYWdh
bm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2UgSlMgbWVtb3J5IHN0YXRzIGF2YWlsYWJsZSB2aWEg
J1BlcmZvcm1hbmNlJyBvYmplY3QgKFdlYiBUaW1pbmcpLgorICAgICAgICBUaGlzIHN0YXRpc3Rp
Y3MgaXMgcG9wdWxhdGVkIG9ubHkgaWYgJ1dlYktpdE1lbW9yeUluZm9FbmFibGVkJworICAgICAg
ICBwcmVmZXJlbmNlIGlzIHNldC4KKworICAgICAgICAnY29uc29sZS5tZW1vcnknIGlzIGtlcHQg
dW50aWwgV2ViIFRpbWluZyBvYmplY3QgYmVjb21lcyB2aXNpYmxlIGJ5CisgICAgICAgIGRlZmF1
bHQgKGN1cnJlbnRseSBpdCBpcyBoaWRkZW4gdW5kZXIgY29tcGlsZS10aW1lIGZsYWcpLiAgVGhl
c2Ugc3RhdHMKKyAgICAgICAgYXJlIGd1YXJkZWQgd2l0aCB0aGUgc2FtZSBwcmVmZXJlbmNlLgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTYxNwor
CisgICAgICAgICogYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xlQ3VzdG9tLmNwcDoKKyAgICAgICAgKiBwYWdlL0Nv
bnNvbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29uc29sZTo6ZGlzY29ubmVjdEZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkNvbnNvbGU6Om1lbW9yeSk6CisgICAgICAgICogcGFnZS9Db25z
b2xlLmg6CisgICAgICAgICogcGFnZS9Db25zb2xlLmlkbDoKKyAgICAgICAgKiBwYWdlL01lbW9y
eUluZm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVtb3J5SW5mbzo6TWVtb3J5SW5mbyk6Cisg
ICAgICAgICogcGFnZS9NZW1vcnlJbmZvLmg6CisgICAgICAgIChXZWJDb3JlOjpNZW1vcnlJbmZv
OjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvUGVyZm9ybWFuY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZXJmb3JtYW5jZTo6bWVtb3J5KToKKyAgICAgICAgKiBwYWdlL1BlcmZvcm1hbmNlLmg6CisgICAg
ICAgICogcGFnZS9QZXJmb3JtYW5jZS5pZGw6CisgICAgICAgICogcGFnZS9TZXR0aW5ncy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6U2V0dGluZ3MpOgorICAgICAgICAqIHBhZ2Uv
U2V0dGluZ3MuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNldHRpbmdzOjpzZXRNZW1vcnlJbmZvRW5h
YmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpTZXR0aW5nczo6bWVtb3J5SW5mb0VuYWJsZWQpOgor
CiAyMDEwLTA3LTA2ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NvbnNvbGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0NvbnNvbGVDdXN0b20uY3BwCmluZGV4IGI5YjQwN2MuLjNhZDM0YTMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDb25zb2xlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ29uc29sZUN1c3RvbS5jcHAKQEAgLTI4LDkgKzI4LDcgQEAKICNpbmNsdWRlICJK
U0NvbnNvbGUuaCIKIAogI2luY2x1ZGUgIkNvbnNvbGUuaCIKLSNpbmNsdWRlICJKU01lbW9yeUlu
Zm8uaCIKICNpbmNsdWRlICJKU1NjcmlwdFByb2ZpbGUuaCIKLSNpbmNsdWRlICJNZW1vcnlJbmZv
LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q2FsbFN0YWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0UHJvZmls
ZS5oIgogI2luY2x1ZGUgPHJ1bnRpbWUvSlNBcnJheS5oPgpAQCAtNTcsOSArNTUsNCBAQCBKU1Zh
bHVlIEpTQ29uc29sZTo6cHJvZmlsZXMoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogCiAjZW5kaWYK
IAotSlNWYWx1ZSBKU0NvbnNvbGU6Om1lbW9yeShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIHRvSlMoZXhlYywgTWVtb3J5SW5mbzo6Y3JlYXRlKCkpOwotfQotCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENvbnNvbGVDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDb25zb2xl
Q3VzdG9tLmNwcAppbmRleCA3ZDFjZmMxLi45MDI2NDIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENvbnNvbGVDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q29uc29sZUN1c3RvbS5jcHAKQEAgLTMzLDEwICszMyw4IEBACiAjaW5j
bHVkZSAiVjhDb25zb2xlLmgiCiAKICNpbmNsdWRlICJDb25zb2xlLmgiCi0jaW5jbHVkZSAiTWVt
b3J5SW5mby5oIgogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKICNpbmNsdWRlICJWOEJpbmRp
bmcuaCIKLSNpbmNsdWRlICJWOE1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJWOFByb3h5LmgiCiAj
aW5jbHVkZSAiVjhTY3JpcHRQcm9maWxlLmgiCiAKQEAgLTU3LDEwICs1NSw0IEBAIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBWOENvbnNvbGU6OnByb2ZpbGVzQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2Fs
PHY4OjpTdHJpbmc+IG5hCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Q29uc29sZTo6bWVtb3J5QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJp
bmc+LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJikKLXsKLSAgICBJTkNfU1RBVFMoIkRPTS5Db25z
b2xlLm1lbW9yeUFjY2Vzc29yR2V0dGVyIik7Ci0gICAgcmV0dXJuIHRvVjgoTWVtb3J5SW5mbzo6
Y3JlYXRlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BhZ2UvQ29uc29sZS5jcHAgYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5jcHAKaW5kZXggMWQ2
YzA5NS4uNDIzNDc3YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCisrKyBi
L1dlYkNvcmUvcGFnZS9Db25zb2xlLmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVUcmVlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJQYWdlLmgi
CiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAg
LTYxLDYgKzYyLDggQEAgRnJhbWUqIENvbnNvbGU6OmZyYW1lKCkgY29uc3QKIAogdm9pZCBDb25z
b2xlOjpkaXNjb25uZWN0RnJhbWUoKQogeworICAgIGlmIChtX21lbW9yeSkKKyAgICAgICAgbV9t
ZW1vcnkgPSAwOwogICAgIG1fZnJhbWUgPSAwOwogfQogCkBAIC00NTYsNiArNDU5LDEyIEBAIHZv
aWQgQ29uc29sZTo6d2FybihTY3JpcHRDYWxsU3RhY2sqIGNhbGxTdGFjaykKICAgICBhZGRNZXNz
YWdlKExvZ01lc3NhZ2VUeXBlLCBXYXJuaW5nTWVzc2FnZUxldmVsLCBjYWxsU3RhY2spOwogfQog
CitNZW1vcnlJbmZvKiBDb25zb2xlOjptZW1vcnkoKSBjb25zdAoreworICAgIG1fbWVtb3J5ID0g
TWVtb3J5SW5mbzo6Y3JlYXRlKG1fZnJhbWUpOworICAgIHJldHVybiBtX21lbW9yeS5nZXQoKTsK
K30KKwogc3RhdGljIGJvb2wgcHJpbnRFeGNlcHRpb25zID0gZmFsc2U7CiAKIGJvb2wgQ29uc29s
ZTo6c2hvdWxkUHJpbnRFeGNlcHRpb25zKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25z
b2xlLmggYi9XZWJDb3JlL3BhZ2UvQ29uc29sZS5oCmluZGV4IDA0ZTc0M2UuLjNlMDAwNTAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmgKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNv
bGUuaApAQCAtMjksOCArMjksOCBAQAogI2lmbmRlZiBDb25zb2xlX2gKICNkZWZpbmUgQ29uc29s
ZV9oCiAKKyNpbmNsdWRlICJNZW1vcnlJbmZvLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKLQogI2luY2x1ZGUgIlNjcmlwdFByb2ZpbGUuaCIKIAogI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CkBAIC00Myw3ICs0Myw2IEBAIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxTY3JpcHRQcm9m
aWxlPiA+IFByb2ZpbGVzQXJyYXk7CiAjZW5kaWYKIAogY2xhc3MgRnJhbWU7Ci1jbGFzcyBNZW1v
cnlJbmZvOwogY2xhc3MgUGFnZTsKIGNsYXNzIFN0cmluZzsKIGNsYXNzIFNjcmlwdENhbGxTdGFj
azsKQEAgLTExNiw2ICsxMTUsOCBAQCBwdWJsaWM6CiAgICAgY29uc3QgUHJvZmlsZXNBcnJheSYg
cHJvZmlsZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVzOyB9CiAjZW5kaWYKIAorICAgIE1l
bW9yeUluZm8qIG1lbW9yeSgpIGNvbnN0OworCiBwcml2YXRlOgogICAgIGlubGluZSBQYWdlKiBw
YWdlKCkgY29uc3Q7CiAgICAgdm9pZCBhZGRNZXNzYWdlKE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2
ZWwsIFNjcmlwdENhbGxTdGFjayosIGJvb2wgYWNjZXB0Tm9Bcmd1bWVudHMgPSBmYWxzZSk7CkBA
IC0xMjYsNiArMTI3LDcgQEAgcHJpdmF0ZToKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dF
UikKICAgICBQcm9maWxlc0FycmF5IG1fcHJvZmlsZXM7CiAjZW5kaWYKKyAgICBtdXRhYmxlIFJl
ZlB0cjxNZW1vcnlJbmZvPiBtX21lbW9yeTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9Db25zb2xlLmlkbCBiL1dlYkNvcmUvcGFnZS9Db25z
b2xlLmlkbAppbmRleCAxNTA2MjEwLi5iNzlmZjUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2Uv
Q29uc29sZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL0NvbnNvbGUuaWRsCkBAIC02MSw3ICs2MSw3
IEBAIG1vZHVsZSB3aW5kb3cgewogICAgICAgICBbQ3VzdG9tQXJndW1lbnRIYW5kbGluZ10gdm9p
ZCBncm91cENvbGxhcHNlZCgpOwogICAgICAgICB2b2lkIGdyb3VwRW5kKCk7CiAKLSAgICAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21HZXR0ZXJdIE1lbW9yeUluZm8gbWVtb3J5OworICAg
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgTWVtb3J5SW5mbyBtZW1vcnk7CiAgICAgfTsKIAogfQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL01lbW9yeUluZm8uY3BwIGIvV2ViQ29yZS9wYWdlL01l
bW9yeUluZm8uY3BwCmluZGV4IDAxMGExOWMuLmMyMjQ3YjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGFnZS9NZW1vcnlJbmZvLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvTWVtb3J5SW5mby5jcHAKQEAg
LTMxLDE3ICszMSwyMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1lbW9yeUlu
Zm8uaCIKIAorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiU2NyaXB0R0NFdmVudC5oIgor
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotTWVtb3J5SW5m
bzo6TWVtb3J5SW5mbygpCitNZW1vcnlJbmZvOjpNZW1vcnlJbmZvKEZyYW1lKiBmcmFtZSkKICAg
ICAgICAgOiBtX3RvdGFsSlNIZWFwU2l6ZSgwKSwKICAgICAgICAgICBtX3VzZWRKU0hlYXBTaXpl
KDApCiB7CisgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zZXR0aW5ncygpICYmIGZyYW1lLT5zZXR0
aW5ncygpLT5tZW1vcnlJbmZvRW5hYmxlZCgpKSB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKLSAg
ICBTY3JpcHRHQ0V2ZW50OjpnZXRIZWFwU2l6ZShtX3VzZWRKU0hlYXBTaXplLCBtX3RvdGFsSlNI
ZWFwU2l6ZSk7CisgICAgICAgIFNjcmlwdEdDRXZlbnQ6OmdldEhlYXBTaXplKG1fdXNlZEpTSGVh
cFNpemUsIG1fdG90YWxKU0hlYXBTaXplKTsKICNlbmRpZgorICAgIH0KIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL01lbW9yeUluZm8uaCBiL1dl
YkNvcmUvcGFnZS9NZW1vcnlJbmZvLmgKaW5kZXggZTllMGZhNS4uNjE1ZTk1MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wYWdlL01lbW9yeUluZm8uaAorKysgYi9XZWJDb3JlL3BhZ2UvTWVtb3J5SW5m
by5oCkBAIC0zNiwxNSArMzYsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBG
cmFtZTsKKwogY2xhc3MgTWVtb3J5SW5mbyA6IHB1YmxpYyBSZWZDb3VudGVkPE1lbW9yeUluZm8+
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZW1vcnlJbmZvPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZihuZXcgTWVtb3J5SW5mbygpKTsgfQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPE1lbW9yeUluZm8+IGNyZWF0ZShGcmFtZSogZnJhbWUpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyBNZW1vcnlJbmZvKGZyYW1lKSk7IH0KIAogICAgIHNpemVfdCB0b3RhbEpTSGVhcFNpemUoKSBj
b25zdCB7IHJldHVybiBtX3RvdGFsSlNIZWFwU2l6ZTsgfQogICAgIHNpemVfdCB1c2VkSlNIZWFw
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZEpTSGVhcFNpemU7IH0KIAogcHJpdmF0ZToKLSAg
ICBNZW1vcnlJbmZvKCk7CisgICAgTWVtb3J5SW5mbyhGcmFtZSopOwogCiAgICAgc2l6ZV90IG1f
dG90YWxKU0hlYXBTaXplOwogICAgIHNpemVfdCBtX3VzZWRKU0hlYXBTaXplOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcCBiL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZS5jcHAKaW5kZXggYzE5Y2U4Zi4uYzQyMzRhNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL1Bl
cmZvcm1hbmNlLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3BwCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIK
IAorI2luY2x1ZGUgIk1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uLmgiCiAjaW5j
bHVkZSAiVGltaW5nLmgiCiAKQEAgLTUyLDYgKzUzLDggQEAgRnJhbWUqIFBlcmZvcm1hbmNlOjpm
cmFtZSgpIGNvbnN0CiAKIHZvaWQgUGVyZm9ybWFuY2U6OmRpc2Nvbm5lY3RGcmFtZSgpCiB7Cisg
ICAgaWYgKG1fbWVtb3J5KQorICAgICAgICBtX21lbW9yeSA9IDA7CiAgICAgaWYgKG1fbmF2aWdh
dGlvbikgewogICAgICAgICBtX25hdmlnYXRpb24tPmRpc2Nvbm5lY3RGcmFtZSgpOwogICAgICAg
ICBtX25hdmlnYXRpb24gPSAwOwpAQCAtNjMsNiArNjYsMTIgQEAgdm9pZCBQZXJmb3JtYW5jZTo6
ZGlzY29ubmVjdEZyYW1lKCkKICAgICBtX2ZyYW1lID0gMDsKIH0KIAorTWVtb3J5SW5mbyogUGVy
Zm9ybWFuY2U6Om1lbW9yeSgpIGNvbnN0Cit7CisgICAgbV9tZW1vcnkgPSBNZW1vcnlJbmZvOjpj
cmVhdGUobV9mcmFtZSk7CisgICAgcmV0dXJuIG1fbWVtb3J5LmdldCgpOworfQorCiBOYXZpZ2F0
aW9uKiBQZXJmb3JtYW5jZTo6bmF2aWdhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKCFtX25hdmln
YXRpb24pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBiL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZS5oCmluZGV4IGYzMTcwNzYuLjk3MzZmZTcgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oCisrKyBiL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5o
CkBAIC0zMyw2ICszMyw3IEBACiAKICNpZiBFTkFCTEUoV0VCX1RJTUlORykKIAorI2luY2x1ZGUg
Ik1lbW9yeUluZm8uaCIKICNpbmNsdWRlICJOYXZpZ2F0aW9uLmgiCiAjaW5jbHVkZSAiVGltaW5n
LmgiCiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTQ4LDEyICs0OSwxNCBAQCBwdWJs
aWM6CiAgICAgRnJhbWUqIGZyYW1lKCkgY29uc3Q7CiAgICAgdm9pZCBkaXNjb25uZWN0RnJhbWUo
KTsKIAorICAgIE1lbW9yeUluZm8qIG1lbW9yeSgpIGNvbnN0OwogICAgIE5hdmlnYXRpb24qIG5h
dmlnYXRpb24oKSBjb25zdDsKICAgICBUaW1pbmcqIHRpbWluZygpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIFBlcmZvcm1hbmNlKEZyYW1lKik7CiAKKyAgICBtdXRhYmxlIFJlZlB0cjxNZW1vcnlJ
bmZvPiBtX21lbW9yeTsKICAgICBtdXRhYmxlIFJlZlB0cjxOYXZpZ2F0aW9uPiBtX25hdmlnYXRp
b247CiAgICAgbXV0YWJsZSBSZWZQdHI8VGltaW5nPiBtX3RpbWluZzsKICAgICBGcmFtZSogbV9m
cmFtZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwgYi9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2UuaWRsCmluZGV4IDM4ODVlMmMuLmZmZThiNmYgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwKKysrIGIvV2ViQ29yZS9wYWdlL1BlcmZvcm1h
bmNlLmlkbApAQCAtMzQsNiArMzQsNyBAQCBtb2R1bGUgd2luZG93IHsKICAgICBpbnRlcmZhY2Ug
W0NvbmRpdGlvbmFsPVdFQl9USU1JTkcsIE9taXRDb25zdHJ1Y3Rvcl0gUGVyZm9ybWFuY2Ugewog
ICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgTmF2aWdhdGlvbiBuYXZpZ2F0aW9uOwogICAgICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgVGltaW5nIHRpbWluZzsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIE1lbW9yeUluZm8gbWVtb3J5OwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5jcHAgYi9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGYx
MDA2ODguLjNhOTQyZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysr
IGIvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcApAQCAtMTM2LDYgKzEzNiw3IEBAIFNldHRpbmdz
OjpTZXR0aW5ncyhQYWdlKiBwYWdlKQogICAgICwgbV9odG1sNVRyZWVCdWlsZGVyRW5hYmxlZChm
YWxzZSkgLy8gV2lsbCBiZSBkZWxldGVkIHNvb24sIGRvIG5vdCB1c2UuCiAgICAgLCBtX3BhZ2lu
YXRlRHVyaW5nTGF5b3V0RW5hYmxlZChmYWxzZSkKICAgICAsIG1fZG5zUHJlZmV0Y2hpbmdFbmFi
bGVkKHRydWUpCisgICAgLCBtX21lbW9yeUluZm9FbmFibGVkKGZhbHNlKQogewogICAgIC8vIEEg
RnJhbWUgbWF5IG5vdCBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQsIHNvIHdlIGluaXRpYWxpemUgdGhl
IEF0b21pY1N0cmluZyAKICAgICAvLyBoYXNoIGJlZm9yZSB0cnlpbmcgdG8gdXNlIGl0LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmggYi9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAppbmRleCAyYWM1ZDI3Li5iNDJmZTAyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvU2V0dGlu
Z3MuaAorKysgYi9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaApAQCAtMzEwLDYgKzMxMCw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRQYWdpbmF0ZUR1cmluZ0xheW91dEVu
YWJsZWQoYm9vbCBmbGFnKSB7IG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkID0gZmxhZzsg
fQogICAgICAgICBib29sIHBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkOyB9CiAKKyAgICAgICAgdm9pZCBzZXRN
ZW1vcnlJbmZvRW5hYmxlZChib29sIGZsYWcpIHsgbV9tZW1vcnlJbmZvRW5hYmxlZCA9IGZsYWc7
IH0KKyAgICAgICAgYm9vbCBtZW1vcnlJbmZvRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWVt
b3J5SW5mb0VuYWJsZWQ7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIFBhZ2UqIG1fcGFnZTsK
ICAgICAgICAgCkBAIC0zOTMsNiArMzk2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICBib29sIG1faHRtbDVUcmVlQnVpbGRlckVuYWJsZWQ6IDE7IC8vIFdpbGwgYmUgZGVsZXRlZCBz
b29uLCBkbyBub3QgdXNlLgogICAgICAgICBib29sIG1fcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFi
bGVkIDogMTsKICAgICAgICAgYm9vbCBtX2Ruc1ByZWZldGNoaW5nRW5hYmxlZCA6IDE7CisgICAg
ICAgIGJvb2wgbV9tZW1vcnlJbmZvRW5hYmxlZDogMTsKICAgICAKICNpZiBVU0UoU0FGQVJJX1RI
RU1FKQogICAgICAgICBzdGF0aWMgYm9vbCBnU2hvdWxkUGFpbnROYXRpdmVDb250cm9sczsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCmluZGV4IDI5Y2Y4ZjQuLjU0ODQ2M2UgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEwLTA3LTA3ICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBK
UyBtZW1vcnkgc3RhdHMgYXZhaWxhYmxlIHZpYSAnUGVyZm9ybWFuY2UnIG9iamVjdCAoV2ViIFRp
bWluZykuCisgICAgICAgIFRoaXMgc3RhdGlzdGljcyBpcyBwb3B1bGF0ZWQgb25seSBpZiAnV2Vi
S2l0TWVtb3J5SW5mb0VuYWJsZWQnCisgICAgICAgIHByZWZlcmVuY2UgaXMgc2V0LgorCisgICAg
ICAgICdjb25zb2xlLm1lbW9yeScgaXMga2VwdCB1bnRpbCBXZWIgVGltaW5nIG9iamVjdCBiZWNv
bWVzIHZpc2libGUgYnkKKyAgICAgICAgZGVmYXVsdCAoY3VycmVudGx5IGl0IGlzIGhpZGRlbiB1
bmRlciBjb21waWxlLXRpbWUgZmxhZykuICBUaGVzZSBzdGF0cworICAgICAgICBhcmUgZ3VhcmRl
ZCB3aXRoIHRoZSBzYW1lIHByZWZlcmVuY2UuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNjE3CisKKyAgICAgICAgKiBwdWJsaWMvV2ViU2V0dGlu
Z3MuaDoKKyAgICAgICAgKiBzcmMvV2ViU2V0dGluZ3NJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViU2V0dGluZ3NJbXBsOjpzZXRNZW1vcnlJbmZvRW5hYmxlZCk6CisgICAgICAgICogc3Jj
L1dlYlNldHRpbmdzSW1wbC5oOgorCiAyMDEwLTA3LTA1ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVy
eXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmggYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlNldHRpbmdzLmgKaW5kZXggZGU4OTVlMS4uMzJjZWZhMSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJTZXR0aW5ncy5oCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViU2V0dGluZ3MuaApAQCAtOTIsNiArOTIsNyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihFZGl0aW5nQmVoYXZpb3IpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQoYm9v
bCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRIVE1MNVBhcnNlckVuYWJsZWQoYm9vbCkgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKSA9IDA7CiAKIHBy
b3RlY3RlZDoKICAgICB+V2ViU2V0dGluZ3MoKSB7IH0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0
dGluZ3NJbXBsLmNwcAppbmRleCA3ZTg5YTc3Li42YTAyZWQ2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJTZXR0aW5nc0ltcGwuY3BwCkBAIC0yODQsNCArMjg0LDkgQEAgdm9pZCBXZWJTZXR0aW5n
c0ltcGw6OnNldEhUTUw1UGFyc2VyRW5hYmxlZChib29sIGVuYWJsZWQpCiAgICAgbV9zZXR0aW5n
cy0+c2V0SFRNTDVQYXJzZXJFbmFibGVkKGVuYWJsZWQpOwogfQogCit2b2lkIFdlYlNldHRpbmdz
SW1wbDo6c2V0TWVtb3J5SW5mb0VuYWJsZWQoYm9vbCBlbmFibGVkKQoreworICAgIG1fc2V0dGlu
Z3MtPnNldE1lbW9yeUluZm9FbmFibGVkKGVuYWJsZWQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlNldHRpbmdzSW1wbC5oCmluZGV4IDcwYmQ3OTIuLmZl
NWRiNTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViU2V0dGluZ3NJbXBsLmgK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJTZXR0aW5nc0ltcGwuaApAQCAtODgsNiArODgs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihFZGl0aW5n
QmVoYXZpb3IpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nRW5h
YmxlZChib29sKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SFRNTDVQYXJzZXJFbmFibGVkKGJvb2wp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sKTsKIAogcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpTZXR0aW5ncyogbV9zZXR0aW5nczsKZGlmZiAtLWdpdCBhL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzU5ZDhiNC4uM2Y5
YjZmNiAxMDA2NDQKLS0tIGEvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0wNy0wNyAgTWlraGFpbCBOYWdhbm92ICA8
bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1ha2UgSlMgbWVtb3J5IHN0YXRzIGF2YWlsYWJsZSB2aWEgJ1BlcmZv
cm1hbmNlJyBvYmplY3QgKFdlYiBUaW1pbmcpLgorICAgICAgICBUaGlzIHN0YXRpc3RpY3MgaXMg
cG9wdWxhdGVkIG9ubHkgaWYgJ1dlYktpdE1lbW9yeUluZm9FbmFibGVkJworICAgICAgICBwcmVm
ZXJlbmNlIGlzIHNldC4KKworICAgICAgICAnY29uc29sZS5tZW1vcnknIGlzIGtlcHQgdW50aWwg
V2ViIFRpbWluZyBvYmplY3QgYmVjb21lcyB2aXNpYmxlIGJ5CisgICAgICAgIGRlZmF1bHQgKGN1
cnJlbnRseSBpdCBpcyBoaWRkZW4gdW5kZXIgY29tcGlsZS10aW1lIGZsYWcpLiAgVGhlc2Ugc3Rh
dHMKKyAgICAgICAgYXJlIGd1YXJkZWQgd2l0aCB0aGUgc2FtZSBwcmVmZXJlbmNlLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTYxNworCisgICAg
ICAgICogV2ViS2l0Lm9yZGVyOgorICAgICAgICAqIFdlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQ
cml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbToKKyAgICAgICAg
KCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNl
cyBtZW1vcnlJbmZvRW5hYmxlZF0pOgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRNZW1v
cnlJbmZvRW5hYmxlZDpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0
ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBf
cHJlZmVyZW5jZXNDaGFuZ2VkTm90aWZpY2F0aW9uOl0pOgorCiAyMDEwLTA2LTIzICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBF
cmljIENhcmxzb24uCmRpZmYgLS1naXQgYS9XZWJLaXQvbWFjL1dlYktpdC5vcmRlciBiL1dlYktp
dC9tYWMvV2ViS2l0Lm9yZGVyCmluZGV4IDE3NzY2MTYuLmMyYjVmNWQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9tYWMvV2ViS2l0Lm9yZGVyCisrKyBiL1dlYktpdC9tYWMvV2ViS2l0Lm9yZGVyCkBAIC0y
ODMsNiArMjgzLDcgQEAgX1dLQXBwVmVyc2lvbkNoZWNrTGVzc1RoYW4KIC1bV2ViUHJlZmVyZW5j
ZXMoV2ViUHJpdmF0ZSkgc2hvd1JlcGFpbnRDb3VudGVyXQogLVtXZWJQcmVmZXJlbmNlcyhXZWJQ
cml2YXRlKSBwbHVnaW5BbGxvd2VkUnVuVGltZV0KIC1bV2ViUHJlZmVyZW5jZXMoV2ViUHJpdmF0
ZSkgd2ViR0xFbmFibGVkXQorLVtXZWJQcmVmZXJlbmNlcyhXZWJQcml2YXRlKSBtZW1vcnlJbmZv
RW5hYmxlZF0KIC1bV2ViUHJlZmVyZW5jZXMoV2ViUHJpdmF0ZSkgaXNGcmFtZUZsYXR0ZW5pbmdF
bmFibGVkXQogLVtXZWJWaWV3IHNldE1haW50YWluc0JhY2tGb3J3YXJkTGlzdDpdCiAtW1dlYlZp
ZXcgc2V0VUlEZWxlZ2F0ZTpdCkBAIC0xODgzLDYgKzE4ODQsNyBAQCBfX1pOMjRXZWJEYXRhYmFz
ZVRyYWNrZXJDbGllbnQyNWRpc3BhdGNoRGlkTW9kaWZ5RGF0YWJhc2VFUE43V2ViQ29yZTE0U2Vj
dXJpdHlPcgogLVtXZWJQcmVmZXJlbmNlcyBzZXRVc2VzUGFnZUNhY2hlOl0KIC1bV2ViUHJlZmVy
ZW5jZXMoV2ViUHJpdmF0ZSkgc2V0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0VuYWJsZWQ6XQogLVtX
ZWJQcmVmZXJlbmNlcyhXZWJQcml2YXRlKSBzZXRXZWJHTEVuYWJsZWQ6XQorLVtXZWJQcmVmZXJl
bmNlcyhXZWJQcml2YXRlKSBzZXRNZW1vcnlJbmZvRW5hYmxlZDpdCiArW1dlYlBsdWdpbkRhdGFi
YXNlIHNldEFkZGl0aW9uYWxXZWJQbHVnSW5QYXRoczpdCiAtW1dlYkRlZmF1bHRVSURlbGVnYXRl
IHdlYlZpZXc6ZGlkRHJhd1JlY3Q6XQogLVtXZWJWaWV3KFdlYlByaXZhdGUpIF9zZXRQb3N0c0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdOb3RpZmljYXRpb25zOl0KZGlmZiAtLWdpdCBhL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCBiL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCBhMjhiZTQ5Li40MTc1YTVkIDEwMDY0
NAotLS0gYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysr
IGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC05Nyw2
ICs5Nyw3IEBACiAjZGVmaW5lIFdlYktpdEhUTUw1VHJlZUJ1aWxkZXJFbmFibGVkUHJlZmVyZW5j
ZUtleSBAIldlYktpdEhUTUw1VHJlZUJ1aWxkZXJFbmFibGVkIiAvLyBUZW1wb3JhcnksIGRvIG5v
dCB1c2UuCiAjZGVmaW5lIFdlYktpdFBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZFByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRQYWdpbmF0ZUR1cmluZ0xheW91dEVuYWJsZWQiCiAjZGVmaW5lIFdlYktp
dEROU1ByZWZldGNoaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRETlNQcmVmZXRjaGlu
Z0VuYWJsZWQiCisjZGVmaW5lIFdlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSBA
IldlYktpdE1lbW9yeUluZm9FbmFibGVkIgogCiAvLyBUaGVzZSBhcmUgcHJpdmF0ZSBib3RoIGJl
Y2F1c2UgY2FsbGVycyBzaG91bGQgYmUgdXNpbmcgdGhlIGNvdmVyIG1ldGhvZHMgYW5kIGJlY2F1
c2UgdGhlCiAvLyBjb3ZlciBtZXRob2RzIHRoZW1zZWx2ZXMgYXJlIHByaXZhdGUuCmRpZmYgLS1n
aXQgYS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5kZXggYTM3NjQ1OC4uNmY2MjMwYiAxMDA2NDQKLS0t
IGEvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtMzYzLDYgKzM2Myw3IEBAIHN0YXRpYyBXZWJD
YWNoZU1vZGVsIGNhY2hlTW9kZWxGb3JNYWluQnVuZGxlKHZvaWQpCiAgICAgICAgIFtOU051bWJl
ciBudW1iZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0SFRNTDVQYXJzZXJFbmFibGVkUHJlZmVyZW5j
ZUtleSwKICAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRIVE1M
NVRyZWVCdWlsZGVyRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIFtOU051bWJlciBudW1i
ZXJXaXRoQm9vbDpZRVNdLCAgV2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkUHJlZmVyZW5jZUtl
eSwKKyAgICAgICAgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOk5PXSwgICBXZWJLaXRNZW1vcnlJ
bmZvRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIG5pbF07CiAKICAgICAvLyBUaGlzIHZh
bHVlIHNob3VsZG4ndCBldmVyIGNoYW5nZSwgd2hpY2ggaXMgYXNzdW1lZCBpbiB0aGUgaW5pdGlh
bGl6YXRpb24gb2YgV2ViS2l0UERGRGlzcGxheU1vZGVQcmVmZXJlbmNlS2V5IGFib3ZlCkBAIC0x
MjgxLDYgKzEyODIsMTYgQEAgc3RhdGljIE5TU3RyaW5nICpjbGFzc0lCQ3JlYXRvcklEID0gbmls
OwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0UGFnaW5hdGVEdXJp
bmdMYXlvdXRFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9CiAKKy0gKEJPT0wpbWVtb3J5SW5mb0Vu
YWJsZWQKK3sKKyAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRNZW1vcnlJ
bmZvRW5hYmxlZFByZWZlcmVuY2VLZXldOworfQorCistICh2b2lkKXNldE1lbW9yeUluZm9FbmFi
bGVkOihCT09MKWZsYWcKK3sKKyAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5Oldl
YktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleV07Cit9CisKIC0gKFdlYktpdEVkaXRp
bmdCZWhhdmlvcillZGl0aW5nQmVoYXZpb3IKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2Vi
S2l0RWRpdGluZ0JlaGF2aW9yPihbc2VsZiBfaW50ZWdlclZhbHVlRm9yS2V5OldlYktpdEVkaXRp
bmdCZWhhdmlvclByZWZlcmVuY2VLZXldKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1dlYktpdC9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlc1ByaXZhdGUuaAppbmRleCBlOTQ5NDNmLi4wNzNiMzY0IDEwMDY0NAotLS0gYS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0xOTEsNiArMTkxLDkgQEAgZXh0ZXJuIE5T
U3RyaW5nICpXZWJQcmVmZXJlbmNlc1JlbW92ZWROb3RpZmljYXRpb247CiAtIChCT09MKXVzZXNQ
cm94aWVkT3BlblBhbmVsOwogLSAodm9pZClzZXRVc2VzUHJveGllZE9wZW5QYW5lbDooQk9PTCll
bmFibGVkOwogCistIChCT09MKW1lbW9yeUluZm9FbmFibGVkOworLSAodm9pZClzZXRNZW1vcnlJ
bmZvRW5hYmxlZDooQk9PTCllbmFibGVkOworCiAvLyBPdGhlciBwcml2YXRlIG1ldGhvZHMKIC0g
KHZvaWQpX3Bvc3RQcmVmZXJlbmNlc0NoYW5nZXNOb3RpZmljYXRpb247CiArIChXZWJQcmVmZXJl
bmNlcyAqKV9nZXRJbnN0YW5jZUZvcklkZW50aWZpZXI6KE5TU3RyaW5nICopaWRlbnRpZmllcjsK
ZGlmZiAtLWdpdCBhL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYWRhMDBiNS4uMTRlYjUxMSAxMDA2NDQKLS0tIGEvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZp
ZXcubW0KQEAgLTE0MzMsNiArMTQzMyw3IEBAIHN0YXRpYyBib29sIGZhc3REb2N1bWVudFRlYXJk
b3duRW5hYmxlZCgpCiAgICAgc2V0dGluZ3MtPnNldEhUTUw1UGFyc2VyRW5hYmxlZChbcHJlZmVy
ZW5jZXMgaHRtbDVQYXJzZXJFbmFibGVkXSk7CiAgICAgc2V0dGluZ3MtPnNldEhUTUw1VHJlZUJ1
aWxkZXJFbmFibGVkX0RPX05PVF9VU0UoW3ByZWZlcmVuY2VzIGh0bWw1VHJlZUJ1aWxkZXJFbmFi
bGVkXSk7CiAgICAgc2V0dGluZ3MtPnNldFBhZ2luYXRlRHVyaW5nTGF5b3V0RW5hYmxlZChbcHJl
ZmVyZW5jZXMgcGFnaW5hdGVEdXJpbmdMYXlvdXRFbmFibGVkXSk7CisgICAgc2V0dGluZ3MtPnNl
dE1lbW9yeUluZm9FbmFibGVkKFtwcmVmZXJlbmNlcyBtZW1vcnlJbmZvRW5hYmxlZF0pOwogfQog
CiBzdGF0aWMgaW5saW5lIElNUCBnZXRNZXRob2QoaWQgbywgU0VMIHMpCmRpZmYgLS1naXQgYS9X
ZWJLaXQvd2luL0NoYW5nZUxvZyBiL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IGQ5NDNjYzYu
LmQwODI4NjcgMTAwNjQ0Ci0tLSBhL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC93
aW4vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTAtMDctMDcgIE1pa2hhaWwgTmFnYW5v
diAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNYWtlIEpTIG1lbW9yeSBzdGF0cyBhdmFpbGFibGUgdmlhICdQ
ZXJmb3JtYW5jZScgb2JqZWN0IChXZWIgVGltaW5nKS4KKyAgICAgICAgVGhpcyBzdGF0aXN0aWNz
IGlzIHBvcHVsYXRlZCBvbmx5IGlmICdXZWJLaXRNZW1vcnlJbmZvRW5hYmxlZCcKKyAgICAgICAg
cHJlZmVyZW5jZSBpcyBzZXQuCisKKyAgICAgICAgJ2NvbnNvbGUubWVtb3J5JyBpcyBrZXB0IHVu
dGlsIFdlYiBUaW1pbmcgb2JqZWN0IGJlY29tZXMgdmlzaWJsZSBieQorICAgICAgICBkZWZhdWx0
IChjdXJyZW50bHkgaXQgaXMgaGlkZGVuIHVuZGVyIGNvbXBpbGUtdGltZSBmbGFnKS4gIFRoZXNl
IHN0YXRzCisgICAgICAgIGFyZSBndWFyZGVkIHdpdGggdGhlIHNhbWUgcHJlZmVyZW5jZS4KKwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDE2MTcKKwor
ICAgICAgICAqIEludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGw6CisgICAgICAg
ICogSW50ZXJmYWNlcy9XZWJLaXQuaWRsOiBUb3VjaGVkIHRvIGVuZm9yY2UgLmlkbCByZS1idWls
ZC4KKyAgICAgICAgKiBXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQ
cmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1
bHRTZXR0aW5ncyk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6bWVtb3J5SW5mb0VuYWJsZWQp
OgorICAgICAgICAoV2ViUHJlZmVyZW5jZXM6OnNldE1lbW9yeUluZm9FbmFibGVkKToKKyAgICAg
ICAgKiBXZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAo
V2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAxMC0wNy0wMyAgSm9uIEhv
bmV5Y3V0dCAgPGpob25leWN1dHRAYXBwbGUuY29tPgogCiAgICAgICAgIFRoZSBtaXNzaW5nIHBs
dWctaW4gaW5kaWNhdG9yIHNob3VsZCBiZSBjbGlja2FibGUKZGlmZiAtLWdpdCBhL1dlYktpdC93
aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1dlYktpdC93aW4vSW50
ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAppbmRleCAxMTljM2ZmLi5iY2E4ZDZm
IDEwMDY0NAotLS0gYS9XZWJLaXQvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0
ZS5pZGwKKysrIGIvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aWRsCkBAIC0xMTUsNCArMTE1LDcgQEAgaW50ZXJmYWNlIElXZWJQcmVmZXJlbmNlc1ByaXZhdGUg
OiBJVW5rbm93bgogCiAgICAgSFJFU1VMVCBpc0ROU1ByZWZldGNoaW5nRW5hYmxlZChbb3V0LCBy
ZXR2YWxdIEJPT0wgKmVuYWJsZWQpOwogICAgIEhSRVNVTFQgc2V0RE5TUHJlZmV0Y2hpbmdFbmFi
bGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKKworICAgIEhSRVNVTFQgbWVtb3J5SW5mb0VuYWJsZWQo
W291dCwgcmV0dmFsXSBCT09MICplbmFibGVkKTsKKyAgICBIUkVTVUxUIHNldE1lbW9yeUluZm9F
bmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC93aW4vSW50
ZXJmYWNlcy9XZWJLaXQuaWRsIGIvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL1dlYktpdC5pZGwKaW5k
ZXggODkzODUwMS4uY2UyZjIxMyAxMDA2NDQKLS0tIGEvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL1dl
YktpdC5pZGwKKysrIGIvV2ViS2l0L3dpbi9JbnRlcmZhY2VzL1dlYktpdC5pZGwKQEAgLTMwMCwz
ICszMDAsNCBAQCBsaWJyYXJ5IFdlYktpdAogICAgICAgICBbZGVmYXVsdF0gaW50ZXJmYWNlIElX
ZWJVc2VyQ29udGVudFVSTFBhdHRlcm47CiAgICAgfQogfQorCmRpZmYgLS1naXQgYS9XZWJLaXQv
d2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaAppbmRleCA0MGM4NmMwLi5mNjI5MDVjIDEwMDY0NAotLS0gYS9XZWJLaXQv
d2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1dlYktpdC93aW4vV2ViUHJlZmVy
ZW5jZUtleXNQcml2YXRlLmgKQEAgLTE0NSwzICsxNDUsNSBAQAogI2RlZmluZSBXZWJLaXRDdXN0
b21EcmFnQ3Vyc29yc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRDdXN0b21EcmFnQ3Vyc29y
c0VuYWJsZWQiCiAKICNkZWZpbmUgV2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkUHJlZmVyZW5j
ZUtleSAiV2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkIgorCisjZGVmaW5lIFdlYktpdE1lbW9y
eUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0TWVtb3J5SW5mb0VuYWJsZWQiCmRpZmYg
LS1naXQgYS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmNwcCBiL1dlYktpdC93aW4vV2ViUHJl
ZmVyZW5jZXMuY3BwCmluZGV4IDEyYjBhNzIuLmExMDU1Y2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC93
aW4vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViUHJlZmVyZW5jZXMuY3Bw
CkBAIC0yNjMsNiArMjYzLDggQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1
bHRTZXR0aW5ncygpCiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIo
V2ViS2l0RE5TUHJlZmV0Y2hpbmdFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5UcnVl
KTsKIAorICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRNZW1v
cnlJbmZvRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOworCiAgICAgZGVm
YXVsdFNldHRpbmdzID0gZGVmYXVsdHM7CiB9CiAKQEAgLTE0ODUsNiArMTQ4NywxOCBAQCBIUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjppc0ROU1ByZWZldGNoaW5nRW5hYmxlZChCT09MKiBlbmFibGVk
KQogICAgIHJldHVybiBTX09LOwogfQogCitIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjptZW1vcnlJ
bmZvRW5hYmxlZChCT09MKiBlbmFibGVkKQoreworICAgICplbmFibGVkID0gYm9vbFZhbHVlRm9y
S2V5KENGU1RSKFdlYktpdE1lbW9yeUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSkpOworICAgIHJl
dHVybiBTX09LOworfQorCitIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRNZW1vcnlJbmZvRW5h
YmxlZChCT09MIGVuYWJsZWQpCit7CisgICAgc2V0Qm9vbFZhbHVlKENGU1RSKFdlYktpdE1lbW9y
eUluZm9FbmFibGVkUHJlZmVyZW5jZUtleSksIGVuYWJsZWQpOworICAgIHJldHVybiBTX09LOwor
fQorCiB2b2lkIFdlYlByZWZlcmVuY2VzOjp3aWxsQWRkVG9XZWJWaWV3KCkKIHsKICAgICArK21f
bnVtV2ViVmlld3M7CmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmggYi9X
ZWJLaXQvd2luL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggZmM1NzI0MS4uNDYzZTFiMyAxMDA2NDQK
LS0tIGEvV2ViS2l0L3dpbi9XZWJQcmVmZXJlbmNlcy5oCisrKyBiL1dlYktpdC93aW4vV2ViUHJl
ZmVyZW5jZXMuaApAQCAtNDIzLDYgKzQyMyw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKEJPT0wpOwogICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBpc0ROU1ByZWZldGNoaW5nRW5hYmxl
ZChCT09MKik7CiAKKyAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0TWVt
b3J5SW5mb0VuYWJsZWQoQk9PTCk7CisgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIG1lbW9yeUluZm9FbmFibGVkKEJPT0wqKTsKKwogICAgIC8vIFdlYlByZWZlcmVuY2VzCiAK
ICAgICAvLyBUaGlzIG1ldGhvZCBhY2Nlc3NlcyBhIGRpZmZlcmVudCBwcmVmZXJlbmNlIGtleSB0
aGFuIGRldmVsb3BlckV4dHJhc0VuYWJsZWQuCmRpZmYgLS1naXQgYS9XZWJLaXQvd2luL1dlYlZp
ZXcuY3BwIGIvV2ViS2l0L3dpbi9XZWJWaWV3LmNwcAppbmRleCA0NDFmMGYyLi40ODIxOTU0IDEw
MDY0NAotLS0gYS9XZWJLaXQvd2luL1dlYlZpZXcuY3BwCisrKyBiL1dlYktpdC93aW4vV2ViVmll
dy5jcHAKQEAgLTQ3NTEsNiArNDc1MSwxMSBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZl
cmVuY2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJl
dHVybiBocjsKICAgICBzZXR0aW5ncy0+c2V0RE5TUHJlZmV0Y2hpbmdFbmFibGVkKGVuYWJsZWQp
OwogCisgICAgaHIgPSBwcmVmc1ByaXZhdGUtPm1lbW9yeUluZm9FbmFibGVkKCZlbmFibGVkKTsK
KyAgICBpZiAoRkFJTEVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGhyOworICAgIHNldHRpbmdzLT5z
ZXRNZW1vcnlJbmZvRW5hYmxlZChlbmFibGVkKTsKKwogICAgIGlmICghbV9jbG9zZVdpbmRvd1Rp
bWVyKQogICAgICAgICBtX21haW5GcmFtZS0+aW52YWxpZGF0ZSgpOyAvLyBGSVhNRQogCg==
</data>
<flag name="review"
          id="48402"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>