<?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>55859</bug_id>
          
          <creation_ts>2011-03-06 23:46:15 -0800</creation_ts>
          <short_desc>[Chromium] The method that retrieves all resources from a page should be moved from Chromium to WebKit</short_desc>
          <delta_ts>2011-03-23 19:44:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>56765</dependson>
    
    <dependson>56914</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>simonjam</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>363241</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-06 23:46:15 -0800</bug_when>
    <thetext>In the Chromium WebKit glue code, dom_operations.[h, cc], a method called GetAllSavableResourceLinksForCurrentPage is used to retrieve all the resources from a page.
It should be moved to WebKit.
One of the key reasons is that we want that method to also report CSS resources, and keeping it in Chromium would required to expose unnecessarily the CSS info through the Chromium WebKit API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363244</commentid>
    <comment_count>1</comment_count>
      <attachid>84924</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-06 23:59:40 -0800</bug_when>
    <thetext>Created attachment 84924
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363245</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 00:04:41 -0800</bug_when>
    <thetext>Attachment 84924 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Last 3072 characters of output:
izerTest.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:36:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:62:  Should only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebKit/chromium/tests/data/pageserialization/simple_iframe.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebKit/chromium/public/WebPageSerializer.h:77:  The parameter name &quot;view&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit/chromium/src/WebPageSerializer.cpp:62:  Use 0 instead of NULL.  [readability/null] [5]
Source/WebKit/chromium/src/WebPageSerializer.cpp:69:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:70:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:71:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:74:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:75:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:76:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:106:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebKit/chromium/src/WebPageSerializer.cpp:224:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit/chromium/tests/data/pageserialization/simple_page.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebKit/chromium/tests/data/pageserialization/top_frame.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 266 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363246</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 00:10:26 -0800</bug_when>
    <thetext>Attachment 84924 did not build on chromium:
Build output: http://queues.webkit.org/results/8102494</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363258</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-07 01:03:00 -0800</bug_when>
    <thetext>Attachment 84924 did not build on chromium:
Build output: http://queues.webkit.org/results/8107263</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363336</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-07 07:08:45 -0800</bug_when>
    <thetext>Build breakage?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363403</commentid>
    <comment_count>6</comment_count>
      <attachid>84924</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-07 10:48:11 -0800</bug_when>
    <thetext>Comment on attachment 84924
Initial patch

r-
I may not be the one to r+ but it seems clear that this currently should get an r- due to lots of style issues and it broke the build (and the copyright years say 2010 instead of 2011).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363848</commentid>
    <comment_count>7</comment_count>
      <attachid>85026</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-07 23:22:28 -0800</bug_when>
    <thetext>Created attachment 85026
Fix build and style issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>367758</commentid>
    <comment_count>8</comment_count>
      <attachid>85026</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-15 10:33:31 -0700</bug_when>
    <thetext>Comment on attachment 85026
Fix build and style issue

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

Just a few things to address and then this should be fine.

&gt; Source/WebKit/chromium/src/WebDataSourceImpl.cpp:38
&gt; +#include &lt;googleurl/src/gurl.h&gt;

Why do you need to include this?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:34
&gt; +#include &quot;DocumentLoader.h&quot;

Where is the document loaded used in here?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:63
&gt; +    if (element.hasTagName(HTMLNames::imgTag) || element.hasTagName(HTMLNames::scriptTag)) {

Single line clause shouldn&apos;t have surrounding {}

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:82
&gt; +            // TODO(jnd): Add support for extracting links of sub-resources which

s/TODO({^)]*)/FIXME/

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:84
&gt; +            // See bug: http://b/issue?id=1111667.

Internal bug reference doesn&apos;t seem appropriate.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:109
&gt; +        if (visitedFrames-&gt;find(frame) == notFound)

While find is more flexible, I wonder if there should be a contains method as well which just does this but would be more readable in these pretty common cases.


Reading more of this code, I like this idea more and more.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:120
&gt; +    if (!url.protocolIs(&quot;http&quot;) &amp;&amp; !url.protocolIs(&quot;https&quot;) &amp;&amp; !url.protocolIs(&quot;file&quot;))

url.protocolInHTTPFamily
url.protocolIsLocalFile

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:163
&gt; +        if (node-&gt;isElementNode()) {

if (!node-&gt;isElementNode())
    continue;

(Less indenting and &quot;fail fast&quot; approach.)

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:55
&gt; +    WebPageSerializerTest() : m_webView(0), m_supportedSchemes(3U)

3U? Do we need the U?

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:59
&gt; +        m_supportedSchemes[1] = &quot;file&quot;;

Should this be [2] ?

This seems to indicate a hole in the test coverage.  Should it have https resources in it? What about file resources? What about unsupported schemes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368052</commentid>
    <comment_count>9</comment_count>
      <attachid>85879</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-15 17:02:57 -0700</bug_when>
    <thetext>Created attachment 85879
Addressing David&apos;s remarks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368054</commentid>
    <comment_count>10</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-15 17:07:33 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 85026 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85026&amp;action=review
&gt; 
&gt; Just a few things to address and then this should be fine.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebDataSourceImpl.cpp:38
&gt; &gt; +#include &lt;googleurl/src/gurl.h&gt;
&gt; 
&gt; Why do you need to include this?
Removed.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:34
&gt; &gt; +#include &quot;DocumentLoader.h&quot;
&gt; 
&gt; Where is the document loaded used in here?
At line 134:
KURL frameURL = frame-&gt;loader()-&gt;documentLoader()-&gt;request().url();


&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:63
&gt; &gt; +    if (element.hasTagName(HTMLNames::imgTag) || element.hasTagName(HTMLNames::scriptTag)) {
&gt; 
&gt; Single line clause shouldn&apos;t have surrounding {}
I thought when following else statement had {} then we should use them on the &quot;then&quot; clause as well?

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:82
&gt; &gt; +            // TODO(jnd): Add support for extracting links of sub-resources which
&gt; 
&gt; s/TODO({^)]*)/FIXME/
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:84
&gt; &gt; +            // See bug: http://b/issue?id=1111667.
&gt; 
&gt; Internal bug reference doesn&apos;t seem appropriate.
Removed.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:109
&gt; &gt; +        if (visitedFrames-&gt;find(frame) == notFound)
&gt; 
&gt; While find is more flexible, I wonder if there should be a contains method as well which just does this but would be more readable in these pretty common cases.
Here I am using a Vector, not a WebVector, and it does not have a contain.
Actually I now realize I am using the WebVector::find() in the test only, and I would probably only need a contains method.  So I replaced find() with contains().

&gt; Reading more of this code, I like this idea more and more.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:120
&gt; &gt; +    if (!url.protocolIs(&quot;http&quot;) &amp;&amp; !url.protocolIs(&quot;https&quot;) &amp;&amp; !url.protocolIs(&quot;file&quot;))
&gt; 
&gt; url.protocolInHTTPFamily
&gt; url.protocolIsLocalFile
Done

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:163
&gt; &gt; +        if (node-&gt;isElementNode()) {
&gt; 
&gt; if (!node-&gt;isElementNode())
&gt;     continue;
&gt; 
&gt; (Less indenting and &quot;fail fast&quot; approach.)
OK.

&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:55
&gt; &gt; +    WebPageSerializerTest() : m_webView(0), m_supportedSchemes(3U)
&gt; 
&gt; 3U? Do we need the U?
Yes, the fails to compile otherwise. (it&apos;s using the wrong constructor in that case).

&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:59
&gt; &gt; +        m_supportedSchemes[1] = &quot;file&quot;;
&gt; 
&gt; Should this be [2] ?
Arg! Yes.

&gt; This seems to indicate a hole in the test coverage.  Should it have https resources in it? What about file resources? What about unsupported schemes?
Good idea, added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368057</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-15 17:10:33 -0700</bug_when>
    <thetext>Attachment 85879 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/public/WebVector.h:129:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 7 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368068</commentid>
    <comment_count>12</comment_count>
      <attachid>85884</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-15 17:20:12 -0700</bug_when>
    <thetext>Created attachment 85884
Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368078</commentid>
    <comment_count>13</comment_count>
      <attachid>85884</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-15 17:33:45 -0700</bug_when>
    <thetext>Comment on attachment 85884
Fixed style.

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

WebPageSerializer.cpp is such great sadness.  I re-wrote the whole thing, but never landed the new version.  :(

Almost every line of code in that file is wrong.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:60
&gt; +KURL getSubResourceURLFromElement(const Element&amp; element)

I usually pass Elements by pointer, not by reference.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:92
&gt; +    if (value.isNull() || value.isEmpty() || value.startsWith(&quot;javascript:&quot;, false))

value.startsWith(&quot;javascript:&quot;, false) is wrong.  It could start with &quot;   javascript:&quot; also, for example.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:106
&gt; +    if ((element.hasTagName(HTMLNames::iframeTag) || element.hasTagName(HTMLNames::frameTag))
&gt; +            &amp;&amp; element.isFrameOwnerElement()) {

What if it&apos;s an object or an embed element that has a frame?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:114
&gt; +    if (url.isEmpty() || url.isNull() || !url.isValid())

isEmpty includes isNull, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368513</commentid>
    <comment_count>14</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-16 13:53:34 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 85884 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85884&amp;action=review
&gt; 
&gt; WebPageSerializer.cpp is such great sadness.  I re-wrote the whole thing, but never landed the new version.  :(
&gt; 
&gt; Almost every line of code in that file is wrong.
And it&apos;s only going to get worse, as I am planning to add some more code in that file :-)
I looked at the other file briefly (WebPageSerializerImpl.cpp) and was also concerned. Any reason why you did not land your new version? Anything I can do to help?

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:60
&gt; &gt; +KURL getSubResourceURLFromElement(const Element&amp; element)
&gt; 
&gt; I usually pass Elements by pointer, not by reference.
OK

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:92
&gt; &gt; +    if (value.isNull() || value.isEmpty() || value.startsWith(&quot;javascript:&quot;, false))
&gt; 
&gt; value.startsWith(&quot;javascript:&quot;, false) is wrong.  It could start with &quot;   javascript:&quot; also, for example.
OK, now stripping white-space.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:106
&gt; &gt; +    if ((element.hasTagName(HTMLNames::iframeTag) || element.hasTagName(HTMLNames::frameTag))
&gt; &gt; +            &amp;&amp; element.isFrameOwnerElement()) {
&gt; 
&gt; What if it&apos;s an object or an embed element that has a frame?
Now supported.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:114
&gt; &gt; +    if (url.isEmpty() || url.isNull() || !url.isValid())
&gt; 
&gt; isEmpty includes isNull, right?
Oh, yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368514</commentid>
    <comment_count>15</comment_count>
      <attachid>85968</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-16 13:54:21 -0700</bug_when>
    <thetext>Created attachment 85968
Addressed Adam&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368517</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 13:56:11 -0700</bug_when>
    <thetext>Attachment 85968 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/tests/data/pageserialization/object_iframe.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebKit/chromium/src/WebPageSerializer.cpp:90:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebKit/chromium/tests/data/pageserialization/embed_iframe.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 11 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368519</commentid>
    <comment_count>17</comment_count>
      <attachid>85970</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-16 13:59:00 -0700</bug_when>
    <thetext>Created attachment 85970
Fixed style...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368522</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-16 14:01:09 -0700</bug_when>
    <thetext>Attachment 85970 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebKit/chromium/ChangeLog&apos;, u&apos;Sourc...&quot; exit_code: 1

Source/WebKit/chromium/src/WebPageSerializer.cpp:90:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 1 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368556</commentid>
    <comment_count>19</comment_count>
      <attachid>85970</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-16 14:44:53 -0700</bug_when>
    <thetext>Comment on attachment 85970
Fixed style...

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

r- because I want Vector::contains :)

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:61
&gt; +{

ASSERT(element);

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:63
&gt; +    if (element-&gt;hasTagName(HTMLNames::imgTag) || element-&gt;hasTagName(HTMLNames::scriptTag)) {

Style bot missed this one but it is still true: &quot;One line control clauses should not use braces.  [whitespace/braces] [4]&quot;

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:65
&gt; +    } else if (element-&gt;hasTagName(HTMLNames::inputTag)) {

Leave the braces for this if.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:72
&gt; +               || element-&gt;hasTagName(HTMLNames::tdTag)) {

Remove them here.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:77
&gt; +               || element-&gt;hasTagName(HTMLNames::insTag)) {

Remove them here.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:79
&gt; +    } else if (element-&gt;hasTagName(HTMLNames::linkTag)) {

Leave the braces for this if.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:86
&gt; +    } else if (element-&gt;hasTagName(HTMLNames::objectTag)) {

Remove them here.

&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:90
&gt;&gt; +    }
&gt; 
&gt; One line control clauses should not use braces.  [whitespace/braces] [4]

What Style bot said.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:115
&gt; +            if (visitedFrames-&gt;find(frame) == notFound)

May I recommend adding contains to Vector (just implement in terms of find)?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:130
&gt; +    if (resourceURLs-&gt;find(url) == notFound)

Use contains.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:159
&gt; +    if (visitedFrames-&gt;find(frame) != notFound)

Use contains.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:162
&gt; +    if (frameURLs-&gt;find(frameURL) == notFound)

Use contains.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368583</commentid>
    <comment_count>20</comment_count>
      <attachid>85987</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-16 15:24:13 -0700</bug_when>
    <thetext>Created attachment 85987
Addressed David&apos;s comments

Addressed all comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368586</commentid>
    <comment_count>21</comment_count>
      <attachid>85987</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-16 15:28:28 -0700</bug_when>
    <thetext>Comment on attachment 85987
Addressed David&apos;s comments

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        (WTF::::contains):

Consider fixing the to be the right function names in the future but ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369221</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-17 12:47:02 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 85987:

http/tests/inspector/network/network-size.html bug 56581 (author: pfeldman@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369223</commentid>
    <comment_count>23</comment_count>
      <attachid>85987</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-17 12:49:43 -0700</bug_when>
    <thetext>Comment on attachment 85987
Addressed David&apos;s comments

Clearing flags on attachment: 85987

Committed r81377: &lt;http://trac.webkit.org/changeset/81377&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369224</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-17 12:49:50 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370866</commentid>
    <comment_count>25</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-03-21 13:28:31 -0700</bug_when>
    <thetext>The new unit test from this patch is failing already. This is being rolled out in bug 56765.

The failure is:

[ RUN      ] WebPageSerializerTest.MultipleFrames
.\tests\WebPageSerializerTest.cpp(182): error: Value of: resources.size()
  Actual: 5
Expected: 6
.\tests\WebPageSerializerTest.cpp(186): error: Value of: webVectorContains(resources, &quot;http://www.test.com/music.mid&quot;)
  Actual: false
Expected: true
[  FAILED  ] WebPageSerializerTest.MultipleFrames (16 ms)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370867</commentid>
    <comment_count>26</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-21 13:31:37 -0700</bug_when>
    <thetext>Reopened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371436</commentid>
    <comment_count>27</comment_count>
      <attachid>86467</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-22 10:04:21 -0700</bug_when>
    <thetext>Created attachment 86467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371440</commentid>
    <comment_count>28</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-22 10:07:36 -0700</bug_when>
    <thetext>Another attempt at landing this patch.
I am not entirely sure while the WebPageSerializerTest.MultipleFrames test failed, as it passes in both debug and release mode on my box.
There was an unbalanced tag for the resource reported as missing:
&lt;embed src=&quot;music.mid&quot;&gt;&lt;/object&gt;
that I fixed, which should hopefully fix the problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371549</commentid>
    <comment_count>29</comment_count>
      <attachid>86467</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-22 12:18:16 -0700</bug_when>
    <thetext>Comment on attachment 86467
Patch

Clearing flags on attachment: 86467

Committed r81686: &lt;http://trac.webkit.org/changeset/81686&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371550</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-22 12:18:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>371924</commentid>
    <comment_count>31</comment_count>
    <who name="James Simonsen">simonjam</who>
    <bug_when>2011-03-22 19:51:45 -0700</bug_when>
    <thetext>This broke the main Chrome Win bot again. I don&apos;t know why it only affects that one. The Win WebKit Canary and Deps bots run it just fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372521</commentid>
    <comment_count>32</comment_count>
      <attachid>86718</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-23 16:21:20 -0700</bug_when>
    <thetext>Created attachment 86718
One more attempt at landing this.

Not sure why the test fails on one of the bot.
One of the embed src is not reported. This could be caused by a plugin.
Disabling that resource in the test and adding a FIXME: for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372530</commentid>
    <comment_count>33</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-23 16:33:56 -0700</bug_when>
    <thetext>Reopening for rerelanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372627</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-23 19:40:36 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 86718:

http/tests/loading/bad-server-subframe.html bug 56985 (author: mjs@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372629</commentid>
    <comment_count>35</comment_count>
      <attachid>86718</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-23 19:44:15 -0700</bug_when>
    <thetext>Comment on attachment 86718
One more attempt at landing this.

Clearing flags on attachment: 86718

Committed r81846: &lt;http://trac.webkit.org/changeset/81846&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372630</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-23 19:44:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84924</attachid>
            <date>2011-03-06 23:59:40 -0800</date>
            <delta_ts>2011-03-07 23:22:28 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>all_resources.patch</filename>
            <type>text/plain</type>
            <size>25322</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNDU0KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxMS0wMy0wNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6Om9wZXJh
dG9yW10pOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmZpbmQpOgorICAgICAgICAqIHNy
Yy9XZWJEYXRhU291cmNlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJ
bXBsOjpXZWJEYXRhU291cmNlSW1wbCk6CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L2F3ZXNvbWUucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL3NpbXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0w
NiAgU3JlZXJhbSBSYW1hY2hhbmRyYW4gIDxzcmVlcmFtQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtODI3LDYgKzgyNyw3IEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJpYWxp
emVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJtYWMiJywg
ewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmgJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEy
IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGll
bnQ7CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7CitjbGFzcyBXZWJWaWV3OwogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAogLy8gR2V0IGh0bWwgZGF0YSBi
eSBzZXJpYWxpemluZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCkBAIC02
OSw2ICs3MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5h
bWUpOwogCisgICAgLy8gUmV0cmlldmUgYWxsIHRoZSByZXNvdXJjZSBmb3IgdGhlIHBhc3NlZCB2
aWV3LCBpbmNsdWRpbmcgdGhlIG1haW4gZnJhbWUKKyAgICAvLyBhbmQgc3ViLWZyYW1lcy4gUmV0
dXJucyB0cnVlIGlmIGFsbCByZXNvdXJjZXMgd2VyZSByZXRyaWV2ZWQKKyAgICAvLyBzdWNjZXNz
ZnVsbHkuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCByZXRyaWV2ZUFsbFJlc291cmNlcyhX
ZWJWaWV3KiB2aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdl
YlVSTD4qIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlZlY3RvcjxXZWJVUkw+KiBmcmFtZXMpOworCiAgICAgLy8gRklYTUU6IFRo
ZSBmb2xsb3dpbmcgYXJlIGhlcmUgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4gQ29uc2lkZXIK
ICAgICAvLyBjaGFuZ2luZyB0aGUgdW5pdCB0ZXN0cyBpbnN0ZWFkLgogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaA0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTC5oCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDMs
NiArMTQzLDE2IEBAIGlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBXZWJVUkwmIGEsIGMKICAg
ICByZXR1cm4gYS5zcGVjKCkgPCBiLnNwZWMoKTsKIH0KIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICByZXR1cm4gIWEuc3Bl
YygpLmNvbXBhcmUoYi5zcGVjKCkpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFdlYlVSTCYgYSwgY29uc3QgV2ViVVJMJiBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDkgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyAgICAgICAuLi4KIC8vICAgfQogLy8K
KworY29uc3Qgc2l6ZV90IG5vdEZvdW5kID0gc3RhdGljX2Nhc3Q8c2l6ZV90PigtMSk7CisKIHRl
bXBsYXRlIDx0eXBlbmFtZSBUPgogY2xhc3MgV2ViVmVjdG9yIHsKIHB1YmxpYzoKQEAgLTEyNiw2
ICsxMjksMTUgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9wdHJbaV07CiAgICAgfQogCisg
ICAgc2l6ZV90IGZpbmQoY29uc3QgVCYgdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBpZiAobV9wdHJb
aV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG5vdEZvdW5kOworICAgIH0KKwogICAgIFQqIGRhdGEoKSB7IHJldHVybiBtX3B0
cjsgfQogICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3B0cjsgfQogCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5j
cHAJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0
YVNvdXJjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVk
ZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMRXJyb3IuaCIKICNpbmNsdWRlICJXZWJWZWN0
b3IuaCIKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKQEAgLTE3NCw3ICsxNzUsNyBAQCBXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0
YVNvdXJjZUltcGwoY29uCiAgICAgICAgIC8vIGZyYW1lLCB3aGljaCByZXN1bHRzIGluIGEgc2Vj
b25kIGRhdGEgc291cmNlIGJlaW5nIGNyZWF0ZWQuICBXZSB3YW50CiAgICAgICAgIC8vIHRvIHdh
aXQgdG8gYXR0YWNoIHRoZSBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIgdG8gdGhhdCBkYXRhIHNvdXJj
ZS4KICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
QVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+dXJsKCkgPT0gcmVxdWVzdC51cmwoKSk7
CisgICAgICAgICAgICBBU1NFUlQobV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyLT51cmwoKSA9PSBX
ZWJVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXIu
c2V0KG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlcik7CiAgICAgICAgICAgICBtX25leHRQbHVnaW5M
b2FkT2JzZXJ2ZXIgPSAwOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDgwMDA1KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSwxOSArMzEsMTQ1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKIAorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisj
aW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEFs
bENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgogCisjaW5jbHVkZSAiV2ViQ1N0cmluZy5o
IgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5j
bHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIKICNpbmNsdWRlICJXZWJQYWdlU2VyaWFs
aXplckltcGwuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJVUkwuaCIK
ICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAorbmFtZXNwYWNlIHsKKworS1VSTCBnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KGNv
bnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmli
dXRlTmFtZSA9IE5VTEw7CisgICAgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6Omlt
Z1RhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkgeworICAg
ICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0cjsKKyAgICB9IGVsc2UgaWYg
KGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBjb25z
dCBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxJbnB1dEVs
ZW1lbnQmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlucHV0LmlzSW1hZ2VCdXR0b24oKSkKKyAg
ICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykgfHwKKyAgICAgICAg
ICAgICAgIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKSB8fAorICAgICAg
ICAgICAgICAgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJUYWcpIHx8CisgICAgICAg
ICAgICAgICBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykpIHsKKyAgICAgICAg
YXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyOworICAgIH0gZWxzZSBp
ZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykgfHwKKyAgICAg
ICAgICAgICAgIGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpIHx8CisgICAgICAg
ICAgICAgICBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpIHx8CisgICAgICAg
ICAgICAgICBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKSB7CisgICAgICAg
IGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7CisgICAgICAgIC8vIElmIHRo
ZSBsaW5rIGVsZW1lbnQgaXMgbm90IGNzcywgaWdub3JlIGl0LgorICAgICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UoZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciksICJ0
ZXh0L2NzcyIpKSB7CisgICAgICAgICAgICAvLyBUT0RPKGpuZCk6IEFkZCBzdXBwb3J0IGZvciBl
eHRyYWN0aW5nIGxpbmtzIG9mIHN1Yi1yZXNvdXJjZXMgd2hpY2gKKyAgICAgICAgICAgIC8vIGFy
ZSBpbnNpZGUgc3R5bGUtc2hlZXQgc3VjaCBhcyBAaW1wb3J0LCB1cmwoKSwgZXRjLgorICAgICAg
ICAgICAgLy8gU2VlIGJ1ZzogaHR0cDovL2IvaXNzdWU/aWQ9MTExMTY2Ny4KKyAgICAgICAgICAg
IGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpocmVmQXR0cjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKKyAgICBT
dHJpbmcgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgqYXR0cmlidXRlTmFtZSk7CisgICAg
Ly8gSWdub3JlIGphdmFzY3JpcHQgY29udGVudC4KKyAgICBpZiAodmFsdWUuaXNOdWxsKCkgfHwg
dmFsdWUuaXNFbXB0eSgpIHx8IHZhbHVlLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6IiwgZmFsc2Up
KQorICAgICAgICByZXR1cm4gS1VSTCgpOworCisgICAgcmV0dXJuIGVsZW1lbnQuZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwodmFsdWUpOworfQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCit7Cisg
ICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBmcmFtZSwgd2UnbGwgcHJvY2VzcyBpdCBsYXRlciBpbiBy
ZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lLgorICAgIGlmICgoZWxlbWVudC5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpmcmFt
ZVRhZykpICYmCisgICAgICAgICAgICBlbGVtZW50LmlzRnJhbWVPd25lckVsZW1lbnQoKSkgewor
ICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVs
ZW1lbnQqPigmZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOworICAgICAgICBpZiAodmlzaXRlZEZy
YW1lcy0+ZmluZChmcmFtZSkgPT0gbm90Rm91bmQpCisgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0
LT5hcHBlbmQoZnJhbWUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgS1VSTCB1cmwg
PSBnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KGVsZW1lbnQpOworICAgIGlmICh1cmwuaXNF
bXB0eSgpIHx8IHVybC5pc051bGwoKSB8fCAhdXJsLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJu
OyAvLyBObyBzdWJyZXNvdXJjZSBmb3IgdGhpcyBub2RlLgorCisgICAgLy8gSWdub3JlIFVSTHMg
dGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29scy4gU2luY2UgdGhlIEZUUCBwcm90b2Nv
bAorICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3
ZWxsLgorICAgIGlmICghdXJsLnByb3RvY29sSXMoImh0dHAiKSAmJiAhdXJsLnByb3RvY29sSXMo
Imh0dHBzIikgJiYgIXVybC5wcm90b2NvbElzKCJmaWxlIikpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmIChyZXNvdXJjZVVSTHMtPmZpbmQodXJsKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVz
b3VyY2VVUkxzLT5hcHBlbmQodXJsKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZy
YW1lKEZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJh
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFt
ZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiog
ZnJhbWVVUkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiog
cmVzb3VyY2VVUkxzKQoreworICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdz
IFVSTCBpcyBpbnZhbGlkLCBpZ25vcmUgaXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBp
ZiAoIWZyYW1lVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3Jl
IGZyYW1lcyBmcm9tIHVuc3VwcG9ydGVkIHNjaGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1l
ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChmcmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0
PENTdHJpbmc+KHN1cHBvcnRlZFNjaGVtZXNbaV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlz
VmFsaWRTY2hlbWUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgaWYgKCFpc1ZhbGlkU2NoZW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3
ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0
ZWRGcmFtZXMtPmZpbmQoZnJhbWUpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAg
dmlzaXRlZEZyYW1lcy0+YXBwZW5kKGZyYW1lKTsKKyAgICBpZiAoZnJhbWVVUkxzLT5maW5kKGZy
YW1lVVJMKSA9PSBub3RGb3VuZCkKKyAgICAgICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwp
OworICAKKyAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2gg
bm9kZSBvZiB0aGUgZG9jdW1lbnQuCisgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGxO
b2RlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFs
bE5vZGVzLT5pdGVtKGkpOworICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIEhU
TUwgcmVzb3VyY2VzLgorICAgICAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpKSB7CisgICAg
ICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoKnN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVk
RnJhbWVzLCBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIGJvb2wgV2ViUGFnZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCkBAIC01OCw2ICsxODQsNDkgQEAgYm9v
bCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYQogICAgIHJldHVybiBzZXJpYWxp
emVySW1wbC5zZXJpYWxpemUoKTsKIH0KIAorYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVBbGxSZXNvdXJjZXMoV2ViVmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDU3RyaW5nPiYgc3VwcG9ydGVk
U2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlZlY3RvcjxXZWJVUkw+KiByZXNvdXJjZVVSTHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogZnJhbWVVUkxzKSB7CisgICAg
V2ViRnJhbWVJbXBsKiBtYWluRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwqPih2aWV3
LT5tYWluRnJhbWUoKSk7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFZlY3RvcjxGcmFtZSo+IGZyYW1lc1RvVmlzaXQ7CisgICAgVmVjdG9yPEZyYW1l
Kj4gdmlzaXRlZEZyYW1lczsKKyAgICBWZWN0b3I8S1VSTD4gZnJhbWVLVVJMczsKKyAgICBWZWN0
b3I8S1VSTD4gcmVzb3VyY2VLVVJMczsKKyAgICAKKyAgICAvLyBMZXQncyByZXRyaWV2ZSB0aGUg
cmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBwYWdlLgorICAgIGZyYW1lc1RvVmlz
aXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CisgICAgd2hpbGUgKCFmcmFtZXNUb1Zpc2l0
LmlzRW1wdHkoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZXNUb1Zpc2l0WzBdOwor
ICAgICAgICBmcmFtZXNUb1Zpc2l0LnJlbW92ZSgwKTsKKyAgICAgICAgcmV0cmlldmVSZXNvdXJj
ZXNGb3JGcmFtZShmcmFtZSwgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1lc1RvVmlzaXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lS1VSTHMsICZyZXNvdXJjZUtVUkxzKTsKKyAg
ICB9CisKKyAgICAvLyBDb252ZXJ0cyB0aGUgcmVzdWx0cyB0byBXZWJVUkxzLgorICAgIFdlYlZl
Y3RvcjxXZWJVUkw+IHJlc3VsdFJlc291cmNlVVJMcyhyZXNvdXJjZUtVUkxzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZUtVUkxzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tpXSA9IHJlc291cmNlS1VSTHNbaV07CisgICAgICAg
IC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBhcyBhbm90aGVyIHJl
c291cmNlLCBrZWVwIHRoZQorICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25seSBpbiBzdWNoIGNh
c2VzLgorICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3VyY2VLVVJM
c1tpXSk7CisgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAgIGZyYW1l
S1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICB9CisgICAgKnJlc291cmNlVVJMcyA9IHJlc3VsdFJl
c291cmNlVVJMczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoZnJhbWVL
VVJMcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVLVVJMcy5zaXpl
KCk7ICsraSkgeworICAgICAgICByZXN1bHRGcmFtZVVSTHNbaV0gPSBmcmFtZUtVUkxzW2ldOwor
ICAgIH0KKyAgICAqZnJhbWVVUkxzID0gcmVzdWx0RnJhbWVVUkxzOworICAgIAorICAgIHJldHVy
biB0cnVlOworfQorCiBXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNo
YXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCiB7CiAgICAgcmV0dXJu
IG1ha2VTdHJpbmcoIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwi
dGV4dC9odG1sOyBjaGFyc2V0PSIsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGNoYXJzZXQp
LCAiXCI+Iik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJp
YWxpemVyVGVzdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTc2IEBACisvKg0KKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQ0KKyAqIG1ldDoNCisgKg0KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUN
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyDQorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQ0KKyAqIGRpc3RyaWJ1dGlvbi4NCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzDQor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20NCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLg0KKyAqDQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUw0KKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UDQor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SDQorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQNCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwNCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UDQorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsDQorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZDQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VA0KKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQ0KKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuDQorICovDQorDQorI2luY2x1ZGUg
PGdvb2dsZXVybC9zcmMvZ3VybC5oPg0KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPg0KKyNpbmNs
dWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPg0KKyNpbmNsdWRlICJXZWJGcmFt
ZS5oIg0KKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIg0KKyNpbmNsdWRlICJXZWJQYWdlU2Vy
aWFsaXplci5oIg0KKyNpbmNsdWRlICJXZWJTdHJpbmcuaCINCisjaW5jbHVkZSAiV2ViVVJMLmgi
DQorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCINCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2Uu
aCINCisjaW5jbHVkZSAiV2ViVmlldy5oIg0KKw0KK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7DQor
DQorbmFtZXNwYWNlIHsNCisNCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2Vi
RnJhbWVDbGllbnQgew0KK307DQorDQorY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0IDogcHVi
bGljIHRlc3Rpbmc6OlRlc3Qgew0KK3B1YmxpYzoNCisgICAgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0
KCkgOiBtX3dlYlZpZXcoMCksIG1fc3VwcG9ydGVkU2NoZW1lcygzVSkNCisgICAgew0KKyAgICAg
ICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzBdID0gImh0dHAiOw0KKyAgICAgICAgbV9zdXBwb3J0ZWRT
Y2hlbWVzWzFdID0gImh0dHBzIjsNCisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1sxXSA9ICJm
aWxlIjsNCisgICAgfQ0KKw0KK3Byb3RlY3RlZDoNCisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkN
CisgICAgew0KKyAgICAgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LiAg
ICANCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwLCAwLCAwKTsNCisgICAg
ICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVudCk7DQor
ICAgIH0NCisNCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkNCisgICAgew0KKyAgICAgICAg
d2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7DQorICAgICAgICBtX3dl
YlZpZXctPmNsb3NlKCk7DQorICAgIH0NCisNCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExv
YWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUpDQorICAgIHsN
CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOw0KKyAgICAgICAgcmVzcG9uc2UuaW5p
dGlhbGl6ZSgpOw0KKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOw0K
KyAgICAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0
Um9vdERpcigpLnV0ZjgoKTsNCisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi8iKTsNCisgICAgICAgIGZp
bGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkpOw0KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlJlZ2lzdGVyTW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmls
ZVBhdGgpKTsNCisgICAgfQ0KKw0KKyAgICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdV
UkwmIHVybCkNCisgICAgew0KKyAgICAgICAgV2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0Ow0KKyAg
ICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7DQorICAgICAgICB1cmxSZXF1ZXN0LnNldFVS
TChXZWJVUkwodXJsKSk7DQorICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVx
dWVzdCh1cmxSZXF1ZXN0KTsNCisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1
ZXN0IGdldCBzZXJ2ZWQuDQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25v
dXNNb2NrZWRSZXF1ZXN0cygpOw0KKyAgICB9DQorDQorICAgIHN0YXRpYyBib29sIHdlYlZlY3Rv
ckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVybCkNCisg
ICAgew0KKyAgICAgICAgcmV0dXJuIHZlY3Rvci5maW5kKFdlYlVSTChHVVJMKHVybCkpKSAhPSBX
ZWJLaXQ6Om5vdEZvdW5kOw0KKyAgICB9DQorDQorICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5n
Lg0KKyAgICBzdGF0aWMgdm9pZCBwcmludFdlYlVSTHMoY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4m
IHVybHMpDQorICAgIHsNCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJscy5zaXpl
KCk7IGkrKykNCisgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB1cmxzW2ldLnNwZWMoKS5kYXRh
KCkpOw0KKyAgICB9DQorDQorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsNCisgICAgV2ViVmVjdG9y
PFdlYkNTdHJpbmc+IG1fc3VwcG9ydGVkU2NoZW1lczsNCisNCitwcml2YXRlOg0KKyAgICBUZXN0
V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsNCit9Ow0KKw0KK1RFU1RfRihXZWJQYWdl
U2VyaWFsaXplclRlc3QsIEhUTUxOb2RlcykNCit7DQorICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2Nr
ZWQgZnJhbWUgYW5kIGxvYWQgaXQuDQorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20iKTsNCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1l
VVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfcGFnZS5odG1sIikpOw0KKyAgICBsb2Fk
VVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7DQorDQorICAgIC8vIFJldHJpZXZlIGFsbCByZXNv
dXJjZXMuDQorICAgIFdlYlZlY3RvcjxXZWJVUkw+IGZyYW1lczsNCisgICAgV2ViVmVjdG9yPFdl
YlVSTD4gcmVzb3VyY2VzOw0KKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0
cmlldmVBbGxSZXNvdXJjZXMoDQorICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1l
cywgJnJlc291cmNlcywgJmZyYW1lcykpOyAgICANCisNCisgICAgLy8gVGVzdHMgdGhhdCBhbGwg
cmVzb3VyY2VzIGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuDQorICAgIEVYUEVD
VF9FUSgxLCBmcmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMu
DQorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cu
dGVzdC5jb20iKSk7DQorDQorICAgIEVYUEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8v
IFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLg0KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0aWZ1bGwu
Y3NzIikpOw0KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUuanMiKSk7DQorICAgIEVYUEVDVF9UUlVFKHdlYlZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYm9keUJhY2tncm91
bmQuanBnIikpOw0KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUucG5nIikpOw0KKyAgICBFWFBFQ1RfVFJVRSh3
ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltYWdlQnV0
dG9uLnBuZyIpKTsNCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS90YWJsZUJhY2tncm91bmQucG5nIikpOw0KKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L3RyQmFja2dyb3VuZC5wbmciKSk7DQorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5z
KHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdGRCYWNrZ3JvdW5kLnBuZyIpKTsNCisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy5l
dmVuZS5mci9jaXRhdGlvbnMvYXV0ZXVyLnBocD9pZGE9NDYiKSk7DQorICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29t
L3F1b3Rlcy9hdXRob3JzL2MvY2hhcmxlc19kYXJ3aW4uaHRtbCIpKTsNCisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlf
ZGVsZXRlZC5odG1sIikpOw0KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9pbnNlcnRlZC5odG1sIikpOw0KK30NCisN
CitURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBNdWx0aXBsZUZyYW1lcykNCit7DQorICAg
IC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuDQorICAgIFdlYlVSTCB0
b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsNCisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUu
aHRtbCIpKTsNCisgICAgV2ViVVJMIGlubmVyRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL3NpbXBsZV9pZnJhbWUuaHRtbCIpOw0KKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
aW5uZXJGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlX2lmcmFtZS5odG1sIikp
Ow0KKyAgICAvLyBJZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCByZXNvdXJjZSBmb3IgYXdl
c29tZS5wbmcsIGl0IGNhdXNlcyB0aGUNCisgICAgLy8gZG9jdW1lbnQgbG9hZGVyIG9mIHRoZSBp
ZnJhbWUgdGhhdCBoYXMgaXQgYXMgaXRzIHNyYyB0byBhc3NlcnQgb24gY2xvc2UsDQorICAgIC8v
IG5vdCBzdXJlIHdoeS4NCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vYXdlc29tZS5wbmciKSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlN0cmluZzo6ZnJvbVVURjgoImF3ZXNvbWUucG5nIikpOw0KKw0KKyAgICBsb2FkVVJMSW5Ub3BG
cmFtZSh0b3BGcmFtZVVSTCk7DQorDQorICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuDQor
ICAgIFdlYlZlY3RvcjxXZWJVUkw+IGZyYW1lczsNCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVz
b3VyY2VzOw0KKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxS
ZXNvdXJjZXMoDQorICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291
cmNlcywgJmZyYW1lcykpOyAgICANCisNCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2Vz
IGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuDQorICAgIEVYUEVDVF9FUSgyLCBm
cmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuDQorICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20i
KSk7DQorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93
d3cudGVzdC5jb20vc2ltcGxlX2lmcmFtZS5odG1sIikpOw0KKw0KKyAgICBFWFBFQ1RfRVEoMiwg
cmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLg0KKyAg
ICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL2F3ZXNvbWUucG5nIikpOw0KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lubmVyRnJhbWUucG5nIikpOw0KK30N
CisNCit9DQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0
bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACis8aHRtbD4NCis8IS0tDQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhh
dCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzDQorICAg
IGNvcnJlY3RseSB0aGUgZXhwZWN0ZWQgcmVzb3VyY2VzIHdoZW4gZGVhbGluZyB3aXRoIG11bHRp
cGxlIGZyYW1lcy4gDQorLS0+DQorDQorPGJvZHk+DQorDQorPGltZyBzcmM9ImF3ZXNvbWUucG5n
Ii8+DQorPGltZyBzcmM9ImlubmVyRnJhbWUucG5nIi8+DQorDQorPC9ib2R5Pg0KKw0KKzwvaHRt
bD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vc2ltcGxlX3BhZ2UuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emF0aW9uL3NpbXBsZV9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxo
dG1sPg0KKzwhLS0NCisgICAgVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdlYlBhZ2VT
ZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRyaWV2ZXMNCisgICAgY29ycmVjdGx5
IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgZnJvbSB2YXJpb3VzIEhUTUwgbm9kZXMuDQorLS0+DQor
DQorPGhlYWQ+DQorPCEtLSBTdHlsZSBzaGVldCBsaW5rcyBzaG91bGQgYmUgcmV0cmlldmVkIC0t
Pg0KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly93
d3cuZXhhbXBsZS5jb20vYmVhdXRpZnVsbC5jc3MiLz4NCis8IS0tIE90aGVyIGxpbmsgc2hvdWxk
IE5PVCBiZSByZXRyaWV2ZWQgLS0+DQorPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHR5cGU9InRleHQv
cGxhaW4iIGhyZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vY29weXJpZ2h0Ii8+DQorPCEtLSBT
Y3JpcHRzIHNob3VsZCBiZSByZXRyaWV2ZWQgLS0+DQorPHNjcmlwdCBzcmM9ImF3ZXNvbWUuanMi
Pjwvc2NyaXB0Pg0KKzwvaGVhZD4NCisNCis8IS0tIEltYWdlcyBhcmUgYWx3YXlzIHJldHJpZXZl
ZCAtLT4NCis8Ym9keSBiYWNrZ3JvdW5kPSJib2R5QmFja2dyb3VuZC5qcGciPg0KKw0KKzwhLS0g
VHdpY2UgdG8gbWFrZSBzdXJlIHdlIG9ubHkgcmVwb3J0IGVhY2ggcmVzb3VyY2Ugb25jZSAtLT4N
Cis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4NCis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4NCisN
Cis8Zm9ybT4NCisgIDxpbnB1dCB0eXBlPSJpbWFnZSIgc3JjPSJpbWFnZUJ1dHRvbi5wbmciLz4N
Cis8L2Zvcm0+DQorDQorPHRhYmxlIGJhY2tncm91bmQ9InRhYmxlQmFja2dyb3VuZC5wbmciPg0K
KyAgPHRyIGJhY2tncm91bmQ9InRyQmFja2dyb3VuZC5wbmciPg0KKyAgICA8dGQgYmFja2dyb3Vu
ZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4NCisgIDwvdHI+ICANCisgIDx0ciBiYWNrZ3JvdW5k
PSJ0ckJhY2tncm91bmQucG5nIj4NCisgICAgPHRkIGJhY2tncm91bmQ9InRkQmFja2dyb3VuZC5w
bmciPjwvdGQ+DQorICA8L3RyPg0KKzwvdGFibGU+DQorDQorPCEtLSBTb21lIG1vcmUgb2JzY3Vy
ZSB0YWdzIC0tPg0KKzxibG9ja3F1b3RlIGNpdGU9Imh0dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRp
b25zL2F1dGV1ci5waHA/aWRhPTQ2Ij48L2Jsb2NrcXVvdGU+DQorPHEgQ0lURT0iaHR0cDovL3d3
dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVzX2Rhcndpbi5odG1sIj48
L3E+DQorPHA+TXkgZmF2b3JpdGUgY29sb3IgaXMgPGRlbCBjaXRlPSJ3aHlfZGVsZXRlZC5odG1s
Ij5ibHVlPC9kZWw+IDxpbnM+cmVkPC9pbnM+ITwvcD4NCis8cD5NeSBmYXZvcml0ZSBjb2xvciBp
cyA8ZGVsPmJsdWU8L2RlbD4gPGlucyBjaXRlPSJ3aHlfaW5zZXJ0ZWQuaHRtbCI+cmVkPC9pbnM+
ITwvcD4NCisNCis8L2JvZHk+DQorDQorPC9odG1sPg0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXph
dGlvbi90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOCBAQAorPGh0bWw+DQorPCEtLQ0KKyAgICBUaGlzIHBhZ2UgaXMgdXNl
ZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJl
dHJpZXZlcw0KKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVuIGRlYWxp
bmcgd2l0aCBtdWx0aXBsZSBmcmFtZXMuIA0KKy0tPg0KKw0KKzxib2R5Pg0KKw0KKzwhLS0gUmVz
b3VyY2VzIHVzZWQgYnkgYSBmcmFtZSBhbmQgYSB0YWcgc2hvdWxkIGJlIG9ubHkgcmVwb3J0ZWQg
b25jZSAtLT4NCis8aWZyYW1lIHNyYz0iYXdlc29tZS5wbmciPjwvaWZyYW1lPg0KKzxpbWcgc3Jj
PSJhd2Vzb21lLnBuZyIvPg0KKw0KKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwv
aWZyYW1lPg0KKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZyYW1lPg0KKw0K
KzwvYm9keT4NCisNCis8L2h0bWw+DQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpDYW5ub3Qg
ZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4NCnN2bjptaW1lLXR5cGUgPSBh
cHBsaWNhdGlvbi9vY3RldC1zdHJlYW0NCg0KUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlXFdl
YktpdFxjaHJvbWl1bVx0ZXN0c1xkYXRhXHBhZ2VzZXJpYWxpemF0aW9uXGF3ZXNvbWUucG5nDQpf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fDQpBZGRlZDogc3ZuOm1pbWUtdHlwZQ0KICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0NCg0KaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFVQUFBQUZDQVlBQUFDTmJ5YmxBQUFB
SEVsRVFWUUkxMlA0Ly84L3czOEdJQVhESUJLRQowREh4Z2xqTkJBQU85VFhMMFk0T0h3QUFBQUJK
UlU1RXJrSmdnZz09Cgo=
</data>
<flag name="review"
          id="76975"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85026</attachid>
            <date>2011-03-07 23:22:28 -0800</date>
            <delta_ts>2011-03-15 17:02:57 -0700</delta_ts>
            <desc>Fix build and style issue</desc>
            <filename>all_resources.patch</filename>
            <type>text/plain</type>
            <size>25863</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNDU0KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxMS0wMy0wNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6Om9wZXJh
dG9yW10pOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmZpbmQpOgorICAgICAgICAqIHNy
Yy9XZWJEYXRhU291cmNlSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkRhdGFTb3VyY2VJ
bXBsOjpXZWJEYXRhU291cmNlSW1wbCk6CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L2F3ZXNvbWUucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL3NpbXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0w
NiAgU3JlZXJhbSBSYW1hY2hhbmRyYW4gIDxzcmVlcmFtQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtODI3LDYgKzgyNyw3IEBACiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJpYWxp
emVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAg
ICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9PSJtYWMiJywg
ewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmgJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEy
IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3Mg
V2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGll
bnQ7CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7CitjbGFzcyBXZWJWaWV3OwogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAogLy8gR2V0IGh0bWwgZGF0YSBi
eSBzZXJpYWxpemluZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCkBAIC02
OSw2ICs3MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5h
bWUpOwogCisgICAgLy8gUmV0cmlldmUgYWxsIHRoZSByZXNvdXJjZSBmb3IgdGhlIHBhc3NlZCB2
aWV3LCBpbmNsdWRpbmcgdGhlIG1haW4gZnJhbWUKKyAgICAvLyBhbmQgc3ViLWZyYW1lcy4gUmV0
dXJucyB0cnVlIGlmIGFsbCByZXNvdXJjZXMgd2VyZSByZXRyaWV2ZWQKKyAgICAvLyBzdWNjZXNz
ZnVsbHkuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCByZXRyaWV2ZUFsbFJlc291cmNlcyhX
ZWJWaWV3KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFdlYlZlY3RvcjxXZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxXZWJVUkw+
KiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJWZWN0b3I8V2ViVVJMPiogZnJhbWVzKTsKKwogICAgIC8vIEZJWE1FOiBUaGUgZm9s
bG93aW5nIGFyZSBoZXJlIGZvciB1bml0IHRlc3RpbmcgcHVycG9zZXMuIENvbnNpZGVyCiAgICAg
Ly8gY2hhbmdpbmcgdGhlIHVuaXQgdGVzdHMgaW5zdGVhZC4KIApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNpb24gODAwMDUpCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0
MywxNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0
dXJuIGEuc3BlYygpIDwgYi5zcGVjKCk7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgV2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCit7CisgICAgcmV0dXJuICFhLnNwZWMoKS5j
b21wYXJlKGIuc3BlYygpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJV
UkwmIGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJWZWN0b3IuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lvbiA4MDAwNSkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSAr
NTgsMTQgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAvLyAgICAgICAuLi4KIC8vICAgfQogLy8KKwog
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjbGFzcyBXZWJWZWN0b3IgewogcHVibGljOgogICAgIHR5
cGVkZWYgVCBWYWx1ZVR5cGU7CiAKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG5vdEZvdW5kID0g
c3RhdGljX2Nhc3Q8c2l6ZV90PigtMSk7CisKICAgICB+V2ViVmVjdG9yKCkKICAgICB7CiAgICAg
ICAgIGRlc3Ryb3koKTsKQEAgLTEyNiw2ICsxMjksMTUgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gbV9wdHJbaV07CiAgICAgfQogCisgICAgc2l6ZV90IGZpbmQoY29uc3QgVCYgdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7
CisgICAgICAgICAgICBpZiAobV9wdHJbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5vdEZvdW5kOworICAgIH0KKwogICAg
IFQqIGRhdGEoKSB7IHJldHVybiBtX3B0cjsgfQogICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX3B0cjsgfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJE
YXRhU291cmNlSW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMRXJy
b3IuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1
cmwuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTE3NCw3ICsxNzUsNyBAQCBX
ZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwoY29uCiAgICAgICAgIC8vIGZyYW1l
LCB3aGljaCByZXN1bHRzIGluIGEgc2Vjb25kIGRhdGEgc291cmNlIGJlaW5nIGNyZWF0ZWQuICBX
ZSB3YW50CiAgICAgICAgIC8vIHRvIHdhaXQgdG8gYXR0YWNoIHRoZSBXZWJQbHVnaW5Mb2FkT2Jz
ZXJ2ZXIgdG8gdGhhdCBkYXRhIHNvdXJjZS4KICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+
dXJsKCkgPT0gcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9uZXh0UGx1Z2lu
TG9hZE9ic2VydmVyLT51cmwoKSA9PSBXZWJVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAgICAg
ICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXIuc2V0KG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlcik7CiAg
ICAgICAgICAgICBtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIgPSAwOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOSArMzEsMTQ1IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKIAorI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiSFRNTEFsbENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgog
CisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVk
ZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIHsKKworS1VSTCBnZXRTdWJS
ZXNvdXJjZVVSTEZyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCit7CisgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlTmFtZSA9IDA7CisgICAgaWYgKGVsZW1lbnQuaGFz
VGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6c2NyaXB0VGFnKSkgeworICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3Jj
QXR0cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0
VGFnKSkgeworICAgICAgICBjb25zdCBIVE1MSW5wdXRFbGVtZW50JiBpbnB1dCA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxJbnB1dEVsZW1lbnQmPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlucHV0
LmlzSW1hZ2VCdXR0b24oKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVz
OjpzcmNBdHRyOworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
Ym9keVRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OnRhYmxlVGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6dHJUYWcpCisgICAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojp0ZFRhZykpIHsKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91
bmRBdHRyOworICAgIH0gZWxzZSBpZiAoZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ymxv
Y2txdW90ZVRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnFUYWcpCisgICAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpkZWxUYWcpCisgICAgICAgICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjppbnNUYWcpKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0
cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcp
KSB7CisgICAgICAgIC8vIElmIHRoZSBsaW5rIGVsZW1lbnQgaXMgbm90IGNzcywgaWdub3JlIGl0
LgorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7CisgICAgICAgICAgICAvLyBUT0RPKGpu
ZCk6IEFkZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGxpbmtzIG9mIHN1Yi1yZXNvdXJjZXMgd2hp
Y2gKKyAgICAgICAgICAgIC8vIGFyZSBpbnNpZGUgc3R5bGUtc2hlZXQgc3VjaCBhcyBAaW1wb3J0
LCB1cmwoKSwgZXRjLgorICAgICAgICAgICAgLy8gU2VlIGJ1ZzogaHR0cDovL2IvaXNzdWU/aWQ9
MTExMTY2Ny4KKyAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpocmVmQXR0
cjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCisgICAgICAgIHJl
dHVybiBLVVJMKCk7CisKKyAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgq
YXR0cmlidXRlTmFtZSk7CisgICAgLy8gSWdub3JlIGphdmFzY3JpcHQgY29udGVudC4KKyAgICBp
ZiAodmFsdWUuaXNOdWxsKCkgfHwgdmFsdWUuaXNFbXB0eSgpIHx8IHZhbHVlLnN0YXJ0c1dpdGgo
ImphdmFzY3JpcHQ6IiwgZmFsc2UpKQorICAgICAgICByZXR1cm4gS1VSTCgpOworCisgICAgcmV0
dXJuIGVsZW1lbnQuZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodmFsdWUpOworfQorCit2b2lkIHJl
dHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVz
VG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiog
ZnJhbWVVUkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+
KiByZXNvdXJjZVVSTHMpCit7CisgICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBmcmFtZSwgd2UnbGwg
cHJvY2VzcyBpdCBsYXRlciBpbiByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lLgorICAgIGlmICgo
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSB8fCBlbGVtZW50Lmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpmcmFtZVRhZykpCisgICAgICAgICAgICAmJiBlbGVtZW50LmlzRnJh
bWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxj
b25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqPigmZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOwor
ICAgICAgICBpZiAodmlzaXRlZEZyYW1lcy0+ZmluZChmcmFtZSkgPT0gbm90Rm91bmQpCisgICAg
ICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgS1VSTCB1cmwgPSBnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KGVsZW1l
bnQpOworICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8IHVybC5pc051bGwoKSB8fCAhdXJsLmlzVmFs
aWQoKSkKKyAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJjZSBmb3IgdGhpcyBub2RlLgor
CisgICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29scy4g
U2luY2UgdGhlIEZUUCBwcm90b2NvbAorICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hh
bmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgorICAgIGlmICghdXJsLnByb3RvY29sSXMoImh0dHAi
KSAmJiAhdXJsLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXVybC5wcm90b2NvbElzKCJmaWxlIikp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXNvdXJjZVVSTHMtPmZpbmQodXJsKSA9PSBu
b3RGb3VuZCkKKyAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBlbmQodXJsKTsKK30KKwordm9pZCBy
ZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+
JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIEtVUkwgZnJhbWVVUkwg
PSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKTsKKwor
ICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBpcyBpbnZhbGlkLCBpZ25vcmUgaXQsIGl0IGlzIG5v
dCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZyYW1lVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1lcyBmcm9tIHVuc3VwcG9ydGVkIHNjaGVtZXMuCisg
ICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChmcmFtZVVSTC5w
cm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJpbmc+KHN1cHBvcnRlZFNjaGVtZXNbaV0pLmRhdGEo
KSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRTY2hlbWUgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkU2NoZW1lKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25v
cmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmZpbmQoZnJhbWUpICE9IG5vdEZvdW5kKQor
ICAgICAgICByZXR1cm47CisgICAgdmlzaXRlZEZyYW1lcy0+YXBwZW5kKGZyYW1lKTsKKyAgICBp
ZiAoZnJhbWVVUkxzLT5maW5kKGZyYW1lVVJMKSA9PSBub3RGb3VuZCkKKyAgICAgICAgZnJhbWVV
UkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAKKyAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMg
YXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZSBvZiB0aGUgZG9jdW1lbnQuCisgICAgUmVmUHRyPEhU
TUxBbGxDb2xsZWN0aW9uPiBhbGxOb2RlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgTm9kZSogbm9kZSA9IGFsbE5vZGVzLT5pdGVtKGkpOworICAgICAgICAvLyBXZSBhcmUg
b25seSBpbnRlcmVzdGVkIGluIEhUTUwgcmVzb3VyY2VzLgorICAgICAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQo
KnN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2aXNpdGVkRnJhbWVzLCBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYktpdCB7
CiAKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCkBA
IC01OCw2ICsxODQsNDggQEAgYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZy
YQogICAgIHJldHVybiBzZXJpYWxpemVySW1wbC5zZXJpYWxpemUoKTsKIH0KIAorYm9vbCBXZWJQ
YWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMoV2ViVmlldyogdmlldywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxXZWJVUkw+KiByZXNvdXJjZVVSTHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJM
PiogZnJhbWVVUkxzKSB7CisgICAgV2ViRnJhbWVJbXBsKiBtYWluRnJhbWUgPSBzdGF0aWNfY2Fz
dDxXZWJGcmFtZUltcGwqPih2aWV3LT5tYWluRnJhbWUoKSk7CisgICAgaWYgKCFtYWluRnJhbWUp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxGcmFtZSo+IGZyYW1lc1RvVmlz
aXQ7CisgICAgVmVjdG9yPEZyYW1lKj4gdmlzaXRlZEZyYW1lczsKKyAgICBWZWN0b3I8S1VSTD4g
ZnJhbWVLVVJMczsKKyAgICBWZWN0b3I8S1VSTD4gcmVzb3VyY2VLVVJMczsKKyAgICAKKyAgICAv
LyBMZXQncyByZXRyaWV2ZSB0aGUgcmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBw
YWdlLgorICAgIGZyYW1lc1RvVmlzaXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CisgICAg
d2hpbGUgKCFmcmFtZXNUb1Zpc2l0LmlzRW1wdHkoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUg
PSBmcmFtZXNUb1Zpc2l0WzBdOworICAgICAgICBmcmFtZXNUb1Zpc2l0LnJlbW92ZSgwKTsKKyAg
ICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSwgc3VwcG9ydGVkU2NoZW1lcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1l
c1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lS1VSTHMs
ICZyZXNvdXJjZUtVUkxzKTsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0cyB0aGUgcmVzdWx0cyB0
byBXZWJVUkxzLgorICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdFJlc291cmNlVVJMcyhyZXNv
dXJjZUtVUkxzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZUtV
UkxzLnNpemUoKTsgKytpKSB7CisgICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tpXSA9IHJlc291
cmNlS1VSTHNbaV07CisgICAgICAgIC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBz
YW1lIFVSTCBhcyBhbm90aGVyIHJlc291cmNlLCBrZWVwIHRoZQorICAgICAgICAvLyByZXNvdXJj
ZSBVUkwgb25seSBpbiBzdWNoIGNhc2VzLgorICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtV
UkxzLmZpbmQocmVzb3VyY2VLVVJMc1tpXSk7CisgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3Vu
ZCkKKyAgICAgICAgICAgIGZyYW1lS1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICB9CisgICAgKnJl
c291cmNlVVJMcyA9IHJlc3VsdFJlc291cmNlVVJMczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBy
ZXN1bHRGcmFtZVVSTHMoZnJhbWVLVVJMcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnJhbWVLVVJMcy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ld
ID0gZnJhbWVLVVJMc1tpXTsKKyAgICAqZnJhbWVVUkxzID0gcmVzdWx0RnJhbWVVUkxzOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCiBXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6Omdl
bmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCiB7
CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVc
IiBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PSIsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmlu
ZyY+KGNoYXJzZXQpLCAiXCI+Iik7CkBAIC03Nyw0ICsyNDUsNCBAQCBXZWJTdHJpbmcgV2ViUGFn
ZVNlcmlhbGl6ZXI6OmdlbmVyYXRlQmFzCiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoIjxiYXNlIGhy
ZWY9XCIuXCIgdGFyZ2V0PVwiIiwgc3RhdGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4oYmFzZVRhcmdl
dCksICJcIj4iKTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5j
cHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1l
VGVzdC5jcHAJKHJldmlzaW9uIDgwMDA1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJGcmFtZVRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgPGdvb2ds
ZXVybC9zcmMvZ3VybC5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJU
ZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgi
CisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAi
V2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29n
bGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdl
YmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJG
cmFtZUNsaWVudCB7Cit9OworCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplclRlc3QgOiBwdWJsaWMg
dGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0KCkgOiBt
X3dlYlZpZXcoMCksIG1fc3VwcG9ydGVkU2NoZW1lcygzVSkKKyAgICB7CisgICAgICAgIG1fc3Vw
cG9ydGVkU2NoZW1lc1swXSA9ICJodHRwIjsKKyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzFd
ID0gImh0dHBzIjsKKyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzFdID0gImZpbGUiOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAg
ICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmll
dyA9IFdlYlZpZXc6OmNyZWF0ZSgwLCAwLCAwKTsKKyAgICAgICAgbV93ZWJWaWV3LT5pbml0aWFs
aXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZv
aWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJB
bGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2Vi
U3RyaW5nJiBmaWxlTmFtZSkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNl
OworICAgICAgICByZXNwb25zZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1J
TUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJr
aXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGgu
YXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUudXRmOCgpKTsKKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0
cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkxJblRv
cEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlcXVlc3QgdXJs
UmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7CisgICAgICAgIHVybFJl
cXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUo
KS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVu
ZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFz
eW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgd2Vi
VmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJs
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZlY3Rvci5maW5kKFdlYlVSTChHVVJMKHVybCkpKSAh
PSBXZWJWZWN0b3I8V2ViVVJMPjo6bm90Rm91bmQ7CisgICAgfQorCisgICAgLy8gVXNlZnVsIGZv
ciBkZWJ1Z2dpbmcuCisgICAgc3RhdGljIHZvaWQgcHJpbnRXZWJVUkxzKGNvbnN0IFdlYlZlY3Rv
cjxXZWJVUkw+JiB1cmxzKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1
cmxzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgdXJsc1tpXS5zcGVj
KCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgV2ViVmVj
dG9yPFdlYkNTdHJpbmc+IG1fc3VwcG9ydGVkU2NoZW1lczsKKworcHJpdmF0ZToKKyAgICBUZXN0
V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307CisKK1RFU1RfRihXZWJQYWdlU2Vy
aWFsaXplclRlc3QsIEhUTUxOb2RlcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZy
YW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdl
YlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZV9wYWdlLmh0bWwiKSk7CisgICAgbG9hZFVSTEluVG9w
RnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291cmNlcy4KKyAg
ICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzb3Vy
Y2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291
cmNlcygKKyAgICAgICAgbV93ZWJWaWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMs
ICZmcmFtZXMpKTsgICAgCisKKyAgICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJvbSB0
aGUgZnJhbWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoMSwgZnJhbWVzLnNp
emUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisKKyAg
ICBFWFBFQ1RfRVEoMTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8g
ZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0aWZ1bGwuY3NzIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYXdl
c29tZS5qcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2JvZHlCYWNrZ3JvdW5kLmpwZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3
ZXNvbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1hZ2VCdXR0b24ucG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdGFi
bGVCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3RyQmFja2dyb3VuZC5wbmciKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS90ZEJhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRpb25zL2F1dGV1ci5waHA/
aWRhPTQ2IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29tL3F1b3Rlcy9hdXRob3JzL2MvY2hhcmxlc19kYXJ3
aW4uaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9kZWxldGVkLmh0bWwiKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlf
aW5zZXJ0ZWQuaHRtbCIpKTsKK30KKworVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgTXVs
dGlwbGVGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9h
ZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
Iik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIpKTsKKyAgICBXZWJVUkwgaW5uZXJGcmFtZVVSTCA9IEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vc2ltcGxlX2lmcmFtZS5odG1sIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKGlubmVyRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBs
ZV9pZnJhbWUuaHRtbCIpKTsKKyAgICAvLyBJZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCBy
ZXNvdXJjZSBmb3IgYXdlc29tZS5wbmcsIGl0IGNhdXNlcyB0aGUKKyAgICAvLyBkb2N1bWVudCBs
b2FkZXIgb2YgdGhlIGlmcmFtZSB0aGF0IGhhcyBpdCBhcyBpdHMgc3JjIHRvIGFzc2VydCBvbiBj
bG9zZSwKKyAgICAvLyBub3Qgc3VyZSB3aHkuCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vYXdlc29tZS5wbmciKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXdlc29tZS5wbmciKSk7CisKKyAgICBsb2Fk
VVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3Vy
Y2VzLgorICAgIFdlYlZlY3RvcjxXZWJVUkw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJM
PiByZXNvdXJjZXM7CisgICAgQVNTRVJUX1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZl
QWxsUmVzb3VyY2VzKAorICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJl
c291cmNlcywgJmZyYW1lcykpOyAgICAKKworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNl
cyBmcm9tIHRoZSBmcmFtZSBoYXZlIGJlZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSgyLCBm
cmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQ
RUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIp
KTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL3NpbXBsZV9pZnJhbWUuaHRtbCIpKTsKKworICAgIEVYUEVDVF9FUSgyLCByZXNv
dXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQ
RUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lubmVyRnJhbWUucG5nIikpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24v
c2ltcGxlX2lmcmFtZS5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXph
dGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxo
dG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2Vy
aWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRo
ZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgZnJhbWVzLiAK
Ky0tPgorCis8Ym9keT4KKworPGltZyBzcmM9ImF3ZXNvbWUucG5nIi8+Cis8aW1nIHNyYz0iaW5u
ZXJGcmFtZS5wbmciLz4KKworPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFn
ZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNv
dXJjZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgZnJv
bSB2YXJpb3VzIEhUTUwgbm9kZXMuCistLT4KKworPGhlYWQ+Cis8IS0tIFN0eWxlIHNoZWV0IGxp
bmtzIHNob3VsZCBiZSByZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9
InRleHQvY3NzIiBocmVmPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0aWZ1bGwuY3NzIi8+
Cis8IS0tIE90aGVyIGxpbmsgc2hvdWxkIE5PVCBiZSByZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9
ImNvcHlyaWdodCIgdHlwZT0idGV4dC9wbGFpbiIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNv
bS9jb3B5cmlnaHQiLz4KKzwhLS0gU2NyaXB0cyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPHNj
cmlwdCBzcmM9ImF3ZXNvbWUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8IS0tIEltYWdlcyBh
cmUgYWx3YXlzIHJldHJpZXZlZCAtLT4KKzxib2R5IGJhY2tncm91bmQ9ImJvZHlCYWNrZ3JvdW5k
LmpwZyI+CisKKzwhLS0gVHdpY2UgdG8gbWFrZSBzdXJlIHdlIG9ubHkgcmVwb3J0IGVhY2ggcmVz
b3VyY2Ugb25jZSAtLT4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorPGltZyBzcmM9ImF3ZXNv
bWUucG5nIi8+CisKKzxmb3JtPgorICA8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaW1hZ2VCdXR0
b24ucG5nIi8+Cis8L2Zvcm0+CisKKzx0YWJsZSBiYWNrZ3JvdW5kPSJ0YWJsZUJhY2tncm91bmQu
cG5nIj4KKyAgPHRyIGJhY2tncm91bmQ9InRyQmFja2dyb3VuZC5wbmciPgorICAgIDx0ZCBiYWNr
Z3JvdW5kPSJ0ZEJhY2tncm91bmQucG5nIj48L3RkPgorICA8L3RyPiAgCisgIDx0ciBiYWNrZ3Jv
dW5kPSJ0ckJhY2tncm91bmQucG5nIj4KKyAgICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5k
LnBuZyI+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKzwhLS0gU29tZSBtb3JlIG9ic2N1cmUg
dGFncyAtLT4KKzxibG9ja3F1b3RlIGNpdGU9Imh0dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRpb25z
L2F1dGV1ci5waHA/aWRhPTQ2Ij48L2Jsb2NrcXVvdGU+Cis8cSBDSVRFPSJodHRwOi8vd3d3LmJy
YWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNfZGFyd2luLmh0bWwiPjwvcT4K
KzxwPk15IGZhdm9yaXRlIGNvbG9yIGlzIDxkZWwgY2l0ZT0id2h5X2RlbGV0ZWQuaHRtbCI+Ymx1
ZTwvZGVsPiA8aW5zPnJlZDwvaW5zPiE8L3A+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVs
PmJsdWU8L2RlbD4gPGlucyBjaXRlPSJ3aHlfaW5zZXJ0ZWQuaHRtbCI+cmVkPC9pbnM+ITwvcD4K
KworPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2Zy
YW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTggQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhh
dCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzCisgICAg
Y29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlw
bGUgZnJhbWVzLiAKKy0tPgorCis8Ym9keT4KKworPCEtLSBSZXNvdXJjZXMgdXNlZCBieSBhIGZy
YW1lIGFuZCBhIHRhZyBzaG91bGQgYmUgb25seSByZXBvcnRlZCBvbmNlIC0tPgorPGlmcmFtZSBz
cmM9ImF3ZXNvbWUucG5nIj48L2lmcmFtZT4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorCis8
aWZyYW1lIHNyYz0ic2ltcGxlX2lmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJz
aW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9hd2Vz
b21lLnBuZw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmlu
YXJ5IHR5cGUuDQpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoNClBy
b3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZVxXZWJLaXRcY2hyb21pdW1cdGVzdHNcZGF0YVxwYWdl
c2VyaWFsaXphdGlvblxhd2Vzb21lLnBuZw0KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KQWRkZWQ6IHN2bjptaW1lLXR5
cGUNCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtDQoNCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFBVUFBQUFGQ0FZQUFBQ05ieWJsQUFBQUhFbEVRVlFJMTJQNC8vOC93MzhHSUFYRElCS0UK
MERIeGdsak5CQUFPOVRYTDBZNE9Id0FBQUFCSlJVNUVya0pnZ2c9PQoK
</data>
<flag name="review"
          id="77097"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85879</attachid>
            <date>2011-03-15 17:02:57 -0700</date>
            <delta_ts>2011-03-15 17:20:12 -0700</delta_ts>
            <desc>Addressing David&apos;s remarks.</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>25778</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMTk1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MyBAQAorMjAxMS0wMy0xNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmNvbnRh
aW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJSZXNvdXJj
ZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9y
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2Vz
KToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dl
YlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb246IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorCiAyMDEx
LTAzLTE1ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2
aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViRnJhbWVUZXN0LmNwcCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgfV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
CShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7
CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3Mg
V2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOworY2xhc3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKIC8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXpp
bmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cwpAQCAtNjksNiArNzEsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKIAorICAg
IC8vIFJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2UgZm9yIHRoZSBwYXNzZWQgdmlldywgaW5jbHVk
aW5nIHRoZSBtYWluIGZyYW1lCisgICAgLy8gYW5kIHN1Yi1mcmFtZXMuIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgcmVzb3VyY2VzIHdlcmUgcmV0cmlldmVkCisgICAgLy8gc3VjY2Vzc2Z1bGx5LgorICAg
IFdFQktJVF9BUEkgc3RhdGljIGJvb2wgcmV0cmlldmVBbGxSZXNvdXJjZXMoV2ViVmlldyosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVj
dG9yPFdlYlVSTD4qIGZyYW1lcyk7CisKICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUg
aGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLiBDb25zaWRlcgogICAgIC8vIGNoYW5naW5n
IHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCiAKQEAgLTgwLDYgKzkwLDYgQEAgcHVibGljOgogICAg
IFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihj
b25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Mywx
NiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0dXJu
IGEuc3BlYygpIDwgYi5zcGVjKCk7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
V2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCit7CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21w
YXJlKGIuc3BlYygpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwm
IGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJWZWN0b3IuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVChpIDwgbV9zaXplKTsKICAgICAg
ICAgcmV0dXJuIG1fcHRyW2ldOwogICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IFQmIHZhbHVlKSBjb25zdA0KKyAgICB7DQorICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fc2l6ZTsgaSsrKSB7DQorICAgICAgICAgICAgaWYgKG1fcHRyW2ldID09IHZhbHVlKQ0KKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCisgICAgICAgIH0NCisgICAgICAgIHJldHVybiBm
YWxzZTsNCisgICAgfQogCiAgICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgY29u
c3QgVCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcHRyOyB9CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAJKHJldmlzaW9uIDgx
MTc0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgV2ViRGF0YVNvdXJjZUltcGw6Oldl
YkRhdGFTb3VyY2VJbXBsKGNvbgogICAgICAgICAvLyBmcmFtZSwgd2hpY2ggcmVzdWx0cyBpbiBh
IHNlY29uZCBkYXRhIHNvdXJjZSBiZWluZyBjcmVhdGVkLiAgV2Ugd2FudAogICAgICAgICAvLyB0
byB3YWl0IHRvIGF0dGFjaCB0aGUgV2ViUGx1Z2luTG9hZE9ic2VydmVyIHRvIHRoYXQgZGF0YSBz
b3VyY2UuCiAgICAgICAgIGlmICghcmVxdWVzdC51cmwoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXItPnVybCgpID09IHJlcXVlc3QudXJs
KCkpOworICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+dXJsKCkg
PT0gV2ViVVJMKHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAgIG1fcGx1Z2luTG9hZE9ic2Vy
dmVyLnNldChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIpOwogICAgICAgICAgICAgbV9uZXh0UGx1
Z2luTG9hZE9ic2VydmVyID0gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA4MTE3NCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDE0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhU
TUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAorI2luY2x1ZGUgIldlYkNTdHJp
bmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgog
I2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNl
cmlhbGl6ZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJM
LmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiAKK25hbWVzcGFjZSB7CisKK0tVUkwgZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVu
dChjb25zdCBFbGVtZW50JiBlbGVtZW50KQoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0
dHJpYnV0ZU5hbWUgPSAwOworICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bWdUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpIHsKKyAg
ICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgfSBlbHNlIGlm
IChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgY29u
c3QgSFRNTElucHV0RWxlbWVudCYgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRF
bGVtZW50Jj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dC5pc0ltYWdlQnV0dG9uKCkpCisg
ICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0cjsKKyAgICB9IGVs
c2UgaWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpCisgICAgICAgICAg
ICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAgICAgICAg
ICAgICAgIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyVGFnKQorICAgICAgICAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcpKSB7CisgICAgICAg
IGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsKKyAgICB9IGVsc2Ug
aWYgKGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcpCisgICAgICAg
ICAgICAgICB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQorICAgICAgICAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAgICAg
ICAgICAgfHwgZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFnKSkgeworICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6Y2l0ZUF0dHI7CisgICAgfSBlbHNlIGlmIChl
bGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgeworICAgICAgICAvLyBJZiB0
aGUgbGluayBlbGVtZW50IGlzIG5vdCBjc3MsIGlnbm9yZSBpdC4KKyAgICAgICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpLCAi
dGV4dC9jc3MiKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBleHRy
YWN0aW5nIGxpbmtzIG9mIHN1Yi1yZXNvdXJjZXMgd2hpY2gKKyAgICAgICAgICAgIC8vIGFyZSBp
bnNpZGUgc3R5bGUtc2hlZXQgc3VjaCBhcyBAaW1wb3J0LCBAZm9udC1mYWNlLCB1cmwoKSwgZXRj
LgorICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmhyZWZBdHRyOworICAg
ICAgICB9CisgICAgfQorICAgIGlmICghYXR0cmlidXRlTmFtZSkKKyAgICAgICAgcmV0dXJuIEtV
UkwoKTsKKworICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCphdHRyaWJ1
dGVOYW1lKTsKKyAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgIGlmICh2YWx1
ZS5pc051bGwoKSB8fCB2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RhcnRzV2l0aCgiamF2YXNj
cmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKKyAgICByZXR1cm4gZWxl
bWVudC5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3ZvaWQgcmV0cmlldmVS
ZXNvdXJjZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVS
THMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291
cmNlVVJMcykKK3sKKyAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9jZXNz
IGl0IGxhdGVyIGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChlbGVtZW50
Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShI
VE1MTmFtZXM6OmZyYW1lVGFnKSkKKyAgICAgICAgICAgICYmIGVsZW1lbnQuaXNGcmFtZU93bmVy
RWxlbWVudCgpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0IEhU
TUxGcmFtZU93bmVyRWxlbWVudCo+KCZlbGVtZW50KS0+Y29udGVudEZyYW1lKCk7CisgICAgICAg
IGlmICh2aXNpdGVkRnJhbWVzLT5maW5kKGZyYW1lKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAg
IGZyYW1lc1RvVmlzaXQtPmFwcGVuZChmcmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBLVVJMIHVybCA9IGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoZWxlbWVudCk7Cisg
ICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgdXJsLmlzTnVsbCgpIHx8ICF1cmwuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm47IC8vIE5vIHN1YnJlc291cmNlIGZvciB0aGlzIG5vZGUuCisKKyAgICAv
LyBJZ25vcmUgVVJMcyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xzLiBTaW5jZSB0
aGUgRlRQIHByb3RvY29sCisgICAgLy8gZG9lcyBubyBoYXZlIGEgY2FjaGUgbWVjaGFuaXNtLCB3
ZSBza2lwIGl0IGFzIHdlbGwuCisgICAgaWYgKCF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSAm
JiAhdXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXNvdXJj
ZVVSTHMtPmZpbmQodXJsKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBl
bmQodXJsKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFt
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3Rv
cjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQor
eworICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCkt
PnJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBpcyBpbnZhbGlk
LCBpZ25vcmUgaXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZyYW1lVVJMLmlz
VmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1lcyBmcm9tIHVu
c3VwcG9ydGVkIHNjaGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFsc2U7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChmcmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJpbmc+KHN1cHBv
cnRlZFNjaGVtZXNbaV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRTY2hlbWUgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpc1Zh
bGlkU2NoZW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkg
c2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmZpbmQo
ZnJhbWUpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgdmlzaXRlZEZyYW1lcy0+
YXBwZW5kKGZyYW1lKTsKKyAgICBpZiAoZnJhbWVVUkxzLT5maW5kKGZyYW1lVVJMKSA9PSBub3RG
b3VuZCkKKyAgICAgICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAKKyAgICAvLyBO
b3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZSBvZiB0aGUgZG9j
dW1lbnQuCisgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGxOb2RlcyA9IGZyYW1lLT5k
b2N1bWVudCgpLT5hbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsTm9kZXMt
Pmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFsbE5vZGVzLT5pdGVtKGkp
OworICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIEhUTUwgcmVzb3VyY2VzLgor
ICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoKnN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRG
cmFtZXMsIGZyYW1lc1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmcmFtZVVSTHMsIHJlc291cmNlVVJMcyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQor
CiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
KFdlYkZyYW1lKiBmcmFtZSwKQEAgLTU4LDYgKzE4Myw0OCBAQCBib29sIFdlYlBhZ2VTZXJpYWxp
emVyOjpzZXJpYWxpemUoV2ViRnJhCiAgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6
ZSgpOwogfQogCitib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyhX
ZWJWaWV3KiB2aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4q
IHJlc291cmNlVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlZlY3RvcjxXZWJVUkw+KiBmcmFtZVVSTHMpIHsKKyAgICBXZWJGcmFtZUltcGwqIG1h
aW5GcmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHZpZXctPm1haW5GcmFtZSgpKTsK
KyAgICBpZiAoIW1haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9y
PEZyYW1lKj4gZnJhbWVzVG9WaXNpdDsKKyAgICBWZWN0b3I8RnJhbWUqPiB2aXNpdGVkRnJhbWVz
OworICAgIFZlY3RvcjxLVVJMPiBmcmFtZUtVUkxzOworICAgIFZlY3RvcjxLVVJMPiByZXNvdXJj
ZUtVUkxzOworICAgIAorICAgIC8vIExldCdzIHJldHJpZXZlIHRoZSByZXNvdXJjZXMgZnJvbSBl
dmVyeSBmcmFtZSBpbiB0aGlzIHBhZ2UuCisgICAgZnJhbWVzVG9WaXNpdC5hcHBlbmQobWFpbkZy
YW1lLT5mcmFtZSgpKTsKKyAgICB3aGlsZSAoIWZyYW1lc1RvVmlzaXQuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07CisgICAgICAgIGZyYW1lc1Rv
VmlzaXQucmVtb3ZlKDApOworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZyYW1l
LCBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2
aXNpdGVkRnJhbWVzLCAmZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmZnJhbWVLVVJMcywgJnJlc291cmNlS1VSTHMpOworICAgIH0KKworICAgIC8vIENv
bnZlcnRzIHRoZSByZXN1bHRzIHRvIFdlYlVSTHMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVz
dWx0UmVzb3VyY2VVUkxzKHJlc291cmNlS1VSTHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHJlc291cmNlS1VSTHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0UmVz
b3VyY2VVUkxzW2ldID0gcmVzb3VyY2VLVVJMc1tpXTsKKyAgICAgICAgLy8gQSBmcmFtZSdzIHNy
YyBjYW4gcG9pbnQgdG8gdGhlIHNhbWUgVVJMIGFzIGFub3RoZXIgcmVzb3VyY2UsIGtlZXAgdGhl
CisgICAgICAgIC8vIHJlc291cmNlIFVSTCBvbmx5IGluIHN1Y2ggY2FzZXMuCisgICAgICAgIHNp
emVfdCBpbmRleCA9IGZyYW1lS1VSTHMuZmluZChyZXNvdXJjZUtVUkxzW2ldKTsKKyAgICAgICAg
aWYgKGluZGV4ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUoaW5k
ZXgpOworICAgIH0KKyAgICAqcmVzb3VyY2VVUkxzID0gcmVzdWx0UmVzb3VyY2VVUkxzOworICAg
IFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdEZyYW1lVVJMcyhmcmFtZUtVUkxzLnNpemUoKSk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmcmFtZUtVUkxzLnNpemUoKTsgKytpKQorICAgICAg
ICByZXN1bHRGcmFtZVVSTHNbaV0gPSBmcmFtZUtVUkxzW2ldOworICAgICpmcmFtZVVSTHMgPSBy
ZXN1bHRGcmFtZVVSTHM7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIFdlYlN0cmluZyBX
ZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdl
YlN0cmluZyYgY2hhcnNldCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiPG1ldGEgaHR0cC1l
cXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Iiwgc3Rh
dGljX2Nhc3Q8Y29uc3QgU3RyaW5nJj4oY2hhcnNldCksICJcIj4iKTsKQEAgLTc3LDQgKzI0NCw0
IEBAIFdlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXMKICAgICByZXR1cm4g
bWFrZVN0cmluZygiPGJhc2UgaHJlZj1cIi5cIiB0YXJnZXQ9XCIiLCBzdGF0aWNfY2FzdDxjb25z
dCBTdHJpbmcmPihiYXNlVGFyZ2V0KSwgIlwiPiIpOwogfQogCi19ICAvLyBuYW1lc3BhY2UgV2Vi
S2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViRnJhbWVUZXN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwDQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFs
aXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisj
aW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTFJl
cXVlc3QuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXcu
aCIKKworI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvZ3VybC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVzdFdlYkZyYW1l
Q2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK307CisKK2NsYXNzIFdlYlBhZ2VTZXJp
YWxpemVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdl
U2VyaWFsaXplclRlc3QoKSA6IG1fd2ViVmlldygwKSwgbV9zdXBwb3J0ZWRTY2hlbWVzKDNVKQor
ICAgIHsKKyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzBdID0gImh0dHAiOworICAgICAgICBt
X3N1cHBvcnRlZFNjaGVtZXNbMV0gPSAiaHR0cHMiOworICAgICAgICBtX3N1cHBvcnRlZFNjaGVt
ZXNbMl0gPSAiZmlsZSI7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNl
dFVwKCkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmll
dy4KKyAgICAgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDAsIDAsIDApOworICAgICAg
ICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5j
bG9zZSgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdl
YlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQorICAgIHsKKyAgICAgICAgV2Vi
VVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOworICAgICAgICBzdGQ6OnN0
cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgp
OworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxl
TmFtZS51dGY4KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwo
dXJsLCByZXNwb25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKwor
ICAgIHZvaWQgbG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAg
ICAgV2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxp
emUoKTsKKyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBt
X3dlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAg
Ly8gTWFrZSBzdXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Vi
a2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCB3ZWJWZWN0b3JDb250YWlucyhjb25zdCBXZWJWZWN0b3I8V2ViVVJM
PiYgdmVjdG9yLCBjaGFyKiB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yLmNvbnRh
aW5zKFdlYlVSTChHVVJMKHVybCkpKTsKKyAgICB9CisKKyAgICAvLyBVc2VmdWwgZm9yIGRlYnVn
Z2luZy4KKyAgICBzdGF0aWMgdm9pZCBwcmludFdlYlVSTHMoY29uc3QgV2ViVmVjdG9yPFdlYlVS
TD4mIHVybHMpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVybHMuc2l6
ZSgpOyBpKyspCisgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB1cmxzW2ldLnNwZWMoKS5kYXRh
KCkpOworICAgIH0KKworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJWZWN0b3I8V2Vi
Q1N0cmluZz4gbV9zdXBwb3J0ZWRTY2hlbWVzOworCitwcml2YXRlOgorICAgIFRlc3RXZWJGcmFt
ZUNsaWVudCBtX3dlYkZyYW1lQ2xpZW50OworfTsKKworVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVy
VGVzdCwgSFRNTE5vZGVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5k
IGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgic2ltcGxlX3BhZ2UuaHRtbCIpKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0
b3BGcmFtZVVSTCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgorICAgIFdlYlZl
Y3RvcjxXZWJVUkw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXNvdXJjZXM7Cisg
ICAgQVNTRVJUX1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKAor
ICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlcywgJmZyYW1l
cykpOyAgICAKKworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFt
ZSBoYXZlIGJlZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSgxLCBmcmFtZXMuc2l6ZSgpKTsg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKworICAgIEVYUEVD
VF9FUSgxNCwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNh
dGVzLgorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cuZXhhbXBsZS5jb20vYmVhdXRpZnVsbC5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2Vi
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLmpz
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vYm9keUJhY2tncm91bmQuanBnIikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYXdlc29tZS5w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9pbWFnZUJ1dHRvbi5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2Vi
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90YWJsZUJhY2tn
cm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vdHJCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Rk
QmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cDovL3d3dy5ldmVuZS5mci9jaXRhdGlvbnMvYXV0ZXVyLnBocD9pZGE9NDYi
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVzX2Rhcndpbi5odG1s
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vd2h5X2RlbGV0ZWQuaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9pbnNlcnRl
ZC5odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHBzOi8vd3d3LnNlY3VyZS5jb20vaHR0cHMuZ2lmIikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImZpbGU6Ly9jL215X2ZvbGRlci9maWxlLmdpZiIp
KTsKK30KKworVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgTXVsdGlwbGVGcmFtZXMpCit7
CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJV
UkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJh
bWUuaHRtbCIpKTsKKyAgICBXZWJVUkwgaW5uZXJGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20vc2ltcGxlX2lmcmFtZS5odG1sIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KGlubmVyRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZV9pZnJhbWUuaHRtbCIp
KTsKKyAgICAvLyBJZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCByZXNvdXJjZSBmb3IgYXdl
c29tZS5wbmcsIGl0IGNhdXNlcyB0aGUKKyAgICAvLyBkb2N1bWVudCBsb2FkZXIgb2YgdGhlIGlm
cmFtZSB0aGF0IGhhcyBpdCBhcyBpdHMgc3JjIHRvIGFzc2VydCBvbiBjbG9zZSwKKyAgICAvLyBu
b3Qgc3VyZSB3aHkuCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20vYXdlc29tZS5wbmciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgiYXdlc29tZS5wbmciKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0
b3BGcmFtZVVSTCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgorICAgIFdlYlZl
Y3RvcjxXZWJVUkw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXNvdXJjZXM7Cisg
ICAgQVNTRVJUX1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKAor
ICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlcywgJmZyYW1l
cykpOyAgICAKKworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFt
ZSBoYXZlIGJlZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSgyLCBmcmFtZXMuc2l6ZSgpKTsg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3NpbXBs
ZV9pZnJhbWUuaHRtbCIpKTsKKworICAgIEVYUEVDVF9FUSgyLCByZXNvdXJjZXMuc2l6ZSgpKTsg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIp
KTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL2lubmVyRnJhbWUucG5nIikpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmcNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vYXdlc29tZS5wbmcJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmcJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKKwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbA0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVf
aWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0IEBACis8aHRtbD4KKzwhLS0KKyAgICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0
ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZl
cworICAgIGNvcnJlY3RseSB0aGUgZXhwZWN0ZWQgcmVzb3VyY2VzIHdoZW4gZGVhbGluZyB3aXRo
IG11bHRpcGxlIGZyYW1lcy4gCistLT4KKworPGJvZHk+CisKKzxpbWcgc3JjPSJhd2Vzb21lLnBu
ZyIvPgorPGltZyBzcmM9ImlubmVyRnJhbWUucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L3NpbXBsZV9wYWdlLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bi9zaW1wbGVfcGFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4K
KzwhLS0KKyAgICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6
ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNvcnJlY3RseSB0aGUgZXhw
ZWN0ZWQgcmVzb3VyY2VzIGZyb20gdmFyaW91cyBIVE1MIG5vZGVzLgorLS0+CisKKzxoZWFkPgor
PCEtLSBTdHlsZSBzaGVldCBsaW5rcyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNv
bS9iZWF1dGlmdWxsLmNzcyIvPgorPCEtLSBPdGhlciBsaW5rIHNob3VsZCBOT1QgYmUgcmV0cmll
dmVkIC0tPgorPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHR5cGU9InRleHQvcGxhaW4iIGhyZWY9Imh0
dHA6Ly93d3cuZXhhbXBsZS5jb20vY29weXJpZ2h0Ii8+Cis8IS0tIFNjcmlwdHMgc2hvdWxkIGJl
IHJldHJpZXZlZCAtLT4KKzxzY3JpcHQgc3JjPSJhd2Vzb21lLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPCEtLSBJbWFnZXMgYXJlIGFsd2F5cyByZXRyaWV2ZWQgLS0+Cis8Ym9keSBiYWNrZ3Jv
dW5kPSJib2R5QmFja2dyb3VuZC5qcGciPgorCis8IS0tIFR3aWNlIHRvIG1ha2Ugc3VyZSB3ZSBv
bmx5IHJlcG9ydCBlYWNoIHJlc291cmNlIG9uY2UgLS0+Cis8aW1nIHNyYz0iYXdlc29tZS5wbmci
Lz4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorCis8Zm9ybT4KKyAgPGlucHV0IHR5cGU9Imlt
YWdlIiBzcmM9ImltYWdlQnV0dG9uLnBuZyIvPgorPC9mb3JtPgorCis8dGFibGUgYmFja2dyb3Vu
ZD0idGFibGVCYWNrZ3JvdW5kLnBuZyI+CisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91bmQu
cG5nIj4KKyAgICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAgPC90
cj4gIAorICA8dHIgYmFja2dyb3VuZD0idHJCYWNrZ3JvdW5kLnBuZyI+CisgICAgPHRkIGJhY2tn
cm91bmQ9InRkQmFja2dyb3VuZC5wbmciPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8IS0t
IFNvbWUgbW9yZSBvYnNjdXJlIHRhZ3MgLS0+Cis8YmxvY2txdW90ZSBjaXRlPSJodHRwOi8vd3d3
LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiI+PC9ibG9ja3F1b3RlPgorPHEg
Q0lURT0iaHR0cDovL3d3dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVz
X2Rhcndpbi5odG1sIj48L3E+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsIGNpdGU9Indo
eV9kZWxldGVkLmh0bWwiPmJsdWU8L2RlbD4gPGlucz5yZWQ8L2lucz4hPC9wPgorPHA+TXkgZmF2
b3JpdGUgY29sb3IgaXMgPGRlbD5ibHVlPC9kZWw+IDxpbnMgY2l0ZT0id2h5X2luc2VydGVkLmh0
bWwiPnJlZDwvaW5zPiE8L3A+CisKKzwhLS0gTWFrZSBzdXJlIHdlIG9ubHkgcmV0cmlldmUgVVJM
cyB3aXRoIHRoZSByaWdodCBzY2hlbWVzIC0tPgorPGltZyBzcmM9Imh0dHBzOi8vd3d3LnNlY3Vy
ZS5jb20vaHR0cHMuZ2lmIi8+ICA8IS0tIEhUVFBTIGlzIE9LIC0tPgorPGltZyBzcmM9ImZpbGU6
Ly9jL215X2ZvbGRlci9maWxlLmdpZiIvPiAgPCEtLSBmaWxlIGlzIE9LIC0tPgorPGltZyBzcmM9
ImZ0cDovL2Z0cC5jb20vZnRwLmdpZiIvPiAgPCEtLSBGVFAgaXMgbm90IE9LIC0tPgorPGltZyBz
cmM9InVua25vd246Ly91bmtvd24uY29tL3Vua25vd24uZ2lmIi8+ICA8IS0tIFVua25vd24gc2No
ZW1lcyBhcmUgbm90IE9LIC0tPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRt
bA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdl
IGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291
cmNlcyByZXRyaWV2ZXMKKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVu
IGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmcmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8IS0tIFJl
c291cmNlcyB1c2VkIGJ5IGEgZnJhbWUgYW5kIGEgdGFnIHNob3VsZCBiZSBvbmx5IHJlcG9ydGVk
IG9uY2UgLS0+Cis8aWZyYW1lIHNyYz0iYXdlc29tZS5wbmciPjwvaWZyYW1lPgorPGltZyBzcmM9
ImF3ZXNvbWUucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZy
YW1lPgorPGlmcmFtZSBzcmM9InNpbXBsZV9pZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwvYm9k
eT4KKworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85884</attachid>
            <date>2011-03-15 17:20:12 -0700</date>
            <delta_ts>2011-03-16 13:54:21 -0700</delta_ts>
            <desc>Fixed style.</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>25883</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMTk1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
MyBAQAorMjAxMS0wMy0xNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmNvbnRh
aW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJSZXNvdXJj
ZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9y
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2Vz
KToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dl
YlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb246IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorCiAyMDEx
LTAzLTE1ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2
aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViRnJhbWVUZXN0LmNwcCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgfV0sCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0ibWFjIicsIHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgNCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
CShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7
CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3Mg
V2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOworY2xhc3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKIC8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXpp
bmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ugd2l0aCBsaXN0cwpAQCAtNjksNiArNzEsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKIAorICAg
IC8vIFJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2UgZm9yIHRoZSBwYXNzZWQgdmlldywgaW5jbHVk
aW5nIHRoZSBtYWluIGZyYW1lCisgICAgLy8gYW5kIHN1Yi1mcmFtZXMuIFJldHVybnMgdHJ1ZSBp
ZiBhbGwgcmVzb3VyY2VzIHdlcmUgcmV0cmlldmVkCisgICAgLy8gc3VjY2Vzc2Z1bGx5LgorICAg
IFdFQktJVF9BUEkgc3RhdGljIGJvb2wgcmV0cmlldmVBbGxSZXNvdXJjZXMoV2ViVmlldyosCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2Vz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVj
dG9yPFdlYlVSTD4qIGZyYW1lcyk7CisKICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUg
aGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2VzLiBDb25zaWRlcgogICAgIC8vIGNoYW5naW5n
IHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCiAKQEAgLTgwLDYgKzkwLDYgQEAgcHVibGljOgogICAg
IFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihj
b25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktp
dAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0Mywx
NiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0dXJu
IGEuc3BlYygpIDwgYi5zcGVjKCk7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
V2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCit7CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21w
YXJlKGIuc3BlYygpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwm
IGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJWZWN0b3IuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1
LDE1IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lUX0FTU0VSVChpIDwgbV9zaXplKTsKICAgICAg
ICAgcmV0dXJuIG1fcHRyW2ldOwogICAgIH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0
IFQmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYgKG1fcHRyW2ldID09IHZhbHVlKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CiAKICAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9wdHI7IH0KICAgICBjb25zdCBUKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0KQEAgLTE3Miw2ICsxODEsNiBAQCBwcml2YXRl
OgogICAgIHNpemVfdCBtX3NpemU7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAJKHJldmlzaW9uIDgxMTc0KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgV2ViRGF0YVNvdXJjZUltcGw6OldlYkRhdGFTb3Vy
Y2VJbXBsKGNvbgogICAgICAgICAvLyBmcmFtZSwgd2hpY2ggcmVzdWx0cyBpbiBhIHNlY29uZCBk
YXRhIHNvdXJjZSBiZWluZyBjcmVhdGVkLiAgV2Ugd2FudAogICAgICAgICAvLyB0byB3YWl0IHRv
IGF0dGFjaCB0aGUgV2ViUGx1Z2luTG9hZE9ic2VydmVyIHRvIHRoYXQgZGF0YSBzb3VyY2UuCiAg
ICAgICAgIGlmICghcmVxdWVzdC51cmwoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VS
VChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXItPnVybCgpID09IHJlcXVlc3QudXJsKCkpOworICAg
ICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+dXJsKCkgPT0gV2ViVVJM
KHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAgIG1fcGx1Z2luTG9hZE9ic2VydmVyLnNldCht
X25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIpOwogICAgICAgICAgICAgbV9uZXh0UGx1Z2luTG9hZE9i
c2VydmVyID0gMDsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViUGFnZVNlcmlhbGl6ZXIuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTkgKzMxLDE0NCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldl
YlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1
ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xs
ZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
SFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUg
IldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJ
bXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5j
bHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
K25hbWVzcGFjZSB7CisKK0tVUkwgZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChjb25zdCBF
bGVtZW50JiBlbGVtZW50KQoreworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5h
bWUgPSAwOworICAgIGlmIChlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpIHsKKyAgICAgICAgYXR0
cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgfSBlbHNlIGlmIChlbGVtZW50
Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgY29uc3QgSFRNTElu
cHV0RWxlbWVudCYgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBIVE1MSW5wdXRFbGVtZW50Jj4o
ZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dC5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVs
ZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpCisgICAgICAgICAgICAgICB8fCBl
bGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAgICAgICAgICAgICAgIHx8
IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnRyVGFnKQorICAgICAgICAgICAgICAgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcpKSB7CisgICAgICAgIGF0dHJpYnV0
ZU5hbWUgPSAmSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1l
bnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcpCisgICAgICAgICAgICAgICB8
fCBlbGVtZW50Lmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQorICAgICAgICAgICAgICAgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAgICAgICAgICAgfHwg
ZWxlbWVudC5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFnKSkgeworICAgICAgICBhdHRyaWJ1
dGVOYW1lID0gJkhUTUxOYW1lczo6Y2l0ZUF0dHI7CisgICAgfSBlbHNlIGlmIChlbGVtZW50Lmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgeworICAgICAgICAvLyBJZiB0aGUgbGluayBl
bGVtZW50IGlzIG5vdCBjc3MsIGlnbm9yZSBpdC4KKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGVsZW1lbnQuZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpLCAidGV4dC9jc3Mi
KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGxp
bmtzIG9mIHN1Yi1yZXNvdXJjZXMgd2hpY2gKKyAgICAgICAgICAgIC8vIGFyZSBpbnNpZGUgc3R5
bGUtc2hlZXQgc3VjaCBhcyBAaW1wb3J0LCBAZm9udC1mYWNlLCB1cmwoKSwgZXRjLgorICAgICAg
ICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmhyZWZBdHRyOworICAgICAgICB9Cisg
ICAgfQorICAgIGlmICghYXR0cmlidXRlTmFtZSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKwor
ICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCphdHRyaWJ1dGVOYW1lKTsK
KyAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgIGlmICh2YWx1ZS5pc051bGwo
KSB8fCB2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBm
YWxzZSkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisKKyAgICByZXR1cm4gZWxlbWVudC5kb2N1
bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3ZvaWQgcmV0cmlldmVSZXNvdXJjZXNG
b3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVSTHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291cmNlVVJMcykK
K3sKKyAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9jZXNzIGl0IGxhdGVy
IGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChlbGVtZW50Lmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGVsZW1lbnQuaGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZyYW1lVGFnKSkKKyAgICAgICAgICAgICYmIGVsZW1lbnQuaXNGcmFtZU93bmVyRWxlbWVudCgp
KSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxGcmFtZU93
bmVyRWxlbWVudCo+KCZlbGVtZW50KS0+Y29udGVudEZyYW1lKCk7CisgICAgICAgIGlmICh2aXNp
dGVkRnJhbWVzLT5maW5kKGZyYW1lKSA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIGZyYW1lc1Rv
VmlzaXQtPmFwcGVuZChmcmFtZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBLVVJM
IHVybCA9IGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKHVy
bC5pc0VtcHR5KCkgfHwgdXJsLmlzTnVsbCgpIHx8ICF1cmwuaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm47IC8vIE5vIHN1YnJlc291cmNlIGZvciB0aGlzIG5vZGUuCisKKyAgICAvLyBJZ25vcmUg
VVJMcyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xzLiBTaW5jZSB0aGUgRlRQIHBy
b3RvY29sCisgICAgLy8gZG9lcyBubyBoYXZlIGEgY2FjaGUgbWVjaGFuaXNtLCB3ZSBza2lwIGl0
IGFzIHdlbGwuCisgICAgaWYgKCF1cmwucHJvdG9jb2xJbkhUVFBGYW1pbHkoKSAmJiAhdXJsLmlz
TG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXNvdXJjZVVSTHMtPmZp
bmQodXJsKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBlbmQodXJsKTsK
K30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6
OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIEtV
UkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3Qo
KS51cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBpcyBpbnZhbGlkLCBpZ25vcmUg
aXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZyYW1lVVJMLmlzVmFsaWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1lcyBmcm9tIHVuc3VwcG9ydGVk
IHNjaGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFsc2U7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
IChmcmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJpbmc+KHN1cHBvcnRlZFNjaGVt
ZXNbaV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRTY2hlbWUgPSB0cnVlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkU2NoZW1l
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0
IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmZpbmQoZnJhbWUpICE9
IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgdmlzaXRlZEZyYW1lcy0+YXBwZW5kKGZy
YW1lKTsKKyAgICBpZiAoZnJhbWVVUkxzLT5maW5kKGZyYW1lVVJMKSA9PSBub3RGb3VuZCkKKyAg
ICAgICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAKKyAgICAvLyBOb3cgZ2V0IHRo
ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZSBvZiB0aGUgZG9jdW1lbnQuCisg
ICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGxOb2RlcyA9IGZyYW1lLT5kb2N1bWVudCgp
LT5hbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsTm9kZXMtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFsbE5vZGVzLT5pdGVtKGkpOworICAgICAg
ICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIEhUTUwgcmVzb3VyY2VzLgorICAgICAgICBp
ZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoKnN0YXRpY19jYXN0PEVsZW1lbnQqPihub2Rl
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGcmFtZXMsIGZy
YW1lc1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVVS
THMsIHJlc291cmNlVVJMcyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQorCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1l
KiBmcmFtZSwKQEAgLTU4LDYgKzE4Myw0OCBAQCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemUoV2ViRnJhCiAgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgpOwogfQog
Citib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyhXZWJWaWV3KiB2
aWV3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViVmVjdG9yPFdlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIHJlc291cmNl
VVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZl
Y3RvcjxXZWJVUkw+KiBmcmFtZVVSTHMpIHsKKyAgICBXZWJGcmFtZUltcGwqIG1haW5GcmFtZSA9
IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHZpZXctPm1haW5GcmFtZSgpKTsKKyAgICBpZiAo
IW1haW5GcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZyYW1lKj4g
ZnJhbWVzVG9WaXNpdDsKKyAgICBWZWN0b3I8RnJhbWUqPiB2aXNpdGVkRnJhbWVzOworICAgIFZl
Y3RvcjxLVVJMPiBmcmFtZUtVUkxzOworICAgIFZlY3RvcjxLVVJMPiByZXNvdXJjZUtVUkxzOwor
ICAgIAorICAgIC8vIExldCdzIHJldHJpZXZlIHRoZSByZXNvdXJjZXMgZnJvbSBldmVyeSBmcmFt
ZSBpbiB0aGlzIHBhZ2UuCisgICAgZnJhbWVzVG9WaXNpdC5hcHBlbmQobWFpbkZyYW1lLT5mcmFt
ZSgpKTsKKyAgICB3aGlsZSAoIWZyYW1lc1RvVmlzaXQuaXNFbXB0eSgpKSB7CisgICAgICAgIEZy
YW1lKiBmcmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07CisgICAgICAgIGZyYW1lc1RvVmlzaXQucmVt
b3ZlKDApOworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZyYW1lLCBzdXBwb3J0
ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aXNpdGVkRnJh
bWVzLCAmZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
ZnJhbWVLVVJMcywgJnJlc291cmNlS1VSTHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnRzIHRo
ZSByZXN1bHRzIHRvIFdlYlVSTHMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0UmVzb3Vy
Y2VVUkxzKHJlc291cmNlS1VSTHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHJlc291cmNlS1VSTHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0UmVzb3VyY2VVUkxz
W2ldID0gcmVzb3VyY2VLVVJMc1tpXTsKKyAgICAgICAgLy8gQSBmcmFtZSdzIHNyYyBjYW4gcG9p
bnQgdG8gdGhlIHNhbWUgVVJMIGFzIGFub3RoZXIgcmVzb3VyY2UsIGtlZXAgdGhlCisgICAgICAg
IC8vIHJlc291cmNlIFVSTCBvbmx5IGluIHN1Y2ggY2FzZXMuCisgICAgICAgIHNpemVfdCBpbmRl
eCA9IGZyYW1lS1VSTHMuZmluZChyZXNvdXJjZUtVUkxzW2ldKTsKKyAgICAgICAgaWYgKGluZGV4
ICE9IG5vdEZvdW5kKQorICAgICAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUoaW5kZXgpOworICAg
IH0KKyAgICAqcmVzb3VyY2VVUkxzID0gcmVzdWx0UmVzb3VyY2VVUkxzOworICAgIFdlYlZlY3Rv
cjxXZWJVUkw+IHJlc3VsdEZyYW1lVVJMcyhmcmFtZUtVUkxzLnNpemUoKSk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBmcmFtZUtVUkxzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRG
cmFtZVVSTHNbaV0gPSBmcmFtZUtVUkxzW2ldOworICAgICpmcmFtZVVSTHMgPSByZXN1bHRGcmFt
ZVVSTHM7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIFdlYlN0cmluZyBXZWJQYWdlU2Vy
aWFsaXplcjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYg
Y2hhcnNldCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiPG1ldGEgaHR0cC1lcXVpdj1cIkNv
bnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Iiwgc3RhdGljX2Nhc3Q8
Y29uc3QgU3RyaW5nJj4oY2hhcnNldCksICJcIj4iKTsKQEAgLTc3LDQgKzI0NCw0IEBAIFdlYlN0
cmluZyBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXMKICAgICByZXR1cm4gbWFrZVN0cmlu
ZygiPGJhc2UgaHJlZj1cIi5cIiB0YXJnZXQ9XCIiLCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcm
PihiYXNlVGFyZ2V0KSwgIlwiPiIpOwogfQogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
RnJhbWVUZXN0LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViRnJhbWVUZXN0LmNwcAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4
LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5oIgorCiAjaW5j
bHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KICNp
bmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3Qu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIK
KyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2lu
Y2x1ZGUgPGdvb2dsZXVybC9zcmMvZ3VybC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVzdFdlYkZyYW1lQ2xpZW50IDog
cHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK307CisKK2NsYXNzIFdlYlBhZ2VTZXJpYWxpemVyVGVz
dCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdlU2VyaWFsaXpl
clRlc3QoKSA6IG1fd2ViVmlldygwKSwgbV9zdXBwb3J0ZWRTY2hlbWVzKDNVKQorICAgIHsKKyAg
ICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzBdID0gImh0dHAiOworICAgICAgICBtX3N1cHBvcnRl
ZFNjaGVtZXNbMV0gPSAiaHR0cHMiOworICAgICAgICBtX3N1cHBvcnRlZFNjaGVtZXNbMl0gPSAi
ZmlsZSI7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAg
ICB7CisgICAgICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KKyAgICAg
ICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDAsIDAsIDApOworICAgICAgICBtX3dlYlZp
ZXctPmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAgIH0KKworICAg
IHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5jbG9zZSgpOwor
ICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJs
LCBjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVzcG9u
c2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAgcmVz
cG9uc2Uuc2V0TUlNRVR5cGUoInRleHQvaHRtbCIpOworICAgICAgICBzdGQ6OnN0cmluZyBmaWxl
UGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOworICAgICAg
ICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb24vIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4
KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNw
b25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQg
bG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAgICAgV2ViVVJM
UmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAg
ICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBtX3dlYlZpZXct
Pm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBz
dXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1cHBv
cnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCB3ZWJWZWN0b3JDb250YWlucyhjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgdmVjdG9y
LCBjaGFyKiB1cmwpCisgICAgeworICAgICAgICByZXR1cm4gdmVjdG9yLmNvbnRhaW5zKFdlYlVS
TChHVVJMKHVybCkpKTsKKyAgICB9CisKKyAgICAvLyBVc2VmdWwgZm9yIGRlYnVnZ2luZy4KKyAg
ICBzdGF0aWMgdm9pZCBwcmludFdlYlVSTHMoY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIHVybHMp
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHVybHMuc2l6ZSgpOyBpKysp
CisgICAgICAgICAgICBwcmludGYoIiVzXG4iLCB1cmxzW2ldLnNwZWMoKS5kYXRhKCkpOworICAg
IH0KKworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJWZWN0b3I8V2ViQ1N0cmluZz4g
bV9zdXBwb3J0ZWRTY2hlbWVzOworCitwcml2YXRlOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCBt
X3dlYkZyYW1lQ2xpZW50OworfTsKKworVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgSFRN
TE5vZGVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQu
CisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRG
OCgic2ltcGxlX3BhZ2UuaHRtbCIpKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVS
TCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgorICAgIFdlYlZlY3RvcjxXZWJV
Ukw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXNvdXJjZXM7CisgICAgQVNTRVJU
X1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKAorICAgICAgICBt
X3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlcywgJmZyYW1lcykpOyAgICAK
KworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFtZSBoYXZlIGJl
ZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSgxLCBmcmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUg
c2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKworICAgIEVYUEVDVF9FUSgxNCwg
cmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuZXhh
bXBsZS5jb20vYmVhdXRpZnVsbC5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLmpzIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vYm9keUJhY2tncm91bmQuanBnIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYXdlc29tZS5wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9pbWFnZUJ1dHRvbi5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90YWJsZUJhY2tncm91bmQucG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vdHJCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3RkQmFja2dyb3Vu
ZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy5ldmVuZS5mci9jaXRhdGlvbnMvYXV0ZXVyLnBocD9pZGE9NDYiKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy5icmFp
bnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVzX2Rhcndpbi5odG1sIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vd2h5X2RlbGV0ZWQuaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9pbnNlcnRlZC5odG1sIikp
OworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHBzOi8v
d3d3LnNlY3VyZS5jb20vaHR0cHMuZ2lmIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImZpbGU6Ly9jL215X2ZvbGRlci9maWxlLmdpZiIpKTsKK30KKwor
VEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgTXVsdGlwbGVGcmFtZXMpCit7CisgICAgLy8g
UmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJh
bWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIp
KTsKKyAgICBXZWJVUkwgaW5uZXJGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
c2ltcGxlX2lmcmFtZS5odG1sIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGlubmVyRnJh
bWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZV9pZnJhbWUuaHRtbCIpKTsKKyAgICAv
LyBJZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCByZXNvdXJjZSBmb3IgYXdlc29tZS5wbmcs
IGl0IGNhdXNlcyB0aGUKKyAgICAvLyBkb2N1bWVudCBsb2FkZXIgb2YgdGhlIGlmcmFtZSB0aGF0
IGhhcyBpdCBhcyBpdHMgc3JjIHRvIGFzc2VydCBvbiBjbG9zZSwKKyAgICAvLyBub3Qgc3VyZSB3
aHkuCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
YXdlc29tZS5wbmciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiYXdlc29tZS5wbmciKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVS
TCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgorICAgIFdlYlZlY3RvcjxXZWJV
Ukw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXNvdXJjZXM7CisgICAgQVNTRVJU
X1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKAorICAgICAgICBt
X3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlcywgJmZyYW1lcykpOyAgICAK
KworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFtZSBoYXZlIGJl
ZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSgyLCBmcmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUg
c2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3NpbXBsZV9pZnJhbWUu
aHRtbCIpKTsKKworICAgIEVYUEVDVF9FUSgyLCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUg
c2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL2lubmVyRnJhbWUucG5nIikpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmcNCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24v
YXdlc29tZS5wbmcJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmcJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKKwpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0
bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACis8aHRtbD4KKzwhLS0KKyAgICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQg
V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNv
cnJlY3RseSB0aGUgZXhwZWN0ZWQgcmVzb3VyY2VzIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxl
IGZyYW1lcy4gCistLT4KKworPGJvZHk+CisKKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorPGlt
ZyBzcmM9ImlubmVyRnJhbWUucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9w
YWdlLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVf
cGFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4KKzwhLS0KKyAg
ICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJp
ZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNvcnJlY3RseSB0aGUgZXhwZWN0ZWQgcmVz
b3VyY2VzIGZyb20gdmFyaW91cyBIVE1MIG5vZGVzLgorLS0+CisKKzxoZWFkPgorPCEtLSBTdHls
ZSBzaGVldCBsaW5rcyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPGxpbmsgcmVsPSJzdHlsZXNo
ZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iZWF1dGlm
dWxsLmNzcyIvPgorPCEtLSBPdGhlciBsaW5rIHNob3VsZCBOT1QgYmUgcmV0cmlldmVkIC0tPgor
PGxpbmsgcmVsPSJjb3B5cmlnaHQiIHR5cGU9InRleHQvcGxhaW4iIGhyZWY9Imh0dHA6Ly93d3cu
ZXhhbXBsZS5jb20vY29weXJpZ2h0Ii8+Cis8IS0tIFNjcmlwdHMgc2hvdWxkIGJlIHJldHJpZXZl
ZCAtLT4KKzxzY3JpcHQgc3JjPSJhd2Vzb21lLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKworPCEt
LSBJbWFnZXMgYXJlIGFsd2F5cyByZXRyaWV2ZWQgLS0+Cis8Ym9keSBiYWNrZ3JvdW5kPSJib2R5
QmFja2dyb3VuZC5qcGciPgorCis8IS0tIFR3aWNlIHRvIG1ha2Ugc3VyZSB3ZSBvbmx5IHJlcG9y
dCBlYWNoIHJlc291cmNlIG9uY2UgLS0+Cis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKzxpbWcg
c3JjPSJhd2Vzb21lLnBuZyIvPgorCis8Zm9ybT4KKyAgPGlucHV0IHR5cGU9ImltYWdlIiBzcmM9
ImltYWdlQnV0dG9uLnBuZyIvPgorPC9mb3JtPgorCis8dGFibGUgYmFja2dyb3VuZD0idGFibGVC
YWNrZ3JvdW5kLnBuZyI+CisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91bmQucG5nIj4KKyAg
ICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAgPC90cj4gIAorICA8
dHIgYmFja2dyb3VuZD0idHJCYWNrZ3JvdW5kLnBuZyI+CisgICAgPHRkIGJhY2tncm91bmQ9InRk
QmFja2dyb3VuZC5wbmciPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8IS0tIFNvbWUgbW9y
ZSBvYnNjdXJlIHRhZ3MgLS0+Cis8YmxvY2txdW90ZSBjaXRlPSJodHRwOi8vd3d3LmV2ZW5lLmZy
L2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiI+PC9ibG9ja3F1b3RlPgorPHEgQ0lURT0iaHR0
cDovL3d3dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVzX2Rhcndpbi5o
dG1sIj48L3E+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsIGNpdGU9IndoeV9kZWxldGVk
Lmh0bWwiPmJsdWU8L2RlbD4gPGlucz5yZWQ8L2lucz4hPC9wPgorPHA+TXkgZmF2b3JpdGUgY29s
b3IgaXMgPGRlbD5ibHVlPC9kZWw+IDxpbnMgY2l0ZT0id2h5X2luc2VydGVkLmh0bWwiPnJlZDwv
aW5zPiE8L3A+CisKKzwhLS0gTWFrZSBzdXJlIHdlIG9ubHkgcmV0cmlldmUgVVJMcyB3aXRoIHRo
ZSByaWdodCBzY2hlbWVzIC0tPgorPGltZyBzcmM9Imh0dHBzOi8vd3d3LnNlY3VyZS5jb20vaHR0
cHMuZ2lmIi8+ICA8IS0tIEhUVFBTIGlzIE9LIC0tPgorPGltZyBzcmM9ImZpbGU6Ly9jL215X2Zv
bGRlci9maWxlLmdpZiIvPiAgPCEtLSBmaWxlIGlzIE9LIC0tPgorPGltZyBzcmM9ImZ0cDovL2Z0
cC5jb20vZnRwLmdpZiIvPiAgPCEtLSBGVFAgaXMgbm90IE9LIC0tPgorPGltZyBzcmM9InVua25v
d246Ly91bmtvd24uY29tL3Vua25vd24uZ2lmIi8+ICA8IS0tIFVua25vd24gc2NoZW1lcyBhcmUg
bm90IE9LIC0tPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbA0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXph
dGlvbi90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxOCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdlIGlzIHVzZWQg
dG8gdGVzdCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRy
aWV2ZXMKKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVuIGRlYWxpbmcg
d2l0aCBtdWx0aXBsZSBmcmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8IS0tIFJlc291cmNlcyB1
c2VkIGJ5IGEgZnJhbWUgYW5kIGEgdGFnIHNob3VsZCBiZSBvbmx5IHJlcG9ydGVkIG9uY2UgLS0+
Cis8aWZyYW1lIHNyYz0iYXdlc29tZS5wbmciPjwvaWZyYW1lPgorPGltZyBzcmM9ImF3ZXNvbWUu
cG5nIi8+CisKKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorPGlm
cmFtZSBzcmM9InNpbXBsZV9pZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9o
dG1sPgo=
</data>
<flag name="review"
          id="78079"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85968</attachid>
            <date>2011-03-16 13:54:21 -0700</date>
            <delta_ts>2011-03-16 13:59:00 -0700</delta_ts>
            <desc>Addressed Adam&apos;s comments</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>28169</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjczKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NSBAQAorMjAxMS0wMy0xNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmNvbnRh
aW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJSZXNvdXJj
ZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9y
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2Vz
KToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dl
YlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb246IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vZW1iZWRfaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0X2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5o
dG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xNSAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVz
dC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJl
SGVscGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
V2ViRnJhbWVUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBbJ09TPT0ibWFjIicsIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlBhZ2VTZXJpYWxpemVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOworY2xh
c3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKIC8v
IEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ug
d2l0aCBsaXN0cwpAQCAtNjksNiArNzEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
bG9jYWxEaXJlY3RvcnlOYW1lKTsKIAorICAgIC8vIFJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2Ug
Zm9yIHRoZSBwYXNzZWQgdmlldywgaW5jbHVkaW5nIHRoZSBtYWluIGZyYW1lCisgICAgLy8gYW5k
IHN1Yi1mcmFtZXMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcmVzb3VyY2VzIHdlcmUgcmV0cmlldmVk
CisgICAgLy8gc3VjY2Vzc2Z1bGx5LgorICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgcmV0cmll
dmVBbGxSZXNvdXJjZXMoV2ViVmlldyosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNj
aGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1lcyk7CisKICAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2Vz
LiBDb25zaWRlcgogICAgIC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCiAKQEAg
LTgwLDYgKzkwLDYgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBn
ZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwog
fTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNp
b24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0dXJuIGEuc3BlYygpIDwgYi5zcGVjKCk7CiB9CiAKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCit7
CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21wYXJlKGIuc3BlYygpKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lv
biA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lU
X0FTU0VSVChpIDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fcHRyW2ldOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYg
KG1fcHRyW2ldID09IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBUKiBkYXRhKCkgeyByZXR1
cm4gbV9wdHI7IH0KICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0K
QEAgLTE3Miw2ICsxODEsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9OwogCi19
ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1w
bC5jcHAJKHJldmlzaW9uIDgxMTc0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGF0YVNvdXJjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgV2Vi
RGF0YVNvdXJjZUltcGw6OldlYkRhdGFTb3VyY2VJbXBsKGNvbgogICAgICAgICAvLyBmcmFtZSwg
d2hpY2ggcmVzdWx0cyBpbiBhIHNlY29uZCBkYXRhIHNvdXJjZSBiZWluZyBjcmVhdGVkLiAgV2Ug
d2FudAogICAgICAgICAvLyB0byB3YWl0IHRvIGF0dGFjaCB0aGUgV2ViUGx1Z2luTG9hZE9ic2Vy
dmVyIHRvIHRoYXQgZGF0YSBzb3VyY2UuCiAgICAgICAgIGlmICghcmVxdWVzdC51cmwoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXItPnVy
bCgpID09IHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxv
YWRPYnNlcnZlci0+dXJsKCkgPT0gV2ViVVJMKHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAg
IG1fcGx1Z2luTG9hZE9ic2VydmVyLnNldChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIpOwogICAg
ICAgICAgICAgbV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyID0gMDsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
CShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDE1MiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAor
I2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisKK0tVUkwgZ2V0U3ViUmVz
b3VyY2VVUkxGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAwOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW1nVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2Ny
aXB0VGFnKSkgeworICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0cjsK
KyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykp
IHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigp
KQorICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAg
ICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykpIHsK
KyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyOworICAg
IH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcp
CisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykK
KyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcp
CisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFn
KSkgeworICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6Y2l0ZUF0dHI7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAg
ICAgICAgLy8gSWYgdGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBpZ25vcmUgaXQuCisgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
Ojp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mgb2Ygc3ViLXJlc291cmNlcyB3aGljaAorICAgICAg
ICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1zaGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250LWZh
Y2UsIHVybCgpLCBldGMuCisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6
aHJlZkF0dHI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvYmplY3RUYWcpKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5h
bWVzOjpkYXRhQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjplbWJlZFRhZykpIHsKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNy
Y0F0dHI7CisgICAgfQorCisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKQorICAgICAgICByZXR1cm4g
S1VSTCgpOworCisgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRy
aWJ1dGVOYW1lKTsKKyAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0aCgiamF2
YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgIAorICAgIHJldHVy
biBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3ZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVS
THMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291
cmNlVVJMcykKK3sKKyAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9jZXNz
IGl0IGxhdGVyIGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZnJhbWVUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJl
ZFRhZykpCisgICAgICAgICAgICAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsK
KyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50
Kj4oZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdGVkRnJhbWVzLT5maW5kKGZyYW1lKSA9PSBub3RGb3VuZCkKKyAgICAg
ICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgS1VSTCB1cmwgPSBnZXRTdWJSZXNvdXJjZVVS
TEZyb21FbGVtZW50KGVsZW1lbnQpOworICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47IC8vIE5vIHN1YnJlc291cmNlIGZvciB0aGlzIG5vZGUu
CisKKyAgICAvLyBJZ25vcmUgVVJMcyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xz
LiBTaW5jZSB0aGUgRlRQIHByb3RvY29sCisgICAgLy8gZG9lcyBubyBoYXZlIGEgY2FjaGUgbWVj
aGFuaXNtLCB3ZSBza2lwIGl0IGFzIHdlbGwuCisgICAgaWYgKCF1cmwucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSAmJiAhdXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChyZXNvdXJjZVVSTHMtPmZpbmQodXJsKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVzb3VyY2VV
UkxzLT5hcHBlbmQodXJsKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZy
YW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6
OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zp
c2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVV
UkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3Vy
Y2VVUkxzKQoreworICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBp
cyBpbnZhbGlkLCBpZ25vcmUgaXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZy
YW1lVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1l
cyBmcm9tIHVuc3VwcG9ydGVkIHNjaGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFs
c2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmcmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJp
bmc+KHN1cHBvcnRlZFNjaGVtZXNbaV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRT
Y2hlbWUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFpc1ZhbGlkU2NoZW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZl
IGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFt
ZXMtPmZpbmQoZnJhbWUpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgdmlzaXRl
ZEZyYW1lcy0+YXBwZW5kKGZyYW1lKTsKKyAgICBpZiAoZnJhbWVVUkxzLT5maW5kKGZyYW1lVVJM
KSA9PSBub3RGb3VuZCkKKyAgICAgICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAK
KyAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZSBv
ZiB0aGUgZG9jdW1lbnQuCisgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGxOb2RlcyA9
IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFsbE5vZGVz
LT5pdGVtKGkpOworICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIEhUTUwgcmVz
b3VyY2VzLgorICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLApAQCAtNTgsNiArMTkxLDQ4IEBAIGJvb2wgV2ViUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmEKICAgICByZXR1cm4gc2VyaWFsaXplckltcGwu
c2VyaWFsaXplKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVz
b3VyY2VzKFdlYlZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8
V2ViVVJMPiogcmVzb3VyY2VVUkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1lVVJMcykgeworICAgIFdlYkZyYW1l
SW1wbCogbWFpbkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4odmlldy0+bWFpbkZy
YW1lKCkpOworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBWZWN0b3I8RnJhbWUqPiBmcmFtZXNUb1Zpc2l0OworICAgIFZlY3RvcjxGcmFtZSo+IHZpc2l0
ZWRGcmFtZXM7CisgICAgVmVjdG9yPEtVUkw+IGZyYW1lS1VSTHM7CisgICAgVmVjdG9yPEtVUkw+
IHJlc291cmNlS1VSTHM7CisgICAgCisgICAgLy8gTGV0J3MgcmV0cmlldmUgdGhlIHJlc291cmNl
cyBmcm9tIGV2ZXJ5IGZyYW1lIGluIHRoaXMgcGFnZS4KKyAgICBmcmFtZXNUb1Zpc2l0LmFwcGVu
ZChtYWluRnJhbWUtPmZyYW1lKCkpOworICAgIHdoaWxlICghZnJhbWVzVG9WaXNpdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVzVG9WaXNpdFswXTsKKyAgICAgICAg
ZnJhbWVzVG9WaXNpdC5yZW1vdmUoMCk7CisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJh
bWUoZnJhbWUsIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnZpc2l0ZWRGcmFtZXMsICZmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZmcmFtZUtVUkxzLCAmcmVzb3VyY2VLVVJMcyk7CisgICAgfQorCisg
ICAgLy8gQ29udmVydHMgdGhlIHJlc3VsdHMgdG8gV2ViVVJMcy4KKyAgICBXZWJWZWN0b3I8V2Vi
VVJMPiByZXN1bHRSZXNvdXJjZVVSTHMocmVzb3VyY2VLVVJMcy5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VLVVJMcy5zaXplKCk7ICsraSkgeworICAgICAgICBy
ZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSByZXNvdXJjZUtVUkxzW2ldOworICAgICAgICAvLyBBIGZy
YW1lJ3Mgc3JjIGNhbiBwb2ludCB0byB0aGUgc2FtZSBVUkwgYXMgYW5vdGhlciByZXNvdXJjZSwg
a2VlcCB0aGUKKyAgICAgICAgLy8gcmVzb3VyY2UgVVJMIG9ubHkgaW4gc3VjaCBjYXNlcy4KKyAg
ICAgICAgc2l6ZV90IGluZGV4ID0gZnJhbWVLVVJMcy5maW5kKHJlc291cmNlS1VSTHNbaV0pOwor
ICAgICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgICAgICBmcmFtZUtVUkxzLnJl
bW92ZShpbmRleCk7CisgICAgfQorICAgICpyZXNvdXJjZVVSTHMgPSByZXN1bHRSZXNvdXJjZVVS
THM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0RnJhbWVVUkxzKGZyYW1lS1VSTHMuc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lS1VSTHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlc3VsdEZyYW1lVVJMc1tpXSA9IGZyYW1lS1VSTHNbaV07CisgICAgKmZyYW1l
VVJMcyA9IHJlc3VsdEZyYW1lVVJMczsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogV2Vi
U3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24o
Y29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KQogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCI8bWV0
YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNl
dD0iLCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihjaGFyc2V0KSwgIlwiPiIpOwpAQCAtNzcs
NCArMjUyLDQgQEAgV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhcwogICAg
IHJldHVybiBtYWtlU3RyaW5nKCI8YmFzZSBocmVmPVwiLlwiIHRhcmdldD1cIiIsIHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZyY+KGJhc2VUYXJnZXQpLCAiXCI+Iik7CiB9CiAKLX0gIC8vIG5hbWVz
cGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCShyZXZpc2lvbiA4MTE3NCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKICNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVz
dC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBh
Z2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
LmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAi
V2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0
V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworfTsKKworY2xhc3MgV2Vi
UGFnZVNlcmlhbGl6ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAg
IFdlYlBhZ2VTZXJpYWxpemVyVGVzdCgpIDogbV93ZWJWaWV3KDApLCBtX3N1cHBvcnRlZFNjaGVt
ZXMoM1UpCisgICAgeworICAgICAgICBtX3N1cHBvcnRlZFNjaGVtZXNbMF0gPSAiaHR0cCI7Cisg
ICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1sxXSA9ICJodHRwcyI7CisgICAgICAgIG1fc3VwcG9y
dGVkU2NoZW1lc1syXSA9ICJmaWxlIjsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRo
ZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCwgMCwgMCk7
CisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOworICAgICAgICBtX3dl
YlZpZXctPmNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQo
Y29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUpCisgICAgeworICAg
ICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6
ZSgpOworICAgICAgICByZXNwb25zZS5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisgICAgICAg
IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIo
KS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi8iKTsKKyAgICAgICAgZmlsZVBhdGguYXBw
ZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZWdpc3Rlck1v
Y2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5Ub3BGcmFtZShjb25zdCBHVVJMJiB1cmwpCisgICAg
eworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVybFJlcXVlc3Q7CisgICAgICAgIHVybFJlcXVlc3Qu
aW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxSZXF1ZXN0LnNldFVSTChXZWJVUkwodXJsKSk7Cisg
ICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOwor
ICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBlbmRpbmcgcmVxdWVzdCBnZXQgc2VydmVkLgorICAg
ICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIHdlYlZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3Rv
cjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiB2ZWN0
b3IuY29udGFpbnMoV2ViVVJMKEdVUkwodXJsKSkpOworICAgIH0KKworICAgIC8vIFVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorICAgIHN0YXRpYyB2b2lkIHByaW50V2ViVVJMcyhjb25zdCBXZWJWZWN0
b3I8V2ViVVJMPiYgdXJscykKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dXJscy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHVybHNbaV0uc3Bl
YygpLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworICAgIFdlYlZl
Y3RvcjxXZWJDU3RyaW5nPiBtX3N1cHBvcnRlZFNjaGVtZXM7CisKK3ByaXZhdGU6CisgICAgVGVz
dFdlYkZyYW1lQ2xpZW50IG1fd2ViRnJhbWVDbGllbnQ7Cit9OworCitURVNUX0YoV2ViUGFnZVNl
cmlhbGl6ZXJUZXN0LCBIVE1MTm9kZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBm
cmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfcGFnZS5odG1sIikpOworICAgIGxvYWRVUkxJblRv
cEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisg
ICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291
cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNv
dXJjZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9zdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2Vz
LCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20g
dGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5z
aXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJV
RSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tIikpOworCisg
ICAgRVhQRUNUX0VRKDE0LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5v
IGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iZWF1dGlmdWxsLmNzcyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3
ZXNvbWUuanMiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ib2R5QmFja2dyb3VuZC5qcGciKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9h
d2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltYWdlQnV0dG9uLnBuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Rh
YmxlQmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90ckJhY2tncm91bmQucG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vdGRCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhw
P2lkYT00NiIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNfZGFy
d2luLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlfZGVsZXRlZC5odG1sIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vd2h5
X2luc2VydGVkLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cHM6Ly93d3cuc2VjdXJlLmNvbS9odHRwcy5naWYiKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiZmlsZTovL2MvbXlfZm9sZGVyL2Zp
bGUuZ2lmIikpOworfQorCitURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBNdWx0aXBsZUZy
YW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwg
dG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUu
aHRtbCIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlX2lmcmFtZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29iamVjdF9pZnJhbWUuaHRtbCIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJvYmplY3Rf
aWZyYW1lLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vZW1iZWRfaWZyYW1lLmh0bWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW1iZWRfaWZyYW1lLmh0bWwiKSk7CisgICAgLy8gSWYg
d2UgZG9uJ3QgcmVnaXN0ZXIgYSBtb2NrZWQgcmVzb3VyY2UgZm9yIGF3ZXNvbWUucG5nLCBpdCBj
YXVzZXMgdGhlCisgICAgLy8gZG9jdW1lbnQgbG9hZGVyIG9mIHRoZSBpZnJhbWUgdGhhdCBoYXMg
aXQgYXMgaXRzIHNyYyB0byBhc3NlcnQgb24gY2xvc2UsCisgICAgLy8gbm90IHN1cmUgd2h5Lgor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNv
bWUucG5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgo
ImF3ZXNvbWUucG5nIikpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOwor
CisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291cmNlcy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBm
cmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzb3VyY2VzOworICAgIEFTU0VSVF9UUlVF
KFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcygKKyAgICAgICAgbV93ZWJW
aWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMsICZmcmFtZXMpKTsgICAgCisKKyAg
ICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgZnJhbWUgaGF2ZSBiZWVuIHJl
dHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoNCwgZnJhbWVzLnNpemUoKSk7IC8vIFRoZXJlIHNob3Vs
ZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZy
YW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9y
Q29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwi
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9vYmplY3RfaWZyYW1lLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9lbWJlZF9pZnJhbWUuaHRt
bCIpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hv
dWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2lubmVyRnJhbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZmxhc2guc3dmIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vbXVz
aWMubWlkIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vb2JqZWN0LnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVkLnBuZyIp
KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2F3ZXNvbWUucG5nCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9pZnJh
bWUuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9p
ZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD4NCisNCis8aW1n
IHNyYz0iZW1iZWQucG5nIi8+DQorDQorPC9odG1sPg0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9vYmplY3RfaWZyYW1lLmh0bWwNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vb2JqZWN0X2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL29iamVjdF9pZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD4NCisNCis8aW1nIHNyYz0ib2Jq
ZWN0LnBuZyIvPg0KKw0KKzwvaHRtbD4NCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L3NpbXBsZV9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1
c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMg
cmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBkZWFs
aW5nIHdpdGggbXVsdGlwbGUgZnJhbWVzLiAKKy0tPgorCis8Ym9keT4KKworPGltZyBzcmM9ImF3
ZXNvbWUucG5nIi8+Cis8aW1nIHNyYz0iaW5uZXJGcmFtZS5wbmciLz4KKworPC9ib2R5PgorCis8
L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAK
KzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdl
U2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5
IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgZnJvbSB2YXJpb3VzIEhUTUwgbm9kZXMuCistLT4KKwor
PGhlYWQ+Cis8IS0tIFN0eWxlIHNoZWV0IGxpbmtzIHNob3VsZCBiZSByZXRyaWV2ZWQgLS0+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vd3d3LmV4
YW1wbGUuY29tL2JlYXV0aWZ1bGwuY3NzIi8+Cis8IS0tIE90aGVyIGxpbmsgc2hvdWxkIE5PVCBi
ZSByZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9ImNvcHlyaWdodCIgdHlwZT0idGV4dC9wbGFpbiIg
aHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9jb3B5cmlnaHQiLz4KKzwhLS0gU2NyaXB0cyBz
aG91bGQgYmUgcmV0cmlldmVkIC0tPgorPHNjcmlwdCBzcmM9ImF3ZXNvbWUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorCis8IS0tIEltYWdlcyBhcmUgYWx3YXlzIHJldHJpZXZlZCAtLT4KKzxib2R5
IGJhY2tncm91bmQ9ImJvZHlCYWNrZ3JvdW5kLmpwZyI+CisKKzwhLS0gVHdpY2UgdG8gbWFrZSBz
dXJlIHdlIG9ubHkgcmVwb3J0IGVhY2ggcmVzb3VyY2Ugb25jZSAtLT4KKzxpbWcgc3JjPSJhd2Vz
b21lLnBuZyIvPgorPGltZyBzcmM9ImF3ZXNvbWUucG5nIi8+CisKKzxmb3JtPgorICA8aW5wdXQg
dHlwZT0iaW1hZ2UiIHNyYz0iaW1hZ2VCdXR0b24ucG5nIi8+Cis8L2Zvcm0+CisKKzx0YWJsZSBi
YWNrZ3JvdW5kPSJ0YWJsZUJhY2tncm91bmQucG5nIj4KKyAgPHRyIGJhY2tncm91bmQ9InRyQmFj
a2dyb3VuZC5wbmciPgorICAgIDx0ZCBiYWNrZ3JvdW5kPSJ0ZEJhY2tncm91bmQucG5nIj48L3Rk
PgorICA8L3RyPiAgCisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91bmQucG5nIj4KKyAgICA8
dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+
CisKKzwhLS0gU29tZSBtb3JlIG9ic2N1cmUgdGFncyAtLT4KKzxibG9ja3F1b3RlIGNpdGU9Imh0
dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRpb25zL2F1dGV1ci5waHA/aWRhPTQ2Ij48L2Jsb2NrcXVv
dGU+Cis8cSBDSVRFPSJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9j
L2NoYXJsZXNfZGFyd2luLmh0bWwiPjwvcT4KKzxwPk15IGZhdm9yaXRlIGNvbG9yIGlzIDxkZWwg
Y2l0ZT0id2h5X2RlbGV0ZWQuaHRtbCI+Ymx1ZTwvZGVsPiA8aW5zPnJlZDwvaW5zPiE8L3A+Cis8
cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsPmJsdWU8L2RlbD4gPGlucyBjaXRlPSJ3aHlfaW5z
ZXJ0ZWQuaHRtbCI+cmVkPC9pbnM+ITwvcD4KKworPCEtLSBNYWtlIHN1cmUgd2Ugb25seSByZXRy
aWV2ZSBVUkxzIHdpdGggdGhlIHJpZ2h0IHNjaGVtZXMgLS0+Cis8aW1nIHNyYz0iaHR0cHM6Ly93
d3cuc2VjdXJlLmNvbS9odHRwcy5naWYiLz4gIDwhLS0gSFRUUFMgaXMgT0sgLS0+Cis8aW1nIHNy
Yz0iZmlsZTovL2MvbXlfZm9sZGVyL2ZpbGUuZ2lmIi8+ICA8IS0tIGZpbGUgaXMgT0sgLS0+Cis8
aW1nIHNyYz0iZnRwOi8vZnRwLmNvbS9mdHAuZ2lmIi8+ICA8IS0tIEZUUCBpcyBub3QgT0sgLS0+
Cis8aW1nIHNyYz0idW5rbm93bjovL3Vua293bi5jb20vdW5rbm93bi5naWYiLz4gIDwhLS0gVW5r
bm93biBzY2hlbWVzIGFyZSBub3QgT0sgLS0+CisKKzwvYm9keT4KKworPC9odG1sPgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9m
cmFtZS5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFt
ZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI3IEBACis8aHRtbD4KKzwhLS0KKyAgICBU
aGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZl
QWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNvcnJlY3RseSB0aGUgZXhwZWN0ZWQgcmVzb3Vy
Y2VzIHdoZW4gZGVhbGluZyB3aXRoIG11bHRpcGxlIGZyYW1lcy4gCistLT4KKworPGJvZHk+CisK
KzwhLS0gUmVzb3VyY2VzIHVzZWQgYnkgYSBmcmFtZSBhbmQgYSB0YWcgc2hvdWxkIGJlIG9ubHkg
cmVwb3J0ZWQgb25jZSAtLT4KKzxpZnJhbWUgc3JjPSJhd2Vzb21lLnBuZyI+PC9pZnJhbWU+Cis8
aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKworPGlmcmFtZSBzcmM9InNpbXBsZV9pZnJhbWUuaHRt
bCI+PC9pZnJhbWU+Cis8aWZyYW1lIHNyYz0ic2ltcGxlX2lmcmFtZS5odG1sIj48L2lmcmFtZT4K
KworPCEtLSBPYmplY3QgdGFncyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaWZyYW1lcyAtLT4KKwor
PG9iamVjdCBkYXRhPSJvYmplY3RfaWZyYW1lLmh0bWwiPjwvb2JqZWN0PgorPG9iamVjdCBkYXRh
PSJmbGFzaC5zd2YiPjwvb2JqZWN0PgorCis8IS0tIEVtYmVkIHRhZ3MgY2FuIGJlIHVzZWQgdG8g
Y3JlYXRlIGlmcmFtZXMgYXMgd2VsbCAtLT4KKzxlbWJlZCBzcmM9ImVtYmVkX2lmcmFtZS5odG1s
Ij48L29iamVjdD4KKzxlbWJlZCBzcmM9Im11c2ljLm1pZCI+PC9vYmplY3Q+CisKKzwvYm9keT4K
KworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85970</attachid>
            <date>2011-03-16 13:59:00 -0700</date>
            <delta_ts>2011-03-16 15:24:13 -0700</delta_ts>
            <desc>Fixed style...</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>28159</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjczKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NSBAQAorMjAxMS0wMy0xNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRo
ZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisg
ICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykg
dG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBh
Z2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2Vi
S2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAg
ICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmNvbnRh
aW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJSZXNvdXJj
ZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9y
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2Vz
KToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dl
YlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb246IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vZW1iZWRfaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0X2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5o
dG1sOiBBZGRlZC4KKwogMjAxMS0wMy0xNSAgSWx5YSBTaGVybWFuICA8aXNoZXJtYW5AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTgzMiw2ICs4MzIsNyBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVz
dC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJl
SGVscGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
V2ViRnJhbWVUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBbJ09TPT0ibWFjIicsIHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YlBhZ2VTZXJpYWxpemVyLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3MgV2ViVVJMOworY2xh
c3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKIC8v
IEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBjdXJyZW50IHBhZ2Ug
d2l0aCBsaXN0cwpAQCAtNjksNiArNzEsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYg
bG9jYWxEaXJlY3RvcnlOYW1lKTsKIAorICAgIC8vIFJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2Ug
Zm9yIHRoZSBwYXNzZWQgdmlldywgaW5jbHVkaW5nIHRoZSBtYWluIGZyYW1lCisgICAgLy8gYW5k
IHN1Yi1mcmFtZXMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcmVzb3VyY2VzIHdlcmUgcmV0cmlldmVk
CisgICAgLy8gc3VjY2Vzc2Z1bGx5LgorICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgcmV0cmll
dmVBbGxSZXNvdXJjZXMoV2ViVmlldyosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNj
aGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1lcyk7CisKICAgICAv
LyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0aW5nIHB1cnBvc2Vz
LiBDb25zaWRlcgogICAgIC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGluc3RlYWQuCiAKQEAg
LTgwLDYgKzkwLDYgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBn
ZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwog
fTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgNCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkocmV2aXNp
b24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAkod29y
a2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0dXJuIGEuc3BlYygpIDwgYi5zcGVjKCk7CiB9CiAKK2lu
bGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCit7
CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21wYXJlKGIuc3BlYygpKTsKK30KKworaW5saW5lIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYgYikKK3sKKyAgICBy
ZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJWZWN0b3IuaA0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCShyZXZpc2lv
biA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDE1IEBAIHB1YmxpYzoKICAgICAgICAgV0VCS0lU
X0FTU0VSVChpIDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fcHRyW2ldOwogICAgIH0KKyAg
ICAKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeworICAgICAgICAgICAgaWYg
KG1fcHRyW2ldID09IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBUKiBkYXRhKCkgeyByZXR1
cm4gbV9wdHI7IH0KICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9wdHI7IH0K
QEAgLTE3Miw2ICsxODEsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9OwogCi19
ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHANCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1w
bC5jcHAJKHJldmlzaW9uIDgxMTc0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RGF0YVNvdXJjZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNyArMTc0LDcgQEAgV2Vi
RGF0YVNvdXJjZUltcGw6OldlYkRhdGFTb3VyY2VJbXBsKGNvbgogICAgICAgICAvLyBmcmFtZSwg
d2hpY2ggcmVzdWx0cyBpbiBhIHNlY29uZCBkYXRhIHNvdXJjZSBiZWluZyBjcmVhdGVkLiAgV2Ug
d2FudAogICAgICAgICAvLyB0byB3YWl0IHRvIGF0dGFjaCB0aGUgV2ViUGx1Z2luTG9hZE9ic2Vy
dmVyIHRvIHRoYXQgZGF0YSBzb3VyY2UuCiAgICAgICAgIGlmICghcmVxdWVzdC51cmwoKS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXItPnVy
bCgpID09IHJlcXVlc3QudXJsKCkpOworICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxv
YWRPYnNlcnZlci0+dXJsKCkgPT0gV2ViVVJMKHJlcXVlc3QudXJsKCkpKTsKICAgICAgICAgICAg
IG1fcGx1Z2luTG9hZE9ic2VydmVyLnNldChtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIpOwogICAg
ICAgICAgICAgbV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyID0gMDsKICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
CShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMxLDE1MiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1l
T3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAor
I2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAj
aW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgi
CiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisKK0tVUkwgZ2V0U3ViUmVz
b3VyY2VVUkxGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGNvbnN0IFF1YWxp
ZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAwOworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aW1nVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2Ny
aXB0VGFnKSkgeworICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0cjsK
KyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykp
IHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigp
KQorICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAg
ICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykpIHsK
KyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyOworICAg
IH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVUYWcp
CisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykK
KyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcp
CisgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFn
KSkgeworICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6Y2l0ZUF0dHI7CisgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAg
ICAgICAgLy8gSWYgdGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBpZ25vcmUgaXQuCisgICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
Ojp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1
cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mgb2Ygc3ViLXJlc291cmNlcyB3aGljaAorICAgICAg
ICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1zaGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250LWZh
Y2UsIHVybCgpLCBldGMuCisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6
aHJlZkF0dHI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvYmplY3RUYWcpKSB7CisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5h
bWVzOjpkYXRhQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjplbWJlZFRhZykpIHsKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNy
Y0F0dHI7CisgICAgfQorCisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKQorICAgICAgICByZXR1cm4g
S1VSTCgpOworCisgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRy
aWJ1dGVOYW1lKTsKKyAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0aCgiamF2
YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgIAorICAgIHJldHVy
biBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3ZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVS
THMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291
cmNlVVJMcykKK3sKKyAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9jZXNz
IGl0IGxhdGVyIGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZnJhbWVUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJl
ZFRhZykpCisgICAgICAgICAgICAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsK
KyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50
Kj4oZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAg
ICAgICAgIGlmICh2aXNpdGVkRnJhbWVzLT5maW5kKGZyYW1lKSA9PSBub3RGb3VuZCkKKyAgICAg
ICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgS1VSTCB1cmwgPSBnZXRTdWJSZXNvdXJjZVVS
TEZyb21FbGVtZW50KGVsZW1lbnQpOworICAgIGlmICh1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm47IC8vIE5vIHN1YnJlc291cmNlIGZvciB0aGlzIG5vZGUu
CisKKyAgICAvLyBJZ25vcmUgVVJMcyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xz
LiBTaW5jZSB0aGUgRlRQIHByb3RvY29sCisgICAgLy8gZG9lcyBubyBoYXZlIGEgY2FjaGUgbWVj
aGFuaXNtLCB3ZSBza2lwIGl0IGFzIHdlbGwuCisgICAgaWYgKCF1cmwucHJvdG9jb2xJbkhUVFBG
YW1pbHkoKSAmJiAhdXJsLmlzTG9jYWxGaWxlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlm
IChyZXNvdXJjZVVSTHMtPmZpbmQodXJsKSA9PSBub3RGb3VuZCkKKyAgICAgICAgcmVzb3VyY2VV
UkxzLT5hcHBlbmQodXJsKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZy
YW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6
OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zp
c2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVV
UkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3Vy
Y2VVUkxzKQoreworICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBp
cyBpbnZhbGlkLCBpZ25vcmUgaXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZy
YW1lVVJMLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1l
cyBmcm9tIHVuc3VwcG9ydGVkIHNjaGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFs
c2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChmcmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJp
bmc+KHN1cHBvcnRlZFNjaGVtZXNbaV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRT
Y2hlbWUgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKCFpc1ZhbGlkU2NoZW1lKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZl
IGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFt
ZXMtPmZpbmQoZnJhbWUpICE9IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgdmlzaXRl
ZEZyYW1lcy0+YXBwZW5kKGZyYW1lKTsKKyAgICBpZiAoZnJhbWVVUkxzLT5maW5kKGZyYW1lVVJM
KSA9PSBub3RGb3VuZCkKKyAgICAgICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAK
KyAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggbm9kZSBv
ZiB0aGUgZG9jdW1lbnQuCisgICAgUmVmUHRyPEhUTUxBbGxDb2xsZWN0aW9uPiBhbGxOb2RlcyA9
IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9IGFsbE5vZGVz
LT5pdGVtKGkpOworICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIEhUTUwgcmVz
b3VyY2VzLgorICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLApAQCAtNTgsNiArMTkxLDQ4IEBAIGJvb2wgV2ViUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmEKICAgICByZXR1cm4gc2VyaWFsaXplckltcGwu
c2VyaWFsaXplKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVz
b3VyY2VzKFdlYlZpZXcqIHZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8
V2ViVVJMPiogcmVzb3VyY2VVUkxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1lVVJMcykgeworICAgIFdlYkZyYW1l
SW1wbCogbWFpbkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4odmlldy0+bWFpbkZy
YW1lKCkpOworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBWZWN0b3I8RnJhbWUqPiBmcmFtZXNUb1Zpc2l0OworICAgIFZlY3RvcjxGcmFtZSo+IHZpc2l0
ZWRGcmFtZXM7CisgICAgVmVjdG9yPEtVUkw+IGZyYW1lS1VSTHM7CisgICAgVmVjdG9yPEtVUkw+
IHJlc291cmNlS1VSTHM7CisgICAgCisgICAgLy8gTGV0J3MgcmV0cmlldmUgdGhlIHJlc291cmNl
cyBmcm9tIGV2ZXJ5IGZyYW1lIGluIHRoaXMgcGFnZS4KKyAgICBmcmFtZXNUb1Zpc2l0LmFwcGVu
ZChtYWluRnJhbWUtPmZyYW1lKCkpOworICAgIHdoaWxlICghZnJhbWVzVG9WaXNpdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVzVG9WaXNpdFswXTsKKyAgICAgICAg
ZnJhbWVzVG9WaXNpdC5yZW1vdmUoMCk7CisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJh
bWUoZnJhbWUsIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJnZpc2l0ZWRGcmFtZXMsICZmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZmcmFtZUtVUkxzLCAmcmVzb3VyY2VLVVJMcyk7CisgICAgfQorCisg
ICAgLy8gQ29udmVydHMgdGhlIHJlc3VsdHMgdG8gV2ViVVJMcy4KKyAgICBXZWJWZWN0b3I8V2Vi
VVJMPiByZXN1bHRSZXNvdXJjZVVSTHMocmVzb3VyY2VLVVJMcy5zaXplKCkpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VLVVJMcy5zaXplKCk7ICsraSkgeworICAgICAgICBy
ZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSByZXNvdXJjZUtVUkxzW2ldOworICAgICAgICAvLyBBIGZy
YW1lJ3Mgc3JjIGNhbiBwb2ludCB0byB0aGUgc2FtZSBVUkwgYXMgYW5vdGhlciByZXNvdXJjZSwg
a2VlcCB0aGUKKyAgICAgICAgLy8gcmVzb3VyY2UgVVJMIG9ubHkgaW4gc3VjaCBjYXNlcy4KKyAg
ICAgICAgc2l6ZV90IGluZGV4ID0gZnJhbWVLVVJMcy5maW5kKHJlc291cmNlS1VSTHNbaV0pOwor
ICAgICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAgICAgICAgICBmcmFtZUtVUkxzLnJl
bW92ZShpbmRleCk7CisgICAgfQorICAgICpyZXNvdXJjZVVSTHMgPSByZXN1bHRSZXNvdXJjZVVS
THM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0RnJhbWVVUkxzKGZyYW1lS1VSTHMuc2l6
ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZyYW1lS1VSTHMuc2l6ZSgpOyArK2kp
CisgICAgICAgIHJlc3VsdEZyYW1lVVJMc1tpXSA9IGZyYW1lS1VSTHNbaV07CisgICAgKmZyYW1l
VVJMcyA9IHJlc3VsdEZyYW1lVVJMczsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogV2Vi
U3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24o
Y29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KQogewogICAgIHJldHVybiBtYWtlU3RyaW5nKCI8bWV0
YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQvaHRtbDsgY2hhcnNl
dD0iLCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihjaGFyc2V0KSwgIlwiPiIpOwpAQCAtNzcs
NCArMjUyLDQgQEAgV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZUJhcwogICAg
IHJldHVybiBtYWtlU3RyaW5nKCI8YmFzZSBocmVmPVwiLlwiIHRhcmdldD1cIiIsIHN0YXRpY19j
YXN0PGNvbnN0IFN0cmluZyY+KGJhc2VUYXJnZXQpLCAiXCI+Iik7CiB9CiAKLX0gIC8vIG5hbWVz
cGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCShyZXZpc2lvbiA4MTE3NCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKICNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVz
dC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBh
Z2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
LmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAi
V2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0
V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworfTsKKworY2xhc3MgV2Vi
UGFnZVNlcmlhbGl6ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAg
IFdlYlBhZ2VTZXJpYWxpemVyVGVzdCgpIDogbV93ZWJWaWV3KDApLCBtX3N1cHBvcnRlZFNjaGVt
ZXMoM1UpCisgICAgeworICAgICAgICBtX3N1cHBvcnRlZFNjaGVtZXNbMF0gPSAiaHR0cCI7Cisg
ICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1sxXSA9ICJodHRwcyI7CisgICAgICAgIG1fc3VwcG9y
dGVkU2NoZW1lc1syXSA9ICJmaWxlIjsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRo
ZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCwgMCwgMCk7
CisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOworICAgICAgICBtX3dl
YlZpZXctPmNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQo
Y29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUpCisgICAgeworICAg
ICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6
ZSgpOworICAgICAgICByZXNwb25zZS5zZXRNSU1FVHlwZSgidGV4dC9odG1sIik7CisgICAgICAg
IHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIo
KS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi8iKTsKKyAgICAgICAgZmlsZVBhdGguYXBw
ZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZWdpc3Rlck1v
Y2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7Cisg
ICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5Ub3BGcmFtZShjb25zdCBHVVJMJiB1cmwpCisgICAg
eworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVybFJlcXVlc3Q7CisgICAgICAgIHVybFJlcXVlc3Qu
aW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxSZXF1ZXN0LnNldFVSTChXZWJVUkwodXJsKSk7Cisg
ICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOwor
ICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBlbmRpbmcgcmVxdWVzdCBnZXQgc2VydmVkLgorICAg
ICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIHdlYlZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3Rv
cjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVybCkKKyAgICB7CisgICAgICAgIHJldHVybiB2ZWN0
b3IuY29udGFpbnMoV2ViVVJMKEdVUkwodXJsKSkpOworICAgIH0KKworICAgIC8vIFVzZWZ1bCBm
b3IgZGVidWdnaW5nLgorICAgIHN0YXRpYyB2b2lkIHByaW50V2ViVVJMcyhjb25zdCBXZWJWZWN0
b3I8V2ViVVJMPiYgdXJscykKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
dXJscy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHVybHNbaV0uc3Bl
YygpLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworICAgIFdlYlZl
Y3RvcjxXZWJDU3RyaW5nPiBtX3N1cHBvcnRlZFNjaGVtZXM7CisKK3ByaXZhdGU6CisgICAgVGVz
dFdlYkZyYW1lQ2xpZW50IG1fd2ViRnJhbWVDbGllbnQ7Cit9OworCitURVNUX0YoV2ViUGFnZVNl
cmlhbGl6ZXJUZXN0LCBIVE1MTm9kZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBm
cmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfcGFnZS5odG1sIikpOworICAgIGxvYWRVUkxJblRv
cEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisg
ICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291
cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNv
dXJjZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9zdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2Vz
LCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20g
dGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5z
aXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJV
RSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tIikpOworCisg
ICAgRVhQRUNUX0VRKDE0LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5v
IGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iZWF1dGlmdWxsLmNzcyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3
ZXNvbWUuanMiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ib2R5QmFja2dyb3VuZC5qcGciKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9h
d2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltYWdlQnV0dG9uLnBuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Rh
YmxlQmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90ckJhY2tncm91bmQucG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vdGRCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhw
P2lkYT00NiIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNfZGFy
d2luLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlfZGVsZXRlZC5odG1sIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vd2h5
X2luc2VydGVkLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cHM6Ly93d3cuc2VjdXJlLmNvbS9odHRwcy5naWYiKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiZmlsZTovL2MvbXlfZm9sZGVyL2Zp
bGUuZ2lmIikpOworfQorCitURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBNdWx0aXBsZUZy
YW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwg
dG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUu
aHRtbCIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlX2lmcmFtZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29iamVjdF9pZnJhbWUuaHRtbCIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJvYmplY3Rf
aWZyYW1lLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vZW1iZWRfaWZyYW1lLmh0bWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW1iZWRfaWZyYW1lLmh0bWwiKSk7CisgICAgLy8gSWYg
d2UgZG9uJ3QgcmVnaXN0ZXIgYSBtb2NrZWQgcmVzb3VyY2UgZm9yIGF3ZXNvbWUucG5nLCBpdCBj
YXVzZXMgdGhlCisgICAgLy8gZG9jdW1lbnQgbG9hZGVyIG9mIHRoZSBpZnJhbWUgdGhhdCBoYXMg
aXQgYXMgaXRzIHNyYyB0byBhc3NlcnQgb24gY2xvc2UsCisgICAgLy8gbm90IHN1cmUgd2h5Lgor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNv
bWUucG5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgo
ImF3ZXNvbWUucG5nIikpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOwor
CisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291cmNlcy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBm
cmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzb3VyY2VzOworICAgIEFTU0VSVF9UUlVF
KFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcygKKyAgICAgICAgbV93ZWJW
aWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMsICZmcmFtZXMpKTsgICAgCisKKyAg
ICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgZnJhbWUgaGF2ZSBiZWVuIHJl
dHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoNCwgZnJhbWVzLnNpemUoKSk7IC8vIFRoZXJlIHNob3Vs
ZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZy
YW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9y
Q29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwi
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9vYmplY3RfaWZyYW1lLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9lbWJlZF9pZnJhbWUuaHRt
bCIpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hv
dWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2lubmVyRnJhbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZmxhc2guc3dmIikpOworICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vbXVz
aWMubWlkIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vb2JqZWN0LnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVkLnBuZyIp
KTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2F3ZXNvbWUucG5nCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACisKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9pZnJh
bWUuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9p
ZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACis8aHRtbD4KKworPGltZyBz
cmM9ImVtYmVkLnBuZyIvPgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0X2lmcmFtZS5odG1sDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL29iamVjdF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9vYmplY3RfaWZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisKKzxpbWcgc3JjPSJvYmplY3QucG5n
Ii8+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwNCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX2lm
cmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVz
dCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRyaWV2ZXMK
KyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVuIGRlYWxpbmcgd2l0aCBt
dWx0aXBsZSBmcmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8aW1nIHNyYz0iYXdlc29tZS5wbmci
Lz4KKzxpbWcgc3JjPSJpbm5lckZyYW1lLnBuZyIvPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9z
aW1wbGVfcGFnZS5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24v
c2ltcGxlX3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorPGh0bWw+Cis8
IS0tCisgICAgVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVy
OjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRyaWV2ZXMKKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVj
dGVkIHJlc291cmNlcyBmcm9tIHZhcmlvdXMgSFRNTCBub2Rlcy4KKy0tPgorCis8aGVhZD4KKzwh
LS0gU3R5bGUgc2hlZXQgbGlua3Mgc2hvdWxkIGJlIHJldHJpZXZlZCAtLT4KKzxsaW5rIHJlbD0i
c3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20v
YmVhdXRpZnVsbC5jc3MiLz4KKzwhLS0gT3RoZXIgbGluayBzaG91bGQgTk9UIGJlIHJldHJpZXZl
ZCAtLT4KKzxsaW5rIHJlbD0iY29weXJpZ2h0IiB0eXBlPSJ0ZXh0L3BsYWluIiBocmVmPSJodHRw
Oi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCIvPgorPCEtLSBTY3JpcHRzIHNob3VsZCBiZSBy
ZXRyaWV2ZWQgLS0+Cis8c2NyaXB0IHNyYz0iYXdlc29tZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+
CisKKzwhLS0gSW1hZ2VzIGFyZSBhbHdheXMgcmV0cmlldmVkIC0tPgorPGJvZHkgYmFja2dyb3Vu
ZD0iYm9keUJhY2tncm91bmQuanBnIj4KKworPCEtLSBUd2ljZSB0byBtYWtlIHN1cmUgd2Ugb25s
eSByZXBvcnQgZWFjaCByZXNvdXJjZSBvbmNlIC0tPgorPGltZyBzcmM9ImF3ZXNvbWUucG5nIi8+
Cis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKworPGZvcm0+CisgIDxpbnB1dCB0eXBlPSJpbWFn
ZSIgc3JjPSJpbWFnZUJ1dHRvbi5wbmciLz4KKzwvZm9ybT4KKworPHRhYmxlIGJhY2tncm91bmQ9
InRhYmxlQmFja2dyb3VuZC5wbmciPgorICA8dHIgYmFja2dyb3VuZD0idHJCYWNrZ3JvdW5kLnBu
ZyI+CisgICAgPHRkIGJhY2tncm91bmQ9InRkQmFja2dyb3VuZC5wbmciPjwvdGQ+CisgIDwvdHI+
ICAKKyAgPHRyIGJhY2tncm91bmQ9InRyQmFja2dyb3VuZC5wbmciPgorICAgIDx0ZCBiYWNrZ3Jv
dW5kPSJ0ZEJhY2tncm91bmQucG5nIj48L3RkPgorICA8L3RyPgorPC90YWJsZT4KKworPCEtLSBT
b21lIG1vcmUgb2JzY3VyZSB0YWdzIC0tPgorPGJsb2NrcXVvdGUgY2l0ZT0iaHR0cDovL3d3dy5l
dmVuZS5mci9jaXRhdGlvbnMvYXV0ZXVyLnBocD9pZGE9NDYiPjwvYmxvY2txdW90ZT4KKzxxIENJ
VEU9Imh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29tL3F1b3Rlcy9hdXRob3JzL2MvY2hhcmxlc19k
YXJ3aW4uaHRtbCI+PC9xPgorPHA+TXkgZmF2b3JpdGUgY29sb3IgaXMgPGRlbCBjaXRlPSJ3aHlf
ZGVsZXRlZC5odG1sIj5ibHVlPC9kZWw+IDxpbnM+cmVkPC9pbnM+ITwvcD4KKzxwPk15IGZhdm9y
aXRlIGNvbG9yIGlzIDxkZWw+Ymx1ZTwvZGVsPiA8aW5zIGNpdGU9IndoeV9pbnNlcnRlZC5odG1s
Ij5yZWQ8L2lucz4hPC9wPgorCis8IS0tIE1ha2Ugc3VyZSB3ZSBvbmx5IHJldHJpZXZlIFVSTHMg
d2l0aCB0aGUgcmlnaHQgc2NoZW1lcyAtLT4KKzxpbWcgc3JjPSJodHRwczovL3d3dy5zZWN1cmUu
Y29tL2h0dHBzLmdpZiIvPiAgPCEtLSBIVFRQUyBpcyBPSyAtLT4KKzxpbWcgc3JjPSJmaWxlOi8v
Yy9teV9mb2xkZXIvZmlsZS5naWYiLz4gIDwhLS0gZmlsZSBpcyBPSyAtLT4KKzxpbWcgc3JjPSJm
dHA6Ly9mdHAuY29tL2Z0cC5naWYiLz4gIDwhLS0gRlRQIGlzIG5vdCBPSyAtLT4KKzxpbWcgc3Jj
PSJ1bmtub3duOi8vdW5rb3duLmNvbS91bmtub3duLmdpZiIvPiAgPCEtLSBVbmtub3duIHNjaGVt
ZXMgYXJlIG5vdCBPSyAtLT4KKworPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBp
cyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJj
ZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBk
ZWFsaW5nIHdpdGggbXVsdGlwbGUgZnJhbWVzLiAKKy0tPgorCis8Ym9keT4KKworPCEtLSBSZXNv
dXJjZXMgdXNlZCBieSBhIGZyYW1lIGFuZCBhIHRhZyBzaG91bGQgYmUgb25seSByZXBvcnRlZCBv
bmNlIC0tPgorPGlmcmFtZSBzcmM9ImF3ZXNvbWUucG5nIj48L2lmcmFtZT4KKzxpbWcgc3JjPSJh
d2Vzb21lLnBuZyIvPgorCis8aWZyYW1lIHNyYz0ic2ltcGxlX2lmcmFtZS5odG1sIj48L2lmcmFt
ZT4KKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorCis8IS0tIE9i
amVjdCB0YWdzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpZnJhbWVzIC0tPgorCis8b2JqZWN0IGRh
dGE9Im9iamVjdF9pZnJhbWUuaHRtbCI+PC9vYmplY3Q+Cis8b2JqZWN0IGRhdGE9ImZsYXNoLnN3
ZiI+PC9vYmplY3Q+CisKKzwhLS0gRW1iZWQgdGFncyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaWZy
YW1lcyBhcyB3ZWxsIC0tPgorPGVtYmVkIHNyYz0iZW1iZWRfaWZyYW1lLmh0bWwiPjwvb2JqZWN0
PgorPGVtYmVkIHNyYz0ibXVzaWMubWlkIj48L29iamVjdD4KKworPC9ib2R5PgorCis8L2h0bWw+
Cg==
</data>
<flag name="review"
          id="78172"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85987</attachid>
            <date>2011-03-16 15:24:13 -0700</date>
            <delta_ts>2011-03-22 10:04:18 -0700</delta_ts>
            <desc>Addressed David&apos;s comments</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>29662</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cNCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTI4NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMS0wMy0xNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIGEgY29u
dGFpbnMgbWV0aG9kIHRvIFZlY3Rvci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU1ODU5CisKKyAgICAgICAgKiB3dGYvVmVjdG9yLmg6CisgICAgICAg
IChXVEY6Ojo6b3BlcmF0b3IpOgorICAgICAgICAoV1RGOjo6OmNvbnRhaW5zKToKKwogMjAxMS0w
My0xNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3Iu
aA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgJKHJl
dmlzaW9uIDgxMTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNTY2LDYgKzU2Niw3IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBU
JiBsYXN0KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KICAgICAgICAgY29uc3QgVCYgbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIGF0KHNpemUoKSAtIDEpOyB9CiAKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVT4gYm9vbCBjb250YWlucyhjb25zdCBVJikgY29uc3Q7CiAgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFU+IHNpemVfdCBmaW5kKGNvbnN0IFUmKSBjb25zdDsKICAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVT4gc2l6ZV90IHJldmVyc2VGaW5kKGNvbnN0IFUmKSBjb25zdDsKIApA
QCAtNzQ0LDYgKzc0NSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVT4KKyAgICBib29sIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OmNvbnRhaW5zKGNvbnN0
IFUmIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmQodmFsdWUpICE9IG5v
dEZvdW5kOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgogICAgIHNpemVfdCBWZWN0b3I8VCwg
aW5saW5lQ2FwYWNpdHk+OjpmaW5kKGNvbnN0IFUmIHZhbHVlKSBjb25zdAogICAgIHsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjg0KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAor
MjAxMS0wMy0xNiAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92aW5nIHRoZSBtZXRo
b2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0aGUgcmVzb3VyY2VzIGluCisgICAgICAg
IGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChkb21fb3BlcmF0aW9ucy5jYykgdG8gV2Vi
S2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4
NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJp
YWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVSTC5oOgorICAgICAgICAoV2ViS2l0Ojpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3IhPSk6CisgICAgICAgICogcHVi
bGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWZWN0b3I6OmNvbnRhaW5zKToK
KyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwpOgorICAgICAgICAqIHNyYy9XZWJQ
YWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRTdWJSZXNvdXJjZVVSTEZy
b21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAg
ICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgorICAgICAgICAqIHRlc3RzL1dlYlBhZ2VT
ZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb246IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24v
YXdlc29tZS5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRp
b24vZW1iZWRfaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6YXRpb24vb2JqZWN0X2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sOiBB
ZGRlZC4KKwogMjAxMS0wMy0xNiAgU3JlZXJhbSBSYW1hY2hhbmRyYW4gIDxzcmVlcmFtQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtODMyLDYgKzgzMiw3IEBA
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3Jp
YmVIZWxwZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9XZWJGcmFtZVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIFsnT1M9PSJtYWMiJywgewpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMv
V2ViUGFnZVNlcmlhbGl6ZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHJldmlzaW9uIDgxMTc0KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKIG5hbWVzcGFj
ZSBXZWJLaXQgeworY2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2Vi
UGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBjbGFzcyBXZWJTdHJpbmc7CiBjbGFzcyBXZWJVUkw7Citj
bGFzcyBXZWJWaWV3OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIAog
Ly8gR2V0IGh0bWwgZGF0YSBieSBzZXJpYWxpemluZyBhbGwgZnJhbWVzIG9mIGN1cnJlbnQgcGFn
ZSB3aXRoIGxpc3RzCkBAIC02OSw2ICs3MSwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0
aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5n
JiBsb2NhbERpcmVjdG9yeU5hbWUpOwogCisgICAgLy8gUmV0cmlldmUgYWxsIHRoZSByZXNvdXJj
ZSBmb3IgdGhlIHBhc3NlZCB2aWV3LCBpbmNsdWRpbmcgdGhlIG1haW4gZnJhbWUKKyAgICAvLyBh
bmQgc3ViLWZyYW1lcy4gUmV0dXJucyB0cnVlIGlmIGFsbCByZXNvdXJjZXMgd2VyZSByZXRyaWV2
ZWQKKyAgICAvLyBzdWNjZXNzZnVsbHkuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCByZXRy
aWV2ZUFsbFJlc291cmNlcyhXZWJWaWV3KiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDU3RyaW5nPiYgc3VwcG9ydGVk
U2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlZlY3RvcjxXZWJVUkw+KiByZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogZnJhbWVzKTsKKwogICAg
IC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGFyZSBoZXJlIGZvciB1bml0IHRlc3RpbmcgcHVycG9z
ZXMuIENvbnNpZGVyCiAgICAgLy8gY2hhbmdpbmcgdGhlIHVuaXQgdGVzdHMgaW5zdGVhZC4KIApA
QCAtODAsNiArOTAsNiBAQCBwdWJsaWM6CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5n
IGdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCk7
CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAog
I2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaA0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTC5oCShyZXZp
c2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlVSTC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDMsNiArMTQzLDE2IEBAIGlubGluZSBib29sIG9wZXJhdG9yPChj
b25zdCBXZWJVUkwmIGEsIGMKICAgICByZXR1cm4gYS5zcGVjKCkgPCBiLnNwZWMoKTsKIH0KIAor
aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYgYikK
K3sKKyAgICByZXR1cm4gIWEuc3BlYygpLmNvbXBhcmUoYi5zcGVjKCkpOworfQorCitpbmxpbmUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFdlYlVSTCYgYSwgY29uc3QgV2ViVVJMJiBiKQoreworICAg
IHJldHVybiAhKGEgPT0gYik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oDQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgJKHJldmlz
aW9uIDgxMTc0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViVmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSw2ICsxMjUsMTUgQEAgcHVibGljOgogICAgICAgICBXRUJL
SVRfQVNTRVJUKGkgPCBtX3NpemUpOwogICAgICAgICByZXR1cm4gbV9wdHJbaV07CiAgICAgfQor
ICAgIAorICAgIGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBp
ZiAobV9wdHJbaV0gPT0gdmFsdWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIFQqIGRhdGEoKSB7IHJl
dHVybiBtX3B0cjsgfQogICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX3B0cjsg
fQpAQCAtMTcyLDYgKzE4MSw2IEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKIH07CiAK
LX0gIC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcA0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRhdGFTb3VyY2VJ
bXBsLmNwcAkocmV2aXNpb24gODExNzQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJEYXRhU291cmNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NCw3ICsxNzQsNyBAQCBX
ZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwoY29uCiAgICAgICAgIC8vIGZyYW1l
LCB3aGljaCByZXN1bHRzIGluIGEgc2Vjb25kIGRhdGEgc291cmNlIGJlaW5nIGNyZWF0ZWQuICBX
ZSB3YW50CiAgICAgICAgIC8vIHRvIHdhaXQgdG8gYXR0YWNoIHRoZSBXZWJQbHVnaW5Mb2FkT2Jz
ZXJ2ZXIgdG8gdGhhdCBkYXRhIHNvdXJjZS4KICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+
dXJsKCkgPT0gcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9uZXh0UGx1Z2lu
TG9hZE9ic2VydmVyLT51cmwoKSA9PSBXZWJVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAgICAg
ICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXIuc2V0KG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlcik7CiAg
ICAgICAgICAgICBtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIgPSAwOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHANCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAJKHJldmlzaW9uIDgxMTc0KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOSArMzEsMTUyIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKIAorI2luY2x1
ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiSFRNTEFsbENvbGxlY3Rpb24uaCIKKyNpbmNsdWRlICJIVE1MRnJh
bWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgog
CisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVk
ZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplckltcGwuaCIKICNpbmNsdWRlICJXZWJTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAorbmFtZXNwYWNlIHsKKworS1VSTCBnZXRTdWJS
ZXNvdXJjZVVSTEZyb21FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgQVNTRVJUKGVs
ZW1lbnQpOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAwOworICAg
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9
ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICBIVE1MSW5wdXRFbGVtZW50KiBpbnB1dCA9
IHN0YXRpY19jYXN0PEhUTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgaWYgKGlu
cHV0LT5pc0ltYWdlQnV0dG9uKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxO
YW1lczo6c3JjQXR0cjsKKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpib2R5VGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OnRhYmxlVGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRyVGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnRkVGFnKSkKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmJh
Y2tncm91bmRBdHRyOworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpibG9ja3F1b3RlVGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpxVGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpkZWxUYWcpCisgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Omluc1RhZykpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0
cjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykp
IHsKKyAgICAgICAgLy8gSWYgdGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBpZ25vcmUgaXQu
CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRN
TE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTog
QWRkIHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mgb2Ygc3ViLXJlc291cmNlcyB3aGljaAor
ICAgICAgICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1zaGVldCBzdWNoIGFzIEBpbXBvcnQsIEBm
b250LWZhY2UsIHVybCgpLCBldGMuCisgICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxO
YW1lczo6aHJlZkF0dHI7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQorICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhU
TUxOYW1lczo6ZGF0YUF0dHI7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmVtYmVkVGFnKSkKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNy
Y0F0dHI7CisKKyAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCisgICAgICAgIHJldHVybiBLVVJMKCk7
CisKKyAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoKmF0dHJpYnV0ZU5h
bWUpOworICAgIC8vIElnbm9yZSBqYXZhc2NyaXB0IGNvbnRlbnQuCisgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSB8fCB2YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0
OiIsIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIEtVUkwoKTsKKyAgCisgICAgcmV0dXJuIGVsZW1l
bnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKTsKK30KKwordm9pZCByZXRyaWV2ZVJl
c291cmNlc0ZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIGZyYW1lc1RvVmlzaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIGZyYW1lVVJMcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxz
KQoreworICAgIC8vIElmIHRoZSBub2RlIGlzIGEgZnJhbWUsIHdlJ2xsIHByb2Nlc3MgaXQgbGF0
ZXIgaW4gcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZS4KKyAgICBpZiAoKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpmcmFtZVRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkK
KyAgICAgICAgICAgICYmIGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAg
ICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVt
ZW50KS0+Y29udGVudEZyYW1lKCk7CisgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAg
aWYgKCF2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkpCisgICAgICAgICAgICAgICAgZnJh
bWVzVG9WaXNpdC0+YXBwZW5kKGZyYW1lKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEtVUkwgdXJsID0gZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChl
bGVtZW50KTsKKyAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJjZSBmb3IgdGhpcyBub2RlLgorCisgICAgLy8gSWdu
b3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29scy4gU2luY2UgdGhlIEZU
UCBwcm90b2NvbAorICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tp
cCBpdCBhcyB3ZWxsLgorICAgIGlmICghdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgJiYgIXVy
bC5pc0xvY2FsRmlsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXJlc291cmNlVVJM
cy0+Y29udGFpbnModXJsKSkKKyAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBlbmQodXJsKTsKK30K
Kwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6Oldl
YkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIEtVUkwg
ZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51
cmwoKTsKKworICAgIC8vIElmIHRoZSBmcmFtZSdzIFVSTCBpcyBpbnZhbGlkLCBpZ25vcmUgaXQs
IGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KKyAgICBpZiAoIWZyYW1lVVJMLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlIGZyYW1lcyBmcm9tIHVuc3VwcG9ydGVkIHNj
aGVtZXMuCisgICAgYm9vbCBpc1ZhbGlkU2NoZW1lID0gZmFsc2U7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdXBwb3J0ZWRTY2hlbWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChm
cmFtZVVSTC5wcm90b2NvbElzKHN0YXRpY19jYXN0PENTdHJpbmc+KHN1cHBvcnRlZFNjaGVtZXNb
aV0pLmRhdGEoKSkpIHsKKyAgICAgICAgICAgIGlzVmFsaWRTY2hlbWUgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkU2NoZW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IGZy
YW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5zKGZyYW1lKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHZpc2l0ZWRGcmFtZXMtPmFwcGVuZChmcmFtZSk7CisgICAg
aWYgKCFmcmFtZVVSTHMtPmNvbnRhaW5zKGZyYW1lVVJMKSkKKyAgICAgICAgZnJhbWVVUkxzLT5h
cHBlbmQoZnJhbWVVUkwpOworICAKKyAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2Np
YXRlZCB3aXRoIGVhY2ggbm9kZSBvZiB0aGUgZG9jdW1lbnQuCisgICAgUmVmUHRyPEhUTUxBbGxD
b2xsZWN0aW9uPiBhbGxOb2RlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
Tm9kZSogbm9kZSA9IGFsbE5vZGVzLT5pdGVtKGkpOworICAgICAgICAvLyBXZSBhcmUgb25seSBp
bnRlcmVzdGVkIGluIEhUTUwgcmVzb3VyY2VzLgorICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICByZXRyaWV2ZVJlc291cmNl
c0ZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBib29s
IFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLApAQCAtNTgsNiAr
MTkxLDQ4IEBAIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmEKICAgICBy
ZXR1cm4gc2VyaWFsaXplckltcGwuc2VyaWFsaXplKCk7CiB9CiAKK2Jvb2wgV2ViUGFnZVNlcmlh
bGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKFdlYlZpZXcqIHZpZXcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmlu
Zz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2VVUkxzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1l
VVJMcykgeworICAgIFdlYkZyYW1lSW1wbCogbWFpbkZyYW1lID0gc3RhdGljX2Nhc3Q8V2ViRnJh
bWVJbXBsKj4odmlldy0+bWFpbkZyYW1lKCkpOworICAgIGlmICghbWFpbkZyYW1lKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8RnJhbWUqPiBmcmFtZXNUb1Zpc2l0OworICAg
IFZlY3RvcjxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7CisgICAgVmVjdG9yPEtVUkw+IGZyYW1lS1VS
THM7CisgICAgVmVjdG9yPEtVUkw+IHJlc291cmNlS1VSTHM7CisgICAgCisgICAgLy8gTGV0J3Mg
cmV0cmlldmUgdGhlIHJlc291cmNlcyBmcm9tIGV2ZXJ5IGZyYW1lIGluIHRoaXMgcGFnZS4KKyAg
ICBmcmFtZXNUb1Zpc2l0LmFwcGVuZChtYWluRnJhbWUtPmZyYW1lKCkpOworICAgIHdoaWxlICgh
ZnJhbWVzVG9WaXNpdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVz
VG9WaXNpdFswXTsKKyAgICAgICAgZnJhbWVzVG9WaXNpdC5yZW1vdmUoMCk7CisgICAgICAgIHJl
dHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUsIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpc2l0ZWRGcmFtZXMsICZmcmFtZXNUb1Zpc2l0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUtVUkxzLCAmcmVzb3Vy
Y2VLVVJMcyk7CisgICAgfQorCisgICAgLy8gQ29udmVydHMgdGhlIHJlc3VsdHMgdG8gV2ViVVJM
cy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRSZXNvdXJjZVVSTHMocmVzb3VyY2VLVVJM
cy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VLVVJMcy5zaXpl
KCk7ICsraSkgeworICAgICAgICByZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSByZXNvdXJjZUtVUkxz
W2ldOworICAgICAgICAvLyBBIGZyYW1lJ3Mgc3JjIGNhbiBwb2ludCB0byB0aGUgc2FtZSBVUkwg
YXMgYW5vdGhlciByZXNvdXJjZSwga2VlcCB0aGUKKyAgICAgICAgLy8gcmVzb3VyY2UgVVJMIG9u
bHkgaW4gc3VjaCBjYXNlcy4KKyAgICAgICAgc2l6ZV90IGluZGV4ID0gZnJhbWVLVVJMcy5maW5k
KHJlc291cmNlS1VSTHNbaV0pOworICAgICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCisgICAg
ICAgICAgICBmcmFtZUtVUkxzLnJlbW92ZShpbmRleCk7CisgICAgfQorICAgICpyZXNvdXJjZVVS
THMgPSByZXN1bHRSZXNvdXJjZVVSTHM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0RnJh
bWVVUkxzKGZyYW1lS1VSTHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZy
YW1lS1VSTHMuc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdEZyYW1lVVJMc1tpXSA9IGZyYW1l
S1VSTHNbaV07CisgICAgKmZyYW1lVVJMcyA9IHJlc3VsdEZyYW1lVVJMczsKKyAgICAKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwogV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZU1l
dGFDaGFyc2V0RGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KQogewogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVu
dD1cInRleHQvaHRtbDsgY2hhcnNldD0iLCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihjaGFy
c2V0KSwgIlwiPiIpOwpAQCAtNzcsNCArMjUyLDQgQEAgV2ViU3RyaW5nIFdlYlBhZ2VTZXJpYWxp
emVyOjpnZW5lcmF0ZUJhcwogICAgIHJldHVybiBtYWtlU3RyaW5nKCI8YmFzZSBocmVmPVwiLlwi
IHRhcmdldD1cIiIsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGJhc2VUYXJnZXQpLCAiXCI+
Iik7CiB9CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwDQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3Bw
CShyZXZpc2lvbiA4MTE3NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJh
bWVUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCisjaW5jbHVkZSAiY29uZmlnLmgiCisKICNpbmNsdWRlIDxnb29nbGV1cmwvc3Jj
L2d1cmwuaD4KICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHdlYmtpdC9zdXBw
b3J0L3dlYmtpdF9zdXBwb3J0Lmg+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1
ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJl
c3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3Ny
Yy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3Vw
cG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1l
c3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGll
bnQgeworfTsKKworY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VTZXJpYWxpemVyVGVzdCgpIDogbV93ZWJWaWV3
KDApLCBtX3N1cHBvcnRlZFNjaGVtZXMoM1UpCisgICAgeworICAgICAgICBtX3N1cHBvcnRlZFNj
aGVtZXNbMF0gPSAiaHR0cCI7CisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1sxXSA9ICJodHRw
cyI7CisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1syXSA9ICJmaWxlIjsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3Jl
YXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJW
aWV3OjpjcmVhdGUoMCwgMCwgMCk7CisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5G
cmFtZSgmbV93ZWJGcmFtZUNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJE
b3duKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVyQWxsTW9ja2Vk
VVJMcygpOworICAgICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYg
ZmlsZU5hbWUpCisgICAgeworICAgICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsKKyAgICAg
ICAgcmVzcG9uc2UuaW5pdGlhbGl6ZSgpOworICAgICAgICByZXNwb25zZS5zZXRNSU1FVHlwZSgi
dGV4dC9odG1sIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBv
cnQ6OkdldFdlYktpdFJvb3REaXIoKS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi8iKTsK
KyAgICAgICAgZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpSZWdpc3Rlck1vY2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZy
b21VVEY4KGZpbGVQYXRoKSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5Ub3BGcmFtZShj
b25zdCBHVVJMJiB1cmwpCisgICAgeworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVybFJlcXVlc3Q7
CisgICAgICAgIHVybFJlcXVlc3QuaW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxSZXF1ZXN0LnNl
dFVSTChXZWJVUkwodXJsKSk7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmxvYWRS
ZXF1ZXN0KHVybFJlcXVlc3QpOworICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBlbmRpbmcgcmVx
dWVzdCBnZXQgc2VydmVkLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25v
dXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHdlYlZlY3RvckNv
bnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVybCkKKyAgICB7
CisgICAgICAgIHJldHVybiB2ZWN0b3IuY29udGFpbnMoV2ViVVJMKEdVUkwodXJsKSkpOworICAg
IH0KKworICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5nLgorICAgIHN0YXRpYyB2b2lkIHByaW50
V2ViVVJMcyhjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgdXJscykKKyAgICB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJscy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIHByaW50
ZigiJXNcbiIsIHVybHNbaV0uc3BlYygpLmRhdGEoKSk7CisgICAgfQorCisgICAgV2ViVmlldyog
bV93ZWJWaWV3OworICAgIFdlYlZlY3RvcjxXZWJDU3RyaW5nPiBtX3N1cHBvcnRlZFNjaGVtZXM7
CisKK3ByaXZhdGU6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50IG1fd2ViRnJhbWVDbGllbnQ7Cit9
OworCitURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBIVE1MTm9kZXMpCit7CisgICAgLy8g
UmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJh
bWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfcGFnZS5odG1s
IikpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIC8vIFJldHJp
ZXZlIGFsbCByZXNvdXJjZXMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOworICAgIFdl
YlZlY3RvcjxXZWJVUkw+IHJlc291cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9zdXBwb3J0
ZWRTY2hlbWVzLCAmcmVzb3VyY2VzLCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVzdHMgdGhh
dCBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAg
RVhQRUNUX0VRKDEsIGZyYW1lcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGlj
YXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tIikpOworCisgICAgRVhQRUNUX0VRKDE0LCByZXNvdXJjZXMuc2l6ZSgpKTsg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9iZWF1dGlmdWxs
LmNzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUuanMiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ib2R5QmFja2dyb3Vu
ZC5qcGciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltYWdlQnV0dG9u
LnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL3RhYmxlQmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90ckJh
Y2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdGRCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmV2ZW5lLmZy
L2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMv
YXV0aG9ycy9jL2NoYXJsZXNfZGFyd2luLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlfZGVsZXRlZC5o
dG1sIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20vd2h5X2luc2VydGVkLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUo
d2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cHM6Ly93d3cuc2VjdXJlLmNvbS9odHRw
cy5naWYiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
ZmlsZTovL2MvbXlfZm9sZGVyL2ZpbGUuZ2lmIikpOworfQorCitURVNUX0YoV2ViUGFnZVNlcmlh
bGl6ZXJUZXN0LCBNdWx0aXBsZUZyYW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2Vk
IGZyYW1lcy4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlX2lmcmFtZS5odG1s
IikpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L29iamVjdF9pZnJhbWUuaHRtbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJp
bmc6OmZyb21VVEY4KCJvYmplY3RfaWZyYW1lLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZW1iZWRfaWZyYW1lLmh0bWwiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW1iZWRfaWZyYW1l
Lmh0bWwiKSk7CisgICAgLy8gSWYgd2UgZG9uJ3QgcmVnaXN0ZXIgYSBtb2NrZWQgcmVzb3VyY2Ug
Zm9yIGF3ZXNvbWUucG5nLCBpdCBjYXVzZXMgdGhlCisgICAgLy8gZG9jdW1lbnQgbG9hZGVyIG9m
IHRoZSBpZnJhbWUgdGhhdCBoYXMgaXQgYXMgaXRzIHNyYyB0byBhc3NlcnQgb24gY2xvc2UsCisg
ICAgLy8gbm90IHN1cmUgd2h5LgorICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUucG5nIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlN0cmluZzo6ZnJvbVVURjgoImF3ZXNvbWUucG5nIikpOworCisgICAgbG9hZFVSTEluVG9w
RnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291cmNlcy4KKyAg
ICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzb3Vy
Y2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291
cmNlcygKKyAgICAgICAgbV93ZWJWaWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMs
ICZmcmFtZXMpKTsgICAgCisKKyAgICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJvbSB0
aGUgZnJhbWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoNCwgZnJhbWVzLnNp
emUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9zaW1wbGVfaWZyYW1lLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vYmplY3RfaWZyYW1lLmh0bWwiKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9lbWJlZF9pZnJhbWUuaHRtbCIpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMu
c2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vz
b21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2lubmVyRnJhbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZmxhc2gu
c3dmIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20vbXVzaWMubWlkIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb2JqZWN0LnBuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2VtYmVkLnBuZyIpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nDQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L2F3ZXNvbWUucG5nCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxIEBACisKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRtbA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
IEBACis8aHRtbD4KKworPGltZyBzcmM9ImVtYmVkLnBuZyIvPgorCis8L2h0bWw+CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0
X2lmcmFtZS5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL29iamVjdF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9v
YmplY3RfaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisK
KzxpbWcgc3JjPSJvYmplY3QucG5nIi8+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwN
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6YXRpb24vc2ltcGxlX2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhp
cyBwYWdlIGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFs
bFJlc291cmNlcyByZXRyaWV2ZXMKKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNl
cyB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmcmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8
aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKzxpbWcgc3JjPSJpbm5lckZyYW1lLnBuZyIvPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9w
YWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1MCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVzdCB0
aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRyaWV2ZXMKKyAg
ICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyBmcm9tIHZhcmlvdXMgSFRNTCBub2Rl
cy4KKy0tPgorCis8aGVhZD4KKzwhLS0gU3R5bGUgc2hlZXQgbGlua3Mgc2hvdWxkIGJlIHJldHJp
ZXZlZCAtLT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0
dHA6Ly93d3cuZXhhbXBsZS5jb20vYmVhdXRpZnVsbC5jc3MiLz4KKzwhLS0gT3RoZXIgbGluayBz
aG91bGQgTk9UIGJlIHJldHJpZXZlZCAtLT4KKzxsaW5rIHJlbD0iY29weXJpZ2h0IiB0eXBlPSJ0
ZXh0L3BsYWluIiBocmVmPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2NvcHlyaWdodCIvPgorPCEt
LSBTY3JpcHRzIHNob3VsZCBiZSByZXRyaWV2ZWQgLS0+Cis8c2NyaXB0IHNyYz0iYXdlc29tZS5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzwhLS0gSW1hZ2VzIGFyZSBhbHdheXMgcmV0cmlldmVk
IC0tPgorPGJvZHkgYmFja2dyb3VuZD0iYm9keUJhY2tncm91bmQuanBnIj4KKworPCEtLSBUd2lj
ZSB0byBtYWtlIHN1cmUgd2Ugb25seSByZXBvcnQgZWFjaCByZXNvdXJjZSBvbmNlIC0tPgorPGlt
ZyBzcmM9ImF3ZXNvbWUucG5nIi8+Cis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKworPGZvcm0+
CisgIDxpbnB1dCB0eXBlPSJpbWFnZSIgc3JjPSJpbWFnZUJ1dHRvbi5wbmciLz4KKzwvZm9ybT4K
KworPHRhYmxlIGJhY2tncm91bmQ9InRhYmxlQmFja2dyb3VuZC5wbmciPgorICA8dHIgYmFja2dy
b3VuZD0idHJCYWNrZ3JvdW5kLnBuZyI+CisgICAgPHRkIGJhY2tncm91bmQ9InRkQmFja2dyb3Vu
ZC5wbmciPjwvdGQ+CisgIDwvdHI+ICAKKyAgPHRyIGJhY2tncm91bmQ9InRyQmFja2dyb3VuZC5w
bmciPgorICAgIDx0ZCBiYWNrZ3JvdW5kPSJ0ZEJhY2tncm91bmQucG5nIj48L3RkPgorICA8L3Ry
PgorPC90YWJsZT4KKworPCEtLSBTb21lIG1vcmUgb2JzY3VyZSB0YWdzIC0tPgorPGJsb2NrcXVv
dGUgY2l0ZT0iaHR0cDovL3d3dy5ldmVuZS5mci9jaXRhdGlvbnMvYXV0ZXVyLnBocD9pZGE9NDYi
PjwvYmxvY2txdW90ZT4KKzxxIENJVEU9Imh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29tL3F1b3Rl
cy9hdXRob3JzL2MvY2hhcmxlc19kYXJ3aW4uaHRtbCI+PC9xPgorPHA+TXkgZmF2b3JpdGUgY29s
b3IgaXMgPGRlbCBjaXRlPSJ3aHlfZGVsZXRlZC5odG1sIj5ibHVlPC9kZWw+IDxpbnM+cmVkPC9p
bnM+ITwvcD4KKzxwPk15IGZhdm9yaXRlIGNvbG9yIGlzIDxkZWw+Ymx1ZTwvZGVsPiA8aW5zIGNp
dGU9IndoeV9pbnNlcnRlZC5odG1sIj5yZWQ8L2lucz4hPC9wPgorCis8IS0tIE1ha2Ugc3VyZSB3
ZSBvbmx5IHJldHJpZXZlIFVSTHMgd2l0aCB0aGUgcmlnaHQgc2NoZW1lcyAtLT4KKzxpbWcgc3Jj
PSJodHRwczovL3d3dy5zZWN1cmUuY29tL2h0dHBzLmdpZiIvPiAgPCEtLSBIVFRQUyBpcyBPSyAt
LT4KKzxpbWcgc3JjPSJmaWxlOi8vYy9teV9mb2xkZXIvZmlsZS5naWYiLz4gIDwhLS0gZmlsZSBp
cyBPSyAtLT4KKzxpbWcgc3JjPSJmdHA6Ly9mdHAuY29tL2Z0cC5naWYiLz4gIDwhLS0gRlRQIGlz
IG5vdCBPSyAtLT4KKzxpbWcgc3JjPSJ1bmtub3duOi8vdW5rb3duLmNvbS91bmtub3duLmdpZiIv
PiAgPCEtLSBVbmtub3duIHNjaGVtZXMgYXJlIG5vdCBPSyAtLT4KKworPC9ib2R5PgorCis8L2h0
bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vdG9wX2ZyYW1lLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRp
b24vdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKzxodG1sPgor
PCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBl
Y3RlZCByZXNvdXJjZXMgd2hlbiBkZWFsaW5nIHdpdGggbXVsdGlwbGUgZnJhbWVzLiAKKy0tPgor
Cis8Ym9keT4KKworPCEtLSBSZXNvdXJjZXMgdXNlZCBieSBhIGZyYW1lIGFuZCBhIHRhZyBzaG91
bGQgYmUgb25seSByZXBvcnRlZCBvbmNlIC0tPgorPGlmcmFtZSBzcmM9ImF3ZXNvbWUucG5nIj48
L2lmcmFtZT4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorCis8aWZyYW1lIHNyYz0ic2ltcGxl
X2lmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwi
PjwvaWZyYW1lPgorCis8IS0tIE9iamVjdCB0YWdzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpZnJh
bWVzIC0tPgorCis8b2JqZWN0IGRhdGE9Im9iamVjdF9pZnJhbWUuaHRtbCI+PC9vYmplY3Q+Cis8
b2JqZWN0IGRhdGE9ImZsYXNoLnN3ZiI+PC9vYmplY3Q+CisKKzwhLS0gRW1iZWQgdGFncyBjYW4g
YmUgdXNlZCB0byBjcmVhdGUgaWZyYW1lcyBhcyB3ZWxsIC0tPgorPGVtYmVkIHNyYz0iZW1iZWRf
aWZyYW1lLmh0bWwiPjwvb2JqZWN0PgorPGVtYmVkIHNyYz0ibXVzaWMubWlkIj48L29iamVjdD4K
KworPC9ib2R5PgorCis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86467</attachid>
            <date>2011-03-22 10:04:21 -0700</date>
            <delta_ts>2011-03-23 16:21:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55859-20110322100415.patch</filename>
            <type>text/plain</type>
            <size>30497</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODE2MTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGQx
NTU1ZmU0MTBjMDJlZjYyOWE3YTJjYWQwZDQ2YzY3ZjJlMmVmOTYuLjliZTFiNGQyNTBmMzNiM2U0
NzExMTZmNDMwOGRkNGJhMjZkNTI3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDEzIEBACisyMDExLTAzLTIyICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRp
bmcgYSBjb250YWlucyBtZXRob2QgdG8gVmVjdG9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NTkKKworICAgICAgICAqIHd0Zi9WZWN0b3IuaDoK
KyAgICAgICAgKFdURjo6VmVjdG9yOjpjb250YWlucyk6CisKIDIwMTEtMDMtMjEgIFJvYmVydCBL
cm9lZ2VyICA8cmprcm9lZ2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFu
dG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1ZlY3Rv
ci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9WZWN0b3IuaAppbmRleCAyZmI0MTE0YmE0
OWMzNDQ4NzcxZWVkYjM4YjViYmE0MTE1ZDVmNWYwLi4yOTcyZTY1MDEwZDJhOTRhN2RmM2Y3YjFi
ZTBjNGZiNDhhOGI5NzQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1Zl
Y3Rvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvVmVjdG9yLmgKQEAgLTU2Niw2
ICs1NjYsNyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVCYgbGFzdCgpIHsgcmV0dXJuIGF0
KHNpemUoKSAtIDEpOyB9CiAgICAgICAgIGNvbnN0IFQmIGxhc3QoKSBjb25zdCB7IHJldHVybiBh
dChzaXplKCkgLSAxKTsgfQogCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IGJvb2wgY29u
dGFpbnMoY29uc3QgVSYpIGNvbnN0OwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPiBzaXpl
X3QgZmluZChjb25zdCBVJikgY29uc3Q7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+IHNp
emVfdCByZXZlcnNlRmluZChjb25zdCBVJikgY29uc3Q7CiAKQEAgLTc0NSw2ICs3NDYsMTMgQEAg
bmFtZXNwYWNlIFdURiB7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5l
Q2FwYWNpdHk+CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVT4KKyAgICBib29sIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46OmNvbnRhaW5zKGNvbnN0IFUmIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGZpbmQodmFsdWUpICE9IG5vdEZvdW5kOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBVPgogICAgIHNpemVfdCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpmaW5kKGNvbnN0
IFUmIHZhbHVlKSBjb25zdAogICAgIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
aXplKCk7ICsraSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBmMWYwMTM5ZmMyYTMw
NTVlYTU0YjZjMGMzYTFjOGMwYTg2YTU3MThhLi5lNmNmOWRjOGJhZmUzM2UyMjU0ZTQ0YTRlZDc3
YTRiMTljNWRiYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBA
CisyMDExLTAzLTIyICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWxhbmRpbmc6Cisg
ICAgICAgIE1vdmluZyB0aGUgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byByZXRyaWV2ZSBhbGwgdGhl
IHJlc291cmNlcyBpbgorICAgICAgICBhIHBhZ2UgZnJvbSB0aGUgQ2hyb21pdW0gY29kZSAoZG9t
X29wZXJhdGlvbnMuY2MpIHRvIFdlYktpdC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU1ODU5CisKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVS
TC5oOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJWZWN0b3I6OmNvbnRhaW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJl
c291cmNlc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJl
dHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgor
ICAgICAgICAqIHRlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vZW1iZWRfaWZyYW1lLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0X2lmcmFt
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3Np
bXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0yMSAgUm9i
ZXJ0IEtyb2VnZXIgIDxyamtyb2VnZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQW50b25pbyBHb21lcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA0NTM4ZjMx
MzU2ODAyYjVjMDFhMGYyZDZhMmYyOTk0NmVmNDE4YWQ2Li5kNDcyNDhlNGY1MjlkNDA4MzQzZWFl
MTQwOGRkN2I2ZDZjYzEyNzU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04MTcs
NiArODE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5z
cGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAg
ICAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAppbmRleCA5NGY3OTk0OTg0YzQyZGM0ZTJh
MjcyNTkzYmI3MjEzNTVmMTdjMzYwLi5iNGQ1NzE1MzVhYWI4ZmMyMmVlMjA2NmUyY2UwZTFiYWFm
OWQ4NmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdl
U2VyaWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmgKQEAgLTM0LDEwICszNCwxMiBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgog
CiBuYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYkNTdHJpbmc7CiBjbGFzcyBXZWJGcmFtZTsK
IGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwogY2xhc3Mg
V2ViVVJMOworY2xhc3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJW
ZWN0b3I7CiAKIC8vIEdldCBodG1sIGRhdGEgYnkgc2VyaWFsaXppbmcgYWxsIGZyYW1lcyBvZiBj
dXJyZW50IHBhZ2Ugd2l0aCBsaXN0cwpAQCAtNjksNiArNzEsMTQgQEAgcHVibGljOgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKIAorICAgIC8vIFJldHJpZXZlIGFsbCB0
aGUgcmVzb3VyY2UgZm9yIHRoZSBwYXNzZWQgdmlldywgaW5jbHVkaW5nIHRoZSBtYWluIGZyYW1l
CisgICAgLy8gYW5kIHN1Yi1mcmFtZXMuIFJldHVybnMgdHJ1ZSBpZiBhbGwgcmVzb3VyY2VzIHdl
cmUgcmV0cmlldmVkCisgICAgLy8gc3VjY2Vzc2Z1bGx5LgorICAgIFdFQktJVF9BUEkgc3RhdGlj
IGJvb2wgcmV0cmlldmVBbGxSZXNvdXJjZXMoV2ViVmlldyosCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViQ1N0cmluZz4m
IHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogcmVzb3VyY2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIGZyYW1l
cyk7CisKICAgICAvLyBGSVhNRTogVGhlIGZvbGxvd2luZyBhcmUgaGVyZSBmb3IgdW5pdCB0ZXN0
aW5nIHB1cnBvc2VzLiBDb25zaWRlcgogICAgIC8vIGNoYW5naW5nIHRoZSB1bml0IHRlc3RzIGlu
c3RlYWQuCiAKQEAgLTgwLDYgKzkwLDYgQEAgcHVibGljOgogICAgIFdFQktJVF9BUEkgc3RhdGlj
IFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJh
c2VUYXJnZXQpOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViVVJMLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaAppbmRl
eCBiYjkwZTMyYjVlMDM0ZDMxY2M5OTc2YzFmNTg4NDAyMWVkNjg1NDQ1Li43MDdiYTA4OTY0MzFl
YWMzZmMzMTc2NTExODI0YWRjZWU5ZGU5NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJVUkwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJVUkwuaApAQCAtMTQzLDYgKzE0MywxNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29u
c3QgV2ViVVJMJiBhLCBjb25zdCBXZWJVUkwmIGIpCiAgICAgcmV0dXJuIGEuc3BlYygpIDwgYi5z
cGVjKCk7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViVVJMJiBhLCBjb25z
dCBXZWJVUkwmIGIpCit7CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21wYXJlKGIuc3BlYygpKTsK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVS
TCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWZWN0b3IuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCmlu
ZGV4IGNmM2VjOTVlODVkNjI5MDVjMWVjZjdkNjk5YzhjMzRhY2M1YTUyNmYuLmJiMDJhYmNkZmYy
Y2MxNTczNjI1MDdiM2NlODZlOGRkNzgyMTQ1YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlZlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlZlY3Rvci5oCkBAIC0xMjUsNiArMTI1LDE1IEBAIHB1YmxpYzoKICAgICAgICAg
V0VCS0lUX0FTU0VSVChpIDwgbV9zaXplKTsKICAgICAgICAgcmV0dXJuIG1fcHRyW2ldOwogICAg
IH0KKyAgICAKKyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAorICAgIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3NpemU7IGkrKykgeworICAgICAgICAg
ICAgaWYgKG1fcHRyW2ldID09IHZhbHVlKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CiAKICAgICBUKiBkYXRhKCkg
eyByZXR1cm4gbV9wdHI7IH0KICAgICBjb25zdCBUKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9w
dHI7IH0KQEAgLTE3Miw2ICsxODEsNiBAQCBwcml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9
OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5j
cHAKaW5kZXggNjUxNDdmYWNiZTMxMmFjNGM1MGUwOWM5Y2YzMDE5MzYwZjgzN2NhOC4uMTM2NmE4
MDk0YTUwNjM5N2UwOTQ4MzQwODAyNjVkYmNhN2JlNjYxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0YVNvdXJjZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkRhdGFTb3VyY2VJbXBsLmNwcApAQCAtMTc0LDcgKzE3NCw3IEBA
IFdlYkRhdGFTb3VyY2VJbXBsOjpXZWJEYXRhU291cmNlSW1wbChjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0CiAgICAgICAgIC8vIGZyYW1lLCB3aGljaCByZXN1bHRz
IGluIGEgc2Vjb25kIGRhdGEgc291cmNlIGJlaW5nIGNyZWF0ZWQuICBXZSB3YW50CiAgICAgICAg
IC8vIHRvIHdhaXQgdG8gYXR0YWNoIHRoZSBXZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIgdG8gdGhhdCBk
YXRhIHNvdXJjZS4KICAgICAgICAgaWYgKCFyZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlci0+dXJsKCkgPT0gcmVxdWVz
dC51cmwoKSk7CisgICAgICAgICAgICBBU1NFUlQobV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyLT51
cmwoKSA9PSBXZWJVUkwocmVxdWVzdC51cmwoKSkpOwogICAgICAgICAgICAgbV9wbHVnaW5Mb2Fk
T2JzZXJ2ZXIuc2V0KG1fbmV4dFBsdWdpbkxvYWRPYnNlcnZlcik7CiAgICAgICAgICAgICBtX25l
eHRQbHVnaW5Mb2FkT2JzZXJ2ZXIgPSAwOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggMWZkYTQ4NGU1N2MzYTlh
OTJiZTc0ZDllMGQ0NTI2YmIwOTg3YTJhYi4uYzhjNzUyOTdmNDJkNzhiODlmZTcwZGQ5Zjk0MDAx
MzM3ZjlmY2U5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtMzEsMTkgKzMxLDE1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKIAorI2luY2x1ZGUgIldlYkNT
dHJpbmcuaCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5o
IgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFn
ZVNlcmlhbGl6ZXJJbXBsLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2Vi
VVJMLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisKK0tVUkwgZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxl
bWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBjb25z
dCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVOYW1lID0gMDsKKyAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdFRhZykpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNB
dHRyOworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRh
ZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1M
SW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRv
bigpKQorICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Cisg
ICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykK
KyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykK
KyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykp
CisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsKKyAg
ICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykK
KyAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykKKyAg
ICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAg
ICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAg
ICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6Y2l0ZUF0dHI7CisgICAgZWxzZSBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7CisgICAgICAgIC8vIElm
IHRoZSBsaW5rIGVsZW1lbnQgaXMgbm90IGNzcywgaWdub3JlIGl0LgorICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIp
LCAidGV4dC9jc3MiKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBl
eHRyYWN0aW5nIGxpbmtzIG9mIHN1Yi1yZXNvdXJjZXMgd2hpY2gKKyAgICAgICAgICAgIC8vIGFy
ZSBpbnNpZGUgc3R5bGUtc2hlZXQgc3VjaCBhcyBAaW1wb3J0LCBAZm9udC1mYWNlLCB1cmwoKSwg
ZXRjLgorICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmhyZWZBdHRyOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0VGFnKSkKKyAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmRhdGFBdHRy
OworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykp
CisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOworCisgICAgaWYg
KCFhdHRyaWJ1dGVOYW1lKQorICAgICAgICByZXR1cm4gS1VSTCgpOworCisgICAgU3RyaW5nIHZh
bHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGVOYW1lKTsKKyAgICAvLyBJZ25v
cmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUu
c3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAg
ICAgIHJldHVybiBLVVJMKCk7CisgIAorICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3ZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50
KEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0
b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVSTHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICAvLyBJZiB0
aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9jZXNzIGl0IGxhdGVyIGluIHJldHJpZXZlUmVz
b3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpCisg
ICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCisgICAgICAgICAgICAmJiBl
bGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0g
c3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCktPmNvbnRlbnRGcmFt
ZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsKKyAgICAgICAgICAgIGlmICghdmlzaXRlZEZyYW1l
cy0+Y29udGFpbnMoZnJhbWUpKQorICAgICAgICAgICAgICAgIGZyYW1lc1RvVmlzaXQtPmFwcGVu
ZChmcmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBL
VVJMIHVybCA9IGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYg
KHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsgLy8gTm8g
c3VicmVzb3VyY2UgZm9yIHRoaXMgbm9kZS4KKworICAgIC8vIElnbm9yZSBVUkxzIHRoYXQgaGF2
ZSBhIG5vbi1zdGFuZGFyZCBwcm90b2NvbHMuIFNpbmNlIHRoZSBGVFAgcHJvdG9jb2wKKyAgICAv
LyBkb2VzIG5vIGhhdmUgYSBjYWNoZSBtZWNoYW5pc20sIHdlIHNraXAgaXQgYXMgd2VsbC4KKyAg
ICBpZiAoIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpICYmICF1cmwuaXNMb2NhbEZpbGUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFyZXNvdXJjZVVSTHMtPmNvbnRhaW5zKHVybCkp
CisgICAgICAgIHJlc291cmNlVVJMcy0+YXBwZW5kKHVybCk7Cit9CisKK3ZvaWQgcmV0cmlldmVS
ZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDU3RyaW5nPiYgc3VwcG9y
dGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUq
PiogdmlzaXRlZEZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8
RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8S1VSTD4qIGZyYW1lVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW
ZWN0b3I8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICBLVVJMIGZyYW1lVVJMID0gZnJhbWUt
PmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBJ
ZiB0aGUgZnJhbWUncyBVUkwgaXMgaW52YWxpZCwgaWdub3JlIGl0LCBpdCBpcyBub3QgcmV0cmll
dmFibGUuCisgICAgaWYgKCFmcmFtZVVSTC5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIElnbm9yZSBmcmFtZXMgZnJvbSB1bnN1cHBvcnRlZCBzY2hlbWVzLgorICAgIGJvb2wg
aXNWYWxpZFNjaGVtZSA9IGZhbHNlOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VwcG9y
dGVkU2NoZW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoZnJhbWVVUkwucHJvdG9jb2xJ
cyhzdGF0aWNfY2FzdDxDU3RyaW5nPihzdXBwb3J0ZWRTY2hlbWVzW2ldKS5kYXRhKCkpKSB7Cisg
ICAgICAgICAgICBpc1ZhbGlkU2NoZW1lID0gdHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIGlmICghaXNWYWxpZFNjaGVtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhhdCBmcmFtZSwgaWdub3JlIGl0Lgor
ICAgIGlmICh2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkpCisgICAgICAgIHJldHVybjsK
KyAgICB2aXNpdGVkRnJhbWVzLT5hcHBlbmQoZnJhbWUpOworICAgIGlmICghZnJhbWVVUkxzLT5j
b250YWlucyhmcmFtZVVSTCkpCisgICAgICAgIGZyYW1lVVJMcy0+YXBwZW5kKGZyYW1lVVJMKTsK
KyAgCisgICAgLy8gTm93IGdldCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG5v
ZGUgb2YgdGhlIGRvY3VtZW50LgorICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsTm9k
ZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+YWxsKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFsbE5vZGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhbGxO
b2Rlcy0+aXRlbShpKTsKKyAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBIVE1M
IHJlc291cmNlcy4KKyAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZpc2l0ZWRGcmFtZXMsIGZyYW1lc1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcmFtZVVSTHMsIHJlc291cmNlVVJMcyk7CisgICAgfQorfQorCit9IC8v
IG5hbWVzcGFjZQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogYm9vbCBXZWJQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKQEAgLTU4LDYgKzE5MSw0OCBAQCBib29sIFdl
YlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgIHJldHVybiBz
ZXJpYWxpemVySW1wbC5zZXJpYWxpemUoKTsKIH0KIAorYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6
cmV0cmlldmVBbGxSZXNvdXJjZXMoV2ViVmlldyogdmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJDU3RyaW5nPiYgc3Vw
cG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlZlY3RvcjxXZWJVUkw+KiByZXNvdXJjZVVSTHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2ViVVJMPiogZnJhbWVVUkxzKSB7
CisgICAgV2ViRnJhbWVJbXBsKiBtYWluRnJhbWUgPSBzdGF0aWNfY2FzdDxXZWJGcmFtZUltcGwq
Pih2aWV3LT5tYWluRnJhbWUoKSk7CisgICAgaWYgKCFtYWluRnJhbWUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFZlY3RvcjxGcmFtZSo+IGZyYW1lc1RvVmlzaXQ7CisgICAgVmVjdG9y
PEZyYW1lKj4gdmlzaXRlZEZyYW1lczsKKyAgICBWZWN0b3I8S1VSTD4gZnJhbWVLVVJMczsKKyAg
ICBWZWN0b3I8S1VSTD4gcmVzb3VyY2VLVVJMczsKKyAgICAKKyAgICAvLyBMZXQncyByZXRyaWV2
ZSB0aGUgcmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBwYWdlLgorICAgIGZyYW1l
c1RvVmlzaXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CisgICAgd2hpbGUgKCFmcmFtZXNU
b1Zpc2l0LmlzRW1wdHkoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBmcmFtZXNUb1Zpc2l0
WzBdOworICAgICAgICBmcmFtZXNUb1Zpc2l0LnJlbW92ZSgwKTsKKyAgICAgICAgcmV0cmlldmVS
ZXNvdXJjZXNGb3JGcmFtZShmcmFtZSwgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1lc1RvVmlzaXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyYW1lS1VSTHMsICZyZXNvdXJjZUtVUkxz
KTsKKyAgICB9CisKKyAgICAvLyBDb252ZXJ0cyB0aGUgcmVzdWx0cyB0byBXZWJVUkxzLgorICAg
IFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdFJlc291cmNlVVJMcyhyZXNvdXJjZUtVUkxzLnNpemUo
KSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZUtVUkxzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tpXSA9IHJlc291cmNlS1VSTHNbaV07Cisg
ICAgICAgIC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBhcyBhbm90
aGVyIHJlc291cmNlLCBrZWVwIHRoZQorICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25seSBpbiBz
dWNoIGNhc2VzLgorICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3Vy
Y2VLVVJMc1tpXSk7CisgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKKyAgICAgICAgICAg
IGZyYW1lS1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICB9CisgICAgKnJlc291cmNlVVJMcyA9IHJl
c3VsdFJlc291cmNlVVJMczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMo
ZnJhbWVLVVJMcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVLVVJM
cy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gZnJhbWVLVVJMc1tp
XTsKKyAgICAqZnJhbWVVUkxzID0gcmVzdWx0RnJhbWVVUkxzOworICAgIAorICAgIHJldHVybiB0
cnVlOworfQorCiBXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlTWV0YUNoYXJz
ZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpCiB7CiAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4
dC9odG1sOyBjaGFyc2V0PSIsIHN0YXRpY19jYXN0PGNvbnN0IFN0cmluZyY+KGNoYXJzZXQpLCAi
XCI+Iik7CkBAIC03Nyw0ICsyNTIsNCBAQCBXZWJTdHJpbmcgV2ViUGFnZVNlcmlhbGl6ZXI6Omdl
bmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcgogICAgIHJl
dHVybiBtYWtlU3RyaW5nKCI8YmFzZSBocmVmPVwiLlwiIHRhcmdldD1cIiIsIHN0YXRpY19jYXN0
PGNvbnN0IFN0cmluZyY+KGJhc2VUYXJnZXQpLCAiXCI+Iik7CiB9CiAKLX0gIC8vIG5hbWVzcGFj
ZSBXZWJLaXQKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCmluZGV4IDczNDI3MjE3YTFmNDllN2JmMTgxMTIyMTY0
MGQ5ZTM0NWNlYzJkMzAuLjA3YzE2YTAzZTc0Nzc1MDFjNGZjNGJiZmFlY2QwMWQyYjZjNzEyNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVUZXN0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAKQEAg
LTI4LDYgKzI4LDggQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAorI2luY2x1ZGUgImNvbmZpZy5o
IgorCiAjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3Qu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmEwODlmOTI3OTQxM2YxMTVjMzM3M2NkYTk1YWMzYzMwMjNkNGJiNzAK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VT
ZXJpYWxpemVyVGVzdC5jcHAKQEAgLTAsMCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2Vi
VVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1
cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFt
ZUNsaWVudCB7Cit9OworCitjbGFzcyBXZWJQYWdlU2VyaWFsaXplclRlc3QgOiBwdWJsaWMgdGVz
dGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0KCkgOiBtX3dl
YlZpZXcoMCksIG1fc3VwcG9ydGVkU2NoZW1lcygzVSkKKyAgICB7CisgICAgICAgIG1fc3VwcG9y
dGVkU2NoZW1lc1swXSA9ICJodHRwIjsKKyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzFdID0g
Imh0dHBzIjsKKyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzJdID0gImZpbGUiOworICAgIH0K
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAv
LyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9
IFdlYlZpZXc6OmNyZWF0ZSgwLCAwLCAwKTsKKyAgICAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXpl
TWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQg
VGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxN
b2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICB2
b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3Ry
aW5nJiBmaWxlTmFtZSkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOwor
ICAgICAgICByZXNwb25zZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVU
eXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRf
c3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGguYXBw
ZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
LyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUudXRmOCgpKTsKKyAgICAgICAg
d2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkxJblRvcEZy
YW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVx
dWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7CisgICAgICAgIHVybFJlcXVl
c3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+
bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGlu
ZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5j
aHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgd2ViVmVj
dG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJsKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZlY3Rvci5jb250YWlucyhXZWJVUkwoR1VSTCh1cmwpKSk7
CisgICAgfQorCisgICAgLy8gVXNlZnVsIGZvciBkZWJ1Z2dpbmcuCisgICAgc3RhdGljIHZvaWQg
cHJpbnRXZWJVUkxzKGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiB1cmxzKQorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAg
cHJpbnRmKCIlc1xuIiwgdXJsc1tpXS5zcGVjKCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBXZWJW
aWV3KiBtX3dlYlZpZXc7CisgICAgV2ViVmVjdG9yPFdlYkNTdHJpbmc+IG1fc3VwcG9ydGVkU2No
ZW1lczsKKworcHJpdmF0ZToKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVu
dDsKK307CisKK1RFU1RfRihXZWJQYWdlU2VyaWFsaXplclRlc3QsIEhUTUxOb2RlcykKK3sKKyAg
ICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0
b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZV9wYWdl
Lmh0bWwiKSk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgLy8g
UmV0cmlldmUgYWxsIHJlc291cmNlcy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7Cisg
ICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzb3VyY2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VT
ZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcygKKyAgICAgICAgbV93ZWJWaWV3LCBtX3N1
cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMsICZmcmFtZXMpKTsgICAgCisKKyAgICAvLyBUZXN0
cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJvbSB0aGUgZnJhbWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4K
KyAgICBFWFBFQ1RfRVEoMSwgZnJhbWVzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBk
dXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0
dHA6Ly93d3cudGVzdC5jb20iKSk7CisKKyAgICBFWFBFQ1RfRVEoMTQsIHJlc291cmNlcy5zaXpl
KCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3
ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0
aWZ1bGwuY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vYXdlc29tZS5qcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3
ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JvZHlCYWNr
Z3JvdW5kLmpwZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1hZ2VC
dXR0b24ucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vdGFibGVCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L3RyQmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS90ZEJhY2tncm91bmQucG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuZXZl
bmUuZnIvY2l0YXRpb25zL2F1dGV1ci5waHA/aWRhPTQ2IikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29tL3F1
b3Rlcy9hdXRob3JzL2MvY2hhcmxlc19kYXJ3aW4uaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3
ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9kZWxl
dGVkLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlfaW5zZXJ0ZWQuaHRtbCIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwczovL3d3dy5zZWN1cmUuY29t
L2h0dHBzLmdpZiIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJmaWxlOi8vYy9teV9mb2xkZXIvZmlsZS5naWYiKSk7Cit9CisKK1RFU1RfRihXZWJQYWdl
U2VyaWFsaXplclRlc3QsIE11bHRpcGxlRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBt
b2NrZWQgZnJhbWVzLgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0
cmluZzo6ZnJvbVVURjgoInRvcF9mcmFtZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3NpbXBsZV9pZnJhbWUuaHRtbCIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfaWZyYW1l
Lmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vb2JqZWN0X2lmcmFtZS5odG1sIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlN0cmluZzo6ZnJvbVVURjgoIm9iamVjdF9pZnJhbWUuaHRtbCIpKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9lbWJlZF9pZnJhbWUuaHRtbCIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbWJlZF9p
ZnJhbWUuaHRtbCIpKTsKKyAgICAvLyBJZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCByZXNv
dXJjZSBmb3IgYXdlc29tZS5wbmcsIGl0IGNhdXNlcyB0aGUKKyAgICAvLyBkb2N1bWVudCBsb2Fk
ZXIgb2YgdGhlIGlmcmFtZSB0aGF0IGhhcyBpdCBhcyBpdHMgc3JjIHRvIGFzc2VydCBvbiBjbG9z
ZSwKKyAgICAvLyBub3Qgc3VyZSB3aHkuCisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vYXdlc29tZS5wbmciKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXdlc29tZS5wbmciKSk7CisKKyAgICBsb2FkVVJM
SW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2Vz
LgorICAgIFdlYlZlY3RvcjxXZWJVUkw+IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBy
ZXNvdXJjZXM7CisgICAgQVNTRVJUX1RSVUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxs
UmVzb3VyY2VzKAorICAgICAgICBtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291
cmNlcywgJmZyYW1lcykpOyAgICAKKworICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBm
cm9tIHRoZSBmcmFtZSBoYXZlIGJlZW4gcmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSg0LCBmcmFt
ZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsK
KyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL3NpbXBsZV9pZnJhbWUuaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JD
b250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29iamVjdF9pZnJhbWUuaHRtbCIp
KTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2VtYmVkX2lmcmFtZS5odG1sIikpOworCisgICAgRVhQRUNUX0VRKDYsIHJlc291
cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2F3ZXNvbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW5uZXJGcmFtZS5wbmciKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9m
bGFzaC5zd2YiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9tdXNpYy5taWQiKSk7CisgICAgRVhQRUNUX1RSVUUod2Vi
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vYmplY3QucG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vZW1iZWQucG5nIikpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmcg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdl
c29tZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIxMzc4OTE3OTFmZTk2OTI3YWQ3OGU2NGIwYWFkN2JkZWQw
OGJkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9hd2Vzb21lLnBuZwpAQCAtMCwwICsxIEBACisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9l
bWJlZF9pZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9lbWJlZF9pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzRhOGE5ZDA5Yjdk
ZjMwYzI0OWYyNTc0YThjNjFiMTFjZGUxYWQwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2VtYmVkX2lmcmFtZS5o
dG1sCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisKKzxpbWcgc3JjPSJlbWJlZC5wbmciLz4KKwor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL29iamVjdF9pZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9vYmplY3RfaWZyYW1lLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNjYyYmM1ZjUxZGE3MDUyNzk1YWFhZWI1YjAwODNlZWQzN2Q2ZjM2NwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXph
dGlvbi9vYmplY3RfaWZyYW1lLmh0bWwKQEAgLTAsMCArMSw1IEBACis8aHRtbD4KKworPGltZyBz
cmM9Im9iamVjdC5wbmciLz4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBsZV9pZnJhbWUuaHRtbCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1w
bGVfaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVkY2ExNzBjZDlhMWRmN2I5YTQwZWExZTdhMTRm
MzVlZmNmYjdiZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwKQEAgLTAsMCArMSwx
NCBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdl
YlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyByZXRyaWV2ZXMKKyAgICBjb3Jy
ZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVuIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBm
cmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8aW1nIHNyYz0iYXdlc29tZS5wbmciLz4KKzxpbWcg
c3JjPSJpbm5lckZyYW1lLnBuZyIvPgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1w
bGVfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL3NpbXBsZV9wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjZkMDllMWYxZTYzMTgzOWI0
MjFkZjNkYmMyNDllOGI1MDJmMDNlMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfcGFnZS5odG1sCkBA
IC0wLDAgKzEsNTAgQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRl
c3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVz
CisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgZnJvbSB2YXJpb3VzIEhUTUwg
bm9kZXMuCistLT4KKworPGhlYWQ+Cis8IS0tIFN0eWxlIHNoZWV0IGxpbmtzIHNob3VsZCBiZSBy
ZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0aWZ1bGwuY3NzIi8+Cis8IS0tIE90aGVyIGxp
bmsgc2hvdWxkIE5PVCBiZSByZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9ImNvcHlyaWdodCIgdHlw
ZT0idGV4dC9wbGFpbiIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9jb3B5cmlnaHQiLz4K
KzwhLS0gU2NyaXB0cyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPHNjcmlwdCBzcmM9ImF3ZXNv
bWUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8IS0tIEltYWdlcyBhcmUgYWx3YXlzIHJldHJp
ZXZlZCAtLT4KKzxib2R5IGJhY2tncm91bmQ9ImJvZHlCYWNrZ3JvdW5kLmpwZyI+CisKKzwhLS0g
VHdpY2UgdG8gbWFrZSBzdXJlIHdlIG9ubHkgcmVwb3J0IGVhY2ggcmVzb3VyY2Ugb25jZSAtLT4K
KzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorPGltZyBzcmM9ImF3ZXNvbWUucG5nIi8+CisKKzxm
b3JtPgorICA8aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaW1hZ2VCdXR0b24ucG5nIi8+Cis8L2Zv
cm0+CisKKzx0YWJsZSBiYWNrZ3JvdW5kPSJ0YWJsZUJhY2tncm91bmQucG5nIj4KKyAgPHRyIGJh
Y2tncm91bmQ9InRyQmFja2dyb3VuZC5wbmciPgorICAgIDx0ZCBiYWNrZ3JvdW5kPSJ0ZEJhY2tn
cm91bmQucG5nIj48L3RkPgorICA8L3RyPiAgCisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91
bmQucG5nIj4KKyAgICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAg
PC90cj4KKzwvdGFibGU+CisKKzwhLS0gU29tZSBtb3JlIG9ic2N1cmUgdGFncyAtLT4KKzxibG9j
a3F1b3RlIGNpdGU9Imh0dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRpb25zL2F1dGV1ci5waHA/aWRh
PTQ2Ij48L2Jsb2NrcXVvdGU+Cis8cSBDSVRFPSJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9x
dW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNfZGFyd2luLmh0bWwiPjwvcT4KKzxwPk15IGZhdm9yaXRl
IGNvbG9yIGlzIDxkZWwgY2l0ZT0id2h5X2RlbGV0ZWQuaHRtbCI+Ymx1ZTwvZGVsPiA8aW5zPnJl
ZDwvaW5zPiE8L3A+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsPmJsdWU8L2RlbD4gPGlu
cyBjaXRlPSJ3aHlfaW5zZXJ0ZWQuaHRtbCI+cmVkPC9pbnM+ITwvcD4KKworPCEtLSBNYWtlIHN1
cmUgd2Ugb25seSByZXRyaWV2ZSBVUkxzIHdpdGggdGhlIHJpZ2h0IHNjaGVtZXMgLS0+Cis8aW1n
IHNyYz0iaHR0cHM6Ly93d3cuc2VjdXJlLmNvbS9odHRwcy5naWYiLz4gIDwhLS0gSFRUUFMgaXMg
T0sgLS0+Cis8aW1nIHNyYz0iZmlsZTovL2MvbXlfZm9sZGVyL2ZpbGUuZ2lmIi8+ICA8IS0tIGZp
bGUgaXMgT0sgLS0+Cis8aW1nIHNyYz0iZnRwOi8vZnRwLmNvbS9mdHAuZ2lmIi8+ICA8IS0tIEZU
UCBpcyBub3QgT0sgLS0+Cis8aW1nIHNyYz0idW5rbm93bjovL3Vua293bi5jb20vdW5rbm93bi5n
aWYiLz4gIDwhLS0gVW5rbm93biBzY2hlbWVzIGFyZSBub3QgT0sgLS0+CisKKzwvYm9keT4KKwor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNzU1CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjli
OWRjMjAxZDg4YTBjZmRkODk3NzI2YjJkNmUwMzZkZWViMDM3ZmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9w
X2ZyYW1lLmh0bWwKQEAgLTAsMCArMSwyNyBAQAorPGh0bWw+Cis8IS0tCisgICAgVGhpcyBwYWdl
IGlzIHVzZWQgdG8gdGVzdCB0aGF0IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291
cmNlcyByZXRyaWV2ZXMKKyAgICBjb3JyZWN0bHkgdGhlIGV4cGVjdGVkIHJlc291cmNlcyB3aGVu
IGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBmcmFtZXMuIAorLS0+CisKKzxib2R5PgorCis8IS0tIFJl
c291cmNlcyB1c2VkIGJ5IGEgZnJhbWUgYW5kIGEgdGFnIHNob3VsZCBiZSBvbmx5IHJlcG9ydGVk
IG9uY2UgLS0+Cis8aWZyYW1lIHNyYz0iYXdlc29tZS5wbmciPjwvaWZyYW1lPgorPGltZyBzcmM9
ImF3ZXNvbWUucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZy
YW1lPgorPGlmcmFtZSBzcmM9InNpbXBsZV9pZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwhLS0g
T2JqZWN0IHRhZ3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGlmcmFtZXMgLS0+CisKKzxvYmplY3Qg
ZGF0YT0ib2JqZWN0X2lmcmFtZS5odG1sIj48L29iamVjdD4KKzxvYmplY3QgZGF0YT0iZmxhc2gu
c3dmIj48L29iamVjdD4KKworPCEtLSBFbWJlZCB0YWdzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBp
ZnJhbWVzIGFzIHdlbGwgLS0+Cis8ZW1iZWQgc3JjPSJlbWJlZF9pZnJhbWUuaHRtbCI+PC9vYmpl
Y3Q+Cis8ZW1iZWQgc3JjPSJtdXNpYy5taWQiPjwvZW1iZWQ+CisKKzwvYm9keT4KKworPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86718</attachid>
            <date>2011-03-23 16:21:20 -0700</date>
            <delta_ts>2011-03-23 19:44:15 -0700</delta_ts>
            <desc>One more attempt at landing this.</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>28411</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTgxOCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMTEtMDMtMjMgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbGFuZGluZzoK
KyAgICAgICAgTW92aW5nIHRoZSBtZXRob2QgdGhhdCBpcyB1c2VkIHRvIHJldHJpZXZlIGFsbCB0
aGUgcmVzb3VyY2VzIGluCisgICAgICAgIGEgcGFnZSBmcm9tIHRoZSBDaHJvbWl1bSBjb2RlIChk
b21fb3BlcmF0aW9ucy5jYykgdG8gV2ViS2l0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NTkKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAg
ICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgICogcHVibGljL1dlYlVS
TC5oOgorICAgICAgICAoV2ViS2l0OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6b3Bl
cmF0b3IhPSk6CisgICAgICAgICogcHVibGljL1dlYlZlY3Rvci5oOgorICAgICAgICAoV2ViS2l0
OjpXZWJWZWN0b3I6OmNvbnRhaW5zKToKKyAgICAgICAgKiBzcmMvV2ViRGF0YVNvdXJjZUltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUlt
cGwpOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJl
c291cmNlc0ZvckZyYW1lKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJl
dHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAgICAgKiB0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwOgor
ICAgICAgICAqIHRlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vYXdlc29tZS5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vZW1iZWRfaWZyYW1lLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vb2JqZWN0X2lmcmFt
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3Np
bXBsZV9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXphdGlvbi9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0yMyAgQ2hy
aXMgUm9nZXJzICA8Y3JvZ2Vyc0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bm5ldGggUnVzc2VsbC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9u
IDgxODE4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNv
cHkpCkBAIC04MTcsNiArODE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIH1d
LAogICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09Im1hYyInLCB7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHJldmlz
aW9uIDgxODE4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlh
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTAgKzM0LDEyIEBACiAjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNz
IFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBjbGFzcyBXZWJTdHJp
bmc7CiBjbGFzcyBXZWJVUkw7CitjbGFzcyBXZWJWaWV3OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFdlYlZlY3RvcjsKIAogLy8gR2V0IGh0bWwgZGF0YSBieSBzZXJpYWxpemluZyBhbGwg
ZnJhbWVzIG9mIGN1cnJlbnQgcGFnZSB3aXRoIGxpc3RzCkBAIC02OSw2ICs3MSwxNCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9y
PFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOwogCisgICAgLy8gUmV0
cmlldmUgYWxsIHRoZSByZXNvdXJjZSBmb3IgdGhlIHBhc3NlZCB2aWV3LCBpbmNsdWRpbmcgdGhl
IG1haW4gZnJhbWUKKyAgICAvLyBhbmQgc3ViLWZyYW1lcy4gUmV0dXJucyB0cnVlIGlmIGFsbCBy
ZXNvdXJjZXMgd2VyZSByZXRyaWV2ZWQKKyAgICAvLyBzdWNjZXNzZnVsbHkuCisgICAgV0VCS0lU
X0FQSSBzdGF0aWMgYm9vbCByZXRyaWV2ZUFsbFJlc291cmNlcyhXZWJWaWV3KiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxXZWJVUkw+KiByZXNvdXJjZXMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJWZWN0b3I8V2Vi
VVJMPiogZnJhbWVzKTsKKwogICAgIC8vIEZJWE1FOiBUaGUgZm9sbG93aW5nIGFyZSBoZXJlIGZv
ciB1bml0IHRlc3RpbmcgcHVycG9zZXMuIENvbnNpZGVyCiAgICAgLy8gY2hhbmdpbmcgdGhlIHVu
aXQgdGVzdHMgaW5zdGVhZC4KIApAQCAtODAsNiArOTAsNiBAQCBwdWJsaWM6CiAgICAgV0VCS0lU
X0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0IFdl
YlN0cmluZyYgYmFzZVRhcmdldCk7CiB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJVUkwuaAkocmV2aXNpb24gODE4MTgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJVUkwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxNiBAQCBpbmxp
bmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgV2ViVVJMJiBhLCBjCiAgICAgcmV0dXJuIGEuc3BlYygp
IDwgYi5zcGVjKCk7CiB9CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViVVJMJiBh
LCBjb25zdCBXZWJVUkwmIGIpCit7CisgICAgcmV0dXJuICFhLnNwZWMoKS5jb21wYXJlKGIuc3Bl
YygpKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWJVUkwmIGEsIGNvbnN0
IFdlYlVSTCYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJWZWN0b3IuaAkocmV2aXNpb24gODE4MTgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwxNSBAQCBwdWJs
aWM6CiAgICAgICAgIFdFQktJVF9BU1NFUlQoaSA8IG1fc2l6ZSk7CiAgICAgICAgIHJldHVybiBt
X3B0cltpXTsKICAgICB9CisgICAgCisgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkg
Y29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9zaXplOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChtX3B0cltpXSA9PSB2YWx1ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAg
ICAgVCogZGF0YSgpIHsgcmV0dXJuIG1fcHRyOyB9CiAgICAgY29uc3QgVCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHRyOyB9CkBAIC0xNzIsNiArMTgxLDYgQEAgcHJpdmF0ZToKICAgICBzaXpl
X3QgbV9zaXplOwogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYktpdAorfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGF0
YVNvdXJjZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkRhdGFTb3VyY2VJbXBsLmNwcAkocmV2aXNpb24gODE4MTgpCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJEYXRhU291cmNlSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
NCw3ICsxNzQsNyBAQCBXZWJEYXRhU291cmNlSW1wbDo6V2ViRGF0YVNvdXJjZUltcGwoY29uCiAg
ICAgICAgIC8vIGZyYW1lLCB3aGljaCByZXN1bHRzIGluIGEgc2Vjb25kIGRhdGEgc291cmNlIGJl
aW5nIGNyZWF0ZWQuICBXZSB3YW50CiAgICAgICAgIC8vIHRvIHdhaXQgdG8gYXR0YWNoIHRoZSBX
ZWJQbHVnaW5Mb2FkT2JzZXJ2ZXIgdG8gdGhhdCBkYXRhIHNvdXJjZS4KICAgICAgICAgaWYgKCFy
ZXF1ZXN0LnVybCgpLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgQVNTRVJUKG1fbmV4dFBsdWdp
bkxvYWRPYnNlcnZlci0+dXJsKCkgPT0gcmVxdWVzdC51cmwoKSk7CisgICAgICAgICAgICBBU1NF
UlQobV9uZXh0UGx1Z2luTG9hZE9ic2VydmVyLT51cmwoKSA9PSBXZWJVUkwocmVxdWVzdC51cmwo
KSkpOwogICAgICAgICAgICAgbV9wbHVnaW5Mb2FkT2JzZXJ2ZXIuc2V0KG1fbmV4dFBsdWdpbkxv
YWRPYnNlcnZlcik7CiAgICAgICAgICAgICBtX25leHRQbHVnaW5Mb2FkT2JzZXJ2ZXIgPSAwOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA4MTgxOCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTkgKzMx
LDE1MiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVy
LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJWZWN0b3IuaCIKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJGcmFt
ZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxp
emVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9y
LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29u
Y2F0ZW5hdGUuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKK25hbWVzcGFjZSB7CisK
K0tVUkwgZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIEFTU0VSVChlbGVtZW50KTsKKyAgICBjb25zdCBRdWFsaWZpZWROYW1lKiBhdHRyaWJ1dGVO
YW1lID0gMDsKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykg
fHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCisgICAgICAgIGF0
dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgIGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKKyAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7Cisg
ICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigpKQorICAgICAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjp0YWJsZVRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0clRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0ZFRhZykpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAm
SFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cVRhZykKKyAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZGVsVGFnKQorICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxO
YW1lczo6Y2l0ZUF0dHI7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmxpbmtUYWcpKSB7CisgICAgICAgIC8vIElmIHRoZSBsaW5rIGVsZW1lbnQgaXMgbm90IGNz
cywgaWdub3JlIGl0LgorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+Z2V0
QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpLCAidGV4dC9jc3MiKSkgeworICAgICAgICAg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGxpbmtzIG9mIHN1Yi1yZXNv
dXJjZXMgd2hpY2gKKyAgICAgICAgICAgIC8vIGFyZSBpbnNpZGUgc3R5bGUtc2hlZXQgc3VjaCBh
cyBAaW1wb3J0LCBAZm9udC1mYWNlLCB1cmwoKSwgZXRjLgorICAgICAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OmhyZWZBdHRyOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAgICAgICAgYXR0cmli
dXRlTmFtZSA9ICZIVE1MTmFtZXM6OmRhdGFBdHRyOworICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCisgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAm
SFRNTE5hbWVzOjpzcmNBdHRyOworCisgICAgaWYgKCFhdHRyaWJ1dGVOYW1lKQorICAgICAgICBy
ZXR1cm4gS1VSTCgpOworCisgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRl
KCphdHRyaWJ1dGVOYW1lKTsKKyAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAg
IGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCisgICAgICAgIHJldHVybiBLVVJMKCk7CisgIAorICAg
IHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7Cit9CisKK3Zv
aWQgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNU
b1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiBm
cmFtZVVSTHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4q
IHJlc291cmNlVVJMcykKK3sKKyAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBw
cm9jZXNzIGl0IGxhdGVyIGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgaWYgKChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKSB8fCBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjplbWJlZFRhZykpCisgICAgICAgICAgICAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpIHsKKyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJF
bGVtZW50Kj4oZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOworICAgICAgICBpZiAoZnJhbWUpIHsK
KyAgICAgICAgICAgIGlmICghdmlzaXRlZEZyYW1lcy0+Y29udGFpbnMoZnJhbWUpKQorICAgICAg
ICAgICAgICAgIGZyYW1lc1RvVmlzaXQtPmFwcGVuZChmcmFtZSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBLVVJMIHVybCA9IGdldFN1YlJlc291cmNlVVJM
RnJvbUVsZW1lbnQoZWxlbWVudCk7CisgICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1Zh
bGlkKCkpCisgICAgICAgIHJldHVybjsgLy8gTm8gc3VicmVzb3VyY2UgZm9yIHRoaXMgbm9kZS4K
KworICAgIC8vIElnbm9yZSBVUkxzIHRoYXQgaGF2ZSBhIG5vbi1zdGFuZGFyZCBwcm90b2NvbHMu
IFNpbmNlIHRoZSBGVFAgcHJvdG9jb2wKKyAgICAvLyBkb2VzIG5vIGhhdmUgYSBjYWNoZSBtZWNo
YW5pc20sIHdlIHNraXAgaXQgYXMgd2VsbC4KKyAgICBpZiAoIXVybC5wcm90b2NvbEluSFRUUEZh
bWlseSgpICYmICF1cmwuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFyZXNvdXJjZVVSTHMtPmNvbnRhaW5zKHVybCkpCisgICAgICAgIHJlc291cmNlVVJMcy0+YXBw
ZW5kKHVybCk7Cit9CisKK3ZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJh
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJWZWN0
b3I8V2ViS2l0OjpXZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIGZyYW1lVVJMcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291cmNlVVJMcykK
K3sKKyAgICBLVVJMIGZyYW1lVVJMID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXF1ZXN0KCkudXJsKCk7CisKKyAgICAvLyBJZiB0aGUgZnJhbWUncyBVUkwgaXMgaW52YWxp
ZCwgaWdub3JlIGl0LCBpdCBpcyBub3QgcmV0cmlldmFibGUuCisgICAgaWYgKCFmcmFtZVVSTC5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSBmcmFtZXMgZnJvbSB1
bnN1cHBvcnRlZCBzY2hlbWVzLgorICAgIGJvb2wgaXNWYWxpZFNjaGVtZSA9IGZhbHNlOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VwcG9ydGVkU2NoZW1lcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoZnJhbWVVUkwucHJvdG9jb2xJcyhzdGF0aWNfY2FzdDxDU3RyaW5nPihzdXBw
b3J0ZWRTY2hlbWVzW2ldKS5kYXRhKCkpKSB7CisgICAgICAgICAgICBpc1ZhbGlkU2NoZW1lID0g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIGlmICghaXNW
YWxpZFNjaGVtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5
IHNlZW4gdGhhdCBmcmFtZSwgaWdub3JlIGl0LgorICAgIGlmICh2aXNpdGVkRnJhbWVzLT5jb250
YWlucyhmcmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICB2aXNpdGVkRnJhbWVzLT5hcHBlbmQo
ZnJhbWUpOworICAgIGlmICghZnJhbWVVUkxzLT5jb250YWlucyhmcmFtZVVSTCkpCisgICAgICAg
IGZyYW1lVVJMcy0+YXBwZW5kKGZyYW1lVVJMKTsKKyAgCisgICAgLy8gTm93IGdldCB0aGUgcmVz
b3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG5vZGUgb2YgdGhlIGRvY3VtZW50LgorICAgIFJl
ZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsTm9kZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+YWxs
KCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFsbE5vZGVzLT5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSBhbGxOb2Rlcy0+aXRlbShpKTsKKyAgICAgICAgLy8g
V2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBIVE1MIHJlc291cmNlcy4KKyAgICAgICAgaWYgKCFu
b2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcmV0
cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGcmFtZXMsIGZyYW1lc1Rv
VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVVSTHMsIHJl
c291cmNlVVJMcyk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQorCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAogYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFt
ZSwKQEAgLTU4LDYgKzE5MSw0OCBAQCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUo
V2ViRnJhCiAgICAgcmV0dXJuIHNlcmlhbGl6ZXJJbXBsLnNlcmlhbGl6ZSgpOwogfQogCitib29s
IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291cmNlcyhXZWJWaWV3KiB2aWV3LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVj
dG9yPFdlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViVmVjdG9yPFdlYlVSTD4qIHJlc291cmNlVVJMcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlZlY3RvcjxX
ZWJVUkw+KiBmcmFtZVVSTHMpIHsKKyAgICBXZWJGcmFtZUltcGwqIG1haW5GcmFtZSA9IHN0YXRp
Y19jYXN0PFdlYkZyYW1lSW1wbCo+KHZpZXctPm1haW5GcmFtZSgpKTsKKyAgICBpZiAoIW1haW5G
cmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPEZyYW1lKj4gZnJhbWVz
VG9WaXNpdDsKKyAgICBWZWN0b3I8RnJhbWUqPiB2aXNpdGVkRnJhbWVzOworICAgIFZlY3RvcjxL
VVJMPiBmcmFtZUtVUkxzOworICAgIFZlY3RvcjxLVVJMPiByZXNvdXJjZUtVUkxzOworICAgIAor
ICAgIC8vIExldCdzIHJldHJpZXZlIHRoZSByZXNvdXJjZXMgZnJvbSBldmVyeSBmcmFtZSBpbiB0
aGlzIHBhZ2UuCisgICAgZnJhbWVzVG9WaXNpdC5hcHBlbmQobWFpbkZyYW1lLT5mcmFtZSgpKTsK
KyAgICB3aGlsZSAoIWZyYW1lc1RvVmlzaXQuaXNFbXB0eSgpKSB7CisgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07CisgICAgICAgIGZyYW1lc1RvVmlzaXQucmVtb3ZlKDAp
OworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZyYW1lLCBzdXBwb3J0ZWRTY2hl
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aXNpdGVkRnJhbWVzLCAm
ZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVL
VVJMcywgJnJlc291cmNlS1VSTHMpOworICAgIH0KKworICAgIC8vIENvbnZlcnRzIHRoZSByZXN1
bHRzIHRvIFdlYlVSTHMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0UmVzb3VyY2VVUkxz
KHJlc291cmNlS1VSTHMuc2l6ZSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc291
cmNlS1VSTHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgcmVzdWx0UmVzb3VyY2VVUkxzW2ldID0g
cmVzb3VyY2VLVVJMc1tpXTsKKyAgICAgICAgLy8gQSBmcmFtZSdzIHNyYyBjYW4gcG9pbnQgdG8g
dGhlIHNhbWUgVVJMIGFzIGFub3RoZXIgcmVzb3VyY2UsIGtlZXAgdGhlCisgICAgICAgIC8vIHJl
c291cmNlIFVSTCBvbmx5IGluIHN1Y2ggY2FzZXMuCisgICAgICAgIHNpemVfdCBpbmRleCA9IGZy
YW1lS1VSTHMuZmluZChyZXNvdXJjZUtVUkxzW2ldKTsKKyAgICAgICAgaWYgKGluZGV4ICE9IG5v
dEZvdW5kKQorICAgICAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUoaW5kZXgpOworICAgIH0KKyAg
ICAqcmVzb3VyY2VVUkxzID0gcmVzdWx0UmVzb3VyY2VVUkxzOworICAgIFdlYlZlY3RvcjxXZWJV
Ukw+IHJlc3VsdEZyYW1lVVJMcyhmcmFtZUtVUkxzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBmcmFtZUtVUkxzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHRGcmFtZVVS
THNbaV0gPSBmcmFtZUtVUkxzW2ldOworICAgICpmcmFtZVVSTHMgPSByZXN1bHRGcmFtZVVSTHM7
CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIFdlYlN0cmluZyBXZWJQYWdlU2VyaWFsaXpl
cjo6Z2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNl
dCkKIHsKICAgICByZXR1cm4gbWFrZVN0cmluZygiPG1ldGEgaHR0cC1lcXVpdj1cIkNvbnRlbnQt
VHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9Iiwgc3RhdGljX2Nhc3Q8Y29uc3Qg
U3RyaW5nJj4oY2hhcnNldCksICJcIj4iKTsKQEAgLTc3LDQgKzI1Miw0IEBAIFdlYlN0cmluZyBX
ZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVCYXMKICAgICByZXR1cm4gbWFrZVN0cmluZygiPGJh
c2UgaHJlZj1cIi5cIiB0YXJnZXQ9XCIiLCBzdGF0aWNfY2FzdDxjb25zdCBTdHJpbmcmPihiYXNl
VGFyZ2V0KSwgIlwiPiIpOwogfQogCi19ICAvLyBuYW1lc3BhY2UgV2ViS2l0Cit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRnJhbWVU
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZy
YW1lVGVzdC5jcHAJKHJldmlzaW9uIDgxODE4KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJGcmFtZVRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgogICovCiAKKyNpbmNsdWRlICJjb25maWcuaCIKKwogI2luY2x1ZGUgPGdv
b2dsZXVybC9zcmMvZ3VybC5oPgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8
d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVy
VGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5o
IgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUg
IldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29v
Z2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2Vi
RnJhbWVDbGllbnQgeworfTsKKworY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0IDogcHVibGlj
IHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VTZXJpYWxpemVyVGVzdCgpIDog
bV93ZWJWaWV3KDApLCBtX3N1cHBvcnRlZFNjaGVtZXMoM1UpCisgICAgeworICAgICAgICBtX3N1
cHBvcnRlZFNjaGVtZXNbMF0gPSAiaHR0cCI7CisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1sx
XSA9ICJodHRwcyI7CisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1syXSA9ICJmaWxlIjsKKyAg
ICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAg
ICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZp
ZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCwgMCwgMCk7CisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlh
bGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVy
QWxsTW9ja2VkVVJMcygpOworICAgICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CisgICAgfQorCisg
ICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdl
YlN0cmluZyYgZmlsZU5hbWUpCisgICAgeworICAgICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25z
ZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6ZSgpOworICAgICAgICByZXNwb25zZS5zZXRN
SU1FVHlwZSgidGV4dC9odG1sIik7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Vi
a2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIoKS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRo
LmFwcGVuZCgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXph
dGlvbi8iKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAg
ICAgIHdlYmtpdF9zdXBwb3J0OjpSZWdpc3Rlck1vY2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJT
dHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5U
b3BGcmFtZShjb25zdCBHVVJMJiB1cmwpCisgICAgeworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVy
bFJlcXVlc3Q7CisgICAgICAgIHVybFJlcXVlc3QuaW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxS
ZXF1ZXN0LnNldFVSTChXZWJVUkwodXJsKSk7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1l
KCktPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOworICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBl
bmRpbmcgcmVxdWVzdCBnZXQgc2VydmVkLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVB
c3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIHdl
YlZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVy
bCkKKyAgICB7CisgICAgICAgIHJldHVybiB2ZWN0b3IuY29udGFpbnMoV2ViVVJMKEdVUkwodXJs
KSkpOworICAgIH0KKworICAgIC8vIFVzZWZ1bCBmb3IgZGVidWdnaW5nLgorICAgIHN0YXRpYyB2
b2lkIHByaW50V2ViVVJMcyhjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgdXJscykKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdXJscy5zaXplKCk7IGkrKykKKyAgICAgICAg
ICAgIHByaW50ZigiJXNcbiIsIHVybHNbaV0uc3BlYygpLmRhdGEoKSk7CisgICAgfQorCisgICAg
V2ViVmlldyogbV93ZWJWaWV3OworICAgIFdlYlZlY3RvcjxXZWJDU3RyaW5nPiBtX3N1cHBvcnRl
ZFNjaGVtZXM7CisKK3ByaXZhdGU6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50IG1fd2ViRnJhbWVD
bGllbnQ7Cit9OworCitURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBIVE1MTm9kZXMpCit7
CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJV
UkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVf
cGFnZS5odG1sIikpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAg
IC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVz
OworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQ
YWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMoCisgICAgICAgIG1fd2ViVmlldywg
bV9zdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VzLCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8g
VGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2
ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUg
bm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tIikpOworCisgICAgRVhQRUNUX0VRKDE0LCByZXNvdXJjZXMu
c2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9i
ZWF1dGlmdWxsLmNzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUuanMiKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ib2R5
QmFja2dyb3VuZC5qcGciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lt
YWdlQnV0dG9uLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3RhYmxlQmFja2dyb3VuZC5wbmciKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS90ckJhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdGRCYWNrZ3JvdW5kLnBuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiIpKTsKKyAgICBFWFBFQ1RfVFJV
RSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNv
bS9xdW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNfZGFyd2luLmh0bWwiKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS93aHlf
ZGVsZXRlZC5odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vd2h5X2luc2VydGVkLmh0bWwiKSk7CisgICAgRVhQ
RUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cHM6Ly93d3cuc2VjdXJl
LmNvbS9odHRwcy5naWYiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiZmlsZTovL2MvbXlfZm9sZGVyL2ZpbGUuZ2lmIikpOworfQorCitURVNUX0YoV2Vi
UGFnZVNlcmlhbGl6ZXJUZXN0LCBNdWx0aXBsZUZyYW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0
aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIpKTsKKyAgICByZWdpc3Rlck1vY2tl
ZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwiKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlX2lm
cmFtZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL29iamVjdF9pZnJhbWUuaHRtbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBXZWJTdHJpbmc6OmZyb21VVEY4KCJvYmplY3RfaWZyYW1lLmh0bWwiKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZW1iZWRfaWZyYW1lLmh0
bWwiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZW1i
ZWRfaWZyYW1lLmh0bWwiKSk7CisgICAgLy8gSWYgd2UgZG9uJ3QgcmVnaXN0ZXIgYSBtb2NrZWQg
cmVzb3VyY2UgZm9yIGF3ZXNvbWUucG5nLCBpdCBjYXVzZXMgdGhlCisgICAgLy8gZG9jdW1lbnQg
bG9hZGVyIG9mIHRoZSBpZnJhbWUgdGhhdCBoYXMgaXQgYXMgaXRzIHNyYyB0byBhc3NlcnQgb24g
Y2xvc2UsCisgICAgLy8gbm90IHN1cmUgd2h5LgorICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUucG5nIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgoImF3ZXNvbWUucG5nIikpOworCisgICAgbG9h
ZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291
cmNlcy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVS
TD4gcmVzb3VyY2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2
ZUFsbFJlc291cmNlcygKKyAgICAgICAgbV93ZWJWaWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZy
ZXNvdXJjZXMsICZmcmFtZXMpKTsgICAgCisKKyAgICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJj
ZXMgZnJvbSB0aGUgZnJhbWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoNCwg
ZnJhbWVzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20i
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9zaW1wbGVfaWZyYW1lLmh0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vYmplY3RfaWZyYW1lLmh0
bWwiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMoZnJhbWVzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9lbWJlZF9pZnJhbWUuaHRtbCIpKTsKKworICAgIEVYUEVDVF9FUSg1LCBy
ZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9hd2Vzb21lLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lubmVyRnJhbWUucG5nIikpOworICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vZmxhc2guc3dmIikpOworICAgIC8vIEZJWE1FOiBmb3Igc29tZSByZWFzb24gdGhlIGZvbGxv
d2luZyByZXNvdXJjZXMgaXMgbWlzc2luZyBvbiBvbmUgb2YgdGhlIGJvdAorICAgIC8vICAgICAg
ICBjYXVzaW5nIHRoZSB0ZXN0IHRvIGZhaWwuIFByb2JhYmx5IGEgcGx1Z2luIGlzc3VlLgorICAg
IC8vIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vbXVzaWMubWlkIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5z
KHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb2JqZWN0LnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2VtYmVkLnBuZyIpKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2F3ZXNvbWUucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9hd2Vzb21lLnBu
ZwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9hd2Vzb21lLnBuZwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24v
ZW1iZWRfaWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2VtYmVkX2lmcmFtZS5odG1sCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9u
L2VtYmVkX2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKKzxodG1sPgor
Cis8aW1nIHNyYz0iZW1iZWQucG5nIi8+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9vYmplY3RfaWZyYW1lLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL29iamVjdF9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9vYmplY3RfaWZyYW1lLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisKKzxpbWcgc3JjPSJvYmpl
Y3QucG5nIi8+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL3NpbXBs
ZV9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9zaW1wbGVfaWZyYW1lLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRv
IHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmll
dmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBkZWFsaW5nIHdp
dGggbXVsdGlwbGUgZnJhbWVzLiAKKy0tPgorCis8Ym9keT4KKworPGltZyBzcmM9ImF3ZXNvbWUu
cG5nIi8+Cis8aW1nIHNyYz0iaW5uZXJGcmFtZS5wbmciLz4KKworPC9ib2R5PgorCis8L2h0bWw+
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRp
b24vc2ltcGxlX3BhZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vc2ltcGxlX3BhZ2UuaHRtbAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bi9zaW1wbGVfcGFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRtbD4K
KzwhLS0KKyAgICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlhbGl6
ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNvcnJlY3RseSB0aGUgZXhw
ZWN0ZWQgcmVzb3VyY2VzIGZyb20gdmFyaW91cyBIVE1MIG5vZGVzLgorLS0+CisKKzxoZWFkPgor
PCEtLSBTdHlsZSBzaGVldCBsaW5rcyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxlLmNv
bS9iZWF1dGlmdWxsLmNzcyIvPgorPCEtLSBPdGhlciBsaW5rIHNob3VsZCBOT1QgYmUgcmV0cmll
dmVkIC0tPgorPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHR5cGU9InRleHQvcGxhaW4iIGhyZWY9Imh0
dHA6Ly93d3cuZXhhbXBsZS5jb20vY29weXJpZ2h0Ii8+Cis8IS0tIFNjcmlwdHMgc2hvdWxkIGJl
IHJldHJpZXZlZCAtLT4KKzxzY3JpcHQgc3JjPSJhd2Vzb21lLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKworPCEtLSBJbWFnZXMgYXJlIGFsd2F5cyByZXRyaWV2ZWQgLS0+Cis8Ym9keSBiYWNrZ3Jv
dW5kPSJib2R5QmFja2dyb3VuZC5qcGciPgorCis8IS0tIFR3aWNlIHRvIG1ha2Ugc3VyZSB3ZSBv
bmx5IHJlcG9ydCBlYWNoIHJlc291cmNlIG9uY2UgLS0+Cis8aW1nIHNyYz0iYXdlc29tZS5wbmci
Lz4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorCis8Zm9ybT4KKyAgPGlucHV0IHR5cGU9Imlt
YWdlIiBzcmM9ImltYWdlQnV0dG9uLnBuZyIvPgorPC9mb3JtPgorCis8dGFibGUgYmFja2dyb3Vu
ZD0idGFibGVCYWNrZ3JvdW5kLnBuZyI+CisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91bmQu
cG5nIj4KKyAgICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAgPC90
cj4gIAorICA8dHIgYmFja2dyb3VuZD0idHJCYWNrZ3JvdW5kLnBuZyI+CisgICAgPHRkIGJhY2tn
cm91bmQ9InRkQmFja2dyb3VuZC5wbmciPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8IS0t
IFNvbWUgbW9yZSBvYnNjdXJlIHRhZ3MgLS0+Cis8YmxvY2txdW90ZSBjaXRlPSJodHRwOi8vd3d3
LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiI+PC9ibG9ja3F1b3RlPgorPHEg
Q0lURT0iaHR0cDovL3d3dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFybGVz
X2Rhcndpbi5odG1sIj48L3E+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsIGNpdGU9Indo
eV9kZWxldGVkLmh0bWwiPmJsdWU8L2RlbD4gPGlucz5yZWQ8L2lucz4hPC9wPgorPHA+TXkgZmF2
b3JpdGUgY29sb3IgaXMgPGRlbD5ibHVlPC9kZWw+IDxpbnMgY2l0ZT0id2h5X2luc2VydGVkLmh0
bWwiPnJlZDwvaW5zPiE8L3A+CisKKzwhLS0gTWFrZSBzdXJlIHdlIG9ubHkgcmV0cmlldmUgVVJM
cyB3aXRoIHRoZSByaWdodCBzY2hlbWVzIC0tPgorPGltZyBzcmM9Imh0dHBzOi8vd3d3LnNlY3Vy
ZS5jb20vaHR0cHMuZ2lmIi8+ICA8IS0tIEhUVFBTIGlzIE9LIC0tPgorPGltZyBzcmM9ImZpbGU6
Ly9jL215X2ZvbGRlci9maWxlLmdpZiIvPiAgPCEtLSBmaWxlIGlzIE9LIC0tPgorPGltZyBzcmM9
ImZ0cDovL2Z0cC5jb20vZnRwLmdpZiIvPiAgPCEtLSBGVFAgaXMgbm90IE9LIC0tPgorPGltZyBz
cmM9InVua25vd246Ly91bmtvd24uY29tL3Vua25vd24uZ2lmIi8+ICA8IS0tIFVua25vd24gc2No
ZW1lcyBhcmUgbm90IE9LIC0tPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vdG9wX2ZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAKKzxodG1sPgorPCEtLQorICAgIFRoaXMgcGFnZSBp
cyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJj
ZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBlY3RlZCByZXNvdXJjZXMgd2hlbiBk
ZWFsaW5nIHdpdGggbXVsdGlwbGUgZnJhbWVzLiAKKy0tPgorCis8Ym9keT4KKworPCEtLSBSZXNv
dXJjZXMgdXNlZCBieSBhIGZyYW1lIGFuZCBhIHRhZyBzaG91bGQgYmUgb25seSByZXBvcnRlZCBv
bmNlIC0tPgorPGlmcmFtZSBzcmM9ImF3ZXNvbWUucG5nIj48L2lmcmFtZT4KKzxpbWcgc3JjPSJh
d2Vzb21lLnBuZyIvPgorCis8aWZyYW1lIHNyYz0ic2ltcGxlX2lmcmFtZS5odG1sIj48L2lmcmFt
ZT4KKzxpZnJhbWUgc3JjPSJzaW1wbGVfaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorCis8IS0tIE9i
amVjdCB0YWdzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpZnJhbWVzIC0tPgorCis8b2JqZWN0IGRh
dGE9Im9iamVjdF9pZnJhbWUuaHRtbCI+PC9vYmplY3Q+Cis8b2JqZWN0IGRhdGE9ImZsYXNoLnN3
ZiI+PC9vYmplY3Q+CisKKzwhLS0gRW1iZWQgdGFncyBjYW4gYmUgdXNlZCB0byBjcmVhdGUgaWZy
YW1lcyBhcyB3ZWxsIC0tPgorPGVtYmVkIHNyYz0iZW1iZWRfaWZyYW1lLmh0bWwiPjwvb2JqZWN0
PgorPCEtLQorPGVtYmVkIHNyYz0ibXVzaWMubWlkIj48L2VtYmVkPgorLS0+Cis8L2JvZHk+CisK
KzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi90b3BfZnJhbWUuaHRtbApfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>