<?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>153230</bug_id>
          
          <creation_ts>2016-01-19 03:06:42 -0800</creation_ts>
          <short_desc>Network cache: old pages returned by disk cache on history navigation after session is restored</short_desc>
          <delta_ts>2019-06-05 05:08:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142916</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=155965</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=198561</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155507</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1156586</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-19 03:06:42 -0800</bug_when>
    <thetext>Since r181734, the network cache never revalidates resources for history navigation. This is good for the memory cache, but in the case of disk cache, we might end up with outdated pages when restoring the session. As anttik pointed out on IRC we would still want to not revalidate resources for history navigation after a web process crash, especially important on mobile, in which case the page and memory caches are lost. But when restoring the session at browser startup we need a way to ensure pages are revalidated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156612</commentid>
    <comment_count>1</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-01-19 09:43:13 -0800</bug_when>
    <thetext>This change was done on purpose. When restoring a session, one would expect to see the same content as last time. This is also beneficial to battery life.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156613</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-01-19 09:46:06 -0800</bug_when>
    <thetext>Also on iOS, it would be difficult to distinguish Safari getting killed (due to memory constraints) from the browser being restarted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156926</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-19 23:56:20 -0800</bug_when>
    <thetext>(In reply to comment #1)
&gt; This change was done on purpose. When restoring a session, one would expect
&gt; to see the same content as last time. This is also beneficial to battery
&gt; life.

Yes, I know it was on done purpose, but I disagree people expect to see old contents. That&apos;s probably what I expect when I open the browser in my mobile, but not in my desktop. I save the session to ensure I don&apos;t lose the tabs I had opened when I closed the browser, but I want to see the updated contents when I open the browser again the next day, for example. I was very surprised the first time it happened to me. At least for bugs I knew there were changes thanks to the bug mail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1156942</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-20 08:28:19 -0800</bug_when>
    <thetext>Chris, are you open to adding an option for API users to choose the desired behavior here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157223</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-20 23:08:19 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Chris, are you open to adding an option for API users to choose the desired
&gt; behavior here?

It&apos;s not just a matter of adding API, we need a way to figure out when you are doing a history navigation of an items restored from the session or not. It&apos;s obvious in the case of the first navigation after a session restore, but then you could go back/forward on any webview and you don&apos;t know if the item you are going to was restored from the session or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157314</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-01-21 09:37:45 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Chris, are you open to adding an option for API users to choose the desired
&gt; &gt; behavior here?
&gt; 
&gt; It&apos;s not just a matter of adding API, we need a way to figure out when you
&gt; are doing a history navigation of an items restored from the session or not.
&gt; It&apos;s obvious in the case of the first navigation after a session restore,
&gt; but then you could go back/forward on any webview and you don&apos;t know if the
&gt; item you are going to was restored from the session or not.

I personally do not understand the history navigation problem. On history navigation, we always returned potentially stale data. I don&apos;t think it matters if the history navigation happened after a session restore or not (or I misunderstood something).

About the Restoring from cache on session restore. we could support both behavior with a setting if needing (basically rolling out http://trac.webkit.org/changeset/181815 and making it conditional based on the new setting). To my knowledge, Safari 9 shipped with this behavior (session restore from the cache). There has not been much push back so far so I am not planning to go back to the previous behavior at this point. If there is push back though, we could restore the previous behavior on desktop.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157355</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-21 11:00:05 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I personally do not understand the history navigation problem. On history
&gt; navigation, we always returned potentially stale data. I don&apos;t think it
&gt; matters if the history navigation happened after a session restore or not
&gt; (or I misunderstood something).

I think it&apos;s OK for pages to be stale when loaded with the back/forward list -- that&apos;s the whole point of the page cache -- but when launching the browsers users expect the pages to be refreshed. At least that&apos;s certainly what we expect for Epiphany; do Safari users really want to see old pages on startup?

Are we using session restore improperly? We have started using it to save the session when closing the browser, and restore it when opening the browser.

&gt; About the Restoring from cache on session restore. we could support both
&gt; behavior with a setting if needing (basically rolling out
&gt; http://trac.webkit.org/changeset/181815 and making it conditional based on
&gt; the new setting). To my knowledge, Safari 9 shipped with this behavior
&gt; (session restore from the cache). There has not been much push back so far
&gt; so I am not planning to go back to the previous behavior at this point. If
&gt; there is push back though, we could restore the previous behavior on desktop.

Interesting... I suggest we go ahead and do this, especially since it looks like a fairly small amount of code to bring back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157369</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-01-21 11:17:35 -0800</bug_when>
    <thetext>&gt; There has not been much push back so far so I am not planning to go back to the previous behavior at this point.

Hmm, I wonder if that&apos;s why I have a feeling that making pages load properly after relaunching Mac Safari has become more fiddly recently. I have to manually reload pages after each restart/reboot/SU to make them actually load.

It is quite hard to realize what&apos;s going on, so providing feedback is more complicated than usual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157598</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-21 23:16:28 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #4)
&gt; &gt; &gt; Chris, are you open to adding an option for API users to choose the desired
&gt; &gt; &gt; behavior here?
&gt; &gt; 
&gt; &gt; It&apos;s not just a matter of adding API, we need a way to figure out when you
&gt; &gt; are doing a history navigation of an items restored from the session or not.
&gt; &gt; It&apos;s obvious in the case of the first navigation after a session restore,
&gt; &gt; but then you could go back/forward on any webview and you don&apos;t know if the
&gt; &gt; item you are going to was restored from the session or not.
&gt; 
&gt; I personally do not understand the history navigation problem. On history
&gt; navigation, we always returned potentially stale data. I don&apos;t think it
&gt; matters if the history navigation happened after a session restore or not
&gt; (or I misunderstood something).

The main difference is that for normal history navigation you are in the same session, so it&apos;s very unlikely that the page has changed, and you know you are visiting a page that you have recently loaded. In case of session restoring, the fact that we need to do a history navigation is actually an implementation detail, what the user does is just starting up the browser. The back forward list restored can be very old, so in that case when you navigate back, you expect to visit the same page, but definitely not the same contents (imagine you started your browser after several days).

&gt; About the Restoring from cache on session restore. we could support both
&gt; behavior with a setting if needing (basically rolling out
&gt; http://trac.webkit.org/changeset/181815 and making it conditional based on
&gt; the new setting). To my knowledge, Safari 9 shipped with this behavior
&gt; (session restore from the cache). There has not been much push back so far
&gt; so I am not planning to go back to the previous behavior at this point. If
&gt; there is push back though, we could restore the previous behavior on desktop.

I think it&apos;s a good idea to keep the current behaviour when recovering from a web process crash, when we are still in the same session but we have lost the page and memory caches. So, maybe we could do something smarter here, and mark somehow the items when they are created by session restore, and unmark them when they are first loaded, so that the first time we always revalidate them and then we don&apos;t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1157599</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-21 23:20:14 -0800</bug_when>
    <thetext>
(In reply to comment #8)
&gt; &gt; There has not been much push back so far so I am not planning to go back to the previous behavior at this point.
&gt; 
&gt; Hmm, I wonder if that&apos;s why I have a feeling that making pages load properly
&gt; after relaunching Mac Safari has become more fiddly recently. I have to
&gt; manually reload pages after each restart/reboot/SU to make them actually
&gt; load.

Yes, Antti told me the other day on IRC that ha had seen complains of Safari users about this new behavior.

&gt; It is quite hard to realize what&apos;s going on, so providing feedback is more
&gt; complicated than usual.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161978</commentid>
    <comment_count>11</comment_count>
      <attachid>270655</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 05:50:17 -0800</bug_when>
    <thetext>Created attachment 270655
Patch

This patch should fix the problem, without affecting session restore after a web process crash. If this behavior is still undesired for Mac/iOS we can just a way to query every port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162000</commentid>
    <comment_count>12</comment_count>
      <attachid>270655</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-04 09:24:00 -0800</bug_when>
    <thetext>Comment on attachment 270655
Patch

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

What I would suggest would be:
1. Revert http://trac.webkit.org/changeset/181815 so that our API has a &quot;allowStaleContent&quot; parameter again (which I find clearer that the approach in this patch)
2. Add a setting to decide in restoreSession() if we want to allow stale content or not.
3. Set this setting to True on iOS and False elsewhere.

&gt; Source/WebCore/history/HistoryItem.h:206
&gt; +    void setShouldRevalidateInDiskCacheOnly(bool revalidateInDiskCache) { m_shouldRevalidateInDiskCacheOnly = revalidateInDiskCache; }

I think the naming here is not very clear. Also, I am not sure why we need to add a data member to HistoryItem.

&gt; Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.h:41
&gt; +    APIRequest

I personally don&apos;t find this to be clear.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2187
&gt; +    restoreSessionInternal(itemStates, SessionRestoreMode::APIRequest);

I think allowing stale content on session restore should be based on a setting. I know that we want to keep allowing stale content on iOS for example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162009</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 09:40:24 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 270655 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270655&amp;action=review
&gt; 
&gt; What I would suggest would be:
&gt; 1. Revert http://trac.webkit.org/changeset/181815 so that our API has a
&gt; &quot;allowStaleContent&quot; parameter again (which I find clearer that the approach
&gt; in this patch)

The problem of that approach is that API needs to decide, but we don&apos;t know if the BF navigation we are doing is for an item restored from the session or not. Also, changing the frame load type not only affects the disk cache, it would mena that the page cache wouldn&apos;t be used no? If an item is restored from the session, but it&apos;s in the page or memory cache, we want to use that, not to go to the disk cache or network.

&gt; 2. Add a setting to decide in restoreSession() if we want to allow stale
&gt; content or not.
&gt; 3. Set this setting to True on iOS and False elsewhere.
&gt; 
&gt; &gt; Source/WebCore/history/HistoryItem.h:206
&gt; &gt; +    void setShouldRevalidateInDiskCacheOnly(bool revalidateInDiskCache) { m_shouldRevalidateInDiskCacheOnly = revalidateInDiskCache; }
&gt; 
&gt; I think the naming here is not very clear. Also, I am not sure why we need
&gt; to add a data member to HistoryItem.

To know from the FrameLoader if the item we are going to load wants to use the disk cache unconditionally or not. We need to flag the item to know what to do when it&apos;s loaded, if you go to current item right after restoring the session, you know you don&apos;t want stale data from the disk cache, but if that session contained more BF items, and then you go back, you don&apos;t want stale data from the disk cache in that case either. If we flag the items when they are created in the web process, we have that info when they are loaded.

&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.h:41
&gt; &gt; +    APIRequest
&gt; 
&gt; I personally don&apos;t find this to be clear.

We can find better names.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2187
&gt; &gt; +    restoreSessionInternal(itemStates, SessionRestoreMode::APIRequest);
&gt; 
&gt; I think allowing stale content on session restore should be based on a
&gt; setting. I know that we want to keep allowing stale content on iOS for
&gt; example.

Ok, I can add a setting then, but if it&apos;s not something you want to change via API ans we are going to use the same values always for every port, maybe adding another setting is not the best approach. We can just have a method to query the behavior and add an implementation on every port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162014</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 09:54:04 -0800</bug_when>
    <thetext>Let me explain what I think it&apos;s the desired behavior here, at least for GTK:

 - For any BF navigation we always want stale data. If the page is in the page cache, that should always be used, if the page cache is disabled, then the memory cache, and if it&apos;s not in the memory cache, then stale data from the disk cache.

 - For a BF navigation of an item that was restored from the session as requested by the API, we always want stale data from the page cache or the memory cache, but not from the disk cache. So, it&apos;s considered a normal load only by the disk cache. This not only affects the BF navigation that happens right after restoring the session, but also to any other history item created by the session restore.

The reasoning. We use the session restore for 3 different features in epiphany:

 1 - To restore a previous session at startup. In this case, there won&apos;t be page cache nor memory cache, so we will always end up in the disk cache. We don&apos;t want stale data in this case, users expect the browser to show updated contents. Not expired  resources are of course revalidated and loaded from the cache in any case.

 2 - To restore recently closed tabs. In this case we want to use stale data from any cache. It&apos;s not a problem if the history item is marked as normal load, because unless there&apos;s a web process crash, the resources will be in the page cache or memory cache (it&apos;s a recently closed tab)

 3 - In ephy, when you open a new a link in a new tab or window, the bf list is inherited, so that you can go back to the page from which the link was clicked. In this case, as in the previous one, we always want stale data from any cache, but we expect the resources to be in the page or memory cache. 

In the very unlikely case of not having the resources in the page or memory cache in cases 2 and 3, we would be doing a unnecessary revalidation, for resources that will very likely not be expired, so we will end up loading from the disk cache anyway. The unnecessary revalidation in these cases wouldn&apos;t be a problem for us at all.

Even id this is based on the particular cases of the epiphany browser, I think this is the desired behavior of any of our API users. If anybody complains we can always add a setting to enable/disable this from the API, but I don&apos;t think that&apos;s going to happen. 

Hope it&apos;s clearer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162015</commentid>
    <comment_count>15</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-04 09:54:25 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Comment on attachment 270655 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=270655&amp;action=review
&gt; &gt; 
&gt; &gt; What I would suggest would be:
&gt; &gt; 1. Revert http://trac.webkit.org/changeset/181815 so that our API has a
&gt; &gt; &quot;allowStaleContent&quot; parameter again (which I find clearer that the approach
&gt; &gt; in this patch)
&gt; 
&gt; The problem of that approach is that API needs to decide, but we don&apos;t know
&gt; if the BF navigation we are doing is for an item restored from the session
&gt; or not. Also, changing the frame load type not only affects the disk cache,
&gt; it would mena that the page cache wouldn&apos;t be used no? If an item is
&gt; restored from the session, but it&apos;s in the page or memory cache, we want to
&gt; use that, not to go to the disk cache or network.

Are you trying to get a different behavior from the one before &lt;http://trac.webkit.org/changeset/181815&gt; then? I thought the idea was to restore that behavior.

The page cache only matters on actual BackForward navigation. In this case, we are talking about changing the load type only in the case of session restoration. Therefore, I don&apos;t think we should worry about the PageCache (or memory cache for that matter). In any case, your issue seems to be with the behavior change introduced in r181815 so I would suggest going back to that behavior on non-iOS platforms before attempting further behavior changes.

&gt; 
&gt; &gt; 2. Add a setting to decide in restoreSession() if we want to allow stale
&gt; &gt; content or not.
&gt; &gt; 3. Set this setting to True on iOS and False elsewhere.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/history/HistoryItem.h:206
&gt; &gt; &gt; +    void setShouldRevalidateInDiskCacheOnly(bool revalidateInDiskCache) { m_shouldRevalidateInDiskCacheOnly = revalidateInDiskCache; }
&gt; &gt; 
&gt; &gt; I think the naming here is not very clear. Also, I am not sure why we need
&gt; &gt; to add a data member to HistoryItem.
&gt; 
&gt; To know from the FrameLoader if the item we are going to load wants to use
&gt; the disk cache unconditionally or not. We need to flag the item to know what
&gt; to do when it&apos;s loaded, if you go to current item right after restoring the
&gt; session, you know you don&apos;t want stale data from the disk cache, but if that
&gt; session contained more BF items, and then you go back, you don&apos;t want stale
&gt; data from the disk cache in that case either. If we flag the items when they
&gt; are created in the web process, we have that info when they are loaded.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/SessionStateConversion.h:41
&gt; &gt; &gt; +    APIRequest
&gt; &gt; 
&gt; &gt; I personally don&apos;t find this to be clear.
&gt; 
&gt; We can find better names.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2187
&gt; &gt; &gt; +    restoreSessionInternal(itemStates, SessionRestoreMode::APIRequest);
&gt; &gt; 
&gt; &gt; I think allowing stale content on session restore should be based on a
&gt; &gt; setting. I know that we want to keep allowing stale content on iOS for
&gt; &gt; example.
&gt; 
&gt; Ok, I can add a setting then, but if it&apos;s not something you want to change
&gt; via API ans we are going to use the same values always for every port, maybe
&gt; adding another setting is not the best approach. We can just have a method
&gt; to query the behavior and add an implementation on every port.

I don&apos;t know what&apos;s the best policy here. Maybe Sam can pitch in.
No matter how, I&apos;d like to maintain the current behavior for iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162016</commentid>
    <comment_count>16</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 09:56:37 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; 
&gt; I don&apos;t know what&apos;s the best policy here. Maybe Sam can pitch in.
&gt; No matter how, I&apos;d like to maintain the current behavior for iOS.

Sure, that&apos;s not a problem</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162018</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-04 10:02:52 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Let me explain what I think it&apos;s the desired behavior here, at least for GTK:
&gt; 
&gt;  - For any BF navigation we always want stale data. If the page is in the
&gt; page cache, that should always be used, if the page cache is disabled, then
&gt; the memory cache, and if it&apos;s not in the memory cache, then stale data from
&gt; the disk cache.
&gt; 
&gt;  - For a BF navigation of an item that was restored from the session as
&gt; requested by the API, we always want stale data from the page cache or the
&gt; memory cache, but not from the disk cache. So, it&apos;s considered a normal load
&gt; only by the disk cache. This not only affects the BF navigation that happens
&gt; right after restoring the session, but also to any other history item
&gt; created by the session restore.

I don&apos;t think it is ever possible currently to have a PageCache entry for a HistoryItem after a session restore. On session restore, you essentially get a new HistoryItem and PageCache entries are associated to a specific HistoryItem.

Regarding the MemoryCache, I don&apos;t think there would be anything either, considering the memory cache is per WebProcess. On session restore, you get fresh tabs and normally new WebProcesses AFAIK.

&gt; 
&gt; The reasoning. We use the session restore for 3 different features in
&gt; epiphany:
&gt; 
&gt;  1 - To restore a previous session at startup. In this case, there won&apos;t be
&gt; page cache nor memory cache, so we will always end up in the disk cache. We
&gt; don&apos;t want stale data in this case, users expect the browser to show updated
&gt; contents. Not expired  resources are of course revalidated and loaded from
&gt; the cache in any case.
&gt; 
&gt;  2 - To restore recently closed tabs. In this case we want to use stale data
&gt; from any cache. It&apos;s not a problem if the history item is marked as normal
&gt; load, because unless there&apos;s a web process crash, the resources will be in
&gt; the page cache or memory cache (it&apos;s a recently closed tab)
&gt; 
&gt;  3 - In ephy, when you open a new a link in a new tab or window, the bf list
&gt; is inherited, so that you can go back to the page from which the link was
&gt; clicked. In this case, as in the previous one, we always want stale data
&gt; from any cache, but we expect the resources to be in the page or memory
&gt; cache. 
&gt; 
&gt; In the very unlikely case of not having the resources in the page or memory
&gt; cache in cases 2 and 3, we would be doing a unnecessary revalidation, for
&gt; resources that will very likely not be expired, so we will end up loading
&gt; from the disk cache anyway. The unnecessary revalidation in these cases
&gt; wouldn&apos;t be a problem for us at all.
&gt; 
&gt; Even id this is based on the particular cases of the epiphany browser, I
&gt; think this is the desired behavior of any of our API users. If anybody
&gt; complains we can always add a setting to enable/disable this from the API,
&gt; but I don&apos;t think that&apos;s going to happen. 
&gt; 
&gt; Hope it&apos;s clearer now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162336</commentid>
    <comment_count>18</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 22:51:33 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #14)
&gt; &gt; Let me explain what I think it&apos;s the desired behavior here, at least for GTK:
&gt; &gt; 
&gt; &gt;  - For any BF navigation we always want stale data. If the page is in the
&gt; &gt; page cache, that should always be used, if the page cache is disabled, then
&gt; &gt; the memory cache, and if it&apos;s not in the memory cache, then stale data from
&gt; &gt; the disk cache.
&gt; &gt; 
&gt; &gt;  - For a BF navigation of an item that was restored from the session as
&gt; &gt; requested by the API, we always want stale data from the page cache or the
&gt; &gt; memory cache, but not from the disk cache. So, it&apos;s considered a normal load
&gt; &gt; only by the disk cache. This not only affects the BF navigation that happens
&gt; &gt; right after restoring the session, but also to any other history item
&gt; &gt; created by the session restore.
&gt; 
&gt; I don&apos;t think it is ever possible currently to have a PageCache entry for a
&gt; HistoryItem after a session restore. On session restore, you essentially get
&gt; a new HistoryItem and PageCache entries are associated to a specific
&gt; HistoryItem.

Aha, good point.

&gt; Regarding the MemoryCache, I don&apos;t think there would be anything either,
&gt; considering the memory cache is per WebProcess. On session restore, you get
&gt; fresh tabs and normally new WebProcesses AFAIK.

Unless you have a process limit of 1, but yes I get your point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162344</commentid>
    <comment_count>19</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-04 23:54:53 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; (In reply to comment #14)
&gt; &gt; &gt; Let me explain what I think it&apos;s the desired behavior here, at least for GTK:
&gt; &gt; &gt; 
&gt; &gt; &gt;  - For any BF navigation we always want stale data. If the page is in the
&gt; &gt; &gt; page cache, that should always be used, if the page cache is disabled, then
&gt; &gt; &gt; the memory cache, and if it&apos;s not in the memory cache, then stale data from
&gt; &gt; &gt; the disk cache.
&gt; &gt; &gt; 
&gt; &gt; &gt;  - For a BF navigation of an item that was restored from the session as
&gt; &gt; &gt; requested by the API, we always want stale data from the page cache or the
&gt; &gt; &gt; memory cache, but not from the disk cache. So, it&apos;s considered a normal load
&gt; &gt; &gt; only by the disk cache. This not only affects the BF navigation that happens
&gt; &gt; &gt; right after restoring the session, but also to any other history item
&gt; &gt; &gt; created by the session restore.
&gt; &gt; 
&gt; &gt; I don&apos;t think it is ever possible currently to have a PageCache entry for a
&gt; &gt; HistoryItem after a session restore. On session restore, you essentially get
&gt; &gt; a new HistoryItem and PageCache entries are associated to a specific
&gt; &gt; HistoryItem.
&gt; 
&gt; Aha, good point.

I remember now, the thing is that whether it was restored from the session only matters for the first time it&apos;s loaded. So, if you restore a page from the session, then you navigate, and then go back, the page is now in the page cache and you want to use it now. If we change the load type, we just need to unflag the history item after navigating to it.

&gt; &gt; Regarding the MemoryCache, I don&apos;t think there would be anything either,
&gt; &gt; considering the memory cache is per WebProcess. On session restore, you get
&gt; &gt; fresh tabs and normally new WebProcesses AFAIK.
&gt; 
&gt; Unless you have a process limit of 1, but yes I get your point.

Same here, in this case it would only happen if the page cache is disabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162345</commentid>
    <comment_count>20</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-05 00:06:20 -0800</bug_when>
    <thetext>Another problem of converting the load type to standard for bf navigation after a session restore is that it adds a new entry to the bf list and you ends up with duplicated entries. So, if we don&apos;t want to flag the history item, we could add a new frame load type, something like FrameLoadType::SessionRestoredBackForward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162349</commentid>
    <comment_count>21</comment_count>
      <attachid>270741</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-05 00:38:33 -0800</bug_when>
    <thetext>Created attachment 270741
A different approach

This is a hopefully simpler approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162367</commentid>
    <comment_count>22</comment_count>
      <attachid>270743</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-05 02:24:45 -0800</bug_when>
    <thetext>Created attachment 270743
Try to fix mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162417</commentid>
    <comment_count>23</comment_count>
      <attachid>270743</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-05 09:54:38 -0800</bug_when>
    <thetext>Comment on attachment 270743
Try to fix mac builds

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

I think Sam or Anders need to review this.

&gt; Source/WebCore/ChangeLog:11
&gt; +        policy cache to ensure it&apos;s revalidated by the disk cache if needed.

I would say &quot;to ensure we do not use stale cached data in this case&quot;. As this seems to be the intent.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1199
&gt; +    // iOS always want stale data for history navigation.

&apos;wants&apos;.

I don&apos;t quite get this comment because it is not just iOS, so does everyone else. The only case some platforms do not want stale data is for session restore (Which used to be considered as a history navigation but does not really have to).

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1218
&gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Forward));

So we will use SessionRestoredBackForward on iOS even though this has nothing to do with session restore? This seems wrong.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1233
&gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Back));

ditto.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1248
&gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::IndexedBackForward));

ditto, this is not only used for session restore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162577</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-05 23:01:20 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 270743 [details]
&gt; Try to fix mac builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; 
&gt; I think Sam or Anders need to review this.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; +        policy cache to ensure it&apos;s revalidated by the disk cache if needed.
&gt; 
&gt; I would say &quot;to ensure we do not use stale cached data in this case&quot;. As
&gt; this seems to be the intent.

Not really, we might still use the cached data if the revalidation is not needed, which is what happens very often. If you close the browser, and then open it, most of the resources are used from the disk cache without revalidation (responseNeedsRevalidation returns false).

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1199
&gt; &gt; +    // iOS always want stale data for history navigation.
&gt; 
&gt; &apos;wants&apos;.
&gt; 
&gt; I don&apos;t quite get this comment because it is not just iOS, so does everyone
&gt; else. The only case some platforms do not want stale data is for session
&gt; restore (Which used to be considered as a history navigation but does not
&gt; really have to).

Well, that&apos;s what I meant with &quot;always&quot;, but I agree it&apos;s not clear enough. When a session is restored, the back forward list is also restored, and it contains the current item as well. So, if you go back/forward after a session restore, it&apos;s indeed a history navigation. And the fact that we do a history navigation for the current item too is because it&apos;s also restored in the back forward list, if we do a normal navigation we duplicate the entry in the bf list, so going back after session restore would load the same page again.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1218
&gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Forward));
&gt; 
&gt; So we will use SessionRestoredBackForward on iOS even though this has
&gt; nothing to do with session restore? This seems wrong.

No, on iOS frameLoadTypeForBackForwardItem always returns the proposed type, FrameLoadType::Forward in this case, so this patch doesn&apos;t affect iOS at all. For other ports SessionRestoredBackForward is only returned for history items created for a session restore. So, this has to do with session restore if the item we are about to navigate to was created from the session data.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1233
&gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Back));
&gt; 
&gt; ditto.

iOS will use FrameLoadType::Back here, not SessionRestoredBackForward.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1248
&gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::IndexedBackForward));
&gt; 
&gt; ditto, this is not only used for session restore.

This is not about restoring the session, but about navigation to a history item that has been restored from the session. If we only care about the actual navigation that happens right after the session restore, we would show updated contents for the current page, but if then you go back, you could see very old contents again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162605</commentid>
    <comment_count>25</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-06 07:45:34 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; Comment on attachment 270743 [details]
&gt; &gt; Try to fix mac builds
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; &gt; 
&gt; &gt; I think Sam or Anders need to review this.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:11
&gt; &gt; &gt; +        policy cache to ensure it&apos;s revalidated by the disk cache if needed.
&gt; &gt; 
&gt; &gt; I would say &quot;to ensure we do not use stale cached data in this case&quot;. As
&gt; &gt; this seems to be the intent.
&gt; 
&gt; Not really, we might still use the cached data if the revalidation is not
&gt; needed, which is what happens very often. If you close the browser, and then
&gt; open it, most of the resources are used from the disk cache without
&gt; revalidation (responseNeedsRevalidation returns false).

I know we still want to use cached data if it is fresh ( does not need revalidation or revalidation succeeded). I still think my sentence is correct. Stale != cached. Stale data is data that has expired and is no longer fresh.

&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1199
&gt; &gt; &gt; +    // iOS always want stale data for history navigation.
&gt; &gt; 
&gt; &gt; &apos;wants&apos;.
&gt; &gt; 
&gt; &gt; I don&apos;t quite get this comment because it is not just iOS, so does everyone
&gt; &gt; else. The only case some platforms do not want stale data is for session
&gt; &gt; restore (Which used to be considered as a history navigation but does not
&gt; &gt; really have to).
&gt; 
&gt; Well, that&apos;s what I meant with &quot;always&quot;, but I agree it&apos;s not clear enough.
&gt; When a session is restored, the back forward list is also restored, and it
&gt; contains the current item as well. So, if you go back/forward after a
&gt; session restore, it&apos;s indeed a history navigation. And the fact that we do a
&gt; history navigation for the current item too is because it&apos;s also restored in
&gt; the back forward list, if we do a normal navigation we duplicate the entry
&gt; in the bf list, so going back after session restore would load the same page
&gt; again.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1218
&gt; &gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Forward));
&gt; &gt; 
&gt; &gt; So we will use SessionRestoredBackForward on iOS even though this has
&gt; &gt; nothing to do with session restore? This seems wrong.
&gt; 
&gt; No, on iOS frameLoadTypeForBackForwardItem always returns the proposed type,
&gt; FrameLoadType::Forward in this case, so this patch doesn&apos;t affect iOS at
&gt; all. For other ports SessionRestoredBackForward is only returned for history
&gt; items created for a session restore. So, this has to do with session restore
&gt; if the item we are about to navigate to was created from the session data.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1233
&gt; &gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Back));
&gt; &gt; 
&gt; &gt; ditto.
&gt; 
&gt; iOS will use FrameLoadType::Back here, not SessionRestoredBackForward.
&gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1248
&gt; &gt; &gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::IndexedBackForward));
&gt; &gt; 
&gt; &gt; ditto, this is not only used for session restore.
&gt; 
&gt; This is not about restoring the session, but about navigation to a history
&gt; item that has been restored from the session. If we only care about the
&gt; actual navigation that happens right after the session restore, we would
&gt; show updated contents for the current page, but if then you go back, you
&gt; could see very old contents again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162650</commentid>
    <comment_count>26</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-06 11:26:00 -0800</bug_when>
    <thetext>Although this behavior frustrated me at first, the advantage is that it makes pages load *really fast* when starting the browser. I noticed that I quite like Chrome&apos;s setting &quot;When closing the browser... pick up where I left off&quot; which works like what we have now.

Probably we should expose this as an option in our API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162719</commentid>
    <comment_count>27</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-07 01:58:10 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; Although this behavior frustrated me at first, the advantage is that it
&gt; makes pages load *really fast* when starting the browser.

What&apos;s the advantage of loading very fast if contents are outdated? You have to manually load again to get the current contents, which is not only slower than revalidating the resources, but also very confusing. It happens to me every day, I have to manually reload all the bugzilla tabs I have opened to see new comments/reviews and post my comments. Fortunately I know there are new contents thanks to the bug mail.

&gt; I noticed that I
&gt; quite like Chrome&apos;s setting &quot;When closing the browser... pick up where I
&gt; left off&quot; which works like what we have now.
&gt; 
&gt; Probably we should expose this as an option in our API.

I prefer to avoid adding an API option for this if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162724</commentid>
    <comment_count>28</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-07 07:24:00 -0800</bug_when>
    <thetext>OK, I agree at any rate that it&apos;s more important to avoid stale contents by default.

Let&apos;s ask Sam or Anders to review on IRC; we need this fixed soon for the next Epiphany release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162774</commentid>
    <comment_count>29</comment_count>
      <attachid>270743</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-07 13:41:03 -0800</bug_when>
    <thetext>Comment on attachment 270743
Try to fix mac builds

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

&gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1218
&gt;&gt;&gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Forward));
&gt;&gt; 
&gt;&gt; So we will use SessionRestoredBackForward on iOS even though this has nothing to do with session restore? This seems wrong.
&gt; 
&gt; No, on iOS frameLoadTypeForBackForwardItem always returns the proposed type, FrameLoadType::Forward in this case, so this patch doesn&apos;t affect iOS at all. For other ports SessionRestoredBackForward is only returned for history items created for a session restore. So, this has to do with session restore if the item we are about to navigate to was created from the session data.

Right, I misread the function, sorry about that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1162777</commentid>
    <comment_count>30</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-07 13:50:59 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; Although this behavior frustrated me at first, the advantage is that it
&gt; &gt; makes pages load *really fast* when starting the browser.
&gt; 
&gt; What&apos;s the advantage of loading very fast if contents are outdated? You have
&gt; to manually load again to get the current contents, which is not only slower
&gt; than revalidating the resources, but also very confusing. It happens to me
&gt; every day, I have to manually reload all the bugzilla tabs I have opened to
&gt; see new comments/reviews and post my comments. Fortunately I know there are
&gt; new contents thanks to the bug mail.

There are several advantages:
1. People often have tabs open they are no longer interested about. Doing network activity for them is wasteful (network, battery, startup time...)
2. Some people may have been reading a particular article on a page and may be surprised to get different content than the last time their browser was open (because we loaded fresh content from the web).
3. With the current behavior, users can reload only the tabs they are interested in getting fresh content for.

Your statement &apos;reloading&apos; not revalidating the content seems inaccurate to me. Unless the client specifically requests a reload *from origin*, the regular reload merely revalidates cached data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163718</commentid>
    <comment_count>31</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-11 01:10:58 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Comment on attachment 270743 [details]
&gt; Try to fix mac builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:1218
&gt; &gt;&gt;&gt; +    m_page-&gt;goToItem(*item, frameLoadTypeForBackForwardItem(backForwardItemID, FrameLoadType::Forward));
&gt; &gt;&gt; 
&gt; &gt;&gt; So we will use SessionRestoredBackForward on iOS even though this has nothing to do with session restore? This seems wrong.
&gt; &gt; 
&gt; &gt; No, on iOS frameLoadTypeForBackForwardItem always returns the proposed type, FrameLoadType::Forward in this case, so this patch doesn&apos;t affect iOS at all. For other ports SessionRestoredBackForward is only returned for history items created for a session restore. So, this has to do with session restore if the item we are about to navigate to was created from the session data.
&gt; 
&gt; Right, I misread the function, sorry about that.

No problem, I supposed it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163719</commentid>
    <comment_count>32</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-11 01:14:58 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #27)
&gt; &gt; (In reply to comment #26)
&gt; &gt; &gt; Although this behavior frustrated me at first, the advantage is that it
&gt; &gt; &gt; makes pages load *really fast* when starting the browser.
&gt; &gt; 
&gt; &gt; What&apos;s the advantage of loading very fast if contents are outdated? You have
&gt; &gt; to manually load again to get the current contents, which is not only slower
&gt; &gt; than revalidating the resources, but also very confusing. It happens to me
&gt; &gt; every day, I have to manually reload all the bugzilla tabs I have opened to
&gt; &gt; see new comments/reviews and post my comments. Fortunately I know there are
&gt; &gt; new contents thanks to the bug mail.
&gt; 
&gt; There are several advantages:
&gt; 1. People often have tabs open they are no longer interested about. Doing
&gt; network activity for them is wasteful (network, battery, startup time...)
&gt; 2. Some people may have been reading a particular article on a page and may
&gt; be surprised to get different content than the last time their browser was
&gt; open (because we loaded fresh content from the web).
&gt; 3. With the current behavior, users can reload only the tabs they are
&gt; interested in getting fresh content for.

I agree all this is probably what I expect in my mobile phone where the concept of starting/closing applications is not exactly the same than in the desktop. If you want it, I can make this behavior specific to GTK+, instead of making the exception for iOS. Then we can discuss whether Mac users want this or not, and whether to expose a setting to enable/disable it.

&gt; Your statement &apos;reloading&apos; not revalidating the content seems inaccurate to
&gt; me. Unless the client specifically requests a reload *from origin*, the
&gt; regular reload merely revalidates cached data.

Sure, you are right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164767</commentid>
    <comment_count>33</comment_count>
      <attachid>270743</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-15 09:55:37 -0800</bug_when>
    <thetext>Comment on attachment 270743
Try to fix mac builds

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

&gt; Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:52
&gt; +    bool restoredFromSession;

A thought just occurred to me. Don&apos;t we need to reset this flag at some point? Otherwise, it seems like we would *never* again use the back/forward cache policy to these history items (unless the HistoryItems get regenerated somehow?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164768</commentid>
    <comment_count>34</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-15 10:01:29 -0800</bug_when>
    <thetext>(In reply to comment #33)
&gt; Comment on attachment 270743 [details]
&gt; Try to fix mac builds
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:52
&gt; &gt; +    bool restoredFromSession;
&gt; 
&gt; A thought just occurred to me. Don&apos;t we need to reset this flag at some
&gt; point? Otherwise, it seems like we would *never* again use the back/forward
&gt; cache policy to these history items (unless the HistoryItems get regenerated
&gt; somehow?).

That was my first idea, but it was not easy to decide when to reset it, and I realized that it was not actually needed, because after the first time, the resource will always hit the page cache or the memory cache if the page cache is disabled, but we won&apos;t reach the disk cache again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164769</commentid>
    <comment_count>35</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-15 10:05:57 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; (In reply to comment #33)
&gt; &gt; Comment on attachment 270743 [details]
&gt; &gt; Try to fix mac builds
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:52
&gt; &gt; &gt; +    bool restoredFromSession;
&gt; &gt; 
&gt; &gt; A thought just occurred to me. Don&apos;t we need to reset this flag at some
&gt; &gt; point? Otherwise, it seems like we would *never* again use the back/forward
&gt; &gt; cache policy to these history items (unless the HistoryItems get regenerated
&gt; &gt; somehow?).
&gt; 
&gt; That was my first idea, but it was not easy to decide when to reset it, and
&gt; I realized that it was not actually needed, because after the first time,
&gt; the resource will always hit the page cache or the memory cache if the page
&gt; cache is disabled, but we won&apos;t reach the disk cache again.

It *may* use the PageCache or the memory cache but there is definitely no guarantee of this happening AFAIK. Relying on this seems wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164770</commentid>
    <comment_count>36</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-15 10:09:51 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; Comment on attachment 270743 [details]
&gt; &gt; &gt; Try to fix mac builds
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:52
&gt; &gt; &gt; &gt; +    bool restoredFromSession;
&gt; &gt; &gt; 
&gt; &gt; &gt; A thought just occurred to me. Don&apos;t we need to reset this flag at some
&gt; &gt; &gt; point? Otherwise, it seems like we would *never* again use the back/forward
&gt; &gt; &gt; cache policy to these history items (unless the HistoryItems get regenerated
&gt; &gt; &gt; somehow?).
&gt; &gt; 
&gt; &gt; That was my first idea, but it was not easy to decide when to reset it, and
&gt; &gt; I realized that it was not actually needed, because after the first time,
&gt; &gt; the resource will always hit the page cache or the memory cache if the page
&gt; &gt; cache is disabled, but we won&apos;t reach the disk cache again.
&gt; 
&gt; It *may* use the PageCache or the memory cache but there is definitely no
&gt; guarantee of this happening AFAIK. Relying on this seems wrong.

Ok, I assumed it was correct, I&apos;ll update the patch to reset the value then. Do you know in which case we would en up in the disk cache again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164771</commentid>
    <comment_count>37</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-15 10:23:02 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; (In reply to comment #35)
&gt; &gt; (In reply to comment #34)
&gt; &gt; &gt; (In reply to comment #33)
&gt; &gt; &gt; &gt; Comment on attachment 270743 [details]
&gt; &gt; &gt; &gt; Try to fix mac builds
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; View in context:
&gt; &gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=270743&amp;action=review
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; &gt; Source/WebKit2/WebProcess/WebPage/WebBackForwardListProxy.cpp:52
&gt; &gt; &gt; &gt; &gt; +    bool restoredFromSession;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; A thought just occurred to me. Don&apos;t we need to reset this flag at some
&gt; &gt; &gt; &gt; point? Otherwise, it seems like we would *never* again use the back/forward
&gt; &gt; &gt; &gt; cache policy to these history items (unless the HistoryItems get regenerated
&gt; &gt; &gt; &gt; somehow?).
&gt; &gt; &gt; 
&gt; &gt; &gt; That was my first idea, but it was not easy to decide when to reset it, and
&gt; &gt; &gt; I realized that it was not actually needed, because after the first time,
&gt; &gt; &gt; the resource will always hit the page cache or the memory cache if the page
&gt; &gt; &gt; cache is disabled, but we won&apos;t reach the disk cache again.
&gt; &gt; 
&gt; &gt; It *may* use the PageCache or the memory cache but there is definitely no
&gt; &gt; guarantee of this happening AFAIK. Relying on this seems wrong.
&gt; 
&gt; Ok, I assumed it was correct, I&apos;ll update the patch to reset the value then.
&gt; Do you know in which case we would en up in the disk cache again?

On memory pressure, we clear both the PageCache and the memory cache for example. These are caches and they get pruned / cleared so you cannot expect something specific to be in there for sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166427</commentid>
    <comment_count>38</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-02-19 09:06:20 -0800</bug_when>
    <thetext>So, huge thread, what still needs to happen here?

Context for Apple folks: we need to land this soon to avoid reverting the session state work in Epiphany before our release next month.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166707</commentid>
    <comment_count>39</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-20 00:50:39 -0800</bug_when>
    <thetext>I just need to find the time to update then patch to unflag the history item as loaded by session restore as I discussed with Chris. I would like to know also if Apple wants this behavior for non iOS too, because otherwise I&apos;ll change the condition to make this GTK specific.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166733</commentid>
    <comment_count>40</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-20 08:57:36 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; I just need to find the time to update then patch to unflag the history item
&gt; as loaded by session restore as I discussed with Chris. I would like to know
&gt; also if Apple wants this behavior for non iOS too, because otherwise I&apos;ll
&gt; change the condition to make this GTK specific.

I don&apos;t have strong feelings either way. I personally like the current behavior and we haven&apos;t received many (any?) complaints since this shipped in Safari 9.

However, since it seems some people here get frustrated with the new behavior I&apos;d say we should probably be conservative and restore the old behavior on non-iOS as well, to be safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1166821</commentid>
    <comment_count>41</comment_count>
      <attachid>271879</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-21 01:47:29 -0800</bug_when>
    <thetext>Created attachment 271879
Updated patch

Addressed review comments, and also reset the restoredFromSession flags after the first load.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168043</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-24 23:53:21 -0800</bug_when>
    <thetext>Any other concern about this Chris? We really need a review here since we are preparing a new major release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168100</commentid>
    <comment_count>43</comment_count>
      <attachid>271879</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-25 09:07:38 -0800</bug_when>
    <thetext>Comment on attachment 271879
Updated patch

Sorry, still not a huge fan of the complexity this adds. This seems intrusive and a bit complicated for what it does.

Would the following work?
1. We don&apos;t add a new load type (we already have too many)
2. We had a boolean flag to WebCore::HistoryItem to distinguish that the HistoryItem was restored from a previous session
3. We check this new WebCore::HistoryItem flag in FrameLoader::loadDifferentDocumentItem() to choose the right cache policy without requiring a new load type
4. We reset this flag right after it is read in FrameLoader::loadDifferentDocumentItem().

Let me know what you think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168427</commentid>
    <comment_count>44</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-25 23:08:52 -0800</bug_when>
    <thetext>(In reply to comment #43)
&gt; Comment on attachment 271879 [details]
&gt; Updated patch
&gt; 
&gt; Sorry, still not a huge fan of the complexity this adds. This seems
&gt; intrusive and a bit complicated for what it does.
&gt; 
&gt; Would the following work?
&gt; 1. We don&apos;t add a new load type (we already have too many)
&gt; 2. We had a boolean flag to WebCore::HistoryItem to distinguish that the
&gt; HistoryItem was restored from a previous session
&gt; 3. We check this new WebCore::HistoryItem flag in
&gt; FrameLoader::loadDifferentDocumentItem() to choose the right cache policy
&gt; without requiring a new load type
&gt; 4. We reset this flag right after it is read in
&gt; FrameLoader::loadDifferentDocumentItem().
&gt; 
&gt; Let me know what you think.

This is pretty much what my first patch did :-) 

https://bug-153230-attachments.webkit.org/attachment.cgi?id=270655

I changed the approach because you were not sure about the need to add a member to HistoryItem, and I didn&apos;t like it either. See comment #12 :-)

But yes, I can go back to the initial approach, just with better names, with special case for iOS and resetting the flag. The patch was indeed a lot simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168453</commentid>
    <comment_count>45</comment_count>
      <attachid>272315</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 00:48:09 -0800</bug_when>
    <thetext>Created attachment 272315
Go back to initial approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168526</commentid>
    <comment_count>46</comment_count>
      <attachid>272315</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-02-26 09:26:49 -0800</bug_when>
    <thetext>Comment on attachment 272315
Go back to initial approach

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

r=me with changes.

&gt; Source/WebCore/history/HistoryItem.h:262
&gt; +    // Item was created from a session restore.

I don&apos;t think this comment is useful.

&gt; Source/WebCore/history/HistoryItem.h:263
&gt; +    bool m_restoredFromSession { false };

we need a prefix for boolean members, I suggest m_wasRestoredFromSession.

Also, could you please move this new member next to the other boolean members above?

&gt; Source/WebCore/loader/FrameLoader.cpp:3340
&gt; +            if (!item.wasRestoredFromSession())

I would do the #ifdef iOS logic here.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2234
&gt; +void WebPage::restoreSessionInternal(const Vector&lt;BackForwardListItemState&gt;&amp; itemStates, bool restoredByAPIRequest)

Do we really need a new method? Maybe we could just add the extra parameter to restoreSession() ?

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2238
&gt; +#if !PLATFORM(IOS)

I would prefer if we moved the IOS ifdefing to FrameLoader::loadDifferentDocumentItem() and set the wasRestoredFromSession flag here no matter the platform. Otherwise, we end up with a boolean that has an inaccurate value on iOS.

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2239
&gt; +        // iOS always wants stale data after session restore.

s/wants/allows

&gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2248
&gt; +    restoreSessionInternal(itemStates, true);

Could you please make the boolean argument an enum for readability? e.g.
enum class WasRestoredByAPIRequest { No, Yes };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168541</commentid>
    <comment_count>47</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 09:56:10 -0800</bug_when>
    <thetext>(In reply to comment #46)
&gt; Comment on attachment 272315 [details]
&gt; Go back to initial approach
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=272315&amp;action=review
&gt; 
&gt; r=me with changes.

Thank you very much!

&gt; &gt; Source/WebCore/history/HistoryItem.h:262
&gt; &gt; +    // Item was created from a session restore.
&gt; 
&gt; I don&apos;t think this comment is useful.

Ok.

&gt; &gt; Source/WebCore/history/HistoryItem.h:263
&gt; &gt; +    bool m_restoredFromSession { false };
&gt; 
&gt; we need a prefix for boolean members, I suggest m_wasRestoredFromSession.

Ok.

&gt; Also, could you please move this new member next to the other boolean
&gt; members above?

Sure.

&gt; &gt; Source/WebCore/loader/FrameLoader.cpp:3340
&gt; &gt; +            if (!item.wasRestoredFromSession())
&gt; 
&gt; I would do the #ifdef iOS logic here.

Ok.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2234
&gt; &gt; +void WebPage::restoreSessionInternal(const Vector&lt;BackForwardListItemState&gt;&amp; itemStates, bool restoredByAPIRequest)
&gt; 
&gt; Do we really need a new method? Maybe we could just add the extra parameter
&gt; to restoreSession() ?

Yes, because it&apos;s a message handler called from generated code.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2238
&gt; &gt; +#if !PLATFORM(IOS)
&gt; 
&gt; I would prefer if we moved the IOS ifdefing to
&gt; FrameLoader::loadDifferentDocumentItem() and set the wasRestoredFromSession
&gt; flag here no matter the platform. Otherwise, we end up with a boolean that
&gt; has an inaccurate value on iOS.

Makes sense.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2239
&gt; &gt; +        // iOS always wants stale data after session restore.
&gt; 
&gt; s/wants/allows

Ok.

&gt; &gt; Source/WebKit2/WebProcess/WebPage/WebPage.cpp:2248
&gt; &gt; +    restoreSessionInternal(itemStates, true);
&gt; 
&gt; Could you please make the boolean argument an enum for readability? e.g.
&gt; enum class WasRestoredByAPIRequest { No, Yes };

Sure, my original patch did that indeed, but I was not happy with the names I used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168847</commentid>
    <comment_count>48</comment_count>
      <attachid>272411</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 22:53:55 -0800</bug_when>
    <thetext>Created attachment 272411
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1168852</commentid>
    <comment_count>49</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-02-26 23:44:09 -0800</bug_when>
    <thetext>Committed r197244: &lt;http://trac.webkit.org/changeset/197244&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177420</commentid>
    <comment_count>50</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-03-23 12:32:27 -0700</bug_when>
    <thetext>I would rather this was done through a Setting rather than an #ifdef.  In addition, it would be really good for this to have a test case covering both options.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1177432</commentid>
    <comment_count>51</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-03-23 12:57:07 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; I would rather this was done through a Setting rather than an #ifdef.  In
&gt; addition, it would be really good for this to have a test case covering both
&gt; options.

Carlos, do you have spare cycles to make this change?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1178400</commentid>
    <comment_count>52</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-28 03:11:58 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; (In reply to comment #50)
&gt; &gt; I would rather this was done through a Setting rather than an #ifdef.  In
&gt; &gt; addition, it would be really good for this to have a test case covering both
&gt; &gt; options.
&gt; 
&gt; Carlos, do you have spare cycles to make this change?

Yes, I also thought it would be better to have a setting when you decided to use the same behavior for mac. I&apos;m not sure about the test, though, since I don&apos;t think it&apos;s possible to test session restore from layout tests. I&apos;ll convert it to a setting for now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270655</attachid>
            <date>2016-02-04 05:50:17 -0800</date>
            <delta_ts>2016-02-05 00:38:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-session-restore-disk-cache.diff</filename>
            <type>text/plain</type>
            <size>9205</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlODFjZTQyLi41OTA2NDQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjEg
QEAKIDIwMTYtMDItMDQgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaGVjayBpZiB0aGUg
aGlzdG9yeSBpdGVtIHJlcXVpcmVzIHRoZSBkaXNrIGNhY2hlIHRvIHJldmFsaWRhdGUKKyAgICAg
ICAgdGhlIHJlc291cmNlIGlmIG5lZWRlZCBhbmQgc2V0IHRoZSByZXF1ZXN0IGNhY2hlIHBvbGlj
eSBhY2NvcmRpbmdseS4KKworICAgICAgICAqIGhpc3RvcnkvSGlzdG9yeUl0ZW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzZXRTaG91bGRSZXZhbGlkYXRlSW5EaXNrQ2FjaGVP
bmx5KToKKyAgICAgICAgKFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpzaG91bGRSZXZhbGlkYXRlSW5E
aXNrQ2FjaGVPbmx5KToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OmxvYWREaWZmZXJlbnREb2N1bWVudEl0ZW0pOgorCisy
MDE2LTAyLTA0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KKwog
ICAgICAgICBbR1RLXSBTY3JvbGxiYXJzIGluY29ycmVjdGx5IHJlbmRlcmVkIHdpdGggb2xkZXIg
dmVyc2lvbnMgb2YgR1RLKwogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUzODYxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlz
dG9yeUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaAppbmRleCBi
Nzc3MmZkLi4xNTY4NWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0hpc3Rv
cnlJdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5oCkBAIC0y
MDMsNiArMjAzLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2hhcmVkTGlua1VuaXF1ZUlkZW50
aWZpZXIoY29uc3QgU3RyaW5nJiBzaGFyZWRMaW5rVW5pcXVlaWRlbnRpZmllcikgeyBtX3NoYXJl
ZExpbmtVbmlxdWVJZGVudGlmaWVyID0gc2hhcmVkTGlua1VuaXF1ZWlkZW50aWZpZXI7IH0KICNl
bmRpZgogCisgICAgdm9pZCBzZXRTaG91bGRSZXZhbGlkYXRlSW5EaXNrQ2FjaGVPbmx5KGJvb2wg
cmV2YWxpZGF0ZUluRGlza0NhY2hlKSB7IG1fc2hvdWxkUmV2YWxpZGF0ZUluRGlza0NhY2hlT25s
eSA9IHJldmFsaWRhdGVJbkRpc2tDYWNoZTsgfQorICAgIGJvb2wgc2hvdWxkUmV2YWxpZGF0ZUlu
RGlza0NhY2hlT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkUmV2YWxpZGF0ZUluRGlza0Nh
Y2hlT25seTsgfQorCiAgICAgdm9pZCBub3RpZnlDaGFuZ2VkKCk7CiAKIHByaXZhdGU6CkBAIC0y
NTYsNiArMjU5LDkgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FjaGVkUGFnZT4g
bV9jYWNoZWRQYWdlOwogICAgIFBydW5pbmdSZWFzb24gbV9wcnVuaW5nUmVhc29uOwogCisgICAg
Ly8gSXRlbXMgcmVzdG9yZWQgZnJvbSBzZXNzaW9uIGJ5IEFQSSByZXF1ZXN0IHNob3VsZCBiZSBy
ZXZhbGlkYXRlZCAoaWYgbmVlZGVkKSBieSB0aGUgZGlzayBjYWNoZS4KKyAgICBib29sIG1fc2hv
dWxkUmV2YWxpZGF0ZUluRGlza0NhY2hlT25seSB7IGZhbHNlIH07CisKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgRmxvYXRSZWN0IG1fZXhwb3NlZENvbnRlbnRSZWN0OwogICAgIEludFJlY3QgbV91
bm9ic2N1cmVkQ29udGVudFJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApp
bmRleCAwNmI5NjUwLi4yNWEzOGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKQEAgLTMzMzUsNyArMzMzNSwxMCBAQCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50
RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVtJiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQogICAgICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJhY2s6CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6
Rm9yd2FyZDoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6
Ci0gICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YUVsc2VM
b2FkKTsKKyAgICAgICAgICAgIGlmIChpdGVtLnNob3VsZFJldmFsaWRhdGVJbkRpc2tDYWNoZU9u
bHkoKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFVzZVByb3RvY29s
Q2FjaGVQb2xpY3kpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlcXVlc3Qu
c2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQ6CiAgICAgICAgIGNhc2Ug
RnJhbWVMb2FkVHlwZTo6UmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0OgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CmluZGV4IDc3NjI3YTIuLmRjYmZkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNSBAQAorMjAx
Ni0wMi0wNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgTmV0d29yayBjYWNoZTogb2xkIHBhZ2VzIHJldHVybmVkIGJ5IGRpc2sgY2FjaGUgb24g
aGlzdG9yeSBuYXZpZ2F0aW9uIGFmdGVyIHNlc3Npb24gaXMgcmVzdG9yZWQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MzIzMAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHIxODE3MzQsIHRoZSBu
ZXR3b3JrIGNhY2hlIG5ldmVyIHJldmFsaWRhdGVzIHJlc291cmNlcyBmb3IKKyAgICAgICAgaGlz
dG9yeSBuYXZpZ2F0aW9uLiBUaGlzIGlzIGdvb2QgZm9yIHRoZSBtZW1vcnkgY2FjaGUsIGJ1dCBp
biB0aGUKKyAgICAgICAgY2FzZSBvZiBkaXNrIGNhY2hlLCB3ZSBtaWdodCBlbmQgdXAgd2l0aCBv
dXRkYXRlZCBwYWdlcyB3aGVuCisgICAgICAgIHJlc3RvcmluZyB0aGUgc2Vzc2lvbi4gV2hlbiBy
ZXN0b3JpbmcgdGhlIHNlc3Npb24gaGFwcGVucyBiZWNhdXNlCisgICAgICAgIG9mIGFuIEFQSSBy
ZXF1ZXN0ICh3ZSBhbHNvIHJlc3RvcmUgdGhlIHNlc3Npb24gd2hlbiByZWNvdmVyaW5nCisgICAg
ICAgIGZyb20gYSB3ZWIgcHJvY2VzcyBjcmFzaCksIHdlIHNob3VsZCByZXZhbGlkYXRlIGJhY2sg
Zm9yd2FyZCBsaXN0CisgICAgICAgIHJlcXVlc3RzIGluIHRoZSBkaXNrIGNhY2hlIGlmIG5lZWRl
ZC4gVGhpcyB3aWxsIG9ubHkgaGFwcGVuIHRoZQorICAgICAgICBmaXJzdCB0aW1lIHRoZXkgYXJl
IGxvYWRlZCBhZnRlciBhIHNlc3Npb24gcmVzdG9yZSwgdGhlbiB0aGV5IHdpbGwKKyAgICAgICAg
YmUgY2FjaGVkIGJ5IHRoZSBwYWdlIGNhY2hlIG9yIG1lbW9yeSBjYWNoZS4gQWZ0ZXIgYSB3ZWIg
cHJvY2VzcworICAgICAgICBjcmFzaCwgcmVzb3VyY2VzIHdpbGwgYmUgdXNlZCB1bmNvbmRpb25h
bGx5IGZyb20gdGhlIGRpc2sgY2FjaGUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwOgorICAgICAgICAoV2ViS2l0Ojp0b0hp
c3RvcnlJdGVtKTogU2V0IHNob3VsZFJldmFsaWRhdGVJbkRpc2tDYWNoZU9ubHkKKyAgICAgICAg
ZGVwZW5kaW5nIG9uIHRoZSByZWNlaXZlZCBzZXNzaW9uIHJlc3RvcmUgbW9kZS4KKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uaDogQWRk
IHNlc3Npb24KKyAgICAgICAgcmVzdG9yZSBtb2RlIGVudW0uCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZVBhZ2U6OldlYlBhZ2Up
OiBDYWxsIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwgd2l0aAorICAgICAgICBJbml0aWFsaXphdGlv
biBzZXNzaW9uIHJlc3RvcmUgbW9kZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9y
ZVNlc3Npb25JbnRlcm5hbCk6IFBhc3MgdGhlIGdpdmVuIHNlc3Npb24KKyAgICAgICAgcmVzdG9y
ZSBtb2RlIHRvIHRvSGlzdG9yeUl0ZW0oKS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVz
dG9yZVNlc3Npb24pOiBDYWxsIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwKKyAgICAgICAgd2l0aCBB
UElSZXF1ZXN0IHNlc3Npb24gcmVzdG9yZSBtb2RlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmg6CisKIDIwMTYtMDItMDMgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXBvcnQgd2FzQmxvY2tlZCBhbmQgY2Fubm90
U2hvd1VSTCBlcnJvcnMgd2hlbiB1c2luZyBOZXR3b3JrU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252ZXJz
aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lv
blN0YXRlQ29udmVyc2lvbi5jcHAKaW5kZXggMTUxYzkwMC4uMjNjMTEzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9TZXNzaW9uU3RhdGVDb252
ZXJzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0
L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uY3BwCkBAIC0xODYsMTEgKzE4NiwxMiBAQCBzdGF0aWMg
dm9pZCBhcHBseUZyYW1lU3RhdGUoSGlzdG9yeUl0ZW0mIGhpc3RvcnlJdGVtLCBjb25zdCBGcmFt
ZVN0YXRlJiBmcmFtZVN0YQogICAgIH0KIH0KIAotUmVmPEhpc3RvcnlJdGVtPiB0b0hpc3RvcnlJ
dGVtKGNvbnN0IFBhZ2VTdGF0ZSYgcGFnZVN0YXRlKQorUmVmPEhpc3RvcnlJdGVtPiB0b0hpc3Rv
cnlJdGVtKGNvbnN0IFBhZ2VTdGF0ZSYgcGFnZVN0YXRlLCBTZXNzaW9uUmVzdG9yZU1vZGUgcmVz
dG9yZU1vZGUpCiB7CiAgICAgUmVmPEhpc3RvcnlJdGVtPiBoaXN0b3J5SXRlbSA9IEhpc3RvcnlJ
dGVtOjpjcmVhdGUocGFnZVN0YXRlLm1haW5GcmFtZVN0YXRlLnVybFN0cmluZywgcGFnZVN0YXRl
LnRpdGxlKTsKICAgICBoaXN0b3J5SXRlbS0+c2V0U2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGlj
eShwYWdlU3RhdGUuc2hvdWxkT3BlbkV4dGVybmFsVVJMc1BvbGljeSk7CiAgICAgYXBwbHlGcmFt
ZVN0YXRlKGhpc3RvcnlJdGVtLCBwYWdlU3RhdGUubWFpbkZyYW1lU3RhdGUpOworICAgIGhpc3Rv
cnlJdGVtLT5zZXRTaG91bGRSZXZhbGlkYXRlSW5EaXNrQ2FjaGVPbmx5KHJlc3RvcmVNb2RlID09
IFNlc3Npb25SZXN0b3JlTW9kZTo6QVBJUmVxdWVzdCk7CiAKICAgICByZXR1cm4gaGlzdG9yeUl0
ZW07CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1Nlc3Npb25TdGF0ZUNvbnZlcnNpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oCmluZGV4IGJlZTlkMjIuLjg2
MGQ2NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvU2Vzc2lvblN0YXRlQ29udmVyc2lvbi5oCkBAIC0zNiw4ICszNiwx
MyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RydWN0IFBhZ2VTdGF0ZTsKIAorZW51bSBjbGFz
cyBTZXNzaW9uUmVzdG9yZU1vZGUgeworICAgIEluaXRpYWxpemF0aW9uLAorICAgIEFQSVJlcXVl
c3QKK307CisKIFBhZ2VTdGF0ZSB0b1BhZ2VTdGF0ZShjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRl
bSYpOwotUmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiB0b0hpc3RvcnlJdGVtKGNvbnN0IFBhZ2VT
dGF0ZSYpOworUmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiB0b0hpc3RvcnlJdGVtKGNvbnN0IFBh
Z2VTdGF0ZSYsIFNlc3Npb25SZXN0b3JlTW9kZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
NjFiOTAzNC4uYTEyZDA5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
ICNpbmNsdWRlICJQcmludEluZm8uaCIKICNpbmNsdWRlICJTZXNzaW9uU3RhdGUuaCIKLSNpbmNs
dWRlICJTZXNzaW9uU3RhdGVDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiU2Vzc2lvblRyYWNrZXIu
aCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJWaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5oIgpAQCAtNDkxLDcgKzQ5MCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWlu
dDY0X3QgcGFnZUlELCBjb25zdCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJz
KQogICAgIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJv
Y2VzcyhwYXJhbWV0ZXJzLmhpZ2hlc3RVc2VkQmFja0ZvcndhcmRJdGVtSUQpOwogICAgIAogICAg
IGlmICghcGFyYW1ldGVycy5pdGVtU3RhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdG9yZVNl
c3Npb24ocGFyYW1ldGVycy5pdGVtU3RhdGVzKTsKKyAgICAgICAgcmVzdG9yZVNlc3Npb25JbnRl
cm5hbChwYXJhbWV0ZXJzLml0ZW1TdGF0ZXMsIFNlc3Npb25SZXN0b3JlTW9kZTo6SW5pdGlhbGl6
YXRpb24pOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2Vzc2lvbklELmlzVmFsaWQoKSkKICAgICAg
ICAgc2V0U2Vzc2lvbklEKHBhcmFtZXRlcnMuc2Vzc2lvbklEKTsKQEAgLTIxNzcsMTAgKzIxNzYs
MTUgQEAgdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdENvbW1hbmQoY29uc3QgU3RyaW5nJiBjb21t
YW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWUKICAgICBleGVjdXRlRWRpdGluZ0NvbW1hbmQo
Y29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKIH0KIAotdm9pZCBXZWJQYWdlOjpyZXN0b3JlU2Vzc2lv
bihjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlPiYgaXRlbVN0YXRlcykKK3Zv
aWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb25JbnRlcm5hbChjb25zdCBWZWN0b3I8QmFja0Zvcndh
cmRMaXN0SXRlbVN0YXRlPiYgaXRlbVN0YXRlcywgU2Vzc2lvblJlc3RvcmVNb2RlIHJlc3RvcmVN
b2RlKQogewogICAgIGZvciAoY29uc3QgYXV0byYgaXRlbVN0YXRlIDogaXRlbVN0YXRlcykKLSAg
ICAgICAgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGl0ZW1T
dGF0ZS5pZGVudGlmaWVyLCB0b0hpc3RvcnlJdGVtKGl0ZW1TdGF0ZS5wYWdlU3RhdGUpLCBtX3Bh
Z2VJRCk7CisgICAgICAgIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJv
Y2VzcyhpdGVtU3RhdGUuaWRlbnRpZmllciwgdG9IaXN0b3J5SXRlbShpdGVtU3RhdGUucGFnZVN0
YXRlLCByZXN0b3JlTW9kZSksIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZXN0b3Jl
U2Vzc2lvbihjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlPiYgaXRlbVN0YXRl
cykKK3sKKyAgICByZXN0b3JlU2Vzc2lvbkludGVybmFsKGl0ZW1TdGF0ZXMsIFNlc3Npb25SZXN0
b3JlTW9kZTo6QVBJUmVxdWVzdCk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggN2ViMzU0Mi4u
NGE2OTRkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUg
IlBsdWdpbi5oIgogI2luY2x1ZGUgIlNhbmRib3hFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJTZXNz
aW9uU3RhdGVDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5j
bHVkZSAiVXNlckRhdGEuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1h
bmFnZXIuaCIKQEAgLTEwMTQsNiArMTAxNSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGxvYWRV
UkxJbkZyYW1lKGNvbnN0IFN0cmluZyYsIHVpbnQ2NF90IGZyYW1lSUQpOwogCisgICAgdm9pZCBy
ZXN0b3JlU2Vzc2lvbkludGVybmFsKGNvbnN0IFZlY3RvcjxCYWNrRm9yd2FyZExpc3RJdGVtU3Rh
dGU+JiwgU2Vzc2lvblJlc3RvcmVNb2RlKTsKICAgICB2b2lkIHJlc3RvcmVTZXNzaW9uKGNvbnN0
IFZlY3RvcjxCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGU+Jik7CiAgICAgdm9pZCBkaWRSZW1vdmVC
YWNrRm9yd2FyZEl0ZW0odWludDY0X3QpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270741</attachid>
            <date>2016-02-05 00:38:33 -0800</date>
            <delta_ts>2016-02-05 02:24:45 -0800</delta_ts>
            <desc>A different approach</desc>
            <filename>wk2-history-item-restore-session.diff</filename>
            <type>text/plain</type>
            <size>17307</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlODFjZTQyLi45NTg2ZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTYtMDItMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgRnJh
bWVMb2FkVHlwZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBsb2FkaW5nIGEgaGlzdG9yeQorICAg
ICAgICBpdGVtIHRoYXQgd2FzIHJlc3RvcmVkIGZyb20gdGhlIHNlc3Npb24uIEl0IGJlaGF2ZXMg
ZXhhY3RseSBhcyBhbnkKKyAgICAgICAgb3RoZXIgaGlzdG9yeSBuYXZpZ2F0aW9uIGV4Y2VwdCB0
aGF0IGl0IHVzZXMgdGhlIGRlZmF1bHQgcmVxdWVzdAorICAgICAgICBwb2xpY3kgY2FjaGUgdG8g
ZW5zdXJlIGl0J3MgcmV2YWxpZGF0ZWQgYnkgdGhlIGRpc2sgY2FjaGUgaWYgbmVlZGVkLgorCisg
ICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQ2Fj
aGVQYWdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNCYWNrRm9yd2FyZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ05hdmln
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1p
dHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VDYWNoZVBv
bGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3Vt
ZW50SXRlbSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAgICAgICAg
KiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KToKKwogMjAxNi0wMi0wNCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gU2Nyb2xsYmFycyBp
bmNvcnJlY3RseSByZW5kZXJlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdUSysKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA2N2U5OTZlLi4wMjFmOWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCkBAIC0yNTQsNiArMjU0LDcgQEAgc3RhdGljIGJvb2wg
Y2FuQ2FjaGVQYWdlKFBhZ2UmIHBhZ2UpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgog
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6
OkluZGV4ZWRCYWNrRm9yd2FyZDogLy8gYSBtdWx0aS1pdGVtIGhvcCBpbiB0aGUgYmFja2Zvcndh
cmQgbGlzdAorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0Zvcndh
cmQ6CiAgICAgICAgIC8vIENhY2hlYWJsZS4KICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMDZiOTY1MC4uMmQyMWM0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xNjQsNiArMTY0LDcgQEAgYm9vbCBp
c0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgIGNhc2UgRnJhbWVM
b2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAgY2Fz
ZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6CisgICAgY2FzZSBGcmFtZUxvYWRU
eXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM3Myw2ICsxMzc0LDcgQEAgc3Rh
dGljIHZvaWQgbG9nTmF2aWdhdGlvbihNYWluRnJhbWUmIGZyYW1lLCBGcmFtZUxvYWRUeXBlIHR5
cGUpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVwbGFjZToKICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoK
KyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAg
ICAgICAvLyBOb3QgbG9nZ2luZyB0aG9zZSBmb3Igbm93LgogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTkyMSw2ICsxOTIzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpG
b3J3YXJkOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNlc3Np
b25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAgICAgICBpZiAobV9mcmFtZS5wYWdlKCkpIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBsb2FkIHdpdGhpbiBhIGZyYW1lIGlzIGEgbmF2aWdh
dGlvbiB3aXRoaW4gYSBiYWNrL2ZvcndhcmQgbGlzdCB0aGF0IHdhcyBhdHRhY2hlZAogICAgICAg
ICAgICAgLy8gd2l0aG91dCBhbnkgb2YgdGhlIGl0ZW1zIGJlaW5nIGxvYWRlZCB0aGVuIHdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBoaXN0b3J5IGluIGEgc2ltaWxhciBtYW5uZXIgYXMKQEAgLTIxNjYs
NiArMjE2OSw3IEBAIENhY2hlUG9saWN5IEZyYW1lTG9hZGVyOjpzdWJyZXNvdXJjZUNhY2hlUG9s
aWN5KCkgY29uc3QKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJhY2s6CiAgICAgY2FzZSBGcmFt
ZUxvYWRUeXBlOjpGb3J3YXJkOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tG
b3J3YXJkOgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0Zvcndh
cmQ6CiAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7CiAgICAgY2FzZSBG
cmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQWxyZWFkeSBoYW5kbGVkIGFib3ZlLgpAQCAtMzMzOSw2ICszMzQzLDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRl
bSwgRnJhbWVMb2FkVHlwZSBsb2EKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZy
YW1lTG9hZFR5cGU6OlN0YW5kYXJkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlZGly
ZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoKKyAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBl
OjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNhbWU6CiAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAppbmRleCA1NTk4Njk2Li45YThjMTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgKQEAgLTU1LDYgKzU1LDcgQEAg
ZW51bSBjbGFzcyBGcmFtZUxvYWRUeXBlIHsKICAgICBSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9y
d2FyZExpc3QsIC8vIEZJWE1FOiBNZXJnZSAibG9ja0JhY2tGb3J3YXJkTGlzdCIsICJsb2NrSGlz
dG9yeSIsICJxdWlja1JlZGlyZWN0IiBhbmQgImNsaWVudFJlZGlyZWN0IiBpbnRvIGEgc2luZ2xl
IGNvbmNlcHQgb2YgcmVkaXJlY3QuCiAgICAgUmVwbGFjZSwKICAgICBSZWxvYWRGcm9tT3JpZ2lu
LAorICAgIFNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkLCAvLyBBIGJhY2tmb3J3YXJkIG5hdmln
YXRpb24gZm9yIGFuIGl0ZW0gcmVzdG9yZWQgZnJvbSB0aGUgc2Vzc2lvbi4KIH07CiAKIGVudW0g
Y2xhc3MgTmV3RnJhbWVPcGVuZXJQb2xpY3kgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0
b3J5Q29udHJvbGxlci5jcHAKaW5kZXggNTNlZTEyMC4uODkzYjYzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0yMzEsNiArMjMxLDcgQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQogICAgIGNhc2UgRnJh
bWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAg
Y2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6CisgICAgY2FzZSBGcmFtZUxv
YWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICBjYXNlIEZyYW1lTG9hZFR5
cGU6OlJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoKICAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OlN0YW5kYXJkOgogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDAwMGY5YWEuLmVm
MWEwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcApAQCAtOTI2LDYgKzkyNiw3IEBAIENhY2hlUG9saWN5IENhY2hlZFJl
c291cmNlTG9hZGVyOjpjYWNoZVBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKSBjb25z
dAogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6
OkZvcndhcmQ6CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6Cisg
ICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAg
ICAgLy8gRG8gbm90IHJldmFsaWRhdGUgY2FjaGVkIG1haW4gcmVzb3VyY2Ugb24gYmFjay9mb3J3
YXJkIG5hdmlnYXRpb24uCiAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7
CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3NzYyN2EyLi5lYmM5MzhhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDggQEAKKzIwMTYtMDItMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1
cm5lZCBieSBkaXNrIGNhY2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlz
IHJlc3RvcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTMyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTaW5jZSByMTgxNzM0LCB0aGUgbmV0d29yayBjYWNoZSBuZXZlciByZXZhbGlkYXRlcyByZXNv
dXJjZXMgZm9yCisgICAgICAgIGhpc3RvcnkgbmF2aWdhdGlvbi4gVGhpcyBpcyBnb29kIGZvciB0
aGUgbWVtb3J5IGNhY2hlLCBidXQgaW4gdGhlCisgICAgICAgIGNhc2Ugb2YgZGlzayBjYWNoZSwg
d2UgbWlnaHQgZW5kIHVwIHdpdGggb3V0ZGF0ZWQgcGFnZXMgd2hlbgorICAgICAgICByZXN0b3Jp
bmcgdGhlIHNlc3Npb24uIFdoZW4gcmVzdG9yaW5nIHRoZSBzZXNzaW9uIGhhcHBlbnMgYmVjYXVz
ZQorICAgICAgICBvZiBhbiBBUEkgcmVxdWVzdCAod2UgYWxzbyByZXN0b3JlIHRoZSBzZXNzaW9u
IHdoZW4gcmVjb3ZlcmluZworICAgICAgICBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gpLCB3ZSBz
aG91bGQgcmV2YWxpZGF0ZSBiYWNrIGZvcndhcmQgbGlzdAorICAgICAgICByZXF1ZXN0cyBpbiB0
aGUgZGlzayBjYWNoZSBpZiBuZWVkZWQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiB0aGUKKyAgICAg
ICAgZmlyc3QgdGltZSB0aGV5IGFyZSBsb2FkZWQgYWZ0ZXIgYSBzZXNzaW9uIHJlc3RvcmUsIHRo
ZW4gdGhleSB3aWxsCisgICAgICAgIGJlIGNhY2hlZCBieSB0aGUgcGFnZSBjYWNoZSBvciBtZW1v
cnkgY2FjaGUuIEFmdGVyIGEgd2ViIHByb2Nlc3MKKyAgICAgICAgY3Jhc2gsIHJlc291cmNlcyB3
aWxsIGJlIHVzZWQgdW5jb25kaW9uYWxseSBmcm9tIHRoZSBkaXNrIGNhY2hlLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNz
KTogQWxzbworICAgICAgICBzdG9yZSBpbiB0aGUgSURUb0hpc3RvcnlJdGVtTWFwIHdoZXRoZXIg
dGhlIGl0ZW0gd2FzIHJlc3RvcmVkIGZyb20KKyAgICAgICAgdGhlIHNlc3Npb24uCisgICAgICAg
IChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtV2FzUmVzdG9yZWRGcm9tU2Vz
c2lvbik6CisgICAgICAgIFJldHVybnMgd2hldGhlciB0aGUgaXRlbSB3YXMgcmVzdG9yZWQgZnJv
bSB0aGUgc2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6
Oml0ZW1Gb3JJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpy
ZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFk
ZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbUF0
SW5kZXgpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2VQYWdlOjpXZWJQYWdlKTogQ2FsbCByZXN0b3JlU2Vzc2lvbkludGVybmFs
IHBhc3NpbmcKKyAgICAgICAgZmFsc2UgYXMgcmVzdG9yZWRCeUFQSVJlcXVlc3QgcGFyYW1ldGVy
LgorICAgICAgICAoV2ViS2l0OjpmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKTogUmV0
dXJuIHRoZSBkZXNpcmVkCisgICAgICAgIEZyYW1lTG9hZFR5cGUgZm9yIHRoZSBpdGVtLiBpT1Mg
YWx3YXlzIHJldHVybnMgdGhlIHByb3Bvc2VkIHR5cGUsCisgICAgICAgIGJ1dCBvdGhlciBwb3J0
cyB1c2UgdGhlIG5ldyB0eXBlCisgICAgICAgIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0b3Jl
ZEJhY2tGb3J3YXJkIGlmIHRoZSBpdGVtIGFzIHJlc3RvcnRlZAorICAgICAgICBmcm9tIHRoZSBz
ZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnb0ZvcndhcmQpOiBVc2UgZnJhbWVM
b2FkVHlwZUZvckJhY2tGb3J3YXJkSXRlbSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpn
b0JhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3YXJk
SXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbklu
dGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNzaW9u
KTogQ2FsbCByZXN0b3JlU2Vzc2lvbkludGVybmFsCisgICAgICAgIHBhc3NpbmcgdHJ1ZSBhcyBy
ZXN0b3JlZEJ5QVBJUmVxdWVzdCBwYXJhbWV0ZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaDoKKwogMjAxNi0wMi0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3Rl
bnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlcG9ydCB3YXNCbG9ja2VkIGFuZCBjYW5ub3RT
aG93VVJMIGVycm9ycyB3aGVuIHVzaW5nIE5ldHdvcmtTZXNzaW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAppbmRleCAyMGJjMmExLi43OTA0OWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5j
cHAKQEAgLTQ3LDcgKzQ3LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gRklYTUUgPHJkYXI6
Ly9wcm9ibGVtLzg4MTkyNjg+OiBUaGlzIGxlYWtzIGFsbCBIaXN0b3J5SXRlbXMgdGhhdCBnbyBp
bnRvIHRoZXNlIG1hcHMuCiAvLyBXZSBuZWVkIHRvIGNsZWFyIHVwIHRoZSBsaWZlIHRpbWUgb2Yg
dGhlc2Ugb2JqZWN0cy4KIAotdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SGlzdG9y
eUl0ZW0+PiBJRFRvSGlzdG9yeUl0ZW1NYXA7IC8vICJJRCIgaGVyZSBpcyB0aGUgaXRlbSBJRC4K
K3N0cnVjdCBIaXN0b3J5SXRlbUluZm8geworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbTsK
KyAgICBib29sIHJlc3RvcmVkRnJvbVNlc3Npb247Cit9OwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2
NF90LCBIaXN0b3J5SXRlbUluZm8+IElEVG9IaXN0b3J5SXRlbU1hcDsgLy8gIklEIiBoZXJlIGlz
IHRoZSBpdGVtIElELgogICAgIAogc3RydWN0IEl0ZW1BbmRQYWdlSUQgewogICAgIHVpbnQ2NF90
IGl0ZW1JRDsKQEAgLTk0LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQmFja0ZvcndhcmRJ
dGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlELCBIaXN0b3J5SXRlbSoKICAgICBX
ZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkFkZEJhY2tGb3J3YXJkSXRlbShpdGVtSUQsIHBhZ2VJ
RCwgdG9QYWdlU3RhdGUoKml0ZW0pKSwgMCk7CiB9CiAKLXZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1JRCwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpIaXN0b3J5SXRlbT4gcHJwSXRlbSwgdWludDY0X3QgcGFnZUlEKQordm9pZCBXZWJC
YWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3ModWludDY0X3QgaXRlbUlE
LCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBwcnBJdGVtLCBib29sIHJlc3RvcmVk
RnJvbVNlc3Npb24sIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+
IGl0ZW0gPSBwcnBJdGVtOwogICAgIApAQCAtMTAzLDcgKzEwNywxMiBAQCB2b2lkIFdlYkJhY2tG
b3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBh
c3NSZWZQdHI8VwogICAgIEFTU0VSVCghaWRUb0hpc3RvcnlJdGVtTWFwKCkuY29udGFpbnMoaXRl
bUlEKSk7CiAKICAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5zZXQ8SXRlbUFuZFBhZ2VJRD4oaXRl
bSwgeyAuaXRlbUlEID0gaXRlbUlELCAucGFnZUlEID0gcGFnZUlEIH0pOwotICAgIGlkVG9IaXN0
b3J5SXRlbU1hcCgpLnNldChpdGVtSUQsIGl0ZW0pOworICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgp
LnNldDxIaXN0b3J5SXRlbUluZm8+KGl0ZW1JRCwgeyAuaXRlbSA9IGl0ZW0sIC5yZXN0b3JlZEZy
b21TZXNzaW9uID0gcmVzdG9yZWRGcm9tU2Vzc2lvbiB9KTsKK30KKworYm9vbCBXZWJCYWNrRm9y
d2FyZExpc3RQcm94eTo6aXRlbVdhc1Jlc3RvcmVkRnJvbVNlc3Npb24odWludDY0X3QgaXRlbUlE
KQoreworICAgIHJldHVybiBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5nZXQoaXRlbUlEKS5yZXN0b3Jl
ZEZyb21TZXNzaW9uOwogfQogCiBzdGF0aWMgdm9pZCBXSzJOb3RpZnlIaXN0b3J5SXRlbUNoYW5n
ZWQoSGlzdG9yeUl0ZW0qIGl0ZW0pCkBAIC0xMTcsNyArMTI2LDcgQEAgc3RhdGljIHZvaWQgV0sy
Tm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKEhpc3RvcnlJdGVtKiBpdGVtKQogCiBIaXN0b3J5SXRl
bSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1Gb3JJRCh1aW50NjRfdCBpdGVtSUQpCiB7
Ci0gICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1hcCgpLmdldChpdGVtSUQpOworICAgIHJldHVy
biBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5nZXQoaXRlbUlEKS5pdGVtLmdldCgpOwogfQogCiB1aW50
NjRfdCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aWRGb3JJdGVtKEhpc3RvcnlJdGVtKiBpdGVt
KQpAQCAtMTI4LDcgKzEzNyw3IEBAIHVpbnQ2NF90IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5Ojpp
ZEZvckl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIFJlZlB0cjxIaXN0b3J5SXRl
bT4gaXRlbSA9IGlkVG9IaXN0b3J5SXRlbU1hcCgpLnRha2UoaXRlbUlEKTsKKyAgICBSZWZQdHI8
SGlzdG9yeUl0ZW0+IGl0ZW0gPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS50YWtlKGl0ZW1JRCkuaXRl
bTsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0xNTcsNyAr
MTY2LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbShSZWY8SGlzdG9y
eUl0ZW0+JiYgaXRlbSkKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmFkZChpdGVtSUQpOwogCiAg
ICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkuc2V0PEl0ZW1BbmRQYWdlSUQ+KGl0ZW0ucHRyKCksIHsg
Lml0ZW1JRCA9IGl0ZW1JRCwgLnBhZ2VJRCA9IG1fcGFnZS0+cGFnZUlEKCkgfSk7Ci0gICAgaWRU
b0hpc3RvcnlJdGVtTWFwKCkuc2V0KGl0ZW1JRCwgaXRlbS5wdHIoKSk7CisgICAgaWRUb0hpc3Rv
cnlJdGVtTWFwKCkuc2V0PEhpc3RvcnlJdGVtSW5mbz4oaXRlbUlELCB7IC5pdGVtID0gaXRlbS5w
dHIoKSwgLnJlc3RvcmVkRnJvbVNlc3Npb24gPSBmYWxzZSB9KTsKIAogICAgIHVwZGF0ZUJhY2tG
b3J3YXJkSXRlbShpdGVtSUQsIG1fcGFnZS0+cGFnZUlEKCksIGl0ZW0ucHRyKCkpOwogICAgIG1f
cGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEFkZEl0ZW0oaXRl
bUlEKSk7CkBAIC0xODIsMTAgKzE5MSw3IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExp
c3RQcm94eTo6aXRlbUF0SW5kZXgoaW50IGl0ZW1JbmRleCkKICAgICBpZiAoIVdlYlByb2Nlc3M6
OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwgTWVzc2Fn
ZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwg
bV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFpdGVtSUQp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1hcCgpLmdl
dChpdGVtSUQpOworICAgIHJldHVybiBpdGVtSUQgPyBpdGVtRm9ySUQoaXRlbUlEKSA6IG51bGxw
dHI7CiB9CiAKIGludCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0xpc3RDb3VudCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5oCmluZGV4IGUyODg1MTkuLjA4NTVmNTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5oCkBAIC00Miw4ICs0Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdWludDY0X3Qg
aWRGb3JJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CiAgICAgc3RhdGljIHZvaWQgcmVtb3Zl
SXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkSXRlbUZyb21VSVBy
b2Nlc3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiwg
dWludDY0X3QgcGFnZUlEKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRJdGVtRnJvbVVJUHJvY2Vzcyh1
aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+LCBib29sIHJl
c3RvcmVkRnJvbVNlc3Npb24sIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAgc3RhdGljIHZvaWQgc2V0
SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3ModWludDY0X3QgaXRlbUlEKTsKKyAgICBzdGF0aWMg
Ym9vbCBpdGVtV2FzUmVzdG9yZWRGcm9tU2Vzc2lvbih1aW50NjRfdCBpdGVtSUQpOwogICAgIAog
ICAgIHZvaWQgY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwCmluZGV4IDYxYjkwMzQuLmIwODc5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCBXZWJQ
YWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFyYW1l
dGVycyYgcGFyYW1ldGVycykKICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0SGlnaGVz
dEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVycy5oaWdoZXN0VXNlZEJhY2tGb3J3YXJkSXRl
bUlEKTsKICAgICAKICAgICBpZiAoIXBhcmFtZXRlcnMuaXRlbVN0YXRlcy5pc0VtcHR5KCkpCi0g
ICAgICAgIHJlc3RvcmVTZXNzaW9uKHBhcmFtZXRlcnMuaXRlbVN0YXRlcyk7CisgICAgICAgIHJl
c3RvcmVTZXNzaW9uSW50ZXJuYWwocGFyYW1ldGVycy5pdGVtU3RhdGVzLCBmYWxzZSk7CiAKICAg
ICBpZiAocGFyYW1ldGVycy5zZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICBzZXRTZXNzaW9u
SUQocGFyYW1ldGVycy5zZXNzaW9uSUQpOwpAQCAtMTE5Myw2ICsxMTkzLDE2IEBAIHZvaWQgV2Vi
UGFnZTo6cmVsb2FkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCByZWxvYWRGcm9tT3JpZ2lu
LCBib29sIGNvbnRlbnRCCiAgICAgY29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkucmVsb2Fk
RnJhbWUobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCByZWxvYWRGcm9tT3JpZ2luLCBjb250ZW50
QmxvY2tlcnNFbmFibGVkKTsKIH0KIAorc3RhdGljIGlubGluZSBGcmFtZUxvYWRUeXBlIGZyYW1l
TG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQsIEZy
YW1lTG9hZFR5cGUgcHJvcG9zZWRUeXBlKQoreworI2lmICFQTEFURk9STShJT1MpCisgICAgLy8g
aU9TIGFsd2F5cyB3YW50IHN0YWxlIGRhdGEgZm9yIGhpc3RvcnkgbmF2aWdhdGlvbi4KKyAgICBp
ZiAoV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1XYXNSZXN0b3JlZEZyb21TZXNzaW9uKGJh
Y2tGb3J3YXJkSXRlbUlEKSkKKyAgICAgICAgcmV0dXJuIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25S
ZXN0b3JlZEJhY2tGb3J3YXJkOworI2VuZGlmCisgICAgcmV0dXJuIHByb3Bvc2VkVHlwZTsKK30K
Kwogdm9pZCBXZWJQYWdlOjpnb0ZvcndhcmQodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRf
dCBiYWNrRm9yd2FyZEl0ZW1JRCkKIHsKICAgICBTZW5kU3RvcFJlc3BvbnNpdmVuZXNzVGltZXIg
c3RvcHBlcih0aGlzKTsKQEAgLTEyMDUsNyArMTIxNSw3IEBAIHZvaWQgV2ViUGFnZTo6Z29Gb3J3
YXJkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCiAg
ICAgQVNTRVJUKCFtX3BlbmRpbmdOYXZpZ2F0aW9uSUQpOwogICAgIG1fcGVuZGluZ05hdmlnYXRp
b25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZyYW1l
TG9hZFR5cGU6OkZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIGZyYW1lTG9h
ZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQsIEZyYW1lTG9hZFR5cGU6
OkZvcndhcmQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdhdGlv
bklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKQEAgLTEyMjAsNyArMTIzMCw3IEBAIHZv
aWQgV2ViUGFnZTo6Z29CYWNrKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0Zv
cndhcmRJdGVtSUQpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdOYXZpZ2F0aW9uSUQpOwogICAgIG1f
cGVuZGluZ05hdmlnYXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0
ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0
ZW0sIGZyYW1lTG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQsIEZy
YW1lTG9hZFR5cGU6OkJhY2spKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnb1RvQmFja0ZvcndhcmRJ
dGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCkBA
IC0xMjM1LDcgKzEyNDUsNyBAQCB2b2lkIFdlYlBhZ2U6OmdvVG9CYWNrRm9yd2FyZEl0ZW0odWlu
dDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZQogICAgIEFTU0VSVCgh
bV9wZW5kaW5nTmF2aWdhdGlvbklEKTsKICAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZp
Z2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpJ
bmRleGVkQmFja0ZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIGZyYW1lTG9h
ZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQsIEZyYW1lTG9hZFR5cGU6
OkluZGV4ZWRCYWNrRm9yd2FyZCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnRyeVJlc3RvcmVTY3Jv
bGxQb3NpdGlvbigpCkBAIC0yMTc3LDEwICsyMTg3LDE1IEBAIHZvaWQgV2ViUGFnZTo6ZXhlY3V0
ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJn
dW1lCiAgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7CiB9
CiAKLXZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24oY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJk
TGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0ZXMpCit2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9u
SW50ZXJuYWwoY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0
ZXMsIGJvb2wgcmVzdG9yZWRCeUFQSVJlcXVlc3QpCiB7CiAgICAgZm9yIChjb25zdCBhdXRvJiBp
dGVtU3RhdGUgOiBpdGVtU3RhdGVzKQotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6
YWRkSXRlbUZyb21VSVByb2Nlc3MoaXRlbVN0YXRlLmlkZW50aWZpZXIsIHRvSGlzdG9yeUl0ZW0o
aXRlbVN0YXRlLnBhZ2VTdGF0ZSksIG1fcGFnZUlEKTsKKyAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGl0ZW1TdGF0ZS5pZGVudGlmaWVyLCB0b0hp
c3RvcnlJdGVtKGl0ZW1TdGF0ZS5wYWdlU3RhdGUpLCByZXN0b3JlZEJ5QVBJUmVxdWVzdCwgbV9w
YWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uKGNvbnN0IFZlY3RvcjxC
YWNrRm9yd2FyZExpc3RJdGVtU3RhdGU+JiBpdGVtU3RhdGVzKQoreworICAgIHJlc3RvcmVTZXNz
aW9uSW50ZXJuYWwoaXRlbVN0YXRlcywgdHJ1ZSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZF
TlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
N2ViMzU0Mi4uYmEyZDRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5oCkBAIC0xMDE0LDYgKzEwMTQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBsb2Fk
VVJMSW5GcmFtZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCBmcmFtZUlEKTsKIAorICAgIHZvaWQg
cmVzdG9yZVNlc3Npb25JbnRlcm5hbChjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0
YXRlPiYsIGJvb2wgcmVzdG9yZWRCeUFQSVJlcXVlc3QpOwogICAgIHZvaWQgcmVzdG9yZVNlc3Np
b24oY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mKTsKICAgICB2b2lkIGRp
ZFJlbW92ZUJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270743</attachid>
            <date>2016-02-05 02:24:45 -0800</date>
            <delta_ts>2016-02-21 01:47:29 -0800</delta_ts>
            <desc>Try to fix mac builds</desc>
            <filename>wk2-history-item-restore-session.diff</filename>
            <type>text/plain</type>
            <size>18564</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlODFjZTQyLi45NTg2ZDkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTYtMDItMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgRnJh
bWVMb2FkVHlwZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBsb2FkaW5nIGEgaGlzdG9yeQorICAg
ICAgICBpdGVtIHRoYXQgd2FzIHJlc3RvcmVkIGZyb20gdGhlIHNlc3Npb24uIEl0IGJlaGF2ZXMg
ZXhhY3RseSBhcyBhbnkKKyAgICAgICAgb3RoZXIgaGlzdG9yeSBuYXZpZ2F0aW9uIGV4Y2VwdCB0
aGF0IGl0IHVzZXMgdGhlIGRlZmF1bHQgcmVxdWVzdAorICAgICAgICBwb2xpY3kgY2FjaGUgdG8g
ZW5zdXJlIGl0J3MgcmV2YWxpZGF0ZWQgYnkgdGhlIGRpc2sgY2FjaGUgaWYgbmVlZGVkLgorCisg
ICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQ2Fj
aGVQYWdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNCYWNrRm9yd2FyZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ05hdmln
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1p
dHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VDYWNoZVBv
bGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3Vt
ZW50SXRlbSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAgICAgICAg
KiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KToKKwogMjAxNi0wMi0wNCAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gU2Nyb2xsYmFycyBp
bmNvcnJlY3RseSByZW5kZXJlZCB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIEdUSysKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvUGFnZUNhY2hlLmNwcAppbmRleCA2N2U5OTZlLi4wMjFmOWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCkBAIC0yNTQsNiArMjU0LDcgQEAgc3RhdGljIGJvb2wg
Y2FuQ2FjaGVQYWdlKFBhZ2UmIHBhZ2UpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgog
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6
OkluZGV4ZWRCYWNrRm9yd2FyZDogLy8gYSBtdWx0aS1pdGVtIGhvcCBpbiB0aGUgYmFja2Zvcndh
cmQgbGlzdAorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0Zvcndh
cmQ6CiAgICAgICAgIC8vIENhY2hlYWJsZS4KICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggMDZiOTY1MC4uMmQyMWM0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0xNjQsNiArMTY0LDcgQEAgYm9vbCBp
c0JhY2tGb3J3YXJkTG9hZFR5cGUoRnJhbWVMb2FkVHlwZSB0eXBlKQogICAgIGNhc2UgRnJhbWVM
b2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAgY2Fz
ZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6CisgICAgY2FzZSBGcmFtZUxvYWRU
eXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTM3Myw2ICsxMzc0LDcgQEAgc3Rh
dGljIHZvaWQgbG9nTmF2aWdhdGlvbihNYWluRnJhbWUmIGZyYW1lLCBGcmFtZUxvYWRUeXBlIHR5
cGUpCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVwbGFjZToKICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoK
KyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAg
ICAgICAvLyBOb3QgbG9nZ2luZyB0aG9zZSBmb3Igbm93LgogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTkyMSw2ICsxOTIzLDcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkKENhY2hlZFBhZ2UqIGNhY2hlZFBhZ2UpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpG
b3J3YXJkOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNlc3Np
b25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAgICAgICBpZiAobV9mcmFtZS5wYWdlKCkpIHsKICAg
ICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBsb2FkIHdpdGhpbiBhIGZyYW1lIGlzIGEgbmF2aWdh
dGlvbiB3aXRoaW4gYSBiYWNrL2ZvcndhcmQgbGlzdCB0aGF0IHdhcyBhdHRhY2hlZAogICAgICAg
ICAgICAgLy8gd2l0aG91dCBhbnkgb2YgdGhlIGl0ZW1zIGJlaW5nIGxvYWRlZCB0aGVuIHdlIG5l
ZWQgdG8gdXBkYXRlIHRoZSBoaXN0b3J5IGluIGEgc2ltaWxhciBtYW5uZXIgYXMKQEAgLTIxNjYs
NiArMjE2OSw3IEBAIENhY2hlUG9saWN5IEZyYW1lTG9hZGVyOjpzdWJyZXNvdXJjZUNhY2hlUG9s
aWN5KCkgY29uc3QKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJhY2s6CiAgICAgY2FzZSBGcmFt
ZUxvYWRUeXBlOjpGb3J3YXJkOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tG
b3J3YXJkOgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0Zvcndh
cmQ6CiAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7CiAgICAgY2FzZSBG
cmFtZUxvYWRUeXBlOjpSZWxvYWRGcm9tT3JpZ2luOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgLy8gQWxyZWFkeSBoYW5kbGVkIGFib3ZlLgpAQCAtMzMzOSw2ICszMzQzLDcgQEAgdm9p
ZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShIaXN0b3J5SXRlbSYgaXRl
bSwgRnJhbWVMb2FkVHlwZSBsb2EKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEZy
YW1lTG9hZFR5cGU6OlN0YW5kYXJkOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlZGly
ZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoKKyAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBl
OjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNhbWU6CiAgICAgICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oIGIvU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaAppbmRleCA1NTk4Njk2Li45YThjMTNiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgKQEAgLTU1LDYgKzU1LDcgQEAg
ZW51bSBjbGFzcyBGcmFtZUxvYWRUeXBlIHsKICAgICBSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9y
d2FyZExpc3QsIC8vIEZJWE1FOiBNZXJnZSAibG9ja0JhY2tGb3J3YXJkTGlzdCIsICJsb2NrSGlz
dG9yeSIsICJxdWlja1JlZGlyZWN0IiBhbmQgImNsaWVudFJlZGlyZWN0IiBpbnRvIGEgc2luZ2xl
IGNvbmNlcHQgb2YgcmVkaXJlY3QuCiAgICAgUmVwbGFjZSwKICAgICBSZWxvYWRGcm9tT3JpZ2lu
LAorICAgIFNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkLCAvLyBBIGJhY2tmb3J3YXJkIG5hdmln
YXRpb24gZm9yIGFuIGl0ZW0gcmVzdG9yZWQgZnJvbSB0aGUgc2Vzc2lvbi4KIH07CiAKIGVudW0g
Y2xhc3MgTmV3RnJhbWVPcGVuZXJQb2xpY3kgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0
b3J5Q29udHJvbGxlci5jcHAKaW5kZXggNTNlZTEyMC4uODkzYjYzMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCkBAIC0yMzEsNiArMjMxLDcgQEAgdm9p
ZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZURvY3VtZW50U3RhdGUoKQogICAgIGNhc2UgRnJh
bWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAg
Y2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6CisgICAgY2FzZSBGcmFtZUxv
YWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICBjYXNlIEZyYW1lTG9hZFR5
cGU6OlJlZGlyZWN0V2l0aExvY2tlZEJhY2tGb3J3YXJkTGlzdDoKICAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OlN0YW5kYXJkOgogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCmluZGV4IDAwMGY5YWEuLmVm
MWEwNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNv
dXJjZUxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlTG9hZGVyLmNwcApAQCAtOTI2LDYgKzkyNiw3IEBAIENhY2hlUG9saWN5IENhY2hlZFJl
c291cmNlTG9hZGVyOjpjYWNoZVBvbGljeShDYWNoZWRSZXNvdXJjZTo6VHlwZSB0eXBlKSBjb25z
dAogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6
OkZvcndhcmQ6CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQ6Cisg
ICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDoKICAgICAg
ICAgLy8gRG8gbm90IHJldmFsaWRhdGUgY2FjaGVkIG1haW4gcmVzb3VyY2Ugb24gYmFjay9mb3J3
YXJkIG5hdmlnYXRpb24uCiAgICAgICAgIHJldHVybiBDYWNoZVBvbGljeUhpc3RvcnlCdWZmZXI7
CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCA3NGRmMThiLi42OGU1MGZiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9t
YWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDItMDUgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9s
ZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNhY2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRl
ciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBIYW5kbGUgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0Zv
cndhcmQgYXMgaW50ZXJuYWwuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1lLm1tOgorICAg
ICAgICAodG9XZWJGcmFtZUxvYWRUeXBlKToKKwogMjAxNi0wMi0wMyAgSmVzc2llIEJlcmxpbiAg
PGpiZXJsaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBCdWlsZCBmaXguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBiZWMyYzE2Li42ZTIyNGUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTEwNjIsNiArMTA2Miw3IEBAIHN0YXRpYyBXZWJG
cmFtZUxvYWRUeXBlIHRvV2ViRnJhbWVMb2FkVHlwZShGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5
cGUpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTYW1lOgogICAgICAgICByZXR1cm4gV2ViRnJh
bWVMb2FkVHlwZVNhbWU7CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWRpcmVjdFdpdGhMb2Nr
ZWRCYWNrRm9yd2FyZExpc3Q6CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9y
ZWRCYWNrRm9yd2FyZDoKICAgICAgICAgcmV0dXJuIFdlYkZyYW1lTG9hZFR5cGVJbnRlcm5hbDsK
ICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlcGxhY2U6CiAgICAgICAgIHJldHVybiBXZWJGcmFt
ZUxvYWRUeXBlUmVwbGFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCA3NzYyN2EyLi5lYmM5MzhhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTYtMDItMDUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyBy
ZXR1cm5lZCBieSBkaXNrIGNhY2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9u
IGlzIHJlc3RvcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTMyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTaW5jZSByMTgxNzM0LCB0aGUgbmV0d29yayBjYWNoZSBuZXZlciByZXZhbGlkYXRlcyBy
ZXNvdXJjZXMgZm9yCisgICAgICAgIGhpc3RvcnkgbmF2aWdhdGlvbi4gVGhpcyBpcyBnb29kIGZv
ciB0aGUgbWVtb3J5IGNhY2hlLCBidXQgaW4gdGhlCisgICAgICAgIGNhc2Ugb2YgZGlzayBjYWNo
ZSwgd2UgbWlnaHQgZW5kIHVwIHdpdGggb3V0ZGF0ZWQgcGFnZXMgd2hlbgorICAgICAgICByZXN0
b3JpbmcgdGhlIHNlc3Npb24uIFdoZW4gcmVzdG9yaW5nIHRoZSBzZXNzaW9uIGhhcHBlbnMgYmVj
YXVzZQorICAgICAgICBvZiBhbiBBUEkgcmVxdWVzdCAod2UgYWxzbyByZXN0b3JlIHRoZSBzZXNz
aW9uIHdoZW4gcmVjb3ZlcmluZworICAgICAgICBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gpLCB3
ZSBzaG91bGQgcmV2YWxpZGF0ZSBiYWNrIGZvcndhcmQgbGlzdAorICAgICAgICByZXF1ZXN0cyBp
biB0aGUgZGlzayBjYWNoZSBpZiBuZWVkZWQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiB0aGUKKyAg
ICAgICAgZmlyc3QgdGltZSB0aGV5IGFyZSBsb2FkZWQgYWZ0ZXIgYSBzZXNzaW9uIHJlc3RvcmUs
IHRoZW4gdGhleSB3aWxsCisgICAgICAgIGJlIGNhY2hlZCBieSB0aGUgcGFnZSBjYWNoZSBvciBt
ZW1vcnkgY2FjaGUuIEFmdGVyIGEgd2ViIHByb2Nlc3MKKyAgICAgICAgY3Jhc2gsIHJlc291cmNl
cyB3aWxsIGJlIHVzZWQgdW5jb25kaW9uYWxseSBmcm9tIHRoZSBkaXNrIGNhY2hlLgorCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9j
ZXNzKTogQWxzbworICAgICAgICBzdG9yZSBpbiB0aGUgSURUb0hpc3RvcnlJdGVtTWFwIHdoZXRo
ZXIgdGhlIGl0ZW0gd2FzIHJlc3RvcmVkIGZyb20KKyAgICAgICAgdGhlIHNlc3Npb24uCisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtV2FzUmVzdG9yZWRGcm9t
U2Vzc2lvbik6CisgICAgICAgIFJldHVybnMgd2hldGhlciB0aGUgaXRlbSB3YXMgcmVzdG9yZWQg
ZnJvbSB0aGUgc2Vzc2lvbi4KKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJv
eHk6Oml0ZW1Gb3JJRCk6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6
OmFkZEl0ZW0pOgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRl
bUF0SW5kZXgpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2VQYWdlOjpXZWJQYWdlKTogQ2FsbCByZXN0b3JlU2Vzc2lvbkludGVy
bmFsIHBhc3NpbmcKKyAgICAgICAgZmFsc2UgYXMgcmVzdG9yZWRCeUFQSVJlcXVlc3QgcGFyYW1l
dGVyLgorICAgICAgICAoV2ViS2l0OjpmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKTog
UmV0dXJuIHRoZSBkZXNpcmVkCisgICAgICAgIEZyYW1lTG9hZFR5cGUgZm9yIHRoZSBpdGVtLiBp
T1MgYWx3YXlzIHJldHVybnMgdGhlIHByb3Bvc2VkIHR5cGUsCisgICAgICAgIGJ1dCBvdGhlciBw
b3J0cyB1c2UgdGhlIG5ldyB0eXBlCisgICAgICAgIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0
b3JlZEJhY2tGb3J3YXJkIGlmIHRoZSBpdGVtIGFzIHJlc3RvcnRlZAorICAgICAgICBmcm9tIHRo
ZSBzZXNzaW9uLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnb0ZvcndhcmQpOiBVc2UgZnJh
bWVMb2FkVHlwZUZvckJhY2tGb3J3YXJkSXRlbSgpLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
Ojpnb0JhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Z29Ub0JhY2tGb3J3
YXJkSXRlbSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXN0b3JlU2Vzc2lv
bkludGVybmFsKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNz
aW9uKTogQ2FsbCByZXN0b3JlU2Vzc2lvbkludGVybmFsCisgICAgICAgIHBhc3NpbmcgdHJ1ZSBh
cyByZXN0b3JlZEJ5QVBJUmVxdWVzdCBwYXJhbWV0ZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaDoKKwogMjAxNi0wMi0wMyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJp
c3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlcG9ydCB3YXNCbG9ja2VkIGFuZCBjYW5u
b3RTaG93VVJMIGVycm9ycyB3aGVuIHVzaW5nIE5ldHdvcmtTZXNzaW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHku
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcAppbmRleCAyMGJjMmExLi43OTA0OWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94
eS5jcHAKQEAgLTQ3LDcgKzQ3LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogLy8gRklYTUUgPHJk
YXI6Ly9wcm9ibGVtLzg4MTkyNjg+OiBUaGlzIGxlYWtzIGFsbCBIaXN0b3J5SXRlbXMgdGhhdCBn
byBpbnRvIHRoZXNlIG1hcHMuCiAvLyBXZSBuZWVkIHRvIGNsZWFyIHVwIHRoZSBsaWZlIHRpbWUg
b2YgdGhlc2Ugb2JqZWN0cy4KIAotdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBSZWZQdHI8SGlz
dG9yeUl0ZW0+PiBJRFRvSGlzdG9yeUl0ZW1NYXA7IC8vICJJRCIgaGVyZSBpcyB0aGUgaXRlbSBJ
RC4KK3N0cnVjdCBIaXN0b3J5SXRlbUluZm8geworICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRl
bTsKKyAgICBib29sIHJlc3RvcmVkRnJvbVNlc3Npb247Cit9OwordHlwZWRlZiBIYXNoTWFwPHVp
bnQ2NF90LCBIaXN0b3J5SXRlbUluZm8+IElEVG9IaXN0b3J5SXRlbU1hcDsgLy8gIklEIiBoZXJl
IGlzIHRoZSBpdGVtIElELgogICAgIAogc3RydWN0IEl0ZW1BbmRQYWdlSUQgewogICAgIHVpbnQ2
NF90IGl0ZW1JRDsKQEAgLTk0LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlQmFja0Zvcndh
cmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlELCBIaXN0b3J5SXRlbSoKICAg
ICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29ubmVjdGlvbigpLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkFkZEJhY2tGb3J3YXJkSXRlbShpdGVtSUQsIHBh
Z2VJRCwgdG9QYWdlU3RhdGUoKml0ZW0pKSwgMCk7CiB9CiAKLXZvaWQgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1JRCwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gcHJwSXRlbSwgdWludDY0X3QgcGFnZUlEKQordm9pZCBX
ZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3ModWludDY0X3QgaXRl
bUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBwcnBJdGVtLCBib29sIHJlc3Rv
cmVkRnJvbVNlc3Npb24sIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICAgICBSZWZQdHI8SGlzdG9yeUl0
ZW0+IGl0ZW0gPSBwcnBJdGVtOwogICAgIApAQCAtMTAzLDcgKzEwNywxMiBAQCB2b2lkIFdlYkJh
Y2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQs
IFBhc3NSZWZQdHI8VwogICAgIEFTU0VSVCghaWRUb0hpc3RvcnlJdGVtTWFwKCkuY29udGFpbnMo
aXRlbUlEKSk7CiAKICAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5zZXQ8SXRlbUFuZFBhZ2VJRD4o
aXRlbSwgeyAuaXRlbUlEID0gaXRlbUlELCAucGFnZUlEID0gcGFnZUlEIH0pOwotICAgIGlkVG9I
aXN0b3J5SXRlbU1hcCgpLnNldChpdGVtSUQsIGl0ZW0pOworICAgIGlkVG9IaXN0b3J5SXRlbU1h
cCgpLnNldDxIaXN0b3J5SXRlbUluZm8+KGl0ZW1JRCwgeyAuaXRlbSA9IGl0ZW0sIC5yZXN0b3Jl
ZEZyb21TZXNzaW9uID0gcmVzdG9yZWRGcm9tU2Vzc2lvbiB9KTsKK30KKworYm9vbCBXZWJCYWNr
Rm9yd2FyZExpc3RQcm94eTo6aXRlbVdhc1Jlc3RvcmVkRnJvbVNlc3Npb24odWludDY0X3QgaXRl
bUlEKQoreworICAgIHJldHVybiBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5nZXQoaXRlbUlEKS5yZXN0
b3JlZEZyb21TZXNzaW9uOwogfQogCiBzdGF0aWMgdm9pZCBXSzJOb3RpZnlIaXN0b3J5SXRlbUNo
YW5nZWQoSGlzdG9yeUl0ZW0qIGl0ZW0pCkBAIC0xMTcsNyArMTI2LDcgQEAgc3RhdGljIHZvaWQg
V0syTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKEhpc3RvcnlJdGVtKiBpdGVtKQogCiBIaXN0b3J5
SXRlbSogV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1Gb3JJRCh1aW50NjRfdCBpdGVtSUQp
CiB7Ci0gICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1hcCgpLmdldChpdGVtSUQpOworICAgIHJl
dHVybiBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5nZXQoaXRlbUlEKS5pdGVtLmdldCgpOwogfQogCiB1
aW50NjRfdCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aWRGb3JJdGVtKEhpc3RvcnlJdGVtKiBp
dGVtKQpAQCAtMTI4LDcgKzEzNyw3IEBAIHVpbnQ2NF90IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5
OjppZEZvckl0ZW0oSGlzdG9yeUl0ZW0qIGl0ZW0pCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OnJlbW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIFJlZlB0cjxIaXN0b3J5
SXRlbT4gaXRlbSA9IGlkVG9IaXN0b3J5SXRlbU1hcCgpLnRha2UoaXRlbUlEKTsKKyAgICBSZWZQ
dHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS50YWtlKGl0ZW1JRCku
aXRlbTsKICAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0xNTcs
NyArMTY2LDcgQEAgdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbShSZWY8SGlz
dG9yeUl0ZW0+JiYgaXRlbSkKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmFkZChpdGVtSUQpOwog
CiAgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkuc2V0PEl0ZW1BbmRQYWdlSUQ+KGl0ZW0ucHRyKCks
IHsgLml0ZW1JRCA9IGl0ZW1JRCwgLnBhZ2VJRCA9IG1fcGFnZS0+cGFnZUlEKCkgfSk7Ci0gICAg
aWRUb0hpc3RvcnlJdGVtTWFwKCkuc2V0KGl0ZW1JRCwgaXRlbS5wdHIoKSk7CisgICAgaWRUb0hp
c3RvcnlJdGVtTWFwKCkuc2V0PEhpc3RvcnlJdGVtSW5mbz4oaXRlbUlELCB7IC5pdGVtID0gaXRl
bS5wdHIoKSwgLnJlc3RvcmVkRnJvbVNlc3Npb24gPSBmYWxzZSB9KTsKIAogICAgIHVwZGF0ZUJh
Y2tGb3J3YXJkSXRlbShpdGVtSUQsIG1fcGFnZS0+cGFnZUlEKCksIGl0ZW0ucHRyKCkpOwogICAg
IG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEFkZEl0ZW0o
aXRlbUlEKSk7CkBAIC0xODIsMTAgKzE5MSw3IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eTo6aXRlbUF0SW5kZXgoaW50IGl0ZW1JbmRleCkKICAgICBpZiAoIVdlYlByb2Nl
c3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwgTWVz
c2FnZXM6OldlYlBhZ2VQcm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlE
KSwgbV9wYWdlLT5wYWdlSUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFpdGVt
SUQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1hcCgp
LmdldChpdGVtSUQpOworICAgIHJldHVybiBpdGVtSUQgPyBpdGVtRm9ySUQoaXRlbUlEKSA6IG51
bGxwdHI7CiB9CiAKIGludCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0xpc3RDb3VudCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJC
YWNrRm9yd2FyZExpc3RQcm94eS5oCmluZGV4IGUyODg1MTkuLjA4NTVmNTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2Fy
ZExpc3RQcm94eS5oCkBAIC00Miw4ICs0Miw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdWludDY0
X3QgaWRGb3JJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKik7CiAgICAgc3RhdGljIHZvaWQgcmVt
b3ZlSXRlbSh1aW50NjRfdCBpdGVtSUQpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkSXRlbUZyb21V
SVByb2Nlc3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVt
PiwgdWludDY0X3QgcGFnZUlEKTsKKyAgICBzdGF0aWMgdm9pZCBhZGRJdGVtRnJvbVVJUHJvY2Vz
cyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+LCBib29s
IHJlc3RvcmVkRnJvbVNlc3Npb24sIHVpbnQ2NF90IHBhZ2VJRCk7CiAgICAgc3RhdGljIHZvaWQg
c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3ModWludDY0X3QgaXRlbUlEKTsKKyAgICBzdGF0
aWMgYm9vbCBpdGVtV2FzUmVzdG9yZWRGcm9tU2Vzc2lvbih1aW50NjRfdCBpdGVtSUQpOwogICAg
IAogICAgIHZvaWQgY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwCmluZGV4IDYxYjkwMzQuLmIwODc5MjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ5MSw3ICs0OTEsNyBAQCBX
ZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFnZUNyZWF0aW9uUGFy
YW1ldGVycyYgcGFyYW1ldGVycykKICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6c2V0SGln
aGVzdEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVycy5oaWdoZXN0VXNlZEJhY2tGb3J3YXJk
SXRlbUlEKTsKICAgICAKICAgICBpZiAoIXBhcmFtZXRlcnMuaXRlbVN0YXRlcy5pc0VtcHR5KCkp
Ci0gICAgICAgIHJlc3RvcmVTZXNzaW9uKHBhcmFtZXRlcnMuaXRlbVN0YXRlcyk7CisgICAgICAg
IHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwocGFyYW1ldGVycy5pdGVtU3RhdGVzLCBmYWxzZSk7CiAK
ICAgICBpZiAocGFyYW1ldGVycy5zZXNzaW9uSUQuaXNWYWxpZCgpKQogICAgICAgICBzZXRTZXNz
aW9uSUQocGFyYW1ldGVycy5zZXNzaW9uSUQpOwpAQCAtMTE5Myw2ICsxMTkzLDE2IEBAIHZvaWQg
V2ViUGFnZTo6cmVsb2FkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgYm9vbCByZWxvYWRGcm9tT3Jp
Z2luLCBib29sIGNvbnRlbnRCCiAgICAgY29yZVBhZ2UoKS0+dXNlcklucHV0QnJpZGdlKCkucmVs
b2FkRnJhbWUobV9tYWluRnJhbWUtPmNvcmVGcmFtZSgpLCByZWxvYWRGcm9tT3JpZ2luLCBjb250
ZW50QmxvY2tlcnNFbmFibGVkKTsKIH0KIAorc3RhdGljIGlubGluZSBGcmFtZUxvYWRUeXBlIGZy
YW1lTG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQs
IEZyYW1lTG9hZFR5cGUgcHJvcG9zZWRUeXBlKQoreworI2lmICFQTEFURk9STShJT1MpCisgICAg
Ly8gaU9TIGFsd2F5cyB3YW50IHN0YWxlIGRhdGEgZm9yIGhpc3RvcnkgbmF2aWdhdGlvbi4KKyAg
ICBpZiAoV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1XYXNSZXN0b3JlZEZyb21TZXNzaW9u
KGJhY2tGb3J3YXJkSXRlbUlEKSkKKyAgICAgICAgcmV0dXJuIEZyYW1lTG9hZFR5cGU6OlNlc3Np
b25SZXN0b3JlZEJhY2tGb3J3YXJkOworI2VuZGlmCisgICAgcmV0dXJuIHByb3Bvc2VkVHlwZTsK
K30KKwogdm9pZCBXZWJQYWdlOjpnb0ZvcndhcmQodWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50
NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKIHsKICAgICBTZW5kU3RvcFJlc3BvbnNpdmVuZXNzVGlt
ZXIgc3RvcHBlcih0aGlzKTsKQEAgLTEyMDUsNyArMTIxNSw3IEBAIHZvaWQgV2ViUGFnZTo6Z29G
b3J3YXJkKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQp
CiAgICAgQVNTRVJUKCFtX3BlbmRpbmdOYXZpZ2F0aW9uSUQpOwogICAgIG1fcGVuZGluZ05hdmln
YXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIEZy
YW1lTG9hZFR5cGU6OkZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIGZyYW1l
TG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQsIEZyYW1lTG9hZFR5
cGU6OkZvcndhcmQpKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnb0JhY2sodWludDY0X3QgbmF2aWdh
dGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZW1JRCkKQEAgLTEyMjAsNyArMTIzMCw3IEBA
IHZvaWQgV2ViUGFnZTo6Z29CYWNrKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFj
a0ZvcndhcmRJdGVtSUQpCiAgICAgQVNTRVJUKCFtX3BlbmRpbmdOYXZpZ2F0aW9uSUQpOwogICAg
IG1fcGVuZGluZ05hdmlnYXRpb25JRCA9IG5hdmlnYXRpb25JRDsKIAotICAgIG1fcGFnZS0+Z29U
b0l0ZW0oKml0ZW0sIEZyYW1lTG9hZFR5cGU6OkJhY2spOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0o
Kml0ZW0sIGZyYW1lTG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQs
IEZyYW1lTG9hZFR5cGU6OkJhY2spKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpnb1RvQmFja0Zvcndh
cmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQp
CkBAIC0xMjM1LDcgKzEyNDUsNyBAQCB2b2lkIFdlYlBhZ2U6OmdvVG9CYWNrRm9yd2FyZEl0ZW0o
dWludDY0X3QgbmF2aWdhdGlvbklELCB1aW50NjRfdCBiYWNrRm9yd2FyZEl0ZQogICAgIEFTU0VS
VCghbV9wZW5kaW5nTmF2aWdhdGlvbklEKTsKICAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBu
YXZpZ2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBl
OjpJbmRleGVkQmFja0ZvcndhcmQpOworICAgIG1fcGFnZS0+Z29Ub0l0ZW0oKml0ZW0sIGZyYW1l
TG9hZFR5cGVGb3JCYWNrRm9yd2FyZEl0ZW0oYmFja0ZvcndhcmRJdGVtSUQsIEZyYW1lTG9hZFR5
cGU6OkluZGV4ZWRCYWNrRm9yd2FyZCkpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnRyeVJlc3RvcmVT
Y3JvbGxQb3NpdGlvbigpCkBAIC0yMTc3LDEwICsyMTg3LDE1IEBAIHZvaWQgV2ViUGFnZTo6ZXhl
Y3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYg
YXJndW1lCiAgICAgZXhlY3V0ZUVkaXRpbmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7
CiB9CiAKLXZvaWQgV2ViUGFnZTo6cmVzdG9yZVNlc3Npb24oY29uc3QgVmVjdG9yPEJhY2tGb3J3
YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1TdGF0ZXMpCit2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNz
aW9uSW50ZXJuYWwoY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0ZW1T
dGF0ZXMsIGJvb2wgcmVzdG9yZWRCeUFQSVJlcXVlc3QpCiB7CiAgICAgZm9yIChjb25zdCBhdXRv
JiBpdGVtU3RhdGUgOiBpdGVtU3RhdGVzKQotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6YWRkSXRlbUZyb21VSVByb2Nlc3MoaXRlbVN0YXRlLmlkZW50aWZpZXIsIHRvSGlzdG9yeUl0
ZW0oaXRlbVN0YXRlLnBhZ2VTdGF0ZSksIG1fcGFnZUlEKTsKKyAgICAgICAgV2ViQmFja0Zvcndh
cmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGl0ZW1TdGF0ZS5pZGVudGlmaWVyLCB0
b0hpc3RvcnlJdGVtKGl0ZW1TdGF0ZS5wYWdlU3RhdGUpLCByZXN0b3JlZEJ5QVBJUmVxdWVzdCwg
bV9wYWdlSUQpOworfQorCit2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uKGNvbnN0IFZlY3Rv
cjxCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGU+JiBpdGVtU3RhdGVzKQoreworICAgIHJlc3RvcmVT
ZXNzaW9uSW50ZXJuYWwoaXRlbVN0YXRlcywgdHJ1ZSk7CiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5k
ZXggN2ViMzU0Mi4uYmEyZDRjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCkBAIC0xMDE0LDYgKzEwMTQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBs
b2FkVVJMSW5GcmFtZShjb25zdCBTdHJpbmcmLCB1aW50NjRfdCBmcmFtZUlEKTsKIAorICAgIHZv
aWQgcmVzdG9yZVNlc3Npb25JbnRlcm5hbChjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRl
bVN0YXRlPiYsIGJvb2wgcmVzdG9yZWRCeUFQSVJlcXVlc3QpOwogICAgIHZvaWQgcmVzdG9yZVNl
c3Npb24oY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mKTsKICAgICB2b2lk
IGRpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271879</attachid>
            <date>2016-02-21 01:47:29 -0800</date>
            <delta_ts>2016-02-26 00:48:09 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-history-session-restore.diff</filename>
            <type>text/plain</type>
            <size>20461</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlYTYyN2MyLi41ZGYxMjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTYtMDItMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgRnJh
bWVMb2FkVHlwZSB0byBpbmRpY2F0ZSB0aGF0IHdlIGFyZSBsb2FkaW5nIGEgaGlzdG9yeQorICAg
ICAgICBpdGVtIHRoYXQgd2FzIHJlc3RvcmVkIGZyb20gdGhlIHNlc3Npb24uIEl0IGJlaGF2ZXMg
ZXhhY3RseSBhcyBhbnkKKyAgICAgICAgb3RoZXIgaGlzdG9yeSBuYXZpZ2F0aW9uIGV4Y2VwdCB0
aGF0IGl0IHVzZXMgdGhlIGRlZmF1bHQgcmVxdWVzdAorICAgICAgICBwb2xpY3kgY2FjaGUgdG8g
ZW5zdXJlIHdlIGRvIG5vdCB1c2Ugc3RhbGUgY2FjaGVkIGRhdGEgaW4gdGhpcyBjYXNlLgorCisg
ICAgICAgICogaGlzdG9yeS9QYWdlQ2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2FuQ2Fj
aGVQYWdlKToKKyAgICAgICAgKiBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6aXNCYWNrRm9yd2FyZExvYWRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmxvZ05hdmln
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXI6OnRyYW5zaXRpb25Ub0NvbW1p
dHRlZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6c3VicmVzb3VyY2VDYWNoZVBv
bGljeSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3Vt
ZW50SXRlbSk6CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaDoKKyAgICAgICAg
KiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OnJlc3RvcmVEb2N1bWVudFN0YXRlKToKKyAgICAgICAgKiBsb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVz
b3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KToKKwogMjAxNi0wMi0xOSAgQ2hyaXMgRHVtZXogIDxj
ZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIExhbmQgcmVsZWFzZSBhc3NlcnRpb25zIHRvIGhl
bHAgdHJhY2sgZG93biBhIHBvc3NpYmxlIEhUTUxDb2xsZWN0aW9uIGxpZmV0aW1lIGJ1ZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvaGlzdG9yeS9QYWdlQ2FjaGUuY3BwCmluZGV4IGQyN2VlYWIuLjZkNjVjYjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvUGFnZUNhY2hlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L1BhZ2VDYWNoZS5jcHAKQEAgLTI1NCw2ICsyNTQsNyBAQCBzdGF0aWMg
Ym9vbCBjYW5DYWNoZVBhZ2UoUGFnZSYgcGFnZSkKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJh
Y2s6CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkOgogICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkOiAvLyBhIG11bHRpLWl0ZW0gaG9wIGluIHRoZSBiYWNr
Zm9yd2FyZCBsaXN0CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNr
Rm9yd2FyZDoKICAgICAgICAgLy8gQ2FjaGVhYmxlLgogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAppbmRleCA2MjM1OWNjLi5iNTRmZjk2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKQEAgLTE2NCw2ICsxNjQsNyBAQCBi
b29sIGlzQmFja0ZvcndhcmRMb2FkVHlwZShGcmFtZUxvYWRUeXBlIHR5cGUpCiAgICAgY2FzZSBG
cmFtZUxvYWRUeXBlOjpCYWNrOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoKICAg
ICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoKKyAgICBjYXNlIEZyYW1l
TG9hZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzczLDYgKzEzNzQsNyBA
QCBzdGF0aWMgdm9pZCBsb2dOYXZpZ2F0aW9uKE1haW5GcmFtZSYgZnJhbWUsIEZyYW1lTG9hZFR5
cGUgdHlwZSkKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZXBsYWNl
OgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6UmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRM
aXN0OgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0ZvcndhcmQ6
CiAgICAgICAgIC8vIE5vdCBsb2dnaW5nIHRob3NlIGZvciBub3cuCiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xOTIxLDYgKzE5MjMsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp0cmFuc2l0aW9u
VG9Db21taXR0ZWQoQ2FjaGVkUGFnZSogY2FjaGVkUGFnZSkKICAgICBjYXNlIEZyYW1lTG9hZFR5
cGU6OkZvcndhcmQ6CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgogICAgIGNhc2UgRnJh
bWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkOgorICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6
U2Vzc2lvblJlc3RvcmVkQmFja0ZvcndhcmQ6CiAgICAgICAgIGlmIChtX2ZyYW1lLnBhZ2UoKSkg
ewogICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGxvYWQgd2l0aGluIGEgZnJhbWUgaXMgYSBu
YXZpZ2F0aW9uIHdpdGhpbiBhIGJhY2svZm9yd2FyZCBsaXN0IHRoYXQgd2FzIGF0dGFjaGVkCiAg
ICAgICAgICAgICAvLyB3aXRob3V0IGFueSBvZiB0aGUgaXRlbXMgYmVpbmcgbG9hZGVkIHRoZW4g
d2UgbmVlZCB0byB1cGRhdGUgdGhlIGhpc3RvcnkgaW4gYSBzaW1pbGFyIG1hbm5lciBhcwpAQCAt
MjE2Niw2ICsyMTY5LDcgQEAgQ2FjaGVQb2xpY3kgRnJhbWVMb2FkZXI6OnN1YnJlc291cmNlQ2Fj
aGVQb2xpY3koKSBjb25zdAogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6QmFjazoKICAgICBjYXNl
IEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVk
QmFja0ZvcndhcmQ6CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNr
Rm9yd2FyZDoKICAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5SGlzdG9yeUJ1ZmZlcjsKICAgICBj
YXNlIEZyYW1lTG9hZFR5cGU6OlJlbG9hZEZyb21PcmlnaW46CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyAvLyBBbHJlYWR5IGhhbmRsZWQgYWJvdmUuCkBAIC0zMzQxLDYgKzMzNDUsNyBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpsb2FkRGlmZmVyZW50RG9jdW1lbnRJdGVtKEhpc3RvcnlJdGVt
JiBpdGVtLCBGcmFtZUxvYWRUeXBlIGxvYQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgRnJhbWVMb2FkVHlwZTo6U3RhbmRhcmQ6CiAgICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6
UmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0OgorICAgICAgICBjYXNlIEZyYW1lTG9h
ZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6U2FtZToKICAgICAgICAgZGVmYXVsdDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXJUeXBlcy5oCmluZGV4IDU1OTg2OTYuLjlhOGMxM2Ig
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlclR5cGVzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyVHlwZXMuaApAQCAtNTUsNiArNTUs
NyBAQCBlbnVtIGNsYXNzIEZyYW1lTG9hZFR5cGUgewogICAgIFJlZGlyZWN0V2l0aExvY2tlZEJh
Y2tGb3J3YXJkTGlzdCwgLy8gRklYTUU6IE1lcmdlICJsb2NrQmFja0ZvcndhcmRMaXN0IiwgImxv
Y2tIaXN0b3J5IiwgInF1aWNrUmVkaXJlY3QiIGFuZCAiY2xpZW50UmVkaXJlY3QiIGludG8gYSBz
aW5nbGUgY29uY2VwdCBvZiByZWRpcmVjdC4KICAgICBSZXBsYWNlLAogICAgIFJlbG9hZEZyb21P
cmlnaW4sCisgICAgU2Vzc2lvblJlc3RvcmVkQmFja0ZvcndhcmQsIC8vIEEgYmFja2ZvcndhcmQg
bmF2aWdhdGlvbiBmb3IgYW4gaXRlbSByZXN0b3JlZCBmcm9tIHRoZSBzZXNzaW9uLgogfTsKIAog
ZW51bSBjbGFzcyBOZXdGcmFtZU9wZW5lclBvbGljeSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0hpc3RvcnlDb250cm9sbGVyLmNwcAppbmRleCBhMzMyODdkLi5mYmQxNTZiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKQEAgLTIzMSw2ICsyMzEsNyBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlRG9jdW1lbnRTdGF0ZSgpCiAgICAgY2Fz
ZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgogICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6Rm9yd2FyZDoK
ICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2FyZDoKKyAgICBjYXNlIEZy
YW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgogICAgIGNhc2UgRnJhbWVM
b2FkVHlwZTo6UmVkaXJlY3RXaXRoTG9ja2VkQmFja0ZvcndhcmRMaXN0OgogICAgIGNhc2UgRnJh
bWVMb2FkVHlwZTo6U3RhbmRhcmQ6CiAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAKaW5kZXggMDAwZjlh
YS4uZWYxYTA1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hl
ZFJlc291cmNlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIuY3BwCkBAIC05MjYsNiArOTI2LDcgQEAgQ2FjaGVQb2xpY3kgQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmNhY2hlUG9saWN5KENhY2hlZFJlc291cmNlOjpUeXBlIHR5cGUp
IGNvbnN0CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpCYWNrOgogICAgIGNhc2UgRnJhbWVMb2Fk
VHlwZTo6Rm9yd2FyZDoKICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkluZGV4ZWRCYWNrRm9yd2Fy
ZDoKKyAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlNlc3Npb25SZXN0b3JlZEJhY2tGb3J3YXJkOgog
ICAgICAgICAvLyBEbyBub3QgcmV2YWxpZGF0ZSBjYWNoZWQgbWFpbiByZXNvdXJjZSBvbiBiYWNr
L2ZvcndhcmQgbmF2aWdhdGlvbi4KICAgICAgICAgcmV0dXJuIENhY2hlUG9saWN5SGlzdG9yeUJ1
ZmZlcjsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGJiMmY5MGEuLjRhNjMyNWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMi0yMSAgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgTmV0d29yayBjYWNo
ZTogb2xkIHBhZ2VzIHJldHVybmVkIGJ5IGRpc2sgY2FjaGUgb24gaGlzdG9yeSBuYXZpZ2F0aW9u
IGFmdGVyIHNlc3Npb24gaXMgcmVzdG9yZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MzIzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEhhbmRsZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRC
YWNrRm9yd2FyZCBhcyBpbnRlcm5hbC4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICh0b1dlYkZyYW1lTG9hZFR5cGUpOgorCiAyMDE2LTAyLTE1ICBCcmVudCBGdWxn
aGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEdhdGhlciBzb21lIHJ1
ZGltZW50YXJ5IHN0YXRpc3RpY3MgZHVyaW5nIHJlc291cmNlIGxvYWQgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAwNTY0YzVmLi4xNDQ2Y2E4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTEwODYsNiArMTA4Niw3IEBAIHN0YXRpYyBXZWJG
cmFtZUxvYWRUeXBlIHRvV2ViRnJhbWVMb2FkVHlwZShGcmFtZUxvYWRUeXBlIGZyYW1lTG9hZFR5
cGUpCiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTYW1lOgogICAgICAgICByZXR1cm4gV2ViRnJh
bWVMb2FkVHlwZVNhbWU7CiAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWRpcmVjdFdpdGhMb2Nr
ZWRCYWNrRm9yd2FyZExpc3Q6CisgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9y
ZWRCYWNrRm9yd2FyZDoKICAgICAgICAgcmV0dXJuIFdlYkZyYW1lTG9hZFR5cGVJbnRlcm5hbDsK
ICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OlJlcGxhY2U6CiAgICAgICAgIHJldHVybiBXZWJGcmFt
ZUxvYWRUeXBlUmVwbGFjZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAyZThjMjYwLi4zNmUwNWMxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMTYtMDItMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8
Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyBy
ZXR1cm5lZCBieSBkaXNrIGNhY2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9u
IGlzIHJlc3RvcmVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTMyMzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBTaW5jZSByMTgxNzM0LCB0aGUgbmV0d29yayBjYWNoZSBuZXZlciByZXZhbGlkYXRlcyBy
ZXNvdXJjZXMgZm9yCisgICAgICAgIGhpc3RvcnkgbmF2aWdhdGlvbi4gVGhpcyBpcyBnb29kIGZv
ciB0aGUgbWVtb3J5IGNhY2hlLCBidXQgaW4gdGhlCisgICAgICAgIGNhc2Ugb2YgZGlzayBjYWNo
ZSwgd2UgbWlnaHQgZW5kIHVwIHdpdGggb3V0ZGF0ZWQgcGFnZXMgd2hlbgorICAgICAgICByZXN0
b3JpbmcgdGhlIHNlc3Npb24uIFdoZW4gcmVzdG9yaW5nIHRoZSBzZXNzaW9uIGhhcHBlbnMgYmVj
YXVzZQorICAgICAgICBvZiBhbiBBUEkgcmVxdWVzdCAod2UgYWxzbyByZXN0b3JlIHRoZSBzZXNz
aW9uIHdoZW4gcmVjb3ZlcmluZworICAgICAgICBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gpLCB3
ZSBzaG91bGQgcmV2YWxpZGF0ZSBiYWNrIGZvcndhcmQgbGlzdAorICAgICAgICByZXF1ZXN0cyBp
biB0aGUgZGlzayBjYWNoZSBpZiBuZWVkZWQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiB0aGUKKyAg
ICAgICAgZmlyc3QgdGltZSB0aGV5IGFyZSBsb2FkZWQgYWZ0ZXIgYSBzZXNzaW9uIHJlc3RvcmUu
IEFmdGVyIGEgd2ViIHByb2Nlc3MKKyAgICAgICAgY3Jhc2gsIHJlc291cmNlcyB3aWxsIGJlIHVz
ZWQgdW5jb25kaW9uYWxseSBmcm9tIHRoZSBkaXNrIGNhY2hlLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUxvYWRlckNsaWVudC5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaExvYWQpOiBSZXNl
dCB0aGUKKyAgICAgICAgcmVzdG9yZWRGcm9tU2Vzc2lvbiBmbGFnIG9mIHRoZSBoaXN0b3J5IGl0
ZW0gaWYgdGhpcyB3YXMgYQorICAgICAgICBTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZCBsb2Fk
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5j
cHA6CisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJv
bVVJUHJvY2Vzcyk6IEFsc28KKyAgICAgICAgc3RvcmUgaW4gdGhlIElEVG9IaXN0b3J5SXRlbU1h
cCB3aGV0aGVyIHRoZSBpdGVtIHdhcyByZXN0b3JlZCBmcm9tCisgICAgICAgIHRoZSBzZXNzaW9u
LgorICAgICAgICAoV2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbVdhc1Jlc3Rv
cmVkRnJvbVNlc3Npb24pOgorICAgICAgICBSZXR1cm5zIHdoZXRoZXIgdGhlIGl0ZW0gd2FzIHJl
c3RvcmVkIGZyb20gdGhlIHNlc3Npb24uCisgICAgICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJk
TGlzdFByb3h5OjpkaWRMb2FkU2Vzc2lvblJlc3RvcmVkSGlzdG9yeUl0ZW0pOgorICAgICAgICBS
ZXNldCB0aGUgcmVzdG9yZWRGcm9tU2Vzc2lvbiBmbGFnIGZvciB0aGUgZ2l2ZW4gaXRlbS4KKyAg
ICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6Oml0ZW1Gb3JJRCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjpyZW1vdmVJdGVtKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW0pOgorICAgICAgICAo
V2ViS2l0OjpXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbUF0SW5kZXgpOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2VQYWdl
OjpXZWJQYWdlKTogQ2FsbCByZXN0b3JlU2Vzc2lvbkludGVybmFsIHBhc3NpbmcKKyAgICAgICAg
ZmFsc2UgYXMgcmVzdG9yZWRCeUFQSVJlcXVlc3QgcGFyYW1ldGVyLgorICAgICAgICAoV2ViS2l0
OjpmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKTogUmV0dXJuIHRoZSBkZXNpcmUKKyAg
ICAgICAgRnJhbWVMb2FkVHlwZSBmb3IgdGhlIGl0ZW0uIGlPUyBhbHdheXMgcmV0dXJucyB0aGUg
cHJvcG9zZWQgdHlwZSwKKyAgICAgICAgYnV0IG90aGVyIHBvcnRzIHVzZSB0aGUgbmV3IHR5cGUK
KyAgICAgICAgRnJhbWVMb2FkVHlwZTo6U2Vzc2lvblJlc3RvcmVkQmFja0ZvcndhcmQgaWYgdGhl
IGl0ZW0gYXMgcmVzdG9ydGVkCisgICAgICAgIGZyb20gdGhlIHNlc3Npb24uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdvRm9yd2FyZCk6IFVzZSBmcmFtZUxvYWRUeXBlRm9yQmFja0Zvcndh
cmRJdGVtKCkuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdvQmFjayk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnb1RvQmFja0ZvcndhcmRJdGVtKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uSW50ZXJuYWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9yZVNlc3Npb24pOiBDYWxsIHJlc3RvcmVTZXNz
aW9uSW50ZXJuYWwKKyAgICAgICAgcGFzc2luZyB0cnVlIGFzIHJlc3RvcmVkQnlBUElSZXF1ZXN0
IHBhcmFtZXRlci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorCiAy
MDE2LTAyLTE5ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYkF1
dG9tYXRpb25TZXNzaW9uIHNob3VsZCB0ZWxsIGl0cyBkZWxlZ2F0ZSB3aGVuIGl0cyByZW1vdGUg
ZW5kIGRpc2Nvbm5lY3RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lTG9hZGVyQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCmluZGV4IGI4
OWQ3YTEuLjAxOWQ4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVMb2FkZXJDbGllbnQuY3BwCkBAIC01
NTQsOSArNTU0LDEzIEBAIHZvaWQgV2ViRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlu
aXNoTG9hZCgpCiAgICAgaWYgKCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBhdXRv
JiBmcmFtZUxvYWRlciA9IG1fZnJhbWUtPmNvcmVGcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBpZiAo
ZnJhbWVMb2FkZXIubG9hZFR5cGUoKSA9PSBGcmFtZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRC
YWNrRm9yd2FyZCkKKyAgICAgICAgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmRpZExvYWRTZXNz
aW9uUmVzdG9yZWRIaXN0b3J5SXRlbShmcmFtZUxvYWRlci5oaXN0b3J5KCkuY3VycmVudEl0ZW0o
KSk7CisKICAgICBSZWZQdHI8QVBJOjpPYmplY3Q+IHVzZXJEYXRhOwogCi0gICAgYXV0byBuYXZp
Z2F0aW9uSUQgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCptX2ZyYW1lLT5jb3Jl
RnJhbWUoKS0+bG9hZGVyKCkuZG9jdW1lbnRMb2FkZXIoKSkubmF2aWdhdGlvbklEKCk7CisgICAg
YXV0byBuYXZpZ2F0aW9uSUQgPSBzdGF0aWNfY2FzdDxXZWJEb2N1bWVudExvYWRlciY+KCpmcmFt
ZUxvYWRlci5kb2N1bWVudExvYWRlcigpKS5uYXZpZ2F0aW9uSUQoKTsKIAogICAgIC8vIE5vdGlm
eSB0aGUgYnVuZGxlIGNsaWVudC4KICAgICB3ZWJQYWdlLT5pbmplY3RlZEJ1bmRsZUxvYWRlckNs
aWVudCgpLmRpZEZpbmlzaExvYWRGb3JGcmFtZSh3ZWJQYWdlLCBtX2ZyYW1lLCB1c2VyRGF0YSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zv
cndhcmRMaXN0UHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YkJhY2tGb3J3YXJkTGlzdFByb3h5LmNwcAppbmRleCAyMGJjMmExLi5hNWU0NzM3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0
UHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNr
Rm9yd2FyZExpc3RQcm94eS5jcHAKQEAgLTQ3LDcgKzQ3LDExIEBAIG5hbWVzcGFjZSBXZWJLaXQg
ewogLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzg4MTkyNjg+OiBUaGlzIGxlYWtzIGFsbCBIaXN0
b3J5SXRlbXMgdGhhdCBnbyBpbnRvIHRoZXNlIG1hcHMuCiAvLyBXZSBuZWVkIHRvIGNsZWFyIHVw
IHRoZSBsaWZlIHRpbWUgb2YgdGhlc2Ugb2JqZWN0cy4KIAotdHlwZWRlZiBIYXNoTWFwPHVpbnQ2
NF90LCBSZWZQdHI8SGlzdG9yeUl0ZW0+PiBJRFRvSGlzdG9yeUl0ZW1NYXA7IC8vICJJRCIgaGVy
ZSBpcyB0aGUgaXRlbSBJRC4KK3N0cnVjdCBIaXN0b3J5SXRlbUluZm8geworICAgIFJlZlB0cjxI
aXN0b3J5SXRlbT4gaXRlbTsKKyAgICBib29sIHJlc3RvcmVkRnJvbVNlc3Npb247Cit9OwordHlw
ZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBIaXN0b3J5SXRlbUluZm8+IElEVG9IaXN0b3J5SXRlbU1h
cDsgLy8gIklEIiBoZXJlIGlzIHRoZSBpdGVtIElELgogICAgIAogc3RydWN0IEl0ZW1BbmRQYWdl
SUQgewogICAgIHVpbnQ2NF90IGl0ZW1JRDsKQEAgLTk0LDcgKzk4LDcgQEAgc3RhdGljIHZvaWQg
dXBkYXRlQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGl0ZW1JRCwgdWludDY0X3QgcGFnZUlELCBI
aXN0b3J5SXRlbSoKICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0b24oKS5wYXJlbnRQcm9jZXNzQ29u
bmVjdGlvbigpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQcm9jZXNzUHJveHk6OkFkZEJhY2tGb3J3YXJk
SXRlbShpdGVtSUQsIHBhZ2VJRCwgdG9QYWdlU3RhdGUoKml0ZW0pKSwgMCk7CiB9CiAKLXZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0
ZW1JRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gcHJwSXRlbSwgdWludDY0X3Qg
cGFnZUlEKQordm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nl
c3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBwcnBJ
dGVtLCBib29sIHJlc3RvcmVkRnJvbVNlc3Npb24sIHVpbnQ2NF90IHBhZ2VJRCkKIHsKICAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBwcnBJdGVtOwogICAgIApAQCAtMTAzLDcgKzEwNywy
NiBAQCB2b2lkIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1
aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8VwogICAgIEFTU0VSVCghaWRUb0hpc3RvcnlJdGVt
TWFwKCkuY29udGFpbnMoaXRlbUlEKSk7CiAKICAgICBoaXN0b3J5SXRlbVRvSURNYXAoKS5zZXQ8
SXRlbUFuZFBhZ2VJRD4oaXRlbSwgeyAuaXRlbUlEID0gaXRlbUlELCAucGFnZUlEID0gcGFnZUlE
IH0pOwotICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgpLnNldChpdGVtSUQsIGl0ZW0pOworICAgIGlk
VG9IaXN0b3J5SXRlbU1hcCgpLnNldDxIaXN0b3J5SXRlbUluZm8+KGl0ZW1JRCwgeyAuaXRlbSA9
IGl0ZW0sIC5yZXN0b3JlZEZyb21TZXNzaW9uID0gcmVzdG9yZWRGcm9tU2Vzc2lvbiB9KTsKK30K
KworYm9vbCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRlbVdhc1Jlc3RvcmVkRnJvbVNlc3Np
b24odWludDY0X3QgaXRlbUlEKQoreworICAgIHJldHVybiBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5n
ZXQoaXRlbUlEKS5yZXN0b3JlZEZyb21TZXNzaW9uOworfQorCit2b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdFByb3h5OjpkaWRMb2FkU2Vzc2lvblJlc3RvcmVkSGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0q
IGl0ZW0pCit7CisgICAgaWYgKCFpdGVtKQorICAgICAgICByZXR1cm47CisKKyAgICB1aW50NjRf
dCBpdGVtSUQgPSBpZEZvckl0ZW0oaXRlbSk7CisgICAgaWYgKCFpdGVtSUQpCisgICAgICAgIHJl
dHVybjsKKworICAgIElEVG9IaXN0b3J5SXRlbU1hcDo6aXRlcmF0b3IgaXQgPSBpZFRvSGlzdG9y
eUl0ZW1NYXAoKS5maW5kKGl0ZW1JRCk7CisgICAgaWYgKGl0ICE9IGlkVG9IaXN0b3J5SXRlbU1h
cCgpLmVuZCgpKQorICAgICAgICBpdC0+dmFsdWUucmVzdG9yZWRGcm9tU2Vzc2lvbiA9IGZhbHNl
OwogfQogCiBzdGF0aWMgdm9pZCBXSzJOb3RpZnlIaXN0b3J5SXRlbUNoYW5nZWQoSGlzdG9yeUl0
ZW0qIGl0ZW0pCkBAIC0xMTcsNyArMTQwLDcgQEAgc3RhdGljIHZvaWQgV0syTm90aWZ5SGlzdG9y
eUl0ZW1DaGFuZ2VkKEhpc3RvcnlJdGVtKiBpdGVtKQogCiBIaXN0b3J5SXRlbSogV2ViQmFja0Zv
cndhcmRMaXN0UHJveHk6Oml0ZW1Gb3JJRCh1aW50NjRfdCBpdGVtSUQpCiB7Ci0gICAgcmV0dXJu
IGlkVG9IaXN0b3J5SXRlbU1hcCgpLmdldChpdGVtSUQpOworICAgIHJldHVybiBpZFRvSGlzdG9y
eUl0ZW1NYXAoKS5nZXQoaXRlbUlEKS5pdGVtLmdldCgpOwogfQogCiB1aW50NjRfdCBXZWJCYWNr
Rm9yd2FyZExpc3RQcm94eTo6aWRGb3JJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKQpAQCAtMTI4LDcg
KzE1MSw3IEBAIHVpbnQ2NF90IFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppZEZvckl0ZW0oSGlz
dG9yeUl0ZW0qIGl0ZW0pCiAKIHZvaWQgV2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OnJlbW92ZUl0
ZW0odWludDY0X3QgaXRlbUlEKQogewotICAgIFJlZlB0cjxIaXN0b3J5SXRlbT4gaXRlbSA9IGlk
VG9IaXN0b3J5SXRlbU1hcCgpLnRha2UoaXRlbUlEKTsKKyAgICBSZWZQdHI8SGlzdG9yeUl0ZW0+
IGl0ZW0gPSBpZFRvSGlzdG9yeUl0ZW1NYXAoKS50YWtlKGl0ZW1JRCkuaXRlbTsKICAgICBpZiAo
IWl0ZW0pCiAgICAgICAgIHJldHVybjsKICAgICAgICAgCkBAIC0xNTcsNyArMTgwLDcgQEAgdm9p
ZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbShSZWY8SGlzdG9yeUl0ZW0+JiYgaXRl
bSkKICAgICBtX2Fzc29jaWF0ZWRJdGVtSURzLmFkZChpdGVtSUQpOwogCiAgICAgaGlzdG9yeUl0
ZW1Ub0lETWFwKCkuc2V0PEl0ZW1BbmRQYWdlSUQ+KGl0ZW0ucHRyKCksIHsgLml0ZW1JRCA9IGl0
ZW1JRCwgLnBhZ2VJRCA9IG1fcGFnZS0+cGFnZUlEKCkgfSk7Ci0gICAgaWRUb0hpc3RvcnlJdGVt
TWFwKCkuc2V0KGl0ZW1JRCwgaXRlbS5wdHIoKSk7CisgICAgaWRUb0hpc3RvcnlJdGVtTWFwKCku
c2V0PEhpc3RvcnlJdGVtSW5mbz4oaXRlbUlELCB7IC5pdGVtID0gaXRlbS5wdHIoKSwgLnJlc3Rv
cmVkRnJvbVNlc3Npb24gPSBmYWxzZSB9KTsKIAogICAgIHVwZGF0ZUJhY2tGb3J3YXJkSXRlbShp
dGVtSUQsIG1fcGFnZS0+cGFnZUlEKCksIGl0ZW0ucHRyKCkpOwogICAgIG1fcGFnZS0+c2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpCYWNrRm9yd2FyZEFkZEl0ZW0oaXRlbUlEKSk7CkBAIC0x
ODIsMTAgKzIwNSw3IEBAIEhpc3RvcnlJdGVtKiBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6aXRl
bUF0SW5kZXgoaW50IGl0ZW1JbmRleCkKICAgICBpZiAoIVdlYlByb2Nlc3M6OnNpbmdsZXRvbigp
LnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmRTeW5jKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OkJhY2tGb3J3YXJkSXRlbUF0SW5kZXgoaXRlbUluZGV4KSwgTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6QmFja0ZvcndhcmRJdGVtQXRJbmRleDo6UmVwbHkoaXRlbUlEKSwgbV9wYWdlLT5wYWdl
SUQoKSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCFpdGVtSUQpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIGlkVG9IaXN0b3J5SXRlbU1hcCgpLmdldChpdGVtSUQpOwor
ICAgIHJldHVybiBpdGVtSUQgPyBpdGVtRm9ySUQoaXRlbUlEKSA6IG51bGxwdHI7CiB9CiAKIGlu
dCBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YmFja0xpc3RDb3VudCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5oCmluZGV4IGUyODg1MTkuLmJiYWNhMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5oCkBA
IC00Miw5ICs0MiwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVpbnQ2NF90IGlkRm9ySXRlbShX
ZWJDb3JlOjpIaXN0b3J5SXRlbSopOwogICAgIHN0YXRpYyB2b2lkIHJlbW92ZUl0ZW0odWludDY0
X3QgaXRlbUlEKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2
NF90IGl0ZW1JRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4sIHVpbnQ2NF90IHBh
Z2VJRCk7CisgICAgc3RhdGljIHZvaWQgYWRkSXRlbUZyb21VSVByb2Nlc3ModWludDY0X3QgaXRl
bUlELCBQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiwgYm9vbCByZXN0b3JlZEZyb21T
ZXNzaW9uLCB1aW50NjRfdCBwYWdlSUQpOwogICAgIHN0YXRpYyB2b2lkIHNldEhpZ2hlc3RJdGVt
SURGcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1JRCk7Ci0gICAgCisgICAgc3RhdGljIGJvb2wg
aXRlbVdhc1Jlc3RvcmVkRnJvbVNlc3Npb24odWludDY0X3QgaXRlbUlEKTsKKyAgICBzdGF0aWMg
dm9pZCBkaWRMb2FkU2Vzc2lvblJlc3RvcmVkSGlzdG9yeUl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0
ZW0qKTsKKwogICAgIHZvaWQgY2xlYXIoKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAzYjc4OGM4Li42NThjMmE4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC00
OTAsNyArNDkwLDcgQEAgV2ViUGFnZTo6V2ViUGFnZSh1aW50NjRfdCBwYWdlSUQsIGNvbnN0IFdl
YlBhZ2VDcmVhdGlvblBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCiAgICAgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OnNldEhpZ2hlc3RJdGVtSURGcm9tVUlQcm9jZXNzKHBhcmFtZXRlcnMuaGlnaGVz
dFVzZWRCYWNrRm9yd2FyZEl0ZW1JRCk7CiAgICAgCiAgICAgaWYgKCFwYXJhbWV0ZXJzLml0ZW1T
dGF0ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXN0b3JlU2Vzc2lvbihwYXJhbWV0ZXJzLml0ZW1T
dGF0ZXMpOworICAgICAgICByZXN0b3JlU2Vzc2lvbkludGVybmFsKHBhcmFtZXRlcnMuaXRlbVN0
YXRlcywgZmFsc2UpOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2Vzc2lvbklELmlzVmFsaWQoKSkK
ICAgICAgICAgc2V0U2Vzc2lvbklEKHBhcmFtZXRlcnMuc2Vzc2lvbklEKTsKQEAgLTEyNDcsNiAr
MTI0NywxNiBAQCB2b2lkIFdlYlBhZ2U6OnJlbG9hZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIGJv
b2wgcmVsb2FkRnJvbU9yaWdpbiwgYm9vbCBjb250ZW50QgogICAgIGNvcmVQYWdlKCktPnVzZXJJ
bnB1dEJyaWRnZSgpLnJlbG9hZEZyYW1lKG1fbWFpbkZyYW1lLT5jb3JlRnJhbWUoKSwgcmVsb2Fk
RnJvbU9yaWdpbiwgY29udGVudEJsb2NrZXJzRW5hYmxlZCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUg
RnJhbWVMb2FkVHlwZSBmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IGJh
Y2tGb3J3YXJkSXRlbUlELCBGcmFtZUxvYWRUeXBlIHByb3Bvc2VkVHlwZSkKK3sKKyNpZiAhUExB
VEZPUk0oSU9TKQorICAgIC8vIGlPUyBhbHdheXMgd2FudHMgc3RhbGUgZGF0YSBhZnRlciBzZXNz
aW9uIHJlc3RvcmUuCisgICAgaWYgKFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjppdGVtV2FzUmVz
dG9yZWRGcm9tU2Vzc2lvbihiYWNrRm9yd2FyZEl0ZW1JRCkpCisgICAgICAgIHJldHVybiBGcmFt
ZUxvYWRUeXBlOjpTZXNzaW9uUmVzdG9yZWRCYWNrRm9yd2FyZDsKKyNlbmRpZgorICAgIHJldHVy
biBwcm9wb3NlZFR5cGU7Cit9CisKIHZvaWQgV2ViUGFnZTo6Z29Gb3J3YXJkKHVpbnQ2NF90IG5h
dmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCiB7CiAgICAgU2VuZFN0b3BS
ZXNwb25zaXZlbmVzc1RpbWVyIHN0b3BwZXIodGhpcyk7CkBAIC0xMjU5LDcgKzEyNjksNyBAQCB2
b2lkIFdlYlBhZ2U6OmdvRm9yd2FyZCh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJh
Y2tGb3J3YXJkSXRlbUlEKQogICAgIEFTU0VSVCghbV9wZW5kaW5nTmF2aWdhdGlvbklEKTsKICAg
ICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAKLSAgICBtX3BhZ2UtPmdv
VG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKTsKKyAgICBtX3BhZ2UtPmdvVG9J
dGVtKCppdGVtLCBmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKGJhY2tGb3J3YXJkSXRl
bUlELCBGcmFtZUxvYWRUeXBlOjpGb3J3YXJkKSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6Z29CYWNr
KHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0ZvcndhcmRJdGVtSUQpCkBAIC0x
Mjc0LDcgKzEyODQsNyBAQCB2b2lkIFdlYlBhZ2U6OmdvQmFjayh1aW50NjRfdCBuYXZpZ2F0aW9u
SUQsIHVpbnQ2NF90IGJhY2tGb3J3YXJkSXRlbUlEKQogICAgIEFTU0VSVCghbV9wZW5kaW5nTmF2
aWdhdGlvbklEKTsKICAgICBtX3BlbmRpbmdOYXZpZ2F0aW9uSUQgPSBuYXZpZ2F0aW9uSUQ7CiAK
LSAgICBtX3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBGcmFtZUxvYWRUeXBlOjpCYWNrKTsKKyAgICBt
X3BhZ2UtPmdvVG9JdGVtKCppdGVtLCBmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKGJh
Y2tGb3J3YXJkSXRlbUlELCBGcmFtZUxvYWRUeXBlOjpCYWNrKSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6Z29Ub0JhY2tGb3J3YXJkSXRlbSh1aW50NjRfdCBuYXZpZ2F0aW9uSUQsIHVpbnQ2NF90IGJh
Y2tGb3J3YXJkSXRlbUlEKQpAQCAtMTI4OSw3ICsxMjk5LDcgQEAgdm9pZCBXZWJQYWdlOjpnb1Rv
QmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90IG5hdmlnYXRpb25JRCwgdWludDY0X3QgYmFja0Zvcndh
cmRJdGUKICAgICBBU1NFUlQoIW1fcGVuZGluZ05hdmlnYXRpb25JRCk7CiAgICAgbV9wZW5kaW5n
TmF2aWdhdGlvbklEID0gbmF2aWdhdGlvbklEOwogCi0gICAgbV9wYWdlLT5nb1RvSXRlbSgqaXRl
bSwgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkKTsKKyAgICBtX3BhZ2UtPmdvVG9J
dGVtKCppdGVtLCBmcmFtZUxvYWRUeXBlRm9yQmFja0ZvcndhcmRJdGVtKGJhY2tGb3J3YXJkSXRl
bUlELCBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0ZvcndhcmQpKTsKIH0KIAogdm9pZCBXZWJQ
YWdlOjp0cnlSZXN0b3JlU2Nyb2xsUG9zaXRpb24oKQpAQCAtMjIzMSwxMCArMjI0MSwxNSBAQCB2
b2lkIFdlYlBhZ2U6OmV4ZWN1dGVFZGl0Q29tbWFuZChjb25zdCBTdHJpbmcmIGNvbW1hbmROYW1l
LCBjb25zdCBTdHJpbmcmIGFyZ3VtZQogICAgIGV4ZWN1dGVFZGl0aW5nQ29tbWFuZChjb21tYW5k
TmFtZSwgYXJndW1lbnQpOwogfQogCi12b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uKGNvbnN0
IFZlY3RvcjxCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGU+JiBpdGVtU3RhdGVzKQordm9pZCBXZWJQ
YWdlOjpyZXN0b3JlU2Vzc2lvbkludGVybmFsKGNvbnN0IFZlY3RvcjxCYWNrRm9yd2FyZExpc3RJ
dGVtU3RhdGU+JiBpdGVtU3RhdGVzLCBib29sIHJlc3RvcmVkQnlBUElSZXF1ZXN0KQogewogICAg
IGZvciAoY29uc3QgYXV0byYgaXRlbVN0YXRlIDogaXRlbVN0YXRlcykKLSAgICAgICAgV2ViQmFj
a0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGl0ZW1TdGF0ZS5pZGVudGlm
aWVyLCB0b0hpc3RvcnlJdGVtKGl0ZW1TdGF0ZS5wYWdlU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAg
ICAgIFdlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2VzcyhpdGVtU3Rh
dGUuaWRlbnRpZmllciwgdG9IaXN0b3J5SXRlbShpdGVtU3RhdGUucGFnZVN0YXRlKSwgcmVzdG9y
ZWRCeUFQSVJlcXVlc3QsIG1fcGFnZUlEKTsKK30KKwordm9pZCBXZWJQYWdlOjpyZXN0b3JlU2Vz
c2lvbihjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0YXRlPiYgaXRlbVN0YXRlcykK
K3sKKyAgICByZXN0b3JlU2Vzc2lvbkludGVybmFsKGl0ZW1TdGF0ZXMsIHRydWUpOwogfQogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCmluZGV4IDhhZWI2ZmQuLjFlYzVjMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTAxNSw2ICsxMDE1LDcgQEAgcHJpdmF0
ZToKIAogICAgIHZvaWQgbG9hZFVSTEluRnJhbWUoY29uc3QgU3RyaW5nJiwgdWludDY0X3QgZnJh
bWVJRCk7CiAKKyAgICB2b2lkIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwoY29uc3QgVmVjdG9yPEJh
Y2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mLCBib29sIHJlc3RvcmVkQnlBUElSZXF1ZXN0KTsKICAg
ICB2b2lkIHJlc3RvcmVTZXNzaW9uKGNvbnN0IFZlY3RvcjxCYWNrRm9yd2FyZExpc3RJdGVtU3Rh
dGU+Jik7CiAgICAgdm9pZCBkaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0odWludDY0X3QpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272315</attachid>
            <date>2016-02-26 00:48:09 -0800</date>
            <delta_ts>2016-02-26 22:53:55 -0800</delta_ts>
            <desc>Go back to initial approach</desc>
            <filename>wk2-session-restore-cache.diff</filename>
            <type>text/plain</type>
            <size>9070</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDQ2MmE4Li41ZThjNWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAg
QEAKKzIwMTYtMDItMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBmbGFnIHRv
IEhpc3RvcnlJdGVtIHRvIG1hcmsgdGhlbSBhcyByZXN0b3JlZCBmcm9tIHNlc3Npb24KKyAgICAg
ICAgYW5kIHVzZSBpdCBmcm9tIHRoZSBGcmFtZUxvYWRlciB0byBub3QgY2hhbmdlIHRoZSBwb2xp
Y3kgcmVxdWVzdAorICAgICAgICB3aGVuIG5hdmlnYXRpbmcgdG8gYSBoaXN0b3J5IGl0ZW0gdGhh
dCB3YXMgcmVzdG9yZWQgZnJvbSBzZXNzaW9uLgorCisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5
SXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNldFdhc1Jlc3RvcmVkRnJv
bVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06Ondhc1Jlc3RvcmVkRnJv
bVNlc3Npb24pOgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbSk6CisKIDIwMTYt
MDItMjUgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAg
ICBGb250IHNpemUgY29tcHV0ZWQgc3R5bGUgaXMgaW5uYWNjdXJhdGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvSGlzdG9yeUl0ZW0uaAppbmRleCBiNzc3MmZkLi5jMTRiZWEwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0hpc3RvcnlJdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9IaXN0b3J5SXRlbS5oCkBAIC0yMDUsNiArMjA1LDkgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBub3RpZnlDaGFuZ2VkKCk7CiAKKyAgICB2b2lkIHNldFdhc1Jlc3RvcmVkRnJvbVNlc3Npb24o
Ym9vbCByZXN0b3JlZEZyb21TZXNzaW9uKSB7IG1fcmVzdG9yZWRGcm9tU2Vzc2lvbiA9IHJlc3Rv
cmVkRnJvbVNlc3Npb247IH0KKyAgICBib29sIHdhc1Jlc3RvcmVkRnJvbVNlc3Npb24oKSBjb25z
dCB7IHJldHVybiBtX3Jlc3RvcmVkRnJvbVNlc3Npb247IH0KKwogcHJpdmF0ZToKICAgICBXRUJD
T1JFX0VYUE9SVCBIaXN0b3J5SXRlbSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIEhpc3RvcnlJdGVt
KGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKQEAgLTI1Niw2
ICsyNTksOSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWNoZWRQYWdlPiBtX2Nh
Y2hlZFBhZ2U7CiAgICAgUHJ1bmluZ1JlYXNvbiBtX3BydW5pbmdSZWFzb247CiAKKyAgICAvLyBJ
dGVtIHdhcyBjcmVhdGVkIGZyb20gYSBzZXNzaW9uIHJlc3RvcmUuCisgICAgYm9vbCBtX3Jlc3Rv
cmVkRnJvbVNlc3Npb24geyBmYWxzZSB9OworCiAjaWYgUExBVEZPUk0oSU9TKQogICAgIEZsb2F0
UmVjdCBtX2V4cG9zZWRDb250ZW50UmVjdDsKICAgICBJbnRSZWN0IG1fdW5vYnNjdXJlZENvbnRl
bnRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjIzNTljYy4u
ZjExYTZmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zMzM3LDcg
KzMzMzcsMTAgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRlbShI
aXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKICAgICAgICAgY2FzZSBGcmFtZUxv
YWRUeXBlOjpCYWNrOgogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkZvcndhcmQ6CiAgICAg
ICAgIGNhc2UgRnJhbWVMb2FkVHlwZTo6SW5kZXhlZEJhY2tGb3J3YXJkOgotICAgICAgICAgICAg
cmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFFbHNlTG9hZCk7CisgICAgICAg
ICAgICBpZiAoIWl0ZW0ud2FzUmVzdG9yZWRGcm9tU2Vzc2lvbigpKQorICAgICAgICAgICAgICAg
IHJlcXVlc3Quc2V0Q2FjaGVQb2xpY3koUmV0dXJuQ2FjaGVEYXRhRWxzZUxvYWQpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGl0ZW0uc2V0V2FzUmVzdG9yZWRGcm9tU2Vzc2lv
bihmYWxzZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBl
OjpTdGFuZGFyZDoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpSZWRpcmVjdFdpdGhMb2Nr
ZWRCYWNrRm9yd2FyZExpc3Q6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjNlOThjYy4uMjhmYjZlNiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE2LTAyLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAg
PGNnYXJjaWFAaWdhbGlhLmNvbT4KKworICAgICAgICBOZXR3b3JrIGNhY2hlOiBvbGQgcGFnZXMg
cmV0dXJuZWQgYnkgZGlzayBjYWNoZSBvbiBoaXN0b3J5IG5hdmlnYXRpb24gYWZ0ZXIgc2Vzc2lv
biBpcyByZXN0b3JlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUzMjMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgU2luY2UgcjE4MTczNCwgdGhlIG5ldHdvcmsgY2FjaGUgbmV2ZXIgcmV2YWxpZGF0ZXMg
cmVzb3VyY2VzIGZvcgorICAgICAgICBoaXN0b3J5IG5hdmlnYXRpb24uIFRoaXMgaXMgZ29vZCBm
b3IgdGhlIG1lbW9yeSBjYWNoZSwgYnV0IGluIHRoZQorICAgICAgICBjYXNlIG9mIGRpc2sgY2Fj
aGUsIHdlIG1pZ2h0IGVuZCB1cCB3aXRoIG91dGRhdGVkIHBhZ2VzIHdoZW4KKyAgICAgICAgcmVz
dG9yaW5nIHRoZSBzZXNzaW9uLiBXaGVuIHJlc3RvcmluZyB0aGUgc2Vzc2lvbiBoYXBwZW5zIGJl
Y2F1c2UKKyAgICAgICAgb2YgYW4gQVBJIHJlcXVlc3QgKHdlIGFsc28gcmVzdG9yZSB0aGUgc2Vz
c2lvbiB3aGVuIHJlY292ZXJpbmcKKyAgICAgICAgZnJvbSBhIHdlYiBwcm9jZXNzIGNyYXNoKSwg
d2Ugc2hvdWxkIHJldmFsaWRhdGUgYmFjayBmb3J3YXJkIGxpc3QKKyAgICAgICAgcmVxdWVzdHMg
aW4gdGhlIGRpc2sgY2FjaGUgaWYgbmVlZGVkLiBUaGlzIHdpbGwgb25seSBoYXBwZW4gdGhlCisg
ICAgICAgIGZpcnN0IHRpbWUgdGhleSBhcmUgbG9hZGVkIGFmdGVyIGEgc2Vzc2lvbiByZXN0b3Jl
LiBBZnRlciBhIHdlYiBwcm9jZXNzCisgICAgICAgIGNyYXNoLCByZXNvdXJjZXMgd2lsbCBiZSB1
c2VkIHVuY29uZGlvbmFsbHkgZnJvbSB0aGUgZGlzayBjYWNoZS4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYkJhY2tGb3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyk6IFVzZSBS
ZWYmJgorICAgICAgICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZVBhZ2U6OldlYlBhZ2Up
OiBDYWxsIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwgcGFzc2luZworICAgICAgICBmYWxzZSBhcyBy
ZXN0b3JlZEJ5QVBJUmVxdWVzdCBwYXJhbWV0ZXIuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OnJlc3RvcmVTZXNzaW9uSW50ZXJuYWwpOiBTZXQgcmVzdG9yZWRGcm9tU2Vzc2lvbgorICAgICAg
ICBmbGFnIHRvIHRoZSBjcmVhdGVkIEhpc3RvcnlJdGVtIGlmIHRoZSBpdGVtIHdhcyByZXN0b3Jl
ZCBmcm9tCisgICAgICAgIHNlc3Npb24gYnkgYW4gQVBJIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaU9T
IHBvcnQuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uKTogQ2FsbCBy
ZXN0b3JlU2Vzc2lvbkludGVybmFsCisgICAgICAgIHBhc3NpbmcgdHJ1ZSBhcyByZXN0b3JlZEJ5
QVBJUmVxdWVzdCBwYXJhbWV0ZXIuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuaDoKKwogMjAxNi0wMi0yNSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNob2lAbmF2ZXJjb3JwLmNv
bT4KIAogICAgICAgICBbRUZMXSBSZW1vdmUgV2ViVUlQb3B1cE1lbnVDbGllbnQKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuY3BwCmluZGV4IDIwYmMyYTEuLjc2YjI5YjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlz
dFByb3h5LmNwcApAQCAtOTQsMTYgKzk0LDE0IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZUJhY2tGb3J3
YXJkSXRlbSh1aW50NjRfdCBpdGVtSUQsIHVpbnQ2NF90IHBhZ2VJRCwgSGlzdG9yeUl0ZW0qCiAg
ICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkucGFyZW50UHJvY2Vzc0Nvbm5lY3Rpb24oKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUHJvY2Vzc1Byb3h5OjpBZGRCYWNrRm9yd2FyZEl0ZW0oaXRlbUlELCBw
YWdlSUQsIHRvUGFnZVN0YXRlKCppdGVtKSksIDApOwogfQogCi12b2lkIFdlYkJhY2tGb3J3YXJk
TGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+IHBycEl0ZW0sIHVpbnQ2NF90IHBhZ2VJRCkKK3ZvaWQg
V2ViQmFja0ZvcndhcmRMaXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2NF90IGl0
ZW1JRCwgUmVmPEhpc3RvcnlJdGVtPiYmIGl0ZW0sIHVpbnQ2NF90IHBhZ2VJRCkKIHsKLSAgICBS
ZWZQdHI8SGlzdG9yeUl0ZW0+IGl0ZW0gPSBwcnBJdGVtOwotICAgIAogICAgIC8vIFRoaXMgaXRl
bS9pdGVtSUQgcGFpciBzaG91bGQgbm90IGFscmVhZHkgZXhpc3QgaW4gb3VyIG1hcHMuCi0gICAg
QVNTRVJUKCFoaXN0b3J5SXRlbVRvSURNYXAoKS5jb250YWlucyhpdGVtLmdldCgpKSk7CisgICAg
QVNTRVJUKCFoaXN0b3J5SXRlbVRvSURNYXAoKS5jb250YWlucyhpdGVtLnB0cigpKSk7CiAgICAg
QVNTRVJUKCFpZFRvSGlzdG9yeUl0ZW1NYXAoKS5jb250YWlucyhpdGVtSUQpKTsKIAotICAgIGhp
c3RvcnlJdGVtVG9JRE1hcCgpLnNldDxJdGVtQW5kUGFnZUlEPihpdGVtLCB7IC5pdGVtSUQgPSBp
dGVtSUQsIC5wYWdlSUQgPSBwYWdlSUQgfSk7Ci0gICAgaWRUb0hpc3RvcnlJdGVtTWFwKCkuc2V0
KGl0ZW1JRCwgaXRlbSk7CisgICAgaGlzdG9yeUl0ZW1Ub0lETWFwKCkuc2V0PEl0ZW1BbmRQYWdl
SUQ+KGl0ZW0ucHRyKCksIHsgLml0ZW1JRCA9IGl0ZW1JRCwgLnBhZ2VJRCA9IHBhZ2VJRCB9KTsK
KyAgICBpZFRvSGlzdG9yeUl0ZW1NYXAoKS5zZXQoaXRlbUlELCBpdGVtLnB0cigpKTsKIH0KIAog
c3RhdGljIHZvaWQgV0syTm90aWZ5SGlzdG9yeUl0ZW1DaGFuZ2VkKEhpc3RvcnlJdGVtKiBpdGVt
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
QmFja0ZvcndhcmRMaXN0UHJveHkuaAppbmRleCBlMjg4NTE5Li41MTM2YmI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJv
eHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVpbnQ2
NF90IGlkRm9ySXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopOwogICAgIHN0YXRpYyB2b2lkIHJl
bW92ZUl0ZW0odWludDY0X3QgaXRlbUlEKTsKIAotICAgIHN0YXRpYyB2b2lkIGFkZEl0ZW1Gcm9t
VUlQcm9jZXNzKHVpbnQ2NF90IGl0ZW1JRCwgUGFzc1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRl
bT4sIHVpbnQ2NF90IHBhZ2VJRCk7CisgICAgc3RhdGljIHZvaWQgYWRkSXRlbUZyb21VSVByb2Nl
c3ModWludDY0X3QgaXRlbUlELCBSZWY8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+JiYsIHVpbnQ2NF90
IHBhZ2VJRCk7CiAgICAgc3RhdGljIHZvaWQgc2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3Mo
dWludDY0X3QgaXRlbUlEKTsKICAgICAKICAgICB2b2lkIGNsZWFyKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMjllZGY5OC4uZTc3ZTcw
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApA
QCAtNDkwLDcgKzQ5MCw3IEBAIFdlYlBhZ2U6OldlYlBhZ2UodWludDY0X3QgcGFnZUlELCBjb25z
dCBXZWJQYWdlQ3JlYXRpb25QYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQogICAgIFdlYkJhY2tGb3J3
YXJkTGlzdFByb3h5OjpzZXRIaWdoZXN0SXRlbUlERnJvbVVJUHJvY2VzcyhwYXJhbWV0ZXJzLmhp
Z2hlc3RVc2VkQmFja0ZvcndhcmRJdGVtSUQpOwogICAgIAogICAgIGlmICghcGFyYW1ldGVycy5p
dGVtU3RhdGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmVzdG9yZVNlc3Npb24ocGFyYW1ldGVycy5p
dGVtU3RhdGVzKTsKKyAgICAgICAgcmVzdG9yZVNlc3Npb25JbnRlcm5hbChwYXJhbWV0ZXJzLml0
ZW1TdGF0ZXMsIGZhbHNlKTsKIAogICAgIGlmIChwYXJhbWV0ZXJzLnNlc3Npb25JRC5pc1ZhbGlk
KCkpCiAgICAgICAgIHNldFNlc3Npb25JRChwYXJhbWV0ZXJzLnNlc3Npb25JRCk7CkBAIC0yMjMx
LDEwICsyMjMxLDIxIEBAIHZvaWQgV2ViUGFnZTo6ZXhlY3V0ZUVkaXRDb21tYW5kKGNvbnN0IFN0
cmluZyYgY29tbWFuZE5hbWUsIGNvbnN0IFN0cmluZyYgYXJndW1lCiAgICAgZXhlY3V0ZUVkaXRp
bmdDb21tYW5kKGNvbW1hbmROYW1lLCBhcmd1bWVudCk7CiB9CiAKK3ZvaWQgV2ViUGFnZTo6cmVz
dG9yZVNlc3Npb25JbnRlcm5hbChjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0YXRl
PiYgaXRlbVN0YXRlcywgYm9vbCByZXN0b3JlZEJ5QVBJUmVxdWVzdCkKK3sKKyAgICBmb3IgKGNv
bnN0IGF1dG8mIGl0ZW1TdGF0ZSA6IGl0ZW1TdGF0ZXMpIHsKKyAgICAgICAgYXV0byBoaXN0b3J5
SXRlbSA9IHRvSGlzdG9yeUl0ZW0oaXRlbVN0YXRlLnBhZ2VTdGF0ZSk7CisjaWYgIVBMQVRGT1JN
KElPUykKKyAgICAgICAgLy8gaU9TIGFsd2F5cyB3YW50cyBzdGFsZSBkYXRhIGFmdGVyIHNlc3Np
b24gcmVzdG9yZS4KKyAgICAgICAgaGlzdG9yeUl0ZW0tPnNldFdhc1Jlc3RvcmVkRnJvbVNlc3Np
b24ocmVzdG9yZWRCeUFQSVJlcXVlc3QpOworI2VuZGlmCisgICAgICAgIFdlYkJhY2tGb3J3YXJk
TGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2VzcyhpdGVtU3RhdGUuaWRlbnRpZmllciwgV1RG
TW92ZShoaXN0b3J5SXRlbSksIG1fcGFnZUlEKTsKKyAgICB9Cit9CisKIHZvaWQgV2ViUGFnZTo6
cmVzdG9yZVNlc3Npb24oY29uc3QgVmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mIGl0
ZW1TdGF0ZXMpCiB7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBpdGVtU3RhdGUgOiBpdGVtU3RhdGVz
KQotICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVByb2Nlc3Mo
aXRlbVN0YXRlLmlkZW50aWZpZXIsIHRvSGlzdG9yeUl0ZW0oaXRlbVN0YXRlLnBhZ2VTdGF0ZSks
IG1fcGFnZUlEKTsKKyAgICByZXN0b3JlU2Vzc2lvbkludGVybmFsKGl0ZW1TdGF0ZXMsIHRydWUp
OwogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDQwYTRlMDAuLjc4ODBlM2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTAxNSw2ICsxMDE1LDcg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgbG9hZFVSTEluRnJhbWUoY29uc3QgU3RyaW5nJiwgdWlu
dDY0X3QgZnJhbWVJRCk7CiAKKyAgICB2b2lkIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwoY29uc3Qg
VmVjdG9yPEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mLCBib29sIHJlc3RvcmVkQnlBUElSZXF1
ZXN0KTsKICAgICB2b2lkIHJlc3RvcmVTZXNzaW9uKGNvbnN0IFZlY3RvcjxCYWNrRm9yd2FyZExp
c3RJdGVtU3RhdGU+Jik7CiAgICAgdm9pZCBkaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0odWludDY0
X3QpOwogCg==
</data>
<flag name="review"
          id="297080"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="297101"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272411</attachid>
            <date>2016-02-26 22:53:55 -0800</date>
            <delta_ts>2016-02-26 22:53:55 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk2-session-restore-cache.diff</filename>
            <type>text/plain</type>
            <size>9233</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNjcxMjc2Li4xYzUzY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMTYtMDItMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBBZGQgYSBmbGFnIHRvIEhp
c3RvcnlJdGVtIHRvIG1hcmsgdGhlbSBhcyByZXN0b3JlZCBmcm9tIHNlc3Npb24KKyAgICAgICAg
YW5kIHVzZSBpdCBmcm9tIHRoZSBGcmFtZUxvYWRlciB0byBub3QgY2hhbmdlIHRoZSBwb2xpY3kg
cmVxdWVzdAorICAgICAgICB3aGVuIG5hdmlnYXRpbmcgdG8gYSBoaXN0b3J5IGl0ZW0gdGhhdCB3
YXMgcmVzdG9yZWQgZnJvbSBzZXNzaW9uLAorICAgICAgICBleGNlcHQgZm9yIGlPUyBwb3J0Lgor
CisgICAgICAgICogaGlzdG9yeS9IaXN0b3J5SXRlbS5oOgorICAgICAgICAoV2ViQ29yZTo6SGlz
dG9yeUl0ZW06OnNldFdhc1Jlc3RvcmVkRnJvbVNlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6
SGlzdG9yeUl0ZW06Ondhc1Jlc3RvcmVkRnJvbVNlc3Npb24pOgorICAgICAgICAqIGxvYWRlci9G
cmFtZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6bG9hZERpZmZl
cmVudERvY3VtZW50SXRlbSk6CisKIDIwMTYtMDItMjYgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNh
dGFuemFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgcHJpdmF0ZSBmaWVs
ZCBmcm9tIFdFQlBJbWFnZURlY29kZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3Rv
cnkvSGlzdG9yeUl0ZW0uaCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvSGlzdG9yeUl0ZW0uaApp
bmRleCBiNzc3MmZkLi44OGVhZGU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0hpc3RvcnlJdGVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9IaXN0b3J5SXRlbS5o
CkBAIC0yMDUsNiArMjA1LDkgQEAgcHVibGljOgogCiAgICAgdm9pZCBub3RpZnlDaGFuZ2VkKCk7
CiAKKyAgICB2b2lkIHNldFdhc1Jlc3RvcmVkRnJvbVNlc3Npb24oYm9vbCB3YXNSZXN0b3JlZEZy
b21TZXNzaW9uKSB7IG1fd2FzUmVzdG9yZWRGcm9tU2Vzc2lvbiA9IHdhc1Jlc3RvcmVkRnJvbVNl
c3Npb247IH0KKyAgICBib29sIHdhc1Jlc3RvcmVkRnJvbVNlc3Npb24oKSBjb25zdCB7IHJldHVy
biBtX3dhc1Jlc3RvcmVkRnJvbVNlc3Npb247IH0KKwogcHJpdmF0ZToKICAgICBXRUJDT1JFX0VY
UE9SVCBIaXN0b3J5SXRlbSgpOwogICAgIFdFQkNPUkVfRVhQT1JUIEhpc3RvcnlJdGVtKGNvbnN0
IFN0cmluZyYgdXJsU3RyaW5nLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsKQEAgLTIzMSw2ICsyMzQs
NyBAQCBwcml2YXRlOgogICAgIAogICAgIGJvb2wgbV9sYXN0VmlzaXRXYXNGYWlsdXJlOwogICAg
IGJvb2wgbV9pc1RhcmdldEl0ZW07CisgICAgYm9vbCBtX3dhc1Jlc3RvcmVkRnJvbVNlc3Npb24g
eyBmYWxzZSB9OwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxTdHJpbmc+PiBtX3JlZGly
ZWN0VVJMczsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNjIzNTlj
Yy4uMzVmNGMyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0zMzM2
LDkgKzMzMzYsMTcgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZERpZmZlcmVudERvY3VtZW50SXRl
bShIaXN0b3J5SXRlbSYgaXRlbSwgRnJhbWVMb2FkVHlwZSBsb2EKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEZyYW1lTG9hZFR5cGU6OkJhY2s6CiAgICAgICAgIGNhc2UgRnJhbWVM
b2FkVHlwZTo6Rm9yd2FyZDoKLSAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFj
a0ZvcndhcmQ6Ci0gICAgICAgICAgICByZXF1ZXN0LnNldENhY2hlUG9saWN5KFJldHVybkNhY2hl
RGF0YUVsc2VMb2FkKTsKKyAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBlOjpJbmRleGVkQmFja0Zv
cndhcmQ6IHsKKyNpZiBQTEFURk9STShJT1MpCisgICAgICAgICAgICBib29sIGFsbG93U3RhbGVE
YXRhID0gdHJ1ZTsKKyNlbHNlCisgICAgICAgICAgICBib29sIGFsbG93U3RhbGVEYXRhID0gIWl0
ZW0ud2FzUmVzdG9yZWRGcm9tU2Vzc2lvbigpOworI2VuZGlmCisgICAgICAgICAgICBpZiAoYWxs
b3dTdGFsZURhdGEpCisgICAgICAgICAgICAgICAgcmVxdWVzdC5zZXRDYWNoZVBvbGljeShSZXR1
cm5DYWNoZURhdGFFbHNlTG9hZCk7CisgICAgICAgICAgICBpdGVtLnNldFdhc1Jlc3RvcmVkRnJv
bVNlc3Npb24oZmFsc2UpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAg
Y2FzZSBGcmFtZUxvYWRUeXBlOjpTdGFuZGFyZDoKICAgICAgICAgY2FzZSBGcmFtZUxvYWRUeXBl
OjpSZWRpcmVjdFdpdGhMb2NrZWRCYWNrRm9yd2FyZExpc3Q6CiAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCA3M2FlMGI3Li5lYTBkNzRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTYtMDItMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIE5ldHdvcmsgY2FjaGU6IG9sZCBwYWdlcyByZXR1cm5lZCBieSBkaXNrIGNh
Y2hlIG9uIGhpc3RvcnkgbmF2aWdhdGlvbiBhZnRlciBzZXNzaW9uIGlzIHJlc3RvcmVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTMyMzAKKworICAg
ICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBTaW5jZSByMTgxNzM0LCB0
aGUgbmV0d29yayBjYWNoZSBuZXZlciByZXZhbGlkYXRlcyByZXNvdXJjZXMgZm9yCisgICAgICAg
IGhpc3RvcnkgbmF2aWdhdGlvbi4gVGhpcyBpcyBnb29kIGZvciB0aGUgbWVtb3J5IGNhY2hlLCBi
dXQgaW4gdGhlCisgICAgICAgIGNhc2Ugb2YgZGlzayBjYWNoZSwgd2UgbWlnaHQgZW5kIHVwIHdp
dGggb3V0ZGF0ZWQgcGFnZXMgd2hlbgorICAgICAgICByZXN0b3JpbmcgdGhlIHNlc3Npb24uIFdo
ZW4gcmVzdG9yaW5nIHRoZSBzZXNzaW9uIGhhcHBlbnMgYmVjYXVzZQorICAgICAgICBvZiBhbiBB
UEkgcmVxdWVzdCAod2UgYWxzbyByZXN0b3JlIHRoZSBzZXNzaW9uIHdoZW4gcmVjb3ZlcmluZwor
ICAgICAgICBmcm9tIGEgd2ViIHByb2Nlc3MgY3Jhc2gpLCB3ZSBzaG91bGQgcmV2YWxpZGF0ZSBi
YWNrIGZvcndhcmQgbGlzdAorICAgICAgICByZXF1ZXN0cyBpbiB0aGUgZGlzayBjYWNoZSBpZiBu
ZWVkZWQuIFRoaXMgd2lsbCBvbmx5IGhhcHBlbiB0aGUKKyAgICAgICAgZmlyc3QgdGltZSB0aGV5
IGFyZSBsb2FkZWQgYWZ0ZXIgYSBzZXNzaW9uIHJlc3RvcmUuIEFmdGVyIGEgd2ViIHByb2Nlc3MK
KyAgICAgICAgY3Jhc2gsIHJlc291cmNlcyB3aWxsIGJlIHVzZWQgdW5jb25kaW9uYWxseSBmcm9t
IHRoZSBkaXNrIGNhY2hlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tG
b3J3YXJkTGlzdFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViQmFja0ZvcndhcmRMaXN0
UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKTogVXNlIFJlZiYmCisgICAgICAgIGluc3RlYWQg
b2YgUGFzc1JlZlB0ci4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0Zvcndh
cmRMaXN0UHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlUGFnZTo6V2ViUGFnZSk6IENhbGwgcmVzdG9yZVNlc3Npb25J
bnRlcm5hbCBwYXNzaW5nCisgICAgICAgIE5vIGFzIHJlc3RvcmVkQnlBUElSZXF1ZXN0IHBhcmFt
ZXRlci4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9yZVNlc3Npb25JbnRlcm5hbCk6
IFNldCByZXN0b3JlZEZyb21TZXNzaW9uCisgICAgICAgIGZsYWcgdG8gdGhlIGNyZWF0ZWQgSGlz
dG9yeUl0ZW0gaWYgdGhlIGl0ZW0gd2FzIHJlc3RvcmVkIGZyb20KKyAgICAgICAgc2Vzc2lvbiBi
eSBhbiBBUEkgcmVxdWVzdC4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVzdG9yZVNlc3Np
b24pOiBDYWxsIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwKKyAgICAgICAgcGFzc2luZyBZZXMgYXMg
cmVzdG9yZWRCeUFQSVJlcXVlc3QgcGFyYW1ldGVyLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmg6CisKIDIwMTYtMDItMjYgIE1pY2hhZWwgQ2F0YW56YXJvICA8bWNhdGFu
emFyb0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEZpeCBhIHR5cG8uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmNwcAppbmRleCAyMGJjMmExLi43NmIyOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViQmFja0ZvcndhcmRMaXN0UHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExpc3RQcm94eS5j
cHAKQEAgLTk0LDE2ICs5NCwxNCBAQCBzdGF0aWMgdm9pZCB1cGRhdGVCYWNrRm9yd2FyZEl0ZW0o
dWludDY0X3QgaXRlbUlELCB1aW50NjRfdCBwYWdlSUQsIEhpc3RvcnlJdGVtKgogICAgIFdlYlBy
b2Nlc3M6OnNpbmdsZXRvbigpLnBhcmVudFByb2Nlc3NDb25uZWN0aW9uKCktPnNlbmQoTWVzc2Fn
ZXM6OldlYlByb2Nlc3NQcm94eTo6QWRkQmFja0ZvcndhcmRJdGVtKGl0ZW1JRCwgcGFnZUlELCB0
b1BhZ2VTdGF0ZSgqaXRlbSkpLCAwKTsKIH0KIAotdm9pZCBXZWJCYWNrRm9yd2FyZExpc3RQcm94
eTo6YWRkSXRlbUZyb21VSVByb2Nlc3ModWludDY0X3QgaXRlbUlELCBQYXNzUmVmUHRyPFdlYkNv
cmU6Okhpc3RvcnlJdGVtPiBwcnBJdGVtLCB1aW50NjRfdCBwYWdlSUQpCit2b2lkIFdlYkJhY2tG
b3J3YXJkTGlzdFByb3h5OjphZGRJdGVtRnJvbVVJUHJvY2Vzcyh1aW50NjRfdCBpdGVtSUQsIFJl
ZjxIaXN0b3J5SXRlbT4mJiBpdGVtLCB1aW50NjRfdCBwYWdlSUQpCiB7Ci0gICAgUmVmUHRyPEhp
c3RvcnlJdGVtPiBpdGVtID0gcHJwSXRlbTsKLSAgICAKICAgICAvLyBUaGlzIGl0ZW0vaXRlbUlE
IHBhaXIgc2hvdWxkIG5vdCBhbHJlYWR5IGV4aXN0IGluIG91ciBtYXBzLgotICAgIEFTU0VSVCgh
aGlzdG9yeUl0ZW1Ub0lETWFwKCkuY29udGFpbnMoaXRlbS5nZXQoKSkpOworICAgIEFTU0VSVCgh
aGlzdG9yeUl0ZW1Ub0lETWFwKCkuY29udGFpbnMoaXRlbS5wdHIoKSkpOwogICAgIEFTU0VSVCgh
aWRUb0hpc3RvcnlJdGVtTWFwKCkuY29udGFpbnMoaXRlbUlEKSk7CiAKLSAgICBoaXN0b3J5SXRl
bVRvSURNYXAoKS5zZXQ8SXRlbUFuZFBhZ2VJRD4oaXRlbSwgeyAuaXRlbUlEID0gaXRlbUlELCAu
cGFnZUlEID0gcGFnZUlEIH0pOwotICAgIGlkVG9IaXN0b3J5SXRlbU1hcCgpLnNldChpdGVtSUQs
IGl0ZW0pOworICAgIGhpc3RvcnlJdGVtVG9JRE1hcCgpLnNldDxJdGVtQW5kUGFnZUlEPihpdGVt
LnB0cigpLCB7IC5pdGVtSUQgPSBpdGVtSUQsIC5wYWdlSUQgPSBwYWdlSUQgfSk7CisgICAgaWRU
b0hpc3RvcnlJdGVtTWFwKCkuc2V0KGl0ZW1JRCwgaXRlbS5wdHIoKSk7CiB9CiAKIHN0YXRpYyB2
b2lkIFdLMk5vdGlmeUhpc3RvcnlJdGVtQ2hhbmdlZChIaXN0b3J5SXRlbSogaXRlbSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJCYWNrRm9yd2FyZExp
c3RQcm94eS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3
YXJkTGlzdFByb3h5LmgKaW5kZXggZTI4ODUxOS4uNTEzNmJiOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFByb3h5LmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkJhY2tGb3J3YXJkTGlzdFBy
b3h5LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB1aW50NjRfdCBpZEZv
ckl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKICAgICBzdGF0aWMgdm9pZCByZW1vdmVJdGVt
KHVpbnQ2NF90IGl0ZW1JRCk7CiAKLSAgICBzdGF0aWMgdm9pZCBhZGRJdGVtRnJvbVVJUHJvY2Vz
cyh1aW50NjRfdCBpdGVtSUQsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0ZW0+LCB1aW50
NjRfdCBwYWdlSUQpOworICAgIHN0YXRpYyB2b2lkIGFkZEl0ZW1Gcm9tVUlQcm9jZXNzKHVpbnQ2
NF90IGl0ZW1JRCwgUmVmPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiYmLCB1aW50NjRfdCBwYWdlSUQp
OwogICAgIHN0YXRpYyB2b2lkIHNldEhpZ2hlc3RJdGVtSURGcm9tVUlQcm9jZXNzKHVpbnQ2NF90
IGl0ZW1JRCk7CiAgICAgCiAgICAgdm9pZCBjbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDI5ZWRmOTguLjNlN2FiZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTQ5MCw3
ICs0OTAsNyBAQCBXZWJQYWdlOjpXZWJQYWdlKHVpbnQ2NF90IHBhZ2VJRCwgY29uc3QgV2ViUGFn
ZUNyZWF0aW9uUGFyYW1ldGVycyYgcGFyYW1ldGVycykKICAgICBXZWJCYWNrRm9yd2FyZExpc3RQ
cm94eTo6c2V0SGlnaGVzdEl0ZW1JREZyb21VSVByb2Nlc3MocGFyYW1ldGVycy5oaWdoZXN0VXNl
ZEJhY2tGb3J3YXJkSXRlbUlEKTsKICAgICAKICAgICBpZiAoIXBhcmFtZXRlcnMuaXRlbVN0YXRl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJlc3RvcmVTZXNzaW9uKHBhcmFtZXRlcnMuaXRlbVN0YXRl
cyk7CisgICAgICAgIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwocGFyYW1ldGVycy5pdGVtU3RhdGVz
LCBXYXNSZXN0b3JlZEJ5QVBJUmVxdWVzdDo6Tm8pOwogCiAgICAgaWYgKHBhcmFtZXRlcnMuc2Vz
c2lvbklELmlzVmFsaWQoKSkKICAgICAgICAgc2V0U2Vzc2lvbklEKHBhcmFtZXRlcnMuc2Vzc2lv
bklEKTsKQEAgLTIyMzEsMTAgKzIyMzEsMTggQEAgdm9pZCBXZWJQYWdlOjpleGVjdXRlRWRpdENv
bW1hbmQoY29uc3QgU3RyaW5nJiBjb21tYW5kTmFtZSwgY29uc3QgU3RyaW5nJiBhcmd1bWUKICAg
ICBleGVjdXRlRWRpdGluZ0NvbW1hbmQoY29tbWFuZE5hbWUsIGFyZ3VtZW50KTsKIH0KIAordm9p
ZCBXZWJQYWdlOjpyZXN0b3JlU2Vzc2lvbkludGVybmFsKGNvbnN0IFZlY3RvcjxCYWNrRm9yd2Fy
ZExpc3RJdGVtU3RhdGU+JiBpdGVtU3RhdGVzLCBXYXNSZXN0b3JlZEJ5QVBJUmVxdWVzdCByZXN0
b3JlZEJ5QVBJUmVxdWVzdCkKK3sKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGl0ZW1TdGF0ZSA6IGl0
ZW1TdGF0ZXMpIHsKKyAgICAgICAgYXV0byBoaXN0b3J5SXRlbSA9IHRvSGlzdG9yeUl0ZW0oaXRl
bVN0YXRlLnBhZ2VTdGF0ZSk7CisgICAgICAgIGhpc3RvcnlJdGVtLT5zZXRXYXNSZXN0b3JlZEZy
b21TZXNzaW9uKHJlc3RvcmVkQnlBUElSZXF1ZXN0ID09IFdhc1Jlc3RvcmVkQnlBUElSZXF1ZXN0
OjpZZXMpOworICAgICAgICBXZWJCYWNrRm9yd2FyZExpc3RQcm94eTo6YWRkSXRlbUZyb21VSVBy
b2Nlc3MoaXRlbVN0YXRlLmlkZW50aWZpZXIsIFdURk1vdmUoaGlzdG9yeUl0ZW0pLCBtX3BhZ2VJ
RCk7CisgICAgfQorfQorCiB2b2lkIFdlYlBhZ2U6OnJlc3RvcmVTZXNzaW9uKGNvbnN0IFZlY3Rv
cjxCYWNrRm9yd2FyZExpc3RJdGVtU3RhdGU+JiBpdGVtU3RhdGVzKQogewotICAgIGZvciAoY29u
c3QgYXV0byYgaXRlbVN0YXRlIDogaXRlbVN0YXRlcykKLSAgICAgICAgV2ViQmFja0ZvcndhcmRM
aXN0UHJveHk6OmFkZEl0ZW1Gcm9tVUlQcm9jZXNzKGl0ZW1TdGF0ZS5pZGVudGlmaWVyLCB0b0hp
c3RvcnlJdGVtKGl0ZW1TdGF0ZS5wYWdlU3RhdGUpLCBtX3BhZ2VJRCk7CisgICAgcmVzdG9yZVNl
c3Npb25JbnRlcm5hbChpdGVtU3RhdGVzLCBXYXNSZXN0b3JlZEJ5QVBJUmVxdWVzdDo6WWVzKTsK
IH0KIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCAxZGFkZjkzLi41ZjU3NTFjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEwMjAsNiArMTAyMCw4IEBA
IHByaXZhdGU6CiAKICAgICB2b2lkIGxvYWRVUkxJbkZyYW1lKGNvbnN0IFN0cmluZyYsIHVpbnQ2
NF90IGZyYW1lSUQpOwogCisgICAgZW51bSBjbGFzcyBXYXNSZXN0b3JlZEJ5QVBJUmVxdWVzdCB7
IE5vLCBZZXMgfTsKKyAgICB2b2lkIHJlc3RvcmVTZXNzaW9uSW50ZXJuYWwoY29uc3QgVmVjdG9y
PEJhY2tGb3J3YXJkTGlzdEl0ZW1TdGF0ZT4mLCBXYXNSZXN0b3JlZEJ5QVBJUmVxdWVzdCk7CiAg
ICAgdm9pZCByZXN0b3JlU2Vzc2lvbihjb25zdCBWZWN0b3I8QmFja0ZvcndhcmRMaXN0SXRlbVN0
YXRlPiYpOwogICAgIHZvaWQgZGlkUmVtb3ZlQmFja0ZvcndhcmRJdGVtKHVpbnQ2NF90KTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>