<?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>63257</bug_id>
          
          <creation_ts>2011-06-23 08:38:12 -0700</creation_ts>
          <short_desc>When blocking localStorage, Firefox throws a security exception on access, and maybe so should we</short_desc>
          <delta_ts>2012-10-23 00:24:25 -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>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>jochen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>beidson</cc>
    
    <cc>dcarney</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jeffrey+webkit</cc>
    
    <cc>michaeln</cc>
    
    <cc>ojan</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>426203</commentid>
    <comment_count>0</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-06-23 08:38:12 -0700</bug_when>
    <thetext>We just don&apos;t return data, and throw a quota exceeded exception on setItem. For the sake of making it easier for web authors, we maybe should throw a security exception on all access instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426334</commentid>
    <comment_count>1</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 11:55:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/7703121&gt;

What kinds of blocking do you intend to track with this bug? The above Radar is about Safari private browsing mode, for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426499</commentid>
    <comment_count>2</comment_count>
    <who name="">jochen</who>
    <bug_when>2011-06-23 14:49:48 -0700</bug_when>
    <thetext>I was really talking about the WebKit/chromium implementation of this. In http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/StorageAreaProxy.cpp?rev=87597#L92 we check whether access to localStorage is granted according to the embedder, and if not, throw an exception.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426508</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-06-23 14:55:34 -0700</bug_when>
    <thetext>OK. Both Chromium and cross-platform code will need to be fixed though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719507</commentid>
    <comment_count>4</comment_count>
      <attachid>163879</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-13 08:14:19 -0700</bug_when>
    <thetext>Created attachment 163879
Initial patch with only chromium port complete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719521</commentid>
    <comment_count>5</comment_count>
      <attachid>163879</attachid>
    <who name="">jochen</who>
    <bug_when>2012-09-13 08:24:16 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

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

&gt; Source/WebCore/bindings/v8/custom/V8StorageCustom.cpp:46
&gt; +        goto fail;

why don&apos;t you write something like

if (UNLIKELY(ec)) {
  setDOMException(ec, info.GetIsolate();
  return;
}

instead of the goto here and in the other places?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719539</commentid>
    <comment_count>6</comment_count>
      <attachid>163879</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-09-13 08:37:01 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/13848174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719553</commentid>
    <comment_count>7</comment_count>
      <attachid>163879</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-13 08:49:23 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13845225</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719554</commentid>
    <comment_count>8</comment_count>
      <attachid>163879</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-13 08:49:40 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13832808</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719562</commentid>
    <comment_count>9</comment_count>
      <attachid>163879</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-13 08:59:17 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13855037</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719578</commentid>
    <comment_count>10</comment_count>
      <attachid>163879</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-13 09:19:06 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13851145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719591</commentid>
    <comment_count>11</comment_count>
      <attachid>163879</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-13 09:35:32 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13839555</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719730</commentid>
    <comment_count>12</comment_count>
      <attachid>163879</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-13 11:41:01 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

Attachment 163879 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13844312

New failing tests:
fast/storage/storage-detached-iframe.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719834</commentid>
    <comment_count>13</comment_count>
      <attachid>163879</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-09-13 13:04:32 -0700</bug_when>
    <thetext>Comment on attachment 163879
Initial patch with only chromium port complete

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

&gt; Source/WebCore/storage/StorageAreaImpl.cpp:107
&gt; +bool StorageAreaImpl::canAccessStorage(Frame* frame) const

Not sure about this method body? If i&apos;m reading it right, it looks like it changes existing behavior about when storage is accessible. Are those changes intentional?

&gt; Source/WebCore/storage/StorageAreaImpl.cpp:111
&gt; +    if (frame-&gt;page()-&gt;settings()-&gt;privateBrowsingEnabled())

It looks like local and session storage are no longer accessible when &apos;private browsing&apos; under any circumstances.

&gt; Source/WebCore/storage/StorageAreaImpl.cpp:113
&gt;      if (m_storageType != LocalStorage)

And SessionStorage is no longer accessible ever.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719845</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-09-13 13:14:32 -0700</bug_when>
    <thetext>Instead of handling this in the bindings layer, have you considered doing these checks in the StorageArea impls?

Notice how ::setItem() is done with the ec out param being plumbed down to area. Maybe consistently do the same for all of these methods. A benefit would be not  checking &apos;canAccess&apos; twice in the chromium port on each query. When measuring perf times in the past, the cost of the canAccess call was actually a pretty significant taker of time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719846</commentid>
    <comment_count>15</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-09-13 13:14:42 -0700</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/storage/StorageAreaImpl.cpp:111
&gt; &gt; +    if (frame-&gt;page()-&gt;settings()-&gt;privateBrowsingEnabled())
&gt; 
&gt; It looks like local and session storage are no longer accessible when &apos;private browsing&apos; under any circumstances.

Actually, they already aren&apos;t available under &quot;private browsing&quot; in any circumstance.

I&apos;m okay with this patch with regards to 3rd-party storage blocking resulting in these exceptions to match Firefox.

But I think it would be unwise to start throwing the exceptions when in private browsing...  as that announces to the website that the user is in private browsing!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720423</commentid>
    <comment_count>16</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 01:09:50 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; &gt; Source/WebCore/storage/StorageAreaImpl.cpp:111
&gt; &gt; &gt; +    if (frame-&gt;page()-&gt;settings()-&gt;privateBrowsingEnabled())
&gt; &gt; 
&gt; &gt; It looks like local and session storage are no longer accessible when &apos;private browsing&apos; under any circumstances.
&gt; 
&gt; Actually, they already aren&apos;t available under &quot;private browsing&quot; in any circumstance.
&gt; 
&gt; I&apos;m okay with this patch with regards to 3rd-party storage blocking resulting in these exceptions to match Firefox.
&gt; 
&gt; But I think it would be unwise to start throwing the exceptions when in private browsing...  as that announces to the website that the user is in private browsing!!!

Yes, that makes sense.  I&apos;ll leave the private browsing check exactly as is, and add an additional check called canAccessStorage which will allow implementation specific security exceptions to be thrown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720499</commentid>
    <comment_count>17</comment_count>
      <attachid>164084</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 03:11:17 -0700</bug_when>
    <thetext>Created attachment 164084
Another round - still chromium only complete

Okay, I&apos;ve taken the above comments into consideration, and done the following:

* moved all the checks into the StorageAreaImpls and inlined the calls in StorageArea. This seemed like the most elegant way to handle the conflicting requirements of private browsing and the chromium access check.

* introduced a canAccessStorage method which in the default implementation just checks for a detached frame. I&apos;m not sure if this actually correct as I need to check what Firefox does here.

* for chromium, introduced an access check cache and optimized the code paths for the cached case as apparently this really slows down storage access.  This obsoletes https://bugs.webkit.org/show_bug.cgi?id=88412.  Note that this means all accesses after the user has the storage object are likely to succeed even if the permissions are changed.

If everyone is okay with this approach, I&apos;ll clean up the code and fix the JSC bindings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720502</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 03:14:29 -0700</bug_when>
    <thetext>Attachment 164084 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/fast/storage/storage-detached-...&quot; exit_code: 1
Source/WebCore/bindings/v8/custom/V8StorageCustom.cpp:44:  Omit int when using unsigned  [runtime/unsigned] [1]
Source/WebCore/bindings/v8/custom/V8StorageCustom.cpp:49:  Omit int when using unsigned  [runtime/unsigned] [1]
Total errors found: 2 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720523</commentid>
    <comment_count>19</comment_count>
      <attachid>164084</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-14 03:33:53 -0700</bug_when>
    <thetext>Comment on attachment 164084
Another round - still chromium only complete

Attachment 164084 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13841701</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720529</commentid>
    <comment_count>20</comment_count>
      <attachid>164084</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-14 03:41:00 -0700</bug_when>
    <thetext>Comment on attachment 164084
Another round - still chromium only complete

Attachment 164084 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13847531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720530</commentid>
    <comment_count>21</comment_count>
      <attachid>164084</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-14 03:41:14 -0700</bug_when>
    <thetext>Comment on attachment 164084
Another round - still chromium only complete

Attachment 164084 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13849510</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720534</commentid>
    <comment_count>22</comment_count>
      <attachid>164084</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-14 03:43:50 -0700</bug_when>
    <thetext>Comment on attachment 164084
Another round - still chromium only complete

Attachment 164084 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13844590</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720539</commentid>
    <comment_count>23</comment_count>
      <attachid>164084</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-14 03:48:03 -0700</bug_when>
    <thetext>Comment on attachment 164084
Another round - still chromium only complete

Attachment 164084 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13841711</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720824</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-09-14 09:17:46 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Created an attachment (id=164084) [details]
&gt; Another round - still chromium only complete
&gt; 
&gt; Okay, I&apos;ve taken the above comments into consideration, and done the following:
&gt;...
&gt; * introduced a canAccessStorage method which in the default implementation just checks for a detached frame. I&apos;m not sure if this actually correct as I need to check what Firefox does here.

Jeffrey Pfau (cc&apos;ed) is adding a &quot;3rd party storage blocking&quot; feature that allows Webkit to block any 3rd party script from accessing any storage technologies.

I think this canAccessStorage method should also check whether the access is disqualified based on 3rd party storage blocking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720969</commentid>
    <comment_count>25</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 11:19:50 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #17)
&gt; &gt; Created an attachment (id=164084) [details] [details]
&gt; &gt; Another round - still chromium only complete
&gt; &gt; 
&gt; &gt; Okay, I&apos;ve taken the above comments into consideration, and done the following:
&gt; &gt;...
&gt; &gt; * introduced a canAccessStorage method which in the default implementation just checks for a detached frame. I&apos;m not sure if this actually correct as I need to check what Firefox does here.
&gt; 
&gt; Jeffrey Pfau (cc&apos;ed) is adding a &quot;3rd party storage blocking&quot; feature that allows Webkit to block any 3rd party script from accessing any storage technologies.
&gt; 
&gt; I think this canAccessStorage method should also check whether the access is disqualified based on 3rd party storage blocking.

There is already the following check in DOMWindow::localStorage and ::sessionStorage accessors:

document-&gt;securityOrigin()-&gt;canAccessLocalStorage()

I believe that checks for third party accesses and throws the exception.  I can try to add it to the canAccessStorage, but that would be potentially expensive...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720985</commentid>
    <comment_count>26</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2012-09-14 11:35:04 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; Created an attachment (id=164084) [details] [details] [details]
&gt; &gt; &gt; Another round - still chromium only complete
&gt; &gt; &gt; 
&gt; &gt; &gt; Okay, I&apos;ve taken the above comments into consideration, and done the following:
&gt; &gt; &gt;...
&gt; &gt; &gt; * introduced a canAccessStorage method which in the default implementation just checks for a detached frame. I&apos;m not sure if this actually correct as I need to check what Firefox does here.
&gt; &gt; 
&gt; &gt; Jeffrey Pfau (cc&apos;ed) is adding a &quot;3rd party storage blocking&quot; feature that allows Webkit to block any 3rd party script from accessing any storage technologies.
&gt; &gt; 
&gt; &gt; I think this canAccessStorage method should also check whether the access is disqualified based on 3rd party storage blocking.
&gt; 
&gt; There is already the following check in DOMWindow::localStorage and ::sessionStorage accessors:
&gt; 
&gt; document-&gt;securityOrigin()-&gt;canAccessLocalStorage()
&gt; 
&gt; I believe that checks for third party accesses and throws the exception.  I can try to add it to the canAccessStorage, but that would be potentially expensive...

I didn&apos;t mean to recommend a specific implementation detail so much as to make sure the feature worked reasonably with this change.  If it already works, then that&apos;s great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721084</commentid>
    <comment_count>27</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 13:28:36 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; I didn&apos;t mean to recommend a specific implementation detail so much as to make sure the feature worked reasonably with this change.  If it already works, then that&apos;s great.

I&apos;m not 100% certain it does, but I&apos;ll check it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>721139</commentid>
    <comment_count>28</comment_count>
    <who name="Vicki Pfau">jeffrey+webkit</who>
    <bug_when>2012-09-14 14:34:17 -0700</bug_when>
    <thetext>I&apos;ve just landed http://trac.webkit.org/changeset/128653 which will likely affect this patch at least in some shape.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744220</commentid>
    <comment_count>29</comment_count>
      <attachid>169176</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-17 06:59:32 -0700</bug_when>
    <thetext>Created attachment 169176
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745662</commentid>
    <comment_count>30</comment_count>
      <attachid>169176</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-10-18 15:48:46 -0700</bug_when>
    <thetext>Comment on attachment 169176
Patch

Thnx for moving the logic out of the bindings layer and into less voodoo&apos;ish webcore classes.

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

&gt; Source/WebCore/page/DOMWindow.cpp:749
&gt; +        if (!m_sessionStorage-&gt;area()-&gt;canAccessStorage(m_frame)) {

Are these canAccessStorage() tests really needed for the window.sessionStorage and the window.localStorage accessors? Each method within the storage itself has been modified to test interally, this extra layer of checking on the window attribute value means we&apos;ll generally be checking twice per operation, and the first check will incur the larger cost since its bypassing the cached value.

And if the check on the window attribute value really is needed... as coded it&apos;s bypassing the area&apos;s cached value and will incur the full cost of looking up the policy value. Could this check utilize the cached value?

Answering that first question first would be good. If we could avoid the test for the window attribute access all the better.

&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:137
&gt; +    if (UNLIKELY(!frame || !frame-&gt;page()))

Is there any case where &apos;frame&apos; would be NULL? Not saying there isn&apos;t, just asking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745685</commentid>
    <comment_count>31</comment_count>
      <attachid>169176</attachid>
    <who name="">jochen</who>
    <bug_when>2012-10-18 16:00:10 -0700</bug_when>
    <thetext>Comment on attachment 169176
Patch

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

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:749
&gt;&gt; +        if (!m_sessionStorage-&gt;area()-&gt;canAccessStorage(m_frame)) {
&gt; 
&gt; Are these canAccessStorage() tests really needed for the window.sessionStorage and the window.localStorage accessors? Each method within the storage itself has been modified to test interally, this extra layer of checking on the window attribute value means we&apos;ll generally be checking twice per operation, and the first check will incur the larger cost since its bypassing the cached value.
&gt; 
&gt; And if the check on the window attribute value really is needed... as coded it&apos;s bypassing the area&apos;s cached value and will incur the full cost of looking up the policy value. Could this check utilize the cached value?
&gt; 
&gt; Answering that first question first would be good. If we could avoid the test for the window attribute access all the better.

In firefox, foo = window.sessionStorage will already throw an exception, and since it&apos;s about matching that behavior, I&apos;d say the test is required

&gt;&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:137
&gt;&gt; +    if (UNLIKELY(!frame || !frame-&gt;page()))
&gt; 
&gt; Is there any case where &apos;frame&apos; would be NULL? Not saying there isn&apos;t, just asking.

I think there&apos;s none, just page can be null (see the detached iframe layout test)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745688</commentid>
    <comment_count>32</comment_count>
      <attachid>169176</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-18 16:02:23 -0700</bug_when>
    <thetext>Comment on attachment 169176
Patch

I mentioned this on another patch, but I might as well mention it here as well.  The UNLIKELY doesn&apos;t really do anything.  We should use it only when we have direct evidence that it actually improves performance.  Otherwise it just becomes copy pasta.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745693</commentid>
    <comment_count>33</comment_count>
      <attachid>169176</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-18 16:06:40 -0700</bug_when>
    <thetext>Comment on attachment 169176
Patch

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

&gt;&gt; Source/WebCore/page/DOMWindow.cpp:749
&gt;&gt; +        if (!m_sessionStorage-&gt;area()-&gt;canAccessStorage(m_frame)) {
&gt; 
&gt; Are these canAccessStorage() tests really needed for the window.sessionStorage and the window.localStorage accessors? Each method within the storage itself has been modified to test interally, this extra layer of checking on the window attribute value means we&apos;ll generally be checking twice per operation, and the first check will incur the larger cost since its bypassing the cached value.
&gt; 
&gt; And if the check on the window attribute value really is needed... as coded it&apos;s bypassing the area&apos;s cached value and will incur the full cost of looking up the policy value. Could this check utilize the cached value?
&gt; 
&gt; Answering that first question first would be good. If we could avoid the test for the window attribute access all the better.

Presently there in no way to ensure the cache is cleared, so I had to leave an uncached version on calls to window.localStorage and window.sessionStorage since the point of the bug was to replicate firefox&apos;s behaviour an throw an exception on bad access.  In general, once the storage object is retrieved, the cache will take over, which is much faster than the present implementation, which is constantly checking with the permissionclient (i think across processes) at great expense.

&gt;&gt; Source/WebKit/chromium/src/StorageAreaProxy.cpp:137
&gt;&gt; +    if (UNLIKELY(!frame || !frame-&gt;page()))
&gt; 
&gt; Is there any case where &apos;frame&apos; would be NULL? Not saying there isn&apos;t, just asking.

I don&apos;t know, but the null check here has been taken over from the refactor of Storage, which had it all over the place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745706</commentid>
    <comment_count>34</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-18 16:14:07 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; (From update of attachment 169176 [details])
&gt; I mentioned this on another patch, but I might as well mention it here as well.  The UNLIKELY doesn&apos;t really do anything.  We should use it only when we have direct evidence that it actually improves performance.  Otherwise it just becomes copy pasta.

Yeah I&apos;ve been trying to avoid it in generally, it&apos;s just that this patch started out trying to additionally fix a performance problem from another bug, so they were there a long time ago.  I&apos;ll get rid of them, as I&apos;m assuming the access cache benefit is the big win and actually performing db operations will take way longer than checking a few fields.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745757</commentid>
    <comment_count>35</comment_count>
      <attachid>169176</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-10-18 17:00:41 -0700</bug_when>
    <thetext>Comment on attachment 169176
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/page/DOMWindow.cpp:749
&gt;&gt;&gt;&gt; +        if (!m_sessionStorage-&gt;area()-&gt;canAccessStorage(m_frame)) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Are these canAccessStorage() tests really needed for the window.sessionStorage and the window.localStorage accessors? Each method within the storage itself has been modified to test interally, this extra layer of checking on the window attribute value means we&apos;ll generally be checking twice per operation, and the first check will incur the larger cost since its bypassing the cached value.
&gt;&gt;&gt; 
&gt;&gt;&gt; And if the check on the window attribute value really is needed... as coded it&apos;s bypassing the area&apos;s cached value and will incur the full cost of looking up the policy value. Could this check utilize the cached value?
&gt;&gt;&gt; 
&gt;&gt;&gt; Answering that first question first would be good. If we could avoid the test for the window attribute access all the better.
&gt;&gt; 
&gt;&gt; In firefox, foo = window.sessionStorage will already throw an exception, and since it&apos;s about matching that behavior, I&apos;d say the test is required
&gt; 
&gt; Presently there in no way to ensure the cache is cleared, so I had to leave an uncached version on calls to window.localStorage and window.sessionStorage since the point of the bug was to replicate firefox&apos;s behaviour an throw an exception on bad access.  In general, once the storage object is retrieved, the cache will take over, which is much faster than the present implementation, which is constantly checking with the permissionclient (i think across processes) at great expense.

The trouble is that i don&apos;t think consumers of this api generally retrieve the &apos;storage&apos; attribute value and keep it around. Usage looks more like get it when you need it...

for (i = 0; i &lt; localStorage.length(); i++) {
  localStorage.getItem(localStorage.key(i));
}

... so the test on the window attribute value access kind of defeats the additional cache in WebCore::StorageArea.

The check today generally does not go across process boundaries, but it does call out through the webkit api and retrieve a cached value from a larger collection maintained on the client side. It&apos;s not a great expense, but the data type transformations when calling back and forth across the webkit api do add up when iterating of some number of values.

The logic that goes around the really fast cache in WebCore::StorageArea does nothing to clear out that larger cached collection in the renderer. If that larger cache is not cleared on settings changes (i don&apos;t think it is but jochen might know better), i think clearing the WebCore::StorageArea cache doesn&apos;t accomplish anything except to make it a bit slower.

But honestly, regardless of what happens to the larger cache... I&apos;d prefer to see the fast cache utilized here too. We&apos;re talking about possible changes in behavior between chrome/ff when the content setting value is changed some time after a page is up and running and having already accessed localStorage. If there is a difference in that narrow case... i&apos;d assert thats just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747269</commentid>
    <comment_count>36</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-22 00:26:17 -0700</bug_when>
    <thetext>&gt; But honestly, regardless of what happens to the larger cache... I&apos;d prefer to see the fast cache utilized here too. We&apos;re talking about possible changes in behavior between chrome/ff when the content setting value is changed some time after a page is up and running and having already accessed localStorage. If there is a difference in that narrow case... i&apos;d assert thats just fine.

Okay, I&apos;m indifferent, and you&apos;re the only one who&apos;s spoken up, so I&apos;ll use the fast cache everywhere but keep the check on the window.localStorage accessor to mimic firefox. I&apos;ll repost those changes shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747456</commentid>
    <comment_count>37</comment_count>
      <attachid>169884</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-10-22 05:30:59 -0700</bug_when>
    <thetext>Created attachment 169884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747737</commentid>
    <comment_count>38</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2012-10-22 11:55:27 -0700</bug_when>
    <thetext>thnx and lgtm!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748320</commentid>
    <comment_count>39</comment_count>
      <attachid>169884</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 00:24:19 -0700</bug_when>
    <thetext>Comment on attachment 169884
Patch

Clearing flags on attachment: 169884

Committed r132183: &lt;http://trac.webkit.org/changeset/132183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748321</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-23 00:24:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163879</attachid>
            <date>2012-09-13 08:14:19 -0700</date>
            <delta_ts>2012-09-14 03:11:17 -0700</delta_ts>
            <desc>Initial patch with only chromium port complete</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>18238</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGll
bnQvc3RvcmFnZS1wZXJtaXNzaW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNzaW9uLWV4cGVjdGVkLnR4
dAppbmRleCBmNGUzNzlkLi41MzhkNDExIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1leHBlY3RlZC50
eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9z
dG9yYWdlLXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CkBAIC01LDEyICs1LDE2IEBAIExlbmd0aCBp
cyAxCiBWYWx1ZSBmb3IgRk9PIGlzIEJBUgogS2V5IGZvciBpbmRleCAwIGlzIEZPTwogRGlzYWJs
aW5nIGxvY2FsU3RvcmFnZSBhY2Nlc3MuCi1MZW5ndGggaXMgMAotVmFsdWUgZm9yIEZPTyBpcyBu
dWxsCi1DYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRlbTogRXJyb3I6IFFVT1RB
X0VYQ0VFREVEX0VSUjogRE9NIEV4Y2VwdGlvbiAyMgotTGVuZ3RoIGlzIDAKLVZhbHVlIGZvciBG
T08gaXMgbnVsbAotS2V5IGZvciBpbmRleCAwIGlzIG51bGwKK0NhdWdodCBleGNlcHRpb24gdHJ5
aW5nIHRvIGdldCB3aW5kb3cubG9jYWxTdG9yYWdlOiBFcnJvcjogU0VDVVJJVFlfRVJSOiBET00g
RXhjZXB0aW9uIDE4CitDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgbGVuZ3RoOiBFcnJv
cjogU0VDVVJJVFlfRVJSOiBET00gRXhjZXB0aW9uIDE4CitDYXVnaHQgZXhjZXB0aW9uIHRyeWlu
ZyB0byBnZXQgaXRlbTogRXJyb3I6IFNFQ1VSSVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOAorQ2F1
Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IEVycm9yOiBTRUNVUklUWV9FUlI6
IERPTSBFeGNlcHRpb24gMTgKK0NhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIHJlbW92ZSBpdGVt
OiBFcnJvcjogU0VDVVJJVFlfRVJSOiBET00gRXhjZXB0aW9uIDE4CitFbmFibGluZyBsb2NhbFN0
b3JhZ2UgYWNjZXNzLgord2luZG93LmxvY2FsU3RvcmFnZSBhY2Nlc3NpYmxlIGlzIHRydWUKK0xl
bmd0aCBpcyAxCitWYWx1ZSBmb3IgRk9PIGlzIEJBUgorS2V5IGZvciBpbmRleCAwIGlzIEZPTwog
TGVuZ3RoIGlzIDAKIFZhbHVlIGZvciBGT08gaXMgbnVsbAogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lv
bi5odG1sIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9z
dG9yYWdlLXBlcm1pc3Npb24uaHRtbAppbmRleCA0YTRmNDdhLi4zNzI5OTAwIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2Ut
cGVybWlzc2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1p
c3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNzaW9uLmh0bWwKQEAgLTM3LDE1ICszNyw0MSBAQCBm
dW5jdGlvbiBydW5UZXN0KCkKICAgICBpZiAod2luZG93LnRlc3RSdW5uZXIgJiYgdGVzdFJ1bm5l
ci5zZXRTdG9yYWdlQWxsb3dlZCkKICAgICAgICAgdGVzdFJ1bm5lci5zZXRTdG9yYWdlQWxsb3dl
ZChmYWxzZSk7CiAKLSAgICBsb2coIkxlbmd0aCBpcyAiICsgbG9jYWxTdG9yYWdlLmxlbmd0aCk7
Ci0gICAgbG9nKCJWYWx1ZSBmb3IgRk9PIGlzICIgKyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiRk9P
IikpOworICAgIHRyeSB7CisgICAgICAgIGxvZygid2luZG93LmxvY2FsU3RvcmFnZSBhY2Nlc3Np
YmxlIGlzICIgKyAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UpOworICAgIH0gY2F0Y2goZSkgeworICAg
ICAgICBsb2coIkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIGdldCB3aW5kb3cubG9jYWxTdG9y
YWdlOiAiICsgZSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgbG9nKCJMZW5ndGggaXMg
IiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2co
IkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIGdldCBsZW5ndGg6ICIgKyBlKTsKKyAgICB9CisK
KyAgICB0cnkgeworICAgICAgICBsb2coIlZhbHVlIGZvciBGT08gaXMgIiArIGxvY2FsU3RvcmFn
ZS5nZXRJdGVtKCJGT08iKSk7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIGxvZygiQ2F1Z2h0
IGV4Y2VwdGlvbiB0cnlpbmcgdG8gZ2V0IGl0ZW06ICIgKyBlKTsKKyAgICB9CiAKICAgICB0cnkg
ewogICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgiRk9PIiwgIkJBWiIpOwogICAgIH0gY2F0
Y2goZSkgewogICAgICAgICBsb2coIkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIGNoYW5nZSBp
dGVtOiAiICsgZSk7CiAgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgbG9jYWxTdG9yYWdlLnJl
bW92ZUl0ZW0oIkZPTyIpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2coIkNhdWdodCBl
eGNlcHRpb24gdHJ5aW5nIHRvIHJlbW92ZSBpdGVtOiAiICsgZSk7CisgICAgfQorCisgICAgbG9n
KCJFbmFibGluZyBsb2NhbFN0b3JhZ2UgYWNjZXNzLiIpOworICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lciAmJiB0ZXN0UnVubmVyLnNldFN0b3JhZ2VBbGxvd2VkKQorICAgICAgICB0ZXN0UnVubmVy
LnNldFN0b3JhZ2VBbGxvd2VkKHRydWUpOwogICAgIAorICAgIGxvZygid2luZG93LmxvY2FsU3Rv
cmFnZSBhY2Nlc3NpYmxlIGlzICIgKyAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UpOwogICAgIGxvZygi
TGVuZ3RoIGlzICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3RoKTsKICAgICBsb2coIlZhbHVlIGZvciBG
T08gaXMgIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJGT08iKSk7CiAgICAgbG9nKCJLZXkgZm9y
IGluZGV4IDAgaXMgIiArIGxvY2FsU3RvcmFnZS5rZXkoMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAppbmRleCBjZDlm
YjE2Li5hOGZlOWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcApAQCAtNDAsMTYgKzQwLDI3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHY4OjpIYW5kbGU8djg6OkFycmF5PiBWOFN0b3JhZ2U6Om5hbWVkUHJvcGVydHlF
bnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAgU3RvcmFnZSog
c3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgdW5zaWdu
ZWQgaW50IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotICAgIHY4OjpIYW5kbGU8djg6OkFy
cmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFN0cmluZyBrZXkgPSBz
dG9yYWdlLT5rZXkoaSk7Ci0gICAgICAgIEFTU0VSVCgha2V5LmlzTnVsbCgpKTsKLSAgICAgICAg
U3RyaW5nIHZhbCA9IHN0b3JhZ2UtPmdldEl0ZW0oa2V5KTsKLSAgICAgICAgcHJvcGVydGllcy0+
U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHY4U3RyaW5nKGtleSwgaW5mby5H
ZXRJc29sYXRlKCkpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB1bnNpZ25lZCBp
bnQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZWMpKQor
ICAgICAgICBnb3RvIGZhaWw7CisgICAgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4g
cHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBrZXkg
PSBzdG9yYWdlLT5rZXkoaSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFrZXkuaXNOdWxsKCkp
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgICAgICAgICBnb3RvIGZh
aWw7CisgICAgICAgICAgICBTdHJpbmcgdmFsID0gc3RvcmFnZS0+Z2V0SXRlbShrZXksIGVjKTsK
KyAgICAgICAgICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgICAgICAgICAgZ290byBmYWls
OworICAgICAgICAgICAgcHJvcGVydGllcy0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xh
dGUoKSksIHY4U3RyaW5nKGtleSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gcHJvcGVydGllczsKICAgICB9Ci0KLSAgICByZXR1cm4gcHJvcGVydGllczsK
KyAgICBmYWlsOgorICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwor
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpBcnJheT4oKTsKIH0KIAogc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC01NywxMCArNjgsMjUgQEAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiB2OE5hbWUsIGNvbnN0IHYKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhTdG9yYWdlOjp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2
OE5hbWUpOwogCi0gICAgaWYgKG5hbWUgIT0gImxlbmd0aCIgJiYgc3RvcmFnZS0+Y29udGFpbnMo
bmFtZSkpCi0gICAgICAgIHJldHVybiB2OFN0cmluZyhzdG9yYWdlLT5nZXRJdGVtKG5hbWUpLCBp
bmZvLkdldElzb2xhdGUoKSk7Ci0KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29s
IGZvdW5kOworICAgIGlmIChuYW1lID09ICJsZW5ndGgiKQorICAgICAgICBnb3RvIGVtcHR5Owor
ICAgIGZvdW5kID0gc3RvcmFnZS0+Y29udGFpbnMobmFtZSwgZWMpOworICAgIGlmIChVTkxJS0VM
WShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIWZvdW5kKQorICAgICAgICBnb3Rv
IGVtcHR5OworICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHN0b3JhZ2UtPmdldEl0ZW0o
bmFtZSwgZWMpOworICAgICAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICAgICAgZ290byBm
YWlsOworICAgICAgICByZXR1cm4gdjhTdHJpbmcocmVzdWx0LCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgfQorICAgIGVtcHR5OgogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIGZhaWw6
CisgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOwogfQog
CiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTdG9yYWdlOjppbmRleGVkUHJvcGVydHlHZXR0ZXIo
dWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC04NSw5ICsx
MTEsMjAgQEAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gVjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5
UXVlcnkodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmEKICAgICBTdG9yYWdlKiBzdG9yYWdlID0g
VjhTdG9yYWdlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRv
V2ViQ29yZVN0cmluZyh2OE5hbWUpOwogCi0gICAgaWYgKG5hbWUgIT0gImxlbmd0aCIgJiYgc3Rv
cmFnZS0+Y29udGFpbnMobmFtZSkpCi0gICAgICAgIHJldHVybiB2OEludGVnZXIoMCwgaW5mby5H
ZXRJc29sYXRlKCkpOwotCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBmb3Vu
ZDsKKyAgICBpZiAobmFtZSA9PSAibGVuZ3RoIikKKyAgICAgICAgZ290byBlbXB0eTsKKyAgICBm
b3VuZCA9IHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUsIGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZWMp
KQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgZ290byBlbXB0
eTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKDAsIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBmYWls
OgorICAgIC8vIE11c3QgZmFsbCB0aHJvdWdoIGhlcmUuCisgICAgc2V0RE9NRXhjZXB0aW9uKGVj
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgZW1wdHk6CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8
djg6OkludGVnZXI+KCk7CiB9CiAKQEAgLTEzMCwxMSArMTY3LDIwIEBAIHN0YXRpYyB2ODo6SGFu
ZGxlPHY4OjpCb29sZWFuPiBzdG9yYWdlRGVsZXRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhO
YW1lLCBjb25zCiAgICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9OYXRpdmUoaW5m
by5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodjhOYW1lKTsK
ICAgICAKLSAgICBpZiAoc3RvcmFnZS0+Y29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgc3RvcmFn
ZS0+cmVtb3ZlSXRlbShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHY4Qm9vbGVhbih0cnVlLCBpbmZv
LkdldElzb2xhdGUoKSk7Ci0gICAgfQotCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Ym9vbCBmb3VuZCA9IHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUsIGVjKTsKKyAgICBpZiAoVU5MSUtF
TFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgZ290
byBlbXB0eTsKKyAgICBzdG9yYWdlLT5yZW1vdmVJdGVtKG5hbWUsIGVjKTsKKyAgICBpZiAoVU5M
SUtFTFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgcmV0dXJuIHY4Qm9vbGVhbih0cnVl
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgZmFpbDoKKyAgICAvLyBNdXN0IGZhbGwgdGhyb3Vn
aCBoZXJlLgorICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IGVtcHR5OgogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPigpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggNTIxMDdjOC4uOGNmYjdjMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NV2luZG93LmNwcApAQCAtNzYyLDggKzc2Miw2IEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6
bG9jYWxTdG9yYWdlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewogICAgIGlmICghaXNDdXJy
ZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChtX2xv
Y2FsU3RvcmFnZSkKLSAgICAgICAgcmV0dXJuIG1fbG9jYWxTdG9yYWdlLmdldCgpOwogCiAgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50
KQpAQCAtNzgxLDcgKzc3OSwxOSBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZShF
eGNlcHRpb25Db2RlJiBlYykgY29uc3QKICAgICBpZiAoIXBhZ2UtPnNldHRpbmdzKCktPmxvY2Fs
U3RvcmFnZUVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAobV9sb2NhbFN0
b3JhZ2UpIHsKKyAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZS0+YXJlYSgpLT5jYW5BY2Nlc3NT
dG9yYWdlKG1fZnJhbWUpKSB7CisgICAgICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFn
ZS5nZXQoKTsKKyAgICB9CisKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0g
cGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCkpOworICAgIGlmICghc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9m
cmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2UocGFn
ZSwgc3RvcmFnZUFyZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwogCiAgICAgbV9sb2NhbFN0b3Jh
Z2UgPSBTdG9yYWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCmluZGV4IDQ0ZDBiMjcuLjRlOTJjY2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlN0b3JhZ2UuaCIKIAorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgpAQCAtNTYsNjAgKzU3LDczIEBAIFN0b3JhZ2U6On5TdG9yYWdlKCkKICAgICAgICAgbV9z
dG9yYWdlQXJlYS0+ZGVjcmVtZW50QWNjZXNzQ291bnQoKTsKIH0KIAotdW5zaWduZWQgU3RvcmFn
ZTo6bGVuZ3RoKCkgY29uc3QKK3Vuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aChFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBt
X3N0b3JhZ2VBcmVhLT5kaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkK
KyAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwotCisgICAgfQorICAg
IGVjID0gMDsKICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKG1fZnJhbWUpOwogfQog
Ci1TdHJpbmcgU3RvcmFnZTo6a2V5KHVuc2lnbmVkIGluZGV4KSBjb25zdAorU3RyaW5nIFN0b3Jh
Z2U6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkgfHwgbV9zdG9yYWdlQXJlYS0+ZGlzYWJs
ZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUobV9mcmFtZSkpCisgICAgaWYgKCFtX3N0b3JhZ2VB
cmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwogICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KKyAgICB9CisgICAgZWMgPSAwOwogICAg
IHJldHVybiBtX3N0b3JhZ2VBcmVhLT5rZXkoaW5kZXgsIG1fZnJhbWUpOwogfQogCi1TdHJpbmcg
U3RvcmFnZTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QKK1N0cmluZyBTdG9yYWdl
OjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsK
LSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBtX3N0b3JhZ2VBcmVhLT5k
aXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkKKyAgICBpZiAoIW1fc3Rv
cmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQorICAgIH0KKyAgICBlYyA9IDA7
CiAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5LCBtX2ZyYW1lKTsKIH0KIAog
dm9pZCBTdG9yYWdlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZh
bHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKCFtX2ZyYW1l
KQorICAgIGlmICghbV9zdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgewor
ICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJuOwotCisgICAgfQorICAg
IGVjID0gMDsKICAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGVjLCBtX2Zy
YW1lKTsKIH0KIAotdm9pZCBTdG9yYWdlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KQor
dm9pZCBTdG9yYWdlOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICBpZiAoIW1fZnJhbWUpCisgICAgaWYgKCFtX3N0b3JhZ2VBcmVhLT5jYW5B
Y2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAg
ICAgICByZXR1cm47Ci0KKyAgICB9CisgICAgZWMgPSAwOwogICAgIG1fc3RvcmFnZUFyZWEtPnJl
bW92ZUl0ZW0oa2V5LCBtX2ZyYW1lKTsKIH0KIAotdm9pZCBTdG9yYWdlOjpjbGVhcigpCit2b2lk
IFN0b3JhZ2U6OmNsZWFyKEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICghbV9mcmFtZSkK
KyAgICBpZiAoIW1fc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKLQorICAgIH0KKyAgICBl
YyA9IDA7CiAgICAgbV9zdG9yYWdlQXJlYS0+Y2xlYXIobV9mcmFtZSk7CiB9CiAKLWJvb2wgU3Rv
cmFnZTo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Citib29sIFN0b3JhZ2U6OmNv
bnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QKIHsKLSAg
ICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBtX3N0b3JhZ2VBcmVhLT5kaXNh
YmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkKKyAgICBpZiAoIW1fc3RvcmFn
ZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLQorICAgIH0KKyAgICBlYyA9IDA7CiAgICAg
cmV0dXJuIG1fc3RvcmFnZUFyZWEtPmNvbnRhaW5zKGtleSwgbV9mcmFtZSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oIGIvU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TdG9yYWdlLmgKaW5kZXggNWVhYmYwZi4uNTQ5NGYzMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TdG9yYWdlLmgKQEAgLTQyLDE0ICs0MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0b3JhZ2U+IGNyZWF0ZShGcmFtZSosIFBhc3NSZWZQdHI8
U3RvcmFnZUFyZWE+KTsKICAgICAgICAgflN0b3JhZ2UoKTsKIAotICAgICAgICB1bnNpZ25lZCBs
ZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
Ci0gICAgICAgIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgICAgICB1
bnNpZ25lZCBsZW5ndGgoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgICAgICBTdHJpbmcga2V5
KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJikgY29uc3Q7CisgICAgICAgIFN0cmluZyBn
ZXRJdGVtKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICAgICAgdm9p
ZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmKTsKLSAgICAg
ICAgdm9pZCBjbGVhcigpOworICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiwg
RXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIGNsZWFyKEV4Y2VwdGlvbkNvZGUmKTsKIAot
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAg
Ym9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYpIGNvbnN0Owog
CiAgICAgICAgIFN0b3JhZ2VBcmVhKiBhcmVhKCkgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQXJl
YS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2Uu
aWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmlkbAppbmRleCAxZDViMzI3Li5k
ZTc0YWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwKQEAgLTMyLDEzICszMiwxNyBA
QCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIEN1c3RvbUVudW1lcmF0ZVByb3BlcnR5LAogICAg
ICAgICBDdXN0b21OYW1lZFNldHRlciwKICAgICBdIFN0b3JhZ2UgewotICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgW05vdEVudW1lcmFibGVdIHVuc2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgICAg
ICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJp
bmcga2V5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwotICAgICAgICBbTm90RW51bWVyYWJsZSwg
VHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJpbmcgZ2V0SXRlbShpbiBET01T
dHJpbmcga2V5KTsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtOb3RFbnVtZXJhYmxlXSB1
bnNpZ25lZCBsb25nIGxlbmd0aCBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAg
IFtOb3RFbnVtZXJhYmxlLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmlu
ZyBrZXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNl
cHRpb24pOworICAgICAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdB
cz1OdWxsXSBET01TdHJpbmcgZ2V0SXRlbShpbiBET01TdHJpbmcga2V5KQorICAgICAgICAgICAg
cmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIHNldEl0
ZW0oaW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NU3RyaW5nIGRhdGEpIAogICAgICAgICAgICAgcmFp
c2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIHJlbW92ZUl0
ZW0oaW4gRE9NU3RyaW5nIGtleSk7Ci0gICAgICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIGNsZWFy
KCk7CisgICAgICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIHJlbW92ZUl0ZW0oaW4gRE9NU3RyaW5n
IGtleSkKKyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbTm90RW51
bWVyYWJsZV0gdm9pZCBjbGVhcigpCisgICAgICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
ICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VB
cmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKaW5kZXggZjY5ZDdi
NS4uMDk2NDg5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaApAQCAtNTQsNyAr
NTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihG
cmFtZSogc291cmNlRnJhbWUpID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNv
bnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKIAotICAgICAg
ICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29uc3QgRnJh
bWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BY2Nl
c3NTdG9yYWdlKEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1
YWwgc2l6ZV90IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAppbmRleCAzN2M0ZjU5Li5lNzA1Y2Fj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCkBAIC0xMDQs
MTUgKzEwNCwxNSBAQCBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdlQXJl
YUltcGwqIGFyZWEpCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogfQogCi1ib29sIFN0b3Jh
Z2VBcmVhSW1wbDo6ZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29uc3QgRnJhbWUq
IGZyYW1lKSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNhbkFjY2Vzc1N0b3JhZ2UoRnJh
bWUqIGZyYW1lKSBjb25zdAogewotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2YXRlQnJv
d3NpbmdFbmFibGVkKCkpCisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChmcmFtZS0+cGFnZSgpLT5zZXR0aW5ncygpLT5wcml2
YXRlQnJvd3NpbmdFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9z
dG9yYWdlVHlwZSAhPSBMb2NhbFN0b3JhZ2UpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIHJl
dHVybiAhU2NoZW1lUmVnaXN0cnk6OmFsbG93c0xvY2FsU3RvcmFnZUFjY2Vzc0luUHJpdmF0ZUJy
b3dzaW5nKGZyYW1lLT5kb2N1bWVudCgpLT5zZWN1cml0eU9yaWdpbigpLT5wcm90b2NvbCgpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBTY2hlbWVSZWdpc3RyeTo6YWxsb3dz
TG9jYWxTdG9yYWdlQWNjZXNzSW5Qcml2YXRlQnJvd3NpbmcoZnJhbWUtPmRvY3VtZW50KCktPnNl
Y3VyaXR5T3JpZ2luKCktPnByb3RvY29sKCkpOwogfQogCiB1bnNpZ25lZCBTdG9yYWdlQXJlYUlt
cGw6Omxlbmd0aChGcmFtZSopIGNvbnN0CkBAIC0xNDUsOCArMTQ1LDggQEAgdm9pZCBTdG9yYWdl
QXJlYUltcGw6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUs
IEV4Y2VwdGlvbkMKICAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKICAgICBibG9ja1VudGls
SW1wb3J0Q29tcGxldGUoKTsKIAotICAgIGlmIChkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5G
cmFtZShmcmFtZSkpIHsKLSAgICAgICAgZWMgPSBRVU9UQV9FWENFRURFRF9FUlI7CisgICAgaWYg
KCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgU3RvcmFn
ZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJhbWUpCiAg
ICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgp
OwogCi0gICAgaWYgKGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGZyYW1lKSkKKyAg
ICBpZiAoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKQogICAgICAgICByZXR1cm47CiAKICAgICBT
dHJpbmcgb2xkVmFsdWU7CkBAIC0xOTUsNyArMTk1LDcgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyKEZyYW1lKiBmcmFtZSkKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxv
Y2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKLSAgICBpZiAoZGlzYWJsZWRCeVByaXZhdGVCcm93
c2luZ0luRnJhbWUoZnJhbWUpKQorICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIGlmICghbV9zdG9yYWdlTWFwLT5sZW5ndGgoKSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCmluZGV4IDFmMmI3ZTAuLjZjNmFkODQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuaApAQCAtNTIsNyArNTIs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFt
ZSogc291cmNlRnJhbWUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVhbCBi
b29sIGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGNvbnN0IEZyYW1lKiBzb3VyY2VG
cmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BY2Nlc3NTdG9yYWdlKEZyYW1l
KiBzb3VyY2VGcmFtZSkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Qnl0
ZXNVc2VkQnlDYWNoZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VBcmVhUHJveHkuY3BwCmluZGV4IGVmYTBjOTAuLjM0NTBkYmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCkBAIC0xMTMsNyAr
MTEzLDcgQEAgYm9vbCBTdG9yYWdlQXJlYVByb3h5Ojpjb250YWlucyhjb25zdCBTdHJpbmcmIGtl
eSwgRnJhbWUqIGZyYW1lKSBjb25zdAogCiBib29sIFN0b3JhZ2VBcmVhUHJveHk6OmNhbkFjY2Vz
c1N0b3JhZ2UoRnJhbWUqIGZyYW1lKSBjb25zdAogewotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkK
KyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgV2ViS2l0OjpXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmZyb21GcmFtZShmcmFtZSk7CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlldyA9
IHdlYkZyYW1lLT52aWV3SW1wbCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3Rv
cmFnZUFyZWFQcm94eS5oCmluZGV4IGNhZTM1OTMuLmNiZDNlNWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpOwogICAgIHZp
cnR1YWwgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1l
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5G
cmFtZShjb25zdCBGcmFtZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdDsKIApAQCAtNjksOCArNjksNiBAQCBwdWJs
aWM6CiAgICAgICAgICAgICBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFu
Y2UsIGJvb2wgb3JpZ2luYXRlZEluUHJvY2Vzcyk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBjYW5B
Y2Nlc3NTdG9yYWdlKEZyYW1lKikgY29uc3Q7Ci0KICAgICBzdGF0aWMgYm9vbCBpc0V2ZW50U291
cmNlKFN0b3JhZ2UqLCBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFuY2Up
OwogCiAgICAgT3duUHRyPFdlYktpdDo6V2ViU3RvcmFnZUFyZWE+IG1fc3RvcmFnZUFyZWE7Cg==
</data>
<flag name="commit-queue"
          id="175494"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164084</attachid>
            <date>2012-09-14 03:11:17 -0700</date>
            <delta_ts>2012-10-17 06:59:22 -0700</delta_ts>
            <desc>Another round - still chromium only complete</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>30753</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlm
cmFtZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRh
Y2hlZC1pZnJhbWUtZXhwZWN0ZWQudHh0CmluZGV4IGYxNTFhYTcuLmVlZjJjZTUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQt
aWZyYW1lLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDUgQEAKIENPTlNPTEUgTUVTU0FHRTogbGlu
ZSAyNTogRXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAz
OTogRXhwZWN0ZWQgZXhjZXB0aW9uIGNhdWdodC4KIEJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3MTQwCiAKIERlc2NyaXB0aW9uOiBDcmFzaCBmcm9tIG51bGwg
cG9pbnRlciBkZXJlZmVyZW5jZSBiZWxvdyBXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnNldEl0
ZW0oKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNo
ZWQtaWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hl
ZC1pZnJhbWUuaHRtbAppbmRleCA2N2ViODhiLi4wNjBkNDI1IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbApAQCAtMzMs
NyArMzMsMTEgQEAKICAgICAgICAgICB2YXIgYV9sb2NhbFN0b3JhZ2UgPSBhLmxvY2FsU3RvcmFn
ZTsgLy8gVGhlIGNvbnN0cnVjdG9yIHdvbid0IGJlIHJlYWNoYWJsZSBhcyB3aW5kb3cgb2JqZWN0
IHByb3BlcnR5IGFmdGVyIGRldGFjaGluZyB0aGUgZnJhbWUuCiAKICAgICAgICAgICB0MS5vdXRl
clRleHQgPSAiIjsKLSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNpdGVkPSJ0ZXN0
IjsKKyAgICAgICAgICB0cnkgeworCSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNp
dGVkPSJ0ZXN0IjsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJFeHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0LiIpOworICAgICAgICAgIH0KICAgICAg
IH0KIAogICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xp
ZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1leHBlY3RlZC50eHQKaW5kZXggZjRlMzc5ZC4uNTM4ZDQx
MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNs
aWVudC9zdG9yYWdlLXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNzaW9uLWV4cGVj
dGVkLnR4dApAQCAtNSwxMiArNSwxNiBAQCBMZW5ndGggaXMgMQogVmFsdWUgZm9yIEZPTyBpcyBC
QVIKIEtleSBmb3IgaW5kZXggMCBpcyBGT08KIERpc2FibGluZyBsb2NhbFN0b3JhZ2UgYWNjZXNz
LgotTGVuZ3RoIGlzIDAKLVZhbHVlIGZvciBGT08gaXMgbnVsbAotQ2F1Z2h0IGV4Y2VwdGlvbiB0
cnlpbmcgdG8gY2hhbmdlIGl0ZW06IEVycm9yOiBRVU9UQV9FWENFRURFRF9FUlI6IERPTSBFeGNl
cHRpb24gMjIKLUxlbmd0aCBpcyAwCi1WYWx1ZSBmb3IgRk9PIGlzIG51bGwKLUtleSBmb3IgaW5k
ZXggMCBpcyBudWxsCitDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgd2luZG93LmxvY2Fs
U3RvcmFnZTogRXJyb3I6IFNFQ1VSSVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOAorQ2F1Z2h0IGV4
Y2VwdGlvbiB0cnlpbmcgdG8gZ2V0IGxlbmd0aDogRXJyb3I6IFNFQ1VSSVRZX0VSUjogRE9NIEV4
Y2VwdGlvbiAxOAorQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gZ2V0IGl0ZW06IEVycm9yOiBT
RUNVUklUWV9FUlI6IERPTSBFeGNlcHRpb24gMTgKK0NhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRv
IGNoYW5nZSBpdGVtOiBFcnJvcjogU0VDVVJJVFlfRVJSOiBET00gRXhjZXB0aW9uIDE4CitDYXVn
aHQgZXhjZXB0aW9uIHRyeWluZyB0byByZW1vdmUgaXRlbTogRXJyb3I6IFNFQ1VSSVRZX0VSUjog
RE9NIEV4Y2VwdGlvbiAxOAorRW5hYmxpbmcgbG9jYWxTdG9yYWdlIGFjY2Vzcy4KK3dpbmRvdy5s
b2NhbFN0b3JhZ2UgYWNjZXNzaWJsZSBpcyB0cnVlCitMZW5ndGggaXMgMQorVmFsdWUgZm9yIEZP
TyBpcyBCQVIKK0tleSBmb3IgaW5kZXggMCBpcyBGT08KIExlbmd0aCBpcyAwCiBWYWx1ZSBmb3Ig
Rk9PIGlzIG51bGwKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
cGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24uaHRtbCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNzaW9uLmh0bWwK
aW5kZXggNGE0ZjQ3YS4uYjMyM2MzMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24uaHRtbAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVy
bWlzc2lvbi5odG1sCkBAIC0zNywxNSArMzcsNDMgQEAgZnVuY3Rpb24gcnVuVGVzdCgpCiAgICAg
aWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHRlc3RSdW5uZXIuc2V0U3RvcmFnZUFsbG93ZWQpCiAg
ICAgICAgIHRlc3RSdW5uZXIuc2V0U3RvcmFnZUFsbG93ZWQoZmFsc2UpOwogCi0gICAgbG9nKCJM
ZW5ndGggaXMgIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOwotICAgIGxvZygiVmFsdWUgZm9yIEZP
TyBpcyAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oIkZPTyIpKTsKKyAgICB0cnkgeworICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIG5lZWRlZCB0byByZXNldCB0aGUgYWNjZXNzIGNo
ZWNrIGNhY2hlLgorICAgICAgICBsb2coIndpbmRvdy5sb2NhbFN0b3JhZ2UgYWNjZXNzaWJsZSBp
cyAiICsgISF3aW5kb3cubG9jYWxTdG9yYWdlKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
bG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgd2luZG93LmxvY2FsU3RvcmFnZTog
IiArIGUpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGxvZygiTGVuZ3RoIGlzICIgKyBs
b2NhbFN0b3JhZ2UubGVuZ3RoKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgbG9nKCJDYXVn
aHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgbGVuZ3RoOiAiICsgZSk7CisgICAgfQorCisgICAg
dHJ5IHsKKyAgICAgICAgbG9nKCJWYWx1ZSBmb3IgRk9PIGlzICIgKyBsb2NhbFN0b3JhZ2UuZ2V0
SXRlbSgiRk9PIikpOworICAgIH0gY2F0Y2goZSkgeworICAgICAgICBsb2coIkNhdWdodCBleGNl
cHRpb24gdHJ5aW5nIHRvIGdldCBpdGVtOiAiICsgZSk7CisgICAgfQogCiAgICAgdHJ5IHsKICAg
ICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oIkZPTyIsICJCQVoiKTsKICAgICB9IGNhdGNoKGUp
IHsKICAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRlbTog
IiArIGUpOwogICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJ
dGVtKCJGT08iKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0
aW9uIHRyeWluZyB0byByZW1vdmUgaXRlbTogIiArIGUpOworICAgIH0KKworICAgIGxvZygiRW5h
YmxpbmcgbG9jYWxTdG9yYWdlIGFjY2Vzcy4iKTsKKyAgICBpZiAod2luZG93LnRlc3RSdW5uZXIg
JiYgdGVzdFJ1bm5lci5zZXRTdG9yYWdlQWxsb3dlZCkKKyAgICAgICAgdGVzdFJ1bm5lci5zZXRT
dG9yYWdlQWxsb3dlZCh0cnVlKTsKICAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjYWxsIGlz
IG5lZWRlZCB0byByZXNldCB0aGUgYWNjZXNzIGNoZWNrIGNhY2hlLgorICAgIGxvZygid2luZG93
LmxvY2FsU3RvcmFnZSBhY2Nlc3NpYmxlIGlzICIgKyAhIXdpbmRvdy5sb2NhbFN0b3JhZ2UpOwog
ICAgIGxvZygiTGVuZ3RoIGlzICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3RoKTsKICAgICBsb2coIlZh
bHVlIGZvciBGT08gaXMgIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJGT08iKSk7CiAgICAgbG9n
KCJLZXkgZm9yIGluZGV4IDAgaXMgIiArIGxvY2FsU3RvcmFnZS5rZXkoMCkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1c3RvbS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcApp
bmRleCBjZDlmYjE2Li5hOGZlOWY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcApAQCAtNDAsMTYgKzQwLDI3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIHY4OjpIYW5kbGU8djg6OkFycmF5PiBWOFN0b3JhZ2U6Om5hbWVk
UHJvcGVydHlFbnVtZXJhdG9yKGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7CiAgICAg
U3RvcmFnZSogc3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0g
ICAgdW5zaWduZWQgaW50IGxlbmd0aCA9IHN0b3JhZ2UtPmxlbmd0aCgpOwotICAgIHY4OjpIYW5k
bGU8djg6OkFycmF5PiBwcm9wZXJ0aWVzID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFN0cmlu
ZyBrZXkgPSBzdG9yYWdlLT5rZXkoaSk7Ci0gICAgICAgIEFTU0VSVCgha2V5LmlzTnVsbCgpKTsK
LSAgICAgICAgU3RyaW5nIHZhbCA9IHN0b3JhZ2UtPmdldEl0ZW0oa2V5KTsKLSAgICAgICAgcHJv
cGVydGllcy0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHY4U3RyaW5nKGtl
eSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB1
bnNpZ25lZCBpbnQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKGVjKTsKKyAgICBpZiAoVU5MSUtF
TFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgeworICAgICAgICB2ODo6SGFuZGxlPHY4
OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIFN0
cmluZyBrZXkgPSBzdG9yYWdlLT5rZXkoaSwgZWMpOworICAgICAgICAgICAgQVNTRVJUKCFrZXku
aXNOdWxsKCkpOworICAgICAgICAgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgICAgICAg
ICBnb3RvIGZhaWw7CisgICAgICAgICAgICBTdHJpbmcgdmFsID0gc3RvcmFnZS0+Z2V0SXRlbShr
ZXksIGVjKTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgICAgICAgICAg
Z290byBmYWlsOworICAgICAgICAgICAgcHJvcGVydGllcy0+U2V0KHY4SW50ZWdlcihpLCBpbmZv
LkdldElzb2xhdGUoKSksIHY4U3RyaW5nKGtleSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gcHJvcGVydGllczsKICAgICB9Ci0KLSAgICByZXR1cm4gcHJv
cGVydGllczsKKyAgICBmYWlsOgorICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpBcnJheT4oKTsKIH0KIAogc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiB2OE5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC01NywxMCArNjgsMjUg
QEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2
ODo6U3RyaW5nPiB2OE5hbWUsIGNvbnN0IHYKICAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhTdG9y
YWdlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29y
ZVN0cmluZyh2OE5hbWUpOwogCi0gICAgaWYgKG5hbWUgIT0gImxlbmd0aCIgJiYgc3RvcmFnZS0+
Y29udGFpbnMobmFtZSkpCi0gICAgICAgIHJldHVybiB2OFN0cmluZyhzdG9yYWdlLT5nZXRJdGVt
KG5hbWUpLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0KKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBib29sIGZvdW5kOworICAgIGlmIChuYW1lID09ICJsZW5ndGgiKQorICAgICAgICBnb3Rv
IGVtcHR5OworICAgIGZvdW5kID0gc3RvcmFnZS0+Y29udGFpbnMobmFtZSwgZWMpOworICAgIGlm
IChVTkxJS0VMWShlYykpCisgICAgICAgIGdvdG8gZmFpbDsKKyAgICBpZiAoIWZvdW5kKQorICAg
ICAgICBnb3RvIGVtcHR5OworICAgIHsKKyAgICAgICAgU3RyaW5nIHJlc3VsdCA9IHN0b3JhZ2Ut
PmdldEl0ZW0obmFtZSwgZWMpOworICAgICAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICAg
ICAgZ290byBmYWlsOworICAgICAgICByZXR1cm4gdjhTdHJpbmcocmVzdWx0LCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgfQorICAgIGVtcHR5OgogICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOwor
ICAgIGZhaWw6CisgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRl
KCkpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhTdG9yYWdlOjppbmRleGVkUHJvcGVy
dHlHZXR0ZXIodWludDMyX3QgaW5kZXgsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBA
IC04NSw5ICsxMTEsMjAgQEAgdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4gVjhTdG9yYWdlOjpuYW1l
ZFByb3BlcnR5UXVlcnkodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmEKICAgICBTdG9yYWdlKiBz
dG9yYWdlID0gVjhTdG9yYWdlOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBTdHJpbmcg
bmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2OE5hbWUpOwogCi0gICAgaWYgKG5hbWUgIT0gImxlbmd0
aCIgJiYgc3RvcmFnZS0+Y29udGFpbnMobmFtZSkpCi0gICAgICAgIHJldHVybiB2OEludGVnZXIo
MCwgaW5mby5HZXRJc29sYXRlKCkpOwotCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
Ym9vbCBmb3VuZDsKKyAgICBpZiAobmFtZSA9PSAibGVuZ3RoIikKKyAgICAgICAgZ290byBlbXB0
eTsKKyAgICBmb3VuZCA9IHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUsIGVjKTsKKyAgICBpZiAoVU5M
SUtFTFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAg
Z290byBlbXB0eTsKKyAgICByZXR1cm4gdjhJbnRlZ2VyKDAsIGluZm8uR2V0SXNvbGF0ZSgpKTsK
KyAgICBmYWlsOgorICAgIC8vIE11c3QgZmFsbCB0aHJvdWdoIGhlcmUuCisgICAgc2V0RE9NRXhj
ZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgZW1wdHk6CiAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6OkludGVnZXI+KCk7CiB9CiAKQEAgLTEzMCwxMSArMTY3LDIwIEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPiBzdG9yYWdlRGVsZXRlcih2ODo6TG9jYWw8djg6OlN0
cmluZz4gdjhOYW1lLCBjb25zCiAgICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNvcmVTdHJpbmco
djhOYW1lKTsKICAgICAKLSAgICBpZiAoc3RvcmFnZS0+Y29udGFpbnMobmFtZSkpIHsKLSAgICAg
ICAgc3RvcmFnZS0+cmVtb3ZlSXRlbShuYW1lKTsKLSAgICAgICAgcmV0dXJuIHY4Qm9vbGVhbih0
cnVlLCBpbmZvLkdldElzb2xhdGUoKSk7Ci0gICAgfQotCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgYm9vbCBmb3VuZCA9IHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUsIGVjKTsKKyAgICBp
ZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgaWYgKCFmb3VuZCkKKyAg
ICAgICAgZ290byBlbXB0eTsKKyAgICBzdG9yYWdlLT5yZW1vdmVJdGVtKG5hbWUsIGVjKTsKKyAg
ICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICBnb3RvIGZhaWw7CisgICAgcmV0dXJuIHY4Qm9v
bGVhbih0cnVlLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgZmFpbDoKKyAgICAvLyBNdXN0IGZh
bGwgdGhyb3VnaCBoZXJlLgorICAgIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIGVtcHR5OgogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPigpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3Rv
cmFnZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQuY3BwCmluZGV4IDkwYTBhOWUuLmI5NTlhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwCkBAIC0xMTgs
MTEgKzExOCwxMyBAQCB2b2lkIEluc3BlY3RvckRPTVN0b3JhZ2VBZ2VudDo6Z2V0RE9NU3RvcmFn
ZUVudHJpZXMoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmCiAgICAgRnJhbWUqIGZyYW1lID0g
c3RvcmFnZVJlc291cmNlLT5mcmFtZSgpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgCisKKyAgICAvLyBGSVhNRTogRXhjZXB0aW9uIGNvZGUgaXMgYmVpbmcgaWdu
b3JlZCBoZXJlLgorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0b3JhZ2VBcmVhKiBz
dG9yYWdlQXJlYSA9IHN0b3JhZ2VSZXNvdXJjZS0+c3RvcmFnZUFyZWEoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZUFyZWEtPmxlbmd0aChmcmFtZSk7ICsraSkgewotICAg
ICAgICBTdHJpbmcgbmFtZShzdG9yYWdlQXJlYS0+a2V5KGksIGZyYW1lKSk7Ci0gICAgICAgIFN0
cmluZyB2YWx1ZShzdG9yYWdlQXJlYS0+Z2V0SXRlbShuYW1lLCBmcmFtZSkpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlQXJlYS0+bGVuZ3RoKGVjLCBmcmFtZSk7ICsraSkg
eworICAgICAgICBTdHJpbmcgbmFtZShzdG9yYWdlQXJlYS0+a2V5KGksIGVjLCBmcmFtZSkpOwor
ICAgICAgICBTdHJpbmcgdmFsdWUoc3RvcmFnZUFyZWEtPmdldEl0ZW0obmFtZSwgZWMsIGZyYW1l
KSk7CiAgICAgICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPiA+IGVudHJ5ID0g
VHlwZUJ1aWxkZXI6OkFycmF5PFN0cmluZz46OmNyZWF0ZSgpOwogICAgICAgICBlbnRyeS0+YWRk
SXRlbShuYW1lKTsKICAgICAgICAgZW50cnktPmFkZEl0ZW0odmFsdWUpOwpAQCAtMTQ1LDggKzE0
Nyw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpyZW1vdmVET01TdG9yYWdlSXRl
bShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYKIHsKICAgICBJbnNwZWN0b3JET01TdG9yYWdl
UmVzb3VyY2UqIHN0b3JhZ2VSZXNvdXJjZSA9IGdldERPTVN0b3JhZ2VSZXNvdXJjZUZvcklkKHN0
b3JhZ2VJZCk7CiAgICAgaWYgKHN0b3JhZ2VSZXNvdXJjZSkgewotICAgICAgICBzdG9yYWdlUmVz
b3VyY2UtPnN0b3JhZ2VBcmVhKCktPnJlbW92ZUl0ZW0oa2V5LCBzdG9yYWdlUmVzb3VyY2UtPmZy
YW1lKCkpOwotICAgICAgICAqc3VjY2VzcyA9IHRydWU7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZXhjZXB0aW9uID0gMDsKKyAgICAgICAgc3RvcmFnZVJlc291cmNlLT5zdG9yYWdlQXJlYSgpLT5y
ZW1vdmVJdGVtKGtleSwgZXhjZXB0aW9uLCBzdG9yYWdlUmVzb3VyY2UtPmZyYW1lKCkpOworICAg
ICAgICAqc3VjY2VzcyA9ICFleGNlcHRpb247CiAgICAgfSBlbHNlCiAgICAgICAgICpzdWNjZXNz
ID0gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKaW5kZXggNTIxMDdjOC4uMDZl
NjIwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcApAQCAtNzM1LDggKzczNSw2IEBAIFN0
b3JhZ2UqIERPTVdpbmRvdzo6c2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
CiB7CiAgICAgaWYgKCFpc0N1cnJlbnRseURpc3BsYXllZEluRnJhbWUoKSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgaWYgKG1fc2Vzc2lvblN0b3JhZ2UpCi0gICAgICAgIHJldHVybiBtX3Nlc3Np
b25TdG9yYWdlLmdldCgpOwogCiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1l
bnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQpAQCAtNzUxLDcgKzc0OSwxOSBAQCBTdG9yYWdlKiBE
T01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgIGlm
ICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAobV9zZXNzaW9uU3RvcmFnZSkg
eworICAgICAgICBpZiAoIW1fc2Vzc2lvblN0b3JhZ2UtPmFyZWEoKS0+Y2FuQWNjZXNzU3RvcmFn
ZShtX2ZyYW1lKSkgeworICAgICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZS5n
ZXQoKTsKKyAgICB9CisKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gcGFn
ZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2lu
KCkpOworICAgIGlmICghc3RvcmFnZUFyZWEtPmNhbkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsK
KyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAg
ICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURPTVN0b3JhZ2UocGFnZSwgc3RvcmFn
ZUFyZWEuZ2V0KCksIGZhbHNlLCBtX2ZyYW1lKTsKIAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBT
dG9yYWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVsZWFzZSgpKTsKQEAgLTc2Miw4
ICs3NzIsNiBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZShFeGNlcHRpb25Db2Rl
JiBlYykgY29uc3QKIHsKICAgICBpZiAoIWlzQ3VycmVudGx5RGlzcGxheWVkSW5GcmFtZSgpKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobV9sb2NhbFN0b3JhZ2UpCi0gICAgICAgIHJldHVy
biBtX2xvY2FsU3RvcmFnZS5nZXQoKTsKIAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHRoaXMt
PmRvY3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKQEAgLTc4MSw3ICs3ODksMTkgQEAgU3Rv
cmFnZSogRE9NV2luZG93Ojpsb2NhbFN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAg
ICAgaWYgKCFwYWdlLT5zZXR0aW5ncygpLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCkpCiAgICAgICAg
IHJldHVybiAwOwogCisgICAgaWYgKG1fbG9jYWxTdG9yYWdlKSB7CisgICAgICAgIGlmICghbV9s
b2NhbFN0b3JhZ2UtPmFyZWEoKS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgeworICAgICAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CisgICAgfQorCiAgICAgUmVm
UHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9IHBhZ2UtPmdyb3VwKCkubG9jYWxTdG9yYWdl
KCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBpZiAoIXN0
b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VD
VVJJVFlfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKHBhZ2UsIHN0b3JhZ2VBcmVhLmdldCgpLCB0cnVl
LCBtX2ZyYW1lKTsKIAogICAgIG1fbG9jYWxTdG9yYWdlID0gU3RvcmFnZTo6Y3JlYXRlKG1fZnJh
bWUsIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcApp
bmRleCA0NGQwYjI3Li43OTNhODM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAKQEAg
LTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNp
bmNsdWRlICJTZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIApAQCAt
NTYsNjEgKzU1LDQgQEAgU3RvcmFnZTo6flN0b3JhZ2UoKQogICAgICAgICBtX3N0b3JhZ2VBcmVh
LT5kZWNyZW1lbnRBY2Nlc3NDb3VudCgpOwogfQogCi11bnNpZ25lZCBTdG9yYWdlOjpsZW5ndGgo
KSBjb25zdAotewotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8IG1fc3Rv
cmFnZUFyZWEtPmRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKG1fZnJhbWUpKQotICAg
ICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5sZW5ndGgobV9mcmFt
ZSk7Ci19Ci0KLVN0cmluZyBTdG9yYWdlOjprZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkgfHwgbV9zdG9yYWdlQXJlYS0+ZGlz
YWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUobV9mcmFtZSkpCi0gICAgICAgIHJldHVybiBT
dHJpbmcoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5rZXkoaW5kZXgsIG1fZnJhbWUp
OwotfQotCi1TdHJpbmcgU3RvcmFnZTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSkgY29uc3QK
LXsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBtX3N0b3JhZ2VBcmVh
LT5kaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0
dXJuIFN0cmluZygpOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5LCBt
X2ZyYW1lKTsKLX0KLQotdm9pZCBTdG9yYWdlOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0g
ICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VBcmVhLT5z
ZXRJdGVtKGtleSwgdmFsdWUsIGVjLCBtX2ZyYW1lKTsKLX0KLQotdm9pZCBTdG9yYWdlOjpyZW1v
dmVJdGVtKGNvbnN0IFN0cmluZyYga2V5KQotewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShrZXksIG1fZnJhbWUpOwot
fQotCi12b2lkIFN0b3JhZ2U6OmNsZWFyKCkKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKG1fZnJhbWUpOwotfQotCi1ib29s
IFN0b3JhZ2U6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIGlmICgh
bV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8IG1fc3RvcmFnZUFyZWEtPmRpc2FibGVkQnlQ
cml2YXRlQnJvd3NpbmdJbkZyYW1lKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Y29udGFpbnMoa2V5LCBtX2ZyYW1lKTsKLX0KLQog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaAppbmRleCA1ZWFiZjBmLi5jMjQ5NmJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2UuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBTdG9yYWdlX2gK
IAogI2luY2x1ZGUgIkRPTVdpbmRvd1Byb3BlcnR5LmgiCisjaW5jbHVkZSAiU3RvcmFnZUFyZWEu
aCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtMzQsNyArMzUsNiBAQAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRnJhbWU7Ci0gICAgY2xhc3MgU3RvcmFnZUFyZWE7CiAgICAg
dHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogICAgIGNsYXNzIFN0b3JhZ2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxTdG9yYWdlPiwgcHVibGljIERPTVdpbmRvd1Byb3BlcnR5IHsKQEAgLTQyLDE0
ICs0MiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFN0b3JhZ2U+IGNyZWF0ZShGcmFtZSosIFBhc3NSZWZQdHI8U3RvcmFnZUFyZWE+KTsKICAgICAg
ICAgflN0b3JhZ2UoKTsKIAotICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKLSAgICAg
ICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBnZXRJ
dGVtKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotICAgICAgICB2b2lkIHNldEl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICAgICAg
dm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYpOwotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0K
LSAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3Q7CisgICAgICAg
IHVuc2lnbmVkIGxlbmd0aChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QgeyByZXR1cm4gbV9zdG9y
YWdlQXJlYS0+bGVuZ3RoKGVjLCBtX2ZyYW1lKTsgfQorICAgICAgICBTdHJpbmcga2V5KHVuc2ln
bmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQXJl
YS0+a2V5KGluZGV4LCBlYywgbV9mcmFtZSk7IH0KKyAgICAgICAgU3RyaW5nIGdldEl0ZW0oY29u
c3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdCB7IHJldHVybiBtX3N0b3Jh
Z2VBcmVhLT5nZXRJdGVtKGtleSwgZWMsIG1fZnJhbWUpOyB9CisgICAgICAgIHZvaWQgc2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpIHsgbV9zdG9yYWdlQXJlYS0+c2V0SXRlbShrZXksIHZhbHVlLCBlYywgbV9mcmFtZSk7IH0K
KyAgICAgICAgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykgeyBtX3N0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgZWMsIG1fZnJhbWUpOyB9Cisg
ICAgICAgIHZvaWQgY2xlYXIoRXhjZXB0aW9uQ29kZSYgZWMpIHsgbV9zdG9yYWdlQXJlYS0+Y2xl
YXIoZWMsIG1fZnJhbWUpOyB9CisgICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VBcmVhLT5jb250
YWlucyhrZXksIGVjLCBtX2ZyYW1lKTsgfQogCiAgICAgICAgIFN0b3JhZ2VBcmVhKiBhcmVhKCkg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQXJlYS5nZXQoKTsgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlLmlkbAppbmRleCAxZDViMzI3Li5kZTc0YWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZS5pZGwKQEAgLTMyLDEzICszMiwxNyBAQCBtb2R1bGUgc3RvcmFnZSB7CiAgICAgICAgIEN1
c3RvbUVudW1lcmF0ZVByb3BlcnR5LAogICAgICAgICBDdXN0b21OYW1lZFNldHRlciwKICAgICBd
IFN0b3JhZ2UgewotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW05vdEVudW1lcmFibGVdIHVu
c2lnbmVkIGxvbmcgbGVuZ3RoOwotICAgICAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJpbmcga2V5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgp
OwotICAgICAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxs
XSBET01TdHJpbmcgZ2V0SXRlbShpbiBET01TdHJpbmcga2V5KTsKKyAgICAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFtOb3RFbnVtZXJhYmxlXSB1bnNpZ25lZCBsb25nIGxlbmd0aCBnZXR0ZXIgcmFp
c2VzKERPTUV4Y2VwdGlvbik7CisgICAgICAgIFtOb3RFbnVtZXJhYmxlLCBUcmVhdFJldHVybmVk
TnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBrZXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCkK
KyAgICAgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOworICAgICAgICBbTm90RW51bWVyYWJs
ZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01TdHJpbmcgZ2V0SXRlbShpbiBE
T01TdHJpbmcga2V5KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAgICAgICAg
IFtOb3RFbnVtZXJhYmxlXSB2b2lkIHNldEl0ZW0oaW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NU3Ry
aW5nIGRhdGEpIAogICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAgICAgIFtO
b3RFbnVtZXJhYmxlXSB2b2lkIHJlbW92ZUl0ZW0oaW4gRE9NU3RyaW5nIGtleSk7Ci0gICAgICAg
IFtOb3RFbnVtZXJhYmxlXSB2b2lkIGNsZWFyKCk7CisgICAgICAgIFtOb3RFbnVtZXJhYmxlXSB2
b2lkIHJlbW92ZUl0ZW0oaW4gRE9NU3RyaW5nIGtleSkKKyAgICAgICAgICAgIHJhaXNlcyhET01F
eGNlcHRpb24pOworICAgICAgICBbTm90RW51bWVyYWJsZV0gdm9pZCBjbGVhcigpCisgICAgICAg
ICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhLmgKaW5kZXggZjY5ZDdiNS4uOTcwMzRjOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU3RvcmFnZUFyZWEuaApAQCAtNDYsMTUgKzQ2LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3JhZ2UgQVBJCiAgICAgICAgIC8vIEZJWE1F
OiBXZSBzaG91bGQgcGFzcyBEb2N1bWVudCBpbnN0ZWFkIG9mIEZyYW1lLiBBbHNvLCB0aGF0IHBh
cmFtZXRlciBzaG91bGQgZ28gZmlyc3QuCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBr
ZXkodW5zaWduZWQgaW5kZXgsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOwotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNl
RnJhbWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRXhjZXB0
aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFs
IFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNl
RnJhbWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3Qg
U3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUq
IHNvdXJjZUZyYW1lKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291
cmNlRnJhbWUpID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB2
b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSog
c291cmNlRnJhbWUpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKEV4Y2VwdGlvbkNv
ZGUmLCBGcmFtZSogc291cmNlRnJhbWUpID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1l
KSBjb25zdCA9IDA7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGRpc2FibGVkQnlQcml2YXRlQnJv
d3NpbmdJbkZyYW1lKGNvbnN0IEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAwOworICAgICAg
ICB2aXJ0dWFsIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFtZSopIGNvbnN0ID0gMDsKIAogICAg
ICAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hlKCkgY29uc3QgPSAwOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5jcHAKaW5kZXggMzdjNGY1
OS4uNjc5ODQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNw
cApAQCAtMTE1LDI0ICsxMTUsMzYgQEAgYm9vbCBTdG9yYWdlQXJlYUltcGw6OmRpc2FibGVkQnlQ
cml2YXRlQnJvd3NpbmdJbkZyYW1lKGNvbnN0IEZyYW1lKiBmcmFtZSkgY29uc3QKICAgICByZXR1
cm4gIVNjaGVtZVJlZ2lzdHJ5OjphbGxvd3NMb2NhbFN0b3JhZ2VBY2Nlc3NJblByaXZhdGVCcm93
c2luZyhmcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSk7CiB9
CiAKLXVuc2lnbmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKEZyYW1lKikgY29uc3QKK3Vuc2ln
bmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVuZ3RoKEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJh
bWUpIGNvbnN0CiB7CisgICAgZWMgPSAwOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdl
KCkgfHwgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoZnJhbWUpKQorICAgICAgICBy
ZXR1cm4gMDsKKwogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUoKTsKIAogICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQog
Ci1TdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgsIEZyYW1lKikgY29u
c3QKK1N0cmluZyBTdG9yYWdlQXJlYUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMsIEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKKyAgICBlYyA9IDA7CisgICAgaWYgKCFm
cmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSB8fCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFt
ZShmcmFtZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEFTU0VSVCghbV9pc1No
dXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIAogICAgIHJldHVybiBt
X3N0b3JhZ2VNYXAtPmtleShpbmRleCk7CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYUltcGw6Omdl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKikgY29uc3QKK1N0cmluZyBTdG9yYWdlQXJl
YUltcGw6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFt
ZSogZnJhbWUpIGNvbnN0CiB7CisgICAgZWMgPSAwOworICAgIGlmICghZnJhbWUgfHwgIWZyYW1l
LT5wYWdlKCkgfHwgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoZnJhbWUpKQorICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKQEAgLTE0MSw2ICsxNTMsMTAgQEAgU3RyaW5n
IFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqKSBjb25z
dAogCiB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsKKyAg
ICBlYyA9IDA7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJU
KCFtX2lzU2h1dGRvd24pOwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAgIGJsb2Nr
VW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTY5LDggKzE4NSwxMiBAQCB2b2lkIFN0b3JhZ2VB
cmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwg
RXhjZXB0aW9uQwogICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGtleSwgb2xk
VmFsdWUsIHZhbHVlLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFt
ZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBGcmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25z
dCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBl
YyA9IDA7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgQVNTRVJUKCFt
X2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogCkBAIC0xOTAs
OCArMjEwLDEyIEBAIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogZnJhbWUpCiAgICAgU3RvcmFnZUV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0
Y2goa2V5LCBvbGRWYWx1ZSwgU3RyaW5nKCksIG1fc3RvcmFnZVR5cGUsIG1fc2VjdXJpdHlPcmln
aW4uZ2V0KCksIGZyYW1lKTsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1l
KiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIGZyYW1lKQogeworICAgIGVjID0gMDsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm47CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiAKQEAgLTIwOSw4ICsyMzMsMTIgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6
OmNsZWFyKEZyYW1lKiBmcmFtZSkKICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRj
aChTdHJpbmcoKSwgU3RyaW5nKCksIFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5
T3JpZ2luLmdldCgpLCBmcmFtZSk7CiB9CiAKLWJvb2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlu
cyhjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqKSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYUltcGw6
OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZy
YW1lKSBjb25zdAogeworICAgIGVjID0gMDsKKyAgICBpZiAoIWZyYW1lIHx8ICFmcmFtZS0+cGFn
ZSgpIHx8IGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGZyYW1lKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50
aWxJbXBvcnRDb21wbGV0ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUlt
cGwuaAppbmRleCAxZjJiN2UwLi44ZTdiMjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3Rv
cmFnZUFyZWFJbXBsLmgKQEAgLTQ0LDE1ICs0NCwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhSW1wbCgpOwogCiAgICAgICAgIC8vIFRoZSBIVE1M
NSBET00gU3RvcmFnZSBBUEkgKGFuZCBjb250YWlucykKLSAgICAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTdHJp
bmcga2V5KHVuc2lnbmVkIGluZGV4LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwotICAgICAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNl
RnJhbWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aChFeGNlcHRpb25D
b2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcg
a2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBj
b25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwg
RXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAgICB2aXJ0
dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5
LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2
b2lkIGNsZWFyKEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpOworICAgICAgICB2
aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmLCBG
cmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxl
ZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0
OworICAgICAgICBib29sIGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGNvbnN0IEZy
YW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5BY2Nlc3NT
dG9yYWdlKEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgeyByZXR1cm4gc291cmNlRnJhbWUgJiYg
c291cmNlRnJhbWUtPnBhZ2UoKTsgfQogCiAgICAgICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUJ5
dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9TdG9yYWdlQXJlYVByb3h5LmNwcAppbmRleCBlZmEwYzkwLi44Njk3NjY3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcApAQCAtNTMsNiAr
NTMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdlQXJl
YVByb3h5KFdlYktpdDo6V2ViU3RvcmFnZUFyZWEqIHN0b3JhZ2VBcmVhLCBTdG9yYWdlVHlwZSBz
dG9yYWdlVHlwZSkKICAgICA6IG1fc3RvcmFnZUFyZWEoYWRvcHRQdHIoc3RvcmFnZUFyZWEpKQog
ICAgICwgbV9zdG9yYWdlVHlwZShzdG9yYWdlVHlwZSkKKyAgICAsIG1fY2FuQWNjZXNzU3RvcmFn
ZUNhY2hlZFJlc3VsdChmYWxzZSkKKyAgICAsIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZEZyYW1l
KDApCiB7CiB9CiAKQEAgLTYwLDY0ICs2Miw4OCBAQCBTdG9yYWdlQXJlYVByb3h5Ojp+U3RvcmFn
ZUFyZWFQcm94eSgpCiB7CiB9CiAKLXVuc2lnbmVkIFN0b3JhZ2VBcmVhUHJveHk6Omxlbmd0aChG
cmFtZSogZnJhbWUpIGNvbnN0Cit1bnNpZ25lZCBTdG9yYWdlQXJlYVByb3h5OjpsZW5ndGgoRXhj
ZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKLSAgICBpZiAoY2FuQWNjZXNz
U3RvcmFnZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5sZW5ndGgoKTsK
LSAgICByZXR1cm4gMDsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUs
IHRydWUpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQorICAgIGVjID0gMDsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+bGVuZ3RoKCk7
CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYVByb3h5OjprZXkodW5zaWduZWQgaW5kZXgsIEZyYW1l
KiBmcmFtZSkgY29uc3QKK1N0cmluZyBTdG9yYWdlQXJlYVByb3h5OjprZXkodW5zaWduZWQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpIGNvbnN0CiB7Ci0gICAgaWYgKGNh
bkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKQotICAgICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+a2V5
KGluZGV4KTsKLSAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKFVOTElLRUxZKCFjYW5BY2Nl
c3NTdG9yYWdlKGZyYW1lLCB0cnVlKSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Cisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgZWMgPSAwOworICAgIHJldHVybiBt
X3N0b3JhZ2VBcmVhLT5rZXkoaW5kZXgpOwogfQogCi1TdHJpbmcgU3RvcmFnZUFyZWFQcm94eTo6
Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKSBjb25zdAorU3RyaW5nIFN0
b3JhZ2VBcmVhUHJveHk6OmdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjLCBGcmFtZSogZnJhbWUpIGNvbnN0CiB7Ci0gICAgaWYgKGNhbkFjY2Vzc1N0b3JhZ2UoZnJh
bWUpKQotICAgICAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Z2V0SXRlbShrZXkpOwotICAgIHJl
dHVybiBTdHJpbmcoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUs
IHRydWUpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworICAgIH0KKyAgICBlYyA9IDA7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdl
dEl0ZW0oa2V5KTsKIH0KIAogdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpzZXRJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUq
IGZyYW1lKQogewotICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpCi0gICAgICAgIGVj
ID0gUVVPVEFfRVhDRUVERURfRVJSOwotICAgIGVsc2UgewotICAgICAgICBXZWJLaXQ6OldlYlN0
b3JhZ2VBcmVhOjpSZXN1bHQgcmVzdWx0ID0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0
T0s7Ci0gICAgICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgZnJhbWUtPmRv
Y3VtZW50KCktPnVybCgpLCByZXN1bHQpOwotICAgICAgICBlYyA9IChyZXN1bHQgPT0gV2ViS2l0
OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0T0spID8gMCA6IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUsIHRydWUpKSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBXZWJLaXQ6
OldlYlN0b3JhZ2VBcmVhOjpSZXN1bHQgcmVzdWx0ID0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6
UmVzdWx0T0s7CisgICAgbV9zdG9yYWdlQXJlYS0+c2V0SXRlbShrZXksIHZhbHVlLCBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCksIHJlc3VsdCk7CisgICAgZWMgPSAocmVzdWx0ID09IFdlYktpdDo6
V2ViU3RvcmFnZUFyZWE6OlJlc3VsdE9LKSA/IDAgOiBRVU9UQV9FWENFRURFRF9FUlI7CiB9CiAK
LXZvaWQgU3RvcmFnZUFyZWFQcm94eTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJh
bWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYVByb3h5OjpyZW1vdmVJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghY2Fu
QWNjZXNzU3RvcmFnZShmcmFtZSkpCisgICAgaWYgKFVOTElLRUxZKCFjYW5BY2Nlc3NTdG9yYWdl
KGZyYW1lLCB0cnVlKSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgZWMgPSAwOwogICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0o
a2V5LCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkpOwogfQogCi12b2lkIFN0b3JhZ2VBcmVhUHJv
eHk6OmNsZWFyKEZyYW1lKiBmcmFtZSkKK3ZvaWQgU3RvcmFnZUFyZWFQcm94eTo6Y2xlYXIoRXhj
ZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIWNhbkFjY2Vzc1N0b3Jh
Z2UoZnJhbWUpKQorICAgIGlmIChVTkxJS0VMWSghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSwgdHJ1
ZSkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGVjID0gMDsKICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZS0+ZG9jdW1lbnQo
KS0+dXJsKCkpOwogfQogCi1ib29sIFN0b3JhZ2VBcmVhUHJveHk6OmNvbnRhaW5zKGNvbnN0IFN0
cmluZyYga2V5LCBGcmFtZSogZnJhbWUpIGNvbnN0Citib29sIFN0b3JhZ2VBcmVhUHJveHk6OmNv
bnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1l
KSBjb25zdAogewotICAgIHJldHVybiAhZ2V0SXRlbShrZXksIGZyYW1lKS5pc051bGwoKTsKKyAg
ICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUsIHRydWUpKSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gIWdldEl0ZW0oa2V5LCBlYywgZnJhbWUpLmlzTnVsbCgpOwogfQogCi1ib29sIFN0b3Jh
Z2VBcmVhUHJveHk6OmNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIGZyYW1lKSBjb25zdAorYm9vbCBT
dG9yYWdlQXJlYVByb3h5OjpjYW5BY2Nlc3NTdG9yYWdlKEZyYW1lKiBmcmFtZSwgYm9vbCBjaGVj
a0NhY2hlKSBjb25zdAogewotICAgIGlmICghZnJhbWUtPnBhZ2UoKSkKKyAgICBpZiAoVU5MSUtF
TFkoIWZyYW1lIHx8ICFmcmFtZS0+cGFnZSgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChMSUtFTFkoY2hlY2tDYWNoZSAmJiBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRGcmFtZSA9
PSBmcmFtZSkpCisgICAgICAgIHJldHVybiBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRSZXN1bHQ7
CiAgICAgV2ViS2l0OjpXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViS2l0OjpXZWJGcmFtZUlt
cGw6OmZyb21GcmFtZShmcmFtZSk7CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlldyA9
IHdlYkZyYW1lLT52aWV3SW1wbCgpOwotICAgIHJldHVybiAhd2ViVmlldy0+cGVybWlzc2lvbkNs
aWVudCgpIHx8IHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dTdG9yYWdlKHdlYkZy
YW1lLCBtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSk7CisgICAgYm9vbCByZXN1bHQgPSAh
d2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpIHx8IHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQo
KS0+YWxsb3dTdG9yYWdlKHdlYkZyYW1lLCBtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSk7
CisgICAgbV9jYW5BY2Nlc3NTdG9yYWdlQ2FjaGVkRnJhbWUgPSBmcmFtZTsKKyAgICBtX2NhbkFj
Y2Vzc1N0b3JhZ2VDYWNoZWRSZXN1bHQgPSByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogc2l6ZV90IFN0b3JhZ2VBcmVhUHJveHk6Om1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25z
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94
eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5oCmluZGV4
IGNhZTM1OTMuLjFkYjZiNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9y
YWdlQXJlYVByb3h5LmgKQEAgLTQ4LDE1ICs0OCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+
U3RvcmFnZUFyZWFQcm94eSgpOwogCiAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQot
ICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBGcmFtZSogc291cmNlRnJhbWUp
IGNvbnN0OwotICAgIHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZy
YW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRXhj
ZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJp
bmcga2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1l
KSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBF
eGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0
ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCB2
b2lkIGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5z
KGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJh
bWUqIHNvdXJjZUZyYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoRXhjZXB0aW9uQ29kZSYs
IEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0
cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBG
cmFtZSopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhbkFjY2Vz
c1N0b3JhZ2UoRnJhbWUqIGZyYW1lKSBjb25zdCB7IHJldHVybiBjYW5BY2Nlc3NTdG9yYWdlKGZy
YW1lLCBmYWxzZSk7IH0KIAogICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUJ5dGVzVXNlZEJ5Q2Fj
aGUoKSBjb25zdDsKIApAQCAtNjksMTIgKzY5LDEzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFdl
YktpdDo6V2ViU3RvcmFnZUFyZWEqIHNvdXJjZUFyZWFJbnN0YW5jZSwgYm9vbCBvcmlnaW5hdGVk
SW5Qcm9jZXNzKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUq
KSBjb25zdDsKLQorICAgIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShGcmFtZSosIGJvb2wgY2hlY2tD
YWNoZSkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNFdmVudFNvdXJjZShTdG9yYWdlKiwgV2Vi
S2l0OjpXZWJTdG9yYWdlQXJlYSogc291cmNlQXJlYUluc3RhbmNlKTsKIAogICAgIE93blB0cjxX
ZWJLaXQ6OldlYlN0b3JhZ2VBcmVhPiBtX3N0b3JhZ2VBcmVhOwogICAgIFN0b3JhZ2VUeXBlIG1f
c3RvcmFnZVR5cGU7CisgICAgbXV0YWJsZSBib29sIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZFJl
c3VsdDsKKyAgICBtdXRhYmxlIEZyYW1lKiBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRGcmFtZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169176</attachid>
            <date>2012-10-17 06:59:32 -0700</date>
            <delta_ts>2012-10-22 05:30:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63257-20121017155818.patch</filename>
            <type>text/plain</type>
            <size>40421</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNTYyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTlhMGFhNTBiNjE1YzA2
NzRmMGI2MzhhOTE5ZjYyNDE4ZmQzMDdiYi4uZGUwODdmY2IzMDQ0NDU4ZGUzNWQzMGQ4Yzg5Yjkw
MmM3NTQwMzM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEwLTE3ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFdoZW4gYmxvY2tpbmcgbG9j
YWxTdG9yYWdlLCBGaXJlZm94IHRocm93cyBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBvbiBhY2Nlc3Ms
IGFuZCBtYXliZSBzbyBzaG91bGQgd2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhyb3cgc2VjdXJpdHkgZXhjZXB0aW9uIHdoZW4gbG9jYWwgc3RvcmFn
ZSBpcyBhY2Nlc3NlZAorICAgICAgICB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdG8gbWF0
Y2ggZmlyZWZveC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIG1vZGlm
aWVkLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3RvcmFnZTo6bmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3Jh
Z2U6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERPTUV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFN0b3JhZ2U6Om5hbWVkUHJvcGVydHlFbnVt
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5UXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
c3RvcmFnZURlbGV0ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpn
ZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2UuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpsZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmdldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6c2V0SXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2UuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAg
ICAgICAgKFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNhbkFjY2Vzc1N0b3JhZ2Up
OiBDaGVja3Mgd2hldGhlciBhY2Nlc3MgdG8gc3RvcmFnZSBpcyBhIHNlY3VyaXR5IHZpb2xhdGlv
bi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBs
OjpkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYUltcGw6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUlt
cGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1w
bDo6Y29udGFpbnMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmg6CisgICAg
ICAgIChTdG9yYWdlQXJlYUltcGwpOgorCiAyMDEyLTEwLTE3ICBHYWJvciBSYXBjc2FueWkgIDxy
Z2Fib3JAd2Via2l0Lm9yZz4KIAogICAgICAgICBORU9OIGludHJpbnNpY3MgR2F1c3MgZmlsdGVy
IGRvZXMgbm90IHdvcmsgcHJvcGVybHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMzkx
NjM2ZjAxYzMyYmY0MjU1YTNkNGJhN2I4YTAzOGI5NWMzMTU1OC4uNGI4MGU2MWY2NjUxMzJkMWEz
ZWYyODllNDMzYTAyY2U4MGM2YzMzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNiBAQAorMjAxMi0xMC0xNyAgRGFuIENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4K
KworICAgICAgICBXaGVuIGJsb2NraW5nIGxvY2FsU3RvcmFnZSwgRmlyZWZveCB0aHJvd3MgYSBz
ZWN1cml0eSBleGNlcHRpb24gb24gYWNjZXNzLCBhbmQgbWF5YmUgc28gc2hvdWxkIHdlCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzI1NworCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzZWN1cml0eSBj
aGVjayBhbmQgc2VjdXJpdHkgY2hlY2sgY2FjaGUuCisKKyAgICAgICAgKiBzcmMvU3RvcmFnZUFy
ZWFQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdl
QXJlYVByb3h5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6Omxlbmd0aCk6
CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjprZXkpOgorICAgICAgICAoV2Vi
Q29yZTo6U3RvcmFnZUFyZWFQcm94eTo6Z2V0SXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVByb3h5OjpzZXRJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJv
eHk6OnJlbW92ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6Y2xl
YXIpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6Y29udGFpbnMpOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6Y2FuQWNjZXNzU3RvcmFnZSk6CisgICAg
ICAgICogc3JjL1N0b3JhZ2VBcmVhUHJveHkuaDoKKyAgICAgICAgKFN0b3JhZ2VBcmVhUHJveHkp
OgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6Y2FuQWNjZXNzU3RvcmFnZSk6
CisKIDIwMTItMTAtMTYgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgW1NoYWRvdyBET01dW1Y4XSBXZWJDb3JlOjpWOERPTVdpbmRvdzo6aW5zdGFsbFBlckNv
bnRleHRQcm9wZXJ0aWVzKCkgaXMgc2xvdyB3aGVuIHNoYWRvd0RPTUVuYWJsZWQgZmxhZyBpcyBv
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCmlu
ZGV4IDI0NDQ2ZDQzYWUwZTFkZTE0MGU5NDU5NDAyM2E4YTg2YmZhYTY5NzAuLmU0ZmU4NTM4ZTE3
NmI0NTdiNjExYmU1YTdjMmYxZWJkODk2NTc5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcApAQCAtMzQsOSArMzQsMTIgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTU3RvcmFnZTo6Y2Fu
R2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFN0b3JhZ2UqIGltcGwsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCitib29sIEpTU3RvcmFnZTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSogZXhlYywgU3RvcmFnZSogaW1wbCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gaW1wbC0+Y29udGFpbnMocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCByZXN1bHQgPSBpbXBsLT5j
b250YWlucyhwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBlYyk7CisgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVl
IEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00Nyw3ICs1MCwxMCBAQCBKU1ZhbHVlIEpT
U3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFBy
b3BlcnR5TmFtZSBwcgogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1
cm4gYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgCi0gICAg
cmV0dXJuIGpzU3RyaW5nT3JOdWxsKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0SXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChleGVjLCB0aGlzT2JqLT5p
bXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgZWMpKTsK
KyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTY0LDcgKzcwLDkgQEAgYm9vbCBK
U1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGUKICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgdGhpc09iamVjdC0+bV9pbXBsLT5yZW1vdmVJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIHRoaXNPYmplY3QtPm1faW1wbC0+cmVtb3ZlSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzYsOSArODQsMTcgQEAgYm9vbCBKU1N0b3JhZ2U6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHIKIHZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3RvcmFnZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1N0b3JhZ2UqPihvYmplY3QpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3Qt
Pm1faW1wbC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIHRoaXNPYmpl
Y3QtPm1faW1wbC0+a2V5KGkpKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bV9pbXBsLT5sZW5ndGgoZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgdGhpc09iamVjdC0+
bV9pbXBsLT5rZXkoaSwgZWMpKSk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCmluZGV4IGNkOWZiMTYz
MjM4ZjYwNTZhMDRiMzk1NGFlYTlkOWM2NTc5NzUwYzcuLmVlMmU2ZDA3MDQ5ZjQyNDBjZDIzNTM3
NzMzOTgwOTBhNjNkMDJmZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCkBAIC0zNiwxOSArMzYsMzIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTxjbGFzcyBUPgorc3RhdGljIHY4OjpIYW5kbGU8
VD4gc2V0RE9NRXhjZXB0aW9uKEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCit7CisgICAgc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8VD4oKTsKK30KKwogLy8gR2V0IGFuIGFycmF5IGNvbnRh
aW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJvcGVydGllcyBpbiBhIGNvbGxlY3Rpb24uCiB2
ODo6SGFuZGxlPHY4OjpBcnJheT4gVjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5RW51bWVyYXRvcihj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBW
OFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHVuc2lnbmVkIGludCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoZWMpOworICAgIGlmIChVTkxJS0VMWShl
YykpCisgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb248djg6OkFycmF5PihlYywgaW5mbyk7
CiAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhs
ZW5ndGgpOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2UtPmtleShpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IHN0b3JhZ2Ut
PmtleShpLCBlYyk7CisgICAgICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgICAgICByZXR1
cm4gc2V0RE9NRXhjZXB0aW9uPHY4OjpBcnJheT4oZWMsIGluZm8pOwogICAgICAgICBBU1NFUlQo
IWtleS5pc051bGwoKSk7Ci0gICAgICAgIFN0cmluZyB2YWwgPSBzdG9yYWdlLT5nZXRJdGVtKGtl
eSk7CisgICAgICAgIFN0cmluZyB2YWwgPSBzdG9yYWdlLT5nZXRJdGVtKGtleSwgZWMpOworICAg
ICAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlv
bjx2ODo6QXJyYXk+KGVjLCBpbmZvKTsKICAgICAgICAgcHJvcGVydGllcy0+U2V0KHY4SW50ZWdl
cihpLCBpbmZvLkdldElzb2xhdGUoKSksIHY4U3RyaW5nKGtleSwgaW5mby5HZXRJc29sYXRlKCkp
KTsKICAgICB9Ci0KICAgICByZXR1cm4gcHJvcGVydGllczsKIH0KIApAQCAtNTcsMTAgKzcwLDE4
IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc3RvcmFnZUdldHRlcih2ODo6TG9jYWw8
djg6OlN0cmluZz4gdjhOYW1lLCBjb25zdCB2CiAgICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4U3Rv
cmFnZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNv
cmVTdHJpbmcodjhOYW1lKTsKIAotICAgIGlmIChuYW1lICE9ICJsZW5ndGgiICYmIHN0b3JhZ2Ut
PmNvbnRhaW5zKG5hbWUpKQotICAgICAgICByZXR1cm4gdjhTdHJpbmcoc3RvcmFnZS0+Z2V0SXRl
bShuYW1lKSwgaW5mby5HZXRJc29sYXRlKCkpOwotCi0gICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7
CisgICAgaWYgKG5hbWUgPT0gImxlbmd0aCIpCisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgp
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGJvb2wgZm91bmQgPSBzdG9yYWdlLT5j
b250YWlucyhuYW1lLCBlYyk7CisgICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgcmV0dXJu
IHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOworICAgIGlmICghZm91bmQp
CisgICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIFN0cmluZyByZXN1bHQgPSBzdG9y
YWdlLT5nZXRJdGVtKG5hbWUsIGVjKTsKKyAgICBpZiAoVU5MSUtFTFkoZWMpKQorICAgICAgICBy
ZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJu
IHY4U3RyaW5nKHJlc3VsdCwgaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhTdG9yYWdlOjppbmRleGVkUHJvcGVydHlHZXR0ZXIodWludDMyX3QgaW5kZXgs
IGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC04NSwxMCArMTA2LDE1IEBAIHY4OjpI
YW5kbGU8djg6OkludGVnZXI+IFY4U3RvcmFnZTo6bmFtZWRQcm9wZXJ0eVF1ZXJ5KHY4OjpMb2Nh
bDx2ODo6U3RyaW5nPiB2OE5hCiAgICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9O
YXRpdmUoaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNvcmVTdHJpbmco
djhOYW1lKTsKIAotICAgIGlmIChuYW1lICE9ICJsZW5ndGgiICYmIHN0b3JhZ2UtPmNvbnRhaW5z
KG5hbWUpKQotICAgICAgICByZXR1cm4gdjhJbnRlZ2VyKDAsIGluZm8uR2V0SXNvbGF0ZSgpKTsK
LQotICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPigpOworICAgIGlmIChuYW1lID09
ICJsZW5ndGgiKQorICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4oKTsKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBib29sIGZvdW5kID0gc3RvcmFnZS0+Y29udGFp
bnMobmFtZSwgZWMpOworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIHJldHVybiBzZXRE
T01FeGNlcHRpb248djg6OkludGVnZXI+KGVjLCBpbmZvKTsKKyAgICBpZiAoIWZvdW5kKQorICAg
ICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4oKTsKKyAgICByZXR1cm4gdjhJbnRl
Z2VyKDAsIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBzdG9yYWdlU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IHY4VmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0x
MzAsMTIgKzE1NiwxNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gc3RvcmFnZURl
bGV0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmFtZSwgY29ucwogICAgIFN0b3JhZ2UqIHN0
b3JhZ2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBu
YW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7CiAgICAgCi0gICAgaWYgKHN0b3JhZ2UtPmNv
bnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgIHN0b3JhZ2UtPnJlbW92ZUl0ZW0obmFtZSk7Ci0gICAg
ICAgIHJldHVybiB2OEJvb2xlYW4odHJ1ZSwgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIH0KLQot
ICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPigpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIGJvb2wgZm91bmQgPSBzdG9yYWdlLT5jb250YWlucyhuYW1lLCBlYyk7Cisg
ICAgaWYgKFVOTElLRUxZKGVjKSkKKyAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbjx2ODo6
Qm9vbGVhbj4oZWMsIGluZm8pOworICAgIGlmICghZm91bmQpCisgICAgICAgIHJldHVybiB2ODo6
SGFuZGxlPHY4OjpCb29sZWFuPigpOworICAgIHN0b3JhZ2UtPnJlbW92ZUl0ZW0obmFtZSwgZWMp
OworICAgIGlmIChVTkxJS0VMWShlYykpCisgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb248
djg6OkJvb2xlYW4+KGVjLCBpbmZvKTsKKyAgICByZXR1cm4gdjhCb29sZWFuKHRydWUsIGluZm8u
R2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gVjhTdG9yYWdlOjpp
bmRleGVkUHJvcGVydHlEZWxldGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTVN0b3JhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NU3RvcmFnZUFnZW50LmNwcAppbmRleCBlYmRmMWYzOTU4MDA5NWE1ZjM2YWQ5ZDIzZmFjZWZh
MDJkMGJiOTNkLi41ZDMwNTg5MGM2NzI4MDkwYzU3NGM2ZTYzZjE0MDE2MTUyN2YwOTU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NU3RvcmFnZUFn
ZW50LmNwcApAQCAtMTIwLDExICsxMjAsMTcgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdl
bnQ6OmdldERPTVN0b3JhZ2VFbnRyaWVzKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJgogICAg
IEZyYW1lKiBmcmFtZSA9IHN0b3JhZ2VSZXNvdXJjZS0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1l
KQogICAgICAgICByZXR1cm47Ci0gICAgICAgIAorCisgICAgLy8gRklYTUU6IEV4Y2VwdGlvbnMg
YXJlIG5vdCByZXBvcnRlZCBoZXJlLgorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0
b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSA9IHN0b3JhZ2VSZXNvdXJjZS0+c3RvcmFnZUFyZWEoKTsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RvcmFnZUFyZWEtPmxlbmd0aChmcmFtZSk7
ICsraSkgewotICAgICAgICBTdHJpbmcgbmFtZShzdG9yYWdlQXJlYS0+a2V5KGksIGZyYW1lKSk7
Ci0gICAgICAgIFN0cmluZyB2YWx1ZShzdG9yYWdlQXJlYS0+Z2V0SXRlbShuYW1lLCBmcmFtZSkp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9yYWdlQXJlYS0+bGVuZ3RoKGVjLCBm
cmFtZSk7ICsraSkgeworICAgICAgICBTdHJpbmcgbmFtZShzdG9yYWdlQXJlYS0+a2V5KGksIGVj
LCBmcmFtZSkpOworICAgICAgICBpZiAoZWMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFN0cmluZyB2YWx1ZShzdG9yYWdlQXJlYS0+Z2V0SXRlbShuYW1lLCBlYywgZnJhbWUpKTsKKyAg
ICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBSZWZQdHI8VHlwZUJ1
aWxkZXI6OkFycmF5PFN0cmluZz4gPiBlbnRyeSA9IFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+
OjpjcmVhdGUoKTsKICAgICAgICAgZW50cnktPmFkZEl0ZW0obmFtZSk7CiAgICAgICAgIGVudHJ5
LT5hZGRJdGVtKHZhbHVlKTsKQEAgLTE0Nyw4ICsxNTMsOSBAQCB2b2lkIEluc3BlY3RvckRPTVN0
b3JhZ2VBZ2VudDo6cmVtb3ZlRE9NU3RvcmFnZUl0ZW0oRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJp
bmcmCiB7CiAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlKiBzdG9yYWdlUmVzb3VyY2Ug
PSBnZXRET01TdG9yYWdlUmVzb3VyY2VGb3JJZChzdG9yYWdlSWQpOwogICAgIGlmIChzdG9yYWdl
UmVzb3VyY2UpIHsKLSAgICAgICAgc3RvcmFnZVJlc291cmNlLT5zdG9yYWdlQXJlYSgpLT5yZW1v
dmVJdGVtKGtleSwgc3RvcmFnZVJlc291cmNlLT5mcmFtZSgpKTsKLSAgICAgICAgKnN1Y2Nlc3Mg
PSB0cnVlOworICAgICAgICBFeGNlcHRpb25Db2RlIGV4Y2VwdGlvbiA9IDA7CisgICAgICAgIHN0
b3JhZ2VSZXNvdXJjZS0+c3RvcmFnZUFyZWEoKS0+cmVtb3ZlSXRlbShrZXksIGV4Y2VwdGlvbiwg
c3RvcmFnZVJlc291cmNlLT5mcmFtZSgpKTsKKyAgICAgICAgKnN1Y2Nlc3MgPSAhZXhjZXB0aW9u
OwogICAgIH0gZWxzZQogICAgICAgICAqc3VjY2VzcyA9IGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9E
T01XaW5kb3cuY3BwCmluZGV4IGZhYTRiYTA0ODYxYzhmMzdjZTY5ODBjNTg4YTJiN2QyZTJjOTk3
ZWIuLmE4NGZlYzU5Yzk1ZWI4NTFjNGJhMzc5ZGZjMThhMjc1ZTNmMmZkYjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RPTVdpbmRvdy5jcHAKQEAgLTc0NSwxNCArNzQ1LDIzIEBAIFN0b3JhZ2UqIERPTVdpbmRv
dzo6c2Vzc2lvblN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIGlmIChtX3Nlc3Npb25TdG9yYWdlKQorICAgIGlmIChtX3Nlc3Np
b25TdG9yYWdlKSB7CisgICAgICAgIGlmICghbV9zZXNzaW9uU3RvcmFnZS0+YXJlYSgpLT5jYW5B
Y2Nlc3NTdG9yYWdlKG1fZnJhbWUpKSB7CisgICAgICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX3Nlc3Np
b25TdG9yYWdlLmdldCgpOworICAgIH0KIAogICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC0+cGFn
ZSgpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8U3Rv
cmFnZUFyZWE+IHN0b3JhZ2VBcmVhID0gcGFnZS0+c2Vzc2lvblN0b3JhZ2UoKS0+c3RvcmFnZUFy
ZWEoZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmICghc3RvcmFnZUFyZWEtPmNh
bkFjY2Vzc1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRp
ZFVzZURPTVN0b3JhZ2UocGFnZSwgc3RvcmFnZUFyZWEuZ2V0KCksIGZhbHNlLCBtX2ZyYW1lKTsK
IAogICAgIG1fc2Vzc2lvblN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFn
ZUFyZWEucmVsZWFzZSgpKTsKQEAgLTc3Myw4ICs3ODIsMTMgQEAgU3RvcmFnZSogRE9NV2luZG93
Ojpsb2NhbFN0b3JhZ2UoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIGlmIChtX2xvY2FsU3RvcmFnZSkKKyAgICBpZiAobV9sb2NhbFN0b3Jh
Z2UpIHsKKyAgICAgICAgaWYgKCFtX2xvY2FsU3RvcmFnZS0+YXJlYSgpLT5jYW5BY2Nlc3NTdG9y
YWdlKG1fZnJhbWUpKSB7CisgICAgICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIHJldHVybiBtX2xvY2FsU3RvcmFnZS5n
ZXQoKTsKKyAgICB9CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBp
ZiAoIXBhZ2UpCkBAIC03ODQsNiArNzk4LDEwIEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxT
dG9yYWdlKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKIAogICAg
IFJlZlB0cjxTdG9yYWdlQXJlYT4gc3RvcmFnZUFyZWEgPSBwYWdlLT5ncm91cCgpLmxvY2FsU3Rv
cmFnZSgpLT5zdG9yYWdlQXJlYShkb2N1bWVudC0+c2VjdXJpdHlPcmlnaW4oKSk7CisgICAgaWYg
KCFzdG9yYWdlQXJlYS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgeworICAgICAgICBlYyA9
IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIEluc3BlY3Rvcklu
c3RydW1lbnRhdGlvbjo6ZGlkVXNlRE9NU3RvcmFnZShwYWdlLCBzdG9yYWdlQXJlYS5nZXQoKSwg
dHJ1ZSwgbV9mcmFtZSk7CiAKICAgICBtX2xvY2FsU3RvcmFnZSA9IFN0b3JhZ2U6OmNyZWF0ZSht
X2ZyYW1lLCBzdG9yYWdlQXJlYS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9TdG9yYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5j
cHAKaW5kZXggNDRkMGIyNzY0NWJiZDM2MzEwZWRjMTMzNWQ1NmM0Y2E3MzBlMmY3Yy4uNzkzYTgz
NmQ3MzA3MWUzMTA4ZGUyNjgxNjUyMWYwNjM2NDI1Y2U4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2UuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJQYWdlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdG9yYWdlQXJlYS5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTU2LDYxICs1NSw0IEBAIFN0b3JhZ2U6On5TdG9yYWdlKCkKICAgICAgICAg
bV9zdG9yYWdlQXJlYS0+ZGVjcmVtZW50QWNjZXNzQ291bnQoKTsKIH0KIAotdW5zaWduZWQgU3Rv
cmFnZTo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBh
Z2UoKSB8fCBtX3N0b3JhZ2VBcmVhLT5kaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZSht
X2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+
bGVuZ3RoKG1fZnJhbWUpOwotfQotCi1TdHJpbmcgU3RvcmFnZTo6a2V5KHVuc2lnbmVkIGluZGV4
KSBjb25zdAotewotICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8IG1fc3Rv
cmFnZUFyZWEtPmRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKG1fZnJhbWUpKQotICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+a2V5KGlu
ZGV4LCBtX2ZyYW1lKTsKLX0KLQotU3RyaW5nIFN0b3JhZ2U6OmdldEl0ZW0oY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkgfHwg
bV9zdG9yYWdlQXJlYS0+ZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUobV9mcmFtZSkp
Ci0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLQotICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5n
ZXRJdGVtKGtleSwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQgU3RvcmFnZTo6c2V0SXRlbShjb25zdCBT
dHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9z
dG9yYWdlQXJlYS0+c2V0SXRlbShrZXksIHZhbHVlLCBlYywgbV9mcmFtZSk7Ci19Ci0KLXZvaWQg
U3RvcmFnZTo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSkKLXsKLSAgICBpZiAoIW1fZnJh
bWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oa2V5
LCBtX2ZyYW1lKTsKLX0KLQotdm9pZCBTdG9yYWdlOjpjbGVhcigpCi17Ci0gICAgaWYgKCFtX2Zy
YW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihtX2ZyYW1l
KTsKLX0KLQotYm9vbCBTdG9yYWdlOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSkgY29uc3QK
LXsKLSAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBtX3N0b3JhZ2VBcmVh
LT5kaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmNvbnRhaW5zKGtleSwgbV9m
cmFtZSk7Ci19Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmgKaW5kZXggNWVhYmYwZmY2MTAx
MTNmNDBkN2VjMGZjZTE4MGQ4N2NhNjE1ZTQwZC4uYzI0OTZiZDQ4ZjFkNjE2MDQ3NjUzOGQ2N2Y1
MmNiNjRhODI5ZDA3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmgKQEAgLTI3LDYgKzI3LDcg
QEAKICNkZWZpbmUgU3RvcmFnZV9oCiAKICNpbmNsdWRlICJET01XaW5kb3dQcm9wZXJ0eS5oIgor
I2luY2x1ZGUgIlN0b3JhZ2VBcmVhLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTM0LDcg
KzM1LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lOwotICAgIGNs
YXNzIFN0b3JhZ2VBcmVhOwogICAgIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CiAKICAgICBj
bGFzcyBTdG9yYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8U3RvcmFnZT4sIHB1YmxpYyBET01XaW5k
b3dQcm9wZXJ0eSB7CkBAIC00MiwxNCArNDIsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdG9yYWdlPiBjcmVhdGUoRnJhbWUqLCBQYXNzUmVmUHRy
PFN0b3JhZ2VBcmVhPik7CiAgICAgICAgIH5TdG9yYWdlKCk7CiAKLSAgICAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgpIGNvbnN0
OwotICAgICAgICBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmKSBjb25zdDsKLSAgICAgICAg
dm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmKTsKLSAg
ICAgICAgdm9pZCBjbGVhcigpOwotCi0gICAgICAgIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXkpIGNvbnN0OworICAgICAgICB1bnNpZ25lZCBsZW5ndGgoRXhjZXB0aW9uQ29kZSYgZWMp
IGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmxlbmd0aChlYywgbV9mcmFtZSk7IH0KKyAg
ICAgICAgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0
IHsgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmtleShpbmRleCwgZWMsIG1fZnJhbWUpOyB9CisgICAg
ICAgIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykg
Y29uc3QgeyByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Z2V0SXRlbShrZXksIGVjLCBtX2ZyYW1lKTsg
fQorICAgICAgICB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYg
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2
YWx1ZSwgZWMsIG1fZnJhbWUpOyB9CisgICAgICAgIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJp
bmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShr
ZXksIGVjLCBtX2ZyYW1lKTsgfQorICAgICAgICB2b2lkIGNsZWFyKEV4Y2VwdGlvbkNvZGUmIGVj
KSB7IG1fc3RvcmFnZUFyZWEtPmNsZWFyKGVjLCBtX2ZyYW1lKTsgfQorICAgICAgICBib29sIGNv
bnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYykgY29uc3QgeyByZXR1
cm4gbV9zdG9yYWdlQXJlYS0+Y29udGFpbnMoa2V5LCBlYywgbV9mcmFtZSk7IH0KIAogICAgICAg
ICBTdG9yYWdlQXJlYSogYXJlYSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFyZWEuZ2V0KCk7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwKaW5kZXggNTVkYTU1NTA1NWYyZTI5NTkz
YzU4ZTY0NWQ0YTI0MDlmYmRlM2ZmZC4uNThiMGUyYzI2NDA0YmY4NjM4YTE4NmFmNzQ0OWIyZDZk
NWRiOTZlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaWRsCkBAIC0zMCwxMiArMzAsMTYg
QEAKICAgICBDdXN0b21FbnVtZXJhdGVQcm9wZXJ0eSwKICAgICBDdXN0b21OYW1lZFNldHRlciwK
IF0gaW50ZXJmYWNlIFN0b3JhZ2UgewotICAgIFtOb3RFbnVtZXJhYmxlXSByZWFkb25seSBhdHRy
aWJ1dGUgdW5zaWduZWQgbG9uZyBsZW5ndGg7Ci0gICAgW05vdEVudW1lcmFibGUsIFRyZWF0UmV0
dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIGtleShpbiB1bnNpZ25lZCBsb25nIGlu
ZGV4KTsKLSAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxs
XSBET01TdHJpbmcgZ2V0SXRlbShpbiBET01TdHJpbmcga2V5KTsKKyAgICBbTm90RW51bWVyYWJs
ZV0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVuZ3RoIGdldHRlciByYWlzZXMo
RE9NRXhjZXB0aW9uKTsKKyAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcz1OdWxsXSBET01TdHJpbmcga2V5KGluIHVuc2lnbmVkIGxvbmcgaW5kZXgpCisgICAgICAg
IHJhaXNlcyhET01FeGNlcHRpb24pOworICAgIFtOb3RFbnVtZXJhYmxlLCBUcmVhdFJldHVybmVk
TnVsbFN0cmluZ0FzPU51bGxdIERPTVN0cmluZyBnZXRJdGVtKGluIERPTVN0cmluZyBrZXkpCisg
ICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIHNl
dEl0ZW0oaW4gRE9NU3RyaW5nIGtleSwgaW4gRE9NU3RyaW5nIGRhdGEpIAogICAgICAgICByYWlz
ZXMoRE9NRXhjZXB0aW9uKTsKLSAgICBbTm90RW51bWVyYWJsZV0gdm9pZCByZW1vdmVJdGVtKGlu
IERPTVN0cmluZyBrZXkpOwotICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIGNsZWFyKCk7CisgICAg
W05vdEVudW1lcmFibGVdIHZvaWQgcmVtb3ZlSXRlbShpbiBET01TdHJpbmcga2V5KQorICAgICAg
ICByYWlzZXMoRE9NRXhjZXB0aW9uKTsKKyAgICBbTm90RW51bWVyYWJsZV0gdm9pZCBjbGVhcigp
CisgICAgICAgIHJhaXNlcyhET01FeGNlcHRpb24pOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYS5oCmluZGV4IGY2OWQ3YjUzYWMzMjA2Zjg5NWMyNThhOGQyMWIwMjYyMTkxNzQy
N2MuLjk3MDM0Yzg4OTI3ZTI4ZTAxMDA0MDUxNTZkYWUzOTUxYTA4ZGY5NjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1N0b3JhZ2VBcmVhLmgKQEAgLTQ2LDE1ICs0NiwxNSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQogICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgRG9jdW1lbnQgaW5zdGVhZCBvZiBGcmFtZS4gQWxzbywg
dGhhdCBwYXJhbWV0ZXIgc2hvdWxkIGdvIGZpcnN0LgotICAgICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aChGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBT
dHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsK
LSAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUq
IHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKKyAgICAgICAg
dmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUq
IHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNv
bnN0ID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXks
IGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUp
ID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXks
IEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoRnJh
bWUqIHNvdXJjZUZyYW1lKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBjb250YWlucyhjb25z
dCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwg
RnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihFeGNl
cHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgY29uc3QgPSAwOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJp
dmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsK
KyAgICAgICAgdmlydHVhbCBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqKSBjb25zdCA9IDA7
CiAKICAgICAgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpIGNvbnN0
ID0gMDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUlt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCmluZGV4
IDM3YzRmNTk2Y2E1NzAxNzNhMTgyMjk3NzdlZjNhNzMzNTE0NjI1MjYuLjhmNTdkYjc3N2M1MWVh
YzJiZjE3ZWY0MzAxNGI3ZDkyZDdjZGY5YjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2VBcmVhSW1wbC5jcHAKQEAgLTEwNCwxMCArMTA0LDEzIEBAIFN0b3JhZ2VBcmVhSW1wbDo6
U3RvcmFnZUFyZWFJbXBsKFN0b3JhZ2VBcmVhSW1wbCogYXJlYSkKICAgICBBU1NFUlQoIW1faXNT
aHV0ZG93bik7CiB9CiAKK2Jvb2wgU3RvcmFnZUFyZWFJbXBsOjpjYW5BY2Nlc3NTdG9yYWdlKEZy
YW1lKiBmcmFtZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZnJhbWUgJiYgZnJhbWUtPnBhZ2UoKTsK
K30KKwogYm9vbCBTdG9yYWdlQXJlYUltcGw6OmRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZy
YW1lKGNvbnN0IEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKLSAgICBpZiAoIWZyYW1lLT5wYWdlKCkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmICghZnJhbWUtPnBhZ2UoKS0+c2V0dGluZ3Mo
KS0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
aWYgKG1fc3RvcmFnZVR5cGUgIT0gTG9jYWxTdG9yYWdlKQpAQCAtMTE1LDI0ICsxMTgsNDggQEAg
Ym9vbCBTdG9yYWdlQXJlYUltcGw6OmRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGNv
bnN0IEZyYW1lKiBmcmFtZSkgY29uc3QKICAgICByZXR1cm4gIVNjaGVtZVJlZ2lzdHJ5OjphbGxv
d3NMb2NhbFN0b3JhZ2VBY2Nlc3NJblByaXZhdGVCcm93c2luZyhmcmFtZS0+ZG9jdW1lbnQoKS0+
c2VjdXJpdHlPcmlnaW4oKS0+cHJvdG9jb2woKSk7CiB9CiAKLXVuc2lnbmVkIFN0b3JhZ2VBcmVh
SW1wbDo6bGVuZ3RoKEZyYW1lKikgY29uc3QKK3Vuc2lnbmVkIFN0b3JhZ2VBcmVhSW1wbDo6bGVu
Z3RoKEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpIGNvbnN0CiB7CisgICAgZWMgPSAw
OworICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoZGlzYWJsZWRCeVBy
aXZhdGVCcm93c2luZ0luRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIEFT
U0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIAog
ICAgIHJldHVybiBtX3N0b3JhZ2VNYXAtPmxlbmd0aCgpOwogfQogCi1TdHJpbmcgU3RvcmFnZUFy
ZWFJbXBsOjprZXkodW5zaWduZWQgaW5kZXgsIEZyYW1lKikgY29uc3QKK1N0cmluZyBTdG9yYWdl
QXJlYUltcGw6OmtleSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBm
cmFtZSkgY29uc3QKIHsKKyAgICBlYyA9IDA7CisgICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZy
YW1lKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIH0KKyAgICBpZiAoZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoZnJh
bWUpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93
bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKICAgICByZXR1cm4gbV9zdG9y
YWdlTWFwLT5rZXkoaW5kZXgpOwogfQogCi1TdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjpnZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSopIGNvbnN0CitTdHJpbmcgU3RvcmFnZUFyZWFJbXBs
OjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZy
YW1lKSBjb25zdAogeworICAgIGVjID0gMDsKKyAgICBpZiAoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJh
bWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorICAgIGlmIChkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShmcmFt
ZSkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwogICAgIEFTU0VSVCghbV9pc1NodXRkb3du
KTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIApAQCAtMTQxLDYgKzE2OCwxMiBA
QCBTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFt
ZSopIGNvbnN0CiAKIHZvaWQgU3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1l
KQogeworICAgIGVjID0gMDsKKyAgICBpZiAoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7Cisg
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAg
QVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIEFTU0VSVCghdmFsdWUuaXNOdWxsKCkpOwogICAg
IGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwpAQCAtMTY5LDggKzIwMiwxNCBAQCB2b2lkIFN0
b3JhZ2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSwgRXhjZXB0aW9uQwogICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoKGtl
eSwgb2xkVmFsdWUsIHZhbHVlLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgp
LCBmcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpyZW1vdmVJdGVtKGNvbnN0IFN0
cmluZyYga2V5LCBGcmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRl
bShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsK
KyAgICBlYyA9IDA7CisgICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VS
VCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUoKTsKIApAQCAt
MTkwLDggKzIyOSwxNCBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBT
dHJpbmcmIGtleSwgRnJhbWUqIGZyYW1lKQogICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoKGtleSwgb2xkVmFsdWUsIFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5
T3JpZ2luLmdldCgpLCBmcmFtZSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFJbXBsOjpjbGVhcihG
cmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRXhjZXB0aW9uQ29kZSYg
ZWMsIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBlYyA9IDA7CisgICAgaWYgKCFjYW5BY2Nlc3NTdG9y
YWdlKGZyYW1lKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKwogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1w
b3J0Q29tcGxldGUoKTsKIApAQCAtMjA5LDggKzI1NCwxNiBAQCB2b2lkIFN0b3JhZ2VBcmVhSW1w
bDo6Y2xlYXIoRnJhbWUqIGZyYW1lKQogICAgIFN0b3JhZ2VFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoKFN0cmluZygpLCBTdHJpbmcoKSwgU3RyaW5nKCksIG1fc3RvcmFnZVR5cGUsIG1fc2VjdXJp
dHlPcmlnaW4uZ2V0KCksIGZyYW1lKTsKIH0KIAotYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRh
aW5zKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSopIGNvbnN0Citib29sIFN0b3JhZ2VBcmVhSW1w
bDo6Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSog
ZnJhbWUpIGNvbnN0CiB7CisgICAgZWMgPSAwOworICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShm
cmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgaWYgKGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGZyYW1l
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwog
ICAgIGJsb2NrVW50aWxJbXBvcnRDb21wbGV0ZSgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9T
dG9yYWdlQXJlYUltcGwuaAppbmRleCAxZjJiN2UwODAyNDIwNmRiMzJlZWFkYjliOGNlOWE1NDRl
NGRkNzNmLi4zODRhZjVmN2YzZmMwNmE0YmI3YjAxNDBjYjhiZGY3ZWQ4YmUyNDllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKQEAgLTQ0LDE1ICs0NCwxNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflN0b3JhZ2VBcmVhSW1wbCgpOwog
CiAgICAgICAgIC8vIFRoZSBIVE1MNSBET00gU3RvcmFnZSBBUEkgKGFuZCBjb250YWlucykKLSAg
ICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsK
LSAgICAgICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBGcmFtZSogc291cmNl
RnJhbWUpIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxlbmd0aChFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiwg
RnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRl
bShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBj
b25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1l
KiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjbGVhcihGcmFtZSogc291cmNl
RnJhbWUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXks
IEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCByZW1vdmVJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1l
KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291
cmNlRnJhbWUpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwogCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFt
ZSogc291cmNlRnJhbWUpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuQWNjZXNzU3Rv
cmFnZShGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgc2l6ZV90
IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdDsKIApAQCAtNzYsNiArNzYsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBibG9ja1VudGlsSW1wb3J0Q29tcGxldGUo
KSBjb25zdDsKICAgICAgICAgdm9pZCBjbG9zZURhdGFiYXNlVGltZXJGaXJlZChUaW1lcjxTdG9y
YWdlQXJlYUltcGw+Kik7CisgICAgICAgIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0lu
RnJhbWUoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAogICAgICAgICBTdG9yYWdl
VHlwZSBtX3N0b3JhZ2VUeXBlOwogICAgICAgICBSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IG1fc2Vj
dXJpdHlPcmlnaW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9y
YWdlQXJlYVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVh
UHJveHkuY3BwCmluZGV4IDJlMzNkMDhmYjRhYjc5ZWI1YzJiNmQwZmRlZmMxODBkNmVmOTNlYTQu
LjdiODM2OGFlNjkwNmQ5OWM5OWI3M2VmYTZjZGZiYjQ4MzFhZDk4ODYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVhUHJveHkuY3BwCkBAIC01Myw2ICs1Myw4
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFN0b3JhZ2VBcmVhUHJveHk6OlN0b3JhZ2VBcmVhUHJv
eHkoV2ViS2l0OjpXZWJTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEsIFN0b3JhZ2VUeXBlIHN0b3Jh
Z2VUeXBlKQogICAgIDogbV9zdG9yYWdlQXJlYShhZG9wdFB0cihzdG9yYWdlQXJlYSkpCiAgICAg
LCBtX3N0b3JhZ2VUeXBlKHN0b3JhZ2VUeXBlKQorICAgICwgbV9jYW5BY2Nlc3NTdG9yYWdlQ2Fj
aGVkUmVzdWx0KGZhbHNlKQorICAgICwgbV9jYW5BY2Nlc3NTdG9yYWdlQ2FjaGVkRnJhbWUoMCkK
IHsKIH0KIApAQCAtNjAsNjQgKzYyLDg4IEBAIFN0b3JhZ2VBcmVhUHJveHk6On5TdG9yYWdlQXJl
YVByb3h5KCkKIHsKIH0KIAotdW5zaWduZWQgU3RvcmFnZUFyZWFQcm94eTo6bGVuZ3RoKEZyYW1l
KiBmcmFtZSkgY29uc3QKK3Vuc2lnbmVkIFN0b3JhZ2VBcmVhUHJveHk6Omxlbmd0aChFeGNlcHRp
b25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKSBjb25zdAogewotICAgIGlmIChjYW5BY2Nlc3NTdG9y
YWdlKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmxlbmd0aCgpOwotICAg
IHJldHVybiAwOworICAgIGlmIChVTkxJS0VMWSghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSwgdHJ1
ZSkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisgICAgZWMgPSAwOworICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5sZW5ndGgoKTsKIH0K
IAotU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OmtleSh1bnNpZ25lZCBpbmRleCwgRnJhbWUqIGZy
YW1lKSBjb25zdAorU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OmtleSh1bnNpZ25lZCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKLSAgICBpZiAoY2FuQWNj
ZXNzU3RvcmFnZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5rZXkoaW5k
ZXgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0
b3JhZ2UoZnJhbWUsIHRydWUpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICBlYyA9IDA7CisgICAgcmV0dXJuIG1fc3Rv
cmFnZUFyZWEtPmtleShpbmRleCk7CiB9CiAKLVN0cmluZyBTdG9yYWdlQXJlYVByb3h5OjpnZXRJ
dGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJhbWUpIGNvbnN0CitTdHJpbmcgU3RvcmFn
ZUFyZWFQcm94eTo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMs
IEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKLSAgICBpZiAoY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkp
Ci0gICAgICAgIHJldHVybiBtX3N0b3JhZ2VBcmVhLT5nZXRJdGVtKGtleSk7Ci0gICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmIChVTkxJS0VMWSghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSwgdHJ1
ZSkpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgfQorICAgIGVjID0gMDsKKyAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Z2V0SXRl
bShrZXkpOwogfQogCiB2b2lkIFN0b3JhZ2VBcmVhUHJveHk6OnNldEl0ZW0oY29uc3QgU3RyaW5n
JiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJh
bWUpCiB7Ci0gICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkKLSAgICAgICAgZWMgPSBR
VU9UQV9FWENFRURFRF9FUlI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFdlYktpdDo6V2ViU3RvcmFn
ZUFyZWE6OlJlc3VsdCByZXN1bHQgPSBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1bHRPSzsK
LSAgICAgICAgbV9zdG9yYWdlQXJlYS0+c2V0SXRlbShrZXksIHZhbHVlLCBmcmFtZS0+ZG9jdW1l
bnQoKS0+dXJsKCksIHJlc3VsdCk7Ci0gICAgICAgIGVjID0gKHJlc3VsdCA9PSBXZWJLaXQ6Oldl
YlN0b3JhZ2VBcmVhOjpSZXN1bHRPSykgPyAwIDogUVVPVEFfRVhDRUVERURfRVJSOworICAgIGlm
IChVTkxJS0VMWSghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSwgdHJ1ZSkpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIFdlYktpdDo6V2Vi
U3RvcmFnZUFyZWE6OlJlc3VsdCByZXN1bHQgPSBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1
bHRPSzsKKyAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1
bWVudCgpLT51cmwoKSwgcmVzdWx0KTsKKyAgICBlYyA9IChyZXN1bHQgPT0gV2ViS2l0OjpXZWJT
dG9yYWdlQXJlYTo6UmVzdWx0T0spID8gMCA6IFFVT1RBX0VYQ0VFREVEX0VSUjsKIH0KIAotdm9p
ZCBTdG9yYWdlQXJlYVByb3h5OjpyZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSog
ZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhUHJveHk6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFjYW5BY2Nl
c3NTdG9yYWdlKGZyYW1lKSkKKyAgICBpZiAoVU5MSUtFTFkoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJh
bWUsIHRydWUpKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBlYyA9IDA7CiAgICAgbV9zdG9yYWdlQXJlYS0+cmVtb3ZlSXRlbShrZXks
IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSk7CiB9CiAKLXZvaWQgU3RvcmFnZUFyZWFQcm94eTo6
Y2xlYXIoRnJhbWUqIGZyYW1lKQordm9pZCBTdG9yYWdlQXJlYVByb3h5OjpjbGVhcihFeGNlcHRp
b25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQogewotICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShm
cmFtZSkpCisgICAgaWYgKFVOTElLRUxZKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lLCB0cnVlKSkp
IHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CiAgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgZWMgPSAwOwogICAgIG1fc3RvcmFnZUFyZWEtPmNsZWFyKGZyYW1lLT5kb2N1bWVudCgpLT51
cmwoKSk7CiB9CiAKLWJvb2wgU3RvcmFnZUFyZWFQcm94eTo6Y29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXksIEZyYW1lKiBmcmFtZSkgY29uc3QKK2Jvb2wgU3RvcmFnZUFyZWFQcm94eTo6Y29udGFp
bnMoY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuICFnZXRJdGVtKGtleSwgZnJhbWUpLmlzTnVsbCgpOworICAgIGlm
IChVTkxJS0VMWSghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSwgdHJ1ZSkpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biAhZ2V0SXRlbShrZXksIGVjLCBmcmFtZSkuaXNOdWxsKCk7CiB9CiAKLWJvb2wgU3RvcmFnZUFy
ZWFQcm94eTo6Y2FuQWNjZXNzU3RvcmFnZShGcmFtZSogZnJhbWUpIGNvbnN0Citib29sIFN0b3Jh
Z2VBcmVhUHJveHk6OmNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIGZyYW1lLCBib29sIGNoZWNrQ2Fj
aGUpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpKQorICAgIGlmIChVTkxJS0VMWSgh
ZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KExJS0VMWShjaGVja0NhY2hlICYmIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZEZyYW1lID09IGZy
YW1lKSkKKyAgICAgICAgcmV0dXJuIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZFJlc3VsdDsKICAg
ICBXZWJLaXQ6OldlYkZyYW1lSW1wbCogd2ViRnJhbWUgPSBXZWJLaXQ6OldlYkZyYW1lSW1wbDo6
ZnJvbUZyYW1lKGZyYW1lKTsKICAgICBXZWJLaXQ6OldlYlZpZXdJbXBsKiB3ZWJWaWV3ID0gd2Vi
RnJhbWUtPnZpZXdJbXBsKCk7Ci0gICAgcmV0dXJuICF3ZWJWaWV3LT5wZXJtaXNzaW9uQ2xpZW50
KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5hbGxvd1N0b3JhZ2Uod2ViRnJhbWUs
IG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKTsKKyAgICBib29sIHJlc3VsdCA9ICF3ZWJW
aWV3LT5wZXJtaXNzaW9uQ2xpZW50KCkgfHwgd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpLT5h
bGxvd1N0b3JhZ2Uod2ViRnJhbWUsIG1fc3RvcmFnZVR5cGUgPT0gTG9jYWxTdG9yYWdlKTsKKyAg
ICBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRGcmFtZSA9IGZyYW1lOworICAgIG1fY2FuQWNjZXNz
U3RvcmFnZUNhY2hlZFJlc3VsdCA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBz
aXplX3QgU3RvcmFnZUFyZWFQcm94eTo6bWVtb3J5Qnl0ZXNVc2VkQnlDYWNoZSgpIGNvbnN0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmgKaW5kZXggY2Fl
MzU5MzU4MjIwNzljYzAyMjk5Njg4ZDkzYWQ3MmVhMzdhNzBiZi4uMWRiNmI0MTIxNTFiZjQ5ZDJh
NjI0ODA5ZTRhMGZkZGFlM2ZkYmNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1N0b3JhZ2VBcmVhUHJveHkuaApAQCAtNDgsMTUgKzQ4LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5TdG9yYWdlQXJlYVByb3h5KCk7CiAKICAgICAvLyBUaGUgSFRNTDUgRE9NIFN0b3JhZ2Ug
QVBJCi0gICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEZyYW1lKiBzb3VyY2VG
cmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtl
eSwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0
aChFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAgICB2aXJ0dWFs
IFN0cmluZyBrZXkodW5zaWduZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNl
RnJhbWUpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBr
ZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwogICAgIHZpcnR1
YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICB2aXJ0dWFsIHZvaWQgcmVt
b3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29u
dGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUm
LCBGcmFtZSogc291cmNlRnJhbWUpOworICAgIHZpcnR1YWwgdm9pZCBjbGVhcihFeGNlcHRpb25D
b2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29u
c3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0
OwogCi0gICAgdmlydHVhbCBib29sIGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGNv
bnN0IEZyYW1lKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2Fu
QWNjZXNzU3RvcmFnZShGcmFtZSogZnJhbWUpIGNvbnN0IHsgcmV0dXJuIGNhbkFjY2Vzc1N0b3Jh
Z2UoZnJhbWUsIGZhbHNlKTsgfQogCiAgICAgdmlydHVhbCBzaXplX3QgbWVtb3J5Qnl0ZXNVc2Vk
QnlDYWNoZSgpIGNvbnN0OwogCkBAIC02OSwxMiArNjksMTMgQEAgcHVibGljOgogICAgICAgICAg
ICAgV2ViS2l0OjpXZWJTdG9yYWdlQXJlYSogc291cmNlQXJlYUluc3RhbmNlLCBib29sIG9yaWdp
bmF0ZWRJblByb2Nlc3MpOwogCiBwcml2YXRlOgotICAgIGJvb2wgY2FuQWNjZXNzU3RvcmFnZShG
cmFtZSopIGNvbnN0OwotCisgICAgYm9vbCBjYW5BY2Nlc3NTdG9yYWdlKEZyYW1lKiwgYm9vbCBj
aGVja0NhY2hlKSBjb25zdDsKICAgICBzdGF0aWMgYm9vbCBpc0V2ZW50U291cmNlKFN0b3JhZ2Uq
LCBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhKiBzb3VyY2VBcmVhSW5zdGFuY2UpOwogCiAgICAgT3du
UHRyPFdlYktpdDo6V2ViU3RvcmFnZUFyZWE+IG1fc3RvcmFnZUFyZWE7CiAgICAgU3RvcmFnZVR5
cGUgbV9zdG9yYWdlVHlwZTsKKyAgICBtdXRhYmxlIGJvb2wgbV9jYW5BY2Nlc3NTdG9yYWdlQ2Fj
aGVkUmVzdWx0OworICAgIG11dGFibGUgRnJhbWUqIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZEZy
YW1lOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI1ZjkwNDE3YjI2NzMw
YzZkNzZhMzI3ZDZmMWJiZmRmZTY1YTMxMWYuLjJhYTdmYmU4ZGRhY2YxMGU0MjgxNDNmNzAwODEy
NDBhZmVmNzdhODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0xMC0xNyAgRGFuIENhcm5l
eSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBXaGVuIGJsb2NraW5nIGxvY2FsU3Rv
cmFnZSwgRmlyZWZveCB0aHJvd3MgYSBzZWN1cml0eSBleGNlcHRpb24gb24gYWNjZXNzLCBhbmQg
bWF5YmUgc28gc2hvdWxkIHdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MzI1NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkanVzdCB0ZXN0cyB0byBoYW5kbGUgbmV3IGV4Y2VwdGlvbnMuCisKKyAgICAg
ICAgKiBmYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIGZhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS5odG1sOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNz
aW9uLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9u
Y2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi5odG1sOgorCiAyMDEyLTEwLTE3ICBNaWtoYWlsIFBv
emRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFdlYktp
dFRlc3RSdW5uZXIgbmVlZHMgdGVzdFJ1bm5lci5xdWV1ZUxvYWQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUtZXhwZWN0
ZWQudHh0CmluZGV4IGYxNTFhYTdiODc4Y2Q4YzRkZDUyMzZiMDIzYTdlMTYzYWE2NDUxNzMuLmVl
ZjJjZTVkZjJiODAzM2Q1OGU4OTk2MDA2MDJjZGJlOGY3NWQ4YTUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQtaWZyYW1lLWV4
cGVjdGVkLnR4dApAQCAtMSw0ICsxLDUgQEAKIENPTlNPTEUgTUVTU0FHRTogbGluZSAyNTogRXhw
ZWN0ZWQgZXhjZXB0aW9uIGNhdWdodC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzOTogRXhwZWN0
ZWQgZXhjZXB0aW9uIGNhdWdodC4KIEJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3MTQwCiAKIERlc2NyaXB0aW9uOiBDcmFzaCBmcm9tIG51bGwgcG9pbnRlciBk
ZXJlZmVyZW5jZSBiZWxvdyBXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oKQpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQtaWZyYW1l
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUu
aHRtbAppbmRleCA2N2ViODhiNWRlNTE4YzU1N2UwNDdjZWU1NjA2ZjBkZmM5NTRlMjNmLi4wNjBk
NDI1YjNlYWEwNzFhNDRkOGRkY2Q0OWVjYTFmZmRmYzJmYjk3IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbApAQCAtMzMs
NyArMzMsMTEgQEAKICAgICAgICAgICB2YXIgYV9sb2NhbFN0b3JhZ2UgPSBhLmxvY2FsU3RvcmFn
ZTsgLy8gVGhlIGNvbnN0cnVjdG9yIHdvbid0IGJlIHJlYWNoYWJsZSBhcyB3aW5kb3cgb2JqZWN0
IHByb3BlcnR5IGFmdGVyIGRldGFjaGluZyB0aGUgZnJhbWUuCiAKICAgICAgICAgICB0MS5vdXRl
clRleHQgPSAiIjsKLSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNpdGVkPSJ0ZXN0
IjsKKyAgICAgICAgICB0cnkgeworCSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNp
dGVkPSJ0ZXN0IjsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgIGNvbnNv
bGUubG9nKCJFeHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0LiIpOworICAgICAgICAgIH0KICAgICAg
IH0KIAogICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xp
ZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1leHBlY3RlZC50eHQKaW5kZXggZjRlMzc5ZDg4MzYzN2E2
MzY5ZjUzOWIyNDFjZWEzNGYzN2FjODNlMi4uNTM4ZDQxMTJhNGU5NGE1ZmNkNjY0YzAyODIwMjU0
M2VhZjU4NDhlZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVy
bWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNz
aW9uLWV4cGVjdGVkLnR4dApAQCAtNSwxMiArNSwxNiBAQCBMZW5ndGggaXMgMQogVmFsdWUgZm9y
IEZPTyBpcyBCQVIKIEtleSBmb3IgaW5kZXggMCBpcyBGT08KIERpc2FibGluZyBsb2NhbFN0b3Jh
Z2UgYWNjZXNzLgotTGVuZ3RoIGlzIDAKLVZhbHVlIGZvciBGT08gaXMgbnVsbAotQ2F1Z2h0IGV4
Y2VwdGlvbiB0cnlpbmcgdG8gY2hhbmdlIGl0ZW06IEVycm9yOiBRVU9UQV9FWENFRURFRF9FUlI6
IERPTSBFeGNlcHRpb24gMjIKLUxlbmd0aCBpcyAwCi1WYWx1ZSBmb3IgRk9PIGlzIG51bGwKLUtl
eSBmb3IgaW5kZXggMCBpcyBudWxsCitDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgd2lu
ZG93LmxvY2FsU3RvcmFnZTogRXJyb3I6IFNFQ1VSSVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOAor
Q2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gZ2V0IGxlbmd0aDogRXJyb3I6IFNFQ1VSSVRZX0VS
UjogRE9NIEV4Y2VwdGlvbiAxOAorQ2F1Z2h0IGV4Y2VwdGlvbiB0cnlpbmcgdG8gZ2V0IGl0ZW06
IEVycm9yOiBTRUNVUklUWV9FUlI6IERPTSBFeGNlcHRpb24gMTgKK0NhdWdodCBleGNlcHRpb24g
dHJ5aW5nIHRvIGNoYW5nZSBpdGVtOiBFcnJvcjogU0VDVVJJVFlfRVJSOiBET00gRXhjZXB0aW9u
IDE4CitDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byByZW1vdmUgaXRlbTogRXJyb3I6IFNFQ1VS
SVRZX0VSUjogRE9NIEV4Y2VwdGlvbiAxOAorRW5hYmxpbmcgbG9jYWxTdG9yYWdlIGFjY2Vzcy4K
K3dpbmRvdy5sb2NhbFN0b3JhZ2UgYWNjZXNzaWJsZSBpcyB0cnVlCitMZW5ndGggaXMgMQorVmFs
dWUgZm9yIEZPTyBpcyBCQVIKK0tleSBmb3IgaW5kZXggMCBpcyBGT08KIExlbmd0aCBpcyAwCiBW
YWx1ZSBmb3IgRk9PIGlzIG51bGwKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Y2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24uaHRtbCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNz
aW9uLmh0bWwKaW5kZXggNGE0ZjQ3YTQzMDllODIwNzFiMzg0YTYxNTM1MWY2YTdlZjgzZTJlNy4u
YjMyM2MzMDZkMTYzYmIwZTUyY2FmM2MzM2M0NWY2NTVlNGVlZTIzYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1p
c3Npb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9u
Y2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi5odG1sCkBAIC0zNywxNSArMzcsNDMgQEAgZnVuY3Rp
b24gcnVuVGVzdCgpCiAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmIHRlc3RSdW5uZXIuc2V0
U3RvcmFnZUFsbG93ZWQpCiAgICAgICAgIHRlc3RSdW5uZXIuc2V0U3RvcmFnZUFsbG93ZWQoZmFs
c2UpOwogCi0gICAgbG9nKCJMZW5ndGggaXMgIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOwotICAg
IGxvZygiVmFsdWUgZm9yIEZPTyBpcyAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oIkZPTyIpKTsK
KyAgICB0cnkgeworICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyBjYWxsIGlzIG5lZWRlZCB0byBy
ZXNldCB0aGUgYWNjZXNzIGNoZWNrIGNhY2hlLgorICAgICAgICBsb2coIndpbmRvdy5sb2NhbFN0
b3JhZ2UgYWNjZXNzaWJsZSBpcyAiICsgISF3aW5kb3cubG9jYWxTdG9yYWdlKTsKKyAgICB9IGNh
dGNoKGUpIHsKKyAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgd2lu
ZG93LmxvY2FsU3RvcmFnZTogIiArIGUpOworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGxv
ZygiTGVuZ3RoIGlzICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3RoKTsKKyAgICB9IGNhdGNoKGUpIHsK
KyAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byBnZXQgbGVuZ3RoOiAiICsg
ZSk7CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAgICAgbG9nKCJWYWx1ZSBmb3IgRk9PIGlzICIg
KyBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiRk9PIikpOworICAgIH0gY2F0Y2goZSkgeworICAgICAg
ICBsb2coIkNhdWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIGdldCBpdGVtOiAiICsgZSk7CisgICAg
fQogCiAgICAgdHJ5IHsKICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oIkZPTyIsICJCQVoi
KTsKICAgICB9IGNhdGNoKGUpIHsKICAgICAgICAgbG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWlu
ZyB0byBjaGFuZ2UgaXRlbTogIiArIGUpOwogICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIGxv
Y2FsU3RvcmFnZS5yZW1vdmVJdGVtKCJGT08iKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAg
bG9nKCJDYXVnaHQgZXhjZXB0aW9uIHRyeWluZyB0byByZW1vdmUgaXRlbTogIiArIGUpOworICAg
IH0KKworICAgIGxvZygiRW5hYmxpbmcgbG9jYWxTdG9yYWdlIGFjY2Vzcy4iKTsKKyAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIgJiYgdGVzdFJ1bm5lci5zZXRTdG9yYWdlQWxsb3dlZCkKKyAgICAg
ICAgdGVzdFJ1bm5lci5zZXRTdG9yYWdlQWxsb3dlZCh0cnVlKTsKICAgICAKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBjYWxsIGlzIG5lZWRlZCB0byByZXNldCB0aGUgYWNjZXNzIGNoZWNrIGNhY2hl
LgorICAgIGxvZygid2luZG93LmxvY2FsU3RvcmFnZSBhY2Nlc3NpYmxlIGlzICIgKyAhIXdpbmRv
dy5sb2NhbFN0b3JhZ2UpOwogICAgIGxvZygiTGVuZ3RoIGlzICIgKyBsb2NhbFN0b3JhZ2UubGVu
Z3RoKTsKICAgICBsb2coIlZhbHVlIGZvciBGT08gaXMgIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVt
KCJGT08iKSk7CiAgICAgbG9nKCJLZXkgZm9yIGluZGV4IDAgaXMgIiArIGxvY2FsU3RvcmFnZS5r
ZXkoMCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169884</attachid>
            <date>2012-10-22 05:30:59 -0700</date>
            <delta_ts>2012-10-23 00:24:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63257-20121022142937.patch</filename>
            <type>text/plain</type>
            <size>39161</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODIwNjgwYjAzZWFhMTc3
YTAyNDkxODJkODAxOTc5M2EzNTI5ZGRmNC4uMjZlYTBiNjJiMmVmMzllM2I3NWE1ZWQwOWVlOGI0
NDdlMTZjYTMwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEwLTIyICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFdoZW4gYmxvY2tpbmcgbG9j
YWxTdG9yYWdlLCBGaXJlZm94IHRocm93cyBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBvbiBhY2Nlc3Ms
IGFuZCBtYXliZSBzbyBzaG91bGQgd2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhyb3cgc2VjdXJpdHkgZXhjZXB0aW9uIHdoZW4gbG9jYWwgc3RvcmFn
ZSBpcyBhY2Nlc3NlZAorICAgICAgICB1bmRlciBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdG8gbWF0
Y2ggZmlyZWZveC4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEV4aXN0aW5nIHRlc3RzIG1vZGlm
aWVkLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6Y2FuR2V0SXRlbXNGb3JOYW1lKToKKyAgICAgICAgKFdl
YkNvcmU6OkpTU3RvcmFnZTo6bmFtZUdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpKU1N0b3Jh
Z2U6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkpTU3RvcmFnZTo6Z2V0T3du
UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3RvcmFnZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNldERPTUV4
Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpWOFN0b3JhZ2U6Om5hbWVkUHJvcGVydHlFbnVt
ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VHZXR0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5UXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6
c3RvcmFnZURlbGV0ZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdl
QWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50Ojpn
ZXRET01TdG9yYWdlRW50cmllcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01TdG9y
YWdlQWdlbnQ6OnJlbW92ZURPTVN0b3JhZ2VJdGVtKToKKyAgICAgICAgKiBwYWdlL0RPTVdpbmRv
dy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKToKKyAgICAgICAgKiBzdG9y
YWdlL1N0b3JhZ2UuY3BwOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZS5oOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlOjpsZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3RvcmFnZTo6a2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmdldEl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZTo6c2V0SXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpTdG9yYWdlOjpyZW1vdmVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmNs
ZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2U6OmNvbnRhaW5zKToKKyAgICAgICAgKiBz
dG9yYWdlL1N0b3JhZ2UuaWRsOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWEuaDoKKyAg
ICAgICAgKFN0b3JhZ2VBcmVhKToKKyAgICAgICAgKiBzdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmNhbkFjY2Vzc1N0b3JhZ2Up
OiBDaGVja3Mgd2hldGhlciBhY2Nlc3MgdG8gc3RvcmFnZSBpcyBhIHNlY3VyaXR5IHZpb2xhdGlv
bi4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBs
OjpkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYUltcGw6Omxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUlt
cGw6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OmdldEl0ZW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFJbXBsOjpzZXRJdGVtKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpT
dG9yYWdlQXJlYUltcGw6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhSW1w
bDo6Y29udGFpbnMpOgorICAgICAgICAqIHN0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmg6CisgICAg
ICAgIChTdG9yYWdlQXJlYUltcGwpOgorCiAyMDEyLTEwLTIyICBLZWlzaGkgSGF0dG9yaSAgPGtl
aXNoaUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBtb250aEZvcm1hdEluTERNTApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBiMmEzOGQyYjc3MjEzYTAzNWIwNmMyZmQxMzUyMjQ1
NmJjNjVhZThlLi42ODVhMDRiZTlkNTk0YTQwZjQ3NzIzNDhhM2Y3OTdjOTkzZmJhNmFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEwLTIyICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFdoZW4gYmxvY2tpbmcgbG9j
YWxTdG9yYWdlLCBGaXJlZm94IHRocm93cyBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBvbiBhY2Nlc3Ms
IGFuZCBtYXliZSBzbyBzaG91bGQgd2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIHNlY3VyaXR5IGNoZWNrIGFuZCBzZWN1cml0eSBjaGVjayBjYWNo
ZS4KKworICAgICAgICAqIHNyYy9TdG9yYWdlQXJlYVByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlN0b3JhZ2VBcmVhUHJveHk6OlN0b3JhZ2VBcmVhUHJveHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3RvcmFnZUFyZWFQcm94eTo6bGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VB
cmVhUHJveHk6OmtleSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjpnZXRJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OlN0b3JhZ2VBcmVhUHJveHk6OnNldEl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6U3RvcmFnZUFyZWFQcm94eTo6cmVtb3ZlSXRlbSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdG9yYWdlQXJlYVByb3h5OjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTdG9y
YWdlQXJlYVByb3h5Ojpjb250YWlucyk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdlQXJlYVBy
b3h5OjpjYW5BY2Nlc3NTdG9yYWdlKToKKyAgICAgICAgKiBzcmMvU3RvcmFnZUFyZWFQcm94eS5o
OgorICAgICAgICAoU3RvcmFnZUFyZWFQcm94eSk6CisgICAgICAgIChXZWJDb3JlOjpTdG9yYWdl
QXJlYVByb3h5OjpjYW5BY2Nlc3NTdG9yYWdlKToKKwogMjAxMi0xMC0yMiAgS2Vpc2hpIEhhdHRv
cmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgbW9udGhGb3JtYXRJbkxE
TUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3Rv
bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1N0b3JhZ2VDdXN0b20uY3BwCmlu
ZGV4IDI0NDQ2ZDQzYWUwZTFkZTE0MGU5NDU5NDAyM2E4YTg2YmZhYTY5NzAuLmU0ZmU4NTM4ZTE3
NmI0NTdiNjExYmU1YTdjMmYxZWJkODk2NTc5YmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTU3RvcmFnZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNTdG9yYWdlQ3VzdG9tLmNwcApAQCAtMzQsOSArMzQsMTIgQEAgdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEpTU3RvcmFnZTo6Y2Fu
R2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0ZSosIFN0b3JhZ2UqIGltcGwsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUpCitib29sIEpTU3RvcmFnZTo6Y2FuR2V0SXRlbXNGb3JOYW1lKEV4ZWNTdGF0
ZSogZXhlYywgU3RvcmFnZSogaW1wbCwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAg
ICByZXR1cm4gaW1wbC0+Y29udGFpbnMocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1l
KSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCByZXN1bHQgPSBpbXBsLT5j
b250YWlucyhwcm9wZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpLCBlYyk7CisgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBKU1ZhbHVl
IEpTU3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2Us
IFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBAIC00Nyw3ICs1MCwxMCBAQCBKU1ZhbHVlIEpT
U3RvcmFnZTo6bmFtZUdldHRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgc2xvdEJhc2UsIFBy
b3BlcnR5TmFtZSBwcgogICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSAmJiBhc09iamVjdChw
cm90b3R5cGUpLT5oYXNQcm9wZXJ0eShleGVjLCBwcm9wZXJ0eU5hbWUpKQogICAgICAgICByZXR1
cm4gYXNPYmplY3QocHJvdG90eXBlKS0+Z2V0KGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAgCi0gICAg
cmV0dXJuIGpzU3RyaW5nT3JOdWxsKGV4ZWMsIHRoaXNPYmotPmltcGwoKS0+Z2V0SXRlbShwcm9w
ZXJ0eU5hbWVUb1N0cmluZyhwcm9wZXJ0eU5hbWUpKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBqc1N0cmluZ09yTnVsbChleGVjLCB0aGlzT2JqLT5p
bXBsKCktPmdldEl0ZW0ocHJvcGVydHlOYW1lVG9TdHJpbmcocHJvcGVydHlOYW1lKSwgZWMpKTsK
KyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IGJvb2wgSlNTdG9yYWdlOjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSog
ZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKQEAgLTY0LDcgKzcwLDkgQEAgYm9vbCBK
U1N0b3JhZ2U6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBQ
cm9wZXJ0eU5hbWUgcHJvcGUKICAgICBpZiAocHJvdG90eXBlLmlzT2JqZWN0KCkgJiYgYXNPYmpl
Y3QocHJvdG90eXBlKS0+aGFzUHJvcGVydHkoZXhlYywgcHJvcGVydHlOYW1lKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgdGhpc09iamVjdC0+bV9pbXBsLT5yZW1vdmVJdGVtKHByb3Bl
cnR5TmFtZVRvU3RyaW5nKHByb3BlcnR5TmFtZSkpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIHRoaXNPYmplY3QtPm1faW1wbC0+cmVtb3ZlSXRlbShwcm9wZXJ0eU5hbWVUb1N0cmlu
Zyhwcm9wZXJ0eU5hbWUpLCBlYyk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNzYsOSArODQsMTcgQEAgYm9vbCBKU1N0b3JhZ2U6OmRl
bGV0ZVByb3BlcnR5QnlJbmRleChKU0NlbGwqIGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgdW5zaWdu
ZWQgcHIKIHZvaWQgSlNTdG9yYWdlOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKEpTT2JqZWN0KiBvYmpl
Y3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVu
dW1lcmF0aW9uTW9kZSBtb2RlKQogewogICAgIEpTU3RvcmFnZSogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU1N0b3JhZ2UqPihvYmplY3QpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHRoaXNPYmplY3Qt
Pm1faW1wbC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKQotICAgICAgICBwcm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyKGV4ZWMsIHRoaXNPYmpl
Y3QtPm1faW1wbC0+a2V5KGkpKSk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgdW5z
aWduZWQgbGVuZ3RoID0gdGhpc09iamVjdC0+bV9pbXBsLT5sZW5ndGgoZWMpOworICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm47CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIHByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgdGhpc09iamVjdC0+
bV9pbXBsLT5rZXkoaSwgZWMpKSk7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAogICAgIEJhc2U6OmdldE93blByb3BlcnR5TmFtZXModGhpc09iamVj
dCwgZXhlYywgcHJvcGVydHlOYW1lcywgbW9kZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCmluZGV4IGNkOWZiMTYz
MjM4ZjYwNTZhMDRiMzk1NGFlYTlkOWM2NTc5NzUwYzcuLmIwZmE4ZjNkZDMwNWY1NDI2YmI5ZTYx
NTdmM2MxMjBlYzQwMDhlN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCkBAIC0zNiwxOSArMzYsMzIgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCit0ZW1wbGF0ZTxjbGFzcyBUPgorc3RhdGljIHY4OjpIYW5kbGU8
VD4gc2V0RE9NRXhjZXB0aW9uKEV4Y2VwdGlvbkNvZGUgZWMsIGNvbnN0IHY4OjpBY2Nlc3Nvcklu
Zm8mIGluZm8pCit7CisgICAgc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgcmV0dXJuIHY4OjpIYW5kbGU8VD4oKTsKK30KKwogLy8gR2V0IGFuIGFycmF5IGNvbnRh
aW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJvcGVydGllcyBpbiBhIGNvbGxlY3Rpb24uCiB2
ODo6SGFuZGxlPHY4OjpBcnJheT4gVjhTdG9yYWdlOjpuYW1lZFByb3BlcnR5RW51bWVyYXRvcihj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogewogICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBW
OFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwotICAgIHVuc2lnbmVkIGludCBsZW5n
dGggPSBzdG9yYWdlLT5sZW5ndGgoKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdG9yYWdlLT5sZW5ndGgoZWMpOworICAgIGlmIChlYykKKyAgICAg
ICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbjx2ODo6QXJyYXk+KGVjLCBpbmZvKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBT
dHJpbmcga2V5ID0gc3RvcmFnZS0+a2V5KGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBTdHJpbmcga2V5ID0gc3RvcmFnZS0+a2V5KGksIGVj
KTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbjx2
ODo6QXJyYXk+KGVjLCBpbmZvKTsKICAgICAgICAgQVNTRVJUKCFrZXkuaXNOdWxsKCkpOwotICAg
ICAgICBTdHJpbmcgdmFsID0gc3RvcmFnZS0+Z2V0SXRlbShrZXkpOworICAgICAgICBTdHJpbmcg
dmFsID0gc3RvcmFnZS0+Z2V0SXRlbShrZXksIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAg
ICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbjx2ODo6QXJyYXk+KGVjLCBpbmZvKTsKICAgICAg
ICAgcHJvcGVydGllcy0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHY4U3Ry
aW5nKGtleSwgaW5mby5HZXRJc29sYXRlKCkpKTsKICAgICB9Ci0KICAgICByZXR1cm4gcHJvcGVy
dGllczsKIH0KIApAQCAtNTcsMTAgKzcwLDE4IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gc3RvcmFnZUdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYW1lLCBjb25zdCB2CiAg
ICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4U3RvcmFnZTo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7
CiAgICAgU3RyaW5nIG5hbWUgPSB0b1dlYkNvcmVTdHJpbmcodjhOYW1lKTsKIAotICAgIGlmIChu
YW1lICE9ICJsZW5ndGgiICYmIHN0b3JhZ2UtPmNvbnRhaW5zKG5hbWUpKQotICAgICAgICByZXR1
cm4gdjhTdHJpbmcoc3RvcmFnZS0+Z2V0SXRlbShuYW1lKSwgaW5mby5HZXRJc29sYXRlKCkpOwot
Ci0gICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CisgICAgaWYgKG5hbWUgPT0gImxlbmd0aCIpCisg
ICAgICAgIHJldHVybiB2OFVuZGVmaW5lZCgpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIGJvb2wgZm91bmQgPSBzdG9yYWdlLT5jb250YWlucyhuYW1lLCBlYyk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uKGVjLCBpbmZvLkdldElzb2xhdGUoKSk7
CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIHY4VW5kZWZpbmVkKCk7CisgICAgU3Ry
aW5nIHJlc3VsdCA9IHN0b3JhZ2UtPmdldEl0ZW0obmFtZSwgZWMpOworICAgIGlmIChlYykKKyAg
ICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihlYywgaW5mby5HZXRJc29sYXRlKCkpOworICAg
IHJldHVybiB2OFN0cmluZyhyZXN1bHQsIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IFY4U3RvcmFnZTo6aW5kZXhlZFByb3BlcnR5R2V0dGVyKHVpbnQzMl90
IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtODUsMTAgKzEwNiwxNSBA
QCB2ODo6SGFuZGxlPHY4OjpJbnRlZ2VyPiBWOFN0b3JhZ2U6Om5hbWVkUHJvcGVydHlRdWVyeSh2
ODo6TG9jYWw8djg6OlN0cmluZz4gdjhOYQogICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFN0b3Jh
Z2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1lID0gdG9XZWJDb3Jl
U3RyaW5nKHY4TmFtZSk7CiAKLSAgICBpZiAobmFtZSAhPSAibGVuZ3RoIiAmJiBzdG9yYWdlLT5j
b250YWlucyhuYW1lKSkKLSAgICAgICAgcmV0dXJuIHY4SW50ZWdlcigwLCBpbmZvLkdldElzb2xh
dGUoKSk7Ci0KLSAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4oKTsKKyAgICBpZiAo
bmFtZSA9PSAibGVuZ3RoIikKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkludGVnZXI+
KCk7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgYm9vbCBmb3VuZCA9IHN0b3JhZ2Ut
PmNvbnRhaW5zKG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiBzZXRET01F
eGNlcHRpb248djg6OkludGVnZXI+KGVjLCBpbmZvKTsKKyAgICBpZiAoIWZvdW5kKQorICAgICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6SW50ZWdlcj4oKTsKKyAgICByZXR1cm4gdjhJbnRlZ2Vy
KDAsIGluZm8uR2V0SXNvbGF0ZSgpKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBzdG9yYWdlU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUsIHY4OjpMb2NhbDx2
ODo6VmFsdWU+IHY4VmFsdWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCkBAIC0xMzAs
MTIgKzE1NiwxNiBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6Qm9vbGVhbj4gc3RvcmFnZURlbGV0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmFtZSwgY29ucwogICAgIFN0b3JhZ2UqIHN0b3Jh
Z2UgPSBWOFN0b3JhZ2U6OnRvTmF0aXZlKGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1l
ID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7CiAgICAgCi0gICAgaWYgKHN0b3JhZ2UtPmNvbnRh
aW5zKG5hbWUpKSB7Ci0gICAgICAgIHN0b3JhZ2UtPnJlbW92ZUl0ZW0obmFtZSk7Ci0gICAgICAg
IHJldHVybiB2OEJvb2xlYW4odHJ1ZSwgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIH0KLQotICAg
IHJldHVybiB2ODo6SGFuZGxlPHY4OjpCb29sZWFuPigpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGJvb2wgZm91bmQgPSBzdG9yYWdlLT5jb250YWlucyhuYW1lLCBlYyk7CisgICAg
aWYgKGVjKQorICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uPHY4OjpCb29sZWFuPihlYywg
aW5mbyk7CisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OkJv
b2xlYW4+KCk7CisgICAgc3RvcmFnZS0+cmVtb3ZlSXRlbShuYW1lLCBlYyk7CisgICAgaWYgKGVj
KQorICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9uPHY4OjpCb29sZWFuPihlYywgaW5mbyk7
CisgICAgcmV0dXJuIHY4Qm9vbGVhbih0cnVlLCBpbmZvLkdldElzb2xhdGUoKSk7CiB9CiAKIHY4
OjpIYW5kbGU8djg6OkJvb2xlYW4+IFY4U3RvcmFnZTo6aW5kZXhlZFByb3BlcnR5RGVsZXRlcih1
aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01TdG9yYWdlQWdlbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKaW5k
ZXggZWJkZjFmMzk1ODAwOTVhNWYzNmFkOWQyM2ZhY2VmYTAyZDBiYjkzZC4uNWQzMDU4OTBjNjcy
ODA5MGM1NzRjNmU2M2YxNDAxNjE1MjdmMDk1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VBZ2VudC5jcHAKQEAgLTEyMCwxMSArMTIw
LDE3IEBAIHZvaWQgSW5zcGVjdG9yRE9NU3RvcmFnZUFnZW50OjpnZXRET01TdG9yYWdlRW50cmll
cyhFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYKICAgICBGcmFtZSogZnJhbWUgPSBzdG9yYWdl
UmVzb3VyY2UtPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAKKworICAgIC8vIEZJWE1FOiBFeGNlcHRpb25zIGFyZSBub3QgcmVwb3J0ZWQgaGVyZS4K
KyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdG9yYWdlQXJlYSogc3RvcmFnZUFyZWEg
PSBzdG9yYWdlUmVzb3VyY2UtPnN0b3JhZ2VBcmVhKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHN0b3JhZ2VBcmVhLT5sZW5ndGgoZnJhbWUpOyArK2kpIHsKLSAgICAgICAgU3RyaW5n
IG5hbWUoc3RvcmFnZUFyZWEtPmtleShpLCBmcmFtZSkpOwotICAgICAgICBTdHJpbmcgdmFsdWUo
c3RvcmFnZUFyZWEtPmdldEl0ZW0obmFtZSwgZnJhbWUpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RvcmFnZUFyZWEtPmxlbmd0aChlYywgZnJhbWUpOyArK2kpIHsKKyAgICAgICAg
U3RyaW5nIG5hbWUoc3RvcmFnZUFyZWEtPmtleShpLCBlYywgZnJhbWUpKTsKKyAgICAgICAgaWYg
KGVjKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcgdmFsdWUoc3RvcmFnZUFy
ZWEtPmdldEl0ZW0obmFtZSwgZWMsIGZyYW1lKSk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgUmVmUHRyPFR5cGVCdWlsZGVyOjpBcnJheTxTdHJpbmc+ID4g
ZW50cnkgPSBUeXBlQnVpbGRlcjo6QXJyYXk8U3RyaW5nPjo6Y3JlYXRlKCk7CiAgICAgICAgIGVu
dHJ5LT5hZGRJdGVtKG5hbWUpOwogICAgICAgICBlbnRyeS0+YWRkSXRlbSh2YWx1ZSk7CkBAIC0x
NDcsOCArMTUzLDkgQEAgdm9pZCBJbnNwZWN0b3JET01TdG9yYWdlQWdlbnQ6OnJlbW92ZURPTVN0
b3JhZ2VJdGVtKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJgogewogICAgIEluc3BlY3RvckRP
TVN0b3JhZ2VSZXNvdXJjZSogc3RvcmFnZVJlc291cmNlID0gZ2V0RE9NU3RvcmFnZVJlc291cmNl
Rm9ySWQoc3RvcmFnZUlkKTsKICAgICBpZiAoc3RvcmFnZVJlc291cmNlKSB7Ci0gICAgICAgIHN0
b3JhZ2VSZXNvdXJjZS0+c3RvcmFnZUFyZWEoKS0+cmVtb3ZlSXRlbShrZXksIHN0b3JhZ2VSZXNv
dXJjZS0+ZnJhbWUoKSk7Ci0gICAgICAgICpzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgRXhjZXB0
aW9uQ29kZSBleGNlcHRpb24gPSAwOworICAgICAgICBzdG9yYWdlUmVzb3VyY2UtPnN0b3JhZ2VB
cmVhKCktPnJlbW92ZUl0ZW0oa2V5LCBleGNlcHRpb24sIHN0b3JhZ2VSZXNvdXJjZS0+ZnJhbWUo
KSk7CisgICAgICAgICpzdWNjZXNzID0gIWV4Y2VwdGlvbjsKICAgICB9IGVsc2UKICAgICAgICAg
KnN1Y2Nlc3MgPSBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9N
V2luZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBmYWE0
YmEwNDg2MWM4ZjM3Y2U2OTgwYzU4OGEyYjdkMmUyYzk5N2ViLi5hODRmZWM1OWM5NWViODUxYzRi
YTM3OWRmYzE4YTI3NWUzZjJmZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RP
TVdpbmRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC03
NDUsMTQgKzc0NSwyMyBAQCBTdG9yYWdlKiBET01XaW5kb3c6OnNlc3Npb25TdG9yYWdlKEV4Y2Vw
dGlvbkNvZGUmIGVjKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAo
bV9zZXNzaW9uU3RvcmFnZSkKKyAgICBpZiAobV9zZXNzaW9uU3RvcmFnZSkgeworICAgICAgICBp
ZiAoIW1fc2Vzc2lvblN0b3JhZ2UtPmFyZWEoKS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkg
eworICAgICAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgfQogICAgICAgICByZXR1cm4gbV9zZXNzaW9uU3RvcmFnZS5nZXQoKTsKKyAgICB9
CiAKICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgUmVmUHRyPFN0b3JhZ2VBcmVhPiBzdG9yYWdlQXJlYSA9
IHBhZ2UtPnNlc3Npb25TdG9yYWdlKCktPnN0b3JhZ2VBcmVhKGRvY3VtZW50LT5zZWN1cml0eU9y
aWdpbigpKTsKKyAgICBpZiAoIXN0b3JhZ2VBcmVhLT5jYW5BY2Nlc3NTdG9yYWdlKG1fZnJhbWUp
KSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRVc2VET01TdG9yYWdlKHBhZ2UsIHN0
b3JhZ2VBcmVhLmdldCgpLCBmYWxzZSwgbV9mcmFtZSk7CiAKICAgICBtX3Nlc3Npb25TdG9yYWdl
ID0gU3RvcmFnZTo6Y3JlYXRlKG1fZnJhbWUsIHN0b3JhZ2VBcmVhLnJlbGVhc2UoKSk7CkBAIC03
NzMsOCArNzgyLDEzIEBAIFN0b3JhZ2UqIERPTVdpbmRvdzo6bG9jYWxTdG9yYWdlKEV4Y2VwdGlv
bkNvZGUmIGVjKSBjb25zdAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAobV9s
b2NhbFN0b3JhZ2UpCisgICAgaWYgKG1fbG9jYWxTdG9yYWdlKSB7CisgICAgICAgIGlmICghbV9s
b2NhbFN0b3JhZ2UtPmFyZWEoKS0+Y2FuQWNjZXNzU3RvcmFnZShtX2ZyYW1lKSkgeworICAgICAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQogICAgICAgICByZXR1cm4gbV9sb2NhbFN0b3JhZ2UuZ2V0KCk7CisgICAgfQogCiAgICAgUGFn
ZSogcGFnZSA9IGRvY3VtZW50LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlKQpAQCAtNzg0LDYgKzc5
OCwxMCBAQCBTdG9yYWdlKiBET01XaW5kb3c6OmxvY2FsU3RvcmFnZShFeGNlcHRpb25Db2RlJiBl
YykgY29uc3QKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBSZWZQdHI8U3RvcmFnZUFyZWE+IHN0
b3JhZ2VBcmVhID0gcGFnZS0+Z3JvdXAoKS5sb2NhbFN0b3JhZ2UoKS0+c3RvcmFnZUFyZWEoZG9j
dW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkpOworICAgIGlmICghc3RvcmFnZUFyZWEtPmNhbkFjY2Vz
c1N0b3JhZ2UobV9mcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZFVzZURP
TVN0b3JhZ2UocGFnZSwgc3RvcmFnZUFyZWEuZ2V0KCksIHRydWUsIG1fZnJhbWUpOwogCiAgICAg
bV9sb2NhbFN0b3JhZ2UgPSBTdG9yYWdlOjpjcmVhdGUobV9mcmFtZSwgc3RvcmFnZUFyZWEucmVs
ZWFzZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuY3BwCmluZGV4IDQ0ZDBiMjc2NDViYmQz
NjMxMGVkYzEzMzVkNTZjNGNhNzMwZTJmN2MuLjc5M2E4MzZkNzMwNzFlMzEwOGRlMjY4MTY1MjFm
MDYzNjQyNWNlOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlLmNwcApAQCAtMjksNyArMjks
NiBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCi0jaW5jbHVkZSAiU3RvcmFnZUFyZWEuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01Niw2MSArNTUs
NCBAQCBTdG9yYWdlOjp+U3RvcmFnZSgpCiAgICAgICAgIG1fc3RvcmFnZUFyZWEtPmRlY3JlbWVu
dEFjY2Vzc0NvdW50KCk7CiB9CiAKLXVuc2lnbmVkIFN0b3JhZ2U6Omxlbmd0aCgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT5wYWdlKCkgfHwgbV9zdG9yYWdlQXJlYS0+
ZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUobV9mcmFtZSkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmxlbmd0aChtX2ZyYW1lKTsKLX0KLQot
U3RyaW5nIFN0b3JhZ2U6OmtleSh1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoIW1f
ZnJhbWUgfHwgIW1fZnJhbWUtPnBhZ2UoKSB8fCBtX3N0b3JhZ2VBcmVhLT5kaXNhYmxlZEJ5UHJp
dmF0ZUJyb3dzaW5nSW5GcmFtZShtX2ZyYW1lKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwot
Ci0gICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmtleShpbmRleCwgbV9mcmFtZSk7Ci19Ci0KLVN0
cmluZyBTdG9yYWdlOjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdAotewotICAgIGlm
ICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+cGFnZSgpIHx8IG1fc3RvcmFnZUFyZWEtPmRpc2FibGVk
QnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKG1fZnJhbWUpKQotICAgICAgICByZXR1cm4gU3RyaW5n
KCk7Ci0KLSAgICByZXR1cm4gbV9zdG9yYWdlQXJlYS0+Z2V0SXRlbShrZXksIG1fZnJhbWUpOwot
fQotCi12b2lkIFN0b3JhZ2U6OnNldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmlu
ZyYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoIW1f
ZnJhbWUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3RvcmFnZUFyZWEtPnNldEl0ZW0oa2V5
LCB2YWx1ZSwgZWMsIG1fZnJhbWUpOwotfQotCi12b2lkIFN0b3JhZ2U6OnJlbW92ZUl0ZW0oY29u
c3QgU3RyaW5nJiBrZXkpCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N0b3JhZ2VBcmVhLT5yZW1vdmVJdGVtKGtleSwgbV9mcmFtZSk7Ci19Ci0KLXZvaWQg
U3RvcmFnZTo6Y2xlYXIoKQotewotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9zdG9yYWdlQXJlYS0+Y2xlYXIobV9mcmFtZSk7Ci19Ci0KLWJvb2wgU3RvcmFnZTo6
Y29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZyYW1lIHx8
ICFtX2ZyYW1lLT5wYWdlKCkgfHwgbV9zdG9yYWdlQXJlYS0+ZGlzYWJsZWRCeVByaXZhdGVCcm93
c2luZ0luRnJhbWUobV9mcmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBtX3N0b3JhZ2VBcmVhLT5jb250YWlucyhrZXksIG1fZnJhbWUpOwotfQotCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU3RvcmFnZS5oCmluZGV4IDVlYWJmMGZmNjEwMTEzZjQwZDdlYzBmY2UxODBkODdjYTYx
NWU0MGQuLmMyNDk2YmQ0OGYxZDYxNjA0NzY1MzhkNjdmNTJjYjY0YTgyOWQwNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIFN0b3JhZ2VfaAog
CiAjaW5jbHVkZSAiRE9NV2luZG93UHJvcGVydHkuaCIKKyNpbmNsdWRlICJTdG9yYWdlQXJlYS5o
IgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkBAIC0zNCw3ICszNSw2IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBTdG9yYWdlQXJlYTsKICAgICB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiAgICAgY2xhc3MgU3RvcmFnZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFN0b3JhZ2U+LCBwdWJsaWMgRE9NV2luZG93UHJvcGVydHkgewpAQCAtNDIsMTQg
KzQyLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
U3RvcmFnZT4gY3JlYXRlKEZyYW1lKiwgUGFzc1JlZlB0cjxTdG9yYWdlQXJlYT4pOwogICAgICAg
ICB+U3RvcmFnZSgpOwogCi0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotICAgICAg
ICBTdHJpbmcga2V5KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGdldEl0
ZW0oY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0SXRlbShjb25zdCBTdHJp
bmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2
b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgY2xlYXIoKTsKLQot
ICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5KSBjb25zdDsKKyAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdCB7IHJldHVybiBtX3N0b3Jh
Z2VBcmVhLT5sZW5ndGgoZWMsIG1fZnJhbWUpOyB9CisgICAgICAgIFN0cmluZyBrZXkodW5zaWdu
ZWQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdCB7IHJldHVybiBtX3N0b3JhZ2VBcmVh
LT5rZXkoaW5kZXgsIGVjLCBtX2ZyYW1lKTsgfQorICAgICAgICBTdHJpbmcgZ2V0SXRlbShjb25z
dCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFn
ZUFyZWEtPmdldEl0ZW0oa2V5LCBlYywgbV9mcmFtZSk7IH0KKyAgICAgICAgdm9pZCBzZXRJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyBtX3N0b3JhZ2VBcmVhLT5zZXRJdGVtKGtleSwgdmFsdWUsIGVjLCBtX2ZyYW1lKTsgfQor
ICAgICAgICB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUm
IGVjKSB7IG1fc3RvcmFnZUFyZWEtPnJlbW92ZUl0ZW0oa2V5LCBlYywgbV9mcmFtZSk7IH0KKyAg
ICAgICAgdm9pZCBjbGVhcihFeGNlcHRpb25Db2RlJiBlYykgeyBtX3N0b3JhZ2VBcmVhLT5jbGVh
cihlYywgbV9mcmFtZSk7IH0KKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBTdHJpbmcmIGtl
eSwgRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0IHsgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmNvbnRh
aW5zKGtleSwgZWMsIG1fZnJhbWUpOyB9CiAKICAgICAgICAgU3RvcmFnZUFyZWEqIGFyZWEoKSBj
b25zdCB7IHJldHVybiBtX3N0b3JhZ2VBcmVhLmdldCgpOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0
b3JhZ2UuaWRsCmluZGV4IDU1ZGE1NTUwNTVmMmUyOTU5M2M1OGU2NDVkNGEyNDA5ZmJkZTNmZmQu
LjU4YjBlMmMyNjQwNGJmODYzOGExODZhZjc0NDliMmQ2ZDVkYjk2ZTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlLmlkbApAQCAtMzAsMTIgKzMwLDE2IEBACiAgICAgQ3VzdG9tRW51bWVyYXRl
UHJvcGVydHksCiAgICAgQ3VzdG9tTmFtZWRTZXR0ZXIsCiBdIGludGVyZmFjZSBTdG9yYWdlIHsK
LSAgICBbTm90RW51bWVyYWJsZV0gcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmcgbGVu
Z3RoOwotICAgIFtOb3RFbnVtZXJhYmxlLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGxd
IERPTVN0cmluZyBrZXkoaW4gdW5zaWduZWQgbG9uZyBpbmRleCk7Ci0gICAgW05vdEVudW1lcmFi
bGUsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIGdldEl0ZW0oaW4g
RE9NU3RyaW5nIGtleSk7CisgICAgW05vdEVudW1lcmFibGVdIHJlYWRvbmx5IGF0dHJpYnV0ZSB1
bnNpZ25lZCBsb25nIGxlbmd0aCBnZXR0ZXIgcmFpc2VzKERPTUV4Y2VwdGlvbik7CisgICAgW05v
dEVudW1lcmFibGUsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbF0gRE9NU3RyaW5nIGtl
eShpbiB1bnNpZ25lZCBsb25nIGluZGV4KQorICAgICAgICByYWlzZXMoRE9NRXhjZXB0aW9uKTsK
KyAgICBbTm90RW51bWVyYWJsZSwgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsXSBET01T
dHJpbmcgZ2V0SXRlbShpbiBET01TdHJpbmcga2V5KQorICAgICAgICByYWlzZXMoRE9NRXhjZXB0
aW9uKTsKICAgICBbTm90RW51bWVyYWJsZV0gdm9pZCBzZXRJdGVtKGluIERPTVN0cmluZyBrZXks
IGluIERPTVN0cmluZyBkYXRhKSAKICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7Ci0gICAg
W05vdEVudW1lcmFibGVdIHZvaWQgcmVtb3ZlSXRlbShpbiBET01TdHJpbmcga2V5KTsKLSAgICBb
Tm90RW51bWVyYWJsZV0gdm9pZCBjbGVhcigpOworICAgIFtOb3RFbnVtZXJhYmxlXSB2b2lkIHJl
bW92ZUl0ZW0oaW4gRE9NU3RyaW5nIGtleSkKKyAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7
CisgICAgW05vdEVudW1lcmFibGVdIHZvaWQgY2xlYXIoKQorICAgICAgICByYWlzZXMoRE9NRXhj
ZXB0aW9uKTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFn
ZUFyZWEuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWEuaAppbmRleCBmNjlk
N2I1M2FjMzIwNmY4OTVjMjU4YThkMjFiMDI2MjE5MTc0MjdjLi45NzAzNGM4ODkyN2UyOGUwMTAw
NDA1MTU2ZGFlMzk1MWEwOGRmOTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1N0b3JhZ2VBcmVhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYS5o
CkBAIC00NiwxNSArNDYsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRo
ZSBIVE1MNSBET00gU3RvcmFnZSBBUEkKICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNz
IERvY3VtZW50IGluc3RlYWQgb2YgRnJhbWUuIEFsc28sIHRoYXQgcGFyYW1ldGVyIHNob3VsZCBn
byBmaXJzdC4KLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRnJhbWUqIHNvdXJjZUZy
YW1lKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNpZ25lZCBpbmRl
eCwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aChFeGNlcHRpb25Db2RlJiwgRnJhbWUq
IHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGtleSh1bnNp
Z25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3QgPSAw
OworICAgICAgICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNl
cHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBF
eGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCByZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpID0g
MDsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyKEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAwOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBz
b3VyY2VGcmFtZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShj
b25zdCBTdHJpbmcmIGtleSwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgPSAw
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnMoY29uc3QgU3RyaW5n
JiBrZXksIEV4Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0ID0gMDsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29u
c3QgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBj
YW5BY2Nlc3NTdG9yYWdlKEZyYW1lKikgY29uc3QgPSAwOwogCiAgICAgICAgIHZpcnR1YWwgc2l6
ZV90IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdCA9IDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmNwcAppbmRleCAzN2M0ZjU5NmNhNTcwMTczYTE4MjI5
Nzc3ZWYzYTczMzUxNDYyNTI2Li44ZjU3ZGI3NzdjNTFlYWMyYmYxN2VmNDMwMTRiN2Q5MmQ3Y2Rm
OWI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3JhZ2VBcmVhSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJlYUltcGwuY3BwCkBAIC0x
MDQsMTAgKzEwNCwxMyBAQCBTdG9yYWdlQXJlYUltcGw6OlN0b3JhZ2VBcmVhSW1wbChTdG9yYWdl
QXJlYUltcGwqIGFyZWEpCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogfQogCitib29sIFN0
b3JhZ2VBcmVhSW1wbDo6Y2FuQWNjZXNzU3RvcmFnZShGcmFtZSogZnJhbWUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZyYW1lICYmIGZyYW1lLT5wYWdlKCk7Cit9CisKIGJvb2wgU3RvcmFnZUFyZWFJ
bXBsOjpkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSogZnJhbWUp
IGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAoIWZyYW1lLT5wYWdlKCktPnNldHRpbmdzKCktPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX3N0b3JhZ2VUeXBlICE9IExv
Y2FsU3RvcmFnZSkKQEAgLTExNSwyNCArMTE4LDQ4IEBAIGJvb2wgU3RvcmFnZUFyZWFJbXBsOjpk
aXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSogZnJhbWUpIGNvbnN0
CiAgICAgcmV0dXJuICFTY2hlbWVSZWdpc3RyeTo6YWxsb3dzTG9jYWxTdG9yYWdlQWNjZXNzSW5Q
cml2YXRlQnJvd3NpbmcoZnJhbWUtPmRvY3VtZW50KCktPnNlY3VyaXR5T3JpZ2luKCktPnByb3Rv
Y29sKCkpOwogfQogCi11bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aChGcmFtZSopIGNv
bnN0Cit1bnNpZ25lZCBTdG9yYWdlQXJlYUltcGw6Omxlbmd0aChFeGNlcHRpb25Db2RlJiBlYywg
RnJhbWUqIGZyYW1lKSBjb25zdAogeworICAgIGVjID0gMDsKKyAgICBpZiAoIWNhbkFjY2Vzc1N0
b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgaWYgKGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGZy
YW1lKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAg
ICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKICAgICByZXR1cm4gbV9zdG9yYWdlTWFw
LT5sZW5ndGgoKTsKIH0KIAotU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6a2V5KHVuc2lnbmVkIGlu
ZGV4LCBGcmFtZSopIGNvbnN0CitTdHJpbmcgU3RvcmFnZUFyZWFJbXBsOjprZXkodW5zaWduZWQg
aW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpIGNvbnN0CiB7CisgICAgZWMg
PSAwOworICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpIHsKKyAgICAgICAgZWMgPSBT
RUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICB9CisgICAgaWYgKGRp
c2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGZyYW1lKSkKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOworCiAgICAgQVNTRVJUKCFtX2lzU2h1dGRvd24pOwogICAgIGJsb2NrVW50aWxJbXBv
cnRDb21wbGV0ZSgpOwogCiAgICAgcmV0dXJuIG1fc3RvcmFnZU1hcC0+a2V5KGluZGV4KTsKIH0K
IAotU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJh
bWUqKSBjb25zdAorU3RyaW5nIFN0b3JhZ2VBcmVhSW1wbDo6Z2V0SXRlbShjb25zdCBTdHJpbmcm
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkgY29uc3QKIHsKKyAgICBlYyA9
IDA7CisgICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkgeworICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAgICBpZiAoZGlz
YWJsZWRCeVByaXZhdGVCcm93c2luZ0luRnJhbWUoZnJhbWUpKQorICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9y
dENvbXBsZXRlKCk7CiAKQEAgLTE0MSw2ICsxNjgsMTIgQEAgU3RyaW5nIFN0b3JhZ2VBcmVhSW1w
bDo6Z2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqKSBjb25zdAogCiB2b2lkIFN0b3Jh
Z2VBcmVhSW1wbDo6c2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkKIHsKKyAgICBlYyA9IDA7CisgICAg
aWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsK
ICAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29tcGxl
dGUoKTsKQEAgLTE2OSw4ICsyMDIsMTQgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0o
Y29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFN0cmluZyYgdmFsdWUsIEV4Y2VwdGlvbkMKICAgICBT
dG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChrZXksIG9sZFZhbHVlLCB2YWx1ZSwgbV9z
dG9yYWdlVHlwZSwgbV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgZnJhbWUpOwogfQogCi12b2lkIFN0
b3JhZ2VBcmVhSW1wbDo6cmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIGZyYW1l
KQordm9pZCBTdG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4
Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7CisgICAgZWMgPSAwOworICAgIGlmICgh
Y2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpIHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQoIW1faXNTaHV0ZG93bik7CiAgICAg
YmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKQEAgLTE5MCw4ICsyMjksMTQgQEAgdm9pZCBT
dG9yYWdlQXJlYUltcGw6OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFt
ZSkKICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChrZXksIG9sZFZhbHVlLCBT
dHJpbmcoKSwgbV9zdG9yYWdlVHlwZSwgbV9zZWN1cml0eU9yaWdpbi5nZXQoKSwgZnJhbWUpOwog
fQogCi12b2lkIFN0b3JhZ2VBcmVhSW1wbDo6Y2xlYXIoRnJhbWUqIGZyYW1lKQordm9pZCBTdG9y
YWdlQXJlYUltcGw6OmNsZWFyKEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7Cisg
ICAgZWMgPSAwOworICAgIGlmICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpIHsKKyAgICAgICAg
ZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBBU1NFUlQo
IW1faXNTaHV0ZG93bik7CiAgICAgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCk7CiAKQEAgLTIw
OSw4ICsyNTQsMTYgQEAgdm9pZCBTdG9yYWdlQXJlYUltcGw6OmNsZWFyKEZyYW1lKiBmcmFtZSkK
ICAgICBTdG9yYWdlRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaChTdHJpbmcoKSwgU3RyaW5nKCks
IFN0cmluZygpLCBtX3N0b3JhZ2VUeXBlLCBtX3NlY3VyaXR5T3JpZ2luLmdldCgpLCBmcmFtZSk7
CiB9CiAKLWJvb2wgU3RvcmFnZUFyZWFJbXBsOjpjb250YWlucyhjb25zdCBTdHJpbmcmIGtleSwg
RnJhbWUqKSBjb25zdAorYm9vbCBTdG9yYWdlQXJlYUltcGw6OmNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKSBjb25zdAogeworICAgIGVj
ID0gMDsKKyAgICBpZiAoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChkaXNh
YmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShmcmFtZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKwogICAgIEFTU0VSVCghbV9pc1NodXRkb3duKTsKICAgICBibG9ja1VudGlsSW1wb3J0Q29t
cGxldGUoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TdG9yYWdlQXJl
YUltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU3RvcmFnZUFyZWFJbXBsLmgKaW5kZXgg
MWYyYjdlMDgwMjQyMDZkYjMyZWVhZGI5YjhjZTlhNTQ0ZTRkZDczZi4uMzg0YWY1ZjdmM2ZjMDZh
NGJiN2IwMTQwY2I4YmRmN2VkOGJlMjQ5ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TdG9yYWdlQXJlYUltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1N0b3Jh
Z2VBcmVhSW1wbC5oCkBAIC00NCwxNSArNDQsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIH5TdG9yYWdlQXJlYUltcGwoKTsKIAogICAgICAgICAvLyBUaGUgSFRNTDUg
RE9NIFN0b3JhZ2UgQVBJIChhbmQgY29udGFpbnMpCi0gICAgICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5n
IGtleSh1bnNpZ25lZCBpbmRleCwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKLSAgICAgICAg
dmlydHVhbCBTdHJpbmcgZ2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgRnJhbWUqIHNvdXJjZUZy
YW1lKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRXhjZXB0aW9uQ29k
ZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGtl
eSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4
Y2VwdGlvbkNvZGUmLCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0SXRlbShjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBy
ZW1vdmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoRnJhbWUqIHNvdXJjZUZyYW1lKTsKLSAgICAgICAgdmlydHVh
bCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlSXRlbShjb25zdCBTdHJpbmcmIGtleSwg
RXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3VyY2VGcmFtZSk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBjbGVhcihFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKTsKKyAgICAgICAgdmly
dHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJh
bWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIGJvb2wgZGlzYWJsZWRC
eVByaXZhdGVCcm93c2luZ0luRnJhbWUoY29uc3QgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqIHNvdXJjZUZyYW1l
KSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHNpemVfdCBtZW1vcnlCeXRlc1VzZWRCeUNhY2hl
KCkgY29uc3Q7CiAKQEAgLTc2LDYgKzc2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZvaWQgYmxvY2tVbnRpbEltcG9ydENvbXBsZXRlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
Y2xvc2VEYXRhYmFzZVRpbWVyRmlyZWQoVGltZXI8U3RvcmFnZUFyZWFJbXBsPiopOworICAgICAg
ICBib29sIGRpc2FibGVkQnlQcml2YXRlQnJvd3NpbmdJbkZyYW1lKGNvbnN0IEZyYW1lKiBzb3Vy
Y2VGcmFtZSkgY29uc3Q7CiAKICAgICAgICAgU3RvcmFnZVR5cGUgbV9zdG9yYWdlVHlwZTsKICAg
ICAgICAgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBtX3NlY3VyaXR5T3JpZ2luOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5LmNwcAppbmRleCAyZTMzZDA4
ZmI0YWI3OWViNWMyYjZkMGZkZWZjMTgwZDZlZjkzZWE0Li5lMWIzNWU5MjYwNGI4MDc2MjJhZDhi
MDU2YTNhNjczM2VmODFhNjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9TdG9yYWdlQXJlYVByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9T
dG9yYWdlQXJlYVByb3h5LmNwcApAQCAtNTMsNiArNTMsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBTdG9yYWdlQXJlYVByb3h5OjpTdG9yYWdlQXJlYVByb3h5KFdlYktpdDo6V2ViU3RvcmFnZUFy
ZWEqIHN0b3JhZ2VBcmVhLCBTdG9yYWdlVHlwZSBzdG9yYWdlVHlwZSkKICAgICA6IG1fc3RvcmFn
ZUFyZWEoYWRvcHRQdHIoc3RvcmFnZUFyZWEpKQogICAgICwgbV9zdG9yYWdlVHlwZShzdG9yYWdl
VHlwZSkKKyAgICAsIG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZFJlc3VsdChmYWxzZSkKKyAgICAs
IG1fY2FuQWNjZXNzU3RvcmFnZUNhY2hlZEZyYW1lKDApCiB7CiB9CiAKQEAgLTYwLDY0ICs2Miw4
OCBAQCBTdG9yYWdlQXJlYVByb3h5Ojp+U3RvcmFnZUFyZWFQcm94eSgpCiB7CiB9CiAKLXVuc2ln
bmVkIFN0b3JhZ2VBcmVhUHJveHk6Omxlbmd0aChGcmFtZSogZnJhbWUpIGNvbnN0Cit1bnNpZ25l
ZCBTdG9yYWdlQXJlYVByb3h5OjpsZW5ndGgoRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFt
ZSkgY29uc3QKIHsKLSAgICBpZiAoY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpCi0gICAgICAgIHJl
dHVybiBtX3N0b3JhZ2VBcmVhLT5sZW5ndGgoKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAoIWNh
bkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWMgPSAwOworICAgIHJldHVybiBtX3N0b3JhZ2VB
cmVhLT5sZW5ndGgoKTsKIH0KIAotU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6OmtleSh1bnNpZ25l
ZCBpbmRleCwgRnJhbWUqIGZyYW1lKSBjb25zdAorU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6Omtl
eSh1bnNpZ25lZCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMsIEZyYW1lKiBmcmFtZSkgY29uc3QK
IHsKLSAgICBpZiAoY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpCi0gICAgICAgIHJldHVybiBtX3N0
b3JhZ2VBcmVhLT5rZXkoaW5kZXgpOwotICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIWNh
bkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQorICAgIGVjID0gMDsKKyAgICByZXR1cm4gbV9z
dG9yYWdlQXJlYS0+a2V5KGluZGV4KTsKIH0KIAotU3RyaW5nIFN0b3JhZ2VBcmVhUHJveHk6Omdl
dEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBmcmFtZSkgY29uc3QKK1N0cmluZyBTdG9y
YWdlQXJlYVByb3h5OjpnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBl
YywgRnJhbWUqIGZyYW1lKSBjb25zdAogewotICAgIGlmIChjYW5BY2Nlc3NTdG9yYWdlKGZyYW1l
KSkKLSAgICAgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5KTsKLSAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkgeworICAgICAg
ICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KKyAg
ICBlYyA9IDA7CisgICAgcmV0dXJuIG1fc3RvcmFnZUFyZWEtPmdldEl0ZW0oa2V5KTsKIH0KIAog
dm9pZCBTdG9yYWdlQXJlYVByb3h5OjpzZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBT
dHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKQogewotICAgIGlm
ICghY2FuQWNjZXNzU3RvcmFnZShmcmFtZSkpCi0gICAgICAgIGVjID0gUVVPVEFfRVhDRUVERURf
RVJSOwotICAgIGVsc2UgewotICAgICAgICBXZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1bHQg
cmVzdWx0ID0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0T0s7Ci0gICAgICAgIG1fc3Rv
cmFnZUFyZWEtPnNldEl0ZW0oa2V5LCB2YWx1ZSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpLCBy
ZXN1bHQpOwotICAgICAgICBlYyA9IChyZXN1bHQgPT0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6
UmVzdWx0T0spID8gMCA6IFFVT1RBX0VYQ0VFREVEX0VSUjsKKyAgICBpZiAoIWNhbkFjY2Vzc1N0
b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1
cm47CiAgICAgfQorICAgIFdlYktpdDo6V2ViU3RvcmFnZUFyZWE6OlJlc3VsdCByZXN1bHQgPSBX
ZWJLaXQ6OldlYlN0b3JhZ2VBcmVhOjpSZXN1bHRPSzsKKyAgICBtX3N0b3JhZ2VBcmVhLT5zZXRJ
dGVtKGtleSwgdmFsdWUsIGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKSwgcmVzdWx0KTsKKyAgICBl
YyA9IChyZXN1bHQgPT0gV2ViS2l0OjpXZWJTdG9yYWdlQXJlYTo6UmVzdWx0T0spID8gMCA6IFFV
T1RBX0VYQ0VFREVEX0VSUjsKIH0KIAotdm9pZCBTdG9yYWdlQXJlYVByb3h5OjpyZW1vdmVJdGVt
KGNvbnN0IFN0cmluZyYga2V5LCBGcmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhUHJveHk6
OnJlbW92ZUl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSog
ZnJhbWUpCiB7Ci0gICAgaWYgKCFjYW5BY2Nlc3NTdG9yYWdlKGZyYW1lKSkKKyAgICBpZiAoIWNh
bkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGVjID0gMDsKICAgICBtX3N0b3JhZ2VBcmVhLT5yZW1v
dmVJdGVtKGtleSwgZnJhbWUtPmRvY3VtZW50KCktPnVybCgpKTsKIH0KIAotdm9pZCBTdG9yYWdl
QXJlYVByb3h5OjpjbGVhcihGcmFtZSogZnJhbWUpCit2b2lkIFN0b3JhZ2VBcmVhUHJveHk6OmNs
ZWFyKEV4Y2VwdGlvbkNvZGUmIGVjLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFjYW5BY2Nl
c3NTdG9yYWdlKGZyYW1lKSkKKyAgICBpZiAoIWNhbkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7Cisg
ICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwogICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVj
ID0gMDsKICAgICBtX3N0b3JhZ2VBcmVhLT5jbGVhcihmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkp
OwogfQogCi1ib29sIFN0b3JhZ2VBcmVhUHJveHk6OmNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5
LCBGcmFtZSogZnJhbWUpIGNvbnN0Citib29sIFN0b3JhZ2VBcmVhUHJveHk6OmNvbnRhaW5zKGNv
bnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiBlYywgRnJhbWUqIGZyYW1lKSBjb25zdAog
ewotICAgIHJldHVybiAhZ2V0SXRlbShrZXksIGZyYW1lKS5pc051bGwoKTsKKyAgICBpZiAoIWNh
bkFjY2Vzc1N0b3JhZ2UoZnJhbWUpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiAhZ2V0SXRlbShrZXksIGVjLCBm
cmFtZSkuaXNOdWxsKCk7CiB9CiAKIGJvb2wgU3RvcmFnZUFyZWFQcm94eTo6Y2FuQWNjZXNzU3Rv
cmFnZShGcmFtZSogZnJhbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFmcmFtZS0+cGFnZSgpKQorICAg
IGlmICghZnJhbWUgfHwgIWZyYW1lLT5wYWdlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAobV9jYW5BY2Nlc3NTdG9yYWdlQ2FjaGVkRnJhbWUgPT0gZnJhbWUpCisgICAgICAgIHJl
dHVybiBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRSZXN1bHQ7CiAgICAgV2ViS2l0OjpXZWJGcmFt
ZUltcGwqIHdlYkZyYW1lID0gV2ViS2l0OjpXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7
CiAgICAgV2ViS2l0OjpXZWJWaWV3SW1wbCogd2ViVmlldyA9IHdlYkZyYW1lLT52aWV3SW1wbCgp
OwotICAgIHJldHVybiAhd2ViVmlldy0+cGVybWlzc2lvbkNsaWVudCgpIHx8IHdlYlZpZXctPnBl
cm1pc3Npb25DbGllbnQoKS0+YWxsb3dTdG9yYWdlKHdlYkZyYW1lLCBtX3N0b3JhZ2VUeXBlID09
IExvY2FsU3RvcmFnZSk7CisgICAgYm9vbCByZXN1bHQgPSAhd2ViVmlldy0+cGVybWlzc2lvbkNs
aWVudCgpIHx8IHdlYlZpZXctPnBlcm1pc3Npb25DbGllbnQoKS0+YWxsb3dTdG9yYWdlKHdlYkZy
YW1lLCBtX3N0b3JhZ2VUeXBlID09IExvY2FsU3RvcmFnZSk7CisgICAgbV9jYW5BY2Nlc3NTdG9y
YWdlQ2FjaGVkRnJhbWUgPSBmcmFtZTsKKyAgICBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRSZXN1
bHQgPSByZXN1bHQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc2l6ZV90IFN0b3JhZ2VBcmVh
UHJveHk6Om1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvU3RvcmFnZUFyZWFQcm94eS5oCmluZGV4IGNhZTM1OTM1ODIyMDc5Y2MwMjI5
OTY4OGQ5M2FkNzJlYTM3YTcwYmYuLjRhOTZjMGQ4MTA1NWYxZTdhNzI1NDY4Y2I5ODNmODdlYmRk
ODI4NzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1N0b3JhZ2VBcmVh
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9TdG9yYWdlQXJlYVByb3h5
LmgKQEAgLTQ4LDE1ICs0OCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+U3RvcmFnZUFyZWFQ
cm94eSgpOwogCiAgICAgLy8gVGhlIEhUTUw1IERPTSBTdG9yYWdlIEFQSQotICAgIHZpcnR1YWwg
dW5zaWduZWQgbGVuZ3RoKEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBT
dHJpbmcga2V5KHVuc2lnbmVkIGluZGV4LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OwotICAg
IHZpcnR1YWwgU3RyaW5nIGdldEl0ZW0oY29uc3QgU3RyaW5nJiBrZXksIEZyYW1lKiBzb3VyY2VG
cmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoRXhjZXB0aW9uQ29kZSYs
IEZyYW1lKiBzb3VyY2VGcmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcga2V5KHVuc2ln
bmVkIGluZGV4LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIFN0cmluZyBnZXRJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2Rl
JiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXRlbShj
b25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYsIEZy
YW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZUl0ZW0oY29uc3QgU3Ry
aW5nJiBrZXksIEZyYW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKEZy
YW1lKiBzb3VyY2VGcmFtZSk7Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmlu
ZyYga2V5LCBGcmFtZSogc291cmNlRnJhbWUpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCByZW1v
dmVJdGVtKGNvbnN0IFN0cmluZyYga2V5LCBFeGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZy
YW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoRXhjZXB0aW9uQ29kZSYsIEZyYW1lKiBzb3Vy
Y2VGcmFtZSk7CisgICAgdmlydHVhbCBib29sIGNvbnRhaW5zKGNvbnN0IFN0cmluZyYga2V5LCBF
eGNlcHRpb25Db2RlJiwgRnJhbWUqIHNvdXJjZUZyYW1lKSBjb25zdDsKIAotICAgIHZpcnR1YWwg
Ym9vbCBkaXNhYmxlZEJ5UHJpdmF0ZUJyb3dzaW5nSW5GcmFtZShjb25zdCBGcmFtZSopIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJh
bWUqKSBjb25zdDsKIAogICAgIHZpcnR1YWwgc2l6ZV90IG1lbW9yeUJ5dGVzVXNlZEJ5Q2FjaGUo
KSBjb25zdDsKIApAQCAtNjksMTIgKzY5LDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFdlYktp
dDo6V2ViU3RvcmFnZUFyZWEqIHNvdXJjZUFyZWFJbnN0YW5jZSwgYm9vbCBvcmlnaW5hdGVkSW5Q
cm9jZXNzKTsKIAogcHJpdmF0ZToKLSAgICBib29sIGNhbkFjY2Vzc1N0b3JhZ2UoRnJhbWUqKSBj
b25zdDsKLQogICAgIHN0YXRpYyBib29sIGlzRXZlbnRTb3VyY2UoU3RvcmFnZSosIFdlYktpdDo6
V2ViU3RvcmFnZUFyZWEqIHNvdXJjZUFyZWFJbnN0YW5jZSk7CiAKICAgICBPd25QdHI8V2ViS2l0
OjpXZWJTdG9yYWdlQXJlYT4gbV9zdG9yYWdlQXJlYTsKICAgICBTdG9yYWdlVHlwZSBtX3N0b3Jh
Z2VUeXBlOworICAgIG11dGFibGUgYm9vbCBtX2NhbkFjY2Vzc1N0b3JhZ2VDYWNoZWRSZXN1bHQ7
CisgICAgbXV0YWJsZSBGcmFtZSogbV9jYW5BY2Nlc3NTdG9yYWdlQ2FjaGVkRnJhbWU7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzY2YjRmODA0N2JmZTk4ZDlmOTE5NDM3
MDBlOGU4NzljN2IyYThiZC4uMTVhYWRlNDI1NjZiYjNiNjA3ZDU0ODBjNWVkYTMzMDVlM2QzN2Fi
MCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDEyLTEwLTIyICBEYW4gQ2FybmV5ICA8ZGNhcm5l
eUBnb29nbGUuY29tPgorCisgICAgICAgIFdoZW4gYmxvY2tpbmcgbG9jYWxTdG9yYWdlLCBGaXJl
Zm94IHRocm93cyBhIHNlY3VyaXR5IGV4Y2VwdGlvbiBvbiBhY2Nlc3MsIGFuZCBtYXliZSBzbyBz
aG91bGQgd2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTYzMjU3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRqdXN0IHRlc3RzIHRvIGhhbmRsZSBuZXcgZXhjZXB0aW9ucy4KKworICAgICAgICAqIGZhc3Qv
c3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQ6CisgICAgICAgICog
ZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQtaWZyYW1lLmh0bWw6CisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24tZXhwZWN0
ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3Rv
cmFnZS1wZXJtaXNzaW9uLmh0bWw6CisKIDIwMTItMTAtMjIgIENocmlzdG9waGUgRHVtZXogIDxj
aHJpc3RvcGhlLmR1bWV6QGludGVsLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFNraXAgcGx1
Z2lucy9ucHJ1bnRpbWUvcmVtb3ZlLXByb3BlcnR5Lmh0bWwKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUtZXhwZWN0ZWQu
dHh0CmluZGV4IGYxNTFhYTdiODc4Y2Q4YzRkZDUyMzZiMDIzYTdlMTYzYWE2NDUxNzMuLmVlZjJj
ZTVkZjJiODAzM2Q1OGU4OTk2MDA2MDJjZGJlOGY3NWQ4YTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3Qvc3RvcmFnZS9zdG9yYWdlLWRldGFjaGVkLWlmcmFtZS1leHBlY3RlZC50eHQKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQtaWZyYW1lLWV4cGVj
dGVkLnR4dApAQCAtMSw0ICsxLDUgQEAKIENPTlNPTEUgTUVTU0FHRTogbGluZSAyNTogRXhwZWN0
ZWQgZXhjZXB0aW9uIGNhdWdodC4KK0NPTlNPTEUgTUVTU0FHRTogbGluZSAzOTogRXhwZWN0ZWQg
ZXhjZXB0aW9uIGNhdWdodC4KIEJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTU3MTQwCiAKIERlc2NyaXB0aW9uOiBDcmFzaCBmcm9tIG51bGwgcG9pbnRlciBkZXJl
ZmVyZW5jZSBiZWxvdyBXZWJDb3JlOjpTdG9yYWdlQXJlYUltcGw6OnNldEl0ZW0oKQpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zdG9yYWdlL3N0b3JhZ2UtZGV0YWNoZWQtaWZyYW1lLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRt
bAppbmRleCA2N2ViODhiNWRlNTE4YzU1N2UwNDdjZWU1NjA2ZjBkZmM5NTRlMjNmLi4wNjBkNDI1
YjNlYWEwNzFhNDRkOGRkY2Q0OWVjYTFmZmRmYzJmYjk3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L3N0b3JhZ2Uvc3RvcmFnZS1kZXRhY2hlZC1pZnJhbWUuaHRtbApAQCAtMzMsNyAr
MzMsMTEgQEAKICAgICAgICAgICB2YXIgYV9sb2NhbFN0b3JhZ2UgPSBhLmxvY2FsU3RvcmFnZTsg
Ly8gVGhlIGNvbnN0cnVjdG9yIHdvbid0IGJlIHJlYWNoYWJsZSBhcyB3aW5kb3cgb2JqZWN0IHBy
b3BlcnR5IGFmdGVyIGRldGFjaGluZyB0aGUgZnJhbWUuCiAKICAgICAgICAgICB0MS5vdXRlclRl
eHQgPSAiIjsKLSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNpdGVkPSJ0ZXN0IjsK
KyAgICAgICAgICB0cnkgeworCSAgICAgICAgICBhX2xvY2FsU3RvcmFnZS5mdXp6M192aXNpdGVk
PSJ0ZXN0IjsKKyAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgIGNvbnNvbGUu
bG9nKCJFeHBlY3RlZCBleGNlcHRpb24gY2F1Z2h0LiIpOworICAgICAgICAgIH0KICAgICAgIH0K
IAogICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9wZXJtaXNzaW9uY2xpZW50
L3N0b3JhZ2UtcGVybWlzc2lvbi1leHBlY3RlZC50eHQKaW5kZXggZjRlMzc5ZDg4MzYzN2E2MzY5
ZjUzOWIyNDFjZWEzNGYzN2FjODNlMi4uMWEwODVjNTk1OTI3MTY4MmJiNzA1MmNmYzgwN2JiOGMz
NjMxMTBmZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlz
c2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24tZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFnZS1wZXJtaXNzaW9u
LWV4cGVjdGVkLnR4dApAQCAtNSwxMiArNSw1IEBAIExlbmd0aCBpcyAxCiBWYWx1ZSBmb3IgRk9P
IGlzIEJBUgogS2V5IGZvciBpbmRleCAwIGlzIEZPTwogRGlzYWJsaW5nIGxvY2FsU3RvcmFnZSBh
Y2Nlc3MuCi1MZW5ndGggaXMgMAotVmFsdWUgZm9yIEZPTyBpcyBudWxsCi1DYXVnaHQgZXhjZXB0
aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRlbTogRXJyb3I6IFFVT1RBX0VYQ0VFREVEX0VSUjogRE9N
IEV4Y2VwdGlvbiAyMgotTGVuZ3RoIGlzIDAKLVZhbHVlIGZvciBGT08gaXMgbnVsbAotS2V5IGZv
ciBpbmRleCAwIGlzIG51bGwKLUxlbmd0aCBpcyAwCi1WYWx1ZSBmb3IgRk9PIGlzIG51bGwKK0Nh
dWdodCBleGNlcHRpb24gdHJ5aW5nIHRvIGdldCBmcmFtZSBsb2NhbFN0b3JhZ2U6IEVycm9yOiBT
RUNVUklUWV9FUlI6IERPTSBFeGNlcHRpb24gMTgKIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9yYWdlLXBlcm1pc3Npb24uaHRt
bCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Blcm1pc3Npb25jbGllbnQvc3RvcmFn
ZS1wZXJtaXNzaW9uLmh0bWwKaW5kZXggNGE0ZjQ3YTQzMDllODIwNzFiMzg0YTYxNTM1MWY2YTdl
ZjgzZTJlNy4uNmUxMTY4MTU2ZTRmZmFjMzcyNTczYTQ0NDBjMzkzMDk2MjA4YWE2ZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vcGVybWlzc2lvbmNsaWVudC9zdG9y
YWdlLXBlcm1pc3Npb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9w
ZXJtaXNzaW9uY2xpZW50L3N0b3JhZ2UtcGVybWlzc2lvbi5odG1sCkBAIC0xMCw2ICsxMCwxNCBA
QCBmdW5jdGlvbiBsb2coYSkKICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nZ2VyIiku
aW5uZXJIVE1MICs9IGEgKyAiPGJyPiI7CiB9CiAKK2Z1bmN0aW9uIG9wZW5JZnJhbWUoKQorewor
ICAgIGlmIChkb2N1bWVudC5jcmVhdGVFbGVtZW50ICYmIChpZnJhbWUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdpZnJhbWUnKSkpIHsKKyAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChpZnJhbWUpOworICAgICAgICByZXR1cm4gaWZyYW1lOworICAgIH0KK30KKyAgICAKIGZ1bmN0
aW9uIHJ1blRlc3QoKQogewogICAgIGlmICghd2luZG93LmxvY2FsU3RvcmFnZSkgewpAQCAtMzcs
MjMgKzQ1LDExIEBAIGZ1bmN0aW9uIHJ1blRlc3QoKQogICAgIGlmICh3aW5kb3cudGVzdFJ1bm5l
ciAmJiB0ZXN0UnVubmVyLnNldFN0b3JhZ2VBbGxvd2VkKQogICAgICAgICB0ZXN0UnVubmVyLnNl
dFN0b3JhZ2VBbGxvd2VkKGZhbHNlKTsKIAotICAgIGxvZygiTGVuZ3RoIGlzICIgKyBsb2NhbFN0
b3JhZ2UubGVuZ3RoKTsKLSAgICBsb2coIlZhbHVlIGZvciBGT08gaXMgIiArIGxvY2FsU3RvcmFn
ZS5nZXRJdGVtKCJGT08iKSk7Ci0KICAgICB0cnkgewotICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0
SXRlbSgiRk9PIiwgIkJBWiIpOworICAgICAgICBsb2coImZyYW1lIGxvY2FsU3RvcmFnZSBpcyBh
Y2Nlc3NpYmxlICIgKyAhIW9wZW5JZnJhbWUoKS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXcu
bG9jYWxTdG9yYWdlKTsKICAgICB9IGNhdGNoKGUpIHsKLSAgICAgICAgbG9nKCJDYXVnaHQgZXhj
ZXB0aW9uIHRyeWluZyB0byBjaGFuZ2UgaXRlbTogIiArIGUpOworICAgICAgICBsb2coIkNhdWdo
dCBleGNlcHRpb24gdHJ5aW5nIHRvIGdldCBmcmFtZSBsb2NhbFN0b3JhZ2U6ICIgKyBlKTsKICAg
ICB9Ci0gICAgCi0gICAgbG9nKCJMZW5ndGggaXMgIiArIGxvY2FsU3RvcmFnZS5sZW5ndGgpOwot
ICAgIGxvZygiVmFsdWUgZm9yIEZPTyBpcyAiICsgbG9jYWxTdG9yYWdlLmdldEl0ZW0oIkZPTyIp
KTsKLSAgICBsb2coIktleSBmb3IgaW5kZXggMCBpcyAiICsgbG9jYWxTdG9yYWdlLmtleSgwKSk7
Ci0gICAgCi0gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oIkZPTyIpOwotICAgIAotICAgIGxv
ZygiTGVuZ3RoIGlzICIgKyBsb2NhbFN0b3JhZ2UubGVuZ3RoKTsKLSAgICBsb2coIlZhbHVlIGZv
ciBGT08gaXMgIiArIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCJGT08iKSk7CiB9CiAKIDwvc2NyaXB0
Pgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>