<?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>79851</bug_id>
          
          <creation_ts>2012-02-28 17:39:32 -0800</creation_ts>
          <short_desc>Return value from executed script in Chromium.</short_desc>
          <delta_ts>2012-04-23 18:10:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Eriq Augustine">eaugusti</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>haraken</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>rakuco</cc>
    
    <cc>tkent</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>567280</commentid>
    <comment_count>0</comment_count>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-02-28 17:39:32 -0800</bug_when>
    <thetext>Return value from executed script in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567289</commentid>
    <comment_count>1</comment_count>
      <attachid>129365</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-02-28 17:54:33 -0800</bug_when>
    <thetext>Created attachment 129365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567290</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-28 17:57:45 -0800</bug_when>
    <thetext>Please wait for approval from fishd@chromium.org before submitting because this patch contains changes to the Chromium public API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567305</commentid>
    <comment_count>3</comment_count>
      <attachid>129365</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-02-28 18:20:44 -0800</bug_when>
    <thetext>Comment on attachment 129365
Patch

Attachment 129365 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11695043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567661</commentid>
    <comment_count>4</comment_count>
      <attachid>129365</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2012-02-29 09:00:33 -0800</bug_when>
    <thetext>Comment on attachment 129365
Patch

Attachment 129365 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11686353</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567713</commentid>
    <comment_count>5</comment_count>
      <attachid>129365</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-02-29 10:30:13 -0800</bug_when>
    <thetext>Comment on attachment 129365
Patch

Looks like you&apos;ve got some compilation trouble.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>568301</commentid>
    <comment_count>6</comment_count>
      <attachid>129365</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-02-29 21:04:52 -0800</bug_when>
    <thetext>Comment on attachment 129365
Patch

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

&gt; LayoutTests/ChangeLog:11
&gt; +        * platform/chromium/http/tests/misc/execute-and-return-value-expected.txt: Added.
&gt; +        * platform/chromium/http/tests/misc/execute-and-return-value.html: Added.

If you think layoutTestController.evaluateScriptInIsolatedWorldAndReturnValue() is chromium-specific, we don&apos;t need to provide empty implementations of it for other platforms.
If not, we should put the test to the common place (not platform/chromium/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569188</commentid>
    <comment_count>7</comment_count>
      <attachid>129796</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-01 19:48:15 -0800</bug_when>
    <thetext>Created attachment 129796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569189</commentid>
    <comment_count>8</comment_count>
      <attachid>129796</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-01 19:52:10 -0800</bug_when>
    <thetext>Comment on attachment 129796
Patch

Attachment 129796 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/11769722</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569190</commentid>
    <comment_count>9</comment_count>
      <attachid>129796</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-03-01 19:53:08 -0800</bug_when>
    <thetext>Comment on attachment 129796
Patch

Attachment 129796 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/11767730</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569193</commentid>
    <comment_count>10</comment_count>
      <attachid>129796</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-01 19:58:22 -0800</bug_when>
    <thetext>Comment on attachment 129796
Patch

Attachment 129796 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11766735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572252</commentid>
    <comment_count>11</comment_count>
      <attachid>130463</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-06 16:21:51 -0800</bug_when>
    <thetext>Created attachment 130463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572260</commentid>
    <comment_count>12</comment_count>
      <attachid>130463</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-03-06 16:32:06 -0800</bug_when>
    <thetext>Comment on attachment 130463
Patch

Attachment 130463 did not pass win-ews (win):
Output: http://queues.webkit.org/results/11838596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572277</commentid>
    <comment_count>13</comment_count>
      <attachid>130473</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-06 16:49:30 -0800</bug_when>
    <thetext>Created attachment 130473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>572440</commentid>
    <comment_count>14</comment_count>
      <attachid>130473</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-06 19:05:49 -0800</bug_when>
    <thetext>Comment on attachment 130473
Patch

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

New failing tests:
fast/xmlhttprequest/xmlhttprequest-gc.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579468</commentid>
    <comment_count>15</comment_count>
      <attachid>132067</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-15 10:12:21 -0700</bug_when>
    <thetext>Created attachment 132067
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579794</commentid>
    <comment_count>16</comment_count>
      <attachid>132067</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 15:12:23 -0700</bug_when>
    <thetext>Comment on attachment 132067
Patch

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

This patch uses a bunch of risky memory management patterns.  Using OwnPtr and PassOwnPtr is clearly a win inside WebKit.  It&apos;s less clear to me what the best way of returning v8 handles across the WebKit API is.  Do we do this in other places that might establish a pattern that we should follow?

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:166
&gt; +    WTF::Vector&lt;v8::Handle&lt;v8::Value&gt; &gt;* v8Results = m_proxy-&gt;evaluateInIsolatedWorld(worldID, sources, 0);

You shouldn&apos;t need to use the WTF namespace here.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:167
&gt; +    WTF::Vector&lt;ScriptValue&gt;* results = new WTF::Vector&lt;ScriptValue&gt;();

We should never call &quot;new&quot; without immediately calling adoptPtr or adoptRef.  In this case, we should call adoptPtr.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:171
&gt; +      for (itr = v8Results-&gt;begin(); itr != v8Results-&gt;end(); ++itr)
&gt; +        results-&gt;append(ScriptValue(*itr));

This code is incorrectly indented.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:173
&gt; +    delete v8Results;

We should never be calling delete manually.  Do we need to use an OwnPtr and PassOwnPtr to manage the lifetime of this object?

&gt; Source/WebCore/bindings/v8/V8Proxy.cpp:266
&gt; +      evaluationResults-&gt;append(v8::Persistent&lt;v8::Value&gt;::New(evaluate(sources[i], 0)));

Creating a new v8::Persistent value is dangerous because it can easily lead to memory leaks.  Perhaps the caller should be responsible for creating a v8::HandleScope?  It&apos;s not clear to me what the best way of returning a value is without risking memory leaks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579796</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-15 15:13:05 -0700</bug_when>
    <thetext>Also, consider using out parameters rather than returning heap-allocated vectors.  That makes it easier for the function to know whether its caller cares about the return value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581045</commentid>
    <comment_count>18</comment_count>
      <attachid>132400</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-16 15:33:54 -0700</bug_when>
    <thetext>Created attachment 132400
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581662</commentid>
    <comment_count>19</comment_count>
      <attachid>132400</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-19 00:10:58 -0700</bug_when>
    <thetext>Comment on attachment 132400
Patch

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

This is much better than the previous iterations.

&gt; Source/WebCore/bindings/v8/V8Proxy.cpp:265
&gt; +        if (results)

Can we move this test outside of the loop?  I guess the compiler will probably do that optimization of us...

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:906
&gt; +        sources.append(ScriptSourceCode(
&gt; +            sourcesIn[i].code, sourcesIn[i].url, position));

No need to wrap at 80 cols

&gt; Tools/DumpRenderTree/chromium/LayoutTestController.cpp:1350
&gt; +        // TODO: There are many more types that can be handled.

TODO =&gt; FIXME</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581663</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-19 00:11:53 -0700</bug_when>
    <thetext>Did you want to mark this patch for review?  It looks pretty good.  If you&apos;d like me to review it, I can study it in more detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581894</commentid>
    <comment_count>21</comment_count>
      <attachid>132400</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-19 10:00:07 -0700</bug_when>
    <thetext>Comment on attachment 132400
Patch

Yes, that would be great. 

I think that the constant re-packaging of the evaluated values is a bit unfortunate, but I can&apos;t see a way around it that follows the conventions of the code around it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588313</commentid>
    <comment_count>22</comment_count>
      <attachid>133928</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-03-26 16:46:17 -0700</bug_when>
    <thetext>Created attachment 133928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588318</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-26 16:49:44 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>597806</commentid>
    <comment_count>24</comment_count>
      <attachid>133928</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-06 16:38:14 -0700</bug_when>
    <thetext>Comment on attachment 133928
Patch

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

Sorry that it&apos;s taken me so long to review this patch.  This looks fine.  A couple of small suggestions below.  I think the main thing is that we can avoid converting back and forth between ScriptValues.  If WebCore wants to use this function at some point, we might need to use ScriptValue, but it doesn&apos;t seem to be needed right now.

&gt; Source/WebCore/ChangeLog:8
&gt; +        Providing a varaiant of evaluateScriptInIsolatedWorld that

typo: varaiant

&gt; Source/WebKit/chromium/public/WebFrame.h:279
&gt; +    virtual void executeScriptInIsolatedWorld(
&gt; +        int worldID, const WebScriptSource* sourcesIn, unsigned numSources,
&gt; +        int extensionGroup, WebVector&lt;v8::Handle&lt;v8::Value&gt; &gt;* results) = 0;

Should we be more specific that these are local handles?

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:906
&gt; +    for (unsigned i = 0; i &lt; numSources; ++i) {
&gt; +        TextPosition position(OrdinalNumber::fromOneBasedInt(sourcesIn[i].startLine), OrdinalNumber::first());
&gt; +        sources.append(ScriptSourceCode(sourcesIn[i].code, sourcesIn[i].url, position));
&gt; +    }

Is this code copy/pasted from somewhere?  Should we share code instead?

&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:909
&gt; +        Vector&lt;ScriptValue&gt; scriptResults;

Do we really need to round-trip through ScriptValue?  Both the caller and the callee of this function always use V8, so it seems like we could just pass the vector directly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598832</commentid>
    <comment_count>25</comment_count>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-09 18:23:37 -0700</bug_when>
    <thetext>Humm... if we pass the Vector of v8::Handle&lt;v8::Value&gt;&apos;s, do we need the Handle to be Persistent?

I could be mistaken, but doesn&apos;t the result of the eval get placed into a Local which is managed by the HandleScope created in V8Proxy::evaluateInIsolatedWorld().

I think it was fine before when I was using ScriptValue because ScriptValue uses Persistent. 
Sorry if I am totally off, it&apos;s all a bit confusing for a first dive into WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599062</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-09 23:39:38 -0700</bug_when>
    <thetext>I&apos;m not 100% sure either.  Certainly, if we&apos;re returning local handles, we&apos;ll need the caller to have their own HandleScope.  I&apos;m not sure what happens if you have two HandleScopes on the stack.  Are locals bound to the most recent HandleScope or to the last to unwind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599790</commentid>
    <comment_count>27</comment_count>
      <attachid>133928</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-10 16:43:29 -0700</bug_when>
    <thetext>Comment on attachment 133928
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        Providing a varaiant of evaluateScriptInIsolatedWorld that
&gt; 
&gt; typo: varaiant

done.

&gt;&gt; Source/WebKit/chromium/public/WebFrame.h:279
&gt;&gt; +        int extensionGroup, WebVector&lt;v8::Handle&lt;v8::Value&gt; &gt;* results) = 0;
&gt; 
&gt; Should we be more specific that these are local handles?

Yes, I think we should. Doing this should make it clear to the caller that they need their own HandleScope.

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:906
&gt;&gt; +    }
&gt; 
&gt; Is this code copy/pasted from somewhere?  Should we share code instead?

It&apos;s from WebFrameImpl::executeScriptInIsolatedWorld. Do you think it is worth it?

&gt;&gt; Source/WebKit/chromium/src/WebFrameImpl.cpp:909
&gt;&gt; +        Vector&lt;ScriptValue&gt; scriptResults;
&gt; 
&gt; Do we really need to round-trip through ScriptValue?  Both the caller and the callee of this function always use V8, so it seems like we could just pass the vector directly.

Discussed in IRC. ScriptValue bundles the value in a Persistent which helps the hand-off to the caller&apos;s HandleScope.
This is only an issue because the Vector is passed by reference instead of by value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>599795</commentid>
    <comment_count>28</comment_count>
      <attachid>136572</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-10 16:46:28 -0700</bug_when>
    <thetext>Created attachment 136572
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600012</commentid>
    <comment_count>29</comment_count>
      <attachid>136572</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-10 21:34:36 -0700</bug_when>
    <thetext>Comment on attachment 136572
Patch

Attachment 136572 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12384609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600336</commentid>
    <comment_count>30</comment_count>
      <attachid>136682</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-11 09:48:00 -0700</bug_when>
    <thetext>Created attachment 136682
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600368</commentid>
    <comment_count>31</comment_count>
      <attachid>136682</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-11 10:25:10 -0700</bug_when>
    <thetext>Comment on attachment 136682
Patch

Attachment 136682 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12387136</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>600472</commentid>
    <comment_count>32</comment_count>
      <attachid>136721</attachid>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-11 12:09:40 -0700</bug_when>
    <thetext>Created attachment 136721
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>601632</commentid>
    <comment_count>33</comment_count>
      <attachid>136721</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-04-12 16:55:34 -0700</bug_when>
    <thetext>Comment on attachment 136721
Patch

Did you mean to mark this patch for review?  The bubbles are all green.  I think we&apos;re all set here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602371</commentid>
    <comment_count>34</comment_count>
    <who name="Eriq Augustine">eaugusti</who>
    <bug_when>2012-04-13 13:42:12 -0700</bug_when>
    <thetext>Yes I did.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608264</commentid>
    <comment_count>35</comment_count>
      <attachid>136721</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 18:10:41 -0700</bug_when>
    <thetext>Comment on attachment 136721
Patch

Clearing flags on attachment: 136721

Committed r114974: &lt;http://trac.webkit.org/changeset/114974&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>608265</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-23 18:10:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129365</attachid>
            <date>2012-02-28 17:54:33 -0800</date>
            <delta_ts>2012-03-01 19:48:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120228175337.patch</filename>
            <type>text/plain</type>
            <size>29987</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTE3OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTI4ICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMi0yOCAgRGFuaWVsIENoZW5n
ICA8ZGNoZW5nQGNocm9taXVtLm9yZz4KIAogICAgICAgICBDbGlwYm9hcmQ6OmdldERhdGEgc2hv
dWxkIHJldHVybiBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiB1bmRlZmluZWQKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZp
c2lvbiAxMDkxNzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTYxLDE0ICsxNjEsMzAgQEAgYm9vbCBTY3JpcHRD
b250cm9sbGVyOjpwcm9jZXNzaW5nVXNlckdlcwogICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGlj
YXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9y
PFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQorV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBT
Y3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElE
LCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCiB7Ci0gICAgbV9wcm94
eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7CisgICAgV1RG
OjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHY4UmVzdWx0cyA9IG1fcHJveHktPmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOworICAgIFdURjo6VmVj
dG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cyA9IG5ldyBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4o
KTsKKworICAgIFdURjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+OjppdGVyYXRvciBp
dHI7CisgICAgICBmb3IgKGl0ciA9IHY4UmVzdWx0cy0+YmVnaW4oKTsgaXRyICE9IHY4UmVzdWx0
cy0+ZW5kKCk7ICsraXRyKQorICAgICAgICByZXN1bHRzLT5hcHBlbmQoU2NyaXB0VmFsdWUoKml0
cikpOworCisgICAgZGVsZXRlIHY4UmVzdWx0czsKKyAgICByZXR1cm4gcmVzdWx0czsKIH0KIAot
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRl
bnNpb25Hcm91cCkKK1dURjo6VmVjdG9yPFNjcmlwdFZhbHVlPiogU2NyaXB0Q29udHJvbGxlcjo6
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNj
cmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7Ci0gICAgbV9w
cm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9u
R3JvdXApOworICAgIFdURjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiB2OFJlc3Vs
dHMgPSBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBl
eHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzID0g
bmV3IFdURjo6VmVjdG9yPFNjcmlwdFZhbHVlPigpOworCisgICAgV1RGOjpWZWN0b3I8djg6Okhh
bmRsZTx2ODo6VmFsdWU+ID46Oml0ZXJhdG9yIGl0cjsKKyAgICAgIGZvciAoaXRyID0gdjhSZXN1
bHRzLT5iZWdpbigpOyBpdHIgIT0gdjhSZXN1bHRzLT5lbmQoKTsgKytpdHIpCisgICAgICAgIHJl
c3VsdHMtPmFwcGVuZChTY3JpcHRWYWx1ZSgqaXRyKSk7CisKKyAgICBkZWxldGUgdjhSZXN1bHRz
OworICAgIHJldHVybiByZXN1bHRzOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZWN1cml0
eU9yaWdpbj4gc2VjdXJpdHlPcmlnaW4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDkxNzApCisrKyBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1
LDcgKzg1LDcgQEAgcHVibGljOgogICAgIC8vIGFzIGEgc3RyaW5nLgogICAgIFNjcmlwdFZhbHVl
IGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAotICAgIHZvaWQgZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJj
ZUNvZGU+Jik7CisgICAgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4m
KTsKIAogICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRo
ZSBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHByb3Rv
dHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFu
ZCBzby1vbiksCkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgd29ybGRJ
RCBpcyAwLCBhIG5ldyB3b3JsZCBpcyBhbHdheXMgY3JlYXRlZC4KICAgICAvLwogICAgIC8vIEZJ
WE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCi0gICAgdm9pZCBldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgIFdURjo6VmVjdG9yPFNjcmlwdFZhbHVl
PiogZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9y
PFNjcmlwdFNvdXJjZUNvZGU+JiwgaW50IGV4dGVuc2lvbkdyb3VwKTsKIAogICAgIC8vIEFzc29j
aWF0ZXMgYW4gaXNvbGF0ZWQgd29ybGQgKHNlZSBhYm92ZSBmb3IgZGVzY3JpcHRpb24pIHdpdGgg
YSBzZWN1cml0eQogICAgIC8vIG9yaWdpbi4gWE1MSHR0cFJlcXVlc3QgaW5zdGFuY2VzIHVzZWQg
aW4gdGhhdCB3b3JsZCB3aWxsIGJlIGNvbnNpZGVyZWQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuY3BwCShyZXZpc2lvbiAxMDkxNzApCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE3LDExICsyMTcsMTEg
QEAgYm9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNv
bnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3Vw
KQorV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIFY4UHJveHk6OmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29k
ZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3
aWxsIG5lZWQgdG8gZ2V0IHJlb3JnYW5pemVkIG9uY2Ugd2UgaGF2ZSBhIHdpbmRvd1NoZWxsIGZv
ciB0aGUgaXNvbGF0ZWQgd29ybGQuCiAgICAgaWYgKCF3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4
dElmTmVlZGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICB2
ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CiAgICAgVjhJc29sYXRlZENvbnRleHQqIGlzb2xh
dGVkQ29udGV4dCA9IDA7CkBAIC0yMzQsNyArMjM0LDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0ID0gbmV3IFY4
SXNvbGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwLCB3b3JsZElEKTsKICAgICAgICAg
ICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjaGFuZ2UgdGhpcyB0byB1c2luZyB3aW5kb3cgc2hlbGxzIHRv
IG1hdGNoIEpTQy4KQEAgLTI0NCwxMCArMjQ0LDEwIEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQoaW4KICAgICAgICAgICAgIGlmICghc2V0SW5qZWN0ZWRTY3JpcHRDb250
ZXh0RGVidWdJZChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKSkpIHsKICAgICAgICAgICAgICAg
ICBtX2lzb2xhdGVkV29ybGRzLnRha2Uod29ybGRJRCk7CiAgICAgICAgICAgICAgICAgZGVsZXRl
IGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAg
ICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdp
bkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAg
ICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9y
aWdpbnMuZW5kKCkpCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3Jp
Z2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKQEAgLTI1NSwxNyArMjU1LDIwIEBAIHZv
aWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAgaXNvbGF0ZWRD
b250ZXh0ID0gbmV3IFY4SXNvbGF0ZWRDb250ZXh0KHRoaXMsIGV4dGVuc2lvbkdyb3VwLCB3b3Js
ZElEKTsKICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkg
ewogICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCisgICAgV1RGOjpW
ZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV2YWx1YXRpb25SZXN1bHRzID0gbmV3IFdU
Rjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KCk7CiAgICAgdjg6OkxvY2FsPHY4OjpD
b250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29u
dGV4dC0+Y29udGV4dCgpKTsKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShj
b250ZXh0KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kp
Ci0gICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAwKTsKKyAgICAgIGV2YWx1YXRpb25SZXN1bHRz
LT5hcHBlbmQodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPjo6TmV3KGV2YWx1YXRlKHNvdXJjZXNb
aV0sIDApKSk7CiAKICAgICBpZiAod29ybGRJRCA9PSAwKQogICAgICAgaXNvbGF0ZWRDb250ZXh0
LT5kZXN0cm95KCk7CisKKyAgICByZXR1cm4gZXZhbHVhdGlvblJlc3VsdHM7CiB9CiAKIHZvaWQg
VjhQcm94eTo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNz
UmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbkluKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gMTA5MTcwKQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDUsOCArMTQ1
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnbG9iYWwgc2NvcGUsIGl0cyBv
d24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLAog
ICAgICAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFs
bCBET00gbm9kZXMgYW5kIERPTQogICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZv
aWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgCisg
ICAgICAgIFdURjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBldmFsdWF0ZUluSXNv
bGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBz
b3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworCiAgICAgICAgIHZvaWQgc2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
Pik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBl
eGVjdXRpb24gZW52aXJvbm1lbnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gMTA5MTc4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMi0yOCAgRXJpcSBBdWd1c3RpbmUgIDxl
YXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20gZXhlY3V0
ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBQcm92aWRpbmcgYSB2YXJhaWFudCBvZiBldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZCB0aGF0CisgICAgICAgIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBldmFsdWF0
ZWQgc2NyaXB0LgorCisgICAgICAgICogcHVibGljL1dlYkZyYW1lLmg6CisgICAgICAgIChXZWJG
cmFtZSk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
cyk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuaDoKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJGcmFtZUltcGwpOgorCiAyMDEyLTAyLTI4ICBK
b25hdGhhbiBCYWNrZXIgIDxiYWNrZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1
bV0gUmVzZXQgZGFtYWdlIHRyYWNrZXIgb24gdmlzaWJpbGl0eSBjaGFuZ2UuCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJKHJldmlzaW9uIDEwOTE3MCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI3NCw2ICsyNzQsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IGV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICAgICAgY29uc3QgV2ViU2Ny
aXB0U291cmNlJikgPSAwOwogCisgICAgdmlydHVhbCBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6
VmFsdWU+ID4qIGV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoCisg
ICAgICAgIGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5z
aWduZWQgbnVtU291cmNlcywKKyAgICAgICAgaW50IGV4dGVuc2lvbkdyb3VwKSA9IDA7CisKICAg
ICAvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlzIGZyYW1lLCBvciBhbiBlbXB0eSBo
YW5kbGUgaWYgdGhlcmUKICAgICAvLyBpcyBub25lLgogICAgIHZpcnR1YWwgdjg6OkxvY2FsPHY4
OjpDb250ZXh0PiBtYWluV29ybGRTY3JpcHRDb250ZXh0KCkgY29uc3QgPSAwOwpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiAxMDkx
NzApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OTQsNiArODk0LDI4IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXZWJG
cmFtZUltcGw6OmV4ZWMKICAgICByZXR1cm4gbV9mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3Jp
cHQoU2NyaXB0U291cmNlQ29kZShzb3VyY2UuY29kZSwgc291cmNlLnVybCwgcG9zaXRpb24pKS52
OFZhbHVlKCk7CiB9CiAKK1dlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogV2ViRnJh
bWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKAorICAg
IGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQg
bnVtU291cmNlcywKKyAgICBpbnQgZXh0ZW5zaW9uR3JvdXApCit7CisgICAgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+IHNvdXJjZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
U291cmNlczsgKytpKSB7CisgICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVt
YmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGluZSksIE9yZGluYWxOdW1i
ZXI6OmZpcnN0KCkpOworICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAor
ICAgICAgICAgICAgc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9u
KSk7CisgICAgfQorCisgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiogc2NyaXB0UmVzdWx0cyA9ICBt
X2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNl
cywgZXh0ZW5zaW9uR3JvdXApOworICAgIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
PiogdjhSZXN1bHRzID0gbmV3IFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPihzY3Jp
cHRSZXN1bHRzLT5zaXplKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNjcmlw
dFJlc3VsdHMtPnNpemUoKTsgaSsrKQorICAgICAgKCp2OFJlc3VsdHMpW2ldID0gKCpzY3JpcHRS
ZXN1bHRzKVtpXS52OFZhbHVlKCk7CisKKyAgICBkZWxldGUgc2NyaXB0UmVzdWx0czsKKyAgICBy
ZXR1cm4gdjhSZXN1bHRzOworfQorCiAvLyBSZXR1cm5zIHRoZSBWOCBjb250ZXh0IGZvciB0aGlz
IGZyYW1lLCBvciBhbiBlbXB0eSBoYW5kbGUgaWYgdGhlcmUgaXMgbm9uZS4KIHY4OjpMb2NhbDx2
ODo6Q29udGV4dD4gV2ViRnJhbWVJbXBsOjptYWluV29ybGRTY3JpcHRDb250ZXh0KCkgY29uc3QK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCShyZXZp
c2lvbiAxMDkxNzApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwu
aAkod29ya2luZyBjb3B5KQpAQCAtNjIsNiArNjIsOCBAQCBjbGFzcyBXZWJQbHVnaW5Db250YWlu
ZXJJbXBsOwogY2xhc3MgV2ViVmlldzsKIGNsYXNzIFdlYlZpZXdJbXBsOwogCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOworCiAvLyBJbXBsZW1lbnRhdGlvbiBvZiBXZWJG
cmFtZSwgbm90ZSB0aGF0IHRoaXMgaXMgYSByZWZlcmVuY2UgY291bnRlZCBvYmplY3QuCiBjbGFz
cyBXZWJGcmFtZUltcGwgOiBwdWJsaWMgV2ViRnJhbWUsIHB1YmxpYyBSZWZDb3VudGVkPFdlYkZy
YW1lSW1wbD4gewogcHVibGljOgpAQCAtMTEwLDYgKzExMiw5IEBAIHB1YmxpYzoKICNpZiBXRUJL
SVRfVVNJTkdfVjgKICAgICB2aXJ0dWFsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGVjdXRlU2Ny
aXB0QW5kUmV0dXJuVmFsdWUoCiAgICAgICAgIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSYpOworICAg
IHZpcnR1YWwgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBleGVjdXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKAorICAgICAgICBpbnQgd29ybGRJRCwgY29u
c3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisgICAg
ICAgIGludCBleHRlbnNpb25Hcm91cCk7CiAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6OkNvbnRl
eHQ+IG1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjcmVhdGVGaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5cGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJT
dHJpbmcmIG5hbWUsCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
Q2hhbmdlTG9nCShyZXZpc2lvbiAxMDkxNzgpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wMi0yOCAgRXJpcSBBdWd1c3RpbmUgIDxlYXVn
dXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20gZXhlY3V0ZWQg
c2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGRpbmcgYSBmdW5jdGlvbiB0byBMYXlvdXRUZXN0Q29udHJvbGxlciB0aGF0
IGV2YWx1YXRlcyBhIHNjcmlwdCBpbgorICAgICAgICBhbiBpc29sYXRlZCB3b2xkIGFuIHJldHVy
bnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJy
eS5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRy
b2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9s
bGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9lZmwv
TGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUpOgorCiAyMDEyLTAyLTI4ICBMdWNhcyBGb3JzY2hsZXIgIDxsZm9y
c2NobGVyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggYSB0eXBvIGluIGNvbmZpZy5qc29uCklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxMDkxNzApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDMsNiArMTg0MywxOCBAQCBzdGF0aWMgSlNW
YWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAg
ICBkb3VibGUgd29ybGRJRCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0s
IGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gc2NyaXB0KEFkb3B0LCBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKSk7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IGNvbnRyb2xsZXItPmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdvcmxkSUQpLCBKU0NvbnRleHRHZXRHbG9iYWxPYmplY3Qo
Y29udGV4dCksIHNjcmlwdC5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBlbGVtZW50RG9lc0F1dG9Db21wbGV0
ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7
CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0y
Mzc3LDYgKzIzODksNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6
CiAgICAgICAgIHsgImVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZCIsIGVs
ZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAg
ICAgICAgIHsgImVuY29kZUhvc3ROYW1lIiwgZW5jb2RlSG9zdE5hbWVDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJldmFsdWF0ZUluV2ViSW5zcGVjdG9yIiwgZXZhbHVhdGVJbldlYkluc3Bl
Y3RvckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQW5kUmV0dXJuVmFsdWUiLCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRy
aWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDkx
NzApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXZWJJ
bnNwZWN0b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQs
IEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
UmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCiAgICAg
Ym9vbCBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJC
bGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2Jl
cnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEwOTE3MCkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJC
bGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsK
IH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7
CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlw
dCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmpl
Y3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BB
UkFNKHdvcmxkSUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA5MTcwKQorKysgVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjQsNiArMTI0LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91
dFRlc3RDb250cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAgYmluZE1ldGhv
ZCgiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbldlYkluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFu
ZFJldHVyblZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdv
cmxkU2VjdXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29y
bGRTZWN1cml0eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNl
bGVjdGlvbkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25D
b2xvcnMpOwpAQCAtMTMxMiw2ICsxMzEzLDM3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnNldFhTU0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQor
eworICAgIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdmFsdWVzID0gMDsKKyAg
ICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigpICYm
IGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3Vy
Y2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgICAgICAvLyBUaGlz
IHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlz
IGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90
aGVyIHRlc3RzIGRvLgorICAgICAgICB2YWx1ZXMgPQorICAgICAgICAgIG1fc2hlbGwtPndlYlZp
ZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZXMoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSk7CisgICAgfQor
ICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3YXMg
YWRkZWQsIG9ubHkgb25lIHJlc3VsdCBpcyBleHBlY3RlZAorICAgIGlmICh2YWx1ZXMgJiYgdmFs
dWVzLT5zaXplKCkgPT0gMSAmJiAhKCp2YWx1ZXMpWzBdLklzRW1wdHkoKSkgeworICAgICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSAoKnZhbHVlcylbMF07CisgICAgICAg
IC8vIFRPRE86IFRoZXJlIGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4K
KyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7CisgICAgICAgICAgdjg6OlN0
cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNjcmlwdFZhbHVlKTsKKyAgICAgICAgICByZXN1bHQt
PnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZh
bHVlLT5Jc0Jvb2xlYW4oKSkKKyAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9C
b29sZWFuKCktPlZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1i
ZXIoKSkgeworICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNJbnQzMigpKQorICAgICAgICAg
ICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKKyAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJl
cigpLT5WYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkp
CisgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQorICAgIGRlbGV0ZSB2YWx1ZXM7
Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZp
c2lvbiAxMDkxNzApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODgsNiArMjg4LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVD
b250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAgIHZvaWQg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1
bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJldmlzaW9uIDEwOTE3MCkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY3Miw2ICs2NzIsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbldlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWdu
ZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEwOTE3MCkKKysrIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTkxNSw2ICs5MTUsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJ
bldlYgogICAgIGdfZnJlZShzY3JpcHRTdHJpbmcpOwogfQogCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCB0aGlzLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTA5MTcwKQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05NTcsNiArOTU3LDExIEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3Js
ZChXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAg
UmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0
cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzY3JpcHQpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiAx
MDkxNzApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDYgKzkxMCwxMSBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzdGFydFNwZWVjaEluCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJ
RCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9
CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgRHVtcFJlbmRl
clRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQ
YWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24gMTA5
MTcwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAgcHVibGljIHNsb3RzOgogCiAgICAg
dm9pZCBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgUVN0cmluZyYgZWRpdGluZ0JlaGF2aW9yKTsK
IAorICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShp
bnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAgICB2b2lkIGV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwog
ICAgIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KTsKICAgICBRU3RyaW5nIHBh
Z2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBp
bnQgbWFyZ2luTGVmdCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVz
dENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDEwOTE3MCkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNzcsNiArMTI3NywxMSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdl
YlNjcmlwdFdvcmxkCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQg
d29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7
CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCiB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBK
U09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBDT01Q
dHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cAkocmV2aXNpb24gMTA5MTcwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVz
dENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw2ICs0NTYsMTEgQEAgdm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaQogICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgdGhpcy4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKworfQorCiB2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25l
ZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkK
IHsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5MTc4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDItMjggIEVyaXEgQXVndXN0
aW5lICA8ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldHVybiB2YWx1ZSBmcm9t
IGV4ZWN1dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBleGVjdXRpbmcgYSBzY3JpcHQgYW5kIGdldHRp
bmcgdGhlIHJlc3VsdCBvZiB0aGF0IHNjcmlwdC4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhl
Y3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAyLTI4ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBbW0dldF1dL1tb
UHV0XV0gZm9yIHByaW1pdGl2ZXMgc2hvdWxkIG5vdCB3cmFwIG9uIHN0cmljdCBhY2Nlc3NvciBj
YWxsCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2Mv
ZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0
dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGluZyA1OiA1CitF
eHBlY3RpbmcgMy4xNDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6IFRo
ZSBxdWljayBicm93biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBlY3RpbmcgbnVs
bDogbnVsbAorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3Rz
L21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVy
bi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8
c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0
Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICI1
Iik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
J0V4cGVjdGluZyA1OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVUZXN0ID0gbGF5
b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSgwLCAiMy4xNCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsKKyAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2
YXIgc3RyaW5nVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9nLiInKTsKKyAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0
aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7CisgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFy
IGJvb2xlYW5UZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNlOiAnICsgYm9v
bGVhblRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdicicpKTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5l
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJudWxsIik7Cisg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVj
dGluZyBudWxsOiAnICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>129796</attachid>
            <date>2012-03-01 19:48:15 -0800</date>
            <delta_ts>2012-03-06 16:21:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120301194716.patch</filename>
            <type>text/plain</type>
            <size>30114</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAyLTI4ICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0wMSAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIExh
eWVyQ2hyb21pdW06Om5hbWUgdG8gZGVidWdOYW1lIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRo
IG90aGVyIGRlYnVnIHByb3BlcnRpZXMsIG1ha2UgdGhyZWFkc2FmZQpJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEw
OTQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTQgKzE2MSwzMCBAQCBib29sIFNjcmlwdENvbnRyb2xs
ZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgcmV0dXJuIFVzZXJHZXN0dXJlSW5kaWNhdG9yOjpw
cm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAotdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4mIHNvdXJjZXMpCitXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIFNjcmlwdENv
bnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0
IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKIHsKLSAgICBtX3Byb3h5LT5ldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCAwKTsKKyAgICBXVEY6OlZlY3Rv
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdjhSZXN1bHRzID0gbV9wcm94eS0+ZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7CisgICAgV1RGOjpWZWN0b3I8U2Ny
aXB0VmFsdWU+KiByZXN1bHRzID0gbmV3IFdURjo6VmVjdG9yPFNjcmlwdFZhbHVlPigpOworCisg
ICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID46Oml0ZXJhdG9yIGl0cjsKKyAg
ICAgIGZvciAoaXRyID0gdjhSZXN1bHRzLT5iZWdpbigpOyBpdHIgIT0gdjhSZXN1bHRzLT5lbmQo
KTsgKytpdHIpCisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChTY3JpcHRWYWx1ZSgqaXRyKSk7CisK
KyAgICBkZWxldGUgdjhSZXN1bHRzOworICAgIHJldHVybiByZXN1bHRzOwogfQogCi12b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdy
b3VwKQorV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkKIHsKLSAgICBtX3Byb3h5LT5l
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7
CisgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHY4UmVzdWx0cyA9IG1f
cHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lv
bkdyb3VwKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMgPSBuZXcgV1RG
OjpWZWN0b3I8U2NyaXB0VmFsdWU+KCk7CisKKyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRyOworICAgICAgZm9yIChpdHIgPSB2OFJlc3VsdHMtPmJl
Z2luKCk7IGl0ciAhPSB2OFJlc3VsdHMtPmVuZCgpOyArK2l0cikKKyAgICAgICAgcmVzdWx0cy0+
YXBwZW5kKFNjcmlwdFZhbHVlKCppdHIpKTsKKworICAgIGRlbGV0ZSB2OFJlc3VsdHM7CisgICAg
cmV0dXJuIHJlc3VsdHM7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6c2V0SXNvbGF0ZWRX
b3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2lu
PiBzZWN1cml0eU9yaWdpbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwOTQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQCBwdWJsaWM6CiAgICAgLy8gYXMgYSBzdHJpbmcuCiAgICAgU2NyaXB0VmFsdWUgZXZhbHVh
dGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogCi0gICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4m
KTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOwogCiAg
ICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhbiBpc29sYXRlZCB3b3JsZC4gVGhlIHNjcmlw
dCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlLAogICAgIC8vIGl0cyBvd24gcHJvdG90eXBlcyBm
b3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9u
KSwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAs
IGEgbmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgogICAgIC8vCiAgICAgLy8gRklYTUU6IEdl
dCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4KLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYs
IGludCBleHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCiAgICAgLy8gQXNzb2NpYXRlcyBh
biBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlwdGlvbikgd2l0aCBhIHNlY3Vy
aXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0YW5jZXMgdXNlZCBpbiB0aGF0
IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5jcHAJKHJldmlzaW9uIDEwOTQ2OCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsMTEgKzIxNywxMSBAQCBib29s
IFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9p
ZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCitXVEY6
OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291
cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVl
ZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBp
c29sYXRlZCB3b3JsZC4KICAgICBpZiAoIXdpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVk
ZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMDsKIAogICAgIHY4OjpIYW5k
bGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBWOElzb2xhdGVkQ29udGV4dCogaXNvbGF0ZWRDb250
ZXh0ID0gMDsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29s
YXRlZFdvcmxkKGluCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRl
ZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQpOwogICAgICAgICAgICAgaWYg
KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkgewogICAgICAgICAgICAgICAg
IGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIHVzaW5nIHdpbmRvdyBzaGVsbHMgdG8gbWF0Y2gg
SlNDLgpAQCAtMjQ0LDEwICsyNDQsMTAgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZChpbgogICAgICAgICAgICAgaWYgKCFzZXRJbmplY3RlZFNjcmlwdENvbnRleHREZWJ1
Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAgICAgICAgICAgICAgIG1faXNv
bGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKICAgICAgICAgICAgICAgICBkZWxldGUgaXNvbGF0
ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6Oml0ZXJhdG9yIHNlY3VyaXR5T3JpZ2luSXRlciA9
IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5maW5kKHdvcmxkSUQpOwogICAgICAgICBp
ZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5l
bmQoKSkKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0U2VjdXJpdHlPcmlnaW4oc2Vj
dXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwpAQCAtMjU1LDE3ICsyNTUsMjAgQEAgdm9pZCBWOFBy
b3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAgICBpc29sYXRlZENvbnRleHQg
PSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQpOwog
ICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBXVEY6OlZlY3Rvcjx2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogZXZhbHVhdGlvblJlc3VsdHMgPSBuZXcgV1RGOjpWZWN0
b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4oKTsKICAgICB2ODo6TG9jYWw8djg6OkNvbnRleHQ+
IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXcoaXNvbGF0ZWRDb250ZXh0LT5j
b250ZXh0KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250ZXh0X3Njb3BlKGNvbnRleHQp
OwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7ICsraSkKLSAgICAg
IGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgICAgZXZhbHVhdGlvblJlc3VsdHMtPmFwcGVu
ZCh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcoZXZhbHVhdGUoc291cmNlc1tpXSwgMCkp
KTsKIAogICAgIGlmICh3b3JsZElEID09IDApCiAgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ry
b3koKTsKKworICAgIHJldHVybiBldmFsdWF0aW9uUmVzdWx0czsKIH0KIAogdm9pZCBWOFByb3h5
OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiAxMDk0NjgpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBzY29wZSwgaXRzIG93biBwcm90
b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsCiAgICAgICAg
IC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IgYWxsIERPTSBu
b2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgdm9pZCBldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJj
ZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAKKyAgICAgICAg
V1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV2YWx1YXRlSW5Jc29sYXRlZFdv
cmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMs
IGludCBleHRlbnNpb25Hcm91cCk7CisKICAgICAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKIAog
ICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlv
biBlbnZpcm9ubWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MDk0NjgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAyLTI4ICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1c3Rp
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBzY3Jp
cHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV2YWx1YXRlZCBzY3Jp
cHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIwMTItMDMtMDEgIEphbWVzIFJv
Ymluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFJlbmFt
ZSBMYXllckNocm9taXVtOjpuYW1lIHRvIGRlYnVnTmFtZSB0byBiZSBtb3JlIGNvbnNpc3RlbnQg
d2l0aCBvdGhlciBkZWJ1ZyBwcm9wZXJ0aWVzLCBtYWtlIHRocmVhZHNhZmUKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNpb24gMTA5NDY4KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjc0LDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgICAgICBjb25zdCBXZWJTY3Jp
cHRTb3VyY2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gPiogZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlcygKKyAg
ICAgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNp
Z25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApID0gMDsKKwogICAg
IC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhh
bmRsZSBpZiB0aGVyZQogICAgIC8vIGlzIG5vbmUuCiAgICAgdmlydHVhbCB2ODo6TG9jYWw8djg6
OkNvbnRleHQ+IG1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdCA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDEwOTQ2
OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg5NCw2ICs4OTQsMjggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdlYkZy
YW1lSW1wbDo6ZXhlYwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlw
dChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlvbikpLnY4
VmFsdWUoKTsKIH0KIAorV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBXZWJGcmFt
ZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoCisgICAg
aW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBu
dW1Tb3VyY2VzLAorICAgIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1T
b3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKE9yZGluYWxOdW1i
ZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgT3JkaW5hbE51bWJl
cjo6Zmlyc3QoKSk7CisgICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNvZGUoCisg
ICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVybCwgcG9zaXRpb24p
KTsKKyAgICB9CisKKyAgICBWZWN0b3I8U2NyaXB0VmFsdWU+KiBzY3JpcHRSZXN1bHRzID0gIG1f
ZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2Vz
LCBleHRlbnNpb25Hcm91cCk7CisgICAgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
KiB2OFJlc3VsdHMgPSBuZXcgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KHNjcmlw
dFJlc3VsdHMtPnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NyaXB0
UmVzdWx0cy0+c2l6ZSgpOyBpKyspCisgICAgICAoKnY4UmVzdWx0cylbaV0gPSAoKnNjcmlwdFJl
c3VsdHMpW2ldLnY4VmFsdWUoKTsKKworICAgIGRlbGV0ZSBzY3JpcHRSZXN1bHRzOworICAgIHJl
dHVybiB2OFJlc3VsdHM7Cit9CisKIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMg
ZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVyZSBpcyBub25lLgogdjg6OkxvY2FsPHY4
OjpDb250ZXh0PiBXZWJGcmFtZUltcGw6Om1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdAog
ewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJKHJldmlz
aW9uIDEwOTQ2OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGNsYXNzIFdlYlBsdWdpbkNvbnRhaW5l
ckltcGw7CiBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViVmlld0ltcGw7CiAKK3RlbXBsYXRlIDx0
eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKIC8vIEltcGxlbWVudGF0aW9uIG9mIFdlYkZy
YW1lLCBub3RlIHRoYXQgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVjdC4KIGNsYXNz
IFdlYkZyYW1lSW1wbCA6IHB1YmxpYyBXZWJGcmFtZSwgcHVibGljIFJlZkNvdW50ZWQ8V2ViRnJh
bWVJbXBsPiB7CiBwdWJsaWM6CkBAIC0xMTAsNiArMTEyLDkgQEAgcHVibGljOgogI2lmIFdFQktJ
VF9VU0lOR19WOAogICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4ZWN1dGVTY3Jp
cHRBbmRSZXR1cm5WYWx1ZSgKICAgICAgICAgY29uc3QgV2ViU2NyaXB0U291cmNlJik7CisgICAg
dmlydHVhbCBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV4ZWN1dGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoCisgICAgICAgIGludCB3b3JsZElELCBjb25z
dCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywKKyAgICAg
ICAgaW50IGV4dGVuc2lvbkdyb3VwKTsKICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4gbWFpbldvcmxkU2NyaXB0Q29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNyZWF0ZUZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEwOTQ2OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTI4ICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1
c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBz
Y3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZGluZyBhIGZ1bmN0aW9uIHRvIExheW91dFRlc3RDb250cm9sbGVyIHRoYXQg
ZXZhbHVhdGVzIGEgc2NyaXB0IGluCisgICAgICAgIGFuIGlzb2xhdGVkIHdvbGQgYW4gcmV0dXJu
cyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgorCisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5
LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAg
ICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFu
ZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTItMDMtMDEgIE1pY2hhZWwgTm9yZG1hbiAgPG1pY2hh
ZWxuQGdvb2dsZS5jb20+CiAKICAgICAgICAgW2Nocm9taXVtXSBVc2Ugd2Via2l0X3N1cHBvcnQg
dG8gY3JlYXRlIHNlc3Npb24gc3RvcmFnZSBuYW1lc3BhY2VzIGluIERSVC4KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEw
OTQ2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0Myw2ICsxODQzLDE3IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2
YWx1YXRlU2NyaXB0SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RS
ZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50
LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlv
dXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAg
ZG91YmxlIHdvcmxkSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBl
eGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1
bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBy
ZXR1cm4gY29udHJvbGxlci0+ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od29ybGRJRCksIEpTQ29udGV4dEdldEdsb2JhbE9i
amVjdChjb250ZXh0KSwgc2NyaXB0LmdldCgpKTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZWxl
bWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250ZXh0UmVm
IGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBz
aXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1
ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVy
ID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUo
dGhpc09iamVjdCkpOwpAQCAtMjM3Nyw2ICsyMzg4LDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5
b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZv
ckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWRD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJlbmNvZGVIb3N0TmFtZSIsIGVuY29kZUhvc3RO
YW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZXZhbHVhdGVJbldlYkluc3BlY3RvciIs
IGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21t
YW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZmluZFN0cmluZyIsIGZpbmRTdHJpbmdD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDk0NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAg
cHVibGljOgogICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3IoKTsKICAgICB2b2lkIGV2YWx1YXRl
SW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9p
ZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVj
dFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KTsKICAgICB2b2lkIGFs
bG93Um91bmRpbmdIYWNrcygpOwogCiAgICAgYm9vbCBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5k
bGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVy
SGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tC
ZXJyeS5jcHAJKHJldmlzaW9uIDEwOTQ2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNr
YmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUlu
V2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sK
KyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVj
dCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHdvcmxkSUQpOwpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gMTA5NDY4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbAogICAgIGJpbmRNZXRob2Qo
ImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRv
UmVzaXplTW9kZSk7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsICZM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik7CiAgICAgYmluZE1l
dGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkxheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKICAg
ICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik7CiAgICAgYmluZE1l
dGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsK
ICAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlvbkNvbG9ycyIsICZMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOwpAQCAtMTMzMyw2ICsxMzM0LDM3IEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3IKICAgICByZXN1bHQtPnNl
dE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3Vt
ZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gPiogdmFsdWVzID0gMDsKKyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYm
IGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7Cisg
ICAgICAgIFdlYlNjcmlwdFNvdXJjZSBzb3VyY2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3Vt
ZW50c1sxXSkpOworICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5n
IGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBUaGlzIGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHks
IGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0IG90aGVyIHRlc3RzIGRvLgorICAgICAgICB2YWx1ZXMg
PQorICAgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoYXJndW1lbnRzWzBdLnRvSW50MzIo
KSwgJnNvdXJjZSwgMSwgMSk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIC8v
IFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3YXMgYWRkZWQsIG9ubHkgb25lIHJlc3VsdCBpcyBleHBl
Y3RlZAorICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5zaXplKCkgPT0gMSAmJiAhKCp2YWx1ZXMp
WzBdLklzRW1wdHkoKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0VmFs
dWUgPSAoKnZhbHVlcylbMF07CisgICAgICAgIC8vIFRPRE86IFRoZXJlIGFyZSBtYW55IG1vcmUg
dHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KKyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0
cmluZygpKSB7CisgICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNjcmlw
dFZhbHVlKTsKKyAgICAgICAgICByZXN1bHQtPnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOwor
ICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc0Jvb2xlYW4oKSkKKyAgICAgICAgICBy
ZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOworICAgICAgICBl
bHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgIGlmIChzY3JpcHRW
YWx1ZS0+SXNJbnQzMigpKQorICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+
VG9JbnQzMigpLT5WYWx1ZSgpKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJlc3Vs
dC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJlcigpLT5WYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkpCisgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgfQorICAgIGRlbGV0ZSB2YWx1ZXM7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXpl
KCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJp
bmcoKSkgewpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMDk0NjgpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yODksNiArMjg5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJv
bUZpbGVVUkxzKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lk
IHNldEFsbG93UnVubmluZ09mSW5zZWN1cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAorICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAg
dm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4o
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJl
dmlzaW9uIDEwOTQ2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29u
dHJvbGxlckVmbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY3Miw2ICs2NzIsMTEgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpT
U3RyaW5nUmVmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlz
aW9uIDEwOTQ2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxNSw2ICs5MTUsMTEgQEAgdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIGdfZnJlZShzY3JpcHRTdHJpbmcp
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBK
U1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxl
ck1hYy5tbQkocmV2aXNpb24gMTA5NDY4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NTcsNiArOTU3LDEx
IEBAIHVuc2lnbmVkIHdvcmxkSURGb3JXb3JsZChXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAw
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2Jh
bE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBK
U1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHRD
RihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzY3Jp
cHQpKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVy
UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RD
b250cm9sbGVyUXQuY3BwCShyZXZpc2lvbiAxMDk0NjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDYg
KzkxMCwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaEluCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0K
IAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5n
JiBzY3JpcHQpCiB7CiAgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBz
Y3JpcHQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RD
b250cm9sbGVyUXQuaAkocmV2aXNpb24gMTA5NDY4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
cXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYx
LDcgQEAgcHVibGljIHNsb3RzOgogCiAgICAgdm9pZCBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3Qg
UVN0cmluZyYgZWRpdGluZ0JlaGF2aW9yKTsKIAorICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2Ny
aXB0KTsKICAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElE
LCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwogICAgIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQg
cGFnZUluZGV4KTsKICAgICBRU3RyaW5nIHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBw
YWdlSW5kZXgsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdp
blJpZ2h0LCBpbnQgbWFyZ2luQm90dG9tLCBpbnQgbWFyZ2luTGVmdCk7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJ
KHJldmlzaW9uIDEwOTQ2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0
Q29udHJvbGxlcldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMSBAQCB1
bnNpZ25lZCB3b3JsZElERm9yV29ybGQoSVdlYlNjcmlwdFdvcmxkCiAgICAgcmV0dXJuIDA7CiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2Jq
ZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlz
LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKIHsKICAgICBDT01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2
YXRlKFF1ZXJ5LCBmcmFtZSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRU
ZXN0Q29udHJvbGxlcld4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93
eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkocmV2aXNpb24gMTA5NDY4KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1Niw2ICs0NTYsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3Zl
QWxsVmlzaQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KIH0KIAordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKK3sKKworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5NDY4
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTItMDItMjggIEVyaXEgQXVndXN0aW5lICA8ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldHVybiB2YWx1ZSBmcm9tIGV4ZWN1dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODUxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBl
eGVjdXRpbmcgYSBzY3JpcHQgYW5kIGdldHRpbmcgdGhlIHJlc3VsdCBvZiB0aGF0IHNjcmlwdC4K
KworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFu
ZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9j
aHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWw6IEFk
ZGVkLgorCiAyMDEyLTAzLTAxICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQgZ2FyZGVuaW5nLiBNYXJrIGEgSlMgc3RyaWN0IG1vZGUgdGVzdCBh
cyBmYWlsaW5nIGluIFY4LApJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0
cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4
ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0
dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitFeHBl
Y3RpbmcgNTogNQorRXhwZWN0aW5nIDMuMTQ6IDMuMTQKK0V4cGVjdGluZyAiVGhlIHF1aWNrIGJy
b3duIGRvZy4iOiBUaGUgcXVpY2sgYnJvd24gZG9nLgorRXhwZWN0aW5nIGZhbHNlOiBmYWxzZQor
RXhwZWN0aW5nIG51bGw6IG51bGwKKwpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVj
dXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCisgIHZhciBpbnRUZXN0ID0g
bGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSgwLCAiNSIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgNTogJyArIGludFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgZG91
YmxlVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUoMCwgIjMuMTQiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIDMuMTQ6ICcgKyBkb3VibGVUZXN0
KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
YnInKSk7CisKKyAgdmFyIHN0cmluZ1Rlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICciVGhlIHF1aWNrIGJyb3du
IGRvZy4iJyk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJ0V4cGVjdGluZyAiVGhlIHF1aWNrIGJyb3duIGRvZy4iOiAnICsgc3RyaW5nVGVzdCkp
OworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Jy
JykpOworCisgIHZhciBib29sZWFuVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgIiF0cnVlIik7CisgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyBm
YWxzZTogJyArIGJvb2xlYW5UZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIG51bGxUZXN0ID0gbGF5b3V0VGVz
dENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgw
LCAibnVsbCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKCdFeHBlY3RpbmcgbnVsbDogJyArIG51bGxUZXN0KSk7CisgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7Cit9Cis8L3NjcmlwdD4K
KzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130463</attachid>
            <date>2012-03-06 16:21:51 -0800</date>
            <delta_ts>2012-03-06 16:45:01 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120306162047.patch</filename>
            <type>text/plain</type>
            <size>30016</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0wNiAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2UgY29t
cG9zaXRlQW5kUmVhZGJhY2sgYW5kIGRhbWFnZSB0cmFja2luZyBwbGF5IG5pY2VseSB0b2dldGhl
cgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTQgKzE2MSwzMCBAQCBi
b29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgcmV0dXJuIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAotdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCitXVEY6OlZlY3RvcjxTY3Jp
cHRWYWx1ZT4qIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKIHsK
LSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCAw
KTsKKyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdjhSZXN1bHRzID0g
bV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7Cisg
ICAgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzID0gbmV3IFdURjo6VmVjdG9yPFNj
cmlwdFZhbHVlPigpOworCisgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID46
Oml0ZXJhdG9yIGl0cjsKKyAgICAgIGZvciAoaXRyID0gdjhSZXN1bHRzLT5iZWdpbigpOyBpdHIg
IT0gdjhSZXN1bHRzLT5lbmQoKTsgKytpdHIpCisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChTY3Jp
cHRWYWx1ZSgqaXRyKSk7CisKKyAgICBkZWxldGUgdjhSZXN1bHRzOworICAgIHJldHVybiByZXN1
bHRzOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNl
cywgaW50IGV4dGVuc2lvbkdyb3VwKQorV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25z
dCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkK
IHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2Vz
LCBleHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+
ID4qIHY4UmVzdWx0cyA9IG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQs
IHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4q
IHJlc3VsdHMgPSBuZXcgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KCk7CisKKyAgICBXVEY6OlZl
Y3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRyOworICAgICAgZm9yIChp
dHIgPSB2OFJlc3VsdHMtPmJlZ2luKCk7IGl0ciAhPSB2OFJlc3VsdHMtPmVuZCgpOyArK2l0cikK
KyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKFNjcmlwdFZhbHVlKCppdHIpKTsKKworICAgIGRlbGV0
ZSB2OFJlc3VsdHM7CisgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwOTk2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgLy8gYXMgYSBzdHJpbmcuCiAgICAg
U2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogCi0gICAgdm9p
ZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4mKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIGV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRT
b3VyY2VDb2RlPiYpOwogCiAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhbiBpc29sYXRl
ZCB3b3JsZC4gVGhlIHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlLAogICAgIC8vIGl0
cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5n
LCBBcnJheSwgYW5kIHNvLW9uKSwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIC8vIElm
IHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgogICAgIC8v
CiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4KLSAgICB2b2lk
IGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8
U2NyaXB0VmFsdWU+KiBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCiAg
ICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlw
dGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0
YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcs
MTEgKzIxNywxMSBAQCBib29sIFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXApCitXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogVjhQcm94
eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgbmVlZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2lu
ZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KICAgICBpZiAoIXdpbmRvd1NoZWxsKCkt
PmluaXRDb250ZXh0SWZOZWVkZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
MDsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBWOElzb2xhdGVkQ29u
dGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gMDsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFY4UHJv
eHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgICAgICAgICBpc29sYXRlZENvbnRl
eHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQp
OwogICAgICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkg
ewogICAgICAgICAgICAgICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIHVzaW5nIHdpbmRv
dyBzaGVsbHMgdG8gbWF0Y2ggSlNDLgpAQCAtMjQ0LDEwICsyNDQsMTAgQEAgdm9pZCBWOFByb3h5
OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAgICAgICAgaWYgKCFzZXRJbmplY3Rl
ZFNjcmlwdENvbnRleHREZWJ1Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAg
ICAgICAgICAgICAgIG1faXNvbGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKICAgICAgICAgICAg
ICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6Oml0ZXJhdG9yIHNl
Y3VyaXR5T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5maW5kKHdv
cmxkSUQpOwogICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0
U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwpAQCAtMjU1LDE3ICsy
NTUsMjAgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAg
ICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9u
R3JvdXAsIHdvcmxkSUQpOwogICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCku
SXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogZXZhbHVhdGlvblJlc3Vs
dHMgPSBuZXcgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4oKTsKICAgICB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
aXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250
ZXh0X3Njb3BlKGNvbnRleHQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5z
aXplKCk7ICsraSkKLSAgICAgIGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgICAgZXZhbHVh
dGlvblJlc3VsdHMtPmFwcGVuZCh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcoZXZhbHVh
dGUoc291cmNlc1tpXSwgMCkpKTsKIAogICAgIGlmICh3b3JsZElEID09IDApCiAgICAgICBpc29s
YXRlZENvbnRleHQtPmRlc3Ryb3koKTsKKworICAgIHJldHVybiBldmFsdWF0aW9uUmVzdWx0czsK
IH0KIAogdm9pZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdv
cmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiAxMDk5NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NSw4ICsxNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBz
Y29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3Rz
IChTdHJpbmcsCiAgICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFw
cGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4K
LSAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwot
ICAgICAgICAKKyAgICAgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCk7CisKICAgICAgICAgdm9pZCBz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+KTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRo
ZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMDk5NjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAg
ICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIw
MTItMDMtMDYgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtDaHJvbWl1bV0gQWRkIE9WRVJSSURFcyB0byBXZWJXb3JrZXJDbGllbnRJbXBsLmgKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNpb24gMTA5OTY1
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjc0LDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgICAgICBjb25zdCBX
ZWJTY3JpcHRTb3VyY2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFdlYlZlY3Rvcjx2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gPiogZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
cygKKyAgICAgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0lu
LCB1bnNpZ25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApID0gMDsK
KwogICAgIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVt
cHR5IGhhbmRsZSBpZiB0aGVyZQogICAgIC8vIGlzIG5vbmUuCiAgICAgdmlydHVhbCB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdCA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9u
IDEwOTk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5NCw2ICs4OTQsMjggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkZyYW1lSW1wbDo6ZXhlYwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0
ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlv
bikpLnY4VmFsdWUoKTsKIH0KIAorV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBX
ZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMo
CisgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNp
Z25lZCBudW1Tb3VyY2VzLAorICAgIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKE9yZGlu
YWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgT3JkaW5h
bE51bWJlcjo6Zmlyc3QoKSk7CisgICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNv
ZGUoCisgICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVybCwgcG9z
aXRpb24pKTsKKyAgICB9CisKKyAgICBWZWN0b3I8U2NyaXB0VmFsdWU+KiBzY3JpcHRSZXN1bHRz
ID0gIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBz
b3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZh
bHVlPiA+KiB2OFJlc3VsdHMgPSBuZXcgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
KHNjcmlwdFJlc3VsdHMtPnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NyaXB0UmVzdWx0cy0+c2l6ZSgpOyBpKyspCisgICAgICAoKnY4UmVzdWx0cylbaV0gPSAoKnNj
cmlwdFJlc3VsdHMpW2ldLnY4VmFsdWUoKTsKKworICAgIGRlbGV0ZSBzY3JpcHRSZXN1bHRzOwor
ICAgIHJldHVybiB2OFJlc3VsdHM7Cit9CisKIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9y
IHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVyZSBpcyBub25lLgogdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBXZWJGcmFtZUltcGw6Om1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJ
KHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGNsYXNzIFdlYlBsdWdpbkNv
bnRhaW5lckltcGw7CiBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViVmlld0ltcGw7CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKIC8vIEltcGxlbWVudGF0aW9uIG9m
IFdlYkZyYW1lLCBub3RlIHRoYXQgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVjdC4K
IGNsYXNzIFdlYkZyYW1lSW1wbCA6IHB1YmxpYyBXZWJGcmFtZSwgcHVibGljIFJlZkNvdW50ZWQ8
V2ViRnJhbWVJbXBsPiB7CiBwdWJsaWM6CkBAIC0xMTAsNiArMTEyLDkgQEAgcHVibGljOgogI2lm
IFdFQktJVF9VU0lOR19WOAogICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4ZWN1
dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICAgICAgY29uc3QgV2ViU2NyaXB0U291cmNlJik7
CisgICAgdmlydHVhbCBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV4ZWN1dGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoCisgICAgICAgIGludCB3b3JsZElE
LCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywK
KyAgICAgICAgaW50IGV4dGVuc2lvbkdyb3VwKTsKICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gbWFpbldvcmxkU2NyaXB0Q29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZUZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAg
PGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVj
dXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBhIGZ1bmN0aW9uIHRvIExheW91dFRlc3RDb250cm9sbGVy
IHRoYXQgZXZhbHVhdGVzIGEgc2NyaXB0IGluCisgICAgICAgIGFuIGlzb2xhdGVkIHdvbGQgYW4g
cmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFj
a0JlcnJ5LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTItMDMtMDYgIE9qYW4gVmFmYWkgIDxvamFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDb3B5aW5nIG9sZCBiYXNlbGluZXMgdGhyb3dzIGFu
IGVycm9yIGlmIHRoZSBuZXcgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwOTk2
NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0NCw2ICsxODQ0LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91
YmxlIHdvcmxkSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250
cm9sbGVyLT5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBzY3JpcHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JF
bGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMjM4Myw2
ICsyMzk1LDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAg
ICAgICB7ICJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJlbmNvZGVIb3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIs
IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAiZXhlY0NvbW1hbmQiLCBleGVjQ29tbWFuZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImZpbmRTdHJpbmciLCBmaW5kU3RyaW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTA5OTY1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzEyLDYgKzMxMiw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3NlV2ViSW5zcGVj
dG9yKCk7CiAgICAgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0
cmluZ1JlZiBzY3JpcHQpOwogICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
dW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBz
Y3JpcHQpOworICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
UmVmIHNjcmlwdCk7CiAgICAgdm9pZCBhbGxvd1JvdW5kaW5nSGFja3MoKTsKIAogICAgIGJvb2wg
c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVy
biBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tC
ZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9M
YXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMDk5NjUpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tC
ZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsMTQgQEAgdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHdvcmxkSUQpOworICAg
IFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHQpOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVm
IGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFVOVVNFRF9QQVJBTSh3
b3JsZElEKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0
Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJlbmFibGVBdXRvUmVzaXplTW9kZSIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUpOwogICAgIGJpbmRNZXRob2QoImV2
YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IpOwogICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZSk7CiAgICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4pOwogICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpleGVjQ29tbWFuZCk7CiAgICAgYmluZE1ldGhvZCgiZm9yY2VSZWRTZWxlY3Rp
b25Db2xvcnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3Jz
KTsKQEAgLTEzMzMsNiArMTMzNCwzNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRY
U1NBdWRpdG9yCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAg
ICBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHZhbHVlcyA9IDA7CisgICAgaWYg
KGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1
bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNw
cFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgLy8gVGhpcyByZWxp
ZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBh
IGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0
ZXN0cyBkby4KKyAgICAgICAgdmFsdWVzID0KKyAgICAgICAgICBtX3NoZWxsLT53ZWJWaWV3KCkt
PmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWVzKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEpOworICAgIH0KKyAgICBy
ZXN1bHQtPnNldE51bGwoKTsKKyAgICAvLyBTaW5jZSBvbmx5IG9uZSBzY3JpcHQgd2FzIGFkZGVk
LCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKKyAgICBpZiAodmFsdWVzICYmIHZhbHVlcy0+
c2l6ZSgpID09IDEgJiYgISgqdmFsdWVzKVswXS5Jc0VtcHR5KCkpIHsKKyAgICAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gKCp2YWx1ZXMpWzBdOworICAgICAgICAvLyBU
T0RPOiBUaGVyZSBhcmUgbWFueSBtb3JlIHR5cGVzIHRoYXQgY2FuIGJlIGhhbmRsZWQuCisgICAg
ICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNTdHJpbmcoKSkgeworICAgICAgICAgIHY4OjpTdHJpbmc6
OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7CisgICAgICAgICAgcmVzdWx0LT5zZXQo
c3RkOjpzdHJpbmcoKmFzY2lpVjgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+
SXNCb29sZWFuKCkpCisgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVh
bigpLT5WYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVtYmVyKCkp
IHsKKyAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkKKyAgICAgICAgICAgICAg
cmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7CisgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9OdW1iZXIoKS0+
VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVsbCgpKQorICAg
ICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIH0KKyAgICBkZWxldGUgdmFsdWVzOworfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQog
ewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVy
KCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24g
MTA5OTY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVu
dChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICB2b2lkIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRM
aXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0SXNv
bGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9s
bGVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0
VGVzdENvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxMDk5NjUpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NzIsNiArNjcyLDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
ZWIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkLCBK
U09iamVjdFJlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
dW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVy
R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVz
dENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAxMDk5NjUpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MjIsNiArOTIyLDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIK
ICAgICBnX2ZyZWUoc2NyaXB0U3RyaW5nKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgdGhpcy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlv
dXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDEwOTk2NSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtOTU3LDYgKzk1NywxMSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2Vi
U2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3
b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpT
T2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmco
a0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gMTA5OTY1
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTkxMCw2ICs5MTAsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c3RhcnRTcGVlY2hJbgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNv
bnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChp
bnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVl
U3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgp
LT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDEwOTk2NSkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjYxLDYgKzI2MSw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQg
c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFFTdHJpbmcmIGVkaXRpbmdCZWhhdmlvcik7CiAKKyAg
ICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdv
cmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAgICBi
b29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CiAgICAgUVN0cmluZyBwYWdlU2l6
ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQs
IGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1h
cmdpbkxlZnQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMDk5NjUpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjc3LDYgKzEyNzcsMTEgQEAgdW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3Jp
cHRXb3JsZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmpl
Y3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgQ09NUHRyPElX
ZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJl
dmlzaW9uIDEwOTk2NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250
cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsNiArNDU2LDExIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2kKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYg
Z2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisKK30KKwogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk2NSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAg
PGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVj
dXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RpbmcgZXhlY3V0aW5nIGEgc2NyaXB0IGFuZCBnZXR0aW5nIHRo
ZSByZXN1bHQgb2YgdGhhdCBzY3JpcHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9o
dHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUt
YW5kLXJldHVybi12YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0wNiAgTWlobmVhIE92aWRl
bmllICA8bWlobmVhQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTUmVnaW9uc11bQ1NTT01dUmVz
dHJpY3QgcGFyc2luZyBvZiBuYW1lZCBmbG93IG5hbWUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRm
b3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0
dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNj
L2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNiBAQAorRXhwZWN0aW5nIDU6IDUKK0V4cGVjdGluZyAzLjE0OiAzLjE0CitFeHBlY3Rp
bmcgIlRoZSBxdWljayBicm93biBkb2cuIjogVGhlIHF1aWNrIGJyb3duIGRvZy4KK0V4cGVjdGlu
ZyBmYWxzZTogZmFsc2UKK0V4cGVjdGluZyBudWxsOiBudWxsCisKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFs
dWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRw
L3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1h
bmQtcmV0dXJuLXZhbHVlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRl
c3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKwor
ICB2YXIgaW50VGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgIjUiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIDU6ICcgKyBpbnRUZXN0KSk7
CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnIn
KSk7CisKKyAgdmFyIGRvdWJsZVRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICIzLjE0Iik7CisgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyAzLjE0
OiAnICsgZG91YmxlVGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBzdHJpbmdUZXN0ID0gbGF5b3V0VGVzdENv
bnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAn
IlRoZSBxdWljayBicm93biBkb2cuIicpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgIlRoZSBxdWljayBicm93biBkb2cuIjog
JyArIHN0cmluZ1Rlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgYm9vbGVhblRlc3QgPSBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICIh
dHJ1ZSIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCdFeHBlY3RpbmcgZmFsc2U6ICcgKyBib29sZWFuVGVzdCkpOworICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBudWxs
VGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUoMCwgIm51bGwiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIG51bGw6ICcgKyBudWxsVGVzdCkpOwor
ICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykp
OworfQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>130473</attachid>
            <date>2012-03-06 16:49:30 -0800</date>
            <delta_ts>2012-03-15 10:12:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120306164826.patch</filename>
            <type>text/plain</type>
            <size>30024</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0wNiAgU2hhd24gU2luZ2gg
IDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIE1ha2UgY29t
cG9zaXRlQW5kUmVhZGJhY2sgYW5kIGRhbWFnZSB0cmFja2luZyBwbGF5IG5pY2VseSB0b2dldGhl
cgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsMTQgKzE2MSwzMCBAQCBi
b29sIFNjcmlwdENvbnRyb2xsZXI6OnByb2Nlc3NpbmdVc2VyR2VzCiAgICAgcmV0dXJuIFVzZXJH
ZXN0dXJlSW5kaWNhdG9yOjpwcm9jZXNzaW5nVXNlckdlc3R1cmUoKTsKIH0KIAotdm9pZCBTY3Jp
cHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMpCitXVEY6OlZlY3RvcjxTY3Jp
cHRWYWx1ZT4qIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKIHsK
LSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCAw
KTsKKyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdjhSZXN1bHRzID0g
bV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7Cisg
ICAgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzID0gbmV3IFdURjo6VmVjdG9yPFNj
cmlwdFZhbHVlPigpOworCisgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID46
Oml0ZXJhdG9yIGl0cjsKKyAgICAgIGZvciAoaXRyID0gdjhSZXN1bHRzLT5iZWdpbigpOyBpdHIg
IT0gdjhSZXN1bHRzLT5lbmQoKTsgKytpdHIpCisgICAgICAgIHJlc3VsdHMtPmFwcGVuZChTY3Jp
cHRWYWx1ZSgqaXRyKSk7CisKKyAgICBkZWxldGUgdjhSZXN1bHRzOworICAgIHJldHVybiByZXN1
bHRzOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNl
cywgaW50IGV4dGVuc2lvbkdyb3VwKQorV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KiBTY3JpcHRD
b250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25z
dCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCkK
IHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2Vz
LCBleHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+
ID4qIHY4UmVzdWx0cyA9IG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQs
IHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4q
IHJlc3VsdHMgPSBuZXcgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+KCk7CisKKyAgICBXVEY6OlZl
Y3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRyOworICAgICAgZm9yIChp
dHIgPSB2OFJlc3VsdHMtPmJlZ2luKCk7IGl0ciAhPSB2OFJlc3VsdHMtPmVuZCgpOyArK2l0cikK
KyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKFNjcmlwdFZhbHVlKCppdHIpKTsKKworICAgIGRlbGV0
ZSB2OFJlc3VsdHM7CisgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJv
bGxlcjo6c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVm
UHRyPFNlY3VyaXR5T3JpZ2luPiBzZWN1cml0eU9yaWdpbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHJldmlzaW9uIDEwOTk2NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtODUsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgLy8gYXMgYSBzdHJpbmcuCiAgICAg
U2NyaXB0VmFsdWUgZXZhbHVhdGUoY29uc3QgU2NyaXB0U291cmNlQ29kZSYpOwogCi0gICAgdm9p
ZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4mKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIGV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRT
b3VyY2VDb2RlPiYpOwogCiAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBpbiBhbiBpc29sYXRl
ZCB3b3JsZC4gVGhlIHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3BlLAogICAgIC8vIGl0
cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5n
LCBBcnJheSwgYW5kIHNvLW9uKSwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGljOgogICAgIC8vIElm
IHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVhdGVkLgogICAgIC8v
CiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVyZS4KLSAgICB2b2lk
IGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CisgICAgV1RGOjpWZWN0b3I8
U2NyaXB0VmFsdWU+KiBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwogCiAg
ICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlw
dGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0
YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcs
MTEgKzIxNywxMSBAQCBib29sIFY4UHJveHk6OmhhbmRsZU91dE9mTWVtb3J5KCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXApCitXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogVjhQcm94
eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewogICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgbmVlZCB0byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2lu
ZG93U2hlbGwgZm9yIHRoZSBpc29sYXRlZCB3b3JsZC4KICAgICBpZiAoIXdpbmRvd1NoZWxsKCkt
PmluaXRDb250ZXh0SWZOZWVkZWQoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4g
MDsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBWOElzb2xhdGVkQ29u
dGV4dCogaXNvbGF0ZWRDb250ZXh0ID0gMDsKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lkIFY4UHJv
eHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgICAgICAgICBpc29sYXRlZENvbnRl
eHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9uR3JvdXAsIHdvcmxkSUQp
OwogICAgICAgICAgICAgaWYgKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpLklzRW1wdHkoKSkg
ewogICAgICAgICAgICAgICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoYW5nZSB0aGlzIHRvIHVzaW5nIHdpbmRv
dyBzaGVsbHMgdG8gbWF0Y2ggSlNDLgpAQCAtMjQ0LDEwICsyNDQsMTAgQEAgdm9pZCBWOFByb3h5
OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAgICAgICAgaWYgKCFzZXRJbmplY3Rl
ZFNjcmlwdENvbnRleHREZWJ1Z0lkKGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKSkgewogICAg
ICAgICAgICAgICAgIG1faXNvbGF0ZWRXb3JsZHMudGFrZSh3b3JsZElEKTsKICAgICAgICAgICAg
ICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAg
ICAKKwogICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6Oml0ZXJhdG9yIHNl
Y3VyaXR5T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5maW5kKHdv
cmxkSUQpOwogICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1faXNvbGF0ZWRXb3Js
ZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dC0+c2V0
U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwpAQCAtMjU1LDE3ICsy
NTUsMjAgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbgogICAgICAg
ICBpc29sYXRlZENvbnRleHQgPSBuZXcgVjhJc29sYXRlZENvbnRleHQodGhpcywgZXh0ZW5zaW9u
R3JvdXAsIHdvcmxkSUQpOwogICAgICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCku
SXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBkZWxldGUgaXNvbGF0ZWRDb250ZXh0OwotICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAK
KyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogZXZhbHVhdGlvblJlc3Vs
dHMgPSBuZXcgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4oKTsKICAgICB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
aXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBjb250
ZXh0X3Njb3BlKGNvbnRleHQpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5z
aXplKCk7ICsraSkKLSAgICAgIGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgICAgZXZhbHVh
dGlvblJlc3VsdHMtPmFwcGVuZCh2ODo6UGVyc2lzdGVudDx2ODo6VmFsdWU+OjpOZXcoZXZhbHVh
dGUoc291cmNlc1tpXSwgMCkpKTsKIAogICAgIGlmICh3b3JsZElEID09IDApCiAgICAgICBpc29s
YXRlZENvbnRleHQtPmRlc3Ryb3koKTsKKworICAgIHJldHVybiBldmFsdWF0aW9uUmVzdWx0czsK
IH0KIAogdm9pZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdv
cmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiAxMDk5NjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NSw4ICsxNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBz
Y29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3Rz
IChTdHJpbmcsCiAgICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFw
cGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4K
LSAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwot
ICAgICAgICAKKyAgICAgICAgV1RGOjpWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCk7CisKICAgICAgICAgdm9pZCBz
ZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2Vj
dXJpdHlPcmlnaW4+KTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRo
ZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxMDk5NjUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAg
ICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1l
SW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIw
MTItMDMtMDYgIERhdmlkIEdyb2dhbiAgPGRncm9nYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFtDaHJvbWl1bV0gQWRkIE9WRVJSSURFcyB0byBXZWJXb3JrZXJDbGllbnRJbXBsLmgKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkocmV2aXNpb24gMTA5OTY1
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjc0LDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgICAgICBjb25zdCBX
ZWJTY3JpcHRTb3VyY2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIFdlYlZlY3Rvcjx2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gPiogZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
cygKKyAgICAgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0lu
LCB1bnNpZ25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApID0gMDsK
KwogICAgIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVt
cHR5IGhhbmRsZSBpZiB0aGVyZQogICAgIC8vIGlzIG5vbmUuCiAgICAgdmlydHVhbCB2ODo6TG9j
YWw8djg6OkNvbnRleHQ+IG1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdCA9IDA7CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9u
IDEwOTk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTg5NCw2ICs4OTQsMjggQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFdlYkZyYW1lSW1wbDo6ZXhlYwogICAgIHJldHVybiBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0
ZVNjcmlwdChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZS5jb2RlLCBzb3VyY2UudXJsLCBwb3NpdGlv
bikpLnY4VmFsdWUoKTsKIH0KIAorV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBX
ZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMo
CisgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNp
Z25lZCBudW1Tb3VyY2VzLAorICAgIGludCBleHRlbnNpb25Hcm91cCkKK3sKKyAgICBWZWN0b3I8
U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKE9yZGlu
YWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgT3JkaW5h
bE51bWJlcjo6Zmlyc3QoKSk7CisgICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJjZUNv
ZGUoCisgICAgICAgICAgICBzb3VyY2VzSW5baV0uY29kZSwgc291cmNlc0luW2ldLnVybCwgcG9z
aXRpb24pKTsKKyAgICB9CisKKyAgICBWZWN0b3I8U2NyaXB0VmFsdWU+KiBzY3JpcHRSZXN1bHRz
ID0gIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBz
b3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZh
bHVlPiA+KiB2OFJlc3VsdHMgPSBuZXcgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+
KHNjcmlwdFJlc3VsdHMtPnNpemUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2NyaXB0UmVzdWx0cy0+c2l6ZSgpOyBpKyspCisgICAgICAoKnY4UmVzdWx0cylbaV0gPSAoKnNj
cmlwdFJlc3VsdHMpW2ldLnY4VmFsdWUoKTsKKworICAgIGRlbGV0ZSBzY3JpcHRSZXN1bHRzOwor
ICAgIHJldHVybiB2OFJlc3VsdHM7Cit9CisKIC8vIFJldHVybnMgdGhlIFY4IGNvbnRleHQgZm9y
IHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVyZSBpcyBub25lLgogdjg6Okxv
Y2FsPHY4OjpDb250ZXh0PiBXZWJGcmFtZUltcGw6Om1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBj
b25zdAogewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJ
KHJldmlzaW9uIDEwOTk2NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1l
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGNsYXNzIFdlYlBsdWdpbkNv
bnRhaW5lckltcGw7CiBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViVmlld0ltcGw7CiAKK3RlbXBs
YXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKIC8vIEltcGxlbWVudGF0aW9uIG9m
IFdlYkZyYW1lLCBub3RlIHRoYXQgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIG9iamVjdC4K
IGNsYXNzIFdlYkZyYW1lSW1wbCA6IHB1YmxpYyBXZWJGcmFtZSwgcHVibGljIFJlZkNvdW50ZWQ8
V2ViRnJhbWVJbXBsPiB7CiBwdWJsaWM6CkBAIC0xMTAsNiArMTEyLDkgQEAgcHVibGljOgogI2lm
IFdFQktJVF9VU0lOR19WOAogICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4ZWN1
dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICAgICAgY29uc3QgV2ViU2NyaXB0U291cmNlJik7
CisgICAgdmlydHVhbCBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIGV4ZWN1dGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZXMoCisgICAgICAgIGludCB3b3JsZElE
LCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywK
KyAgICAgICAgaW50IGV4dGVuc2lvbkdyb3VwKTsKICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gbWFpbldvcmxkU2NyaXB0Q29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IGNyZWF0ZUZpbGVTeXN0ZW0oV2ViRmlsZVN5c3RlbTo6VHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAg
PGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVj
dXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZGluZyBhIGZ1bmN0aW9uIHRvIExheW91dFRlc3RDb250cm9sbGVy
IHRoYXQgZXZhbHVhdGVzIGEgc2NyaXB0IGluCisgICAgICAgIGFuIGlzb2xhdGVkIHdvbGQgYW4g
cmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFj
a0JlcnJ5LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTItMDMtMDYgIE9qYW4gVmFmYWkgIDxvamFu
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBDb3B5aW5nIG9sZCBiYXNlbGluZXMgdGhyb3dzIGFu
IGVycm9yIGlmIHRoZSBuZXcgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEwOTk2
NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTg0NCw2ICsxODQ0LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRU
ZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91
YmxlIHdvcmxkSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNl
cHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVu
dHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250
cm9sbGVyLT5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRl
eHQpLCBzY3JpcHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JF
bGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1
bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29u
c3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMjM4Myw2
ICsyMzk1LDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAg
ICAgICB7ICJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50
RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJlbmNvZGVIb3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAx
MDk5NjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTIsNiArMzEyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VX
ZWJJbnNwZWN0b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxs
SWQsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFu
ZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCiAg
ICAgYm9vbCBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xs
ZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFj
a2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDEwOTk2
NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xs
ZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJ
RCk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNj
cmlwdCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNP
YmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VE
X1BBUkFNKHdvcmxkSUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTA5OTY1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6Okxh
eW91dFRlc3RDb250cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwg
JkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAgYmluZE1l
dGhvZCgiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYkluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJmb3JjZVJl
ZFNlbGVjdGlvbkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rp
b25Db2xvcnMpOwpAQCAtMTMzMyw2ICsxMzM0LDM3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldFhTU0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQoreworICAgIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdmFsdWVzID0gMDsK
KyAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3VtZW50c1swXS5pc051bWJlcigp
ICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7CisgICAgICAgIFdlYlNjcmlwdFNvdXJjZSBz
b3VyY2UoY3BwVmFyaWFudFRvV2ViU3RyaW5nKGFyZ3VtZW50c1sxXSkpOworICAgICAgICAvLyBU
aGlzIHJlbGllcyBvbiB0aGUgaWZyYW1lIGZvY3VzaW5nIGl0c2VsZiB3aGVuIGl0IGxvYWRzLiBU
aGlzIGlzIGEgYml0CisgICAgICAgIC8vIHNrZXRjaHksIGJ1dCBpdCBzZWVtcyB0byBiZSB3aGF0
IG90aGVyIHRlc3RzIGRvLgorICAgICAgICB2YWx1ZXMgPQorICAgICAgICAgIG1fc2hlbGwtPndl
YlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCktPmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZXMoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNvdXJjZSwgMSwgMSk7CisgICAg
fQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3
YXMgYWRkZWQsIG9ubHkgb25lIHJlc3VsdCBpcyBleHBlY3RlZAorICAgIGlmICh2YWx1ZXMgJiYg
dmFsdWVzLT5zaXplKCkgPT0gMSAmJiAhKCp2YWx1ZXMpWzBdLklzRW1wdHkoKSkgeworICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSAoKnZhbHVlcylbMF07CisgICAg
ICAgIC8vIFRPRE86IFRoZXJlIGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxl
ZC4KKyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7CisgICAgICAgICAgdjg6
OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNjcmlwdFZhbHVlKTsKKyAgICAgICAgICByZXN1
bHQtPnNldChzdGQ6OnN0cmluZygqYXNjaWlWOCkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcmlw
dFZhbHVlLT5Jc0Jvb2xlYW4oKSkKKyAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+
VG9Cb29sZWFuKCktPlZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNO
dW1iZXIoKSkgeworICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNJbnQzMigpKQorICAgICAg
ICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9JbnQzMigpLT5WYWx1ZSgpKTsKKyAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051
bWJlcigpLT5WYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxs
KCkpCisgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQorICAgIGRlbGV0ZSB2YWx1
ZXM7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiBy
ZXN1bHQpCiB7CiAgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0u
aXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgewpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShy
ZXZpc2lvbiAxMDk5NjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODksNiArMjg5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0QWxsb3dGaWxlQWNjZXNzRnJvbUZpbGVVUkxzKGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldEFsbG93UnVubmluZ09mSW5zZWN1
cmVDb250ZW50KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIAorICAgIHZv
aWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9p
ZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oY29uc3QgQ3BwQXJndW1lbnRMaXN0Jiwg
Q3BwVmFyaWFudCopOwogCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVz
dENvbnRyb2xsZXJFZmwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Vm
bC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY3Miw2ICs2NzIsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5z
aWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZCh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9M
YXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTkyMiw2ICs5MjIsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVJbldlYgogICAgIGdfZnJlZShzY3JpcHRTdHJpbmcpOwogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkocmV2aXNpb24gMTA5OTY1
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC05NTcsNiArOTU3LDExIEBAIHVuc2lnbmVkIHdvcmxkSURGb3JX
b3JsZChXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAg
ICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBzY3JpcHRDRihBZG9wdENGLCBKU1N0cmluZ0NvcHlD
RlN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBzY3JpcHQpKTsKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwCShyZXZpc2lv
biAxMDk5NjUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEwLDYgKzkxMCwxMSBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpzdGFydFNwZWVjaEluCiAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zOTQ4NS4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShpbnQgd29y
bGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQu
Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCiB7CiAgICAgRHVtcFJl
bmRlclRyZWVTdXBwb3J0UXQ6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKG1fZHJ0LT53
ZWJQYWdlKCktPm1haW5GcmFtZSgpLCB3b3JsZElELCBzY3JpcHQpOwpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkocmV2aXNpb24g
MTA5OTY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNiArMjYxLDcgQEAgcHVibGljIHNsb3RzOgogCiAg
ICAgdm9pZCBzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgUVN0cmluZyYgZWRpdGluZ0JlaGF2aW9y
KTsKIAorICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZShpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAgICB2b2lkIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQp
OwogICAgIGJvb2wgaXNQYWdlQm94VmlzaWJsZShpbnQgcGFnZUluZGV4KTsKICAgICBRU3RyaW5n
IHBhZ2VTaXplQW5kTWFyZ2luc0luUGl4ZWxzKGludCBwYWdlSW5kZXgsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgaW50IG1hcmdpblRvcCwgaW50IG1hcmdpblJpZ2h0LCBpbnQgbWFyZ2luQm90dG9t
LCBpbnQgbWFyZ2luTGVmdCk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0
VGVzdENvbnRyb2xsZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHJldmlzaW9uIDEwOTk2NSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyNzcsNiArMTI3NywxMSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQo
SVdlYlNjcmlwdFdvcmxkCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWdu
ZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCiB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElE
LCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKIHsKICAgICBD
T01QdHI8SVdlYkZyYW1lUHJpdmF0ZT4gZnJhbWVQcml2YXRlKFF1ZXJ5LCBmcmFtZSk7CkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4
LmNwcAkocmV2aXNpb24gMTA5OTY1KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1Niw2ICs0NTYsMTEgQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cmVtb3ZlQWxsVmlzaQogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgdGhpcy4KIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09i
amVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKworfQorCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlw
dCkKIHsKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTA5OTY1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTItMDMtMDIgIEVyaXEgQXVn
dXN0aW5lICA8ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldHVybiB2YWx1ZSBm
cm9tIGV4ZWN1dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdGluZyBleGVjdXRpbmcgYSBzY3JpcHQgYW5kIGdl
dHRpbmcgdGhlIHJlc3VsdCBvZiB0aGF0IHNjcmlwdC4KKworICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2Mv
ZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWw6IEFkZGVkLgorCiAyMDEyLTAzLTA2ICBNaWhu
ZWEgT3ZpZGVuaWUgIDxtaWhuZWFAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1NSZWdpb25zXVtD
U1NPTV1SZXN0cmljdCBwYXJzaW5nIG9mIG5hbWVkIGZsb3cgbmFtZQpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12
YWx1ZS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rl
c3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2IEBACitFeHBlY3RpbmcgNTogNQorRXhwZWN0aW5nIDMuMTQ6IDMuMTQK
K0V4cGVjdGluZyAiVGhlIHF1aWNrIGJyb3duIGRvZy4iOiBUaGUgcXVpY2sgYnJvd24gZG9nLgor
RXhwZWN0aW5nIGZhbHNlOiBmYWxzZQorRXhwZWN0aW5nIG51bGw6IG51bGwKKwpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJl
dHVybi12YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9l
eGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCisgIHZhciBpbnRUZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiNSIpOworICBkb2N1bWVudC5ib2R5
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgNTogJyArIGlu
dFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdicicpKTsKKworICB2YXIgZG91YmxlVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgIjMuMTQiKTsKKyAg
ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0
aW5nIDMuMTQ6ICcgKyBkb3VibGVUZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIHN0cmluZ1Rlc3QgPSBsYXlv
dXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKDAsICciVGhlIHF1aWNrIGJyb3duIGRvZy4iJyk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyAiVGhlIHF1aWNrIGJyb3du
IGRvZy4iOiAnICsgc3RyaW5nVGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBib29sZWFuVGVzdCA9IGxheW91
dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWUoMCwgIiF0cnVlIik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoJ0V4cGVjdGluZyBmYWxzZTogJyArIGJvb2xlYW5UZXN0KSk7CisgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAg
dmFyIG51bGxUZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAibnVsbCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgbnVsbDogJyArIG51bGxU
ZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnYnInKSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132067</attachid>
            <date>2012-03-15 10:12:21 -0700</date>
            <delta_ts>2012-03-16 15:33:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120315101108.patch</filename>
            <type>text/plain</type>
            <size>29990</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0xNCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBl
eHRyYWN0IENvbXBpbGVyU2NyaXB0TWFwcGluZyBmcm9tIFJhd1NvdXJjZUNvZGUuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSwxNCArMTYxLDMwIEBAIGJvb2wgU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXMKICAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRp
Y2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKK1dURjo6VmVjdG9yPFNjcmlwdFZhbHVlPiog
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzKQogewotICAgIG1fcHJv
eHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOworICAgIFdU
Rjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiB2OFJlc3VsdHMgPSBtX3Byb3h5LT5l
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCAwKTsKKyAgICBXVEY6OlZl
Y3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMgPSBuZXcgV1RGOjpWZWN0b3I8U2NyaXB0VmFsdWU+
KCk7CisKKyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3Ig
aXRyOworICAgICAgZm9yIChpdHIgPSB2OFJlc3VsdHMtPmJlZ2luKCk7IGl0ciAhPSB2OFJlc3Vs
dHMtPmVuZCgpOyArK2l0cikKKyAgICAgICAgcmVzdWx0cy0+YXBwZW5kKFNjcmlwdFZhbHVlKCpp
dHIpKTsKKworICAgIGRlbGV0ZSB2OFJlc3VsdHM7CisgICAgcmV0dXJuIHJlc3VsdHM7CiB9CiAK
LXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0
ZW5zaW9uR3JvdXApCitXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4qIFNjcmlwdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxT
Y3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQogewotICAgIG1f
cHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lv
bkdyb3VwKTsKKyAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogdjhSZXN1
bHRzID0gbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywg
ZXh0ZW5zaW9uR3JvdXApOworICAgIFdURjo6VmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cyA9
IG5ldyBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1ZT4oKTsKKworICAgIFdURjo6VmVjdG9yPHY4OjpI
YW5kbGU8djg6OlZhbHVlPiA+OjppdGVyYXRvciBpdHI7CisgICAgICBmb3IgKGl0ciA9IHY4UmVz
dWx0cy0+YmVnaW4oKTsgaXRyICE9IHY4UmVzdWx0cy0+ZW5kKCk7ICsraXRyKQorICAgICAgICBy
ZXN1bHRzLT5hcHBlbmQoU2NyaXB0VmFsdWUoKml0cikpOworCisgICAgZGVsZXRlIHY4UmVzdWx0
czsKKyAgICByZXR1cm4gcmVzdWx0czsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJp
dHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04
NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAvLyBhcyBhIHN0cmluZy4KICAgICBTY3JpcHRWYWx1
ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKLSAgICB2b2lkIGV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3Vy
Y2VDb2RlPiYpOworICAgIFdURjo6VmVjdG9yPFNjcmlwdFZhbHVlPiogZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
Jik7CiAKICAgICAvLyBFeGVjdXRlcyBKYXZhU2NyaXB0IGluIGFuIGlzb2xhdGVkIHdvcmxkLiBU
aGUgc2NyaXB0IGdldHMgaXRzIG93biBnbG9iYWwgc2NvcGUsCiAgICAgLy8gaXRzIG93biBwcm90
b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsIEFycmF5LCBh
bmQgc28tb24pLApAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgLy8gSWYgdGhlIHdvcmxk
SUQgaXMgMCwgYSBuZXcgd29ybGQgaXMgYWx3YXlzIGNyZWF0ZWQuCiAgICAgLy8KICAgICAvLyBG
SVhNRTogR2V0IHJpZCBvZiBleHRlbnNpb25Hcm91cCBoZXJlLgotICAgIHZvaWQgZXZhbHVhdGVJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJj
ZUNvZGU+JiwgaW50IGV4dGVuc2lvbkdyb3VwKTsKKyAgICBXVEY6OlZlY3RvcjxTY3JpcHRWYWx1
ZT4qIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CiAKICAgICAvLyBBc3Nv
Y2lhdGVzIGFuIGlzb2xhdGVkIHdvcmxkIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uKSB3aXRo
IGEgc2VjdXJpdHkKICAgICAvLyBvcmlnaW4uIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNlcyB1c2Vk
IGluIHRoYXQgd29ybGQgd2lsbCBiZSBjb25zaWRlcmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOFByb3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOFByb3h5LmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNywxMSArMjE3LDEx
IEBAIGJvb2wgVjhQcm94eTo6aGFuZGxlT3V0T2ZNZW1vcnkoKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBj
b25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91
cCkKK1dURjo6VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBWOFByb3h5OjpldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCiB7CiAgICAgLy8gRklYTUU6IFRoaXMg
d2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBm
b3IgdGhlIGlzb2xhdGVkIHdvcmxkLgogICAgIGlmICghd2luZG93U2hlbGwoKS0+aW5pdENvbnRl
eHRJZk5lZWRlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAwOwogCiAgICAg
djg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIFY4SXNvbGF0ZWRDb250ZXh0KiBpc29s
YXRlZENvbnRleHQgPSAwOwpAQCAtMjM0LDcgKzIzNCw3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAgICAgIGlzb2xhdGVkQ29udGV4dCA9IG5ldyBW
OElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29ybGRJRCk7CiAgICAgICAg
ICAgICBpZiAoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkuSXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgZGVsZXRlIGlzb2xhdGVkQ29udGV4dDsKLSAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2hhbmdlIHRoaXMgdG8gdXNpbmcgd2luZG93IHNoZWxscyB0
byBtYXRjaCBKU0MuCkBAIC0yNDQsMTAgKzI0NCwxMCBAQCB2b2lkIFY4UHJveHk6OmV2YWx1YXRl
SW5Jc29sYXRlZFdvcmxkKGluCiAgICAgICAgICAgICBpZiAoIXNldEluamVjdGVkU2NyaXB0Q29u
dGV4dERlYnVnSWQoaXNvbGF0ZWRDb250ZXh0LT5jb250ZXh0KCkpKSB7CiAgICAgICAgICAgICAg
ICAgbV9pc29sYXRlZFdvcmxkcy50YWtlKHdvcmxkSUQpOwogICAgICAgICAgICAgICAgIGRlbGV0
ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAg
ICAgIElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1hcDo6aXRlcmF0b3Igc2VjdXJpdHlPcmln
aW5JdGVyID0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmZpbmQod29ybGRJRCk7CiAg
ICAgICAgIGlmIChzZWN1cml0eU9yaWdpbkl0ZXIgIT0gbV9pc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW5zLmVuZCgpKQogICAgICAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5zZXRTZWN1cml0eU9y
aWdpbihzZWN1cml0eU9yaWdpbkl0ZXItPnNlY29uZCk7CkBAIC0yNTUsMTcgKzI1NSwyMCBAQCB2
b2lkIFY4UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGluCiAgICAgICAgIGlzb2xhdGVk
Q29udGV4dCA9IG5ldyBWOElzb2xhdGVkQ29udGV4dCh0aGlzLCBleHRlbnNpb25Hcm91cCwgd29y
bGRJRCk7CiAgICAgICAgIGlmIChpc29sYXRlZENvbnRleHQtPmNvbnRleHQoKS5Jc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGRlbGV0ZSBpc29sYXRlZENvbnRleHQ7Ci0gICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KIAorICAgIFdURjo6
VmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBldmFsdWF0aW9uUmVzdWx0cyA9IG5ldyBX
VEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPigpOwogICAgIHY4OjpMb2NhbDx2ODo6
Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZENv
bnRleHQtPmNvbnRleHQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUo
Y29udGV4dCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgKytp
KQotICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CisgICAgICBldmFsdWF0aW9uUmVzdWx0
cy0+YXBwZW5kKHY4OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT46Ok5ldyhldmFsdWF0ZShzb3VyY2Vz
W2ldLCAwKSkpOwogCiAgICAgaWYgKHdvcmxkSUQgPT0gMCkKICAgICAgIGlzb2xhdGVkQ29udGV4
dC0+ZGVzdHJveSgpOworCisgICAgcmV0dXJuIGV2YWx1YXRpb25SZXN1bHRzOwogfQogCiB2b2lk
IFY4UHJveHk6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFz
c1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gcHJwU2VjdXJpdHlPcmlnaW5JbikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDggKzE0
NSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gZ2xvYmFsIHNjb3BlLCBpdHMg
b3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywK
ICAgICAgICAgLy8gQXJyYXksIGFuZCBzby1vbiksIGFuZCBpdHMgb3duIHdyYXBwZXJzIGZvciBh
bGwgRE9NIG5vZGVzIGFuZCBET00KICAgICAgICAgLy8gY29uc3RydWN0b3JzLgotICAgICAgICB2
b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2Ny
aXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCk7Ci0gICAgICAgIAor
ICAgICAgICBXVEY6OlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYg
c291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKKwogICAgICAgICB2b2lkIHNldElzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdp
bj4pOwogCiAgICAgICAgIC8vIEV2YWx1YXRlIGEgc2NyaXB0IGZpbGUgaW4gdGhlIGN1cnJlbnQg
ZXhlY3V0aW9uIGVudmlyb25tZW50LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMDMtMDIgIEVyaXEgQXVndXN0aW5lICA8
ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldHVybiB2YWx1ZSBmcm9tIGV4ZWN1
dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc5ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUHJvdmlkaW5nIGEgdmFyYWlhbnQgb2YgZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGQgdGhhdAorICAgICAgICByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgZXZhbHVh
dGVkIHNjcmlwdC4KKworICAgICAgICAqIHB1YmxpYy9XZWJGcmFtZS5oOgorICAgICAgICAoV2Vi
RnJhbWUpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGcmFtZUltcGw6OmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZXMpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmg6Cisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRnJhbWVJbXBsKToKKwogMjAxMi0wMy0xNSAg
UGV0ZXIgQmV2ZXJsb28gIDxwZXRlckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdl
ZC4gIFJvbGxlZCBERVBTLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
RnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJG
cmFtZS5oCShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzQsNiArMjc0LDEwIEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBleGVjdXRlU2NyaXB0QW5kUmV0dXJu
VmFsdWUoCiAgICAgICAgIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSYpID0gMDsKIAorICAgIHZpcnR1
YWwgV2ViVmVjdG9yPHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+KiBleGVjdXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKAorICAgICAgICBpbnQgd29ybGRJRCwgY29uc3QgV2Vi
U2NyaXB0U291cmNlKiBzb3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisgICAgICAgIGlu
dCBleHRlbnNpb25Hcm91cCkgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgVjggY29udGV4dCBm
b3IgdGhpcyBmcmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlCiAgICAgLy8gaXMgbm9u
ZS4KICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gbWFpbldvcmxkU2NyaXB0Q29u
dGV4dCgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZy
YW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODk0LDYgKzg5NCwyOCBA
QCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjCiAgICAgcmV0dXJuIG1f
ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNv
ZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCitXZWJWZWN0b3I8djg6
OkhhbmRsZTx2ODo6VmFsdWU+ID4qIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlcygKKyAgICBpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0
U291cmNlKiBzb3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisgICAgaW50IGV4dGVuc2lv
bkdyb3VwKQoreworICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2VzOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVNvdXJjZXM7ICsraSkgeworICAgICAgICBUZXh0
UG9zaXRpb24gcG9zaXRpb24oT3JkaW5hbE51bWJlcjo6ZnJvbU9uZUJhc2VkSW50KHNvdXJjZXNJ
bltpXS5zdGFydExpbmUpLCBPcmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKKyAgICAgICAgc291cmNl
cy5hcHBlbmQoU2NyaXB0U291cmNlQ29kZSgKKyAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2Rl
LCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOworICAgIH0KKworICAgIFZlY3RvcjxTY3Jp
cHRWYWx1ZT4qIHNjcmlwdFJlc3VsdHMgPSAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwKTsKKyAgICBXZWJW
ZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHY4UmVzdWx0cyA9IG5ldyBXZWJWZWN0b3I8
djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4oc2NyaXB0UmVzdWx0cy0+c2l6ZSgpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JpcHRSZXN1bHRzLT5zaXplKCk7IGkrKykKKyAgICAg
ICgqdjhSZXN1bHRzKVtpXSA9ICgqc2NyaXB0UmVzdWx0cylbaV0udjhWYWx1ZSgpOworCisgICAg
ZGVsZXRlIHNjcmlwdFJlc3VsdHM7CisgICAgcmV0dXJuIHY4UmVzdWx0czsKK30KKwogLy8gUmV0
dXJucyB0aGUgVjggY29udGV4dCBmb3IgdGhpcyBmcmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlm
IHRoZXJlIGlzIG5vbmUuCiB2ODo6TG9jYWw8djg6OkNvbnRleHQ+IFdlYkZyYW1lSW1wbDo6bWFp
bldvcmxkU2NyaXB0Q29udGV4dCgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuaAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYy
LDggQEAgY2xhc3MgV2ViUGx1Z2luQ29udGFpbmVySW1wbDsKIGNsYXNzIFdlYlZpZXc7CiBjbGFz
cyBXZWJWaWV3SW1wbDsKIAordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsK
KwogLy8gSW1wbGVtZW50YXRpb24gb2YgV2ViRnJhbWUsIG5vdGUgdGhhdCB0aGlzIGlzIGEgcmVm
ZXJlbmNlIGNvdW50ZWQgb2JqZWN0LgogY2xhc3MgV2ViRnJhbWVJbXBsIDogcHVibGljIFdlYkZy
YW1lLCBwdWJsaWMgUmVmQ291bnRlZDxXZWJGcmFtZUltcGw+IHsKIHB1YmxpYzoKQEAgLTExMCw2
ICsxMTIsOSBAQCBwdWJsaWM6CiAjaWYgV0VCS0lUX1VTSU5HX1Y4CiAgICAgdmlydHVhbCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgICAgICBj
b25zdCBXZWJTY3JpcHRTb3VyY2UmKTsKKyAgICB2aXJ0dWFsIFdlYlZlY3Rvcjx2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gPiogZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
cygKKyAgICAgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0lu
LCB1bnNpZ25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXApOwogICAg
IHZpcnR1YWwgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBtYWluV29ybGRTY3JpcHRDb250ZXh0KCkg
Y29uc3Q7CiAgICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlRmlsZVN5c3Rl
bShXZWJGaWxlU3lzdGVtOjpUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBuYW1lLApJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTEwODU2KQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTIt
MDMtMDIgIEVyaXEgQXVndXN0aW5lICA8ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldHVybiB2YWx1ZSBmcm9tIGV4ZWN1dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODUxCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgZnVuY3Rpb24g
dG8gTGF5b3V0VGVzdENvbnRyb2xsZXIgdGhhdCBldmFsdWF0ZXMgYSBzY3JpcHQgaW4KKyAgICAg
ICAgYW4gaXNvbGF0ZWQgd29sZCBhbiByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRp
b24uCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6
CisgICAgICAgIChldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9M
YXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDoK
KyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9x
dC9MYXlvdXRUZXN0Q29udHJvbGxlclF0Lmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2lu
LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNv
bGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9M
YXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKwogMjAxMi0w
My0xNSAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgR1RLIGJ1aWxkIGZpeCBhdHRlbXB0IGFmdGVyIHIxMTA4NDUuCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCShyZXZpc2lv
biAxMTA4NTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjYsNiArMTgyNiwxOCBAQCBzdGF0aWMgSlNWYWx1ZVJl
ZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVk
KGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2Jq
ZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRD
b3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9u
KQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIGRvdWJsZSB3b3JsZElEID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sw
XSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwg
YXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisg
ICAgY29udHJvbGxlci0+ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od29ybGRJRCksIEpTQ29udGV4dEdldEdsb2JhbE9iamVj
dChjb250ZXh0KSwgc2NyaXB0LmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGVsZW1lbnREb2VzQXV0b0NvbXBs
ZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
IHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExh
eW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAg
LTIzNjQsNiArMjM3Niw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVy
OjoKICAgICAgICAgeyAiZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkIiwg
ZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAiZW5jb2RlSG9zdE5hbWUiLCBlbmNvZGVIb3N0TmFtZUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCBldmFsdWF0ZUluV2ViSW5z
cGVjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCIsIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAiZXhlY0NvbW1hbmQiLCBleGVjQ29tbWFuZENhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgImZpbmRTdHJpbmciLCBmaW5kU3RyaW5nQ2FsbGJhY2ssIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2
aXNpb24gMTEwODU2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDYgKzMxMSw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IGNsb3NlV2ViSW5zcGVjdG9yKCk7CiAgICAgdm9pZCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxv
bmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpOwogICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0
LCBKU1N0cmluZ1JlZiBzY3JpcHQpOworICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxP
YmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBhbGxvd1JvdW5kaW5nSGFja3Mo
KTsKIAogICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBhZ2VBZnRlckhhbmRsaW5nQmVmb3JlVW5s
b2FkOyB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RD
b250cm9sbGVyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxlckJsYWNrQmVycnkuY3BwCShyZXZpc2lv
biAxMTA4NTYpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RD
b250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMiw2ICs1MDIsMTQg
QEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYgogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RS
ZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgVU5VU0VEX1BBUkFN
KHdvcmxkSUQpOworICAgIFVOVVNFRF9QQVJBTShnbG9iYWxPYmplY3QpOworICAgIFVOVVNFRF9Q
QVJBTShzY3JpcHQpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAg
IFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMDg1
NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEyOCw3IEBAIExheW91dFRlc3RDb250cm9s
bGVyOjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5kTWV0aG9kKCJlbmFibGVBdXRvUmVzaXpl
TW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5hYmxlQXV0b1Jlc2l6ZU1vZGUpOwogICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwogICAgIGJpbmRNZXRob2QoImV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCk7CisgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk7CiAgICAgYmluZE1ldGhvZCgic2V0
SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOwogICAgIGJpbmRNZXRob2QoImV4ZWNDb21tYW5k
IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29tbWFuZCk7CiAgICAgYmluZE1ldGhvZCgi
Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmZvcmNlUmVk
U2VsZWN0aW9uQ29sb3JzKTsKQEAgLTEzMzMsNiArMTMzNCwzNyBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpzZXRYU1NBdWRpdG9yCiAgICAgcmVzdWx0LT5zZXROdWxsKCk7CiB9CiAKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZhcmlhbnQq
IHJlc3VsdCkKK3sKKyAgICBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHZhbHVl
cyA9IDA7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNO
dW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3JpcHRT
b3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICAg
ICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBs
b2Fkcy4gVGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8g
YmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgdmFsdWVzID0KKyAgICAgICAgICBtX3No
ZWxsLT53ZWJWaWV3KCktPmZvY3VzZWRGcmFtZSgpLT5leGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWVzKGFyZ3VtZW50c1swXS50b0ludDMyKCksICZzb3VyY2UsIDEsIDEp
OworICAgIH0KKyAgICByZXN1bHQtPnNldE51bGwoKTsKKyAgICAvLyBTaW5jZSBvbmx5IG9uZSBz
Y3JpcHQgd2FzIGFkZGVkLCBvbmx5IG9uZSByZXN1bHQgaXMgZXhwZWN0ZWQKKyAgICBpZiAodmFs
dWVzICYmIHZhbHVlcy0+c2l6ZSgpID09IDEgJiYgISgqdmFsdWVzKVswXS5Jc0VtcHR5KCkpIHsK
KyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHNjcmlwdFZhbHVlID0gKCp2YWx1ZXMpWzBd
OworICAgICAgICAvLyBUT0RPOiBUaGVyZSBhcmUgbWFueSBtb3JlIHR5cGVzIHRoYXQgY2FuIGJl
IGhhbmRsZWQuCisgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNTdHJpbmcoKSkgeworICAgICAg
ICAgIHY4OjpTdHJpbmc6OkFzY2lpVmFsdWUgYXNjaWlWOChzY3JpcHRWYWx1ZSk7CisgICAgICAg
ICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lpVjgpKTsKKyAgICAgICAgfSBlbHNlIGlm
IChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0
VmFsdWUtPlRvQm9vbGVhbigpLT5WYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoc2NyaXB0VmFs
dWUtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICBpZiAoc2NyaXB0VmFsdWUtPklzSW50MzIoKSkK
KyAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUo
KSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1
ZS0+VG9OdW1iZXIoKS0+VmFsdWUoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUt
PklzTnVsbCgpKQorICAgICAgICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAgIH0KKyAgICBkZWxl
dGUgdmFsdWVzOworfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFy
aWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1l
bnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xs
ZXIuaAkocmV2aXNpb24gMTEwODU2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBD
cHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdP
Zkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAK
KyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29u
c3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
ICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50
TGlzdCYsIENwcFZhcmlhbnQqKTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xh
eW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxMTA4NTYpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NzQsNiArNjc0LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5XZWIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAxMTA4NTYpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MTcsNiArOTE3LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlSW5XZWIKICAgICBnX2ZyZWUoc2NyaXB0U3RyaW5nKTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
UmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9u
IDExMDg1NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxl
ck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1MiwxMSBAQCB1bnNpZ25lZCB3b3Js
ZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5n
UmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2ln
bmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0
KQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJp
bmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAko
cmV2aXNpb24gMTEwODU2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENv
bnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCw2ICs5MTAsMTEgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbgogICAgIC8vIFNlZSBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUo
aW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAg
IER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCht
X2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJl
dmlzaW9uIDExMDg1NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250
cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw3IEBAIHB1YmxpYyBzbG90
czoKIAogICAgIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFFTdHJpbmcmIGVkaXRpbmdC
ZWhhdmlvcik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CiAgICAgdm9pZCBl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYg
c2NyaXB0KTsKICAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CiAgICAg
UVN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdp
bkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMTA4NTYp
CisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjcxLDYgKzEyNzEsMTEgQEAgdW5zaWduZWQgd29ybGRJREZv
cldvcmxkKElXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
KHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYg
c2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7
CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUp
OwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRy
b2xsZXJXeC5jcHAJKHJldmlzaW9uIDExMDg1NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsNiArNDU2
LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2kKICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisKK30K
Kwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCiB7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg1NikKKysrIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTAyICBF
cmlxIEF1Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4g
dmFsdWUgZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3RpbmcgZXhlY3V0aW5nIGEgc2NyaXB0
IGFuZCBnZXR0aW5nIHRoZSByZXN1bHQgb2YgdGhhdCBzY3JpcHQuCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0
cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0x
NCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBleHRyYWN0IENvbXBpbGVyU2NyaXB0TWFwcGluZyBmcm9tIFJhd1NvdXJj
ZUNvZGUuCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21p
c2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQt
cmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGluZyA1OiA1
CitFeHBlY3RpbmcgMy4xNDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6
IFRoZSBxdWljayBicm93biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBlY3Rpbmcg
bnVsbDogbnVsbAorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rl
c3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJl
dHVybi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hy
b21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+
Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlvdXRUZXN0
Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAs
ICI1Iik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoJ0V4cGVjdGluZyA1OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVUZXN0ID0g
bGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSgwLCAiMy4xNCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsKKyAgZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKwor
ICB2YXIgc3RyaW5nVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9nLiInKTsK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhw
ZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7CisgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAg
dmFyIGJvb2xlYW5UZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNlOiAnICsg
Ym9vbGVhblRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdicicpKTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxl
ci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJudWxsIik7
CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4
cGVjdGluZyBudWxsOiAnICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132400</attachid>
            <date>2012-03-16 15:33:54 -0700</date>
            <delta_ts>2012-03-26 16:46:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120316153240.patch</filename>
            <type>text/plain</type>
            <size>29579</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0xNCAgUGF2ZWwgUG9kaXZp
bG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBl
eHRyYWN0IENvbXBpbGVyU2NyaXB0TWFwcGluZyBmcm9tIFJhd1NvdXJjZUNvZGUuCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2
aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2MSwxNCArMTYxLDIyIEBAIGJvb2wgU2NyaXB0
Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXMKICAgICByZXR1cm4gVXNlckdlc3R1cmVJbmRp
Y2F0b3I6OnByb2Nlc3NpbmdVc2VyR2VzdHVyZSgpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xs
ZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3Rv
cjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKQogewot
ICAgIG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDAp
OworICAgIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDAsIHJlc3Vs
dHMpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNl
cywgaW50IGV4dGVuc2lvbkdyb3VwKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUlu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNl
Q29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9yPFNjcmlwdFZhbHVlPiog
cmVzdWx0cykKIHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElE
LCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOworICAgIGlmIChyZXN1bHRzKSB7CisgICAgICAgIFZlY3Rvcjx2ODo6TG9jYWw8djg6OlZh
bHVlPiA+IHY4UmVzdWx0czsKKyAgICAgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZ2OFJlc3VsdHMpOworICAgICAg
ICBWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRyOworICAgICAgICBm
b3IgKGl0ciA9IHY4UmVzdWx0cy5iZWdpbigpOyBpdHIgIT0gdjhSZXN1bHRzLmVuZCgpOyArK2l0
cikKKyAgICAgICAgICAgIHJlc3VsdHMtPmFwcGVuZChTY3JpcHRWYWx1ZSgqaXRyKSk7CisgICAg
fSBlbHNlCisgICAgICAgIG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQs
IHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVy
OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8
U2VjdXJpdHlPcmlnaW4+IHNlY3VyaXR5T3JpZ2luKQpAQCAtMzM5LDcgKzM0Nyw3IEBAIHZvaWQg
U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGMKICAgICBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4gc291cmNlczsKICAgICBzb3VyY2VzLmFwcGVuZChzb3VyY2UpOwogICAgIC8vIEZJ
WE1FOiBHZXQgYW4gSUQgZnJvbSB0aGUgd29ybGQgcGFyYW0uCi0gICAgZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQoMCwgc291cmNlcyk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoMCwgc291
cmNlcywgMCk7CiB9CiAKIHN0YXRpYyBOUE9iamVjdCogY3JlYXRlTm9TY3JpcHRPYmplY3QoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAko
cmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAv
LyBhcyBhIHN0cmluZy4KICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3Vy
Y2VDb2RlJik7CiAKLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAgIHZvaWQgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNv
dXJjZUNvZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKTsKIAogICAg
IC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQg
Z2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHByb3RvdHlwZXMgZm9y
IGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFuZCBzby1vbiks
CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgd29ybGRJRCBpcyAwLCBh
IG5ldyB3b3JsZCBpcyBhbHdheXMgY3JlYXRlZC4KICAgICAvLwogICAgIC8vIEZJWE1FOiBHZXQg
cmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCi0gICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBp
bnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5z
aWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOwogCiAgICAg
Ly8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlwdGlv
bikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0YW5j
ZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRleDogU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDExMDg1NikKKysrIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyAr
MjE3LDcgQEAgYm9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxk
SUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lv
bkdyb3VwKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9u
R3JvdXAsIFdURjo6VmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJlc3VsdHMpCiB7CiAg
ICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhh
dmUgYSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgogICAgIGlmICghd2luZG93
U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpKQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQg
VjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgSXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBt
X2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYg
KHNlY3VyaXR5T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5k
KCkpCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3Vy
aXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKQEAgLTI2MSwxMSArMjYxLDE1IEBAIHZvaWQgVjhQcm94
eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4
dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZENvbnRleHQt
PmNvbnRleHQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4
dCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgKytpKQotICAg
ICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
b3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChyZXN1bHRzKQorICAgICAgICAgICAg
cmVzdWx0cy0+YXBwZW5kKGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CisgICAgfQogCiAgICAgaWYgKHdv
cmxkSUQgPT0gMCkKLSAgICAgIGlzb2xhdGVkQ29udGV4dC0+ZGVzdHJveSgpOworICAgICAgICBp
c29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKIH0KIAogdm9pZCBWOFByb3h5OjpzZXRJc29sYXRl
ZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmln
aW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
cm94eS5oCShyZXZpc2lvbiAxMTA4NTYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NSw4ICsxNDUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBzY29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBp
bnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3RzIChTdHJpbmcsCiAgICAgICAgIC8vIEFycmF5LCBh
bmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFwcGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9N
CiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3Vy
Y2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwotICAgICAgICAKKyAgICAgICAgdm9pZCBldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdURjo6VmVjdG9yPHY4OjpMb2NhbDx2
ODo6VmFsdWU+ID4qIHJlc3VsdCk7CisKICAgICAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKIAog
ICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlwdCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlv
biBlbnZpcm9ubWVudC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAx
MTA4NTYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1c3Rp
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBzY3Jp
cHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV2YWx1YXRlZCBzY3Jp
cHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToK
KyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJh
bWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKToKKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAo
V2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIwMTItMDMtMTUgIFBldGVyIEJl
dmVybG9vICA8cGV0ZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xs
ZWQgREVQUy4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkZyYW1lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAko
cmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAog
ICAgICAgICBjb25zdCBXZWJTY3JpcHRTb3VyY2UmKSA9IDA7CiAKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgaW50IHdvcmxkSUQsIGNvbnN0
IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBudW1Tb3VyY2VzLAorICAgICAg
ICBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiog
cmVzdWx0cykgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgVjggY29udGV4dCBmb3IgdGhpcyBm
cmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlCiAgICAgLy8gaXMgbm9uZS4KICAgICB2
aXJ0dWFsIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gbWFpbldvcmxkU2NyaXB0Q29udGV4dCgpIGNv
bnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI3LDcgKzgyNyw3IEBAIHZvaWQgV2Vi
RnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXQKICAgICAgICAgICAgIHNvdXJjZXNJbltp
XS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAgIH0KIAotICAgIG1fZnJh
bWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBl
eHRlbnNpb25Hcm91cCk7CisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRl
ZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKIH0KIAogdm9pZCBX
ZWJGcmFtZUltcGw6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwg
Y29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQpAQCAtODk0LDYgKzg5NCwy
OSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjCiAgICAgcmV0dXJu
IG1fZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc291cmNl
LmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCit2b2lkIFdlYkZy
YW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICBpbnQgd29ybGRJRCwg
Y29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisg
ICAgaW50IGV4dGVuc2lvbkdyb3VwLCBXZWJWZWN0b3I8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4q
IHJlc3VsdHMpCit7CisgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+IHNvdXJjZXM7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytpKSB7CisgICAgICAgIFRl
eHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoc291cmNl
c0luW2ldLnN0YXJ0TGluZSksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkpOworICAgICAgICBzb3Vy
Y2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKAorICAgICAgICAgICAgc291cmNlc0luW2ldLmNv
ZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7CisgICAgfQorCisgICAgaWYgKHJlc3Vs
dHMpIHsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBzY3JpcHRSZXN1bHRzOworICAgICAg
ICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291
cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZzY3JpcHRSZXN1bHRzKTsKKyAgICAgICAgV2ViVmVjdG9y
PHY4OjpIYW5kbGU8djg6OlZhbHVlPiA+IHY4UmVzdWx0cyhzY3JpcHRSZXN1bHRzLnNpemUoKSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzY3JpcHRSZXN1bHRzLnNpemUoKTsg
aSsrKQorICAgICAgICAgICAgdjhSZXN1bHRzW2ldID0gc2NyaXB0UmVzdWx0c1tpXS52OFZhbHVl
KCk7CisgICAgICAgIHJlc3VsdHMtPnN3YXAodjhSZXN1bHRzKTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNv
dXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKK30KKwogLy8gUmV0dXJucyB0aGUgVjggY29udGV4
dCBmb3IgdGhpcyBmcmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlIGlzIG5vbmUuCiB2
ODo6TG9jYWw8djg6OkNvbnRleHQ+IFdlYkZyYW1lSW1wbDo6bWFpbldvcmxkU2NyaXB0Q29udGV4
dCgpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuaAkocmV2aXNpb24gMTEwODU2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYyLDggQEAgY2xhc3MgV2ViUGx1
Z2luQ29udGFpbmVySW1wbDsKIGNsYXNzIFdlYlZpZXc7CiBjbGFzcyBXZWJWaWV3SW1wbDsKIAor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKKwogLy8gSW1wbGVtZW50YXRp
b24gb2YgV2ViRnJhbWUsIG5vdGUgdGhhdCB0aGlzIGlzIGEgcmVmZXJlbmNlIGNvdW50ZWQgb2Jq
ZWN0LgogY2xhc3MgV2ViRnJhbWVJbXBsIDogcHVibGljIFdlYkZyYW1lLCBwdWJsaWMgUmVmQ291
bnRlZDxXZWJGcmFtZUltcGw+IHsKIHB1YmxpYzoKQEAgLTExMCw2ICsxMTIsOSBAQCBwdWJsaWM6
CiAjaWYgV0VCS0lUX1VTSU5HX1Y4CiAgICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
ZXhlY3V0ZVNjcmlwdEFuZFJldHVyblZhbHVlKAogICAgICAgICBjb25zdCBXZWJTY3JpcHRTb3Vy
Y2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAg
ICAgICAgaW50IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNp
Z25lZCBudW1Tb3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdlYlZlY3Rvcjx2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiogcmVzdWx0cyk7CiAgICAgdmlydHVhbCB2ODo6TG9jYWw8
djg6OkNvbnRleHQ+IG1haW5Xb3JsZFNjcmlwdENvbnRleHQoKSBjb25zdDsKICAgICB2aXJ0dWFs
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjcmVhdGVGaWxlU3lzdGVtKFdlYkZpbGVTeXN0ZW06OlR5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIG5hbWUsCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTA4NTYpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wMy0wMiAgRXJpcSBBdWd1c3Rp
bmUgIDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20g
ZXhlY3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBmdW5jdGlvbiB0byBMYXlvdXRUZXN0Q29udHJv
bGxlciB0aGF0IGV2YWx1YXRlcyBhIHNjcmlwdCBpbgorICAgICAgICBhbiBpc29sYXRlZCB3b2xk
IGFuIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVy
QmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
aDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0xh
eW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVy
V3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorCiAyMDEyLTAzLTE1ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBHVEsgYnVp
bGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjExMDg0NS4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMDg1NikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTgyNiw2ICsxODI2LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0
YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91YmxlIHdvcmxkSUQg
PSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNjcmlw
dChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2Vw
dGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5ldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHN0YXRpY19jYXN0PHVuc2ln
bmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBzY3JpcHQu
Z2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwog
c3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0aElk
Q2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRlc3RD
b250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIq
PihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMjM2NCw2ICsyMzc2LDcgQEAg
SlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJlbGVt
ZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50RG9lc0F1dG9Db21w
bGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJlbmNvZGVI
b3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZXZh
bHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZUNhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJl
eGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVh
ZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZmlu
ZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTA4NTYpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMTEsNiArMzExLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0b3Io
KTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3RyaW5n
UmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlw
dCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
KHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYg
c2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCiAgICAgYm9vbCBzaG91
bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0KSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91
dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDExMDg1NikKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0JlcnJ5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpT
U3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CisgICAgVU5V
U0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xv
YmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHdvcmxk
SUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEwODU2KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMjgsNiArMTI4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250
cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVh
dGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldlYklu
c3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKTsK
KyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2VjdXJp
dHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENvbnRy
b2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlvbkNv
bG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMpOwpA
QCAtMTMzMyw2ICsxMzM0LDM1IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhTU0F1
ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIFdl
YlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiB2YWx1ZXM7CisgICAgaWYgKGFyZ3VtZW50
cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0u
aXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRU
b1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhl
IGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAorICAg
ICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4K
KyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAm
dmFsdWVzKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgLy8gU2luY2Ugb25s
eSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25seSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCisgICAg
aWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAhdmFsdWVzWzBdLklzRW1wdHkoKSkgeworICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSB2YWx1ZXNbMF07CisgICAgICAg
IC8vIFRPRE86IFRoZXJlIGFyZSBtYW55IG1vcmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4K
KyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc1N0cmluZygpKSB7CisgICAgICAgICAgICB2ODo6
U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgoc2NyaXB0VmFsdWUpOworICAgICAgICAgICAgcmVz
dWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lpVjgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3Jp
cHRWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAgICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1
ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+
SXNOdW1iZXIoKSkgeworICAgICAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0
VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZh
bHVlLT5Jc051bGwoKSkKKyAgICAgICAgICAgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQor
fQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0
KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVt
YmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNp
b24gMTEwODU2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjg5LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zyb21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExp
c3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9pZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29u
dGVudChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKKyAgICB2b2lkIGV2
YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1l
bnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0
SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZh
cmlhbnQqKTsKIApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250
cm9sbGVyRWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5
b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShyZXZpc2lvbiAxMTA4NTYpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02NzQsNiArNjc0LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
SW5XZWIKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVk
LCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBKU1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZpc2lvbiAxMTA4NTYpCisrKyBUb29scy9EdW1wUmVu
ZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MTcsNiArOTE3LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5X
ZWIKICAgICBnX2ZyZWUoc2NyaXB0U3RyaW5nKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25l
ZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0JKHJldmlzaW9uIDExMDg1NikKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1MiwxMSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQo
V2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25l
ZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQs
IEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFJl
dGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJp
bmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2NyaXB0KSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gMTEw
ODU2KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCw2ICs5MTAsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c3RhcnRTcGVlY2hJbgogICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQs
IGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFn
ZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwgc2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDExMDg1
NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZv
aWQgc2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IFFTdHJpbmcmIGVkaXRpbmdCZWhhdmlvcik7CiAK
KyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50
IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAg
ICBib29sIGlzUGFnZUJveFZpc2libGUoaW50IHBhZ2VJbmRleCk7CiAgICAgUVN0cmluZyBwYWdl
U2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQgcGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJnaW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50
IG1hcmdpbkxlZnQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
TGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCShyZXZpc2lvbiAxMTA4NTYpCisrKyBUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjcxLDYgKzEyNzEsMTEgQEAgdW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJT
Y3JpcHRXb3JsZAogICAgIHJldHVybiAwOwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdv
cmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQorewor
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNP
YmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgQ09NUHRy
PElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJpdmF0ZShRdWVyeSwgZnJhbWUpOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJ
KHJldmlzaW9uIDExMDg1NikKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTYsNiArNDU2LDExIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92ZUFsbFZpc2kKICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHRoaXMuCiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RS
ZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCit7CisKK30KKwogdm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQg
d29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7
CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMDg1NikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGlu
ZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBl
eGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRlc3RpbmcgZXhlY3V0aW5nIGEgc2NyaXB0IGFuZCBnZXR0aW5n
IHRoZSByZXN1bHQgb2YgdGhhdCBzY3JpcHQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1
bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1
dGUtYW5kLXJldHVybi12YWx1ZS5odG1sOiBBZGRlZC4KKwogMjAxMi0wMy0xNCAgUGF2ZWwgUG9k
aXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9y
OiBleHRyYWN0IENvbXBpbGVyU2NyaXB0TWFwcGluZyBmcm9tIFJhd1NvdXJjZUNvZGUuCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1h
bmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVl
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGluZyA1OiA1CitFeHBlY3Rpbmcg
My4xNDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6IFRoZSBxdWljayBi
cm93biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBlY3RpbmcgbnVsbDogbnVsbAor
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhl
Y3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90
ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0Pgor
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5kdW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5l
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICI1Iik7CisgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGlu
ZyA1OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVUZXN0ID0gbGF5b3V0VGVzdENv
bnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAi
My4xNCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgc3RyaW5n
VGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9nLiInKTsKKyAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nICJUaGUg
cXVpY2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIGJvb2xlYW5U
ZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNlOiAnICsgYm9vbGVhblRlc3Qp
KTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdi
cicpKTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJudWxsIik7CisgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyBudWxs
OiAnICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133928</attachid>
            <date>2012-03-26 16:46:17 -0700</date>
            <delta_ts>2012-04-10 16:46:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120326164452.patch</filename>
            <type>text/plain</type>
            <size>29654</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMjE2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wMy0yNiAgQWRhbSBLbGVpbiAg
PGFkYW1rQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVcGRhdGUgYmluZGluZyB0ZXN0IG91dHB1
dCBmb3IgVjggYWZ0ZXIgcjExMjE2My4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTIxNjcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTYxLDE0ICsxNjEsMjIgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpwcm9jZXNzaW5nVXNl
ckdlcwogICAgIHJldHVybiBVc2VyR2VzdHVyZUluZGljYXRvcjo6cHJvY2Vzc2luZ1VzZXJHZXN0
dXJlKCk7CiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3Vy
Y2VzKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIFZl
Y3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpCiB7Ci0gICAgbV9wcm94eS0+ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgMCk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVk
V29ybGQod29ybGRJRCwgc291cmNlcywgMCwgcmVzdWx0cyk7CiB9CiAKLXZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCit2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdv
cmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVu
c2lvbkdyb3VwLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKQogewotICAgIG1fcHJveHkt
PmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3Vw
KTsKKyAgICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgaWYgKHJlc3VsdHMpIHsK
KyAgICAgICAgVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gdjhSZXN1bHRzOworICAgICAg
ICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRl
bnNpb25Hcm91cCwgJnY4UmVzdWx0cyk7CisgICAgICAgIFZlY3Rvcjx2ODo6TG9jYWw8djg6OlZh
bHVlPiA+OjppdGVyYXRvciBpdHI7CisgICAgICAgIGZvciAoaXRyID0gdjhSZXN1bHRzLmJlZ2lu
KCk7IGl0ciAhPSB2OFJlc3VsdHMuZW5kKCk7ICsraXRyKQorICAgICAgICAgICAgcmVzdWx0cy0+
YXBwZW5kKFNjcmlwdFZhbHVlKCppdHIpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9wcm94eS0+
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAs
IDApOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbihpbnQgd29ybGRJRCwgUGFzc1JlZlB0cjxTZWN1cml0eU9yaWdpbj4gc2VjdXJpdHlP
cmlnaW4pCkBAIC0zMzksNyArMzQ3LDcgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0
ZUluV29ybGQoYwogICAgIFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiBzb3VyY2VzOwogICAgIHNv
dXJjZXMuYXBwZW5kKHNvdXJjZSk7CiAgICAgLy8gRklYTUU6IEdldCBhbiBJRCBmcm9tIHRoZSB3
b3JsZCBwYXJhbS4KLSAgICBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCgwLCBzb3VyY2VzKTsKKyAg
ICBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCgwLCBzb3VyY2VzLCAwKTsKIH0KIAogc3RhdGljIE5Q
T2JqZWN0KiBjcmVhdGVOb1NjcmlwdE9iamVjdCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTIxNjcpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg1LDcgKzg1LDcgQEAgcHVibGljOgogICAgIC8vIGFzIGEgc3RyaW5nLgogICAgIFNjcmlw
dFZhbHVlIGV2YWx1YXRlKGNvbnN0IFNjcmlwdFNvdXJjZUNvZGUmKTsKIAotICAgIHZvaWQgZXZh
bHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlw
dFNvdXJjZUNvZGU+Jik7CisgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25l
ZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIFZlY3Rv
cjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOwogCiAgICAgLy8gRXhlY3V0ZXMgSmF2YVNjcmlwdCBp
biBhbiBpc29sYXRlZCB3b3JsZC4gVGhlIHNjcmlwdCBnZXRzIGl0cyBvd24gZ2xvYmFsIHNjb3Bl
LAogICAgIC8vIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2Jq
ZWN0cyAoU3RyaW5nLCBBcnJheSwgYW5kIHNvLW9uKSwKQEAgLTk3LDcgKzk3LDcgQEAgcHVibGlj
OgogICAgIC8vIElmIHRoZSB3b3JsZElEIGlzIDAsIGEgbmV3IHdvcmxkIGlzIGFsd2F5cyBjcmVh
dGVkLgogICAgIC8vCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgZXh0ZW5zaW9uR3JvdXAgaGVy
ZS4KLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNv
bnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYsIGludCBleHRlbnNpb25Hcm91cCk7CisgICAg
dm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9y
PFNjcmlwdFZhbHVlPiogcmVzdWx0cyk7CiAKICAgICAvLyBBc3NvY2lhdGVzIGFuIGlzb2xhdGVk
IHdvcmxkIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9uKSB3aXRoIGEgc2VjdXJpdHkKICAgICAv
LyBvcmlnaW4uIFhNTEh0dHBSZXF1ZXN0IGluc3RhbmNlcyB1c2VkIGluIHRoYXQgd29ybGQgd2ls
bCBiZSBjb25zaWRlcmVkCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNw
cAkocmV2aXNpb24gMTEyMTY3KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94
eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNyw3ICsyMTcsNyBAQCBib29sIFY4UHJveHk6Omhh
bmRsZU91dE9mTWVtb3J5KCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBWOFByb3h5Ojpl
dmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNv
dXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApCit2b2lkIFY4UHJveHk6OmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgV1RGOjpWZWN0b3I8djg6Okxv
Y2FsPHY4OjpWYWx1ZT4gPiogcmVzdWx0cykKIHsKICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIG5l
ZWQgdG8gZ2V0IHJlb3JnYW5pemVkIG9uY2Ugd2UgaGF2ZSBhIHdpbmRvd1NoZWxsIGZvciB0aGUg
aXNvbGF0ZWQgd29ybGQuCiAgICAgaWYgKCF3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVl
ZGVkKCkpCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0
ZWRXb3JsZChpbgogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQotICAgICAgICAKKwogICAgICAgICBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA6
Oml0ZXJhdG9yIHNlY3VyaXR5T3JpZ2luSXRlciA9IG1faXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3Jp
Z2lucy5maW5kKHdvcmxkSUQpOwogICAgICAgICBpZiAoc2VjdXJpdHlPcmlnaW5JdGVyICE9IG1f
aXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lucy5lbmQoKSkKICAgICAgICAgICAgIGlzb2xhdGVk
Q29udGV4dC0+c2V0U2VjdXJpdHlPcmlnaW4oc2VjdXJpdHlPcmlnaW5JdGVyLT5zZWNvbmQpOwpA
QCAtMjYxLDExICsyNjEsMTcgQEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbgogCiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gdjg6OkxvY2FsPHY4
OjpDb250ZXh0Pjo6TmV3KGlzb2xhdGVkQ29udGV4dC0+Y29udGV4dCgpKTsKICAgICB2ODo6Q29u
dGV4dDo6U2NvcGUgY29udGV4dF9zY29wZShjb250ZXh0KTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kpCi0gICAgICBldmFsdWF0ZShzb3VyY2VzW2ldLCAw
KTsKKworICAgIGlmIChyZXN1bHRzKSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c291cmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIHJlc3VsdHMtPmFwcGVuZChldmFsdWF0
ZShzb3VyY2VzW2ldLCAwKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgZXZhbHVhdGUoc291cmNl
c1tpXSwgMCk7CisgICAgfQogCiAgICAgaWYgKHdvcmxkSUQgPT0gMCkKLSAgICAgIGlzb2xhdGVk
Q29udGV4dC0+ZGVzdHJveSgpOworICAgICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsK
IH0KIAogdm9pZCBWOFByb3h5OjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdv
cmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+IHBycFNlY3VyaXR5T3JpZ2luSW4pCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCShyZXZpc2lvbiAxMTIxNjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0NSw4ICsxNDUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIGdsb2JhbCBz
Y29wZSwgaXRzIG93biBwcm90b3R5cGVzIGZvciBpbnRyaW5zaWMgSmF2YVNjcmlwdCBvYmplY3Rz
IChTdHJpbmcsCiAgICAgICAgIC8vIEFycmF5LCBhbmQgc28tb24pLCBhbmQgaXRzIG93biB3cmFw
cGVycyBmb3IgYWxsIERPTSBub2RlcyBhbmQgRE9NCiAgICAgICAgIC8vIGNvbnN0cnVjdG9ycy4K
LSAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXApOwot
ICAgICAgICAKKyAgICAgICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9u
R3JvdXAsIFdURjo6VmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJlc3VsdCk7CisKICAg
ICAgICAgdm9pZCBzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBh
c3NSZWZQdHI8U2VjdXJpdHlPcmlnaW4+KTsKIAogICAgICAgICAvLyBFdmFsdWF0ZSBhIHNjcmlw
dCBmaWxlIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTIxNjcpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEyLTAz
LTAyICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50
IG9mIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0
aGUgdmFsdWUgb2YgdGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
RnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBs
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICog
c3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1l
SW1wbCk6CisKIDIwMTItMDMtMjYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBTY3JvbGxhYmxlIHBsdWdpbnMgbm90IHJlZ2lzdGVyZWQgcHJvcGVybHkg
aW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL1dlYkZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViRnJhbWUuaAkocmV2aXNpb24gMTEyMTY3KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCwxMCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZXhlY3V0ZVNjcmlwdEFu
ZFJldHVyblZhbHVlKAogICAgICAgICBjb25zdCBXZWJTY3JpcHRTb3VyY2UmKSA9IDA7CiAKKyAg
ICB2aXJ0dWFsIHZvaWQgZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAgICAgICAgaW50
IHdvcmxkSUQsIGNvbnN0IFdlYlNjcmlwdFNvdXJjZSogc291cmNlc0luLCB1bnNpZ25lZCBudW1T
b3VyY2VzLAorICAgICAgICBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdlYlZlY3Rvcjx2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gPiogcmVzdWx0cykgPSAwOworCiAgICAgLy8gUmV0dXJucyB0aGUgVjggY29u
dGV4dCBmb3IgdGhpcyBmcmFtZSwgb3IgYW4gZW1wdHkgaGFuZGxlIGlmIHRoZXJlCiAgICAgLy8g
aXMgbm9uZS4KICAgICB2aXJ0dWFsIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gbWFpbldvcmxkU2Ny
aXB0Q29udGV4dCgpIGNvbnN0ID0gMDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gMTEyMTY3KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI3LDcgKzgy
Nyw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXQKICAgICAgICAg
ICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOwogICAg
IH0KIAotICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3Js
ZElELCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAw
KTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdp
bihpbnQgd29ybGRJRCwgY29uc3QgV2ViU2VjdXJpdHlPcmlnaW4mIHNlY3VyaXR5T3JpZ2luKQpA
QCAtODk0LDYgKzg5NCwyOCBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpl
eGVjCiAgICAgcmV0dXJuIG1fZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNv
dXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBvc2l0aW9uKSkudjhWYWx1ZSgpOwog
fQogCit2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCgKKyAg
ICBpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3VyY2VzSW4sIHVuc2lnbmVk
IG51bVNvdXJjZXMsCisgICAgaW50IGV4dGVuc2lvbkdyb3VwLCBXZWJWZWN0b3I8djg6OkhhbmRs
ZTx2ODo6VmFsdWU+ID4qIHJlc3VsdHMpCit7CisgICAgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
IHNvdXJjZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtU291cmNlczsgKytp
KSB7CisgICAgICAgIFRleHRQb3NpdGlvbiBwb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25l
QmFzZWRJbnQoc291cmNlc0luW2ldLnN0YXJ0TGluZSksIE9yZGluYWxOdW1iZXI6OmZpcnN0KCkp
OworICAgICAgICBzb3VyY2VzLmFwcGVuZChTY3JpcHRTb3VyY2VDb2RlKHNvdXJjZXNJbltpXS5j
b2RlLCBzb3VyY2VzSW5baV0udXJsLCBwb3NpdGlvbikpOworICAgIH0KKworICAgIGlmIChyZXN1
bHRzKSB7CisgICAgICAgIFZlY3RvcjxTY3JpcHRWYWx1ZT4gc2NyaXB0UmVzdWx0czsKKyAgICAg
ICAgbV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNv
dXJjZXMsIGV4dGVuc2lvbkdyb3VwLCAmc2NyaXB0UmVzdWx0cyk7CisgICAgICAgIFdlYlZlY3Rv
cjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiB2OFJlc3VsdHMoc2NyaXB0UmVzdWx0cy5zaXplKCkp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2NyaXB0UmVzdWx0cy5zaXplKCk7
IGkrKykKKyAgICAgICAgICAgIHY4UmVzdWx0c1tpXSA9IHNjcmlwdFJlc3VsdHNbaV0udjhWYWx1
ZSgpOworICAgICAgICByZXN1bHRzLT5zd2FwKHY4UmVzdWx0cyk7CisgICAgfSBlbHNlCisgICAg
ICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBz
b3VyY2VzLCBleHRlbnNpb25Hcm91cCwgMCk7Cit9CisKIC8vIFJldHVybnMgdGhlIFY4IGNvbnRl
eHQgZm9yIHRoaXMgZnJhbWUsIG9yIGFuIGVtcHR5IGhhbmRsZSBpZiB0aGVyZSBpcyBub25lLgog
djg6OkxvY2FsPHY4OjpDb250ZXh0PiBXZWJGcmFtZUltcGw6Om1haW5Xb3JsZFNjcmlwdENvbnRl
eHQoKSBjb25zdAogewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJ
bXBsLmgJKHJldmlzaW9uIDExMjE2NykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZyYW1lSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2Miw4IEBAIGNsYXNzIFdlYlBs
dWdpbkNvbnRhaW5lckltcGw7CiBjbGFzcyBXZWJWaWV3OwogY2xhc3MgV2ViVmlld0ltcGw7CiAK
K3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CisKIC8vIEltcGxlbWVudGF0
aW9uIG9mIFdlYkZyYW1lLCBub3RlIHRoYXQgdGhpcyBpcyBhIHJlZmVyZW5jZSBjb3VudGVkIG9i
amVjdC4KIGNsYXNzIFdlYkZyYW1lSW1wbCA6IHB1YmxpYyBXZWJGcmFtZSwgcHVibGljIFJlZkNv
dW50ZWQ8V2ViRnJhbWVJbXBsPiB7CiBwdWJsaWM6CkBAIC0xMTAsNiArMTEyLDkgQEAgcHVibGlj
OgogI2lmIFdFQktJVF9VU0lOR19WOAogICAgIHZpcnR1YWwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICAgICAgY29uc3QgV2ViU2NyaXB0U291
cmNlJik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoCisg
ICAgICAgIGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRTb3VyY2UqIHNvdXJjZXNJbiwgdW5z
aWduZWQgbnVtU291cmNlcywKKyAgICAgICAgaW50IGV4dGVuc2lvbkdyb3VwLCBXZWJWZWN0b3I8
djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4qIHJlc3VsdHMpOwogICAgIHZpcnR1YWwgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBtYWluV29ybGRTY3JpcHRDb250ZXh0KCkgY29uc3Q7CiAgICAgdmlydHVh
bCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY3JlYXRlRmlsZVN5c3RlbShXZWJGaWxlU3lzdGVtOjpU
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViU3RyaW5nJiBuYW1lLApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTEyMTY3KQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTItMDMtMDIgIEVyaXEgQXVndXN0
aW5lICA8ZWF1Z3VzdGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldHVybiB2YWx1ZSBmcm9t
IGV4ZWN1dGVkIHNjcmlwdCBpbiBDaHJvbWl1bS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTc5ODUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgZnVuY3Rpb24gdG8gTGF5b3V0VGVzdENvbnRy
b2xsZXIgdGhhdCBldmFsdWF0ZXMgYSBzY3JpcHQgaW4KKyAgICAgICAgYW4gaXNvbGF0ZWQgd29s
ZCBhbiByZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGV2YWx1YXRpb24uCisKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChldmFsdWF0
ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxl
ckJsYWNrQmVycnkuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKExheW91
dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c2V0WFNTQXVkaXRvckVuYWJsZWQpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUp
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVy
Lmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcDoKKyAgICAgICAgKExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJv
bGxlclF0Lmg6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcik6CisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxl
cld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKwogMjAxMi0wMy0yNiAgUmFwaGFlbCBLdWJv
IGRhIENvc3RhICA8cmFrdWNvQEZyZWVCU0Qub3JnPgogCiAgICAgICAgIFtqaGJ1aWxkXSBVc2Ug
JE1BS0UgaWYgaXQgaXMgZGVmaW5lZCB0byBidWlsZCBqaGJ1aWxkIGl0c2VsZi4KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9u
IDExMjE2NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTgyNiw2ICsxODI2LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVm
IGV2YWx1YXRlU2NyaXB0SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkQW5kUmV0dXJuVmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmpl
Y3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENv
dW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
Cit7CisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxM
YXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7Cisg
ICAgZG91YmxlIHdvcmxkSUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBd
LCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHNjcmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAg
ICBjb250cm9sbGVyLT5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0
KGNvbnRleHQpLCBzY3JpcHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5l
ZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxl
dGVGb3JFbGVtZW50V2l0aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0
UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3Vu
dCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQog
ewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5
b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAt
MjMzOCw2ICsyMzUwLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6
OgogICAgICAgICB7ICJlbGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAog
ICAgICAgICB7ICJlbmNvZGVIb3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3JDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVy
dHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJ
bmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZp
c2lvbiAxMTIxNjcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMTEsNiArMzExLDcgQEAgcHVibGljOgogICAgIHZvaWQg
Y2xvc2VXZWJJbnNwZWN0b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9u
ZyBjYWxsSWQsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdElu
SXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygp
OwogCiAgICAgYm9vbCBzaG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxv
YWQ7IH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENv
bnRyb2xsZXJCbGFja0JlcnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9u
IDExMjE2NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENv
bnRyb2xsZXJCbGFja0JlcnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBA
QCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJl
ZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0o
d29ybGRJRCk7CisgICAgVU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BB
UkFNKHNjcmlwdCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJ
RCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAg
VU5VU0VEX1BBUkFNKHdvcmxkSUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEyMTY3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OkxheW91dFRlc3RDb250cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVN
b2RlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAg
YmluZE1ldGhvZCgiZXZhbHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbldlYkluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJ
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQi
LCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJm
b3JjZVJlZFNlbGVjdGlvbkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRT
ZWxlY3Rpb25Db2xvcnMpOwpAQCAtMTMzMiw2ICsxMzMzLDM1IEBAIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnNldFhTU0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZShjb25zdCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCog
cmVzdWx0KQoreworICAgIFdlYlZlY3Rvcjx2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gPiB2YWx1ZXM7
CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNbMF0uaXNOdW1iZXIo
KSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJTY3JpcHRTb3VyY2Ug
c291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsKKyAgICAgICAgLy8g
VGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hlbiBpdCBsb2Fkcy4g
VGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2VlbXMgdG8gYmUgd2hh
dCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygpLT5mb2N1c2VkRnJh
bWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNbMF0udG9JbnQzMigp
LCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKKyAgICB9CisgICAgcmVzdWx0LT5zZXROdWxsKCk7
CisgICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25seSBvbmUgcmVzdWx0
IGlzIGV4cGVjdGVkCisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAhdmFsdWVzWzBdLklz
RW1wdHkoKSkgeworICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSB2
YWx1ZXNbMF07CisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgbWFueSBtb3JlIHR5cGVzIHRo
YXQgY2FuIGJlIGhhbmRsZWQuCisgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNTdHJpbmcoKSkg
eworICAgICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNjcmlwdFZhbHVl
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3RyaW5nKCphc2NpaVY4KSk7CisgICAg
ICAgIH0gZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICAgICAgcmVz
dWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVhbigpLT5WYWx1ZSgpKTsKKyAgICAgICAgZWxz
ZSBpZiAoc2NyaXB0VmFsdWUtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JpcHRW
YWx1ZS0+SXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVl
LT5Ub0ludDMyKCktPlZhbHVlKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJlcigpLT5WYWx1ZSgpKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkpCisgICAgICAgICAgICAgIHJlc3VsdC0+
c2V0TnVsbCgpOworICAgIH0KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVh
dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMs
IENwcFZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYm
IGFyZ3VtZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmgJKHJldmlzaW9uIDExMjE2NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsy
ODksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0QWxsb3dS
dW5uaW5nT2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFu
dCopOwogCisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGV2YWx1
YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlh
bnQqKTsKICAgICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBB
cmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gMTEy
MTY3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg3LDYgKzY4NywxMSBAQCB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMTEyMTY3
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTE2LDYgKzkxNiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgZ19mcmVlKHNjcmlwdFN0cmluZyk7CiB9CiAKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBK
U1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShy
ZXZpc2lvbiAxMTIxNjcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIsMTEgQEAgdW5zaWdu
ZWQgd29ybGRJREZvcldvcmxkKFdlYlNjcmlwdFdvcmxkCiAgICAgcmV0dXJuIDA7CiB9CiAKK3Zv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBK
U1N0cmluZ1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZCh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0Q0Ys
IEpTU3RyaW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOwpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5jcHAJKHJldmlzaW9uIDExMjE2NykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91
dFRlc3RDb250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTAsNiArOTEwLDExIEBA
IHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW4KICAgICAvLyBTZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudC4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkK
IHsKICAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVk
V29ybGQobV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNjcmlwdCk7Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5oCShyZXZpc2lvbiAxMTIxNjcpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRU
ZXN0Q29udHJvbGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBAQCBwdWJs
aWMgc2xvdHM6CiAKICAgICB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBRU3RyaW5nJiBl
ZGl0aW5nQmVoYXZpb3IpOwogCisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3Js
ZEFuZFJldHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwogICAg
IHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFT
dHJpbmcmIHNjcmlwdCk7CiAgICAgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgp
OwogICAgIFFTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGlu
dCBtYXJnaW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24g
MTEyMTY3KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVy
V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4OSw2ICsxMjg5LDExIEBAIHVuc2lnbmVkIHdv
cmxkSURGb3JXb3JsZChJV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3Ry
aW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZv
aWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVu
c2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2Ny
aXB0KQogewogICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnks
IGZyYW1lKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9s
bGVyV3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRl
c3RDb250cm9sbGVyV3guY3BwCShyZXZpc2lvbiAxMTIxNjcpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2
LDYgKzQ1NiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpCiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVk
IHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQor
eworCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KQogewogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTIxNjcpCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0w
My0wMiAgRXJpcSBBdWd1c3RpbmUgIDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV0dXJuIHZhbHVlIGZyb20gZXhlY3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0aW5nIGV4ZWN1dGluZyBh
IHNjcmlwdCBhbmQgZ2V0dGluZyB0aGUgcmVzdWx0IG9mIHRoYXQgc2NyaXB0LgorCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12
YWx1ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2h0
dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbDogQWRkZWQuCisKIDIw
MTItMDMtMjYgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVjhS
ZWN1cnNpb25TY29wZSBzaG91bGQgbm90IGhvbGQgYSByYXcgcG9pbnRlciB0byBTY3JpcHRFeGVj
dXRpb25Db250ZXh0CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rl
c3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0
ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4t
dmFsdWUtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGlu
ZyA1OiA1CitFeHBlY3RpbmcgMy4xNDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24g
ZG9nLiI6IFRoZSBxdWljayBicm93biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBl
Y3RpbmcgbnVsbDogbnVsbAorCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9o
dHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUt
YW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGJvZHk+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlv
dXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKDAsICI1Iik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoJ0V4cGVjdGluZyA1OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFw
cGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVU
ZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSgwLCAiMy4xNCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRv
Y3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicp
KTsKKworICB2YXIgc3RyaW5nVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9n
LiInKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZSgnRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7Cisg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7
CisKKyAgdmFyIGJvb2xlYW5UZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQu
Ym9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNl
OiAnICsgYm9vbGVhblRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJu
dWxsIik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUoJ0V4cGVjdGluZyBudWxsOiAnICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136572</attachid>
            <date>2012-04-10 16:46:28 -0700</date>
            <delta_ts>2012-04-11 09:47:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120410164441.patch</filename>
            <type>text/plain</type>
            <size>23990</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wNC0xMCAgUGV0ZXIgUnliaW4g
IDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weTogZG8gbm90IGV4cG9zZSByYXcgbWV0aG9kcyBmcm9tIGdlbmVy
YXRlZCB0eXBlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICAvLyBhcyBhIHN0cmluZy4KICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAg
IHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1
bHRzKTsKIAogICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQu
IFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHBy
b3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXks
IGFuZCBzby1vbiksCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgd29y
bGRJRCBpcyAwLCBhIG5ldyB3b3JsZCBpcyBhbHdheXMgY3JlYXRlZC4KICAgICAvLwogICAgIC8v
IEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCi0gICAgdm9pZCBldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3Vs
dHMpOwogCiAgICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZv
ciBkZXNjcmlwdGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVx
dWVzdCBpbnN0YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDExMzc4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywg
aW50IGV4dGVuc2lvbkdyb3VwKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIFdURjo6VmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJl
c3VsdHMpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXpl
ZCBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgogICAg
IGlmICghd2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpKQpAQCAtMjQ3LDcgKzI0
Nyw3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9y
aWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsK
ICAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbnMuZW5kKCkpCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5
T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKQEAgLTI2MSwxMSArMjYxLDE3IEBA
IHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KIAogICAgIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29s
YXRlZENvbnRleHQtPmNvbnRleHQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRf
c2NvcGUoY29udGV4dCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUo
KTsgKytpKQotICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CisKKyAgICBpZiAocmVzdWx0
cykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICByZXN1bHRzLT5hcHBlbmQoZXZhbHVhdGUoc291cmNlc1tpXSwgMCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgIH0KIAog
ICAgIGlmICh3b3JsZElEID09IDApCi0gICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsK
KyAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5kZXN0cm95KCk7CiB9CiAKIHZvaWQgVjhQcm94eTo6
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbkluKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsOCArMTQ2LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJvdG90
eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLAogICAgICAgICAv
LyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9k
ZXMgYW5kIERPTQogICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgCisgICAgICAgIHZv
aWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBXVEY6OlZlY3Rvcjx2
ODo6TG9jYWw8djg6OlZhbHVlPiA+KiByZXN1bHQpOworCiAgICAgICAgIHZvaWQgc2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVu
dCBleGVjdXRpb24gZW52aXJvbm1lbnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMy0wMiAgRXJpcSBBdWd1c3RpbmUg
IDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20gZXhl
Y3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQcm92aWRpbmcgYSB2YXJpYW50IG9mIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV2YWx1
YXRlZCBzY3JpcHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdl
YkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIwMTItMDQtMTAg
IFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gZGVmYXVsdERldmljZVNjYWxlRmFjdG9yICE9IDAgc2hvdWxkIHNldCBkZXZpY2VTY2FsZUZh
Y3RvciA9IGRlZmF1bHREZXZpY2VTY2FsZUZhY3RvciBpbiB0aGUgYWJzZW5jZSBvZiBhIHZpZXdw
b3J0IHRhZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wMy0wMiAgRXJp
cSBBdWd1c3RpbmUgIDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZh
bHVlIGZyb20gZXhlY3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBmdW5jdGlvbiB0byBMYXlvdXRU
ZXN0Q29udHJvbGxlciB0aGF0IGV2YWx1YXRlcyBhIHNjcmlwdCBpbgorICAgICAgICBhbiBpc29s
YXRlZCB3b2xkIGFuIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RD
b250cm9sbGVyQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorCiAyMDEyLTA0LTEwICBPamFu
IFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgY2hyb21lbGVzcyB2
aWV3IHRvIHRoZSBpbmRpdmlkdWFsIHRlc3RzIHZpZXcKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgyNiw2ICsxODI2LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAK
K3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91YmxlIHdvcmxk
SUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwor
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNj
cmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5l
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBzY3Jp
cHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kwogc3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMjMzOCw2ICsyMzUwLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50RG9lc0F1dG9D
b21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJlbmNv
ZGVIb3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTM3ODkpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTEsNiArMzExLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0
b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3Ry
aW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCiAgICAgYm9vbCBz
aG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xh
eW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CisgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYg
Z2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHdv
cmxkSUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RD
b250cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAgYmluZE1ldGhvZCgiZXZh
bHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldl
Ykluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlv
bkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMp
OwpAQCAtMTMzMiw2ICsxMzMzLDM2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhT
U0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1
ZT4gPiB2YWx1ZXM7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJT
Y3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsK
KyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hl
biBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2Vl
bXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNb
MF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKKyAgICB9CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25s
eSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAh
dmFsdWVzWzBdLklzRW1wdHkoKSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzY3Jp
cHRWYWx1ZSA9IHZhbHVlc1swXTsKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBtYW55IG1v
cmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KKyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5J
c1N0cmluZygpKSB7CisgICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgo
c2NyaXB0VmFsdWUpOworICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lp
VjgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOwor
ICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
aWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQo
c2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkp
OworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkKKyAgICAgICAgICAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpIHsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjg5LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9p
ZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAg
IHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShy
ZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1LDExIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBK
U1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZp
c2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTYsNiArOTE2LDExIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIKICAgICBnX2ZyZWUoc2NyaXB0U3RyaW5n
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xs
ZXJNYWMubW0JKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1Miwx
MSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0
Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Ny
aXB0KSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCw2
ICs5MTAsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbgogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmlu
ZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwg
c2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1
OCw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0
IFFTdHJpbmcmIGVkaXRpbmdCZWhhdmlvcik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNj
cmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50
IHBhZ2VJbmRleCk7CiAgICAgUVN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQg
cGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJn
aW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CShyZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVz
dENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg5LDYgKzEyODksMTEgQEAg
dW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAwOwog
fQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0
cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJp
dmF0ZShRdWVyeSwgZnJhbWUpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTYsNiArNDU2LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFZpc2kKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCit7CisKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc4
OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rpbmcg
ZXhlY3V0aW5nIGEgc2NyaXB0IGFuZCBnZXR0aW5nIHRoZSByZXN1bHQgb2YgdGhhdCBzY3JpcHQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1h
bmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNC0xMCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDbG9uZSBhbnkgYmFzZWxpbmVzIGNocm9taXVtIGlzIHVzaW5nIGZyb20gbWFj
LWxlb3BhcmQgYW5kIG1hYy1zbm93bGVvcGFyZCBpbnRvIGNocm9taXVtIGRpcnMuCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQt
cmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGluZyA1OiA1CitFeHBlY3RpbmcgMy4x
NDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6IFRoZSBxdWljayBicm93
biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBlY3RpbmcgbnVsbDogbnVsbAorCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0
ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0
cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICI1Iik7CisgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyA1
OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVUZXN0ID0gbGF5b3V0VGVzdENvbnRy
b2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiMy4x
NCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgc3RyaW5nVGVz
dCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9nLiInKTsKKyAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nICJUaGUgcXVp
Y2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIGJvb2xlYW5UZXN0
ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNlOiAnICsgYm9vbGVhblRlc3QpKTsK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicp
KTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJudWxsIik7CisgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyBudWxsOiAn
ICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136682</attachid>
            <date>2012-04-11 09:48:00 -0700</date>
            <delta_ts>2012-04-11 12:09:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120411094612.patch</filename>
            <type>text/plain</type>
            <size>23990</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc4OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wNC0xMCAgUGV0ZXIgUnliaW4g
IDxwZXRlci5yeWJpbkBnbWFpbC5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQ29kZUdl
bmVyYXRvckluc3BlY3Rvci5weTogZG8gbm90IGV4cG9zZSByYXcgbWV0aG9kcyBmcm9tIGdlbmVy
YXRlZCB0eXBlcwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENv
bnRyb2xsZXIuaAkocmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvU2NyaXB0Q29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHB1
YmxpYzoKICAgICAvLyBhcyBhIHN0cmluZy4KICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25z
dCBTY3JpcHRTb3VyY2VDb2RlJik7CiAKLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxk
KHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAg
IHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVj
dG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1
bHRzKTsKIAogICAgIC8vIEV4ZWN1dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQu
IFRoZSBzY3JpcHQgZ2V0cyBpdHMgb3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHBy
b3RvdHlwZXMgZm9yIGludHJpbnNpYyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXks
IGFuZCBzby1vbiksCkBAIC05OCw3ICs5OCw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgd29y
bGRJRCBpcyAwLCBhIG5ldyB3b3JsZCBpcyBhbHdheXMgY3JlYXRlZC4KICAgICAvLwogICAgIC8v
IEZJWE1FOiBHZXQgcmlkIG9mIGV4dGVuc2lvbkdyb3VwIGhlcmUuCi0gICAgdm9pZCBldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291
cmNlQ29kZT4mLCBpbnQgZXh0ZW5zaW9uR3JvdXApOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3Vs
dHMpOwogCiAgICAgLy8gQXNzb2NpYXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZv
ciBkZXNjcmlwdGlvbikgd2l0aCBhIHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVx
dWVzdCBpbnN0YW5jZXMgdXNlZCBpbiB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRl
eDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDExMzc4OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcsNyArMjE3LDcgQEAgYm9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29y
bGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywg
aW50IGV4dGVuc2lvbkdyb3VwKQordm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3Js
ZChpbnQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIFdURjo6VmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJl
c3VsdHMpCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXpl
ZCBvbmNlIHdlIGhhdmUgYSB3aW5kb3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgogICAg
IGlmICghd2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpKQpAQCAtMjQ3LDcgKzI0
Nyw3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgSXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9y
aWdpbkl0ZXIgPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsK
ICAgICAgICAgaWYgKHNlY3VyaXR5T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0
eU9yaWdpbnMuZW5kKCkpCiAgICAgICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5
T3JpZ2luKHNlY3VyaXR5T3JpZ2luSXRlci0+c2Vjb25kKTsKQEAgLTI2MSwxMSArMjYxLDE3IEBA
IHZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KIAogICAgIHY4OjpMb2Nh
bDx2ODo6Q29udGV4dD4gY29udGV4dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29s
YXRlZENvbnRleHQtPmNvbnRleHQoKSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRf
c2NvcGUoY29udGV4dCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUo
KTsgKytpKQotICAgICAgZXZhbHVhdGUoc291cmNlc1tpXSwgMCk7CisKKyAgICBpZiAocmVzdWx0
cykgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICByZXN1bHRzLT5hcHBlbmQoZXZhbHVhdGUoc291cmNlc1tpXSwgMCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgIH0KIAog
ICAgIGlmICh3b3JsZElEID09IDApCi0gICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsK
KyAgICAgICAgaXNvbGF0ZWRDb250ZXh0LT5kZXN0cm95KCk7CiB9CiAKIHZvaWQgVjhQcm94eTo6
c2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNl
Y3VyaXR5T3JpZ2luPiBwcnBTZWN1cml0eU9yaWdpbkluKQpJbmRleDogU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1Y4UHJveHkuaAkocmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsOCArMTQ2LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJvdG90
eXBlcyBmb3IgaW50cmluc2ljIEphdmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLAogICAgICAgICAv
LyBBcnJheSwgYW5kIHNvLW9uKSwgYW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9k
ZXMgYW5kIERPTQogICAgICAgICAvLyBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VD
b2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgCisgICAgICAgIHZv
aWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3Jp
cHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwLCBXVEY6OlZlY3Rvcjx2
ODo6TG9jYWw8djg6OlZhbHVlPiA+KiByZXN1bHQpOworCiAgICAgICAgIHZvaWQgc2V0SXNvbGF0
ZWRXb3JsZFNlY3VyaXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3Jp
Z2luPik7CiAKICAgICAgICAgLy8gRXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVu
dCBleGVjdXRpb24gZW52aXJvbm1lbnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwyMiBAQAorMjAxMi0wMy0wMiAgRXJpcSBBdWd1c3RpbmUg
IDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20gZXhl
Y3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBQcm92aWRpbmcgYSB2YXJpYW50IG9mIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV2YWx1
YXRlZCBzY3JpcHQuCisKKyAgICAgICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdl
YkZyYW1lKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpleGVjdXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWVzKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgor
ICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIwMTItMDQtMTAg
IFRpbSBEcmVzc2VyICA8dGRyZXNzZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1
bV0gZGVmYXVsdERldmljZVNjYWxlRmFjdG9yICE9IDAgc2hvdWxkIHNldCBkZXZpY2VTY2FsZUZh
Y3RvciA9IGRlZmF1bHREZXZpY2VTY2FsZUZhY3RvciBpbiB0aGUgYWJzZW5jZSBvZiBhIHZpZXdw
b3J0IHRhZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0MSBAQAorMjAxMi0wMy0wMiAgRXJp
cSBBdWd1c3RpbmUgIDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJuIHZh
bHVlIGZyb20gZXhlY3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRpbmcgYSBmdW5jdGlvbiB0byBMYXlvdXRU
ZXN0Q29udHJvbGxlciB0aGF0IGV2YWx1YXRlcyBhIHNjcmlwdCBpbgorICAgICAgICBhbiBpc29s
YXRlZCB3b2xkIGFuIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZXZhbHVhdGlvbi4KKworICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAg
KGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xheW91dFRlc3RD
b250cm9sbGVyQmxhY2tCZXJyeS5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAg
ICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yRW5hYmxlZCk6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0
dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJv
bGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRl
c3RDb250cm9sbGVyUXQuaDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUpOgorCiAyMDEyLTA0LTEwICBPamFu
IFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIGEgY2hyb21lbGVzcyB2
aWV3IHRvIHRoZSBpbmRpdmlkdWFsIHRlc3RzIHZpZXcKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTgyNiw2ICsxODI2LDE4IEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0
SW5Jc29sYXQKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAK
K3N0YXRpYyBKU1ZhbHVlUmVmIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWVDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgTGF5b3V0
VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJv
bGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgZG91YmxlIHdvcmxk
SUQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOwor
ICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHNj
cmlwdChBZG9wdCwgSlNWYWx1ZVRvU3RyaW5nQ29weShjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4
Y2VwdGlvbikpOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBjb250cm9sbGVyLT5l
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHN0YXRpY19jYXN0PHVu
c2lnbmVkPih3b3JsZElEKSwgSlNDb250ZXh0R2V0R2xvYmFsT2JqZWN0KGNvbnRleHQpLCBzY3Jp
cHQuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30K
Kwogc3RhdGljIEpTVmFsdWVSZWYgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50V2l0
aElkQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBK
U09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1
ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMjMzOCw2ICsyMzUwLDcg
QEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OgogICAgICAgICB7ICJl
bGVtZW50RG9lc0F1dG9Db21wbGV0ZUZvckVsZW1lbnRXaXRoSWQiLCBlbGVtZW50RG9lc0F1dG9D
b21wbGV0ZUZvckVsZW1lbnRXaXRoSWRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJlbmNv
ZGVIb3N0TmFtZSIsIGVuY29kZUhvc3ROYW1lQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZXZhbHVhdGVJbldlYkluc3BlY3RvciIsIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3JDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAorICAgICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlIiwgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZUNhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJleGVjQ29tbWFuZCIsIGV4ZWNDb21tYW5kQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZmluZFN0cmluZyIsIGZpbmRTdHJpbmdDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCShyZXZpc2lvbiAxMTM3ODkpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTEsNiArMzExLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xvc2VXZWJJbnNwZWN0
b3IoKTsKICAgICB2b2lkIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IobG9uZyBjYWxsSWQsIEpTU3Ry
aW5nUmVmIHNjcmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1
bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNj
cmlwdCk7CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZh
bHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KTsKICAgICB2b2lkIGFsbG93Um91bmRpbmdIYWNrcygpOwogCiAgICAgYm9vbCBz
aG91bGRTdGF5T25QYWdlQWZ0ZXJIYW5kbGluZ0JlZm9yZVVubG9hZCgpIGNvbnN0IHsgcmV0dXJu
IG1fc2hvdWxkU3RheU9uUGFnZUFmdGVySGFuZGxpbmdCZWZvcmVVbmxvYWQ7IH0KSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9ibGFja2JlcnJ5L0xh
eW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJCbGFja0Jl
cnJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwxNCBAQCB2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAor
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRB
bmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3Qs
IEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICBVTlVTRURfUEFSQU0od29ybGRJRCk7CisgICAg
VU5VU0VEX1BBUkFNKGdsb2JhbE9iamVjdCk7CisgICAgVU5VU0VEX1BBUkFNKHNjcmlwdCk7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYg
Z2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHdv
cmxkSUQpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjgsNiArMTI4LDcgQEAgTGF5b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RD
b250cm9sbAogICAgIGJpbmRNZXRob2QoImVuYWJsZUF1dG9SZXNpemVNb2RlIiwgJkxheW91dFRl
c3RDb250cm9sbGVyOjplbmFibGVBdXRvUmVzaXplTW9kZSk7CiAgICAgYmluZE1ldGhvZCgiZXZh
bHVhdGVJbldlYkluc3BlY3RvciIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbldl
Ykluc3BlY3Rvcik7CiAgICAgYmluZE1ldGhvZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
KTsKKyAgICBiaW5kTWV0aG9kKCJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVy
blZhbHVlIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKTsKICAgICBiaW5kTWV0aG9kKCJzZXRJc29sYXRlZFdvcmxkU2Vj
dXJpdHlPcmlnaW4iLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldElzb2xhdGVkV29ybGRTZWN1
cml0eU9yaWdpbik7CiAgICAgYmluZE1ldGhvZCgiZXhlY0NvbW1hbmQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKTsKICAgICBiaW5kTWV0aG9kKCJmb3JjZVJlZFNlbGVjdGlv
bkNvbG9ycyIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6Zm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMp
OwpAQCAtMTMzMiw2ICsxMzMzLDM2IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldFhT
U0F1ZGl0b3IKICAgICByZXN1bHQtPnNldE51bGwoKTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShjb25z
dCBDcHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAg
IHY4OjpIYW5kbGVTY29wZSBzY29wZTsKKyAgICBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1
ZT4gPiB2YWx1ZXM7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkgPj0gMiAmJiBhcmd1bWVudHNb
MF0uaXNOdW1iZXIoKSAmJiBhcmd1bWVudHNbMV0uaXNTdHJpbmcoKSkgeworICAgICAgICBXZWJT
Y3JpcHRTb3VyY2Ugc291cmNlKGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNbMV0pKTsK
KyAgICAgICAgLy8gVGhpcyByZWxpZXMgb24gdGhlIGlmcmFtZSBmb2N1c2luZyBpdHNlbGYgd2hl
biBpdCBsb2Fkcy4gVGhpcyBpcyBhIGJpdAorICAgICAgICAvLyBza2V0Y2h5LCBidXQgaXQgc2Vl
bXMgdG8gYmUgd2hhdCBvdGhlciB0ZXN0cyBkby4KKyAgICAgICAgbV9zaGVsbC0+d2ViVmlldygp
LT5mb2N1c2VkRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChhcmd1bWVudHNb
MF0udG9JbnQzMigpLCAmc291cmNlLCAxLCAxLCAmdmFsdWVzKTsKKyAgICB9CisgICAgcmVzdWx0
LT5zZXROdWxsKCk7CisgICAgLy8gU2luY2Ugb25seSBvbmUgc2NyaXB0IHdhcyBhZGRlZCwgb25s
eSBvbmUgcmVzdWx0IGlzIGV4cGVjdGVkCisgICAgaWYgKHZhbHVlcy5zaXplKCkgPT0gMSAmJiAh
dmFsdWVzWzBdLklzRW1wdHkoKSkgeworICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBzY3Jp
cHRWYWx1ZSA9IHZhbHVlc1swXTsKKyAgICAgICAgLy8gRklYTUU6IFRoZXJlIGFyZSBtYW55IG1v
cmUgdHlwZXMgdGhhdCBjYW4gYmUgaGFuZGxlZC4KKyAgICAgICAgaWYgKHNjcmlwdFZhbHVlLT5J
c1N0cmluZygpKSB7CisgICAgICAgICAgICB2ODo6U3RyaW5nOjpBc2NpaVZhbHVlIGFzY2lpVjgo
c2NyaXB0VmFsdWUpOworICAgICAgICAgICAgcmVzdWx0LT5zZXQoc3RkOjpzdHJpbmcoKmFzY2lp
VjgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNCb29sZWFuKCkpCisgICAg
ICAgICAgICByZXN1bHQtPnNldChzY3JpcHRWYWx1ZS0+VG9Cb29sZWFuKCktPlZhbHVlKCkpOwor
ICAgICAgICBlbHNlIGlmIChzY3JpcHRWYWx1ZS0+SXNOdW1iZXIoKSkgeworICAgICAgICAgICAg
aWYgKHNjcmlwdFZhbHVlLT5Jc0ludDMyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0LT5zZXQo
c2NyaXB0VmFsdWUtPlRvSW50MzIoKS0+VmFsdWUoKSk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmVzdWx0LT5zZXQoc2NyaXB0VmFsdWUtPlRvTnVtYmVyKCktPlZhbHVlKCkp
OworICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdFZhbHVlLT5Jc051bGwoKSkKKyAgICAgICAgICAg
ICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgfQorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChjb25zdCBDcHBBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIGlmIChhcmd1bWVudHMuc2l6
ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYgYXJndW1lbnRzWzFdLmlzU3Ry
aW5nKCkpIHsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RD
b250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjg5LDYgKzI4OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEFsbG93RmlsZUFjY2Vzc0Zy
b21GaWxlVVJMcyhjb25zdCBDcHBBcmd1bWVudExpc3QmLCBDcHBWYXJpYW50Kik7CiAgICAgdm9p
ZCBzZXRBbGxvd1J1bm5pbmdPZkluc2VjdXJlQ29udGVudChjb25zdCBDcHBBcmd1bWVudExpc3Qm
LCBDcHBWYXJpYW50Kik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxk
QW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAg
IHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKIApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENvbnRyb2xsZXJFZmwuY3BwCShy
ZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9lZmwvTGF5b3V0VGVzdENv
bnRyb2xsZXJFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02ODUsNiArNjg1LDExIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQsIEpTT2JqZWN0UmVmLCBK
U1N0cmluZ1JlZikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCShyZXZp
c2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTYsNiArOTE2LDExIEBAIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWIKICAgICBnX2ZyZWUoc2NyaXB0U3RyaW5n
KTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KSW5k
ZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xs
ZXJNYWMubW0JKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9M
YXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1Miwx
MSBAQCB1bnNpZ25lZCB3b3JsZElERm9yV29ybGQoV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9i
YWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwg
SlNTdHJpbmdSZWYgc2NyaXB0KQogewogICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gc2NyaXB0
Q0YoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwgc2Ny
aXB0KSk7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxl
clF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmNwcAkocmV2aXNpb24gMTEzNzg5KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxMCw2
ICs5MTAsMTEgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbgogICAg
IC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzk0ODUuCiB9
CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorfQorCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3QgUVN0cmlu
ZyYgc2NyaXB0KQogewogICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydFF0OjpldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZChtX2RydC0+d2ViUGFnZSgpLT5tYWluRnJhbWUoKSwgd29ybGRJRCwg
c2NyaXB0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9s
bGVyUXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0
Q29udHJvbGxlclF0LmgJKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU4LDYgKzI1
OCw3IEBAIHB1YmxpYyBzbG90czoKIAogICAgIHZvaWQgc2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0
IFFTdHJpbmcmIGVkaXRpbmdCZWhhdmlvcik7CiAKKyAgICB2b2lkIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNj
cmlwdCk7CiAgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgUVN0cmluZyYgc2NyaXB0KTsKICAgICBib29sIGlzUGFnZUJveFZpc2libGUoaW50
IHBhZ2VJbmRleCk7CiAgICAgUVN0cmluZyBwYWdlU2l6ZUFuZE1hcmdpbnNJblBpeGVscyhpbnQg
cGFnZUluZGV4LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBtYXJnaW5Ub3AsIGludCBtYXJn
aW5SaWdodCwgaW50IG1hcmdpbkJvdHRvbSwgaW50IG1hcmdpbkxlZnQpOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CShyZXZpc2lvbiAxMTM3ODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVz
dENvbnRyb2xsZXJXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjg5LDYgKzEyODksMTEgQEAg
dW5zaWduZWQgd29ybGRJREZvcldvcmxkKElXZWJTY3JpcHRXb3JsZAogICAgIHJldHVybiAwOwog
fQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRX
b3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9i
amVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0
cmluZ1JlZiBzY3JpcHQpCiB7CiAgICAgQ09NUHRyPElXZWJGcmFtZVByaXZhdGU+IGZyYW1lUHJp
dmF0ZShRdWVyeSwgZnJhbWUpOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAJKHJldmlzaW9uIDExMzc4OSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NTYsNiArNDU2LDExIEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnJlbW92
ZUFsbFZpc2kKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCiB9CiAKK3ZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFs
dWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1Jl
ZiBzY3JpcHQpCit7CisKK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFs
T2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpCiB7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzc4
OSkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0u
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Rpbmcg
ZXhlY3V0aW5nIGEgc2NyaXB0IGFuZCBnZXR0aW5nIHRoZSByZXN1bHQgb2YgdGhhdCBzY3JpcHQu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1h
bmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sOiBB
ZGRlZC4KKwogMjAxMi0wNC0xMCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBDbG9uZSBhbnkgYmFzZWxpbmVzIGNocm9taXVtIGlzIHVzaW5nIGZyb20gbWFj
LWxlb3BhcmQgYW5kIG1hYy1zbm93bGVvcGFyZCBpbnRvIGNocm9taXVtIGRpcnMuCkluZGV4OiBM
YXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQt
cmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVt
L2h0dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYgQEAKK0V4cGVjdGluZyA1OiA1CitFeHBlY3RpbmcgMy4x
NDogMy4xNAorRXhwZWN0aW5nICJUaGUgcXVpY2sgYnJvd24gZG9nLiI6IFRoZSBxdWljayBicm93
biBkb2cuCitFeHBlY3RpbmcgZmFsc2U6IGZhbHNlCitFeHBlY3RpbmcgbnVsbDogbnVsbAorCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21pc2MvZXhlY3V0
ZS1hbmQtcmV0dXJuLXZhbHVlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZv
cm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0
cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGJvZHk+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKKyAgdmFyIGludFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFs
dWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICI1Iik7CisgIGRvY3Vt
ZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyA1
OiAnICsgaW50VGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBkb3VibGVUZXN0ID0gbGF5b3V0VGVzdENvbnRy
b2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiMy4x
NCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCdFeHBlY3RpbmcgMy4xNDogJyArIGRvdWJsZVRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicpKTsKKworICB2YXIgc3RyaW5nVGVz
dCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5k
UmV0dXJuVmFsdWUoMCwgJyJUaGUgcXVpY2sgYnJvd24gZG9nLiInKTsKKyAgZG9jdW1lbnQuYm9k
eS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nICJUaGUgcXVp
Y2sgYnJvd24gZG9nLiI6ICcgKyBzdHJpbmdUZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIGJvb2xlYW5UZXN0
ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRS
ZXR1cm5WYWx1ZSgwLCAiIXRydWUiKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIGZhbHNlOiAnICsgYm9vbGVhblRlc3QpKTsK
KyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdicicp
KTsKKworICB2YXIgbnVsbFRlc3QgPSBsYXlvdXRUZXN0Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAsICJudWxsIik7CisgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyBudWxsOiAn
ICsgbnVsbFRlc3QpKTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdicicpKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>136721</attachid>
            <date>2012-04-11 12:09:40 -0700</date>
            <delta_ts>2012-04-23 18:10:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-79851-20120411120751.patch</filename>
            <type>text/plain</type>
            <size>29733</size>
            <attacher name="Eriq Augustine">eaugusti</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg4NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDEyLTAzLTAyICBFcmlxIEF1
Z3VzdGluZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUg
ZnJvbSBleGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFByb3ZpZGluZyBhIHZhcmFpYW50IG9mIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAgICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2Yg
dGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAgICAgVGVzdDogcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS5odG1sCisKKyAgICAgICAg
KiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNj
cmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
UHJveHk6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9W
OFByb3h5Lmg6CisgICAgICAgIChWOFByb3h5KToKKwogMjAxMi0wNC0xMSAgRGF2aWQgSHlhdHQg
IDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTgzNjE0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9TY3JpcHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTEzNzg5KQorKysgU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2
OCwxNCArMTY4LDIyIEBAIFNjcmlwdFZhbHVlIFNjcmlwdENvbnRyb2xsZXI6OmNhbGxGdW5jdGkK
ICAgICByZXR1cm4gU2NyaXB0VmFsdWUobV9wcm94eS0+Y2FsbEZ1bmN0aW9uKGZ1bmN0aW9uLCBy
ZWNlaXZlciwgYXJnYywgYXJndikpOwogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1
YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRT
b3VyY2VDb2RlPiYgc291cmNlcykKK3ZvaWQgU2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklz
b2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNv
ZGU+JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKQogewotICAgIG1fcHJv
eHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDApOworICAgIGV2
YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMsIDAsIHJlc3VsdHMpOwogfQog
Ci12b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVk
IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4
dGVuc2lvbkdyb3VwKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRX
b3JsZCh1bnNpZ25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNv
dXJjZXMsIGludCBleHRlbnNpb25Hcm91cCwgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykK
IHsKLSAgICBtX3Byb3h5LT5ldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2Vz
LCBleHRlbnNpb25Hcm91cCk7CisgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAg
IGlmIChyZXN1bHRzKSB7CisgICAgICAgIFZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+IHY4
UmVzdWx0czsKKyAgICAgICAgbV9wcm94eS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJ
RCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZ2OFJlc3VsdHMpOworICAgICAgICBWZWN0b3I8
djg6OkxvY2FsPHY4OjpWYWx1ZT4gPjo6aXRlcmF0b3IgaXRyOworICAgICAgICBmb3IgKGl0ciA9
IHY4UmVzdWx0cy5iZWdpbigpOyBpdHIgIT0gdjhSZXN1bHRzLmVuZCgpOyArK2l0cikKKyAgICAg
ICAgICAgIHJlc3VsdHMtPmFwcGVuZChTY3JpcHRWYWx1ZSgqaXRyKSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fcHJveHktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJjZXMs
IGV4dGVuc2lvbkdyb3VwLCAwKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpzZXRJc29s
YXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4oaW50IHdvcmxkSUQsIFBhc3NSZWZQdHI8U2VjdXJpdHlP
cmlnaW4+IHNlY3VyaXR5T3JpZ2luKQpAQCAtMzQ4LDcgKzM1Niw3IEBAIHZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6ZXZhbHVhdGVJbldvcmxkKGMKICAgICBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4g
c291cmNlczsKICAgICBzb3VyY2VzLmFwcGVuZChzb3VyY2UpOwogICAgIC8vIEZJWE1FOiBHZXQg
YW4gSUQgZnJvbSB0aGUgd29ybGQgcGFyYW0uCi0gICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQo
MCwgc291cmNlcyk7CisgICAgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoMCwgc291cmNlcywgMCk7
CiB9CiAKIHN0YXRpYyBOUE9iamVjdCogY3JlYXRlTm9TY3JpcHRPYmplY3QoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAkocmV2aXNpb24g
MTEzODg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICAgICAvLyBhcyBhIHN0
cmluZy4KICAgICBTY3JpcHRWYWx1ZSBldmFsdWF0ZShjb25zdCBTY3JpcHRTb3VyY2VDb2RlJik7
CiAKLSAgICB2b2lkIGV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNv
bnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYpOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+
JiBzb3VyY2VzLCBWZWN0b3I8U2NyaXB0VmFsdWU+KiByZXN1bHRzKTsKIAogICAgIC8vIEV4ZWN1
dGVzIEphdmFTY3JpcHQgaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBzY3JpcHQgZ2V0cyBpdHMg
b3duIGdsb2JhbCBzY29wZSwKICAgICAvLyBpdHMgb3duIHByb3RvdHlwZXMgZm9yIGludHJpbnNp
YyBKYXZhU2NyaXB0IG9iamVjdHMgKFN0cmluZywgQXJyYXksIGFuZCBzby1vbiksCkBAIC05OSw3
ICs5OSw3IEBAIHB1YmxpYzoKICAgICAvLyBJZiB0aGUgd29ybGRJRCBpcyAwLCBhIG5ldyB3b3Js
ZCBpcyBhbHdheXMgY3JlYXRlZC4KICAgICAvLwogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIGV4
dGVuc2lvbkdyb3VwIGhlcmUuCi0gICAgdm9pZCBldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mLCBpbnQgZXh0ZW5z
aW9uR3JvdXApOworICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29y
bGRJRCwgY29uc3QgVmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5z
aW9uR3JvdXAsIFZlY3RvcjxTY3JpcHRWYWx1ZT4qIHJlc3VsdHMpOwogCiAgICAgLy8gQXNzb2Np
YXRlcyBhbiBpc29sYXRlZCB3b3JsZCAoc2VlIGFib3ZlIGZvciBkZXNjcmlwdGlvbikgd2l0aCBh
IHNlY3VyaXR5CiAgICAgLy8gb3JpZ2luLiBYTUxIdHRwUmVxdWVzdCBpbnN0YW5jZXMgdXNlZCBp
biB0aGF0IHdvcmxkIHdpbGwgYmUgY29uc2lkZXJlZApJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhQcm94eS5jcHAJKHJldmlzaW9uIDExMzg4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4UHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsNyArMjE3LDcgQEAg
Ym9vbCBWOFByb3h5OjpoYW5kbGVPdXRPZk1lbW9yeSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgVjhQcm94eTo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0
IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4dGVuc2lvbkdyb3VwKQor
dm9pZCBWOFByb3h5OjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJRCwgY29uc3Qg
VmVjdG9yPFNjcmlwdFNvdXJjZUNvZGU+JiBzb3VyY2VzLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIFdU
Rjo6VmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJlc3VsdHMpCiB7CiAgICAgLy8gRklY
TUU6IFRoaXMgd2lsbCBuZWVkIHRvIGdldCByZW9yZ2FuaXplZCBvbmNlIHdlIGhhdmUgYSB3aW5k
b3dTaGVsbCBmb3IgdGhlIGlzb2xhdGVkIHdvcmxkLgogICAgIGlmICghd2luZG93U2hlbGwoKS0+
aW5pdENvbnRleHRJZk5lZWRlZCgpKQpAQCAtMjQ3LDcgKzI0Nyw3IEBAIHZvaWQgVjhQcm94eTo6
ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW4KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgSXNvbGF0ZWRXb3JsZFNl
Y3VyaXR5T3JpZ2luTWFwOjppdGVyYXRvciBzZWN1cml0eU9yaWdpbkl0ZXIgPSBtX2lzb2xhdGVk
V29ybGRTZWN1cml0eU9yaWdpbnMuZmluZCh3b3JsZElEKTsKICAgICAgICAgaWYgKHNlY3VyaXR5
T3JpZ2luSXRlciAhPSBtX2lzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuZW5kKCkpCiAgICAg
ICAgICAgICBpc29sYXRlZENvbnRleHQtPnNldFNlY3VyaXR5T3JpZ2luKHNlY3VyaXR5T3JpZ2lu
SXRlci0+c2Vjb25kKTsKQEAgLTI2MSwxMSArMjYxLDE3IEBAIHZvaWQgVjhQcm94eTo6ZXZhbHVh
dGVJbklzb2xhdGVkV29ybGQoaW4KIAogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gY29udGV4
dCA9IHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyhpc29sYXRlZENvbnRleHQtPmNvbnRleHQo
KSk7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRfc2NvcGUoY29udGV4dCk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3VyY2VzLnNpemUoKTsgKytpKQotICAgICAgZXZhbHVh
dGUoc291cmNlc1tpXSwgMCk7CisKKyAgICBpZiAocmVzdWx0cykgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHNvdXJjZXMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICByZXN1bHRz
LT5hcHBlbmQoZXZhbHVhdGUoc291cmNlc1tpXSwgMCkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc291cmNlcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGV2YWx1YXRlKHNvdXJjZXNbaV0sIDApOworICAgIH0KIAogICAgIGlmICh3b3JsZElEID09IDAp
Ci0gICAgICBpc29sYXRlZENvbnRleHQtPmRlc3Ryb3koKTsKKyAgICAgICAgaXNvbGF0ZWRDb250
ZXh0LT5kZXN0cm95KCk7CiB9CiAKIHZvaWQgVjhQcm94eTo6c2V0SXNvbGF0ZWRXb3JsZFNlY3Vy
aXR5T3JpZ2luKGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiBwcnBTZWN1
cml0eU9yaWdpbkluKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaAkocmV2
aXNpb24gMTEzODg1KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDYsOCArMTQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICAvLyBnbG9iYWwgc2NvcGUsIGl0cyBvd24gcHJvdG90eXBlcyBmb3IgaW50cmluc2ljIEph
dmFTY3JpcHQgb2JqZWN0cyAoU3RyaW5nLAogICAgICAgICAvLyBBcnJheSwgYW5kIHNvLW9uKSwg
YW5kIGl0cyBvd24gd3JhcHBlcnMgZm9yIGFsbCBET00gbm9kZXMgYW5kIERPTQogICAgICAgICAv
LyBjb25zdHJ1Y3RvcnMuCi0gICAgICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVkV29ybGQoaW50
IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNlcywgaW50IGV4
dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgCisgICAgICAgIHZvaWQgZXZhbHVhdGVJbklzb2xhdGVk
V29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTY3JpcHRTb3VyY2VDb2RlPiYgc291cmNl
cywgaW50IGV4dGVuc2lvbkdyb3VwLCBXVEY6OlZlY3Rvcjx2ODo6TG9jYWw8djg6OlZhbHVlPiA+
KiByZXN1bHQpOworCiAgICAgICAgIHZvaWQgc2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2lu
KGludCB3b3JsZElELCBQYXNzUmVmUHRyPFNlY3VyaXR5T3JpZ2luPik7CiAKICAgICAgICAgLy8g
RXZhbHVhdGUgYSBzY3JpcHQgZmlsZSBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1l
bnQuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gMTEzODg1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMiBAQAorMjAxMi0wMy0wMiAgRXJpcSBBdWd1c3RpbmUgIDxlYXVndXN0aUBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV0dXJuIHZhbHVlIGZyb20gZXhlY3V0ZWQgc2NyaXB0IGluIENocm9t
aXVtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4
NTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBQcm92
aWRpbmcgYSB2YXJpYW50IG9mIGV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIHRoYXQKKyAg
ICAgICAgcmV0dXJucyB0aGUgdmFsdWUgb2YgdGhlIGV2YWx1YXRlZCBzY3JpcHQuCisKKyAgICAg
ICAgKiBwdWJsaWMvV2ViRnJhbWUuaDoKKyAgICAgICAgKFdlYkZyYW1lKToKKyAgICAgICAgKiBz
cmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpleGVj
dXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVzKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYkZyYW1lSW1wbCk6CisKIDIwMTItMDQtMTEgIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZCBPVkVSUklERSBhbm5v
dGF0aW9ucyBmb3IgY2MgYW5pbWF0aW9uLXJlbGF0ZWQgaW50ZXJmYWNlcwpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCShyZXZpc2lvbiAxMTM4ODUpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNzYsNiArMjc2LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBleGVjdXRlU2NyaXB0QW5kUmV0dXJuVmFsdWUoCiAgICAgICAgIGNvbnN0IFdlYlNjcmlw
dFNvdXJjZSYpID0gMDsKIAorICAgIHZpcnR1YWwgdm9pZCBleGVjdXRlU2NyaXB0SW5Jc29sYXRl
ZFdvcmxkKAorICAgICAgICBpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0U291cmNlKiBzb3Vy
Y2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisgICAgICAgIGludCBleHRlbnNpb25Hcm91cCwg
V2ViVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4qIHJlc3VsdHMpID0gMDsKKwogICAgIC8v
IENhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGdpdmVuIHJlY2VpdmVyIGFuZCBhcmd1bWVudHMs
IGJ5cGFzc2luZwogICAgIC8vIGNhbkV4ZWN1dGUoKS4KICAgICB2aXJ0dWFsIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBjYWxsRnVuY3Rpb25FdmVuSWZTY3JpcHREaXNhYmxlZCgKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gMTEzODg1
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODI5LDcgKzgyOSw3IEBAIHZvaWQgV2ViRnJhbWVJbXBsOjpleGVjdXRlU2Ny
aXB0SW5Jc29sYXQKICAgICAgICAgICAgIHNvdXJjZXNJbltpXS5jb2RlLCBzb3VyY2VzSW5baV0u
dXJsLCBwb3NpdGlvbikpOwogICAgIH0KIAotICAgIG1fZnJhbWUtPnNjcmlwdCgpLT5ldmFsdWF0
ZUluSXNvbGF0ZWRXb3JsZCh3b3JsZElELCBzb3VyY2VzLCBleHRlbnNpb25Hcm91cCk7CisgICAg
bV9mcmFtZS0+c2NyaXB0KCktPmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKHdvcmxkSUQsIHNvdXJj
ZXMsIGV4dGVuc2lvbkdyb3VwLCAwKTsKIH0KIAogdm9pZCBXZWJGcmFtZUltcGw6OnNldElzb2xh
dGVkV29ybGRTZWN1cml0eU9yaWdpbihpbnQgd29ybGRJRCwgY29uc3QgV2ViU2VjdXJpdHlPcmln
aW4mIHNlY3VyaXR5T3JpZ2luKQpAQCAtODk2LDYgKzg5NiwyOCBAQCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gV2ViRnJhbWVJbXBsOjpleGVjCiAgICAgcmV0dXJuIG1fZnJhbWUtPnNjcmlwdCgpLT5l
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc291cmNlLmNvZGUsIHNvdXJjZS51cmwsIHBv
c2l0aW9uKSkudjhWYWx1ZSgpOwogfQogCit2b2lkIFdlYkZyYW1lSW1wbDo6ZXhlY3V0ZVNjcmlw
dEluSXNvbGF0ZWRXb3JsZCgKKyAgICBpbnQgd29ybGRJRCwgY29uc3QgV2ViU2NyaXB0U291cmNl
KiBzb3VyY2VzSW4sIHVuc2lnbmVkIG51bVNvdXJjZXMsCisgICAgaW50IGV4dGVuc2lvbkdyb3Vw
LCBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPiogcmVzdWx0cykKK3sKKyAgICBWZWN0
b3I8U2NyaXB0U291cmNlQ29kZT4gc291cmNlczsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Tb3VyY2VzOyArK2kpIHsKKyAgICAgICAgVGV4dFBvc2l0aW9uIHBvc2l0aW9uKE9y
ZGluYWxOdW1iZXI6OmZyb21PbmVCYXNlZEludChzb3VyY2VzSW5baV0uc3RhcnRMaW5lKSwgT3Jk
aW5hbE51bWJlcjo6Zmlyc3QoKSk7CisgICAgICAgIHNvdXJjZXMuYXBwZW5kKFNjcmlwdFNvdXJj
ZUNvZGUoc291cmNlc0luW2ldLmNvZGUsIHNvdXJjZXNJbltpXS51cmwsIHBvc2l0aW9uKSk7Cisg
ICAgfQorCisgICAgaWYgKHJlc3VsdHMpIHsKKyAgICAgICAgVmVjdG9yPFNjcmlwdFZhbHVlPiBz
Y3JpcHRSZXN1bHRzOworICAgICAgICBtX2ZyYW1lLT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xh
dGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0ZW5zaW9uR3JvdXAsICZzY3JpcHRSZXN1bHRz
KTsKKyAgICAgICAgV2ViVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gdjhSZXN1bHRzKHNj
cmlwdFJlc3VsdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNj
cmlwdFJlc3VsdHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICB2OFJlc3VsdHNbaV0gPSB2ODo6
TG9jYWw8djg6OlZhbHVlPjo6TmV3KHNjcmlwdFJlc3VsdHNbaV0udjhWYWx1ZSgpKTsKKyAgICAg
ICAgcmVzdWx0cy0+c3dhcCh2OFJlc3VsdHMpOworICAgIH0gZWxzZQorICAgICAgICBtX2ZyYW1l
LT5zY3JpcHQoKS0+ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQod29ybGRJRCwgc291cmNlcywgZXh0
ZW5zaW9uR3JvdXAsIDApOworfQorCiAvLyBDYWxsIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBnaXZl
biByZWNlaXZlciBhbmQgYXJndW1lbnRzLCBieXBhc3NpbmcgY2FuRXhlY3V0ZVNjcmlwdHMuCiB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV2ViRnJhbWVJbXBsOjpjYWxsRnVuY3Rpb25FdmVuSWZTY3Jp
cHREaXNhYmxlZCh2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuY3Rpb24sCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHJlY2VpdmVyLApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmgJKHJldmlzaW9uIDExMzg4NSkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw2
ICs2Miw4IEBAIGNsYXNzIFdlYlBsdWdpbkNvbnRhaW5lckltcGw7CiBjbGFzcyBXZWJWaWV3Owog
Y2xhc3MgV2ViVmlld0ltcGw7CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0
b3I7CisKIC8vIEltcGxlbWVudGF0aW9uIG9mIFdlYkZyYW1lLCBub3RlIHRoYXQgdGhpcyBpcyBh
IHJlZmVyZW5jZSBjb3VudGVkIG9iamVjdC4KIGNsYXNzIFdlYkZyYW1lSW1wbCA6IHB1YmxpYyBX
ZWJGcmFtZSwgcHVibGljIFJlZkNvdW50ZWQ8V2ViRnJhbWVJbXBsPiB7CiBwdWJsaWM6CkBAIC0x
MTAsNiArMTEyLDkgQEAgcHVibGljOgogI2lmIFdFQktJVF9VU0lOR19WOAogICAgIHZpcnR1YWwg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGV4ZWN1dGVTY3JpcHRBbmRSZXR1cm5WYWx1ZSgKICAgICAg
ICAgY29uc3QgV2ViU2NyaXB0U291cmNlJik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWN1dGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoCisgICAgICAgIGludCB3b3JsZElELCBjb25zdCBXZWJTY3JpcHRT
b3VyY2UqIHNvdXJjZXNJbiwgdW5zaWduZWQgbnVtU291cmNlcywKKyAgICAgICAgaW50IGV4dGVu
c2lvbkdyb3VwLCBXZWJWZWN0b3I8djg6OkxvY2FsPHY4OjpWYWx1ZT4gPiogcmVzdWx0cyk7CiAg
ICAgdmlydHVhbCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY2FsbEZ1bmN0aW9uRXZlbklmU2NyaXB0
RGlzYWJsZWQoCiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPiwKICAgICAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiwKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExMzg4NSkKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAzLTAyICBFcmlxIEF1Z3VzdGlu
ZSAgPGVhdWd1c3RpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXR1cm4gdmFsdWUgZnJvbSBl
eGVjdXRlZCBzY3JpcHQgaW4gQ2hyb21pdW0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03OTg1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEFkZGluZyBhIGZ1bmN0aW9uIHRvIExheW91dFRlc3RDb250cm9s
bGVyIHRoYXQgZXZhbHVhdGVzIGEgc2NyaXB0IGluCisgICAgICAgIGFuIGlzb2xhdGVkIHdvbGQg
YW4gcmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBldmFsdWF0aW9uLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZXZhbHVhdGVT
Y3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2JsYWNrYmVycnkvTGF5b3V0VGVzdENvbnRyb2xsZXJC
bGFja0JlcnJ5LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNj
cmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnNldFhTU0F1ZGl0b3JFbmFibGVkKToKKyAgICAgICAgKExheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKToK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5o
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL2VmbC9MYXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNw
cDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0
ZWRXb3JsZEFuZFJldHVyblZhbHVlKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5
b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1
cm5WYWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xs
ZXJRdC5oOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJX
eC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSk6CisKIDIwMTItMDQtMTEgIFNoZXJpZmYgQm90ICA8
d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxp
bmcgb3V0IHIxMTM4MzYuCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMTM4ODUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MjYsNiArMTgy
NiwxOCBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0CiAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJl
ZiBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGRvdWJsZSB3b3JsZElEID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzY3JpcHQoQWRvcHQsIEpTVmFs
dWVUb1N0cmluZ0NvcHkoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pKTsKKyAgICBB
U1NFUlQoISpleGNlcHRpb24pOworCisgICAgY29udHJvbGxlci0+ZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4od29ybGRJRCks
IEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChjb250ZXh0KSwgc2NyaXB0LmdldCgpKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVl
UmVmIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlRm9yRWxlbWVudFdpdGhJZENhbGxiYWNrKEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09i
amVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10s
IEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29u
dHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQ
cml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTIzMzgsNiArMjM1MCw3IEBAIEpTU3RhdGljRnVuY3Rp
b24qIExheW91dFRlc3RDb250cm9sbGVyOjoKICAgICAgICAgeyAiZWxlbWVudERvZXNBdXRvQ29t
cGxldGVGb3JFbGVtZW50V2l0aElkIiwgZWxlbWVudERvZXNBdXRvQ29tcGxldGVGb3JFbGVtZW50
V2l0aElkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZW5jb2RlSG9zdE5hbWUiLCBlbmNv
ZGVIb3N0TmFtZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImV2YWx1YXRlSW5XZWJJbnNw
ZWN0b3IiLCBldmFsdWF0ZUluV2ViSW5zcGVjdG9yQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsIGV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWVDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCIsIGV2YWx1YXRlU2NyaXB0SW5J
c29sYXRlZFdvcmxkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZXhlY0NvbW1hbmQiLCBl
eGVjQ29tbWFuZENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImZpbmRTdHJpbmciLCBmaW5k
U3RyaW5nQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAkocmV2aXNpb24gMTEzODg1KQorKysgVG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDYgKzMx
MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsb3NlV2ViSW5zcGVjdG9yKCk7CiAgICAgdm9pZCBl
dmFsdWF0ZUluV2ViSW5zcGVjdG9yKGxvbmcgY2FsbElkLCBKU1N0cmluZ1JlZiBzY3JpcHQpOwog
ICAgIHZvaWQgZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQodW5zaWduZWQgd29ybGRJRCwg
SlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3JpcHQpOworICAgIHZvaWQg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSh1bnNpZ25lZCB3b3Js
ZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlwdCk7CiAgICAg
dm9pZCBhbGxvd1JvdW5kaW5nSGFja3MoKTsKIAogICAgIGJvb2wgc2hvdWxkU3RheU9uUGFnZUFm
dGVySGFuZGxpbmdCZWZvcmVVbmxvYWQoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZFN0YXlPblBh
Z2VBZnRlckhhbmRsaW5nQmVmb3JlVW5sb2FkOyB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvYmxhY2tiZXJyeS9MYXlvdXRUZXN0Q29udHJvbGxl
ckJsYWNrQmVycnkuY3BwCShyZXZpc2lvbiAxMTM4ODUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJl
ZS9ibGFja2JlcnJ5L0xheW91dFRlc3RDb250cm9sbGVyQmxhY2tCZXJyeS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwMiw2ICs1MDIsMTQgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZh
bHVhdGVJbldlYgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUodW5z
aWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmluZ1JlZiBzY3Jp
cHQpCit7CisgICAgVU5VU0VEX1BBUkFNKHdvcmxkSUQpOworICAgIFVOVVNFRF9QQVJBTShnbG9i
YWxPYmplY3QpOworICAgIFVOVVNFRF9QQVJBTShzY3JpcHQpOworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29s
YXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNT
dHJpbmdSZWYgc2NyaXB0KQogewogICAgIFVOVVNFRF9QQVJBTSh3b3JsZElEKTsKSW5kZXg6IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDExMzg4NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDYgKzEy
OCw3IEBAIExheW91dFRlc3RDb250cm9sbGVyOjpMYXlvdXRUZXN0Q29udHJvbGwKICAgICBiaW5k
TWV0aG9kKCJlbmFibGVBdXRvUmVzaXplTW9kZSIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZW5h
YmxlQXV0b1Jlc2l6ZU1vZGUpOwogICAgIGJpbmRNZXRob2QoImV2YWx1YXRlSW5XZWJJbnNwZWN0
b3IiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5XZWJJbnNwZWN0b3IpOwogICAg
IGJpbmRNZXRob2QoImV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkIiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCk7CisgICAgYmluZE1ldGhv
ZCgiZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSIsICZMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZSk7CiAgICAgYmluZE1ldGhvZCgic2V0SXNvbGF0ZWRXb3JsZFNlY3VyaXR5T3JpZ2luIiwgJkxh
eW91dFRlc3RDb250cm9sbGVyOjpzZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW4pOwogICAg
IGJpbmRNZXRob2QoImV4ZWNDb21tYW5kIiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpleGVjQ29t
bWFuZCk7CiAgICAgYmluZE1ldGhvZCgiZm9yY2VSZWRTZWxlY3Rpb25Db2xvcnMiLCAmTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmZvcmNlUmVkU2VsZWN0aW9uQ29sb3JzKTsKQEAgLTEzMzIsNiArMTMz
MywzNiBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRYU1NBdWRpdG9yCiAgICAgcmVz
dWx0LT5zZXROdWxsKCk7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIENwcFZhcmlhbnQqIHJlc3VsdCkKK3sKKyAgICB2ODo6SGFuZGxlU2NvcGUg
c2NvcGU7CisgICAgV2ViVmVjdG9yPHY4OjpMb2NhbDx2ODo6VmFsdWU+ID4gdmFsdWVzOworICAg
IGlmIChhcmd1bWVudHMuc2l6ZSgpID49IDIgJiYgYXJndW1lbnRzWzBdLmlzTnVtYmVyKCkgJiYg
YXJndW1lbnRzWzFdLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgV2ViU2NyaXB0U291cmNlIHNvdXJj
ZShjcHBWYXJpYW50VG9XZWJTdHJpbmcoYXJndW1lbnRzWzFdKSk7CisgICAgICAgIC8vIFRoaXMg
cmVsaWVzIG9uIHRoZSBpZnJhbWUgZm9jdXNpbmcgaXRzZWxmIHdoZW4gaXQgbG9hZHMuIFRoaXMg
aXMgYSBiaXQKKyAgICAgICAgLy8gc2tldGNoeSwgYnV0IGl0IHNlZW1zIHRvIGJlIHdoYXQgb3Ro
ZXIgdGVzdHMgZG8uCisgICAgICAgIG1fc2hlbGwtPndlYlZpZXcoKS0+Zm9jdXNlZEZyYW1lKCkt
PmV4ZWN1dGVTY3JpcHRJbklzb2xhdGVkV29ybGQoYXJndW1lbnRzWzBdLnRvSW50MzIoKSwgJnNv
dXJjZSwgMSwgMSwgJnZhbHVlcyk7CisgICAgfQorICAgIHJlc3VsdC0+c2V0TnVsbCgpOworICAg
IC8vIFNpbmNlIG9ubHkgb25lIHNjcmlwdCB3YXMgYWRkZWQsIG9ubHkgb25lIHJlc3VsdCBpcyBl
eHBlY3RlZAorICAgIGlmICh2YWx1ZXMuc2l6ZSgpID09IDEgJiYgIXZhbHVlc1swXS5Jc0VtcHR5
KCkpIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gc2NyaXB0VmFsdWUgPSB2YWx1ZXNb
MF07CisgICAgICAgIC8vIEZJWE1FOiBUaGVyZSBhcmUgbWFueSBtb3JlIHR5cGVzIHRoYXQgY2Fu
IGJlIGhhbmRsZWQuCisgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+SXNTdHJpbmcoKSkgeworICAg
ICAgICAgICAgdjg6OlN0cmluZzo6QXNjaWlWYWx1ZSBhc2NpaVY4KHNjcmlwdFZhbHVlKTsKKyAg
ICAgICAgICAgIHJlc3VsdC0+c2V0KHN0ZDo6c3RyaW5nKCphc2NpaVY4KSk7CisgICAgICAgIH0g
ZWxzZSBpZiAoc2NyaXB0VmFsdWUtPklzQm9vbGVhbigpKQorICAgICAgICAgICAgcmVzdWx0LT5z
ZXQoc2NyaXB0VmFsdWUtPlRvQm9vbGVhbigpLT5WYWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAo
c2NyaXB0VmFsdWUtPklzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChzY3JpcHRWYWx1ZS0+
SXNJbnQzMigpKQorICAgICAgICAgICAgICAgIHJlc3VsdC0+c2V0KHNjcmlwdFZhbHVlLT5Ub0lu
dDMyKCktPlZhbHVlKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJlc3Vs
dC0+c2V0KHNjcmlwdFZhbHVlLT5Ub051bWJlcigpLT5WYWx1ZSgpKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzY3JpcHRWYWx1ZS0+SXNOdWxsKCkpCisgICAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVs
bCgpOworICAgIH0KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3Jp
cHRJbklzb2xhdGVkV29ybGQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIENwcFZh
cmlhbnQqIHJlc3VsdCkKIHsKICAgICBpZiAoYXJndW1lbnRzLnNpemUoKSA+PSAyICYmIGFyZ3Vt
ZW50c1swXS5pc051bWJlcigpICYmIGFyZ3VtZW50c1sxXS5pc1N0cmluZygpKSB7CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmgJKHJldmlzaW9uIDExMzg4NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L0xheW91dFRlc3RDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4OSw2ICsyODksNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRBbGxvd0ZpbGVBY2Nlc3NGcm9tRmlsZVVSTHMoY29uc3Qg
Q3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZvaWQgc2V0QWxsb3dSdW5uaW5n
T2ZJbnNlY3VyZUNvbnRlbnQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwog
CisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIGV2YWx1YXRlU2Ny
aXB0SW5Jc29sYXRlZFdvcmxkKGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsK
ICAgICB2b2lkIHNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbihjb25zdCBDcHBBcmd1bWVu
dExpc3QmLCBDcHBWYXJpYW50Kik7CiAKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2VmbC9M
YXlvdXRUZXN0Q29udHJvbGxlckVmbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRl
clRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAkocmV2aXNpb24gMTEzODg1KQor
KysgVG9vbHMvRHVtcFJlbmRlclRyZWUvZWZsL0xheW91dFRlc3RDb250cm9sbGVyRWZsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjg1LDYgKzY4NSwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpldmFsdWF0ZUluV2ViCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5W
YWx1ZSh1bnNpZ25lZCwgSlNPYmplY3RSZWYsIEpTU3RyaW5nUmVmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0
SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVkLCBKU09iamVjdFJlZiwgSlNTdHJpbmdSZWYpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkocmV2aXNpb24gMTEzODg1KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTE2LDYgKzkxNiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVy
OjpldmFsdWF0ZUluV2ViCiAgICAgZ19mcmVlKHNjcmlwdFN0cmluZyk7CiB9CiAKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmlu
Z1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlw
dCkKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCShyZXZpc2lv
biAxMTM4ODUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xs
ZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIsMTEgQEAgdW5zaWduZWQgd29y
bGRJREZvcldvcmxkKFdlYlNjcmlwdFdvcmxkCiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJu
VmFsdWUodW5zaWduZWQgd29ybGRJRCwgSlNPYmplY3RSZWYgZ2xvYmFsT2JqZWN0LCBKU1N0cmlu
Z1JlZiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQorCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZCh1bnNp
Z25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVmIHNjcmlw
dCkKIHsKICAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHNjcmlwdENGKEFkb3B0Q0YsIEpTU3Ry
aW5nQ29weUNGU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQsIHNjcmlwdCkpOwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHAJ
KHJldmlzaW9uIDExMzg4NSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RD
b250cm9sbGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MTAsNiArOTEwLDExIEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXJ0U3BlZWNoSW4KICAgICAvLyBTZWUgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM5NDg1LgogfQogCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVl
KGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpCit7CisgICAgLy8gRklYTUU6IElt
cGxlbWVudC4KK30KKwogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJ
bklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcmIHNjcmlwdCkKIHsKICAg
ICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRRdDo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQo
bV9kcnQtPndlYlBhZ2UoKS0+bWFpbkZyYW1lKCksIHdvcmxkSUQsIHNjcmlwdCk7CkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5oCShy
ZXZpc2lvbiAxMTM4ODUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29u
dHJvbGxlclF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OCw2ICsyNTgsNyBAQCBwdWJsaWMgc2xv
dHM6CiAKICAgICB2b2lkIHNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBRU3RyaW5nJiBlZGl0aW5n
QmVoYXZpb3IpOwogCisgICAgdm9pZCBldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJl
dHVyblZhbHVlKGludCB3b3JsZElELCBjb25zdCBRU3RyaW5nJiBzY3JpcHQpOwogICAgIHZvaWQg
ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGQoaW50IHdvcmxkSUQsIGNvbnN0IFFTdHJpbmcm
IHNjcmlwdCk7CiAgICAgYm9vbCBpc1BhZ2VCb3hWaXNpYmxlKGludCBwYWdlSW5kZXgpOwogICAg
IFFTdHJpbmcgcGFnZVNpemVBbmRNYXJnaW5zSW5QaXhlbHMoaW50IHBhZ2VJbmRleCwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgbWFyZ2luVG9wLCBpbnQgbWFyZ2luUmlnaHQsIGludCBtYXJn
aW5Cb3R0b20sIGludCBtYXJnaW5MZWZ0KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dp
bi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAkocmV2aXNpb24gMTEzODg1
KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTI4OSw2ICsxMjg5LDExIEBAIHVuc2lnbmVkIHdvcmxkSURG
b3JXb3JsZChJV2ViU2NyaXB0V29ybGQKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6ZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1
ZSh1bnNpZ25lZCB3b3JsZElELCBKU09iamVjdFJlZiBnbG9iYWxPYmplY3QsIEpTU3RyaW5nUmVm
IHNjcmlwdCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CisKIHZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkKHVuc2lnbmVk
IHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQog
ewogICAgIENPTVB0cjxJV2ViRnJhbWVQcml2YXRlPiBmcmFtZVByaXZhdGUoUXVlcnksIGZyYW1l
KTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250
cm9sbGVyV3guY3BwCShyZXZpc2lvbiAxMTM4ODUpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS93
eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU2LDYgKzQ1
NiwxMSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpyZW1vdmVBbGxWaXNpCiAgICAgLy8g
RklYTUU6IEltcGxlbWVudCB0aGlzLgogfQogCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpl
dmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKHVuc2lnbmVkIHdvcmxk
SUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdSZWYgc2NyaXB0KQoreworCit9
CisKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdv
cmxkKHVuc2lnbmVkIHdvcmxkSUQsIEpTT2JqZWN0UmVmIGdsb2JhbE9iamVjdCwgSlNTdHJpbmdS
ZWYgc2NyaXB0KQogewogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTM4ODUpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMi0wMy0wMiAg
RXJpcSBBdWd1c3RpbmUgIDxlYXVndXN0aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV0dXJu
IHZhbHVlIGZyb20gZXhlY3V0ZWQgc2NyaXB0IGluIENocm9taXVtLgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzk4NTEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0aW5nIGV4ZWN1dGluZyBhIHNjcmlw
dCBhbmQgZ2V0dGluZyB0aGUgcmVzdWx0IG9mIHRoYXQgc2NyaXB0LgorCisgICAgICAgICogcGxh
dGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVz
dHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbDogQWRkZWQuCisKIDIwMTItMDQt
MTEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MzYxNApJbmRleDogTGF5b3V0VGVzdHMvcGxh
dGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
aHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12YWx1ZS1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS9odHRwL3Rlc3RzL21p
c2MvZXhlY3V0ZS1hbmQtcmV0dXJuLXZhbHVlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2IEBACitFeHBlY3RpbmcgNTogNQorRXhwZWN0aW5nIDMuMTQ6IDMuMTQKK0V4cGVj
dGluZyAiVGhlIHF1aWNrIGJyb3duIGRvZy4iOiBUaGUgcXVpY2sgYnJvd24gZG9nLgorRXhwZWN0
aW5nIGZhbHNlOiBmYWxzZQorRXhwZWN0aW5nIG51bGw6IG51bGwKKwpJbmRleDogTGF5b3V0VGVz
dHMvcGxhdGZvcm0vY2hyb21pdW0vaHR0cC90ZXN0cy9taXNjL2V4ZWN1dGUtYW5kLXJldHVybi12
YWx1ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0
dHAvdGVzdHMvbWlzYy9leGVjdXRlLWFuZC1yZXR1cm4tdmFsdWUuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL2h0dHAvdGVzdHMvbWlzYy9leGVjdXRl
LWFuZC1yZXR1cm4tdmFsdWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPCFE
T0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxib2R5PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
CisgIHZhciBpbnRUZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklz
b2xhdGVkV29ybGRBbmRSZXR1cm5WYWx1ZSgwLCAiNSIpOworICBkb2N1bWVudC5ib2R5LmFwcGVu
ZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgNTogJyArIGludFRlc3Qp
KTsKKyAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdi
cicpKTsKKworICB2YXIgZG91YmxlVGVzdCA9IGxheW91dFRlc3RDb250cm9sbGVyLmV2YWx1YXRl
U2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwgIjMuMTQiKTsKKyAgZG9jdW1l
bnQuYm9keS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnRXhwZWN0aW5nIDMu
MTQ6ICcgKyBkb3VibGVUZXN0KSk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIHN0cmluZ1Rlc3QgPSBsYXlvdXRUZXN0
Q29udHJvbGxlci5ldmFsdWF0ZVNjcmlwdEluSXNvbGF0ZWRXb3JsZEFuZFJldHVyblZhbHVlKDAs
ICciVGhlIHF1aWNrIGJyb3duIGRvZy4iJyk7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJ0V4cGVjdGluZyAiVGhlIHF1aWNrIGJyb3duIGRvZy4i
OiAnICsgc3RyaW5nVGVzdCkpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworCisgIHZhciBib29sZWFuVGVzdCA9IGxheW91dFRlc3RD
b250cm9sbGVyLmV2YWx1YXRlU2NyaXB0SW5Jc29sYXRlZFdvcmxkQW5kUmV0dXJuVmFsdWUoMCwg
IiF0cnVlIik7CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoJ0V4cGVjdGluZyBmYWxzZTogJyArIGJvb2xlYW5UZXN0KSk7CisgIGRvY3VtZW50LmJv
ZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgdmFyIG51
bGxUZXN0ID0gbGF5b3V0VGVzdENvbnRyb2xsZXIuZXZhbHVhdGVTY3JpcHRJbklzb2xhdGVkV29y
bGRBbmRSZXR1cm5WYWx1ZSgwLCAibnVsbCIpOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdFeHBlY3RpbmcgbnVsbDogJyArIG51bGxUZXN0KSk7
CisgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnIn
KSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>