<?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>56650</bug_id>
          
          <creation_ts>2011-03-18 09:47:10 -0700</creation_ts>
          <short_desc>[Chromium] The WebPageSerializer::retrieveAllResources() should retrieve CSS resources</short_desc>
          <delta_ts>2011-03-29 14:27:26 -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>57389</dependson>
    
    <dependson>57390</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Jay Civelli">jcivelli</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>369678</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 09:47:10 -0700</bug_when>
    <thetext>The WebPageSerializer::retrieveAllResources() does not retrieve CSS resources from the page, such as:
@import
background urls
@font-face</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369703</commentid>
    <comment_count>1</comment_count>
      <attachid>86175</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 10:20:31 -0700</bug_when>
    <thetext>Created attachment 86175
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369950</commentid>
    <comment_count>2</comment_count>
      <attachid>86223</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 15:21:52 -0700</bug_when>
    <thetext>Created attachment 86223
Fixed CSS test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369956</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-18 15:26:45 -0700</bug_when>
    <thetext>Attachment 86223 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/css_test_page.html:15:  Line contains tab character.  [whitespace/tab] [5]
Source/WebKit/chromium/tests/data/pageserialization/css_test_page.html:16:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 8 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>369980</commentid>
    <comment_count>4</comment_count>
      <attachid>86223</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-18 15:59:26 -0700</bug_when>
    <thetext>Comment on attachment 86223
Fixed CSS test

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

I realize you removed the review request, but here are some random nits.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:132
&gt; +    // Process the attribute if one was found found.

&quot;found found&quot; =&gt; &quot;found&quot;

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:137
&gt; +            KURL url(ParsedURLString, element-&gt;document()-&gt;completeURL(value));

No need to use ParsedURLString.  You can just write:

KURL url = element-&gt;document()-&gt;completeURL(value);

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:143
&gt; +            if (!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()
&gt; +                &amp;&amp; (url.protocolIs(&quot;http&quot;) || url.protocolIs(&quot;https&quot;) || url.protocolIs(&quot;file&quot;))) {
&gt; +                resourceURLs-&gt;add(url);
&gt; +            }

You should do the JavaScript URL check together with these.  Also &quot;!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()&quot; are all redundant with the later checks, right?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:149
&gt; +    CSSStyleDeclaration* styleDeclaration = element-&gt;style();
&gt; +    if (styleDeclaration)

We usually combine these lines:

if (CSSStyleDeclaration* styleDeclaration = element-&gt;style())
  ...

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:161
&gt; +    // If we have already seen that frame, ignore it.

This comment is a &quot;what&quot; not a &quot;why&quot; and should be removed.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:189
&gt; +        HTMLElement* element = toHTMLElement(allNodes-&gt;item(i));
&gt; +        if (element) {

These should be combined.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:209
&gt; +    // Retrieving the background property would probably be good enough.
&gt; +    // Iterating for any other image properties to be safe (I am not sure there
&gt; +    // are actually others).

Maybe list bullets can have images?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:213
&gt; +        // prop ID, but CSSStyleDeclaration only gives access to property names,

&quot;prop&quot; &lt;-- please don&apos;t use abbreviations.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:216
&gt; +        RefPtr&lt;CSSValue&gt; value =
&gt; +            styleDeclaration-&gt;getPropertyCSSValue(styleDeclaration-&gt;item(i));

There&apos;s not 80 col limit.  Please don&apos;t add unneeded line breaks.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:225
&gt; +                    KURL(ParsedURLString,
&gt; +                         static_cast&lt;CSSStyleSheet*&gt;(styleDeclaration-&gt;stylesheet())-&gt;document()-&gt;completeURL(url)));

No need to use ParsedURLString.  Doesn&apos;t completeURL return a KURL?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:240
&gt; +    if (!visitedStyleSheets-&gt;add(styleSheet).second)
&gt; +        return; // We have already seen that styleSheet.

That&apos;s a very strange way to test if we&apos;ve got the stylesheet.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:253
&gt; +            resourceURLs-&gt;add(
&gt; +                KURL(ParsedURLString,
&gt; +                    styleSheet-&gt;document()-&gt;completeURL(importRule-&gt;href())));

No ParsedURLString, all on one line.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:257
&gt; +            retrieveResourcesForCSSStyleSheet(
&gt; +                static_cast&lt;CSSImportRule*&gt;(item)-&gt;styleSheet(),
&gt; +                visitedStyleSheets, supportedSchemes, resourceURLs);

All on one line.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:265
&gt; +                    CSSFontFaceSrcValue* fontFaceSrc =
&gt; +                        static_cast&lt;CSSFontFaceSrcValue*&gt;(valueList-&gt;item(j));

one line.  :)

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:315
&gt; +    // Now retrieve CSS resources from style-sheets.

Again, a what, not a why.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369997</commentid>
    <comment_count>5</comment_count>
      <attachid>86238</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 16:23:09 -0700</bug_when>
    <thetext>Created attachment 86238
Fixed tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370054</commentid>
    <comment_count>6</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 18:19:13 -0700</bug_when>
    <thetext>(In reply to comment #4)

Thanks for the comments!

&gt; (From update of attachment 86223 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86223&amp;action=review
&gt; 
&gt; I realize you removed the review request, but here are some random nits.
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:132
&gt; &gt; +    // Process the attribute if one was found found.
&gt; 
&gt; &quot;found found&quot; =&gt; &quot;found&quot;
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:137
&gt; &gt; +            KURL url(ParsedURLString, element-&gt;document()-&gt;completeURL(value));
&gt; 
&gt; No need to use ParsedURLString.  You can just write:
&gt; 
&gt; KURL url = element-&gt;document()-&gt;completeURL(value);
Done everywhere.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:143
&gt; &gt; +            if (!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()
&gt; &gt; +                &amp;&amp; (url.protocolIs(&quot;http&quot;) || url.protocolIs(&quot;https&quot;) || url.protocolIs(&quot;file&quot;))) {
&gt; &gt; +                resourceURLs-&gt;add(url);
&gt; &gt; +            }
&gt; 
&gt; You should do the JavaScript URL check together with these.  Also &quot;!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()&quot; are all redundant with the later checks, right?
Looking at KURL.cpp, it seems we still need isValid(), but you are right we don&apos;t need the rest or even to check for the JS protocol.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:149
&gt; &gt; +    CSSStyleDeclaration* styleDeclaration = element-&gt;style();
&gt; &gt; +    if (styleDeclaration)
&gt; 
&gt; We usually combine these lines:
&gt; 
&gt; if (CSSStyleDeclaration* styleDeclaration = element-&gt;style())
&gt;   ...
OK

&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:161
&gt; &gt; +    // If we have already seen that frame, ignore it.
&gt; 
&gt; This comment is a &quot;what&quot; not a &quot;why&quot; and should be removed.
I thought the comment useful as it is not really obvious that ListHashSet::add() returns a std::pair with second being a bool that indicates whether the element was inserted.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:189
&gt; &gt; +        HTMLElement* element = toHTMLElement(allNodes-&gt;item(i));
&gt; &gt; +        if (element) {
&gt; 
&gt; These should be combined.
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:209
&gt; &gt; +    // Retrieving the background property would probably be good enough.
&gt; &gt; +    // Iterating for any other image properties to be safe (I am not sure there
&gt; &gt; +    // are actually others).
&gt; 
&gt; Maybe list bullets can have images?
You are right! Updated the command and the test.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:213
&gt; &gt; +        // prop ID, but CSSStyleDeclaration only gives access to property names,
&gt; 
&gt; &quot;prop&quot; &lt;-- please don&apos;t use abbreviations.
OK

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:216
&gt; &gt; +        RefPtr&lt;CSSValue&gt; value =
&gt; &gt; +            styleDeclaration-&gt;getPropertyCSSValue(styleDeclaration-&gt;item(i));
&gt; 
&gt; There&apos;s not 80 col limit.  Please don&apos;t add unneeded line breaks.
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:225
&gt; &gt; +                    KURL(ParsedURLString,
&gt; &gt; +                         static_cast&lt;CSSStyleSheet*&gt;(styleDeclaration-&gt;stylesheet())-&gt;document()-&gt;completeURL(url)));
&gt; 
&gt; No need to use ParsedURLString.  Doesn&apos;t completeURL return a KURL?
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:240
&gt; &gt; +    if (!visitedStyleSheets-&gt;add(styleSheet).second)
&gt; &gt; +        return; // We have already seen that styleSheet.
&gt; 
&gt; That&apos;s a very strange way to test if we&apos;ve got the stylesheet.
Yeah, LinkedHashSet:add() inserts and returns a pair, second is a boolean that indicates if the value has been inserted.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:253
&gt; &gt; +            resourceURLs-&gt;add(
&gt; &gt; +                KURL(ParsedURLString,
&gt; &gt; +                    styleSheet-&gt;document()-&gt;completeURL(importRule-&gt;href())));
&gt; 
&gt; No ParsedURLString, all on one line.
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:257
&gt; &gt; +            retrieveResourcesForCSSStyleSheet(
&gt; &gt; +                static_cast&lt;CSSImportRule*&gt;(item)-&gt;styleSheet(),
&gt; &gt; +                visitedStyleSheets, supportedSchemes, resourceURLs);
&gt; 
&gt; All on one line.
OK.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:265
&gt; &gt; +                    CSSFontFaceSrcValue* fontFaceSrc =
&gt; &gt; +                        static_cast&lt;CSSFontFaceSrcValue*&gt;(valueList-&gt;item(j));
&gt; 
&gt; one line.  :)
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:315
&gt; &gt; +    // Now retrieve CSS resources from style-sheets.
&gt; 
&gt; Again, a what, not a why.
Changed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370055</commentid>
    <comment_count>7</comment_count>
      <attachid>86250</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-18 18:21:50 -0700</bug_when>
    <thetext>Created attachment 86250
Addressed Adam&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>370057</commentid>
    <comment_count>8</comment_count>
      <attachid>86223</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-18 18:22:34 -0700</bug_when>
    <thetext>Comment on attachment 86223
Fixed CSS test

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

&gt;&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:143
&gt;&gt;&gt; +            if (!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()
&gt;&gt;&gt; +                &amp;&amp; (url.protocolIs(&quot;http&quot;) || url.protocolIs(&quot;https&quot;) || url.protocolIs(&quot;file&quot;))) {
&gt;&gt;&gt; +                resourceURLs-&gt;add(url);
&gt;&gt;&gt; +            }
&gt;&gt; 
&gt;&gt; You should do the JavaScript URL check together with these.  Also &quot;!url.isEmpty() &amp;&amp; !url.isNull() &amp;&amp; url.isValid()&quot; are all redundant with the later checks, right?
&gt; 
&gt; Looking at KURL.cpp, it seems we still need isValid(), but you are right we don&apos;t need the rest or even to check for the JS protocol.

Ok.

&gt;&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:161
&gt;&gt;&gt; +    // If we have already seen that frame, ignore it.
&gt;&gt; 
&gt;&gt; This comment is a &quot;what&quot; not a &quot;why&quot; and should be removed.
&gt; 
&gt; I thought the comment useful as it is not really obvious that ListHashSet::add() returns a std::pair with second being a bool that indicates whether the element was inserted.

That&apos;s a pretty nutty API...  It&apos;s probably not worth fixing the API in this patch.  Feel free to leave the comment if think it&apos;s helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>373602</commentid>
    <comment_count>9</comment_count>
      <attachid>86250</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-25 10:53:12 -0700</bug_when>
    <thetext>Comment on attachment 86250
Addressed Adam&apos;s comments

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

Does this do an url rewriting?

If a page comes from http://www.example.com/ and refers to &quot;http://www.example.com/other.jpg&quot;, how does &quot;other.jpg&quot; get loaded from the serialized version?

Many places where I ask questions are things that are not obvious to me from looking at the code and may be are indicative of comments that should be added to the code.  (Also since I don&apos;t know this code well of course some questions have obvious answers to you but not to me :).)

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:90
&gt; +        || element-&gt;hasTagName(HTMLNames::objectTag) || element-&gt;hasTagName(HTMLNames::embedTag))

The indentation on these two continuation lines seems odd. Typically it should align just inside the parenthesis that is continued and that happens on neither line.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:92
&gt; +        Frame* frame = static_cast&lt;const HTMLFrameOwnerElement*&gt;(element)-&gt;contentFrame();

Why do we continue through the code if the element has that tag name but !element-&gt;isFrameOwnerElement?

Is this code important to that case:
if (CSSStyleDeclaration* styleDeclaration = element-&gt;style())
        retrieveResourcesForCSSStyleDeclaration(styleDeclaration, resourceURLs);

and if so, why isn&apos;t it important when element-&gt;isFrameOwnerElement ?

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

I would like this better as a separate function. 

Then the code would change as well ideally.

It would look something like this (and have a name that tells me what it is doing).

if (element-&gt;hasTagName(HTMLNames::imgTag) || element-&gt;hasTagName(HTMLNames::scriptTag))
    return &amp;HTMLNames::srcAttr;

if (element-&gt;hasTagName(HTMLNames::inputTag)) {
    if (input-&gt;isImageButton())
        return &amp;HTMLNames::srcAttr;
    return 0;
}

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:140
&gt; +        // Ignore javascript content.

How is this ignoring javascript content?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:144
&gt; +            // does no have a cache mechanism, we skip it as well.

s/no/not/

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:219
&gt; +            // Non cached-image are just place-holders and do not contain data.

images (since you used &quot;are&quot;, etc.)

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:222
&gt; +                resourceURLs-&gt;add(static_cast&lt;CSSStyleSheet*&gt;(styleDeclaration-&gt;stylesheet())-&gt;document()-&gt;completeURL(url));

How do you know that it is a CSSStyleSheet?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:250
&gt; +            retrieveResourcesForCSSStyleSheet(static_cast&lt;CSSImportRule*&gt;(item)-&gt;styleSheet(), visitedStyleSheets, supportedSchemes, resourceURLs);

Use importRule and avoid another cast.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:257
&gt; +                    CSSFontFaceSrcValue* fontFaceSrc = static_cast&lt;CSSFontFaceSrcValue*&gt;(valueList-&gt;item(j));

How do you know the items are CSSFontFaceSrcValue?

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:310
&gt; +        iter != styleSheets.end(); ++iter) {

Alignment (as I mentioned below).

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:319
&gt; +        iter != resourceKURLs.end(); ++iter, i++) {

Might as well do ++i for consistency with other places.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:330
&gt; +        iter != frameKURLs.end(); ++iter, ++i) {

Align with interior of ( 
or just don&apos;t wrap the line. Up to you.

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:53
&gt; +    TestWebFrameClient() : m_scriptEnabled(false) {}

space in the {}

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:54
&gt; +    virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return m_scriptEnabled; }

I would comment out &quot;enabledPerSettings&quot; like /* enabledPerSettings*/ since it is unused that may cause errors in some builds.

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:181
&gt; +                          

Pls don&apos;t do unnecessary space changes.

&gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:226
&gt; +        m_webView, m_supportedSchemes, &amp;resources, &amp;frames));    

You don&apos;t need to wrap the line but if it makes you happy...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375082</commentid>
    <comment_count>10</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-29 00:35:26 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 86250 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=86250&amp;action=review
&gt; 
&gt; Does this do an url rewriting?
No it does not. It simply returns the URLs for the resources found in the page. 
 
&gt; If a page comes from http://www.example.com/ and refers to &quot;http://www.example.com/other.jpg&quot;, how does &quot;other.jpg&quot; get loaded from the serialized version?
This CL does not deal with that. The &quot;save-as&quot; page feature stores the resources from the page into a directory and rewrite the URLs in an extra step.

&gt; Many places where I ask questions are things that are not obvious to me from looking at the code and may be are indicative of comments that should be added to the code.  (Also since I don&apos;t know this code well of course some questions have obvious answers to you but not to me :).)
&gt; 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:90
&gt; &gt; +        || element-&gt;hasTagName(HTMLNames::objectTag) || element-&gt;hasTagName(HTMLNames::embedTag))
&gt; 
&gt; The indentation on these two continuation lines seems odd. Typically it should align just inside the parenthesis that is continued and that happens on neither line.
OK, I tried to do that right.


&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:92
&gt; &gt; +        Frame* frame = static_cast&lt;const HTMLFrameOwnerElement*&gt;(element)-&gt;contentFrame();
&gt; 
&gt; Why do we continue through the code if the element has that tag name but !element-&gt;isFrameOwnerElement?
object and embed tags can be used as iframe if they source is HTML, in which case isFrameOwnerElement returns true. Otherwise they should simply be considered as a resource.
Note that an iframe can also be used to display an image I believe, and that case does not seem to be supported.
I filed a bug https://bugs.webkit.org/show_bug.cgi?id=57300 and will address that separately.

&gt; Is this code important to that case:
&gt; if (CSSStyleDeclaration* styleDeclaration = element-&gt;style())
&gt;         retrieveResourcesForCSSStyleDeclaration(styleDeclaration, resourceURLs);
&gt; 
&gt; and if so, why isn&apos;t it important when element-&gt;isFrameOwnerElement ?
I don&apos;t think style applies to the iframe tag itself, so we would not get anything interesting from that.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:101
&gt; &gt;      if (element-&gt;hasTagName(HTMLNames::imgTag) || element-&gt;hasTagName(HTMLNames::scriptTag))
&gt; 
&gt; I would like this better as a separate function. 
&gt; 
&gt; Then the code would change as well ideally.
&gt; 
&gt; It would look something like this (and have a name that tells me what it is doing).
&gt; 
&gt; if (element-&gt;hasTagName(HTMLNames::imgTag) || element-&gt;hasTagName(HTMLNames::scriptTag))
&gt;     return &amp;HTMLNames::srcAttr;
&gt; 
&gt; if (element-&gt;hasTagName(HTMLNames::inputTag)) {
&gt;     if (input-&gt;isImageButton())
&gt;         return &amp;HTMLNames::srcAttr;
&gt;     return 0;
&gt; }
Good idea, done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:140
&gt; &gt; +        // Ignore javascript content.
&gt; 
&gt; How is this ignoring javascript content?
Out-of-date comment, removed.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:144
&gt; &gt; +            // does no have a cache mechanism, we skip it as well.
&gt; 
&gt; s/no/not/
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:219
&gt; &gt; +            // Non cached-image are just place-holders and do not contain data.
&gt; 
&gt; images (since you used &quot;are&quot;, etc.)
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:222
&gt; &gt; +                resourceURLs-&gt;add(static_cast&lt;CSSStyleSheet*&gt;(styleDeclaration-&gt;stylesheet())-&gt;document()-&gt;completeURL(url));
&gt; 
&gt; How do you know that it is a CSSStyleSheet?
Intuition... What? Not good enough?
OK, now explicitly testing for CSS type before casting.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:250
&gt; &gt; +            retrieveResourcesForCSSStyleSheet(static_cast&lt;CSSImportRule*&gt;(item)-&gt;styleSheet(), visitedStyleSheets, supportedSchemes, resourceURLs);
&gt; 
&gt; Use importRule and avoid another cast.
Done.

&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:257
&gt; &gt; +                    CSSFontFaceSrcValue* fontFaceSrc = static_cast&lt;CSSFontFaceSrcValue*&gt;(valueList-&gt;item(j));
&gt; 
&gt; How do you know the items are CSSFontFaceSrcValue?
Sadly there does not seem to be a reliable way to know.
I am doing like WebCore/css/CSSFontSelector.cpp does, which is assume the CSSPropertySrc value only contains CSSFontFaceSrcValue.
Added a comment to reflect this. 
 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:310
&gt; &gt; +        iter != styleSheets.end(); ++iter) {
&gt; 
&gt; Alignment (as I mentioned below).
Done.
 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:319
&gt; &gt; +        iter != resourceKURLs.end(); ++iter, i++) {
&gt; 
&gt; Might as well do ++i for consistency with other places.
Done.
 
&gt; &gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:330
&gt; &gt; +        iter != frameKURLs.end(); ++iter, ++i) {
&gt; 
&gt; Align with interior of ( 
&gt; or just don&apos;t wrap the line. Up to you.
Done.

&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:53
&gt; &gt; +    TestWebFrameClient() : m_scriptEnabled(false) {}
&gt; 
&gt; space in the {}
Done.

&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:54
&gt; &gt; +    virtual bool allowScript(WebFrame*, bool enabledPerSettings) { return m_scriptEnabled; }
&gt; 
&gt; I would comment out &quot;enabledPerSettings&quot; like /* enabledPerSettings*/ since it is unused that may cause errors in some builds.
Done.
 
&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:181
&gt; &gt; +                          
&gt; 
&gt; Pls don&apos;t do unnecessary space changes.
Removed.

&gt; &gt; Source/WebKit/chromium/tests/WebPageSerializerTest.cpp:226
&gt; &gt; +        m_webView, m_supportedSchemes, &amp;resources, &amp;frames));    
&gt; 
&gt; You don&apos;t need to wrap the line but if it makes you happy...
Unwrapped.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375085</commentid>
    <comment_count>11</comment_count>
      <attachid>87275</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-29 00:38:47 -0700</bug_when>
    <thetext>Created attachment 87275
Addressed David&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375088</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-29 00:44:53 -0700</bug_when>
    <thetext>Attachment 87275 did not build on chromium:
Build output: http://queues.webkit.org/results/8280139</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375089</commentid>
    <comment_count>13</comment_count>
      <attachid>87277</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-03-29 00:49:30 -0700</bug_when>
    <thetext>Created attachment 87277
Fixed build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375596</commentid>
    <comment_count>14</comment_count>
      <attachid>87277</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-29 11:40:38 -0700</bug_when>
    <thetext>Comment on attachment 87277
Fixed build

Clearing flags on attachment: 87277

Committed r82293: &lt;http://trac.webkit.org/changeset/82293&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375597</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-29 11:40:45 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375720</commentid>
    <comment_count>16</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-29 13:49:38 -0700</bug_when>
    <thetext>Looks like this might have broken RetrieveCSSResources:

http://build.chromium.org/p/chromium.webkit/builders/Webkit%20Win/builds/3137/steps/webkit_unit_tests/logs/RetrieveCSSResources

WebPageSerializerTest.RetrieveCSSResources: 
Did not complete.

I&apos;ll see if the issue continues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>375758</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-29 14:25:09 -0700</bug_when>
    <thetext>Happened twice.  Rolling out.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86175</attachid>
            <date>2011-03-18 10:20:31 -0700</date>
            <delta_ts>2011-03-18 15:21:52 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>css_resources.patch</filename>
            <type>text/plain</type>
            <size>33389</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxNDg1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
OSBAQAorMjAxMS0wMy0xOCAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHJl
dHJpZXZhbCBvZmYgQ1NTIHJlc291cmNlcyB0byBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVB
bGxSZXNvdXJjZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjY1MAorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlU2hlZXQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMpOgorICAg
ICAgICAqIHRlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcC4KKyAgICAg
ICAgKFdlYktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6YXRpb24uCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3Nf
dGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rpdk9y
YW5nZSk6CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5
bGVzLmNzczogQWRkZWQuCisgICAgICAgICgjZGl2WWVsbG93KToKKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICgj
ZGl2UmVkKToKKwogMjAxMS0wMy0xNyAgQWxleGV5IE1hcmluaWNoZXYgIDxhbWFyaW5pY2hldkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwDQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA4MTQ3OSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNjIyLDYgKzYy
Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9Qb3B1cE1lbnVU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3Bh
cmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwJwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvV2ViVW5pdFRlc3RzLmNwcCcKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcA0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNp
b24gODE0NzkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwzMSBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJDU1NGb250
RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCisjaW5jbHVkZSAi
Q1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJD
U1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1
bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0
LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhU
TUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5o
IgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIYXNoU2V0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlN0eWxl
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVT
aGVldExpc3QuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKLQogI2luY2x1ZGUgIldlYkNTdHJpbmcu
aCIKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAt
NTcsODcgKzcyLDk2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ugewog
Ci1LVVJMIGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3Zv
aWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFy
YXRpb24qLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz
aFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKTsKKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckVs
ZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0
ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxGcmFt
ZSo+KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVj
dG9yPEZyYW1lKj4qIGZyYW1lc1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiogc3R5bGVTaGVldHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiBmcmFtZVVSTHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCiB7Ci0g
ICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5h
bWUgPSAwOworICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQorICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQorICAgICAgICAgICAgJiYgZWxlbWVudC0+
aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUo
KTsKKyAgICAgICAgaWYgKGZyYW1lICYmICF2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkp
CisgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlID0gMDsKICAg
ICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUg
PSAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpz
cmNBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1
dFRhZykpIHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1
dHRvbigpKQotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7
CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOwogICAgIH0gZWxz
ZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpCiAgICAgICAgICAg
ICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcpCiAgICAgICAg
ICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJUYWcpCiAgICAgICAg
ICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcpKQotICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHI7CisgICAgICAgIGF0
dHJpYnV0ZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlVGFnKQotICAgICAgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQotICAgICAgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCi0gICAgICAgICAgICAgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omluc1RhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5h
bWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5h
bWVzOjpjaXRlQXR0cjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6b2JqZWN0VGFnKSkKKyAgICAgICAgYXR0cmlidXRlID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7
CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkK
KyAgICAgICAgYXR0cmlidXRlID0gJkhUTUxOYW1lczo6c3JjQXR0cjsKICAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKLSAgICAgICAgLy8gSWYg
dGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBpZ25vcmUgaXQuCisgICAgICAgIEhUTUxMaW5r
RWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBDU1MgbGlua3MuCiAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mgb2Ygc3ViLXJlc291cmNlcyB3aGljaAotICAg
ICAgICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1zaGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250
LWZhY2UsIHVybCgpLCBldGMuCi0gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1l
czo6aHJlZkF0dHI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpocmVmQXR0
cjsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7
CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAg
ICAgICAgICAgICAgIHN0eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHNoZWV0KSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpvYmplY3RUYWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1l
czo6ZGF0YUF0dHI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmVtYmVkVGFnKSkKLSAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7
Ci0KLSAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIHJldHVybiBLVVJMKCk7Ci0KLSAg
ICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoKmF0dHJpYnV0ZU5hbWUpOwot
ICAgIC8vIElnbm9yZSBqYXZhc2NyaXB0IGNvbnRlbnQuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHko
KSB8fCB2YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZh
bHNlKSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsKLSAgCi0gICAgcmV0dXJuIGVsZW1lbnQtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKTsKLX0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgSFRNTFN0eWxlRWxl
bWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1l
bnQpOworICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsK
KyAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAg
ICAgIHN0eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7
CisgICAgfQogCi12b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChFbGVtZW50KiBlbGVt
ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZp
c2l0ZWRGcmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJh
bWUqPiogZnJhbWVzVG9WaXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCi17Ci0gICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBm
cmFtZSwgd2UnbGwgcHJvY2VzcyBpdCBsYXRlciBpbiByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1l
LgotICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwg
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQotICAgICAgICB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQotICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhU
TUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAg
aWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAoIXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5zKGZy
YW1lKSkKLSAgICAgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwotICAg
ICAgICAgICAgcmV0dXJuOworICAgIC8vIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZSBpZiBvbmUgd2Fz
IGZvdW5kIGZvdW5kLgorICAgIGlmIChhdHRyaWJ1dGUpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVl
ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGUpOworICAgICAgICAvLyBJZ25vcmUg
amF2YXNjcmlwdCBjb250ZW50LgorICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFs
dWUuc3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsK
KyAgICAgICAgICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwodmFsdWUpKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSBVUkxzIHRoYXQg
aGF2ZSBhIG5vbi1zdGFuZGFyZCBwcm90b2NvbHMuIFNpbmNlIHRoZSBGVFAgcHJvdG9jb2wKKyAg
ICAgICAgICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBh
cyB3ZWxsLgorICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmICF1cmwuaXNOdWxsKCkg
JiYgdXJsLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICYmICh1cmwucHJvdG9jb2xJcygiaHR0
cCIpIHx8IHVybC5wcm90b2NvbElzKCJodHRwcyIpIHx8IHVybC5wcm90b2NvbElzKCJmaWxlIikp
KSB7CisgICAgICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQodXJsKTsKKyAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAotICAgIEtVUkwgdXJsID0gZ2V0U3ViUmVzb3VyY2VVUkxG
cm9tRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFs
aWQoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJjZSBmb3IgdGhpcyBub2RlLgot
Ci0gICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29scy4g
U2luY2UgdGhlIEZUUCBwcm90b2NvbAotICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hh
bmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgotICAgIGlmICghdXJsLnByb3RvY29sSW5IVFRQRmFt
aWx5KCkgJiYgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAo
IXJlc291cmNlVVJMcy0+Y29udGFpbnModXJsKSkKLSAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBl
bmQodXJsKTsKKyAgICAvLyBQcm9jZXNzIGluLWxpbmUgc3R5bGUuCisgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IGVsZW1lbnQtPnN0eWxlKCk7CisgICAgaWYgKHN0
eWxlRGVjbGFyYXRpb24pCisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNs
YXJhdGlvbihzdHlsZURlY2xhcmF0aW9uLCByZXNvdXJjZVVSTHMpOwogfQogCiB2b2lkIHJldHJp
ZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ1N0cmluZz4mIHN1
cHBvcnRlZFNjaGVtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZy
YW1lKj4qIHZpc2l0ZWRGcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz
aFNldDxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiBzdHlsZVNoZWV0cywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiBmcmFtZVVSTHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQog
eworICAgIC8vIElmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgZnJhbWUsIGlnbm9yZSBpdC4K
KyAgICBpZiAoIXZpc2l0ZWRGcmFtZXMtPmFkZChmcmFtZSkuc2Vjb25kKQorICAgICAgICByZXR1
cm47CisKICAgICBLVVJMIGZyYW1lVVJMID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRl
cigpLT5yZXF1ZXN0KCkudXJsKCk7CiAKICAgICAvLyBJZiB0aGUgZnJhbWUncyBVUkwgaXMgaW52
YWxpZCwgaWdub3JlIGl0LCBpdCBpcyBub3QgcmV0cmlldmFibGUuCkBAIC0xNTUsMjMgKzE3OSw5
NiBAQCB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyCiAgICAgaWYgKCFp
c1ZhbGlkU2NoZW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBoYXZlIGFscmVh
ZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCi0gICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmNv
bnRhaW5zKGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZpc2l0ZWRGcmFtZXMtPmFwcGVu
ZChmcmFtZSk7Ci0gICAgaWYgKCFmcmFtZVVSTHMtPmNvbnRhaW5zKGZyYW1lVVJMKSkKLSAgICAg
ICAgZnJhbWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAgIGZyYW1lVVJMcy0+YWRkKGZyYW1l
VVJMKTsKICAgCiAgICAgLy8gTm93IGdldCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBl
YWNoIG5vZGUgb2YgdGhlIGRvY3VtZW50LgogICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4g
YWxsTm9kZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+YWxsKCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGFsbE5vZGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUg
PSBhbGxOb2Rlcy0+aXRlbShpKTsKICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBp
biBIVE1MIHJlc291cmNlcy4KLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChhbGxOb2Rlcy0+aXRl
bShpKSk7CisgICAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICByZXRyaWV2ZVJlc291
cmNlc0ZvckVsZW1lbnQoZWxlbWVudCwgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkRnJhbWVzLCBmcmFtZXNUb1Zpc2l0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRzLCBmcmFt
ZVVSTHMsIHJlc291cmNlVVJMcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgcmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICBp
ZiAocnVsZS0+c3R5bGUoKSkKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZURl
Y2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCksIHJlc291cmNlVVJMcyk7Cit9CisKK3ZvaWQgcmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlRGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAgLy8gUmV0cmlldmluZyB0
aGUgYmFja2dyb3VuZCBwcm9wZXJ0eSB3b3VsZCBwcm9iYWJseSBiZSBnb29kIGVub3VnaC4KKyAg
ICAvLyBJdGVyYXRpbmcgZm9yIGFueSBvdGhlciBpbWFnZSBwcm9wZXJ0aWVzIHRvIGJlIHNhZmUg
KEkgYW0gbm90IHN1cmUgdGhlcmUKKyAgICAvLyBhcmUgYWN0dWFsbHkgb3RoZXJzKS4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkg
eworICAgICAgICAvLyBGSVhNRTogaXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBw
cm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRo
ZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQorICAgICAg
ICAvLyBwcm9wIElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0
byBwcm9wZXJ0eSBuYW1lcywKKyAgICAgICAgLy8gbm90IElEcy4KKyAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWx1ZSA9CisgICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAgICBpZiAodmFsdWUt
PmlzSW1hZ2VWYWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVl
ID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAg
IFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFn
ZSgpOworICAgICAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZSBhcmUganVzdCBwbGFjZS1ob2xk
ZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAgICAgICAgaWYgKHN0eWxlSW1hZ2Ut
PmlzQ2FjaGVkSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBzdGF0aWNf
Y2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCktPnVybCgp
OworICAgICAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKAorICAgICAgICAgICAgICAgICAg
ICBLVVJMKFBhcnNlZFVSTFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKS0+ZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldChDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgSGFzaFNldDxDU1NTdHlsZVNoZWV0Kj4qIHZpc2l0ZWRTdHlsZVNoZWV0cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdl
YktpdDo6V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAg
aWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZpc2l0ZWRTdHls
ZVNoZWV0cy0+YWRkKHN0eWxlU2hlZXQpLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSBo
YXZlIGFscmVhZHkgc2VlbiB0aGF0IHN0eWxlU2hlZXQuCisKKyAgICAvLyBQYXJzZSB0aGUgc3R5
bGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7Cisg
ICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXRyaWV2
ZVJlc291cmNlc0ZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNp
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3Vy
Y2VVUkxzKTsKKworICAgICAgIGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICAg
ICAgLy8gVGhlIGltcG9ydGVkIENTUyBmaWxlIGl0c2VsZiBpcyBhIHJlc291cmNlLgorICAgICAg
ICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1
bGUqPihpdGVtKTsKKyAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKAorICAgICAgICAgICAg
ICAgIEtVUkwoUGFyc2VkVVJMU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbXBvcnRSdWxlLT5ocmVmKCkpKSk7CisgICAgICAg
ICAgICAvLyBBbmQgaXQgbWF5IGNvbnRhaW4gc29tZSBtb3JlIHJlc291cmNlcy4KKyAgICAgICAg
ICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldCgKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSktPnN0eWxlU2hlZXQoKSwKKyAgICAgICAg
ICAgICAgICB2aXNpdGVkU3R5bGVTaGVldHMsIHN1cHBvcnRlZFNjaGVtZXMsIHJlc291cmNlVVJM
cyk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUoKSkgeworICAgICAg
ICAgICAgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250
RmFjZVJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUg
PSBmb250RmFjZVJ1bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlT
cmMpOworICAgICAgICAgICAgaWYgKGNzc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAg
ICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxp
c3QqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBD
U1NGb250RmFjZVNyY1ZhbHVlKiBmb250RmFjZVNyYyA9CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKGopKTsK
KyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQoS1VSTChQYXJzZWRVUkxTdHJp
bmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGZvbnRGYWNlU3JjLT5yZXNvdXJjZSgpKSkpOworICAgICAg
ICAgICAgICAgIH0gICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
aXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NT
UnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSwgcmVzb3VyY2VVUkxzKTsKICAg
ICB9CiB9CiAKQEAgLTIwMCw5ICsyOTcsMTAgQEAgYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0
cmlldmVBbGxSZXNvdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWZWN0b3I8RnJhbWUq
PiBmcmFtZXNUb1Zpc2l0OwotICAgIFZlY3RvcjxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7Ci0gICAg
VmVjdG9yPEtVUkw+IGZyYW1lS1VSTHM7Ci0gICAgVmVjdG9yPEtVUkw+IHJlc291cmNlS1VSTHM7
CisgICAgSGFzaFNldDxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7CisgICAgSGFzaFNldDxDU1NTdHls
ZVNoZWV0Kj4gc3R5bGVTaGVldHM7CisgICAgSGFzaFNldDxLVVJMPiBmcmFtZUtVUkxzOworICAg
IEhhc2hTZXQ8S1VSTD4gcmVzb3VyY2VLVVJMczsKICAgICAKICAgICAvLyBMZXQncyByZXRyaWV2
ZSB0aGUgcmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBwYWdlLgogICAgIGZyYW1l
c1RvVmlzaXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CkBAIC0yMTAsMjQgKzMwOCwzNiBA
QCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291CiAgICAgICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07CiAgICAgICAgIGZyYW1lc1RvVmlzaXQucmVtb3Zl
KDApOwogICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZyYW1lLCBzdXBwb3J0ZWRT
Y2hlbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aXNpdGVkRnJhbWVz
LCAmZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlz
aXRlZEZyYW1lcywgJmZyYW1lc1RvVmlzaXQsICZzdHlsZVNoZWV0cywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmZnJhbWVLVVJMcywgJnJlc291cmNlS1VSTHMpOworICAgICB9
CisKKyAgICAvLyBOb3cgcmV0cmlldmUgQ1NTIHJlc291cmNlcyBmcm9tIHN0eWxlLXNoZWV0cy4K
KyAgICBIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiB2aXNpdGVkU3R5bGVTaGVldHM7CisgICAgZm9y
IChIYXNoU2V0PENTU1N0eWxlU2hlZXQqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlU2hl
ZXRzLmJlZ2luKCk7CisgICAgICAgIGl0ZXIgIT0gc3R5bGVTaGVldHMuZW5kKCk7ICsraXRlcikg
eworICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlU2hlZXQoKml0ZXIsICZ2aXNp
dGVkU3R5bGVTaGVldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VLVVJMcyk7CiAgICAgfQogCiAgICAgLy8gQ29u
dmVydHMgdGhlIHJlc3VsdHMgdG8gV2ViVVJMcy4KLSAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1
bHRSZXNvdXJjZVVSTHMocmVzb3VyY2VLVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVzb3VyY2VLVVJMcy5zaXplKCk7ICsraSkgewotICAgICAgICByZXN1bHRSZXNv
dXJjZVVSTHNbaV0gPSByZXNvdXJjZUtVUkxzW2ldOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJl
c3VsdFJlc291cmNlVVJMcyhzdGF0aWNfY2FzdDxzaXplX3Q+KHJlc291cmNlS1VSTHMuc2l6ZSgp
KSk7CisgICAgaW50IGkgPSAwOworICAgIGZvciAoSGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHJlc291cmNlS1VSTHMuYmVnaW4oKTsKKyAgICAgICAgaXRlciAhPSByZXNvdXJj
ZUtVUkxzLmVuZCgpOyArK2l0ZXIsIGkrKykgeworICAgICAgICBLVVJMIHVybCA9ICppdGVyOwor
ICAgICAgICByZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSB1cmw7CiAgICAgICAgIC8vIEEgZnJhbWUn
cyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBhcyBhbm90aGVyIHJlc291cmNlLCBrZWVw
IHRoZQogICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25seSBpbiBzdWNoIGNhc2VzLgotICAgICAg
ICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3VyY2VLVVJMc1tpXSk7Ci0gICAg
ICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIGZyYW1lS1VSTHMucmVtb3Zl
KGluZGV4KTsKKyAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUodXJsKTsKICAgICB9CiAgICAgKnJl
c291cmNlVVJMcyA9IHJlc3VsdFJlc291cmNlVVJMczsKLSAgICBXZWJWZWN0b3I8V2ViVVJMPiBy
ZXN1bHRGcmFtZVVSTHMoZnJhbWVLVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZnJhbWVLVVJMcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ld
ID0gZnJhbWVLVVJMc1tpXTsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMo
c3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUtVUkxzLnNpemUoKSkpOworICAgIGkgPSAwOworICAg
IGZvciAoSGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZyYW1lS1VSTHMuYmVn
aW4oKTsKKyAgICAgICAgaXRlciAhPSBmcmFtZUtVUkxzLmVuZCgpOyArK2l0ZXIsICsraSkgewor
ICAgICAgICByZXN1bHRGcmFtZVVSTHNbaV0gPSAqaXRlcjsKKyAgICB9CiAgICAgKmZyYW1lVVJM
cyA9IHJlc3VsdEZyYW1lVVJMczsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJj
ZVxXZWJLaXRcY2hyb21pdW1cdGVzdHNcV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2VcV2ViS2l0XGNocm9taXVtXHRlc3RzXFdlYlBhZ2VTZXJpYWxpemVyVGVz
dC5jcHAJKHJldmlzaW9uIDgxNDQ0KQkoZnJvbSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6ODE0NDQpCisrKyBTb3VyY2VcV2ViS2l0XGNocm9t
aXVtXHRlc3RzXFdlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6
ZXIuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRl
ICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRl
IDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0
Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRl
c3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7Cit9OworCitjbGFzcyBX
ZWJQYWdlU2VyaWFsaXplclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6Cisg
ICAgV2ViUGFnZVNlcmlhbGl6ZXJUZXN0KCkgOiBtX3dlYlZpZXcoMCksIG1fc3VwcG9ydGVkU2No
ZW1lcygzVSkKKyAgICB7CisgICAgICAgIG1fc3VwcG9ydGVkU2NoZW1lc1swXSA9ICJodHRwIjsK
KyAgICAgICAgbV9zdXBwb3J0ZWRTY2hlbWVzWzFdID0gImh0dHBzIjsKKyAgICAgICAgbV9zdXBw
b3J0ZWRTY2hlbWVzWzJdID0gImZpbGUiOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUg
dGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwLCAwLCAw
KTsKKyAgICAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xp
ZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1f
d2ViVmlldy0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSkKKyAgICB7Cisg
ICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25zZS5pbml0aWFs
aXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKCJ0ZXh0L2h0bWwiKTsKKyAgICAg
ICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERp
cigpLnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uLyIpOworICAgICAgICBmaWxlUGF0aC5h
cHBlbmQoZmlsZU5hbWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVy
TW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsK
KyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAg
ICB7CisgICAgICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVz
dC5pbml0aWFsaXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsK
KyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7
CisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgd2ViVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVj
dG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZl
Y3Rvci5jb250YWlucyhXZWJVUkwoR1VSTCh1cmwpKSk7CisgICAgfQorCisgICAgLy8gVXNlZnVs
IGZvciBkZWJ1Z2dpbmcuCisgICAgc3RhdGljIHZvaWQgcHJpbnRXZWJVUkxzKGNvbnN0IFdlYlZl
Y3RvcjxXZWJVUkw+JiB1cmxzKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB1cmxzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgcHJpbnRmKCIlc1xuIiwgdXJsc1tpXS5z
cGVjKCkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisgICAgV2Vi
VmVjdG9yPFdlYkNTdHJpbmc+IG1fc3VwcG9ydGVkU2NoZW1lczsKKworcHJpdmF0ZToKKyAgICBU
ZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307CisKK1RFU1RfRihXZWJQYWdl
U2VyaWFsaXplclRlc3QsIEhUTUxOb2RlcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2Vk
IGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkws
IFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZV9wYWdlLmh0bWwiKSk7CisgICAgbG9hZFVSTElu
VG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgLy8gUmV0cmlldmUgYWxsIHJlc291cmNlcy4K
KyAgICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVz
b3VyY2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJl
c291cmNlcygKKyAgICAgICAgbV93ZWJWaWV3LCBtX3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJj
ZXMsICZmcmFtZXMpKTsgICAgCisKKyAgICAvLyBUZXN0cyB0aGF0IGFsbCByZXNvdXJjZXMgZnJv
bSB0aGUgZnJhbWUgaGF2ZSBiZWVuIHJldHJpZXZlZC4KKyAgICBFWFBFQ1RfRVEoMSwgZnJhbWVz
LnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9U
UlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisK
KyAgICBFWFBFQ1RfRVEoMTQsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUg
bm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2JlYXV0aWZ1bGwuY3NzIikpOworICAgIEVYUEVD
VF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
YXdlc29tZS5qcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JvZHlCYWNrZ3JvdW5kLmpwZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2F3ZXNvbWUucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1hZ2VCdXR0b24ucG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
dGFibGVCYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3RyQmFja2dyb3VuZC5wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS90ZEJhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cuZXZlbmUuZnIvY2l0YXRpb25zL2F1dGV1ci5w
aHA/aWRhPTQ2IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cuYnJhaW55cXVvdGUuY29tL3F1b3Rlcy9hdXRob3JzL2MvY2hhcmxlc19k
YXJ3aW4uaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3doeV9kZWxldGVkLmh0bWwiKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS93
aHlfaW5zZXJ0ZWQuaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwczovL3d3dy5zZWN1cmUuY29tL2h0dHBzLmdpZiIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJmaWxlOi8vYy9teV9mb2xkZXIv
ZmlsZS5naWYiKSk7Cit9CisKK1RFU1RfRihXZWJQYWdlU2VyaWFsaXplclRlc3QsIE11bHRpcGxl
RnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVS
TCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFt
ZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL3NpbXBsZV9pZnJhbWUuaHRtbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGVfaWZyYW1lLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb2JqZWN0X2lmcmFtZS5odG1s
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9iamVj
dF9pZnJhbWUuaHRtbCIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9lbWJlZF9pZnJhbWUuaHRtbCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJlbWJlZF9pZnJhbWUuaHRtbCIpKTsKKyAgICAvLyBJ
ZiB3ZSBkb24ndCByZWdpc3RlciBhIG1vY2tlZCByZXNvdXJjZSBmb3IgYXdlc29tZS5wbmcsIGl0
IGNhdXNlcyB0aGUKKyAgICAvLyBkb2N1bWVudCBsb2FkZXIgb2YgdGhlIGlmcmFtZSB0aGF0IGhh
cyBpdCBhcyBpdHMgc3JjIHRvIGFzc2VydCBvbiBjbG9zZSwKKyAgICAvLyBub3Qgc3VyZSB3aHku
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYXdl
c29tZS5wbmciKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRG
OCgiYXdlc29tZS5wbmciKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7
CisKKyAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgorICAgIFdlYlZlY3RvcjxXZWJVUkw+
IGZyYW1lczsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXNvdXJjZXM7CisgICAgQVNTRVJUX1RS
VUUoV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKAorICAgICAgICBtX3dl
YlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlcywgJmZyYW1lcykpOyAgICAKKwor
ICAgIC8vIFRlc3RzIHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFtZSBoYXZlIGJlZW4g
cmV0cmlldmVkLgorICAgIEVYUEVDVF9FUSg0LCBmcmFtZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hv
dWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
ZnJhbWVzLCAiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3NpbXBsZV9pZnJhbWUuaHRt
bCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL29iamVjdF9pZnJhbWUuaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVkX2lmcmFtZS5o
dG1sIikpOworCisgICAgRVhQRUNUX0VRKDYsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBz
aG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2F3ZXNvbWUucG5nIikpOworICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vaW5uZXJGcmFtZS5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9mbGFzaC5zd2YiKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9t
dXNpYy5taWQiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vYmplY3QucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZW1iZWQucG5n
IikpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VT
ZXJpYWxpemVyVGVzdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDgxNDQ0KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODgsNCArMTg4LDQyIEBAIFRFU1RfRihXZWJQYWdlU2VyaWFsaXplclRl
c3QsIE11bHRpcGxlRnIKICAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVkLnBuZyIpKTsKIH0KIAorVEVTVF9GKFdlYlBh
Z2VTZXJpYWxpemVyVGVzdCwgUmV0cmlldmVDU1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0
ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwg
PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vbGlu
a19zdHlsZXMuY3NzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJv
bVVURjgoImxpbmtfc3R5bGVzLmNzcyIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVf
ZnJvbV9saW5rLmNzcyIpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVzLmNzcyIpKTsKKworICAgIGxv
YWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNv
dXJjZXMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJV
Ukw+IHJlc291cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVBbGxSZXNvdXJjZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9zdXBwb3J0ZWRTY2hlbWVzLCAm
cmVzb3VyY2VzLCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3Vy
Y2VzIGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEs
IGZyYW1lcy5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1l
cywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIHJlc291cmNl
cy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1Rf
VFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xp
bmtfc3R5bGVzLmNzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIikpOworICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3Vu
ZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNU
X1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95
ZWxsb3dfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIp
KTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2Vi
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFj
a2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9DaHVua2ZpdmUub3RmIikpOwogfQorCit9CisKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9j
c3NfdGVzdF9wYWdlLmh0bWwNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2Nzc190ZXN0X3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorPGh0
bWw+DQorDQorPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJlc291cmNl
cyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUNCisgICAgIFdlYlBhZ2VTZXJpYWxpemVy
OjpyZXRyaWV2ZUFsbFJlc291cmNlcyBtZXRob2QNCistLT4NCisNCis8aGVhZD4NCisNCis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5rX3N0eWxlcy5jc3Mi
IC8+DQorDQorPHN0eWxlPg0KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNzcycpOw0KKw0K
K0Bmb250LWZhY2Ugew0KKwlmb250LWZhbWlseTogQ2h1bmtmaXZlOw0KKwlzcmM6IHVybCgnQ2h1
bmtmaXZlLm90ZicpOw0KKyAgICAgICAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkg
Zm9ybWF0KCdlb3QnKTsNCit9DQorDQorI2NodW5rZml2ZURpdiB7DQorICBmb250LWZhbWlseTog
Q2h1bmtmaXZlLCBzYW5zLXNlcmlmOw0KK30NCis8L3N0eWxlPg0KKw0KKzxzdHlsZT4NCisjZGl2
Qmx1ZSB7DQorICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBuZycpOw0K
K30NCis8L3N0eWxlPg0KKw0KKzxzY3JpcHQ+DQorLy8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENT
UyBzdHlsZS4NCitmdW5jdGlvbiBvbmxvYWQoKSB7DQorICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQ
dXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJsKCdwdXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOw0K
KyAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQdXJwbGUnKTsNCisgIHZh
ciBzdHlsZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7DQorICBzdHlsZU5v
ZGUudHlwZT0gJ3RleHQvY3NzJzsNCisgIHN0eWxlTm9kZS5tZWRpYT0gJ3NjcmVlbic7DQorICBz
dHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVUZXh0KSk7
DQorICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsNCit9DQorPC9zY3JpcHQ+DQorPC9oZWFk
Pg0KKw0KKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPg0KKw0KKzwhLS0gVGV4dCB1c2luZyBhbiBp
bXBvcnRlZCBmb250IC0tPg0KKzxkaXYgaWQ9J2NodW5rZml2ZURpdic+VGhpcyB0ZXh0IHVzZXMg
dGhlIENodW5rZml2ZSBmb250LjwvZGl2Pg0KKw0KKzwhLS0gU3R5bGUgaXMgaW4gbGlua2VkIGZp
bGUgLS0+DQorPGRpdiBpZD0nZGl2UmVkJz4NCitUaGlzIGRpdiBoYXMgYSByZWQgaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuDQorPC9kaXY+DQorDQorPCEtLSBTdHlsZSBpcyBpbiBhIGZpbGUgaW1w
b3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPg0KKzxkaXYgaWQ9J2Rpdk9yYW5nZSc+DQorVGhp
cyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLg0KKzwvZGl2Pg0KKw0K
KzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4NCis8ZGl2IGlkPSdkaXZZZWxs
b3cnPg0KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4NCis8
L2Rpdj4NCisNCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHlsZSBzZWN0aW9uIGluIHRo
ZSBoZWFkZXIgLS0+DQorPGRpdiBpZD0nZGl2Qmx1ZSc+DQorVGhpcyBkaXYgaGFzIGEgYmx1ZSBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4NCis8L2Rpdj4NCisNCis8IS0tIFN0eWxlIGlzIGlubGlu
ZWQgLS0+DQorPGRpdiBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgn
Z3JlZW5fYmFja2dyb3VuZC5wbmcnKSI+DQorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuDQorPC9kaXY+DQorDQorPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBn
ZW5lcmF0ZWQgd2l0aCBKYXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4NCis8ZGl2
IGlkPSdkaXZQdXJwbGUnPg0KK1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMgYmFj
a2dyb3VuZC4NCis8L2Rpdj4NCisNCis8L2JvZHk+DQorDQorPC9odG1sPg0KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5
bGVfZnJvbV9saW5rLmNzcw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXphdGlvbi9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzIEBACisjZGl2T3JhbmdlIHsNCisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2Vf
YmFja2dyb3VuZC5wbmcnKTsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9y
dF9zdHlsZXMuY3NzDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2lt
cG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZZZWxsb3cg
ew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3VuZC5wbmcnKTsNCit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5bGVzLmNzcw0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bi9saW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDUgQEAKK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNz
cycpOw0KKw0KKyNkaXZSZWQgew0KKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZWRfYmFja2dy
b3VuZC5wbmcnKTsNCit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86223</attachid>
            <date>2011-03-18 15:21:52 -0700</date>
            <delta_ts>2011-03-18 18:22:34 -0700</delta_ts>
            <desc>Fixed CSS test</desc>
            <filename>retrieve_resources.patch</filename>
            <type>text/plain</type>
            <size>25527</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTUwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDMtMTggIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyByZXRy
aWV2YWwgb2ZmIENTUyByZXNvdXJjZXMgdG8gV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxs
UmVzb3VyY2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY2NTAKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAg
ICAgKiB0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rl
c3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAgKCNkaXZPcmFu
Z2UpOgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxl
cy5jc3M6IEFkZGVkLgorICAgICAgICAoI2RpdlllbGxvdyk6CisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rp
dlJlZCk6CisKIDIwMTEtMDMtMTcgIEFsZXhleSBNYXJpbmljaGV2ICA8YW1hcmluaWNoZXZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDgxNTA5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsNiArNjIyLDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Vu
aXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9XZWJVbml0VGVzdHMuY3BwJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gODE1
MDkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbGxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIYXNoU2V0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVk
SW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExp
c3QuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKLQogI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgpAQCAtNTcsODcg
KzcyLDk2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi1LVVJM
IGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3ZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24q
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxL
VVJMPiogcmVzb3VyY2VVUkxzKTsKKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQo
SFRNTEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hl
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxGcmFtZSo+KiB2
aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZy
YW1lKj4qIGZyYW1lc1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
YXNoU2V0PENTU1N0eWxlU2hlZXQqPiogc3R5bGVTaGVldHMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiBmcmFtZVVSTHMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCiB7Ci0gICAgQVNT
RVJUKGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAw
OworICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwg
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQorICAgICAgICB8fCBlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQorICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFt
ZU93bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PGNv
bnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKKyAg
ICAgICAgaWYgKGZyYW1lICYmICF2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkpCisgICAg
ICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlID0gMDsKICAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRN
TE5hbWVzOjpzcmNBdHRyOworICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpzcmNBdHRy
OwogICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykp
IHsKICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5w
dXRFbGVtZW50Kj4oZWxlbWVudCk7CiAgICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigp
KQotICAgICAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAg
ICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOwogICAgIH0gZWxzZSBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcpCiAgICAgICAgICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcpCiAgICAgICAgICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJUYWcpCiAgICAgICAgICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRUYWcpKQotICAgICAgICBhdHRy
aWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHI7CisgICAgICAgIGF0dHJpYnV0
ZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91bmRBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpibG9ja3F1b3RlVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6Omluc1RhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAm
SFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpxVGFnKQorICAgICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmRlbFRhZykKKyAgICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpj
aXRlQXR0cjsKKyAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSkKKyAgICAgICAgYXR0cmlidXRlID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7CisgICAg
ZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkKKyAgICAg
ICAgYXR0cmlidXRlID0gJkhUTUxOYW1lczo6c3JjQXR0cjsKICAgICBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKLSAgICAgICAgLy8gSWYgdGhlIGxp
bmsgZWxlbWVudCBpcyBub3QgY3NzLCBpZ25vcmUgaXQuCisgICAgICAgIEhUTUxMaW5rRWxlbWVu
dCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsK
KyAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBDU1MgbGlua3MuCiAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0
eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mgb2Ygc3ViLXJlc291cmNlcyB3aGljaAotICAgICAgICAg
ICAgLy8gYXJlIGluc2lkZSBzdHlsZS1zaGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250LWZhY2Us
IHVybCgpLCBldGMuCi0gICAgICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6aHJl
ZkF0dHI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpocmVmQXR0cjsKKyAg
ICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAg
ICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAg
ICAgICAgIHN0eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0
KSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpvYmplY3RUYWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6ZGF0
YUF0dHI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVk
VGFnKSkKLSAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Ci0KLSAg
ICBpZiAoIWF0dHJpYnV0ZU5hbWUpCi0gICAgICAgIHJldHVybiBLVVJMKCk7Ci0KLSAgICBTdHJp
bmcgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoKmF0dHJpYnV0ZU5hbWUpOwotICAgIC8v
IElnbm9yZSBqYXZhc2NyaXB0IGNvbnRlbnQuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2
YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5zdGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkK
LSAgICAgICAgcmV0dXJuIEtVUkwoKTsKLSAgCi0gICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHZhbHVlKTsKLX0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgSFRNTFN0eWxlRWxlbWVudCog
c3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpOwor
ICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAg
ICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIHN0
eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7CisgICAg
fQogCi12b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRG
cmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiog
ZnJhbWVzVG9WaXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxL
VVJMPiogZnJhbWVVUkxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PEtVUkw+KiByZXNvdXJjZVVSTHMpCi17Ci0gICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBmcmFtZSwg
d2UnbGwgcHJvY2VzcyBpdCBsYXRlciBpbiByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lLgotICAg
IGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwgZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6ZW1iZWRUYWcpKQotICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVy
RWxlbWVudCgpKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxGcmFt
ZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKGZy
YW1lKSB7Ci0gICAgICAgICAgICBpZiAoIXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5zKGZyYW1lKSkK
LSAgICAgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwotICAgICAgICAg
ICAgcmV0dXJuOworICAgIC8vIFByb2Nlc3MgdGhlIGF0dHJpYnV0ZSBpZiBvbmUgd2FzIGZvdW5k
IGZvdW5kLgorICAgIGlmIChhdHRyaWJ1dGUpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGUpOworICAgICAgICAvLyBJZ25vcmUgamF2YXNj
cmlwdCBjb250ZW50LgorICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFsdWUuc3Ry
aXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKKyAgICAg
ICAgICAgIEtVUkwgdXJsKFBhcnNlZFVSTFN0cmluZywgZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodmFsdWUpKTsKKyAgICAgICAgICAgIC8vIElnbm9yZSBVUkxzIHRoYXQgaGF2ZSBh
IG5vbi1zdGFuZGFyZCBwcm90b2NvbHMuIFNpbmNlIHRoZSBGVFAgcHJvdG9jb2wKKyAgICAgICAg
ICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxs
LgorICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpICYmICF1cmwuaXNOdWxsKCkgJiYgdXJs
LmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICYmICh1cmwucHJvdG9jb2xJcygiaHR0cCIpIHx8
IHVybC5wcm90b2NvbElzKCJodHRwcyIpIHx8IHVybC5wcm90b2NvbElzKCJmaWxlIikpKSB7Cisg
ICAgICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQodXJsKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIAotICAgIEtVUkwgdXJsID0gZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxl
bWVudChlbGVtZW50KTsKLSAgICBpZiAodXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkK
LSAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJjZSBmb3IgdGhpcyBub2RlLgotCi0gICAg
Ly8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29scy4gU2luY2Ug
dGhlIEZUUCBwcm90b2NvbAotICAgIC8vIGRvZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwg
d2Ugc2tpcCBpdCBhcyB3ZWxsLgotICAgIGlmICghdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkg
JiYgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlc291
cmNlVVJMcy0+Y29udGFpbnModXJsKSkKLSAgICAgICAgcmVzb3VyY2VVUkxzLT5hcHBlbmQodXJs
KTsKKyAgICAvLyBQcm9jZXNzIGluLWxpbmUgc3R5bGUuCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGVEZWNsYXJhdGlvbiA9IGVsZW1lbnQtPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlRGVj
bGFyYXRpb24pCisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlv
bihzdHlsZURlY2xhcmF0aW9uLCByZXNvdXJjZVVSTHMpOwogfQogCiB2b2lkIHJldHJpZXZlUmVz
b3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ1N0cmluZz4mIHN1cHBvcnRl
ZFNjaGVtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4q
IHZpc2l0ZWRGcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxG
cmFtZSo+KiB2aXNpdGVkRnJhbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZl
Y3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiBzdHlsZVNoZWV0cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiBmcmFtZVVSTHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQogeworICAg
IC8vIElmIHdlIGhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgZnJhbWUsIGlnbm9yZSBpdC4KKyAgICBp
ZiAoIXZpc2l0ZWRGcmFtZXMtPmFkZChmcmFtZSkuc2Vjb25kKQorICAgICAgICByZXR1cm47CisK
ICAgICBLVVJMIGZyYW1lVVJMID0gZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5y
ZXF1ZXN0KCkudXJsKCk7CiAKICAgICAvLyBJZiB0aGUgZnJhbWUncyBVUkwgaXMgaW52YWxpZCwg
aWdub3JlIGl0LCBpdCBpcyBub3QgcmV0cmlldmFibGUuCkBAIC0xNTUsMjMgKzE3OSw5NiBAQCB2
b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyCiAgICAgaWYgKCFpc1ZhbGlk
U2NoZW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgc2Vl
biB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCi0gICAgaWYgKHZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5z
KGZyYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZpc2l0ZWRGcmFtZXMtPmFwcGVuZChmcmFt
ZSk7Ci0gICAgaWYgKCFmcmFtZVVSTHMtPmNvbnRhaW5zKGZyYW1lVVJMKSkKLSAgICAgICAgZnJh
bWVVUkxzLT5hcHBlbmQoZnJhbWVVUkwpOworICAgIGZyYW1lVVJMcy0+YWRkKGZyYW1lVVJMKTsK
ICAgCiAgICAgLy8gTm93IGdldCB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG5v
ZGUgb2YgdGhlIGRvY3VtZW50LgogICAgIFJlZlB0cjxIVE1MQWxsQ29sbGVjdGlvbj4gYWxsTm9k
ZXMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+YWxsKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFsbE5vZGVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIE5vZGUqIG5vZGUgPSBhbGxO
b2Rlcy0+aXRlbShpKTsKICAgICAgICAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBIVE1M
IHJlc291cmNlcy4KLSAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAg
IEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChhbGxOb2Rlcy0+aXRlbShpKSk7
CisgICAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0Zv
ckVsZW1lbnQoZWxlbWVudCwgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdGVkRnJhbWVzLCBmcmFtZXNUb1Zpc2l0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRzLCBmcmFtZVVSTHMs
IHJlc291cmNlVVJMcyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICBpZiAocnVs
ZS0+c3R5bGUoKSkKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0
aW9uKHJ1bGUtPnN0eWxlKCksIHJlc291cmNlVVJMcyk7Cit9CisKK3ZvaWQgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVj
bGFyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBI
YXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAgLy8gUmV0cmlldmluZyB0aGUgYmFj
a2dyb3VuZCBwcm9wZXJ0eSB3b3VsZCBwcm9iYWJseSBiZSBnb29kIGVub3VnaC4KKyAgICAvLyBJ
dGVyYXRpbmcgZm9yIGFueSBvdGhlciBpbWFnZSBwcm9wZXJ0aWVzIHRvIGJlIHNhZmUgKEkgYW0g
bm90IHN1cmUgdGhlcmUKKyAgICAvLyBhcmUgYWN0dWFsbHkgb3RoZXJzKS4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICAvLyBGSVhNRTogaXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0
eSBuYW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1l
LiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQorICAgICAgICAvLyBw
cm9wIElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9w
ZXJ0eSBuYW1lcywKKyAgICAgICAgLy8gbm90IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9CisgICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAgICBpZiAodmFsdWUtPmlzSW1h
Z2VWYWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFN0eWxl
SW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOwor
ICAgICAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZSBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFu
ZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAgICAgICAgaWYgKHN0eWxlSW1hZ2UtPmlzQ2Fj
aGVkSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBzdGF0aWNfY2FzdDxT
dHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCktPnVybCgpOworICAg
ICAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKAorICAgICAgICAgICAgICAgICAgICBLVVJM
KFBhcnNlZFVSTFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKS0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwodXJsKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGFz
aFNldDxDU1NTdHlsZVNoZWV0Kj4qIHZpc2l0ZWRTdHlsZVNoZWV0cywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6
V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAgaWYgKCFz
dHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXZpc2l0ZWRTdHlsZVNoZWV0
cy0+YWRkKHN0eWxlU2hlZXQpLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSBoYXZlIGFs
cmVhZHkgc2VlbiB0aGF0IHN0eWxlU2hlZXQuCisKKyAgICAvLyBQYXJzZSB0aGUgc3R5bGVzLgor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7CisgICAgICAg
IGlmICghaXRlbSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICByZXRyaWV2ZVJlc291
cmNlc0ZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxz
KTsKKworICAgICAgIGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICAgICAgLy8g
VGhlIGltcG9ydGVkIENTUyBmaWxlIGl0c2VsZiBpcyBhIHJlc291cmNlLgorICAgICAgICAgICAg
Q1NTSW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihp
dGVtKTsKKyAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKAorICAgICAgICAgICAgICAgIEtV
UkwoUGFyc2VkVVJMU3RyaW5nLAorICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0LT5kb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChpbXBvcnRSdWxlLT5ocmVmKCkpKSk7CisgICAgICAgICAgICAv
LyBBbmQgaXQgbWF5IGNvbnRhaW4gc29tZSBtb3JlIHJlc291cmNlcy4KKyAgICAgICAgICAgIHJl
dHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldCgKKyAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSktPnN0eWxlU2hlZXQoKSwKKyAgICAgICAgICAgICAg
ICB2aXNpdGVkU3R5bGVTaGVldHMsIHN1cHBvcnRlZFNjaGVtZXMsIHJlc291cmNlVVJMcyk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUoKSkgeworICAgICAgICAgICAg
Q1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1
bGUqPihpdGVtKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBmb250
RmFjZVJ1bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOwor
ICAgICAgICAgICAgaWYgKGNzc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAg
ICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihj
c3NWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBDU1NGb250
RmFjZVNyY1ZhbHVlKiBmb250RmFjZVNyYyA9CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKGopKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQoS1VSTChQYXJzZWRVUkxTdHJpbmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGZvbnRGYWNlU3JjLT5yZXNvdXJjZSgpKSkpOworICAgICAgICAgICAg
ICAgIH0gICAgICAgICAgCisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+
aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSwgcmVzb3VyY2VVUkxzKTsKICAgICB9CiB9
CiAKQEAgLTIwMCw5ICsyOTcsMTAgQEAgYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVB
bGxSZXNvdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBWZWN0b3I8RnJhbWUqPiBmcmFt
ZXNUb1Zpc2l0OwotICAgIFZlY3RvcjxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7Ci0gICAgVmVjdG9y
PEtVUkw+IGZyYW1lS1VSTHM7Ci0gICAgVmVjdG9yPEtVUkw+IHJlc291cmNlS1VSTHM7CisgICAg
SGFzaFNldDxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7CisgICAgSGFzaFNldDxDU1NTdHlsZVNoZWV0
Kj4gc3R5bGVTaGVldHM7CisgICAgSGFzaFNldDxLVVJMPiBmcmFtZUtVUkxzOworICAgIEhhc2hT
ZXQ8S1VSTD4gcmVzb3VyY2VLVVJMczsKICAgICAKICAgICAvLyBMZXQncyByZXRyaWV2ZSB0aGUg
cmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBwYWdlLgogICAgIGZyYW1lc1RvVmlz
aXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CkBAIC0yMTAsMjQgKzMwOCwzNiBAQCBib29s
IFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291CiAgICAgICAgIEZyYW1lKiBmcmFt
ZSA9IGZyYW1lc1RvVmlzaXRbMF07CiAgICAgICAgIGZyYW1lc1RvVmlzaXQucmVtb3ZlKDApOwog
ICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZyYW1lLCBzdXBwb3J0ZWRTY2hlbWVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2aXNpdGVkRnJhbWVzLCAmZnJh
bWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlzaXRlZEZy
YW1lcywgJmZyYW1lc1RvVmlzaXQsICZzdHlsZVNoZWV0cywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmZnJhbWVLVVJMcywgJnJlc291cmNlS1VSTHMpOworICAgICB9CisKKyAg
ICAvLyBOb3cgcmV0cmlldmUgQ1NTIHJlc291cmNlcyBmcm9tIHN0eWxlLXNoZWV0cy4KKyAgICBI
YXNoU2V0PENTU1N0eWxlU2hlZXQqPiB2aXNpdGVkU3R5bGVTaGVldHM7CisgICAgZm9yIChIYXNo
U2V0PENTU1N0eWxlU2hlZXQqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHN0eWxlU2hlZXRzLmJl
Z2luKCk7CisgICAgICAgIGl0ZXIgIT0gc3R5bGVTaGVldHMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlU2hlZXQoKml0ZXIsICZ2aXNpdGVkU3R5
bGVTaGVldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBw
b3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VLVVJMcyk7CiAgICAgfQogCiAgICAgLy8gQ29udmVydHMg
dGhlIHJlc3VsdHMgdG8gV2ViVVJMcy4KLSAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRSZXNv
dXJjZVVSTHMocmVzb3VyY2VLVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVzb3VyY2VLVVJMcy5zaXplKCk7ICsraSkgewotICAgICAgICByZXN1bHRSZXNvdXJjZVVS
THNbaV0gPSByZXNvdXJjZUtVUkxzW2ldOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdFJl
c291cmNlVVJMcyhzdGF0aWNfY2FzdDxzaXplX3Q+KHJlc291cmNlS1VSTHMuc2l6ZSgpKSk7Cisg
ICAgaW50IGkgPSAwOworICAgIGZvciAoSGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHJlc291cmNlS1VSTHMuYmVnaW4oKTsKKyAgICAgICAgaXRlciAhPSByZXNvdXJjZUtVUkxz
LmVuZCgpOyArK2l0ZXIsIGkrKykgeworICAgICAgICBLVVJMIHVybCA9ICppdGVyOworICAgICAg
ICByZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSB1cmw7CiAgICAgICAgIC8vIEEgZnJhbWUncyBzcmMg
Y2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBhcyBhbm90aGVyIHJlc291cmNlLCBrZWVwIHRoZQog
ICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25seSBpbiBzdWNoIGNhc2VzLgotICAgICAgICBzaXpl
X3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3VyY2VLVVJMc1tpXSk7Ci0gICAgICAgIGlm
IChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIGZyYW1lS1VSTHMucmVtb3ZlKGluZGV4
KTsKKyAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUodXJsKTsKICAgICB9CiAgICAgKnJlc291cmNl
VVJMcyA9IHJlc3VsdFJlc291cmNlVVJMczsKLSAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRG
cmFtZVVSTHMoZnJhbWVLVVJMcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
ZnJhbWVLVVJMcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gZnJh
bWVLVVJMc1tpXTsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoc3RhdGlj
X2Nhc3Q8c2l6ZV90PihmcmFtZUtVUkxzLnNpemUoKSkpOworICAgIGkgPSAwOworICAgIGZvciAo
SGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGZyYW1lS1VSTHMuYmVnaW4oKTsK
KyAgICAgICAgaXRlciAhPSBmcmFtZUtVUkxzLmVuZCgpOyArK2l0ZXIsICsraSkgeworICAgICAg
ICByZXN1bHRGcmFtZVVSTHNbaV0gPSAqaXRlcjsKKyAgICB9CiAgICAgKmZyYW1lVVJMcyA9IHJl
c3VsdEZyYW1lVVJMczsKICAgICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJ
KHJldmlzaW9uIDgxNTA5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNp
bmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVk
ZSAiV2ViU2NyaXB0U291cmNlLmgiCiAjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAi
V2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgpAQCAtNDgsNiArNDksOSBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogbmFtZXNwYWNlIHsKIAogY2xhc3MgVGVzdFdlYkZyYW1l
Q2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICAvLyBBbGxvdyBz
Y3JpcHQgc28gd2UgY2FuIHJ1biB0aGUgb25sb2FkKCkuCisgICAgdmlydHVhbCBib29sIGFsbG93
U2NyaXB0KFdlYkZyYW1lKiwgYm9vbCBlbmFibGVkUGVyU2V0dGluZ3MpIHsgcmV0dXJuIHRydWU7
IH0KIH07CiAKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpU
ZXN0IHsKQEAgLTk0LDYgKzk4LDExIEBAIHByb3RlY3RlZDoKICAgICAgICAgd2Via2l0X3N1cHBv
cnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKICAgICB9CiAKKyAgICB2b2lk
IHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVj
dXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIp
KSk7CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgd2ViVmVjdG9yQ29udGFpbnMoY29uc3QgV2Vi
VmVjdG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJsKQogICAgIHsKICAgICAgICAgcmV0dXJu
IHZlY3Rvci5jb250YWlucyhXZWJVUkwoR1VSTCh1cmwpKSk7CkBAIC0xODgsNCArMTk3LDQzIEBA
IFRFU1RfRihXZWJQYWdlU2VyaWFsaXplclRlc3QsIE11bHRpcGxlRnIKICAgICBFWFBFQ1RfVFJV
RSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVk
LnBuZyIpKTsKIH0KIAorVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgUmV0cmlldmVDU1NS
ZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBp
dC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgoImxpbmtfc3R5bGVzLmNzcyIpKTsKKyAg
ICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRf
c3R5bGVfZnJvbV9saW5rLmNzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJp
bmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNz
cyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBv
cnRfc3R5bGVzLmNzcyIpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsK
KyAgICBydW5PbkxvYWQoKTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisgICAg
V2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291cmNl
czsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJj
ZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9zdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VzLCAm
ZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20gdGhl
IGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5zaXpl
KCkpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93
d3cudGVzdC5jb20iKSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIHJlc291cmNlcy5zaXplKCkpOyAv
LyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNz
cyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dy
b3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2JsdWVfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmci
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9DaHVua2ZpdmUub3RmIikpOworfQorCiB9CisKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3NfdGVzdF9wYWdl
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL2Nzc190ZXN0X3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3NfdGVzdF9w
YWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIgQEAKKzxodG1sPgorCis8IS0tIFRo
aXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQg
Y29ycmVjdGx5IGJ5IHRoZQorICAgICBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNv
dXJjZXMgbWV0aG9kCistLT4KKworPGhlYWQ+CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtfc3R5bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9y
dCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3NzJyk7CisKK0Bmb250LWZhY2UgeworCWZvbnQtZmFtaWx5
OiBDaHVua2ZpdmU7CisJc3JjOiB1cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgICAgICAgc3JjOiB1
cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkgZm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2
ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxl
PgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2Jh
Y2tncm91bmQucG5nJyk7Cit9Cis8L3N0eWxlPgorCis8c2NyaXB0PgorLy8gRHluYW1pY2FsbHkg
Y3JlYXRlcyBhIENTUyBzdHlsZS4KK2Z1bmN0aW9uIG9ubG9hZCgpIHsKKyAgdmFyIHN0eWxlVGV4
dCA9ICIjZGl2UHVycGxlIHtiYWNrZ3JvdW5kLWltYWdlOnVybCgncHVycGxlX2JhY2tncm91bmQu
cG5nJyl9IjsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQdXJwbGUn
KTsKKyAgdmFyIHN0eWxlTm9kZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAg
c3R5bGVOb2RlLnR5cGU9ICd0ZXh0L2Nzcyc7CisgIHN0eWxlTm9kZS5tZWRpYT0gJ3NjcmVlbic7
CisgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZVRl
eHQpKTsKKyAgZGl2LmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVh
ZD4KKworPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CisKKzwhLS0gVGV4dCB1c2luZyBhbiBpbXBv
cnRlZCBmb250IC0tPgorPGRpdiBpZD0nY2h1bmtmaXZlRGl2Jz5UaGlzIHRleHQgdXNlcyB0aGUg
Q2h1bmtmaXZlIGZvbnQuPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gbGlua2VkIGZpbGUgLS0+
Cis8ZGl2IGlkPSdkaXZSZWQnPgorVGhpcyBkaXYgaGFzIGEgcmVkIGltYWdlIGFzIGl0cyBiYWNr
Z3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYSBmaWxlIGltcG9ydGVkIGluIHRo
ZSBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2Rpdk9yYW5nZSc+CitUaGlzIGRpdiBoYXMgYSBv
cmFuZ2UgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBp
biBhbiBpbXBvcnRlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2WWVsbG93Jz4KK1RoaXMgZGl2IGhh
cyBhIHllbGxvdyBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxl
IGlzIGRlZmluZWQgaW4gYSBzdHlsZSBzZWN0aW9uIGluIHRoZSBoZWFkZXIgLS0+Cis8ZGl2IGlk
PSdkaXZCbHVlJz4KK1RoaXMgZGl2IGhhcyBhIGJsdWUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQu
Cis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbmxpbmVkIC0tPgorPGRpdiBpZD0nZGl2R3JlZW4n
IHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgnZ3JlZW5fYmFja2dyb3VuZC5wbmcnKSI+CitU
aGlzIGRpdiBoYXMgYSBncmVlbiBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8
IS0tIFN0eWxlIGlkIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB3aXRoIEphdmFTY3JpcHQgaW4gdGhl
IG9ubG9hZCBoYW5kbGVyIC0tPgorPGRpdiBpZD0nZGl2UHVycGxlJz4KK1RoaXMgZGl2IGhhcyBh
IHB1cnBsZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8L2JvZHk+CisKKzwv
aHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXphdGlvbi9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxl
X2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1h
Z2U6dXJsKCdvcmFuZ2VfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vaW1wb3J0X3N0eWxlcy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAK
KyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19iYWNrZ3JvdW5k
LnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3MK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uL2xpbmtfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3MJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9t
X2xpbmsuY3NzJyk7CisKKyNkaXZSZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9i
YWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86238</attachid>
            <date>2011-03-18 16:23:09 -0700</date>
            <delta_ts>2011-03-18 18:21:50 -0700</delta_ts>
            <desc>Fixed tests.</desc>
            <filename>css_resources.patch</filename>
            <type>text/plain</type>
            <size>26022</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTUwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDMtMTggIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyByZXRy
aWV2YWwgb2ZmIENTUyByZXNvdXJjZXMgdG8gV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxs
UmVzb3VyY2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY2NTAKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAg
ICAgKiB0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rl
c3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAgKCNkaXZPcmFu
Z2UpOgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxl
cy5jc3M6IEFkZGVkLgorICAgICAgICAoI2RpdlllbGxvdyk6CisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rp
dlJlZCk6CisKIDIwMTEtMDMtMTcgIEFsZXhleSBNYXJpbmljaGV2ICA8YW1hcmluaWNoZXZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDgxNTA5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsNiArNjIyLDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Vu
aXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9XZWJVbml0VGVzdHMuY3BwJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gODE1
MDkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbGxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJMaXN0SGFzaFNl
dC5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdl
LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAog
I2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTU3LDg3ICs3NCw5OSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotS1VSTCBnZXRTdWJSZXNvdXJjZVVSTEZyb21F
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5
bGVEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMp
OworCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChIVE1MRWxlbWVudCogZWxlbWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIGZyYW1lc1Rv
VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxDU1NT
dHlsZVNoZWV0Kj4qIHN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzdEhhc2hTZXQ8S1VSTD4qIGZyYW1lVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAwOwor
ICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZW1iZWRUYWcpKQorICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFtZU93
bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKKyAgICAg
ICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAgICBpZiAoIXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5z
KGZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSogYXR0cmlidXRlID0gMDsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRh
ZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgICAg
ICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKICAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAg
ICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigpKQotICAgICAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSAmSFRN
TE5hbWVzOjpzcmNBdHRyOwogICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJvZHlUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGFibGVUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGRUYWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6
YmFja2dyb3VuZEF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91
bmRBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9j
a3F1b3RlVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpxVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
ZWxUYWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlu
c1RhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQorICAg
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQor
ICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAgICAgICAgYXR0cmli
dXRlID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkKKyAgICAgICAgYXR0cmlidXRlID0gJkhUTUxOYW1l
czo6c3JjQXR0cjsKICAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGlua1RhZykpIHsKLSAgICAgICAgLy8gSWYgdGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBp
Z25vcmUgaXQuCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgLy8gV2UgYXJlIG9ubHkg
aW50ZXJlc3RlZCBpbiBDU1MgbGlua3MuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShl
bGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mg
b2Ygc3ViLXJlc291cmNlcyB3aGljaAotICAgICAgICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1z
aGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250LWZhY2UsIHVybCgpLCBldGMuCi0gICAgICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6aHJlZkF0dHI7CisgICAgICAgICAgICBhdHRy
aWJ1dGUgPSAmSFRNTE5hbWVzOjpocmVmQXR0cjsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNo
ZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRzLT5hZGQo
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQotICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7Ci0gICAgZWxzZSBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkKLSAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Ci0KLSAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCi0g
ICAgICAgIHJldHVybiBLVVJMKCk7Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoKmF0dHJpYnV0ZU5hbWUpOwotICAgIC8vIElnbm9yZSBqYXZhc2NyaXB0IGNvbnRl
bnQuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsK
LSAgCi0gICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKTsK
LX0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRh
ZykpIHsKKyAgICAgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBTdHlsZVNoZWV0KiBzaGVl
dCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5p
c0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIHN0eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7CisgICAgfQogCi12b2lkIHJldHJpZXZlUmVzb3Vy
Y2VzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCi17
Ci0gICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBmcmFtZSwgd2UnbGwgcHJvY2VzcyBpdCBsYXRlciBp
biByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lLgotICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQotICAg
ICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIEZy
YW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQp
LT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAo
IXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5zKGZyYW1lKSkKLSAgICAgICAgICAgICAgICBmcmFtZXNU
b1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIFByb2Nl
c3MgdGhlIGF0dHJpYnV0ZSBpZiBvbmUgd2FzIGZvdW5kIGZvdW5kLgorICAgIGlmIChhdHRyaWJ1
dGUpIHsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRy
aWJ1dGUpOworICAgICAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgICAgICBp
ZiAoIXZhbHVlLmlzRW1wdHkoKSAmJiAhdmFsdWUuc3RyaXBXaGl0ZVNwYWNlKCkuc3RhcnRzV2l0
aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpIHsKKyAgICAgICAgICAgIEtVUkwgdXJsKFBhcnNlZFVS
TFN0cmluZywgZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodmFsdWUpKTsKKworICAg
ICAgICAgICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJkIHByb3RvY29s
cy4gU2luY2UgdGhlIEZUUCBwcm90b2NvbAorICAgICAgICAgICAgLy8gZG9lcyBubyBoYXZlIGEg
Y2FjaGUgbWVjaGFuaXNtLCB3ZSBza2lwIGl0IGFzIHdlbGwuCisgICAgICAgICAgICBpZiAoIXVy
bC5pc0VtcHR5KCkgJiYgdXJsLmlzVmFsaWQoKQorICAgICAgICAgICAgICAgICYmICh1cmwucHJv
dG9jb2xJbkhUVFBGYW1pbHkoKSB8fCB1cmwuaXNMb2NhbEZpbGUoKSkpCisgICAgICAgICAgICAg
ICAgcmVzb3VyY2VVUkxzLT5hZGQodXJsKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEtVUkwg
dXJsID0gZ2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAodXJs
LmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJy
ZXNvdXJjZSBmb3IgdGhpcyBub2RlLgotCi0gICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEg
bm9uLXN0YW5kYXJkIHByb3RvY29scy4gU2luY2UgdGhlIEZUUCBwcm90b2NvbAotICAgIC8vIGRv
ZXMgbm8gaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgotICAgIGlm
ICghdXJsLnByb3RvY29sSW5IVFRQRmFtaWx5KCkgJiYgIXVybC5pc0xvY2FsRmlsZSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXJlc291cmNlVVJMcy0+Y29udGFpbnModXJsKSkKLSAg
ICAgICAgcmVzb3VyY2VVUkxzLT5hcHBlbmQodXJsKTsKKyAgICAvLyBQcm9jZXNzIGluLWxpbmUg
c3R5bGUuCisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiA9IGVsZW1l
bnQtPnN0eWxlKCk7CisgICAgaWYgKHN0eWxlRGVjbGFyYXRpb24pCisgICAgICAgIHJldHJpZXZl
UmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbihzdHlsZURlY2xhcmF0aW9uLCByZXNvdXJj
ZVVSTHMpOwogfQogCiB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1l
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9y
PFdlYktpdDo6V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTGlzdEhhc2hTZXQ8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9W
aXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIGZyYW1l
VVJMcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8S1VSTD4qIHJlc291
cmNlVVJMcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxDU1NT
dHlsZVNoZWV0Kj4qIHN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IExpc3RIYXNoU2V0PEtVUkw+KiBmcmFtZVVSTHMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKIHsKKyAgICAvLyBJZiB3ZSBo
YXZlIGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLCBpZ25vcmUgaXQuCisgICAgaWYgKCF2aXNpdGVk
RnJhbWVzLT5hZGQoZnJhbWUpLnNlY29uZCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgS1VSTCBm
cmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVy
bCgpOwogCiAgICAgLy8gSWYgdGhlIGZyYW1lJ3MgVVJMIGlzIGludmFsaWQsIGlnbm9yZSBpdCwg
aXQgaXMgbm90IHJldHJpZXZhYmxlLgpAQCAtMTU1LDIzICsxODQsOTYgQEAgdm9pZCByZXRyaWV2
ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcgogICAgIGlmICghaXNWYWxpZFNjaGVtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhhdCBmcmFt
ZSwgaWdub3JlIGl0LgotICAgIGlmICh2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICB2aXNpdGVkRnJhbWVzLT5hcHBlbmQoZnJhbWUpOwotICAgIGlm
ICghZnJhbWVVUkxzLT5jb250YWlucyhmcmFtZVVSTCkpCi0gICAgICAgIGZyYW1lVVJMcy0+YXBw
ZW5kKGZyYW1lVVJMKTsKKyAgICBmcmFtZVVSTHMtPmFkZChmcmFtZVVSTCk7CiAgIAogICAgIC8v
IE5vdyBnZXQgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBub2RlIG9mIHRoZSBk
b2N1bWVudC4KICAgICBSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbE5vZGVzID0gZnJhbWUt
PmRvY3VtZW50KCktPmFsbCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbGxOb2Rl
cy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gYWxsTm9kZXMtPml0ZW0o
aSk7CiAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gSFRNTCByZXNvdXJjZXMu
Ci0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBIVE1MRWxlbWVu
dCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoYWxsTm9kZXMtPml0ZW0oaSkpOworICAgICAgICBp
ZiAoZWxlbWVudCkgeworICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KGVs
ZW1lbnQsIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNoZWV0cywgZnJhbWVVUkxzLCByZXNvdXJjZVVS
THMpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NT
UnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMaXN0SGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIGlmIChydWxlLT5zdHls
ZSgpKQorICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24ocnVs
ZS0+c3R5bGUoKSwgcmVzb3VyY2VVUkxzKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0Zv
ckNTU1N0eWxlRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNo
U2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAgLy8gUmV0cmlldmluZyB0aGUgYmFja2dy
b3VuZCBwcm9wZXJ0eSB3b3VsZCBwcm9iYWJseSBiZSBnb29kIGVub3VnaC4KKyAgICAvLyBJdGVy
YXRpbmcgZm9yIGFueSBvdGhlciBpbWFnZSBwcm9wZXJ0aWVzIHRvIGJlIHNhZmUgKEkgYW0gbm90
IHN1cmUgdGhlcmUKKyAgICAvLyBhcmUgYWN0dWFsbHkgb3RoZXJzKS4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICAvLyBGSVhNRTogaXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBu
YW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJ
ZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQorICAgICAgICAvLyBwcm9w
IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0
eSBuYW1lcywKKyAgICAgICAgLy8gbm90IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSA9CisgICAgICAgICAgICBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAgICBpZiAodmFsdWUtPmlzSW1hZ2VW
YWx1ZSgpKSB7CisgICAgICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTSW1hZ2VWYWx1ZSo+KHZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgIFN0eWxlSW1h
Z2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAg
ICAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZSBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBk
byBub3QgY29udGFpbiBkYXRhLgorICAgICAgICAgICAgaWYgKHN0eWxlSW1hZ2UtPmlzQ2FjaGVk
SW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBzdGF0aWNfY2FzdDxTdHls
ZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCktPnVybCgpOworICAgICAg
ICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKAorICAgICAgICAgICAgICAgICAgICBLVVJMKFBh
cnNlZFVSTFN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NT
dHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKS0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwodXJsKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEhh
c2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiB2aXNpdGVkU3R5bGVTaGVldHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6
OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICBp
ZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdmlzaXRlZFN0eWxl
U2hlZXRzLT5hZGQoc3R5bGVTaGVldCkuc2Vjb25kKQorICAgICAgICByZXR1cm47IC8vIFdlIGhh
dmUgYWxyZWFkeSBzZWVuIHRoYXQgc3R5bGVTaGVldC4KKworICAgIC8vIFBhcnNlIHRoZSBzdHls
ZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc3R5bGVTaGVldC0+aXRlbShpKTsKKyAg
ICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHJpZXZl
UmVzb3VyY2VzRm9yRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkRnJhbWVzLCBmcmFtZXNUb1Zpc2l0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVVUkxzLCByZXNvdXJj
ZVVSTHMpOworCisgICAgICAgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgaW1wb3J0ZWQgQ1NTIGZpbGUgaXRzZWxmIGlzIGEgcmVzb3VyY2UuCisgICAgICAg
ICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVs
ZSo+KGl0ZW0pOworICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQoCisgICAgICAgICAgICAg
ICAgS1VSTChQYXJzZWRVUkxTdHJpbmcsCisgICAgICAgICAgICAgICAgICAgIHN0eWxlU2hlZXQt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSkpKTsKKyAgICAgICAg
ICAgIC8vIEFuZCBpdCBtYXkgY29udGFpbiBzb21lIG1vcmUgcmVzb3VyY2VzLgorICAgICAgICAg
ICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZVNoZWV0KAorICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKS0+c3R5bGVTaGVldCgpLAorICAgICAgICAg
ICAgICAgIHZpc2l0ZWRTdHlsZVNoZWV0cywgc3VwcG9ydGVkU2NoZW1lcywgcmVzb3VyY2VVUkxz
KTsKKyAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ZvbnRGYWNlUnVsZSgpKSB7CisgICAgICAg
ICAgICBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRG
YWNlUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9
IGZvbnRGYWNlUnVsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNy
Yyk7CisgICAgICAgICAgICBpZiAoY3NzVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAg
ICAgICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlz
dCo+KGNzc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIENT
U0ZvbnRGYWNlU3JjVmFsdWUqIGZvbnRGYWNlU3JjID0KKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlU3JjVmFsdWUqPih2YWx1ZUxpc3QtPml0ZW0oaikpOwor
ICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVVSTHMtPmFkZChLVVJMKFBhcnNlZFVSTFN0cmlu
ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTaGVldC0+ZG9j
dW1lbnQoKS0+Y29tcGxldGVVUkwoZm9udEZhY2VTcmMtPnJlc291cmNlKCkpKSk7CisgICAgICAg
ICAgICAgICAgfSAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChp
dGVtLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NS
dWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pLCByZXNvdXJjZVVSTHMpOwogICAg
IH0KIH0KIApAQCAtMjAwLDkgKzMwMiwxMCBAQCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZUFsbFJlc291CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFZlY3RvcjxGcmFtZSo+
IGZyYW1lc1RvVmlzaXQ7Ci0gICAgVmVjdG9yPEZyYW1lKj4gdmlzaXRlZEZyYW1lczsKLSAgICBW
ZWN0b3I8S1VSTD4gZnJhbWVLVVJMczsKLSAgICBWZWN0b3I8S1VSTD4gcmVzb3VyY2VLVVJMczsK
KyAgICBMaXN0SGFzaFNldDxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7CisgICAgTGlzdEhhc2hTZXQ8
Q1NTU3R5bGVTaGVldCo+IHN0eWxlU2hlZXRzOworICAgIExpc3RIYXNoU2V0PEtVUkw+IGZyYW1l
S1VSTHM7CisgICAgTGlzdEhhc2hTZXQ8S1VSTD4gcmVzb3VyY2VLVVJMczsKICAgICAKICAgICAv
LyBMZXQncyByZXRyaWV2ZSB0aGUgcmVzb3VyY2VzIGZyb20gZXZlcnkgZnJhbWUgaW4gdGhpcyBw
YWdlLgogICAgIGZyYW1lc1RvVmlzaXQuYXBwZW5kKG1haW5GcmFtZS0+ZnJhbWUoKSk7CkBAIC0y
MTAsMjQgKzMxMywzNiBAQCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291
CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07CiAgICAgICAgIGZyYW1l
c1RvVmlzaXQucmVtb3ZlKDApOwogICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKGZy
YW1lLCBzdXBwb3J0ZWRTY2hlbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZ2aXNpdGVkRnJhbWVzLCAmZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1lc1RvVmlzaXQsICZzdHlsZVNoZWV0cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVLVVJMcywgJnJlc291cmNl
S1VSTHMpOworICAgICB9CisKKyAgICAvLyBOb3cgcmV0cmlldmUgQ1NTIHJlc291cmNlcyBmcm9t
IHN0eWxlLXNoZWV0cy4KKyAgICBMaXN0SGFzaFNldDxDU1NTdHlsZVNoZWV0Kj4gdmlzaXRlZFN0
eWxlU2hlZXRzOworICAgIGZvciAoTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gc3R5bGVTaGVldHMuYmVnaW4oKTsKKyAgICAgICAgaXRlciAhPSBzdHls
ZVNoZWV0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NT
U3R5bGVTaGVldCgqaXRlciwgJnZpc2l0ZWRTdHlsZVNoZWV0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZUtVUkxz
KTsKICAgICB9CiAKICAgICAvLyBDb252ZXJ0cyB0aGUgcmVzdWx0cyB0byBXZWJVUkxzLgotICAg
IFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdFJlc291cmNlVVJMcyhyZXNvdXJjZUtVUkxzLnNpemUo
KSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZUtVUkxzLnNpemUoKTsgKytp
KSB7Ci0gICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tpXSA9IHJlc291cmNlS1VSTHNbaV07Cisg
ICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0UmVzb3VyY2VVUkxzKHN0YXRpY19jYXN0PHNpemVf
dD4ocmVzb3VyY2VLVVJMcy5zaXplKCkpKTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChMaXN0
SGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlc291cmNlS1VSTHMuYmVnaW4o
KTsKKyAgICAgICAgaXRlciAhPSByZXNvdXJjZUtVUkxzLmVuZCgpOyArK2l0ZXIsIGkrKykgewor
ICAgICAgICBLVVJMIHVybCA9ICppdGVyOworICAgICAgICByZXN1bHRSZXNvdXJjZVVSTHNbaV0g
PSB1cmw7CiAgICAgICAgIC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVS
TCBhcyBhbm90aGVyIHJlc291cmNlLCBrZWVwIHRoZQogICAgICAgICAvLyByZXNvdXJjZSBVUkwg
b25seSBpbiBzdWNoIGNhc2VzLgotICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZp
bmQocmVzb3VyY2VLVVJMc1tpXSk7Ci0gICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgIGZyYW1lS1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgZnJhbWVLVVJMcy5y
ZW1vdmUodXJsKTsKICAgICB9CiAgICAgKnJlc291cmNlVVJMcyA9IHJlc3VsdFJlc291cmNlVVJM
czsKLSAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoZnJhbWVLVVJMcy5zaXpl
KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVLVVJMcy5zaXplKCk7ICsraSkK
LSAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gZnJhbWVLVVJMc1tpXTsKKyAgICBXZWJWZWN0
b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUtVUkxz
LnNpemUoKSkpOworICAgIGkgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8S1VSTD46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBmcmFtZUtVUkxzLmJlZ2luKCk7CisgICAgICAgIGl0ZXIgIT0gZnJh
bWVLVVJMcy5lbmQoKTsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ld
ID0gKml0ZXI7CisgICAgfQogICAgICpmcmFtZVVSTHMgPSByZXN1bHRGcmFtZVVSTHM7CiAgICAg
CiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiA4MTUwOSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIK
ICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5o
IgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUg
IldlYlVSTFJlcXVlc3QuaCIKQEAgLTQ4LDYgKzQ5LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CiBuYW1lc3BhY2UgewogCiBjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2Vi
RnJhbWVDbGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3Jp
cHRFbmFibGVkKGZhbHNlKSB7fQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFt
ZSosIGJvb2wgZW5hYmxlZFBlclNldHRpbmdzKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0K
KyAgICBib29sIG1fc2NyaXB0RW5hYmxlZDsKIH07CiAKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVy
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKQEAgLTk0LDYgKzk5LDE2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVz
dHMoKTsKICAgICB9CiAKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAgICB7CisgICAgICAgIG1fd2Vi
RnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1
bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRl
U2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7
CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgd2ViVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVj
dG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJsKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZl
Y3Rvci5jb250YWlucyhXZWJVUkwoR1VSTCh1cmwpKSk7CkBAIC0xNjMsNyArMTc4LDcgQEAgVEVT
VF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgTXVsdGlwbGVGcgogICAgIC8vIG5vdCBzdXJlIHdo
eS4KICAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9h
d2Vzb21lLnBuZyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21V
VEY4KCJhd2Vzb21lLnBuZyIpKTsKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBs
b2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CiAKICAgICAvLyBSZXRyaWV2ZSBhbGwgcmVz
b3VyY2VzLgpAQCAtMTg4LDQgKzIwMyw0MyBAQCBURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0
LCBNdWx0aXBsZUZyCiAgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9lbWJlZC5wbmciKSk7CiB9CiAKK1RFU1RfRihXZWJQYWdl
U2VyaWFsaXplclRlc3QsIFJldHJpZXZlQ1NTUmVzb3VyY2VzKQoreworICAgIC8vIFJlZ2lzdGVy
IHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0
b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFnZS5odG1sIikpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtf
c3R5bGVzLmNzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21V
VEY4KCJsaW5rX3N0eWxlcy5jc3MiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zy
b21fbGluay5jc3MiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSk7CisKKyAgICBlbmFi
bGVKUygpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5Pbkxv
YWQoKTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisgICAgV2ViVmVjdG9yPFdl
YlVSTD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291cmNlczsKKyAgICBBU1NF
UlRfVFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMoCisgICAgICAg
IG1fd2ViVmlldywgbV9zdXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VzLCAmZnJhbWVzKSk7ICAg
IAorCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGZyYW1lIGhhdmUg
YmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5zaXplKCkpOworICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20i
KSk7CisKKyAgICBFWFBFQ1RfRVEoMTAsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91
bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpKTsKKyAgICBF
WFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL2ltcG9ydF9zdHlsZXMuY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFu
Z2VfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSk7
CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dy
b3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQ
RUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9DaHVua2ZpdmUub3RmIikpOworfQorCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rlc3RfcGFnZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bi9jc3NfdGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDgyIEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNl
ZCB0byB0ZXN0IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0
aGUKKyAgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIG1ldGhvZAor
LS0+CisKKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSJsaW5rX3N0eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRf
c3R5bGVzLmNzcycpOworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsK
KyAgc3JjOiB1cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJm
b250LmVvdCkgZm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFt
aWx5OiBDaHVua2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2
Qmx1ZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9
Cis8L3N0eWxlPgorCis8c2NyaXB0PgorLy8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHls
ZS4KK2Z1bmN0aW9uIG9ubG9hZCgpIHsKKyAgdmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHti
YWNrZ3JvdW5kLWltYWdlOnVybCgncHVycGxlX2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRp
diA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9k
ZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0
ZXh0L2Nzcyc7CisgIHN0eWxlTm9kZS5tZWRpYT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBl
bmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVu
ZENoaWxkKHN0eWxlTm9kZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2Fk
PSJvbmxvYWQoKSI+CisKKzwhLS0gVGV4dCB1c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRp
diBpZD0nY2h1bmtmaXZlRGl2Jz5UaGlzIHRleHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9k
aXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQn
PgorVGhpcyBkaXYgaGFzIGEgcmVkIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisK
KzwhLS0gU3R5bGUgaXMgaW4gYSBmaWxlIGltcG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4K
KzxkaXYgaWQ9J2Rpdk9yYW5nZSc+CitUaGlzIGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRz
IGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxl
IC0tPgorPGRpdiBpZD0nZGl2WWVsbG93Jz4KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBh
cyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBz
dHlsZSBzZWN0aW9uIGluIHRoZSBoZWFkZXIgLS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMg
ZGl2IGhhcyBhIGJsdWUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBT
dHlsZSBpcyBpbmxpbmVkIC0tPgorPGRpdiBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5k
LWltYWdlOnVybCgnZ3JlZW5fYmFja2dyb3VuZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVl
biBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFt
aWNhbGx5IGdlbmVyYXRlZCB3aXRoIEphdmFTY3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0t
PgorPGRpdiBpZD0nZGl2UHVycGxlJz4KK1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBp
dHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5
bGVfZnJvbV9saW5rLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFj
a2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0
eWxlcy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9z
dHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBi
YWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3MKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5
bGVzLmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7CisKKyNk
aXZSZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBuZycpOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>86250</attachid>
            <date>2011-03-18 18:21:50 -0700</date>
            <delta_ts>2011-03-29 00:38:47 -0700</delta_ts>
            <desc>Addressed Adam&apos;s comments</desc>
            <filename>css_resources.patch</filename>
            <type>text/plain</type>
            <size>26216</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MTUwOSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkg
QEAKKzIwMTEtMDMtMTggIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyByZXRy
aWV2YWwgb2ZmIENTUyByZXNvdXJjZXMgdG8gV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxs
UmVzb3VyY2VzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTY2NTAKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzKToKKyAgICAg
ICAgKiB0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAuCisgICAgICAg
IChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlv
bjogQ29waWVkIGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemF0aW9uLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vY3NzX3Rl
c3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0
aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAgKCNkaXZPcmFu
Z2UpOgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxl
cy5jc3M6IEFkZGVkLgorICAgICAgICAoI2RpdlllbGxvdyk6CisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rp
dlJlZCk6CisKIDIwMTEtMDMtMTcgIEFsZXhleSBNYXJpbmljaGV2ICA8YW1hcmluaWNoZXZAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDgxNTA5KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC02MjIsNiArNjIyLDcg
QEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Vu
aXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9XZWJVbml0VGVzdHMuY3BwJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF0KICAgICAgICAgICAgICAgICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gODE1
MDkpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwzMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1
bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNyY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxl
LmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisj
aW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgogI2lu
Y2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbGxD
b2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJMaXN0SGFzaFNl
dC5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdl
LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAog
I2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTU3LDg3ICs3NCw5NSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotS1VSTCBnZXRTdWJSZXNvdXJjZVVSTEZyb21F
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5
bGVEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMp
OworCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChIVE1MRWxlbWVudCogZWxlbWVu
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVj
dG9yPFdlYktpdDo6V2ViQ1N0cmluZz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIGZyYW1lc1Rv
VmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxDU1NT
dHlsZVNoZWV0Kj4qIHN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzdEhhc2hTZXQ8S1VSTD4qIGZyYW1lVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCiB7CiAgICAgQVNTRVJU
KGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUgPSAwOwor
ICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwgZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQorICAgICAgICB8fCBlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6ZW1iZWRUYWcpKQorICAgICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFtZU93
bmVyRWxlbWVudCgpKSB7CisgICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PGNvbnN0
IEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKKyAgICAg
ICAgaWYgKGZyYW1lKSB7CisgICAgICAgICAgICBpZiAoIXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5z
KGZyYW1lKSkKKyAgICAgICAgICAgICAgICBmcmFtZXNUb1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgUXVhbGlm
aWVkTmFtZSogYXR0cmlidXRlID0gMDsKICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZ1RhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRh
ZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgICAg
ICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQt
Pmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnB1dFRhZykpIHsKICAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oZWxlbWVudCk7CiAg
ICAgICAgIGlmIChpbnB1dC0+aXNJbWFnZUJ1dHRvbigpKQotICAgICAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7CisgICAgICAgICAgICBhdHRyaWJ1dGUgPSAmSFRN
TE5hbWVzOjpzcmNBdHRyOwogICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmJvZHlUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6dGFibGVUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpCiAgICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGRUYWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6
YmFja2dyb3VuZEF0dHI7CisgICAgICAgIGF0dHJpYnV0ZSA9ICZIVE1MTmFtZXM6OmJhY2tncm91
bmRBdHRyOwogICAgIGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpibG9j
a3F1b3RlVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpxVGFnKQotICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpk
ZWxUYWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Omlu
c1RhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpxVGFnKQorICAg
ICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykKKyAg
ICAgICAgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQor
ICAgICAgICBhdHRyaWJ1dGUgPSAmSFRNTE5hbWVzOjpjaXRlQXR0cjsKKyAgICBlbHNlIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKKyAgICAgICAgYXR0cmli
dXRlID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7CisgICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkKKyAgICAgICAgYXR0cmlidXRlID0gJkhUTUxOYW1l
czo6c3JjQXR0cjsKICAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGlua1RhZykpIHsKLSAgICAgICAgLy8gSWYgdGhlIGxpbmsgZWxlbWVudCBpcyBub3QgY3NzLCBp
Z25vcmUgaXQuCisgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgLy8gV2UgYXJlIG9ubHkg
aW50ZXJlc3RlZCBpbiBDU1MgbGlua3MuCiAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShl
bGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGV4dHJhY3RpbmcgbGlua3Mg
b2Ygc3ViLXJlc291cmNlcyB3aGljaAotICAgICAgICAgICAgLy8gYXJlIGluc2lkZSBzdHlsZS1z
aGVldCBzdWNoIGFzIEBpbXBvcnQsIEBmb250LWZhY2UsIHVybCgpLCBldGMuCi0gICAgICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6aHJlZkF0dHI7CisgICAgICAgICAgICBhdHRy
aWJ1dGUgPSAmSFRNTE5hbWVzOjpocmVmQXR0cjsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNo
ZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgICAgIHN0eWxlU2hlZXRzLT5hZGQo
c3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7CiAgICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQotICAgICAg
ICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6ZGF0YUF0dHI7Ci0gICAgZWxzZSBpZiAoZWxl
bWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFnKSkKLSAgICAgICAgYXR0cmlidXRl
TmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Ci0KLSAgICBpZiAoIWF0dHJpYnV0ZU5hbWUpCi0g
ICAgICAgIHJldHVybiBLVVJMKCk7Ci0KLSAgICBTdHJpbmcgdmFsdWUgPSBlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoKmF0dHJpYnV0ZU5hbWUpOwotICAgIC8vIElnbm9yZSBqYXZhc2NyaXB0IGNvbnRl
bnQuCi0gICAgaWYgKHZhbHVlLmlzRW1wdHkoKSB8fCB2YWx1ZS5zdHJpcFdoaXRlU3BhY2UoKS5z
dGFydHNXaXRoKCJqYXZhc2NyaXB0OiIsIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsK
LSAgCi0gICAgcmV0dXJuIGVsZW1lbnQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHZhbHVlKTsK
LX0KKyAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRh
ZykpIHsKKyAgICAgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICBTdHlsZVNoZWV0KiBzaGVl
dCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5p
c0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIHN0eWxlU2hlZXRzLT5hZGQoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSk7CisgICAgfQogCi12b2lkIHJldHJpZXZlUmVzb3Vy
Y2VzRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCi17
Ci0gICAgLy8gSWYgdGhlIG5vZGUgaXMgYSBmcmFtZSwgd2UnbGwgcHJvY2VzcyBpdCBsYXRlciBp
biByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lLgotICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmlmcmFtZVRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OmZyYW1lVGFnKQotICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2Jq
ZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQotICAg
ICAgICAgICAgJiYgZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIEZy
YW1lKiBmcmFtZSA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQp
LT5jb250ZW50RnJhbWUoKTsKLSAgICAgICAgaWYgKGZyYW1lKSB7Ci0gICAgICAgICAgICBpZiAo
IXZpc2l0ZWRGcmFtZXMtPmNvbnRhaW5zKGZyYW1lKSkKLSAgICAgICAgICAgICAgICBmcmFtZXNU
b1Zpc2l0LT5hcHBlbmQoZnJhbWUpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIC8vIFByb2Nl
c3MgdGhlIGF0dHJpYnV0ZSBpZiBvbmUgd2FzIGZvdW5kLgorICAgIGlmIChhdHRyaWJ1dGUpIHsK
KyAgICAgICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGUp
OworICAgICAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBjb250ZW50LgorICAgICAgICBpZiAoIXZh
bHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgS1VSTCB1cmwgPSBlbGVtZW50LT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7CisgICAgICAgICAgICAvLyBJZ25vcmUgVVJMcyB0aGF0
IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xzLiBTaW5jZSB0aGUgRlRQIHByb3RvY29sCisg
ICAgICAgICAgICAvLyBkb2VzIG5vIGhhdmUgYSBjYWNoZSBtZWNoYW5pc20sIHdlIHNraXAgaXQg
YXMgd2VsbC4KKyAgICAgICAgICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICh1cmwucHJvdG9jb2xJ
bkhUVFBGYW1pbHkoKSB8fCB1cmwuaXNMb2NhbEZpbGUoKSkpCisgICAgICAgICAgICAgICAgcmVz
b3VyY2VVUkxzLT5hZGQodXJsKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIEtVUkwgdXJsID0g
Z2V0U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAodXJsLmlzRW1w
dHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJj
ZSBmb3IgdGhpcyBub2RlLgotCi0gICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0
YW5kYXJkIHByb3RvY29scy4gU2luY2UgdGhlIEZUUCBwcm90b2NvbAotICAgIC8vIGRvZXMgbm8g
aGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgotICAgIGlmICghdXJs
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkgJiYgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAoIXJlc291cmNlVVJMcy0+Y29udGFpbnModXJsKSkKLSAgICAgICAg
cmVzb3VyY2VVUkxzLT5hcHBlbmQodXJsKTsKKyAgICAvLyBQcm9jZXNzIGluLWxpbmUgc3R5bGUu
CisgICAgaWYgKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24gPSBlbGVtZW50
LT5zdHlsZSgpKQorICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRp
b24oc3R5bGVEZWNsYXJhdGlvbiwgcmVzb3VyY2VVUkxzKTsKIH0KIAogdm9pZCByZXRyaWV2ZVJl
c291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0
ZWRTY2hlbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+
KiB2aXNpdGVkRnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNo
U2V0PEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPEZyYW1lKj4qIGZyYW1lc1RvVmlzaXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVSTHMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiBzdHlsZVNoZWV0cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxLVVJMPiogZnJhbWVVUkxz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNv
dXJjZVVSTHMpCiB7CisgICAgaWYgKCF2aXNpdGVkRnJhbWVzLT5hZGQoZnJhbWUpLnNlY29uZCkK
KyAgICAgICAgcmV0dXJuOyAvLyBXZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLgorCiAg
ICAgS1VSTCBmcmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVx
dWVzdCgpLnVybCgpOwogCiAgICAgLy8gSWYgdGhlIGZyYW1lJ3MgVVJMIGlzIGludmFsaWQsIGln
bm9yZSBpdCwgaXQgaXMgbm90IHJldHJpZXZhYmxlLgpAQCAtMTU1LDIzICsxODAsODYgQEAgdm9p
ZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcgogICAgIGlmICghaXNWYWxpZFNj
aGVtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4g
dGhhdCBmcmFtZSwgaWdub3JlIGl0LgotICAgIGlmICh2aXNpdGVkRnJhbWVzLT5jb250YWlucyhm
cmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICB2aXNpdGVkRnJhbWVzLT5hcHBlbmQoZnJhbWUp
OwotICAgIGlmICghZnJhbWVVUkxzLT5jb250YWlucyhmcmFtZVVSTCkpCi0gICAgICAgIGZyYW1l
VVJMcy0+YXBwZW5kKGZyYW1lVVJMKTsKKyAgICBmcmFtZVVSTHMtPmFkZChmcmFtZVVSTCk7CiAg
IAogICAgIC8vIE5vdyBnZXQgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBub2Rl
IG9mIHRoZSBkb2N1bWVudC4KICAgICBSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbE5vZGVz
ID0gZnJhbWUtPmRvY3VtZW50KCktPmFsbCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhbGxOb2Rlcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gYWxsTm9k
ZXMtPml0ZW0oaSk7CiAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gSFRNTCBy
ZXNvdXJjZXMuCi0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBp
ZiAoSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFsbE5vZGVzLT5pdGVtKGkp
KSkgeworICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KGVsZW1lbnQsIHN1
cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZVNoZWV0cywgZnJhbWVVUkxzLCByZXNvdXJjZVVSTHMpOworICAg
ICAgICB9CisgICAgfQorfQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFz
aFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIGlmIChydWxlLT5zdHlsZSgpKQorICAg
ICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24ocnVsZS0+c3R5bGUo
KSwgcmVzb3VyY2VVUkxzKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxl
RGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+
KiByZXNvdXJjZVVSTHMpCit7CisgICAgLy8gVGhlIGJhY2tncm91bmQtaW1hZ2UgYW5kIGxpc3Qt
c3R5bGUtaW1hZ2UgKGZvciB1bCBvciBvbCkgYXJlIHRoZSBDU1MgcHJvcGVydGllcworICAgIC8v
IHRoYXQgbWFrZSB1c2Ugb2YgaW1hZ2VzLiBXZSBpdGVyYXRlIHRvIG1ha2Ugc3VyZSB3ZSBpbmNs
dWRlIGFueSBvdGhlcgorICAgIC8vIGltYWdlIHByb3BlcnRpZXMgdGhlcmUgbWlnaHQgYmUuCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlRGVjbGFyYXRpb24tPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgLy8gRklYTUU6IGl0J3Mga2luZCBvZiByaWRpY3Vsb3VzIHRvIGdldCB0
aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlbiBnZXQKKyAgICAgICAgLy8gdGhlIHZhbHVlIG91dCBv
ZiB0aGUgbmFtZS4gSWRlYWxseSB3ZSB3b3VsZCBnZXQgdGhlIHZhbHVlIG91dCBvZiB0aGUKKyAg
ICAgICAgLy8gcHJvcGVydHkgSUQsIGJ1dCBDU1NTdHlsZURlY2xhcmF0aW9uIG9ubHkgZ2l2ZXMg
YWNjZXNzIHRvIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVzLCBub3QgSURzLgorICAgICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShzdHlsZURlY2xhcmF0aW9uLT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc0lt
YWdlVmFsdWUoKSkgeworICAgICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPih2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTdHls
ZUltYWdlKiBzdHlsZUltYWdlID0gaW1hZ2VWYWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsK
KyAgICAgICAgICAgIC8vIE5vbiBjYWNoZWQtaW1hZ2UgYXJlIGp1c3QgcGxhY2UtaG9sZGVycyBh
bmQgZG8gbm90IGNvbnRhaW4gZGF0YS4KKyAgICAgICAgICAgIGlmIChzdHlsZUltYWdlLT5pc0Nh
Y2hlZEltYWdlKCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdXJsID0gc3RhdGljX2Nhc3Q8
U3R5bGVDYWNoZWRJbWFnZSo+KHN0eWxlSW1hZ2UpLT5jYWNoZWRJbWFnZSgpLT51cmwoKTsKKyAg
ICAgICAgICAgICAgICByZXNvdXJjZVVSTHMtPmFkZChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0
Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwodXJsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxDU1NT
dHlsZVNoZWV0Kj4qIHZpc2l0ZWRTdHlsZVNoZWV0cywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVmVjdG9yPFdlYktpdDo6V2ViQ1N0cmlu
Zz4mIHN1cHBvcnRlZFNjaGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBMaXN0SGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIGlmICghc3R5bGVT
aGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2aXNpdGVkU3R5bGVTaGVldHMtPmFk
ZChzdHlsZVNoZWV0KS5zZWNvbmQpCisgICAgICAgIHJldHVybjsgLy8gV2UgaGF2ZSBhbHJlYWR5
IHNlZW4gdGhhdCBzdHlsZVNoZWV0LgorCisgICAgLy8gUGFyc2UgdGhlIHN0eWxlcy4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkpOworICAgICAgICBpZiAo
IWl0ZW0pCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGcmFtZXMsIGZyYW1lc1RvVmlzaXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVVSTHMsIHJlc291cmNlVVJMcyk7CisK
KyAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9y
dFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7Cisg
ICAgICAgICAgICAvLyBUaGUgaW1wb3J0ZWQgQ1NTIGZpbGUgaXRzZWxmIGlzIGEgcmVzb3VyY2Uu
CisgICAgICAgICAgICByZXNvdXJjZVVSTHMtPmFkZChzdHlsZVNoZWV0LT5kb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChpbXBvcnRSdWxlLT5ocmVmKCkpKTsKKyAgICAgICAgICAgIC8vIEFuZCBpdCBt
YXkgY29udGFpbiBzb21lIG1vcmUgcmVzb3VyY2VzLgorICAgICAgICAgICAgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKS0+
c3R5bGVTaGVldCgpLCB2aXNpdGVkU3R5bGVTaGVldHMsIHN1cHBvcnRlZFNjaGVtZXMsIHJlc291
cmNlVVJMcyk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUoKSkgewor
ICAgICAgICAgICAgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NGb250RmFjZVJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3Nz
VmFsdWUgPSBmb250RmFjZVJ1bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJv
cGVydHlTcmMpOworICAgICAgICAgICAgaWYgKGNzc1ZhbHVlLT5pc1ZhbHVlTGlzdCgpKSB7Cisg
ICAgICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3QgPSBzdGF0aWNfY2FzdDxDU1NW
YWx1ZUxpc3QqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraikgeworICAgICAgICAgICAgICAg
ICAgICBDU1NGb250RmFjZVNyY1ZhbHVlKiBmb250RmFjZVNyYyA9IHN0YXRpY19jYXN0PENTU0Zv
bnRGYWNlU3JjVmFsdWUqPih2YWx1ZUxpc3QtPml0ZW0oaikpOworICAgICAgICAgICAgICAgICAg
ICByZXNvdXJjZVVSTHMtPmFkZChzdHlsZVNoZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChm
b250RmFjZVNyYy0+cmVzb3VyY2UoKSkpOworICAgICAgICAgICAgICAgIH0gICAgICAgICAgCisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAg
ICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHls
ZVJ1bGUqPihpdGVtKSwgcmVzb3VyY2VVUkxzKTsKICAgICB9CiB9CiAKQEAgLTIwMCw5ICsyODgs
MTAgQEAgYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBWZWN0b3I8RnJhbWUqPiBmcmFtZXNUb1Zpc2l0OwotICAgIFZl
Y3RvcjxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7Ci0gICAgVmVjdG9yPEtVUkw+IGZyYW1lS1VSTHM7
Ci0gICAgVmVjdG9yPEtVUkw+IHJlc291cmNlS1VSTHM7CisgICAgTGlzdEhhc2hTZXQ8RnJhbWUq
PiB2aXNpdGVkRnJhbWVzOworICAgIExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiBzdHlsZVNo
ZWV0czsKKyAgICBMaXN0SGFzaFNldDxLVVJMPiBmcmFtZUtVUkxzOworICAgIExpc3RIYXNoU2V0
PEtVUkw+IHJlc291cmNlS1VSTHM7CiAgICAgCiAgICAgLy8gTGV0J3MgcmV0cmlldmUgdGhlIHJl
c291cmNlcyBmcm9tIGV2ZXJ5IGZyYW1lIGluIHRoaXMgcGFnZS4KICAgICBmcmFtZXNUb1Zpc2l0
LmFwcGVuZChtYWluRnJhbWUtPmZyYW1lKCkpOwpAQCAtMjEwLDI0ICsyOTksMzcgQEAgYm9vbCBX
ZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdQogICAgICAgICBGcmFtZSogZnJhbWUg
PSBmcmFtZXNUb1Zpc2l0WzBdOwogICAgICAgICBmcmFtZXNUb1Zpc2l0LnJlbW92ZSgwKTsKICAg
ICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShmcmFtZSwgc3VwcG9ydGVkU2NoZW1lcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1l
c1RvVmlzaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpc2l0ZWRGcmFt
ZXMsICZmcmFtZXNUb1Zpc2l0LCAmc3R5bGVTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmZyYW1lS1VSTHMsICZyZXNvdXJjZUtVUkxzKTsKKyAgICAgfQorCisgICAg
Ly8gV2hpbGUgcmV0cmlldmluZyB0aGUgZnJhbWUgcmVzb3VyY2VzLCB3ZSBhbHNvIHJldHJpZXZl
ZCB0aGUgQ1NTIHN0eWxlLXNoZWV0cywKKyAgICAvLyB3ZSBjYW4gcHJvY2VzcyB0aGVtIG5vdy4K
KyAgICBMaXN0SGFzaFNldDxDU1NTdHlsZVNoZWV0Kj4gdmlzaXRlZFN0eWxlU2hlZXRzOworICAg
IGZvciAoTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0g
c3R5bGVTaGVldHMuYmVnaW4oKTsKKyAgICAgICAgaXRlciAhPSBzdHlsZVNoZWV0cy5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldCgqaXRl
ciwgJnZpc2l0ZWRTdHlsZVNoZWV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZUtVUkxzKTsKICAgICB9CiAKICAg
ICAvLyBDb252ZXJ0cyB0aGUgcmVzdWx0cyB0byBXZWJVUkxzLgotICAgIFdlYlZlY3RvcjxXZWJV
Ukw+IHJlc3VsdFJlc291cmNlVVJMcyhyZXNvdXJjZUtVUkxzLnNpemUoKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZUtVUkxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJl
c3VsdFJlc291cmNlVVJMc1tpXSA9IHJlc291cmNlS1VSTHNbaV07CisgICAgV2ViVmVjdG9yPFdl
YlVSTD4gcmVzdWx0UmVzb3VyY2VVUkxzKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzb3VyY2VLVVJM
cy5zaXplKCkpKTsKKyAgICBpbnQgaSA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxLVVJMPjo6
Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlc291cmNlS1VSTHMuYmVnaW4oKTsKKyAgICAgICAgaXRl
ciAhPSByZXNvdXJjZUtVUkxzLmVuZCgpOyArK2l0ZXIsIGkrKykgeworICAgICAgICBLVVJMIHVy
bCA9ICppdGVyOworICAgICAgICByZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSB1cmw7CiAgICAgICAg
IC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBhcyBhbm90aGVyIHJl
c291cmNlLCBrZWVwIHRoZQogICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25seSBpbiBzdWNoIGNh
c2VzLgotICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQocmVzb3VyY2VLVVJM
c1tpXSk7Ci0gICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIGZyYW1l
S1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgZnJhbWVLVVJMcy5yZW1vdmUodXJsKTsKICAg
ICB9CiAgICAgKnJlc291cmNlVVJMcyA9IHJlc3VsdFJlc291cmNlVVJMczsKLSAgICBXZWJWZWN0
b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoZnJhbWVLVVJMcy5zaXplKCkpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVLVVJMcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0
RnJhbWVVUkxzW2ldID0gZnJhbWVLVVJMc1tpXTsKKyAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1
bHRGcmFtZVVSTHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUtVUkxzLnNpemUoKSkpOworICAg
IGkgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8S1VSTD46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBmcmFtZUtVUkxzLmJlZ2luKCk7CisgICAgICAgIGl0ZXIgIT0gZnJhbWVLVVJMcy5lbmQoKTsg
KytpdGVyLCArK2kpIHsKKyAgICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gKml0ZXI7CisgICAg
fQogICAgICpmcmFtZVVSTHMgPSByZXN1bHRGcmFtZVVSTHM7CiAgICAgCiAgICAgcmV0dXJuIHRy
dWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVy
VGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQ
YWdlU2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiA4MTUwOSkKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJG
cmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgogI2luY2x1ZGUgIldl
YlN0cmluZy5oIgogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3Qu
aCIKQEAgLTQ4LDYgKzQ5LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiBuYW1lc3BhY2Ug
ewogCiBjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewor
cHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFibGVkKGZhbHNl
KSB7fQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgZW5hYmxl
ZFBlclNldHRpbmdzKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29sIG1fc2Ny
aXB0RW5hYmxlZDsKIH07CiAKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyVGVzdCA6IHB1YmxpYyB0
ZXN0aW5nOjpUZXN0IHsKQEAgLTk0LDYgKzk5LDE2IEBAIHByb3RlY3RlZDoKICAgICAgICAgd2Vi
a2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKICAgICB9CiAK
KyAgICB2b2lkIGVuYWJsZUpTKCkKKyAgICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9z
Y3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAg
eworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlw
dFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCiAgICAg
c3RhdGljIGJvb2wgd2ViVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIHZl
Y3RvciwgY2hhciogdXJsKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZlY3Rvci5jb250YWlucyhX
ZWJVUkwoR1VSTCh1cmwpKSk7CkBAIC0xNjMsNyArMTc4LDcgQEAgVEVTVF9GKFdlYlBhZ2VTZXJp
YWxpemVyVGVzdCwgTXVsdGlwbGVGcgogICAgIC8vIG5vdCBzdXJlIHdoeS4KICAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9hd2Vzb21lLnBuZyIpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJhd2Vzb21lLnBu
ZyIpKTsKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBsb2FkVVJMSW5Ub3BGcmFt
ZSh0b3BGcmFtZVVSTCk7CiAKICAgICAvLyBSZXRyaWV2ZSBhbGwgcmVzb3VyY2VzLgpAQCAtMTg4
LDQgKzIwMyw0NSBAQCBURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBNdWx0aXBsZUZyCiAg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9lbWJlZC5wbmciKSk7CiB9CiAKK1RFU1RfRihXZWJQYWdlU2VyaWFsaXplclRlc3Qs
IFJldHJpZXZlQ1NTUmVzb3VyY2VzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJh
bWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFnZS5odG1sIikpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxl
cy5jc3MiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlcy5jc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpm
cm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxv
YWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIC8v
IFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisgICAgV2ViVmVjdG9yPFdlYlVSTD4gZnJhbWVzOwor
ICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291cmNlczsKKyAgICBBU1NFUlRfVFJVRShXZWJQYWdl
U2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMoCisgICAgICAgIG1fd2ViVmlldywgbV9z
dXBwb3J0ZWRTY2hlbWVzLCAmcmVzb3VyY2VzLCAmZnJhbWVzKSk7ICAgIAorCisgICAgLy8gVGVz
dHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20gdGhlIGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQu
CisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHdlYlZl
Y3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisKKyAgICBFWFBF
Q1RfRVEoMTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGlj
YXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHls
ZXMuY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSk7CisgICAg
RVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RS
VUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVl
bl9iYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9DaHVua2ZpdmUub3Rm
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciKSk7Cit9
CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2Nzc190ZXN0X3BhZ2UuaHRtbAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEy
IEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJl
c291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAgV2ViUGFnZVNlcmlh
bGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIG1ldGhvZAorLS0+CisKKzxoZWFkPgorCis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5rX3N0eWxlcy5jc3Mi
IC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNzcycpOworCitAZm9u
dC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2
ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkgZm9ybWF0KCdlb3Qn
KTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmUsIHNhbnMt
c2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7CisgIGJhY2tncm91bmQt
aW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsKKyAgbGlzdC1zdHls
ZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlzdC1zdHlsZS1pbWFn
ZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3JpcHQ+CisvLyBEeW5h
bWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25sb2FkKCkgeworICB2YXIg
c3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJsKCdwdXJwbGVfYmFj
a2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rp
dlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHls
ZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVOb2RlLm1lZGlhPSAn
c2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKworPCEtLSBUZXh0IHVzaW5n
IGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYnPlRoaXMgdGV4dCB1
c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBsaW5rZWQg
ZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSByZWQgaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhIGZpbGUgaW1wb3J0
ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3JhbmdlJz4KK1RoaXMgZGl2
IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0
eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZZWxsb3cnPgorVGhp
cyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwh
LS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhlIGhlYWRlciAtLT4K
KzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFnZSBhcyBpdHMgYmFj
a2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+Cis8ZGl2IGlkPSdk
aXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9iYWNrZ3JvdW5kLnBu
ZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdpdGggSmF2YVNjcmlw
dCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJwbGUnPgorVGhpcyBk
aXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKK1Vub3Jk
ZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAg
PGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxp
PlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgorPG9sPgorICA8bGk+
Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8
L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+CisKKzwvYm9keT4K
KworPC9odG1sPgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRf
c3R5bGVfZnJvbV9saW5rLmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNz
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5bGVzLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlcy5j
c3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorI2RpdlllbGxvdyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tn
cm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5bGVz
LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6YXRpb24vbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5bGVzLmNz
cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxl
X2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgn
cmVkX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>
<flag name="review"
          id="78486"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="79335"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87275</attachid>
            <date>2011-03-29 00:38:47 -0700</date>
            <delta_ts>2011-03-29 00:49:30 -0700</delta_ts>
            <desc>Addressed David&apos;s comments</desc>
            <filename>css_resources.patch</filename>
            <type>text/plain</type>
            <size>27134</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMjA1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxMS0wMy0yOSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHJl
dHJpZXZhbCBvZmYgQ1NTIHJlc291cmNlcyB0byBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVB
bGxSZXNvdXJjZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjY1MAorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmVzb3VyY2VBdHRyaWJ1dGVG
b3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlU3R5bGVTaGVldEZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMpOgorICAgICAgICAqIHRlc3Rz
L1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJGcmFt
ZUNsaWVudDo6VGVzdFdlYkZyYW1lQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYkZy
YW1lQ2xpZW50OjphbGxvd1NjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxp
emVyVGVzdDo6ZW5hYmxlSlMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplclRl
c3Q6OnJ1bk9uTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rpdk9yYW5nZSk6CisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICgj
ZGl2WWVsbG93KToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtf
c3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICgjZGl2UmVkKToKKwogMjAxMS0wMy0yOCAgVnNl
dm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZp
c2lvbiA4MTk3MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIyLDYgKzYyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViVW5pdFRlc3RzLmNw
cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAg
ICB9XSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcAkocmV2aXNpb24gODE5NzApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwz
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgi
CiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNy
Y1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9y
dFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhh
c2guaCIKKyNpbmNsdWRlICJMaXN0SGFzaFNldC5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1h
Z2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTU3
LDYwICs3NCw4MyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAot
S1VSTCBnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0
aW9uKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RI
YXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpOworCitjb25zdCBRdWFsaWZpZWROYW1lKiBnZXRS
ZXNvdXJjZUF0dHJpYnV0ZUZvckVsZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUg
PSAwOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKLSAgICAgICAgYXR0cmli
dXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICByZXR1cm4gJkhUTUxOYW1l
czo6c3JjQXR0cjsKKworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICBpZiAoaW5wdXQtPmlzSW1hZ2VC
dXR0b24oKSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRy
OwotICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcp
Ci0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVU
YWcpCi0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJU
YWcpCi0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRU
YWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHI7
Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVU
YWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcp
Ci0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykK
LSAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFnKSkK
LSAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmNpdGVBdHRyOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgewotICAgICAgICAv
LyBJZiB0aGUgbGluayBlbGVtZW50IGlzIG5vdCBjc3MsIGlnbm9yZSBpdC4KKyAgICAgICAgICAg
IHJldHVybiAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgIH0KKworICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKQorICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0ZFRhZykpCisgICAgICAgIHJldHVybiAmSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsK
KworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykK
KyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpCisgICAgICAg
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCisgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICByZXR1cm4gJkhU
TUxOYW1lczo6Y2l0ZUF0dHI7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdFRhZykpCisgICAgICAgIHJldHVybiAmSFRNTE5hbWVzOjpkYXRhQXR0cjsKKwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKQorICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpCisgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCisgICAgICAgIHJldHVy
biAmSFRNTE5hbWVzOjpzcmNBdHRyOworCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpsaW5rVGFnKSkgeworICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIC8vIFdl
IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gQ1NTIGxpbmtzLgorICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UoZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpLCAidGV4
dC9jc3MiKSkKKyAgICAgICAgICAgIHJldHVybiAmSFRNTE5hbWVzOjpocmVmQXR0cjsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmV0cmlldmVTdHlsZVNoZWV0Rm9yRWxlbWVudChI
VE1MRWxlbWVudCogZWxlbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBM
aXN0SGFzaFNldDxDU1NTdHlsZVNoZWV0Kj4qIHN0eWxlU2hlZXRzKQoreworICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAgICAgICAgSFRNTExpbmtF
bGVtZW50KiBsaW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KGVsZW1l
bnQpOworICAgICAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIENTUyBsaW5rcy4KICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnR5cGVBdHRyKSwgInRleHQvY3NzIikpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgZXh0cmFjdGluZyBsaW5rcyBvZiBzdWItcmVzb3VyY2VzIHdoaWNoCi0gICAg
ICAgICAgICAvLyBhcmUgaW5zaWRlIHN0eWxlLXNoZWV0IHN1Y2ggYXMgQGltcG9ydCwgQGZvbnQt
ZmFjZSwgdXJsKCksIGV0Yy4KLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVz
OjpocmVmQXR0cjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6Om9iamVjdFRhZykpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5h
bWVzOjpkYXRhQXR0cjsKLSAgICBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6ZW1iZWRUYWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6c3JjQXR0
cjsKLQotICAgIGlmICghYXR0cmlidXRlTmFtZSkKLSAgICAgICAgcmV0dXJuIEtVUkwoKTsKLQot
ICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZSgqYXR0cmlidXRlTmFtZSk7
Ci0gICAgLy8gSWdub3JlIGphdmFzY3JpcHQgY29udGVudC4KLSAgICBpZiAodmFsdWUuaXNFbXB0
eSgpIHx8IHZhbHVlLnN0cmlwV2hpdGVTcGFjZSgpLnN0YXJ0c1dpdGgoImphdmFzY3JpcHQ6Iiwg
ZmFsc2UpKQotICAgICAgICByZXR1cm4gS1VSTCgpOwotICAKLSAgICByZXR1cm4gZWxlbWVudC0+
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodmFsdWUpOworICAgICAgICAgICAgU3R5bGVTaGVldCog
c2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBz
aGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc3R5bGVTaGVldHMtPmFk
ZChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm47CisgICAgfSAKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
OnN0eWxlVGFnKSkgeworICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIFN0eWxlU2hl
ZXQqIHNoZWV0ID0gc3R5bGVFbGVtZW50LT5zaGVldCgpOworICAgICAgICBpZiAoc2hlZXQgJiYg
c2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgc3R5bGVTaGVldHMtPmFkZChz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpKTsKKyAgICB9CiB9CiAKLXZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKK3ZvaWQg
cmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0
OjpXZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3RIYXNoU2V0PEZyYW1lKj4qIHZpc2l0ZWRGcmFtZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBWZWN0b3I8RnJhbWUqPiogZnJhbWVzVG9WaXNpdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9yPEtVUkw+KiByZXNvdXJjZVVS
THMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxDU1NTdHls
ZVNoZWV0Kj4qIHN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TGlzdEhhc2hTZXQ8S1VSTD4qIGZyYW1lVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpCiB7Ci0gICAgLy8gSWYgdGhl
IG5vZGUgaXMgYSBmcmFtZSwgd2UnbGwgcHJvY2VzcyBpdCBsYXRlciBpbiByZXRyaWV2ZVJlc291
cmNlc0ZvckZyYW1lLgorICAgIEFTU0VSVChlbGVtZW50KTsKICAgICBpZiAoKGVsZW1lbnQtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjppZnJhbWVUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpmcmFtZVRhZykKLSAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmVtYmVkVGFn
KSkKLSAgICAgICAgICAgICYmIGVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgewotICAg
ICAgICBGcmFtZSogZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihl
bGVtZW50KS0+Y29udGVudEZyYW1lKCk7CisgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZW1iZWRUYWcpKQorICAgICAgICAmJiBlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsK
KyAgICAgICAgRnJhbWUqIGZyYW1lID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJF
bGVtZW50Kj4oZWxlbWVudCktPmNvbnRlbnRGcmFtZSgpOwogICAgICAgICBpZiAoZnJhbWUpIHsK
ICAgICAgICAgICAgIGlmICghdmlzaXRlZEZyYW1lcy0+Y29udGFpbnMoZnJhbWUpKQogICAgICAg
ICAgICAgICAgIGZyYW1lc1RvVmlzaXQtPmFwcGVuZChmcmFtZSk7CkBAIC0xMTgsMjYgKzE1OCwz
NiBAQCB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRWxlbWVudChFbGVtZW50CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBLVVJMIHVybCA9IGdldFN1YlJlc291cmNlVVJMRnJvbUVsZW1lbnQoZWxl
bWVudCk7Ci0gICAgaWYgKHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlkKCkpCi0gICAgICAg
IHJldHVybjsgLy8gTm8gc3VicmVzb3VyY2UgZm9yIHRoaXMgbm9kZS4KLQotICAgIC8vIElnbm9y
ZSBVUkxzIHRoYXQgaGF2ZSBhIG5vbi1zdGFuZGFyZCBwcm90b2NvbHMuIFNpbmNlIHRoZSBGVFAg
cHJvdG9jb2wKLSAgICAvLyBkb2VzIG5vIGhhdmUgYSBjYWNoZSBtZWNoYW5pc20sIHdlIHNraXAg
aXQgYXMgd2VsbC4KLSAgICBpZiAoIXVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpICYmICF1cmwu
aXNMb2NhbEZpbGUoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUq
IGF0dHJpYnV0ZSA9IGdldFJlc291cmNlQXR0cmlidXRlRm9yRWxlbWVudChlbGVtZW50KTsKKyAg
ICBpZiAoYXR0cmlidXRlKSB7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IGVsZW1lbnQtPmdldEF0
dHJpYnV0ZSgqYXR0cmlidXRlKTsKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgICAgIEtVUkwgdXJsID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodmFs
dWUpOworICAgICAgICAgICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5kYXJk
IHByb3RvY29scy4gU2luY2UgdGhlIEZUUCBwcm90b2NvbAorICAgICAgICAgICAgLy8gZG9lcyBu
b3QgaGF2ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgorICAgICAgICAg
ICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgKHVybC5wcm90b2NvbEluSFRUUEZhbWlseSgpIHx8IHVy
bC5pc0xvY2FsRmlsZSgpKSkKKyAgICAgICAgICAgICAgICByZXNvdXJjZVVSTHMtPmFkZCh1cmwp
OworICAgICAgICB9CisgICAgfQogCi0gICAgaWYgKCFyZXNvdXJjZVVSTHMtPmNvbnRhaW5zKHVy
bCkpCi0gICAgICAgIHJlc291cmNlVVJMcy0+YXBwZW5kKHVybCk7CisgICAgcmV0cmlldmVTdHls
ZVNoZWV0Rm9yRWxlbWVudChlbGVtZW50LCBzdHlsZVNoZWV0cyk7CisgICAgCisgICAgLy8gUHJv
Y2VzcyBpbi1saW5lIHN0eWxlLgorICAgIGlmIChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURl
Y2xhcmF0aW9uID0gZWxlbWVudC0+c3R5bGUoKSkKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NTdHlsZURlY2xhcmF0aW9uKHN0eWxlRGVjbGFyYXRpb24sIHJlc291cmNlVVJMcyk7CiB9
CiAKIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpX
ZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2NoZW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8RnJhbWUqPiogdmlzaXRlZEZyYW1lcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBMaXN0SGFzaFNldDxGcmFtZSo+KiB2aXNpdGVkRnJhbWVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogZnJhbWVVUkxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxLVVJMPiogcmVzb3VyY2VVUkxzKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQq
Piogc3R5bGVTaGVldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEhhc2hT
ZXQ8S1VSTD4qIGZyYW1lVVJMcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0
SGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQogeworICAgIGlmICghdmlzaXRlZEZyYW1lcy0+
YWRkKGZyYW1lKS5zZWNvbmQpCisgICAgICAgIHJldHVybjsgLy8gV2UgaGF2ZSBhbHJlYWR5IHNl
ZW4gdGhhdCBmcmFtZS4KKwogICAgIEtVUkwgZnJhbWVVUkwgPSBmcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKTsKIAogICAgIC8vIElmIHRoZSBmcmFtZSdz
IFVSTCBpcyBpbnZhbGlkLCBpZ25vcmUgaXQsIGl0IGlzIG5vdCByZXRyaWV2YWJsZS4KQEAgLTE1
NSwyMyArMjA1LDkxIEBAIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnIK
ICAgICBpZiAoIWlzVmFsaWRTY2hlbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIElmIHdl
IGhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgZnJhbWUsIGlnbm9yZSBpdC4KLSAgICBpZiAodmlzaXRl
ZEZyYW1lcy0+Y29udGFpbnMoZnJhbWUpKQotICAgICAgICByZXR1cm47Ci0gICAgdmlzaXRlZEZy
YW1lcy0+YXBwZW5kKGZyYW1lKTsKLSAgICBpZiAoIWZyYW1lVVJMcy0+Y29udGFpbnMoZnJhbWVV
UkwpKQotICAgICAgICBmcmFtZVVSTHMtPmFwcGVuZChmcmFtZVVSTCk7CisgICAgZnJhbWVVUkxz
LT5hZGQoZnJhbWVVUkwpOwogICAKICAgICAvLyBOb3cgZ2V0IHRoZSByZXNvdXJjZXMgYXNzb2Np
YXRlZCB3aXRoIGVhY2ggbm9kZSBvZiB0aGUgZG9jdW1lbnQuCiAgICAgUmVmUHRyPEhUTUxBbGxD
b2xsZWN0aW9uPiBhbGxOb2RlcyA9IGZyYW1lLT5kb2N1bWVudCgpLT5hbGwoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsTm9kZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
Tm9kZSogbm9kZSA9IGFsbE5vZGVzLT5pdGVtKGkpOwogICAgICAgICAvLyBXZSBhcmUgb25seSBp
bnRlcmVzdGVkIGluIEhUTUwgcmVzb3VyY2VzLgotICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVu
dE5vZGUoKSkKKyAgICAgICAgaWYgKEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVu
dChhbGxOb2Rlcy0+aXRlbShpKSkpIHsKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9y
RWxlbWVudChlbGVtZW50LCBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZpc2l0ZWRGcmFtZXMsIGZyYW1lc1RvVmlzaXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTaGVldHMsIGZyYW1lVVJMcywg
cmVzb3VyY2VVUkxzKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCByZXRyaWV2ZVJlc291
cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAgICBpZiAo
cnVsZS0+c3R5bGUoKSkKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xh
cmF0aW9uKHJ1bGUtPnN0eWxlKCksIHJlc291cmNlVVJMcyk7Cit9CisKK3ZvaWQgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NTdHlsZURlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
RGVjbGFyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBMaXN0SGFzaFNldDxLVVJMPiogcmVzb3VyY2VVUkxzKQoreworICAgIC8vIFRoZSBiYWNrZ3Jv
dW5kLWltYWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NT
IHByb3BlcnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0
byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVz
IHRoZXJlIG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xh
cmF0aW9uLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQgb2Yg
cmlkaWN1bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAg
IC8vIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2
YWx1ZSBvdXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNs
YXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywg
bm90IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHN0eWxlRGVjbGFyYXRp
b24tPmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAg
ICAgIGlmICh2YWx1ZS0+aXNJbWFnZVZhbHVlKCkpIHsKKyAgICAgICAgICAgIENTU0ltYWdlVmFs
dWUqIGltYWdlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4odmFsdWUuZ2V0KCkp
OworICAgICAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGltYWdlVmFsdWUtPmNhY2hl
ZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdlcyBhcmUg
anVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAgICAgICAg
aWYgKHN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkgeworICAgICAgICAgICAgICAgIFN0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZURlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCk7CisgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIFN0cmluZyB1cmwgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4o
c3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCktPnVybCgpOworICAgICAgICAgICAgICAgICAgICBy
ZXNvdXJjZVVSTHMtPmFkZChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0Zv
ckNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiogdmlz
aXRlZFN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgV2ViS2l0OjpXZWJWZWN0b3I8V2ViS2l0OjpXZWJDU3RyaW5nPiYgc3VwcG9ydGVkU2No
ZW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0
PEtVUkw+KiByZXNvdXJjZVVSTHMpCit7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIXZpc2l0ZWRTdHlsZVNoZWV0cy0+YWRkKHN0eWxlU2hlZXQpLnNl
Y29uZCkKKyAgICAgICAgcmV0dXJuOyAvLyBXZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IHN0eWxl
U2hlZXQuCisKKyAgICAvLyBQYXJzZSB0aGUgc3R5bGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSog
aXRlbSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7CisgICAgICAgIGlmICghaXRlbSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdmlzaXRlZEZyYW1lcywgZnJhbWVzVG9WaXNpdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyYW1lVVJMcywgcmVzb3VyY2VVUkxzKTsKKworICAgICAgIGlmIChpdGVt
LT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVs
ZSA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIC8vIFRo
ZSBpbXBvcnRlZCBDU1MgZmlsZSBpdHNlbGYgaXMgYSByZXNvdXJjZS4KKyAgICAgICAgICAgIHJl
c291cmNlVVJMcy0+YWRkKHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9y
dFJ1bGUtPmhyZWYoKSkpOworICAgICAgICAgICAgLy8gQW5kIGl0IG1heSBjb250YWluIHNvbWUg
bW9yZSByZXNvdXJjZXMuCisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxl
U2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCB2aXNpdGVkU3R5bGVTaGVldHMsIHN1cHBv
cnRlZFNjaGVtZXMsIHJlc291cmNlVVJMcyk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNG
b250RmFjZVJ1bGUoKSkgeworICAgICAgICAgICAgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1
bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBmb250RmFjZVJ1bGUtPnN0eWxlKCktPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlTcmMpOworICAgICAgICAgICAgaWYgKGNzc1ZhbHVlLT5p
c1ZhbHVlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiB2YWx1ZUxpc3Qg
PSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHZhbHVlTGlzdC0+bGVuZ3RoKCk7ICsraikg
eworICAgICAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgZG9lcyBub3Qgc2VlbSB0
byBiZSBhIHdheSB0byBlbnN1cmUgdGhlIHZhbHVlIGluIHRoZSBsaXN0IGlzIGEgQ1NTRm9udEZh
Y2VTcmNWYWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG8gdHJ1c3QgdGhhdCBsaXN0
IG9ubHkgY29udGFpbnMgQ1NTRm9udEZhY2VTcmNWYWx1ZXMgYXMgZG9uZSBpbiBXZWJDb3JlL2Nz
cy9DU1NGb250U2VsZWN0b3IuY3BwCisgICAgICAgICAgICAgICAgICAgIENTU0ZvbnRGYWNlU3Jj
VmFsdWUqIGZvbnRGYWNlU3JjID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VTcmNWYWx1ZSo+KHZh
bHVlTGlzdC0+aXRlbShqKSk7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRk
KHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZvbnRGYWNlU3JjLT5yZXNvdXJj
ZSgpKSk7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSBlbHNlIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pLCByZXNv
dXJjZVVSTHMpOwogICAgIH0KIH0KIApAQCAtMjAwLDkgKzMxOCwxMCBAQCBib29sIFdlYlBhZ2VT
ZXJpYWxpemVyOjpyZXRyaWV2ZUFsbFJlc291CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IFZlY3RvcjxGcmFtZSo+IGZyYW1lc1RvVmlzaXQ7Ci0gICAgVmVjdG9yPEZyYW1lKj4gdmlzaXRl
ZEZyYW1lczsKLSAgICBWZWN0b3I8S1VSTD4gZnJhbWVLVVJMczsKLSAgICBWZWN0b3I8S1VSTD4g
cmVzb3VyY2VLVVJMczsKKyAgICBMaXN0SGFzaFNldDxGcmFtZSo+IHZpc2l0ZWRGcmFtZXM7Cisg
ICAgTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+IHN0eWxlU2hlZXRzOworICAgIExpc3RIYXNo
U2V0PEtVUkw+IGZyYW1lS1VSTHM7CisgICAgTGlzdEhhc2hTZXQ8S1VSTD4gcmVzb3VyY2VLVVJM
czsKICAgICAKICAgICAvLyBMZXQncyByZXRyaWV2ZSB0aGUgcmVzb3VyY2VzIGZyb20gZXZlcnkg
ZnJhbWUgaW4gdGhpcyBwYWdlLgogICAgIGZyYW1lc1RvVmlzaXQuYXBwZW5kKG1haW5GcmFtZS0+
ZnJhbWUoKSk7CkBAIC0yMTAsMjQgKzMyOSwzNyBAQCBib29sIFdlYlBhZ2VTZXJpYWxpemVyOjpy
ZXRyaWV2ZUFsbFJlc291CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lc1RvVmlzaXRbMF07
CiAgICAgICAgIGZyYW1lc1RvVmlzaXQucmVtb3ZlKDApOwogICAgICAgICByZXRyaWV2ZVJlc291
cmNlc0ZvckZyYW1lKGZyYW1lLCBzdXBwb3J0ZWRTY2hlbWVzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZ2aXNpdGVkRnJhbWVzLCAmZnJhbWVzVG9WaXNpdCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmdmlzaXRlZEZyYW1lcywgJmZyYW1lc1RvVmlzaXQs
ICZzdHlsZVNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnJhbWVL
VVJMcywgJnJlc291cmNlS1VSTHMpOworICAgICB9CisKKyAgICAvLyBXaGlsZSByZXRyaWV2aW5n
IHRoZSBmcmFtZSByZXNvdXJjZXMsIHdlIGFsc28gcmV0cmlldmVkIHRoZSBDU1Mgc3R5bGUtc2hl
ZXRzLAorICAgIC8vIHdlIGNhbiBwcm9jZXNzIHRoZW0gbm93LgorICAgIExpc3RIYXNoU2V0PENT
U1N0eWxlU2hlZXQqPiB2aXNpdGVkU3R5bGVTaGVldHM7CisgICAgZm9yIChMaXN0SGFzaFNldDxD
U1NTdHlsZVNoZWV0Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBzdHlsZVNoZWV0cy5iZWdpbigp
OworICAgICAgICAgaXRlciAhPSBzdHlsZVNoZWV0cy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldCgqaXRlciwgJnZpc2l0ZWRTdHlsZVNo
ZWV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRl
ZFNjaGVtZXMsICZyZXNvdXJjZUtVUkxzKTsKICAgICB9CiAKICAgICAvLyBDb252ZXJ0cyB0aGUg
cmVzdWx0cyB0byBXZWJVUkxzLgotICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc3VsdFJlc291cmNl
VVJMcyhyZXNvdXJjZUtVUkxzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBy
ZXNvdXJjZUtVUkxzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHJlc3VsdFJlc291cmNlVVJMc1tp
XSA9IHJlc291cmNlS1VSTHNbaV07CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0UmVzb3Vy
Y2VVUkxzKHN0YXRpY19jYXN0PHNpemVfdD4ocmVzb3VyY2VLVVJMcy5zaXplKCkpKTsKKyAgICBp
bnQgaSA9IDA7CisgICAgZm9yIChMaXN0SGFzaFNldDxLVVJMPjo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHJlc291cmNlS1VSTHMuYmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gcmVzb3VyY2VLVVJM
cy5lbmQoKTsgKytpdGVyLCArK2kpIHsKKyAgICAgICAgS1VSTCB1cmwgPSAqaXRlcjsKKyAgICAg
ICAgcmVzdWx0UmVzb3VyY2VVUkxzW2ldID0gdXJsOwogICAgICAgICAvLyBBIGZyYW1lJ3Mgc3Jj
IGNhbiBwb2ludCB0byB0aGUgc2FtZSBVUkwgYXMgYW5vdGhlciByZXNvdXJjZSwga2VlcCB0aGUK
ICAgICAgICAgLy8gcmVzb3VyY2UgVVJMIG9ubHkgaW4gc3VjaCBjYXNlcy4KLSAgICAgICAgc2l6
ZV90IGluZGV4ID0gZnJhbWVLVVJMcy5maW5kKHJlc291cmNlS1VSTHNbaV0pOwotICAgICAgICBp
ZiAoaW5kZXggIT0gbm90Rm91bmQpCi0gICAgICAgICAgICBmcmFtZUtVUkxzLnJlbW92ZShpbmRl
eCk7CisgICAgICAgIGZyYW1lS1VSTHMucmVtb3ZlKHVybCk7CiAgICAgfQogICAgICpyZXNvdXJj
ZVVSTHMgPSByZXN1bHRSZXNvdXJjZVVSTHM7Ci0gICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0
RnJhbWVVUkxzKGZyYW1lS1VSTHMuc2l6ZSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGZyYW1lS1VSTHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdEZyYW1lVVJMc1tpXSA9IGZy
YW1lS1VSTHNbaV07CisgICAgV2ViVmVjdG9yPFdlYlVSTD4gcmVzdWx0RnJhbWVVUkxzKHN0YXRp
Y19jYXN0PHNpemVfdD4oZnJhbWVLVVJMcy5zaXplKCkpKTsKKyAgICBpID0gMDsKKyAgICBmb3Ig
KExpc3RIYXNoU2V0PEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZnJhbWVLVVJMcy5iZWdp
bigpOworICAgICAgICAgaXRlciAhPSBmcmFtZUtVUkxzLmVuZCgpOyArK2l0ZXIsICsraSkKKyAg
ICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gKml0ZXI7CisKICAgICAqZnJhbWVVUkxzID0gcmVz
dWx0RnJhbWVVUkxzOwogICAgIAogICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwDQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
CShyZXZpc2lvbiA4MTk3MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFn
ZVNlcmlhbGl6ZXJUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogCiAj
aW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1
ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgogI2luY2x1ZGUgIldlYlN0cmluZy5oIgogI2luY2x1ZGUg
IldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKQEAgLTQ4LDYgKzQ5LDEwIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiBuYW1lc3BhY2UgewogCiBjbGFzcyBUZXN0V2ViRnJh
bWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJG
cmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFibGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBib29sIC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykg
eyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9CisgICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7CiB9
OwogCiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7
CkBAIC05NCw2ICs5OSwxNiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpT
ZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CiAgICAgfQogCisgICAgdm9pZCBlbmFi
bGVKUygpCisgICAgeworICAgICAgICBtX3dlYkZyYW1lQ2xpZW50Lm1fc2NyaXB0RW5hYmxlZCA9
IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5PbkxvYWQoKQorICAgIHsKKyAgICAgICAgbV93
ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3Ry
aW5nOjpmcm9tVVRGOCgib25Mb2FkKCkiKSkpOworICAgIH0KKwogICAgIHN0YXRpYyBib29sIHdl
YlZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiB2ZWN0b3IsIGNoYXIqIHVy
bCkKICAgICB7CiAgICAgICAgIHJldHVybiB2ZWN0b3IuY29udGFpbnMoV2ViVVJMKEdVUkwodXJs
KSkpOwpAQCAtMTkwLDQgKzIwNSw0NCBAQCBURVNUX0YoV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LCBN
dWx0aXBsZUZyCiAgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9lbWJlZC5wbmciKSk7CiB9CiAKK1RFU1RfRihXZWJQYWdlU2Vy
aWFsaXplclRlc3QsIFJldHJpZXZlQ1NTUmVzb3VyY2VzKQoreworICAgIC8vIFJlZ2lzdGVyIHRo
ZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BG
cmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFnZS5odG1sIikpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5
bGVzLmNzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4
KCJsaW5rX3N0eWxlcy5jc3MiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21f
bGluay5jc3MiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSk7CisKKyAgICBlbmFibGVK
UygpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQo
KTsKKworICAgIC8vIFJldHJpZXZlIGFsbCByZXNvdXJjZXMuCisgICAgV2ViVmVjdG9yPFdlYlVS
TD4gZnJhbWVzOworICAgIFdlYlZlY3RvcjxXZWJVUkw+IHJlc291cmNlczsKKyAgICBBU1NFUlRf
VFJVRShXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMobV93ZWJWaWV3LCBt
X3N1cHBvcnRlZFNjaGVtZXMsICZyZXNvdXJjZXMsICZmcmFtZXMpKTsKKworICAgIC8vIFRlc3Rz
IHRoYXQgYWxsIHJlc291cmNlcyBmcm9tIHRoZSBmcmFtZSBoYXZlIGJlZW4gcmV0cmlldmVkLgor
ICAgIEVYUEVDVF9FUSgxLCBmcmFtZXMuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhmcmFtZXMsICJodHRwOi8vd3d3LnRlc3QuY29tIikpOworCisgICAgRVhQRUNU
X0VRKDEyLCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0
ZXMuCisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVz
LmNzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIikpOworICAgIEVY
UEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vcmVkX2JhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5f
YmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vQ2h1bmtmaXZlLm90ZiIp
KTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL3VsLWRvdC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIikpOworfQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vY3NzX3Rlc3RfcGFnZS5odG1sDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2Nzc190ZXN0X3BhZ2UuaHRtbAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEy
IEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJl
c291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAgV2ViUGFnZVNlcmlh
bGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIG1ldGhvZAorLS0+CisKKzxoZWFkPgorCis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5rX3N0eWxlcy5jc3Mi
IC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNzcycpOworCitAZm9u
dC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2
ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkgZm9ybWF0KCdlb3Qn
KTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmUsIHNhbnMt
c2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7CisgIGJhY2tncm91bmQt
aW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsKKyAgbGlzdC1zdHls
ZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlzdC1zdHlsZS1pbWFn
ZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3JpcHQ+CisvLyBEeW5h
bWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25sb2FkKCkgeworICB2YXIg
c3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJsKCdwdXJwbGVfYmFj
a2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2Rp
dlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHls
ZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVOb2RlLm1lZGlhPSAn
c2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsKK30KKzwvc2NyaXB0
PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKworPCEtLSBUZXh0IHVzaW5n
IGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYnPlRoaXMgdGV4dCB1
c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBsaW5rZWQg
ZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSByZWQgaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhIGZpbGUgaW1wb3J0
ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3JhbmdlJz4KK1RoaXMgZGl2
IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0
eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZZWxsb3cnPgorVGhp
cyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwh
LS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhlIGhlYWRlciAtLT4K
KzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFnZSBhcyBpdHMgYmFj
a2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+Cis8ZGl2IGlkPSdk
aXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9iYWNrZ3JvdW5kLnBu
ZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdpdGggSmF2YVNjcmlw
dCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJwbGUnPgorVGhpcyBk
aXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKK1Vub3Jk
ZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAg
PGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxp
PlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgorPG9sPgorICA8bGk+
Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8
L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+CisKKzwvYm9keT4K
KworPC9odG1sPgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsu
Y3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZPcmFuZ2UgeworICBiYWNrZ3Jv
dW5kLWltYWdlOnVybCgnb3JhbmdlX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzDQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHls
ZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemF0aW9uL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19i
YWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0
eWxlcy5jc3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6YXRpb24vbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5
bGVzLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0
X3N0eWxlX2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6
IHVybCgncmVkX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87277</attachid>
            <date>2011-03-29 00:49:30 -0700</date>
            <delta_ts>2011-03-29 11:40:38 -0700</delta_ts>
            <desc>Fixed build</desc>
            <filename>css_resources.patch</filename>
            <type>text/plain</type>
            <size>26992</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nDQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgyMjA1KQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwz
NCBAQAorMjAxMS0wMy0yOSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkaW5nIHJl
dHJpZXZhbCBvZmYgQ1NTIHJlc291cmNlcyB0byBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVB
bGxSZXNvdXJjZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NjY1MAorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmVzb3VyY2VBdHRyaWJ1dGVG
b3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnJldHJpZXZlU3R5bGVTaGVldEZvckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OnJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJl
dHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMpOgorICAgICAgICAqIHRlc3Rz
L1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXZWJGcmFt
ZUNsaWVudDo6VGVzdFdlYkZyYW1lQ2xpZW50KToKKyAgICAgICAgKFdlYktpdDo6VGVzdFdlYkZy
YW1lQ2xpZW50OjphbGxvd1NjcmlwdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxp
emVyVGVzdDo6ZW5hYmxlSlMpOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplclRl
c3Q6OnJ1bk9uTG9hZCk6CisgICAgICAgIChXZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3M6IEFkZGVkLgorICAgICAgICAoI2Rpdk9yYW5nZSk6CisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXphdGlvbi9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICgj
ZGl2WWVsbG93KToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtf
c3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICgjZGl2UmVkKToKKwogMjAxMS0wMy0yOCAgVnNl
dm9sb2QgVmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09DQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZp
c2lvbiA4MTk3MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2lu
ZyBjb3B5KQpAQCAtNjIyLDYgKzYyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViVW5pdFRlc3RzLmNw
cCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgICAgICAg
ICB9XSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQ0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcAkocmV2aXNpb24gODE5NzApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwz
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgi
CiAKKyNpbmNsdWRlICJDU1NGb250RmFjZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NGb250RmFjZVNy
Y1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9y
dFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNs
dWRlICJEb2N1bWVudExvYWRlci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJG
cmFtZS5oIgogI2luY2x1ZGUgIkhUTUxBbGxDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSAiSFRNTEZy
YW1lT3duZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhh
c2guaCIKKyNpbmNsdWRlICJMaXN0SGFzaFNldC5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1h
Z2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldExpc3Qu
aCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTU3
LDYwICs3NCw4MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAot
S1VSTCBnZXRTdWJSZXNvdXJjZVVSTEZyb21FbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit2b2lk
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0
aW9uKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RI
YXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMpOworCitjb25zdCBRdWFsaWZpZWROYW1lKiBnZXRS
ZXNvdXJjZUF0dHJpYnV0ZUZvckVsZW1lbnQoSFRNTEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAg
QVNTRVJUKGVsZW1lbnQpOwotICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIGF0dHJpYnV0ZU5hbWUg
PSAwOwogICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSB8fCBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSkKLSAgICAgICAgYXR0cmli
dXRlTmFtZSA9ICZIVE1MTmFtZXM6OnNyY0F0dHI7Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkgeworICAgICAgICByZXR1cm4gJkhUTUxOYW1l
czo6c3JjQXR0cjsKKworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5w
dXRUYWcpKSB7CiAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8
SFRNTElucHV0RWxlbWVudCo+KGVsZW1lbnQpOwogICAgICAgICBpZiAoaW5wdXQtPmlzSW1hZ2VC
dXR0b24oKSkKLSAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRy
OwotICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJvZHlUYWcp
Ci0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVU
YWcpCi0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dHJU
YWcpCi0gICAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGRU
YWcpKQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gJkhUTUxOYW1lczo6YmFja2dyb3VuZEF0dHI7
Ci0gICAgZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmJsb2NrcXVvdGVU
YWcpCi0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcp
Ci0gICAgICAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmRlbFRhZykK
LSAgICAgICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW5zVGFnKSkK
LSAgICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmNpdGVBdHRyOwotICAgIGVsc2Ug
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgewotICAgICAgICAv
LyBJZiB0aGUgbGluayBlbGVtZW50IGlzIG5vdCBjc3MsIGlnbm9yZSBpdC4KKyAgICAgICAgICAg
IHJldHVybiAmSFRNTE5hbWVzOjpzcmNBdHRyOworICAgIH0KKworICAgIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6Ym9keVRhZykKKyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKQorICAgICAgICB8fCBlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dHJUYWcpCisgICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjp0ZFRhZykpCisgICAgICAgIHJldHVybiAmSFRNTE5hbWVzOjpiYWNrZ3JvdW5kQXR0cjsK
KworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6YmxvY2txdW90ZVRhZykK
KyAgICAgICAgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnFUYWcpCisgICAgICAg
IHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpkZWxUYWcpCisgICAgICAgIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbnNUYWcpKQorICAgICAgICByZXR1cm4gJkhU
TUxOYW1lczo6Y2l0ZUF0dHI7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om9iamVjdFRhZykpCisgICAgICAgIHJldHVybiAmSFRNTE5hbWVzOjpkYXRhQXR0cjsKKwor
ICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aWZyYW1lVGFnKQorICAgICAg
ICB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJhbWVUYWcpCisgICAgICAgIHx8
IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCisgICAgICAgIHJldHVy
biAmSFRNTE5hbWVzOjpzcmNBdHRyOworCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpsaW5rVGFnKQorICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKQorICAgICAgICBy
ZXR1cm4gJkhUTUxOYW1lczo6aHJlZkF0dHI7CisKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBy
ZXRyaWV2ZVN0eWxlU2hlZXRGb3JFbGVtZW50KEhUTUxFbGVtZW50KiBlbGVtZW50LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiog
c3R5bGVTaGVldHMpCit7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjps
aW5rVGFnKSkgeworICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgIC8vIFdlIGFyZSBvbmx5
IGludGVyZXN0ZWQgaW4gQ1NTIGxpbmtzLgogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dHlwZUF0dHIpLCAidGV4dC9jc3MiKSkg
ewotICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBleHRyYWN0aW5nIGxpbmtz
IG9mIHN1Yi1yZXNvdXJjZXMgd2hpY2gKLSAgICAgICAgICAgIC8vIGFyZSBpbnNpZGUgc3R5bGUt
c2hlZXQgc3VjaCBhcyBAaW1wb3J0LCBAZm9udC1mYWNlLCB1cmwoKSwgZXRjLgotICAgICAgICAg
ICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmhyZWZBdHRyOwotICAgICAgICB9Ci0gICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSkKLSAg
ICAgICAgYXR0cmlidXRlTmFtZSA9ICZIVE1MTmFtZXM6OmRhdGFBdHRyOwotICAgIGVsc2UgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCi0gICAgICAgIGF0dHJp
YnV0ZU5hbWUgPSAmSFRNTE5hbWVzOjpzcmNBdHRyOwotCi0gICAgaWYgKCFhdHRyaWJ1dGVOYW1l
KQotICAgICAgICByZXR1cm4gS1VSTCgpOwotCi0gICAgU3RyaW5nIHZhbHVlID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGVOYW1lKTsKLSAgICAvLyBJZ25vcmUgamF2YXNjcmlwdCBj
b250ZW50LgotICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkgfHwgdmFsdWUuc3RyaXBXaGl0ZVNwYWNl
KCkuc3RhcnRzV2l0aCgiamF2YXNjcmlwdDoiLCBmYWxzZSkpCi0gICAgICAgIHJldHVybiBLVVJM
KCk7Ci0gIAotICAgIHJldHVybiBlbGVtZW50LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1
ZSk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtFbGVtZW50LT5zaGVldCgp
OworICAgICAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAg
ICAgICAgICAgICAgICBzdHlsZVNoZWV0cy0+YWRkKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
PihzaGVldCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9IAorICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgIEhUTUxT
dHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQq
PihlbGVtZW50KTsKKyAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZUVsZW1lbnQtPnNo
ZWV0KCk7CisgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisg
ICAgICAgICAgICBzdHlsZVNoZWV0cy0+YWRkKHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihz
aGVldCkpOworICAgIH0KIH0KIAotdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxG
cmFtZSo+KiB2aXNpdGVkRnJhbWVzLAordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckVsZW1lbnQo
SFRNTEVsZW1lbnQqIGVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hl
bWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEhhc2hTZXQ8RnJhbWUq
PiogdmlzaXRlZEZyYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3Rv
cjxGcmFtZSo+KiBmcmFtZXNUb1Zpc2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVmVjdG9yPEtVUkw+KiBmcmFtZVVSTHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBWZWN0b3I8S1VSTD4qIHJlc291cmNlVVJMcykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQqPiogc3R5bGVTaGVldHMsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxLVVJMPiogZnJhbWVVUkxz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4qIHJl
c291cmNlVVJMcykKIHsKLSAgICAvLyBJZiB0aGUgbm9kZSBpcyBhIGZyYW1lLCB3ZSdsbCBwcm9j
ZXNzIGl0IGxhdGVyIGluIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUuCisgICAgQVNTRVJUKGVs
ZW1lbnQpOwogICAgIGlmICgoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlmcmFtZVRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFnKQotICAgICAgICB8
fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSB8fCBlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1iZWRUYWcpKQotICAgICAgICAgICAgJiYgZWxlbWVudC0+
aXNGcmFtZU93bmVyRWxlbWVudCgpKSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9IHN0YXRpY19j
YXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUoKTsKKyAg
ICAgICAgIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpIHx8IGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykpCisgICAgICAgICYmIGVsZW1l
bnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgeworICAgICAgICBGcmFtZSogZnJhbWUgPSBzdGF0
aWNfY2FzdDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KS0+Y29udGVudEZy
YW1lKCk7CiAgICAgICAgIGlmIChmcmFtZSkgewogICAgICAgICAgICAgaWYgKCF2aXNpdGVkRnJh
bWVzLT5jb250YWlucyhmcmFtZSkpCiAgICAgICAgICAgICAgICAgZnJhbWVzVG9WaXNpdC0+YXBw
ZW5kKGZyYW1lKTsKQEAgLTExOCwyNiArMTU2LDM2IEBAIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNG
b3JFbGVtZW50KEVsZW1lbnQKICAgICAgICAgfQogICAgIH0KIAotICAgIEtVUkwgdXJsID0gZ2V0
U3ViUmVzb3VyY2VVUkxGcm9tRWxlbWVudChlbGVtZW50KTsKLSAgICBpZiAodXJsLmlzRW1wdHko
KSB8fCAhdXJsLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuOyAvLyBObyBzdWJyZXNvdXJjZSBm
b3IgdGhpcyBub2RlLgotCi0gICAgLy8gSWdub3JlIFVSTHMgdGhhdCBoYXZlIGEgbm9uLXN0YW5k
YXJkIHByb3RvY29scy4gU2luY2UgdGhlIEZUUCBwcm90b2NvbAotICAgIC8vIGRvZXMgbm8gaGF2
ZSBhIGNhY2hlIG1lY2hhbmlzbSwgd2Ugc2tpcCBpdCBhcyB3ZWxsLgotICAgIGlmICghdXJsLnBy
b3RvY29sSW5IVFRQRmFtaWx5KCkgJiYgIXVybC5pc0xvY2FsRmlsZSgpKQotICAgICAgICByZXR1
cm47CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogYXR0cmlidXRlID0gZ2V0UmVzb3VyY2VBdHRy
aWJ1dGVGb3JFbGVtZW50KGVsZW1lbnQpOworICAgIGlmIChhdHRyaWJ1dGUpIHsKKyAgICAgICAg
U3RyaW5nIHZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKCphdHRyaWJ1dGUpOworICAgICAg
ICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgS1VSTCB1cmwgPSBlbGVtZW50
LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh2YWx1ZSk7CisgICAgICAgICAgICAvLyBJZ25vcmUg
VVJMcyB0aGF0IGhhdmUgYSBub24tc3RhbmRhcmQgcHJvdG9jb2xzLiBTaW5jZSB0aGUgRlRQIHBy
b3RvY29sCisgICAgICAgICAgICAvLyBkb2VzIG5vdCBoYXZlIGEgY2FjaGUgbWVjaGFuaXNtLCB3
ZSBza2lwIGl0IGFzIHdlbGwuCisgICAgICAgICAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAodXJs
LnByb3RvY29sSW5IVFRQRmFtaWx5KCkgfHwgdXJsLmlzTG9jYWxGaWxlKCkpKQorICAgICAgICAg
ICAgICAgIHJlc291cmNlVVJMcy0+YWRkKHVybCk7CisgICAgICAgIH0KKyAgICB9CiAKLSAgICBp
ZiAoIXJlc291cmNlVVJMcy0+Y29udGFpbnModXJsKSkKLSAgICAgICAgcmVzb3VyY2VVUkxzLT5h
cHBlbmQodXJsKTsKKyAgICByZXRyaWV2ZVN0eWxlU2hlZXRGb3JFbGVtZW50KGVsZW1lbnQsIHN0
eWxlU2hlZXRzKTsKKyAgICAKKyAgICAvLyBQcm9jZXNzIGluLWxpbmUgc3R5bGUuCisgICAgaWYg
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24gPSBlbGVtZW50LT5zdHlsZSgp
KQorICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24oc3R5bGVE
ZWNsYXJhdGlvbiwgcmVzb3VyY2VVUkxzKTsKIH0KIAogdm9pZCByZXRyaWV2ZVJlc291cmNlc0Zv
ckZyYW1lKEZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJLaXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlY3RvcjxGcmFtZSo+KiB2aXNpdGVk
RnJhbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEZyYW1l
Kj4qIHZpc2l0ZWRGcmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVjdG9y
PEZyYW1lKj4qIGZyYW1lc1RvVmlzaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPEtVUkw+KiBmcmFtZVVSTHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VmVjdG9yPEtVUkw+KiByZXNvdXJjZVVSTHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiBzdHlsZVNoZWV0cywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxLVVJMPiogZnJhbWVVUkxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJjZVVSTHMp
CiB7CisgICAgaWYgKCF2aXNpdGVkRnJhbWVzLT5hZGQoZnJhbWUpLnNlY29uZCkKKyAgICAgICAg
cmV0dXJuOyAvLyBXZSBoYXZlIGFscmVhZHkgc2VlbiB0aGF0IGZyYW1lLgorCiAgICAgS1VSTCBm
cmFtZVVSTCA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVy
bCgpOwogCiAgICAgLy8gSWYgdGhlIGZyYW1lJ3MgVVJMIGlzIGludmFsaWQsIGlnbm9yZSBpdCwg
aXQgaXMgbm90IHJldHJpZXZhYmxlLgpAQCAtMTU1LDIzICsyMDMsOTEgQEAgdm9pZCByZXRyaWV2
ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcgogICAgIGlmICghaXNWYWxpZFNjaGVtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhhdCBmcmFt
ZSwgaWdub3JlIGl0LgotICAgIGlmICh2aXNpdGVkRnJhbWVzLT5jb250YWlucyhmcmFtZSkpCi0g
ICAgICAgIHJldHVybjsKLSAgICB2aXNpdGVkRnJhbWVzLT5hcHBlbmQoZnJhbWUpOwotICAgIGlm
ICghZnJhbWVVUkxzLT5jb250YWlucyhmcmFtZVVSTCkpCi0gICAgICAgIGZyYW1lVVJMcy0+YXBw
ZW5kKGZyYW1lVVJMKTsKKyAgICBmcmFtZVVSTHMtPmFkZChmcmFtZVVSTCk7CiAgIAogICAgIC8v
IE5vdyBnZXQgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBub2RlIG9mIHRoZSBk
b2N1bWVudC4KICAgICBSZWZQdHI8SFRNTEFsbENvbGxlY3Rpb24+IGFsbE5vZGVzID0gZnJhbWUt
PmRvY3VtZW50KCktPmFsbCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbGxOb2Rl
cy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBOb2RlKiBub2RlID0gYWxsTm9kZXMtPml0ZW0o
aSk7CiAgICAgICAgIC8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gSFRNTCByZXNvdXJjZXMu
Ci0gICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICBpZiAoSFRNTEVs
ZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KGFsbE5vZGVzLT5pdGVtKGkpKSkgeworICAg
ICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JFbGVtZW50KGVsZW1lbnQsIHN1cHBvcnRlZFNj
aGVtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRlZEZy
YW1lcywgZnJhbWVzVG9WaXNpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZVNoZWV0cywgZnJhbWVVUkxzLCByZXNvdXJjZVVSTHMpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0SGFzaFNldDxLVVJM
PiogcmVzb3VyY2VVUkxzKQoreworICAgIGlmIChydWxlLT5zdHlsZSgpKQorICAgICAgICByZXRy
aWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRpb24ocnVsZS0+c3R5bGUoKSwgcmVzb3Vy
Y2VVUkxzKTsKK30KKwordm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1N0eWxlRGVjbGFyYXRp
b24oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3RIYXNoU2V0PEtVUkw+KiByZXNvdXJj
ZVVSTHMpCit7CisgICAgLy8gVGhlIGJhY2tncm91bmQtaW1hZ2UgYW5kIGxpc3Qtc3R5bGUtaW1h
Z2UgKGZvciB1bCBvciBvbCkgYXJlIHRoZSBDU1MgcHJvcGVydGllcworICAgIC8vIHRoYXQgbWFr
ZSB1c2Ugb2YgaW1hZ2VzLiBXZSBpdGVyYXRlIHRvIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGFueSBv
dGhlcgorICAgIC8vIGltYWdlIHByb3BlcnRpZXMgdGhlcmUgbWlnaHQgYmUuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlRGVjbGFyYXRpb24tPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgLy8gRklYTUU6IGl0J3Mga2luZCBvZiByaWRpY3Vsb3VzIHRvIGdldCB0aGUgcHJvcGVy
dHkgbmFtZSBhbmQgdGhlbiBnZXQKKyAgICAgICAgLy8gdGhlIHZhbHVlIG91dCBvZiB0aGUgbmFt
ZS4gSWRlYWxseSB3ZSB3b3VsZCBnZXQgdGhlIHZhbHVlIG91dCBvZiB0aGUKKyAgICAgICAgLy8g
cHJvcGVydHkgSUQsIGJ1dCBDU1NTdHlsZURlY2xhcmF0aW9uIG9ubHkgZ2l2ZXMgYWNjZXNzIHRv
IHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVzLCBub3QgSURzLgorICAgICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShzdHls
ZURlY2xhcmF0aW9uLT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKHZhbHVlLT5pc0ltYWdlVmFsdWUo
KSkgeworICAgICAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU0ltYWdlVmFsdWUqPih2YWx1ZS5nZXQoKSk7CisgICAgICAgICAgICBTdHlsZUltYWdlKiBz
dHlsZUltYWdlID0gaW1hZ2VWYWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICAgICAg
ICAgIC8vIE5vbiBjYWNoZWQtaW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5v
dCBjb250YWluIGRhdGEuCisgICAgICAgICAgICBpZiAoc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFn
ZSgpKSB7CisgICAgICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlRGVj
bGFyYXRpb24tPnN0eWxlc2hlZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+
aXNDU1NTdHlsZVNoZWV0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHVybCA9IHN0
YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKS0+
dXJsKCk7CisgICAgICAgICAgICAgICAgICAgIHJlc291cmNlVVJMcy0+YWRkKHN0YXRpY19jYXN0
PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJs
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlz
dEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+KiB2aXNpdGVkU3R5bGVTaGVldHMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlZlY3RvcjxXZWJL
aXQ6OldlYkNTdHJpbmc+JiBzdXBwb3J0ZWRTY2hlbWVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTGlzdEhhc2hTZXQ8S1VSTD4qIHJlc291cmNlVVJMcykKK3sKKyAg
ICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghdmlzaXRlZFN0
eWxlU2hlZXRzLT5hZGQoc3R5bGVTaGVldCkuc2Vjb25kKQorICAgICAgICByZXR1cm47IC8vIFdl
IGhhdmUgYWxyZWFkeSBzZWVuIHRoYXQgc3R5bGVTaGVldC4KKworICAgIC8vIFBhcnNlIHRoZSBz
dHlsZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc3R5bGVTaGVldC0+aXRlbShpKTsK
KyAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHJldHJp
ZXZlUmVzb3VyY2VzRm9yRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdGVkRnJhbWVzLCBmcmFtZXNUb1Zp
c2l0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVVUkxzLCByZXNv
dXJjZVVSTHMpOworCisgICAgICAgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7CisgICAgICAg
ICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVs
ZSo+KGl0ZW0pOworICAgICAgICAgICAgLy8gVGhlIGltcG9ydGVkIENTUyBmaWxlIGl0c2VsZiBp
cyBhIHJlc291cmNlLgorICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQoc3R5bGVTaGVldC0+
ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaW1wb3J0UnVsZS0+aHJlZigpKSk7CisgICAgICAgICAg
ICAvLyBBbmQgaXQgbWF5IGNvbnRhaW4gc29tZSBtb3JlIHJlc291cmNlcy4KKyAgICAgICAgICAg
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTU3R5bGVTaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0
KCksIHZpc2l0ZWRTdHlsZVNoZWV0cywgc3VwcG9ydGVkU2NoZW1lcywgcmVzb3VyY2VVUkxzKTsK
KyAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0ZvbnRGYWNlUnVsZSgpKSB7CisgICAgICAgICAg
ICBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNl
UnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IGZv
bnRGYWNlUnVsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVNyYyk7
CisgICAgICAgICAgICBpZiAoY3NzVmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsKKyAgICAgICAgICAg
ICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+
KGNzc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBq
IDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGVyZSBkb2VzIG5vdCBzZWVtIHRvIGJlIGEgd2F5IHRvIGVuc3VyZSB0aGUgdmFs
dWUgaW4gdGhlIGxpc3QgaXMgYSBDU1NGb250RmFjZVNyY1ZhbHVlLgorICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBkbyB0cnVzdCB0aGF0IGxpc3Qgb25seSBjb250YWlucyBDU1NGb250RmFjZVNy
Y1ZhbHVlcyBhcyBkb25lIGluIFdlYkNvcmUvY3NzL0NTU0ZvbnRTZWxlY3Rvci5jcHAKKyAgICAg
ICAgICAgICAgICAgICAgQ1NTRm9udEZhY2VTcmNWYWx1ZSogZm9udEZhY2VTcmMgPSBzdGF0aWNf
Y2FzdDxDU1NGb250RmFjZVNyY1ZhbHVlKj4odmFsdWVMaXN0LT5pdGVtKGopKTsKKyAgICAgICAg
ICAgICAgICAgICAgcmVzb3VyY2VVUkxzLT5hZGQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoZm9udEZhY2VTcmMtPnJlc291cmNlKCkpKTsKKyAgICAgICAgICAgICAgICB9ICAg
ICAgICAgIAorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzU3R5bGVS
dWxlKCkpCisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSksIHJlc291cmNlVVJMcyk7CiAgICAgfQogfQogCkBAIC0y
MDAsOSArMzE2LDEwIEBAIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3UK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgVmVjdG9yPEZyYW1lKj4gZnJhbWVzVG9WaXNp
dDsKLSAgICBWZWN0b3I8RnJhbWUqPiB2aXNpdGVkRnJhbWVzOwotICAgIFZlY3RvcjxLVVJMPiBm
cmFtZUtVUkxzOwotICAgIFZlY3RvcjxLVVJMPiByZXNvdXJjZUtVUkxzOworICAgIExpc3RIYXNo
U2V0PEZyYW1lKj4gdmlzaXRlZEZyYW1lczsKKyAgICBMaXN0SGFzaFNldDxDU1NTdHlsZVNoZWV0
Kj4gc3R5bGVTaGVldHM7CisgICAgTGlzdEhhc2hTZXQ8S1VSTD4gZnJhbWVLVVJMczsKKyAgICBM
aXN0SGFzaFNldDxLVVJMPiByZXNvdXJjZUtVUkxzOwogICAgIAogICAgIC8vIExldCdzIHJldHJp
ZXZlIHRoZSByZXNvdXJjZXMgZnJvbSBldmVyeSBmcmFtZSBpbiB0aGlzIHBhZ2UuCiAgICAgZnJh
bWVzVG9WaXNpdC5hcHBlbmQobWFpbkZyYW1lLT5mcmFtZSgpKTsKQEAgLTIxMCwyNCArMzI3LDM3
IEBAIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlQWxsUmVzb3UKICAgICAgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVzVG9WaXNpdFswXTsKICAgICAgICAgZnJhbWVzVG9WaXNpdC5yZW1v
dmUoMCk7CiAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoZnJhbWUsIHN1cHBvcnRl
ZFNjaGVtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpc2l0ZWRGcmFt
ZXMsICZmcmFtZXNUb1Zpc2l0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2
aXNpdGVkRnJhbWVzLCAmZnJhbWVzVG9WaXNpdCwgJnN0eWxlU2hlZXRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZmcmFtZUtVUkxzLCAmcmVzb3VyY2VLVVJMcyk7CisgICAg
IH0KKworICAgIC8vIFdoaWxlIHJldHJpZXZpbmcgdGhlIGZyYW1lIHJlc291cmNlcywgd2UgYWxz
byByZXRyaWV2ZWQgdGhlIENTUyBzdHlsZS1zaGVldHMsCisgICAgLy8gd2UgY2FuIHByb2Nlc3Mg
dGhlbSBub3cuCisgICAgTGlzdEhhc2hTZXQ8Q1NTU3R5bGVTaGVldCo+IHZpc2l0ZWRTdHlsZVNo
ZWV0czsKKyAgICBmb3IgKExpc3RIYXNoU2V0PENTU1N0eWxlU2hlZXQqPjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHN0eWxlU2hlZXRzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IHN0eWxlU2hl
ZXRzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NTdHls
ZVNoZWV0KCppdGVyLCAmdmlzaXRlZFN0eWxlU2hlZXRzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNlS1VSTHMpOwog
ICAgIH0KIAogICAgIC8vIENvbnZlcnRzIHRoZSByZXN1bHRzIHRvIFdlYlVSTHMuCi0gICAgV2Vi
VmVjdG9yPFdlYlVSTD4gcmVzdWx0UmVzb3VyY2VVUkxzKHJlc291cmNlS1VSTHMuc2l6ZSgpKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc291cmNlS1VSTHMuc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgcmVzdWx0UmVzb3VyY2VVUkxzW2ldID0gcmVzb3VyY2VLVVJMc1tpXTsKKyAgICBX
ZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRSZXNvdXJjZVVSTHMoc3RhdGljX2Nhc3Q8c2l6ZV90Pihy
ZXNvdXJjZUtVUkxzLnNpemUoKSkpOworICAgIGludCBpID0gMDsKKyAgICBmb3IgKExpc3RIYXNo
U2V0PEtVUkw+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcmVzb3VyY2VLVVJMcy5iZWdpbigpOwor
ICAgICAgICAgaXRlciAhPSByZXNvdXJjZUtVUkxzLmVuZCgpOyArK2l0ZXIsICsraSkgeworICAg
ICAgICBLVVJMIHVybCA9ICppdGVyOworICAgICAgICByZXN1bHRSZXNvdXJjZVVSTHNbaV0gPSB1
cmw7CiAgICAgICAgIC8vIEEgZnJhbWUncyBzcmMgY2FuIHBvaW50IHRvIHRoZSBzYW1lIFVSTCBh
cyBhbm90aGVyIHJlc291cmNlLCBrZWVwIHRoZQogICAgICAgICAvLyByZXNvdXJjZSBVUkwgb25s
eSBpbiBzdWNoIGNhc2VzLgotICAgICAgICBzaXplX3QgaW5kZXggPSBmcmFtZUtVUkxzLmZpbmQo
cmVzb3VyY2VLVVJMc1tpXSk7Ci0gICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAgICAg
ICAgICAgIGZyYW1lS1VSTHMucmVtb3ZlKGluZGV4KTsKKyAgICAgICAgZnJhbWVLVVJMcy5yZW1v
dmUodXJsKTsKICAgICB9CiAgICAgKnJlc291cmNlVVJMcyA9IHJlc3VsdFJlc291cmNlVVJMczsK
LSAgICBXZWJWZWN0b3I8V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoZnJhbWVLVVJMcy5zaXplKCkp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZnJhbWVLVVJMcy5zaXplKCk7ICsraSkKLSAg
ICAgICAgcmVzdWx0RnJhbWVVUkxzW2ldID0gZnJhbWVLVVJMc1tpXTsKKyAgICBXZWJWZWN0b3I8
V2ViVVJMPiByZXN1bHRGcmFtZVVSTHMoc3RhdGljX2Nhc3Q8c2l6ZV90PihmcmFtZUtVUkxzLnNp
emUoKSkpOworICAgIGkgPSAwOworICAgIGZvciAoTGlzdEhhc2hTZXQ8S1VSTD46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSBmcmFtZUtVUkxzLmJlZ2luKCk7CisgICAgICAgICBpdGVyICE9IGZyYW1l
S1VSTHMuZW5kKCk7ICsraXRlciwgKytpKQorICAgICAgICByZXN1bHRGcmFtZVVSTHNbaV0gPSAq
aXRlcjsKKwogICAgICpmcmFtZVVSTHMgPSByZXN1bHRGcmFtZVVSTHM7CiAgICAgCiAgICAgcmV0
dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VTZXJp
YWxpemVyVGVzdC5jcHANCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDgxOTcwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlICJXZWJGcmFtZS5oIgogI2luY2x1
ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCiAjaW5j
bHVkZSAiV2ViU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVVJM
UmVxdWVzdC5oIgpAQCAtNDgsNiArNDksMTAgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIG5h
bWVzcGFjZSB7CiAKIGNsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNs
aWVudCB7CitwdWJsaWM6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJs
ZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJv
b2wgLyogZW5hYmxlZFBlclNldHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0K
KyAgICBib29sIG1fc2NyaXB0RW5hYmxlZDsKIH07CiAKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVy
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKQEAgLTk0LDYgKzk5LDE2IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVz
dHMoKTsKICAgICB9CiAKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAgICB7CisgICAgICAgIG1fd2Vi
RnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1
bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRl
U2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7
CisgICAgfQorCiAgICAgc3RhdGljIGJvb2wgd2ViVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVj
dG9yPFdlYlVSTD4mIHZlY3RvciwgY2hhciogdXJsKQogICAgIHsKICAgICAgICAgcmV0dXJuIHZl
Y3Rvci5jb250YWlucyhXZWJVUkwoR1VSTCh1cmwpKSk7CkBAIC0xOTAsNCArMjA1LDQ0IEBAIFRF
U1RfRihXZWJQYWdlU2VyaWFsaXplclRlc3QsIE11bHRpcGxlRnIKICAgICBFWFBFQ1RfVFJVRSh3
ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2VtYmVkLnBu
ZyIpKTsKIH0KIAorVEVTVF9GKFdlYlBhZ2VTZXJpYWxpemVyVGVzdCwgUmV0cmlldmVDU1NSZXNv
dXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4K
KyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7Cisg
ICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlN0cmluZzo6ZnJvbVVURjgoImxpbmtfc3R5bGVzLmNzcyIpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5
bGVfZnJvbV9saW5rLmNzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6
OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRf
c3R5bGVzLmNzcyIpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUo
dG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgLy8gUmV0cmlldmUgYWxsIHJl
c291cmNlcy4KKyAgICBXZWJWZWN0b3I8V2ViVVJMPiBmcmFtZXM7CisgICAgV2ViVmVjdG9yPFdl
YlVSTD4gcmVzb3VyY2VzOworICAgIEFTU0VSVF9UUlVFKFdlYlBhZ2VTZXJpYWxpemVyOjpyZXRy
aWV2ZUFsbFJlc291cmNlcyhtX3dlYlZpZXcsIG1fc3VwcG9ydGVkU2NoZW1lcywgJnJlc291cmNl
cywgJmZyYW1lcykpOworCisgICAgLy8gVGVzdHMgdGhhdCBhbGwgcmVzb3VyY2VzIGZyb20gdGhl
IGZyYW1lIGhhdmUgYmVlbiByZXRyaWV2ZWQuCisgICAgRVhQRUNUX0VRKDEsIGZyYW1lcy5zaXpl
KCkpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3RvckNvbnRhaW5zKGZyYW1lcywgImh0dHA6Ly93
d3cudGVzdC5jb20iKSk7CisKKyAgICBFWFBFQ1RfRVEoMTIsIHJlc291cmNlcy5zaXplKCkpOyAv
LyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNz
cyIpKTsKKyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHdl
YlZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dy
b3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2JsdWVfYmFja2dyb3VuZC5wbmciKSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmci
KSk7CisgICAgRVhQRUNUX1RSVUUod2ViVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9DaHVua2ZpdmUub3RmIikpOworICAgIEVYUEVDVF9UUlVFKHdlYlZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRSh3ZWJWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL29sLWRvdC5wbmciKSk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9jc3NfdGVzdF9wYWdlLmh0bWwNCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6YXRpb24vY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemF0aW9uL2Nzc190ZXN0X3BhZ2UuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMgcGFn
ZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29ycmVj
dGx5IGJ5IHRoZQorICAgICBXZWJQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVBbGxSZXNvdXJjZXMg
bWV0aG9kCistLT4KKworPGhlYWQ+CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4
dC9jc3MiIGhyZWY9Imxpbmtfc3R5bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9ydCB1cmwo
J2ltcG9ydF9zdHlsZXMuY3NzJyk7CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWlseTogQ2h1
bmtmaXZlOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgnQ2h1bmtm
aXZlLXdlYmZvbnQuZW90KSBmb3JtYXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2IHsKKyAg
Zm9udC1mYW1pbHk6IENodW5rZml2ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisKKzxzdHls
ZT4KKyNkaXZCbHVlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5w
bmcnKTsKK30KKwordWwgeworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsK
K30KKworb2wgeworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsKK30KKwor
PC9zdHlsZT4KKworPHNjcmlwdD4KKy8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUu
CitmdW5jdGlvbiBvbmxvYWQoKSB7CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFj
a2dyb3VuZC1pbWFnZTp1cmwoJ3B1cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZhciBkaXYg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHlsZU5vZGU9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBlPSAndGV4
dC9jc3MnOworICBzdHlsZU5vZGUubWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRD
aGlsZChzdHlsZU5vZGUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0i
b25sb2FkKCkiPgorCis8IS0tIFRleHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYg
aWQ9J2NodW5rZml2ZURpdic+VGhpcyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250LjwvZGl2
PgorCis8IS0tIFN0eWxlIGlzIGluIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2UmVkJz4K
K1RoaXMgZGl2IGhhcyBhIHJlZCBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8
IS0tIFN0eWxlIGlzIGluIGEgZmlsZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUgLS0+Cis8
ZGl2IGlkPSdkaXZPcmFuZ2UnPgorVGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBi
YWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAt
LT4KKzxkaXYgaWQ9J2RpdlllbGxvdyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5
bGUgc2VjdGlvbiBpbiB0aGUgaGVhZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRp
diBoYXMgYSBibHVlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5
bGUgaXMgaW5saW5lZCAtLT4KKzxkaXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1p
bWFnZTp1cmwoJ2dyZWVuX2JhY2tncm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4g
aW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBkeW5hbWlj
YWxseSBnZW5lcmF0ZWQgd2l0aCBKYXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4K
KzxkaXYgaWQ9J2RpdlB1cnBsZSc+CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRz
IGJhY2tncm91bmQuCis8L2Rpdj4KKworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgorICA8bGk+
Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8
L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+CisKK09y
ZGVyZWQgbGlzdDo8YnI+Cis8b2w+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+Cisg
IDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxs
aT5SZWQ8L2xpPgorPC9vbD4KKworPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zy
b21fbGluay5jc3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
YXRpb24vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFja2dy
b3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxl
cy5jc3MNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0NCi0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6YXRpb24vaW1wb3J0X3N0
eWxlcy5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2RpdlllbGxvdyB7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemF0aW9uL2xpbmtfc3R5bGVzLmNzcw0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXphdGlvbi9saW5rX3N0
eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6YXRpb24vbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUgQEAKK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcycpOworCisj
ZGl2UmVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZWRfYmFja2dyb3VuZC5wbmcnKTsK
K30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>