<?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>58947</bug_id>
          
          <creation_ts>2011-04-19 17:23:37 -0700</creation_ts>
          <short_desc>Add a way to serialize a WebView back to HTML</short_desc>
          <delta_ts>2011-04-28 15:52:47 -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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jay Civelli">jcivelli</reporter>
          <assigned_to name="Jay Civelli">jcivelli</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388933</commentid>
    <comment_count>0</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-19 17:23:37 -0700</bug_when>
    <thetext>We need an API that serializes the content of a WebView (all frames) back to HTML and also retrieves the resources for that page.
That would allow to save a page to a self-contained file (ex: MHTML)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388942</commentid>
    <comment_count>1</comment_count>
      <attachid>90280</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-19 17:34:29 -0700</bug_when>
    <thetext>Created attachment 90280
Initial patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388947</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 17:46:00 -0700</bug_when>
    <thetext>Attachment 90280 did not pass style-queue:

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

Source/WebKit/chromium/tests/data/htmlserializer/top_frame.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebKit/chromium/tests/data/htmlserializer/blank_frames.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebKit/chromium/tests/data/htmlserializer/iframe2.html:1:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Total errors found: 58 in 18 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>388965</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 18:07:16 -0700</bug_when>
    <thetext>Attachment 90280 did not build on mac:
Build output: http://queues.webkit.org/results/8471501</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388985</commentid>
    <comment_count>4</comment_count>
      <attachid>90288</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-19 18:28:49 -0700</bug_when>
    <thetext>Created attachment 90288
Fixing style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389026</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-19 20:28:14 -0700</bug_when>
    <thetext>Attachment 90288 did not build on chromium:
Build output: http://queues.webkit.org/results/8475511</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389064</commentid>
    <comment_count>6</comment_count>
      <attachid>90288</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-19 22:28:31 -0700</bug_when>
    <thetext>Comment on attachment 90288
Fixing style

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

This looks great.  The comments below are just a ton of nits.  Once we get this working, we should remove the Save Web Page As code in favor of this code path.

&gt; Source/WebCore/editing/MarkupAccumulator.h:82
&gt; +    virtual void appendCustomAttributes(Vector&lt;UChar&gt;&amp;, Element*, Namespaces*) { }

Please don&apos;t put implementations of virtual methods in headers.  That just makes the linker work hard.

&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:46
&gt; +// In the serialized version, any JavaScript tag or link is removed (event

JavaScript tag -&gt; script tags

link -&gt; ???

&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:57
&gt; +        SerializedResource() { }
&gt; +        SerializedResource(const WebURL&amp; url, const WebCString&amp; mimeType, const WebCString&amp; data)
&gt; +            : url(url), mimeType(mimeType), data(data) { }

This isn&apos;t proper WebKit style.

&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:62
&gt; +    WEBKIT_API static void serialize(WebView*, WebVector&lt;SerializedResource&gt;* resources);

This feels like a method of WebView rather than a static, but those are questions for fishd.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:61
&gt; +static const WebCore::QualifiedName* ignoredTags[] = {
&gt; +    &amp;HTMLNames::scriptTag,
&gt; +    &amp;HTMLNames::noscriptTag,
&gt; +};

These could be references instead of pointers.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:72
&gt; +class WebHTMLSerializerImpl::SerializerMarkupAccumulator : public MarkupAccumulator {

I&apos;d just use a normal class name and put all this stuff in an anonymous namespace.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:99
&gt; +    : MarkupAccumulator(nodes, AbsoluteURLs), m_serializer(serializer)

This should be on two lines for proper WebKit style.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:118
&gt; +    // FIXME: for object (plugins) tags and video tag we could replace them by an image fo their current contents.

fo -&gt; of

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:124
&gt; +    if (!element-&gt;hasTagName(HTMLNames::iframeTag) &amp;&amp; !element-&gt;hasTagName(HTMLNames::frameTag))
&gt; +        return;

What about other FrameOwnerElement subclasses, like &lt;object&gt; ?

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:129
&gt; +    if (url.isValid() &amp;&amp; url != blankURL())
&gt; +        return;

comparing against blankURL isn&apos;t right.  You should look to see if it has the scheme &quot;about&quot;

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:132
&gt; +    url = m_serializer-&gt;getURLForBlankFrame(frameElement-&gt;contentFrame());

getURLForBlankFrame -&gt;urlForBlankFrame (or something...  we don&apos;t start function names with &quot;get&quot;).

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:133
&gt; +    RefPtr&lt;Attribute&gt; attribute = Attribute::create(HTMLNames::srcAttr, AtomicString(url.string()));

You don&apos;t need to call AtomicString explicitly.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:144
&gt; +    : m_resources(resources), m_blankFrameCounter(0)

Same style problem.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:154
&gt; +    if (!url.isValid() || url == blankURL())
&gt; +        // For blank frames we generate a fake URL so they can be referenced by their containing frame.
&gt; +        url = getURLForBlankFrame(frame);

Multi-line ifs should have { } even if they only have one statement.  Also, same blankURL bug.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:180
&gt; +            KURL url = document-&gt;completeURL(imageElem-&gt;getAttribute(HTMLNames::srcAttr));

This won&apos;t be the URL of the image in the case where there&apos;s a redirect.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:183
&gt; +        } else if (element-&gt;hasTagName(HTMLNames::linkTag) &amp;&amp; equalIgnoringCase(element-&gt;getAttribute(HTMLNames::typeAttr), &quot;text/css&quot;)) {

This is wrong.  You want to know whether the rel attribute contains stylesheet.  You should be able to ask the HTMLLinkElement if it&apos;s a stylesheet.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:186
&gt; +            if (sheet-&gt;isCSSStyleSheet()) {

Yeah, looks like you&apos;ve already do that.  You should remove the typeAttr check.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:189
&gt; +                // Note that serializeCSSStyleSheet took care of adding the style sheet to the resources vector.

Can you change this into an ASSERT?

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:200
&gt; +    Frame* childFrame = frame-&gt;tree()-&gt;firstChild();
&gt; +    while (childFrame) {

This looks like a for loop in disguise.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:247
&gt; +    String mimeType = MIMETypeRegistry::getMIMETypeForExtension(image-&gt;image()-&gt;filenameExtension());

This is wrong.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:297
&gt; +    String url(&quot;http://chromium_phony_frame/&quot;);

Oh man.  That&apos;s not a good idea.  How about &quot;wyciwyg:&quot; as the stem?

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.h:60
&gt; +    class SerializerMarkupAccumulator;
&gt; +    friend class SerializerMarkupAccumulator;

This doen&apos;t necessarily need to be a friend.  We already have the API layer as a shield.

&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.h:62
&gt; +    // Serializes the style-sheet back to text and adds it to the resources if URL is not-empty.

style-sheet =&gt; stylesheet

&gt; Source/WebKit/chromium/tests/WebHTMLSerializerTest.cpp:61
&gt; +    WebHTMLSerializerTest() : m_htmlMimeType(WebString::fromUTF8(&quot;text/html&quot;)), m_cssMimeType(WebString::fromUTF8(&quot;text/css&quot;)), m_pngMimeType(WebString::fromUTF8(&quot;img/png&quot;)) { }

Same style problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389096</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-19 23:55:34 -0700</bug_when>
    <thetext>Subclassing WebCore classes is not how we customize behavior from WebKit. This should be a client or a strategy call.

Can you explain what the end goal here is? One that I can think of sounds questionable, but maybe it&apos;s just me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389099</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-20 00:04:48 -0700</bug_when>
    <thetext>&gt; Subclassing WebCore classes is not how we customize behavior from WebKit. This should be a client or a strategy call.

That&apos;s not really what&apos;s going on in this patch.  No WebCore behavior is being customized.

There&apos;s a larger question of whether this code should be in WebCore or WebKit.  In discussing this with Jay, I think moving more of it to WebCore would make sense as this logic isn&apos;t overly specific to Chromium.

&gt; Can you explain what the end goal here is? One that I can think of sounds questionable, but maybe it&apos;s just me.

This code supports a browser feature much like the &quot;Save as web archive&quot; feature in Safari.  Currently Chrome has a &quot;Save as web page (complete)&quot;, but this is a different approach to that feature.  I&apos;d like to replace the existing approach (see http://trac.webkit.org/browser/trunk/Source/WebKit/chromium/src/WebPageSerializerImpl.cpp but please don&apos;t cry) with this approach, but that might or might not happen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389266</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-20 09:07:31 -0700</bug_when>
    <thetext>&gt; That&apos;s not really what&apos;s going on in this patch.  No WebCore behavior is being customized.

If you mean that nothing observable from DOM is being customized, then sure. But that&apos;s not the point. Having a virtual method that&apos;s being overridden from WebKit (instead of using a client call) is exactly what is wrong about this patch technically - there is no exception like &quot;we can avoid using a client-based design if we&apos;re implementing a feature that&apos;s only accessible from browser UI&quot;.

I suspect that you may feel uneasy about clients since they are commonly per-frame. Well, since we&apos;re exposing serializer as a separate WebCore &quot;API&quot;, then there can be per-serializer clients, too.

Another approach is of course to have the logic in WebCore and to set a boolean flag in serializer instance.

&gt; This code supports a browser feature much like the &quot;Save as web archive&quot; feature in Safari.  Currently Chrome has a &quot;Save as web page (complete)&quot;, but this is a different approach to that feature.

Can you describe what the difference with the desired Chromium behavior is? Can that be something that all WebKit-based browsers want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389283</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-20 09:28:32 -0700</bug_when>
    <thetext>&gt; If you mean that nothing observable from DOM is being customized, then sure. But that&apos;s not the point. Having a virtual method that&apos;s being overridden from WebKit (instead of using a client call) is exactly what is wrong about this patch technically

That&apos;s exactly what a client is, right?  The only difference is that clients are pure virtual.

&gt; Can you describe what the difference with the desired Chromium behavior is?

Your question isn&apos;t well-posed.  The difference between the desired Chromium behavior and what?

&gt; Can that be something that all WebKit-based browsers want?

Potentially.  There isn&apos;t really a &quot;correct&quot; way to save a live web page into a file.  There are a bunch of trade-offs.  This approach represents one set of trade-offs.  The existing code represents a different set of trade-offs.  Many browsers have this sort of save-as feature, so it might well be valuable to other WebKit-based browsers, depending on how they view the various trade-offs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389316</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-20 10:10:54 -0700</bug_when>
    <thetext>&gt; That&apos;s exactly what a client is, right?  The only difference is that clients are pure virtual.

Yes, it&apos;s a major distinction. If you don&apos;t like this design principle, this bug is not a place to discuss it.

&gt; Your question isn&apos;t well-posed.  The difference between the desired Chromium behavior and what?

I can&apos;t do anything to make the question any more clear. You said that &quot;this is a different approach&quot;, I asked what the difference was, and now you are asking &quot;difference with what?&quot;

&gt; Potentially.  There isn&apos;t really a &quot;correct&quot; way to save a live web page into a file.

Agreed. We have tons of customizations of this kind in WebCore, sometimes implemented with client calls, other times with preferences. See e.g. platform editing behaviors, where WebCore is customized to do different things for the same user actions.

I&apos;m asking someone to describe the desired behavior in plain English, to avoid trying to guess the purpose from poorly commented and admittedly bad (&quot;but please don&apos;t cry &quot;) code. I presume this is not a trade secret.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389354</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-20 11:05:19 -0700</bug_when>
    <thetext>One major difference between WebPageSerializer and WebHTMLSerializer is that WebPageSerializer includes inline script whereas WebHTMLSerializer does not.  Also, WebHTMLSerializer might replace a canvas with a static image whereas WebPageSerializer would not.

Generalizing WebHTMLSerializer&apos;s perspective is that you want a static version of the page (but not a screenshot because you want text-reflow, etc, to work).  WebPageSerializer is trying to create a local version of the page that works as closely as possible to the hosted version.  WebPageSerializer roughly uses the same approach as Firefox&apos;s &quot;save complete web page&quot;, which has a number of unfixable bugs:

&lt;script&gt;
document.write(&quot;This text should appear once&quot;);
&lt;/script&gt;

In WebPageSerializer, the text will appear twice but with WebHTMLSerializer the text appears only once.

&lt;button&gt;Hello&lt;/button&gt;
&lt;script&gt;
document.getElementsByTagName(&quot;button&quot;)[0].addEventListender(&quot;click&quot;, function () {
  alert(&quot;Hi there&quot;);
}, false);
&lt;/script&gt;

In WebPageSerializer, the button works but with WebHTMLSerializer the button does not.

Now, aside from the differences in approach, WebPageSerializer has very poor code quality and lots of bugs.  I wasn&apos;t involved in reviewing the patch that added it, and I think the project should not have accepted it at that level of quality.  I re-wrote it from scratch a number of months ago, but never got around to finishing it because other higher-priority things came up.

Do you have other questions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389380</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-20 11:27:13 -0700</bug_when>
    <thetext>Thank you - that&apos;s a great explanation, and I think that it&apos;s good idea to consider keeping more of the code in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390182</commentid>
    <comment_count>14</comment_count>
      <attachid>90288</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 11:25:34 -0700</bug_when>
    <thetext>Comment on attachment 90288
Fixing style

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

&gt;&gt; Source/WebCore/editing/MarkupAccumulator.h:82
&gt;&gt; +    virtual void appendCustomAttributes(Vector&lt;UChar&gt;&amp;, Element*, Namespaces*) { }
&gt; 
&gt; Please don&apos;t put implementations of virtual methods in headers.  That just makes the linker work hard.

Done.

&gt;&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:46
&gt;&gt; +// In the serialized version, any JavaScript tag or link is removed (event
&gt; 
&gt; JavaScript tag -&gt; script tags
&gt; 
&gt; link -&gt; ???

Corrected.

&gt;&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:57
&gt;&gt; +            : url(url), mimeType(mimeType), data(data) { }
&gt; 
&gt; This isn&apos;t proper WebKit style.

Move to WebPageSerialization.h, constructor actually removed.

&gt;&gt; Source/WebKit/chromium/public/WebHTMLSerializer.h:62
&gt;&gt; +    WEBKIT_API static void serialize(WebView*, WebVector&lt;SerializedResource&gt;* resources);
&gt; 
&gt; This feels like a method of WebView rather than a static, but those are questions for fishd.

Per fishd, moved it to WebPageSerializer.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:61
&gt;&gt; +};
&gt; 
&gt; These could be references instead of pointers.

makes compiler unhappy:
&quot;Array of references are illegal&quot;

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:72
&gt;&gt; +class WebHTMLSerializerImpl::SerializerMarkupAccumulator : public MarkupAccumulator {
&gt; 
&gt; I&apos;d just use a normal class name and put all this stuff in an anonymous namespace.

OK, done.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:99
&gt;&gt; +    : MarkupAccumulator(nodes, AbsoluteURLs), m_serializer(serializer)
&gt; 
&gt; This should be on two lines for proper WebKit style.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:118
&gt;&gt; +    // FIXME: for object (plugins) tags and video tag we could replace them by an image fo their current contents.
&gt; 
&gt; fo -&gt; of

Done.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:124
&gt;&gt; +        return;
&gt; 
&gt; What about other FrameOwnerElement subclasses, like &lt;object&gt; ?

Ah, good point. Now dealing with that.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:129
&gt;&gt; +        return;
&gt; 
&gt; comparing against blankURL isn&apos;t right.  You should look to see if it has the scheme &quot;about&quot;

Done.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:132
&gt;&gt; +    url = m_serializer-&gt;getURLForBlankFrame(frameElement-&gt;contentFrame());
&gt; 
&gt; getURLForBlankFrame -&gt;urlForBlankFrame (or something...  we don&apos;t start function names with &quot;get&quot;).

Done

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:133
&gt;&gt; +    RefPtr&lt;Attribute&gt; attribute = Attribute::create(HTMLNames::srcAttr, AtomicString(url.string()));
&gt; 
&gt; You don&apos;t need to call AtomicString explicitly.

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:144
&gt;&gt; +    : m_resources(resources), m_blankFrameCounter(0)
&gt; 
&gt; Same style problem.

Fixed.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:154
&gt;&gt; +        url = getURLForBlankFrame(frame);
&gt; 
&gt; Multi-line ifs should have { } even if they only have one statement.  Also, same blankURL bug.

Done.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:180
&gt;&gt; +            KURL url = document-&gt;completeURL(imageElem-&gt;getAttribute(HTMLNames::srcAttr));
&gt; 
&gt; This won&apos;t be the URL of the image in the case where there&apos;s a redirect.

I think that&apos;s OK. All that matters is that the image URL in the serialized frame matches the URL for the image we store. We don&apos;t have to resolve the redirects.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:183
&gt;&gt; +        } else if (element-&gt;hasTagName(HTMLNames::linkTag) &amp;&amp; equalIgnoringCase(element-&gt;getAttribute(HTMLNames::typeAttr), &quot;text/css&quot;)) {
&gt; 
&gt; This is wrong.  You want to know whether the rel attribute contains stylesheet.  You should be able to ask the HTMLLinkElement if it&apos;s a stylesheet.

Removed.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:189
&gt;&gt; +                // Note that serializeCSSStyleSheet took care of adding the style sheet to the resources vector.
&gt; 
&gt; Can you change this into an ASSERT?

OK.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:200
&gt;&gt; +    while (childFrame) {
&gt; 
&gt; This looks like a for loop in disguise.

Disguise removed.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:247
&gt;&gt; +    String mimeType = MIMETypeRegistry::getMIMETypeForExtension(image-&gt;image()-&gt;filenameExtension());
&gt; 
&gt; This is wrong.

OK, now using the mime type from the response that created the resource. Is that better?

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.cpp:297
&gt;&gt; +    String url(&quot;http://chromium_phony_frame/&quot;);
&gt; 
&gt; Oh man.  That&apos;s not a good idea.  How about &quot;wyciwyg:&quot; as the stem?

OK.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.h:60
&gt;&gt; +    friend class SerializerMarkupAccumulator;
&gt; 
&gt; This doen&apos;t necessarily need to be a friend.  We already have the API layer as a shield.

Not a friend anymore.

&gt;&gt; Source/WebKit/chromium/src/WebHTMLSerializerImpl.h:62
&gt;&gt; +    // Serializes the style-sheet back to text and adds it to the resources if URL is not-empty.
&gt; 
&gt; style-sheet =&gt; stylesheet

Done.

&gt;&gt; Source/WebKit/chromium/tests/WebHTMLSerializerTest.cpp:61
&gt;&gt; +    WebHTMLSerializerTest() : m_htmlMimeType(WebString::fromUTF8(&quot;text/html&quot;)), m_cssMimeType(WebString::fromUTF8(&quot;text/css&quot;)), m_pngMimeType(WebString::fromUTF8(&quot;img/png&quot;)) { }
&gt; 
&gt; Same style problem.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390184</commentid>
    <comment_count>15</comment_count>
      <attachid>90562</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 11:27:05 -0700</bug_when>
    <thetext>Created attachment 90562
Moved code to WebCore.

As discussed, I moved this code to WebCore/page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390224</commentid>
    <comment_count>16</comment_count>
      <attachid>90562</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 12:04:52 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

This looks great.  A few minor comments.

&gt; Source/WebCore/page/PageSerializer.cpp:56
&gt; +namespace {

Apparently we&apos;re supposed to use the static keyword in favor of anonymous namespaces, but I see that you&apos;re using this because you want the SerializerMarkupAccumulator class to have internal linkage.

&gt; Source/WebCore/page/PageSerializer.cpp:127
&gt; +    url = m_serializer-&gt;urlForBlankFrame(frame);
&gt; +    RefPtr&lt;Attribute&gt; attribute = Attribute::create(HTMLNames::srcAttr, url.string());
&gt; +    appendAttribute(out, element, *attribute, namespaces);

This isn&apos;t quite correct in the case of an &lt;object&gt; tag, which uses the data attribute for the frame&apos;s URL.  HTMLFrameElementBase::isURLAttribute exists to solve this problem in other places.  See also HTMLObjectElement::imageSourceAttributeName for a slightly different solution to a similar problem.

&gt; Source/WebCore/page/PageSerializer.cpp:146
&gt; +

extra blank line here

&gt; Source/WebCore/page/PageSerializer.cpp:163
&gt; +    if (!url.isValid() || url == blankURL()) {

This should use the protocolIs check instead of comparing against blankURL.

&gt; Source/WebCore/page/PageSerializer.cpp:168
&gt; +    if (m_resourceURLs.contains(url)) {

Maybe we should convert all the URLs be unique?

&gt; Source/WebCore/page/PageSerializer.cpp:191
&gt; +            HTMLImageElement* imageElem = static_cast&lt;HTMLImageElement*&gt;(element);

imageElem =&gt; imageElement (we don&apos;t like abbreviations)

&gt; Source/WebCore/page/PageSerializer.cpp:193
&gt; +            CachedImage* cachedImg = imageElem-&gt;cachedImage();

cachedImage.

&gt; Source/WebCore/page/PageSerializer.cpp:199
&gt; +                KURL url = document-&gt;completeURL(linkElement-&gt;getAttribute(HTMLNames::hrefAttr));

This isn&apos;t really correct.  There might have been a redirect.  You probably want StyleSheet::finalURL, but that might cause problems when loading the style sheet...  I guess it depends on how we deserialize these.  I&apos;m not sure what to do here.

&gt; Source/WebCore/page/PageSerializer.cpp:207
&gt; +                serializeCSSStyleSheet(static_cast&lt;CSSStyleSheet*&gt;(sheet), KURL());

What about style attributes?  Seems like you&apos;ll want to grab the images and such out of those as well.

&gt; Source/WebCore/page/PageSerializer.cpp:217
&gt; +    String cssText;

We should use StringBuilder instead.  Calling append a lot on String is slow.

&gt; Source/WebCore/page/PageSerializer.cpp:307
&gt; +    String url(&quot;wyciwyg://frame/&quot;);
&gt; +    url.append(String::number(m_blankFrameCounter++));
&gt; +    KURL fakeURL(ParsedURLString, url);

You should use makeString instead of calling append.  I&apos;m not sure it matters, but it&apos;s the new hotness.

&gt; Source/WebCore/page/PageSerializer.h:92
&gt; +    // The list of resources retreived so far.
&gt; +    Vector&lt;Resource&gt;* m_resources;
&gt; +
&gt; +    // The list of URLs we have retrieved so far, use to ensure we only retrieved each resource once.
&gt; +    ListHashSet&lt;KURL&gt; m_resourceURLs;
&gt; +
&gt; +    // The URLs used to identify blank frames.
&gt; +    HashMap&lt;Frame*, KURL&gt; m_blankFrameURLs;
&gt; +
&gt; +    // Used to generate unique fake URLs for blank frames.
&gt; +    unsigned m_blankFrameCounter;

We usually skip these comments and remove all the blank lines between member variables.

&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:195
&gt; +        resource.data = WebCString(iter-&gt;data-&gt;data(), iter-&gt;data-&gt;size());

This creates a copy of all the images?  There isn&apos;t a way to just take a reference to the SharedData ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390227</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 12:06:16 -0700</bug_when>
    <thetext>You should add the new WebCore files to all the other build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390246</commentid>
    <comment_count>18</comment_count>
      <attachid>90562</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-21 12:26:27 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

Looks pretty good to me, too.

The new serializer uses utf-8 for all content, correct? That seems less than perfect, since page behavior does depend on encoding (most commonly to encode forms and request URLs). Is the encoding transferred out of band somewhere?

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:56
&gt;&gt; +namespace {
&gt; 
&gt; Apparently we&apos;re supposed to use the static keyword in favor of anonymous namespaces, but I see that you&apos;re using this because you want the SerializerMarkupAccumulator class to have internal linkage.

We usually don&apos;t care about linkage utility classes in WebCore namespace. So I suggest just removing the anonymous namespace.

&gt; Source/WebCore/page/PageSerializer.cpp:138
&gt; +PageSerializer::Resource::Resource() { }

Braces should be on separate lines.

&gt; Source/WebCore/page/PageSerializer.cpp:171
&gt; +        // FIXME: we could have 2 frame with the same URL but which were dynamically changed and have now
&gt; +        //        different content. So we should serialize both and somehow rename the frame src in the
&gt; +        //        containing frame. Arg!

We don&apos;t align code and comments like that, please just use one space.

&gt; Source/WebCore/page/PageSerializer.cpp:235
&gt; +            // FIXME: add support for font face rule. It is not clear to me at this point if the actual otf/eot file can
&gt; +            //        be retrieved from the CSSFontFaceRule object.

Same comment about indentation.

&gt; Source/WebCore/page/PageSerializer.cpp:305
&gt; +    String url(&quot;wyciwyg://frame/&quot;);

What will WebCore do with this wyciwyg scheme later? The result of this serialization seems useless to non-Chromium ports, and this should either be addressed, or made clear through naming and use of #ifs.

&gt; Source/WebCore/page/PageSerializer.cpp:316
&gt; +} // namespace WebCore
&gt; +
&gt; +
&gt; +

Lots of empty lines here.

I&apos;m not a fan of comments like &quot;namespace WebCore&quot; - most of the time you don&apos;t question file structure, so they are useless and add visual noise. And when you do, they are likely to be misleading - the only way to match braces is to use your text editor features, comments can&apos;t tell the truth.

&gt; Source/WebCore/page/PageSerializer.h:51
&gt; +// It serializes all the page frames and retreives resources such as images and CSS stylesheets.

Typo: &quot;retreives&quot;.

&gt; Source/WebCore/page/PageSerializer.h:59
&gt; +        Resource(const KURL&amp;, const CString&amp; mimeType, PassRefPtr&lt;SharedBuffer&gt; data);

Please don&apos;t use CString here. It&apos;s a fairly strange a dangerous class.

&gt; Source/WebCore/page/PageSerializer.h:82
&gt; +    // The list of resources retreived so far.

Typo: &quot;retreived&quot;. I&apos;m not sure if this comment adds any information.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390299</commentid>
    <comment_count>19</comment_count>
      <attachid>90562</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 13:43:49 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:305
&gt;&gt; +    String url(&quot;wyciwyg://frame/&quot;);
&gt; 
&gt; What will WebCore do with this wyciwyg scheme later? The result of this serialization seems useless to non-Chromium ports, and this should either be addressed, or made clear through naming and use of #ifs.

wyciwyg doesn&apos;t mean anything special to Chromium either.  I&apos;m not sure how this is supposed to work.  Maybe the code that uses the serialized version is supposed to re-write these URLs to be local to the disk?  I just recommended that Jay use wyciwyg because Firefox uses that scheme for a similar purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390365</commentid>
    <comment_count>20</comment_count>
      <attachid>90562</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 14:58:02 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:127
&gt;&gt; +    appendAttribute(out, element, *attribute, namespaces);
&gt; 
&gt; This isn&apos;t quite correct in the case of an &lt;object&gt; tag, which uses the data attribute for the frame&apos;s URL.  HTMLFrameElementBase::isURLAttribute exists to solve this problem in other places.  See also HTMLObjectElement::imageSourceAttributeName for a slightly different solution to a similar problem.

I see. Since there is no getURLAttribute method I ended up iterating over the attributes and calling isURLAttribute to figure out the right one. Less than ideal, but I am not sure what else to do (short of introducing a new getURLAttribute method to Element).

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:146
&gt;&gt; +
&gt; 
&gt; extra blank line here

Removed.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:163
&gt;&gt; +    if (!url.isValid() || url == blankURL()) {
&gt; 
&gt; This should use the protocolIs check instead of comparing against blankURL.

Switched to protocolIs(&quot;about&quot;).
Do you know if there could be cases where an frame loads something other than about:blank?

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:168
&gt;&gt; +    if (m_resourceURLs.contains(url)) {
&gt; 
&gt; Maybe we should convert all the URLs be unique?

Yeah, we could unique frame URLs but that would require some more changes to MarkupAccumulator.
I&apos;ll do that in a subsequent patch if that&apos;s OK with you.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:191
&gt;&gt; +            HTMLImageElement* imageElem = static_cast&lt;HTMLImageElement*&gt;(element);
&gt; 
&gt; imageElem =&gt; imageElement (we don&apos;t like abbreviations)

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:193
&gt;&gt; +            CachedImage* cachedImg = imageElem-&gt;cachedImage();
&gt; 
&gt; cachedImage.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:199
&gt;&gt; +                KURL url = document-&gt;completeURL(linkElement-&gt;getAttribute(HTMLNames::hrefAttr));
&gt; 
&gt; This isn&apos;t really correct.  There might have been a redirect.  You probably want StyleSheet::finalURL, but that might cause problems when loading the style sheet...  I guess it depends on how we deserialize these.  I&apos;m not sure what to do here.

I am not sure I understand the problem.
Let&apos;s say the page has:
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;styles.css&quot; /&gt;
and styles.css is a redirect to something else.
As long as the link is serialized as is (without it&apos;s href being resolved), then its URL will match the URL we are using for the CSS resource. And during deserialization, they&apos;ll still match.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:207
&gt;&gt; +                serializeCSSStyleSheet(static_cast&lt;CSSStyleSheet*&gt;(sheet), KURL());
&gt; 
&gt; What about style attributes?  Seems like you&apos;ll want to grab the images and such out of those as well.

It does it as part of the serialization process. (this is validated by the WebPageNewSerializeTest::CSSResources test).

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:217
&gt;&gt; +    String cssText;
&gt; 
&gt; We should use StringBuilder instead.  Calling append a lot on String is slow.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:307
&gt;&gt; +    KURL fakeURL(ParsedURLString, url);
&gt; 
&gt; You should use makeString instead of calling append.  I&apos;m not sure it matters, but it&apos;s the new hotness.

Done, I totally want to use the hippest APIs.

&gt;&gt; Source/WebCore/page/PageSerializer.h:92
&gt;&gt; +    unsigned m_blankFrameCounter;
&gt; 
&gt; We usually skip these comments and remove all the blank lines between member variables.

Removed the comments.

&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:195
&gt;&gt; +        resource.data = WebCString(iter-&gt;data-&gt;data(), iter-&gt;data-&gt;size());
&gt; 
&gt; This creates a copy of all the images?  There isn&apos;t a way to just take a reference to the SharedData ?

Yes, it copies all resources.
There is no way in the current Chromium WebKit API to create a wrapper around SharedData.
I guess I could do that if you think that&apos;s necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390367</commentid>
    <comment_count>21</comment_count>
      <attachid>90610</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 14:59:57 -0700</bug_when>
    <thetext>Created attachment 90610
Addressed Adam&apos;s and Alexey&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390371</commentid>
    <comment_count>22</comment_count>
      <attachid>90562</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 15:02:17 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:56
&gt;&gt;&gt; +namespace {
&gt;&gt; 
&gt;&gt; Apparently we&apos;re supposed to use the static keyword in favor of anonymous namespaces, but I see that you&apos;re using this because you want the SerializerMarkupAccumulator class to have internal linkage.
&gt; 
&gt; We usually don&apos;t care about linkage utility classes in WebCore namespace. So I suggest just removing the anonymous namespace.

Removed the anonymous namespace.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:138
&gt;&gt; +PageSerializer::Resource::Resource() { }
&gt; 
&gt; Braces should be on separate lines.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:171
&gt;&gt; +        //        containing frame. Arg!
&gt; 
&gt; We don&apos;t align code and comments like that, please just use one space.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:235
&gt;&gt; +            //        be retrieved from the CSSFontFaceRule object.
&gt; 
&gt; Same comment about indentation.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:316
&gt;&gt; +
&gt; 
&gt; Lots of empty lines here.
&gt; 
&gt; I&apos;m not a fan of comments like &quot;namespace WebCore&quot; - most of the time you don&apos;t question file structure, so they are useless and add visual noise. And when you do, they are likely to be misleading - the only way to match braces is to use your text editor features, comments can&apos;t tell the truth.

Removed empty lines and comment.

&gt;&gt; Source/WebCore/page/PageSerializer.h:51
&gt;&gt; +// It serializes all the page frames and retreives resources such as images and CSS stylesheets.
&gt; 
&gt; Typo: &quot;retreives&quot;.

Fixed.

&gt;&gt; Source/WebCore/page/PageSerializer.h:59
&gt;&gt; +        Resource(const KURL&amp;, const CString&amp; mimeType, PassRefPtr&lt;SharedBuffer&gt; data);
&gt; 
&gt; Please don&apos;t use CString here. It&apos;s a fairly strange a dangerous class.

Now using String.

&gt;&gt; Source/WebCore/page/PageSerializer.h:82
&gt;&gt; +    // The list of resources retreived so far.
&gt; 
&gt; Typo: &quot;retreived&quot;. I&apos;m not sure if this comment adds any information.

Removed comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390373</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 15:03:37 -0700</bug_when>
    <thetext>Attachment 90610 did not pass style-queue:

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

Source/WebCore/editing/MarkupAccumulator.h:96:  The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 19 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>390374</commentid>
    <comment_count>24</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-21 15:04:09 -0700</bug_when>
    <thetext>On patch number 4 I fixed the encoding by intercepting the content meta attribute and replacing it with UTF-8 (as well as the CSS charset) per Adam suggestion.
I still need to add the new files to all build systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390376</commentid>
    <comment_count>25</comment_count>
      <attachid>90562</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 15:06:11 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:127
&gt;&gt;&gt; +    appendAttribute(out, element, *attribute, namespaces);
&gt;&gt; 
&gt;&gt; This isn&apos;t quite correct in the case of an &lt;object&gt; tag, which uses the data attribute for the frame&apos;s URL.  HTMLFrameElementBase::isURLAttribute exists to solve this problem in other places.  See also HTMLObjectElement::imageSourceAttributeName for a slightly different solution to a similar problem.
&gt; 
&gt; I see. Since there is no getURLAttribute method I ended up iterating over the attributes and calling isURLAttribute to figure out the right one. Less than ideal, but I am not sure what else to do (short of introducing a new getURLAttribute method to Element).

You can add the method to HTMLFrameOwnerElement, right?

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:163
&gt;&gt;&gt; +    if (!url.isValid() || url == blankURL()) {
&gt;&gt; 
&gt;&gt; This should use the protocolIs check instead of comparing against blankURL.
&gt; 
&gt; Switched to protocolIs(&quot;about&quot;).
&gt; Do you know if there could be cases where an frame loads something other than about:blank?

Sure.  WebKit treats about:foo just like about:blank.

&lt;iframe src=&quot;about:foo&quot;&gt;&lt;/script&gt;

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:168
&gt;&gt;&gt; +    if (m_resourceURLs.contains(url)) {
&gt;&gt; 
&gt;&gt; Maybe we should convert all the URLs be unique?
&gt; 
&gt; Yeah, we could unique frame URLs but that would require some more changes to MarkupAccumulator.
&gt; I&apos;ll do that in a subsequent patch if that&apos;s OK with you.

Sounds good.

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:199
&gt;&gt;&gt; +                KURL url = document-&gt;completeURL(linkElement-&gt;getAttribute(HTMLNames::hrefAttr));
&gt;&gt; 
&gt;&gt; This isn&apos;t really correct.  There might have been a redirect.  You probably want StyleSheet::finalURL, but that might cause problems when loading the style sheet...  I guess it depends on how we deserialize these.  I&apos;m not sure what to do here.
&gt; 
&gt; I am not sure I understand the problem.
&gt; Let&apos;s say the page has:
&gt; &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;styles.css&quot; /&gt;
&gt; and styles.css is a redirect to something else.
&gt; As long as the link is serialized as is (without it&apos;s href being resolved), then its URL will match the URL we are using for the CSS resource. And during deserialization, they&apos;ll still match.

Right, the danger is that you&apos;re taking bytes that you got from one URL and saying that they came from another URL.  That&apos;s the first step towards a security vulnerability.  Once we re-write all the URLs to use dummy URLs, we won&apos;t have that problem.

&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:207
&gt;&gt;&gt; +                serializeCSSStyleSheet(static_cast&lt;CSSStyleSheet*&gt;(sheet), KURL());
&gt;&gt; 
&gt;&gt; What about style attributes?  Seems like you&apos;ll want to grab the images and such out of those as well.
&gt; 
&gt; It does it as part of the serialization process. (this is validated by the WebPageNewSerializeTest::CSSResources test).

Ah, great.  I missed that.

&gt;&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:195
&gt;&gt;&gt; +        resource.data = WebCString(iter-&gt;data-&gt;data(), iter-&gt;data-&gt;size());
&gt;&gt; 
&gt;&gt; This creates a copy of all the images?  There isn&apos;t a way to just take a reference to the SharedData ?
&gt; 
&gt; Yes, it copies all resources.
&gt; There is no way in the current Chromium WebKit API to create a wrapper around SharedData.
&gt; I guess I could do that if you think that&apos;s necessary.

Sounds like a performance optimization we could consider in the future.  Perhaps a FIXME comment?

&gt; Source/WebKit/chromium/tests/WebPageNewSerializerTest.cpp:183
&gt; +TEST_F(WebPageNewSerializeTest, CSSResources)

I guess I don&apos;t see how this tests the case I was thinking about.  What about:

&lt;div style=&quot;width:10; heigh:10; background-image: url(blue_background.png)&quot;&gt;Hi&lt;/div&gt;

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390396</commentid>
    <comment_count>26</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 15:26:30 -0700</bug_when>
    <thetext>Attachment 90610 did not build on chromium:
Build output: http://queues.webkit.org/results/8498121</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390436</commentid>
    <comment_count>27</comment_count>
      <attachid>90610</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 16:21:22 -0700</bug_when>
    <thetext>Comment on attachment 90610
Addressed Adam&apos;s and Alexey&apos;s comments

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

I feel like I&apos;m nit-picking at this point.  The main things to address are moving the function to HTMLFrameOwnerElement and style attributes.

&gt;&gt; Source/WebCore/editing/MarkupAccumulator.h:96
&gt;&gt;      void appendOpenTag(Vector&lt;UChar&gt;&amp; out, Element* element, Namespaces*);
&gt;&gt;      void appendCloseTag(Vector&lt;UChar&gt;&amp; out, Element* element);
&gt;&gt; -    void appendAttribute(Vector&lt;UChar&gt;&amp; out, Element* element, const Attribute&amp;, Namespaces*);
&gt;&gt; +    virtual void appendAttribute(Vector&lt;UChar&gt;&amp; out, Element* element, const Attribute&amp;, Namespaces*);
&gt; 
&gt; The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I&apos;d fix all the instance of this issue in this block of code.

&gt; Source/WebCore/page/PageSerializer.cpp:65
&gt; +static const WebCore::QualifiedName* frameOwnerSrcAttributes[] = {

This array does not appear to be used.

&gt; Source/WebCore/page/PageSerializer.cpp:81
&gt; +    // FIXME: ideally HTMLFrameOwnerElement would have a method to return the URL attribute name.

I&apos;d just add this method to HTMLFrameOwnerElement

&gt; Source/WebCore/page/PageSerializer.cpp:133
&gt; +    if (element-&gt;hasTagName(HTMLNames::metaTag) &amp;&amp; attribute.name() == HTMLNames::contentAttr) {

Do we want to make sure the http-equiv attribute of this element is Content-Type ?  Otherwise, you could be munging other http-equiv meta tags.

&gt; Source/WebCore/page/PageSerializer.cpp:136
&gt; +        if (charset != &quot;utf-8&quot; &amp;&amp; charset != &quot;utf8&quot;) {

Doe we need a case-insensitive compare here?  If not, we should ASSERT that charset is lowercase.

&gt; Source/WebCore/page/PageSerializer.cpp:142
&gt; +    }

This isn&apos;t the only case.  There&apos;s also:

&lt;meta charset=&quot;utf-8&quot;&gt;

&gt; Source/WebCore/page/PageSerializer.cpp:166
&gt; +    if (!urlAttribute) {
&gt; +        LOG_ERROR(&quot;No URL attribute found for frame owner.&quot;);
&gt; +        return;
&gt; +    }

Why is this an error?  It can definitely happen.

&gt; Source/WebCore/page/PageSerializer.cpp:219
&gt; +    Vector&lt;Node*&gt; nodes;
&gt; +    SerializerMarkupAccumulator accumulator(this, &amp;nodes);
&gt; +    CString frameHTML = accumulator.serializeNodes(document-&gt;documentElement(), 0, IncludeNode).utf8();    
&gt; +    m_resources-&gt;append(Resource(url, String(&quot;text/html&quot;), SharedBuffer::create(frameHTML.data(), frameHTML.length())));
&gt; +    m_resourceURLs.add(url);

I wonder if you want to add a &lt;meta charset=&quot;UTF-8&quot;&gt; to the serialization just in case there&apos;s no meta element.

Also, is document always text/html?  What if it&apos;s application/svg+xml ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390448</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 16:32:52 -0700</bug_when>
    <thetext>Attachment 90610 did not build on chromium:
Build output: http://queues.webkit.org/results/8497170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390465</commentid>
    <comment_count>29</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-21 16:58:33 -0700</bug_when>
    <thetext>&gt; On patch number 4 I fixed the encoding by intercepting the content meta attribute and replacing 
&gt; it with UTF-8 (as well as the CSS charset) per Adam suggestion.

What I was saying was that ideally, one should preserve the original encoding if they want to restore the page later. Encoding affects the behavior, so changing it to utf-8 will break some pages, even though they will be decoded without problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390492</commentid>
    <comment_count>30</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 17:35:58 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; &gt; On patch number 4 I fixed the encoding by intercepting the content meta attribute and replacing 
&gt; &gt; it with UTF-8 (as well as the CSS charset) per Adam suggestion.
&gt; 
&gt; What I was saying was that ideally, one should preserve the original encoding if they want to restore the page later. Encoding affects the behavior, so changing it to utf-8 will break some pages, even though they will be decoded without problem.

Did you have something specific in mind?  This approach changes a lot of things that are observable to the page, so some number of pages will break.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390559</commentid>
    <comment_count>31</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-21 19:54:35 -0700</bug_when>
    <thetext>From the top of my head, I have two variants:
- encode documents using document.charset, add a META to make sure that we decode correctly (least confusing);
- encode using utf-8, change META if it exists, store the encoding out of band (or perhaps in a private attribute), so that it could be restored after parsing.

The first option seems preferable.

&gt; This approach changes a lot of things that are observable to the page, so some number of pages will break.

Yes, I&apos;m not pushing this as a pre-requisite for landing this patch. But encoding is something that may be easier to get right from the start than to change later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390565</commentid>
    <comment_count>32</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 20:13:43 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; From the top of my head, I have two variants:
&gt; - encode documents using document.charset, add a META to make sure that we decode correctly (least confusing);
&gt; - encode using utf-8, change META if it exists, store the encoding out of band (or perhaps in a private attribute), so that it could be restored after parsing.
&gt; 
&gt; The first option seems preferable.

The approach in Jay&apos;s previous patch is like (2) but it doesn&apos;t restore the encoding after parsing.  What goes wrong if we don&apos;t restore the encoding?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390584</commentid>
    <comment_count>33</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-21 20:42:03 -0700</bug_when>
    <thetext>I briefly mentioned that in comment 18. Some uses I could remember or easily find:
- for encoding form data;
- by XSSFilter, basically for the same purpose;
- by Document::completeURL();
- as a default encoding for some text-based subresources (which would obviously affect new one that are dynamically added after restoring);
- it changes rendering of a backslash/Yen character in Japanese.

Losing the encoding would cause a number of subtle bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390610</commentid>
    <comment_count>34</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-21 22:12:58 -0700</bug_when>
    <thetext>Ok.  Jay, what do you think about option (1):

- encode documents using document.charset, add a META to make sure that we decode correctly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390794</commentid>
    <comment_count>35</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 08:50:59 -0700</bug_when>
    <thetext>Option 1 sounds good, I&apos;ll go ahead and implement it this way.
I guess it probably does not matter for CSS subresources whether we enforce the charset or whether we force UTF-8, but I guess for consistency I&apos;ll preserve the encoding for these as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391027</commentid>
    <comment_count>36</comment_count>
      <attachid>90753</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 13:49:26 -0700</bug_when>
    <thetext>Created attachment 90753
Now keeping original files encoding

With this new patch we now keep the original charset of the page and append our own meta tag to specify it (and we remove any meta tag specifying the charset).
Also addressed other comments from Adam and Alexey.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391030</commentid>
    <comment_count>37</comment_count>
      <attachid>90562</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 13:52:00 -0700</bug_when>
    <thetext>Comment on attachment 90562
Moved code to WebCore.

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

&gt;&gt;&gt;&gt; Source/WebCore/page/PageSerializer.cpp:127
&gt;&gt;&gt;&gt; +    appendAttribute(out, element, *attribute, namespaces);
&gt;&gt;&gt; 
&gt;&gt;&gt; This isn&apos;t quite correct in the case of an &lt;object&gt; tag, which uses the data attribute for the frame&apos;s URL.  HTMLFrameElementBase::isURLAttribute exists to solve this problem in other places.  See also HTMLObjectElement::imageSourceAttributeName for a slightly different solution to a similar problem.
&gt;&gt; 
&gt;&gt; I see. Since there is no getURLAttribute method I ended up iterating over the attributes and calling isURLAttribute to figure out the right one. Less than ideal, but I am not sure what else to do (short of introducing a new getURLAttribute method to Element).
&gt; 
&gt; You can add the method to HTMLFrameOwnerElement, right?

OK, done. Had to name it getFrameURLAttribute() as there is already an Element::getURLAttribute method.

&gt;&gt;&gt;&gt; Source/WebKit/chromium/src/WebPageSerializer.cpp:195
&gt;&gt;&gt;&gt; +        resource.data = WebCString(iter-&gt;data-&gt;data(), iter-&gt;data-&gt;size());
&gt;&gt;&gt; 
&gt;&gt;&gt; This creates a copy of all the images?  There isn&apos;t a way to just take a reference to the SharedData ?
&gt;&gt; 
&gt;&gt; Yes, it copies all resources.
&gt;&gt; There is no way in the current Chromium WebKit API to create a wrapper around SharedData.
&gt;&gt; I guess I could do that if you think that&apos;s necessary.
&gt; 
&gt; Sounds like a performance optimization we could consider in the future.  Perhaps a FIXME comment?

Added FIXME comment.

&gt;&gt; Source/WebKit/chromium/tests/WebPageNewSerializerTest.cpp:183
&gt;&gt; +TEST_F(WebPageNewSerializeTest, CSSResources)
&gt; 
&gt; I guess I don&apos;t see how this tests the case I was thinking about.  What about:
&gt; 
&gt; &lt;div style=&quot;width:10; heigh:10; background-image: url(blue_background.png)&quot;&gt;Hi&lt;/div&gt;
&gt; 
&gt; ?

I does it, see css_test_page.html line 80.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391032</commentid>
    <comment_count>38</comment_count>
      <attachid>90610</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 13:53:22 -0700</bug_when>
    <thetext>Comment on attachment 90610
Addressed Adam&apos;s and Alexey&apos;s comments

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

&gt;&gt;&gt; Source/WebCore/editing/MarkupAccumulator.h:96
&gt;&gt;&gt; +    virtual void appendAttribute(Vector&lt;UChar&gt;&amp; out, Element* element, const Attribute&amp;, Namespaces*);
&gt;&gt; 
&gt;&gt; The parameter name &quot;element&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; I&apos;d fix all the instance of this issue in this block of code.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:65
&gt;&gt; +static const WebCore::QualifiedName* frameOwnerSrcAttributes[] = {
&gt; 
&gt; This array does not appear to be used.

Ah right. Removed.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:81
&gt;&gt; +    // FIXME: ideally HTMLFrameOwnerElement would have a method to return the URL attribute name.
&gt; 
&gt; I&apos;d just add this method to HTMLFrameOwnerElement

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:133
&gt;&gt; +    if (element-&gt;hasTagName(HTMLNames::metaTag) &amp;&amp; attribute.name() == HTMLNames::contentAttr) {
&gt; 
&gt; Do we want to make sure the http-equiv attribute of this element is Content-Type ?  Otherwise, you could be munging other http-equiv meta tags.

Good point. Now that we are keeping the original encoding I am skipping any &lt;meta http-equiv=&quot;Content-Type&quot;...

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:136
&gt;&gt; +        if (charset != &quot;utf-8&quot; &amp;&amp; charset != &quot;utf8&quot;) {
&gt; 
&gt; Doe we need a case-insensitive compare here?  If not, we should ASSERT that charset is lowercase.

This code is gone.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:142
&gt;&gt; +    }
&gt; 
&gt; This isn&apos;t the only case.  There&apos;s also:
&gt; 
&gt; &lt;meta charset=&quot;utf-8&quot;&gt;

Also excluding these now.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:166
&gt;&gt; +    }
&gt; 
&gt; Why is this an error?  It can definitely happen.

OK, removed the LOG_ERROR. I was not sure which kind of frame owner would not have a src (since frame, object, embed would).

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:219
&gt;&gt; +    m_resourceURLs.add(url);
&gt; 
&gt; I wonder if you want to add a &lt;meta charset=&quot;UTF-8&quot;&gt; to the serialization just in case there&apos;s no meta element.
&gt; 
&gt; Also, is document always text/html?  What if it&apos;s application/svg+xml ?

I added a method to Document to get the contentType and it deals with xhtml and svg, and use that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391059</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 14:22:46 -0700</bug_when>
    <thetext>Attachment 90753 did not build on chromium:
Build output: http://queues.webkit.org/results/8495506</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391081</commentid>
    <comment_count>40</comment_count>
      <attachid>90753</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 14:40:07 -0700</bug_when>
    <thetext>Comment on attachment 90753
Now keeping original files encoding

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

&gt; Source/WebCore/dom/Document.cpp:1128
&gt; +String Document::contentType()
&gt; +{
&gt; +    String content;
&gt; +    if (m_document-&gt;isXHTMLDocument())
&gt; +        content = &quot;application/xhtml+xml&quot;;
&gt; +    else if (m_document-&gt;isSVGDocument())
&gt; +        content = &quot;image/svg+xml&quot;;
&gt; +    else
&gt; +        content = &quot;text/html&quot;;
&gt; +
&gt; +    return makeString(content, &quot;; charset=&quot;, charset());
&gt; +}

This doesn&apos;t seem right.  For example, what if the Content-Type is text/plain?  You need to ask the ResourceResponse that contained the document originally.  You probably need to ask DocumentLoader.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391088</commentid>
    <comment_count>41</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-22 14:47:29 -0700</bug_when>
    <thetext>I don&apos;t see a problem with that. Current document encoding is authoritative, as that&apos;s what is used in all the cases I mentioned. An HTTP  response may not have any charset in Content-Type, or it may have an invalid one.

On the other hand, I don&apos;t think that this function is needed. Can&apos;t we just use &lt;meta charset&gt;, not &lt;meta http-equiv&gt;?

Also, &lt;meta&gt;s of all sorts only work in HTML. You should be adding an encoding to &lt;?xml?&gt; for XML, and there is nothing that can be done for text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391106</commentid>
    <comment_count>42</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 14:57:22 -0700</bug_when>
    <thetext>The reason I added this function is because in order to add the meta tag as we discussed before, I removed any existing meta-tags with a content-type.
May be that&apos;s a bad idea?
It seemed just trickier to add the meta only if it&apos;s not there. (I would have to wait for the end of the header, and I assumed such a tag should probably be one of the first tags in teh header as &lt;title&gt; and friends do need the encoding).
 
As a result of removing the existing the content-type meta tags, I removed the mime type of the document which is what I am attempting to regenerate.
My approach seems broken.

May be I should preparse the header before I even start serializing the DOM to figure-out if I need to specify the charset myself?
What do you guys think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391161</commentid>
    <comment_count>43</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-22 15:37:39 -0700</bug_when>
    <thetext>What is the serialization format? Is it something that should be standardized?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391225</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 16:38:48 -0700</bug_when>
    <thetext>Attachment 90753 did not build on chromium:
Build output: http://queues.webkit.org/results/8495597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391229</commentid>
    <comment_count>45</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 16:44:05 -0700</bug_when>
    <thetext>&gt; What is the serialization format? Is it something that should be standardized?

The serialization format is HTML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391272</commentid>
    <comment_count>46</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 17:39:32 -0700</bug_when>
    <thetext>Attachment 90753 did not build on chromium:
Build output: http://queues.webkit.org/results/8487928</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391276</commentid>
    <comment_count>47</comment_count>
      <attachid>90815</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-22 17:43:55 -0700</bug_when>
    <thetext>Created attachment 90815
Only specifying the charset if the page does not do so.

I now only add the charset to pages that don&apos;t specify it already.
Also I specify the XML charset for XML documents (including XHTML and SVG) and ignore other types.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391346</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 20:04:09 -0700</bug_when>
    <thetext>Attachment 90815 did not build on chromium:
Build output: http://queues.webkit.org/results/8497594</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391394</commentid>
    <comment_count>49</comment_count>
      <attachid>90815</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-22 21:36:44 -0700</bug_when>
    <thetext>Comment on attachment 90815
Only specifying the charset if the page does not do so.

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

I have a number of comments, but I only looked into a few aspects of  the patch.

&gt; Source/WebCore/ChangeLog:13
&gt; +        * Android.mk:
&gt; +        * CMakeLists.txt:
&gt; +        * WebCore.gypi:

Still need many more build systems.

&gt; Source/WebCore/ChangeLog:26
&gt; +        * page/PageSerializer.h: Added.

Despite trying to follow this patch for a while now, I&apos;m still not sure how to explain the relation of new code to what we have now (e.g. Web archives). I don&apos;t have any specific suggestions or requests, but if you could make it more clear, that would be great.

&gt; Source/WebCore/dom/Document.cpp:1116
&gt; +String Document::mimeType() const

This should be more explicit about what it returns. Like maybe suggestedMIMETypeForSerialization?

&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:114
&gt; +    for (size_t i = 0; i &lt; attributeMap-&gt;length(); ++i) {
&gt; +        Attribute* attribute = attributeMap-&gt;attributeItem(i);
&gt; +        if (isURLAttribute(attribute))

I bet we can do much better than iterate. Also, it&apos;s really confusing what this function even does. getSourceURLAttributeNameIfPresent?

From briefly looking at call sites, it appears that those should check that the elements are instances of HTMLFrameElementBase somehow, and then just use src. They won&apos;t know what to do with potential future frame owner elements anyway, so being future-proof beyond adding assertions doesn&apos;t really help.

&gt; Source/WebCore/page/PageSerializer.cpp:91
&gt; +    if (element-&gt;hasAttribute(HTMLNames::charsetAttr))
&gt; +        return true;
&gt; +
&gt; +    String attributeValue;
&gt; +    if (!(attributeValue = element-&gt;getAttribute(HTMLNames::http_equivAttr)).isNull()
&gt; +        &amp;&amp; attributeValue.lower().stripWhiteSpace() == &quot;content-type&quot;)
&gt; +        return true;

This logic doesn&apos;t match HTML5. Actual parsing logic lives in HTMLMetaCharsetParser, and I think that this check should be unified with it.

&gt; Source/WebCore/page/PageSerializer.cpp:119
&gt; +    // MarkupAccumulator does not serialie the &lt;?xml ... line, so we add it explicitely to ensure the right encoding is specified.

Typos: serialie, explicitely.

I suspect that it&apos;s a bug that MarkupAccumulator doesn&apos;t do that. Specifically, bug 25206 tracks a consequence of that.

You should add guards (at least in the form of regression tests) to avoid getting two XML declarations - currently, this patch doesn&apos;t include any XML tests AFAICS. Obviously, it would be even better if you&apos;d be willing to investigate and fix this in a prequel patch.

&gt; Source/WebCore/page/PageSerializer.cpp:157
&gt; +        String metaStart(&quot;&lt;meta charset=\&quot;&quot;);

I&apos;ve lost track of what the best way to build strings is today. StringBuilder perhaps? Or just &quot;&lt;meta charset=\&quot;&quot; + m_document-&gt;charset() + &quot;\&quot;&gt;&quot;?

&gt; Source/WebCore/page/PageSerializer.cpp:237
&gt; +    TextEncoding&amp; textEncoding = TextEncoding(document-&gt;charset());

TextEncoding textEncoding(document-&gt;charset());

&gt; Source/WebCore/page/PageSerializer.cpp:243
&gt; +    CString frameHTML = textEncoding.encode(text.characters(), text.length(), QuestionMarksForUnencodables);

Why QuestionMarksForUnencodables here and elsewhere? The page may have characters outside the original encoding repertoire inserted via DOM. It&apos;s very easy to avoid losing information by using other options here.

&gt; Source/WebCore/page/PageSerializer.cpp:307
&gt; +        TextEncoding&amp; textEncoding = TextEncoding(styleSheet-&gt;charset());

TextEncoding textEncoding(styleSheet-&gt;charset());

&gt; Source/WebCore/page/PageSerializer.cpp:314
&gt; +        m_resources-&gt;append(Resource(url, String(&quot;text/css&quot;), SharedBuffer::create(text.data(), text.length())));

We probably need need to ensure @charset for those. Thankfully, it&apos;s much easier than HTML! It&apos;s also less important, and could easily wait for a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391414</commentid>
    <comment_count>50</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-22 22:25:24 -0700</bug_when>
    <thetext>&gt; Despite trying to follow this patch for a while now, I&apos;m still not sure how to explain the relation of new code to what we have now (e.g. Web archives). I don&apos;t have any specific suggestions or requests, but if you could make it more clear, that would be great.

Web archive is an Apple-proprietary format, which is coupled to the Objective-C ecosystem (e.g., via the use of NSKeyedEncoder).  MHTML is another serialization format, which is used by IE and Opera.

One perspective is that this mechanism is at a lower layer than the particular final serialization format.  This code serializes the DOM to HTML and encapsulates some subresources (such as images).  You could take the output of this class an complete the serialization to either web archive, MHTML, or some other on-disk format.

There might be some opportunity to re-use some of this mechanism in WebKit&apos;s web archive codepath, but the clients of that code path might want to make different trade-offs (e.g., about inline scripts, as discussed above).  Another perspective is that MarkupAccumulator is doing most of the heavy lifting here and is the most valuable component to re-use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391417</commentid>
    <comment_count>51</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 22:44:55 -0700</bug_when>
    <thetext>Attachment 90815 did not build on chromium:
Build output: http://queues.webkit.org/results/8495723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391433</commentid>
    <comment_count>52</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-22 23:45:54 -0700</bug_when>
    <thetext>Attachment 90815 did not build on chromium:
Build output: http://queues.webkit.org/results/8503062</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391455</commentid>
    <comment_count>53</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-04-23 09:17:23 -0700</bug_when>
    <thetext>FYI one requirement we&apos;ve found necessary that is poorly met by WebArchives is to be able to explode the serialized form into the original files, in order to edit those files to create bug reductions.

Would the current code be usable if we wanted, for example, to create a bundle (directory-based) archive, or a zip archive?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391456</commentid>
    <comment_count>54</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-23 09:20:57 -0700</bug_when>
    <thetext>&gt; Would the current code be usable if we wanted, for example, to create a bundle (directory-based) archive, or a zip archive?

Yep.  Chrome&apos;s current &quot;Save As (complete)&quot; feature produces a directory-based representation of the page.  The main HTML file is stored in next to a folder containing the subresources as individual files.  In this model, the exact on-disk representation is chosen by the embedder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391847</commentid>
    <comment_count>55</comment_count>
      <attachid>90815</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-25 12:28:32 -0700</bug_when>
    <thetext>Comment on attachment 90815
Only specifying the charset if the page does not do so.

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        * WebCore.gypi:
&gt; 
&gt; Still need many more build systems.

OK, I tried to add all of them. I am still missing the xcode one, I&apos;ll do it next (I don&apos;t think I can do it in a text editor without screwing things up, so I&apos;ll have to move my patch to my Mac).

&gt;&gt; Source/WebCore/ChangeLog:26
&gt;&gt; +        * page/PageSerializer.h: Added.
&gt; 
&gt; Despite trying to follow this patch for a while now, I&apos;m still not sure how to explain the relation of new code to what we have now (e.g. Web archives). I don&apos;t have any specific suggestions or requests, but if you could make it more clear, that would be great.

As Adam said, the goal is to provide another way to save a page to disk. One of my objective is to have a subsequent patch that adds MHTML generation support (by leveraging the Archive/ArchiveFactory classes).

&gt;&gt; Source/WebCore/dom/Document.cpp:1116
&gt;&gt; +String Document::mimeType() const
&gt; 
&gt; This should be more explicit about what it returns. Like maybe suggestedMIMETypeForSerialization?

I am happy to change the name, but is the MIME type returned only specific to serialization? Are there cases where the document MIME type would not be considered to be one of these?

&gt;&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:114
&gt;&gt; +        if (isURLAttribute(attribute))
&gt; 
&gt; I bet we can do much better than iterate. Also, it&apos;s really confusing what this function even does. getSourceURLAttributeNameIfPresent?
&gt; 
&gt; From briefly looking at call sites, it appears that those should check that the elements are instances of HTMLFrameElementBase somehow, and then just use src. They won&apos;t know what to do with potential future frame owner elements anyway, so being future-proof beyond adding assertions doesn&apos;t really help.

I believe since object and embed tags can be used as frames, then we cannot assume these tags are going to be HTMLFrameElementBase. And in the object tag case, the attribute to look at is not src but data.
I think ideally HTMLFrameOwnerElement would have a method that returns the actual URL attribute instead of isURLAttribute(). Implementing this (if this is actually the right think to do) might impact several more files, and I&apos;d rather not do it as part this patch if that&apos;s OK with you.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:91
&gt;&gt; +        return true;
&gt; 
&gt; This logic doesn&apos;t match HTML5. Actual parsing logic lives in HTMLMetaCharsetParser, and I think that this check should be unified with it.

I tried to unify the code, but it turned out I had to use a Vector to unify the attributes which are of different types in the 2 locations. Please let me know if you can think of a better way to do this.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:119
&gt;&gt; +    // MarkupAccumulator does not serialie the &lt;?xml ... line, so we add it explicitely to ensure the right encoding is specified.
&gt; 
&gt; Typos: serialie, explicitely.
&gt; 
&gt; I suspect that it&apos;s a bug that MarkupAccumulator doesn&apos;t do that. Specifically, bug 25206 tracks a consequence of that.
&gt; 
&gt; You should add guards (at least in the form of regression tests) to avoid getting two XML declarations - currently, this patch doesn&apos;t include any XML tests AFAICS. Obviously, it would be even better if you&apos;d be willing to investigate and fix this in a prequel patch.

Typo fixed.
OK, I added a regression test for now.
I think I have I know how to fix the MarkupAccumulator bug, I&apos;ll try to do that in a follow-up patch.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:157
&gt;&gt; +        String metaStart(&quot;&lt;meta charset=\&quot;&quot;);
&gt; 
&gt; I&apos;ve lost track of what the best way to build strings is today. StringBuilder perhaps? Or just &quot;&lt;meta charset=\&quot;&quot; + m_document-&gt;charset() + &quot;\&quot;&gt;&quot;?

Switched to use makeString.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:237
&gt;&gt; +    TextEncoding&amp; textEncoding = TextEncoding(document-&gt;charset());
&gt; 
&gt; TextEncoding textEncoding(document-&gt;charset());

Fixed.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:243
&gt;&gt; +    CString frameHTML = textEncoding.encode(text.characters(), text.length(), QuestionMarksForUnencodables);
&gt; 
&gt; Why QuestionMarksForUnencodables here and elsewhere? The page may have characters outside the original encoding repertoire inserted via DOM. It&apos;s very easy to avoid losing information by using other options here.

OK, I switched to using EntitiesForUnencodables that will encode characters outside of the encoding repertoire to XML entity.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:307
&gt;&gt; +        TextEncoding&amp; textEncoding = TextEncoding(styleSheet-&gt;charset());
&gt; 
&gt; TextEncoding textEncoding(styleSheet-&gt;charset());

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:314
&gt;&gt; +        m_resources-&gt;append(Resource(url, String(&quot;text/css&quot;), SharedBuffer::create(text.data(), text.length())));
&gt; 
&gt; We probably need need to ensure @charset for those. Thankfully, it&apos;s much easier than HTML! It&apos;s also less important, and could easily wait for a follow-up patch.

OK, I added a FIXME and will keep that for a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391848</commentid>
    <comment_count>56</comment_count>
      <attachid>90935</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-25 12:29:40 -0700</bug_when>
    <thetext>Created attachment 90935
Addressing Alexey&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391850</commentid>
    <comment_count>57</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-25 12:49:43 -0700</bug_when>
    <thetext>Attachment 90935 did not build on qt:
Build output: http://queues.webkit.org/results/8506427</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391883</commentid>
    <comment_count>58</comment_count>
      <attachid>90935</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-25 14:12:38 -0700</bug_when>
    <thetext>Comment on attachment 90935
Addressing Alexey&apos;s comments

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

I feel like we&apos;re getting the point where we should land this patch and iterate with incremental patches.  (Minor nits below.)

&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:118
&gt; +TextEncoding HTMLMetaCharsetParser::getEncodingFromMetaAttributes(const Vector&lt;pair&lt;AtomicString, String&gt; &gt;&amp; attributes)

We usually don&apos;t start functions with the word &quot;get&quot;.

&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.h:52
&gt; +    static TextEncoding getEncodingFromMetaAttributes(const Vector&lt;pair&lt;AtomicString, String&gt; &gt;&amp;);

const Vector&lt;pair&lt;AtomicString, String&gt; &gt; is not a very semantic type...

&gt; Source/WebCore/page/PageSerializer.cpp:57
&gt; +

We shouldn&apos;t have this blank line here.

&gt; Source/WebCore/page/PageSerializer.cpp:128
&gt; +        if (head) {

Prefer early return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391933</commentid>
    <comment_count>59</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-25 15:30:03 -0700</bug_when>
    <thetext>&gt;&gt; This should be more explicit about what it returns. Like maybe suggestedMIMETypeForSerialization?
&gt;
&gt; I am happy to change the name, but is the MIME type returned only specific to serialization? Are there 
&gt; cases where the document MIME type would not be considered to be one of these?

Maybe suggestedMIMEType() is OK indeed. mimeType() feels like it is &quot;real&quot;, original or authoritative in some way, which is probably more than what is offered here.

Another case where we need a MIME type is to fix bug 11049. I haven&apos;t checked if what you add matches what we need there (we&apos;ll need the test both spec and important browsers). Maybe you&apos;ll want to fix that bug as a follow-up, too?

&gt; I tried to unify the code, but it turned out I had to use a Vector to unify the attributes which are of 
&gt; different types in the 2 locations. Please let me know if you can think of a better way to do this.

This is not exactly what I had in mind. I&apos;ve been thinking about just having a check for every single &lt;meta&gt; be unified with HTMLCharsetParser, not about passing all metas to it. Not sure which is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>391966</commentid>
    <comment_count>60</comment_count>
      <attachid>90935</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-25 15:48:09 -0700</bug_when>
    <thetext>Comment on attachment 90935
Addressing Alexey&apos;s comments

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

&gt; This is not exactly what I had in mind

Please ignore this comment - I&apos;ve now looked at the code, and understood what it&apos;s doing.

I agree that this should be landed sooner rather than later, and I avoided nitpicking on actual serialization code. r- for still not having all project file changes, and I think that my code quality comments below need to be addressed, too. But we are getting close, hopefully the next iteration will be landable.

&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:116
&gt; +    for (size_t i = 0; i &lt; attributeMap-&gt;length(); ++i) {
&gt; +        Attribute* attribute = attributeMap-&gt;attributeItem(i);
&gt; +        if (isURLAttribute(attribute))
&gt; +            return &amp;(attribute-&gt;name());
&gt; +    }

This still stands out to me as something that should be fixed in initial patch. Is there some difficulty getting rid of the loop? The only non-null result this functions can ever return is srcAttr, so why does it even exist?

&gt;&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:118
&gt;&gt; +TextEncoding HTMLMetaCharsetParser::getEncodingFromMetaAttributes(const Vector&lt;pair&lt;AtomicString, String&gt; &gt;&amp; attributes)
&gt; 
&gt; We usually don&apos;t start functions with the word &quot;get&quot;.

Yes, in WebKit coding style, &quot;get...&quot; is for functions that return a result via a reference (or pointer) argument.

&gt; Source/WebCore/page/PageSerializer.cpp:74
&gt; +    for (size_t i = 0; i &lt; WTF_ARRAY_LENGTH(ignoredTags); ++i) {
&gt; +        if (element-&gt;hasTagName(*ignoredTags[i]))
&gt; +            return true;
&gt; +    }
&gt; +    return false;

I suggest changing this to:

    return element-&gt;hasTagName(HTMLNames::scriptTag) || element-&gt;hasTagName(HTMLNames:: noscriptTag);

It&apos;s much shorter, and the current code isn&apos;t scalable anyway (you&apos;d need to start using a HashMap with many ignored tags).

&gt; Source/WebCore/page/PageSerializer.cpp:107
&gt; +    PageSerializer* m_serializer;

What guarantees that this doesn&apos;t become a dangling pointer?

&gt; Source/WebCore/page/PageSerializer.cpp:108
&gt; +    Document* m_document;

And this?

&gt; Source/WebCore/page/PageSerializer.cpp:124
&gt; +    // HTML might or not have their encoding specified, we&apos;ll add it if it&apos;s missing.

This is not sufficient. It is very common to have a &lt;meta&gt; that is wrong - HTTP headers override &lt;meta&gt;, so people leave broken ones in files all the time.

&gt; Source/WebCore/page/PageSerializer.cpp:183
&gt; +    RefPtr&lt;Attribute&gt; attribute = Attribute::create(HTMLNames::srcAttr, url.string());
&gt; +    appendAttribute(out, element, *attribute, namespaces);

Do you really need to use the internal Attribute class directly? What about Element::setAttribute()?

&gt; Source/WebCore/page/PageSerializer.cpp:233
&gt; +    if (!textEncoding.isValid()) {

You can just ASSERT, document-&gt;encoding() is never invalid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392335</commentid>
    <comment_count>61</comment_count>
      <attachid>90935</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 00:37:45 -0700</bug_when>
    <thetext>Comment on attachment 90935
Addressing Alexey&apos;s comments

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

&gt;&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:116
&gt;&gt; +    }
&gt; 
&gt; This still stands out to me as something that should be fixed in initial patch. Is there some difficulty getting rid of the loop? The only non-null result this functions can ever return is srcAttr, so why does it even exist?

As I mentioned in my previous comment, the problem is with object tags that I believe don&apos;t use src but data. SInce I believe this is the only weird case, I simplified the method.

&gt;&gt;&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:118
&gt;&gt;&gt; +TextEncoding HTMLMetaCharsetParser::getEncodingFromMetaAttributes(const Vector&lt;pair&lt;AtomicString, String&gt; &gt;&amp; attributes)
&gt;&gt; 
&gt;&gt; We usually don&apos;t start functions with the word &quot;get&quot;.
&gt; 
&gt; Yes, in WebKit coding style, &quot;get...&quot; is for functions that return a result via a reference (or pointer) argument.

Done.

&gt;&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.h:52
&gt;&gt; +    static TextEncoding getEncodingFromMetaAttributes(const Vector&lt;pair&lt;AtomicString, String&gt; &gt;&amp;);
&gt; 
&gt; const Vector&lt;pair&lt;AtomicString, String&gt; &gt; is not a very semantic type...

Now typedefed.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:57
&gt;&gt; +
&gt; 
&gt; We shouldn&apos;t have this blank line here.

Removed.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:74
&gt;&gt; +    return false;
&gt; 
&gt; I suggest changing this to:
&gt; 
&gt;     return element-&gt;hasTagName(HTMLNames::scriptTag) || element-&gt;hasTagName(HTMLNames:: noscriptTag);
&gt; 
&gt; It&apos;s much shorter, and the current code isn&apos;t scalable anyway (you&apos;d need to start using a HashMap with many ignored tags).

Good idea, done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:107
&gt;&gt; +    PageSerializer* m_serializer;
&gt; 
&gt; What guarantees that this doesn&apos;t become a dangling pointer?

It is an internal class instanciated by PageSerializer that never outlives the PageSerializer or Document.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:124
&gt;&gt; +    // HTML might or not have their encoding specified, we&apos;ll add it if it&apos;s missing.
&gt; 
&gt; This is not sufficient. It is very common to have a &lt;meta&gt; that is wrong - HTTP headers override &lt;meta&gt;, so people leave broken ones in files all the time.

OK, reverted to what I was doing previously, which is to always remove meta charset tags and always add our own.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:128
&gt;&gt; +        if (head) {
&gt; 
&gt; Prefer early return.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:183
&gt;&gt; +    appendAttribute(out, element, *attribute, namespaces);
&gt; 
&gt; Do you really need to use the internal Attribute class directly? What about Element::setAttribute()?

I have tried hard in this patch to do the serialization without modifying the DOM to avoid any unintended consequences.
Wouldn&apos;t setting the src attribute on the frame cause it to load the fake URL?

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:233
&gt;&gt; +    if (!textEncoding.isValid()) {
&gt; 
&gt; You can just ASSERT, document-&gt;encoding() is never invalid.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392342</commentid>
    <comment_count>62</comment_count>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 00:52:02 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; &gt;&gt; This should be more explicit about what it returns. Like maybe suggestedMIMETypeForSerialization?
&gt; &gt;
&gt; &gt; I am happy to change the name, but is the MIME type returned only specific to serialization? Are there 
&gt; &gt; cases where the document MIME type would not be considered to be one of these?
&gt; 
&gt; Maybe suggestedMIMEType() is OK indeed. mimeType() feels like it is &quot;real&quot;, original or authoritative in some way, which is probably more than what is offered here.
OK, changed to sugestedMimeType.

&gt; Another case where we need a MIME type is to fix bug 11049. I haven&apos;t checked if what you add matches what we need there (we&apos;ll need the test both spec and important browsers). Maybe you&apos;ll want to fix that bug as a follow-up, too?
I&apos;ll try to take a look as a follow up.
 
&gt; &gt; I tried to unify the code, but it turned out I had to use a Vector to unify the attributes which are of 
&gt; &gt; different types in the 2 locations. Please let me know if you can think of a better way to do this.
&gt; 
&gt; This is not exactly what I had in mind. I&apos;ve been thinking about just having a check for every single &lt;meta&gt; be unified with HTMLCharsetParser, not about passing all metas to it. Not sure which is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392348</commentid>
    <comment_count>63</comment_count>
      <attachid>91081</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 01:09:36 -0700</bug_when>
    <thetext>Created attachment 91081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392487</commentid>
    <comment_count>64</comment_count>
      <attachid>91081</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-26 08:35:15 -0700</bug_when>
    <thetext>Comment on attachment 91081
Patch

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

Looks good to me.

&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:112
&gt; +    return hasTagName(HTMLNames::objectTag) ? HTMLNames::dataAttr : HTMLNames::srcAttr;

I like this much better without a loop.

This returns a correct result for &lt;embed&gt;, but what about &lt;applet&gt;? As long as this is a method on HTMLFrameOwnerElement, it needs to do the right thing in all cases, and assert that an unexpected case didn&apos;t arise. In page serialization code, it would be more acceptable to only handle the cases you support. Perhaps this can be moved to PageSerializer.cpp.

&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:108
&gt; +    for (HTMLToken::AttributeList::const_iterator iter = tokenAttributes.begin();
&gt; +         iter != tokenAttributes.end(); ++iter) {

This line is sufficiently short, no need to wrap it.

&gt; Source/WebCore/page/PageSerializer.cpp:74
&gt; +        attributes.append(make_pair(item-&gt;name().toString(), item-&gt;value()));

Will this code be fooled by namespaced attributes?

&gt; Source/WebCore/page/PageSerializer.cpp:271
&gt; +        if (!textEncoding.isValid()) {
&gt; +            LOG_ERROR(&quot;Unsupported charset &apos;%s&apos;, defaulting to UTF-8.&quot;, styleSheet-&gt;charset().ascii().data());

Missed this last time. I don&apos;t think that a stylesheet charset can be invalid either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392569</commentid>
    <comment_count>65</comment_count>
      <attachid>91081</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 11:01:41 -0700</bug_when>
    <thetext>Comment on attachment 91081
Patch

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

&gt;&gt; Source/WebCore/html/HTMLFrameOwnerElement.cpp:112
&gt;&gt; +    return hasTagName(HTMLNames::objectTag) ? HTMLNames::dataAttr : HTMLNames::srcAttr;
&gt; 
&gt; I like this much better without a loop.
&gt; 
&gt; This returns a correct result for &lt;embed&gt;, but what about &lt;applet&gt;? As long as this is a method on HTMLFrameOwnerElement, it needs to do the right thing in all cases, and assert that an unexpected case didn&apos;t arise. In page serialization code, it would be more acceptable to only handle the cases you support. Perhaps this can be moved to PageSerializer.cpp.

Moved that code back to PageSerializer (where it was originally)

&gt;&gt; Source/WebCore/html/parser/HTMLMetaCharsetParser.cpp:108
&gt;&gt; +         iter != tokenAttributes.end(); ++iter) {
&gt; 
&gt; This line is sufficiently short, no need to wrap it.

Done.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:74
&gt;&gt; +        attributes.append(make_pair(item-&gt;name().toString(), item-&gt;value()));
&gt; 
&gt; Will this code be fooled by namespaced attributes?

Added a FIXME to look into this as a follow up patch if that&apos;s OK with you.

&gt;&gt; Source/WebCore/page/PageSerializer.cpp:271
&gt;&gt; +            LOG_ERROR(&quot;Unsupported charset &apos;%s&apos;, defaulting to UTF-8.&quot;, styleSheet-&gt;charset().ascii().data());
&gt; 
&gt; Missed this last time. I don&apos;t think that a stylesheet charset can be invalid either.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392571</commentid>
    <comment_count>66</comment_count>
      <attachid>91128</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 11:03:40 -0700</bug_when>
    <thetext>Created attachment 91128
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392581</commentid>
    <comment_count>67</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-26 11:21:32 -0700</bug_when>
    <thetext>Attachment 91128 did not build on qt:
Build output: http://queues.webkit.org/results/8508715</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392594</commentid>
    <comment_count>68</comment_count>
      <attachid>91131</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 11:36:16 -0700</bug_when>
    <thetext>Created attachment 91131
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392612</commentid>
    <comment_count>69</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-26 11:57:21 -0700</bug_when>
    <thetext>Attachment 91131 did not build on qt:
Build output: http://queues.webkit.org/results/8509709</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392627</commentid>
    <comment_count>70</comment_count>
      <attachid>91142</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 12:09:04 -0700</bug_when>
    <thetext>Created attachment 91142
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392661</commentid>
    <comment_count>71</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-26 13:31:31 -0700</bug_when>
    <thetext>Attachment 91128 did not build on mac:
Build output: http://queues.webkit.org/results/8507716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393136</commentid>
    <comment_count>72</comment_count>
      <attachid>91142</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-26 17:05:26 -0700</bug_when>
    <thetext>Comment on attachment 91142
Patch

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

&gt; Source/WebCore/page/PageSerializer.cpp:74
&gt; +        // FIXME: we should deal appropriately with the attribute if they have a namespace.

we =&gt; We

&gt; Source/WebCore/page/PageSerializer.cpp:88
&gt; +    // FIXME: we should support all frame owners including applets.

we =&gt; We</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393183</commentid>
    <comment_count>73</comment_count>
      <attachid>91194</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 17:33:02 -0700</bug_when>
    <thetext>Created attachment 91194
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393188</commentid>
    <comment_count>74</comment_count>
      <attachid>91196</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 17:45:10 -0700</bug_when>
    <thetext>Created attachment 91196
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393350</commentid>
    <comment_count>75</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-26 22:27:40 -0700</bug_when>
    <thetext>Attachment 91196 did not build on mac:
Build output: http://queues.webkit.org/results/8508862</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393368</commentid>
    <comment_count>76</comment_count>
      <attachid>91236</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 23:00:10 -0700</bug_when>
    <thetext>Created attachment 91236
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393371</commentid>
    <comment_count>77</comment_count>
      <attachid>91237</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-26 23:04:55 -0700</bug_when>
    <thetext>Created attachment 91237
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393381</commentid>
    <comment_count>78</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-26 23:26:39 -0700</bug_when>
    <thetext>Attachment 91196 did not build on mac:
Build output: http://queues.webkit.org/results/8513237</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393519</commentid>
    <comment_count>79</comment_count>
      <attachid>91237</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-27 05:55:08 -0700</bug_when>
    <thetext>Comment on attachment 91237
Patch for landing

Rejecting attachment 91237 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;la...&quot; exit_code: 1

Last 500 characters of output:
n/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc ...
Currently at 85045 = c90ce6df6de66c3e8aa4e4647defcc79fbeb71d8
r85046 = 56faf6b1e02973a2afa610db422557d9b295b465
r85047 = 36d92b65972e8c122cdf958588b4d52a4d988a12
r85048 = 9f2306577fb4fcb9c7c377fcc4873aaa774e2e1a
Done rebuilding .git/svn/refs/remotes/origin/master/.rev_map.268f45cc-cd09-0410-ab3c-d52691b4dbfc
First, rewinding head to replay your work on top of it...
Fast-forwarded master to refs/remotes/origin/master.

Full output: http://queues.webkit.org/results/8508948</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>393579</commentid>
    <comment_count>80</comment_count>
      <attachid>91293</attachid>
    <who name="Jay Civelli">jcivelli</who>
    <bug_when>2011-04-27 08:51:41 -0700</bug_when>
    <thetext>Created attachment 91293
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394160</commentid>
    <comment_count>81</comment_count>
      <attachid>91293</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-27 20:36:54 -0700</bug_when>
    <thetext>Comment on attachment 91293
Patch for landing

Rejecting attachment 91293 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
hing file Source/WebKit/chromium/tests/data/pageserializer/import_style_from_link.css
patching file Source/WebKit/chromium/tests/data/pageserializer/import_styles.css
patching file Source/WebKit/chromium/tests/data/pageserializer/link_styles.css
patching file Source/WebKit/chromium/tests/data/pageserializer/simple.xhtml
patching file Source/WebKit/chromium/tests/data/pageserializer/top_frame.html

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8518206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394167</commentid>
    <comment_count>82</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-04-27 21:02:54 -0700</bug_when>
    <thetext>Probably failing on CRLF line endings in vcproj, and will need to be landed manually. By the way, xcodeproj changes are not in ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394314</commentid>
    <comment_count>83</comment_count>
      <attachid>91452</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-28 02:13:46 -0700</bug_when>
    <thetext>Created attachment 91452
patch (updated to avoid Android.mk)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394786</commentid>
    <comment_count>84</comment_count>
      <attachid>91452</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-28 15:04:09 -0700</bug_when>
    <thetext>Comment on attachment 91452
patch (updated to avoid Android.mk)

Clearing flags on attachment: 91452

Committed r85244: &lt;http://trac.webkit.org/changeset/85244&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394787</commentid>
    <comment_count>85</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-28 15:04:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394840</commentid>
    <comment_count>86</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-28 15:52:47 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/85244 might have broken WinCE Release (Build)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90280</attachid>
            <date>2011-04-19 17:34:29 -0700</date>
            <delta_ts>2011-04-19 18:28:49 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>55250</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MzE5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMTkgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2luZyBNYXJrdXBBY2N1bXVsYXRvciBtb3JlIGZsZXhp
YmxlIHNvIHRoYXQgc3ViLWNsYXNzZXMgY2FuCisgICAgICAgIGFsdGVyIHRoZSBnZW5lcmF0ZWQg
SFRNTC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTg5NDcKKworCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorCiAyMDExLTA0LTE5ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB2OCBi
dWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZQogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1l
bnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8v
IEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJp
YnV0ZXMuCisgICAgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFj
ZXMpOworCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gODM2NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDExICs3NCwxMiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0
VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6
ZV90IHRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAg
ICB2b2lkIGNvbmNhdGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBh
cHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
Q3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiByZXN1bHQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKikgeyB9CiAgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGFwcGVu
ZE5vZGVWYWx1ZShWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSos
IEVudGl0eU1hc2spOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBF
bGVtZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODQzMTkp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDM1IEBACisyMDExLTA0LTE5ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGRpbmcgYSBuZXcgQVBJIHRoYXQgbGV0cyB5b3Ugc2VyaWFsaXplIGEgV2ViVmlldyBiYWNrIHRv
IEhUTUwKKyAgICAgICAgYW5kIHJldHJpZXZlIGl0cyByZXNvdXJjZXMuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViSFRNTFNlcmlhbGl6ZXIuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHA6IEFkZGVkLgorICAgICAgICAq
IHNyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuaDogQWRkZWQuCisgICAgICAgICogdGVzdHMvV2Vi
SFRNTFNlcmlhbGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9odG1s
c2VyaWFsaXplcjogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9i
bGFua19mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFs
aXplci9ibHVlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0
bWxzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9odG1sc2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pZnJhbWUyLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxl
cy5jc3M6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvbGlua19z
dHlsZXMuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL29s
LWRvdC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvb3Jh
bmdlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJp
YWxpemVyL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0
YS9odG1sc2VyaWFsaXplci9yZWRfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvc2ltcGxlX3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbDogQWRkZWQuCisgICAg
ICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci91bC1kb3QucG5nOiBBZGRlZC4KKyAgICAg
ICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZzogQWRk
ZWQuCisKIDIwMTEtMDQtMTkgIEV2YW4gTWFydGluICA8ZXZhbkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTQ3MCw2ICs0NzAsOSBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViR2VvbG9jYXRpb25Qb3NpdGlvbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMv
V2ViR2x5cGhDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSGlzdG9yeUl0ZW0u
Y3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViSFRNTFNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJIVFRQQm9keS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViSFRUUExvYWRJbmZvLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJJY29uTG9hZGluZ0NvbXBsZXRpb25JbXBsLmNw
cCcsCkBAIC04NDMsNiArODQ2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYkhUTUxTZXJpYWxpemVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAg
ICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRN
TFNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJIVE1MU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViSFRNTFNlcmlhbGl6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgV2ViSFRNTFNlcmlhbGl6ZXJfaAorI2RlZmluZSBXZWJIVE1MU2VyaWFsaXpl
cl9oCisKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJWaWV3OworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2Vy
aWFsaXplIGFsbCBmcmFtZXMgZnJvbSBhIFdlYlZpZXcgYmFjayB0byBIVE1MLCB3aXRoCisvLyBh
bGwgdGhlIGN1cnJlbnQgQ1NTIHN0YXRlcy4gSXQgYWxzbyByZXRyaWV2ZXMgdGhlIGZyYW1lcycg
cmVzb3VyY2VzIHN1Y2ggYXMKKy8vIGltYWdlcyBhbmQgY3NzIGZpbGVzLgorLy8gSW4gdGhlIHNl
cmlhbGl6ZWQgdmVyc2lvbiwgYW55IEphdmFTY3JpcHQgdGFnIG9yIGxpbmsgaXMgcmVtb3ZlZCAo
ZXZlbnQKKy8vIGhhbmRsZXJzIGFyZSBzdGlsbCBsZWZ0IGluKS4KKworY2xhc3MgV2ViSFRNTFNl
cmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBTZXJpYWxpemVkUmVzb3VyY2UgeworICAg
ICAgICBXZWJVUkwgdXJsOworICAgICAgICBXZWJDU3RyaW5nIG1pbWVUeXBlOworICAgICAgICBX
ZWJDU3RyaW5nIGRhdGE7CisgICAgICAgIFNlcmlhbGl6ZWRSZXNvdXJjZSgpIHsgfQorICAgICAg
ICBTZXJpYWxpemVkUmVzb3VyY2UoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYkNTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBXZWJDU3RyaW5nJiBkYXRhKQorICAgICAgICAgICAgOiB1cmwodXJs
KSwgbWltZVR5cGUobWltZVR5cGUpLCBkYXRhKGRhdGEpIHsgfQorICAgIH07CisKKyAgICAvLyBT
ZXJpYWxpemVzIHRoZSBXZWJWaWV3IGJhY2sgdG8gSFRNTC4gVGhlIGdlbmVyYXRlZCBmaWxlcyBh
cmUgYWRkZWQgdG8gdGhlIHJlc291cmNlcyB2ZWN0b3IuCisgICAgLy8gVGhlIGZpcnN0IHJlc291
cmNlIGluIHRoYXQgdmVjdG9yIGlzIHRoZSB0b3AgZnJhbWUuCisgICAgV0VCS0lUX0FQSSBzdGF0
aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxTZXJpYWxpemVkUmVzb3VyY2U+
KiByZXNvdXJjZXMpOworCitwcml2YXRlOgorICAgIFdlYkhUTUxTZXJpYWxpemVyKCkgeyB9Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViSFRNTFNlcmlhbGl6ZXIuaApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJIVE1MU2VyaWFsaXplcklt
cGwuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXZWJIVE1MU2VyaWFsaXplckltcGwuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdl
VmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVS
dWxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxG
cmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk1JTUVU
eXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgorI2luY2x1ZGUg
IlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAi
VGV4dC5oIgorI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgorI2luY2x1ZGUgIldlYkhUTUxTZXJp
YWxpemVyLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
c3RhdGljIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUqIGlnbm9yZWRUYWdzW10gPSB7Cisg
ICAgJkhUTUxOYW1lczo6c2NyaXB0VGFnLAorICAgICZIVE1MTmFtZXM6Om5vc2NyaXB0VGFnLAor
fTsKKworc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQor
eworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChpZ25vcmVkVGFn
cyk7ICsraSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSgqaWdub3JlZFRhZ3Nb
aV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworY2xhc3MgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3IgOiBwdWJsaWMgTWFya3VwQWNjdW11bGF0b3IgeworcHVibGljOgorICAgIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcihXZWJIVE1MU2VyaWFsaXplckltcGwqLCBWZWN0b3I8Tm9kZSo+
Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRl
eHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQs
IEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0
dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAgIFdlYkhU
TUxTZXJpYWxpemVySW1wbCogbV9zZXJpYWxpemVyOworfTsKKwordm9pZCBXZWJIVE1MU2VyaWFs
aXplcjo6c2VyaWFsaXplKFdlYlZpZXcqIHdlYnZpZXcsIFdlYlZlY3RvcjxXZWJIVE1MU2VyaWFs
aXplcjo6U2VyaWFsaXplZFJlc291cmNlPiogd2ViUmVzb3VyY2VzKQoreworICAgIEZyYW1lKiBm
cmFtZSA9IHN0YXRpY19jYXN0PFdlYkZyYW1lSW1wbCo+KHdlYnZpZXctPm1haW5GcmFtZSgpKS0+
ZnJhbWUoKTsKKworICAgIFZlY3RvcjxXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFsaXplZFJlc291
cmNlPiByZXNvdXJjZXM7CisgICAgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsIHNlcmlhbGl6ZXIoJnJl
c291cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemVGcmFtZShmcmFtZSk7CisKKyAgICAq
d2ViUmVzb3VyY2VzID0gcmVzb3VyY2VzOworfQorCitXZWJIVE1MU2VyaWFsaXplckltcGw6OlNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFdl
YkhUTUxTZXJpYWxpemVySW1wbCogc2VyaWFsaXplciwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCisg
ICAgOiBNYXJrdXBBY2N1bXVsYXRvcihub2RlcywgQWJzb2x1dGVVUkxzKSwgbV9zZXJpYWxpemVy
KHNlcmlhbGl6ZXIpCit7Cit9CisKK1dlYkhUTUxTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30KKwor
dm9pZCBXZWJIVE1MU2VyaWFsaXplckltcGw6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit7CisgICAgRWxlbWVu
dCogcGFyZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQgJiYgIXNo
b3VsZElnbm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFRleHQob3V0LCB0ZXh0KTsKK30KKwordm9pZCBXZWJIVE1MU2VyaWFsaXplckltcGw6OlNl
cmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYg
KCFzaG91bGRJZ25vcmVFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworICAgIC8vIEZJWE1F
OiBmb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2UgY291bGQgcmVwbGFj
ZSB0aGVtIGJ5IGFuIGltYWdlIGZvIHRoZWlyIGN1cnJlbnQgY29udGVudHMuCit9CisKK3ZvaWQg
V2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBO
YW1lc3BhY2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmlmcmFtZVRhZykgJiYgIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpm
cmFtZVRhZykpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZUVsZW1lbnRCYXNlKiBm
cmFtZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVFbGVtZW50QmFzZSo+KGVsZW1lbnQp
OworICAgIEtVUkwgdXJsID0gZnJhbWVFbGVtZW50LT5sb2NhdGlvbigpOworICAgIGlmICh1cmwu
aXNWYWxpZCgpICYmIHVybCAhPSBibGFua1VSTCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBXZSBuZWVkIHRvIGdpdmUgYSBmYWtlIGxvY2F0aW9uIHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5
IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBzZXJpYWxpemVkIGZyYW1lLgorICAgIHVybCA9IG1f
c2VyaWFsaXplci0+Z2V0VVJMRm9yQmxhbmtGcmFtZShmcmFtZUVsZW1lbnQtPmNvbnRlbnRGcmFt
ZSgpKTsKKyAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNyZWF0
ZShIVE1MTmFtZXM6OnNyY0F0dHIsIEF0b21pY1N0cmluZyh1cmwuc3RyaW5nKCkpKTsKKyAgICBh
cHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKK30K
Kwordm9pZCBXZWJIVE1MU2VyaWFsaXplckltcGw6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRW5kVGFnKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5v
ZGUoKSAmJiAhc2hvdWxkSWdub3JlRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgICAgICBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKG5vZGUpOworfQorCitXZWJIVE1MU2VyaWFs
aXplckltcGw6OldlYkhUTUxTZXJpYWxpemVySW1wbChWZWN0b3I8V2ViSFRNTFNlcmlhbGl6ZXI6
OlNlcmlhbGl6ZWRSZXNvdXJjZT4qIHJlc291cmNlcykKKyAgICA6IG1fcmVzb3VyY2VzKHJlc291
cmNlcyksIG1fYmxhbmtGcmFtZUNvdW50ZXIoMCkKK3sKK30KKwordm9pZCBXZWJIVE1MU2VyaWFs
aXplckltcGw6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBLVVJMIHVybCA9IGRvY3VtZW50LT51
cmwoKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgdXJsID09IGJsYW5rVVJMKCkpCisgICAg
ICAgIC8vIEZvciBibGFuayBmcmFtZXMgd2UgZ2VuZXJhdGUgYSBmYWtlIFVSTCBzbyB0aGV5IGNh
biBiZSByZWZlcmVuY2VkIGJ5IHRoZWlyIGNvbnRhaW5pbmcgZnJhbWUuCisgICAgICAgIHVybCA9
IGdldFVSTEZvckJsYW5rRnJhbWUoZnJhbWUpOworCisgICAgaWYgKG1fcmVzb3VyY2VVUkxzLmNv
bnRhaW5zKHVybCkpCisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBoYXZlIDIgZnJhbWUgd2l0
aCB0aGUgc2FtZSBVUkwgYnV0IHdoaWNoIHdlcmUgZHluYW1pY2FsbHkgY2hhbmdlZCBhbmQgaGF2
ZSBub3cKKyAgICAgICAgLy8gICAgICAgIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQg
c2VyaWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlCisg
ICAgICAgIC8vICAgICAgICBjb250YWluaW5nIGZyYW1lLiBBcmchCisgICAgICAgIHJldHVybjsK
KworICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yIGFjY3VtdWxhdG9yKHRoaXMsICZub2Rlcyk7CisgICAgV2ViU3RyaW5nIGZyYW1lSFRNTCA9
IFdlYlN0cmluZyhhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKSk7CisKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFdl
YkhUTUxTZXJpYWxpemVyOjpTZXJpYWxpemVkUmVzb3VyY2UodXJsLCBXZWJDU3RyaW5nKCJ0ZXh0
L2h0bWwiKSwgZnJhbWVIVE1MLnV0ZjgoKSkpOworICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwp
OworCisgICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZXMuYmVnaW4o
KTsgaXRlciAhPSBub2Rlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSAq
aXRlcjsKKyAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQo
bm9kZSk7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5lIHN0eWxlIGFzIGl0
IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNrZ3JvdW5kIGltYWdl
cykuCisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oZWxlbWVudC0+
c3R5bGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxl
bSA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAg
IEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbS0+Z2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZElt
ZyA9IGltYWdlRWxlbS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgIGFkZEltYWdlVG9SZXNv
dXJjZXMoY2FjaGVkSW1nLCB1cmwpOworICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0ciksICJ0ZXh0L2NzcyIpKSB7CisgICAgICAg
ICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtF
bGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtF
bGVtZW50LT5zaGVldCgpOworICAgICAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQo
KSkgeworICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxp
bmtFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICAg
ICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHNoZWV0KSwgdXJsKTsKKyAgICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgc2VyaWFsaXplQ1NT
U3R5bGVTaGVldCB0b29rIGNhcmUgb2YgYWRkaW5nIHRoZSBzdHlsZSBzaGVldCB0byB0aGUgcmVz
b3VyY2VzIHZlY3Rvci4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5
bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4o
ZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+
c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0
KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAgICB9CisgICAgfQorCisgICAg
RnJhbWUqIGNoaWxkRnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7CisgICAgd2hp
bGUgKGNoaWxkRnJhbWUpIHsKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cisg
ICAgICAgIGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCktPm5leHRTaWJsaW5nKCk7Cisg
ICAgfQorfQorCit2b2lkIFdlYkhUTUxTZXJpYWxpemVySW1wbDo6c2VyaWFsaXplQ1NTU3R5bGVT
aGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
U3RyaW5nIGNzc1RleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQt
Pmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc3R5bGVTaGVldC0+
aXRlbShpKTsKKyAgICAgICAgU3RyaW5nIGl0ZW1UZXh0ID0gaXRlbS0+Y3NzVGV4dCgpOworICAg
ICAgICBpZiAoIWl0ZW1UZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY3NzVGV4dC5hcHBl
bmQoaXRlbVRleHQpOworICAgICAgICAgICAgaWYgKGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKSAt
IDEpCisgICAgICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoIlxuXG4iKTsKKyAgICAgICAgfQor
ICAgICAgICAvLyBTb21lIHJ1bGVzIGhhdmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVt
IHRoYXQgd2UgbmVlZCB0byByZXRyaWV2ZS4KKyAgICAgICAgaWYgKGl0ZW0tPmlzSW1wb3J0UnVs
ZSgpKSB7CisgICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxlID0gc3RhdGljX2Nh
c3Q8Q1NTSW1wb3J0UnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgS1VSTCBpbXBvcnRVUkwgPSBz
dHlsZVNoZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbXBvcnRSdWxlLT5ocmVmKCkpOwor
ICAgICAgICAgICAgaWYgKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKGltcG9ydFVSTCkpCisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0
KGltcG9ydFJ1bGUtPnN0eWxlU2hlZXQoKSwgaW1wb3J0VVJMKTsKKyAgICAgICAgfSBlbHNlIGlm
IChpdGVtLT5pc0ZvbnRGYWNlUnVsZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogYWRkIHN1
cHBvcnQgZm9yIGZvbnQgZmFjZSBydWxlLiBJdCBpcyBub3QgY2xlYXIgdG8gbWUgYXQgdGhpcyBw
b2ludCBpZiB0aGUgYWN0dWFsIG90Zi9lb3QgZmlsZSBjYW4KKyAgICAgICAgICAgIC8vICAgICAg
ICBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgQ1NTRm9udEZhY2VSdWxlIG9iamVjdC4KKyAgICAgICAg
fSBlbHNlIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKKyAgICB9
CisKKyAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJs
KSkgeworICAgICAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFdlYkhUTUxTZXJpYWxpemVyOjpTZXJp
YWxpemVkUmVzb3VyY2UodXJsLCBXZWJDU3RyaW5nKCJ0ZXh0L2NzcyIpLCBjc3NUZXh0LnV0Zjgo
KSkpOworICAgICAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjphZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBp
bWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jl
c291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlt
YWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFNoYXJlZEJ1ZmZlciogZGF0YUJ1ZmZlciA9IGltYWdlLT5pbWFnZSgp
LT5kYXRhKCk7CisgICAgV2ViQ1N0cmluZyBkYXRhKGRhdGFCdWZmZXItPmRhdGEoKSwgZGF0YUJ1
ZmZlci0+c2l6ZSgpKTsKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBNSU1FVHlwZVJlZ2lzdHJ5Ojpn
ZXRNSU1FVHlwZUZvckV4dGVuc2lvbihpbWFnZS0+aW1hZ2UoKS0+ZmlsZW5hbWVFeHRlbnNpb24o
KSk7CisgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFsaXpl
ZFJlc291cmNlKHVybCwgbWltZVR5cGUudXRmOCgpLCBkYXRhKSk7CisgICAgbV9yZXNvdXJjZVVS
THMuYWRkKHVybCk7Cit9CisKK3ZvaWQgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjpyZXRyaWV2ZVJl
c291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAgIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24ocnVsZS0+c3R5bGUoKSk7Cit9CisKK3ZvaWQgV2ViSFRN
TFNlcmlhbGl6ZXJJbXBsOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xh
cmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0
eWxlc2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENT
U1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
c3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5k
LWltYWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHBy
b3BlcnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBt
YWtlIHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRo
ZXJlIG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0
aW9uLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQgb2Ygcmlk
aWN1bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8v
IHRoZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1
ZSBvdXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJh
dGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90
IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRp
b24tPmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAg
ICAgIGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0lt
YWdlVmFsdWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1h
Z2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24g
Y2FjaGVkLWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBk
YXRhLgorICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1h
Z2UoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFn
ZSA9IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1h
Z2UoKTsKKworICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKGltYWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1h
Z2UsIHVybCk7CisgICAgfSAgICAKK30KKworS1VSTCBXZWJIVE1MU2VyaWFsaXplckltcGw6Omdl
dFVSTEZvckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIEhhc2hNYXA8RnJhbWUqLCBL
VVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CisgICAg
aWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXIt
PnNlY29uZDsKKyAgICBTdHJpbmcgdXJsKCJodHRwOi8vY2hyb21pdW1fcGhvbnlfZnJhbWUvIik7
CisgICAgdXJsLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspKTsK
KyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAgIG1fYmxhbmtGcmFt
ZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJldHVybiBmYWtlVVJMOyAgICAKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuY3BwCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkhUTUxTZXJpYWxpemVySW1wbF9oCisjZGVm
aW5lIFdlYkhUTUxTZXJpYWxpemVySW1wbF9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5j
bHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktVUkxIYXNoLmgiCisjaW5jbHVkZSAiTGlzdEhhc2hT
ZXQuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJIVE1MU2VyaWFsaXplci5o
IgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5
bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIEZyYW1lOworfQorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBXZWJIVE1MU2VyaWFsaXplckltcGwoVmVjdG9yPFdlYkhUTUxTZXJpYWxpemVy
OjpTZXJpYWxpemVkUmVzb3VyY2U+Kik7CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSop
OworCitwcml2YXRlOgorICAgIGNsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjsKKyAg
ICBmcmllbmQgY2xhc3MgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOworCisgICAgLy8gU2Vy
aWFsaXplcyB0aGUgc3R5bGUtc2hlZXQgYmFjayB0byB0ZXh0IGFuZCBhZGRzIGl0IHRvIHRoZSBy
ZXNvdXJjZXMgaWYgVVJMIGlzIG5vdC1lbXB0eS4KKyAgICAvLyBJdCBhbHNvIGFkZHMgYW55IHJl
c291cmNlcyBpbmNsdWRlZCBpbiB0aGF0IHN0eWxlc2hlZXQgKGluY2x1ZGluZyBhbnkgaW1wb3J0
ZWQgc3R5bGUtc2hlZXRzIGFuZCB0aGVpciBvd24gcmVzb3VyY2VzKS4KKyAgICB2b2lkIHNlcmlh
bGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwmKTsKKworICAgIHZv
aWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIGNvbnN0IEtVUkwmKTsKKyAgICB2
b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlv
biopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSop
OworCisgICAgS1VSTCBnZXRVUkxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisKKyAgICAvLyBUaGUg
bGlzdCBvZiByZXNvdXJjZXMgcmV0cmVpdmVkIHNvIGZhci4KKyAgICBWZWN0b3I8V2ViSFRNTFNl
cmlhbGl6ZXI6OlNlcmlhbGl6ZWRSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworCisgICAgLy8gVGhl
IGxpc3Qgb2YgVVJMcyB3ZSBoYXZlIHJldHJpZXZlZCBzbyBmYXIsIHVzZSB0byBlbnN1cmUgd2Ug
b25seSByZXRyaWV2ZWQgZWFjaCByZXNvdXJjZSBvbmNlLgorICAgIExpc3RIYXNoU2V0PEtVUkw+
IG1fcmVzb3VyY2VVUkxzOworCisgICAgLy8gVGhlIFVSTHMgdXNlZCB0byBpZGVudGlmeSBibGFu
ayBmcmFtZXMuCisgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+IG1fYmxhbmtGcmFtZVVSTHM7CisK
KyAgICAvLyBVc2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBmYWtlIFVSTHMgZm9yIGJsYW5rIGZyYW1l
cy4KKyAgICB1bnNpZ25lZCBtX2JsYW5rRnJhbWVDb3VudGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZgorCisKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmgKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJIVE1MU2VyaWFsaXplclRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViSFRNTFNlcmlhbGl6ZXJUZXN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViSFRNTFNlcmlhbGl6ZXJUZXN0LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViSFRNTFNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5j
bHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKKyNp
bmNsdWRlICJXZWJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUg
IldlYlVSTC5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJVUkxS
ZXNwb25zZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2luY2x1ZGUgPGdvb2dsZXVybC9z
cmMvZ3VybC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1
cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFt
ZXNwYWNlIHsKKworY2xhc3MgVGVzdFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xp
ZW50IHsKK3B1YmxpYzoKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQoKSA6IG1fc2NyaXB0RW5hYmxl
ZChmYWxzZSkgeyB9CisgICAgdmlydHVhbCBib29sIGFsbG93U2NyaXB0KFdlYkZyYW1lKiwgYm9v
bCAvKiBlbmFibGVkUGVyU2V0dGluZ3MgKi8pIHsgcmV0dXJuIG1fc2NyaXB0RW5hYmxlZDsgfQor
ICAgIGJvb2wgbV9zY3JpcHRFbmFibGVkOworfTsKKworY2xhc3MgV2ViSFRNTFNlcmlhbGl6ZXJU
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYkhUTUxTZXJpYWxp
emVyVGVzdCgpIDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9odG1s
IikpLCBtX2Nzc01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHQvY3NzIikpLCBtX3Bu
Z01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltZy9wbmciKSkgeyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRlIGFu
ZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJWaWV3Ojpj
cmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgaW1hZ2VzIHRvIGxvYWQuCisgICAg
ICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmlldy0+c2V0dGluZ3MoKTsKKyAgICAg
ICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHNldHRpbmdzLT5z
ZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisKKyAgICAgICAgbV93ZWJWaWV3LT5p
bml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVucmVn
aXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKKyAgICB9
CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVybCwgY29u
c3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkKKyAgICB7
CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25zZS5pbml0
aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICAg
ICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgc3RkOjpzdHJpbmcg
ZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsKKyAg
ICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2h0bWxzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUudXRm
OCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVybCwgcmVz
cG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAgIFdlYlVS
TFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7Cisg
ICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93ZWJWaWV3
LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8vIE1ha2Ug
c3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgICAgIC8vIFNvbWUg
cmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIuCisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgLy8gU2VydmVyIHRoZSBkZWxh
eWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3Vz
TW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAgICB7Cisg
ICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAgICB9CisK
KyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFt
ZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4KCJv
bkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2ViU3RyaW5nJiBodG1sTWltZVR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYg
Y3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc01pbWVUeXBlOyB9CisgICAgY29uc3Qg
V2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG5nTWltZVR5cGU7IH0K
KyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZl
Y3RvcjxXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFsaXplZFJlc291cmNlPiYgcmVzb3VyY2VzLCBj
aGFyKiB1cmwsIGNoYXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViVVJMIHdlYlVSTCA9
IFdlYlVSTChHVVJMKHVybCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc291
cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgV2ViSFRNTFNlcmlhbGl6ZXI6
OlNlcmlhbGl6ZWRSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAgICAg
ICBpZiAocmVzb3VyY2UudXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkg
JiYgIXJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlwZSkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2YXRlOgorICAg
IFdlYlN0cmluZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsK
KyAgICBXZWJTdHJpbmcgbV9wbmdNaW1lVHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93
ZWJGcmFtZUNsaWVudDsKK307CisKKy8vIFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2Vz
IGFuZCBzdWItZnJhbWUgaXMgcmVwb3J0ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KK1RFU1Rf
RihXZWJIVE1MU2VyaWFsaXplclRlc3QsIFBhZ2VXaXRoRnJhbWVzKQoreworICAgIC8vIFJlZ2lz
dGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVV
UkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9p
ZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpZnJhbWUuaHRtbCIpLCBodG1sTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZTIuaHRtbCIp
LCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
InJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tl
ZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNv
bS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dy
b3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BG
cmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8V2ViSFRNTFNlcmlhbGl6ZXI6OlNlcmlhbGl6ZWRS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYkhUTUxTZXJpYWxpemVyOjpzZXJpYWxpemUobV93
ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHko
KSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1m
cmFtZS4KKyAgICBjb25zdCBXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFsaXplZFJlc291cmNlJiBy
ZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2Uu
bWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9G
QUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3Vy
Y2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9n
cmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVf
YmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRt
bCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0
bWwiKSk7Cit9CisKKy8vIFRlc3QgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENT
UyByZXNvdXJjZXMgYXJlIHJlcG9ydGVkLCBpbmNsdWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9y
dHMgYW5kIGxpbmtzLiBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRl
bnRzLCB3ZSBvbmx5IG1ha2Ugc3VyZQorLy8gdGhleSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhl
IHJpZ2h0IG1pbWUgdHlwZSBhbmQgdGhhdCB0aGV5IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9G
KFdlYkhUTUxTZXJpYWxpemVyVGVzdCwgQ1NTUmVzb3VyY2VzKQoreworICAgIC8vIFJlZ2lzdGVy
IHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0
b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFnZS5odG1sIiksIGh0
bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgibGlua19z
dHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIiksIGNzc01pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL2ltcG9ydF9zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHls
ZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
eWVsbG93X2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5n
IiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNr
Z3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgicHVycGxlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRv
dC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidWwtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9v
bC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9sLWRvdC5wbmciKSwgcG5nTWltZVR5
cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1l
VVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJIVE1MU2VyaWFsaXpl
cjo6U2VyaWFsaXplZFJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViSFRNTFNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNv
dXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxk
IGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYkhUTUxTZXJpYWxpemVyOjpTZXJpYWxp
emVkUmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJl
c291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9F
USgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVD
VF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNh
dGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAg
RVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3Jh
bmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20veWVsbG93
X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFj
a2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91
bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQu
cG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIsICJpbWFnZS9w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOworfQorCisv
LyBUZXN0cyB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlIHdpdGggYmxhbmsgZnJhbWVzIHRo
ZXNlIGFyZSByZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291cmNlcy4KK1RFU1RfRihXZWJIVE1MU2Vy
aWFsaXplclRlc3QsIEJsYW5rRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQg
ZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJhbWVzLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkp
OworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3Jl
ZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5n
TWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRv
cEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJIVE1MU2Vy
aWFsaXplcjo6U2VyaWFsaXplZFJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViSFRNTFNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxT
RShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ug
c2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYkhUTUxTZXJpYWxpemVyOjpT
ZXJpYWxpemVkUmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVY
UEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRt
bCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAg
IEVYUEVDVF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1
cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmci
KSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7
CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAg
IC8vIFRoZSBibGFuayBmcmFtZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJMLgorICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL2Nocm9t
aXVtX3Bob255X2ZyYW1lLzAiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291
cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL2Nocm9taXVtX3Bob255X2ZyYW1l
LzEiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL2Nocm9taXVtX3Bob255X2ZyYW1lLzIiLCAidGV4dC9odG1s
IikpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkhUTUxTZXJpYWxpemVyVGVzdC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2h0bWxzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRt
bAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1s
c2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBA
QAorPGh0bWw+DQorDQorPHNjcmlwdD4NCisgIGZ1bmN0aW9uIG9ubG9hZCgpIHsNCisgICAgdmFy
IGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7DQorICAgIHZhciBkaXYg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYxIik7DQorICAgIGRpdi5hcHBlbmRDaGls
ZChmcmFtZSk7DQorDQorICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCAr
PQ0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J2JsdWVfYmFja2dyb3Vu
ZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+Ig0KKw0KKyAgICBmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOw0KKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgibXlEaXYyIik7DQorICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7DQorDQorICAg
IGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQ0KKyAgICAgICJTb21lIHRl
eHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21l
IG1vcmUgdGV4dDwvYj4iDQorDQorICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi
aWZyYW1lIik7DQorICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjMiKTsN
CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsNCisNCisgICAgZnJhbWUuY29udGVudERvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MICs9DQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1n
IHNyYz0nb3JhbmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIN
CisNCisgIH0NCisgIA0KKzwvc2NyaXB0Pg0KKw0KKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPg0K
KyAgVGhpcyBwYWdlIGNyZWF0ZXMgZW1wdHkgaWZyYW1lcyBhbmQgYWRkcyBjb250ZW50IHRvIHRo
ZW0gZHluYW1pY2FsbHkuPGJyPjxicj4NCisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+DQorICA8
ZGl2IGlkPSJteURpdjIiPjwvZGl2Pg0KKyAgPGRpdiBpZD0ibXlEaXYzIj48L2Rpdj4NCis8L2Jv
ZHk+DQorDQorPC9odG1sPg0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXpl
ci9jc3NfdGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVzZWQg
dG8gdGVzdCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkgdGhl
CisgICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+CisK
KzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJs
aW5rX3N0eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVz
LmNzcycpOworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3Jj
OiB1cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVv
dCkgZm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBD
aHVua2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7
CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3Vs
IHsKKyAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAg
bGlzdC1zdHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxz
Y3JpcHQ+CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25M
b2FkKCkgeworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6
dXJsKCdwdXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5
bGVOb2RlLm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2Rl
KTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KKwor
PCEtLSBUZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVE
aXYnPlRoaXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHls
ZSBpcyBpbiBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMg
YSByZWQgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBp
biBhIGZpbGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3Jh
bmdlJz4KK1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwv
ZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdk
aXZZZWxsb3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5k
LgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4g
dGhlIGhlYWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQg
LS0+Cis8ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVl
bl9iYWNrZ3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBi
YWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVk
IHdpdGggSmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQ
dXJwbGUnPgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgor
PC9kaXY+CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8
bGk+UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdy
ZWVuPC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJy
PgorPG9sPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9s
aT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwv
b2w+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRt
bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFs
aXplci9pZnJhbWUyLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDkgQEAKKzxodG1sPg0KKzxib2R5Pg0KKw0KKzxpbWcgc3JjPSJncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIvPg0KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+DQorDQorPC9ib2R5
Pg0KKw0KKzwvaHRtbD4NCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+
Cis8Ym9keT4KKworPGltZyBzcmM9ImJsdWVfYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJy
ZWRfYmFja2dyb3VuZC5wbmciLz4KKworPC9ib2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIv
aWZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2Vy
aWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzIEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNr
Z3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXpl
ci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRt
bHNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJp
YWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNk
aXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19iYWNrZ3JvdW5kLnBu
ZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pbXBvcnRf
c3R5bGVzLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvbGlua19z
dHlsZXMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9odG1sc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3Nz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUgQEAKK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVf
ZnJvbV9saW5rLmNzcycpOworCisjZGl2UmVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdy
ZWRfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxl
CiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2Vy
aWFsaXplci9zaW1wbGVfcGFnZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9zaW1wbGVfcGFnZS5odG1sCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVy
L3NpbXBsZV9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTAgQEAKKzxodG1sPgor
PCEtLQorICAgIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBXZWJQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVBbGxSZXNvdXJjZXMgcmV0cmlldmVzCisgICAgY29ycmVjdGx5IHRoZSBleHBl
Y3RlZCByZXNvdXJjZXMgZnJvbSB2YXJpb3VzIEhUTUwgbm9kZXMuCistLT4KKworPGhlYWQ+Cis8
IS0tIFN0eWxlIHNoZWV0IGxpbmtzIHNob3VsZCBiZSByZXRyaWV2ZWQgLS0+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vd3d3LmV4YW1wbGUuY29t
L2JlYXV0aWZ1bGwuY3NzIi8+Cis8IS0tIE90aGVyIGxpbmsgc2hvdWxkIE5PVCBiZSByZXRyaWV2
ZWQgLS0+Cis8bGluayByZWw9ImNvcHlyaWdodCIgdHlwZT0idGV4dC9wbGFpbiIgaHJlZj0iaHR0
cDovL3d3dy5leGFtcGxlLmNvbS9jb3B5cmlnaHQiLz4KKzwhLS0gU2NyaXB0cyBzaG91bGQgYmUg
cmV0cmlldmVkIC0tPgorPHNjcmlwdCBzcmM9ImF3ZXNvbWUuanMiPjwvc2NyaXB0PgorPC9oZWFk
PgorCis8IS0tIEltYWdlcyBhcmUgYWx3YXlzIHJldHJpZXZlZCAtLT4KKzxib2R5IGJhY2tncm91
bmQ9ImJvZHlCYWNrZ3JvdW5kLmpwZyI+CisKKzwhLS0gVHdpY2UgdG8gbWFrZSBzdXJlIHdlIG9u
bHkgcmVwb3J0IGVhY2ggcmVzb3VyY2Ugb25jZSAtLT4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIv
PgorPGltZyBzcmM9ImF3ZXNvbWUucG5nIi8+CisKKzxmb3JtPgorICA8aW5wdXQgdHlwZT0iaW1h
Z2UiIHNyYz0iaW1hZ2VCdXR0b24ucG5nIi8+Cis8L2Zvcm0+CisKKzx0YWJsZSBiYWNrZ3JvdW5k
PSJ0YWJsZUJhY2tncm91bmQucG5nIj4KKyAgPHRyIGJhY2tncm91bmQ9InRyQmFja2dyb3VuZC5w
bmciPgorICAgIDx0ZCBiYWNrZ3JvdW5kPSJ0ZEJhY2tncm91bmQucG5nIj48L3RkPgorICA8L3Ry
PiAgCisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91bmQucG5nIj4KKyAgICA8dGQgYmFja2dy
b3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAgPC90cj4KKzwvdGFibGU+CisKKzwhLS0g
U29tZSBtb3JlIG9ic2N1cmUgdGFncyAtLT4KKzxibG9ja3F1b3RlIGNpdGU9Imh0dHA6Ly93d3cu
ZXZlbmUuZnIvY2l0YXRpb25zL2F1dGV1ci5waHA/aWRhPTQ2Ij48L2Jsb2NrcXVvdGU+Cis8cSBD
SVRFPSJodHRwOi8vd3d3LmJyYWlueXF1b3RlLmNvbS9xdW90ZXMvYXV0aG9ycy9jL2NoYXJsZXNf
ZGFyd2luLmh0bWwiPjwvcT4KKzxwPk15IGZhdm9yaXRlIGNvbG9yIGlzIDxkZWwgY2l0ZT0id2h5
X2RlbGV0ZWQuaHRtbCI+Ymx1ZTwvZGVsPiA8aW5zPnJlZDwvaW5zPiE8L3A+Cis8cD5NeSBmYXZv
cml0ZSBjb2xvciBpcyA8ZGVsPmJsdWU8L2RlbD4gPGlucyBjaXRlPSJ3aHlfaW5zZXJ0ZWQuaHRt
bCI+cmVkPC9pbnM+ITwvcD4KKworPCEtLSBNYWtlIHN1cmUgd2Ugb25seSByZXRyaWV2ZSBVUkxz
IHdpdGggdGhlIHJpZ2h0IHNjaGVtZXMgLS0+Cis8aW1nIHNyYz0iaHR0cHM6Ly93d3cuc2VjdXJl
LmNvbS9odHRwcy5naWYiLz4gIDwhLS0gSFRUUFMgaXMgT0sgLS0+Cis8aW1nIHNyYz0iZmlsZTov
L2MvbXlfZm9sZGVyL2ZpbGUuZ2lmIi8+ICA8IS0tIGZpbGUgaXMgT0sgLS0+Cis8aW1nIHNyYz0i
ZnRwOi8vZnRwLmNvbS9mdHAuZ2lmIi8+ICA8IS0tIEZUUCBpcyBub3QgT0sgLS0+Cis8aW1nIHNy
Yz0idW5rbm93bjovL3Vua293bi5jb20vdW5rbm93bi5naWYiLz4gIDwhLS0gVW5rbm93biBzY2hl
bWVzIGFyZSBub3QgT0sgLS0+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL3Np
bXBsZV9wYWdlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL3Rv
cF9mcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9odG1sc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci90b3BfZnJhbWUuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPGh0bWw+DQorPGJvZHk+DQorDQorPGlt
ZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBuZyIvPg0KKw0KKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRt
bCI+PC9pZnJhbWU+DQorPGlmcmFtZSBzcmM9ImlmcmFtZTIuaHRtbCI+PC9pZnJhbWU+DQorPGlm
cmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFtZT4NCisNCis8L2JvZHk+DQorDQorPC9odG1s
Pg0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9odG1sc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
aHRtbHNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUK
ICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFB
QlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZ
UVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkyUlk5T0kvQXhVQkV4
WE5BaHMxYWlEbElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BaU5BQ3NiTW1QS2NBQUFBQVNV
Vk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1s
c2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmcKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAg
ICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJR
QUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFV
QUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZMVRhNlBPZmdZcUFpWXBt
Z1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQTVSc0NSdTdDMDFBQUFBQUFTVVZP
Uks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvb2wtZG90LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvaHRtbHNlcmlhbGl6ZXIvb2wtZG90LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFB
WE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NB
UlVvU29BQUFBQXRTVVJCVkRoUFkxVGE2UE9mZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVS
cE1OR1lHR3BtVUVoaUVBNVJzQ1J1N0MwMUFBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9vcmFuZ2VfYmFja2dy
b3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJp
YWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFB
WE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NB
UlVvU29BQUFBQXRTVVJCVkRoUFkveGZyLzZmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVS
cE1OR1lHR3BtVUVoaUVBTlVVQ3pIaG9QaGdBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9wdXJwbGVfYmFja2dy
b3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5h
cnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJp
YWxpemVyL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFB
WE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NB
UlVvU29BQUFBQXRTVVJCVkRoUFkxenN1ZVEvQXhVQkV4WE5BaHMxYWlEbElUb2EKaHFOaFNFWUlq
Q1liTWdJTlRjc0lERU1BcjZNQ3QxTHM5NTRBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9yZWRfYmFja2dyb3Vu
ZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkg
dHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxp
emVyL3JlZF9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQog
ICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
CgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJ
QXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29B
QUFBQXRTVVJCVkRoUFkzd3JvL0tmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lH
R3BtVUVoaUVBUHBrQ1ZGZjdlQW9BQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci91bC1kb3QucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci91bC1kb3QucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gK
and2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTN3cm8vS2Zn
WXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUFQcGtDVkZmN2VBb0FB
QUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2h0bWxzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5n
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUt
dHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhF
VWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gK
and2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWS96L2llRS9B
eFVCRXhYTkFoczFhaURsSVRvYQpocU5oU0VZSWpDWWJNZ0lOVGNzSURFTUFGZUlER0dIcUJyWUFB
QUFBU1VWT1JLNUNZSUk9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90288</attachid>
            <date>2011-04-19 18:28:49 -0700</date>
            <delta_ts>2011-04-21 11:27:05 -0700</delta_ts>
            <desc>Fixing style</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>55185</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0MzE5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDQtMTkgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE1ha2luZyBNYXJrdXBBY2N1bXVsYXRvciBtb3JlIGZsZXhp
YmxlIHNvIHRoYXQgc3ViLWNsYXNzZXMgY2FuCisgICAgICAgIGFsdGVyIHRoZSBnZW5lcmF0ZWQg
SFRNTC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NTg5NDcKKworCisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6CisgICAgICAg
ICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6TWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorCiAyMDExLTA0LTE5ICBHZW9m
ZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAgICAgICAgVHJ5IHRvIGZpeCB2OCBi
dWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjcsNiArMzI3LDkgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZQogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1l
bnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8v
IEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJp
YnV0ZXMuCisgICAgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFj
ZXMpOworCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gODM2NDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc0LDExICs3NCwxMiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVh
bCB2b2lkIGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0
VGFnKE5vZGUqLCBOYW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6
ZV90IHRvdGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0
aCgpIGNvbnN0IHsgcmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAg
ICB2b2lkIGNvbmNhdGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBh
cHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
Q3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKSB7
IH0KICAgICB2b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4m
IHJlc3VsdCwgY29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgYXBwZW5kTm9kZVZh
bHVlKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5
TWFzayk7CiAgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQq
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDMxOSkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MzUgQEAKKzIwMTEtMDQtMTkgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGluZyBh
IG5ldyBBUEkgdGhhdCBsZXRzIHlvdSBzZXJpYWxpemUgYSBXZWJWaWV3IGJhY2sgdG8gSFRNTAor
ICAgICAgICBhbmQgcmV0cmlldmUgaXRzIHJlc291cmNlcy4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBXZWJLaXQuZ3lw
OgorICAgICAgICAqIHB1YmxpYy9XZWJIVE1MU2VyaWFsaXplci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dl
YkhUTUxTZXJpYWxpemVySW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJIVE1MU2Vy
aWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJpYWxp
emVyOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2JsYW5rX2Zy
YW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2Js
dWVfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlh
bGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0
bWxzZXJpYWxpemVyL2dyZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvZGF0YS9odG1sc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzczog
QWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9saW5rX3N0eWxlcy5j
c3M6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvb2wtZG90LnBu
ZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9vcmFuZ2VfYmFj
a2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIv
cHVycGxlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL2h0bWxz
ZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0
YS9odG1sc2VyaWFsaXplci9zaW1wbGVfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9kYXRhL2h0bWxzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL3VsLWRvdC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKwog
MjAxMS0wNC0xOSAgRXZhbiBNYXJ0aW4gIDxldmFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAko
d29ya2luZyBjb3B5KQpAQCAtNDcwLDYgKzQ3MCw5IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJHZW9sb2NhdGlvblBvc2l0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJHbHlw
aENhY2hlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIaXN0b3J5SXRlbS5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmNwcCcsCisgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuaCcsCisgICAgICAgICAgICAgICAg
J3NyYy9XZWJIVE1MU2VyaWFsaXplci5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkhUVFBC
b2R5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJIVFRQTG9hZEluZm8uY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkljb25Mb2FkaW5nQ29tcGxldGlvbkltcGwuY3BwJywKQEAg
LTg0Myw2ICs4NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMv
UG9wdXBNZW51VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvV2ViSFRNTFNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3Bw
JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAgICAg
ICAgfV0sCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVE1MU2VyaWFs
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkhU
TUxTZXJpYWxpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJIVE1MU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJIVE1MU2VyaWFsaXplcl9oCisjZGVmaW5lIFdlYkhUTUxTZXJpYWxpemVyX2gKKwor
I2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRl
ICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYlZpZXc7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzZXJpYWxpemUg
YWxsIGZyYW1lcyBmcm9tIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwsIHdpdGgKKy8vIGFsbCB0aGUg
Y3VycmVudCBDU1Mgc3RhdGVzLiBJdCBhbHNvIHJldHJpZXZlcyB0aGUgZnJhbWVzJyByZXNvdXJj
ZXMgc3VjaCBhcworLy8gaW1hZ2VzIGFuZCBjc3MgZmlsZXMuCisvLyBJbiB0aGUgc2VyaWFsaXpl
ZCB2ZXJzaW9uLCBhbnkgSmF2YVNjcmlwdCB0YWcgb3IgbGluayBpcyByZW1vdmVkIChldmVudAor
Ly8gaGFuZGxlcnMgYXJlIHN0aWxsIGxlZnQgaW4pLgorCitjbGFzcyBXZWJIVE1MU2VyaWFsaXpl
ciB7CitwdWJsaWM6CisgICAgc3RydWN0IFNlcmlhbGl6ZWRSZXNvdXJjZSB7CisgICAgICAgIFdl
YlVSTCB1cmw7CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJp
bmcgZGF0YTsKKyAgICAgICAgU2VyaWFsaXplZFJlc291cmNlKCkgeyB9CisgICAgICAgIFNlcmlh
bGl6ZWRSZXNvdXJjZShjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViQ1N0cmluZyYgbWltZVR5
cGUsIGNvbnN0IFdlYkNTdHJpbmcmIGRhdGEpCisgICAgICAgICAgICA6IHVybCh1cmwpLCBtaW1l
VHlwZShtaW1lVHlwZSksIGRhdGEoZGF0YSkgeyB9CisgICAgfTsKKworICAgIC8vIFNlcmlhbGl6
ZXMgdGhlIFdlYlZpZXcgYmFjayB0byBIVE1MLiBUaGUgZ2VuZXJhdGVkIGZpbGVzIGFyZSBhZGRl
ZCB0byB0aGUgcmVzb3VyY2VzIHZlY3Rvci4KKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2UgaW4g
dGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZS4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lk
IHNlcmlhbGl6ZShXZWJWaWV3KiwgV2ViVmVjdG9yPFNlcmlhbGl6ZWRSZXNvdXJjZT4qIHJlc291
cmNlcyk7CisKK3ByaXZhdGU6CisgICAgV2ViSFRNTFNlcmlhbGl6ZXIoKSB7IH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJIVE1MU2VyaWFsaXplci5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkhUTUxTZXJpYWxpemVySW1wbC5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lRWxl
bWVudEJhc2UuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdp
c3RyeS5oIgorI2luY2x1ZGUgIk1hcmt1cEFjY3VtdWxhdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVD
YWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0Lmgi
CisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVkZSAiV2ViSFRNTFNlcmlhbGl6ZXIu
aCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMg
Y29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSogaWdub3JlZFRhZ3NbXSA9IHsKKyAgICAmSFRN
TE5hbWVzOjpzY3JpcHRUYWcsCisgICAgJkhUTUxOYW1lczo6bm9zY3JpcHRUYWcsCit9OworCitz
dGF0aWMgYm9vbCBzaG91bGRJZ25vcmVFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBXVEZfQVJSQVlfTEVOR1RIKGlnbm9yZWRUYWdzKTsgKytp
KSB7CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKCppZ25vcmVkVGFnc1tpXSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitj
bGFzcyBXZWJIVE1MU2VyaWFsaXplckltcGw6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6
IHB1YmxpYyBNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yKFdlYkhUTUxTZXJpYWxpemVySW1wbCosIFZlY3RvcjxOb2RlKj4qKTsKKyAg
ICB2aXJ0dWFsIH5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7CisKK3ByaXZhdGU6CisgICAgV2ViSFRNTFNlcmlh
bGl6ZXJJbXBsKiBtX3NlcmlhbGl6ZXI7Cit9OworCit2b2lkIFdlYkhUTUxTZXJpYWxpemVyOjpz
ZXJpYWxpemUoV2ViVmlldyogd2VidmlldywgV2ViVmVjdG9yPFdlYkhUTUxTZXJpYWxpemVyOjpT
ZXJpYWxpemVkUmVzb3VyY2U+KiB3ZWJSZXNvdXJjZXMpCit7CisgICAgRnJhbWUqIGZyYW1lID0g
c3RhdGljX2Nhc3Q8V2ViRnJhbWVJbXBsKj4od2Vidmlldy0+bWFpbkZyYW1lKCkpLT5mcmFtZSgp
OworCisgICAgVmVjdG9yPFdlYkhUTUxTZXJpYWxpemVyOjpTZXJpYWxpemVkUmVzb3VyY2U+IHJl
c291cmNlczsKKyAgICBXZWJIVE1MU2VyaWFsaXplckltcGwgc2VyaWFsaXplcigmcmVzb3VyY2Vz
KTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6ZUZyYW1lKGZyYW1lKTsKKworICAgICp3ZWJSZXNv
dXJjZXMgPSByZXNvdXJjZXM7Cit9CisKK1dlYkhUTUxTZXJpYWxpemVySW1wbDo6U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoV2ViSFRNTFNl
cmlhbGl6ZXJJbXBsKiBzZXJpYWxpemVyLCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1h
cmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpLCBtX3NlcmlhbGl6ZXIoc2VyaWFs
aXplcikKK3sKK30KKworV2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjpTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6On5TZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKQoreworfQorCit2b2lkIFdl
YkhUTUxTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRU
ZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3sKKyAgICBFbGVtZW50KiBwYXJl
bnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKHBhcmVudCAmJiAhc2hvdWxkSWdu
b3JlRWxlbWVudChwYXJlbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4
dChvdXQsIHRleHQpOworfQorCit2b2lkIFdlYkhUTUxTZXJpYWxpemVySW1wbDo6U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3Vs
ZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CisgICAgLy8gRklYTUU6IGZvciBv
YmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBjb3VsZCByZXBsYWNlIHRoZW0g
YnkgYW4gaW1hZ2UgZm8gdGhlaXIgY3VycmVudCBjb250ZW50cy4KK30KKwordm9pZCBXZWJIVE1M
U2VyaWFsaXplckltcGw6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9t
QXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFj
ZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6aWZyYW1lVGFnKSAmJiAhZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmZyYW1lVGFn
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSFRNTEZyYW1lRWxlbWVudEJhc2UqIGZyYW1lRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZUVsZW1lbnRCYXNlKj4oZWxlbWVudCk7CisgICAg
S1VSTCB1cmwgPSBmcmFtZUVsZW1lbnQtPmxvY2F0aW9uKCk7CisgICAgaWYgKHVybC5pc1ZhbGlk
KCkgJiYgdXJsICE9IGJsYW5rVVJMKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5l
ZWQgdG8gZ2l2ZSBhIGZha2UgbG9jYXRpb24gdG8gYmxhbmsgZnJhbWVzIHNvIHRoZXkgY2FuIGJl
IHJlZmVyZW5jZWQgYnkgdGhlIHNlcmlhbGl6ZWQgZnJhbWUuCisgICAgdXJsID0gbV9zZXJpYWxp
emVyLT5nZXRVUkxGb3JCbGFua0ZyYW1lKGZyYW1lRWxlbWVudC0+Y29udGVudEZyYW1lKCkpOwor
ICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKEhUTUxO
YW1lczo6c3JjQXR0ciwgQXRvbWljU3RyaW5nKHVybC5zdHJpbmcoKSkpOworICAgIGFwcGVuZEF0
dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGUsIG5hbWVzcGFjZXMpOworfQorCit2b2lk
IFdlYkhUTUxTZXJpYWxpemVySW1wbDo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbmRUYWcoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYm
ICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCisgICAgICAgIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbmRUYWcobm9kZSk7Cit9CisKK1dlYkhUTUxTZXJpYWxpemVySW1w
bDo6V2ViSFRNTFNlcmlhbGl6ZXJJbXBsKFZlY3RvcjxXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFs
aXplZFJlc291cmNlPiogcmVzb3VyY2VzKQorICAgIDogbV9yZXNvdXJjZXMocmVzb3VyY2VzKSwg
bV9ibGFua0ZyYW1lQ291bnRlcigwKQoreworfQorCit2b2lkIFdlYkhUTUxTZXJpYWxpemVySW1w
bDo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVu
dCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOwor
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCB1cmwgPT0gYmxhbmtVUkwoKSkKKyAgICAgICAgLy8g
Rm9yIGJsYW5rIGZyYW1lcyB3ZSBnZW5lcmF0ZSBhIGZha2UgVVJMIHNvIHRoZXkgY2FuIGJlIHJl
ZmVyZW5jZWQgYnkgdGhlaXIgY29udGFpbmluZyBmcmFtZS4KKyAgICAgICAgdXJsID0gZ2V0VVJM
Rm9yQmxhbmtGcmFtZShmcmFtZSk7CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMo
dXJsKSkKKyAgICAgICAgLy8gRklYTUU6IHdlIGNvdWxkIGhhdmUgMiBmcmFtZSB3aXRoIHRoZSBz
YW1lIFVSTCBidXQgd2hpY2ggd2VyZSBkeW5hbWljYWxseSBjaGFuZ2VkIGFuZCBoYXZlIG5vdwor
ICAgICAgICAvLyAgICAgICAgZGlmZmVyZW50IGNvbnRlbnQuIFNvIHdlIHNob3VsZCBzZXJpYWxp
emUgYm90aCBhbmQgc29tZWhvdyByZW5hbWUgdGhlIGZyYW1lIHNyYyBpbiB0aGUKKyAgICAgICAg
Ly8gICAgICAgIGNvbnRhaW5pbmcgZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworCisgICAg
VmVjdG9yPE5vZGUqPiBub2RlczsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNj
dW11bGF0b3IodGhpcywgJm5vZGVzKTsKKyAgICBXZWJTdHJpbmcgZnJhbWVIVE1MID0gV2ViU3Ry
aW5nKGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KSwgMCwgSW5jbHVkZU5vZGUpKTsKKworICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoV2ViSFRNTFNl
cmlhbGl6ZXI6OlNlcmlhbGl6ZWRSZXNvdXJjZSh1cmwsIFdlYkNTdHJpbmcoInRleHQvaHRtbCIp
LCBmcmFtZUhUTUwudXRmOCgpKSk7CisgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CisKKyAg
ICBmb3IgKFZlY3RvcjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVy
ICE9IG5vZGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOwor
ICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsK
KyAgICAgICAgLy8gV2UgaGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQg
Y29udGFpbiBzb21lIHJlc291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAg
ICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgp
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
aW1nVGFnKSkgeworICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtID0gc3Rh
dGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgS1VSTCB1
cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwoaW1hZ2VFbGVtLT5nZXRBdHRyaWJ1dGUoSFRNTE5h
bWVzOjpzcmNBdHRyKSk7CisgICAgICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1nID0gaW1h
Z2VFbGVtLT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhj
YWNoZWRJbWcsIHVybCk7CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmxpbmtUYWcpICYmIGVxdWFsSWdub3JpbmdDYXNlKGVsZW1lbnQtPmdldEF0dHJp
YnV0ZShIVE1MTmFtZXM6OnR5cGVBdHRyKSwgInRleHQvY3NzIikpIHsKKyAgICAgICAgICAgIEhU
TUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQq
PihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQt
PnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7Cisg
ICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAg
c2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQp
LCB1cmwpOworICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBzZXJpYWxpemVDU1NTdHlsZVNo
ZWV0IHRvb2sgY2FyZSBvZiBhZGRpbmcgdGhlIHN0eWxlIHNoZWV0IHRvIHRoZSByZXNvdXJjZXMg
dmVjdG9yLgorICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxTdHlsZUVsZW1l
bnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50
KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVFbGVtZW50LT5zaGVldCgp
OworICAgICAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAg
ICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQqPihzaGVldCksIEtVUkwoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBGcmFtZSog
Y2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAoY2hp
bGRGcmFtZSkgeworICAgICAgICBzZXJpYWxpemVGcmFtZShjaGlsZEZyYW1lKTsKKyAgICAgICAg
Y2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmcg
Y3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkp
OworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlm
ICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVt
VGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAg
ICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAg
IC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3
ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsK
KyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAg
ICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0
UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlm
IHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gICAgICAgIGJlIHJl
dHJpZXZlZCBmcm9tIHRoZSBDU1NGb250RmFjZVJ1bGUgb2JqZWN0LgorICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0Zv
ckNTU1J1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSkpOworICAgIH0KKworICAg
IGlmICh1cmwuaXNWYWxpZCgpICYmICFtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKSB7Cisg
ICAgICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoV2ViSFRNTFNlcmlhbGl6ZXI6OlNlcmlhbGl6ZWRS
ZXNvdXJjZSh1cmwsIFdlYkNTdHJpbmcoInRleHQvY3NzIiksIGNzc1RleHQudXRmOCgpKSk7Cisg
ICAgICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworICAgIH0KK30KKwordm9pZCBXZWJIVE1M
U2VyaWFsaXplckltcGw6OmFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqIGltYWdlLCBj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8IG1fcmVzb3VyY2VV
UkxzLmNvbnRhaW5zKHVybCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaW1hZ2UgfHwg
aW1hZ2UtPmltYWdlKCkgPT0gSW1hZ2U6Om51bGxJbWFnZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgU2hhcmVkQnVmZmVyKiBkYXRhQnVmZmVyID0gaW1hZ2UtPmltYWdlKCktPmRhdGEo
KTsKKyAgICBXZWJDU3RyaW5nIGRhdGEoZGF0YUJ1ZmZlci0+ZGF0YSgpLCBkYXRhQnVmZmVyLT5z
aXplKCkpOworICAgIFN0cmluZyBtaW1lVHlwZSA9IE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVU
eXBlRm9yRXh0ZW5zaW9uKGltYWdlLT5pbWFnZSgpLT5maWxlbmFtZUV4dGVuc2lvbigpKTsKKyAg
ICBtX3Jlc291cmNlcy0+YXBwZW5kKFdlYkhUTUxTZXJpYWxpemVyOjpTZXJpYWxpemVkUmVzb3Vy
Y2UodXJsLCBtaW1lVHlwZS51dGY4KCksIGRhdGEpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQo
dXJsKTsKK30KKwordm9pZCBXZWJIVE1MU2VyaWFsaXplckltcGw6OnJldHJpZXZlUmVzb3VyY2Vz
Rm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NEZWNsYXJhdGlvbihydWxlLT5zdHlsZSgpKTsKK30KKwordm9pZCBXZWJIVE1MU2VyaWFs
aXplckltcGw6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVl
dCgpLT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTU3R5bGVT
aGVldCogY3NzU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZURl
Y2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpOworCisgICAgLy8gVGhlIGJhY2tncm91bmQtaW1hZ2Ug
YW5kIGxpc3Qtc3R5bGUtaW1hZ2UgKGZvciB1bCBvciBvbCkgYXJlIHRoZSBDU1MgcHJvcGVydGll
cworICAgIC8vIHRoYXQgbWFrZSB1c2Ugb2YgaW1hZ2VzLiBXZSBpdGVyYXRlIHRvIG1ha2Ugc3Vy
ZSB3ZSBpbmNsdWRlIGFueSBvdGhlcgorICAgIC8vIGltYWdlIHByb3BlcnRpZXMgdGhlcmUgbWln
aHQgYmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlRGVjbGFyYXRpb24tPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IGl0J3Mga2luZCBvZiByaWRpY3Vsb3Vz
IHRvIGdldCB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlbiBnZXQKKyAgICAgICAgLy8gdGhlIHZh
bHVlIG91dCBvZiB0aGUgbmFtZS4gSWRlYWxseSB3ZSB3b3VsZCBnZXQgdGhlIHZhbHVlIG91dCBv
ZiB0aGUKKyAgICAgICAgLy8gcHJvcGVydHkgSUQsIGJ1dCBDU1NTdHlsZURlY2xhcmF0aW9uIG9u
bHkgZ2l2ZXMgYWNjZXNzIHRvIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVzLCBub3QgSURzLgor
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShzdHlsZURlY2xhcmF0aW9uLT5pdGVtKGkpKTsKKyAgICAgICAgaWYg
KCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGNzc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGlt
YWdlVmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgIC8vIE5vbiBjYWNoZWQt
aW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5vdCBjb250YWluIGRhdGEuCisg
ICAgICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gc3Rh
dGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KHN0eWxlSW1hZ2UpLT5jYWNoZWRJbWFnZSgpOwor
CisgICAgICAgIEtVUkwgdXJsID0gY3NzU3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwoaW1hZ2UtPnVybCgpKTsKKyAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhpbWFnZSwgdXJs
KTsKKyAgICB9ICAgIAorfQorCitLVVJMIFdlYkhUTUxTZXJpYWxpemVySW1wbDo6Z2V0VVJMRm9y
QmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+Ojpp
dGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKKyAgICBpZiAoaXRl
ciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25k
OworICAgIFN0cmluZyB1cmwoImh0dHA6Ly9jaHJvbWl1bV9waG9ueV9mcmFtZS8iKTsKKyAgICB1
cmwuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKykpOworICAgIEtV
UkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgbV9ibGFua0ZyYW1lVVJMcy5h
ZGQoZnJhbWUsIGZha2VVUkwpOworCisgICAgcmV0dXJuIGZha2VVUkw7ICAgIAorfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkhUTUxTZXJpYWxpemVySW1wbC5jcHAKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SFRNTFNlcmlhbGl6ZXJJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSFRNTFNlcmlhbGl6ZXJJbXBsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViSFRNTFNlcmlhbGl6ZXJJbXBsX2gKKyNkZWZpbmUgV2Vi
SFRNTFNlcmlhbGl6ZXJJbXBsX2gKKworI2luY2x1ZGUgIkhhc2hNYXAuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJMaXN0SGFzaFNldC5oIgor
I2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgIldlYkhUTUxTZXJpYWxpemVyLmgiCisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDYWNo
ZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHlsZVJ1bGU7
CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7Cit9CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitjbGFzcyBXZWJIVE1MU2VyaWFsaXplckltcGwgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFdlYkhUTUxTZXJpYWxpemVySW1wbChWZWN0b3I8V2ViSFRNTFNlcmlhbGl6ZXI6OlNlcmlh
bGl6ZWRSZXNvdXJjZT4qKTsKKyAgICB2b2lkIHNlcmlhbGl6ZUZyYW1lKEZyYW1lKik7CisKK3By
aXZhdGU6CisgICAgY2xhc3MgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOworICAgIGZyaWVu
ZCBjbGFzcyBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I7CisKKyAgICAvLyBTZXJpYWxpemVz
IHRoZSBzdHlsZS1zaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJlc291cmNl
cyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3VyY2Vz
IGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBzdHls
ZS1zaGVldHMgYW5kIHRoZWlyIG93biByZXNvdXJjZXMpLgorICAgIHZvaWQgc2VyaWFsaXplQ1NT
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgS1VSTCYpOworCisgICAgdm9pZCBhZGRJ
bWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgcmV0
cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKik7Cisg
ICAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKik7CisKKyAg
ICBLVVJMIGdldFVSTEZvckJsYW5rRnJhbWUoRnJhbWUqKTsKKworICAgIC8vIFRoZSBsaXN0IG9m
IHJlc291cmNlcyByZXRyZWl2ZWQgc28gZmFyLgorICAgIFZlY3RvcjxXZWJIVE1MU2VyaWFsaXpl
cjo6U2VyaWFsaXplZFJlc291cmNlPiogbV9yZXNvdXJjZXM7CisKKyAgICAvLyBUaGUgbGlzdCBv
ZiBVUkxzIHdlIGhhdmUgcmV0cmlldmVkIHNvIGZhciwgdXNlIHRvIGVuc3VyZSB3ZSBvbmx5IHJl
dHJpZXZlZCBlYWNoIHJlc291cmNlIG9uY2UuCisgICAgTGlzdEhhc2hTZXQ8S1VSTD4gbV9yZXNv
dXJjZVVSTHM7CisKKyAgICAvLyBUaGUgVVJMcyB1c2VkIHRvIGlkZW50aWZ5IGJsYW5rIGZyYW1l
cy4KKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD4gbV9ibGFua0ZyYW1lVVJMczsKKworICAgIC8v
IFVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIGZha2UgVVJMcyBmb3IgYmxhbmsgZnJhbWVzLgorICAg
IHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmCisKKworCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJIVE1MU2VyaWFsaXplckltcGwuaApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkhUTUxTZXJpYWxpemVyVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJIVE1MU2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJIVE1MU2VyaWFsaXplclRlc3QuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
ZWJIVE1MU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2luY2x1ZGUg
IldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJM
LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNl
LmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJs
Lmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93
ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2Ug
eworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgewor
cHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFibGVkKGZhbHNl
KSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBib29sIC8qIGVu
YWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9CisgICAgYm9v
bCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBXZWJIVE1MU2VyaWFsaXplclRlc3QgOiBw
dWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViSFRNTFNlcmlhbGl6ZXJUZXN0
KCkgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSksIG1f
Y3NzTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSksIG1fcG5nTWltZVR5
cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1nL3BuZyIpKSB7IH0KKworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYW5kIGluaXRp
YWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgw
KTsKKworICAgICAgICAvLyBXZSB3YW50IHRoZSBpbWFnZXMgdG8gbG9hZC4KKyAgICAgICAgV2Vi
U2V0dGluZ3MqIHNldHRpbmdzID0gbV93ZWJWaWV3LT5zZXR0aW5ncygpOworICAgICAgICBzZXR0
aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKworICAgICAgICBtX3dlYlZpZXctPmluaXRpYWxp
emVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9p
ZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3RlckFs
bE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworICAgIH0KKworICAg
IHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJT
dHJpbmcmIGZpbGVOYW1lLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKQorICAgIHsKKyAgICAg
ICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUo
KTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICByZXNw
b25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgICAgICBzdGQ6OnN0cmluZyBmaWxlUGF0
aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOworICAgICAgICBm
aWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkpOwor
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25zZSwg
V2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZFVS
TEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVxdWVz
dCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAgICAgICAg
dXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBtX3dlYlZpZXctPm1haW5G
cmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIGFu
eSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNl
cnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICAgICAgLy8gU29tZSByZXF1ZXN0
cyBnZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1lci4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1
bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICAvLyBTZXJ2ZXIgdGhlIGRlbGF5ZWQgcmVz
b3VyY2VzLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRS
ZXF1ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxlSlMoKQorICAgIHsKKyAgICAgICAg
bV93ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVuYWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZv
aWQgcnVuT25Mb2FkKCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmV4
ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgoIm9uTG9hZCgp
IikpKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTdHJpbmcmIGh0bWxNaW1lVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBjc3NNaW1l
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzTWltZVR5cGU7IH0KKyAgICBjb25zdCBXZWJTdHJp
bmcmIHBuZ01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wbmdNaW1lVHlwZTsgfQorICAgIAor
ICAgIHN0YXRpYyBib29sIHJlc291cmNlVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdl
YkhUTUxTZXJpYWxpemVyOjpTZXJpYWxpemVkUmVzb3VyY2U+JiByZXNvdXJjZXMsIGNoYXIqIHVy
bCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJVUkwgd2ViVVJMID0gV2ViVVJM
KEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFs
aXplZFJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKyAgICAgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwgPT0gd2ViVVJMICYmICFyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSAmJiAhcmVz
b3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKG1pbWVUeXBlKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisKK3ByaXZhdGU6CisgICAgV2ViU3Ry
aW5nIG1faHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX2Nzc01pbWVUeXBlOworICAgIFdl
YlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAgIFRlc3RXZWJGcmFtZUNsaWVudCBtX3dlYkZyYW1l
Q2xpZW50OworfTsKKworLy8gVGVzdHMgdGhhdCBhIHBhZ2Ugd2l0aCByZXNvdXJjZXMgYW5kIHN1
Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFsbCBpdHMgcmVzb3VyY2VzLgorVEVTVF9GKFdlYkhU
TUxTZXJpYWxpemVyVGVzdCwgUGFnZVdpdGhGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhl
IG1vY2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5o
dG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9p
ZnJhbWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lMi5odG1sIiksIGh0bWxN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2Jh
Y2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0
cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVf
YmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBu
ZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJM
KTsKKworICAgIFdlYlZlY3RvcjxXZWJIVE1MU2VyaWFsaXplcjo6U2VyaWFsaXplZFJlc291cmNl
PiByZXNvdXJjZXM7CisgICAgV2ViSFRNTFNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcs
ICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAg
ICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgor
ICAgIGNvbnN0IFdlYkhUTUxTZXJpYWxpemVyOjpTZXJpYWxpemVkUmVzb3VyY2UmIHJlc291cmNl
ID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlw
ZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJl
c291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMuc2l6
ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUo
cmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Jl
ZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2Jh
Y2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3Jv
dW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiwgInRl
eHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiwgInRleHQvaHRtbCIpKTsK
K30KKworLy8gVGVzdCB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlLCBhbGwgQ1NTIHJlc291
cmNlcyBhcmUgcmVwb3J0ZWQsIGluY2x1ZGluZyB1cmwoKSdzCisvLyBhbmQgaW1wb3J0cyBhbmQg
bGlua3MuIE5vdGUgdGhhdCB3ZSBkb24ndCB0ZXN0IHRoZSByZXNvdXJjZXMgY29udGVudHMsIHdl
IG9ubHkgbWFrZSBzdXJlCisvLyB0aGV5IGFyZSBhbGwgcmVwb3J0ZWQgd2l0aCB0aGUgcmlnaHQg
bWltZSB0eXBlIGFuZCB0aGF0IHRoZXkgY29udGFpbiBzb21lIGRhdGEuCitURVNUX0YoV2ViSFRN
TFNlcmlhbGl6ZXJUZXN0LCBDU1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1v
Y2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1l
VVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRtbE1pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL2xpbmtfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxlcy5j
c3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgY3NzTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3Mi
KSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
InJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tl
ZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmci
KSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL3llbGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5ZWxsb3df
YmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1
ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQu
cG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJwdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ1bC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5w
bmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib2wtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsK
KworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOwor
ICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYkhUTUxTZXJpYWxpemVyOjpTZXJp
YWxpemVkUmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJIVE1MU2VyaWFsaXplcjo6c2VyaWFs
aXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5p
c0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhl
IG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViSFRNTFNlcmlhbGl6ZXI6OlNlcmlhbGl6ZWRSZXNv
dXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2Uu
dXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJl
c291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBF
WFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDEy
LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vaW1wb3J0X3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJl
c291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRf
YmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFj
a2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dy
b3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9y
Q29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5k
LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmci
LCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciLCAi
aW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS91bC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vb2wtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7Cit9CisKKy8vIFRlc3Rz
IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBhZ2Ugd2l0aCBibGFuayBmcmFtZXMgdGhlc2UgYXJl
IHJlcG9ydGVkIHdpdGggdGhlaXIgcmVzb3VyY2VzLgorVEVTVF9GKFdlYkhUTUxTZXJpYWxpemVy
VGVzdCwgQmxhbmtGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBh
bmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJibGFua19mcmFtZXMuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tn
cm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
b3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmci
KSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVV
UkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYkhUTUxTZXJpYWxpemVy
OjpTZXJpYWxpemVkUmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJIVE1MU2VyaWFsaXplcjo6
c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291
cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQg
YmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViSFRNTFNlcmlhbGl6ZXI6OlNlcmlhbGl6
ZWRSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VR
KDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsK
KyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNU
X0VRKDcsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRl
cy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAg
ICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93
d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgLy8gVGhl
IGJsYW5rIGZyYW1lcyBzaG91bGQgaGF2ZSBnb3QgYSBtYWdpYyBVUkwuCisgICAgRVhQRUNUX1RS
VUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vY2hyb21pdW1fcGhv
bnlfZnJhbWUvMCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vY2hyb21pdW1fcGhvbnlfZnJhbWUvMSIsICJ0
ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vY2hyb21pdW1fcGhvbnlfZnJhbWUvMiIsICJ0ZXh0L2h0bWwiKSk7Cit9
CisKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
V2ViSFRNTFNlcmlhbGl6ZXJUZXN0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxp
emVyL2JsYW5rX2ZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRt
bD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gb25sb2FkKCkgeworICAgIHZhciBmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgibXlEaXYxIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKwor
ICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUg
dGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nYmx1ZV9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5T
b21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjIiKTsK
KyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50
LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3Jj
PSdyZWRfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAg
ZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYzIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1l
KTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAg
IlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nb3JhbmdlX2JhY2tncm91bmQucG5nJy4+
PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICB9CisgIAorPC9zY3JpcHQ+CisKKzxib2R5
IG9ubG9hZD0ib25sb2FkKCkiPgorICBUaGlzIHBhZ2UgY3JlYXRlcyBlbXB0eSBpZnJhbWVzIGFu
ZCBhZGRzIGNvbnRlbnQgdG8gdGhlbSBkeW5hbWljYWxseS48YnI+PGJyPgorICA8ZGl2IGlkPSJt
eURpdjEiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjIiPjwvZGl2PgorICA8ZGl2IGlkPSJteURp
djMiPjwvZGl2PgorPC9ib2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVz
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2Nzc190ZXN0X3Bh
Z2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
aHRtbHNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2Uu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMg
cGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29y
cmVjdGx5IGJ5IHRoZQorICAgICBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVTbmFwc2hvdCBt
ZXRob2QKKy0tPgorCis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0ibGlua19zdHlsZXMuY3NzIiAvPgorCis8c3R5bGU+CitAaW1wb3J0IHVybCgn
aW1wb3J0X3N0eWxlcy5jc3MnKTsKKworQGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBDaHVu
a2ZpdmU7CisgIHNyYzogdXJsKCdDaHVua2ZpdmUub3RmJyk7CisgIHNyYzogdXJsKCdDaHVua2Zp
dmUtd2ViZm9udC5lb3QpIGZvcm1hdCgnZW90Jyk7Cit9CisKKyNjaHVua2ZpdmVEaXYgeworICBm
b250LWZhbWlseTogQ2h1bmtmaXZlLCBzYW5zLXNlcmlmOworfQorPC9zdHlsZT4KKworPHN0eWxl
PgorI2RpdkJsdWUgeworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBu
ZycpOworfQorCit1bCB7CisgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgndWwtZG90LnBuZycpOwor
fQorCitvbCB7CisgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgnb2wtZG90LnBuZycpOworfQorCis8
L3N0eWxlPgorCis8c2NyaXB0PgorLy8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHlsZS4K
K2Z1bmN0aW9uIG9uTG9hZCgpIHsKKyAgdmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHtiYWNr
Z3JvdW5kLWltYWdlOnVybCgncHVycGxlX2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9kZT0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0ZXh0
L2Nzcyc7CisgIHN0eWxlTm9kZS5tZWRpYT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVuZENo
aWxkKHN0eWxlTm9kZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJv
bkxvYWQoKSI+CisKKzwhLS0gVGV4dCB1c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRpdiBp
ZD0nY2h1bmtmaXZlRGl2Jz5UaGlzIHRleHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9kaXY+
CisKKzwhLS0gU3R5bGUgaXMgaW4gbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQnPgor
VGhpcyBkaXYgaGFzIGEgcmVkIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwh
LS0gU3R5bGUgaXMgaW4gYSBmaWxlIGltcG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4KKzxk
aXYgaWQ9J2Rpdk9yYW5nZSc+CitUaGlzIGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRzIGJh
Y2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxlIC0t
PgorPGRpdiBpZD0nZGl2WWVsbG93Jz4KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBp
dHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHls
ZSBzZWN0aW9uIGluIHRoZSBoZWFkZXIgLS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMgZGl2
IGhhcyBhIGJsdWUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHls
ZSBpcyBpbmxpbmVkIC0tPgorPGRpdiBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWlt
YWdlOnVybCgnZ3JlZW5fYmFja2dyb3VuZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVlbiBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFtaWNh
bGx5IGdlbmVyYXRlZCB3aXRoIEphdmFTY3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0tPgor
PGRpdiBpZD0nZGl2UHVycGxlJz4KK1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMg
YmFja2dyb3VuZC4KKzwvZGl2PgorCitVbm9yZGVyZWQgbGlzdDo8YnI+Cis8dWw+CisgIDxsaT5C
bHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwv
bGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC91bD4KKzxicj4KKworT3Jk
ZXJlZCBsaXN0Ojxicj4KKzxvbD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAg
PGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxp
PlJlZDwvbGk+Cis8L29sPgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9jc3Nf
dGVzdF9wYWdlLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lm
cmFtZTIuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lmcmFtZTIuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3Jl
ZW5fYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisK
KzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lmcmFtZTIuaHRtbApfX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
CkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2lmcmFtZS5o
dG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0
bWxzZXJpYWxpemVyL2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxo
dG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNy
Yz0icmVkX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxp
emVyL2lmcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9p
bXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5j
c3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRt
bHNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2Vf
YmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlh
bGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2h0bWxzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNz
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1s
c2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CisjZGl2WWVsbG93IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3Vu
ZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvaW1w
b3J0X3N0eWxlcy5jc3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2xp
bmtfc3R5bGVzLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvaHRtbHNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2xpbmtfc3R5bGVz
LmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVy
bCgncmVkX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0
bWxzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0
YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRt
bHNlcmlhbGl6ZXIvc2ltcGxlX3BhZ2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvc2ltcGxlX3BhZ2UuaHRtbAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFs
aXplci9zaW1wbGVfcGFnZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACis8aHRt
bD4KKzwhLS0KKyAgICBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgV2ViUGFnZVNlcmlh
bGl6ZXI6OnJldHJpZXZlQWxsUmVzb3VyY2VzIHJldHJpZXZlcworICAgIGNvcnJlY3RseSB0aGUg
ZXhwZWN0ZWQgcmVzb3VyY2VzIGZyb20gdmFyaW91cyBIVE1MIG5vZGVzLgorLS0+CisKKzxoZWFk
PgorPCEtLSBTdHlsZSBzaGVldCBsaW5rcyBzaG91bGQgYmUgcmV0cmlldmVkIC0tPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL3d3dy5leGFtcGxl
LmNvbS9iZWF1dGlmdWxsLmNzcyIvPgorPCEtLSBPdGhlciBsaW5rIHNob3VsZCBOT1QgYmUgcmV0
cmlldmVkIC0tPgorPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHR5cGU9InRleHQvcGxhaW4iIGhyZWY9
Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vY29weXJpZ2h0Ii8+Cis8IS0tIFNjcmlwdHMgc2hvdWxk
IGJlIHJldHJpZXZlZCAtLT4KKzxzY3JpcHQgc3JjPSJhd2Vzb21lLmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKworPCEtLSBJbWFnZXMgYXJlIGFsd2F5cyByZXRyaWV2ZWQgLS0+Cis8Ym9keSBiYWNr
Z3JvdW5kPSJib2R5QmFja2dyb3VuZC5qcGciPgorCis8IS0tIFR3aWNlIHRvIG1ha2Ugc3VyZSB3
ZSBvbmx5IHJlcG9ydCBlYWNoIHJlc291cmNlIG9uY2UgLS0+Cis8aW1nIHNyYz0iYXdlc29tZS5w
bmciLz4KKzxpbWcgc3JjPSJhd2Vzb21lLnBuZyIvPgorCis8Zm9ybT4KKyAgPGlucHV0IHR5cGU9
ImltYWdlIiBzcmM9ImltYWdlQnV0dG9uLnBuZyIvPgorPC9mb3JtPgorCis8dGFibGUgYmFja2dy
b3VuZD0idGFibGVCYWNrZ3JvdW5kLnBuZyI+CisgIDx0ciBiYWNrZ3JvdW5kPSJ0ckJhY2tncm91
bmQucG5nIj4KKyAgICA8dGQgYmFja2dyb3VuZD0idGRCYWNrZ3JvdW5kLnBuZyI+PC90ZD4KKyAg
PC90cj4gIAorICA8dHIgYmFja2dyb3VuZD0idHJCYWNrZ3JvdW5kLnBuZyI+CisgICAgPHRkIGJh
Y2tncm91bmQ9InRkQmFja2dyb3VuZC5wbmciPjwvdGQ+CisgIDwvdHI+Cis8L3RhYmxlPgorCis8
IS0tIFNvbWUgbW9yZSBvYnNjdXJlIHRhZ3MgLS0+Cis8YmxvY2txdW90ZSBjaXRlPSJodHRwOi8v
d3d3LmV2ZW5lLmZyL2NpdGF0aW9ucy9hdXRldXIucGhwP2lkYT00NiI+PC9ibG9ja3F1b3RlPgor
PHEgQ0lURT0iaHR0cDovL3d3dy5icmFpbnlxdW90ZS5jb20vcXVvdGVzL2F1dGhvcnMvYy9jaGFy
bGVzX2Rhcndpbi5odG1sIj48L3E+Cis8cD5NeSBmYXZvcml0ZSBjb2xvciBpcyA8ZGVsIGNpdGU9
IndoeV9kZWxldGVkLmh0bWwiPmJsdWU8L2RlbD4gPGlucz5yZWQ8L2lucz4hPC9wPgorPHA+TXkg
ZmF2b3JpdGUgY29sb3IgaXMgPGRlbD5ibHVlPC9kZWw+IDxpbnMgY2l0ZT0id2h5X2luc2VydGVk
Lmh0bWwiPnJlZDwvaW5zPiE8L3A+CisKKzwhLS0gTWFrZSBzdXJlIHdlIG9ubHkgcmV0cmlldmUg
VVJMcyB3aXRoIHRoZSByaWdodCBzY2hlbWVzIC0tPgorPGltZyBzcmM9Imh0dHBzOi8vd3d3LnNl
Y3VyZS5jb20vaHR0cHMuZ2lmIi8+ICA8IS0tIEhUVFBTIGlzIE9LIC0tPgorPGltZyBzcmM9ImZp
bGU6Ly9jL215X2ZvbGRlci9maWxlLmdpZiIvPiAgPCEtLSBmaWxlIGlzIE9LIC0tPgorPGltZyBz
cmM9ImZ0cDovL2Z0cC5jb20vZnRwLmdpZiIvPiAgPCEtLSBGVFAgaXMgbm90IE9LIC0tPgorPGlt
ZyBzcmM9InVua25vd246Ly91bmtvd24uY29tL3Vua25vd24uZ2lmIi8+ICA8IS0tIFVua25vd24g
c2NoZW1lcyBhcmUgbm90IE9LIC0tPgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXpl
ci9zaW1wbGVfcGFnZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsg
KgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXpl
ci90b3BfZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvdG9wX2ZyYW1l
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxp
bWcgc3JjPSJyZWRfYmFja2dyb3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1s
Ij48L2lmcmFtZT4KKzxpZnJhbWUgc3JjPSJpZnJhbWUyLmh0bWwiPjwvaWZyYW1lPgorPGlmcmFt
ZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFtZT4KKworPC9ib2R5PgorCis8L2h0bWw+CgpQcm9w
ZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNl
cmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUK
ICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJp
YWxpemVyL2JsdWVfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL2JsdWVfYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVD
QVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpj
RWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZMlJZOU9JL0F4VUJFeFhOQWhzMWFp
RGxJVG9hCmhxTmhTRVlJakNZYk1nSU5UY3NJREVNQWlOQUNzYk1tUEtjQUFBQUFTVVZPUks1Q1lJ
ST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6
ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL2h0bWxzZXJpYWxpemVyL2dyZWVuX2JhY2tncm91bmQucG5nCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxp
Y2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZ
QUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0Vo
WmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTFUYTZQT2ZnWXFBaVlwbWdZMGFOWkR5
RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUE1UnNDUnU3QzAxQUFBQUFBU1VWT1JLNUNZSUk9
CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVy
L29sLWRvdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBi
aW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2h0bWxz
ZXJpYWxpemVyL29sLWRvdC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoK
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFy
czRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFB
QUF0U1VSQlZEaFBZMVRhNlBPZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dw
bVVFaGlFQTVSc0NSdTdDMDFBQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvb3JhbmdlX2JhY2tncm91bmQucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9v
cmFuZ2VfYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoK
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFy
czRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFB
QUF0U1VSQlZEaFBZL3hmci82ZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dw
bVVFaGlFQU5VVUN6SGhvUGhnQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvcHVycGxlX2JhY2tncm91bmQucG5n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUu
CnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9w
dXJwbGVfYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAg
KyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoK
aVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFy
czRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFB
QUF0U1VSQlZEaFBZMXpzdWVRL0F4VUJFeFhOQWhzMWFpRGxJVG9hCmhxTmhTRVlJakNZYk1nSU5U
Y3NJREVNQXI2TUN0MUxzOTU0QUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvcmVkX2JhY2tncm91bmQucG5nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2
bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2VyaWFsaXplci9yZWRf
YmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFk
ZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3
MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFB
QUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VS
QlZEaFBZM3dyby9LZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlF
QVBwa0NWRmY3ZUFvQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvdWwtZG90LnBuZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvaHRtbHNlcmlhbGl6ZXIvdWwtZG90LnBuZwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFB
QUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVB
QUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkzd3JvL0tmZ1lxQWlZcG1n
WTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBUHBrQ1ZGZjdlQW9BQUFBQVNVVk9S
SzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9odG1sc2Vy
aWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTog
ZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL2h0bWxzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZwpfX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAg
KyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFB
QUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVB
QUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkvei9pZUUvQXhVQkV4WE5B
aHMxYWlEbElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BRmVJREdHSHFCcllBQUFBQVNVVk9S
SzVDWUlJPQoK
</data>
<flag name="review"
          id="83023"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90562</attachid>
            <date>2011-04-21 11:27:05 -0700</date>
            <delta_ts>2011-04-22 13:52:00 -0700</delta_ts>
            <desc>Moved code to WebCore.</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>54611</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NTIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMjEgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dz
IHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBh
bGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAg
cmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9X
ZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cDogQWRkZWQuCisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKwogMjAx
MS0wNC0yMSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC03MDksNiArNzA5LDcgQEAKICAgICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAg
ICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAor
ICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9Q
bHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNr
LmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRpb25FcnJvci5oJywKQEAgLTM0MzAsNiArMzQz
MSw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuY3BwJywKICAgICAgICAgICAgICdw
YWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdy
b3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
JywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlLmNwcCcsCiAgICAgICAgICAgICAncGFn
ZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlv
bi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVgogICAgICAgICBkb2N1bWVudElzSFRN
TCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0eU1hc2tJbkF0dHJpYnV0
ZVZhbHVlKTsKIH0KIAordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKQoreworfQorCiB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1
b3RlQ2hhciA9ICdcIic7CkBAIC0zMjcsNiArMzMxLDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudChWZQogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1
dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8vIEdpdmUgYW4gb3Bw
b3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJpYnV0ZXMuCisgICAg
YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCiAgICAg
YXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDExICs3NCwxMiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBO
YW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVu
Z3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAgICB2b2lkIGNvbmNh
dGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBhcHBlbmRBdHRyaWJ1
dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBi
b29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFw
cGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CiAgICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzE2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNp
bmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkltYWdlLmgi
CisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1hcmt1cEFjY3VtdWxh
dG9yLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIK
KyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBjb25zdCBXZWJDb3JlOjpRdWFsaWZp
ZWROYW1lKiBpZ25vcmVkVGFnc1tdID0geworICAgICZIVE1MTmFtZXM6OnNjcmlwdFRhZywKKyAg
ICAmSFRNTE5hbWVzOjpub3NjcmlwdFRhZywKK307CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9y
ZUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IFdURl9BUlJBWV9MRU5HVEgoaWdub3JlZFRhZ3MpOyArK2kpIHsKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoKmlnbm9yZWRUYWdzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6
CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgVmVjdG9y
PE5vZGUqPiopOworICAgIHZpcnR1YWwgflNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBUZXh0Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRD
dXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKworcHJpdmF0ZToKKyAg
ICBQYWdlU2VyaWFsaXplciogbV9zZXJpYWxpemVyOworfTsKKworU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXIqIHNl
cmlhbGl6ZXIsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQorICAgIDogTWFya3VwQWNjdW11bGF0b3Io
bm9kZXMsIEFic29sdXRlVVJMcykKKyAgICAsIG1fc2VyaWFsaXplcihzZXJpYWxpemVyKQorewor
fQorCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5TZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3IoKQoreworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5k
VGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit7CisgICAgRWxlbWVudCogcGFy
ZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQgJiYgIXNob3VsZEln
bm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRl
eHQob3V0LCB0ZXh0KTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3Bh
Y2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVudChlbGVtZW50
KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0LCBlbGVtZW50
LCBuYW1lc3BhY2VzKTsKKyAgICAvLyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBh
bmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBj
dXJyZW50IGNvbnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1l
T3duZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lKiBmcmFtZSA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpLT5jb250ZW50RnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZy
YW1lLT5kb2N1bWVudCgpLT51cmwoKTsKKyAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhdXJsLnBy
b3RvY29sSXMoImFib3V0IikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8g
Z2l2ZSBhIGZha2UgbG9jYXRpb24gdG8gYmxhbmsgZnJhbWVzIHNvIHRoZXkgY2FuIGJlIHJlZmVy
ZW5jZWQgYnkgdGhlIHNlcmlhbGl6ZWQgZnJhbWUuCisgICAgdXJsID0gbV9zZXJpYWxpemVyLT51
cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUg
PSBBdHRyaWJ1dGU6OmNyZWF0ZShIVE1MTmFtZXM6OnNyY0F0dHIsIHVybC5zdHJpbmcoKSk7Cisg
ICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZSwgbmFtZXNwYWNlcyk7
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25v
cmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRFbmRUYWcobm9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK1BhZ2VTZXJpYWxpemVy
OjpSZXNvdXJjZTo6UmVzb3VyY2UoKSB7IH0KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpS
ZXNvdXJjZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IENTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZSht
aW1lVHlwZSkKKyAgICAsIGRhdGEoZGF0YSkKK3sKK30KKworCitQYWdlU2VyaWFsaXplcjo6UGFn
ZVNlcmlhbGl6ZXIoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlcykK
KyAgICA6IG1fcmVzb3VyY2VzKHJlc291cmNlcykKKyAgICAsIG1fYmxhbmtGcmFtZUNvdW50ZXIo
MCkKK3sKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFBhZ2UqIHBhZ2UpCit7
CisgICAgc2VyaWFsaXplRnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIFBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCk7CisgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+
dXJsKCk7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8IHVybCA9PSBibGFua1VSTCgpKSB7Cisg
ICAgICAgIC8vIEZvciBibGFuayBmcmFtZXMgd2UgZ2VuZXJhdGUgYSBmYWtlIFVSTCBzbyB0aGV5
IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZWlyIGNvbnRhaW5pbmcgZnJhbWUuCisgICAgICAgIHVy
bCA9IHVybEZvckJsYW5rRnJhbWUoZnJhbWUpOworICAgIH0KKworICAgIGlmIChtX3Jlc291cmNl
VVJMcy5jb250YWlucyh1cmwpKSB7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBoYXZlIDIg
ZnJhbWUgd2l0aCB0aGUgc2FtZSBVUkwgYnV0IHdoaWNoIHdlcmUgZHluYW1pY2FsbHkgY2hhbmdl
ZCBhbmQgaGF2ZSBub3cKKyAgICAgICAgLy8gICAgICAgIGRpZmZlcmVudCBjb250ZW50LiBTbyB3
ZSBzaG91bGQgc2VyaWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMg
aW4gdGhlCisgICAgICAgIC8vICAgICAgICBjb250YWluaW5nIGZyYW1lLiBBcmchCisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOworICAgIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcih0aGlzLCAmbm9kZXMpOworICAgIENTdHJp
bmcgZnJhbWVIVE1MID0gYWNjdW11bGF0b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQtPmRvY3Vt
ZW50RWxlbWVudCgpLCAwLCBJbmNsdWRlTm9kZSkudXRmOCgpOyAgICAKKyAgICBtX3Jlc291cmNl
cy0+YXBwZW5kKFJlc291cmNlKHVybCwgQ1N0cmluZygidGV4dC9odG1sIiksIFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsKKyAgICBt
X3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0
b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50
Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBFbGVtZW50
KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAvLyBXZSBoYXZlIHRvIHByb2Nl
c3MgaW4tbGluZSBzdHlsZSBhcyBpdCBtaWdodCBjb250YWluIHNvbWUgcmVzb3VyY2VzICh0eXBp
Y2FsbHkgYmFja2dyb3VuZCBpbWFnZXMpLgorICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNT
U0RlY2xhcmF0aW9uKGVsZW1lbnQtPnN0eWxlKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKGVs
ZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpKSB7CisgICAgICAgICAgICBIVE1M
SW1hZ2VFbGVtZW50KiBpbWFnZUVsZW0gPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
ZWxlbWVudCk7CisgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChp
bWFnZUVsZW0tPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAgICAg
IENhY2hlZEltYWdlKiBjYWNoZWRJbWcgPSBpbWFnZUVsZW0tPmNhY2hlZEltYWdlKCk7CisgICAg
ICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltZywgdXJsKTsKKyAgICAgICAgfSBl
bHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAgICAg
ICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlu
a0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlu
a0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NT
U3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29t
cGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7
CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NT
dHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291
cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlm
IChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgICAg
ICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVF
bGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxl
RWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NT
dHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hp
bGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+bmV4dFNp
YmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9CisKK3ZvaWQg
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZyBjc3NUZXh0OworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgIFN0eWxlQmFzZSogaXRlbSA9IHN0eWxlU2hlZXQtPml0ZW0oaSk7CisgICAgICAgIFN0cmlu
ZyBpdGVtVGV4dCA9IGl0ZW0tPmNzc1RleHQoKTsKKyAgICAgICAgaWYgKCFpdGVtVGV4dC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGNzc1RleHQuYXBwZW5kKGl0ZW1UZXh0KTsKKyAgICAgICAg
ICAgIGlmIChpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgICAgIGNz
c1RleHQuYXBwZW5kKCJcblxuIik7CisgICAgICAgIH0KKyAgICAgICAgLy8gU29tZSBydWxlcyBo
YXZlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0aGF0IHdlIG5lZWQgdG8gcmV0cmll
dmUuCisgICAgICAgIGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICAgICAgQ1NT
SW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVt
KTsKKyAgICAgICAgICAgIEtVUkwgaW1wb3J0VVJMID0gc3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoaW1wb3J0UnVsZS0+aHJlZigpKTsKKyAgICAgICAgICAgIGlmIChtX3Jlc291
cmNlVVJMcy5jb250YWlucyhpbXBvcnRVUkwpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0
KCksIGltcG9ydFVSTCk7CisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUo
KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IGFkZCBzdXBwb3J0IGZvciBmb250IGZhY2UgcnVs
ZS4gSXQgaXMgbm90IGNsZWFyIHRvIG1lIGF0IHRoaXMgcG9pbnQgaWYgdGhlIGFjdHVhbCBvdGYv
ZW90IGZpbGUgY2FuCisgICAgICAgICAgICAvLyAgICAgICAgYmUgcmV0cmlldmVkIGZyb20gdGhl
IENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNTdHls
ZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNf
Y2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVybC5pc1ZhbGlk
KCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAgQ1N0cmluZyB0
ZXh0ID0gY3NzVGV4dC51dGY4KCk7CisgICAgICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVzb3Vy
Y2UodXJsLCBDU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0LmRh
dGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7
CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVzb3VyY2VzKENh
Y2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghdXJsLmlzVmFs
aWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxsSW1hZ2UoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gaW1hZ2UtPnJlc3BvbnNl
KCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgbWlt
ZVR5cGUudXRmOCgpLCBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpKSk7CisgICAgbV9yZXNvdXJjZVVS
THMuYWRkKHVybCk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2Vz
Rm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NEZWNsYXJhdGlvbihydWxlLT5zdHlsZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghc3R5bGVEZWNsYXJhdGlvbikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCktPmlz
Q1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBj
c3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlRGVjbGFyYXRp
b24tPnN0eWxlc2hlZXQoKSk7CisKKyAgICAvLyBUaGUgYmFja2dyb3VuZC1pbWFnZSBhbmQgbGlz
dC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9yIG9sKSBhcmUgdGhlIENTUyBwcm9wZXJ0aWVzCisgICAg
Ly8gdGhhdCBtYWtlIHVzZSBvZiBpbWFnZXMuIFdlIGl0ZXJhdGUgdG8gbWFrZSBzdXJlIHdlIGlu
Y2x1ZGUgYW55IG90aGVyCisgICAgLy8gaW1hZ2UgcHJvcGVydGllcyB0aGVyZSBtaWdodCBiZS4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7
ICsraSkgeworICAgICAgICAvLyBGSVhNRTogaXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0
IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0
IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQor
ICAgICAgICAvLyBwcm9wZXJ0eSBJRCwgYnV0IENTU1N0eWxlRGVjbGFyYXRpb24gb25seSBnaXZl
cyBhY2Nlc3MgdG8gcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZXMsIG5vdCBJRHMuCisgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0
eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAgICBpZiAoIWNzc1Zh
bHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENT
U0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oY3Nz
VmFsdWUuZ2V0KCkpOworICAgICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlID0gaW1hZ2VWYWx1
ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZXMg
YXJlIGp1c3QgcGxhY2UtaG9sZGVycyBhbmQgZG8gbm90IGNvbnRhaW4gZGF0YS4KKyAgICAgICAg
aWYgKCFzdHlsZUltYWdlIHx8ICFzdHlsZUltYWdlLT5pc0NhY2hlZEltYWdlKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2Fz
dDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCk7CisKKyAgICAg
ICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNoZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbWFn
ZS0+dXJsKCkpOworICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGltYWdlLCB1cmwpOworICAg
IH0gICAgCit9CisKK0tVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUq
IGZyYW1lKQoreworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1f
YmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1l
VVJMcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICBTdHJpbmcgdXJs
KCJ3eWNpd3lnOi8vZnJhbWUvIik7CisgICAgdXJsLmFwcGVuZChTdHJpbmc6Om51bWJlcihtX2Js
YW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1
cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJl
dHVybiBmYWtlVVJMOyAgICAKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisKKwoKUHJv
cGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW8gdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBQYWdlU2VyaWFsaXplcl9oCisjZGVmaW5lIFBhZ2VTZXJpYWxpemVyX2gKKworI2luY2x1ZGUg
Ikhhc2hNYXAuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNp
bmNsdWRlICJMaXN0SGFzaFNldC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1
ZGUgIlZlY3Rvci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdl
OworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNz
IENTU1N0eWxlU2hlZXQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CisKKy8vIFRoaXMgY2xh
c3MgaXMgdXNlZCB0byBzZXJpYWxpemUgYSBwYWdlIGNvbnRlbnRzIGJhY2sgdG8gdGV4dCAodHlw
aWNhbGx5IEhUTUwpLgorLy8gSXQgc2VyaWFsaXplcyBhbGwgdGhlIHBhZ2UgZnJhbWVzIGFuZCBy
ZXRyZWl2ZXMgcmVzb3VyY2VzIHN1Y2ggYXMgaW1hZ2VzIGFuZCBDU1Mgc3R5bGVzaGVldHMuCitj
bGFzcyBQYWdlU2VyaWFsaXplciB7CitwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAg
ICAgICAgS1VSTCB1cmw7CisgICAgICAgIENTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7CisgICAgICAgIFJlc291
cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBDU3RyaW5nJiBtaW1lVHlwZSwgUGFzc1JlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEpOworICAgIH07CisKKyAgICBleHBsaWNpdCBQYWdlU2VyaWFsaXplcihW
ZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJbml0aWF0ZXMgdGhlIHNlcmlhbGl6YXRpb24g
b2YgdGhlIGZyYW1lJ3MgcGFnZS4gQWxsIHNlcmlhbGl6ZWQgY29udGVudCBhbmQgcmV0cmlldmVk
CisgICAgLy8gcmVzb3VyY2VzIGFyZSBhZGRlZCB0byB0aGUgVmVjdG9yIHBhc3NlZCB0byB0aGUg
Y29uc3RydWN0b3IuIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0CisgICAgLy8gdmVjdG9yIGlz
IHRoZSB0b3AgZnJhbWUgc2VyaWFsaXplZCBjb250ZW50LgorICAgIHZvaWQgc2VyaWFsaXplKFBh
Z2UqKTsKKworICAgIEtVUkwgdXJsRm9yQmxhbmtGcmFtZShGcmFtZSopOworCitwcml2YXRlOgor
ICAgIHZvaWQgc2VyaWFsaXplRnJhbWUoRnJhbWUqKTsKKworICAgIC8vIFNlcmlhbGl6ZXMgdGhl
IHN0eWxlc2hlZXQgYmFjayB0byB0ZXh0IGFuZCBhZGRzIGl0IHRvIHRoZSByZXNvdXJjZXMgaWYg
VVJMIGlzIG5vdC1lbXB0eS4KKyAgICAvLyBJdCBhbHNvIGFkZHMgYW55IHJlc291cmNlcyBpbmNs
dWRlZCBpbiB0aGF0IHN0eWxlc2hlZXQgKGluY2x1ZGluZyBhbnkgaW1wb3J0ZWQgc3R5bGVzaGVl
dHMgYW5kIHRoZWlyIG93biByZXNvdXJjZXMpLgorICAgIHZvaWQgc2VyaWFsaXplQ1NTU3R5bGVT
aGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgS1VSTCYpOworCisgICAgdm9pZCBhZGRJbWFnZVRv
UmVzb3VyY2VzKENhY2hlZEltYWdlKiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9p
ZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKik7CisKKyAgICAvLyBU
aGUgbGlzdCBvZiByZXNvdXJjZXMgcmV0cmVpdmVkIHNvIGZhci4KKyAgICBWZWN0b3I8UmVzb3Vy
Y2U+KiBtX3Jlc291cmNlczsKKworICAgIC8vIFRoZSBsaXN0IG9mIFVSTHMgd2UgaGF2ZSByZXRy
aWV2ZWQgc28gZmFyLCB1c2UgdG8gZW5zdXJlIHdlIG9ubHkgcmV0cmlldmVkIGVhY2ggcmVzb3Vy
Y2Ugb25jZS4KKyAgICBMaXN0SGFzaFNldDxLVVJMPiBtX3Jlc291cmNlVVJMczsKKworICAgIC8v
IFRoZSBVUkxzIHVzZWQgdG8gaWRlbnRpZnkgYmxhbmsgZnJhbWVzLgorICAgIEhhc2hNYXA8RnJh
bWUqLCBLVVJMPiBtX2JsYW5rRnJhbWVVUkxzOworCisgICAgLy8gVXNlZCB0byBnZW5lcmF0ZSB1
bmlxdWUgZmFrZSBVUkxzIGZvciBibGFuayBmcmFtZXMuCisgICAgdW5zaWduZWQgbV9ibGFua0Zy
YW1lQ291bnRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCisKKwor
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NTIzKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMyBAQAorMjAxMS0wNC0y
MSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9kdWNpbmcgYSBuZXcgQVBJIHRv
IHNlcmlhbGl6ZSBhIFdlYlZpZXcgYmFjayB0byBIVE1MLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg5NDcKKworICAgICAgICAqIFdlYktpdC5neXA6
CisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgICogc3JjL1dl
YlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZSk6CisgICAgICAgICogdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNw
cDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplcjogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibHVlX2JhY2tncm91bmQu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0
X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9n
cmVlbl9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9pZnJhbWUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzOiBBZGRlZC4KKyAg
ICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29sLWRvdC5wbmc6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3JhbmdlX2JhY2tncm91bmQucG5nOiBB
ZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBsZV9iYWNrZ3Jv
dW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9yZWRf
YmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAyMDExLTA0LTIxICBSb2xhbmQg
U3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJl
dmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDMsNiArODQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNl
cmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDE0ICszMSwxNCBAQAogI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCiAjZGVm
aW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlU2Vy
aWFsaXplckNsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdl
YlZpZXc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCkBAIC00Niw2
ICs0NiwyMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogLy8gd2hp
Y2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCiBjbGFz
cyBXZWJQYWdlU2VyaWFsaXplciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAg
ICAgICAgV2ViVVJMIHVybDsKKyAgICAgICAgV2ViQ1N0cmluZyBtaW1lVHlwZTsKKyAgICAgICAg
V2ViQ1N0cmluZyBkYXRhOworICAgIH07CisKKyAgICAvLyBTZXJpYWxpemVzIGFsbCB0aGUgZnJh
bWVzIGZyb20gdGhlIFdlYlZpZXcsIHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgLy8gcmVzb3Vy
Y2VzIChzdWNoIGFzIGltYWdlcyBhbmQgQ1NTKSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBwYXNzZWQg
dmVjdG9yLgorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0IHZlY3RvciBpcyB0aGUg
dG9wIGZyYW1lIGNvbnRlbnRzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3RyaXBzLW91
dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCisgICAgV0VCS0lUX0FQSSBz
dGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4qKTsKKwor
ICAgIC8vIElNUE9SVEFOVDoKKyAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVyIGltcGxl
bWVudGF0aW9uIG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAorICAgIC8vIHdpbGwgYmUgcmVt
b3ZlZCBzb29uLgorCisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZy
YW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgogICAgIC8vIFdlIGhhdmUgYSBk
YXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdp
bGwKICAgICAvLyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJQYWdlU2VyaWF6bGllckNsaWVudCBvbmNl
IHRoZSBkYXRhIGJ1ZmZlciBpcyBmdWxsLgpAQCAtNjQsOSArODEsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gc2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9u
ZS4KICAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBw
YXRoIG9mIGRpcmVjdG9yeSB3aGljaAogICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFy
eSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgotICAgIFdFQktJ
VF9BUEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICBXRUJLSVRf
QVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVS
TD4mIGxpbmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKQEAgLTg1
LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNl
dCBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVN
ZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CiAgICAgLy8g
R2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgV2Vi
U3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwp
OworICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRl
Y2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJh
c2UgdGFnIGRlY2xhcmF0aW9uLgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5l
cmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rv
ci5oIgogCiAjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXcu
aCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KIApAQCAtMTc5LDYgKzE4MSwyNCBAQCB2b2lkIHJldHJpZXZlUmVzb3Vy
Y2VzRm9yRnJhbWUoRnJhbWUqIGZyCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit2b2lkIFdlYlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViVmlldyogdmlldywgV2ViVmVjdG9yPFdlYlBhZ2VT
ZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlc1BhcmFtKQoreworICAgIFZlY3RvcjxQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBQYWdlU2VyaWFsaXplciBzZXJp
YWxpemVyKCZyZXNvdXJjZXMpOworICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHN0YXRpY19jYXN0
PFdlYlZpZXdJbXBsKj4odmlldyktPnBhZ2UoKSk7CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+IHJl
c3VsdDsKKyAgICBmb3IgKFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ZXIgIT0gcmVzb3VyY2VzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgUmVzb3VyY2UgcmVzb3VyY2U7CisgICAgICAgIHJlc291cmNl
LnVybCA9IGl0ZXItPnVybDsKKyAgICAgICAgcmVzb3VyY2UubWltZVR5cGUgPSBpdGVyLT5taW1l
VHlwZTsKKyAgICAgICAgcmVzb3VyY2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+ZGF0YS0+ZGF0
YSgpLCBpdGVyLT5kYXRhLT5zaXplKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlc291cmNl
KTsKKyAgICB9CisKKyAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAgICAgCit9CisK
IGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJU
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBh
Z2VOZXdTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxp
emVyLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiV2ViU2V0dGlu
Z3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNs
dWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNs
dWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBw
b3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7CitwdWJsaWM6Cisg
ICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQoZmFsc2UpIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgLyogZW5hYmxlZFBlclNl
dHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29sIG1fc2NyaXB0
RW5hYmxlZDsKK307CisKK2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0IDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0KCkKKyAg
ICAgICAgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSkK
KyAgICAgICAgLCBtX2Nzc01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHQvY3NzIikp
CisgICAgICAgICwgbV9wbmdNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJpbWFnZS9wbmci
KSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkK
KyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KKyAg
ICAgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOworCisgICAgICAgIC8vIFdlIHdh
bnQgdGhlIGltYWdlcyB0byBsb2FkLgorICAgICAgICBXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSBt
X3dlYlZpZXctPnNldHRpbmdzKCk7CisgICAgICAgIHNldHRpbmdzLT5zZXRJbWFnZXNFbmFibGVk
KHRydWUpOworICAgICAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRy
dWUpOworCisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFt
ZUNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7Cisg
ICAgICAgIHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOworICAgICAg
ICBtX3dlYlZpZXctPmNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVS
TExvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUsIGNvbnN0
IFdlYlN0cmluZyYgbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJVUkxSZXNwb25zZSByZXNw
b25zZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6ZSgpOworICAgICAgICByZXNwb25zZS5z
ZXRNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2Rl
KDIwMCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6Okdl
dFdlYktpdFJvb3REaXIoKS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci8iKTsKKyAgICAgICAg
ZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0
OjpSZWdpc3Rlck1vY2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZp
bGVQYXRoKSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5Ub3BGcmFtZShjb25zdCBHVVJM
JiB1cmwpCisgICAgeworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVybFJlcXVlc3Q7CisgICAgICAg
IHVybFJlcXVlc3QuaW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxSZXF1ZXN0LnNldFVSTChXZWJV
UkwodXJsKSk7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmxvYWRSZXF1ZXN0KHVy
bFJlcXVlc3QpOworICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBlbmRpbmcgcmVxdWVzdCBnZXQg
c2VydmVkLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRS
ZXF1ZXN0cygpOworICAgICAgICAvLyBTb21lIHJlcXVlc3RzIGdldCBkZWxheWVkLCBydW4gdGhl
IHRpbWVyLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7
CisgICAgICAgIC8vIFNlcnZlciB0aGUgZGVsYXllZCByZXNvdXJjZXMuCisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgfQorCisg
ICAgdm9pZCBlbmFibGVKUygpCisgICAgeworICAgICAgICBtX3dlYkZyYW1lQ2xpZW50Lm1fc2Ny
aXB0RW5hYmxlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5PbkxvYWQoKQorICAgIHsK
KyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRT
b3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOCgib25Mb2FkKCkiKSkpOworICAgIH0KKworICAgIGNv
bnN0IFdlYlN0cmluZyYgaHRtbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9odG1sTWltZVR5
cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIGNzc01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9jc3NNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYgcG5nTWltZVR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3BuZ01pbWVUeXBlOyB9CisgICAgCisgICAgc3RhdGljIGJvb2wgcmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhjb25zdCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPiYgcmVzb3VyY2VzLCBjaGFyKiB1cmwsIGNoYXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAg
ICAgV2ViVVJMIHdlYlVSTCA9IFdlYlVSTChHVVJMKHVybCkpOworICAgICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlc291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3Qg
V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKyAg
ICAgICAgICAgIGlmIChyZXNvdXJjZS51cmwgPT0gd2ViVVJMICYmICFyZXNvdXJjZS5kYXRhLmlz
RW1wdHkoKSAmJiAhcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKG1pbWVUeXBl
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisKK3ByaXZh
dGU6CisgICAgV2ViU3RyaW5nIG1faHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX2Nzc01p
bWVUeXBlOworICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAgIFRlc3RXZWJGcmFtZUNs
aWVudCBtX3dlYkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVzdHMgdGhhdCBhIHBhZ2Ugd2l0aCBy
ZXNvdXJjZXMgYW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFsbCBpdHMgcmVzb3VyY2Vz
LgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBQYWdlV2l0aEZyYW1lcykKK3sKKyAg
ICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwg
PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIpLCBodG1s
TWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20vaWZyYW1lLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lLmh0bWwi
KSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpZnJh
bWUyLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dy
b3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwg
cG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJi
bHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9w
RnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93
ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHko
KSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1m
cmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0g
cmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5j
b21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291
cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMuc2l6ZSgp
KTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tn
cm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5k
LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiwgInRleHQv
aHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiwgInRleHQvaHRtbCIpKTsKK30K
KworLy8gVGVzdCB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlLCBhbGwgQ1NTIHJlc291cmNl
cyBhcmUgcmVwb3J0ZWQsIGluY2x1ZGluZyB1cmwoKSdzCisvLyBhbmQgaW1wb3J0cyBhbmQgbGlu
a3MuIE5vdGUgdGhhdCB3ZSBkb24ndCB0ZXN0IHRoZSByZXNvdXJjZXMgY29udGVudHMsIHdlIG9u
bHkgbWFrZSBzdXJlCisvLyB0aGV5IGFyZSBhbGwgcmVwb3J0ZWQgd2l0aCB0aGUgcmlnaHQgbWlt
ZSB0eXBlIGFuZCB0aGF0IHRoZXkgY29udGFpbiBzb21lIGRhdGEuCitURVNUX0YoV2ViUGFnZU5l
d1NlcmlhbGl6ZVRlc3QsIENTU1Jlc291cmNlcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9j
a2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVV
UkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoImNzc190ZXN0X3BhZ2UuaHRtbCIpLCBodG1sTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vbGlua19zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImxpbmtfc3R5bGVzLmNz
cyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0
cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBv
cnRfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVzLmNzcyIp
LCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
cmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20veWVsbG93X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInllbGxvd19i
YWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVl
X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoInB1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS91bC1kb3QucG5nIiks
IFdlYlN0cmluZzo6ZnJvbVVURjgoInVsLWRvdC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb2wtZG90LnBu
ZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvbC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
CisgICAgZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7Cisg
ICAgcnVuT25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZp
ZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1l
LgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNv
dXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBh
cmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2Uu
ZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDEyLCByZXNvdXJjZXMuc2l6ZSgpKTsg
Ly8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5
bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3Mi
LCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3Nz
IiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1h
Z2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7
CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS91bC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb2wtZG90
LnBuZyIsICJpbWFnZS9wbmciKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgd2hlbiBzZXJpYWxpemlu
ZyBhIHBhZ2Ugd2l0aCBibGFuayBmcmFtZXMgdGhlc2UgYXJlIHJlcG9ydGVkIHdpdGggdGhlaXIg
cmVzb3VyY2VzLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBCbGFua0ZyYW1lcykK
K3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdl
YlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsYW5r
X2ZyYW1lcy5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAgZW5hYmxl
SlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisgICAgcnVuT25Mb2Fk
KCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJj
ZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJj
ZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0
IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07Cisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20i
KSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmlu
ZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5
KCkpOworCisgICAgRVhQRUNUX0VRKDcsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91
bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwg
ImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImlt
YWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9w
bmciKSk7CisgICAgLy8gVGhlIGJsYW5rIGZyYW1lcyBzaG91bGQgaGF2ZSBnb3QgYSBtYWdpYyBV
UkwuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3
eWNpd3lnOi8vZnJhbWUvMCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMSIsICJ0ZXh0L2h0
bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJ3eWNpd3lnOi8vZnJhbWUvMiIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKK30KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6
ZXJUZXN0LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtf
ZnJhbWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1l
cy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4K
KyAgZnVuY3Rpb24gb25sb2FkKCkgeworICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImlmcmFtZSIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bXlEaXYxIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRl
bnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFn
ZSA8aW1nIHNyYz0nYmx1ZV9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwv
Yj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAg
IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5k
Q2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1M
ICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3Vu
ZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibXlEaXYzIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1l
LmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5B
biBpbWFnZSA8aW1nIHNyYz0nb3JhbmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9y
ZSB0ZXh0PC9iPiIKKworICB9CisgIAorPC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2Fk
KCkiPgorICBUaGlzIHBhZ2UgY3JlYXRlcyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQg
dG8gdGhlbSBkeW5hbWljYWxseS48YnI+PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2Pgor
ICA8ZGl2IGlkPSJteURpdjIiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9i
b2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
Y3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMgcGFnZSBpcyB1c2VkIHRv
IHRlc3QgdGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29ycmVjdGx5IGJ5IHRoZQor
ICAgICBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVTbmFwc2hvdCBtZXRob2QKKy0tPgorCis8
aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibGlu
a19zdHlsZXMuY3NzIiAvPgorCis8c3R5bGU+CitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlcy5j
c3MnKTsKKworQGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmU7CisgIHNyYzog
dXJsKCdDaHVua2ZpdmUub3RmJyk7CisgIHNyYzogdXJsKCdDaHVua2ZpdmUtd2ViZm9udC5lb3Qp
IGZvcm1hdCgnZW90Jyk7Cit9CisKKyNjaHVua2ZpdmVEaXYgeworICBmb250LWZhbWlseTogQ2h1
bmtmaXZlLCBzYW5zLXNlcmlmOworfQorPC9zdHlsZT4KKworPHN0eWxlPgorI2RpdkJsdWUgewor
ICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBuZycpOworfQorCit1bCB7
CisgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgndWwtZG90LnBuZycpOworfQorCitvbCB7CisgIGxp
c3Qtc3R5bGUtaW1hZ2U6IHVybCgnb2wtZG90LnBuZycpOworfQorCis8L3N0eWxlPgorCis8c2Ny
aXB0PgorLy8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHlsZS4KK2Z1bmN0aW9uIG9uTG9h
ZCgpIHsKKyAgdmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHtiYWNrZ3JvdW5kLWltYWdlOnVy
bCgncHVycGxlX2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9kZT0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0ZXh0L2Nzcyc7CisgIHN0eWxl
Tm9kZS5tZWRpYT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7
Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CisKKzwh
LS0gVGV4dCB1c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRpdiBpZD0nY2h1bmtmaXZlRGl2
Jz5UaGlzIHRleHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9kaXY+CisKKzwhLS0gU3R5bGUg
aXMgaW4gbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQnPgorVGhpcyBkaXYgaGFzIGEg
cmVkIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4g
YSBmaWxlIGltcG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2Rpdk9yYW5n
ZSc+CitUaGlzIGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rp
dj4KKworPCEtLSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2
WWVsbG93Jz4KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4K
KzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHlsZSBzZWN0aW9uIGluIHRo
ZSBoZWFkZXIgLS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMgZGl2IGhhcyBhIGJsdWUgaW1h
Z2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbmxpbmVkIC0t
PgorPGRpdiBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgnZ3JlZW5f
YmFja2dyb3VuZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVlbiBpbWFnZSBhcyBpdHMgYmFj
a2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB3
aXRoIEphdmFTY3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0tPgorPGRpdiBpZD0nZGl2UHVy
cGxlJz4KK1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwv
ZGl2PgorCitVbm9yZGVyZWQgbGlzdDo8YnI+Cis8dWw+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxp
PlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVl
bjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC91bD4KKzxicj4KKworT3JkZXJlZCBsaXN0Ojxicj4K
KzxvbD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+
CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L29s
PgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvaWZyYW1lMi5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3JlZW5fYmFja2dyb3VuZC5w
bmciLz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9o
dG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhl
Y3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lm
cmFtZS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisK
KzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91
bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1s
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJv
bV9saW5rLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1w
b3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2Rp
dk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFja2dyb3VuZC5wbmcn
KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAq
CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L2ltcG9ydF9zdHlsZXMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBv
cnRfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjZGl2WWVsbG93IHsK
KyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5j
c3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91
bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xp
bmtfc3R5bGVzLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9w
X2ZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNy
Yz0icmVkX2JhY2tncm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9p
ZnJhbWU+Cis8b2JqZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNy
Yz0iaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci90b3BfZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICAr
ICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFB
QUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpj
d0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkyUlk5T0kvQXhVQkV4WE5BaHMxYWlEbElU
b2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BaU5BQ3NiTW1QS2NBQUFBQVNVVk9SSzVDWUlJPQoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9n
cmVlbl9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFD
TmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dB
QURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZMVRhNlBPZmdZcUFpWXBtZ1kwYU5aRHlFQjBO
Cnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQTVSc0NSdTdDMDFBQUFBQUFTVVZPUks1Q1lJST0KCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wt
ZG90LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFy
eSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvb2wtZG90LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2
UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRT
VVJCVkRoUFkxVGE2UE9mZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVo
aUVBNVJzQ1J1N0MwMUFBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5n
ZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2
UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRT
VVJCVkRoUFkveGZyLzZmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVo
aUVBTlVVQ3pIaG9QaGdBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFja2dyb3VuZC5wbmcKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3Zu
Om1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBs
ZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoK
QWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJP
UncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2
UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRT
VVJCVkRoUFkxenN1ZVEvQXhVQkV4WE5BaHMxYWlEbElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lE
RU1BcjZNQ3QxTHM5NTRBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9yZWRfYmFja2dyb3VuZC5wbmcKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1p
bWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNr
Z3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFS
blFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRo
UFkzd3JvL0tmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBUHBr
Q1ZGZjdlQW9BQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3QucG5nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3QucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFV
Q0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFK
Y0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTN3cm8vS2ZnWXFBaVlwbWdZMGFO
WkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUFQcGtDVkZmN2VBb0FBQUFBU1VWT1JLNUNZ
SUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxl
IG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5nCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFw
cGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFV
Q0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFK
Y0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWS96L2llRS9BeFVCRXhYTkFoczFh
aURsSVRvYQpocU5oU0VZSWpDWWJNZ0lOVGNzSURFTUFGZUlER0dIcUJyWUFBQUFBU1VWT1JLNUNZ
SUk9Cgo=
</data>
<flag name="review"
          id="83322"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90610</attachid>
            <date>2011-04-21 14:59:57 -0700</date>
            <delta_ts>2011-04-22 13:53:22 -0700</delta_ts>
            <desc>Addressed Adam&apos;s and Alexey&apos;s comments</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>57056</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NTIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDQtMjEgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dz
IHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBh
bGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAg
cmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9X
ZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNw
cDogQWRkZWQuCisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKwogMjAx
MS0wNC0yMSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5pa29sYXMgWmltbWVybWFubi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9u
IDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBA
IC03MDksNiArNzA5LDcgQEAKICAgICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAg
ICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAor
ICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9Q
bHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNr
LmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRpb25FcnJvci5oJywKQEAgLTM0MzAsNiArMzQz
MSw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuY3BwJywKICAgICAgICAgICAgICdw
YWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdy
b3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
JywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlLmNwcCcsCiAgICAgICAgICAgICAncGFn
ZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlv
bi5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVgogICAgICAgICBkb2N1bWVudElzSFRN
TCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0eU1hc2tJbkF0dHJpYnV0
ZVZhbHVlKTsKIH0KIAordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKQoreworfQorCiB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1
b3RlQ2hhciA9ICdcIic7CkBAIC0zMjcsNiArMzMxLDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudChWZQogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1
dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8vIEdpdmUgYW4gb3Bw
b3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJpYnV0ZXMuCisgICAg
YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCiAgICAg
YXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDExICs3NCwxMiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBO
YW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVu
Z3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAgICB2b2lkIGNvbmNh
dGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBhcHBlbmRBdHRyaWJ1
dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBi
b29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFw
cGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CiAgICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKQEAgLTkyLDcgKzkz
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZE9wZW5U
YWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKik7CiAg
ICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQpOwotICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDREFUQVNl
Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwogICAgIHZv
aWQgYXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwg
TmFtZXNwYWNlcyopOwogICAgIGJvb2wgc2hvdWxkU2VsZkNsb3NlKGNvbnN0IE5vZGUqKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVy
LmgiCisKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVs
ZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdl
LmgiCisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2Uu
aCIKKyNpbmNsdWRlICJUZXh0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSogaWdub3Jl
ZFRhZ3NbXSA9IHsKKyAgICAmSFRNTE5hbWVzOjpzY3JpcHRUYWcsCisgICAgJkhUTUxOYW1lczo6
bm9zY3JpcHRUYWcsCit9OworCitzdGF0aWMgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSog
ZnJhbWVPd25lclNyY0F0dHJpYnV0ZXNbXSA9IHsKKyAgICAmSFRNTE5hbWVzOjpzcmNBdHRyLAor
ICAgICZIVE1MTmFtZXM6OmRhdGFBdHRyLAorfTsKKworc3RhdGljIGJvb2wgc2hvdWxkSWdub3Jl
RWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
V1RGX0FSUkFZX0xFTkdUSChpZ25vcmVkVGFncyk7ICsraSkgeworICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZSgqaWdub3JlZFRhZ3NbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVk
TmFtZSogZ2V0RnJhbWVPd25lclVSTEF0dHJpYnV0ZShIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZy
YW1lT3duZXIpCit7CisgICAgLy8gRklYTUU6IGlkZWFsbHkgSFRNTEZyYW1lT3duZXJFbGVtZW50
IHdvdWxkIGhhdmUgYSBtZXRob2QgdG8gcmV0dXJuIHRoZSBVUkwgYXR0cmlidXRlIG5hbWUuCisg
ICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZnJhbWVPd25lci0+YXR0cmlidXRlcyh0cnVl
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kp
IHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJ
dGVtKGkpOworICAgICAgICBpZiAoZnJhbWVPd25lci0+aXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRl
KSkKKyAgICAgICAgICAgIHJldHVybiAmKGF0dHJpYnV0ZS0+bmFtZSgpKTsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1Ymxp
YyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgVmVjdG9yPE5vZGUqPiopOworICAgIHZp
cnR1YWwgflNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigpOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kiwg
TmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwg
RWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5v
ZGUqKTsKKworcHJpdmF0ZToKKyAgICBQYWdlU2VyaWFsaXplciogbV9zZXJpYWxpemVyOworfTsK
KworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3IoUGFnZVNlcmlhbGl6ZXIqIHNlcmlhbGl6ZXIsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQorICAg
IDogTWFya3VwQWNjdW11bGF0b3Iobm9kZXMsIEFic29sdXRlVVJMcykKKyAgICAsIG1fc2VyaWFs
aXplcihzZXJpYWxpemVyKQoreworfQorCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5T
ZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoKQoreworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQp
Cit7CisgICAgRWxlbWVudCogcGFyZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOworICAgIGlm
IChwYXJlbnQgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICAgICAgTWFya3Vw
QWNjdW11bGF0b3I6OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKK30KKwordm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmICghc2hvdWxk
SWdub3JlRWxlbWVudChlbGVtZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVsZW1lbnQob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKKyAgICAvLyBGSVhNRTogZm9yIG9i
amVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBi
eSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwg
RWxlbWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIE5hbWVzcGFjZXMq
IG5hbWVzcGFjZXMpCit7CisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpt
ZXRhVGFnKSAmJiBhdHRyaWJ1dGUubmFtZSgpID09IEhUTUxOYW1lczo6Y29udGVudEF0dHIpIHsK
KyAgICAgICAgLy8gV2UgbWFrZSBldmVyeXRoaW5nIFVURi04IHNvIHdlIGRvbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgZW5jb2RpbmdzLgorICAgICAgICBTdHJpbmcgY2hhcnNldCA9IGV4dHJhY3RD
aGFyc2V0RnJvbU1lZGlhVHlwZShhdHRyaWJ1dGUudmFsdWUoKSkubG93ZXIoKS5zdHJpcFdoaXRl
U3BhY2UoKTsKKyAgICAgICAgaWYgKGNoYXJzZXQgIT0gInV0Zi04IiAmJiBjaGFyc2V0ICE9ICJ1
dGY4IikgeworICAgICAgICAgICAgUmVmUHRyPEF0dHJpYnV0ZT4gbmV3QXR0cmlidXRlID0gYXR0
cmlidXRlLmNsb25lKCk7CisgICAgICAgICAgICBuZXdBdHRyaWJ1dGUtPnNldFZhbHVlKG1ha2VT
dHJpbmcoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShhdHRyaWJ1dGUudmFsdWUoKSksICI7
Y2hhcnNldD1VVEYtOCIpKTsKKyAgICAgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRB
dHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqbmV3QXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVudCwgYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKK30K
Kwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0
ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBuYW1l
c3BhY2VzKQoreworICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSBz
dGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICBGcmFtZSog
ZnJhbWUgPSBmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKTsK
KyAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhdXJsLnByb3RvY29sSXMoImFib3V0IikpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSBhIGZha2UgbG9jYXRpb24gdG8g
YmxhbmsgZnJhbWVzIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHNlcmlhbGl6ZWQg
ZnJhbWUuCisgICAgdXJsID0gbV9zZXJpYWxpemVyLT51cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsK
KyAgICBjb25zdCBRdWFsaWZpZWROYW1lKiB1cmxBdHRyaWJ1dGUgPSBnZXRGcmFtZU93bmVyVVJM
QXR0cmlidXRlKGZyYW1lT3duZXIpOworICAgIGlmICghdXJsQXR0cmlidXRlKSB7CisgICAgICAg
IExPR19FUlJPUigiTm8gVVJMIGF0dHJpYnV0ZSBmb3VuZCBmb3IgZnJhbWUgb3duZXIuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0g
QXR0cmlidXRlOjpjcmVhdGUoSFRNTE5hbWVzOjpzcmNBdHRyLCB1cmwuc3RyaW5nKCkpOworICAg
IGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGUsIG5hbWVzcGFjZXMpOwor
fQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc2hvdWxkSWdub3Jl
RWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kVGFnKG5vZGUpOworfQorCitQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U6OlJlc291cmNl
KCkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhKQorICAgIDogdXJsKHVybCkKKyAgICAsIG1pbWVUeXBlKG1pbWVUeXBlKQorICAgICwgZGF0
YShkYXRhKQoreworfQorCitQYWdlU2VyaWFsaXplcjo6UGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlcykKKyAgICA6IG1fcmVzb3VyY2VzKHJl
c291cmNlcykKKyAgICAsIG1fYmxhbmtGcmFtZUNvdW50ZXIoMCkKK3sKK30KKwordm9pZCBQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplKFBhZ2UqIHBhZ2UpCit7CisgICAgc2VyaWFsaXplRnJhbWUo
cGFnZS0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVG
cmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+dXJsKCk7CisgICAgaWYgKCF1cmwu
aXNWYWxpZCgpIHx8IHVybC5wcm90b2NvbElzKCJhYm91dCIpKSB7CisgICAgICAgIC8vIEZvciBi
bGFuayBmcmFtZXMgd2UgZ2VuZXJhdGUgYSBmYWtlIFVSTCBzbyB0aGV5IGNhbiBiZSByZWZlcmVu
Y2VkIGJ5IHRoZWlyIGNvbnRhaW5pbmcgZnJhbWUuCisgICAgICAgIHVybCA9IHVybEZvckJsYW5r
RnJhbWUoZnJhbWUpOworICAgIH0KKworICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1
cmwpKSB7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBoYXZlIDIgZnJhbWUgd2l0aCB0aGUg
c2FtZSBVUkwgYnV0IHdoaWNoIHdlcmUgZHluYW1pY2FsbHkgY2hhbmdlZCBhbmQgaGF2ZSBub3cK
KyAgICAgICAgLy8gZGlmZmVyZW50IGNvbnRlbnQuIFNvIHdlIHNob3VsZCBzZXJpYWxpemUgYm90
aCBhbmQgc29tZWhvdyByZW5hbWUgdGhlIGZyYW1lIHNyYyBpbiB0aGUgY29udGFpbmluZworICAg
ICAgICAvLyBmcmFtZS4gQXJnIQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PE5vZGUqPiBub2RlczsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0
b3IodGhpcywgJm5vZGVzKTsKKyAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IGFjY3VtdWxhdG9yLnNl
cmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUp
LnV0ZjgoKTsgICAgCisgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIFN0cmlu
ZygidGV4dC9odG1sIiksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZy
YW1lSFRNTC5sZW5ndGgoKSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAg
IGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIg
IT0gbm9kZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7Cisg
ICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIAorICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOwor
ICAgICAgICAvLyBXZSBoYXZlIHRvIHByb2Nlc3MgaW4tbGluZSBzdHlsZSBhcyBpdCBtaWdodCBj
b250YWluIHNvbWUgcmVzb3VyY2VzICh0eXBpY2FsbHkgYmFja2dyb3VuZCBpbWFnZXMpLgorICAg
ICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKGVsZW1lbnQtPnN0eWxlKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpp
bWdUYWcpKSB7CisgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBLVVJM
IHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFn
ZSA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgICAgIGFkZEltYWdlVG9S
ZXNvdXJjZXMoY2FjaGVkSW1hZ2UsIHVybCk7CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7CisgICAgICAgICAgICBIVE1MTGlua0Vs
ZW1lbnQqIGxpbmtFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVu
dCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtFbGVtZW50LT5zaGVldCgp
OworICAgICAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewor
ICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICAgICAgICAg
IHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0
KSwgdXJsKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9yZXNvdXJjZVVSTHMuY29udGFpbnMo
dXJsKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgeworICAgICAgICAgICAgSFRNTFN0eWxlRWxlbWVu
dCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQp
OworICAgICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZUVsZW1lbnQtPnNoZWV0KCk7
CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAg
ICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVT
aGVldCo+KHNoZWV0KSwgS1VSTCgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoRnJh
bWUqIGNoaWxkRnJhbWUgPSBmcmFtZS0+dHJlZSgpLT5maXJzdENoaWxkKCk7IGNoaWxkRnJhbWU7
IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCktPm5leHRTaWJsaW5nKCkpCisgICAgICAg
IHNlcmlhbGl6ZUZyYW1lKGNoaWxkRnJhbWUpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEtV
UkwmIHVybCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGNzc1RleHQ7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVC
YXNlKiBpdGVtID0gc3R5bGVTaGVldC0+aXRlbShpKTsKKyAgICAgICAgaWYgKGl0ZW0tPmlzQ2hh
cnNldFJ1bGUoKSkgeworICAgICAgICAgICAgLy8gV2UgbWFrZSBldmVyeXRoaW5nIFVURi04IHNv
IHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgZW5jb2RpbmdzLgorICAgICAgICAgICAgY3Nz
VGV4dC5hcHBlbmQoIkBjaGFyc2V0IFwiVVRGLThcIjtcblxuIik7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0
KCk7CisgICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NU
ZXh0LmFwcGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxl
bmd0aCgpIC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAg
ICAgICB9CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJ
bXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9y
dFVSTCA9IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhy
ZWYoKSk7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJM
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0
eWxlU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9
IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBhZGQgc3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBh
dCB0aGlzIHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAg
Ly8gYmUgcmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAg
IH0gZWxzZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAg
fQorCisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVy
bCkpIHsKKyAgICAgICAgQ1N0cmluZyB0ZXh0ID0gY3NzVGV4dC50b1N0cmluZygpLnV0ZjgoKTsK
KyAgICAgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIFN0cmluZygidGV4dC9j
c3MiKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpKSk7
CisgICAgICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworICAgIH0KK30KKwordm9pZCBQYWdl
U2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0
IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgbV9yZXNvdXJjZVVSTHMu
Y29udGFpbnModXJsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZSB8fCBpbWFn
ZS0+aW1hZ2UoKSA9PSBJbWFnZTo6bnVsbEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IFN0cmluZyBtaW1lVHlwZSA9IGltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7CisgICAgbV9y
ZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIG1pbWVUeXBlLCBpbWFnZS0+aW1hZ2UoKS0+
ZGF0YSgpKSk7CisgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7Cit9CisKK3ZvaWQgUGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUp
Cit7CisgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihydWxlLT5zdHlsZSgp
KTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNs
YXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uKQoreworICAgIGlm
ICghc3R5bGVEZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzdHlsZURl
Y2xhcmF0aW9uLT5zdHlsZXNoZWV0KCktPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KHN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKSk7CisKKyAgICAvLyBU
aGUgYmFja2dyb3VuZC1pbWFnZSBhbmQgbGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9yIG9sKSBh
cmUgdGhlIENTUyBwcm9wZXJ0aWVzCisgICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBpbWFnZXMuIFdl
IGl0ZXJhdGUgdG8gbWFrZSBzdXJlIHdlIGluY2x1ZGUgYW55IG90aGVyCisgICAgLy8gaW1hZ2Ug
cHJvcGVydGllcyB0aGVyZSBtaWdodCBiZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAvLyBGSVhNRTogaXQn
cyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdl
dAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxk
IGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQorICAgICAgICAvLyBwcm9wZXJ0eSBJRCwgYnV0IENT
U1N0eWxlRGVjbGFyYXRpb24gb25seSBnaXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkKKyAgICAgICAg
Ly8gbmFtZXMsIG5vdCBJRHMuCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBz
dHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0
ZW0oaSkpOworICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oY3NzVmFsdWUuZ2V0KCkpOworICAgICAgICBTdHlsZUlt
YWdlKiBzdHlsZUltYWdlID0gaW1hZ2VWYWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAg
ICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZXMgYXJlIGp1c3QgcGxhY2UtaG9sZGVycyBhbmQgZG8g
bm90IGNvbnRhaW4gZGF0YS4KKyAgICAgICAgaWYgKCFzdHlsZUltYWdlIHx8ICFzdHlsZUltYWdl
LT5pc0NhY2hlZEltYWdlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDYWNo
ZWRJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFn
ZSktPmNhY2hlZEltYWdlKCk7CisKKyAgICAgICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNoZWV0LT5k
b2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbWFnZS0+dXJsKCkpOworICAgICAgICBhZGRJbWFnZVRv
UmVzb3VyY2VzKGltYWdlLCB1cmwpOworICAgIH0gICAgCit9CisKK0tVUkwgUGFnZVNlcmlhbGl6
ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIEhhc2hNYXA8RnJhbWUq
LCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7Cisg
ICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0
ZXItPnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gbWFrZVN0cmluZygid3ljaXd5ZzovL2ZyYW1l
LyIsIFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKykpOworICAgIEtVUkwgZmFr
ZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJh
bWUsIGZha2VVUkwpOworCisgICAgcmV0dXJuIGZha2VVUkw7ICAgIAorfQorCit9CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFn
ZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9oCisKKyNpbmNsdWRlICJIYXNo
TWFwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktVUkxIYXNoLmgiCisjaW5jbHVk
ZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJW
ZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRJbWFnZTsKK2Ns
YXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFzcyBDU1NT
dHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworCisvLyBUaGlzIGNsYXNzIGlz
IHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBiYWNrIHRvIHRleHQgKHR5cGljYWxs
eSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBwYWdlIGZyYW1lcyBhbmQgcmV0cmll
dmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NTIHN0eWxlc2hlZXRzLgorY2xhc3Mg
UGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAg
IEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7CisgICAgICAgIFJlc291cmNlKGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBhZ2VTZXJpYWxpemVyKFZlY3RvcjxS
ZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUg
ZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50IGFuZCByZXRyaWV2ZWQKKyAgICAv
LyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3IgcGFzc2VkIHRvIHRoZSBjb25zdHJ1
Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAgICAvLyB2ZWN0b3IgaXMgdGhlIHRv
cCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9pZCBzZXJpYWxpemUoUGFnZSopOwor
CisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8gU2VyaWFsaXplcyB0aGUgc3R5bGVz
aGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJlc291cmNlcyBpZiBVUkwgaXMg
bm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3VyY2VzIGluY2x1ZGVkIGlu
IHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBzdHlsZXNoZWV0cyBhbmQg
dGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2b2lkIGFkZEltYWdlVG9SZXNvdXJj
ZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCByZXRyaWV2ZVJlc291cmNl
c0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHJldHJp
ZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsKKworICAgIFZlY3RvcjxSZXNv
dXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0PEtVUkw+IG1fcmVzb3VyY2VVUkxz
OworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5rRnJhbWVVUkxzOworICAgIHVuc2ln
bmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisKKyNlbmRpZgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA4NDUyMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjEgIEpheSBDaXZlbGxp
ICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IEFQSSB0byBzZXJpYWxpemUgYSBX
ZWJWaWV3IGJhY2sgdG8gSFRNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1
YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHRlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXI6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3Vu
ZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Mi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFja2dyb3VuZC5wbmc6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcmVkX2JhY2tncm91bmQucG5n
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3VsLWRvdC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93X2Jh
Y2tncm91bmQucG5nOiBBZGRlZC4KKwogMjAxMS0wNC0yMSAgUm9sYW5kIFN0ZWluZXIgIDxyb2xh
bmRzdGVpbmVyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEds
YXprb3YuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA4MzY0NSkK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAt
ODQzLDYgKzg0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9Q
b3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICB9XSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJp
YWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGFnZVNlcmlhbGl6ZXIuaAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCAr
MzEsMTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmluZSBXZWJQYWdlU2Vy
aWFsaXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2Vi
Q1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7
CiBjbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJWaWV3OwogdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiArNDYsMjMgQEAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4gYWxs
IHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3MgV2ViUGFnZVNlcmlh
bGl6ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIFdlYlVSTCB1
cmw7CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJpbmcgZGF0
YTsKKyAgICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSBX
ZWJWaWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNlcyAoc3VjaCBhcyBp
bWFnZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAgICAv
LyBUaGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBjb250
ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0
YWcgb3IgbGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2Vy
aWFsaXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJTVBPUlRB
TlQ6CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBh
IHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KKwor
CiAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlh
bGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8g
dGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCiAgICAgLy8gc2Vx
dWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBidWZm
ZXIgaXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8vIHNhdmVkIGxpbmtz
LCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCiAgICAgLy8gVGhl
IHBhcmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rv
cnkgd2hpY2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVk
ZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBi
b29sIHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9v
bCBzZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiYgbG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBAQCBw
dWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24u
CiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNs
YXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBN
T1RXIGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0
ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJLSVRf
QVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25z
dCBXZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNsYXJh
dGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFnRGVj
bGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lv
biA4MzY0NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1
ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIK
ICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAi
V2ViVmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CiAKQEAgLTE3OSw2ICsxODEsMjQgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZy
YW1lKiBmcgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVz
b3VyY2U+KiByZXNvdXJjZXNQYXJhbSkKK3sKKyAgICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgc2VyaWFsaXplcigmcmVzb3Vy
Y2VzKTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6ZShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+
KHZpZXcpLT5wYWdlKCkpOworCisgICAgVmVjdG9yPFJlc291cmNlPiByZXN1bHQ7CisgICAgZm9y
IChWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9
IHJlc291cmNlcy5iZWdpbigpOyBpdGVyICE9IHJlc291cmNlcy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIFJlc291cmNlIHJlc291cmNlOworICAgICAgICByZXNvdXJjZS51cmwgPSBpdGVyLT51
cmw7CisgICAgICAgIHJlc291cmNlLm1pbWVUeXBlID0gaXRlci0+bWltZVR5cGUuYXNjaWkoKTsK
KyAgICAgICAgcmVzb3VyY2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+ZGF0YS0+ZGF0YSgpLCBp
dGVyLT5kYXRhLT5zaXplKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlc291cmNlKTsKKyAg
ICB9CisKKyAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAgICAgCit9CisKIGJvb2wg
V2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdT
ZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMjYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNp
bmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgi
CisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIK
KyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJX
ZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJX
ZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RX
ZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7CitwdWJsaWM6CisgICAgVGVz
dFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1
YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgLyogZW5hYmxlZFBlclNldHRpbmdz
ICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29sIG1fc2NyaXB0RW5hYmxl
ZDsKK307CisKK2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0IDogcHVibGljIHRlc3Rpbmc6
OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0KCkKKyAgICAgICAg
OiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSkKKyAgICAg
ICAgLCBtX2Nzc01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHQvY3NzIikpCisgICAg
ICAgICwgbV9wbmdNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJpbWFnZS9wbmciKSkKKyAg
ICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7
CisgICAgICAgIC8vIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KKyAgICAgICAg
bV93ZWJWaWV3ID0gV2ViVmlldzo6Y3JlYXRlKDApOworCisgICAgICAgIC8vIFdlIHdhbnQgdGhl
IGltYWdlcyB0byBsb2FkLgorICAgICAgICBXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3dlYlZp
ZXctPnNldHRpbmdzKCk7CisgICAgICAgIHNldHRpbmdzLT5zZXRJbWFnZXNFbmFibGVkKHRydWUp
OworICAgICAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwor
CisgICAgICAgIG1fd2ViVmlldy0+aW5pdGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVu
dCk7CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lzdGVyQWxsTW9ja2VkVVJMcygpOworICAgICAgICBtX3dl
YlZpZXctPmNsb3NlKCk7CisgICAgfQorCisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQo
Y29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFdlYlN0
cmluZyYgbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsK
KyAgICAgICAgcmVzcG9uc2UuaW5pdGlhbGl6ZSgpOworICAgICAgICByZXNwb25zZS5zZXRNSU1F
VHlwZShtaW1lVHlwZSk7CisgICAgICAgIHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7
CisgICAgICAgIHN0ZDo6c3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktp
dFJvb3REaXIoKS51dGY4KCk7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci8iKTsKKyAgICAgICAgZmlsZVBh
dGguYXBwZW5kKGZpbGVOYW1lLnV0ZjgoKSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZWdp
c3Rlck1vY2tlZFVSTCh1cmwsIHJlc3BvbnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRo
KSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkVVJMSW5Ub3BGcmFtZShjb25zdCBHVVJMJiB1cmwp
CisgICAgeworICAgICAgICBXZWJVUkxSZXF1ZXN0IHVybFJlcXVlc3Q7CisgICAgICAgIHVybFJl
cXVlc3QuaW5pdGlhbGl6ZSgpOworICAgICAgICB1cmxSZXF1ZXN0LnNldFVSTChXZWJVUkwodXJs
KSk7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmxvYWRSZXF1ZXN0KHVybFJlcXVl
c3QpOworICAgICAgICAvLyBNYWtlIHN1cmUgYW55IHBlbmRpbmcgcmVxdWVzdCBnZXQgc2VydmVk
LgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0
cygpOworICAgICAgICAvLyBTb21lIHJlcXVlc3RzIGdldCBkZWxheWVkLCBydW4gdGhlIHRpbWVy
LgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7CisgICAg
ICAgIC8vIFNlcnZlciB0aGUgZGVsYXllZCByZXNvdXJjZXMuCisgICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgfQorCisgICAgdm9p
ZCBlbmFibGVKUygpCisgICAgeworICAgICAgICBtX3dlYkZyYW1lQ2xpZW50Lm1fc2NyaXB0RW5h
YmxlZCA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBydW5PbkxvYWQoKQorICAgIHsKKyAgICAg
ICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2Uo
V2ViU3RyaW5nOjpmcm9tVVRGOCgib25Mb2FkKCkiKSkpOworICAgIH0KKworICAgIGNvbnN0IFdl
YlN0cmluZyYgaHRtbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9odG1sTWltZVR5cGU7IH0K
KyAgICBjb25zdCBXZWJTdHJpbmcmIGNzc01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jc3NN
aW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYgcG5nTWltZVR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3BuZ01pbWVUeXBlOyB9CisgICAgCisgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VWZWN0
b3JDb250YWlucyhjb25zdCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiYg
cmVzb3VyY2VzLCBjaGFyKiB1cmwsIGNoYXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2Vi
VVJMIHdlYlVSTCA9IFdlYlVSTChHVVJMKHVybCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHJlc291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgV2ViUGFn
ZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKyAgICAgICAg
ICAgIGlmIChyZXNvdXJjZS51cmwgPT0gd2ViVVJMICYmICFyZXNvdXJjZS5kYXRhLmlzRW1wdHko
KSAmJiAhcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKG1pbWVUeXBlKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisKK3ByaXZhdGU6Cisg
ICAgV2ViU3RyaW5nIG1faHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX2Nzc01pbWVUeXBl
OworICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAgIFRlc3RXZWJGcmFtZUNsaWVudCBt
X3dlYkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVzdHMgdGhhdCBhIHBhZ2Ugd2l0aCByZXNvdXJj
ZXMgYW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFsbCBpdHMgcmVzb3VyY2VzLgorVEVT
VF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBQYWdlV2l0aEZyYW1lcykKK3sKKyAgICAvLyBS
ZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZy
YW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIpLCBodG1sTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vaWZyYW1lLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lLmh0bWwiKSwgaHRt
bE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpZnJhbWUyLmh0
bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5w
bmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2Jh
Y2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUo
dG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJj
ZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3
LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7Cisg
ICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4K
KyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3Vy
Y2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJl
KFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRh
dGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8g
VGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3Jv
dW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQu
cG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiwgInRleHQvaHRtbCIp
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiwgInRleHQvaHRtbCIpKTsKK30KKworLy8g
VGVzdCB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlLCBhbGwgQ1NTIHJlc291cmNlcyBhcmUg
cmVwb3J0ZWQsIGluY2x1ZGluZyB1cmwoKSdzCisvLyBhbmQgaW1wb3J0cyBhbmQgbGlua3MuIE5v
dGUgdGhhdCB3ZSBkb24ndCB0ZXN0IHRoZSByZXNvdXJjZXMgY29udGVudHMsIHdlIG9ubHkgbWFr
ZSBzdXJlCisvLyB0aGV5IGFyZSBhbGwgcmVwb3J0ZWQgd2l0aCB0aGUgcmlnaHQgbWltZSB0eXBl
IGFuZCB0aGF0IHRoZXkgY29udGFpbiBzb21lIGRhdGEuCitURVNUX0YoV2ViUGFnZU5ld1Nlcmlh
bGl6ZVRlc3QsIENTU1Jlc291cmNlcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZy
YW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdl
YlN0cmluZzo6ZnJvbVVURjgoImNzc190ZXN0X3BhZ2UuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vbGlu
a19zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImxpbmtfc3R5bGVzLmNzcyIpLCBj
c3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5
bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVzLmNzcyIpLCBjc3NN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2Jh
Y2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20veWVs
bG93X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInllbGxvd19iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tn
cm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwg
cG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
InB1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS91bC1kb3QucG5nIiksIFdlYlN0
cmluZzo6ZnJvbVVURjgoInVsLWRvdC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb2wtZG90LnBuZyIpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJvbC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAg
ZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisgICAgcnVu
T25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiBy
ZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZy
ZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAK
KyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgorICAg
IGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNb
MF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2Vi
Q1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5p
c0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDEyLCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhl
cmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNz
cyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5z
KHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiLCAidGV4
dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIiwgInRl
eHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikp
OworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAg
RVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS91bC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb2wtZG90LnBuZyIs
ICJpbWFnZS9wbmciKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBh
Z2Ugd2l0aCBibGFuayBmcmFtZXMgdGhlc2UgYXJlIHJlcG9ydGVkIHdpdGggdGhlaXIgcmVzb3Vy
Y2VzLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBCbGFua0ZyYW1lcykKK3sKKyAg
ICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0
b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsYW5rX2ZyYW1l
cy5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3Jv
dW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwg
cG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJi
bHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAgZW5hYmxlSlMoKTsK
KyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisgICAgcnVuT25Mb2FkKCk7CisK
KyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7Cisg
ICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOwor
ICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUg
Zmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7Cisg
ICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4
dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOwor
CisgICAgRVhQRUNUX0VRKDcsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUg
bm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdl
L3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3Bu
ZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7
CisgICAgLy8gVGhlIGJsYW5rIGZyYW1lcyBzaG91bGQgaGF2ZSBnb3QgYSBtYWdpYyBVUkwuCisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3ln
Oi8vZnJhbWUvMCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMSIsICJ0ZXh0L2h0bWwiKSk7
CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNp
d3lnOi8vZnJhbWUvMiIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKK30KClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0
LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVz
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4KKyAgZnVu
Y3Rpb24gb25sb2FkKCkgeworICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
ImlmcmFtZSIpOworICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYx
Iik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1
bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1n
IHNyYz0nYmx1ZV9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisK
KyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQo
ZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9Cisg
ICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3VuZC5wbmcn
Lj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
bXlEaXYzIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRl
bnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFn
ZSA8aW1nIHNyYz0nb3JhbmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0
PC9iPiIKKworICB9CisgIAorPC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgor
ICBUaGlzIHBhZ2UgY3JlYXRlcyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQgdG8gdGhl
bSBkeW5hbWljYWxseS48YnI+PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2PgorICA8ZGl2
IGlkPSJteURpdjIiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9ib2R5Pgor
Cis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rl
c3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3Qg
dGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29ycmVjdGx5IGJ5IHRoZQorICAgICBX
ZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVTbmFwc2hvdCBtZXRob2QKKy0tPgorCis8aGVhZD4K
KworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibGlua19zdHls
ZXMuY3NzIiAvPgorCis8c3R5bGU+CitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlcy5jc3MnKTsK
KworQGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmU7CisgIHNyYzogdXJsKCdD
aHVua2ZpdmUub3RmJyk7CisgIHNyYzogdXJsKCdDaHVua2ZpdmUtd2ViZm9udC5lb3QpIGZvcm1h
dCgnZW90Jyk7Cit9CisKKyNjaHVua2ZpdmVEaXYgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZl
LCBzYW5zLXNlcmlmOworfQorPC9zdHlsZT4KKworPHN0eWxlPgorI2RpdkJsdWUgeworICBiYWNr
Z3JvdW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBuZycpOworfQorCit1bCB7CisgIGxp
c3Qtc3R5bGUtaW1hZ2U6IHVybCgndWwtZG90LnBuZycpOworfQorCitvbCB7CisgIGxpc3Qtc3R5
bGUtaW1hZ2U6IHVybCgnb2wtZG90LnBuZycpOworfQorCis8L3N0eWxlPgorCis8c2NyaXB0Pgor
Ly8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHlsZS4KK2Z1bmN0aW9uIG9uTG9hZCgpIHsK
KyAgdmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHtiYWNrZ3JvdW5kLWltYWdlOnVybCgncHVy
cGxlX2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9kZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnc3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0ZXh0L2Nzcyc7CisgIHN0eWxlTm9kZS5t
ZWRpYT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVU
ZXh0Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7Cit9Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CisKKzwhLS0gVGV4
dCB1c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRpdiBpZD0nY2h1bmtmaXZlRGl2Jz5UaGlz
IHRleHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4g
bGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQnPgorVGhpcyBkaXYgaGFzIGEgcmVkIGlt
YWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYSBmaWxl
IGltcG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2Rpdk9yYW5nZSc+CitU
aGlzIGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKwor
PCEtLSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2WWVsbG93
Jz4KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2
PgorCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHlsZSBzZWN0aW9uIGluIHRoZSBoZWFk
ZXIgLS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMgZGl2IGhhcyBhIGJsdWUgaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbmxpbmVkIC0tPgorPGRp
diBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgnZ3JlZW5fYmFja2dy
b3VuZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVlbiBpbWFnZSBhcyBpdHMgYmFja2dyb3Vu
ZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB3aXRoIEph
dmFTY3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0tPgorPGRpdiBpZD0nZGl2UHVycGxlJz4K
K1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2Pgor
CitVbm9yZGVyZWQgbGlzdDo8YnI+Cis8dWw+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwv
bGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+
CisgIDxsaT5SZWQ8L2xpPgorPC91bD4KKzxicj4KKworT3JkZXJlZCBsaXN0Ojxicj4KKzxvbD4K
KyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxs
aT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L29sPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZy
YW1lMi5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5
IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3JlZW5fYmFja2dyb3VuZC5wbmciLz4K
KzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJs
ZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvaWZyYW1lLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcg
c3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91bmQucG5n
Ii8+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5r
LmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2Rpdk9yYW5n
ZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFja2dyb3VuZC5wbmcnKTsKK30K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zy
b21fbGluay5jc3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZXMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5
bGVzLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjZGl2WWVsbG93IHsKKyAgYmFj
a2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
bGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MnKTsK
KworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91bmQucG5n
Jyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5
bGVzLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1l
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0icmVk
X2JhY2tncm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+
Cis8b2JqZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNyYz0iaWZy
YW1lLmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90
b3BfZnJhbWUuaHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1
ZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBh
cyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFt
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIw
TkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJ
QUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkyUlk5T0kvQXhVQkV4WE5BaHMxYWlEbElUb2EKaHFO
aFNFWUlqQ1liTWdJTlRjc0lERU1BaU5BQ3NiTW1QS2NBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ncmVlbl9i
YWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBh
IGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4
ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5B
QUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFB
QTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZMVRhNlBPZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdK
Q01FUnBNTkdZR0dwbVVFaGlFQTVSc0NSdTdDMDFBQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBu
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
b2wtZG90LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFS
blFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRo
UFkxVGE2UE9mZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBNVJz
Q1J1N0MwMUFBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNr
Z3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFS
blFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRo
UFkveGZyLzZmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBTlVV
Q3pIaG9QaGdBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFja2dyb3VuZC5wbmcKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUt
dHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBsZV9iYWNr
Z3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFS
blFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRo
UFkxenN1ZVEvQXhVQkV4WE5BaHMxYWlEbElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BcjZN
Q3QxTHM5NTRBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9yZWRfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpD
YW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlw
ZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5k
LnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjpt
aW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFO
U1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJB
QUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkzd3Jv
L0tmZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBUHBrQ1ZGZjdl
QW9BQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6
IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3QucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFB
Q05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3
QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTN3cm8vS2ZnWXFBaVlwbWdZMGFOWkR5RUIw
Tgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUFQcGtDVkZmN2VBb0FBQUFBU1VWT1JLNUNZSUk9CgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3ll
bGxvd19iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtl
ZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3Ry
ZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6
IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFB
Q05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3
QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWS96L2llRS9BeFVCRXhYTkFoczFhaURsSVRv
YQpocU5oU0VZSWpDWWJNZ0lOVGNzSURFTUFGZUlER0dIcUJyWUFBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>
<flag name="review"
          id="83367"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90753</attachid>
            <date>2011-04-22 13:49:26 -0700</date>
            <delta_ts>2011-04-22 17:43:55 -0700</delta_ts>
            <desc>Now keeping original files encoding</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>60649</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NjczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDQtMjIgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dz
IHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBh
bGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAg
cmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9X
ZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0
Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6Y29udGVudFR5cGUpOgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3Rv
bUF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVsZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHA6CisgICAgICAgICogaHRtbC9IVE1M
RnJhbWVPd25lckVsZW1lbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcDog
QWRkZWQuCisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5oOiBBZGRlZC4KKwogMjAxMS0w
NC0yMiAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24g
ODM2NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTcwOSw2ICs3MDksNyBAQAogICAgICAgICAgICAgJ3BhZ2UvTWVtb3J5SW5mby5oJywKICAgICAg
ICAgICAgICdwYWdlL1BhZ2UuaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuaCcsCisg
ICAgICAgICAgICAncGFnZS9QYWdlU2VyaWFsaXplci5oJywKICAgICAgICAgICAgICdwYWdlL1Bs
dWdpbkhhbHRlckNsaWVudC5oJywKICAgICAgICAgICAgICdwYWdlL1Bvc2l0aW9uQ2FsbGJhY2su
aCcsCiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkVycm9yLmgnLApAQCAtMzQzMCw2ICszNDMx
LDcgQEAKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cC5jcHAnLAogICAgICAgICAgICAgJ3Bh
Z2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuaCcsCisgICAgICAgICAgICAncGFnZS9QYWdlU2VyaWFsaXplci5jcHAn
LAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2UuY3BwJywKICAgICAgICAgICAgICdwYWdl
L1BlcmZvcm1hbmNlLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9u
LmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDYg
KzE1Niw3IEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVmZmVyLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogI2lmIEVOQUJMRShTSEFSRURfV09S
S0VSUykKICNpbmNsdWRlICJTaGFyZWRXb3JrZXJSZXBvc2l0b3J5LmgiCkBAIC0xMTEzLDYgKzEx
MTQsMTkgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJpbmcmCiAgICAgY2xv
c2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50Ojpjb250ZW50VHlwZSgpCit7CisgICAgU3RyaW5n
IGNvbnRlbnQ7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpKQorICAgICAg
ICBjb250ZW50ID0gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgZWxzZSBpZiAobV9kb2N1
bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICBjb250ZW50ID0gImltYWdlL3N2Zyt4bWwi
OworICAgIGVsc2UKKyAgICAgICAgY29udGVudCA9ICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJu
IG1ha2VTdHJpbmcoY29udGVudCwgIjsgY2hhcnNldD0iLCBjaGFyc2V0KCkpOworfQorCiAvLyBG
SVhNRTogV2UgbmVlZCB0byBkaXNjdXNzIHRoZSBET00gQVBJIGhlcmUgYXQgc29tZSBwb2ludC4g
SWRlYXM6CiAvLyAqIG1ha2luZyBpdCByZWNlaXZlIGEgcmVjdCBhcyBwYXJhbWV0ZXIsIGkuZS4g
bm9kZXNGcm9tUmVjdCh4LCB5LCB3LCBoKTsKIC8vICogbWFraW5nIGl0IHJlY2VpdmUgdGhlIGV4
cGFkaW5nIHNpemUgb2YgZWFjaCBkaXJlY3Rpb24gc2VwYXJhdGVseSwKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjEsNiArMzYxLDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIGNvbnRlbnRUeXBlKCk7
CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxh
bmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTgsNiArMTU4LDEwIEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJp
YnV0ZVYKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRl
VmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMz
MSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmUKICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAgICBhcHBlbmRBdHRy
aWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKSwgbmFtZXNw
YWNlcyk7CiAKKyAgICAvLyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRk
IHRoZWlyIG93biBhdHRyaWJ1dGVzLgorICAgIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMob3V0LCBl
bGVtZW50LCBuYW1lc3BhY2VzKTsKKwogICAgIGFwcGVuZENsb3NlVGFnKG91dCwgZWxlbWVudCk7
CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJ
KHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCwyNSArNzQsMjYgQEAgcHVibGljOgogcHJvdGVj
dGVkOgogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBhcHBlbmRTdGFydFRhZyhOb2RlKiwgTmFtZXNwYWNlcyogPSAwKTsKLSAgICB2b2lkIGFw
cGVuZEVuZFRhZyhOb2RlKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7
CiAgICAgc3RhdGljIHNpemVfdCB0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwog
ICAgIHNpemVfdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiB0b3RhbExlbmd0aChtX3N1Y2NlZWRp
bmdNYXJrdXApOyB9CiAgICAgdm9pZCBjb25jYXRlbmF0ZU1hcmt1cChWZWN0b3I8VUNoYXI+JiBv
dXQpOwogICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
LCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAgdmly
dHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShW
ZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lk
IGFwcGVuZE5vZGVWYWx1ZShWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IE5vZGUqLCBjb25zdCBS
YW5nZSosIEVudGl0eU1hc2spOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChj
b25zdCBFbGVtZW50Kik7CiAgICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29u
c3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyYpOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFZl
Y3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBOYW1lc3BhY2VzJik7Ci0gICAgRW50aXR5TWFzayBl
bnRpdHlNYXNrRm9yVGV4dChUZXh0KiB0ZXh0KSBjb25zdDsKKyAgICBFbnRpdHlNYXNrIGVudGl0
eU1hc2tGb3JUZXh0KFRleHQqKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChW
ZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKICAgICB2b2lkIGFwcGVuZENvbW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBwZW5kRG9j
dW1lbnRUeXBlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CiAg
ICAgdm9pZCBhcHBlbmRQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBj
b25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2Vz
Kik7Ci0gICAgdm9pZCBhcHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYsIE5h
bWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBF
bGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50Kik7CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOwogICAg
IHZvaWQgYXBwZW5kQ0RBVEFTZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5n
JiBzZWN0aW9uKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJl
c3VsdCwgY29uc3QgTm9kZSosIE5hbWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9z
ZShjb25zdCBOb2RlKik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVy
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVP
d25lckVsZW1lbnQuY3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQgKzEwNiwx
NSBAQCBTVkdEb2N1bWVudCogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpnZXRTCiB9CiAjZW5kaWYK
IAorY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSogSFRNTEZyYW1lT3duZXJFbGVtZW50Ojpn
ZXRGcmFtZVVSTEF0dHJpYnV0ZSgpCit7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAg
PSBhdHRyaWJ1dGVzKHRydWUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRl
TWFwLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0
cmlidXRlTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBpZiAoaXNVUkxBdHRyaWJ1dGUo
YXR0cmlidXRlKSkKKyAgICAgICAgICAgIHJldHVybiAmKGF0dHJpYnV0ZS0+bmFtZSgpKTsKKyAg
ICB9CisgICAgcmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkocmV2aXNpb24gODM2
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NSw2ICs1NSw4IEBAIHB1YmxpYzoKIAogICAgIFNhbmRib3hGbGFncyBz
YW5kYm94RmxhZ3MoKSBjb25zdCB7IHJldHVybiBtX3NhbmRib3hGbGFnczsgfQogCisgICAgY29u
c3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSogZ2V0RnJhbWVVUkxBdHRyaWJ1dGUoKTsKKwogcHJv
dGVjdGVkOgogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
KyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3du
ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxT
dHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1ZGUgIkltYWdl
LmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1hcmt1cEFjY3Vt
dWxhdG9yLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2Uu
aCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUqIGlnbm9yZWRUYWdz
W10gPSB7CisgICAgJkhUTUxOYW1lczo6c2NyaXB0VGFnLAorICAgICZIVE1MTmFtZXM6Om5vc2Ny
aXB0VGFnLAorfTsKKworc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChFbGVtZW50KiBl
bGVtZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZX0xFTkdUSChp
Z25vcmVkVGFncyk7ICsraSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSgqaWdu
b3JlZFRhZ3NbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgLy8g
V2UgYWxzbyBpZ25vcmUgTWV0YSBlbGVtZW50cyB0aGF0IHNwZWNpZnkgdGhlIGVuY29kaW5nIGFz
IHdlJ2xsIHNldCBpdCBvdXJzZWx2ZXMuCisgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6bWV0YVRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjpjaGFyc2V0QXR0cikpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlOworICAgIGlmICghKGF0dHJpYnV0
ZVZhbHVlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHR0cF9lcXVpdkF0dHIp
KS5pc051bGwoKQorICAgICAgICAmJiBhdHRyaWJ1dGVWYWx1ZS5sb3dlcigpLnN0cmlwV2hpdGVT
cGFjZSgpID09ICJjb250ZW50LXR5cGUiKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6
IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8
Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBv
dXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+
JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyop
OworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAg
IFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBW
ZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNv
bHV0ZVVSTHMpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQorICAgICwgbV9zZXJpYWxpemVy
KHNlcmlhbGl6ZXIpCit7Cit9CisKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvcigpCit7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3sK
KyAgICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKHBh
cmVudCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQorICAgICAgICBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kVGV4dChvdXQsIHRleHQpOworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFzaG91bGRJZ25v
cmVFbGVtZW50KGVsZW1lbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxl
bWVudChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCisgICAgaWYgKGVsZW1lbnQtPmhhc1Rh
Z05hbWUoSFRNTE5hbWVzOjpoZWFkVGFnKSkgeworICAgICAgICBTdHJpbmcgbWV0YVN0YXJ0KCI8
bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cIiIpOworICAgICAgICBv
dXQuYXBwZW5kKG1ldGFTdGFydC5jaGFyYWN0ZXJzKCksIG1ldGFTdGFydC5sZW5ndGgoKSk7Cisg
ICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IG1fZG9jdW1lbnQtPmNvbnRlbnRUeXBlKCk7Cisg
ICAgICAgIG91dC5hcHBlbmQoY29udGVudFR5cGUuY2hhcmFjdGVycygpLCBjb250ZW50VHlwZS5s
ZW5ndGgoKSk7CisgICAgICAgIFN0cmluZyBtZXRhRW5kKCJcIj4iKTsKKyAgICAgICAgb3V0LmFw
cGVuZChtZXRhRW5kLmNoYXJhY3RlcnMoKSwgbWV0YUVuZC5sZW5ndGgoKSk7CisgICAgfQorIAor
ICAgIC8vIEZJWE1FOiBmb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2Ug
Y291bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29udGVudHMu
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRy
aWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVy
ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCk7CisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIXVybC5wcm90b2NvbElzKCJhYm91dCIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGdpdmUgYSBmYWtlIGxvY2F0aW9u
IHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBzZXJpYWxp
emVkIGZyYW1lLgorICAgIHVybCA9IG1fc2VyaWFsaXplci0+dXJsRm9yQmxhbmtGcmFtZShmcmFt
ZSk7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSogdXJsQXR0cmlidXRlID0gZnJhbWVPd25lci0+
Z2V0RnJhbWVVUkxBdHRyaWJ1dGUoKTsKKyAgICBpZiAoIXVybEF0dHJpYnV0ZSkKKyAgICAgICAg
cmV0dXJuOworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3Jl
YXRlKEhUTUxOYW1lczo6c3JjQXR0ciwgdXJsLnN0cmluZygpKTsKKyAgICBhcHBlbmRBdHRyaWJ1
dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKK30KKwordm9pZCBTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQoreworICAg
IGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQodG9FbGVt
ZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhub2Rl
KTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZSgpCit7Cit9CisKK1Bh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVy
bCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIGRhdGEoZGF0YSkKK3sKK30K
KworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6
UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291cmNlcyhyZXNvdXJjZXMpCisgICAg
LCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6ZUZyYW1lKHBhZ2UtPm1haW5GcmFt
ZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZy
YW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAg
IEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCB1
cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAvLyBGb3IgYmxhbmsgZnJhbWVzIHdl
IGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGVpciBj
b250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsK
KyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgeworICAgICAg
ICAvLyBGSVhNRTogd2UgY291bGQgaGF2ZSAyIGZyYW1lIHdpdGggdGhlIHNhbWUgVVJMIGJ1dCB3
aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhhdmUgbm93CisgICAgICAgIC8vIGRp
ZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFsaXplIGJvdGggYW5kIHNvbWVob3cg
cmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gZnJhbWUu
IEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7
CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRoaXMsIGRvY3Vt
ZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyYgdGV4dEVuY29kaW5nID0gVGV4dEVuY29k
aW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpOworICAgIGlmICghdGV4dEVuY29kaW5nLmlzVmFsaWQo
KSkgeworICAgICAgICBMT0dfRVJST1IoIlVuc3VwcG9ydGVkIGNoYXJzZXQgJyVzJywgZGVmYXVs
dGluZyB0byBVVEYtOC4iLCBkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICAgICAgdGV4dEVuY29k
aW5nID0gVVRGOEVuY29kaW5nKCk7CisgICAgfQorICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0
b3Iuc2VyaWFsaXplTm9kZXMoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRl
Tm9kZSk7CisgICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQu
Y2hhcmFjdGVycygpLCB0ZXh0Lmxlbmd0aCgpLCBRdWVzdGlvbk1hcmtzRm9yVW5lbmNvZGFibGVz
KTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2h0
bWwiKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxl
bmd0aCgpKSkpOworICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworCisgICAgZm9yIChWZWN0
b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZXMuYmVnaW4oKTsgaXRlciAhPSBub2Rlcy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
CisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgIC8v
IFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5lIHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29t
ZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNrZ3JvdW5kIGltYWdlcykuCisgICAgICAgIHJldHJp
ZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oZWxlbWVudC0+c3R5bGUoKSk7CisgICAgICAg
IAorICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsK
KyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0
PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9j
dW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
c3JjQXR0cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VF
bGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhj
YWNoZWRJbWFnZSwgdXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlu
a0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAg
ICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAg
ICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAg
ICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXpl
Q1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAg
ICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAg
ICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAg
ICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hl
ZXQpLCBLVVJMKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRG
cmFtZSA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFt
ZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXpl
RnJhbWUoY2hpbGRGcmFtZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNT
U1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQor
eworICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0g
PSBzdHlsZVNoZWV0LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5j
c3NUZXh0KCk7CisgICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICBjc3NUZXh0LmFwcGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hl
ZXQtPmxlbmd0aCgpIC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIp
OworICAgICAgICB9CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2Np
YXRlZCB3aXRoIHRoZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRl
bS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1
bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJM
IGltcG9ydFVSTCA9IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1
bGUtPmhyZWYoKSk7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1w
b3J0VVJMKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6
ZUNTU1N0eWxlU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAg
ICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0
byBtZSBhdCB0aGlzIHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAg
ICAgICAgLy8gYmUgcmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisg
ICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJp
ZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7
CisgICAgfQorCisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRh
aW5zKHVybCkpIHsKKyAgICAgICAgVGV4dEVuY29kaW5nJiB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5j
b2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgaWYgKCF0ZXh0RW5jb2Rpbmcu
aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVuc3VwcG9ydGVkIGNoYXJzZXQg
JyVzJywgZGVmYXVsdGluZyB0byBVVEYtOC4iLCBzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOworICAg
ICAgICAgICAgdGV4dEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCk7CisgICAgICAgIH0KKyAgICAg
ICAgU3RyaW5nIHRleHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJp
bmcgdGV4dCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRl
eHRTdHJpbmcubGVuZ3RoKCksIFF1ZXN0aW9uTWFya3NGb3JVbmVuY29kYWJsZXMpOworICAgICAg
ICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBT
aGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAg
ICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxp
emVyOjphZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYg
dXJsKQoreworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlu
cyh1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFn
ZSgpID09IEltYWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IG1pbWVUeXBlID0gaW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNl
cy0+YXBwZW5kKFJlc291cmNlKHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkp
KTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXpl
cjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAg
ICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQor
Cit2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9u
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHls
ZURlY2xhcmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRp
b24tPnN0eWxlc2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNr
Z3JvdW5kLWltYWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUg
Q1NTIHByb3BlcnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0
ZSB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0
aWVzIHRoZXJlIG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURl
Y2xhcmF0aW9uLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQg
b2YgcmlkaWN1bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAg
ICAgIC8vIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRo
ZSB2YWx1ZSBvdXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1l
cywgbm90IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVj
bGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7
CisgICAgICAgIGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU0ltYWdlVmFsdWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0
eWxlSW1hZ2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAv
LyBOb24gY2FjaGVkLWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29u
dGFpbiBkYXRhLgorICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2Fj
aGVkSW1hZ2UoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdl
KiBpbWFnZSA9IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2Fj
aGVkSW1hZ2UoKTsKKworICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKGltYWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJj
ZXMoaW1hZ2UsIHVybCk7CisgICAgfSAgICAKK30KKworS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJs
Rm9yQmxhbmtGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+
OjppdGVyYXRvciBpdGVyID0gbV9ibGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKKyAgICBpZiAo
aXRlciAhPSBtX2JsYW5rRnJhbWVVUkxzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+c2Vj
b25kOworICAgIFN0cmluZyB1cmwgPSBtYWtlU3RyaW5nKCJ3eWNpd3lnOi8vZnJhbWUvIiwgU3Ry
aW5nOjpudW1iZXIobV9ibGFua0ZyYW1lQ291bnRlcisrKSk7CisgICAgS1VSTCBmYWtlVVJMKFBh
cnNlZFVSTFN0cmluZywgdXJsKTsKKyAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFr
ZVVSTCk7CisKKyAgICByZXR1cm4gZmFrZVVSTDsgICAgCit9CisKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCl9fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K
QWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW8gdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBQYWdlU2VyaWFs
aXplcl9oCisjZGVmaW5lIFBhZ2VTZXJpYWxpemVyX2gKKworI2luY2x1ZGUgIkhhc2hNYXAuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJMaXN0
SGFzaFNldC5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlZlY3Rvci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ1NT
U3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNzIENTU1N0eWxlU2hl
ZXQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBhZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0
byBzZXJpYWxpemUgYSBwYWdlIGNvbnRlbnRzIGJhY2sgdG8gdGV4dCAodHlwaWNhbGx5IEhUTUwp
LgorLy8gSXQgc2VyaWFsaXplcyBhbGwgdGhlIHBhZ2UgZnJhbWVzIGFuZCByZXRyaWV2ZXMgcmVz
b3VyY2VzIHN1Y2ggYXMgaW1hZ2VzIGFuZCBDU1Mgc3R5bGVzaGVldHMuCitjbGFzcyBQYWdlU2Vy
aWFsaXplciB7CitwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgS1VSTCB1
cmw7CisgICAgICAgIFN0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YTsKKyAgICAgICAgUmVzb3VyY2UoKTsKKyAgICAgICAgUmVzb3VyY2UoY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRh
KTsKKyAgICB9OworCisgICAgZXhwbGljaXQgUGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFJlc291cmNl
PiopOworCisgICAgLy8gSW5pdGlhdGVzIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBmcmFtZSdz
IHBhZ2UuIEFsbCBzZXJpYWxpemVkIGNvbnRlbnQgYW5kIHJldHJpZXZlZAorICAgIC8vIHJlc291
cmNlcyBhcmUgYWRkZWQgdG8gdGhlIFZlY3RvciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBU
aGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdAorICAgIC8vIHZlY3RvciBpcyB0aGUgdG9wIGZyYW1l
IHNlcmlhbGl6ZWQgY29udGVudC4KKyAgICB2b2lkIHNlcmlhbGl6ZShQYWdlKik7CisKKyAgICBL
VVJMIHVybEZvckJsYW5rRnJhbWUoRnJhbWUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlcmlh
bGl6ZUZyYW1lKEZyYW1lKik7CisKKyAgICAvLyBTZXJpYWxpemVzIHRoZSBzdHlsZXNoZWV0IGJh
Y2sgdG8gdGV4dCBhbmQgYWRkcyBpdCB0byB0aGUgcmVzb3VyY2VzIGlmIFVSTCBpcyBub3QtZW1w
dHkuCisgICAgLy8gSXQgYWxzbyBhZGRzIGFueSByZXNvdXJjZXMgaW5jbHVkZWQgaW4gdGhhdCBz
dHlsZXNoZWV0IChpbmNsdWRpbmcgYW55IGltcG9ydGVkIHN0eWxlc2hlZXRzIGFuZCB0aGVpciBv
d24gcmVzb3VyY2VzKS4KKyAgICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVT
aGVldCosIGNvbnN0IEtVUkwmKTsKKworICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNo
ZWRJbWFnZSosIGNvbnN0IEtVUkwmKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NT
RGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSopOworCisgICAgVmVjdG9yPFJlc291cmNlPiog
bV9yZXNvdXJjZXM7CisgICAgTGlzdEhhc2hTZXQ8S1VSTD4gbV9yZXNvdXJjZVVSTHM7CisgICAg
SGFzaE1hcDxGcmFtZSosIEtVUkw+IG1fYmxhbmtGcmFtZVVSTHM7CisgICAgdW5zaWduZWQgbV9i
bGFua0ZyYW1lQ291bnRlcjsKK307CisKK30KKworI2VuZGlmCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0NjczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwzNCBAQAorMjAxMS0wNC0yMiAgSmF5IENpdmVsbGkgIDxqY2l2
ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgSW50cm9kdWNpbmcgYSBuZXcgQVBJIHRvIHNlcmlhbGl6ZSBhIFdlYlZpZXcg
YmFjayB0byBIVE1MLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTg5NDcKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dl
YlBhZ2VTZXJpYWxpemVyLmg6CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAg
ICogdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQ6OlRFU1RfRik6CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplcjogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRt
bDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibHVlX2JhY2tn
cm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nz
c190ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3M6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29sLWRvdC5wbmc6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3JhbmdlX2JhY2tncm91bmQu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBsZV9i
YWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9yZWRfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAyMDExLTA0LTIyICBN
aWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJl
dmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04NDMsNiArODQzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNl
cmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIH1dLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDE0ICszMSwxNCBAQAogI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCiAjZGVm
aW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNs
dWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYktp
dCB7Ci1jbGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlU2Vy
aWFsaXplckNsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdl
YlZpZXc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCkBAIC00Niw2
ICs0NiwyMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogLy8gd2hp
Y2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCiBjbGFz
cyBXZWJQYWdlU2VyaWFsaXplciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAg
ICAgICAgV2ViVVJMIHVybDsKKyAgICAgICAgV2ViQ1N0cmluZyBtaW1lVHlwZTsKKyAgICAgICAg
V2ViQ1N0cmluZyBkYXRhOworICAgIH07CisKKyAgICAvLyBTZXJpYWxpemVzIGFsbCB0aGUgZnJh
bWVzIGZyb20gdGhlIFdlYlZpZXcsIHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgLy8gcmVzb3Vy
Y2VzIChzdWNoIGFzIGltYWdlcyBhbmQgQ1NTKSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBwYXNzZWQg
dmVjdG9yLgorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0IHZlY3RvciBpcyB0aGUg
dG9wIGZyYW1lIGNvbnRlbnRzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3RyaXBzLW91
dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCisgICAgV0VCS0lUX0FQSSBz
dGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4qKTsKKwor
ICAgIC8vIElNUE9SVEFOVDoKKyAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVyIGltcGxl
bWVudGF0aW9uIG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAorICAgIC8vIHdpbGwgYmUgcmVt
b3ZlZCBzb29uLgorCisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZy
YW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgogICAgIC8vIFdlIGhhdmUgYSBk
YXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdp
bGwKICAgICAvLyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJQYWdlU2VyaWF6bGllckNsaWVudCBvbmNl
IHRoZSBkYXRhIGJ1ZmZlciBpcyBmdWxsLgpAQCAtNjQsOSArODEsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gc2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9u
ZS4KICAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBw
YXRoIG9mIGRpcmVjdG9yeSB3aGljaAogICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFy
eSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgotICAgIFdFQktJ
VF9BUEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICBXRUJLSVRf
QVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVS
TD4mIGxpbmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKQEAgLTg1
LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNl
dCBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVN
ZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CiAgICAgLy8g
R2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgV2Vi
U3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwp
OworICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRl
Y2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJh
c2UgdGFnIGRlY2xhcmF0aW9uLgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5l
cmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5j
bHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rv
ci5oIgogCiAjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXcu
aCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KIApAQCAtMTc5LDYgKzE4MSwyNSBAQCB2b2lkIHJldHJpZXZlUmVzb3Vy
Y2VzRm9yRnJhbWUoRnJhbWUqIGZyCiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit2b2lkIFdlYlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViVmlldyogdmlldywgV2ViVmVjdG9yPFdlYlBhZ2VT
ZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlc1BhcmFtKQoreworICAgIFZlY3RvcjxQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBQYWdlU2VyaWFsaXplciBzZXJp
YWxpemVyKCZyZXNvdXJjZXMpOworICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHN0YXRpY19jYXN0
PFdlYlZpZXdJbXBsKj4odmlldyktPnBhZ2UoKSk7CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+IHJl
c3VsdDsKKyAgICBmb3IgKFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gcmVzb3VyY2VzLmJlZ2luKCk7IGl0ZXIgIT0gcmVzb3VyY2VzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgUmVzb3VyY2UgcmVzb3VyY2U7CisgICAgICAgIHJlc291cmNl
LnVybCA9IGl0ZXItPnVybDsKKyAgICAgICAgcmVzb3VyY2UubWltZVR5cGUgPSBpdGVyLT5taW1l
VHlwZS5hc2NpaSgpOworICAgICAgICAvLyBGSVhNRTogd2UgYXJlIGNvcHlpbmcgYWxsIHRoZSBy
ZXNvdXJjZSBkYXRhIGhlcmUuIElkZWFseSB3ZSB3b3VsZCBoYXZlIGEgV2ViU2hhcmVkRGF0YSgp
LgorICAgICAgICByZXNvdXJjZS5kYXRhID0gV2ViQ1N0cmluZyhpdGVyLT5kYXRhLT5kYXRhKCks
IGl0ZXItPmRhdGEtPnNpemUoKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVzb3VyY2UpOwor
ICAgIH0KKworICAgICpyZXNvdXJjZXNQYXJhbSA9IHJlc3VsdDsgICAgICAgICAKK30KKwogYm9v
bCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5l
d1NlcmlhbGl6ZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
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
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgor
I2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViUGFnZVNlcmlhbGl6ZXIu
aCIKKyNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRlICJXZWJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUg
IldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgorI2luY2x1ZGUg
IldlYlZpZXcuaCIKKworI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvZ3VybC5oPgorI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQu
aD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVGVz
dFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBU
ZXN0V2ViRnJhbWVDbGllbnQoKSA6IG1fc2NyaXB0RW5hYmxlZChmYWxzZSkgeyB9CisgICAgdmly
dHVhbCBib29sIGFsbG93U2NyaXB0KFdlYkZyYW1lKiwgYm9vbCAvKiBlbmFibGVkUGVyU2V0dGlu
Z3MgKi8pIHsgcmV0dXJuIG1fc2NyaXB0RW5hYmxlZDsgfQorICAgIGJvb2wgbV9zY3JpcHRFbmFi
bGVkOworfTsKKworY2xhc3MgV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QgOiBwdWJsaWMgdGVzdGlu
Zzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QoKQorICAgICAg
ICA6IG1faHRtbE1pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoInRleHQvaHRtbCIpKQorICAg
ICAgICAsIG1fY3NzTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAg
ICAgICAgLCBtX3BuZ01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQor
ICAgIHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAg
IHsKKyAgICAgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAg
ICBtX3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0
aGUgaW1hZ2VzIHRvIGxvYWQuCisgICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2Vi
Vmlldy0+c2V0dGluZ3MoKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1
ZSk7CisgICAgICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7
CisKKyAgICAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xp
ZW50KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1f
d2ViVmlldy0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2Vi
U3RyaW5nJiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNl
OworICAgICAgICByZXNwb25zZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1J
TUVUeXBlKG1pbWVUeXBlKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAw
KTsKKyAgICAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2Vi
S2l0Um9vdERpcigpLnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxl
UGF0aC5hcHBlbmQoZmlsZU5hbWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJl
Z2lzdGVyTW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBh
dGgpKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVy
bCkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJs
UmVxdWVzdC5pbml0aWFsaXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1
cmwpKTsKKyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVx
dWVzdCk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2
ZWQuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVl
c3RzKCk7CisgICAgICAgIC8vIFNvbWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGlt
ZXIuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAg
ICAgICAgLy8gU2VydmVyIHRoZSBkZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2
b2lkIGVuYWJsZUpTKCkKKyAgICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRF
bmFibGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAg
ICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJj
ZShXZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3Qg
V2ViU3RyaW5nJiBodG1sTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsg
fQorICAgIGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nz
c01pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+
JiByZXNvdXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAgICBX
ZWJVUkwgd2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAgICAg
ICAgICAgaWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNlLmRhdGEuaXNFbXB0
eSgpICYmICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcobWltZVR5cGUpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKworcHJpdmF0ZToK
KyAgICBXZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1fY3NzTWltZVR5
cGU7CisgICAgV2ViU3RyaW5nIG1fcG5nTWltZVR5cGU7CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50
IG1fd2ViRnJhbWVDbGllbnQ7Cit9OworCisvLyBUZXN0cyB0aGF0IGEgcGFnZSB3aXRoIHJlc291
cmNlcyBhbmQgc3ViLWZyYW1lIGlzIHJlcG9ydGVkIHdpdGggYWxsIGl0cyByZXNvdXJjZXMuCitU
RVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIFBhZ2VXaXRoRnJhbWVzKQoreworICAgIC8v
IFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9w
RnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFtZS5odG1sIiksIGh0bWxNaW1l
VHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbS9pZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpZnJhbWUuaHRtbCIpLCBo
dG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZTIu
aHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5k
LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVf
YmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFt
ZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZp
ZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZyYW1l
LgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNv
dXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNvbXBh
cmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3VyY2Uu
ZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDYsIHJlc291cmNlcy5zaXplKCkpOyAv
LyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tn
cm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3Vu
ZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5n
IiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5z
KHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lLmh0bWwiLCAidGV4dC9odG1s
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiLCAidGV4dC9odG1sIikpOworfQorCisv
LyBUZXN0IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBhZ2UsIGFsbCBDU1MgcmVzb3VyY2VzIGFy
ZSByZXBvcnRlZCwgaW5jbHVkaW5nIHVybCgpJ3MKKy8vIGFuZCBpbXBvcnRzIGFuZCBsaW5rcy4g
Tm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgdGhlIHJlc291cmNlcyBjb250ZW50cywgd2Ugb25seSBt
YWtlIHN1cmUKKy8vIHRoZXkgYXJlIGFsbCByZXBvcnRlZCB3aXRoIHRoZSByaWdodCBtaW1lIHR5
cGUgYW5kIHRoYXQgdGhleSBjb250YWluIHNvbWUgZGF0YS4KK1RFU1RfRihXZWJQYWdlTmV3U2Vy
aWFsaXplVGVzdCwgQ1NTUmVzb3VyY2VzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQg
ZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFnZS5odG1sIiksIGh0bWxNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9s
aW5rX3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgibGlua19zdHlsZXMuY3NzIiks
IGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoImltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9z
dHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZXMuY3NzIiksIGNz
c01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRf
YmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS95
ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgieWVsbG93X2JhY2tn
cm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFj
a2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRG
OCgicHVycGxlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgidWwtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiks
IFdlYlN0cmluZzo6ZnJvbVVURjgoIm9sLWRvdC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAg
ICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBy
dW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+
IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywg
JnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAg
IAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisg
ICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNl
c1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShX
ZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRh
LmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoMTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBU
aGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMu
Y3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIsICJ0
ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiLCAi
dGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmci
KSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7
CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRw
Oi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAg
ICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93
d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNU
X1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL3VsLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5n
IiwgImltYWdlL3BuZyIpKTsKK30KKworLy8gVGVzdHMgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEg
cGFnZSB3aXRoIGJsYW5rIGZyYW1lcyB0aGVzZSBhcmUgcmVwb3J0ZWQgd2l0aCB0aGVpciByZXNv
dXJjZXMuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIEJsYW5rRnJhbWVzKQorewor
ICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJM
IHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJh
bWVzLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tn
cm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
ImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygp
OworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsK
KworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsK
KyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7
CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRo
ZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2Vi
UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0
ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEoNywgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBi
ZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1h
Z2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIp
KTsKKyAgICAvLyBUaGUgYmxhbmsgZnJhbWVzIHNob3VsZCBoYXZlIGdvdCBhIG1hZ2ljIFVSTC4K
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3
eWc6Ly9mcmFtZS8wIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8xIiwgInRleHQvaHRtbCIp
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5
Y2l3eWc6Ly9mcmFtZS8yIiwgInRleHQvaHRtbCIpKTsKK30KKworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRl
c3QuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFt
ZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorCis8c2NyaXB0PgorICBm
dW5jdGlvbiBvbmxvYWQoKSB7CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiaWZyYW1lIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURp
djEiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERv
Y3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxp
bWcgc3JjPSdibHVlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIK
KworICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZGl2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MiIpOworICAgIGRpdi5hcHBlbmRDaGls
ZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0K
KyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBu
ZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJteURpdjMiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGlt
YWdlIDxpbWcgc3JjPSdvcmFuZ2VfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRl
eHQ8L2I+IgorCisgIH0KKyAgCis8L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+
CisgIFRoaXMgcGFnZSBjcmVhdGVzIGVtcHR5IGlmcmFtZXMgYW5kIGFkZHMgY29udGVudCB0byB0
aGVtIGR5bmFtaWNhbGx5Ljxicj48YnI+CisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+CisgIDxk
aXYgaWQ9Im15RGl2MiI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MyI+PC9kaXY+Cis8L2JvZHk+
CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3Nf
dGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVz
dCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkgdGhlCisgICAg
IFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+CisKKzxoZWFk
PgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5rX3N0
eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNzcycp
OworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1cmwo
J0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkgZm9y
bWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2Zp
dmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7CisgIGJh
Y2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsKKyAg
bGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlzdC1z
dHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3JpcHQ+
CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25Mb2FkKCkg
eworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJsKCdw
dXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVOb2Rl
Lm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KKworPCEtLSBU
ZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYnPlRo
aXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBp
biBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSByZWQg
aW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhIGZp
bGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3JhbmdlJz4K
K1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2Pgor
Cis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZZWxs
b3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhlIGhl
YWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFnZSBh
cyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+Cis8
ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9iYWNr
Z3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNrZ3Jv
dW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdpdGgg
SmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJwbGUn
PgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+
CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVk
PC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9s
aT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgorPG9s
PgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAg
PGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+CisK
KzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9p
ZnJhbWUyLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJncmVlbl9iYWNrZ3JvdW5kLnBuZyIv
PgorPGltZyBzcmM9ImJsdWVfYmFja2dyb3VuZC5wbmciLz4KKworPC9ib2R5PgorCis8L2h0bWw+
CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRh
YmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci9pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGlt
ZyBzcmM9ImJsdWVfYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJyZWRfYmFja2dyb3VuZC5w
bmciLz4KKworPC9ib2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xp
bmsuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRf
c3R5bGVfZnJvbV9saW5rLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjZGl2T3Jh
bmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNrZ3JvdW5kLnBuZycpOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVf
ZnJvbV9saW5rLmNzcwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1w
b3J0X3N0eWxlcy5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9z
dHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBi
YWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9saW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDUgQEAKK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcycp
OworCisjZGl2UmVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZWRfYmFja2dyb3VuZC5w
bmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19z
dHlsZXMuY3NzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJh
bWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJy
ZWRfYmFja2dyb3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFt
ZT4KKzxvYmplY3QgZGF0YT0iaWZyYW1lMi5odG1sIj48L29iamVjdD4KKzxpZnJhbWUgc3JjPSJp
ZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9odG1sPgoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L3RvcF9mcmFtZS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9i
bHVlX2JhY2tncm91bmQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXplci9ibHVlX2JhY2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9u
L29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05p
UjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFE
c0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTJSWTlPSS9BeFVCRXhYTkFoczFhaURsSVRvYQpo
cU5oU0VZSWpDWWJNZ0lOVGNzSURFTUFpTkFDc2JNbVBLY0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2dyZWVu
X2JhY2tncm91bmQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFz
IGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9v
Y3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIw
TkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJ
QUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkxVGE2UE9mZ1lxQWlZcG1nWTBhTlpEeUVCME4KdzlF
d0pDTUVScE1OR1lHR3BtVUVoaUVBNVJzQ1J1N0MwMUFBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3Qu
cG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5
cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNo
YW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9vbC1kb3QucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFB
QVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJW
RGhQWTFUYTZQT2ZnWXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUE1
UnNDUnU3QzAxQUFBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3JhbmdlX2Jh
Y2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFB
QVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJW
RGhQWS94ZnIvNmZnWXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUFO
VVVDekhob1BoZ0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2Jh
Y2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRl
ZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBL
R2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFB
QVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJW
RGhQWTF6c3VlUS9BeFVCRXhYTkFoczFhaURsSVRvYQpocU5oU0VZSWpDWWJNZ0lOVGNzSURFTUFy
Nk1DdDFMczk1NEFBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10
eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcmVkX2JhY2tncm91
bmQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3Zu
Om1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFB
QU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUx
QkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTN3
cm8vS2ZnWXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhpRUFQcGtDVkZm
N2VBb0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3VsLWRvdC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxh
eTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0
aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3VsLWRvdC5wbmcKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlB
QUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWha
Y3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZM3dyby9LZmdZcUFpWXBtZ1kwYU5aRHlF
QjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQVBwa0NWRmY3ZUFvQUFBQUFTVVZPUks1Q1lJST0K
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
eWVsbG93X2JhY2tncm91bmQucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRl
ZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlB
QUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWha
Y3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZL3ovaWVFL0F4VUJFeFhOQWhzMWFpRGxJ
VG9hCmhxTmhTRVlJakNZYk1nSU5UY3NJREVNQUZlSURHR0hxQnJZQUFBQUFTVVZPUks1Q1lJST0K
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90815</attachid>
            <date>2011-04-22 17:43:55 -0700</date>
            <delta_ts>2011-04-25 12:29:40 -0700</delta_ts>
            <desc>Only specifying the charset if the page does not do so.</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>62529</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NzEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDQtMjIgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dz
IHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBh
bGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAg
cmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9X
ZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzZXRDb250ZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjptaW1lVHlwZSk6CisgICAgICAgICogZG9t
L0RvY3VtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudCk6
CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZU93
bmVyRWxlbWVudDo6Z2V0RnJhbWVVUkxBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEZy
YW1lT3duZXJFbGVtZW50Lmg6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQt
MjIgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFJ5b3N1a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkocmV2aXNpb24gODM2NDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9BbmRyb2lkLm1rCSh3b3JraW5nIGNvcHkpCkBAIC00NDMsNiArNDQzLDcgQEAg
TE9DQUxfU1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJcGFnZS9QYWdlLmNwcCBc
CiAJcGFnZS9QYWdlR3JvdXAuY3BwIFwKIAlwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAg
XAorCXBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIFwKIAlwYWdlL1BlcmZvcm1hbmNlLmNwcCBcCiAJ
cGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKIAlwYWdlL1BlcmZvcm1hbmNlVGltaW5n
LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODM2NDUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAxNCw2ICsxMDE0
LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1Bh
Z2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdl
L1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2UvUGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC03MDksNiArNzA5LDcgQEAKICAgICAgICAg
ICAgICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAg
ICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAg
ICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9z
aXRpb25FcnJvci5oJywKQEAgLTM0MzAsNiArMzQzMSw3IEBACiAgICAgICAgICAgICAncGFnZS9Q
YWdlR3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAg
ICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZv
cm1hbmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAg
ICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMTMsNiArMTExMywyMCBAQCB2b2lkIERvY3VtZW50
OjpzZXRDb250ZW50KGNvbnN0IFN0cmluZyYKICAgICBjbG9zZSgpOwogfQogCitTdHJpbmcgRG9j
dW1lbnQ6Om1pbWVUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9kb2N1bWVudC0+aXNYSFRNTERv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veGh0bWwreG1sIjsKKyAgICBp
ZiAobV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gImltYWdlL3N2
Zyt4bWwiOworICAgIGlmIChtX2RvY3VtZW50LT54bWxTdGFuZGFsb25lKCkpCisgICAgICAgIHJl
dHVybiAidGV4dC94bWwiOworICAgIGlmIChtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7CisKKyAgICByZXR1cm4gbV9kb2N1bWVudExvYWRl
ci0+cmVzcG9uc2VNSU1FVHlwZSgpOworfQorCiAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNjdXNz
IHRoZSBET00gQVBJIGhlcmUgYXQgc29tZSBwb2ludC4gSWRlYXM6CiAvLyAqIG1ha2luZyBpdCBy
ZWNlaXZlIGEgcmVjdCBhcyBwYXJhbWV0ZXIsIGkuZS4gbm9kZXNGcm9tUmVjdCh4LCB5LCB3LCBo
KTsKIC8vICogbWFraW5nIGl0IHJlY2VpdmUgdGhlIGV4cGFkaW5nIHNpemUgb2YgZWFjaCBkaXJl
Y3Rpb24gc2VwYXJhdGVseSwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiA4MzY0
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NjEsNiArMzYxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmlu
ZyYpOwogCisgICAgU3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVu
dExhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lk
IHNldENvbnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3Vh
Z2UgPSBsYW5nOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNj
dW11bGF0b3IuY3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
TWFya3VwQWNjdW11bGF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNiArMTU4LDEwIEBA
IHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVYKICAgICAgICAgZG9jdW1l
bnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRlVmFsdWUgOiBFbnRpdHlNYXNrSW5B
dHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3Rv
bUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKK3sKK30K
Kwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUo
VmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBV
Q2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMzMSw5IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmUKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGxlbmd0aDsgaSsrKQogICAgICAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAq
YXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKSwgbmFtZXNwYWNlcyk7CiAKKyAgICAvLyBHaXZl
IGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBhdHRyaWJ1dGVz
LgorICAgIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMob3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsK
KwogICAgIGFwcGVuZENsb3NlVGFnKG91dCwgZWxlbWVudCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHJldmlzaW9uIDgzNjQ1KQorKysg
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NCwyNSArNzQsMjYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRTdGFydFRhZyhO
b2RlKiwgTmFtZXNwYWNlcyogPSAwKTsKLSAgICB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7CiAgICAgc3RhdGljIHNpemVfdCB0
b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHNpemVfdCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiB0b3RhbExlbmd0aChtX3N1Y2NlZWRpbmdNYXJrdXApOyB9CiAgICAgdm9p
ZCBjb25jYXRlbmF0ZU1hcmt1cChWZWN0b3I8VUNoYXI+JiBvdXQpOwogICAgIHZvaWQgYXBwZW5k
QXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0dHJp
YnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3Rv
bUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CiAgICAg
dm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShWZWN0
b3I8VUNoYXI+JiBvdXQsIGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSosIEVudGl0eU1hc2spOwog
ICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50Kik7CiAgICAg
Ym9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwgTmFtZXNw
YWNlcyYpOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNl
VVJJLCBOYW1lc3BhY2VzJik7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0
KiB0ZXh0KSBjb25zdDsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQqKSBj
b25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRl
eHQqKTsKICAgICB2b2lkIGFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBT
dHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxVQ2hh
cj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CiAgICAgdm9pZCBhcHBlbmRQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdldCwg
Y29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBlbmRP
cGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyop
OwotICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBl
bGVtZW50KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lk
IGFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyop
OworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kik7
CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50Kiwg
Y29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kQ0RBVEFTZWN0
aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKICAgICB2b2lk
IGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSosIE5h
bWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCShyZXZp
c2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDQgKzEwNiwxNSBAQCBTVkdEb2N1bWVudCogSFRN
TEZyYW1lT3duZXJFbGVtZW50OjpnZXRTCiB9CiAjZW5kaWYKIAorY29uc3QgV2ViQ29yZTo6UXVh
bGlmaWVkTmFtZSogSFRNTEZyYW1lT3duZXJFbGVtZW50OjpnZXRGcmFtZVVSTEF0dHJpYnV0ZSgp
Cit7CisgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSBhdHRyaWJ1dGVzKHRydWUpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXR0cmlidXRlTWFwLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlTWFwLT5hdHRyaWJ1dGVJ
dGVtKGkpOworICAgICAgICBpZiAoaXNVUkxBdHRyaWJ1dGUoYXR0cmlidXRlKSkKKyAgICAgICAg
ICAgIHJldHVybiAmKGF0dHJpYnV0ZS0+bmFtZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lT3duZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRnJhbWVPd25lckVsZW1lbnQuaAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1
NSw4IEBAIHB1YmxpYzoKIAogICAgIFNhbmRib3hGbGFncyBzYW5kYm94RmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX3NhbmRib3hGbGFnczsgfQogCisgICAgY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVk
TmFtZSogZ2V0RnJhbWVVUkxBdHRyaWJ1dGUoKTsKKwogcHJvdGVjdGVkOgogICAgIEhUTUxGcmFt
ZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFs
aXplci5oIgorCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9y
dFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTEhlYWRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vycy5oIgorI2luY2x1
ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIk1h
cmt1cEFjY3VtdWxhdG9yLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0eWxlQ2Fj
aGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgor
I2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUqIGln
bm9yZWRUYWdzW10gPSB7CisgICAgJkhUTUxOYW1lczo6c2NyaXB0VGFnLAorICAgICZIVE1MTmFt
ZXM6Om5vc2NyaXB0VGFnLAorfTsKKworc3RhdGljIGJvb2wgc2hvdWxkSWdub3JlRWxlbWVudChF
bGVtZW50KiBlbGVtZW50KQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgV1RGX0FSUkFZ
X0xFTkdUSChpZ25vcmVkVGFncyk7ICsraSkgeworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZSgqaWdub3JlZFRhZ3NbaV0pKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05v
ZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFU
YWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzQXR0cmli
dXRlKEhUTUxOYW1lczo6Y2hhcnNldEF0dHIpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IFN0cmluZyBhdHRyaWJ1dGVWYWx1ZTsKKyAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Omh0dHBfZXF1aXZBdHRyKSkuaXNOdWxsKCkKKyAg
ICAgICAgJiYgYXR0cmlidXRlVmFsdWUubG93ZXIoKS5zdHJpcFdoaXRlU3BhY2UoKSA9PSAiY29u
dGVudC10eXBlIikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpN
YXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yKFBhZ2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmly
dHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBO
YW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBt
X3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CisgICAgYm9vbCBtX2FkZENo
YXJzZXQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVz
LCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6ZXIoc2VyaWFsaXplcikKKyAgICAsIG1f
ZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2FkZENoYXJzZXQoZmFsc2UpCit7CisgICAgLy8g
TWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaWUgdGhlIDw/eG1sIC4uLiBsaW5lLCBz
byB3ZSBhZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSByaWdodCBlbmNvZGluZyBpcyBz
cGVjaWZpZWQuCisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpIHx8IG1fZG9j
dW1lbnQtPnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpIHsK
KyAgICAgICAgYXBwZW5kU3RyaW5nKG1ha2VTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIiLCBtX2Rv
Y3VtZW50LT54bWxWZXJzaW9uKCksICJcIiBlbmNvZGluZz1cIiIsIG1fZG9jdW1lbnQtPmNoYXJz
ZXQoKSwgIlwiPz4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBIVE1MIG1p
Z2h0IG9yIG5vdCBoYXZlIHRoZWlyIGVuY29kaW5nIHNwZWNpZmllZCwgd2UnbGwgYWRkIGl0IGlm
IGl0J3MgbWlzc2luZy4KKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkgewor
ICAgICAgICBtX2FkZENoYXJzZXQgPSB0cnVlOworICAgICAgICBIVE1MSGVhZEVsZW1lbnQqIGhl
YWQgPSBtX2RvY3VtZW50LT5oZWFkKCk7CisgICAgICAgIGlmIChoZWFkKSB7CisgICAgICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBoZWFkLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2Rl
LT5uZXh0U2libGluZygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzQ2hhcnNldFNwZWNpZnlp
bmdOb2RlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYWRkQ2hhcnNldCA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICB9ICAgICAKK30KKworU2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30K
Kwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVD
aGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBh
cmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZl
Y3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7
CisKKyAgICBpZiAobV9hZGRDaGFyc2V0ICYmIGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
OjpoZWFkVGFnKSkgeworICAgICAgICBTdHJpbmcgbWV0YVN0YXJ0KCI8bWV0YSBjaGFyc2V0PVwi
Iik7CisgICAgICAgIG91dC5hcHBlbmQobWV0YVN0YXJ0LmNoYXJhY3RlcnMoKSwgbWV0YVN0YXJ0
Lmxlbmd0aCgpKTsKKyAgICAgICAgU3RyaW5nIGNoYXJzZXQgPSBtX2RvY3VtZW50LT5jaGFyc2V0
KCk7CisgICAgICAgIG91dC5hcHBlbmQoY2hhcnNldC5jaGFyYWN0ZXJzKCksIGNoYXJzZXQubGVu
Z3RoKCkpOworICAgICAgICBTdHJpbmcgbWV0YUVuZCgiXCI+Iik7CisgICAgICAgIG91dC5hcHBl
bmQobWV0YUVuZC5jaGFyYWN0ZXJzKCksIG1ldGFFbmQubGVuZ3RoKCkpOworICAgIH0KKyAKKyAg
ICAvLyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNv
dWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgor
fQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
OworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0
byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFsaXpl
ZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJhbWUp
OworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHVybEF0dHJpYnV0ZSA9IGZyYW1lT3duZXItPmdl
dEZyYW1lVVJMQXR0cmlidXRlKCk7CisgICAgaWYgKCF1cmxBdHRyaWJ1dGUpCisgICAgICAgIHJl
dHVybjsKKyAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNyZWF0
ZShIVE1MTmFtZXM6OnNyY0F0dHIsIHVybC5zdHJpbmcoKSk7CisgICAgYXBwZW5kQXR0cmlidXRl
KG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZSwgbmFtZXNwYWNlcyk7Cit9CisKK3ZvaWQgU2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoTm9kZSogbm9kZSkKK3sKKyAgICBp
ZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHRvRWxlbWVu
dChub2RlKSkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcobm9kZSk7
Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoKQoreworfQorCitQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U6OlJlc291cmNlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpCisgICAgOiB1cmwo
dXJsKQorICAgICwgbWltZVR5cGUobWltZVR5cGUpCisgICAgLCBkYXRhKGRhdGEpCit7Cit9CisK
K1BhZ2VTZXJpYWxpemVyOjpQYWdlU2VyaWFsaXplcihWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlPiogcmVzb3VyY2VzKQorICAgIDogbV9yZXNvdXJjZXMocmVzb3VyY2VzKQorICAgICwg
bV9ibGFua0ZyYW1lQ291bnRlcigwKQoreworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemUoUGFnZSogcGFnZSkKK3sKKyAgICBzZXJpYWxpemVGcmFtZShwYWdlLT5tYWluRnJhbWUo
KSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUZyYW1lKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKKyAgICBL
VVJMIHVybCA9IGRvY3VtZW50LT51cmwoKTsKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgdXJs
LnByb3RvY29sSXMoImFib3V0IikpIHsKKyAgICAgICAgLy8gRm9yIGJsYW5rIGZyYW1lcyB3ZSBn
ZW5lcmF0ZSBhIGZha2UgVVJMIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlaXIgY29u
dGFpbmluZyBmcmFtZS4KKyAgICAgICAgdXJsID0gdXJsRm9yQmxhbmtGcmFtZShmcmFtZSk7Cisg
ICAgfQorCisgICAgaWYgKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIGNvdWxkIGhhdmUgMiBmcmFtZSB3aXRoIHRoZSBzYW1lIFVSTCBidXQgd2hp
Y2ggd2VyZSBkeW5hbWljYWxseSBjaGFuZ2VkIGFuZCBoYXZlIG5vdworICAgICAgICAvLyBkaWZm
ZXJlbnQgY29udGVudC4gU28gd2Ugc2hvdWxkIHNlcmlhbGl6ZSBib3RoIGFuZCBzb21laG93IHJl
bmFtZSB0aGUgZnJhbWUgc3JjIGluIHRoZSBjb250YWluaW5nCisgICAgICAgIC8vIGZyYW1lLiBB
cmchCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8Tm9kZSo+IG5vZGVzOwor
ICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVsYXRvcih0aGlzLCBkb2N1bWVu
dCwgJm5vZGVzKTsKKyAgICBUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZyA9IFRleHRFbmNvZGlu
Zyhkb2N1bWVudC0+Y2hhcnNldCgpKTsKKyAgICBpZiAoIXRleHRFbmNvZGluZy5pc1ZhbGlkKCkp
IHsKKyAgICAgICAgTE9HX0VSUk9SKCJVbnN1cHBvcnRlZCBjaGFyc2V0ICclcycsIGRlZmF1bHRp
bmcgdG8gVVRGLTguIiwgZG9jdW1lbnQtPmNoYXJzZXQoKSk7CisgICAgICAgIHRleHRFbmNvZGlu
ZyA9IFVURjhFbmNvZGluZygpOworICAgIH0KKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9y
LnNlcmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5v
ZGUpOworICAgIENTdHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNo
YXJhY3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7
CisgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5taW1lVHlw
ZSgpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhUTUwubGVu
Z3RoKCkpKSk7CisgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CisKKyAgICBmb3IgKFZlY3Rv
cjxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVyICE9IG5vZGVzLmVu
ZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAo
IW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8g
V2UgaGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21l
IHJlc291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKyAgICAgICAg
CisgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSkgewor
ICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1
bWVudC0+Y29tcGxldGVVUkwoaW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpz
cmNBdHRyKSk7CisgICAgICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVs
ZW1lbnQtPmNhY2hlZEltYWdlKCk7CisgICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNh
Y2hlZEltYWdlLCB1cmwpOworICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjpsaW5rVGFnKSkgeworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50KiBsaW5r
RWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAg
ICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAg
ICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKKyAgICAgICAgICAg
ICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChsaW5rRWxlbWVudC0+Z2V0QXR0
cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVD
U1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksIHVybCk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpzdHlsZVRhZykpIHsKKyAgICAgICAgICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxl
bWVudCA9IHN0YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAg
ICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVFbGVtZW50LT5zaGVldCgpOworICAgICAgICAg
ICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAg
ICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVl
dCksIEtVUkwoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKEZyYW1lKiBjaGlsZEZy
YW1lID0gZnJhbWUtPnRyZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZEZyYW1lOyBjaGlsZEZyYW1l
ID0gY2hpbGRGcmFtZS0+dHJlZSgpLT5uZXh0U2libGluZygpKQorICAgICAgICBzZXJpYWxpemVG
cmFtZShjaGlsZEZyYW1lKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NT
U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBLVVJMJiB1cmwpCit7
CisgICAgU3RyaW5nQnVpbGRlciBjc3NUZXh0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9
IHN0eWxlU2hlZXQtPml0ZW0oaSk7CisgICAgICAgIFN0cmluZyBpdGVtVGV4dCA9IGl0ZW0tPmNz
c1RleHQoKTsKKyAgICAgICAgaWYgKCFpdGVtVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IGNzc1RleHQuYXBwZW5kKGl0ZW1UZXh0KTsKKyAgICAgICAgICAgIGlmIChpIDwgc3R5bGVTaGVl
dC0+bGVuZ3RoKCkgLSAxKQorICAgICAgICAgICAgICAgIGNzc1RleHQuYXBwZW5kKCJcblxuIik7
CisgICAgICAgIH0KKyAgICAgICAgLy8gU29tZSBydWxlcyBoYXZlIHJlc291cmNlcyBhc3NvY2lh
dGVkIHdpdGggdGhlbSB0aGF0IHdlIG5lZWQgdG8gcmV0cmlldmUuCisgICAgICAgIGlmIChpdGVt
LT5pc0ltcG9ydFJ1bGUoKSkgeworICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVs
ZSA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIEtVUkwg
aW1wb3J0VVJMID0gc3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaW1wb3J0UnVs
ZS0+aHJlZigpKTsKKyAgICAgICAgICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250YWlucyhpbXBv
cnRVUkwpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2VyaWFsaXpl
Q1NTU3R5bGVTaGVldChpbXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIGltcG9ydFVSTCk7CisgICAg
ICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUoKSkgeworICAgICAgICAgICAgLy8g
RklYTUU6IGFkZCBzdXBwb3J0IGZvciBmb250IGZhY2UgcnVsZS4gSXQgaXMgbm90IGNsZWFyIHRv
IG1lIGF0IHRoaXMgcG9pbnQgaWYgdGhlIGFjdHVhbCBvdGYvZW90IGZpbGUgY2FuCisgICAgICAg
ICAgICAvLyBiZSByZXRyaWV2ZWQgZnJvbSB0aGUgQ1NTRm9udEZhY2VSdWxlIG9iamVjdC4KKyAg
ICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsK
KyAgICB9CisKKyAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhbV9yZXNvdXJjZVVSTHMuY29udGFp
bnModXJsKSkgeworICAgICAgICBUZXh0RW5jb2RpbmcmIHRleHRFbmNvZGluZyA9IFRleHRFbmNv
ZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkpOworICAgICAgICBpZiAoIXRleHRFbmNvZGluZy5p
c1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIExPR19FUlJPUigiVW5zdXBwb3J0ZWQgY2hhcnNldCAn
JXMnLCBkZWZhdWx0aW5nIHRvIFVURi04LiIsIHN0eWxlU2hlZXQtPmNoYXJzZXQoKSk7CisgICAg
ICAgICAgICB0ZXh0RW5jb2RpbmcgPSBVVEY4RW5jb2RpbmcoKTsKKyAgICAgICAgfQorICAgICAg
ICBTdHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmlu
ZyB0ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4
dFN0cmluZy5sZW5ndGgoKSwgUXVlc3Rpb25NYXJrc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgICAg
IG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVzb3VyY2UodXJsLCBTdHJpbmcoInRleHQvY3NzIiksIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSkpOworICAgICAg
ICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6
ZXI6OmFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgaWYgKCF1cmwuaXNWYWxpZCgpIHx8IG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5z
KHVybCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UtPmltYWdl
KCkgPT0gSW1hZ2U6Om51bGxJbWFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcg
bWltZVR5cGUgPSBpbWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpOworICAgIG1fcmVzb3VyY2Vz
LT5hcHBlbmQoUmVzb3VyY2UodXJsLCBtaW1lVHlwZSwgaW1hZ2UtPmltYWdlKCktPmRhdGEoKSkp
OworICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVy
OjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAg
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24ocnVsZS0+c3R5bGUoKSk7Cit9CisK
K3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24o
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIXN0eWxl
RGVjbGFyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc3R5bGVEZWNsYXJhdGlv
bi0+c3R5bGVzaGVldCgpLT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ1NTU3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihzdHlsZURlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpOworCisgICAgLy8gVGhlIGJhY2tn
cm91bmQtaW1hZ2UgYW5kIGxpc3Qtc3R5bGUtaW1hZ2UgKGZvciB1bCBvciBvbCkgYXJlIHRoZSBD
U1MgcHJvcGVydGllcworICAgIC8vIHRoYXQgbWFrZSB1c2Ugb2YgaW1hZ2VzLiBXZSBpdGVyYXRl
IHRvIG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGFueSBvdGhlcgorICAgIC8vIGltYWdlIHByb3BlcnRp
ZXMgdGhlcmUgbWlnaHQgYmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlRGVj
bGFyYXRpb24tPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IGl0J3Mga2luZCBv
ZiByaWRpY3Vsb3VzIHRvIGdldCB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlbiBnZXQKKyAgICAg
ICAgLy8gdGhlIHZhbHVlIG91dCBvZiB0aGUgbmFtZS4gSWRlYWxseSB3ZSB3b3VsZCBnZXQgdGhl
IHZhbHVlIG91dCBvZiB0aGUKKyAgICAgICAgLy8gcHJvcGVydHkgSUQsIGJ1dCBDU1NTdHlsZURl
Y2xhcmF0aW9uIG9ubHkgZ2l2ZXMgYWNjZXNzIHRvIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVz
LCBub3QgSURzLgorICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNs
YXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShzdHlsZURlY2xhcmF0aW9uLT5pdGVtKGkpKTsK
KyAgICAgICAgaWYgKCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTSW1hZ2VWYWx1ZSo+KGNzc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgU3R5bGVJbWFnZSogc3R5
bGVJbWFnZSA9IGltYWdlVmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgIC8v
IE5vbiBjYWNoZWQtaW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5vdCBjb250
YWluIGRhdGEuCisgICAgICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5bGVJbWFnZS0+aXNDYWNo
ZWRJbWFnZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2Uq
IGltYWdlID0gc3RhdGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KHN0eWxlSW1hZ2UpLT5jYWNo
ZWRJbWFnZSgpOworCisgICAgICAgIEtVUkwgdXJsID0gY3NzU3R5bGVTaGVldC0+ZG9jdW1lbnQo
KS0+Y29tcGxldGVVUkwoaW1hZ2UtPnVybCgpKTsKKyAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNl
cyhpbWFnZSwgdXJsKTsKKyAgICB9ICAgIAorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxG
b3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChp
dGVyICE9IG1fYmxhbmtGcmFtZVVSTHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNv
bmQ7CisgICAgU3RyaW5nIHVybCA9IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJp
bmc6Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFy
c2VkVVJMU3RyaW5nLCB1cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtl
VVJMKTsKKworICAgIHJldHVybiBmYWtlVVJMOyAgICAKK30KKworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tbyB0ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFBhZ2VTZXJpYWxp
emVyX2gKKyNkZWZpbmUgUGFnZVNlcmlhbGl6ZXJfaAorCisjaW5jbHVkZSAiSGFzaE1hcC5oIgor
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJLVVJMSGFzaC5oIgorI2luY2x1ZGUgIkxpc3RI
YXNoU2V0LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVl
dDsKK2NsYXNzIEZyYW1lOworY2xhc3MgUGFnZTsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRv
IHNlcmlhbGl6ZSBhIHBhZ2UgY29udGVudHMgYmFjayB0byB0ZXh0ICh0eXBpY2FsbHkgSFRNTCku
CisvLyBJdCBzZXJpYWxpemVzIGFsbCB0aGUgcGFnZSBmcmFtZXMgYW5kIHJldHJpZXZlcyByZXNv
dXJjZXMgc3VjaCBhcyBpbWFnZXMgYW5kIENTUyBzdHlsZXNoZWV0cy4KK2NsYXNzIFBhZ2VTZXJp
YWxpemVyIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgUmVzb3VyY2UgeworICAgICAgICBLVVJMIHVy
bDsKKyAgICAgICAgU3RyaW5nIG1pbWVUeXBlOworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhOworICAgICAgICBSZXNvdXJjZSgpOworICAgICAgICBSZXNvdXJjZShjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEp
OworICAgIH07CisKKyAgICBleHBsaWNpdCBQYWdlU2VyaWFsaXplcihWZWN0b3I8UmVzb3VyY2U+
Kik7CisKKyAgICAvLyBJbml0aWF0ZXMgdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIGZyYW1lJ3Mg
cGFnZS4gQWxsIHNlcmlhbGl6ZWQgY29udGVudCBhbmQgcmV0cmlldmVkCisgICAgLy8gcmVzb3Vy
Y2VzIGFyZSBhZGRlZCB0byB0aGUgVmVjdG9yIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIFRo
ZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0CisgICAgLy8gdmVjdG9yIGlzIHRoZSB0b3AgZnJhbWUg
c2VyaWFsaXplZCBjb250ZW50LgorICAgIHZvaWQgc2VyaWFsaXplKFBhZ2UqKTsKKworICAgIEtV
UkwgdXJsRm9yQmxhbmtGcmFtZShGcmFtZSopOworCitwcml2YXRlOgorICAgIHZvaWQgc2VyaWFs
aXplRnJhbWUoRnJhbWUqKTsKKworICAgIC8vIFNlcmlhbGl6ZXMgdGhlIHN0eWxlc2hlZXQgYmFj
ayB0byB0ZXh0IGFuZCBhZGRzIGl0IHRvIHRoZSByZXNvdXJjZXMgaWYgVVJMIGlzIG5vdC1lbXB0
eS4KKyAgICAvLyBJdCBhbHNvIGFkZHMgYW55IHJlc291cmNlcyBpbmNsdWRlZCBpbiB0aGF0IHN0
eWxlc2hlZXQgKGluY2x1ZGluZyBhbnkgaW1wb3J0ZWQgc3R5bGVzaGVldHMgYW5kIHRoZWlyIG93
biByZXNvdXJjZXMpLgorICAgIHZvaWQgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNo
ZWV0KiwgY29uc3QgS1VSTCYpOworCisgICAgdm9pZCBhZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hl
ZEltYWdlKiwgY29uc3QgS1VSTCYpOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NE
ZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCByZXRyaWV2ZVJlc291
cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKik7CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+KiBt
X3Jlc291cmNlczsKKyAgICBMaXN0SGFzaFNldDxLVVJMPiBtX3Jlc291cmNlVVJMczsKKyAgICBI
YXNoTWFwPEZyYW1lKiwgS1VSTD4gbV9ibGFua0ZyYW1lVVJMczsKKyAgICB1bnNpZ25lZCBtX2Js
YW5rRnJhbWVDb3VudGVyOworfTsKKworfQorCisjZW5kaWYKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2
aXNpb24gODQ3MTApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDExLTA0LTIyICBKYXkgQ2l2ZWxsaSAgPGpjaXZl
bGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBBUEkgdG8gc2VyaWFsaXplIGEgV2ViVmlldyBi
YWNrIHRvIEhUTUwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01ODk0NworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2Vi
UGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAg
KiB0ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YktpdDo6VEVTVF9GKToKKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsdWVfYmFja2dy
b3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3Nz
X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2dyZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3M6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZzogQWRkZWQu
CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2Jh
Y2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L3JlZF9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci90b3BfZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci91bC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisKIDIwMTEtMDQtMjIgIE1p
a2hhaWwgTmFnYW5vdiAgPG1uYWdhbm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2
aXNpb24gODM2NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHdvcmtp
bmcgY29weSkKQEAgLTg0Myw2ICs4NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvUG9wdXBNZW51VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2Vy
aWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAg
ICAgICAgICAgICAgICAgICAgfV0sCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJQYWdlU2VyaWFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMzEsMTQgKzMxLDE0IEBACiAjaWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKICNkZWZp
bmUgV2ViUGFnZVNlcmlhbGl6ZXJfaAogCisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1
ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKLWNsYXNzIFdlYkNTdHJpbmc7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBhZ2VTZXJp
YWxpemVyQ2xpZW50OwogY2xhc3MgV2ViU3RyaW5nOwotY2xhc3MgV2ViVVJMOwogY2xhc3MgV2Vi
VmlldzsKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKQEAgLTQ2LDYg
KzQ2LDIzIEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAvLyB3aGlj
aCBjb250YWluIGFsbCByZXNvdXJjZSBsaW5rcyB0aGF0IGhhdmUgbG9jYWwgY29weS4KIGNsYXNz
IFdlYlBhZ2VTZXJpYWxpemVyIHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgUmVzb3VyY2UgeworICAg
ICAgICBXZWJVUkwgdXJsOworICAgICAgICBXZWJDU3RyaW5nIG1pbWVUeXBlOworICAgICAgICBX
ZWJDU3RyaW5nIGRhdGE7CisgICAgfTsKKworICAgIC8vIFNlcmlhbGl6ZXMgYWxsIHRoZSBmcmFt
ZXMgZnJvbSB0aGUgV2ViVmlldywgcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAvLyByZXNvdXJj
ZXMgKHN1Y2ggYXMgaW1hZ2VzIGFuZCBDU1MpIGFuZCBhZGRzIHRoZW0gdG8gdGhlIHBhc3NlZCB2
ZWN0b3IuCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQgdmVjdG9yIGlzIHRoZSB0
b3AgZnJhbWUgY29udGVudHMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0
IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsgdG8gSmF2YVNjcmlwdC4KKyAgICBXRUJLSVRfQVBJIHN0
YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJWaWV3KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOworCisg
ICAgLy8gSU1QT1JUQU5UOgorICAgIC8vIFRoZSBBUEkgYmVsb3cgaXMgYW4gb2xkZXIgaW1wbGVt
ZW50YXRpb24gb2YgYSBwYWdlc2VyaWFsaXphdGlvbiB0aGF0CisgICAgLy8gd2lsbCBiZSByZW1v
dmVkIHNvb24uCisKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJh
bWVzIGFuZCBzZXJpYWxpemUgdGhlbSB0byBIVE1MIGRhdGEuCiAgICAgLy8gV2UgaGF2ZSBhIGRh
dGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBzYXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2ls
bAogICAgIC8vIHNlcXVlbnRpYWxseSBjYWxsIFdlYlBhZ2VTZXJpYXpsaWVyQ2xpZW50IG9uY2Ug
dGhlIGRhdGEgYnVmZmVyIGlzIGZ1bGwuCkBAIC02NCw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICAv
LyBzYXZlZCBsaW5rcywgd2hpY2ggbWF0Y2hlZCB3aXRoIHZlY3RvcjpsaW5rcyBvbmUgYnkgb25l
LgogICAgIC8vIFRoZSBwYXJhbWV0ZXIgbG9jYWxEaXJlY3RvcnlOYW1lIGlzIHJlbGF0aXZlIHBh
dGggb2YgZGlyZWN0b3J5IHdoaWNoCiAgICAgLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5
IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIgZnJhbWVzIGFuZCByZXNvdXJjZXMuCi0gICAgV0VCS0lU
X0FQSSBzdGF0aWMgYm9vbCBzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAorICAgIFdFQktJVF9B
UEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHJlY3Vyc2l2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJM
PiYgbGlua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2Vi
VmVjdG9yPFdlYlN0cmluZz4mIGxvY2FsUGF0aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgV2ViU3RyaW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOwpAQCAtODUs
NyArMTAyLDcgQEAgcHVibGljOgogICAgIC8vIEdlbmVyYXRlIHRoZSBNRVRBIGZvciBjaGFyc2V0
IGRlY2xhcmF0aW9uLgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1l
dGFDaGFyc2V0RGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBjaGFyc2V0KTsKICAgICAvLyBH
ZW5lcmF0ZSB0aGUgTU9UVyBkZWNsYXJhdGlvbi4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJT
dHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVybCk7
CisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVj
bGFyYXRpb24oY29uc3QgV2ViVVJMJik7CiAgICAgLy8gR2VuZXJhdGUgdGhlIGRlZmF1bHQgYmFz
ZSB0YWcgZGVjbGFyYXRpb24uCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVy
YXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCk7CiB9OwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQ
YWdlU2VyaWFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNs
dWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAiVmVjdG9y
LmgiCiAKICNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVk
ZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAiV2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5o
IgorI2luY2x1ZGUgIldlYlZpZXdJbXBsLmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZS5oPgogCkBAIC0xNzksNiArMTgxLDI1IEBAIHZvaWQgcmV0cmlldmVSZXNvdXJj
ZXNGb3JGcmFtZShGcmFtZSogZnIKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2ViUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBhZ2VT
ZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNlcmlh
bGl6ZXIoJnJlc291cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nhc3Q8
V2ViVmlld0ltcGwqPih2aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4gcmVz
dWx0OworICAgIGZvciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0X2l0
ZXJhdG9yIGl0ZXIgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2Uu
dXJsID0gaXRlci0+dXJsOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1pbWVU
eXBlLmFzY2lpKCk7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIHJl
c291cmNlIGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRhKCku
CisgICAgICAgIHJlc291cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEoKSwg
aXRlci0+ZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7Cisg
ICAgfQorCisgICAgKnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBib29s
IFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3
U2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisj
aW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5o
IgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgi
CisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAi
V2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAi
V2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0
V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGllbnQgeworcHVibGljOgorICAgIFRl
c3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFibGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBib29sIC8qIGVuYWJsZWRQZXJTZXR0aW5n
cyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9CisgICAgYm9vbCBtX3NjcmlwdEVuYWJs
ZWQ7Cit9OworCitjbGFzcyBXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCA6IHB1YmxpYyB0ZXN0aW5n
OjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCgpCisgICAgICAg
IDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9odG1sIikpCisgICAg
ICAgICwgbV9jc3NNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2NzcyIpKQorICAg
ICAgICAsIG1fcG5nTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1hZ2UvcG5nIikpCisg
ICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAg
eworICAgICAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAg
IG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKKworICAgICAgICAvLyBXZSB3YW50IHRo
ZSBpbWFnZXMgdG8gbG9hZC4KKyAgICAgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbV93ZWJW
aWV3LT5zZXR0aW5ncygpOworICAgICAgICBzZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVl
KTsKKyAgICAgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsK
KworICAgICAgICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGll
bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAg
ICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93
ZWJWaWV3LT5jbG9zZSgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBXZWJT
dHJpbmcmIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7
CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlN
RVR5cGUobWltZVR5cGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDAp
OworICAgICAgICBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJL
aXRSb290RGlyKCkudXRmOCgpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvIik7CisgICAgICAgIGZpbGVQ
YXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVn
aXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0
aCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJs
KQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxS
ZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVy
bCkpOworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1
ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZl
ZC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVz
dHMoKTsKKyAgICAgICAgLy8gU29tZSByZXF1ZXN0cyBnZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1l
ci4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAg
ICAgICAvLyBTZXJ2ZXIgdGhlIGRlbGF5ZWQgcmVzb3VyY2VzLgorICAgICAgICB3ZWJraXRfc3Vw
cG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHZv
aWQgZW5hYmxlSlMoKQorICAgIHsKKyAgICAgICAgbV93ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVu
YWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcnVuT25Mb2FkKCkKKyAgICB7CisgICAg
ICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNl
KFdlYlN0cmluZzo6ZnJvbVVURjgoIm9uTG9hZCgpIikpKTsKKyAgICB9CisKKyAgICBjb25zdCBX
ZWJTdHJpbmcmIGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9
CisgICAgY29uc3QgV2ViU3RyaW5nJiBjc3NNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3Nz
TWltZVR5cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIHBuZ01pbWVUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9wbmdNaW1lVHlwZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIHJlc291cmNlVmVj
dG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4m
IHJlc291cmNlcywgY2hhciogdXJsLCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdl
YlVSTCB3ZWJVUkwgPSBXZWJVUkwoR1VSTCh1cmwpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZXNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFdlYlBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAg
ICAgICBpZiAocmVzb3VyY2UudXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5pc0VtcHR5
KCkgJiYgIXJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlwZSkpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2YXRlOgor
ICAgIFdlYlN0cmluZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlw
ZTsKKyAgICBXZWJTdHJpbmcgbV9wbmdNaW1lVHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQg
bV93ZWJGcmFtZUNsaWVudDsKK307CisKKy8vIFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3Vy
Y2VzIGFuZCBzdWItZnJhbWUgaXMgcmVwb3J0ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KK1RF
U1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgUGFnZVdpdGhGcmFtZXMpCit7CisgICAgLy8g
UmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BG
cmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL2lmcmFtZS5odG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZS5odG1sIiksIGh0
bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lMi5o
dG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQu
cG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01p
bWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9i
YWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1l
KHRvcEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmll
dywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOwor
ICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUu
CisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291
cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFy
ZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5k
YXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3VyY2VzLnNpemUoKSk7IC8v
IFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dy
b3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9y
Q29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5k
LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmci
LCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIsICJ0ZXh0L2h0bWwi
KSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKKy8v
IFRlc3QgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENTUyByZXNvdXJjZXMgYXJl
IHJlcG9ydGVkLCBpbmNsdWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9ydHMgYW5kIGxpbmtzLiBO
b3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRlbnRzLCB3ZSBvbmx5IG1h
a2Ugc3VyZQorLy8gdGhleSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhlIHJpZ2h0IG1pbWUgdHlw
ZSBhbmQgdGhhdCB0aGV5IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJp
YWxpemVUZXN0LCBDU1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBm
cmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkp
OworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xp
bmtfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxlcy5jc3MiKSwg
Y3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0
eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSwgY3Nz
TWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cu
dGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9i
YWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkp
OworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3ll
bGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5ZWxsb3dfYmFja2dy
b3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNr
Z3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiks
IHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJwdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJ1bC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgib2wtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAg
IGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1
bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4g
cmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAm
cmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAg
CisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAg
ICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2Vz
WzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdl
YkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEu
aXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRo
ZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5j
c3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiwgInRl
eHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0
ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3Bu
ZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIp
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vdWwtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmci
LCAiaW1hZ2UvcG5nIikpOworfQorCisvLyBUZXN0cyB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBw
YWdlIHdpdGggYmxhbmsgZnJhbWVzIHRoZXNlIGFyZSByZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291
cmNlcy4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgQmxhbmtGcmFtZXMpCit7Cisg
ICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwg
dG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibGFua19mcmFt
ZXMuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dy
b3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiks
IHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8v
d3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
Ymx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7
CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOwor
CisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOwor
ICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsK
KyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhl
IGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOwor
ICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRl
eHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsK
KworICAgIEVYUEVDVF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJl
IG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFn
ZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikp
OworICAgIC8vIFRoZSBibGFuayBmcmFtZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJMLgor
ICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5
ZzovL2ZyYW1lLzAiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzEiLCAidGV4dC9odG1sIikp
OworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3lj
aXd5ZzovL2ZyYW1lLzIiLCAidGV4dC9odG1sIikpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2Vz
IG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVz
dC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1l
cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPGh0bWw+CisKKzxzY3JpcHQ+CisgIGZ1
bmN0aW9uIG9ubG9hZCgpIHsKKyAgICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJpZnJhbWUiKTsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2
MSIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGlt
ZyBzcmM9J2JsdWVfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+Igor
CisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYyIik7CisgICAgZGl2LmFwcGVuZENoaWxk
KGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQor
ICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0ncmVkX2JhY2tncm91bmQucG5n
Jy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
Im15RGl2MyIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250
ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1h
Z2UgPGltZyBzcmM9J29yYW5nZV9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4
dDwvYj4iCisKKyAgfQorICAKKzwvc2NyaXB0PgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4K
KyAgVGhpcyBwYWdlIGNyZWF0ZXMgZW1wdHkgaWZyYW1lcyBhbmQgYWRkcyBjb250ZW50IHRvIHRo
ZW0gZHluYW1pY2FsbHkuPGJyPjxicj4KKyAgPGRpdiBpZD0ibXlEaXYxIj48L2Rpdj4KKyAgPGRp
diBpZD0ibXlEaXYyIj48L2Rpdj4KKyAgPGRpdiBpZD0ibXlEaXYzIj48L2Rpdj4KKzwvYm9keT4K
KworPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190
ZXN0X3BhZ2UuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0
IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAg
V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlU25hcHNob3QgbWV0aG9kCistLT4KKworPGhlYWQ+
CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtfc3R5
bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3NzJyk7
CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlOworICBzcmM6IHVybCgn
Q2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLXdlYmZvbnQuZW90KSBmb3Jt
YXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2IHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2
ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisKKzxzdHlsZT4KKyNkaXZCbHVlIHsKKyAgYmFj
a2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5wbmcnKTsKK30KKwordWwgeworICBs
aXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsKK30KKworb2wgeworICBsaXN0LXN0
eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsKK30KKworPC9zdHlsZT4KKworPHNjcmlwdD4K
Ky8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUuCitmdW5jdGlvbiBvbkxvYWQoKSB7
CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ3B1
cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHlsZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBlPSAndGV4dC9jc3MnOworICBzdHlsZU5vZGUu
bWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgorCis8IS0tIFRl
eHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYgaWQ9J2NodW5rZml2ZURpdic+VGhp
cyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250LjwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlu
IGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2UmVkJz4KK1RoaXMgZGl2IGhhcyBhIHJlZCBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGEgZmls
ZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZPcmFuZ2UnPgor
VGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisK
KzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlllbGxv
dyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rp
dj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5bGUgc2VjdGlvbiBpbiB0aGUgaGVh
ZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRpdiBoYXMgYSBibHVlIGltYWdlIGFz
IGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW5saW5lZCAtLT4KKzxk
aXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2dyZWVuX2JhY2tn
cm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMgaXRzIGJhY2tncm91
bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0aCBK
YXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4KKzxkaXYgaWQ9J2RpdlB1cnBsZSc+
CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4K
KworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8
L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xp
PgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+CisKK09yZGVyZWQgbGlzdDo8YnI+Cis8b2w+
CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8
bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC9vbD4KKwor
PC9ib2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lm
cmFtZTIuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImdyZWVuX2JhY2tncm91bmQucG5nIi8+
Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorCis8L2JvZHk+CisKKzwvaHRtbD4K
ClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFi
bGUKICAgKyAqCgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2lmcmFtZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1n
IHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBu
ZyIvPgorCis8L2JvZHk+CisKKzwvaHRtbD4KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9z
dHlsZV9mcm9tX2xpbmsuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZPcmFu
Z2UgeworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnb3JhbmdlX2JhY2tncm91bmQucG5nJyk7Cit9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9m
cm9tX2xpbmsuY3NzCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBv
cnRfc3R5bGVzLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0
eWxlcy5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMyBAQAorI2RpdlllbGxvdyB7CisgIGJh
Y2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCl9fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L2xpbmtfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7
CisKKyNkaXZSZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBu
ZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0
eWxlcy5jc3MKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFt
ZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9InJl
ZF9iYWNrZ3JvdW5kLnBuZyIvPgorCis8aWZyYW1lIHNyYz0iaWZyYW1lLmh0bWwiPjwvaWZyYW1l
PgorPG9iamVjdCBkYXRhPSJpZnJhbWUyLmh0bWwiPjwvb2JqZWN0PgorPGlmcmFtZSBzcmM9Imlm
cmFtZS5odG1sIj48L2lmcmFtZT4KKworPC9ib2R5PgorCis8L2h0bWw+CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
dG9wX2ZyYW1lLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCgpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Js
dWVfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQg
YXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2JsdWVfYmFja2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3Zu
OmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlS
ME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURz
SUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZMlJZOU9JL0F4VUJFeFhOQWhzMWFpRGxJVG9hCmhx
TmhTRVlJakNZYk1nSU5UY3NJREVNQWlOQUNzYk1tUEtjQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvZ3JlZW5f
YmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMg
YSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoK
UHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2dyZWVuX2JhY2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpl
eGVjdXRhYmxlCiAgICsgKgpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBO
QUFBQUFYTlNSMElBcnM0YzZRQUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lB
QUE3Q0FSVW9Tb0FBQUFBdFNVUkJWRGhQWTFUYTZQT2ZnWXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3
SkNNRVJwTU5HWUdHcG1VRWhpRUE1UnNDUnU3QzAxQUFBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29sLWRvdC5w
bmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlw
ZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKUHJvcGVydHkgY2hh
bmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L29sLWRvdC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFB
Um5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZE
aFBZMVRhNlBPZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQTVS
c0NSdTdDMDFBQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3JhbmdlX2JhY2tncm91bmQucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFj
a2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFB
Um5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZE
aFBZL3hmci82ZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQU5V
VUN6SGhvUGhnQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2JhY2tncm91bmQucG5nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1l
LXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFj
a2dyb3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVk
OiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtH
Z29BQUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFB
Um5RVTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZE
aFBZMXpzdWVRL0F4VUJFeFhOQWhzMWFpRGxJVG9hCmhxTmhTRVlJakNZYk1nSU5UY3NJREVNQXI2
TUN0MUxzOTU0QUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcmVkX2JhY2tncm91bmQucG5nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
Q2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5
cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9yZWRfYmFja2dyb3Vu
ZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBzdm46
bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29BQUFB
TlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5RVTFC
QUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZM3dy
by9LZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQVBwa0NWRmY3
ZUFvQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvdWwtZG90LnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5
OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdWwtZG90LnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFB
QUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpj
d0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkzd3JvL0tmZ1lxQWlZcG1nWTBhTlpEeUVC
ME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBUHBrQ1ZGZjdlQW9BQUFBQVNVVk9SSzVDWUlJPQoK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci95
ZWxsb3dfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJr
ZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVk
OiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNh
dGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFB
QUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpj
d0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkvei9pZUUvQXhVQkV4WE5BaHMxYWlEbElU
b2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BRmVJREdHSHFCcllBQUFBQVNVVk9SSzVDWUlJPQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90935</attachid>
            <date>2011-04-25 12:29:40 -0700</date>
            <delta_ts>2011-04-26 01:09:28 -0700</delta_ts>
            <desc>Addressing Alexey&apos;s comments</desc>
            <filename>html_serializer_webkit.patch</filename>
            <type>text/plain</type>
            <size>67634</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0Nzg5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDQtMjUgIEpheSBDaXZl
bGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dz
IHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBh
bGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAg
cmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9X
ZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAg
ICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBX
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Om1pbWVUeXBlKToKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToK
KyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVPd25lckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lT3du
ZXJFbGVtZW50OjpnZXRTb3VyY2VVUkxBdHRyaWJ1dGVOYW1lSWZQcmVzZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJz
ZXRQYXJzZXI6OnByb2Nlc3NNZXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNl
dFBhcnNlcjo6Z2V0RW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmg6IEFkZGVk
LgorCiAyMDExLTA0LTI1ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyIEh1bnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9BbmRy
b2lkLm1rCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsJKHJldmlzaW9u
IDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawkod29ya2luZyBjb3B5KQpAQCAt
NDQzLDYgKzQ0Myw3IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAog
CXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFnZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBM
b2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJm
b3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9Q
ZXJmb3JtYW5jZVRpbWluZy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkK
QEAgLTEwMTQsNiArMTAxNCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL1BhZ2Uu
Y3BwCiAgICAgcGFnZS9QYWdlR3JvdXAuY3BwCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJy
ZXIuY3BwCisgICAgcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKICAgICBwYWdlL1BlcmZvcm1hbmNl
LmNwcAogICAgIHBhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcAogICAgIHBhZ2UvUGVyZm9y
bWFuY2VUaW1pbmcuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlz
aW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2lu
ZyBjb3B5KQpAQCAtMjIyOSw2ICsyMjI5LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cExvYWREZWZlcnJlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIFwK
KwlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGVyZm9ybWFuY2UuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNl
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNzA5LDYgKzcwOSw3IEBACiAgICAgICAgICAg
ICAncGFnZS9NZW1vcnlJbmZvLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZS5oJywKICAgICAg
ICAgICAgICdwYWdlL1BhZ2VHcm91cC5oJywKKyAgICAgICAgICAgICdwYWdlL1BhZ2VTZXJpYWxp
emVyLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGx1Z2luSGFsdGVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oJywKICAgICAgICAgICAgICdwYWdlL1Bvc2l0
aW9uRXJyb3IuaCcsCkBAIC0zNDMwLDYgKzM0MzEsNyBAQAogICAgICAgICAgICAgJ3BhZ2UvUGFn
ZUdyb3VwLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3Bw
JywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5oJywKKyAgICAgICAg
ICAgICdwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3Jt
YW5jZS5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2UuaCcsCiAgICAgICAgICAg
ICAncGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC05MjcsNiArOTI3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9QYWdlLmNwcCBc
CiAgICAgcGFnZS9QYWdlR3JvdXAuY3BwIFwKICAgICBwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJl
ci5jcHAgXAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIFwKICAgICBwYWdlL1BlcmZvcm1h
bmNlLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKICAgICBwYWdl
L1BlcmZvcm1hbmNlVGltaW5nLmNwcCBcCkBAIC0xODYxLDYgKzE4NjIsNyBAQCBIRUFERVJTICs9
IFwKICAgICBwYWdlL1BhZ2VHcm91cC5oIFwKICAgICBwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJl
ci5oIFwKICAgICBwYWdlL1BhZ2UuaCBcCisgICAgcGFnZS9QYWdlU2VyaWFsaXplci5oIFwKICAg
ICBwYWdlL1BsdWdpbkhhbHRlci5oIFwKICAgICBwYWdlL1BsdWdpbkhhbHRlckNsaWVudC5oIFwK
ICAgICBwYWdlL1ByaW50Q29udGV4dC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNTA5
MCw2ICsyNTA5MCwxNCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmNwcCIKKwkJCQk+CisJCQk8L0ZpbGU+CisJ
CQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5oIgorCQkJ
CT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBlcmZv
cm1hbmNlLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTExMyw2ICsxMTEzLDIwIEBAIHZvaWQgRG9jdW1lbnQ6OnNldENv
bnRlbnQoY29uc3QgU3RyaW5nJgogICAgIGNsb3NlKCk7CiB9CiAKK1N0cmluZyBEb2N1bWVudDo6
bWltZVR5cGUoKSBjb25zdAoreworICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiOworICAgIGlmIChtX2Rv
Y3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAiaW1hZ2Uvc3ZnK3htbCI7
CisgICAgaWYgKG1fZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgcmV0dXJuICJ0
ZXh0L3htbCI7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAgICAg
IHJldHVybiAidGV4dC9odG1sIjsKKworICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyLT5yZXNw
b25zZU1JTUVUeXBlKCk7Cit9CisKIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc2N1c3MgdGhlIERP
TSBBUEkgaGVyZSBhdCBzb21lIHBvaW50LiBJZGVhczoKIC8vICogbWFraW5nIGl0IHJlY2VpdmUg
YSByZWN0IGFzIHBhcmFtZXRlciwgaS5lLiBub2Rlc0Zyb21SZWN0KHgsIHksIHcsIGgpOwogLy8g
KiBtYWtpbmcgaXQgcmVjZWl2ZSB0aGUgZXhwYWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlvbiBz
ZXBhcmF0ZWx5LApJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgzNjQ1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2MSw2ICsz
NjEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldENvbnRlbnQoY29uc3QgU3RyaW5nJik7CiAK
KyAgICBTdHJpbmcgbWltZVR5cGUoKSBjb25zdDsKKwogICAgIFN0cmluZyBjb250ZW50TGFuZ3Vh
Z2UoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYW5ndWFnZTsgfQogICAgIHZvaWQgc2V0Q29u
dGVudExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZykgeyBtX2NvbnRlbnRMYW5ndWFnZSA9IGxh
bmc7IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBB
Y2N1bXVsYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVgogICAgICAgICBkb2N1bWVudElzSFRN
TCA/IEVudGl0eU1hc2tJbkhUTUxBdHRyaWJ1dGVWYWx1ZSA6IEVudGl0eU1hc2tJbkF0dHJpYnV0
ZVZhbHVlKTsKIH0KIAordm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKQoreworfQorCiB2b2lk
IE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1
b3RlQ2hhciA9ICdcIic7CkBAIC0zMjcsNiArMzMxLDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRWxlbWVudChWZQogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVu
Z3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1
dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8vIEdpdmUgYW4gb3Bw
b3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJpYnV0ZXMuCisgICAg
YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCiAgICAg
YXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAkocmV2aXNpb24gODM2NDUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0
LDI1ICs3NCwyNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5vZGUqLCBO
YW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRvdGFsTGVu
Z3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAgICB2b2lkIGNvbmNh
dGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBhcHBlbmRBdHRyaWJ1
dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlLCBi
b29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFw
cGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3Qg
U3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CiAgICAgYm9v
bCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKICAgICBib29sIHNo
b3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzJik7
CiAgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBB
dG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIE5h
bWVzcGFjZXMmKTsKLSAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQqIHRleHQp
IGNvbnN0OworICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNvbnN0Owog
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOwog
ICAgIHZvaWQgYXBwZW5kQ29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYg
Y29tbWVudCk7CiAgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3NpbmdJbnN0
cnVjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBT
dHJpbmcmIGRhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hh
cj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE9wZW5UYWco
VmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKik7Ci0gICAg
dm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQp
OwotICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQgYXBwZW5k
T3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAg
dm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsKKyAgICB2
b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBjb25zdCBB
dHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rpb24oVmVj
dG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwogICAgIHZvaWQgYXBwZW5k
U3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFtZXNwYWNl
cyopOwogICAgIGJvb2wgc2hvdWxkU2VsZkNsb3NlKGNvbnN0IE5vZGUqKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDgz
NjQ1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDYsNCArMTA2LDE1IEBAIFNWR0RvY3VtZW50KiBIVE1MRnJhbWVP
d25lckVsZW1lbnQ6OmdldFMKIH0KICNlbmRpZgogCitjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWRO
YW1lKiBIVE1MRnJhbWVPd25lckVsZW1lbnQ6OmdldFNvdXJjZVVSTEF0dHJpYnV0ZU5hbWVJZlBy
ZXNlbnQoKQoreworICAgIE5hbWVkTm9kZU1hcCogYXR0cmlidXRlTWFwID0gYXR0cmlidXRlcyh0
cnVlKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZU1hcC0+bGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU1hcC0+YXR0
cmlidXRlSXRlbShpKTsKKyAgICAgICAgaWYgKGlzVVJMQXR0cmlidXRlKGF0dHJpYnV0ZSkpCisg
ICAgICAgICAgICByZXR1cm4gJihhdHRyaWJ1dGUtPm5hbWUoKSk7CisgICAgfQorICAgIHJldHVy
biAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmgJKHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTUsNiArNTUsOCBAQCBwdWJsaWM6CiAKICAgICBTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdzKCkg
Y29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7IH0KIAorICAgIGNvbnN0IFdlYkNvcmU6OlF1
YWxpZmllZE5hbWUqIGdldFNvdXJjZVVSTEF0dHJpYnV0ZU5hbWVJZlByZXNlbnQoKTsKKwogcHJv
dGVjdGVkOgogICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAJKHJldmlzaW9uIDgzNjQ1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAyLDE1ICsxMDIsMjkgQEAgU3RyaW5nIEhUTUxNZXRhQ2hhcnNldFBh
cnNlcjo6ZXh0cmFjdENoYQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01l
dGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1
dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgVmVjdG9yPHBhaXI8QXRvbWljU3RyaW5n
LCBTdHJpbmc+ID4gYXR0cmlidXRlczsKKyAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlz
dDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHRva2VuQXR0cmlidXRlcy5iZWdpbigpOworICAgICAg
ICAgaXRlciAhPSB0b2tlbkF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBBdG9t
aWNTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVyLT5tX25hbWUuZGF0YSgpLCBpdGVyLT5tX25hbWUu
c2l6ZSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlKGl0ZXItPm1fdmFsdWUuZGF0
YSgpLCBpdGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5kKG1h
a2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSkpOworICAgIH0KKworICAgIG1f
ZW5jb2RpbmcgPSBnZXRFbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAg
ICByZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK1RleHRFbmNvZGluZyBIVE1MTWV0
YUNoYXJzZXRQYXJzZXI6OmdldEVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGNvbnN0IFZlY3Rv
cjxwYWlyPEF0b21pY1N0cmluZywgU3RyaW5nPiA+JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wg
Z290UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hh
cnNldDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9
IG1fdG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOworICAgIGZvciAoVmVj
dG9yPHBhaXI8QXRvbWljU3RyaW5nLCBTdHJpbmc+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
dHRyaWJ1dGVzLmJlZ2luKCk7CiAgICAgICAgICBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsr
aXRlcikgewotICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVyLT5tX25hbWUu
ZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsKLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZh
bHVlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSA9IGl0ZXItPmZpcnN0OworICAgICAg
ICBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gaXRlci0+c2Vjb25kOwogCiAgICAgICAg
IGlmIChhdHRyaWJ1dGVOYW1lID09IGh0dHBfZXF1aXZBdHRyKSB7CiAgICAgICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoYXR0cmlidXRlVmFsdWUsICJjb250ZW50LXR5cGUiKSkKQEAgLTEy
NywxMyArMTQxLDEwIEBAIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSgK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1vZGUgPT0g
UHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IFRleHRFbmNvZGlu
ZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwotICAgICAgICBp
ZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290UHJhZ21h
KSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hU
TUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBUZXh0
RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlv
bmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBiZSBjaGVja2VkIGZv
ciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVyLgpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgJ
KHJldmlzaW9uIDgzNjQ1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDExICs0OCwxNCBAQCBwdWJsaWM6
CiAKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgeyByZXR1cm4gbV9lbmNvZGlu
ZzsgfQogCisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0IG5vdCBiZSB2YWxpZC4K
KyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGdldEVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGNv
bnN0IFZlY3RvcjxwYWlyPEF0b21pY1N0cmluZywgU3RyaW5nPiA+Jik7CisKIHByaXZhdGU6CiAg
ICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyKCk7CiAKICAgICBib29sIHByb2Nlc3NNZXRhKCk7Ci0g
ICAgU3RyaW5nIGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBTdHJp
bmcgZXh0cmFjdENoYXJzZXQoY29uc3QgU3RyaW5nJik7CiAKICAgICBlbnVtIE1vZGUgewogICAg
ICAgICBOb25lLApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UGFnZVNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUNo
YXJzZXRQYXJzZXIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5
bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRUUFBhcnNlcnMuaCIKKyNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJNYXJrdXBBY2N1bXVs
YXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJU
ZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lKiBpZ25vcmVkVGFnc1td
ID0geworICAgICZIVE1MTmFtZXM6OnNjcmlwdFRhZywKKyAgICAmSFRNTE5hbWVzOjpub3Njcmlw
dFRhZywKK307CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVsZW1lbnQoRWxlbWVudCogZWxl
bWVudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFdURl9BUlJBWV9MRU5HVEgoaWdu
b3JlZFRhZ3MpOyArK2kpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoKmlnbm9y
ZWRUYWdzW2ldKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKE5vZGUqIG5v
ZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChub2RlKTsK
KyAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjptZXRhVGFnKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIFZlY3RvcjxwYWlyPEF0b21pY1N0cmluZywgU3RyaW5nPiA+
IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxl
bWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0
cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBh
dHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBhdHRyaWJ1dGVzLmFwcGVu
ZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkpKTsKKyAg
ICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBhcnNl
cjo6Z2V0RW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJu
IHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6Cisg
ICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgRG9jdW1lbnQq
LCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8
VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0
b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lk
IGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworCitwcml2
YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQqIG1f
ZG9jdW1lbnQ7CisgICAgYm9vbCBtX2FkZENoYXJzZXQ7Cit9OworCitTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciog
c2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAg
ICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3Nlcmlh
bGl6ZXIoc2VyaWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCisgICAgLCBtX2Fk
ZENoYXJzZXQoZmFsc2UpCit7CisgICAgLy8gTWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2Vy
aWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVu
c3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgorICAgIGlmIChtX2RvY3VtZW50
LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9k
b2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKSB7CisgICAgICAgIGFwcGVuZFN0cmluZyhtYWtlU3Ry
aW5nKCI8P3htbCB2ZXJzaW9uPVwiIiwgbV9kb2N1bWVudC0+eG1sVmVyc2lvbigpLCAiXCIgZW5j
b2Rpbmc9XCIiLCBtX2RvY3VtZW50LT5jaGFyc2V0KCksICJcIj8+IikpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gSFRNTCBtaWdodCBvciBub3QgaGF2ZSB0aGVpciBlbmNvZGlu
ZyBzcGVjaWZpZWQsIHdlJ2xsIGFkZCBpdCBpZiBpdCdzIG1pc3NpbmcuCisgICAgaWYgKG1fZG9j
dW1lbnQtPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICAgICAgbV9hZGRDaGFyc2V0ID0gdHJ1ZTsK
KyAgICAgICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gbV9kb2N1bWVudC0+aGVhZCgpOworICAg
ICAgICBpZiAoaGVhZCkgeworICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlID0gaGVhZC0+Zmly
c3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShub2RlKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2FkZENoYXJzZXQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSAgICAgICAgICAgIAorICAgICAgICB9
CisgICAgfSAgICAgCit9CisKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcigpCit7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3sKKyAg
ICBFbGVtZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKHBhcmVu
dCAmJiAhc2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kVGV4dChvdXQsIHRleHQpOworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVs
ZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFzaG91bGRJZ25vcmVF
bGVtZW50KGVsZW1lbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVu
dChvdXQsIGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCisgICAgaWYgKG1fYWRkQ2hhcnNldCAmJiBl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICAgICAgU3RyaW5n
IG1ldGEgPSBtYWtlU3RyaW5nKCI8bWV0YSBjaGFyc2V0PVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNl
dCgpLCAiXCI+Iik7CisgICAgICAgIG91dC5hcHBlbmQobWV0YS5jaGFyYWN0ZXJzKCksIG1ldGEu
bGVuZ3RoKCkpOworICAgIH0KKyAKKyAgICAvLyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykg
dGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0
aGVpciBjdXJyZW50IGNvbnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQq
IGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5p
c0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93
bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVu
dCo+KGVsZW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFt
ZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0g
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwu
cHJvdG9jb2xJcygiYWJvdXQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0
byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVm
ZXJlbmNlZCBieSB0aGUgc2VyaWFsaXplZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXIt
PnVybEZvckJsYW5rRnJhbWUoZnJhbWUpOworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUqIHVybEF0
dHJpYnV0ZSA9IGZyYW1lT3duZXItPmdldFNvdXJjZVVSTEF0dHJpYnV0ZU5hbWVJZlByZXNlbnQo
KTsKKyAgICBpZiAoIXVybEF0dHJpYnV0ZSkKKyAgICAgICAgcmV0dXJuOworICAgIFJlZlB0cjxB
dHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKEhUTUxOYW1lczo6c3JjQXR0
ciwgdXJsLnN0cmluZygpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0
cmlidXRlLCBuYW1lc3BhY2VzKTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnRO
b2RlKCkgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6
ZXI6OlJlc291cmNlOjpSZXNvdXJjZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJj
ZTo6UmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlw
ZShtaW1lVHlwZSkKKyAgICAsIGRhdGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBh
Z2VTZXJpYWxpemVyKFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMp
CisgICAgOiBtX3Jlc291cmNlcyhyZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVy
KDApCit7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQor
eworICAgIHNlcmlhbGl6ZUZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQt
PnVybCgpOworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQi
KSkgeworICAgICAgICAvLyBGb3IgYmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwg
c28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAg
ICAgICB1cmwgPSB1cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9y
ZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgeworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQg
aGF2ZSAyIGZyYW1lIHdpdGggdGhlIHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5
IGNoYW5nZWQgYW5kIGhhdmUgbm93CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3
ZSBzaG91bGQgc2VyaWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMg
aW4gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRl
eHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkp
KTsKKyAgICBpZiAoIXRleHRFbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgTE9HX0VSUk9S
KCJVbnN1cHBvcnRlZCBjaGFyc2V0ICclcycsIGRlZmF1bHRpbmcgdG8gVVRGLTguIiwgZG9jdW1l
bnQtPmNoYXJzZXQoKSk7CisgICAgICAgIHRleHRFbmNvZGluZyA9IFVURjhFbmNvZGluZygpOwor
ICAgIH0KKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6ZU5vZGVzKGRvY3Vt
ZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUpOworICAgIENTdHJpbmcgZnJh
bWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJhY3RlcnMoKSwgdGV4dC5sZW5n
dGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQo
UmVzb3VyY2UodXJsLCBkb2N1bWVudC0+bWltZVR5cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUo
ZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxlbmd0aCgpKSkpOworICAgIG1fcmVzb3VyY2VV
UkxzLmFkZCh1cmwpOworCisgICAgZm9yIChWZWN0b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0g
bm9kZXMuYmVnaW4oKTsgaXRlciAhPSBub2Rlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgIC8vIFdlIGhhdmUgdG8gcHJvY2VzcyBpbi1saW5l
IHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMgKHR5cGljYWxseSBiYWNr
Z3JvdW5kIGltYWdlcykuCisgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRp
b24oZWxlbWVudC0+c3R5bGUoKSk7CisgICAgICAgIAorICAgICAgICBpZiAoZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1l
bnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50
KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxl
bWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAgQ2Fj
aGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAg
ICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAgICAgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAg
ICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
TGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0g
bGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlz
Q1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+
Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRy
KSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jl
c291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAg
ICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5
bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0
eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXND
U1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmZpcnN0
Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9CisKK3Zv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4
dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkpOworICAg
ICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICghaXRl
bVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVtVGV4dCk7
CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAgICAgICAg
ICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAgIC8vIFNv
bWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3ZSBuZWVk
IHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAg
ICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRS
dWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hlZXQtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAgICAgICBp
ZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0UnVsZS0+
c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9u
dEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3IgZm9u
dCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlmIHRoZSBh
Y3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVkIGZyb20g
dGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNT
dHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShzdGF0
aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVybC5pc1Zh
bGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAgLy8gRklY
TUU6IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQg
YW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0
RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAg
aWYgKCF0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBMT0dfRVJST1IoIlVu
c3VwcG9ydGVkIGNoYXJzZXQgJyVzJywgZGVmYXVsdGluZyB0byBVVEYtOC4iLCBzdHlsZVNoZWV0
LT5jaGFyc2V0KCkpOworICAgICAgICAgICAgdGV4dEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCk7
CisgICAgICAgIH0KKyAgICAgICAgU3RyaW5nIHRleHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5n
KCk7CisgICAgICAgIENTdHJpbmcgdGV4dCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmlu
Zy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFi
bGVzKTsKKyAgICAgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIFN0cmluZygi
dGV4dC9jc3MiKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3Ro
KCkpKSk7CisgICAgICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworICAgIH0KK30KKwordm9p
ZCBQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2Us
IGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgbV9yZXNvdXJj
ZVVSTHMuY29udGFpbnModXJsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZSB8
fCBpbWFnZS0+aW1hZ2UoKSA9PSBJbWFnZTo6bnVsbEltYWdlKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFN0cmluZyBtaW1lVHlwZSA9IGltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7Cisg
ICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIG1pbWVUeXBlLCBpbWFnZS0+aW1h
Z2UoKS0+ZGF0YSgpKSk7CisgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7Cit9CisKK3ZvaWQg
UGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUpCit7CisgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihydWxlLT5z
dHlsZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JD
U1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uKQorewor
ICAgIGlmICghc3R5bGVEZWNsYXJhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFz
dHlsZURlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCktPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKSk7CisKKyAg
ICAvLyBUaGUgYmFja2dyb3VuZC1pbWFnZSBhbmQgbGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9y
IG9sKSBhcmUgdGhlIENTUyBwcm9wZXJ0aWVzCisgICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBpbWFn
ZXMuIFdlIGl0ZXJhdGUgdG8gbWFrZSBzdXJlIHdlIGluY2x1ZGUgYW55IG90aGVyCisgICAgLy8g
aW1hZ2UgcHJvcGVydGllcyB0aGVyZSBtaWdodCBiZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAvLyBGSVhN
RTogaXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0
aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdl
IHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRoZQorICAgICAgICAvLyBwcm9wZXJ0eSBJRCwg
YnV0IENTU1N0eWxlRGVjbGFyYXRpb24gb25seSBnaXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkKKyAg
ICAgICAgLy8gbmFtZXMsIG5vdCBJRHMuCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFs
dWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRp
b24tPml0ZW0oaSkpOworICAgICAgICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4oY3NzVmFsdWUuZ2V0KCkpOworICAgICAgICBT
dHlsZUltYWdlKiBzdHlsZUltYWdlID0gaW1hZ2VWYWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2Uo
KTsKKyAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFnZXMgYXJlIGp1c3QgcGxhY2UtaG9sZGVycyBh
bmQgZG8gbm90IGNvbnRhaW4gZGF0YS4KKyAgICAgICAgaWYgKCFzdHlsZUltYWdlIHx8ICFzdHls
ZUltYWdlLT5pc0NhY2hlZEltYWdlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5
bGVJbWFnZSktPmNhY2hlZEltYWdlKCk7CisKKyAgICAgICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNo
ZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbWFnZS0+dXJsKCkpOworICAgICAgICBhZGRJ
bWFnZVRvUmVzb3VyY2VzKGltYWdlLCB1cmwpOworICAgIH0gICAgCit9CisKK0tVUkwgUGFnZVNl
cmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIEhhc2hNYXA8
RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFt
ZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKKyAgICAgICAgcmV0
dXJuIGl0ZXItPnNlY29uZDsKKyAgICBTdHJpbmcgdXJsID0gbWFrZVN0cmluZygid3ljaXd5Zzov
L2ZyYW1lLyIsIFN0cmluZzo6bnVtYmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKykpOworICAgIEtV
UkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCk7CisgICAgbV9ibGFua0ZyYW1lVVJMcy5h
ZGQoZnJhbWUsIGZha2VVUkwpOworCisgICAgcmV0dXJuIGZha2VVUkw7ICAgIAorfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6Cisg
KgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9o
CisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktV
UkxIYXNoLmgiCisjaW5jbHVkZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDYWNoZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHls
ZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOwor
CisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBiYWNr
IHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBwYWdl
IGZyYW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NTIHN0
eWxlc2hlZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBS
ZXNvdXJjZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7Cisg
ICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7Cisg
ICAgICAgIFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNz
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBhZ2VT
ZXJpYWxpemVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUgc2Vy
aWFsaXphdGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50IGFu
ZCByZXRyaWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3IgcGFz
c2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAgICAv
LyB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9pZCBz
ZXJpYWxpemUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisK
K3ByaXZhdGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8gU2Vy
aWFsaXplcyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJl
c291cmNlcyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVz
b3VyY2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRl
ZCBzdHlsZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJpYWxp
emVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2b2lk
IGFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9p
ZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24q
KTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsK
KworICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0PEtV
Ukw+IG1fcmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5rRnJh
bWVVUkxzOworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0Nzg5KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwzNCBAQAorMjAxMS0wNC0yNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW50cm9k
dWNpbmcgYSBuZXcgQVBJIHRvIHNlcmlhbGl6ZSBhIFdlYlZpZXcgYmFjayB0byBIVE1MLgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg5NDcKKworICAg
ICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6
CisgICAgICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgICogdGVzdHMvV2ViUGFnZU5l
d1NlcmlhbGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplcjogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFu
a19mcmFtZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9ibHVlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICog
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICog
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5j
c3M6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHls
ZXMuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29sLWRv
dC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3Jhbmdl
X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9yZWRfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3VsLWRvdC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKwog
MjAxMS0wNC0yMiAgTWlraGFpbCBOYWdhbm92ICA8bW5hZ2Fub3ZAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtODQzLDYgKzg0Myw3IEBACiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVIZWxwZXJUZXN0
LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlTmV3
U2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1dlYlBhZ2VTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAkocmV2aXNpb24gODM2
NDUpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlh
bGl6ZXJfaAogI2RlZmluZSBXZWJQYWdlU2VyaWFsaXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5h
bWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xh
c3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBjbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJV
Ukw7CiBjbGFzcyBXZWJWaWV3OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3Rv
cjsKIApAQCAtNDYsNiArNDYsMjMgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZl
Y3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2Nh
bCBjb3B5LgogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBS
ZXNvdXJjZSB7CisgICAgICAgIFdlYlVSTCB1cmw7CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5
cGU7CisgICAgICAgIFdlYkNTdHJpbmcgZGF0YTsKKyAgICB9OworCisgICAgLy8gU2VyaWFsaXpl
cyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSBXZWJWaWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2Uncwor
ICAgIC8vIHJlc291cmNlcyAoc3VjaCBhcyBpbWFnZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0
byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2
ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBjb250ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBh
bHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0YWcgb3IgbGluayB0byBKYXZhU2NyaXB0LgorICAg
IFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2VyaWFsaXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVz
b3VyY2U+Kik7CisKKyAgICAvLyBJTVBPUlRBTlQ6CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBh
biBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAv
LyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KKworCiAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZp
bmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAv
LyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRt
bCBkYXRhLiBXZSB3aWxsCiAgICAgLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxp
ZXJDbGllbnQgb25jZSB0aGUgZGF0YSBidWZmZXIgaXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAg
cHVibGljOgogICAgIC8vIHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxp
bmtzIG9uZSBieSBvbmUuCiAgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUg
aXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hpY2gKICAgICAvLyBjb250YWluIGFsbCBz
YXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNl
cy4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUs
CisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBzZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGll
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6
ZXJDbGllbnQqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5
TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1F
VEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3Ry
aW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJz
ZXQpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RXIGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9B
UEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0
IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVN
YXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0
aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBX
ZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNl
VGFyZ2V0KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2Vy
aWFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwCShyZXZpc2lvbiA4MzY0NSkKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNp
bmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUx
LDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNs
dWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0
Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKQEAgLTE3OSw2ICsxODEsMjUgQEAgdm9pZCBy
ZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBmcgogCiBuYW1lc3BhY2UgV2ViS2l0IHsK
IAordm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZl
Y3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXNQYXJhbSkKK3sKKyAg
ICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNl
cmlhbGl6ZXIgc2VyaWFsaXplcigmcmVzb3VyY2VzKTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6
ZShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkpOworCisgICAgVmVjdG9y
PFJlc291cmNlPiByZXN1bHQ7CisgICAgZm9yIChWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlc291cmNlcy5iZWdpbigpOyBpdGVyICE9IHJl
c291cmNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlc291cmNlIHJlc291cmNlOworICAg
ICAgICByZXNvdXJjZS51cmwgPSBpdGVyLT51cmw7CisgICAgICAgIHJlc291cmNlLm1pbWVUeXBl
ID0gaXRlci0+bWltZVR5cGUuYXNjaWkoKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5
aW5nIGFsbCB0aGUgcmVzb3VyY2UgZGF0YSBoZXJlLiBJZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdl
YlNoYXJlZERhdGEoKS4KKyAgICAgICAgcmVzb3VyY2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+
ZGF0YS0+ZGF0YSgpLCBpdGVyLT5kYXRhLT5zaXplKCkpOworICAgICAgICByZXN1bHQuYXBwZW5k
KHJlc291cmNlKTsKKyAgICB9CisKKyAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAg
ICAgCit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJh
bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQq
IGNsaWVudCwKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1Nl
cmlhbGl6ZXJUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
V2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBh
Z2VTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAi
V2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwu
aCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2Uu
aCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwu
aD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dl
YmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7
CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7Citw
dWJsaWM6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQoZmFsc2Up
IHsgfQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgLyogZW5h
YmxlZFBlclNldHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29s
IG1fc2NyaXB0RW5hYmxlZDsKK307CisKK2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0IDog
cHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJpYWxpemVU
ZXN0KCkKKyAgICAgICAgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0
L2h0bWwiKSkKKyAgICAgICAgLCBtX3hodG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgi
YXBwbGljYXRpb24veGh0bWwreG1sIikpCisgICAgICAgICwgbV9jc3NNaW1lVHlwZShXZWJTdHJp
bmc6OmZyb21VVEY4KCJ0ZXh0L2NzcyIpKQorICAgICAgICAsIG1fcG5nTWltZVR5cGUoV2ViU3Ry
aW5nOjpmcm9tVVRGOCgiaW1hZ2UvcG5nIikpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYW5kIGlu
aXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0
ZSgwKTsKKworICAgICAgICAvLyBXZSB3YW50IHRoZSBpbWFnZXMgdG8gbG9hZC4KKyAgICAgICAg
V2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbV93ZWJWaWV3LT5zZXR0aW5ncygpOworICAgICAgICBz
ZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldExv
YWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKworICAgICAgICBtX3dlYlZpZXctPmluaXRp
YWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwg
dm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3Rl
ckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworICAgIH0KKwor
ICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBX
ZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKQorICAgIHsKKyAg
ICAgICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxp
emUoKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICBy
ZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgICAgICBzdGQ6OnN0cmluZyBmaWxl
UGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOworICAgICAg
ICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkp
OworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25z
ZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQgbG9h
ZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVx
dWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAgICAg
ICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBtX3dlYlZpZXctPm1h
aW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBzdXJl
IGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICAgICAgLy8gU29tZSByZXF1
ZXN0cyBnZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1lci4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICAvLyBTZXJ2ZXIgdGhlIGRlbGF5ZWQg
cmVzb3VyY2VzLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2Nr
ZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxlSlMoKQorICAgIHsKKyAgICAg
ICAgbV93ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVuYWJsZWQgPSB0cnVlOworICAgIH0KKworICAg
IHZvaWQgcnVuT25Mb2FkKCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCkt
PmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgoIm9uTG9h
ZCgpIikpKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTdHJpbmcmIGh0bWxNaW1lVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiB4aHRt
bE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV94aHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3Qg
V2ViU3RyaW5nJiBjc3NNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzTWltZVR5cGU7IH0K
KyAgICBjb25zdCBXZWJTdHJpbmcmIHBuZ01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wbmdN
aW1lVHlwZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIHJlc291cmNlVmVjdG9yQ29udGFpbnMo
Y29uc3QgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4mIHJlc291cmNlcywg
Y2hhciogdXJsLCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTCB3ZWJVUkwg
PSBXZWJVUkwoR1VSTCh1cmwpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNv
dXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVy
OjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAgICAgICBpZiAocmVz
b3VyY2UudXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkgJiYgIXJlc291
cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlwZSkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2YXRlOgorICAgIFdlYlN0cmlu
ZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV94aHRtbE1pbWVUeXBlOworICAgIFdl
YlN0cmluZyBtX2Nzc01pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAg
IFRlc3RXZWJGcmFtZUNsaWVudCBtX3dlYkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVzdHMgdGhh
dCBhIHBhZ2Ugd2l0aCByZXNvdXJjZXMgYW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFs
bCBpdHMgcmVzb3VyY2VzLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBQYWdlV2l0
aEZyYW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJV
UkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJh
bWUuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRG
OCgiaWZyYW1lLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJpZnJhbWUyLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBu
ZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFj
a2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisg
ICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVy
OjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVz
b3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3Vs
ZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVy
bCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNv
dXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg2LCBy
ZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAg
RVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNU
X1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL2dyZWVuX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
Ymx1ZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFt
ZS5odG1sIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiwgInRl
eHQvaHRtbCIpKTsKK30KKworLy8gVGVzdCB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlLCBh
bGwgQ1NTIHJlc291cmNlcyBhcmUgcmVwb3J0ZWQsIGluY2x1ZGluZyB1cmwoKSdzCisvLyBhbmQg
aW1wb3J0cyBhbmQgbGlua3MuIE5vdGUgdGhhdCB3ZSBkb24ndCB0ZXN0IHRoZSByZXNvdXJjZXMg
Y29udGVudHMsIHdlIG9ubHkgbWFrZSBzdXJlCisvLyB0aGV5IGFyZSBhbGwgcmVwb3J0ZWQgd2l0
aCB0aGUgcmlnaHQgbWltZSB0eXBlIGFuZCB0aGF0IHRoZXkgY29udGFpbiBzb21lIGRhdGEuCitU
RVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIENTU1Jlc291cmNlcykKK3sKKyAgICAvLyBS
ZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFt
ZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoImNzc190ZXN0X3BhZ2UuaHRt
bCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
Imxpbmtfc3R5bGVzLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNz
cyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBj
c3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBv
cnRfc3R5bGVzLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoInllbGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJs
dWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiks
IFdlYlN0cmluZzo6ZnJvbVVURjgoInB1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNv
bS91bC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInVsLWRvdC5wbmciKSwgcG5nTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vb2wtZG90LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvbC1kb3QucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworCisgICAgZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0
b3BGcmFtZVVSTCk7CisgICAgcnVuT25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJj
ZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJl
IHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYg
cmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09
IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNl
Lm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDEyLCByZXNv
dXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL2xpbmtfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHls
ZV9mcm9tX2xpbmsuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dy
b3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9y
Q29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3Vu
ZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5w
bmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1h
Z2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS91bC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vb2wtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
d2hlbiBzZXJpYWxpemluZyBhIHBhZ2Ugd2l0aCBibGFuayBmcmFtZXMgdGhlc2UgYXJlIHJlcG9y
dGVkIHdpdGggdGhlaXIgcmVzb3VyY2VzLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0
LCBCbGFua0ZyYW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBs
b2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6
ZnJvbVVURjgoImJsYW5rX2ZyYW1lcy5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3Vu
ZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01p
bWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFu
Z2VfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkp
OworCisgICAgZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7
CisgICAgcnVuT25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dl
YlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgp
KTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRoZSBtYWluLWZy
YW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSBy
ZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1pbWVUeXBlLmNv
bXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzb3Vy
Y2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDcsIHJlc291cmNlcy5zaXplKCkp
OyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2Jh
Y2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tn
cm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5k
LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgLy8gVGhlIGJsYW5rIGZyYW1lcyBzaG91bGQgaGF2
ZSBnb3QgYSBtYWdpYyBVUkwuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJh
bWUvMSIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMiIsICJ0ZXh0L2h0bWwiKSk7Cit9CisK
K1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgU2VyaWFsaXplWE1MSGFzUmlnaHREZWNs
YXJhdGlvbikKK3sKKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL3NpbXBsZS54aHRtbCIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFt
ZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlLnhodG1sIiksIHhodG1sTWltZVR5cGUo
KSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0
b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9G
QUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBXZSBleHBlY3Qgb25seSBv
bmUgcmVzb3VyY2UsIHRoZSBYTUwuCisgICAgQVNTRVJUX0VRKDEsIHJlc291cmNlcy5zaXplKCkp
OworICAgIHN0ZDo6c3RyaW5nIHhtbCA9IHJlc291cmNlc1swXS5kYXRhOworCisgICAgLy8gV2Ug
c2hvdWxkIGhhdmUgb25lIGFuZCBvbmx5IG9uZSBpbnN0YW5jZSBvZiB0aGUgWE1MIGRlY2xhcmF0
aW9uLgorICAgIHNpemVfdCBwb3MgPSB4bWwuZmluZCgiPD94bWwgdmVyc2lvbj0iKTsKKyAgICBB
U1NFUlRfVFJVRShwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworCisgICAgcG9zID0geG1sLmZp
bmQoIjw/eG1sIHZlcnNpb249IiwgcG9zICsgMSk7CisgICAgQVNTRVJUX1RSVUUocG9zID09IHN0
ZDo6c3RyaW5nOjpucG9zKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19m
cmFtZXMuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzNyBAQAorPGh0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIG9ubG9hZCgpIHsKKyAg
ICB2YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICB2YXIg
ZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MSIpOworICAgIGRpdi5hcHBlbmRD
aGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwg
Kz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J2JsdWVfYmFja2dyb3Vu
ZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgibXlEaXYyIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1l
LmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5B
biBpbWFnZSA8aW1nIHNyYz0ncmVkX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0
ZXh0PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7
CisgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MyIpOworICAgIGRpdi5h
cHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5l
ckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J29yYW5nZV9i
YWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgfQorICAKKzwv
c2NyaXB0PgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKyAgVGhpcyBwYWdlIGNyZWF0ZXMg
ZW1wdHkgaWZyYW1lcyBhbmQgYWRkcyBjb250ZW50IHRvIHRoZW0gZHluYW1pY2FsbHkuPGJyPjxi
cj4KKyAgPGRpdiBpZD0ibXlEaXYxIj48L2Rpdj4KKyAgPGRpdiBpZD0ibXlEaXYyIj48L2Rpdj4K
KyAgPGRpdiBpZD0ibXlEaXYzIj48L2Rpdj4KKzwvYm9keT4KKworPC9odG1sPgpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3Bh
Z2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2Uu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMg
cGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhhdCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29y
cmVjdGx5IGJ5IHRoZQorICAgICBXZWJQYWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVTbmFwc2hvdCBt
ZXRob2QKKy0tPgorCis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0
L2NzcyIgaHJlZj0ibGlua19zdHlsZXMuY3NzIiAvPgorCis8c3R5bGU+CitAaW1wb3J0IHVybCgn
aW1wb3J0X3N0eWxlcy5jc3MnKTsKKworQGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBDaHVu
a2ZpdmU7CisgIHNyYzogdXJsKCdDaHVua2ZpdmUub3RmJyk7CisgIHNyYzogdXJsKCdDaHVua2Zp
dmUtd2ViZm9udC5lb3QpIGZvcm1hdCgnZW90Jyk7Cit9CisKKyNjaHVua2ZpdmVEaXYgeworICBm
b250LWZhbWlseTogQ2h1bmtmaXZlLCBzYW5zLXNlcmlmOworfQorPC9zdHlsZT4KKworPHN0eWxl
PgorI2RpdkJsdWUgeworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBu
ZycpOworfQorCit1bCB7CisgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgndWwtZG90LnBuZycpOwor
fQorCitvbCB7CisgIGxpc3Qtc3R5bGUtaW1hZ2U6IHVybCgnb2wtZG90LnBuZycpOworfQorCis8
L3N0eWxlPgorCis8c2NyaXB0PgorLy8gRHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHlsZS4K
K2Z1bmN0aW9uIG9uTG9hZCgpIHsKKyAgdmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHtiYWNr
Z3JvdW5kLWltYWdlOnVybCgncHVycGxlX2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9kZT0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0ZXh0
L2Nzcyc7CisgIHN0eWxlTm9kZS5tZWRpYT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVuZENo
aWxkKHN0eWxlTm9kZSk7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJv
bkxvYWQoKSI+CisKKzwhLS0gVGV4dCB1c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRpdiBp
ZD0nY2h1bmtmaXZlRGl2Jz5UaGlzIHRleHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9kaXY+
CisKKzwhLS0gU3R5bGUgaXMgaW4gbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQnPgor
VGhpcyBkaXYgaGFzIGEgcmVkIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwh
LS0gU3R5bGUgaXMgaW4gYSBmaWxlIGltcG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4KKzxk
aXYgaWQ9J2Rpdk9yYW5nZSc+CitUaGlzIGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRzIGJh
Y2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxlIC0t
PgorPGRpdiBpZD0nZGl2WWVsbG93Jz4KK1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBp
dHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHls
ZSBzZWN0aW9uIGluIHRoZSBoZWFkZXIgLS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMgZGl2
IGhhcyBhIGJsdWUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHls
ZSBpcyBpbmxpbmVkIC0tPgorPGRpdiBpZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWlt
YWdlOnVybCgnZ3JlZW5fYmFja2dyb3VuZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVlbiBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFtaWNh
bGx5IGdlbmVyYXRlZCB3aXRoIEphdmFTY3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0tPgor
PGRpdiBpZD0nZGl2UHVycGxlJz4KK1RoaXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMg
YmFja2dyb3VuZC4KKzwvZGl2PgorCitVbm9yZGVyZWQgbGlzdDo8YnI+Cis8dWw+CisgIDxsaT5C
bHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwv
bGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC91bD4KKzxicj4KKworT3Jk
ZXJlZCBsaXN0Ojxicj4KKzxvbD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAg
PGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxp
PlJlZDwvbGk+Cis8L29sPgorCis8L2JvZHk+CisKKzwvaHRtbD4KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L2lmcmFtZTIuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImdyZWVuX2JhY2tncm91bmQucG5n
Ii8+Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorCis8L2JvZHk+CisKKzwvaHRt
bD4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9pZnJhbWUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImJs
dWVfYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJyZWRfYmFja2dyb3VuZC5wbmciLz4KKwor
PC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3Nz
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMgQEAKKyNkaXZPcmFuZ2UgeworICBiYWNrZ3JvdW5k
LWltYWdlOnVybCgnb3JhbmdlX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9pbXBvcnRfc3R5bGVzLmNzcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBACisjZGl2
WWVsbG93IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3VuZC5wbmcn
KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9s
aW5rX3N0eWxlcy5jc3MJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDUgQEAKK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcycpOwor
CisjZGl2UmVkIHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZWRfYmFja2dyb3VuZC5wbmcn
KTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1w
bGUueGh0bWwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEw
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIGh0
bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgICJodHRwOi8vd3d3
LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KKzxodG1sIHhtbG5zPSJo
dHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFuZz0iZW4iPgorIDxoZWFkPgorIDx0
aXRsZT5YSFRNTCAxLjAgU3RyaWN0IEV4YW1wbGU8L3RpdGxlPgorIDwvaGVhZD4KKyA8Ym9keT4K
KyAgIDxwPkhlbGxvISA8L3A+CisgPC9ib2R5PgorPC9odG1sPgpJbmRleDogU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMiBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5k
LnBuZyIvPgorCis8aWZyYW1lIHNyYz0iaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorPG9iamVjdCBk
YXRhPSJpZnJhbWUyLmh0bWwiPjwvb2JqZWN0PgorPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48
L2lmcmFtZT4KKworPC9ib2R5PgorCis8L2h0bWw+CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWlt
ZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNr
Z3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6
IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dn
b0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFS
blFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRo
UFkyUlk5T0kvQXhVQkV4WE5BaHMxYWlEbElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BaU5B
Q3NiTW1QS2NBQUFBQVNVVk9SSzVDWUlJPQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10
eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dy
b3VuZC5wbmcKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmV4ZWN1dGFibGUKICAgKyAqCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKaVZCT1J3MEtHZ29B
QUFBTlNVaEVVZ0FBQUJRQUFBQVVDQVlBQUFDTmlSME5BQUFBQVhOU1IwSUFyczRjNlFBQUFBUm5R
VTFCQUFDeApqd3Y4WVFVQUFBQUpjRWhaY3dBQURzSUFBQTdDQVJVb1NvQUFBQUF0U1VSQlZEaFBZ
MVRhNlBPZmdZcUFpWXBtZ1kwYU5aRHlFQjBOCnc5RXdKQ01FUnBNTkdZR0dwbVVFaGlFQTVSc0NS
dTdDMDFBQUFBQUFTVVZPUks1Q1lJST0KCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNw
bGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNB
WUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNF
aFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkxVGE2UE9mZ1lxQWlZcG1nWTBhTlpE
eUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBNVJzQ1J1N0MwMUFBQUFBQVNVVk9SSzVDWUlJ
PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9vcmFuZ2VfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNB
WUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNF
aFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkveGZyLzZmZ1lxQWlZcG1nWTBhTlpE
eUVCME4KdzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBTlVVQ3pIaG9QaGdBQUFBQVNVVk9SSzVDWUlJ
PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9wdXJwbGVfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBt
YXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0
LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNB
WUFBQUNOaVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNF
aFpjd0FBRHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkxenN1ZVEvQXhVQkV4WE5BaHMxYWlE
bElUb2EKaHFOaFNFWUlqQ1liTWdJTlRjc0lERU1BcjZNQ3QxTHM5NTRBQUFBQVNVVk9SSzVDWUlJ
PQoKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9yZWRfYmFja2dyb3VuZC5wbmcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJr
ZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29jdGV0LXN0
cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5kLnBuZwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46ZXhlY3V0YWJsZQogICArICoKQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlv
bi9vY3RldC1zdHJlYW0KCgppVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQlFBQUFBVUNBWUFBQUNO
aVIwTkFBQUFBWE5TUjBJQXJzNGM2UUFBQUFSblFVMUJBQUN4Cmp3djhZUVVBQUFBSmNFaFpjd0FB
RHNJQUFBN0NBUlVvU29BQUFBQXRTVVJCVkRoUFkzd3JvL0tmZ1lxQWlZcG1nWTBhTlpEeUVCME4K
dzlFd0pDTUVScE1OR1lHR3BtVUVoaUVBUHBrQ1ZGZjdlQW9BQUFBQVNVVk9SSzVDWUlJPQoKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1k
b3QucG5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5
IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5
IGNoYW5nZXMgb246IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci91bC1kb3QucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpB
ZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZR
QUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNV
UkJWRGhQWTN3cm8vS2ZnWXFBaVlwbWdZMGFOWkR5RUIwTgp3OUV3SkNNRVJwTU5HWUdHcG1VRWhp
RUFQcGtDVkZmN2VBb0FBQUFBU1VWT1JLNUNZSUk9CgpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93
X2JhY2tncm91bmQucG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjpleGVjdXRhYmxlCiAgICsgKgpB
ZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCmlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFVQ0FZQUFBQ05pUjBOQUFBQUFYTlNSMElBcnM0YzZR
QUFBQVJuUVUxQkFBQ3gKand2OFlRVUFBQUFKY0VoWmN3QUFEc0lBQUE3Q0FSVW9Tb0FBQUFBdFNV
UkJWRGhQWS96L2llRS9BeFVCRXhYTkFoczFhaURsSVRvYQpocU5oU0VZSWpDWWJNZ0lOVGNzSURF
TUFGZUlER0dIcUJyWUFBQUFBU1VWT1JLNUNZSUk9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91081</attachid>
            <date>2011-04-26 01:09:36 -0700</date>
            <delta_ts>2011-04-26 11:03:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426010933.patch</filename>
            <type>text/plain</type>
            <size>67184</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ3NjEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDlkNmQwNmFkMzczNDFm
YjUwMmE2ZGU1NTQyOWUzYzAyNDI1NDQ3ZDMuLmYzZjMzOThhYTI3ZDZiODBmZWU3MjQwM2M4YzVj
OWYxN2Q5ZmJlYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ1LDYgKzQ0NSw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCA5OTVjZGFjYzQxZjgyOTNiNjczNGQ0YWI5ZTY5MzdlZTNjMmU0
ZjdjLi5lMDMwNTRmNTZjOTUwMGY1MmNmYzk5MDAxNjlmYjE2MjFhZDRhYTdiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyMyw2ICsxMDIzLDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNmQ3MTE0MjAyNzc4M2Q0
NjQ0N2RlMTlhMWVjZjZlNzcwNzNhYzI1Li4wYzIxYWRmOGUyNTVjOTJmN2RjZjMwNmNjYmRmNzc1
ZDk2ZDZlM2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZyYW1lT3duZXJFbGVtZW50Ojpzb3VyY2VVUkxBdHRyaWJ1dGVOYW1lKToKKyAgICAgICAg
KiBodG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hU
TUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUNoYXJz
ZXRQYXJzZXI6OnByb2Nlc3NNZXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNl
dFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMpOgorICAgICAgICAqIGh0bWwvcGFy
c2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVyLmg6IEFkZGVkLgor
CiAyMDExLTA0LTI0ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAg
TExWTSBDb21waWxlciBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCA5NDZjZGNhOWM4NDQ0OWFlMjZhZTAzMWY3ODRkZDgyNTBhYjZkZWM5Li42MjBlNzJjY2VkZjM1
OTFjOGE5OGJkMzRiNDVkNDI4OTg3NzIwMjI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KQEAgLTIyNDUsNiArMjI0NSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBM
b2FkRGVmZXJyZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZl
cnJlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCisJU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdl
L1BlcmZvcm1hbmNlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDBiZGIwOTBiMTQxYTRkNTBlOTE1NWY0MjIzZjg4ZjQ2NzBkMGZkMWUuLjEw
YjVlZDE0MTUwYmM2NWY3YzFkMjlhZWM4MDdhZDYyYTc2OGZkNDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTcxMSw2ICs3MTEsNyBAQAogICAgICAgICAgICAgJ3BhZ2UvTWVtb3J5SW5mby5oJywKICAg
ICAgICAgICAgICdwYWdlL1BhZ2UuaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuaCcs
CisgICAgICAgICAgICAncGFnZS9QYWdlU2VyaWFsaXplci5oJywKICAgICAgICAgICAgICdwYWdl
L1BsdWdpbkhhbHRlckNsaWVudC5oJywKICAgICAgICAgICAgICdwYWdlL1Bvc2l0aW9uQ2FsbGJh
Y2suaCcsCiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkVycm9yLmgnLApAQCAtMzQ2MCw2ICsz
NDYxLDcgQEAKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cC5jcHAnLAogICAgICAgICAgICAg
J3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QYWdl
R3JvdXBMb2FkRGVmZXJyZXIuaCcsCisgICAgICAgICAgICAncGFnZS9QYWdlU2VyaWFsaXplci5j
cHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2UuY3BwJywKICAgICAgICAgICAgICdw
YWdlL1BlcmZvcm1hbmNlLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0
aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDE5MWVlN2ZkMDcyMWI1Yzk4M2YzM2Q5NTBjMTJi
YzFjYmEzYTZmN2EuLjY4NTkwZTViOTIxNTBkMmNlMzdiNzMxZmZhMTUzYTdkYmI1N2ZkYjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCkBAIC05MzQsNiArOTM0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9Q
YWdlLmNwcCBcCiAgICAgcGFnZS9QYWdlR3JvdXAuY3BwIFwKICAgICBwYWdlL1BhZ2VHcm91cExv
YWREZWZlcnJlci5jcHAgXAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIFwKICAgICBwYWdl
L1BlcmZvcm1hbmNlLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwK
ICAgICBwYWdlL1BlcmZvcm1hbmNlVGltaW5nLmNwcCBcCkBAIC0xODgyLDYgKzE4ODMsNyBAQCBI
RUFERVJTICs9IFwKICAgICBwYWdlL1BhZ2VHcm91cC5oIFwKICAgICBwYWdlL1BhZ2VHcm91cExv
YWREZWZlcnJlci5oIFwKICAgICBwYWdlL1BhZ2UuaCBcCisgICAgcGFnZS9QYWdlU2VyaWFsaXpl
ci5oIFwKICAgICBwYWdlL1BsdWdpbkhhbHRlci5oIFwKICAgICBwYWdlL1BsdWdpbkhhbHRlckNs
aWVudC5oIFwKICAgICBwYWdlL1ByaW50Q29udGV4dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggMjcxOWU5Yzg4NDMyOTJkN2E0YjgxNDQ5
ODM4OGVmYTc3ZjIyZTk3NS4uYmYwNDI3MmU0YmU5MzBhNDI2ZDU5ZWVkY2YyOWJkMjk1OTVhZjFk
YyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAg
LTI1MTY5LDYgKzI1MTY5LDE0IEBACiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VHcm91
cExvYWREZWZlcnJlci5oIgogCQkJCT4KIAkJCTwvRmlsZT4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0i
Li5ccGFnZVxQYWdlU2VyaWFsaXplci5jcHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0
aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5oIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGFnZVxQZXJmb3JtYW5jZS5jcHAiCiAJCQkJPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDg4YzJkNDJj
YzE5ZWUwMGI1MTAxNGJmNzQyMjQ2NDcyMDgxNGE1MTcuLjc1Njc2Y2NkYmFhM2VkOTM0MTY0ZDg5
ZmQxZjdmMjU1Mzk3OTg2NmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg0OSw2ICs4NDksOCBAQAogCQkzM0MwQ0NENTExMkM1
RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0MwQ0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJl
VGV4dElucHV0LmggKi87IH07CiAJCTMzRDAyMTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVT
dG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyogQ29va2llU3RvcmFnZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3MUE2N0NCMTFDNkM3REIwMDA0
N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3MUE2N0NBMTFDNkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNG
LmNwcCAqLzsgfTsKKwkJMzcxRTY1Q0MxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFFNjVD
QjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLzsgfTsKKwkJMzcxRTY1Q0Ux
MzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQ
YWdlU2VyaWFsaXplci5jcHAgKi87IH07CiAJCTM3MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBG
b250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzcxRjRGM0UwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzcxRjRGNDEwRDI1QjlBRjAwRUNFMEQ1
IC8qIEZvbnREYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MUY0RjNGMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi87IH07CiAJ
CTM3MUY0RkZDMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGRkEwRDI1RTdGMzAw
RUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmggKi87IH07CkBAIC03MzY3LDYgKzczNjksOCBA
QAogCQkzM0MwQ0NEMjExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzQzBDQ0QzMTEyQzVFNjIwMENFMDU3RCAvKiBT
ZWN1cmVUZXh0SW5wdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJl
VGV4dElucHV0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUE2N0NBMTFDNkM3
REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEh5cGhlbmF0aW9uQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzNzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFnZVNlcmlhbGl6ZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxp
emVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VTZXJpYWxp
emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjRGM0UwRDI1QjlBRjAw
RUNFMEQ1IC8qIEZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZv
bnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RjNGMEQyNUI5QUYw
MEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGb250RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RkZB
MEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTQ0MjQsNiArMTQ0MjgsOCBAQAogCQkJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3
RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJCQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyog
UGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAqLywKIAkJCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0Yw
OTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmggKi8sCisJCQkJMzcxRTY1Q0QxMzY2MUVFRDAw
QkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLywKKwkJCQkzNzFFNjVDQjEzNjYxRURDMDBC
RUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLywKIAkJCQk4QTg0NEQwMTExRDNDMThFMDAxNDA2
NUMgLyogUGVyZm9ybWFuY2UuY3BwICovLAogCQkJCThBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAv
KiBQZXJmb3JtYW5jZS5oICovLAogCQkJCThBODQ0RDAzMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJm
b3JtYW5jZS5pZGwgKi8sCkBAIC0yMzA2Niw2ICsyMzA3Miw3IEBACiAJCQkJNDM1OEU4N0QxMzYw
QTJFRTAwRTQ3NDhDIC8qIEpTU1ZHRkVEcm9wU2hhZG93RWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNDM1OEU4ODExMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDM1OEU4ODYxMzYwQTMzQjAwRTQ3NDhDIC8qIFNWR0ZFRHJvcFNoYWRvd0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQ
YWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTc4Miw2ICsyNTc4OSw3IEBACiAJ
CQkJNDM1OEU4ODAxMzYwQTMxNzAwRTQ3NDhDIC8qIEZFRHJvcFNoYWRvdy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MzU4RTg4NTEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVEcm9wU2hhZG93RWxl
bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEUwQkM1NjEzNjE0OEE4MDAyQUQxMkUgLyog
SlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2
MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKaW5kZXggNGJmYjdlMjg5ODM0NzgzMjhhOGYzNzBmN2MxZDQ2Zjg2ZTEz
ZWMwNy4uNjFkZTYwOTFjOGRiMjBhYzZhZGU5NjM4YzU2OTVjNTJiMzIzY2EzOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCkBAIC0xMDgzLDYgKzEwODMsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0
Q29udGVudChjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5n
IERvY3VtZW50OjpzdWdnZXN0ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1l
bnQtPmlzWEhUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1s
K3htbCI7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuICJpbWFnZS9zdmcreG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgp
KQorICAgICAgICByZXR1cm4gInRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1M
RG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1f
ZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5l
ZWQgdG8gZGlzY3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8g
KiBtYWtpbmcgaXQgcmVjZWl2ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJl
Y3QoeCwgeSwgdywgaCk7CiAvLyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXpl
IG9mIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0
NTljOTI1YzkwMmI2YmIyMzJmMmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0
YTAyZGRlY2JlNDlmNTljYzVmMDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiAr
MzU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwog
CisgICAgU3RyaW5nIHN1Z2dlc3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29u
dGVudExhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2
b2lkIHNldENvbnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFu
Z3VhZ2UgPSBsYW5nOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5jcHAKaW5kZXggYjZkODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4u
OTkzOWQ2ZTgzNmJjODYzMTM1M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAg
dm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFy
PiYgcmVzdWx0LCBjb25zdCBTdHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlN
YXNrSW5IVE1MQXR0cmlidXRlVmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9
CiAKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9y
PFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1
bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVz
dWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAn
XCInOwpAQCAtMzI3LDYgKzMzMSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0
cmlidXRlKG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVz
cGFjZXMpOwogCisgICAgLy8gR2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFk
ZCB0aGVpciBvd24gYXR0cmlidXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwg
ZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXgg
MGJmYzZlNjAwNWJiZjQ0YjMwYWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYw
MmZkMTE0MDdiMjhmNDY5ZjU5YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuaApAQCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQg
YXBwZW5kU3RhcnRUYWcoTm9kZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRF
bmRUYWcoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAg
IHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBz
aXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFy
a3VwKTsgfQogICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsK
ICAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29u
c3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFt
ZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBl
bmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2Uq
LCBFbnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3Qg
RWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0
dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8
VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5
TWFza0ZvclRleHQoVGV4dCogdGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNr
Rm9yVGV4dChUZXh0KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBUZXh0Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hh
cj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50
VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZv
aWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwot
ICAgIHZvaWQgYXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1l
bnQsIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4m
IG91dCwgRWxlbWVudCogZWxlbWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3Bh
Y2VzKik7CisgICAgdm9pZCBhcHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVu
dCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4m
IG91dCwgRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4m
IG91dCwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lk
IGFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2Vj
dGlvbik7CiAgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQs
IGNvbnN0IE5vZGUqLCBOYW1lc3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29u
c3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25l
ckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQu
Y3BwCmluZGV4IGEyMTc4ODFmMzI1NDZjNWU0ZDRiYzQ1MDc2OWU4ODg2M2U0YjQyOTkuLjc3MmIy
ZmE3NTc0ZTE1OGQ4ZGIyYWNmMTRjNThiMjc5M2I2ODhiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNs
dWRlICJET01XaW5kb3cuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGFydC5oIgog
CiAjaWYgRU5BQkxFKFNWRykKQEAgLTEwNiw0ICsxMDcsOSBAQCBTVkdEb2N1bWVudCogSFRNTEZy
YW1lT3duZXJFbGVtZW50OjpnZXRTVkdEb2N1bWVudChFeGNlcHRpb25Db2RlJiBlYykgY29uc3QK
IH0KICNlbmRpZgogCitjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBIVE1MRnJhbWVPd25l
ckVsZW1lbnQ6OnNvdXJjZVVSTEF0dHJpYnV0ZU5hbWUoKQoreworICAgIHJldHVybiBoYXNUYWdO
YW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSA/IEhUTUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFt
ZXM6OnNyY0F0dHI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGcmFtZU93bmVyRWxlbWVudC5oCmluZGV4IGRlOWQxNTMyMGNmNzViYTc1N2My
ODkxYjBmYTMxYTZhMWI5NDM0MzEuLjBiMjI3Nzc0ZTE2MGMzNjZmYWZjZTgwZjM3YzViZWZhMWJk
ZTIxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lT3duZXJFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVPd25lckVsZW1lbnQuaApA
QCAtNTUsNiArNTUsOCBAQCBwdWJsaWM6CiAKICAgICBTYW5kYm94RmxhZ3Mgc2FuZGJveEZsYWdz
KCkgY29uc3QgeyByZXR1cm4gbV9zYW5kYm94RmxhZ3M7IH0KIAorICAgIGNvbnN0IFdlYkNvcmU6
OlF1YWxpZmllZE5hbWUmIHNvdXJjZVVSTEF0dHJpYnV0ZU5hbWUoKTsKKwogcHJvdGVjdGVkOgog
ICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmNwcAppbmRleCBlYWM3ZDI4MWE0NDlmZmFiM2U5MzExY2IwYzRiYWIz
NGRjM2U3M2Q1Li4xNmI2OWQ5YWUxMWU2Nzk1ODVmN2RjYzc1YjJlYzJkM2VjNmU4MmM4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5jcHAKQEAgLTEwMiwxNSArMTAyLDI4IEBAIFN0cmluZyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OmV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjpwcm9jZXNzTWV0YSgpCiB7CisgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1
dGVMaXN0JiB0b2tlbkF0dHJpYnV0ZXMgPSBtX3Rva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBBdHRy
aWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSB0b2tlbkF0dHJpYnV0ZXMuYmVnaW4oKTsKKyAgICAgICAg
IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQXRvbWlj
U3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNp
emUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEo
KSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtl
X3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2Vu
Y29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0
dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQorCitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0
JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBt
b2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNldDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1fdG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZv
ciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmli
dXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEo
KSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShp
dGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0
cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRl
ciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h
bWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlwZSIpKQpAQCAtMTI3LDEzICsxNDAsMTAgQEAg
Ym9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFBy
YWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwotICAgICAgICBpZiAobV9lbmNvZGluZy5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUg
PT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0
dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNl
dCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0K
IAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAv
LyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBiZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQg
ZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVh
Nzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3
OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0
YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0
YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0
eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAg
Ly8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMg
VGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxp
c3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxNZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAg
Ym9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmluZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJp
bmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwog
CiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmM0MDQ5NWY4Zjc1ZDhhOTM3ZWVmMWZiYjdlZjU3N2Mw
OGM2MDYxZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11
bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlm
ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJp
YnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+
YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRl
c01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1
dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtl
X3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkpKTsKKyAgICB9Cisg
ICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6ZW5j
b2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIHRleHRFbmNv
ZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVsZW1lbnQoRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om5vc2NyaXB0
VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKK30KKworY2xhc3MgU2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxh
dG9yIHsKK3B1YmxpYzoKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlh
bGl6ZXIqLCBEb2N1bWVudCosIFZlY3RvcjxOb2RlKj4qKTsKKyAgICB2aXJ0dWFsIH5TZXJpYWxp
emVyTWFya3VwQWNjdW11bGF0b3IoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9pZCBh
cHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRh
ZyhOb2RlKik7CisKK3ByaXZhdGU6CisgICAgUGFnZVNlcmlhbGl6ZXIqIG1fc2VyaWFsaXplcjsK
KyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKK307CisKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiBzZXJpYWxp
emVyLCBEb2N1bWVudCogZG9jdW1lbnQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQorICAgIDogTWFy
a3VwQWNjdW11bGF0b3Iobm9kZXMsIEFic29sdXRlVVJMcykKKyAgICAsIG1fc2VyaWFsaXplcihz
ZXJpYWxpemVyKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKK3sKKyAgICAvLyBNYXJrdXBB
Y2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIDw/eG1sIC4uLiBsaW5lLCBzbyB3ZSBh
ZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSByaWdodCBlbmNvZGluZyBpcyBzcGVjaWZp
ZWQuCisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpIHx8IG1fZG9jdW1lbnQt
PnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisgICAgICAg
IGFwcGVuZFN0cmluZyhtYWtlU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiIiwgbV9kb2N1bWVudC0+
eG1sVmVyc2lvbigpLCAiXCIgZW5jb2Rpbmc9XCIiLCBtX2RvY3VtZW50LT5jaGFyc2V0KCksICJc
Ij8+IikpOworfQorCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5TZXJpYWxpemVyTWFy
a3VwQWNjdW11bGF0b3IoKQoreworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit7CisgICAgRWxl
bWVudCogcGFyZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQgJiYg
IXNob3VsZElnbm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50
LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmICghc2hvdWxkSWdub3JlRWxlbWVu
dChlbGVtZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQob3V0
LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKKworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICAgICAgU3RyaW5nIG1ldGEgPSBtYWtlU3RyaW5nKCI8
bWV0YSBjaGFyc2V0PVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI+Iik7CisgICAgICAg
IG91dC5hcHBlbmQobWV0YS5jaGFyYWN0ZXJzKCksIG1ldGEubGVuZ3RoKCkpOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBmb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcgd2Ug
Y291bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29udGVudHMu
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRy
aWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyog
bmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVy
ID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgRnJh
bWUqIGZyYW1lID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCk7CisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIXVybC5wcm90b2NvbElzKCJhYm91dCIpKQor
ICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGdpdmUgYSBmYWtlIGxvY2F0aW9u
IHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBzZXJpYWxp
emVkIGZyYW1lLgorICAgIHVybCA9IG1fc2VyaWFsaXplci0+dXJsRm9yQmxhbmtGcmFtZShmcmFt
ZSk7CisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gQXR0cmlidXRlOjpjcmVhdGUo
ZnJhbWVPd25lci0+c291cmNlVVJMQXR0cmlidXRlTmFtZSgpLCB1cmwuc3RyaW5nKCkpOworICAg
IGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGUsIG5hbWVzcGFjZXMpOwor
fQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFnKE5vZGUq
IG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc2hvdWxkSWdub3Jl
RWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBw
ZW5kRW5kVGFnKG5vZGUpOworfQorCitQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U6OlJlc291cmNl
KCkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBk
YXRhKQorICAgIDogdXJsKHVybCkKKyAgICAsIG1pbWVUeXBlKG1pbWVUeXBlKQorICAgICwgZGF0
YShkYXRhKQoreworfQorCitQYWdlU2VyaWFsaXplcjo6UGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlcykKKyAgICA6IG1fcmVzb3VyY2VzKHJl
c291cmNlcykKKyAgICAsIG1fYmxhbmtGcmFtZUNvdW50ZXIoMCkKK3sKK30KKwordm9pZCBQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplKFBhZ2UqIHBhZ2UpCit7CisgICAgc2VyaWFsaXplRnJhbWUo
cGFnZS0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVG
cmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRv
Y3VtZW50KCk7CisgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+dXJsKCk7CisgICAgaWYgKCF1cmwu
aXNWYWxpZCgpIHx8IHVybC5wcm90b2NvbElzKCJhYm91dCIpKSB7CisgICAgICAgIC8vIEZvciBi
bGFuayBmcmFtZXMgd2UgZ2VuZXJhdGUgYSBmYWtlIFVSTCBzbyB0aGV5IGNhbiBiZSByZWZlcmVu
Y2VkIGJ5IHRoZWlyIGNvbnRhaW5pbmcgZnJhbWUuCisgICAgICAgIHVybCA9IHVybEZvckJsYW5r
RnJhbWUoZnJhbWUpOworICAgIH0KKworICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1
cmwpKSB7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBjb3VsZCBoYXZlIDIgZnJhbWUgd2l0aCB0aGUg
c2FtZSBVUkwgYnV0IHdoaWNoIHdlcmUgZHluYW1pY2FsbHkgY2hhbmdlZCBhbmQgaGF2ZSBub3cK
KyAgICAgICAgLy8gZGlmZmVyZW50IGNvbnRlbnQuIFNvIHdlIHNob3VsZCBzZXJpYWxpemUgYm90
aCBhbmQgc29tZWhvdyByZW5hbWUgdGhlIGZyYW1lIHNyYyBpbiB0aGUgY29udGFpbmluZworICAg
ICAgICAvLyBmcmFtZS4gQXJnIQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9y
PE5vZGUqPiBub2RlczsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNjdW11bGF0
b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGlu
ZyhUZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSkpOworICAgIEFTU0VSVCh0ZXh0RW5j
b2RpbmcuaXNWYWxpZCgpKTsKKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNlcmlhbGl6
ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUpOworICAg
IENTdHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJhY3RlcnMo
KSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIG1fcmVzb3Vy
Y2VzLT5hcHBlbmQoUmVzb3VyY2UodXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5cGUoKSwg
U2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxlbmd0aCgp
KSkpOworICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworCisgICAgZm9yIChWZWN0b3I8Tm9k
ZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZXMuYmVnaW4oKTsgaXRlciAhPSBub2Rlcy5lbmQoKTsg
KytpdGVyKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYgKCFub2Rl
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgIC8vIFdlIGhh
dmUgdG8gcHJvY2VzcyBpbi1saW5lIHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNv
dXJjZXMgKHR5cGljYWxseSBiYWNrZ3JvdW5kIGltYWdlcykuCisgICAgICAgIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oZWxlbWVudC0+c3R5bGUoKSk7CisgICAgICAgIAorICAg
ICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAg
ICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJ
bWFnZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQt
PmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0
cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50
LT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJ
bWFnZSwgdXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6bGlua1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAg
IFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBp
ZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAg
S1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5
bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAg
ICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
c3R5bGVUYWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBT
dHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlm
IChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2Vy
aWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBL
VVJMKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9
IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNo
aWxkRnJhbWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUo
Y2hpbGRGcmFtZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxl
U2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAg
IFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5
bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHls
ZVNoZWV0LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0
KCk7CisgICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NU
ZXh0LmFwcGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxl
bmd0aCgpIC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAg
ICAgICB9CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3
aXRoIHRoZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJ
bXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9y
dFVSTCA9IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhy
ZWYoKSk7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJM
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0
eWxlU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9
IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBhZGQgc3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBh
dCB0aGlzIHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAg
Ly8gYmUgcmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAg
IH0gZWxzZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAg
fQorCisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVy
bCkpIHsKKyAgICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNl
dCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAg
ICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+
Y2hhcnNldCgpKTsKKyAgICAgICAgaWYgKCF0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICBMT0dfRVJST1IoIlVuc3VwcG9ydGVkIGNoYXJzZXQgJyVzJywgZGVmYXVsdGluZyB0
byBVVEYtOC4iLCBzdHlsZVNoZWV0LT5jaGFyc2V0KCkuYXNjaWkoKS5kYXRhKCkpOworICAgICAg
ICAgICAgdGV4dEVuY29kaW5nID0gVVRGOEVuY29kaW5nKCk7CisgICAgICAgIH0KKyAgICAgICAg
U3RyaW5nIHRleHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcg
dGV4dCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRT
dHJpbmcubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgbV9yZXNv
dXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIFN0cmluZygidGV4dC9jc3MiKSwgU2hhcmVkQnVm
ZmVyOjpjcmVhdGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpKSk7CisgICAgICAgIG1fcmVz
b3VyY2VVUkxzLmFkZCh1cmwpOworICAgIH0KK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6YWRk
SW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICBpZiAoIXVybC5pc1ZhbGlkKCkgfHwgbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZS0+aW1hZ2UoKSA9PSBJ
bWFnZTo6bnVsbEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBtaW1lVHlw
ZSA9IGltYWdlLT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7CisgICAgbV9yZXNvdXJjZXMtPmFwcGVu
ZChSZXNvdXJjZSh1cmwsIG1pbWVUeXBlLCBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpKSk7CisgICAg
bV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJp
ZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgcmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihydWxlLT5zdHlsZSgpKTsKK30KKwordm9pZCBQ
YWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghc3R5bGVEZWNsYXJh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uLT5zdHls
ZXNoZWV0KCktPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NT
dHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0
eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKSk7CisKKyAgICAvLyBUaGUgYmFja2dyb3VuZC1p
bWFnZSBhbmQgbGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9yIG9sKSBhcmUgdGhlIENTUyBwcm9w
ZXJ0aWVzCisgICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBpbWFnZXMuIFdlIGl0ZXJhdGUgdG8gbWFr
ZSBzdXJlIHdlIGluY2x1ZGUgYW55IG90aGVyCisgICAgLy8gaW1hZ2UgcHJvcGVydGllcyB0aGVy
ZSBtaWdodCBiZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlv
bi0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAvLyBGSVhNRTogaXQncyBraW5kIG9mIHJpZGlj
dWxvdXMgdG8gZ2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0
aGUgdmFsdWUgb3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUg
b3V0IG9mIHRoZQorICAgICAgICAvLyBwcm9wZXJ0eSBJRCwgYnV0IENTU1N0eWxlRGVjbGFyYXRp
b24gb25seSBnaXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZXMsIG5vdCBJ
RHMuCisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9u
LT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAg
ICBpZiAoIWNzc1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NJbWFn
ZVZhbHVlKj4oY3NzVmFsdWUuZ2V0KCkpOworICAgICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdl
ID0gaW1hZ2VWYWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICAgICAgLy8gTm9uIGNh
Y2hlZC1pbWFnZXMgYXJlIGp1c3QgcGxhY2UtaG9sZGVycyBhbmQgZG8gbm90IGNvbnRhaW4gZGF0
YS4KKyAgICAgICAgaWYgKCFzdHlsZUltYWdlIHx8ICFzdHlsZUltYWdlLT5pc0NhY2hlZEltYWdl
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdl
KCk7CisKKyAgICAgICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNoZWV0LT5kb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChpbWFnZS0+dXJsKCkpOworICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGltYWdl
LCB1cmwpOworICAgIH0gICAgCit9CisKK0tVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5r
RnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0
b3IgaXRlciA9IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CisgICAgaWYgKGl0ZXIgIT0g
bV9ibGFua0ZyYW1lVVJMcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAg
ICBTdHJpbmcgdXJsID0gbWFrZVN0cmluZygid3ljaXd5ZzovL2ZyYW1lLyIsIFN0cmluZzo6bnVt
YmVyKG1fYmxhbmtGcmFtZUNvdW50ZXIrKykpOworICAgIEtVUkwgZmFrZVVSTChQYXJzZWRVUkxT
dHJpbmcsIHVybCk7CisgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJhbWUsIGZha2VVUkwpOwor
CisgICAgcmV0dXJuIGZha2VVUkw7ICAgIAorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjU2MDM3MjY4ZWUyMGRiYmE1Y2EzYWEyMjBlMjg5MmM5M2Rm
OTI5NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQ
YWdlU2VyaWFsaXplcl9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiS1VSTC5o
IgorI2luY2x1ZGUgIktVUkxIYXNoLmgiCisjaW5jbHVkZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDYWNoZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247
CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7
CitjbGFzcyBQYWdlOworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFn
ZSBjb250ZW50cyBiYWNrIHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6
ZXMgYWxsIHRoZSBwYWdlIGZyYW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGlt
YWdlcyBhbmQgQ1NTIHN0eWxlc2hlZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGlj
OgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJp
bmcgbWltZVR5cGU7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAg
IFJlc291cmNlKCk7CisgICAgICAgIFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAg
IGV4cGxpY2l0IFBhZ2VTZXJpYWxpemVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIElu
aXRpYXRlcyB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFs
aXplZCBjb250ZW50IGFuZCByZXRyaWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRv
IHRoZSBWZWN0b3IgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNl
IGluIHRoYXQKKyAgICAvLyB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRl
bnQuCisgICAgdm9pZCBzZXJpYWxpemUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0Zy
YW1lKEZyYW1lKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSop
OworCisgICAgLy8gU2VyaWFsaXplcyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFk
ZHMgaXQgdG8gdGhlIHJlc291cmNlcyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFs
c28gYWRkcyBhbnkgcmVzb3VyY2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVk
aW5nIGFueSBpbXBvcnRlZCBzdHlsZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisg
ICAgdm9pZCBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJM
Jik7CisKKyAgICB2b2lkIGFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBL
VVJMJik7CisgICAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0
eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShD
U1NTdHlsZVJ1bGUqKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAg
IExpc3RIYXNoU2V0PEtVUkw+IG1fcmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBL
VVJMPiBtX2JsYW5rRnJhbWVVUkxzOworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7
Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3MmQ0YjA1
MDY2N2NmMzMyY2ZjZmRkYWY2OTMwN2M2ZjhlODY1NjZhLi40MTc2ZmE0YjFhZGIwMjllMWFjNDBi
ZTU4MDUxZjA3OTFlZTBhNTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDM0IEBACisyMDExLTA0LTI1ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1
Y2luZyBhIG5ldyBBUEkgdG8gc2VyaWFsaXplIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAg
ICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoK
KyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdlTmV3
U2VyaWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5r
X2ZyYW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L2JsdWVfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2dyZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICog
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNz
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxl
cy5jc3M6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90
LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2Vf
YmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvcHVycGxlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAy
MDExLTA0LTIyICBNaWtoYWlsIE5hZ2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cAppbmRleCAyYTIwMzQ5Y2QxNjg1Y2MzYmNjYjc3M2YzMDg5MTAwNTA2NzEwYTIwLi5lNGI0YmNi
YjIzYzlkMWRhNTA3OTVlYzNmMzFhMjZiNjVjMWRjOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCkBAIC04NDgsNiArODQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlh
bGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIH1dLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L1dlYlBhZ2VTZXJpYWxpemVyLmgKaW5kZXggYjRkNTcxNTM1YWFiOGZjMjJlZTIwNjZlMmNlMGUx
YmFhZjlkODZlZC4uYTEwOGE2MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5o
CkBAIC0zMSwxNCArMzEsMTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmlu
ZSBXZWJQYWdlU2VyaWFsaXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQg
ewotY2xhc3MgV2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlh
bGl6ZXJDbGllbnQ7CiBjbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJW
aWV3OwogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiAr
NDYsMjMgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNo
IGNvbnRhaW4gYWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3Mg
V2ViUGFnZVNlcmlhbGl6ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAg
ICAgIFdlYlVSTCB1cmw7CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdl
YkNTdHJpbmcgZGF0YTsKKyAgICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1l
cyBmcm9tIHRoZSBXZWJWaWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNl
cyAoc3VjaCBhcyBpbWFnZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZl
Y3Rvci4KKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRv
cCBmcmFtZSBjb250ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQg
YW55IHNjcmlwdCB0YWcgb3IgbGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3Rh
dGljIHZvaWQgc2VyaWFsaXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAg
ICAvLyBJTVBPUlRBTlQ6CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1l
bnRhdGlvbiBvZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92
ZWQgc29vbi4KKworCiAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFt
ZXMgYW5kIHNlcmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0
YSBidWZmZXIgdG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxs
CiAgICAgLy8gc2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0
aGUgZGF0YSBidWZmZXIgaXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8v
IHNhdmVkIGxpbmtzLCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUu
CiAgICAgLy8gVGhlIHBhcmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0
aCBvZiBkaXJlY3Rvcnkgd2hpY2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkg
ZmlsZXMgaW5jbHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRf
QVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQ
SSBzdGF0aWMgYm9vbCBzZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+
JiBsaW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJW
ZWN0b3I8V2ViU3RyaW5nPiYgbG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3
ICsxMDIsNyBAQCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQg
ZGVjbGFyYXRpb24uCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0
YUNoYXJzZXREZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdl
bmVyYXRlIHRoZSBNT1RXIGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0
cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsK
KyAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNs
YXJhdGlvbihjb25zdCBXZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNl
IHRhZyBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJh
dGVCYXNlVGFnRGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5k
ZXggYzhjNzUyOTdmNDJkNzhiODlmZTcwZGQ5Zjk0MDAxMzM3ZjlmY2U5OS4uMjMyZTIxMTYwMTU5
Yzg4NmQ4ZTRlZDE0MDA4NGM2YjVjZjczMWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJLVVJMLmgiCisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3Iu
aCIKIAogI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRl
ICJXZWJVUkwuaCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3Lmgi
CisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0Nv
bmNhdGVuYXRlLmg+CiAKQEAgLTE3OSw2ICsxODEsMjUgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNl
c0ZvckZyYW1lKEZyYW1lKiBmcmFtZSwKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2Vi
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFn
ZVNlcmlhbGl6ZXI6OlJlc291cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNl
cmlhbGl6ZXIoJnJlc291cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nh
c3Q8V2ViVmlld0ltcGwqPih2aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4g
cmVzdWx0OworICAgIGZvciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5k
KCk7ICsraXRlcikgeworICAgICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3Vy
Y2UudXJsID0gaXRlci0+dXJsOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1p
bWVUeXBlLmFzY2lpKCk7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhl
IHJlc291cmNlIGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRh
KCkuCisgICAgICAgIHJlc291cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEo
KSwgaXRlci0+ZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7
CisgICAgfQorCisgICAgKnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBi
b29sIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxp
emVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJp
YWxpemVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcyNDgzNjk1MzYwOTg4ZjA4MDM0YTRmMTY4NDRm
ZmJiOWVkYWU1OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDI4OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVD
bGllbnQuaCIKKyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlNj
cmlwdFNvdXJjZS5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgor
I2luY2x1ZGUgIldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5j
bHVkZSA8Z29vZ2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBw
dWJsaWMgV2ViRnJhbWVDbGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgp
IDogbV9zY3JpcHRFbmFibGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3Jp
cHQoV2ViRnJhbWUqLCBib29sIC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9z
Y3JpcHRFbmFibGVkOyB9CisgICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBX
ZWJQYWdlTmV3U2VyaWFsaXplVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoK
KyAgICBXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCgpCisgICAgICAgIDogbV9odG1sTWltZVR5cGUo
V2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9odG1sIikpCisgICAgICAgICwgbV94aHRtbE1pbWVU
eXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKQorICAgICAg
ICAsIG1fY3NzTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAgICAg
ICAgLCBtX3BuZ01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQorICAg
IHsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsK
KyAgICAgICAgLy8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBt
X3dlYlZpZXcgPSBXZWJWaWV3OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUg
aW1hZ2VzIHRvIGxvYWQuCisgICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmll
dy0+c2V0dGluZ3MoKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7
CisgICAgICAgIHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisK
KyAgICAgICAgbV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50
KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAg
d2Via2l0X3N1cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2Vi
Vmlldy0+Y2xvc2UoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChj
b25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3Ry
aW5nJiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOwor
ICAgICAgICByZXNwb25zZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVU
eXBlKG1pbWVUeXBlKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsK
KyAgICAgICAgc3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0
Um9vdERpcigpLnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0
aC5hcHBlbmQoZmlsZU5hbWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lz
dGVyTW9ja2VkVVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkK
KyAgICB7CisgICAgICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVx
dWVzdC5pbml0aWFsaXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwp
KTsKKyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVz
dCk7CisgICAgICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQu
CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3Rz
KCk7CisgICAgICAgIC8vIFNvbWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIu
CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAg
ICAgLy8gU2VydmVyIHRoZSBkZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBv
cnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lk
IGVuYWJsZUpTKCkKKyAgICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFi
bGVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAg
ICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShX
ZWJTdHJpbmc6OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2Vi
U3RyaW5nJiBodG1sTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQor
ICAgIGNvbnN0IFdlYlN0cmluZyYgeGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1feGh0
bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7
IHJldHVybiBtX2Nzc01pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9v
bCByZXNvdXJjZVZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXpl
cjo6UmVzb3VyY2U+JiByZXNvdXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAg
eworICAgICAgICBXZWJVUkwgd2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2Vz
W2ldOworICAgICAgICAgICAgaWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNl
LmRhdGEuaXNFbXB0eSgpICYmICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmco
bWltZVR5cGUpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsK
KworcHJpdmF0ZToKKyAgICBXZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5n
IG1feGh0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsKKyAgICBXZWJT
dHJpbmcgbV9wbmdNaW1lVHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNs
aWVudDsKK307CisKKy8vIFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2VzIGFuZCBzdWIt
ZnJhbWUgaXMgcmVwb3J0ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KK1RFU1RfRihXZWJQYWdl
TmV3U2VyaWFsaXplVGVzdCwgUGFnZVdpdGhGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhl
IG1vY2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5o
dG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9p
ZnJhbWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lMi5odG1sIiksIGh0bWxN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2Jh
Y2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9h
ZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0
cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVf
YmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBu
ZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJM
KTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNl
czsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNl
cyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8v
IFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3Qg
V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAg
ICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIp
KTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5n
KCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHko
KSk7CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3Vs
ZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAi
aW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVz
b3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFn
ZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5n
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKKy8vIFRlc3QgdGhhdCB3
aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENTUyByZXNvdXJjZXMgYXJlIHJlcG9ydGVkLCBp
bmNsdWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9ydHMgYW5kIGxpbmtzLiBOb3RlIHRoYXQgd2Ug
ZG9uJ3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRlbnRzLCB3ZSBvbmx5IG1ha2Ugc3VyZQorLy8g
dGhleSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhlIHJpZ2h0IG1pbWUgdHlwZSBhbmQgdGhhdCB0
aGV5IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBD
U1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9h
ZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
Iik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNz
cyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUo
KSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
aW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0
X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVk
X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBu
ZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0
cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNrZ3Jv
dW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwg
cG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
Z3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBl
KCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJwdXJwbGVfYmFj
a2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJ1bC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgib2wtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7
CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOwor
CisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOwor
ICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsK
KyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhl
IGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOwor
ICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRl
eHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsK
KworICAgIEVYUEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBi
ZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiLCAidGV4dC9j
c3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0ZXh0L2NzcyIpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBF
Q1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9i
bHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxl
X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBu
ZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciLCAiaW1hZ2UvcG5n
IikpOworfQorCisvLyBUZXN0cyB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlIHdpdGggYmxh
bmsgZnJhbWVzIHRoZXNlIGFyZSByZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291cmNlcy4KK1RFU1Rf
RihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgQmxhbmtGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0
ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwg
PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibGFua19mcmFtZXMuaHRtbCIpLCBo
dG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJl
ZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBl
KCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVS
TEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVj
dG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRf
RkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291
cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXpl
cjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJl
c291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9F
USgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVD
VF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0
ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAg
RVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIC8vIFRo
ZSBibGFuayBmcmFtZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJMLgorICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzAi
LCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzEiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1l
LzIiLCAidGV4dC9odG1sIikpOworfQorCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3Qs
IFNlcmlhbGl6ZVhNTEhhc1JpZ2h0RGVjbGFyYXRpb24pCit7CisgICAgV2ViVVJMIHRvcEZyYW1l
VVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGUueGh0bWwiKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBs
ZS54aHRtbCIpLCB4aHRtbE1pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9w
RnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4g
cmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAm
cmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAg
CisgICAgLy8gV2UgZXhwZWN0IG9ubHkgb25lIHJlc291cmNlLCB0aGUgWE1MLgorICAgIEFTU0VS
VF9FUSgxLCByZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnN0cmluZyB4bWwgPSByZXNvdXJj
ZXNbMF0uZGF0YTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSBhbmQgb25seSBvbmUgaW5z
dGFuY2Ugb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KKyAgICBzaXplX3QgcG9zID0geG1sLmZpbmQo
Ijw/eG1sIHZlcnNpb249Iik7CisgICAgQVNTRVJUX1RSVUUocG9zICE9IHN0ZDo6c3RyaW5nOjpu
cG9zKTsKKworICAgIHBvcyA9IHhtbC5maW5kKCI8P3htbCB2ZXJzaW9uPSIsIHBvcyArIDEpOwor
ICAgIEFTU0VSVF9UUlVFKHBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7Cit9CisKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9i
bGFua19mcmFtZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGZiMjA0OTljNDMyNjNj
YjVjMjQ2ZmU3ZTE5MjU0NDJjZDcxNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCkBA
IC0wLDAgKzEsMzcgQEAKKzxodG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBvbmxvYWQoKSB7
CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAg
dmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjEiKTsKKyAgICBkaXYuYXBw
ZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJI
VE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdibHVlX2JhY2tn
cm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICAgIGZyYW1lID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoIm15RGl2MiIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBm
cmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8
YnI+QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1v
cmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFt
ZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjMiKTsKKyAgICBk
aXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHku
aW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdvcmFu
Z2VfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgIH0KKyAg
Cis8L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CisgIFRoaXMgcGFnZSBjcmVh
dGVzIGVtcHR5IGlmcmFtZXMgYW5kIGFkZHMgY29udGVudCB0byB0aGVtIGR5bmFtaWNhbGx5Ljxi
cj48YnI+CisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MiI+PC9k
aXY+CisgIDxkaXYgaWQ9Im15RGl2MyI+PC9kaXY+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9j
c3NfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NjM3ZjBmMDIyZDc1
OWMwYWRjOWQyMDFiY2Y0MzE2MTQ2YmQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1s
CkBAIC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0
ZXN0IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAg
ICAgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlU25hcHNob3QgbWV0aG9kCistLT4KKworPGhl
YWQ+CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtf
c3R5bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3Nz
Jyk7CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlOworICBzcmM6IHVy
bCgnQ2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLXdlYmZvbnQuZW90KSBm
b3JtYXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2IHsKKyAgZm9udC1mYW1pbHk6IENodW5r
Zml2ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisKKzxzdHlsZT4KKyNkaXZCbHVlIHsKKyAg
YmFja2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5wbmcnKTsKK30KKwordWwgewor
ICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsKK30KKworb2wgeworICBsaXN0
LXN0eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsKK30KKworPC9zdHlsZT4KKworPHNjcmlw
dD4KKy8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUuCitmdW5jdGlvbiBvbkxvYWQo
KSB7CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwo
J3B1cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHlsZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBlPSAndGV4dC9jc3MnOworICBzdHlsZU5v
ZGUubWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOwor
fQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgorCis8IS0t
IFRleHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYgaWQ9J2NodW5rZml2ZURpdic+
VGhpcyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250LjwvZGl2PgorCis8IS0tIFN0eWxlIGlz
IGluIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2UmVkJz4KK1RoaXMgZGl2IGhhcyBhIHJl
ZCBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGEg
ZmlsZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZPcmFuZ2Un
PgorVGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+
CisKKzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2Rpdlll
bGxvdyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8
L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5bGUgc2VjdGlvbiBpbiB0aGUg
aGVhZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRpdiBoYXMgYSBibHVlIGltYWdl
IGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW5saW5lZCAtLT4K
KzxkaXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2dyZWVuX2Jh
Y2tncm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMgaXRzIGJhY2tn
cm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0
aCBKYXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4KKzxkaXYgaWQ9J2RpdlB1cnBs
ZSc+CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rp
dj4KKworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5S
ZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48
L2xpPgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+CisKK09yZGVyZWQgbGlzdDo8YnI+Cis8
b2w+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgor
ICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC9vbD4K
KworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjVlZGJkYzE4OTFjZjFiNmY5NjdiN2QzNzYxZTIwNzMwZDgzOWU2YgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJh
bWUuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJibHVl
X2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91bmQucG5nIi8+CisKKzwv
Ym9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQw
NDRiMmVjY2JiN2Y5ZTNmMGI1ZGZjYTg2ODhmMmVkZmNmOTc4ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUy
Lmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3JlZW5f
YmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisKKzwv
Ym9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9m
cm9tX2xpbmsuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjgzZTU4MWY0NmViNWVlZmIzNzY0NzE0MzBlOGNm
YjJlYTZiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MKQEAgLTAsMCAr
MSwzIEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNr
Z3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRf
c3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9pbXBvcnRfc3R5bGVzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGM3ZjRkNWY0YTk5YzdhZTZlNmMy
NTRhODk2M2U0MmE5YTg0YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCkBAIC0wLDAg
KzEsMyBAQAorI2RpdlllbGxvdyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2Jh
Y2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtf
c3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9saW5rX3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZmI5OWE5YjBkYTA5YmVlMmMyNGVj
ODM1NWExN2U0MzA3YTYyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKQEAgLTAsMCArMSw1
IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJl
ZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91bmQucG5nJyk7Cit9Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNWYxMmRmNjM1Njg2YzZmMWMxYzVlZGI0YmRkNTczNTIzZjgwMGFmZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9zaW1wbGUueGh0bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNv
ZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwg
MS4wIFN0cmljdC8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEt
c3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIg
eG1sOmxhbmc9ImVuIj4KKyA8aGVhZD4KKyA8dGl0bGU+WEhUTUwgMS4wIFN0cmljdCBFeGFtcGxl
PC90aXRsZT4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8cD5IZWxsbyEgPC9wPgorIDwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzE4NTIz
YWZhNGExYjA5ODY1YzQ0OTI4ZDM0YTdjMTFkMmY0MDJlCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5o
dG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJyZWRfYmFj
a2dyb3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxv
YmplY3QgZGF0YT0iaWZyYW1lMi5odG1sIj48L29iamVjdD4KKzxpZnJhbWUgc3JjPSJpZnJhbWUu
aHRtbCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91128</attachid>
            <date>2011-04-26 11:03:40 -0700</date>
            <delta_ts>2011-04-26 11:36:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426110339.patch</filename>
            <type>text/plain</type>
            <size>66042</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzRjYzk4ZTM4OWJlNWUx
ODM5NTY0YzhkMjhlNWFkNjdjNTMwZjUzLi5kYWY4NTgwOTc1ZGEyNDgzZWYwZDU1YjJkZDEyNTdh
Mjg4YjM2OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0OWZiYTFmYTk1
MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5ODVjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYWM5ODY3ZmIyZmU2ZDBhYWQz
MzU4ZTAxODU1MjNmODYwZTM1MjE5Li4wOWM4NDQyNGMyZWE5NmIxNTgxZjQ1MTZmMzUyZTM4ZGY4
ZmU4MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAgICAgICAgICAg
ICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAg
ICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRp
b25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdl
R3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAg
ICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1h
bmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAg
ICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNmQ4
ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4MDUzZmEwYWJj
MDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYgKzkzNSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwLmNw
cCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAgIHBhZ2UvUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAg
XApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9QYWdlR3JvdXAu
aCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFnZS9QYWdlLmgg
XAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXIuaCBc
CiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9QcmludENvbnRleHQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQxMDBhOWQyZmYy
MzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuY3BwIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVyZm9ybWFuY2Uu
Y3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzNmQ2NTE5ZThlNjQ0ZmExNmE0N2M5ZWNhMTdmZWMwMjZiNzk5YWUx
Li44MGFlNjA1ZGM3YzdmY2UwMmEwYzFlMTM1N2M0NDNhYWM1MTJmZmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDcsNiAr
ODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMENDRDMx
MTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdDQTExQzZDN0RC
MDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUNDMTM2NjFFREMw
MEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxp
emVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFF
NjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9OwogCQkzNzFG
NEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUg
LyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICov
OyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAwQ0UwNTdEIC8q
IFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0Mw
Q0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8q
IFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VT
ZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNEMTM2NjFF
RUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkRm9udERh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0NDQwLDggQEAK
IAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2
NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJ
CQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICov
LAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8s
CisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJ
CQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAqLywKIAkJCQk4
QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJCQk4QTg0NEQw
MzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMwODEsNiArMjMw
ODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyog
SW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFFMTM2NUE0
RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNTc5OCw2ICsyNTgwNSw3IEBACiAJCQkJMTRFMEJDNTYxMzYxNDhBODAw
MkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYz
ODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRyYW5zZmVySXRl
bXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggMzVmZTA5NmFjZDY2OTAzZTg2MTYzMTYyM2Q4ZjhiNDg2NDg2ZGM3MC4uNjUxODJmYjU2Nzkz
MWRmMTI2ZWE5NDVhNzBiOWFiYjVkMmZlZDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50OjpzdWdnZXN0
ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgaWYgKG1f
ZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1s
IjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICByZXR1cm4g
InRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUg
RE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CiAv
LyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9u
IHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1YzkwMmI2YmIyMzJm
MmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2JlNDlmNTljYzVm
MDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHN1Z2dl
c3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5n
dWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYjZk
ODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgzNmJjODYzMTM1
M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBT
dHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRl
VmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMz
MSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwogCisgICAgLy8g
R2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmli
dXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwgbmFtZXNwYWNl
cyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAwNWJiZjQ0YjMw
YWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdiMjhmNDY5ZjU5
YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApA
QCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9k
ZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90
YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lkIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1
dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZv
aWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAg
ICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJv
b2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFj
ZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCog
dGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKTsK
LSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBh
cHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNv
bnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlv
bihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBh
cHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1l
c3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
aW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4uODNkNmRhMTg5
MzBlZjcwYzA2NjMwNmQ3MDVkMDU0NDY1N2RkOTYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xMDIsMTUgKzEw
MiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldChjb25z
dCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01l
dGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1
dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVz
OworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9u
YW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAg
ICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRl
VmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQor
CitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0
cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290
UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNl
dDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1f
dG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAh
PSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJp
YnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAg
ICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92
YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIp
IHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmly
c3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7
CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlw
ZSIpKQpAQCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnBy
b2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQg
fHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9
IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkp
OwotICAgICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEg
JiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hl
Y2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBi
ZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4
N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4
LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJl
dHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3Ry
aW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0
IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFB
dHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxN
ZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmlu
ZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJh
Y3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9u
ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTAxYjAw
ZDM1OWIzMmRhNDc2YjNhY2Y4NmIxZGRmZjYyNTU3YzJhMQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQ
YXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNp
bmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3Bl
Y2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0
UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
ICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRy
aWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFwcGVu
ZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkpKTsKKyAg
ICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBhcnNl
cjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIHRl
eHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVsZW1l
bnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om5v
c2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKK30KKworc3Rh
dGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNvbnN0
IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAvLyBGSVhNRTogd2Ug
c2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBwbGV0cy4KKyAgICBy
ZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSA/IEhUTUxO
YW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2NsYXNzIFNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7
CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVy
KiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXplck1h
cmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
VGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5k
RWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAg
dmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBF
bGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9k
ZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7CisgICAg
RG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6
OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXplciwg
RG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1cEFj
Y3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6ZXIoc2VyaWFs
aXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8gTWFya3VwQWNjdW11
bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0
IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgor
ICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54bWxT
dGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICBhcHBl
bmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9jdW1lbnQtPnhtbFZl
cnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI/PiIp
KTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAgIEVsZW1lbnQq
IHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFzaG91
bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFt
ZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxl
bWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxl
bWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0cmluZygiPG1ldGEg
Y2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOworICAgICAgICBvdXQu
YXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxk
IHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgorfQor
Cit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRl
cyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVz
cGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0
YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEZyYW1lKiBm
cmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOwor
ICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0byBi
bGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFsaXplZCBm
cmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJhbWUpOwor
ICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKGZyYW1l
T3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKTsKKyAgICBh
cHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKK30K
Kwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBu
b2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9yZUVs
ZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVu
ZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZSgp
Cit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIGRhdGEo
ZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291cmNlcyhyZXNv
dXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3ZvaWQgUGFnZVNl
cmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6ZUZyYW1lKHBh
Z2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJh
bWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1
bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICghdXJsLmlz
VmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAvLyBGb3IgYmxh
bmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNl
ZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxGb3JCbGFua0Zy
YW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJs
KSkgeworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgaGF2ZSAyIGZyYW1lIHdpdGggdGhlIHNh
bWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhhdmUgbm93Cisg
ICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFsaXplIGJvdGgg
YW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5pbmcKKyAgICAg
ICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxO
b2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9y
KHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rpbmco
VGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NFUlQodGV4dEVuY29k
aW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVO
b2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKKyAgICBD
U3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCks
IHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX3Jlc291cmNl
cy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkp
KTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVjdG9yPE5vZGUq
Pjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghbm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBwcm9j
ZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291cmNlcyAodHlw
aWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JD
U1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBpZiAoZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVs
ZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVt
ZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdl
RWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAg
Q2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOwor
ICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsK
KyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0
ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQt
PmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVu
dC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZB
dHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VSVCht
X3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAg
ICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
U3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9
IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+
aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVl
dChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmZp
cnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+
bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9CisK
K3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1aWxkZXIgY3Nz
VGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7
ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkpOwor
ICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICgh
aXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVtVGV4
dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAgICAg
ICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAgIC8v
IFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3ZSBu
ZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAg
ICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBv
cnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hlZXQt
PmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAgICAg
ICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0UnVs
ZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlz
Rm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBmb3Ig
Zm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlmIHRo
ZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVkIGZy
b20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+
aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVybC5p
c1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZp
ZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAg
ICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBTdHJpbmcgdGV4dFN0
cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4dEVu
Y29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0cmluZy5sZW5ndGgo
KSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291cmNlcy0+YXBwZW5k
KFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0
ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJjZVVSTHMuYWRk
KHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVzb3Vy
Y2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghdXJs
LmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxsSW1h
Z2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gaW1hZ2UtPnJl
c3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVy
bCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBtX3Jlc291cmNlVVJM
cy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2ZVJlc291cmNlc0Zv
ckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVy
OjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+aXND
U1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2hlZXQqIGNz
c1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJhdGlv
bi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdlIGFuZCBsaXN0
LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRpZXMKKyAgICAv
LyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1cmUgd2UgaW5j
bHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1pZ2h0IGJlLgor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5sZW5ndGgoKTsg
KytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQgb2YgcmlkaWN1bG91cyB0byBnZXQg
dGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRoZSB2YWx1ZSBvdXQg
b2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhlCisg
ICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVz
IGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElEcy4KKyAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5
Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAgIGlmICghY3NzVmFs
dWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ1NT
SW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihjc3NW
YWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZhbHVl
LT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdlcyBh
cmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAgICBp
ZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0
PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgICAg
ICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltYWdl
LT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVybCk7CisgICAg
fQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFt
ZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5r
RnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVSTHMu
ZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IG1h
a2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVD
b3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAg
IG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJldHVybiBmYWtl
VVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxp
emVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjU2MDM3MjY4ZWUyMGRiYmE1Y2EzYWEyMjBlMjg5MmM5M2RmOTI5NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDkwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9oCisKKyNp
bmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktVUkxIYXNo
LmgiCisjaW5jbHVkZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNo
ZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHlsZVJ1bGU7
CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworCisvLyBU
aGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBiYWNrIHRvIHRl
eHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBwYWdlIGZyYW1l
cyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NTIHN0eWxlc2hl
ZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJj
ZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7CisgICAgICAg
IFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBhZ2VTZXJpYWxp
emVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUgc2VyaWFsaXph
dGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50IGFuZCByZXRy
aWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3IgcGFzc2VkIHRv
IHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAgICAvLyB2ZWN0
b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9pZCBzZXJpYWxp
emUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8gU2VyaWFsaXpl
cyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJlc291cmNl
cyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3VyY2Vz
IGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBzdHls
ZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJpYWxpemVDU1NT
dHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2b2lkIGFkZElt
YWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCByZXRy
aWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAg
ICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsKKworICAg
IFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0PEtVUkw+IG1f
cmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5rRnJhbWVVUkxz
OworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZmU5NzZlNmIyZGJiZWQzMGE5OTRiNzM0MTMw
ZjEwNWViMzA5NDZiLi4xM2VjYTI0MjVjYzA0ZWQ4YzcwYjc1ZGM5ZjRjNzBlODZkZjA2ZjYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTA0LTI1ICBK
YXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBBUEkgdG8gc2Vy
aWFsaXplIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyOiBBZGRlZC4KKyAgICAg
ICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsdWVfYmFja2dyb3VuZC5wbmc6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFn
ZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2dyZWVu
X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICog
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3M6IEFkZGVkLgorICAgICAg
ICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZzogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5wbmc6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2JhY2tncm91bmQu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNr
Z3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9z
aW1wbGUueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
dG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAyMDExLTA0LTI2ICBTdGVwaGVuIFdo
aXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtl
bm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyYTIwMzQ5Y2Qx
Njg1Y2MzYmNjYjc3M2YzMDg5MTAwNTA2NzEwYTIwLi5lNGI0YmNiYjIzYzlkMWRhNTA3OTVlYzNm
MzFhMjZiNjVjMWRjOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04NDgsNiAr
ODQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVwTWVu
dVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyYW5z
cGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgIH1d
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlh
bGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVy
LmgKaW5kZXggYjRkNTcxNTM1YWFiOGZjMjJlZTIwNjZlMmNlMGUxYmFhZjlkODZlZC4uYTEwOGE2
MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0zMSwxNCArMzEsMTQg
QEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmluZSBXZWJQYWdlU2VyaWFsaXpl
cl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ1N0cmlu
ZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBjbGFz
cyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJWaWV3OwogdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiArNDYsMjMgQEAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4gYWxsIHJlc291
cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXIg
ewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIFdlYlVSTCB1cmw7Cisg
ICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJpbmcgZGF0YTsKKyAg
ICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSBXZWJWaWV3
LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNlcyAoc3VjaCBhcyBpbWFnZXMg
YW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAgICAvLyBUaGUg
Zmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBjb250ZW50cy4K
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0YWcgb3Ig
bGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2VyaWFsaXpl
KFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJTVBPUlRBTlQ6Cisg
ICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBhIHBhZ2Vz
ZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KKworCiAgICAg
Ly8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6ZSB0
aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVtcG9y
YXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCiAgICAgLy8gc2VxdWVudGlh
bGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBidWZmZXIgaXMg
ZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8vIHNhdmVkIGxpbmtzLCB3aGlj
aCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCiAgICAgLy8gVGhlIHBhcmFt
ZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkgd2hp
Y2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQgYWxs
IHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNl
cmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBzZXJp
YWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlBh
Z2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYg
bG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBX
ZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBAQCBwdWJsaWM6
CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCiAgICAg
V0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJhdGlv
bihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RXIGRl
Y2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtP
ZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJLSVRfQVBJIHN0
YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBXZWJV
UkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNsYXJhdGlvbi4K
ICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFnRGVjbGFyYXRp
b24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzhjNzUyOTdmNDJkNzhi
ODlmZTcwZGQ5Zjk0MDAxMzM3ZjlmY2U5OS4uMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRlZDE0MDA4NGM2
YjVjZjczMWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFn
ZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VT
ZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVk
ZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUgIldl
YkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIKICNpbmNs
dWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKQEAg
LTE3OSw2ICsxODEsMjUgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1lKiBm
cmFtZSwKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNv
dXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIoJnJlc291cmNl
cyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwqPih2
aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4gcmVzdWx0OworICAgIGZvciAo
VmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBy
ZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXRlcikgeworICAg
ICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2UudXJsID0gaXRlci0+dXJs
OworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1pbWVUeXBlLmFzY2lpKCk7Cisg
ICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIHJlc291cmNlIGRhdGEgaGVy
ZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAgICAgIHJlc291
cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEoKSwgaXRlci0+ZGF0YS0+c2l6
ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7CisgICAgfQorCisgICAgKnJl
c291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBib29sIFdlYlBhZ2VTZXJpYWxp
emVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjRiMGRhY2ViZjMwMmY3YzY0YzA2NGY5ZDNhYTg3NGVmZjI0NmYyNgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1Nlcmlh
bGl6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRl
ICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgorI2lu
Y2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVSTFJl
c3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3Ny
Yy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvc3Vw
cG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1l
c3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVDbGll
bnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFibGVk
KGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBib29s
IC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9Cisg
ICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBXZWJQYWdlTmV3U2VyaWFsaXpl
VGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdlTmV3U2Vy
aWFsaXplVGVzdCgpCisgICAgICAgIDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRG
OCgidGV4dC9odG1sIikpCisgICAgICAgICwgbV94aHRtbE1pbWVUeXBlKFdlYlN0cmluZzo6ZnJv
bVVURjgoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKQorICAgICAgICAsIG1fY3NzTWltZVR5cGUo
V2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAgICAgICAgLCBtX3BuZ01pbWVUeXBl
KFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQorICAgIHsKKyAgICB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3JlYXRl
IGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJWaWV3
OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgaW1hZ2VzIHRvIGxvYWQuCisg
ICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmlldy0+c2V0dGluZ3MoKTsKKyAg
ICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHNldHRpbmdz
LT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisKKyAgICAgICAgbV93ZWJWaWV3
LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlVu
cmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVybCwg
Y29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkKKyAg
ICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25zZS5p
bml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKG1pbWVUeXBlKTsKKyAg
ICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgc3RkOjpzdHJp
bmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0ZjgoKTsK
KyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUu
dXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVybCwg
cmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAgICB2
b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAgIFdl
YlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXplKCk7
CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93ZWJW
aWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8vIE1h
a2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtpdF9z
dXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgICAgIC8vIFNv
bWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIuCisgICAgICAgIHdlYmtpdF9z
dXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgLy8gU2VydmVyIHRoZSBk
ZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9u
b3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAgICB7
CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAgICB9
CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1haW5G
cmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21VVEY4
KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2ViU3RyaW5nJiBodG1sTWltZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0cmlu
ZyYgeGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1feGh0bWxNaW1lVHlwZTsgfQorICAg
IGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc01pbWVU
eXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVZlY3RvckNv
bnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+JiByZXNv
dXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJVUkwg
d2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJQYWdlU2Vy
aWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAgICAgICAgICAg
aWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNlLmRhdGEuaXNFbXB0eSgpICYm
ICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcobWltZVR5cGUpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKworcHJpdmF0ZToKKyAgICBX
ZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1feGh0bWxNaW1lVHlwZTsK
KyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9wbmdNaW1lVHlw
ZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307CisKKy8vIFRl
c3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2VzIGFuZCBzdWItZnJhbWUgaXMgcmVwb3J0ZWQg
d2l0aCBhbGwgaXRzIHJlc291cmNlcy4KKy8vIEZJWE1FOiByZWVuYWJsZSB0aGVzZSB0ZXN0cyBv
bmNlIHRoZSBDaHJvbWl1bSBwYXJ0IG9mIHRoZSB0ZXN0X3dlYmtpdF9jbGllbnQgaGF2ZSBsYW5k
ZWQuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1BhZ2VXaXRoRnJh
bWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVSTCB0
b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFtZS5o
dG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJp
ZnJhbWUuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoImlmcmFtZTIuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiks
IFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9n
cmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBs
b2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJj
ZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJl
IHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYg
cmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09
IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNl
Lm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDYsIHJlc291
cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBF
Q1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
Z3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJl
c291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVl
X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lLmh0
bWwiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiLCAidGV4dC9o
dG1sIikpOworfQorCisvLyBUZXN0IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBhZ2UsIGFsbCBD
U1MgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCwgaW5jbHVkaW5nIHVybCgpJ3MKKy8vIGFuZCBpbXBv
cnRzIGFuZCBsaW5rcy4gTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgdGhlIHJlc291cmNlcyBjb250
ZW50cywgd2Ugb25seSBtYWtlIHN1cmUKKy8vIHRoZXkgYXJlIGFsbCByZXBvcnRlZCB3aXRoIHRo
ZSByaWdodCBtaW1lIHR5cGUgYW5kIHRoYXQgdGhleSBjb250YWluIHNvbWUgZGF0YS4KK1RFU1Rf
RihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQ1NTUmVzb3VyY2VzKQoreworICAg
IC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRv
cEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3RfcGFn
ZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgibGlua19zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9tX2xp
bmsuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3Nz
IiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
ImltcG9ydF9zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBX
ZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7
CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3Jh
bmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgieWVsbG93X2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2Jh
Y2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5n
IiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRG
OCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5w
bmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicHVycGxlX2JhY2tncm91bmQucG5nIiksIHBuZ01p
bWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL3VsLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidWwtZG90LnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9vbC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9sLWRvdC5wbmci
KSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZy
YW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJl
c291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91
bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51
cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVz
b3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVY
UEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoMTIs
IHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAg
ICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93
d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9pbXBvcnRfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0
X3N0eWxlX2Zyb21fbGluay5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNr
Z3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNrZ3Jv
dW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQu
cG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRh
aW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIsICJp
bWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOwor
ICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDov
L3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKK30KKworLy8gVGVzdHMg
dGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSB3aXRoIGJsYW5rIGZyYW1lcyB0aGVzZSBhcmUg
cmVwb3J0ZWQgd2l0aCB0aGVpciByZXNvdXJjZXMuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6
ZVRlc3QsIERJU0FCTEVEX0JsYW5rRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2Nr
ZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0
cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVS
TCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJhbWVzLmh0bWwiKSwgaHRtbE1pbWVUeXBl
KCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3Vu
ZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tn
cm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwg
cG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZyYW1l
KHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291
cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQg
YmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNl
JiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwg
PT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3Vy
Y2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVD
VF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNywgcmVz
b3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9i
bHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICAvLyBUaGUgYmxhbmsgZnJh
bWVzIHNob3VsZCBoYXZlIGdvdCBhIG1hZ2ljIFVSTC4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8wIiwgInRleHQvaHRt
bCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Ind5Y2l3eWc6Ly9mcmFtZS8xIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8yIiwgInRleHQv
aHRtbCIpKTsKK30KKworVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxFRF9T
ZXJpYWxpemVYTUxIYXNSaWdodERlY2xhcmF0aW9uKQoreworICAgIFdlYlVSTCB0b3BGcmFtZVVS
TCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vc2ltcGxlLnhodG1sIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1wbGUu
eGh0bWwiKSwgeGh0bWxNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZy
YW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJl
c291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJl
c291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAor
ICAgIC8vIFdlIGV4cGVjdCBvbmx5IG9uZSByZXNvdXJjZSwgdGhlIFhNTC4KKyAgICBBU1NFUlRf
RVEoMSwgcmVzb3VyY2VzLnNpemUoKSk7CisgICAgc3RkOjpzdHJpbmcgeG1sID0gcmVzb3VyY2Vz
WzBdLmRhdGE7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgYW5kIG9ubHkgb25lIGluc3Rh
bmNlIG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCisgICAgc2l6ZV90IHBvcyA9IHhtbC5maW5kKCI8
P3htbCB2ZXJzaW9uPSIpOworICAgIEFTU0VSVF9UUlVFKHBvcyAhPSBzdGQ6OnN0cmluZzo6bnBv
cyk7CisKKyAgICBwb3MgPSB4bWwuZmluZCgiPD94bWwgdmVyc2lvbj0iLCBwb3MgKyAxKTsKKyAg
ICBBU1NFUlRfVFJVRShwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxh
bmtfZnJhbWVzLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRmYjIwNDk5YzQzMjYzY2I1
YzI0NmZlN2UxOTI1NDQyY2Q3MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApAQCAt
MCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gb25sb2FkKCkgewor
ICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIHZh
ciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYxIik7CisgICAgZGl2LmFwcGVu
ZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRN
TCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nYmx1ZV9iYWNrZ3Jv
dW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJh
bWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJy
PkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3Jl
IHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUi
KTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYzIik7CisgICAgZGl2
LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5Lmlu
bmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nb3Jhbmdl
X2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICB9CisgIAor
PC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorICBUaGlzIHBhZ2UgY3JlYXRl
cyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQgdG8gdGhlbSBkeW5hbWljYWxseS48YnI+
PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjIiPjwvZGl2
PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3Nz
X3Rlc3RfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDYzN2YwZjAyMmQ3NTlj
MGFkYzlkMjAxYmNmNDMxNjE0NmJkMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApA
QCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVzZWQgdG8gdGVz
dCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkgdGhlCisgICAg
IFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+CisKKzxoZWFk
PgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5rX3N0
eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNzcycp
OworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1cmwo
J0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkgZm9y
bWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2Zp
dmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7CisgIGJh
Y2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsKKyAg
bGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlzdC1z
dHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3JpcHQ+
CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25Mb2FkKCkg
eworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJsKCdw
dXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVOb2Rl
Lm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsKK30K
Kzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KKworPCEtLSBU
ZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYnPlRo
aXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBp
biBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSByZWQg
aW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBhIGZp
bGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3JhbmdlJz4K
K1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2Pgor
Cis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZZWxs
b3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhlIGhl
YWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFnZSBh
cyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+Cis8
ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9iYWNr
Z3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNrZ3Jv
dW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdpdGgg
SmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJwbGUn
PgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+
CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+UmVk
PC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVuPC9s
aT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgorPG9s
PgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAg
PGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+CisK
KzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1
ZWRiZGMxODkxY2YxYjZmOTY3YjdkMzc2MWUyMDczMGQ4MzllNmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Lmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iYmx1ZV9i
YWNrZ3JvdW5kLnBuZyIvPgorPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBuZyIvPgorCis8L2Jv
ZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkMDQ0
YjJlY2NiYjdmOWUzZjBiNWRmY2E4Njg4ZjJlZGZjZjk3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5o
dG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImdyZWVuX2Jh
Y2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorCis8L2Jv
ZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJv
bV9saW5rLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY4M2U1ODFmNDZlYjVlZWZiMzc2NDcxNDMwZThjZmIy
ZWE2YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCkBAIC0wLDAgKzEs
MyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFja2dy
b3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0
eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvaW1wb3J0X3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjN2Y0ZDVmNGE5OWM3YWU2ZTZjMjU0
YTg5NjNlNDJhOWE4NGJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpAQCAtMCwwICsx
LDMgQEAKKyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19iYWNr
Z3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0
eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvbGlua19zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2N2ZiOTlhOWIwZGEwOWJlZTJjMjRlYzgz
NTVhMTdlNDMwN2E2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCkBAIC0wLDAgKzEsNSBA
QAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7CisKKyNkaXZSZWQg
eworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjVmMTJkZjYzNTY4NmM2ZjFjMWM1ZWRiNGJkZDU3MzUyM2Y4MDBhZmYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
c2ltcGxlLnhodG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rp
bmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEu
MCBTdHJpY3QvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0
cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHht
bDpsYW5nPSJlbiI+CisgPGhlYWQ+CisgPHRpdGxlPlhIVE1MIDEuMCBTdHJpY3QgRXhhbXBsZTwv
dGl0bGU+CisgPC9oZWFkPgorIDxib2R5PgorICAgPHA+SGVsbG8hIDwvcD4KKyA8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMxODUyM2Fm
YTRhMWIwOTg2NWM0NDkyOGQzNGE3YzExZDJmNDAyZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRt
bApAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0icmVkX2JhY2tn
cm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+Cis8b2Jq
ZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNyYz0iaWZyYW1lLmh0
bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91131</attachid>
            <date>2011-04-26 11:36:16 -0700</date>
            <delta_ts>2011-04-26 12:08:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426113615.patch</filename>
            <type>text/plain</type>
            <size>66051</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzRjYzk4ZTM4OWJlNWUx
ODM5NTY0YzhkMjhlNWFkNjdjNTMwZjUzLi5kYWY4NTgwOTc1ZGEyNDgzZWYwZDU1YjJkZDEyNTdh
Mjg4YjM2OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0OWZiYTFmYTk1
MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5ODVjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYWM5ODY3ZmIyZmU2ZDBhYWQz
MzU4ZTAxODU1MjNmODYwZTM1MjE5Li4wOWM4NDQyNGMyZWE5NmIxNTgxZjQ1MTZmMzUyZTM4ZGY4
ZmU4MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAgICAgICAgICAg
ICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAg
ICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRp
b25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdl
R3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAg
ICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1h
bmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAg
ICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNmQ4
ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4MDUzZmEwYWJj
MDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYgKzkzNSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwLmNw
cCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAgIHBhZ2UvUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAg
XApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9QYWdlR3JvdXAu
aCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFnZS9QYWdlLmgg
XAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXIuaCBc
CiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9QcmludENvbnRleHQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQxMDBhOWQyZmYy
MzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuY3BwIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVyZm9ybWFuY2Uu
Y3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzNmQ2NTE5ZThlNjQ0ZmExNmE0N2M5ZWNhMTdmZWMwMjZiNzk5YWUx
Li44MGFlNjA1ZGM3YzdmY2UwMmEwYzFlMTM1N2M0NDNhYWM1MTJmZmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDcsNiAr
ODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMENDRDMx
MTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdDQTExQzZDN0RC
MDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUNDMTM2NjFFREMw
MEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxp
emVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFF
NjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9OwogCQkzNzFG
NEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUg
LyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICov
OyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAwQ0UwNTdEIC8q
IFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0Mw
Q0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8q
IFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VT
ZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNEMTM2NjFF
RUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkRm9udERh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0NDQwLDggQEAK
IAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2
NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJ
CQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICov
LAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8s
CisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJ
CQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAqLywKIAkJCQk4
QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJCQk4QTg0NEQw
MzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMwODEsNiArMjMw
ODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyog
SW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFFMTM2NUE0
RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNTc5OCw2ICsyNTgwNSw3IEBACiAJCQkJMTRFMEJDNTYxMzYxNDhBODAw
MkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYz
ODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRyYW5zZmVySXRl
bXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggMzVmZTA5NmFjZDY2OTAzZTg2MTYzMTYyM2Q4ZjhiNDg2NDg2ZGM3MC4uNjUxODJmYjU2Nzkz
MWRmMTI2ZWE5NDVhNzBiOWFiYjVkMmZlZDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50OjpzdWdnZXN0
ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgaWYgKG1f
ZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1s
IjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICByZXR1cm4g
InRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUg
RE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CiAv
LyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9u
IHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1YzkwMmI2YmIyMzJm
MmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2JlNDlmNTljYzVm
MDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHN1Z2dl
c3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5n
dWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYjZk
ODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgzNmJjODYzMTM1
M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBT
dHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRl
VmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMz
MSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwogCisgICAgLy8g
R2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmli
dXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwgbmFtZXNwYWNl
cyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAwNWJiZjQ0YjMw
YWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdiMjhmNDY5ZjU5
YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApA
QCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9k
ZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90
YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lkIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1
dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZv
aWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAg
ICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJv
b2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFj
ZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCog
dGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKTsK
LSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBh
cHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNv
bnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlv
bihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBh
cHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1l
c3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
aW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4uODNkNmRhMTg5
MzBlZjcwYzA2NjMwNmQ3MDVkMDU0NDY1N2RkOTYwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xMDIsMTUgKzEw
MiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldChjb25z
dCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01l
dGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1
dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVz
OworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9u
YW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAg
ICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRl
VmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJp
YnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQor
CitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0
cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290
UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNl
dDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1f
dG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpj
b25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAh
PSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJp
YnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAg
ICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92
YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIp
IHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmly
c3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7
CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlw
ZSIpKQpAQCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnBy
b2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQg
fHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9
IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkp
OwotICAgICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEg
JiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hl
Y2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBi
ZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4
N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4
LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJl
dHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3Ry
aW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0
IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFB
dHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxN
ZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmlu
ZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJh
Y3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9u
ZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZkYjZh
NTQyMTMwNmE4MzEyMjBjNjA5YzdlYjU5YWFjMzlmYmJhZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNs
dWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQ
YXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5
LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNp
bmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVu
YXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3Bl
Y2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0
b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0
UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAg
ICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
ICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRy
aWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFwcGVu
ZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3RyaW5n
KCkpKTsKKyAgICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hh
cnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAg
cmV0dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZEln
bm9yZUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsK
K30KKworc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVO
YW1lKGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBwbGV0
cy4KKyAgICByZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFn
KSA/IEhUTUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2NsYXNz
IFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1
bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VT
ZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2Vz
Kik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRF
bmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6
ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2Vy
aWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6
IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6
ZXIoc2VyaWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8gTWFy
a3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28g
d2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3Bl
Y2lmaWVkLgorICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3Vt
ZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAg
ICAgICBhcHBlbmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9jdW1l
bnQtPnhtbFZlcnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgp
LCAiXCI/PiIpKTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAg
IEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50
ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVs
ZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50
KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0cmlu
ZygiPG1ldGEgY2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOworICAg
ICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFn
IHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRl
bnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9t
QXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFj
ZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVP
d25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAg
IEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJh
bWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCkt
PnVybCgpOworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQi
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2Nh
dGlvbiB0byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2Vy
aWFsaXplZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUo
ZnJhbWUpOworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3Jl
YXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygp
KTsKKyAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3Bh
Y2VzKTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRh
ZyhOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3Vs
ZElnbm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpS
ZXNvdXJjZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1
ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAg
ICAsIGRhdGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZl
Y3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291
cmNlcyhyZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3Zv
aWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6
ZUZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlm
ICghdXJsLmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAv
LyBGb3IgYmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUg
cmVmZXJlbmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxG
b3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29u
dGFpbnModXJsKSkgeworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgaGF2ZSAyIGZyYW1lIHdp
dGggdGhlIHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhh
dmUgbm93CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFs
aXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5p
bmcKKyAgICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFj
Y3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0ZXh0
RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NFUlQo
dGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5z
ZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2Rl
KTsKKyAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFy
YWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBt
X3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVU
eXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5s
ZW5ndGgoKSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVj
dG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlm
ICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAg
ICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2UgaGF2
ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291
cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVSZXNv
dXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBpZiAo
ZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1l
bnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRl
VVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAg
ICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJ
bWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJs
KTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlu
a1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hl
ZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQg
JiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwg
PSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChz
dGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAg
IEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcp
KSB7CisgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0
KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAm
JiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NT
U3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50
cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUt
PnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFt
ZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1
aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5p
dGVtKGkpOworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAg
ICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVu
ZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0g
MSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9Cisg
ICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0g
dGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxl
KCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0
eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7Cisg
ICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQo
aW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYg
KGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3Vw
cG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBv
aW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0
cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBp
ZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9y
Q1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAg
aWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAg
ICAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVl
biBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRF
bmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgp
KTsKKyAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBTdHJp
bmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0ZXh0
ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0cmlu
Zy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291cmNl
cy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6
OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJj
ZVVSTHMuYWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFn
ZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAg
IGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdl
OjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0g
aW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJl
c291cmNlKHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBtX3Jl
c291cmNlVVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2ZVJl
c291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBhZ2VT
ZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hl
ZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxl
U2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVE
ZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdl
IGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRp
ZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1
cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1p
Z2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQgb2YgcmlkaWN1bG91
cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRoZSB2
YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQg
b2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBv
bmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElEcy4K
KyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdl
dFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAgIGlm
ICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFs
dWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBp
bWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2FjaGVk
LWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgor
ICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IHN0
YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsK
KworICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGltYWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVy
bCk7CisgICAgfQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZy
YW1lKiBmcmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxhbmtG
cmFtZVVSTHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3RyaW5n
IHVybCA9IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlcihtX2Js
YW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1
cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJl
dHVybiBmYWtlVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYjU2MDM3MjY4ZWUyMGRiYmE1Y2EzYWEyMjBlMjg5MmM5M2RmOTI5NAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCww
ICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXpl
cl9oCisKKyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IktVUkxIYXNoLmgiCisjaW5jbHVkZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDYWNoZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NT
dHlsZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdl
OworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBi
YWNrIHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBw
YWdlIGZyYW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NT
IHN0eWxlc2hlZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVj
dCBSZXNvdXJjZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7
CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7
CisgICAgICAgIFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQ
YXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBh
Z2VTZXJpYWxpemVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUg
c2VyaWFsaXphdGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50
IGFuZCByZXRyaWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3Ig
cGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAg
ICAvLyB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9p
ZCBzZXJpYWxpemUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7
CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8g
U2VyaWFsaXplcyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhl
IHJlc291cmNlcyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkg
cmVzb3VyY2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBv
cnRlZCBzdHlsZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJp
YWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2
b2lkIGFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAg
dm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRp
b24qKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUq
KTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0
PEtVUkw+IG1fcmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5r
RnJhbWVVUkxzOworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZmU5NzZlNmIyZGJiZWQzMGE5
OTRiNzM0MTMwZjEwNWViMzA5NDZiLi4xM2VjYTI0MjVjYzA0ZWQ4YzcwYjc1ZGM5ZjRjNzBlODZk
ZjA2ZjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDEx
LTA0LTI1ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBB
UEkgdG8gc2VyaWFsaXplIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViS2l0
Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBz
cmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsdWVfYmFja2dy
b3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3Nz
X3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2dyZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3M6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZzogQWRkZWQu
CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2Jh
Y2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVy
L3JlZF9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9zaW1wbGUueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAyMDExLTA0LTI2ICBT
dGVwaGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAy
YTIwMzQ5Y2QxNjg1Y2MzYmNjYjc3M2YzMDg5MTAwNTA2NzEwYTIwLi5lNGI0YmNiYjIzYzlkMWRh
NTA3OTVlYzNmMzFhMjZiNjVjMWRjOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC04NDgsNiArODQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rz
L1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0
LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIH1dLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2Vi
UGFnZVNlcmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VT
ZXJpYWxpemVyLmgKaW5kZXggYjRkNTcxNTM1YWFiOGZjMjJlZTIwNjZlMmNlMGUxYmFhZjlkODZl
ZC4uYTEwOGE2MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0zMSwx
NCArMzEsMTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmluZSBXZWJQYWdl
U2VyaWFsaXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29t
bW9uLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3Mg
V2ViQ1N0cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGll
bnQ7CiBjbGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJWaWV3OwogdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiArNDYsMjMgQEAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4g
YWxsIHJlc291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3MgV2ViUGFnZVNl
cmlhbGl6ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIFdlYlVS
TCB1cmw7CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJpbmcg
ZGF0YTsKKyAgICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRo
ZSBXZWJWaWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNlcyAoc3VjaCBh
cyBpbWFnZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAg
ICAvLyBUaGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBj
b250ZW50cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlw
dCB0YWcgb3IgbGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQg
c2VyaWFsaXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJTVBP
UlRBTlQ6CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBv
ZiBhIHBhZ2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4K
KworCiAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNl
cmlhbGl6ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIg
dG8gdGVtcG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCiAgICAgLy8g
c2VxdWVudGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBi
dWZmZXIgaXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8vIHNhdmVkIGxp
bmtzLCB3aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCiAgICAgLy8g
VGhlIHBhcmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJl
Y3Rvcnkgd2hpY2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5j
bHVkZWQgYWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRfQVBJIHN0YXRp
YyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQSSBzdGF0aWMg
Ym9vbCBzZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYgbG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBA
QCBwdWJsaWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRp
b24uCiAgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXRE
ZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdlbmVyYXRlIHRo
ZSBNT1RXIGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5l
cmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJL
SVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihj
b25zdCBXZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNs
YXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFn
RGVjbGFyYXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzhjNzUy
OTdmNDJkNzhiODlmZTcwZGQ5Zjk0MDAxMzM3ZjlmY2U5OS4uMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRl
ZDE0MDA4NGM2YjVjZjczMWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBhZ2VTZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJ
bnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgi
CisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2lu
Y2x1ZGUgIldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJXZWJVUkwu
aCIKICNpbmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVk
ZSAiV2ViVmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRl
Lmg+CiAKQEAgLTE3OSw2ICsxODEsMjUgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1l
KEZyYW1lKiBmcmFtZSwKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2ViUGFnZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6
ZXI6OlJlc291cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxp
emVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIo
JnJlc291cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nhc3Q8V2ViVmll
d0ltcGwqPih2aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4gcmVzdWx0Owor
ICAgIGZvciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXRl
cikgeworICAgICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2UudXJsID0g
aXRlci0+dXJsOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1pbWVUeXBlLmFz
Y2lpKCk7CisgICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIHJlc291cmNl
IGRhdGEgaGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAg
ICAgIHJlc291cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEoKSwgaXRlci0+
ZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7CisgICAgfQor
CisgICAgKnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBib29sIFdlYlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjRiMGRhY2ViZjMwMmY3YzY0YzA2NGY5ZDNhYTg3NGVmZjI0NmYy
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFn
ZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIK
KyNpbmNsdWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJj
ZS5oIgorI2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisj
aW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUg
IldlYlVSTFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29v
Z2xldXJsL3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0
OworCituYW1lc3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2Vi
RnJhbWVDbGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3Jp
cHRFbmFibGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJh
bWUqLCBib29sIC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFi
bGVkOyB9CisgICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBXZWJQYWdlTmV3
U2VyaWFsaXplVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQ
YWdlTmV3U2VyaWFsaXplVGVzdCgpCisgICAgICAgIDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5n
Ojpmcm9tVVRGOCgidGV4dC9odG1sIikpCisgICAgICAgICwgbV94aHRtbE1pbWVUeXBlKFdlYlN0
cmluZzo6ZnJvbVVURjgoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKQorICAgICAgICAsIG1fY3Nz
TWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAgICAgICAgLCBtX3Bu
Z01pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQorICAgIHsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAg
Ly8gQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcg
PSBXZWJWaWV3OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgaW1hZ2VzIHRv
IGxvYWQuCisgICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmlldy0+c2V0dGlu
Z3MoKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgICAg
IHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisKKyAgICAgICAg
bV93ZWJWaWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xv
c2UoKTsKKyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJV
UkwmIHVybCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtaW1l
VHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICBy
ZXNwb25zZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKG1pbWVU
eXBlKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAg
c3RkOjpzdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigp
LnV0ZjgoKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQo
ZmlsZU5hbWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2Vk
VVJMKHVybCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9
CisKKyAgICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7Cisg
ICAgICAgIFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0
aWFsaXplKCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAg
ICAgbV93ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAg
ICAgIC8vIE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAg
ICAgIC8vIFNvbWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIuCisgICAgICAg
IHdlYmtpdF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgLy8gU2Vy
dmVyIHRoZSBkZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZl
QXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuYWJsZUpT
KCkKKyAgICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1
ZTsKKyAgICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZp
ZXctPm1haW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6
OmZyb21VVEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2ViU3RyaW5nJiBo
dG1sTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0
IFdlYlN0cmluZyYgeGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1feGh0bWxNaW1lVHlw
ZTsgfQorICAgIGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBt
X2Nzc01pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2U+JiByZXNvdXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAg
ICBXZWJVUkwgd2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBX
ZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAg
ICAgICAgICAgaWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNlLmRhdGEuaXNF
bXB0eSgpICYmICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcobWltZVR5cGUp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKworcHJpdmF0
ZToKKyAgICBXZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1feGh0bWxN
aW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9w
bmdNaW1lVHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307
CisKKy8vIFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2VzIGFuZCBzdWItZnJhbWUgaXMg
cmVwb3J0ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KKy8vIEZJWE1FOiByZWVuYWJsZSB0aGVz
ZSB0ZXN0cyBvbmNlIHRoZSBDaHJvbWl1bSBwYXJ0IG9mIHRoZSB0ZXN0X3dlYmtpdF9jbGllbnQg
aGF2ZSBsYW5kZWQuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1Bh
Z2VXaXRoRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAg
IFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRv
cF9mcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZy
b21VVEY4KCJpZnJhbWUuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0
cmluZzo6ZnJvbVVURjgoImlmcmFtZTIuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVl
bl9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7
CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8
V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlh
bGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxT
RShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ug
c2hvdWxkIGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2UudXJsID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAs
IHJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAg
ICBFWFBFQ1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VR
KDYsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4K
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
aWZyYW1lLmh0bWwiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwi
LCAidGV4dC9odG1sIikpOworfQorCisvLyBUZXN0IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBh
Z2UsIGFsbCBDU1MgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCwgaW5jbHVkaW5nIHVybCgpJ3MKKy8v
IGFuZCBpbXBvcnRzIGFuZCBsaW5rcy4gTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgdGhlIHJlc291
cmNlcyBjb250ZW50cywgd2Ugb25seSBtYWtlIHN1cmUKKy8vIHRoZXkgYXJlIGFsbCByZXBvcnRl
ZCB3aXRoIHRoZSByaWdodCBtaW1lIHR5cGUgYW5kIHRoYXQgdGhleSBjb250YWluIHNvbWUgZGF0
YS4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQ1NTUmVzb3VyY2Vz
KQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAg
V2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJl
Z2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3Nz
X3Rlc3RfcGFnZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgibGlua19zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJl
Z2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHls
ZV9mcm9tX2xpbmsuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZV9mcm9t
X2xpbmsuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoImltcG9ydF9zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5k
LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5n
ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgieWVsbG93X2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBl
KCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tn
cm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFj
a2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicHVycGxlX2JhY2tncm91bmQucG5n
IiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidWwtZG90
LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9s
LWRvdC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRV
UkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZl
Y3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdl
U2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJU
X0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNv
dXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6
ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkp
OworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBF
Q1RfRVEoMTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGlj
YXRlcy4KKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNU
X1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUo
cmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29y
YW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxv
d19iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2Jh
Y2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3Jv
dW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5k
LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250
YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKK30KKwor
Ly8gVGVzdHMgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSB3aXRoIGJsYW5rIGZyYW1lcyB0
aGVzZSBhcmUgcmVwb3J0ZWQgd2l0aCB0aGVpciByZXNvdXJjZXMuCitURVNUX0YoV2ViUGFnZU5l
d1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX0JsYW5rRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVy
IHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0
b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJhbWVzLmh0bWwiKSwgaHRt
bE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRf
YmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9i
bHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3Vu
ZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJ
blRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3Rv
cjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZB
TFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJj
ZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6
OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoNywgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVz
LgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50
ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICAvLyBUaGUg
YmxhbmsgZnJhbWVzIHNob3VsZCBoYXZlIGdvdCBhIG1hZ2ljIFVSTC4KKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8wIiwg
InRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8xIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8y
IiwgInRleHQvaHRtbCIpKTsKK30KKworVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBE
SVNBQkxFRF9TZXJpYWxpemVYTUxIYXNSaWdodERlY2xhcmF0aW9uKQoreworICAgIFdlYlVSTCB0
b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vc2ltcGxlLnhodG1sIik7Cisg
ICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJzaW1wbGUueGh0bWwiKSwgeGh0bWxNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZy
YW1lKHRvcEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVz
b3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2Vi
VmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkp
OworICAgIAorICAgIC8vIFdlIGV4cGVjdCBvbmx5IG9uZSByZXNvdXJjZSwgdGhlIFhNTC4KKyAg
ICBBU1NFUlRfRVEoMSwgcmVzb3VyY2VzLnNpemUoKSk7CisgICAgc3RkOjpzdHJpbmcgeG1sID0g
cmVzb3VyY2VzWzBdLmRhdGE7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgYW5kIG9ubHkg
b25lIGluc3RhbmNlIG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCisgICAgc2l6ZV90IHBvcyA9IHht
bC5maW5kKCI8P3htbCB2ZXJzaW9uPSIpOworICAgIEFTU0VSVF9UUlVFKHBvcyAhPSBzdGQ6OnN0
cmluZzo6bnBvcyk7CisKKyAgICBwb3MgPSB4bWwuZmluZCgiPD94bWwgdmVyc2lvbj0iLCBwb3Mg
KyAxKTsKKyAgICBBU1NFUlRfVFJVRShwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRmYjIwNDk5
YzQzMjYzY2I1YzI0NmZlN2UxOTI1NDQyY2Q3MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMu
aHRtbApAQCAtMCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gb25s
b2FkKCkgeworICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIp
OworICAgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYxIik7CisgICAg
ZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5
LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nYmx1
ZV9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFt
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOwor
CisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29t
ZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+
U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYzIik7
CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVu
dC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNy
Yz0nb3JhbmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKwor
ICB9CisgIAorPC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorICBUaGlzIHBh
Z2UgY3JlYXRlcyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQgdG8gdGhlbSBkeW5hbWlj
YWxseS48YnI+PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2PgorICA8ZGl2IGlkPSJteURp
djIiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9ib2R5PgorCis8L2h0bWw+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDYzN2Yw
ZjAyMmQ3NTljMGFkYzlkMjAxYmNmNDMxNjE0NmJkMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3Bh
Z2UuaHRtbApAQCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVz
ZWQgdG8gdGVzdCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkg
dGhlCisgICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+
CisKKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVm
PSJsaW5rX3N0eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5
bGVzLmNzcycpOworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAg
c3JjOiB1cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250
LmVvdCkgZm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5
OiBDaHVua2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1
ZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisK
K3VsIHsKKyAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsK
KyAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisK
KzxzY3JpcHQ+CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24g
b25Mb2FkKCkgeworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1h
Z2U6dXJsKCdwdXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAg
c3R5bGVOb2RlLm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3Vt
ZW50LmNyZWF0ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVO
b2RlKTsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4K
KworPCEtLSBUZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2Zp
dmVEaXYnPlRoaXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBT
dHlsZSBpcyBpbiBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBo
YXMgYSByZWQgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBp
cyBpbiBhIGZpbGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2
T3JhbmdlJz4KK1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4K
KzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlk
PSdkaXZZZWxsb3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3Jv
dW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24g
aW4gdGhlIGhlYWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1
ZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGlu
ZWQgLS0+Cis8ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdn
cmVlbl9iYWNrZ3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0
cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJh
dGVkIHdpdGggSmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdk
aXZQdXJwbGUnPgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5k
LgorPC9kaXY+CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgor
ICA8bGk+UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxp
PkdyZWVuPC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6
PGJyPgorPG9sPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93
PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4K
Kzwvb2w+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY1ZWRiZGMxODkxY2YxYjZmOTY3YjdkMzc2MWUyMDczMGQ4MzllNmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvaWZyYW1lLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNy
Yz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBuZyIv
PgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjZkMDQ0YjJlY2NiYjdmOWUzZjBiNWRmY2E4Njg4ZjJlZGZjZjk3OGYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
aWZyYW1lMi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9
ImdyZWVuX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIv
PgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRf
c3R5bGVfZnJvbV9saW5rLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY4M2U1ODFmNDZlYjVlZWZiMzc2NDcx
NDMwZThjZmIyZWE2YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCkBA
IC0wLDAgKzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFu
Z2VfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
aW1wb3J0X3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjN2Y0ZDVmNGE5OWM3
YWU2ZTZjMjU0YTg5NjNlNDJhOWE4NGJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpA
QCAtMCwwICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3ll
bGxvd19iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9saW5rX3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2N2ZiOTlhOWIwZGEwOWJl
ZTJjMjRlYzgzNTVhMTdlNDMwN2E2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCkBAIC0w
LDAgKzEsNSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7CisK
KyNkaXZSZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBuZycp
OworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjVmMTJkZjYzNTY4NmM2ZjFjMWM1ZWRiNGJkZDU3MzUyM2Y4MDBhZmYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvc2ltcGxlLnhodG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFRE
IFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQv
eGh0bWwxLXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkv
eGh0bWwiIHhtbDpsYW5nPSJlbiI+CisgPGhlYWQ+CisgPHRpdGxlPlhIVE1MIDEuMCBTdHJpY3Qg
RXhhbXBsZTwvdGl0bGU+CisgPC9oZWFkPgorIDxib2R5PgorICAgPHA+SGVsbG8hIDwvcD4KKyA8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjMxODUyM2FmYTRhMWIwOTg2NWM0NDkyOGQzNGE3YzExZDJmNDAyZQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3Bf
ZnJhbWUuaHRtbApAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0i
cmVkX2JhY2tncm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJh
bWU+Cis8b2JqZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNyYz0i
aWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91142</attachid>
            <date>2011-04-26 12:09:04 -0700</date>
            <delta_ts>2011-04-26 17:32:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426120903.patch</filename>
            <type>text/plain</type>
            <size>66045</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzRjYzk4ZTM4OWJlNWUx
ODM5NTY0YzhkMjhlNWFkNjdjNTMwZjUzLi5kYWY4NTgwOTc1ZGEyNDgzZWYwZDU1YjJkZDEyNTdh
Mjg4YjM2OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0OWZiYTFmYTk1
MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5ODVjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYWM5ODY3ZmIyZmU2ZDBhYWQz
MzU4ZTAxODU1MjNmODYwZTM1MjE5Li4wOWM4NDQyNGMyZWE5NmIxNTgxZjQ1MTZmMzUyZTM4ZGY4
ZmU4MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAgICAgICAgICAg
ICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAg
ICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRp
b25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdl
R3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAg
ICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1h
bmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAg
ICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNmQ4
ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4MDUzZmEwYWJj
MDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYgKzkzNSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwLmNw
cCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAgIHBhZ2UvUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAg
XApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9QYWdlR3JvdXAu
aCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFnZS9QYWdlLmgg
XAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXIuaCBc
CiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9QcmludENvbnRleHQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQxMDBhOWQyZmYy
MzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuY3BwIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVyZm9ybWFuY2Uu
Y3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzNmQ2NTE5ZThlNjQ0ZmExNmE0N2M5ZWNhMTdmZWMwMjZiNzk5YWUx
Li44MGFlNjA1ZGM3YzdmY2UwMmEwYzFlMTM1N2M0NDNhYWM1MTJmZmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDcsNiAr
ODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMENDRDMx
MTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdDQTExQzZDN0RC
MDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUNDMTM2NjFFREMw
MEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxp
emVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFF
NjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9OwogCQkzNzFG
NEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUg
LyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICov
OyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAwQ0UwNTdEIC8q
IFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0Mw
Q0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8q
IFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VT
ZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNEMTM2NjFF
RUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkRm9udERh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0NDQwLDggQEAK
IAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2
NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJ
CQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICov
LAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8s
CisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJ
CQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAqLywKIAkJCQk4
QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJCQk4QTg0NEQw
MzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMwODEsNiArMjMw
ODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyog
SW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFFMTM2NUE0
RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNTc5OCw2ICsyNTgwNSw3IEBACiAJCQkJMTRFMEJDNTYxMzYxNDhBODAw
MkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYz
ODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRyYW5zZmVySXRl
bXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggMzVmZTA5NmFjZDY2OTAzZTg2MTYzMTYyM2Q4ZjhiNDg2NDg2ZGM3MC4uNjUxODJmYjU2Nzkz
MWRmMTI2ZWE5NDVhNzBiOWFiYjVkMmZlZDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50OjpzdWdnZXN0
ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgaWYgKG1f
ZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1s
IjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICByZXR1cm4g
InRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUg
RE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CiAv
LyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9u
IHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1YzkwMmI2YmIyMzJm
MmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2JlNDlmNTljYzVm
MDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHN1Z2dl
c3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5n
dWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYjZk
ODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgzNmJjODYzMTM1
M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBT
dHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRl
VmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMz
MSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwogCisgICAgLy8g
R2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmli
dXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwgbmFtZXNwYWNl
cyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAwNWJiZjQ0YjMw
YWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdiMjhmNDY5ZjU5
YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApA
QCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9k
ZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90
YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lkIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1
dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZv
aWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAg
ICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJv
b2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFj
ZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCog
dGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKTsK
LSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBh
cHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNv
bnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlv
bihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBh
cHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1l
c3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
aW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4uNTQxMzQ2Njk5
Njk0YTkxYzhmM2YzYTBhNzFhZTMyOTU2ZDAyYjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xMDIsMTUgKzEw
MiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldChjb25z
dCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01l
dGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1
dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVz
OworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRh
dGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1
ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgICAgICBh
dHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUp
KTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMo
YXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQorCitUZXh0
RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRl
cyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290UHJhZ21h
ID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNldDsKIAot
ICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1fdG9rZW4u
YXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBhdHRy
aWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5h
bWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgIFN0
cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5z
aXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0
dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmlyc3Q7Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7CiAKICAg
ICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlwZSIpKQpA
QCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NN
ZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1v
ZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IFRleHRF
bmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwotICAg
ICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290
UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFp
bGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNv
bmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBiZSBjaGVj
a2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApp
bmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4N2RmOWFk
Mjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4LDE2IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJldHVybiBt
X2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+
IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0IG5vdCBi
ZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1
dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxNZXRhQ2hh
cnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmluZyBleHRy
YWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJhY3RDaGFy
c2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9uZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTZkYjZhNTQyMTMw
NmE4MzEyMjBjNjA5YzdlYjU5YWFjMzlmYmJhZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJz
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWlu
Z05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1l
dGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
OjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRy
aWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRy
aWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAv
LyBGSVhNRTogd2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUg
aWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtl
X3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3RyaW5nKCkpKTsK
KyAgICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBh
cnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJu
IHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKK30KKwor
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNv
bnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAvLyBGSVhNRTog
d2Ugc2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBwbGV0cy4KKyAg
ICByZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSA/IEhU
TUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2NsYXNzIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
ciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxp
emVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0
LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWco
Tm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7Cisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXpl
ciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1
cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6ZXIoc2Vy
aWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8gTWFya3VwQWNj
dW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRk
IGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVk
LgorICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54
bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICBh
cHBlbmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9jdW1lbnQtPnht
bFZlcnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI/
PiIpKTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAgIEVsZW1l
bnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFz
aG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQo
ZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwg
ZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0cmluZygiPG1l
dGEgY2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOworICAgICAgICBv
dXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogZm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNv
dWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgor
fQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
OworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0
byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFsaXpl
ZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJhbWUp
OworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKGZy
YW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKTsKKyAg
ICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsK
K30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2Rl
KiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9y
ZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJj
ZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIGRh
dGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291cmNlcyhy
ZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3ZvaWQgUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6ZUZyYW1l
KHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
RnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5k
b2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICghdXJs
LmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAvLyBGb3Ig
YmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUgcmVmZXJl
bmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxGb3JCbGFu
a0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMo
dXJsKSkgeworICAgICAgICAvLyBGSVhNRTogd2UgY291bGQgaGF2ZSAyIGZyYW1lIHdpdGggdGhl
IHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhhdmUgbm93
CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFsaXplIGJv
dGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5pbmcKKyAg
ICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rv
cjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxh
dG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rp
bmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NFUlQodGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxp
emVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKKyAg
ICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX3Jlc291
cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCks
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgo
KSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVjdG9yPE5v
ZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBw
cm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291cmNlcyAo
dHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihl
bGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGlt
YWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgp
OworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykp
IHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNo
ZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1
bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Omhy
ZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7Cisg
ICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVl
dCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVl
dC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVT
aGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUo
KS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9
CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1aWxkZXIg
Y3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkp
OworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlm
ICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVt
VGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAg
ICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAg
IC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3
ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsK
KyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAg
ICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0
UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBhZGQgc3VwcG9ydCBm
b3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlm
IHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVk
IGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRl
bS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVs
ZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVy
bC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVj
aWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRFbmNvZGlu
ZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAg
ICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBTdHJpbmcgdGV4
dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4
dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0cmluZy5sZW5n
dGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291cmNlcy0+YXBw
ZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6OmNyZWF0
ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJjZVVSTHMu
YWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVz
b3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICgh
dXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxs
SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gaW1hZ2Ut
PnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNl
KHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJj
ZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2ZVJlc291cmNl
c0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxp
emVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+
aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2hlZXQq
IGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJh
dGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdlIGFuZCBs
aXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRpZXMKKyAg
ICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1cmUgd2Ug
aW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1pZ2h0IGJl
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBpdCdzIGtpbmQgb2YgcmlkaWN1bG91cyB0byBn
ZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRoZSB2YWx1ZSBv
dXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhl
CisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdp
dmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElEcy4KKyAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3Bl
cnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAgIGlmICghY3Nz
VmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Q1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihj
c3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdl
cyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAg
ICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IHN0YXRpY19j
YXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsKKworICAg
ICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGlt
YWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVybCk7Cisg
ICAgfQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBm
cmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Js
YW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVS
THMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9
IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJh
bWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwor
ICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJldHVybiBm
YWtlVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYjU2MDM3MjY4ZWUyMGRiYmE1Y2EzYWEyMjBlMjg5MmM5M2RmOTI5NAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9oCisK
KyNpbmNsdWRlICJIYXNoTWFwLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktVUkxI
YXNoLmgiCisjaW5jbHVkZSAiTGlzdEhhc2hTZXQuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBD
YWNoZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHlsZVJ1
bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworCisv
LyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBiYWNrIHRv
IHRleHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBwYWdlIGZy
YW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NTIHN0eWxl
c2hlZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBSZXNv
dXJjZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7CisgICAg
ICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7CisgICAg
ICAgIFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVm
UHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBhZ2VTZXJp
YWxpemVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUgc2VyaWFs
aXphdGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50IGFuZCBy
ZXRyaWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3IgcGFzc2Vk
IHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAgICAvLyB2
ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9pZCBzZXJp
YWxpemUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisKK3By
aXZhdGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8gU2VyaWFs
aXplcyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJlc291
cmNlcyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3Vy
Y2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBz
dHlsZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJpYWxpemVD
U1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2b2lkIGFk
ZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCBy
ZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qKTsK
KyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsKKwor
ICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0PEtVUkw+
IG1fcmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5rRnJhbWVV
UkxzOworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA4ZmU5NzZlNmIyZGJiZWQzMGE5OTRiNzM0
MTMwZjEwNWViMzA5NDZiLi4xM2VjYTI0MjVjYzA0ZWQ4YzcwYjc1ZGM5ZjRjNzBlODZkZjA2ZjYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTA0LTI1
ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBBUEkgdG8g
c2VyaWFsaXplIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogV2ViS2l0Lmd5cDoK
KyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaDoKKyAgICAgICAgKiBzcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyOiBBZGRlZC4KKyAg
ICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsdWVfYmFja2dyb3VuZC5w
bmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3Rf
cGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2dy
ZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczogQWRkZWQuCisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3M6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wtZG90LnBuZzogQWRkZWQuCisgICAg
ICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFuZ2VfYmFja2dyb3VuZC5wbmc6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcHVycGxlX2JhY2tncm91
bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3JlZF9i
YWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9zaW1wbGUueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorCiAyMDExLTA0LTI2ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IEtlbm5ldGggUnVzc2VsbC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAyYTIwMzQ5
Y2QxNjg1Y2MzYmNjYjc3M2YzMDg5MTAwNTA2NzEwYTIwLi5lNGI0YmNiYjIzYzlkMWRhNTA3OTVl
YzNmMzFhMjZiNjVjMWRjOTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04NDgs
NiArODQ4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1BvcHVw
TWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Ry
YW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J3Rlc3RzL1VuaXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAg
IH1dLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNl
cmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxp
emVyLmgKaW5kZXggYjRkNTcxNTM1YWFiOGZjMjJlZTIwNjZlMmNlMGUxYmFhZjlkODZlZC4uYTEw
OGE2MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0zMSwxNCArMzEs
MTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmluZSBXZWJQYWdlU2VyaWFs
aXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ1N0
cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBj
bGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJWaWV3OwogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiArNDYsMjMgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4gYWxsIHJl
c291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3MgV2ViUGFnZVNlcmlhbGl6
ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIFdlYlVSTCB1cmw7
CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJpbmcgZGF0YTsK
KyAgICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSBXZWJW
aWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNlcyAoc3VjaCBhcyBpbWFn
ZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAgICAvLyBU
aGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBjb250ZW50
cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0YWcg
b3IgbGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2VyaWFs
aXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJTVBPUlRBTlQ6
CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBhIHBh
Z2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KKworCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6
ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVt
cG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCiAgICAgLy8gc2VxdWVu
dGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBidWZmZXIg
aXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8vIHNhdmVkIGxpbmtzLCB3
aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCiAgICAgLy8gVGhlIHBh
cmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkg
d2hpY2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQg
YWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29s
IHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBz
ZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCiAg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJh
dGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RX
IGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1h
cmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJLSVRfQVBJ
IHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBX
ZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNsYXJhdGlv
bi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFnRGVjbGFy
YXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzhjNzUyOTdmNDJk
NzhiODlmZTcwZGQ5Zjk0MDAxMzM3ZjlmY2U5OS4uMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRlZDE0MDA4
NGM2YjVjZjczMWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBh
Z2VTZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUg
IldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIKICNp
bmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2Vi
Vmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAK
QEAgLTE3OSw2ICsxODEsMjUgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1l
KiBmcmFtZSwKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIoJnJlc291
cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwq
Pih2aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4gcmVzdWx0OworICAgIGZv
ciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2UudXJsID0gaXRlci0+
dXJsOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1pbWVUeXBlLmFzY2lpKCk7
CisgICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIHJlc291cmNlIGRhdGEg
aGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAgICAgIHJl
c291cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEoKSwgaXRlci0+ZGF0YS0+
c2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7CisgICAgfQorCisgICAg
KnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBib29sIFdlYlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjRiMGRhY2ViZjMwMmY3YzY0YzA2NGY5ZDNhYTg3NGVmZjI0NmYyNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1Nl
cmlhbGl6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgor
I2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVS
TFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJs
L3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
c3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitu
YW1lc3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVD
bGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFi
bGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBi
b29sIC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9
CisgICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBXZWJQYWdlTmV3U2VyaWFs
aXplVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdlTmV3
U2VyaWFsaXplVGVzdCgpCisgICAgICAgIDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9t
VVRGOCgidGV4dC9odG1sIikpCisgICAgICAgICwgbV94aHRtbE1pbWVUeXBlKFdlYlN0cmluZzo6
ZnJvbVVURjgoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKQorICAgICAgICAsIG1fY3NzTWltZVR5
cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAgICAgICAgLCBtX3BuZ01pbWVU
eXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQorICAgIHsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3Jl
YXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJW
aWV3OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgaW1hZ2VzIHRvIGxvYWQu
CisgICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmlldy0+c2V0dGluZ3MoKTsK
KyAgICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHNldHRp
bmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisKKyAgICAgICAgbV93ZWJW
aWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVy
bCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkK
KyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25z
ZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgc3RkOjpz
dHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0Zjgo
KTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5h
bWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVy
bCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAg
IFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXpl
KCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93
ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8v
IE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgICAgIC8v
IFNvbWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIuCisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgLy8gU2VydmVyIHRo
ZSBkZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNo
cm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAg
ICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1h
aW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21V
VEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2ViU3RyaW5nJiBodG1sTWlt
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0
cmluZyYgeGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1feGh0bWxNaW1lVHlwZTsgfQor
ICAgIGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc01p
bWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+JiBy
ZXNvdXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJV
Ukwgd2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAgICAgICAg
ICAgaWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNlLmRhdGEuaXNFbXB0eSgp
ICYmICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcobWltZVR5cGUpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKworcHJpdmF0ZToKKyAg
ICBXZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1feGh0bWxNaW1lVHlw
ZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9wbmdNaW1l
VHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307CisKKy8v
IFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2VzIGFuZCBzdWItZnJhbWUgaXMgcmVwb3J0
ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KKy8vIEZJWE1FOiByZWVuYWJsZSB0aGVzZSB0ZXN0
cyBvbmNlIHRoZSBDaHJvbWl1bSBwYXJ0IG9mIHRoZSB0ZXN0X3dlYmtpdF9jbGllbnQgaGF2ZSBs
YW5kZWQuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1BhZ2VXaXRo
RnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVS
TCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFt
ZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJpZnJhbWUuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoImlmcmFtZTIuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5n
IiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNv
bS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNr
Z3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAg
ICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFn
ZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNv
dXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxk
IGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJj
ZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJs
ID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291
cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDYsIHJl
c291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9i
bHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1l
Lmh0bWwiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiLCAidGV4
dC9odG1sIikpOworfQorCisvLyBUZXN0IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBhZ2UsIGFs
bCBDU1MgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCwgaW5jbHVkaW5nIHVybCgpJ3MKKy8vIGFuZCBp
bXBvcnRzIGFuZCBsaW5rcy4gTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgdGhlIHJlc291cmNlcyBj
b250ZW50cywgd2Ugb25seSBtYWtlIHN1cmUKKy8vIHRoZXkgYXJlIGFsbCByZXBvcnRlZCB3aXRo
IHRoZSByaWdodCBtaW1lIHR5cGUgYW5kIHRoYXQgdGhleSBjb250YWluIHNvbWUgZGF0YS4KK1RF
U1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQ1NTUmVzb3VyY2VzKQorewor
ICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJM
IHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3Rf
cGFnZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgibGlua19zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9t
X2xpbmsuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZV9mcm9tX2xpbmsu
Y3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVU
RjgoImltcG9ydF9zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUo
KSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
b3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNr
Z3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgieWVsbG93X2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVu
X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQu
cG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3Vu
ZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicHVycGxlX2JhY2tncm91bmQucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL3VsLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidWwtZG90LnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9sLWRvdC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRv
cEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxX
ZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNF
KHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBz
aG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
cmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAg
IEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEo
MTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4K
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlX2Zyb21fbGluay5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUo
cmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Jl
ZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNr
Z3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91
bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBu
ZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikp
OworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKK30KKworLy8gVGVz
dHMgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSB3aXRoIGJsYW5rIGZyYW1lcyB0aGVzZSBh
cmUgcmVwb3J0ZWQgd2l0aCB0aGVpciByZXNvdXJjZXMuCitURVNUX0YoV2ViUGFnZU5ld1Nlcmlh
bGl6ZVRlc3QsIERJU0FCTEVEX0JsYW5rRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBt
b2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFt
ZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJhbWVzLmh0bWwiKSwgaHRtbE1pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dy
b3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAg
ICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2Jh
Y2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmci
KSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZy
YW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJl
c291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91
bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51
cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVz
b3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVY
UEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNywg
cmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICAvLyBUaGUgYmxhbmsg
ZnJhbWVzIHNob3VsZCBoYXZlIGdvdCBhIG1hZ2ljIFVSTC4KKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8wIiwgInRleHQv
aHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgInd5Y2l3eWc6Ly9mcmFtZS8xIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8yIiwgInRl
eHQvaHRtbCIpKTsKK30KKworVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxF
RF9TZXJpYWxpemVYTUxIYXNSaWdodERlY2xhcmF0aW9uKQoreworICAgIFdlYlVSTCB0b3BGcmFt
ZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vc2ltcGxlLnhodG1sIik7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1w
bGUueGh0bWwiKSwgeGh0bWxNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRv
cEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+
IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywg
JnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAg
IAorICAgIC8vIFdlIGV4cGVjdCBvbmx5IG9uZSByZXNvdXJjZSwgdGhlIFhNTC4KKyAgICBBU1NF
UlRfRVEoMSwgcmVzb3VyY2VzLnNpemUoKSk7CisgICAgc3RkOjpzdHJpbmcgeG1sID0gcmVzb3Vy
Y2VzWzBdLmRhdGE7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgYW5kIG9ubHkgb25lIGlu
c3RhbmNlIG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCisgICAgc2l6ZV90IHBvcyA9IHhtbC5maW5k
KCI8P3htbCB2ZXJzaW9uPSIpOworICAgIEFTU0VSVF9UUlVFKHBvcyAhPSBzdGQ6OnN0cmluZzo6
bnBvcyk7CisKKyAgICBwb3MgPSB4bWwuZmluZCgiPD94bWwgdmVyc2lvbj0iLCBwb3MgKyAxKTsK
KyAgICBBU1NFUlRfVFJVRShwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
YmxhbmtfZnJhbWVzLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRmYjIwNDk5YzQzMjYz
Y2I1YzI0NmZlN2UxOTI1NDQyY2Q3MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApA
QCAtMCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gb25sb2FkKCkg
eworICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAg
IHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYxIik7CisgICAgZGl2LmFw
cGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVy
SFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nYmx1ZV9iYWNr
Z3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAg
ZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0
PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBt
b3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJh
bWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYzIik7CisgICAg
ZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5
LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nb3Jh
bmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICB9Cisg
IAorPC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorICBUaGlzIHBhZ2UgY3Jl
YXRlcyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQgdG8gdGhlbSBkeW5hbWljYWxseS48
YnI+PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjIiPjwv
ZGl2PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
Y3NzX3Rlc3RfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDYzN2YwZjAyMmQ3
NTljMGFkYzlkMjAxYmNmNDMxNjE0NmJkMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRt
bApAQCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVzZWQgdG8g
dGVzdCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkgdGhlCisg
ICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+CisKKzxo
ZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5r
X3N0eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNz
cycpOworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1
cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkg
Zm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVu
a2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7Cisg
IGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsK
KyAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlz
dC1zdHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3Jp
cHQ+CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25Mb2Fk
KCkgeworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJs
KCdwdXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVO
b2RlLm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KKworPCEt
LSBUZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYn
PlRoaXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBp
cyBpbiBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSBy
ZWQgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBh
IGZpbGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3Jhbmdl
Jz4KK1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2
PgorCis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZ
ZWxsb3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgor
PC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhl
IGhlYWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFn
ZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+
Cis8ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9i
YWNrZ3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNr
Z3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdp
dGggSmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJw
bGUnPgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+
UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVu
PC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgor
PG9sPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4K
KyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+
CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY1ZWRiZGMxODkxY2YxYjZmOTY3YjdkMzc2MWUyMDczMGQ4MzllNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZy
YW1lLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iYmx1
ZV9iYWNrZ3JvdW5kLnBuZyIvPgorPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBuZyIvPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZk
MDQ0YjJlY2NiYjdmOWUzZjBiNWRmY2E4Njg4ZjJlZGZjZjk3OGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Mi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImdyZWVu
X2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVf
ZnJvbV9saW5rLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY4M2U1ODFmNDZlYjVlZWZiMzc2NDcxNDMwZThj
ZmIyZWE2YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCkBAIC0wLDAg
KzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFj
a2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0
X3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjN2Y0ZDVmNGE5OWM3YWU2ZTZj
MjU0YTg5NjNlNDJhOWE4NGJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpAQCAtMCww
ICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19i
YWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5r
X3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvbGlua19zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2N2ZiOTlhOWIwZGEwOWJlZTJjMjRl
YzgzNTVhMTdlNDMwN2E2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCkBAIC0wLDAgKzEs
NSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7CisKKyNkaXZS
ZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBuZycpOworfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVmMTJkZjYzNTY4NmM2ZjFjMWM1ZWRiNGJkZDU3MzUyM2Y4MDBhZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvc2ltcGxlLnhodG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1M
IDEuMCBTdHJpY3QvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwx
LXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiI+CisgPGhlYWQ+CisgPHRpdGxlPlhIVE1MIDEuMCBTdHJpY3QgRXhhbXBs
ZTwvdGl0bGU+CisgPC9oZWFkPgorIDxib2R5PgorICAgPHA+SGVsbG8hIDwvcD4KKyA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMxODUy
M2FmYTRhMWIwOTg2NWM0NDkyOGQzNGE3YzExZDJmNDAyZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUu
aHRtbApAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0icmVkX2Jh
Y2tncm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+Cis8
b2JqZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNyYz0iaWZyYW1l
Lmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91194</attachid>
            <date>2011-04-26 17:33:02 -0700</date>
            <delta_ts>2011-04-26 17:45:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426173301.patch</filename>
            <type>text/plain</type>
            <size>66053</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5MTcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwNzRjYzk4ZTM4OWJlNWUx
ODM5NTY0YzhkMjhlNWFkNjdjNTMwZjUzLi5kYWY4NTgwOTc1ZGEyNDgzZWYwZDU1YjJkZDEyNTdh
Mjg4YjM2OTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0OWZiYTFmYTk1
MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5ODVjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5j
ZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxYWM5ODY3ZmIyZmU2ZDBhYWQz
MzU4ZTAxODU1MjNmODYwZTM1MjE5Li4wOWM4NDQyNGMyZWE5NmIxNTgxZjQ1MTZmMzUyZTM4ZGY4
ZmU4MWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAgICAgICAgICAg
ICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAg
ICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRp
b25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdl
R3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAg
ICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1h
bmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAg
ICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNmQ4
ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4MDUzZmEwYWJj
MDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYgKzkzNSw3IEBA
IFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwLmNw
cCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBwYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAgIHBhZ2UvUGVy
Zm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAg
XApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9QYWdlR3JvdXAu
aCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFnZS9QYWdlLmgg
XAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXIuaCBc
CiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9QcmludENvbnRleHQu
aCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4
IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQxMDBhOWQyZmYy
MzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAogCQkJCVJlbGF0
aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuY3BwIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8
L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVyZm9ybWFuY2Uu
Y3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCAzNmQ2NTE5ZThlNjQ0ZmExNmE0N2M5ZWNhMTdmZWMwMjZiNzk5YWUx
Li44MGFlNjA1ZGM3YzdmY2UwMmEwYzFlMTM1N2M0NDNhYWM1MTJmZmUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDcsNiAr
ODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMENDRDMx
MTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkzM0QwMjEyRDEz
MURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tp
ZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdDQTExQzZDN0RC
MDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUNDMTM2NjFFREMw
MEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxp
emVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFF
NjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9OwogCQkzNzFG
NEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250
RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUg
LyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICov
OyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAwQ0UwNTdEIC8q
IFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0Mw
Q0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNGLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8q
IFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VT
ZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNEMTM2NjFF
RUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9u
dERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkRm9udERh
dGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0NDQwLDggQEAK
IAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2
NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJ
CQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICov
LAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8s
CisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJ
CQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAqLywKIAkJCQk4
QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJCQk4QTg0NEQw
MzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMwODEsNiArMjMw
ODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyog
SW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFFMTM2NUE0
RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CiAJCX07CkBAIC0yNTc5OCw2ICsyNTgwNSw3IEBACiAJCQkJMTRFMEJDNTYxMzYxNDhBODAw
MkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYz
ODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRyYW5zZmVySXRl
bXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5k
ZXggMzVmZTA5NmFjZDY2OTAzZTg2MTYzMTYyM2Q4ZjhiNDg2NDg2ZGM3MC4uNjUxODJmYjU2Nzkz
MWRmMTI2ZWE5NDVhNzBiOWFiYjVkMmZlZDMxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBA
IC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJp
bmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50OjpzdWdnZXN0
ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVu
dCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgaWYgKG1f
ZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1s
IjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICByZXR1cm4g
InRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAg
ICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXItPnJl
c3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUg
RE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcgaXQgcmVjZWl2
ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CiAv
LyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9u
IHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1YzkwMmI2YmIyMzJm
MmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2JlNDlmNTljYzVm
MDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHN1Z2dl
c3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5n
dWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYjZk
ODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgzNmJjODYzMTM1
M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBT
dHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRl
VmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQq
LCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVv
dGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcm
IHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMz
MSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFy
PiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVu
dCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwogCisgICAgLy8g
R2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmli
dXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwgbmFtZXNwYWNl
cyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAwNWJiZjQ0YjMw
YWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdiMjhmNDY5ZjU5
YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVs
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApA
QCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
YXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9k
ZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworICAg
IHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90
YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQogICAgIHZvaWQg
Y29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lkIGFwcGVuZEF0
dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1
dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZv
aWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoVmVjdG9y
PFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAg
ICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJv
b2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFj
ZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVS
SSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCog
dGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29u
c3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0
Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3Ry
aW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+
JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2lu
Z0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNv
bnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9y
PFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3Bl
blRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKTsK
LSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxl
bWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBh
cHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsK
KyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOwor
ICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNv
bnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlv
bihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBh
cHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1l
c3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAK
aW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4uNTQxMzQ2Njk5
Njk0YTkxYzhmM2YzYTBhNzFhZTMyOTU2ZDAyYjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xMDIsMTUgKzEw
MiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldChjb25z
dCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01l
dGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1
dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVz
OworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRh
dGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1
ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgICAgICBh
dHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUp
KTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMo
YXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQorCitUZXh0
RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRl
cyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290UHJhZ21h
ID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNldDsKIAot
ICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1fdG9rZW4u
YXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9p
dGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBhdHRy
aWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5h
bWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgIFN0
cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5z
aXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0
dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmlyc3Q7Cisg
ICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7CiAKICAg
ICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAgICAgICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlwZSIpKQpA
QCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NN
ZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1v
ZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IFRleHRF
bmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwotICAg
ICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290
UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFp
bGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVy
biBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNv
bmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBiZSBjaGVj
a2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVyLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApp
bmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4N2RmOWFk
Mjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4LDE2IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJldHVybiBt
X2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+
IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0IG5vdCBi
ZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1
dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxNZXRhQ2hh
cnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmluZyBleHRy
YWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJhY3RDaGFy
c2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9uZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYzYTRiNGY1NDg5
ZTk3ZjE2OTQyOGM4NTlhNzM5M2VkNGJhZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJI
VE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJz
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisj
aW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRl
ICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWlu
Z05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxF
bGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1l
dGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
OjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRy
aWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRy
aWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUg
aWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtl
X3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3RyaW5nKCkpKTsK
KyAgICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBh
cnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJu
IHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6
Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKK30KKwor
c3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNv
bnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBwbGV0cy4KKyAg
ICByZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSA/IEhU
TUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2NsYXNzIFNlcmlh
bGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRv
ciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxp
emVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Cisg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0
LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWco
Tm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7Cisg
ICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0
b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXpl
ciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1
cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6ZXIoc2Vy
aWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8gTWFya3VwQWNj
dW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRk
IGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVk
LgorICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54
bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICBh
cHBlbmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9jdW1lbnQtPnht
bFZlcnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI/
PiIpKTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6
OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAgIEVsZW1l
bnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFz
aG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwg
TmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQo
ZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwg
ZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0cmluZygiPG1l
dGEgY2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOworICAgICAgICBv
dXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNv
dWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgor
fQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5h
bWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9
IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgp
OworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0
byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFsaXpl
ZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJhbWUp
OworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKGZy
YW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKTsKKyAg
ICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsK
K30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2Rl
KiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9y
ZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFw
cGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJj
ZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
ZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIGRh
dGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291cmNlcyhy
ZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3ZvaWQgUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6ZUZyYW1l
KHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXpl
RnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5k
b2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICghdXJs
LmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAvLyBGb3Ig
YmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUgcmVmZXJl
bmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxGb3JCbGFu
a0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMo
dXJsKSkgeworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGF2ZSAyIGZyYW1lIHdpdGggdGhl
IHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhhdmUgbm93
CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFsaXplIGJv
dGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5pbmcKKyAg
ICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3Rv
cjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxh
dG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2Rp
bmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NFUlQodGV4dEVu
Y29kaW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxp
emVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKKyAg
ICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJz
KCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX3Jlc291
cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCks
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgo
KSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVjdG9yPE5v
ZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMuZW5kKCk7
ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghbm9k
ZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBw
cm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291cmNlcyAo
dHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNG
b3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBpZiAoZWxlbWVu
dC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihl
bGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGlt
YWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAg
ICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgp
OworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAg
ICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykp
IHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNo
ZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1
bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6Omhy
ZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNf
Y2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VS
VChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7Cisg
ICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVl
dCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVl
dC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVT
aGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUo
KS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9
CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1aWxkZXIg
Y3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkp
OworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlm
ICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVt
VGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAg
ICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAg
IC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3
ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsK
KyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAg
ICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0
UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0t
PmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBm
b3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlm
IHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVk
IGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRl
bS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVs
ZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVy
bC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVj
aWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRFbmNvZGlu
ZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAg
ICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBTdHJpbmcgdGV4
dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4
dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0cmluZy5sZW5n
dGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291cmNlcy0+YXBw
ZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6OmNyZWF0
ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJjZVVSTHMu
YWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVz
b3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICgh
dXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxs
SW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gaW1hZ2Ut
PnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNl
KHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJj
ZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2ZVJlc291cmNl
c0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxp
emVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+
aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2hlZXQq
IGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJh
dGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdlIGFuZCBs
aXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRpZXMKKyAg
ICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1cmUgd2Ug
aW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1pZ2h0IGJl
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1bG91cyB0byBn
ZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRoZSB2YWx1ZSBv
dXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhl
CisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdp
dmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElEcy4KKyAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3Bl
cnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAgIGlmICghY3Nz
VmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Q1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihj
c3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZh
bHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdl
cyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAg
ICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IHN0YXRpY19j
YXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsKKworICAg
ICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGlt
YWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVybCk7Cisg
ICAgfQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBm
cmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2Js
YW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVS
THMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9
IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJh
bWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOwor
ICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJldHVybiBm
YWtlVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJp
YWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZmZmOGRjMTg3MzQwYWUyNTRkNDE2YzM3MTljZTcyNTE4ZjBjYmVkMgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDkw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9oCisK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENT
U1N0eWxlUnVsZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBGcmFtZTsKK2NsYXNzIFBh
Z2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzZXJpYWxpemUgYSBwYWdlIGNvbnRlbnRz
IGJhY2sgdG8gdGV4dCAodHlwaWNhbGx5IEhUTUwpLgorLy8gSXQgc2VyaWFsaXplcyBhbGwgdGhl
IHBhZ2UgZnJhbWVzIGFuZCByZXRyaWV2ZXMgcmVzb3VyY2VzIHN1Y2ggYXMgaW1hZ2VzIGFuZCBD
U1Mgc3R5bGVzaGVldHMuCitjbGFzcyBQYWdlU2VyaWFsaXplciB7CitwdWJsaWM6CisgICAgc3Ry
dWN0IFJlc291cmNlIHsKKyAgICAgICAgS1VSTCB1cmw7CisgICAgICAgIFN0cmluZyBtaW1lVHlw
ZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICAgICAgUmVzb3VyY2Uo
KTsKKyAgICAgICAgUmVzb3VyY2UoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKTsKKyAgICB9OworCisgICAgZXhwbGljaXQg
UGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFJlc291cmNlPiopOworCisgICAgLy8gSW5pdGlhdGVzIHRo
ZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBmcmFtZSdzIHBhZ2UuIEFsbCBzZXJpYWxpemVkIGNvbnRl
bnQgYW5kIHJldHJpZXZlZAorICAgIC8vIHJlc291cmNlcyBhcmUgYWRkZWQgdG8gdGhlIFZlY3Rv
ciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdAor
ICAgIC8vIHZlY3RvciBpcyB0aGUgdG9wIGZyYW1lIHNlcmlhbGl6ZWQgY29udGVudC4KKyAgICB2
b2lkIHNlcmlhbGl6ZShQYWdlKik7CisKKyAgICBLVVJMIHVybEZvckJsYW5rRnJhbWUoRnJhbWUq
KTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlcmlhbGl6ZUZyYW1lKEZyYW1lKik7CisKKyAgICAv
LyBTZXJpYWxpemVzIHRoZSBzdHlsZXNoZWV0IGJhY2sgdG8gdGV4dCBhbmQgYWRkcyBpdCB0byB0
aGUgcmVzb3VyY2VzIGlmIFVSTCBpcyBub3QtZW1wdHkuCisgICAgLy8gSXQgYWxzbyBhZGRzIGFu
eSByZXNvdXJjZXMgaW5jbHVkZWQgaW4gdGhhdCBzdHlsZXNoZWV0IChpbmNsdWRpbmcgYW55IGlt
cG9ydGVkIHN0eWxlc2hlZXRzIGFuZCB0aGVpciBvd24gcmVzb3VyY2VzKS4KKyAgICB2b2lkIHNl
cmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwmKTsKKworICAg
IHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIGNvbnN0IEtVUkwmKTsKKyAg
ICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNsYXJh
dGlvbiopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVs
ZSopOworCisgICAgVmVjdG9yPFJlc291cmNlPiogbV9yZXNvdXJjZXM7CisgICAgTGlzdEhhc2hT
ZXQ8S1VSTD4gbV9yZXNvdXJjZVVSTHM7CisgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+IG1fYmxh
bmtGcmFtZVVSTHM7CisgICAgdW5zaWduZWQgbV9ibGFua0ZyYW1lQ291bnRlcjsKK307CisKK30K
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDhmZTk3NmU2YjJkYmJlZDMw
YTk5NGI3MzQxMzBmMTA1ZWIzMDk0NmIuLjEzZWNhMjQyNWNjMDRlZDhjNzBiNzVkYzlmNGM3MGU4
NmRmMDZmNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIw
MTEtMDQtMjUgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3
IEFQSSB0byBzZXJpYWxpemUgYSBXZWJWaWV3IGJhY2sgdG8gSFRNTC4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBXZWJL
aXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAq
IHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAqIHRlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVy
VGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXI6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNr
Z3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9j
c3NfdGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAg
ICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3QucG5nOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5k
LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVf
YmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvcmVkX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL3NpbXBsZS54aHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci90b3BfZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci91bC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisKIDIwMTEtMDQtMjYg
IFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4
IDJhMjAzNDljZDE2ODVjYzNiY2NiNzczZjMwODkxMDA1MDY3MTBhMjAuLmU0YjRiY2JiMjNjOWQx
ZGE1MDc5NWVjM2YzMWEyNmI2NWMxZGM5MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
QEAgLTg0OCw2ICs4NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvUG9wdXBNZW51VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRl
c3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAg
ICAgICAgICAgfV0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9X
ZWJQYWdlU2VyaWFsaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFn
ZVNlcmlhbGl6ZXIuaAppbmRleCBiNGQ1NzE1MzVhYWI4ZmMyMmVlMjA2NmUyY2UwZTFiYWFmOWQ4
NmVkLi5hMTA4YTYyYzA2ZTQzY2FjOGExMWZkMzU0Y2MyNDViNjdkZjUwOGMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKQEAgLTMx
LDE0ICszMSwxNCBAQAogI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCiAjZGVmaW5lIFdlYlBh
Z2VTZXJpYWxpemVyX2gKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJD
b21tb24uaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFz
cyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNs
aWVudDsKIGNsYXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlZpZXc7CiB0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCkBAIC00Niw2ICs0NiwyMyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogLy8gd2hpY2ggY29udGFp
biBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCiBjbGFzcyBXZWJQYWdl
U2VyaWFsaXplciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgV2Vi
VVJMIHVybDsKKyAgICAgICAgV2ViQ1N0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgV2ViQ1N0cmlu
ZyBkYXRhOworICAgIH07CisKKyAgICAvLyBTZXJpYWxpemVzIGFsbCB0aGUgZnJhbWVzIGZyb20g
dGhlIFdlYlZpZXcsIHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgLy8gcmVzb3VyY2VzIChzdWNo
IGFzIGltYWdlcyBhbmQgQ1NTKSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBwYXNzZWQgdmVjdG9yLgor
ICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0IHZlY3RvciBpcyB0aGUgdG9wIGZyYW1l
IGNvbnRlbnRzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3RyaXBzLW91dCBhbnkgc2Ny
aXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgdm9p
ZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIElN
UE9SVEFOVDoKKyAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVyIGltcGxlbWVudGF0aW9u
IG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAorICAgIC8vIHdpbGwgYmUgcmVtb3ZlZCBzb29u
LgorCisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZyYW1lcyBhbmQg
c2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgogICAgIC8vIFdlIGhhdmUgYSBkYXRhIGJ1ZmZl
ciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdpbGwKICAgICAv
LyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJQYWdlU2VyaWF6bGllckNsaWVudCBvbmNlIHRoZSBkYXRh
IGJ1ZmZlciBpcyBmdWxsLgpAQCAtNjQsOSArODEsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2F2ZWQg
bGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4KICAgICAv
LyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRp
cmVjdG9yeSB3aGljaAogICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBp
bmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgotICAgIFdFQktJVF9BUEkgc3Rh
dGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICBXRUJLSVRfQVBJIHN0YXRp
YyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZWN1cnNpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxX
ZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKQEAgLTg1LDcgKzEwMiw3
IEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJh
dGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNl
dERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CiAgICAgLy8gR2VuZXJhdGUg
dGhlIE1PVFcgZGVjbGFyYXRpb24uCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdl
bmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwpOworICAgIFdF
QktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9u
KGNvbnN0IFdlYlVSTCYpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJhc2UgdGFnIGRl
Y2xhcmF0aW9uLgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VU
YWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBjOGM3
NTI5N2Y0MmQ3OGI4OWZlNzBkZDlmOTQwMDEzMzdmOWZjZTk5Li4yMzJlMjExNjAxNTljODg2ZDhl
NGVkMTQwMDg0YzZiNWNmNzMxZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCiAj
aW5jbHVkZSAiV2ViQ1N0cmluZy5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgIldlYlVS
TC5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNs
dWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KIApAQCAtMTc5LDYgKzE4MSwyNSBAQCB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJh
bWUoRnJhbWUqIGZyYW1lLAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordm9pZCBXZWJQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFs
aXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXNQYXJhbSkKK3sKKyAgICBWZWN0b3I8UGFnZVNlcmlh
bGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgc2VyaWFsaXpl
cigmcmVzb3VyY2VzKTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6ZShzdGF0aWNfY2FzdDxXZWJW
aWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkpOworCisgICAgVmVjdG9yPFJlc291cmNlPiByZXN1bHQ7
CisgICAgZm9yIChWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPjo6Y29uc3RfaXRlcmF0
b3IgaXRlciA9IHJlc291cmNlcy5iZWdpbigpOyBpdGVyICE9IHJlc291cmNlcy5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgIFJlc291cmNlIHJlc291cmNlOworICAgICAgICByZXNvdXJjZS51cmwg
PSBpdGVyLT51cmw7CisgICAgICAgIHJlc291cmNlLm1pbWVUeXBlID0gaXRlci0+bWltZVR5cGUu
YXNjaWkoKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgcmVzb3Vy
Y2UgZGF0YSBoZXJlLiBJZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAg
ICAgICAgcmVzb3VyY2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+ZGF0YS0+ZGF0YSgpLCBpdGVy
LT5kYXRhLT5zaXplKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlc291cmNlKTsKKyAgICB9
CisKKyAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAgICAgCit9CisKIGJvb2wgV2Vi
UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0
LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIwZGFjZWJmMzAyZjdjNjRjMDY0ZjlkM2FhODc0ZWZmMjQ2
ZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQ
YWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5o
IgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291
cmNlLmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIK
KyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVk
ZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxn
b29nbGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUg
PHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBX
ZWJGcmFtZUNsaWVudCB7CitwdWJsaWM6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3Nj
cmlwdEVuYWJsZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJG
cmFtZSosIGJvb2wgLyogZW5hYmxlZFBlclNldHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVu
YWJsZWQ7IH0KKyAgICBib29sIG1fc2NyaXB0RW5hYmxlZDsKK307CisKK2NsYXNzIFdlYlBhZ2VO
ZXdTZXJpYWxpemVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdl
YlBhZ2VOZXdTZXJpYWxpemVUZXN0KCkKKyAgICAgICAgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJp
bmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSkKKyAgICAgICAgLCBtX3hodG1sTWltZVR5cGUoV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veGh0bWwreG1sIikpCisgICAgICAgICwgbV9j
c3NNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2NzcyIpKQorICAgICAgICAsIG1f
cG5nTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1hZ2UvcG5nIikpCisgICAgeworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAg
ICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmll
dyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKKworICAgICAgICAvLyBXZSB3YW50IHRoZSBpbWFnZXMg
dG8gbG9hZC4KKyAgICAgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbV93ZWJWaWV3LT5zZXR0
aW5ncygpOworICAgICAgICBzZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKKyAgICAg
ICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKworICAgICAg
ICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAg
IH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRf
c3VwcG9ydDo6VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5j
bG9zZSgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdl
YlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBXZWJTdHJpbmcmIG1p
bWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAg
IHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUobWlt
ZVR5cGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgICAg
ICBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGly
KCkudXRmOCgpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVu
ZChmaWxlTmFtZS51dGY4KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2Nr
ZWRVUkwodXJsLCByZXNwb25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAg
IH0KKworICAgIHZvaWQgbG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsK
KyAgICAgICAgV2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0Lmlu
aXRpYWxpemUoKTsKKyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAg
ICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAg
ICAgICAgLy8gTWFrZSBzdXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAg
ICAgICAgLy8gU29tZSByZXF1ZXN0cyBnZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1lci4KKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICAvLyBT
ZXJ2ZXIgdGhlIGRlbGF5ZWQgcmVzb3VyY2VzLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2Vy
dmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxl
SlMoKQorICAgIHsKKyAgICAgICAgbV93ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVuYWJsZWQgPSB0
cnVlOworICAgIH0KKworICAgIHZvaWQgcnVuT25Mb2FkKCkKKyAgICB7CisgICAgICAgIG1fd2Vi
Vmlldy0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmlu
Zzo6ZnJvbVVURjgoIm9uTG9hZCgpIikpKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTdHJpbmcm
IGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9CisgICAgY29u
c3QgV2ViU3RyaW5nJiB4aHRtbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV94aHRtbE1pbWVU
eXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBjc3NNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3NzTWltZVR5cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIHBuZ01pbWVUeXBlKCkgY29u
c3QgeyByZXR1cm4gbV9wbmdNaW1lVHlwZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIHJlc291
cmNlVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNv
dXJjZT4mIHJlc291cmNlcywgY2hhciogdXJsLCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAg
ICAgIFdlYlVSTCB3ZWJVUkwgPSBXZWJVUkwoR1VSTCh1cmwpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCByZXNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0
IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07Cisg
ICAgICAgICAgICBpZiAocmVzb3VyY2UudXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5p
c0VtcHR5KCkgJiYgIXJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlw
ZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2
YXRlOgorICAgIFdlYlN0cmluZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV94aHRt
bE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX2Nzc01pbWVUeXBlOworICAgIFdlYlN0cmluZyBt
X3BuZ01pbWVUeXBlOworICAgIFRlc3RXZWJGcmFtZUNsaWVudCBtX3dlYkZyYW1lQ2xpZW50Owor
fTsKKworLy8gVGVzdHMgdGhhdCBhIHBhZ2Ugd2l0aCByZXNvdXJjZXMgYW5kIHN1Yi1mcmFtZSBp
cyByZXBvcnRlZCB3aXRoIGFsbCBpdHMgcmVzb3VyY2VzLgorLy8gRklYTUU6IHJlZW5hYmxlIHRo
ZXNlIHRlc3RzIG9uY2UgdGhlIENocm9taXVtIHBhcnQgb2YgdGhlIHRlc3Rfd2Via2l0X2NsaWVu
dCBoYXZlIGxhbmRlZC4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURf
UGFnZVdpdGhGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZXMuCisg
ICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
dG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoImlmcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1v
Y2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lMi5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dy
b3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdy
ZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3Rv
cjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZB
TFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJj
ZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6
OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOwor
ICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoNiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVz
LgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9pZnJhbWUuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRt
bCIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKKy8vIFRlc3QgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEg
cGFnZSwgYWxsIENTUyByZXNvdXJjZXMgYXJlIHJlcG9ydGVkLCBpbmNsdWRpbmcgdXJsKCkncwor
Ly8gYW5kIGltcG9ydHMgYW5kIGxpbmtzLiBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCB0aGUgcmVz
b3VyY2VzIGNvbnRlbnRzLCB3ZSBvbmx5IG1ha2Ugc3VyZQorLy8gdGhleSBhcmUgYWxsIHJlcG9y
dGVkIHdpdGggdGhlIHJpZ2h0IG1pbWUgdHlwZSBhbmQgdGhhdCB0aGV5IGNvbnRhaW4gc29tZSBk
YXRhLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxFRF9DU1NSZXNvdXJj
ZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAg
ICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJj
c3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0
eWxlX2Zyb21fbGluay5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zy
b21fbGluay5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3Jh
bmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFj
a2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9i
YWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJwdXJwbGVfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ1bC1k
b3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
b2wtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9h
ZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2Vi
VmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NF
UlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJl
c291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFs
aXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVD
VF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIp
KSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVY
UEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBs
aWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7Cisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBF
Q1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVz
dC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
b3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20veWVs
bG93X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5f
YmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tn
cm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91
bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIsICJpbWFn
ZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOworfQor
CisvLyBUZXN0cyB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlIHdpdGggYmxhbmsgZnJhbWVz
IHRoZXNlIGFyZSByZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291cmNlcy4KK1RFU1RfRihXZWJQYWdl
TmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQmxhbmtGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0
ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwg
PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibGFua19mcmFtZXMuaHRtbCIpLCBo
dG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJl
ZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBl
KCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
L2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVS
TEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVj
dG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VT
ZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRf
RkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291
cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXpl
cjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJl
c291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9F
USgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVD
VF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0
ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJo
dHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAg
RVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3
LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIC8vIFRo
ZSBibGFuayBmcmFtZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJMLgorICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzAi
LCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzEiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1l
LzIiLCAidGV4dC9odG1sIikpOworfQorCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3Qs
IERJU0FCTEVEX1NlcmlhbGl6ZVhNTEhhc1JpZ2h0RGVjbGFyYXRpb24pCit7CisgICAgV2ViVVJM
IHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGUueGh0bWwiKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVU
RjgoInNpbXBsZS54aHRtbCIpLCB4aHRtbE1pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9w
RnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93
ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHko
KSk7CisgICAgCisgICAgLy8gV2UgZXhwZWN0IG9ubHkgb25lIHJlc291cmNlLCB0aGUgWE1MLgor
ICAgIEFTU0VSVF9FUSgxLCByZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnN0cmluZyB4bWwg
PSByZXNvdXJjZXNbMF0uZGF0YTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSBhbmQgb25s
eSBvbmUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KKyAgICBzaXplX3QgcG9zID0g
eG1sLmZpbmQoIjw/eG1sIHZlcnNpb249Iik7CisgICAgQVNTRVJUX1RSVUUocG9zICE9IHN0ZDo6
c3RyaW5nOjpucG9zKTsKKworICAgIHBvcyA9IHhtbC5maW5kKCI8P3htbCB2ZXJzaW9uPSIsIHBv
cyArIDEpOworICAgIEFTU0VSVF9UUlVFKHBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7Cit9CisK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9ibGFua19mcmFtZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGZiMjA0
OTljNDMyNjNjYjVjMjQ2ZmU3ZTE5MjU0NDJjZDcxNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1l
cy5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBv
bmxvYWQoKSB7CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1l
Iik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjEiKTsKKyAg
ICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJv
ZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdi
bHVlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICAgIGZy
YW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MiIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7
CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJT
b21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBuZycuPjxicj48
Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjMi
KTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3Vt
ZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcg
c3JjPSdvcmFuZ2VfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+Igor
CisgIH0KKyAgCis8L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CisgIFRoaXMg
cGFnZSBjcmVhdGVzIGVtcHR5IGlmcmFtZXMgYW5kIGFkZHMgY29udGVudCB0byB0aGVtIGR5bmFt
aWNhbGx5Ljxicj48YnI+CisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+CisgIDxkaXYgaWQ9Im15
RGl2MiI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MyI+PC9kaXY+Cis8L2JvZHk+CisKKzwvaHRt
bD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NjM3
ZjBmMDIyZDc1OWMwYWRjOWQyMDFiY2Y0MzE2MTQ2YmQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3Rf
cGFnZS5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMg
dXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBi
eSB0aGUKKyAgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlU25hcHNob3QgbWV0aG9kCist
LT4KKworPGhlYWQ+CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Imxpbmtfc3R5bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9ydCB1cmwoJ2ltcG9ydF9z
dHlsZXMuY3NzJyk7CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlOwor
ICBzcmM6IHVybCgnQ2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLXdlYmZv
bnQuZW90KSBmb3JtYXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2IHsKKyAgZm9udC1mYW1p
bHk6IENodW5rZml2ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisKKzxzdHlsZT4KKyNkaXZC
bHVlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5wbmcnKTsKK30K
KwordWwgeworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsKK30KKworb2wg
eworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsKK30KKworPC9zdHlsZT4K
KworPHNjcmlwdD4KKy8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUuCitmdW5jdGlv
biBvbkxvYWQoKSB7CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFja2dyb3VuZC1p
bWFnZTp1cmwoJ3B1cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZhciBkaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHlsZU5vZGU9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBlPSAndGV4dC9jc3MnOwor
ICBzdHlsZU5vZGUubWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRDaGlsZChzdHls
ZU5vZGUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25Mb2FkKCki
PgorCis8IS0tIFRleHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYgaWQ9J2NodW5r
Zml2ZURpdic+VGhpcyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250LjwvZGl2PgorCis8IS0t
IFN0eWxlIGlzIGluIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2UmVkJz4KK1RoaXMgZGl2
IGhhcyBhIHJlZCBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxl
IGlzIGluIGEgZmlsZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdk
aXZPcmFuZ2UnPgorVGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5k
LgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4KKzxkaXYg
aWQ9J2RpdlllbGxvdyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMgaXRzIGJhY2tn
cm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5bGUgc2VjdGlv
biBpbiB0aGUgaGVhZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRpdiBoYXMgYSBi
bHVlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW5s
aW5lZCAtLT4KKzxkaXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwo
J2dyZWVuX2JhY2tncm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMg
aXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBnZW5l
cmF0ZWQgd2l0aCBKYXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4KKzxkaXYgaWQ9
J2RpdlB1cnBsZSc+CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRzIGJhY2tncm91
bmQuCis8L2Rpdj4KKworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgorICA8bGk+Qmx1ZTwvbGk+
CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8
bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+CisKK09yZGVyZWQgbGlz
dDo8YnI+Cis8b2w+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxs
b3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xp
PgorPC9vbD4KKworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjVlZGJkYzE4OTFjZjFiNmY5NjdiN2QzNzYxZTIwNzMwZDgzOWU2YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9pZnJhbWUuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcg
c3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91bmQucG5n
Ii8+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNmQwNDRiMmVjY2JiN2Y5ZTNmMGI1ZGZjYTg2ODhmMmVkZmNmOTc4ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9pZnJhbWUyLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNy
Yz0iZ3JlZW5fYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5n
Ii8+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3Nz
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjgzZTU4MWY0NmViNWVlZmIzNzY0
NzE0MzBlOGNmYjJlYTZiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MK
QEAgLTAsMCArMSwzIEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29y
YW5nZV9iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9pbXBvcnRfc3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGM3ZjRkNWY0YTk5
YzdhZTZlNmMyNTRhODk2M2U0MmE5YTg0YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3Nz
CkBAIC0wLDAgKzEsMyBAQAorI2RpdlllbGxvdyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgn
eWVsbG93X2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2xpbmtfc3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZmI5OWE5YjBkYTA5
YmVlMmMyNGVjODM1NWExN2U0MzA3YTYyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKQEAg
LTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MnKTsK
KworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91bmQucG5n
Jyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNWYxMmRmNjM1Njg2YzZmMWMxYzVlZGI0YmRkNTczNTIzZjgwMGFmZgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci9zaW1wbGUueGh0bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9E
VEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RU
RC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKyA8aGVhZD4KKyA8dGl0bGU+WEhUTUwgMS4wIFN0cmlj
dCBFeGFtcGxlPC90aXRsZT4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8cD5IZWxsbyEgPC9wPgor
IDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMzE4NTIzYWZhNGExYjA5ODY1YzQ0OTI4ZDM0YTdjMTFkMmY0MDJlCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3Rv
cF9mcmFtZS5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3Jj
PSJyZWRfYmFja2dyb3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lm
cmFtZT4KKzxvYmplY3QgZGF0YT0iaWZyYW1lMi5odG1sIj48L29iamVjdD4KKzxpZnJhbWUgc3Jj
PSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91196</attachid>
            <date>2011-04-26 17:45:10 -0700</date>
            <delta_ts>2011-04-26 23:00:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58947-20110426174509.patch</filename>
            <type>text/plain</type>
            <size>65984</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYWFjMDA1ZjA4ZTA2NjZk
NTM1ZWRiNTViNmE5Nzg3Yzk2MDVjMWQyLi4zYjFhYmE1N2VkNjRhMzQyYmJlNTRmMjBmOTk5OWU0
YTdlZTFmMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIENodW4tTHVuZyBIdWFuZyAgPGFsdmlu
Y2wuaHVhbmdAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0
OWZiYTFmYTk1MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5
ODVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjYmQ2Y2JmMWRk
YzI4YTM2NTFiNjcwMzUzMjg1ZDgzZGViYzc0MjBjLi42ODcyMWU0Y2M2YWVkNjIyOGRiNmE5NGNi
ODZlODRlYzU1NDFjMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAg
ICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcs
CiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvUG9zaXRpb25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAn
cGFnZS9QYWdlR3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAor
ICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdl
L1BlcmZvcm1hbmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAg
ICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCAwNmQ4ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4
MDUzZmEwYWJjMDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYg
KzkzNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBw
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAg
IHBhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRp
bWluZy5jcHAgXApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9Q
YWdlR3JvdXAuaCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFn
ZS9QYWdlLmggXAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5I
YWx0ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9Qcmlu
dENvbnRleHQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQx
MDBhOWQyZmYyMzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIu
Y3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6
ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVy
Zm9ybWFuY2UuY3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhNWFiNzlmOGQ0NmE3Y2I1ZTMwYjc4ZTQwNjUyZjU0
ZDRkOGU5MWM5Li43ZDUzYWU5NDMzZmI3MzA3NGJmZGM4MzhmMTQ3NmM1Nzg1ZDU3MGFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC04NDcsNiArODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRl
eHRJbnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNDMENDRDMxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkz
M0QwMjEyRDEzMURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcx
IC8qIENvb2tpZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdD
QTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUND
MTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdl
U2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9
OwogCQkzNzFGNEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBE
NSAvKiBGb250RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFG
MDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0Uw
RDUgLyogU2VnbWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250
RGF0YS5oICovOyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAw
Q0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzM0MwQ0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRp
b25DRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlv
bkNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAw
QkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhZ2VTZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2
NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVu
dGVkRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0
NDQwLDggQEAKIAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8s
CiAJCQkJN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgKi8sCiAJCQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZl
cnJlci5oICovLAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgKi8sCisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVy
LmggKi8sCiAJCQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAq
LywKIAkJCQk4QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJ
CQk4QTg0NEQwMzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMw
ODEsNiArMjMwODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURy
b3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBF
RDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEw
QzFFMTM2NUE0RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTc5NCw2ICsyNTgwMSw3IEBACiAJCQkJMTRFMEJDNTYx
MzYxNDhBODAwMkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUYzODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRy
YW5zZmVySXRlbXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVF
REIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKaW5kZXggNjkyMGM1NDM0NjhlNzE4ODk5OGQ1ODgzZDU4ZGVjOWUxN2IyZTZlYy4uMGMw
OTkwOWIyNjFlOTdjZmU5N2I1ZTQ5MmE1ZTQwNzJkNTQ5NzU1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCkBAIC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50
OjpzdWdnZXN0ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhU
TUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7Cisg
ICAgaWYgKG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFn
ZS9zdmcreG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAg
ICByZXR1cm4gInRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlz
Y3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcg
aXQgcmVjZWl2ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwg
dywgaCk7CiAvLyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2gg
ZGlyZWN0aW9uIHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1Yzkw
MmI2YmIyMzJmMmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2Jl
NDlmNTljYzVmMDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3Ry
aW5nIHN1Z2dlc3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENv
bnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBs
YW5nOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAK
aW5kZXggYjZkODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgz
NmJjODYzMTM1M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
LCBjb25zdCBTdHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1M
QXR0cmlidXRlVmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYs
IEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAt
MzI3LDYgKzMzMSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91
dCwgZWxlbWVudCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwog
CisgICAgLy8gR2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBv
d24gYXR0cmlidXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwg
bmFtZXNwYWNlcyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAw
NWJiZjQ0YjMwYWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdi
MjhmNDY5ZjU5YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuaApAQCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3Rh
cnRUYWcoTm9kZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9k
ZSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBz
aXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQog
ICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lk
IGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyop
OwogICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFs
dWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlN
YXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCop
OwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYs
IE5hbWVzcGFjZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiBy
ZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRl
eHQoVGV4dCogdGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChU
ZXh0KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBUZXh0Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5k
UHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1l
bnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQg
YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVz
cGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCogZWxlbWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Cisg
ICAgdm9pZCBhcHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVz
cGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCopOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENE
QVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAg
ICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5v
ZGUqLCBOYW1lc3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBh
cnNlci5jcHAKaW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4u
NTQxMzQ2Njk5Njk0YTkxYzhmM2YzYTBhNzFhZTMyOTU2ZDAyYjcwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0x
MDIsMTUgKzEwMiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hh
cnNldChjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9r
ZW5BdHRyaWJ1dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBh
dHRyaWJ1dGVzOworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1
dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+
bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRy
aWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwor
ICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlVmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOwor
fQorCitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRh
QXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wg
Z290UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hh
cnNldDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9
IG1fdG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRl
ciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0
dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0g
ICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+
bV92YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0
ZXIpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+
Zmlyc3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNv
bmQ7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQt
dHlwZSIpKQpAQCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OnByb2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJz
ZXQgfHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGlu
ZyA9IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNl
dCkpOwotICAgICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFn
bWEgJiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1Rv
Q2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2ls
bCBiZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBv
dmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4x
ZWU4N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEg
KzQ4LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7
IHJldHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywg
U3RyaW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1p
Z2h0IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1l
dGFBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhU
TUxNZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0
cmluZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4
dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAg
Tm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYz
YTRiNGY1NDg5ZTk3ZjE2OTQyOGM4NTlhNzM5M2VkNGJhZDVlMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNs
dWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
VFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIK
KyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0
U3BlY2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBh
dHRyaWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFw
cGVuZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3Ry
aW5nKCkpKTsKKyAgICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRh
Q2hhcnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Cisg
ICAgcmV0dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3Vs
ZElnbm9yZUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50
KTsKK30KKworc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1
dGVOYW1lKGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBw
bGV0cy4KKyAgICByZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0
VGFnKSA/IEhUTUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2Ns
YXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBh
Z2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+
U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3Nlcmlh
bGl6ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciog
c2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAg
ICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3Nlcmlh
bGl6ZXIoc2VyaWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8g
TWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwg
c28gd2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMg
c3BlY2lmaWVkLgorICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2Rv
Y3VtZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQor
ICAgICAgICBhcHBlbmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9j
dW1lbnQtPnhtbFZlcnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNl
dCgpLCAiXCI/PiIpKTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQorewor
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFy
ZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9y
ZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0
cmluZygiPG1ldGEgY2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOwor
ICAgICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8g
dGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNv
bnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3Vz
dG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVz
cGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJh
bWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpOworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJv
dXQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBs
b2NhdGlvbiB0byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUg
c2VyaWFsaXplZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJh
bWUoZnJhbWUpOworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6
Y3JlYXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmlu
ZygpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1l
c3BhY2VzKTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVu
ZFRhZyhOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNo
b3VsZElnbm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNl
OjpSZXNvdXJjZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2Uo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkK
KyAgICAsIGRhdGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVy
KFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jl
c291cmNlcyhyZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisK
K3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlh
bGl6ZUZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAg
IGlmICghdXJsLmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAg
ICAvLyBGb3IgYmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4g
YmUgcmVmZXJlbmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1
cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMu
Y29udGFpbnModXJsKSkgeworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGF2ZSAyIGZyYW1l
IHdpdGggdGhlIHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5k
IGhhdmUgbm93CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2Vy
aWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRh
aW5pbmcKKyAgICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
IGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NF
UlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRv
ci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVO
b2RlKTsKKyAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5j
aGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAg
ICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1J
TUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRN
TC5sZW5ndGgoKSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAo
VmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9k
ZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAg
IGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2Ug
aGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJl
c291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBs
ZXRlVVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOwor
ICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNo
ZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwg
dXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGlua1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxl
U2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hl
ZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1
cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVl
dChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVU
YWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNo
ZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVl
dCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXpl
Q1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1l
LT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJh
bWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRG
cmFtZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVl
dC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0
LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7Cisg
ICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFw
cGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgp
IC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9
CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRS
dWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNf
Y2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9
IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7
CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlz
IHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUg
cmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxz
ZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2Vz
Rm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisg
ICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMg
YmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRl
eHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNl
dCgpKTsKKyAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBT
dHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0
ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0
cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291
cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNv
dXJjZVVSTHMuYWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJ
bWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQorewor
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IElt
YWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBl
ID0gaW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5k
KFJlc291cmNlKHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBt
X3Jlc291cmNlVVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2
ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBh
Z2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxl
c2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0
eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5
bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWlt
YWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3Bl
cnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtl
IHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJl
IG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9u
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1
bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRo
ZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBv
dXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlv
biBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElE
cy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAg
IGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdl
VmFsdWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2Ug
PSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2Fj
aGVkLWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRh
LgorICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2Uo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9
IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2Uo
KTsKKworICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGltYWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2Us
IHVybCk7CisgICAgfQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1l
KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxh
bmtGcmFtZVVSTHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3Ry
aW5nIHVybCA9IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlciht
X2JsYW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAg
IHJldHVybiBmYWtlVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmZmOGRjMTg3MzQwYWUyNTRkNDE2YzM3MTljZTcyNTE4ZjBjYmVkMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFs
aXplcl9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsK
K2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBGcmFtZTsK
K2NsYXNzIFBhZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzZXJpYWxpemUgYSBwYWdl
IGNvbnRlbnRzIGJhY2sgdG8gdGV4dCAodHlwaWNhbGx5IEhUTUwpLgorLy8gSXQgc2VyaWFsaXpl
cyBhbGwgdGhlIHBhZ2UgZnJhbWVzIGFuZCByZXRyaWV2ZXMgcmVzb3VyY2VzIHN1Y2ggYXMgaW1h
Z2VzIGFuZCBDU1Mgc3R5bGVzaGVldHMuCitjbGFzcyBQYWdlU2VyaWFsaXplciB7CitwdWJsaWM6
CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgS1VSTCB1cmw7CisgICAgICAgIFN0cmlu
ZyBtaW1lVHlwZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICAgICAg
UmVzb3VyY2UoKTsKKyAgICAgICAgUmVzb3VyY2UoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKTsKKyAgICB9OworCisgICAg
ZXhwbGljaXQgUGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFJlc291cmNlPiopOworCisgICAgLy8gSW5p
dGlhdGVzIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBmcmFtZSdzIHBhZ2UuIEFsbCBzZXJpYWxp
emVkIGNvbnRlbnQgYW5kIHJldHJpZXZlZAorICAgIC8vIHJlc291cmNlcyBhcmUgYWRkZWQgdG8g
dGhlIFZlY3RvciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgZmlyc3QgcmVzb3VyY2Ug
aW4gdGhhdAorICAgIC8vIHZlY3RvciBpcyB0aGUgdG9wIGZyYW1lIHNlcmlhbGl6ZWQgY29udGVu
dC4KKyAgICB2b2lkIHNlcmlhbGl6ZShQYWdlKik7CisKKyAgICBLVVJMIHVybEZvckJsYW5rRnJh
bWUoRnJhbWUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlcmlhbGl6ZUZyYW1lKEZyYW1lKik7
CisKKyAgICAvLyBTZXJpYWxpemVzIHRoZSBzdHlsZXNoZWV0IGJhY2sgdG8gdGV4dCBhbmQgYWRk
cyBpdCB0byB0aGUgcmVzb3VyY2VzIGlmIFVSTCBpcyBub3QtZW1wdHkuCisgICAgLy8gSXQgYWxz
byBhZGRzIGFueSByZXNvdXJjZXMgaW5jbHVkZWQgaW4gdGhhdCBzdHlsZXNoZWV0IChpbmNsdWRp
bmcgYW55IGltcG9ydGVkIHN0eWxlc2hlZXRzIGFuZCB0aGVpciBvd24gcmVzb3VyY2VzKS4KKyAg
ICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwm
KTsKKworICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIGNvbnN0IEtV
UkwmKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5
bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENT
U1N0eWxlUnVsZSopOworCisgICAgVmVjdG9yPFJlc291cmNlPiogbV9yZXNvdXJjZXM7CisgICAg
TGlzdEhhc2hTZXQ8S1VSTD4gbV9yZXNvdXJjZVVSTHM7CisgICAgSGFzaE1hcDxGcmFtZSosIEtV
Ukw+IG1fYmxhbmtGcmFtZVVSTHM7CisgICAgdW5zaWduZWQgbV9ibGFua0ZyYW1lQ291bnRlcjsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE3ODU1M2Y1
NzdkNmEyYjBlMTU2NTc0YzA4YWYzZmRlZGU1ZGQ5OGQuLjE5OTU3MDcyZjY1OGYxOTA1YmI4ZGNk
NDM0OGVjZDE0NGMyMWQwN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzQgQEAKKzIwMTEtMDQtMjUgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVj
aW5nIGEgbmV3IEFQSSB0byBzZXJpYWxpemUgYSBXZWJWaWV3IGJhY2sgdG8gSFRNTC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAg
ICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgor
ICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUpOgorICAgICAgICAqIHRlc3RzL1dlYlBhZ2VOZXdT
ZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXI6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtf
ZnJhbWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
Ymx1ZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3Nz
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVz
LmNzczogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3Qu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9wdXJwbGVfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvcmVkX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisKIDIw
MTEtMDQtMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NDk1MS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCmluZGV4IGIwNTI5ODFmZDNkN2JmMTA0MzFhYzlkMjk5ZGMwYTA1NDMxZDI5NDgu
LjdkM2E2Yjk1NzYyZjJhODI0YmI1MmZiYzRlNTk4ZDdjOTMzYzYzNTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzcsNiArNzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvUG9wdXBNZW51VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJh
bnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvVW5pc2Ny
aWJlSGVscGVyVGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5l
d1NlcmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdl
U2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0s
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFs
aXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aAppbmRleCBiNGQ1NzE1MzVhYWI4ZmMyMmVlMjA2NmUyY2UwZTFiYWFmOWQ4NmVkLi5hMTA4YTYy
YzA2ZTQzY2FjOGExMWZkMzU0Y2MyNDViNjdkZjUwOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKQEAgLTMxLDE0ICszMSwxNCBA
QAogI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9oCiAjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVy
X2gKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNp
bmNsdWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJDU3RyaW5n
OwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudDsKIGNsYXNz
IFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlZpZXc7CiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCkBAIC00Niw2ICs0NiwyMyBAQCB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3Vy
Y2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHkuCiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplciB7
CiBwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgV2ViVVJMIHVybDsKKyAg
ICAgICAgV2ViQ1N0cmluZyBtaW1lVHlwZTsKKyAgICAgICAgV2ViQ1N0cmluZyBkYXRhOworICAg
IH07CisKKyAgICAvLyBTZXJpYWxpemVzIGFsbCB0aGUgZnJhbWVzIGZyb20gdGhlIFdlYlZpZXcs
IHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgLy8gcmVzb3VyY2VzIChzdWNoIGFzIGltYWdlcyBh
bmQgQ1NTKSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBwYXNzZWQgdmVjdG9yLgorICAgIC8vIFRoZSBm
aXJzdCByZXNvdXJjZSBpbiB0aGF0IHZlY3RvciBpcyB0aGUgdG9wIGZyYW1lIGNvbnRlbnRzLgor
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3RyaXBzLW91dCBhbnkgc2NyaXB0IHRhZyBvciBs
aW5rIHRvIEphdmFTY3JpcHQuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgdm9pZCBzZXJpYWxpemUo
V2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIElNUE9SVEFOVDoKKyAg
ICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVyIGltcGxlbWVudGF0aW9uIG9mIGEgcGFnZXNl
cmlhbGl6YXRpb24gdGhhdAorICAgIC8vIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgorCisKICAgICAv
LyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRo
ZW0gdG8gSFRNTCBkYXRhLgogICAgIC8vIFdlIGhhdmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1wb3Jh
cnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEuIFdlIHdpbGwKICAgICAvLyBzZXF1ZW50aWFs
bHkgY2FsbCBXZWJQYWdlU2VyaWF6bGllckNsaWVudCBvbmNlIHRoZSBkYXRhIGJ1ZmZlciBpcyBm
dWxsLgpAQCAtNjQsOSArODEsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2F2ZWQgbGlua3MsIHdoaWNo
IG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4KICAgICAvLyBUaGUgcGFyYW1l
dGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3aGlj
aAogICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwg
c3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgotICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgc2Vy
aWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlh
bGl6ZShXZWJGcmFtZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZWN1cnNpdmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFn
ZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVudCosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBs
b2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdl
YlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsKQEAgLTg1LDcgKzEwMiw3IEBAIHB1YmxpYzoK
ICAgICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KICAgICBX
RUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9u
KGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVj
bGFyYXRpb24uCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09m
VGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJiB1cmwpOworICAgIFdFQktJVF9BUEkgc3Rh
dGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVS
TCYpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgog
ICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlv
bihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBjOGM3NTI5N2Y0MmQ3OGI4
OWZlNzBkZDlmOTQwMDEzMzdmOWZjZTk5Li4yMzJlMjExNjAxNTljODg2ZDhlNGVkMTQwMDg0YzZi
NWNmNzMxZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdl
U2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNl
cmlhbGl6ZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCiAjaW5jbHVkZSAiV2Vi
Q1N0cmluZy5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1
ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3
SW1wbC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIApAQCAt
MTc5LDYgKzE4MSwyNSBAQCB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZy
YW1lLAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAordm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2U+KiByZXNvdXJjZXNQYXJhbSkKK3sKKyAgICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgc2VyaWFsaXplcigmcmVzb3VyY2Vz
KTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6ZShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZp
ZXcpLT5wYWdlKCkpOworCisgICAgVmVjdG9yPFJlc291cmNlPiByZXN1bHQ7CisgICAgZm9yIChW
ZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJl
c291cmNlcy5iZWdpbigpOyBpdGVyICE9IHJlc291cmNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAg
ICAgIFJlc291cmNlIHJlc291cmNlOworICAgICAgICByZXNvdXJjZS51cmwgPSBpdGVyLT51cmw7
CisgICAgICAgIHJlc291cmNlLm1pbWVUeXBlID0gaXRlci0+bWltZVR5cGUuYXNjaWkoKTsKKyAg
ICAgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgcmVzb3VyY2UgZGF0YSBoZXJl
LiBJZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAgICAgICAgcmVzb3Vy
Y2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+ZGF0YS0+ZGF0YSgpLCBpdGVyLT5kYXRhLT5zaXpl
KCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlc291cmNlKTsKKyAgICB9CisKKyAgICAqcmVz
b3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAgICAgCit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNGIwZGFjZWJmMzAyZjdjNjRjMDY0ZjlkM2FhODc0ZWZmMjQ2ZjI2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFs
aXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUg
IldlYlBhZ2VTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5j
bHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJX
ZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVz
cG9uc2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3Jj
L2d1cmwuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBw
b3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVu
dCB7CitwdWJsaWM6CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQo
ZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wg
LyogZW5hYmxlZFBlclNldHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAg
ICBib29sIG1fc2NyaXB0RW5hYmxlZDsKK307CisKK2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVU
ZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJp
YWxpemVUZXN0KCkKKyAgICAgICAgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4
KCJ0ZXh0L2h0bWwiKSkKKyAgICAgICAgLCBtX3hodG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9t
VVRGOCgiYXBwbGljYXRpb24veGh0bWwreG1sIikpCisgICAgICAgICwgbV9jc3NNaW1lVHlwZShX
ZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2NzcyIpKQorICAgICAgICAsIG1fcG5nTWltZVR5cGUo
V2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1hZ2UvcG5nIikpCisgICAgeworICAgIH0KKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBDcmVhdGUg
YW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6
OmNyZWF0ZSgwKTsKKworICAgICAgICAvLyBXZSB3YW50IHRoZSBpbWFnZXMgdG8gbG9hZC4KKyAg
ICAgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0gbV93ZWJWaWV3LT5zZXR0aW5ncygpOworICAg
ICAgICBzZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3Mt
PnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKworICAgICAgICBtX3dlYlZpZXct
PmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5y
ZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworICAg
IH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBj
b25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKQorICAg
IHsKKyAgICAgICAgV2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmlu
aXRpYWxpemUoKTsKKyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUobWltZVR5cGUpOworICAg
ICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgICAgICBzdGQ6OnN0cmlu
ZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOwor
ICAgICAgICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51
dGY4KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCBy
ZXNwb25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZv
aWQgbG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAgICAgV2Vi
VVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsK
KyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBtX3dlYlZp
ZXctPm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFr
ZSBzdXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICAgICAgLy8gU29t
ZSByZXF1ZXN0cyBnZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1lci4KKyAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICAvLyBTZXJ2ZXIgdGhlIGRl
bGF5ZWQgcmVzb3VyY2VzLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25v
dXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxlSlMoKQorICAgIHsK
KyAgICAgICAgbV93ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVuYWJsZWQgPSB0cnVlOworICAgIH0K
KworICAgIHZvaWQgcnVuT25Mb2FkKCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZy
YW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgo
Im9uTG9hZCgpIikpKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTdHJpbmcmIGh0bWxNaW1lVHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5n
JiB4aHRtbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV94aHRtbE1pbWVUeXBlOyB9CisgICAg
Y29uc3QgV2ViU3RyaW5nJiBjc3NNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzTWltZVR5
cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIHBuZ01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9wbmdNaW1lVHlwZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIHJlc291cmNlVmVjdG9yQ29u
dGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4mIHJlc291
cmNlcywgY2hhciogdXJsLCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTCB3
ZWJVUkwgPSBXZWJVUkwoR1VSTCh1cmwpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCByZXNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFdlYlBhZ2VTZXJp
YWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAgICAgICBp
ZiAocmVzb3VyY2UudXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkgJiYg
IXJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlwZSkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2YXRlOgorICAgIFdl
YlN0cmluZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV94aHRtbE1pbWVUeXBlOwor
ICAgIFdlYlN0cmluZyBtX2Nzc01pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBl
OworICAgIFRlc3RXZWJGcmFtZUNsaWVudCBtX3dlYkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVz
dHMgdGhhdCBhIHBhZ2Ugd2l0aCByZXNvdXJjZXMgYW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3
aXRoIGFsbCBpdHMgcmVzb3VyY2VzLgorLy8gRklYTUU6IHJlZW5hYmxlIHRoZXNlIHRlc3RzIG9u
Y2UgdGhlIENocm9taXVtIHBhcnQgb2YgdGhlIHRlc3Rfd2Via2l0X2NsaWVudCBoYXZlIGxhbmRl
ZC4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfUGFnZVdpdGhGcmFt
ZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRv
cEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0
bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlm
cmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiaWZyYW1lMi5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tl
ZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkp
OworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dy
ZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91
bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxv
YWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2Vy
aWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2Vy
aWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNl
cy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUg
dGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiBy
ZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2Uu
bWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9G
QUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3Vy
Y2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9n
cmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVf
YmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRt
bCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0
bWwiKSk7Cit9CisKKy8vIFRlc3QgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENT
UyByZXNvdXJjZXMgYXJlIHJlcG9ydGVkLCBpbmNsdWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9y
dHMgYW5kIGxpbmtzLiBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRl
bnRzLCB3ZSBvbmx5IG1ha2Ugc3VyZQorLy8gdGhleSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhl
IHJpZ2h0IG1pbWUgdHlwZSBhbmQgdGhhdCB0aGV5IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9G
KFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxFRF9DU1NSZXNvdXJjZXMpCit7CisgICAg
Ly8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9w
RnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdl
Lmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJsaW5rX3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3Mi
KSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
aW1wb3J0X3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdl
YlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFu
Z2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91
bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJ5ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAg
cmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFj
a2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmci
KSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBu
ZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJwdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vdWwtZG90LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ1bC1kb3QucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL29sLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib2wtZG90LnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJh
bWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVy
OjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVz
b3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3Vs
ZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVy
bCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNv
dXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSgxMiwg
cmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RS
VUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L2ltcG9ydF9zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291
cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRf
c3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2Jh
Y2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZl
Y3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tn
cm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91
bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5w
bmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwg
ImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiwgImlt
YWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7Cisg
ICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8v
d3d3LnRlc3QuY29tL29sLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOworfQorCisvLyBUZXN0cyB0
aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlIHdpdGggYmxhbmsgZnJhbWVzIHRoZXNlIGFyZSBy
ZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291cmNlcy4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXpl
VGVzdCwgRElTQUJMRURfQmxhbmtGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tl
ZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJM
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibGFua19mcmFtZXMuaHRtbCIpLCBodG1sTWltZVR5cGUo
KSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
cmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5k
LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJl
Z2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dy
b3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUo
dG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VT
ZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpz
ZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3Vy
Y2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBi
ZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2Um
IHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9
PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJj
ZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNU
X0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg3LCByZXNv
dXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RS
VUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUo
cmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2Js
dWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIC8vIFRoZSBibGFuayBmcmFt
ZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJMLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzAiLCAidGV4dC9odG1s
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
d3ljaXd5ZzovL2ZyYW1lLzEiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291
cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzIiLCAidGV4dC9o
dG1sIikpOworfQorCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1Nl
cmlhbGl6ZVhNTEhhc1JpZ2h0RGVjbGFyYXRpb24pCit7CisgICAgV2ViVVJMIHRvcEZyYW1lVVJM
ID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9zaW1wbGUueGh0bWwiKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZS54
aHRtbCIpLCB4aHRtbE1pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJh
bWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVz
b3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVz
b3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisg
ICAgLy8gV2UgZXhwZWN0IG9ubHkgb25lIHJlc291cmNlLCB0aGUgWE1MLgorICAgIEFTU0VSVF9F
USgxLCByZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnN0cmluZyB4bWwgPSByZXNvdXJjZXNb
MF0uZGF0YTsKKworICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSBhbmQgb25seSBvbmUgaW5zdGFu
Y2Ugb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KKyAgICBzaXplX3QgcG9zID0geG1sLmZpbmQoIjw/
eG1sIHZlcnNpb249Iik7CisgICAgQVNTRVJUX1RSVUUocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9z
KTsKKworICAgIHBvcyA9IHhtbC5maW5kKCI8P3htbCB2ZXJzaW9uPSIsIHBvcyArIDEpOworICAg
IEFTU0VSVF9UUlVFKHBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFu
a19mcmFtZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9ibGFua19mcmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGZiMjA0OTljNDMyNjNjYjVj
MjQ2ZmU3ZTE5MjU0NDJjZDcxNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCkBAIC0w
LDAgKzEsMzcgQEAKKzxodG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBvbmxvYWQoKSB7Cisg
ICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgdmFy
IGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjEiKTsKKyAgICBkaXYuYXBwZW5k
Q2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1M
ICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdibHVlX2JhY2tncm91
bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoIm15RGl2MiIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFt
ZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+
QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUg
dGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIp
OworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjMiKTsKKyAgICBkaXYu
YXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5u
ZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdvcmFuZ2Vf
YmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgIH0KKyAgCis8
L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CisgIFRoaXMgcGFnZSBjcmVhdGVz
IGVtcHR5IGlmcmFtZXMgYW5kIGFkZHMgY29udGVudCB0byB0aGVtIGR5bmFtaWNhbGx5Ljxicj48
YnI+CisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MiI+PC9kaXY+
CisgIDxkaXYgaWQ9Im15RGl2MyI+PC9kaXY+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3Nf
dGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNl
cmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NjM3ZjBmMDIyZDc1OWMw
YWRjOWQyMDFiY2Y0MzE2MTQ2YmQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCkBA
IC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0
IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAg
V2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlU25hcHNob3QgbWV0aG9kCistLT4KKworPGhlYWQ+
CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtfc3R5
bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3NzJyk7
CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlOworICBzcmM6IHVybCgn
Q2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLXdlYmZvbnQuZW90KSBmb3Jt
YXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2IHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2
ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisKKzxzdHlsZT4KKyNkaXZCbHVlIHsKKyAgYmFj
a2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5wbmcnKTsKK30KKwordWwgeworICBs
aXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsKK30KKworb2wgeworICBsaXN0LXN0
eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsKK30KKworPC9zdHlsZT4KKworPHNjcmlwdD4K
Ky8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUuCitmdW5jdGlvbiBvbkxvYWQoKSB7
CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ3B1
cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHlsZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBlPSAndGV4dC9jc3MnOworICBzdHlsZU5vZGUu
bWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOworfQor
PC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgorCis8IS0tIFRl
eHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYgaWQ9J2NodW5rZml2ZURpdic+VGhp
cyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250LjwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlu
IGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2UmVkJz4KK1RoaXMgZGl2IGhhcyBhIHJlZCBp
bWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGEgZmls
ZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZPcmFuZ2UnPgor
VGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisK
KzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlllbGxv
dyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rp
dj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5bGUgc2VjdGlvbiBpbiB0aGUgaGVh
ZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRpdiBoYXMgYSBibHVlIGltYWdlIGFz
IGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW5saW5lZCAtLT4KKzxk
aXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2dyZWVuX2JhY2tn
cm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMgaXRzIGJhY2tncm91
bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0aCBK
YXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxlciAtLT4KKzxkaXYgaWQ9J2RpdlB1cnBsZSc+
CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4K
KworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8
L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xp
PgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+CisKK09yZGVyZWQgbGlzdDo8YnI+Cis8b2w+
CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8
bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC9vbD4KKwor
PC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVl
ZGJkYzE4OTFjZjFiNmY5NjdiN2QzNzYxZTIwNzMwZDgzOWU2YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUu
aHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJibHVlX2Jh
Y2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9k
eT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQwNDRi
MmVjY2JiN2Y5ZTNmMGI1ZGZjYTg2ODhmMmVkZmNmOTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0
bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3JlZW5fYmFj
a2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9k
eT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9t
X2xpbmsuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjgzZTU4MWY0NmViNWVlZmIzNzY0NzE0MzBlOGNmYjJl
YTZiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MKQEAgLTAsMCArMSwz
IEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNrZ3Jv
dW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5
bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9pbXBvcnRfc3R5bGVzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNGM3ZjRkNWY0YTk5YzdhZTZlNmMyNTRh
ODk2M2U0MmE5YTg0YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCkBAIC0wLDAgKzEs
MyBAQAorI2RpdlllbGxvdyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tn
cm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5
bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
ci9saW5rX3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY3ZmI5OWE5YjBkYTA5YmVlMmMyNGVjODM1
NWExN2U0MzA3YTYyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKQEAgLTAsMCArMSw1IEBA
CitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7
CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNWYxMmRmNjM1Njg2YzZmMWMxYzVlZGI0YmRkNTczNTIzZjgwMGFmZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9z
aW1wbGUueGh0bWwKQEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGlu
Zz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4w
IFN0cmljdC8vRU4iICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3Ry
aWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1s
Omxhbmc9ImVuIj4KKyA8aGVhZD4KKyA8dGl0bGU+WEhUTUwgMS4wIFN0cmljdCBFeGFtcGxlPC90
aXRsZT4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8cD5IZWxsbyEgPC9wPgorIDwvYm9keT4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci90b3BfZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzE4NTIzYWZh
NGExYjA5ODY1YzQ0OTI4ZDM0YTdjMTFkMmY0MDJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1s
CkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJyZWRfYmFja2dy
b3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxvYmpl
Y3QgZGF0YT0iaWZyYW1lMi5odG1sIj48L29iamVjdD4KKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRt
bCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91236</attachid>
            <date>2011-04-26 23:00:10 -0700</date>
            <delta_ts>2011-04-26 23:04:49 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-58947-20110426230009.patch</filename>
            <type>text/plain</type>
            <size>65988</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYWFjMDA1ZjA4ZTA2NjZk
NTM1ZWRiNTViNmE5Nzg3Yzk2MDVjMWQyLi4zYjFhYmE1N2VkNjRhMzQyYmJlNTRmMjBmOTk5OWU0
YTdlZTFmMmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxs
b3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJhY2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0
aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28gcmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAg
ICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czogdW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0
cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisgICAgICAgICogQW5kcm9pZC5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxh
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6
CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAg
ICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQtMjYgIENodW4tTHVuZyBIdWFuZyAgPGFsdmlu
Y2wuaHVhbmdAZ21haWwuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29u
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0
OWZiYTFmYTk1MzZhZjM5N2UxYi4uOTYyZmQyNGQ5ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5
ODVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBA
QCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNl
cmlhbGl6ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuaCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9Q
ZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBjYmQ2Y2JmMWRk
YzI4YTM2NTFiNjcwMzUzMjg1ZDgzZGViYzc0MjBjLi42ODcyMWU0Y2M2YWVkNjIyOGRiNmE5NGNi
ODZlODRlYzU1NDFjMTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAg
ICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uaCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlLmgn
LAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAncGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcs
CiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNhbGxiYWNrLmgnLAogICAgICAgICAgICAgJ3Bh
Z2UvUG9zaXRpb25FcnJvci5oJywKQEAgLTM0NjMsNiArMzQ2NCw3IEBACiAgICAgICAgICAgICAn
cGFnZS9QYWdlR3JvdXAuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZl
cnJlci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAor
ICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdl
L1BlcmZvcm1hbmNlLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAg
ICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpp
bmRleCAwNmQ4ZjRhOTVjZWM2YjczN2FjZWJhYmQ5MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4
MDUzZmEwYWJjMDhhOTc1NDU1ODFhZWU1ZWY4NTZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYg
KzkzNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBw
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAg
IHBhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRp
bWluZy5jcHAgXApAQCAtMTg4NCw2ICsxODg1LDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9Q
YWdlR3JvdXAuaCBcCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFn
ZS9QYWdlLmggXAorICAgIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5I
YWx0ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9Qcmlu
dENvbnRleHQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQx
MDBhOWQyZmYyMzZlMDc3MzE1OTY5ODZjNDMyYzk5NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAog
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+
CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIu
Y3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAgICAgICAgICAgICA8RmlsZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6
ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAg
ICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVy
Zm9ybWFuY2UuY3BwIgogCQkJCT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhNWFiNzlmOGQ0NmE3Y2I1ZTMwYjc4ZTQwNjUyZjU0
ZDRkOGU5MWM5Li43ZDUzYWU5NDMzZmI3MzA3NGJmZGM4MzhmMTQ3NmM1Nzg1ZDU3MGFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBA
IC04NDcsNiArODQ3LDggQEAKIAkJMzNDMENDRDUxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRl
eHRJbnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzNDMENDRDMxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkz
M0QwMjEyRDEzMURCMzdCMDA0MDkxQTggLyogQ29va2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcx
IC8qIENvb2tpZVN0b3JhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkzNzFBNjdDQjExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdD
QTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi87IH07CisJCTM3MUU2NUND
MTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBh
Z2VTZXJpYWxpemVyLmggKi87IH07CisJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdl
U2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9
OwogCQkzNzFGNEY0MDBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBE
NSAvKiBGb250RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3MUY0RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFG
MDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0Uw
RDUgLyogU2VnbWVudGVkRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250
RGF0YS5oICovOyB9OwpAQCAtNzM3MSw2ICs3MzczLDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAw
Q0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBTZWN1cmVUZXh0SW5wdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkzM0MwQ0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlY3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRp
b25DRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlv
bkNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAw
QkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhZ2VTZXJpYWxpemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2
NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlU2VyaWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2Vn
bWVudGVkRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVu
dGVkRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0
NDQwLDggQEAKIAkJCQk5MzAyQjBCRTBENzlGODJDMDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8s
CiAJCQkJN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5j
cHAgKi8sCiAJCQkJN0E2NzRCREEwRjlFQkY0RTAwNkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZl
cnJlci5oICovLAorCQkJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5jcHAgKi8sCisJCQkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVy
LmggKi8sCiAJCQkJOEE4NDREMDExMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAq
LywKIAkJCQk4QTg0NEQwMjExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJ
CQk4QTg0NEQwMzExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMw
ODEsNiArMjMwODcsNyBAQAogCQkJCTQzNThFODg2MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURy
b3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBF
RDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEw
QzFFMTM2NUE0RDQwMEVENkUzMyAvKiBXb3JrZXJDb250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXpl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTc5NCw2ICsyNTgwMSw3IEBACiAJCQkJMTRFMEJDNTYx
MzYxNDhBODAwMkFEMTJFIC8qIEpTRE9NVG9rZW5MaXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUYzODEwQzFCMTM2NUE0OTYwMEVENkUzMyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk3ODE3NTU4NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRy
YW5zZmVySXRlbXMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVF
REIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAKaW5kZXggNjkyMGM1NDM0NjhlNzE4ODk5OGQ1ODgzZDU4ZGVjOWUxN2IyZTZlYy4uMGMw
OTkwOWIyNjFlOTdjZmU5N2I1ZTQ5MmE1ZTQwNzJkNTQ5NzU1NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCkBAIC0xMDgwLDYgKzEwODAsMjAgQEAgdm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChj
b25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgY2xvc2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50
OjpzdWdnZXN0ZWRNSU1FVHlwZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhU
TUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gImFwcGxpY2F0aW9uL3hodG1sK3htbCI7Cisg
ICAgaWYgKG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFn
ZS9zdmcreG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAg
ICByZXR1cm4gInRleHQveG1sIjsKKyAgICBpZiAobV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwiOworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRM
b2FkZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKK30KKwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlz
Y3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUgcG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcg
aXQgcmVjZWl2ZSBhIHJlY3QgYXMgcGFyYW1ldGVyLCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwg
dywgaCk7CiAvLyAqIG1ha2luZyBpdCByZWNlaXZlIHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2gg
ZGlyZWN0aW9uIHNlcGFyYXRlbHksCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCmluZGV4IDE0NTljOTI1Yzkw
MmI2YmIyMzJmMmU1MjcwOTM3NmRjNGQ3NTZhZWQuLjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2Jl
NDlmNTljYzVmMDAzODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAg
cHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3Ry
aW5nIHN1Z2dlc3RlZE1JTUVUeXBlKCkgY29uc3Q7CisKICAgICBTdHJpbmcgY29udGVudExhbmd1
YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENv
bnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxhbmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBs
YW5nOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAK
aW5kZXggYjZkODVkNjFkYmU0MTVlZDUyMTcxN2U5ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgz
NmJjODYzMTM1M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAgLTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
LCBjb25zdCBTdHJpbmcKICAgICAgICAgZG9jdW1lbnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1M
QXR0cmlidXRlVmFsdWUgOiBFbnRpdHlNYXNrSW5BdHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQg
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYs
IEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKK3sKK30KKwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25z
dCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBVQ2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAt
MzI3LDYgKzMzMSw5IEBAIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVj
dG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91
dCwgZWxlbWVudCwgKmF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwog
CisgICAgLy8gR2l2ZSBhbiBvcHBvcnR1bml0eSB0byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBv
d24gYXR0cmlidXRlcy4KKyAgICBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwg
bmFtZXNwYWNlcyk7CisKICAgICBhcHBlbmRDbG9zZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAw
NWJiZjQ0YjMwYWUzYWY3NmYzNDZiODcwYWE0NmZjOS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdi
MjhmNDY5ZjU5YmZjZjg0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJr
dXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuaApAQCAtNzQsMjUgKzc0LDI2IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0
dWFsIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3Rh
cnRUYWcoTm9kZSosIE5hbWVzcGFjZXMqID0gMCk7Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9k
ZSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBz
aXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVu
Z3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5ndGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQog
ICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVjdG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lk
IGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5n
JiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hUTUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyop
OwogICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYg
cmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFs
dWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBOb2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlN
YXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVzcGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCop
OwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYs
IE5hbWVzcGFjZXMmKTsKICAgICB2b2lkIGFwcGVuZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiBy
ZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwotICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRl
eHQoVGV4dCogdGV4dCkgY29uc3Q7CisgICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChU
ZXh0KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYg
b3V0LCBUZXh0Kik7CiAgICAgdm9pZCBhcHBlbmRDb21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwg
Y29uc3QgU3RyaW5nJiBjb21tZW50KTsKICAgICB2b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3VtZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5k
UHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0
YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1l
bnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQg
YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVz
cGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCogZWxlbWVudCk7Ci0gICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYg
b3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7Cisg
ICAgdm9pZCBhcHBlbmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVz
cGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3NlVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCopOworICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENE
QVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAg
ICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5v
ZGUqLCBOYW1lc3BhY2VzKik7CiAgICAgYm9vbCBzaG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0
UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBh
cnNlci5jcHAKaW5kZXggZWFjN2QyODFhNDQ5ZmZhYjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4u
NTQxMzQ2Njk5Njk0YTkxYzhmM2YzYTBhNzFhZTMyOTU2ZDAyYjcwYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0x
MDIsMTUgKzEwMiwyNyBAQCBTdHJpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hh
cnNldChjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEoKQogeworICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9r
ZW5BdHRyaWJ1dGVzID0gbV90b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBh
dHRyaWJ1dGVzOworICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVy
YXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1
dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+
bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7CisgICAgICAgIFN0cmluZyBhdHRy
aWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOwor
ICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmli
dXRlVmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2VuY29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOwor
fQorCitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRh
QXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wg
Z290UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBtb2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hh
cnNldDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9
IG1fdG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZvciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmlidXRlcy5iZWdpbigpOwotICAgICAgICAgaXRl
ciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0
dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0g
ICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+
bV92YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3Ig
aXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0
ZXIpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+
Zmlyc3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNv
bmQ7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAg
ICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQt
dHlwZSIpKQpAQCAtMTI3LDEzICsxMzksMTAgQEAgYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6
OnByb2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtb2RlID09IENoYXJz
ZXQgfHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFByYWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGlu
ZyA9IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNl
dCkpOwotICAgICAgICBpZiAobV9lbmNvZGluZy5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFn
bWEgJiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRp
bmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0KIAogc3RhdGljIGNvbnN0IGludCBieXRlc1Rv
Q2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAvLyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2ls
bCBiZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQgZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBv
dmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVhNzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4x
ZWU4N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEg
KzQ4LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7
IHJldHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywg
U3RyaW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAgLy8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1p
Z2h0IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1l
dGFBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmCispOworCiBwcml2YXRlOgogICAgIEhU
TUxNZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAgYm9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0
cmluZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4
dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAgZW51bSBNb2RlIHsKICAgICAgICAg
Tm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYz
YTRiNGY1NDg5ZTk3ZjE2OTQyOGM4NTlhNzM5M2VkNGJhZDVlMAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNs
dWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
VFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lz
dHJ5LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIK
KyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNh
dGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0
U3BlY2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQg
PSB0b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlmICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJpYnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2Rl
TWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlc01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAg
ICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOwor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRlYWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBh
dHRyaWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNwYWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFw
cGVuZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRvU3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3Ry
aW5nKCkpKTsKKyAgICB9CisgICAgVGV4dEVuY29kaW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRh
Q2hhcnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Cisg
ICAgcmV0dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisKK3N0YXRpYyBib29sIHNob3Vs
ZElnbm9yZUVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+
aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRhZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6Om5vc2NyaXB0VGFnKSB8fCBpc0NoYXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50
KTsKK30KKworc3RhdGljIGNvbnN0IFF1YWxpZmllZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1
dGVOYW1lKGNvbnN0IEhUTUxGcmFtZU93bmVyRWxlbWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgYWxsIGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBw
bGV0cy4KKyAgICByZXR1cm4gZnJhbWVPd25lci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0
VGFnKSA/IEhUTUxOYW1lczo6ZGF0YUF0dHIgOiBIVE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2Ns
YXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBB
Y2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBh
Z2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+
U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3Bh
Y2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVD
aGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBl
bmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgorICAgIFBhZ2VTZXJpYWxpemVyKiBtX3Nlcmlh
bGl6ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Cit9OworCitTZXJpYWxpemVyTWFya3Vw
QWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciog
c2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAg
ICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBBYnNvbHV0ZVVSTHMpCisgICAgLCBtX3Nlcmlh
bGl6ZXIoc2VyaWFsaXplcikKKyAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8g
TWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2VyaWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwg
c28gd2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVuc3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMg
c3BlY2lmaWVkLgorICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2Rv
Y3VtZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQor
ICAgICAgICBhcHBlbmRTdHJpbmcobWFrZVN0cmluZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9j
dW1lbnQtPnhtbFZlcnNpb24oKSwgIlwiIGVuY29kaW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNl
dCgpLCAiXCI/PiIpKTsKK30KKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFs
aXplck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQorewor
ICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFy
ZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBhcmVudCkpCisgICAgICAgIE1hcmt1cEFjY3Vt
dWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1
cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCog
ZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9y
ZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVt
ZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7CisgICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0
cmluZygiPG1ldGEgY2hhcnNldD1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOwor
ICAgICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFjdGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogRm9yIG9iamVjdCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8g
dGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBhbiBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNv
bnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3Vz
dG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVz
cGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJh
bWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFtZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOwor
ICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXItPmNvbnRlbnRGcmFtZSgpOworICAgIGlmICgh
ZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpOworICAgIGlmICh1cmwuaXNWYWxpZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJv
dXQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBs
b2NhdGlvbiB0byBibGFuayBmcmFtZXMgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUg
c2VyaWFsaXplZCBmcmFtZS4KKyAgICB1cmwgPSBtX3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJh
bWUoZnJhbWUpOworICAgIFJlZlB0cjxBdHRyaWJ1dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6
Y3JlYXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmlu
ZygpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1l
c3BhY2VzKTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVu
ZFRhZyhOb2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNo
b3VsZElnbm9yZUVsZW1lbnQodG9FbGVtZW50KG5vZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEVuZFRhZyhub2RlKTsKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNl
OjpSZXNvdXJjZSgpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2Uo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwpCisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkK
KyAgICAsIGRhdGEoZGF0YSkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVy
KFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jl
c291cmNlcyhyZXNvdXJjZXMpCisgICAgLCBtX2JsYW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisK
K3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlh
bGl6ZUZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPnVybCgpOworICAg
IGlmICghdXJsLmlzVmFsaWQoKSB8fCB1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkgeworICAgICAg
ICAvLyBGb3IgYmxhbmsgZnJhbWVzIHdlIGdlbmVyYXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4g
YmUgcmVmZXJlbmNlZCBieSB0aGVpciBjb250YWluaW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1
cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICB9CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMu
Y29udGFpbnModXJsKSkgeworICAgICAgICAvLyBGSVhNRTogV2UgY291bGQgaGF2ZSAyIGZyYW1l
IHdpdGggdGhlIHNhbWUgVVJMIGJ1dCB3aGljaCB3ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5k
IGhhdmUgbm93CisgICAgICAgIC8vIGRpZmZlcmVudCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2Vy
aWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1lIHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRh
aW5pbmcKKyAgICAgICAgLy8gZnJhbWUuIEFyZyEKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
IGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAmbm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0
ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3VtZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NF
UlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRv
ci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVO
b2RlKTsKKyAgICBDU3RyaW5nIGZyYW1lSFRNTCA9IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5j
aGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAg
ICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1J
TUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRN
TC5sZW5ndGgoKSkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKKworICAgIGZvciAo
VmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9k
ZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAg
IGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgLy8gV2Ug
aGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUgYXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJl
c291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQgaW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVS
ZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVtZW50LT5zdHlsZSgpKTsKKworICAgICAgICBp
ZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAg
IEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVs
ZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBs
ZXRlVVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOwor
ICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNo
ZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwg
dXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
bGlua1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxMaW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxl
U2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hl
ZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgS1VSTCB1
cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlua0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVl
dChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCB1cmwpOworICAgICAgICAgICAg
ICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVU
YWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNo
ZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVl
dCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgc2VyaWFsaXpl
Q1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkp
OworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1l
LT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJh
bWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRG
cmFtZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQo
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmlu
Z0J1aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVl
dC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0
LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgaXRlbVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7Cisg
ICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBjc3NUZXh0LmFw
cGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBpZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgp
IC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9
CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRo
ZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgorICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRS
dWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNf
Y2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9
IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7
CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hl
ZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBpbXBvcnRVUkwpOworICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlz
IHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBmaWxlIGNhbgorICAgICAgICAgICAgLy8gYmUg
cmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNlUnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxz
ZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2Vz
Rm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisg
ICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBjaGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMg
YmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2FzIGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRl
eHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNl
dCgpKTsKKyAgICAgICAgQVNTRVJUKHRleHRFbmNvZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBT
dHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9TdHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0
ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0
cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgICAgICBtX3Jlc291
cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3RyaW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5sZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNv
dXJjZVVSTHMuYWRkKHVybCk7CisgICAgfQorfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJ
bWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgS1VSTCYgdXJsKQorewor
ICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWltYWdlIHx8IGltYWdlLT5pbWFnZSgpID09IElt
YWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBl
ID0gaW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUoKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5k
KFJlc291cmNlKHVybCwgbWltZVR5cGUsIGltYWdlLT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBt
X3Jlc291cmNlVVJMcy5hZGQodXJsKTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmll
dmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2
ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBh
Z2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24pCit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0
aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxl
c2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0
eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5
bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsKKworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWlt
YWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3IgdWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3Bl
cnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9mIGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtl
IHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAgICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJl
IG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9u
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8vIEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1
bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUgYW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRo
ZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFsbHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBv
dXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlv
biBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0eQorICAgICAgICAvLyBuYW1lcywgbm90IElE
cy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjc3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24t
PmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNsYXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAg
IGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgpKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VWYWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdl
VmFsdWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAgICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2Ug
PSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJbWFnZSgpOworICAgICAgICAvLyBOb24gY2Fj
aGVkLWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xkZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRh
LgorICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwgIXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2Uo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9
IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2UqPihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2Uo
KTsKKworICAgICAgICBLVVJMIHVybCA9IGNzc1N0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGltYWdlLT51cmwoKSk7CisgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2Us
IHVybCk7CisgICAgfQorfQorCitLVVJMIFBhZ2VTZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1l
KEZyYW1lKiBmcmFtZSkKK3sKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0
ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJhbWUpOworICAgIGlmIChpdGVyICE9IG1fYmxh
bmtGcmFtZVVSTHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3Ry
aW5nIHVybCA9IG1ha2VTdHJpbmcoInd5Y2l3eWc6Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlciht
X2JsYW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBLVVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5n
LCB1cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMuYWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAg
IHJldHVybiBmYWtlVVJMOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uOGU1NzU0NjJhNDUzYWE3ZDM3ZDU1NzcwNjE1MjQ0N2IwZmM5Y2NmMwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vIHRlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgUGFnZVNlcmlhbGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFs
aXplcl9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRJbWFnZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJh
bWU7CitjbGFzcyBQYWdlOworCisvLyBUaGlzIGNsYXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEg
cGFnZSBjb250ZW50cyBiYWNrIHRvIHRleHQgKHR5cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlh
bGl6ZXMgYWxsIHRoZSBwYWdlIGZyYW1lcyBhbmQgcmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFz
IGltYWdlcyBhbmQgQ1NTIHN0eWxlc2hlZXRzLgorY2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVi
bGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIEtVUkwgdXJsOworICAgICAgICBT
dHJpbmcgbWltZVR5cGU7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAg
ICAgIFJlc291cmNlKCk7CisgICAgICAgIFJlc291cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKwor
ICAgIGV4cGxpY2l0IFBhZ2VTZXJpYWxpemVyKFZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8v
IEluaXRpYXRlcyB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2Vy
aWFsaXplZCBjb250ZW50IGFuZCByZXRyaWV2ZWQKKyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVk
IHRvIHRoZSBWZWN0b3IgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291
cmNlIGluIHRoYXQKKyAgICAvLyB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNv
bnRlbnQuCisgICAgdm9pZCBzZXJpYWxpemUoUGFnZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFu
a0ZyYW1lKEZyYW1lKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFt
ZSopOworCisgICAgLy8gU2VyaWFsaXplcyB0aGUgc3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5k
IGFkZHMgaXQgdG8gdGhlIHJlc291cmNlcyBpZiBVUkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0
IGFsc28gYWRkcyBhbnkgcmVzb3VyY2VzIGluY2x1ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5j
bHVkaW5nIGFueSBpbXBvcnRlZCBzdHlsZXNoZWV0cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcyku
CisgICAgdm9pZCBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBL
VVJMJik7CisKKyAgICB2b2lkIGFkZEltYWdlVG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25z
dCBLVVJMJik7CisgICAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENT
U1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVs
ZShDU1NTdHlsZVJ1bGUqKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOwor
ICAgIExpc3RIYXNoU2V0PEtVUkw+IG1fcmVzb3VyY2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUq
LCBLVVJMPiBtX2JsYW5rRnJhbWVVUkxzOworICAgIHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50
ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAxNzg1
NTNmNTc3ZDZhMmIwZTE1NjU3NGMwOGFmM2ZkZWRlNWRkOThkLi4xOTk1NzA3MmY2NThmMTkwNWJi
OGRjZDQzNDhlY2QxNDRjMjFkMDdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDM0IEBACisyMDExLTA0LTI1ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbnRy
b2R1Y2luZyBhIG5ldyBBUEkgdG8gc2VyaWFsaXplIGEgV2ViVmlldyBiYWNrIHRvIEhUTUwuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0NworCisg
ICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIu
aDoKKyAgICAgICAgKiBzcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKToKKyAgICAgICAgKiB0ZXN0cy9XZWJQYWdl
TmV3U2VyaWFsaXplclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Js
YW5rX2ZyYW1lcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2JsdWVfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2dyZWVuX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbDogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzczog
QWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVz
LmNzczogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0
eWxlcy5jc3M6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb2wt
ZG90LnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vcmFu
Z2VfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvcHVycGxlX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL3JlZF9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWw6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdWwtZG90LnBuZzogQWRkZWQuCisgICAgICAgICog
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci95ZWxsb3dfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgor
CiAyMDExLTA0LTI2ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByODQ5NTEuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCBiMDUyOTgxZmQzZDdiZjEwNDMxYWM5ZDI5OWRjMGEwNTQzMWQy
OTQ4Li43ZDNhNmI5NTc2MmYyYTgyNGJiNTJmYmM0ZTU5OGQ3YzkzM2M2MzU4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTc3LDYgKzc3LDcgQEAKICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL1BvcHVwTWVudVRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rz
L1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1Vu
aXNjcmliZUhlbHBlclRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBh
Z2VOZXdTZXJpYWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2Vi
UGFnZVNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAg
IH1dLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNl
cmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxp
emVyLmgKaW5kZXggYjRkNTcxNTM1YWFiOGZjMjJlZTIwNjZlMmNlMGUxYmFhZjlkODZlZC4uYTEw
OGE2MmMwNmU0M2NhYzhhMTFmZDM1NGNjMjQ1YjY3ZGY1MDhjMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCkBAIC0zMSwxNCArMzEs
MTQgQEAKICNpZm5kZWYgV2ViUGFnZVNlcmlhbGl6ZXJfaAogI2RlZmluZSBXZWJQYWdlU2VyaWFs
aXplcl9oCiAKKyNpbmNsdWRlICJXZWJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisjaW5jbHVkZSAiV2ViVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJLaXQgewotY2xhc3MgV2ViQ1N0
cmluZzsKIGNsYXNzIFdlYkZyYW1lOwogY2xhc3MgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQ7CiBj
bGFzcyBXZWJTdHJpbmc7Ci1jbGFzcyBXZWJVUkw7CiBjbGFzcyBXZWJWaWV3OwogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIApAQCAtNDYsNiArNDYsMjMgQEAgdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFdlYlZlY3RvcjsKIC8vIHdoaWNoIGNvbnRhaW4gYWxsIHJl
c291cmNlIGxpbmtzIHRoYXQgaGF2ZSBsb2NhbCBjb3B5LgogY2xhc3MgV2ViUGFnZVNlcmlhbGl6
ZXIgewogcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7CisgICAgICAgIFdlYlVSTCB1cmw7
CisgICAgICAgIFdlYkNTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFdlYkNTdHJpbmcgZGF0YTsK
KyAgICB9OworCisgICAgLy8gU2VyaWFsaXplcyBhbGwgdGhlIGZyYW1lcyBmcm9tIHRoZSBXZWJW
aWV3LCByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgIC8vIHJlc291cmNlcyAoc3VjaCBhcyBpbWFn
ZXMgYW5kIENTUykgYW5kIGFkZHMgdGhlbSB0byB0aGUgcGFzc2VkIHZlY3Rvci4KKyAgICAvLyBU
aGUgZmlyc3QgcmVzb3VyY2UgaW4gdGhhdCB2ZWN0b3IgaXMgdGhlIHRvcCBmcmFtZSBjb250ZW50
cy4KKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBhbHNvIHN0cmlwcy1vdXQgYW55IHNjcmlwdCB0YWcg
b3IgbGluayB0byBKYXZhU2NyaXB0LgorICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgc2VyaWFs
aXplKFdlYlZpZXcqLCBXZWJWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJTVBPUlRBTlQ6
CisgICAgLy8gVGhlIEFQSSBiZWxvdyBpcyBhbiBvbGRlciBpbXBsZW1lbnRhdGlvbiBvZiBhIHBh
Z2VzZXJpYWxpemF0aW9uIHRoYXQKKyAgICAvLyB3aWxsIGJlIHJlbW92ZWQgc29vbi4KKworCiAg
ICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGZpbmQgb3V0IGFsbCBmcmFtZXMgYW5kIHNlcmlhbGl6
ZSB0aGVtIHRvIEhUTUwgZGF0YS4KICAgICAvLyBXZSBoYXZlIGEgZGF0YSBidWZmZXIgdG8gdGVt
cG9yYXJ5IHNhdmluZyBnZW5lcmF0ZWQgaHRtbCBkYXRhLiBXZSB3aWxsCiAgICAgLy8gc2VxdWVu
dGlhbGx5IGNhbGwgV2ViUGFnZVNlcmlhemxpZXJDbGllbnQgb25jZSB0aGUgZGF0YSBidWZmZXIg
aXMgZnVsbC4KQEAgLTY0LDkgKzgxLDkgQEAgcHVibGljOgogICAgIC8vIHNhdmVkIGxpbmtzLCB3
aGljaCBtYXRjaGVkIHdpdGggdmVjdG9yOmxpbmtzIG9uZSBieSBvbmUuCiAgICAgLy8gVGhlIHBh
cmFtZXRlciBsb2NhbERpcmVjdG9yeU5hbWUgaXMgcmVsYXRpdmUgcGF0aCBvZiBkaXJlY3Rvcnkg
d2hpY2gKICAgICAvLyBjb250YWluIGFsbCBzYXZlZCBhdXhpbGlhcnkgZmlsZXMgaW5jbHVkZWQg
YWxsIHN1YiBmcmFtZXMgYW5kIHJlc291cmNlcy4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29s
IHNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUsCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBz
ZXJpYWxpemUoV2ViRnJhbWUqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgcmVjdXJzaXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJVUkw+JiBsaW5rcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5n
PiYgbG9jYWxQYXRocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBXZWJTdHJpbmcmIGxvY2FsRGlyZWN0b3J5TmFtZSk7CkBAIC04NSw3ICsxMDIsNyBAQCBwdWJs
aWM6CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1FVEEgZm9yIGNoYXJzZXQgZGVjbGFyYXRpb24uCiAg
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWV0YUNoYXJzZXREZWNsYXJh
dGlvbihjb25zdCBXZWJTdHJpbmcmIGNoYXJzZXQpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBNT1RX
IGRlY2xhcmF0aW9uLgotICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1h
cmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYgdXJsKTsKKyAgICBXRUJLSVRfQVBJ
IHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVXZWJEZWNsYXJhdGlvbihjb25zdCBX
ZWJVUkwmKTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgZGVmYXVsdCBiYXNlIHRhZyBkZWNsYXJhdGlv
bi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVCYXNlVGFnRGVjbGFy
YXRpb24oY29uc3QgV2ViU3RyaW5nJiBiYXNlVGFyZ2V0KTsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKaW5kZXggYzhjNzUyOTdmNDJk
NzhiODlmZTcwZGQ5Zjk0MDAxMzM3ZjlmY2U5OS4uMjMyZTIxMTYwMTU5Yzg4NmQ4ZTRlZDE0MDA4
NGM2YjVjZjczMWU1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
UGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBh
Z2VTZXJpYWxpemVyLmNwcApAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkhUTUxJbnB1dEVs
ZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLVVJMLmgiCisjaW5j
bHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKICNpbmNsdWRlICJWZWN0b3IuaCIKIAogI2luY2x1ZGUg
IldlYkNTdHJpbmcuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJXZWJVUkwuaCIKICNp
bmNsdWRlICJXZWJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2Vi
Vmlld0ltcGwuaCIKIAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAK
QEAgLTE3OSw2ICsxODEsMjUgQEAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckZyYW1lKEZyYW1l
KiBmcmFtZSwKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3ZvaWQgV2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShXZWJWaWV3KiB2aWV3LCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlPiogcmVzb3VyY2VzUGFyYW0pCit7CisgICAgVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFBhZ2VTZXJpYWxpemVyIHNlcmlhbGl6ZXIoJnJlc291
cmNlcyk7CisgICAgc2VyaWFsaXplci5zZXJpYWxpemUoc3RhdGljX2Nhc3Q8V2ViVmlld0ltcGwq
Pih2aWV3KS0+cGFnZSgpKTsKKworICAgIFZlY3RvcjxSZXNvdXJjZT4gcmVzdWx0OworICAgIGZv
ciAoVmVjdG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT46OmNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSByZXNvdXJjZXMuYmVnaW4oKTsgaXRlciAhPSByZXNvdXJjZXMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBSZXNvdXJjZSByZXNvdXJjZTsKKyAgICAgICAgcmVzb3VyY2UudXJsID0gaXRlci0+
dXJsOworICAgICAgICByZXNvdXJjZS5taW1lVHlwZSA9IGl0ZXItPm1pbWVUeXBlLmFzY2lpKCk7
CisgICAgICAgIC8vIEZJWE1FOiB3ZSBhcmUgY29weWluZyBhbGwgdGhlIHJlc291cmNlIGRhdGEg
aGVyZS4gSWRlYWx5IHdlIHdvdWxkIGhhdmUgYSBXZWJTaGFyZWREYXRhKCkuCisgICAgICAgIHJl
c291cmNlLmRhdGEgPSBXZWJDU3RyaW5nKGl0ZXItPmRhdGEtPmRhdGEoKSwgaXRlci0+ZGF0YS0+
c2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvdXJjZSk7CisgICAgfQorCisgICAg
KnJlc291cmNlc1BhcmFtID0gcmVzdWx0OyAgICAgICAgIAorfQorCiBib29sIFdlYlBhZ2VTZXJp
YWxpemVyOjpzZXJpYWxpemUoV2ViRnJhbWUqIGZyYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgcmVjdXJzaXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiBjbGllbnQsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjRiMGRhY2ViZjMwMmY3YzY0YzA2NGY5ZDNhYTg3NGVmZjI0NmYyNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5ld1Nl
cmlhbGl6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJQYWdlU2VyaWFsaXplci5oIgorI2luY2x1ZGUgIldlYlNjcmlwdFNvdXJjZS5oIgor
I2luY2x1ZGUgIldlYlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVk
ZSAiV2ViVVJMLmgiCisjaW5jbHVkZSAiV2ViVVJMUmVxdWVzdC5oIgorI2luY2x1ZGUgIldlYlVS
TFJlc3BvbnNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSA8Z29vZ2xldXJs
L3NyYy9ndXJsLmg+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQv
c3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitu
YW1lc3BhY2UgeworCitjbGFzcyBUZXN0V2ViRnJhbWVDbGllbnQgOiBwdWJsaWMgV2ViRnJhbWVD
bGllbnQgeworcHVibGljOgorICAgIFRlc3RXZWJGcmFtZUNsaWVudCgpIDogbV9zY3JpcHRFbmFi
bGVkKGZhbHNlKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgYWxsb3dTY3JpcHQoV2ViRnJhbWUqLCBi
b29sIC8qIGVuYWJsZWRQZXJTZXR0aW5ncyAqLykgeyByZXR1cm4gbV9zY3JpcHRFbmFibGVkOyB9
CisgICAgYm9vbCBtX3NjcmlwdEVuYWJsZWQ7Cit9OworCitjbGFzcyBXZWJQYWdlTmV3U2VyaWFs
aXplVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICBXZWJQYWdlTmV3
U2VyaWFsaXplVGVzdCgpCisgICAgICAgIDogbV9odG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9t
VVRGOCgidGV4dC9odG1sIikpCisgICAgICAgICwgbV94aHRtbE1pbWVUeXBlKFdlYlN0cmluZzo6
ZnJvbVVURjgoImFwcGxpY2F0aW9uL3hodG1sK3htbCIpKQorICAgICAgICAsIG1fY3NzTWltZVR5
cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgidGV4dC9jc3MiKSkKKyAgICAgICAgLCBtX3BuZ01pbWVU
eXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoImltYWdlL3BuZyIpKQorICAgIHsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgU2V0VXAoKQorICAgIHsKKyAgICAgICAgLy8gQ3Jl
YXRlIGFuZCBpbml0aWFsaXplIHRoZSBXZWJWaWV3LgorICAgICAgICBtX3dlYlZpZXcgPSBXZWJW
aWV3OjpjcmVhdGUoMCk7CisKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgaW1hZ2VzIHRvIGxvYWQu
CisgICAgICAgIFdlYlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fd2ViVmlldy0+c2V0dGluZ3MoKTsK
KyAgICAgICAgc2V0dGluZ3MtPnNldEltYWdlc0VuYWJsZWQodHJ1ZSk7CisgICAgICAgIHNldHRp
bmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisKKyAgICAgICAgbV93ZWJW
aWV3LT5pbml0aWFsaXplTWFpbkZyYW1lKCZtX3dlYkZyYW1lQ2xpZW50KTsKKyAgICB9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgVGVhckRvd24oKQorICAgIHsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6
OlVucmVnaXN0ZXJBbGxNb2NrZWRVUkxzKCk7CisgICAgICAgIG1fd2ViVmlldy0+Y2xvc2UoKTsK
KyAgICB9CisKKyAgICB2b2lkIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChjb25zdCBXZWJVUkwmIHVy
bCwgY29uc3QgV2ViU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgV2ViU3RyaW5nJiBtaW1lVHlwZSkK
KyAgICB7CisgICAgICAgIFdlYlVSTFJlc3BvbnNlIHJlc3BvbnNlOworICAgICAgICByZXNwb25z
ZS5pbml0aWFsaXplKCk7CisgICAgICAgIHJlc3BvbnNlLnNldE1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICAgICAgcmVzcG9uc2Uuc2V0SFRUUFN0YXR1c0NvZGUoMjAwKTsKKyAgICAgICAgc3RkOjpz
dHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpLnV0Zjgo
KTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyLyIpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5h
bWUudXRmOCgpKTsKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJlZ2lzdGVyTW9ja2VkVVJMKHVy
bCwgcmVzcG9uc2UsIFdlYlN0cmluZzo6ZnJvbVVURjgoZmlsZVBhdGgpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGxvYWRVUkxJblRvcEZyYW1lKGNvbnN0IEdVUkwmIHVybCkKKyAgICB7CisgICAgICAg
IFdlYlVSTFJlcXVlc3QgdXJsUmVxdWVzdDsKKyAgICAgICAgdXJsUmVxdWVzdC5pbml0aWFsaXpl
KCk7CisgICAgICAgIHVybFJlcXVlc3Quc2V0VVJMKFdlYlVSTCh1cmwpKTsKKyAgICAgICAgbV93
ZWJWaWV3LT5tYWluRnJhbWUoKS0+bG9hZFJlcXVlc3QodXJsUmVxdWVzdCk7CisgICAgICAgIC8v
IE1ha2Ugc3VyZSBhbnkgcGVuZGluZyByZXF1ZXN0IGdldCBzZXJ2ZWQuCisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01vY2tlZFJlcXVlc3RzKCk7CisgICAgICAgIC8v
IFNvbWUgcmVxdWVzdHMgZ2V0IGRlbGF5ZWQsIHJ1biB0aGUgdGltZXIuCisgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpSdW5BbGxQZW5kaW5nTWVzc2FnZXMoKTsKKyAgICAgICAgLy8gU2VydmVyIHRo
ZSBkZWxheWVkIHJlc291cmNlcy4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNo
cm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICB9CisKKyAgICB2b2lkIGVuYWJsZUpTKCkKKyAg
ICB7CisgICAgICAgIG1fd2ViRnJhbWVDbGllbnQubV9zY3JpcHRFbmFibGVkID0gdHJ1ZTsKKyAg
ICB9CisKKyAgICB2b2lkIHJ1bk9uTG9hZCgpCisgICAgeworICAgICAgICBtX3dlYlZpZXctPm1h
aW5GcmFtZSgpLT5leGVjdXRlU2NyaXB0KFdlYlNjcmlwdFNvdXJjZShXZWJTdHJpbmc6OmZyb21V
VEY4KCJvbkxvYWQoKSIpKSk7CisgICAgfQorCisgICAgY29uc3QgV2ViU3RyaW5nJiBodG1sTWlt
ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2h0bWxNaW1lVHlwZTsgfQorICAgIGNvbnN0IFdlYlN0
cmluZyYgeGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1feGh0bWxNaW1lVHlwZTsgfQor
ICAgIGNvbnN0IFdlYlN0cmluZyYgY3NzTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2Nzc01p
bWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBwbmdNaW1lVHlwZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcG5nTWltZVR5cGU7IH0KKyAgICAKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZVZlY3Rv
ckNvbnRhaW5zKGNvbnN0IFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+JiBy
ZXNvdXJjZXMsIGNoYXIqIHVybCwgY2hhciogbWltZVR5cGUpCisgICAgeworICAgICAgICBXZWJV
Ukwgd2ViVVJMID0gV2ViVVJMKEdVUkwodXJsKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzb3VyY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBXZWJQYWdl
U2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzW2ldOworICAgICAgICAg
ICAgaWYgKHJlc291cmNlLnVybCA9PSB3ZWJVUkwgJiYgIXJlc291cmNlLmRhdGEuaXNFbXB0eSgp
ICYmICFyZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmcobWltZVR5cGUpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKworcHJpdmF0ZToKKyAg
ICBXZWJTdHJpbmcgbV9odG1sTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1feGh0bWxNaW1lVHlw
ZTsKKyAgICBXZWJTdHJpbmcgbV9jc3NNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV9wbmdNaW1l
VHlwZTsKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQgbV93ZWJGcmFtZUNsaWVudDsKK307CisKKy8v
IFRlc3RzIHRoYXQgYSBwYWdlIHdpdGggcmVzb3VyY2VzIGFuZCBzdWItZnJhbWUgaXMgcmVwb3J0
ZWQgd2l0aCBhbGwgaXRzIHJlc291cmNlcy4KKy8vIEZJWE1FOiByZWVuYWJsZSB0aGVzZSB0ZXN0
cyBvbmNlIHRoZSBDaHJvbWl1bSBwYXJ0IG9mIHRoZSB0ZXN0X3dlYmtpdF9jbGllbnQgaGF2ZSBs
YW5kZWQuCitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1BhZ2VXaXRo
RnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWVzLgorICAgIFdlYlVS
TCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInRvcF9mcmFt
ZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJpZnJhbWUuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxM
b2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiksIFdlYlN0cmluZzo6
ZnJvbVVURjgoImlmcmFtZTIuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJN
b2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5n
IiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNv
bS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNr
Z3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAg
ICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVSTCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFn
ZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6
OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNv
dXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxk
IGJlIHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJj
ZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJs
ID09IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291
cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDYsIHJl
c291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9i
bHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1l
Lmh0bWwiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiLCAidGV4
dC9odG1sIikpOworfQorCisvLyBUZXN0IHRoYXQgd2hlbiBzZXJpYWxpemluZyBhIHBhZ2UsIGFs
bCBDU1MgcmVzb3VyY2VzIGFyZSByZXBvcnRlZCwgaW5jbHVkaW5nIHVybCgpJ3MKKy8vIGFuZCBp
bXBvcnRzIGFuZCBsaW5rcy4gTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgdGhlIHJlc291cmNlcyBj
b250ZW50cywgd2Ugb25seSBtYWtlIHN1cmUKKy8vIHRoZXkgYXJlIGFsbCByZXBvcnRlZCB3aXRo
IHRoZSByaWdodCBtaW1lIHR5cGUgYW5kIHRoYXQgdGhleSBjb250YWluIHNvbWUgZGF0YS4KK1RF
U1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQ1NTUmVzb3VyY2VzKQorewor
ICAgIC8vIFJlZ2lzdGVyIHRoZSBtb2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJM
IHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiY3NzX3Rlc3Rf
cGFnZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgibGlua19zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVy
TW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZV9mcm9t
X2xpbmsuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImltcG9ydF9zdHlsZV9mcm9tX2xpbmsu
Y3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVU
RjgoImltcG9ydF9zdHlsZXMuY3NzIiksIGNzc01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIp
LCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUo
KSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20v
b3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNr
Z3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQo
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgieWVsbG93X2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOwor
ICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVu
X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQu
cG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3Vu
ZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicHVycGxlX2JhY2tncm91bmQucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL3VsLWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidWwtZG90LnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoIm9sLWRvdC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRv
cEZyYW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxX
ZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFs
aXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNF
KHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBz
aG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJl
c291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwg
cmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAg
IEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEo
MTIsIHJlc291cmNlcy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4K
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlX2Zyb21fbGluay5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUo
cmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3Jl
ZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3Vy
Y2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19iYWNr
Z3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91
bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBu
ZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3VsLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikp
OworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9vbC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKK30KKworLy8gVGVz
dHMgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSB3aXRoIGJsYW5rIGZyYW1lcyB0aGVzZSBh
cmUgcmVwb3J0ZWQgd2l0aCB0aGVpciByZXNvdXJjZXMuCitURVNUX0YoV2ViUGFnZU5ld1Nlcmlh
bGl6ZVRlc3QsIERJU0FCTEVEX0JsYW5rRnJhbWVzKQoreworICAgIC8vIFJlZ2lzdGVyIHRoZSBt
b2NrZWQgZnJhbWUgYW5kIGxvYWQgaXQuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgi
aHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFt
ZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmxhbmtfZnJhbWVzLmh0bWwiKSwgaHRtbE1pbWVU
eXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dy
b3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoIm9yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAg
ICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2Jh
Y2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJsdWVfYmFja2dyb3VuZC5wbmci
KSwgcG5nTWltZVR5cGUoKSk7CisKKyAgICBlbmFibGVKUygpOworICAgIGxvYWRVUkxJblRvcEZy
YW1lKHRvcEZyYW1lVVJMKTsKKyAgICBydW5PbkxvYWQoKTsKKworICAgIFdlYlZlY3RvcjxXZWJQ
YWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXpl
cjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJl
c291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91
bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291
cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51
cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVz
b3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVY
UEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNywg
cmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3
dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9U
UlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNv
bS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICAvLyBUaGUgYmxhbmsg
ZnJhbWVzIHNob3VsZCBoYXZlIGdvdCBhIG1hZ2ljIFVSTC4KKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8wIiwgInRleHQv
aHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNl
cywgInd5Y2l3eWc6Ly9mcmFtZS8xIiwgInRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgInd5Y2l3eWc6Ly9mcmFtZS8yIiwgInRl
eHQvaHRtbCIpKTsKK30KKworVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxF
RF9TZXJpYWxpemVYTUxIYXNSaWdodERlY2xhcmF0aW9uKQoreworICAgIFdlYlVSTCB0b3BGcmFt
ZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vc2ltcGxlLnhodG1sIik7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJzaW1w
bGUueGh0bWwiKSwgeGh0bWxNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRv
cEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+
IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywg
JnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAg
IAorICAgIC8vIFdlIGV4cGVjdCBvbmx5IG9uZSByZXNvdXJjZSwgdGhlIFhNTC4KKyAgICBBU1NF
UlRfRVEoMSwgcmVzb3VyY2VzLnNpemUoKSk7CisgICAgc3RkOjpzdHJpbmcgeG1sID0gcmVzb3Vy
Y2VzWzBdLmRhdGE7CisKKyAgICAvLyBXZSBzaG91bGQgaGF2ZSBvbmUgYW5kIG9ubHkgb25lIGlu
c3RhbmNlIG9mIHRoZSBYTUwgZGVjbGFyYXRpb24uCisgICAgc2l6ZV90IHBvcyA9IHhtbC5maW5k
KCI8P3htbCB2ZXJzaW9uPSIpOworICAgIEFTU0VSVF9UUlVFKHBvcyAhPSBzdGQ6OnN0cmluZzo6
bnBvcyk7CisKKyAgICBwb3MgPSB4bWwuZmluZCgiPD94bWwgdmVyc2lvbj0iLCBwb3MgKyAxKTsK
KyAgICBBU1NFUlRfVFJVRShwb3MgPT0gc3RkOjpzdHJpbmc6Om5wb3MpOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
YmxhbmtfZnJhbWVzLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmRmYjIwNDk5YzQzMjYz
Y2I1YzI0NmZlN2UxOTI1NDQyY2Q3MTQzNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApA
QCAtMCwwICsxLDM3IEBACis8aHRtbD4KKworPHNjcmlwdD4KKyAgZnVuY3Rpb24gb25sb2FkKCkg
eworICAgIHZhciBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAg
IHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYxIik7CisgICAgZGl2LmFw
cGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVy
SFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nYmx1ZV9iYWNr
Z3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJteURpdjIiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAg
ZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0
PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdyZWRfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBt
b3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJh
bWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibXlEaXYzIik7CisgICAg
ZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5
LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBpbWFnZSA8aW1nIHNyYz0nb3Jh
bmdlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICB9Cisg
IAorPC9zY3JpcHQ+CisKKzxib2R5IG9ubG9hZD0ib25sb2FkKCkiPgorICBUaGlzIHBhZ2UgY3Jl
YXRlcyBlbXB0eSBpZnJhbWVzIGFuZCBhZGRzIGNvbnRlbnQgdG8gdGhlbSBkeW5hbWljYWxseS48
YnI+PGJyPgorICA8ZGl2IGlkPSJteURpdjEiPjwvZGl2PgorICA8ZGl2IGlkPSJteURpdjIiPjwv
ZGl2PgorICA8ZGl2IGlkPSJteURpdjMiPjwvZGl2PgorPC9ib2R5PgorCis8L2h0bWw+CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
Y3NzX3Rlc3RfcGFnZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDYzN2YwZjAyMmQ3
NTljMGFkYzlkMjAxYmNmNDMxNjE0NmJkMDQ0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0X3BhZ2UuaHRt
bApAQCAtMCwwICsxLDExMiBAQAorPGh0bWw+CisKKzwhLS0gVGhpcyBwYWdlIGlzIHVzZWQgdG8g
dGVzdCB0aGF0IENTUyByZXNvdXJjZXMgYXJlIHJldHJpZXZlZCBjb3JyZWN0bHkgYnkgdGhlCisg
ICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpnZW5lcmF0ZVNuYXBzaG90IG1ldGhvZAorLS0+CisKKzxo
ZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJsaW5r
X3N0eWxlcy5jc3MiIC8+CisKKzxzdHlsZT4KK0BpbXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVzLmNz
cycpOworCitAZm9udC1mYWNlIHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZTsKKyAgc3JjOiB1
cmwoJ0NodW5rZml2ZS5vdGYnKTsKKyAgc3JjOiB1cmwoJ0NodW5rZml2ZS13ZWJmb250LmVvdCkg
Zm9ybWF0KCdlb3QnKTsKK30KKworI2NodW5rZml2ZURpdiB7CisgIGZvbnQtZmFtaWx5OiBDaHVu
a2ZpdmUsIHNhbnMtc2VyaWY7Cit9Cis8L3N0eWxlPgorCis8c3R5bGU+CisjZGl2Qmx1ZSB7Cisg
IGJhY2tncm91bmQtaW1hZ2U6dXJsKCdibHVlX2JhY2tncm91bmQucG5nJyk7Cit9CisKK3VsIHsK
KyAgbGlzdC1zdHlsZS1pbWFnZTogdXJsKCd1bC1kb3QucG5nJyk7Cit9CisKK29sIHsKKyAgbGlz
dC1zdHlsZS1pbWFnZTogdXJsKCdvbC1kb3QucG5nJyk7Cit9CisKKzwvc3R5bGU+CisKKzxzY3Jp
cHQ+CisvLyBEeW5hbWljYWxseSBjcmVhdGVzIGEgQ1NTIHN0eWxlLgorZnVuY3Rpb24gb25Mb2Fk
KCkgeworICB2YXIgc3R5bGVUZXh0ID0gIiNkaXZQdXJwbGUge2JhY2tncm91bmQtaW1hZ2U6dXJs
KCdwdXJwbGVfYmFja2dyb3VuZC5wbmcnKX0iOworICB2YXIgZGl2ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2RpdlB1cnBsZScpOworICB2YXIgc3R5bGVOb2RlPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdzdHlsZScpOworICBzdHlsZU5vZGUudHlwZT0gJ3RleHQvY3NzJzsKKyAgc3R5bGVO
b2RlLm1lZGlhPSAnc2NyZWVuJzsKKyAgc3R5bGVOb2RlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHN0eWxlVGV4dCkpOworICBkaXYuYXBwZW5kQ2hpbGQoc3R5bGVOb2RlKTsK
K30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9Im9uTG9hZCgpIj4KKworPCEt
LSBUZXh0IHVzaW5nIGFuIGltcG9ydGVkIGZvbnQgLS0+Cis8ZGl2IGlkPSdjaHVua2ZpdmVEaXYn
PlRoaXMgdGV4dCB1c2VzIHRoZSBDaHVua2ZpdmUgZm9udC48L2Rpdj4KKworPCEtLSBTdHlsZSBp
cyBpbiBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlJlZCc+CitUaGlzIGRpdiBoYXMgYSBy
ZWQgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbiBh
IGZpbGUgaW1wb3J0ZWQgaW4gdGhlIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2T3Jhbmdl
Jz4KK1RoaXMgZGl2IGhhcyBhIG9yYW5nZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2
PgorCis8IS0tIFN0eWxlIGlzIGluIGFuIGltcG9ydGVkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZZ
ZWxsb3cnPgorVGhpcyBkaXYgaGFzIGEgeWVsbG93IGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgor
PC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgZGVmaW5lZCBpbiBhIHN0eWxlIHNlY3Rpb24gaW4gdGhl
IGhlYWRlciAtLT4KKzxkaXYgaWQ9J2RpdkJsdWUnPgorVGhpcyBkaXYgaGFzIGEgYmx1ZSBpbWFn
ZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGlubGluZWQgLS0+
Cis8ZGl2IGlkPSdkaXZHcmVlbicgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6dXJsKCdncmVlbl9i
YWNrZ3JvdW5kLnBuZycpIj4KK1RoaXMgZGl2IGhhcyBhIGdyZWVuIGltYWdlIGFzIGl0cyBiYWNr
Z3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaWQgZHluYW1pY2FsbHkgZ2VuZXJhdGVkIHdp
dGggSmF2YVNjcmlwdCBpbiB0aGUgb25sb2FkIGhhbmRsZXIgLS0+Cis8ZGl2IGlkPSdkaXZQdXJw
bGUnPgorVGhpcyBkaXYgaGFzIGEgcHVycGxlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9k
aXY+CisKK1Vub3JkZXJlZCBsaXN0Ojxicj4KKzx1bD4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+
UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPkdyZWVu
PC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L3VsPgorPGJyPgorCitPcmRlcmVkIGxpc3Q6PGJyPgor
PG9sPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4K
KyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvb2w+
CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1sCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY1ZWRiZGMxODkxY2YxYjZmOTY3YjdkMzc2MWUyMDczMGQ4MzllNmIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZy
YW1lLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iYmx1
ZV9iYWNrZ3JvdW5kLnBuZyIvPgorPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5kLnBuZyIvPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZk
MDQ0YjJlY2NiYjdmOWUzZjBiNWRmY2E4Njg4ZjJlZGZjZjk3OGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Mi5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImdyZWVu
X2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0iYmx1ZV9iYWNrZ3JvdW5kLnBuZyIvPgorCis8
L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVf
ZnJvbV9saW5rLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZjY4M2U1ODFmNDZlYjVlZWZiMzc2NDcxNDMwZThj
ZmIyZWE2YmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCkBAIC0wLDAg
KzEsMyBAQAorI2Rpdk9yYW5nZSB7CisgIGJhY2tncm91bmQtaW1hZ2U6dXJsKCdvcmFuZ2VfYmFj
a2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0
X3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRjN2Y0ZDVmNGE5OWM3YWU2ZTZj
MjU0YTg5NjNlNDJhOWE4NGJhMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpAQCAtMCww
ICsxLDMgQEAKKyNkaXZZZWxsb3cgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3llbGxvd19i
YWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5r
X3N0eWxlcy5jc3MgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvbGlua19zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2N2ZiOTlhOWIwZGEwOWJlZTJjMjRl
YzgzNTVhMTdlNDMwN2E2MjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3NzCkBAIC0wLDAgKzEs
NSBAQAorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzJyk7CisKKyNkaXZS
ZWQgeworICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ3JlZF9iYWNrZ3JvdW5kLnBuZycpOworfQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVmMTJkZjYzNTY4NmM2ZjFjMWM1ZWRiNGJkZDU3MzUyM2Y4MDBhZmYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvc2ltcGxlLnhodG1sCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5j
b2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1M
IDEuMCBTdHJpY3QvL0VOIiAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwx
LXN0cmljdC5kdGQiPgorPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwi
IHhtbDpsYW5nPSJlbiI+CisgPGhlYWQ+CisgPHRpdGxlPlhIVE1MIDEuMCBTdHJpY3QgRXhhbXBs
ZTwvdGl0bGU+CisgPC9oZWFkPgorIDxib2R5PgorICAgPHA+SGVsbG8hIDwvcD4KKyA8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjMxODUy
M2FmYTRhMWIwOTg2NWM0NDkyOGQzNGE3YzExZDJmNDAyZQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUu
aHRtbApAQCAtMCwwICsxLDEyIEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0icmVkX2Jh
Y2tncm91bmQucG5nIi8+CisKKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+Cis8
b2JqZWN0IGRhdGE9ImlmcmFtZTIuaHRtbCI+PC9vYmplY3Q+Cis8aWZyYW1lIHNyYz0iaWZyYW1l
Lmh0bWwiPjwvaWZyYW1lPgorCis8L2JvZHk+CisKKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91237</attachid>
            <date>2011-04-26 23:04:55 -0700</date>
            <delta_ts>2011-04-27 08:51:35 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-58947-20110426230453.patch</filename>
            <type>text/plain</type>
            <size>65972</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYWFjMDA1ZjA4ZTA2NjZk
NTM1ZWRiNTViNmE5Nzg3Yzk2MDVjMWQyLi41ODFlYTk3Y2E4ZWRhOGQ2MDhlMzJiZDBiOGVkZWEy
ZDdiZTNmYzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IGFi
YXJ0aC4KKworICAgICAgICBJbnRyb2R1Y2luZyBhIG5ldyBjbGFzcyB0aGF0IGFsbG93cyBzZXJp
YWxpemF0aW9uIG9mIGEgcGFnZSBiYWNrCisgICAgICAgIHRvIEhUTUwvWE1MIHdpdGggYWxsIGl0
cyBzdWItZnJhbWVzIGFuZCBhbHNvIHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgICAgIHJlc291
cmNlcy4KKyAgICAgICAgVGVzdHM6IHVuaXQtdGVzdHMgaW4gY2hyb21pdW0vdGVzdHMvV2ViUGFn
ZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTg5NDcKKworICAgICAgICAqIEFuZHJvaWQubWs6CisgICAgICAgICog
Q01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpzdWdnZXN0ZWRNSU1FVHlwZSk6CisgICAgICAgICog
ZG9tL0RvY3VtZW50Lmg6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmli
dXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVu
dCk6CisgICAgICAgICogZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oOgorICAgICAgICAqIGh0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNZXRhQ2hhcnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMpOgorICAgICAg
ICAqIGh0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oOgorICAgICAgICAqIHBhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJpYWxpemVy
Lmg6IEFkZGVkLgorCiAyMDExLTA0LTI2ICBDaHVuLUx1bmcgSHVhbmcgIDxhbHZpbmNsLmh1YW5n
QGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGVsZSBQZXRlcnNvbi4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDVkMmY2NmVkYjI5MDI2YTJhOGJkNDlmYmExZmE5
NTM2YWYzOTdlMWIuLjk2MmZkMjRkOWVkYmZkOTI1MWRlYWE5ZGUwOWQ5MWU2YjU3OTg1YzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMjI0Nyw2ICsyMjQ3LDggQEAgd2ViY29y
ZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVy
LmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2UuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wYWdlL1BlcmZvcm1hbmNlLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2VOYXZpZ2F0aW9uLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggY2JkNmNiZjFkZGMyOGEzNjUx
YjY3MDM1MzI4NWQ4M2RlYmM3NDIwYy4uNjg3MjFlNGNjNmFlZDYyMjhkYjZhOTRjYjg2ZTg0ZWM1
NTQxYzExOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNzExLDYgKzcxMSw3IEBACiAgICAgICAgICAg
ICAncGFnZS9NZW1vcnlJbmZvLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZS5oJywKICAgICAg
ICAgICAgICdwYWdlL1BhZ2VHcm91cC5oJywKKyAgICAgICAgICAgICdwYWdlL1BhZ2VTZXJpYWxp
emVyLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGx1Z2luSGFsdGVyQ2xpZW50LmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUG9zaXRpb25DYWxsYmFjay5oJywKICAgICAgICAgICAgICdwYWdlL1Bvc2l0
aW9uRXJyb3IuaCcsCkBAIC0zNDYzLDYgKzM0NjQsNyBAQAogICAgICAgICAgICAgJ3BhZ2UvUGFn
ZUdyb3VwLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3Bw
JywKICAgICAgICAgICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5oJywKKyAgICAgICAg
ICAgICdwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QZXJmb3Jt
YW5jZS5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2UuaCcsCiAgICAgICAgICAg
ICAncGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMDZk
OGY0YTk1Y2VjNmI3MzdhY2ViYWJkOTA2YmY2ODAwZjk5YzZjMC4uYWU4OGIzZjI0ODA1M2ZhMGFi
YzA4YTk3NTQ1NTgxYWVlNWVmODU2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTkzNSw2ICs5MzUsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL1BhZ2UuY3BwIFwKICAgICBwYWdlL1BhZ2VHcm91cC5j
cHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCBcCisgICAgcGFnZS9QYWdl
U2VyaWFsaXplci5jcHAgXAogICAgIHBhZ2UvUGVyZm9ybWFuY2UuY3BwIFwKICAgICBwYWdlL1Bl
cmZvcm1hbmNlTmF2aWdhdGlvbi5jcHAgXAogICAgIHBhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuY3Bw
IFwKQEAgLTE4ODQsNiArMTg4NSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBhZ2UvUGFnZUdyb3Vw
LmggXAogICAgIHBhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVyLmggXAogICAgIHBhZ2UvUGFnZS5o
IFwKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmggXAogICAgIHBhZ2UvUGx1Z2luSGFsdGVyLmgg
XAogICAgIHBhZ2UvUGx1Z2luSGFsdGVyQ2xpZW50LmggXAogICAgIHBhZ2UvUHJpbnRDb250ZXh0
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRl
eCA0YWMzOGZhNWQ3NDRkNzk3Nzk1NGQ1MjE0YWY0NDhmM2NjOTAxZGIxLi44ODc0MTAwYTlkMmZm
MjM2ZTA3NzMxNTk2OTg2YzQzMmM5OTUyNmI1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMjUxNjksNiArMjUxNjksMTQgQEAKIAkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHBhZ2VcUGFnZUdyb3VwTG9hZERlZmVycmVyLmgiCiAJCQkJPgogCQkJPC9G
aWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmNwcCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAg
PC9GaWxlPgorICAgICAgICAgICAgICAgICAgICAgICAgPEZpbGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VTZXJpYWxpemVyLmgiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgICAg
IDwvRmlsZT4KIAkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBlcmZvcm1hbmNl
LmNwcCIKIAkJCQk+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggYTVhYjc5ZjhkNDZhN2NiNWUzMGI3OGU0MDY1MmY1NGQ0ZDhlOTFj
OS4uN2Q1M2FlOTQzM2ZiNzMwNzRiZmRjODM4ZjE0NzZjNTc4NWQ1NzBhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtODQ3LDYg
Kzg0Nyw4IEBACiAJCTMzQzBDQ0Q1MTEyQzVFNjIwMENFMDU3RCAvKiBTZWN1cmVUZXh0SW5wdXQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMzQzBDQ0Qz
MTEyQzVFNjIwMENFMDU3RCAvKiBTZWN1cmVUZXh0SW5wdXQuaCAqLzsgfTsKIAkJMzNEMDIxMkQx
MzFEQjM3QjAwNDA5MUE4IC8qIENvb2tpZVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxM0YwMUVBMTI3MEUxMEQwMERGQkE3MSAvKiBDb29r
aWVTdG9yYWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzcxQTY3Q0IxMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxQTY3Q0ExMUM2QzdE
QjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3BwICovOyB9OworCQkzNzFFNjVDQzEzNjYxRURD
MDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFs
aXplci5oICovOyB9OworCQkzNzFFNjVDRTEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcx
RTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLzsgfTsKIAkJMzcx
RjRGNDAwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRTBEMjVCOUFGMDBFQ0UwRDUgLyogRm9u
dERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkzNzFGNEY0MTBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGM0YwRDI1QjlBRjAwRUNFMEQ1
IC8qIEZvbnREYXRhLmNwcCAqLzsgfTsKIAkJMzcxRjRGRkMwRDI1RTdGMzAwRUNFMEQ1IC8qIFNl
Z21lbnRlZEZvbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9udERhdGEuaCAq
LzsgfTsKQEAgLTczNzEsNiArNzM3Myw4IEBACiAJCTMzQzBDQ0QyMTEyQzVFNjIwMENFMDU3RCAv
KiBTZWN1cmVUZXh0SW5wdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU2VjdXJlVGV4dElucHV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzND
MENDRDMxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWN1cmVUZXh0SW5wdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzcxQTY3Q0ExMUM2QzdEQjAwMDQ3QjhCIC8qIEh5cGhlbmF0aW9uQ0YuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSHlwaGVuYXRpb25DRi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAv
KiBQYWdlU2VyaWFsaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYWdl
U2VyaWFsaXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzFFNjVDRDEzNjYx
RUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUGFnZVNlcmlhbGl6ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkzNzFGNEYzRTBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzcxRjRGM0YwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnREYXRhLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZv
bnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlZ21lbnRlZEZvbnRE
YXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDQzNiw2ICsxNDQ0MCw4IEBA
CiAJCQkJOTMwMkIwQkUwRDc5RjgyQzAwQzdFRTgzIC8qIFBhZ2VHcm91cC5oICovLAogCQkJCTdB
Njc0QkQ5MEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwICovLAog
CQkJCTdBNjc0QkRBMEY5RUJGNEUwMDZDRjA5OSAvKiBQYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCAq
LywKKwkJCQkzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuY3BwICov
LAorCQkJCTM3MUU2NUNCMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oICovLAog
CQkJCThBODQ0RDAxMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5jcHAgKi8sCiAJCQkJ
OEE4NDREMDIxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmggKi8sCiAJCQkJOEE4NDRE
MDMxMUQzQzE4RTAwMTQwNjVDIC8qIFBlcmZvcm1hbmNlLmlkbCAqLywKQEAgLTIzMDgxLDYgKzIz
MDg3LDcgQEAKIAkJCQk0MzU4RTg4NjEzNjBBMzNCMDBFNDc0OEMgLyogU1ZHRkVEcm9wU2hhZG93
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MTBDMUMxMzY1QTQ5NjAwRUQ2RTMzIC8q
IEluc3BlY3RvcldvcmtlckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzgxMEMxRTEzNjVB
NEQ0MDBFRDZFMzMgLyogV29ya2VyQ29udGV4dEluc3BlY3RvclByb3h5LmggaW4gSGVhZGVycyAq
LywKKwkJCQkzNzFFNjVDQzEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpAQCAtMjU3OTQsNiArMjU4MDEsNyBAQAogCQkJCTE0RTBCQzU2MTM2MTQ4QTgw
MDJBRDEyRSAvKiBKU0RPTVRva2VuTGlzdEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlG
MzgxMEMxQjEzNjVBNDk2MDBFRDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNzgxNzU1ODYxMzY1QTFCMDAwOTNCRTJFIC8qIERhdGFUcmFuc2Zlckl0
ZW1zLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTM3MUU2NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQ
YWdlU2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmlu
ZGV4IDY5MjBjNTQzNDY4ZTcxODg5OThkNTg4M2Q1OGRlYzllMTdiMmU2ZWMuLjBjMDk5MDliMjYx
ZTk3Y2ZlOTdiNWU0OTJhNWU0MDcyZDU0OTc1NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApA
QCAtMTA4MCw2ICsxMDgwLDIwIEBAIHZvaWQgRG9jdW1lbnQ6OnNldENvbnRlbnQoY29uc3QgU3Ry
aW5nJiBjb250ZW50KQogICAgIGNsb3NlKCk7CiB9CiAKK1N0cmluZyBEb2N1bWVudDo6c3VnZ2Vz
dGVkTUlNRVR5cGUoKSBjb25zdAoreworICAgIGlmIChtX2RvY3VtZW50LT5pc1hIVE1MRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiOworICAgIGlmICht
X2RvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisgICAgICAgIHJldHVybiAiaW1hZ2Uvc3ZnK3ht
bCI7CisgICAgaWYgKG1fZG9jdW1lbnQtPnhtbFN0YW5kYWxvbmUoKSkKKyAgICAgICAgcmV0dXJu
ICJ0ZXh0L3htbCI7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkpCisgICAg
ICAgIHJldHVybiAidGV4dC9odG1sIjsKKworICAgIHJldHVybiBtX2RvY3VtZW50TG9hZGVyLT5y
ZXNwb25zZU1JTUVUeXBlKCk7Cit9CisKIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc2N1c3MgdGhl
IERPTSBBUEkgaGVyZSBhdCBzb21lIHBvaW50LiBJZGVhczoKIC8vICogbWFraW5nIGl0IHJlY2Vp
dmUgYSByZWN0IGFzIHBhcmFtZXRlciwgaS5lLiBub2Rlc0Zyb21SZWN0KHgsIHksIHcsIGgpOwog
Ly8gKiBtYWtpbmcgaXQgcmVjZWl2ZSB0aGUgZXhwYWRpbmcgc2l6ZSBvZiBlYWNoIGRpcmVjdGlv
biBzZXBhcmF0ZWx5LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAppbmRleCAxNDU5YzkyNWM5MDJiNmJiMjMy
ZjJlNTI3MDkzNzZkYzRkNzU2YWVkLi4zNmQ0ZmFjNzJiNWFmZjMzNGEwMmRkZWNiZTQ5ZjU5Y2M1
ZjAwMzg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaApAQCAtMzU3LDYgKzM1Nyw4IEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgc2V0Q29udGVudChjb25zdCBTdHJpbmcmKTsKIAorICAgIFN0cmluZyBzdWdn
ZXN0ZWRNSU1FVHlwZSgpIGNvbnN0OworCiAgICAgU3RyaW5nIGNvbnRlbnRMYW5ndWFnZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGVudExhbmd1YWdlOyB9CiAgICAgdm9pZCBzZXRDb250ZW50TGFu
Z3VhZ2UoY29uc3QgU3RyaW5nJiBsYW5nKSB7IG1fY29udGVudExhbmd1YWdlID0gbGFuZzsgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCmluZGV4IGI2
ZDg1ZDYxZGJlNDE1ZWQ1MjE3MTdlOWQ0OWVkY2ExNGUyMzVmMjcuLjk5MzlkNmU4MzZiYzg2MzEz
NTNjMGM0ZjcxZmZiNDdiMGI0NzNmNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvTWFya3VwQWNjdW11bGF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFy
a3VwQWNjdW11bGF0b3IuY3BwCkBAIC0xNTgsNiArMTU4LDEwIEBAIHZvaWQgTWFya3VwQWNjdW11
bGF0b3I6OmFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3Qg
U3RyaW5nCiAgICAgICAgIGRvY3VtZW50SXNIVE1MID8gRW50aXR5TWFza0luSFRNTEF0dHJpYnV0
ZVZhbHVlIDogRW50aXR5TWFza0luQXR0cmlidXRlVmFsdWUpOwogfQogCit2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mLCBFbGVtZW50
KiwgTmFtZXNwYWNlcyopCit7Cit9CisKIHZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFF1
b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5n
JiB1cmxTdHJpbmcpCiB7CiAgICAgVUNoYXIgcXVvdGVDaGFyID0gJ1wiJzsKQEAgLTMyNyw2ICsz
MzEsOSBAQCB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hh
cj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZQogICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspCiAgICAgICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1l
bnQsICphdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkpLCBuYW1lc3BhY2VzKTsKIAorICAgIC8v
IEdpdmUgYW4gb3Bwb3J0dW5pdHkgdG8gc3ViY2xhc3NlcyB0byBhZGQgdGhlaXIgb3duIGF0dHJp
YnV0ZXMuCisgICAgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhvdXQsIGVsZW1lbnQsIG5hbWVzcGFj
ZXMpOworCiAgICAgYXBwZW5kQ2xvc2VUYWcob3V0LCBlbGVtZW50KTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCmluZGV4IDBiZmM2ZTYwMDViYmY0NGIz
MGFlM2FmNzZmMzQ2Yjg3MGFhNDZmYzkuLjRmNjgxM2U2MDc0N2ZmMDJmZDExNDA3YjI4ZjQ2OWY1
OWJmY2Y4NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11
bGF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmgK
QEAgLTc0LDI1ICs3NCwyNiBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lk
IGFwcGVuZFN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGFwcGVuZFN0YXJ0VGFnKE5v
ZGUqLCBOYW1lc3BhY2VzKiA9IDApOwotICAgIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFnKE5vZGUqKTsKICAgICBzdGF0aWMgc2l6ZV90IHRv
dGFsTGVuZ3RoKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7CiAgICAgc2l6ZV90IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIHRvdGFsTGVuZ3RoKG1fc3VjY2VlZGluZ01hcmt1cCk7IH0KICAgICB2b2lk
IGNvbmNhdGVuYXRlTWFya3VwKFZlY3RvcjxVQ2hhcj4mIG91dCk7CiAgICAgdm9pZCBhcHBlbmRB
dHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0cmluZyYgYXR0cmli
dXRlLCBib29sIGRvY3VtZW50SXNIVE1MKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9t
QXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKICAgICB2
b2lkIGFwcGVuZFF1b3RlZFVSTEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwg
Y29uc3QgU3RyaW5nJiB1cmxTdHJpbmcpOwogICAgIHZvaWQgYXBwZW5kTm9kZVZhbHVlKFZlY3Rv
cjxVQ2hhcj4mIG91dCwgY29uc3QgTm9kZSosIGNvbnN0IFJhbmdlKiwgRW50aXR5TWFzayk7CiAg
ICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VFbGVtZW50KGNvbnN0IEVsZW1lbnQqKTsKICAgICBi
b29sIHNob3VsZEFkZE5hbWVzcGFjZUF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmLCBOYW1lc3Bh
Y2VzJik7CiAgICAgdm9pZCBhcHBlbmROYW1lc3BhY2UoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBj
b25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VV
UkksIE5hbWVzcGFjZXMmKTsKLSAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQq
IHRleHQpIGNvbnN0OworICAgIEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCopIGNv
bnN0OwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4
dCopOwogICAgIHZvaWQgYXBwZW5kQ29tbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0
cmluZyYgY29tbWVudCk7CiAgICAgdm9pZCBhcHBlbmREb2N1bWVudFR5cGUoVmVjdG9yPFVDaGFy
PiYgcmVzdWx0LCBjb25zdCBEb2N1bWVudFR5cGUqKTsKICAgICB2b2lkIGFwcGVuZFByb2Nlc3Np
bmdJbnN0cnVjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIGRhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbGVtZW50KFZlY3Rv
cjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZE9w
ZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKik7
Ci0gICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVs
ZW1lbnQpOwotICAgIHZvaWQgYXBwZW5kQXR0cmlidXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxl
bWVudCogZWxlbWVudCwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOworICAgIHZvaWQg
YXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7
CisgICAgdm9pZCBhcHBlbmRDbG9zZVRhZyhWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqKTsK
KyAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBj
b25zdCBBdHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CiAgICAgdm9pZCBhcHBlbmRDREFUQVNlY3Rp
b24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHNlY3Rpb24pOwogICAgIHZvaWQg
YXBwZW5kU3RhcnRNYXJrdXAoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBOb2RlKiwgTmFt
ZXNwYWNlcyopOwogICAgIGJvb2wgc2hvdWxkU2VsZkNsb3NlKGNvbnN0IE5vZGUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3Bw
CmluZGV4IGVhYzdkMjgxYTQ0OWZmYWIzZTkzMTFjYjBjNGJhYjM0ZGMzZTczZDUuLjU0MTM0NjY5
OTY5NGE5MWM4ZjNmM2EwYTcxYWUzMjk1NmQwMmI3MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcApAQCAtMTAyLDE1ICsx
MDIsMjcgQEAgU3RyaW5nIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6ZXh0cmFjdENoYXJzZXQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIAogYm9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NN
ZXRhKCkKIHsKKyAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIHRva2VuQXR0cmli
dXRlcyA9IG1fdG9rZW4uYXR0cmlidXRlcygpOworICAgIEF0dHJpYnV0ZUxpc3QgYXR0cmlidXRl
czsKKyAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRl
ciA9IHRva2VuQXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9IHRva2VuQXR0cmlidXRlcy5lbmQo
KTsgKytpdGVyKSB7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lKGl0ZXItPm1fbmFtZS5k
YXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkpOworICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFs
dWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUuc2l6ZSgpKTsKKyAgICAgICAg
YXR0cmlidXRlcy5hcHBlbmQobWFrZV9wYWlyKGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVl
KSk7CisgICAgfQorCisgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVz
KGF0dHJpYnV0ZXMpOworICAgIHJldHVybiBtX2VuY29kaW5nLmlzVmFsaWQoKTsKK30KKworVGV4
dEVuY29kaW5nIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0
ZXMoY29uc3QgQXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcykKK3sKICAgICBib29sIGdvdFByYWdt
YSA9IGZhbHNlOwogICAgIE1vZGUgbW9kZSA9IE5vbmU7CiAgICAgU3RyaW5nIGNoYXJzZXQ7CiAK
LSAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMgPSBtX3Rva2Vu
LmF0dHJpYnV0ZXMoKTsKLSAgICBmb3IgKEhUTUxUb2tlbjo6QXR0cmlidXRlTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsKLSAgICAgICAgIGl0ZXIgIT0gYXR0
cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBhdHRyaWJ1dGVO
YW1lKGl0ZXItPm1fbmFtZS5kYXRhKCksIGl0ZXItPm1fbmFtZS5zaXplKCkpOwotICAgICAgICBT
dHJpbmcgYXR0cmlidXRlVmFsdWUoaXRlci0+bV92YWx1ZS5kYXRhKCksIGl0ZXItPm1fdmFsdWUu
c2l6ZSgpKTsKKyAgICBmb3IgKEF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBh
dHRyaWJ1dGVzLmJlZ2luKCk7IGl0ZXIgIT0gYXR0cmlidXRlcy5lbmQoKTsgKytpdGVyKSB7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlTmFtZSA9IGl0ZXItPmZpcnN0Owor
ICAgICAgICBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gaXRlci0+c2Vjb25kOwogCiAg
ICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09IGh0dHBfZXF1aXZBdHRyKSB7CiAgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0cmlidXRlVmFsdWUsICJjb250ZW50LXR5cGUiKSkK
QEAgLTEyNywxMyArMTM5LDEwIEBAIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNz
TWV0YSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobW9kZSA9PSBDaGFyc2V0IHx8ICht
b2RlID09IFByYWdtYSAmJiBnb3RQcmFnbWEpKSB7Ci0gICAgICAgIG1fZW5jb2RpbmcgPSBUZXh0
RW5jb2Rpbmcoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKGNoYXJzZXQpKTsKLSAg
ICAgICAgaWYgKG1fZW5jb2RpbmcuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQorICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1vZGUgPT0gUHJhZ21hICYmIGdv
dFByYWdtYSkpCisgICAgICAgIHJldHVybiBUZXh0RW5jb2Rpbmcoc3RyaXBMZWFkaW5nQW5kVHJh
aWxpbmdIVE1MU3BhY2VzKGNoYXJzZXQpKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gVGV4dEVuY29kaW5nKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBpbnQgYnl0ZXNUb0NoZWNrVW5j
b25kaXRpb25hbGx5ID0gMTAyNDsgLy8gVGhhdCBtYW55IGlucHV0IGJ5dGVzIHdpbGwgYmUgY2hl
Y2tlZCBmb3IgbWV0YSBjaGFyc2V0IGV2ZW4gaWYgPGhlYWQ+IHNlY3Rpb24gaXMgb3Zlci4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgK
aW5kZXggNDVmYmFmN2FiOWJlNDk1YTc4NjI0Y2YwZjIwYjg1NzI0MDE2MDg4YS4uMWVlODdkZjlh
ZDI4NTdkYTgwYjNmYWVmMTg5YThjNzk2ZGRjZTMwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmgKQEAgLTQ4LDExICs0OCwxNiBA
QCBwdWJsaWM6CiAKICAgICBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKCkgeyByZXR1cm4g
bV9lbmNvZGluZzsgfQogCisgICAgdHlwZWRlZiBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4g
PiBBdHRyaWJ1dGVMaXN0OworICAgIC8vIFRoZSByZXR1cm5lZCBlbmNvZGluZyBtaWdodCBub3Qg
YmUgdmFsaWQuCisgICAgc3RhdGljIFRleHRFbmNvZGluZyBlbmNvZGluZ0Zyb21NZXRhQXR0cmli
dXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0JgorKTsKKwogcHJpdmF0ZToKICAgICBIVE1MTWV0YUNo
YXJzZXRQYXJzZXIoKTsKIAogICAgIGJvb2wgcHJvY2Vzc01ldGEoKTsKLSAgICBTdHJpbmcgZXh0
cmFjdENoYXJzZXQoY29uc3QgU3RyaW5nJik7CisgICAgc3RhdGljIFN0cmluZyBleHRyYWN0Q2hh
cnNldChjb25zdCBTdHJpbmcmKTsKIAogICAgIGVudW0gTW9kZSB7CiAgICAgICAgIE5vbmUsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE2M2E0YjRmNTQ4
OWU5N2YxNjk0MjhjODU5YTczOTNlZDRiYWQ1ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgorCisjaW5jbHVkZSAiQ1NT
SW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltcG9ydFJ1bGUuaCIKKyNpbmNsdWRlICJDU1NT
dHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxMaW5rRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxNZXRhQ2hhcnNldFBhcnNlci5oIgorI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVFRQUGFyc2Vy
cy5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgor
I2luY2x1ZGUgIk1hcmt1cEFjY3VtdWxhdG9yLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUltYWdlLmgiCisjaW5jbHVk
ZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBib29sIGlzQ2hhcnNldFNwZWNpZnlp
bmdOb2RlKE5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFub2RlLT5pc0hUTUxFbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1M
RWxlbWVudChub2RlKTsKKyAgICBpZiAoIWVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpt
ZXRhVGFnKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEhUTUxNZXRhQ2hhcnNldFBhcnNl
cjo6QXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOworICAgIGNvbnN0IE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlc01hcCA9IGVsZW1lbnQtPmF0dHJpYnV0ZXModHJ1ZSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGF0dHJpYnV0ZXNNYXAtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgQXR0
cmlidXRlKiBpdGVtID0gYXR0cmlidXRlc01hcC0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAgICAg
Ly8gRklYTUU6IFdlIHNob3VsZCBkZWFsIGFwcHJvcHJpYXRlbHkgd2l0aCB0aGUgYXR0cmlidXRl
IGlmIHRoZXkgaGF2ZSBhIG5hbWVzcGFjZS4KKyAgICAgICAgYXR0cmlidXRlcy5hcHBlbmQobWFr
ZV9wYWlyKGl0ZW0tPm5hbWUoKS50b1N0cmluZygpLCBpdGVtLT52YWx1ZSgpLnN0cmluZygpKSk7
CisgICAgfQorICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXI6OmVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIHJldHVy
biB0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpOworfQorCitzdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVF
bGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgcmV0dXJuIGVsZW1lbnQtPmhhc1RhZ05h
bWUoSFRNTE5hbWVzOjpzY3JpcHRUYWcpIHx8IGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVz
Ojpub3NjcmlwdFRhZykgfHwgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoZWxlbWVudCk7Cit9CisK
K3N0YXRpYyBjb25zdCBRdWFsaWZpZWROYW1lJiBmcmFtZU93bmVyVVJMQXR0cmlidXRlTmFtZShj
b25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQmIGZyYW1lT3duZXIpCit7CisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBzdXBwb3J0IGFsbCBmcmFtZSBvd25lcnMgaW5jbHVkaW5nIGFwcGxldHMuCisg
ICAgcmV0dXJuIGZyYW1lT3duZXIuaGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykgPyBI
VE1MTmFtZXM6OmRhdGFBdHRyIDogSFRNTE5hbWVzOjpzcmNBdHRyOworfQorCitjbGFzcyBTZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3IgOiBwdWJsaWMgV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0
b3IgeworcHVibGljOgorICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcihQYWdlU2VyaWFs
aXplciosIERvY3VtZW50KiwgVmVjdG9yPE5vZGUqPiopOworICAgIHZpcnR1YWwgflNlcmlhbGl6
ZXJNYXJrdXBBY2N1bXVsYXRvcigpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7CisgICAgdmlydHVhbCB2b2lkIGFw
cGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwor
ICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91
dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRW5kVGFn
KE5vZGUqKTsKKworcHJpdmF0ZToKKyAgICBQYWdlU2VyaWFsaXplciogbV9zZXJpYWxpemVyOwor
ICAgIERvY3VtZW50KiBtX2RvY3VtZW50OworfTsKKworU2VyaWFsaXplck1hcmt1cEFjY3VtdWxh
dG9yOjpTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNlcmlhbGl6ZXIqIHNlcmlhbGl6
ZXIsIERvY3VtZW50KiBkb2N1bWVudCwgVmVjdG9yPE5vZGUqPiogbm9kZXMpCisgICAgOiBNYXJr
dXBBY2N1bXVsYXRvcihub2RlcywgQWJzb2x1dGVVUkxzKQorICAgICwgbV9zZXJpYWxpemVyKHNl
cmlhbGl6ZXIpCisgICAgLCBtX2RvY3VtZW50KGRvY3VtZW50KQoreworICAgIC8vIE1hcmt1cEFj
Y3VtdWxhdG9yIGRvZXMgbm90IHNlcmlhbGl6ZSB0aGUgPD94bWwgLi4uIGxpbmUsIHNvIHdlIGFk
ZCBpdCBleHBsaWNpdGVseSB0byBlbnN1cmUgdGhlIHJpZ2h0IGVuY29kaW5nIGlzIHNwZWNpZmll
ZC4KKyAgICBpZiAobV9kb2N1bWVudC0+aXNYSFRNTERvY3VtZW50KCkgfHwgbV9kb2N1bWVudC0+
eG1sU3RhbmRhbG9uZSgpIHx8IG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1lbnQoKSkKKyAgICAgICAg
YXBwZW5kU3RyaW5nKG1ha2VTdHJpbmcoIjw/eG1sIHZlcnNpb249XCIiLCBtX2RvY3VtZW50LT54
bWxWZXJzaW9uKCksICJcIiBlbmNvZGluZz1cIiIsIG1fZG9jdW1lbnQtPmNoYXJzZXQoKSwgIlwi
Pz4iKSk7Cit9CisKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6flNlcmlhbGl6ZXJNYXJr
dXBBY2N1bXVsYXRvcigpCit7Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9y
OjphcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCogdGV4dCkKK3sKKyAgICBFbGVt
ZW50KiBwYXJlbnQgPSB0ZXh0LT5wYXJlbnRFbGVtZW50KCk7CisgICAgaWYgKHBhcmVudCAmJiAh
c2hvdWxkSWdub3JlRWxlbWVudChwYXJlbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6
YXBwZW5kVGV4dChvdXQsIHRleHQpOworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQs
IE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYgKCFzaG91bGRJZ25vcmVFbGVtZW50
KGVsZW1lbnQpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChvdXQs
IGVsZW1lbnQsIG5hbWVzcGFjZXMpOworCisgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjpoZWFkVGFnKSkgeworICAgICAgICBTdHJpbmcgbWV0YSA9IG1ha2VTdHJpbmcoIjxt
ZXRhIGNoYXJzZXQ9XCIiLCBtX2RvY3VtZW50LT5jaGFyc2V0KCksICJcIj4iKTsKKyAgICAgICAg
b3V0LmFwcGVuZChtZXRhLmNoYXJhY3RlcnMoKSwgbWV0YS5sZW5ndGgoKSk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IEZvciBvYmplY3QgKHBsdWdpbnMpIHRhZ3MgYW5kIHZpZGVvIHRhZyB3ZSBj
b3VsZCByZXBsYWNlIHRoZW0gYnkgYW4gaW1hZ2Ugb2YgdGhlaXIgY3VycmVudCBjb250ZW50cy4K
K30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0dHJp
YnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBOYW1lc3BhY2VzKiBu
YW1lc3BhY2VzKQoreworICAgIGlmICghZWxlbWVudC0+aXNGcmFtZU93bmVyRWxlbWVudCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIg
PSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVPd25lckVsZW1lbnQqPihlbGVtZW50KTsKKyAgICBGcmFt
ZSogZnJhbWUgPSBmcmFtZU93bmVyLT5jb250ZW50RnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBLVVJMIHVybCA9IGZyYW1lLT5kb2N1bWVudCgpLT51cmwo
KTsKKyAgICBpZiAodXJsLmlzVmFsaWQoKSAmJiAhdXJsLnByb3RvY29sSXMoImFib3V0IikpCisg
ICAgICAgIHJldHVybjsKKworICAgIC8vIFdlIG5lZWQgdG8gZ2l2ZSBhIGZha2UgbG9jYXRpb24g
dG8gYmxhbmsgZnJhbWVzIHNvIHRoZXkgY2FuIGJlIHJlZmVyZW5jZWQgYnkgdGhlIHNlcmlhbGl6
ZWQgZnJhbWUuCisgICAgdXJsID0gbV9zZXJpYWxpemVyLT51cmxGb3JCbGFua0ZyYW1lKGZyYW1l
KTsKKyAgICBSZWZQdHI8QXR0cmlidXRlPiBhdHRyaWJ1dGUgPSBBdHRyaWJ1dGU6OmNyZWF0ZShm
cmFtZU93bmVyVVJMQXR0cmlidXRlTmFtZSgqZnJhbWVPd25lciksIHVybC5zdHJpbmcoKSk7Cisg
ICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZSwgbmFtZXNwYWNlcyk7
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbmRUYWcoTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAobm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmICFzaG91bGRJZ25v
cmVFbGVtZW50KHRvRWxlbWVudChub2RlKSkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjph
cHBlbmRFbmRUYWcobm9kZSk7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZTo6UmVzb3Vy
Y2UoKQoreworfQorCitQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U6OlJlc291cmNlKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGEpCisgICAgOiB1cmwodXJsKQorICAgICwgbWltZVR5cGUobWltZVR5cGUpCisgICAgLCBk
YXRhKGRhdGEpCit7Cit9CisKK1BhZ2VTZXJpYWxpemVyOjpQYWdlU2VyaWFsaXplcihWZWN0b3I8
UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiogcmVzb3VyY2VzKQorICAgIDogbV9yZXNvdXJjZXMo
cmVzb3VyY2VzKQorICAgICwgbV9ibGFua0ZyYW1lQ291bnRlcigwKQoreworfQorCit2b2lkIFBh
Z2VTZXJpYWxpemVyOjpzZXJpYWxpemUoUGFnZSogcGFnZSkKK3sKKyAgICBzZXJpYWxpemVGcmFt
ZShwYWdlLT5tYWluRnJhbWUoKSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZUZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+
ZG9jdW1lbnQoKTsKKyAgICBLVVJMIHVybCA9IGRvY3VtZW50LT51cmwoKTsKKyAgICBpZiAoIXVy
bC5pc1ZhbGlkKCkgfHwgdXJsLnByb3RvY29sSXMoImFib3V0IikpIHsKKyAgICAgICAgLy8gRm9y
IGJsYW5rIGZyYW1lcyB3ZSBnZW5lcmF0ZSBhIGZha2UgVVJMIHNvIHRoZXkgY2FuIGJlIHJlZmVy
ZW5jZWQgYnkgdGhlaXIgY29udGFpbmluZyBmcmFtZS4KKyAgICAgICAgdXJsID0gdXJsRm9yQmxh
bmtGcmFtZShmcmFtZSk7CisgICAgfQorCisgICAgaWYgKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5z
KHVybCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGhhdmUgMiBmcmFtZSB3aXRoIHRo
ZSBzYW1lIFVSTCBidXQgd2hpY2ggd2VyZSBkeW5hbWljYWxseSBjaGFuZ2VkIGFuZCBoYXZlIG5v
dworICAgICAgICAvLyBkaWZmZXJlbnQgY29udGVudC4gU28gd2Ugc2hvdWxkIHNlcmlhbGl6ZSBi
b3RoIGFuZCBzb21laG93IHJlbmFtZSB0aGUgZnJhbWUgc3JjIGluIHRoZSBjb250YWluaW5nCisg
ICAgICAgIC8vIGZyYW1lLiBBcmchCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0
b3I8Tm9kZSo+IG5vZGVzOworICAgIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvciBhY2N1bXVs
YXRvcih0aGlzLCBkb2N1bWVudCwgJm5vZGVzKTsKKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29k
aW5nKFRleHRFbmNvZGluZyhkb2N1bWVudC0+Y2hhcnNldCgpKSk7CisgICAgQVNTRVJUKHRleHRF
bmNvZGluZy5pc1ZhbGlkKCkpOworICAgIFN0cmluZyB0ZXh0ID0gYWNjdW11bGF0b3Iuc2VyaWFs
aXplTm9kZXMoZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCAwLCBJbmNsdWRlTm9kZSk7Cisg
ICAgQ1N0cmluZyBmcmFtZUhUTUwgPSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHQuY2hhcmFjdGVy
cygpLCB0ZXh0Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgbV9yZXNv
dXJjZXMtPmFwcGVuZChSZXNvdXJjZSh1cmwsIGRvY3VtZW50LT5zdWdnZXN0ZWRNSU1FVHlwZSgp
LCBTaGFyZWRCdWZmZXI6OmNyZWF0ZShmcmFtZUhUTUwuZGF0YSgpLCBmcmFtZUhUTUwubGVuZ3Ro
KCkpKSk7CisgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CisKKyAgICBmb3IgKFZlY3RvcjxO
b2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBub2Rlcy5iZWdpbigpOyBpdGVyICE9IG5vZGVzLmVuZCgp
OyArK2l0ZXIpIHsKKyAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAgICAgICBpZiAoIW5v
ZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEVs
ZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1lbnQobm9kZSk7CisgICAgICAgIC8vIFdlIGhhdmUgdG8g
cHJvY2VzcyBpbi1saW5lIHN0eWxlIGFzIGl0IG1pZ2h0IGNvbnRhaW4gc29tZSByZXNvdXJjZXMg
KHR5cGljYWxseSBiYWNrZ3JvdW5kIGltYWdlcykuCisgICAgICAgIHJldHJpZXZlUmVzb3VyY2Vz
Rm9yQ1NTRGVjbGFyYXRpb24oZWxlbWVudC0+c3R5bGUoKSk7CisKKyAgICAgICAgaWYgKGVsZW1l
bnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpKSB7CisgICAgICAgICAgICBIVE1MSW1h
Z2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
ZWxlbWVudCk7CisgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChp
bWFnZUVsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAg
ICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2Uo
KTsKKyAgICAgICAgICAgIGFkZEltYWdlVG9SZXNvdXJjZXMoY2FjaGVkSW1hZ2UsIHVybCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmxpbmtUYWcp
KSB7CisgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmtFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBz
aGVldCA9IGxpbmtFbGVtZW50LT5zaGVldCgpOworICAgICAgICAgICAgaWYgKHNoZWV0ICYmIHNo
ZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgeworICAgICAgICAgICAgICAgIEtVUkwgdXJsID0gZG9j
dW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpo
cmVmQXR0cikpOworICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgdXJsKTsKKyAgICAgICAgICAgICAgICBBU1NF
UlQobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkgewor
ICAgICAgICAgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
SFRNTFN0eWxlRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgU3R5bGVTaGVldCogc2hl
ZXQgPSBzdHlsZUVsZW1lbnQtPnNoZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxl
U2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgS1VSTCgpKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAoRnJhbWUqIGNoaWxkRnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT5maXJzdENoaWxkKCk7IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVl
KCktPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHNlcmlhbGl6ZUZyYW1lKGNoaWxkRnJhbWUpOwor
fQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVDU1NTdHlsZVNoZWV0KENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBTdHJpbmdCdWlsZGVy
IGNzc1RleHQ7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlU2hlZXQtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc3R5bGVTaGVldC0+aXRlbShp
KTsKKyAgICAgICAgU3RyaW5nIGl0ZW1UZXh0ID0gaXRlbS0+Y3NzVGV4dCgpOworICAgICAgICBp
ZiAoIWl0ZW1UZXh0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoaXRl
bVRleHQpOworICAgICAgICAgICAgaWYgKGkgPCBzdHlsZVNoZWV0LT5sZW5ndGgoKSAtIDEpCisg
ICAgICAgICAgICAgICAgY3NzVGV4dC5hcHBlbmQoIlxuXG4iKTsKKyAgICAgICAgfQorICAgICAg
ICAvLyBTb21lIHJ1bGVzIGhhdmUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGVtIHRoYXQg
d2UgbmVlZCB0byByZXRyaWV2ZS4KKyAgICAgICAgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7
CisgICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnRSdWxlID0gc3RhdGljX2Nhc3Q8Q1NT
SW1wb3J0UnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgS1VSTCBpbXBvcnRVUkwgPSBzdHlsZVNo
ZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChpbXBvcnRSdWxlLT5ocmVmKCkpOworICAgICAg
ICAgICAgaWYgKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKGltcG9ydFVSTCkpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KGltcG9y
dFJ1bGUtPnN0eWxlU2hlZXQoKSwgaW1wb3J0VVJMKTsKKyAgICAgICAgfSBlbHNlIGlmIChpdGVt
LT5pc0ZvbnRGYWNlUnVsZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIGZvbnQgZmFjZSBydWxlLiBJdCBpcyBub3QgY2xlYXIgdG8gbWUgYXQgdGhpcyBwb2ludCBp
ZiB0aGUgYWN0dWFsIG90Zi9lb3QgZmlsZSBjYW4KKyAgICAgICAgICAgIC8vIGJlIHJldHJpZXZl
ZCBmcm9tIHRoZSBDU1NGb250RmFjZVJ1bGUgb2JqZWN0LgorICAgICAgICB9IGVsc2UgaWYgKGl0
ZW0tPmlzU3R5bGVSdWxlKCkpCisgICAgICAgICAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1
bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSkpOworICAgIH0KKworICAgIGlmICh1
cmwuaXNWYWxpZCgpICYmICFtX3Jlc291cmNlVVJMcy5jb250YWlucyh1cmwpKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgY2hlY2sgd2hldGhlciBhIGNoYXJzZXQgaGFzIGJlZW4gc3Bl
Y2lmaWVkIGFuZCBpZiBub25lIHdhcyBmb3VuZCBhZGQgb25lLgorICAgICAgICBUZXh0RW5jb2Rp
bmcgdGV4dEVuY29kaW5nID0gVGV4dEVuY29kaW5nKHN0eWxlU2hlZXQtPmNoYXJzZXQoKSk7Cisg
ICAgICAgIEFTU0VSVCh0ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKKyAgICAgICAgU3RyaW5nIHRl
eHRTdHJpbmcgPSBjc3NUZXh0LnRvU3RyaW5nKCk7CisgICAgICAgIENTdHJpbmcgdGV4dCA9IHRl
eHRFbmNvZGluZy5lbmNvZGUodGV4dFN0cmluZy5jaGFyYWN0ZXJzKCksIHRleHRTdHJpbmcubGVu
Z3RoKCksIEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICAgICAgbV9yZXNvdXJjZXMtPmFw
cGVuZChSZXNvdXJjZSh1cmwsIFN0cmluZygidGV4dC9jc3MiKSwgU2hhcmVkQnVmZmVyOjpjcmVh
dGUodGV4dC5kYXRhKCksIHRleHQubGVuZ3RoKCkpKSk7CisgICAgICAgIG1fcmVzb3VyY2VVUkxz
LmFkZCh1cmwpOworICAgIH0KK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6YWRkSW1hZ2VUb1Jl
c291cmNlcyhDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICBpZiAo
IXVybC5pc1ZhbGlkKCkgfHwgbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFpbWFnZSB8fCBpbWFnZS0+aW1hZ2UoKSA9PSBJbWFnZTo6bnVs
bEltYWdlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBtaW1lVHlwZSA9IGltYWdl
LT5yZXNwb25zZSgpLm1pbWVUeXBlKCk7CisgICAgbV9yZXNvdXJjZXMtPmFwcGVuZChSZXNvdXJj
ZSh1cmwsIG1pbWVUeXBlLCBpbWFnZS0+aW1hZ2UoKS0+ZGF0YSgpKSk7CisgICAgbV9yZXNvdXJj
ZVVSTHMuYWRkKHVybCk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnJldHJpZXZlUmVzb3Vy
Y2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgcmV0cmlldmVSZXNvdXJj
ZXNGb3JDU1NEZWNsYXJhdGlvbihydWxlLT5zdHlsZSgpKTsKK30KKwordm9pZCBQYWdlU2VyaWFs
aXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZURlY2xhcmF0aW9uKQoreworICAgIGlmICghc3R5bGVEZWNsYXJhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkt
PmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0
KiBjc3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlRGVjbGFy
YXRpb24tPnN0eWxlc2hlZXQoKSk7CisKKyAgICAvLyBUaGUgYmFja2dyb3VuZC1pbWFnZSBhbmQg
bGlzdC1zdHlsZS1pbWFnZSAoZm9yIHVsIG9yIG9sKSBhcmUgdGhlIENTUyBwcm9wZXJ0aWVzCisg
ICAgLy8gdGhhdCBtYWtlIHVzZSBvZiBpbWFnZXMuIFdlIGl0ZXJhdGUgdG8gbWFrZSBzdXJlIHdl
IGluY2x1ZGUgYW55IG90aGVyCisgICAgLy8gaW1hZ2UgcHJvcGVydGllcyB0aGVyZSBtaWdodCBi
ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVEZWNsYXJhdGlvbi0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICAvLyBGSVhNRTogSXQncyBraW5kIG9mIHJpZGljdWxvdXMgdG8g
Z2V0IHRoZSBwcm9wZXJ0eSBuYW1lIGFuZCB0aGVuIGdldAorICAgICAgICAvLyB0aGUgdmFsdWUg
b3V0IG9mIHRoZSBuYW1lLiBJZGVhbGx5IHdlIHdvdWxkIGdldCB0aGUgdmFsdWUgb3V0IG9mIHRo
ZQorICAgICAgICAvLyBwcm9wZXJ0eSBJRCwgYnV0IENTU1N0eWxlRGVjbGFyYXRpb24gb25seSBn
aXZlcyBhY2Nlc3MgdG8gcHJvcGVydHkKKyAgICAgICAgLy8gbmFtZXMsIG5vdCBJRHMuCisgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3NzVmFsdWUgPSBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9w
ZXJ0eUNTU1ZhbHVlKHN0eWxlRGVjbGFyYXRpb24tPml0ZW0oaSkpOworICAgICAgICBpZiAoIWNz
c1ZhbHVlLT5pc0ltYWdlVmFsdWUoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IENTU0ltYWdlVmFsdWUqIGltYWdlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NJbWFnZVZhbHVlKj4o
Y3NzVmFsdWUuZ2V0KCkpOworICAgICAgICBTdHlsZUltYWdlKiBzdHlsZUltYWdlID0gaW1hZ2VW
YWx1ZS0+Y2FjaGVkT3JQZW5kaW5nSW1hZ2UoKTsKKyAgICAgICAgLy8gTm9uIGNhY2hlZC1pbWFn
ZXMgYXJlIGp1c3QgcGxhY2UtaG9sZGVycyBhbmQgZG8gbm90IGNvbnRhaW4gZGF0YS4KKyAgICAg
ICAgaWYgKCFzdHlsZUltYWdlIHx8ICFzdHlsZUltYWdlLT5pc0NhY2hlZEltYWdlKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2UgPSBzdGF0aWNf
Y2FzdDxTdHlsZUNhY2hlZEltYWdlKj4oc3R5bGVJbWFnZSktPmNhY2hlZEltYWdlKCk7CisKKyAg
ICAgICAgS1VSTCB1cmwgPSBjc3NTdHlsZVNoZWV0LT5kb2N1bWVudCgpLT5jb21wbGV0ZVVSTChp
bWFnZS0+dXJsKCkpOworICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGltYWdlLCB1cmwpOwor
ICAgIH0KK30KKworS1VSTCBQYWdlU2VyaWFsaXplcjo6dXJsRm9yQmxhbmtGcmFtZShGcmFtZSog
ZnJhbWUpCit7CisgICAgSGFzaE1hcDxGcmFtZSosIEtVUkw+OjppdGVyYXRvciBpdGVyID0gbV9i
bGFua0ZyYW1lVVJMcy5maW5kKGZyYW1lKTsKKyAgICBpZiAoaXRlciAhPSBtX2JsYW5rRnJhbWVV
UkxzLmVuZCgpKQorICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kOworICAgIFN0cmluZyB1cmwg
PSBtYWtlU3RyaW5nKCJ3eWNpd3lnOi8vZnJhbWUvIiwgU3RyaW5nOjpudW1iZXIobV9ibGFua0Zy
YW1lQ291bnRlcisrKSk7CisgICAgS1VSTCBmYWtlVVJMKFBhcnNlZFVSTFN0cmluZywgdXJsKTsK
KyAgICBtX2JsYW5rRnJhbWVVUkxzLmFkZChmcmFtZSwgZmFrZVVSTCk7CisKKyAgICByZXR1cm4g
ZmFrZVVSTDsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjhlNTc1NDYyYTQ1M2FhN2QzN2Q1NTc3MDYxNTI0NDdiMGZjOWNjZjMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKQEAgLTAsMCArMSw5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tbyB0ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFBhZ2VTZXJpYWxpemVyX2gKKyNkZWZpbmUgUGFnZVNlcmlhbGl6ZXJfaAor
CisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIktVUkxIYXNoLmgiCisjaW5jbHVkZSAiU2hh
cmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FjaGVkSW1hZ2U7CitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xh
c3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIEZyYW1lOworY2xh
c3MgUGFnZTsKKworLy8gVGhpcyBjbGFzcyBpcyB1c2VkIHRvIHNlcmlhbGl6ZSBhIHBhZ2UgY29u
dGVudHMgYmFjayB0byB0ZXh0ICh0eXBpY2FsbHkgSFRNTCkuCisvLyBJdCBzZXJpYWxpemVzIGFs
bCB0aGUgcGFnZSBmcmFtZXMgYW5kIHJldHJpZXZlcyByZXNvdXJjZXMgc3VjaCBhcyBpbWFnZXMg
YW5kIENTUyBzdHlsZXNoZWV0cy4KK2NsYXNzIFBhZ2VTZXJpYWxpemVyIHsKK3B1YmxpYzoKKyAg
ICBzdHJ1Y3QgUmVzb3VyY2UgeworICAgICAgICBLVVJMIHVybDsKKyAgICAgICAgU3RyaW5nIG1p
bWVUeXBlOworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhOworICAgICAgICBSZXNv
dXJjZSgpOworICAgICAgICBSZXNvdXJjZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSwgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEpOworICAgIH07CisKKyAgICBleHBs
aWNpdCBQYWdlU2VyaWFsaXplcihWZWN0b3I8UmVzb3VyY2U+Kik7CisKKyAgICAvLyBJbml0aWF0
ZXMgdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIGZyYW1lJ3MgcGFnZS4gQWxsIHNlcmlhbGl6ZWQg
Y29udGVudCBhbmQgcmV0cmlldmVkCisgICAgLy8gcmVzb3VyY2VzIGFyZSBhZGRlZCB0byB0aGUg
VmVjdG9yIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0
aGF0CisgICAgLy8gdmVjdG9yIGlzIHRoZSB0b3AgZnJhbWUgc2VyaWFsaXplZCBjb250ZW50Lgor
ICAgIHZvaWQgc2VyaWFsaXplKFBhZ2UqKTsKKworICAgIEtVUkwgdXJsRm9yQmxhbmtGcmFtZShG
cmFtZSopOworCitwcml2YXRlOgorICAgIHZvaWQgc2VyaWFsaXplRnJhbWUoRnJhbWUqKTsKKwor
ICAgIC8vIFNlcmlhbGl6ZXMgdGhlIHN0eWxlc2hlZXQgYmFjayB0byB0ZXh0IGFuZCBhZGRzIGl0
IHRvIHRoZSByZXNvdXJjZXMgaWYgVVJMIGlzIG5vdC1lbXB0eS4KKyAgICAvLyBJdCBhbHNvIGFk
ZHMgYW55IHJlc291cmNlcyBpbmNsdWRlZCBpbiB0aGF0IHN0eWxlc2hlZXQgKGluY2x1ZGluZyBh
bnkgaW1wb3J0ZWQgc3R5bGVzaGVldHMgYW5kIHRoZWlyIG93biByZXNvdXJjZXMpLgorICAgIHZv
aWQgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgS1VSTCYpOwor
CisgICAgdm9pZCBhZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiwgY29uc3QgS1VSTCYp
OworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihDU1NTdHlsZURl
Y2xhcmF0aW9uKik7CisgICAgdm9pZCByZXRyaWV2ZVJlc291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5
bGVSdWxlKik7CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+KiBtX3Jlc291cmNlczsKKyAgICBMaXN0
SGFzaFNldDxLVVJMPiBtX3Jlc291cmNlVVJMczsKKyAgICBIYXNoTWFwPEZyYW1lKiwgS1VSTD4g
bV9ibGFua0ZyYW1lVVJMczsKKyAgICB1bnNpZ25lZCBtX2JsYW5rRnJhbWVDb3VudGVyOworfTsK
KworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMTc4NTUzZjU3N2Q2
YTJiMGUxNTY1NzRjMDhhZjNmZGVkZTVkZDk4ZC4uZDE5NmI0NDM4ZTlmYWYyZTkzZDU1ZWE3OGVk
ZDY4ZDYzNzExM2QzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBA
QAorMjAxMS0wNC0yNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgYWJhcnRoLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IEFQ
SSB0byBzZXJpYWxpemUgYSBXZWJWaWV3IGJhY2sgdG8gSFRNTC4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBXZWJLaXQu
Z3lwOgorICAgICAgICAqIHB1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHNy
Yy9XZWJQYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxp
emVyOjpzZXJpYWxpemUpOgorICAgICAgICAqIHRlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXI6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3Jv
dW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3Nf
dGVzdF9wYWdlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6
ZXIvZ3JlZW5fYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAg
KiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzOiBBZGRlZC4KKyAg
ICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3QucG5nOiBBZGRlZC4K
KyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBu
ZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFj
a2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
cmVkX2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL3NpbXBsZS54aHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci90b3BfZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci91bC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL3llbGxvd19iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisKIDIwMTEtMDQtMjYgIFNo
ZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2
aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NDk1MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmlu
ZGV4IGIwNTI5ODFmZDNkN2JmMTA0MzFhYzlkMjk5ZGMwYTA1NDMxZDI5NDguLjdkM2E2Yjk1NzYy
ZjJhODI0YmI1MmZiYzRlNTk4ZDdjOTMzYzYzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwaQpAQCAtNzcsNiArNzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvUG9wdXBN
ZW51VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2lu
VGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVz
dC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRl
c3QuY3BwJywKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfV0sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAppbmRleCBiNGQ1
NzE1MzVhYWI4ZmMyMmVlMjA2NmUyY2UwZTFiYWFmOWQ4NmVkLi5hMTA4YTYyYzA2ZTQzY2FjOGEx
MWZkMzU0Y2MyNDViNjdkZjUwOGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKQEAgLTMxLDE0ICszMSwxNCBAQAogI2lmbmRlZiBX
ZWJQYWdlU2VyaWFsaXplcl9oCiAjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKIAorI2luY2x1
ZGUgIldlYkNTdHJpbmcuaCIKICNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJV
UkwuaCIKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci1jbGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2Vi
RnJhbWU7CiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplckNsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsK
LWNsYXNzIFdlYlVSTDsKIGNsYXNzIFdlYlZpZXc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xh
c3MgV2ViVmVjdG9yOwogCkBAIC00Niw2ICs0NiwyMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgV2ViVmVjdG9yOwogLy8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhh
dCBoYXZlIGxvY2FsIGNvcHkuCiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplciB7CiBwdWJsaWM6Cisg
ICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgV2ViVVJMIHVybDsKKyAgICAgICAgV2ViQ1N0
cmluZyBtaW1lVHlwZTsKKyAgICAgICAgV2ViQ1N0cmluZyBkYXRhOworICAgIH07CisKKyAgICAv
LyBTZXJpYWxpemVzIGFsbCB0aGUgZnJhbWVzIGZyb20gdGhlIFdlYlZpZXcsIHJldHJpZXZlcyB0
aGUgcGFnZSdzCisgICAgLy8gcmVzb3VyY2VzIChzdWNoIGFzIGltYWdlcyBhbmQgQ1NTKSBhbmQg
YWRkcyB0aGVtIHRvIHRoZSBwYXNzZWQgdmVjdG9yLgorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJj
ZSBpbiB0aGF0IHZlY3RvciBpcyB0aGUgdG9wIGZyYW1lIGNvbnRlbnRzLgorICAgIC8vIE5vdGUg
dGhhdCB0aGlzIGFsc28gc3RyaXBzLW91dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFT
Y3JpcHQuCisgICAgV0VCS0lUX0FQSSBzdGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdl
YlZlY3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIElNUE9SVEFOVDoKKyAgICAvLyBUaGUgQVBJ
IGJlbG93IGlzIGFuIG9sZGVyIGltcGxlbWVudGF0aW9uIG9mIGEgcGFnZXNlcmlhbGl6YXRpb24g
dGhhdAorICAgIC8vIHdpbGwgYmUgcmVtb3ZlZCBzb29uLgorCisKICAgICAvLyBUaGlzIGZ1bmN0
aW9uIHdpbGwgZmluZCBvdXQgYWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBk
YXRhLgogICAgIC8vIFdlIGhhdmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdl
bmVyYXRlZCBodG1sIGRhdGEuIFdlIHdpbGwKICAgICAvLyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJQ
YWdlU2VyaWF6bGllckNsaWVudCBvbmNlIHRoZSBkYXRhIGJ1ZmZlciBpcyBmdWxsLgpAQCAtNjQs
OSArODEsOSBAQCBwdWJsaWM6CiAgICAgLy8gc2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0
aCB2ZWN0b3I6bGlua3Mgb25lIGJ5IG9uZS4KICAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGly
ZWN0b3J5TmFtZSBpcyByZWxhdGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3aGljaAogICAgIC8vIGNv
bnRhaW4gYWxsIHNhdmVkIGF1eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBh
bmQgcmVzb3VyY2VzLgotICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZy
YW1lKiBmcmFtZSwKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFt
ZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJD
bGllbnQqIGNsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQ
YWdlU2VyaWFsaXplckNsaWVudCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgV2ViVmVjdG9yPFdlYlVSTD4mIGxpbmtzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9j
YWxEaXJlY3RvcnlOYW1lKTsKQEAgLTg1LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAvLyBHZW5l
cmF0ZSB0aGUgTUVUQSBmb3IgY2hhcnNldCBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0
YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0
cmluZyYgY2hhcnNldCk7CiAgICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCi0g
ICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFy
YXRpb24oY29uc3QgV2ViVVJMJiB1cmwpOworICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmlu
ZyBnZW5lcmF0ZU1hcmtPZlRoZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYpOwogICAgIC8v
IEdlbmVyYXRlIHRoZSBkZWZhdWx0IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgogICAgIFdFQktJVF9B
UEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJT
dHJpbmcmIGJhc2VUYXJnZXQpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlBhZ2VTZXJpYWxpemVyLmNwcAppbmRleCBjOGM3NTI5N2Y0MmQ3OGI4OWZlNzBkZDlmOTQw
MDEzMzdmOWZjZTk5Li4yMzJlMjExNjAxNTljODg2ZDhlNGVkMTQwMDg0YzZiNWNmNzMxZTUxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3Bw
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFs
aXplci5oIgogI2luY2x1ZGUgIlZlY3Rvci5oIgogCiAjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgpA
QCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZlY3Rv
ci5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIApAQCAtMTc5LDYgKzE4MSwy
NSBAQCB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lLAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAordm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYlZp
ZXcqIHZpZXcsIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJj
ZXNQYXJhbSkKK3sKKyAgICBWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJj
ZXM7CisgICAgUGFnZVNlcmlhbGl6ZXIgc2VyaWFsaXplcigmcmVzb3VyY2VzKTsKKyAgICBzZXJp
YWxpemVyLnNlcmlhbGl6ZShzdGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkp
OworCisgICAgVmVjdG9yPFJlc291cmNlPiByZXN1bHQ7CisgICAgZm9yIChWZWN0b3I8UGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlc291cmNlcy5iZWdp
bigpOyBpdGVyICE9IHJlc291cmNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlc291cmNl
IHJlc291cmNlOworICAgICAgICByZXNvdXJjZS51cmwgPSBpdGVyLT51cmw7CisgICAgICAgIHJl
c291cmNlLm1pbWVUeXBlID0gaXRlci0+bWltZVR5cGUuYXNjaWkoKTsKKyAgICAgICAgLy8gRklY
TUU6IHdlIGFyZSBjb3B5aW5nIGFsbCB0aGUgcmVzb3VyY2UgZGF0YSBoZXJlLiBJZGVhbHkgd2Ug
d291bGQgaGF2ZSBhIFdlYlNoYXJlZERhdGEoKS4KKyAgICAgICAgcmVzb3VyY2UuZGF0YSA9IFdl
YkNTdHJpbmcoaXRlci0+ZGF0YS0+ZGF0YSgpLCBpdGVyLT5kYXRhLT5zaXplKCkpOworICAgICAg
ICByZXN1bHQuYXBwZW5kKHJlc291cmNlKTsKKyAgICB9CisKKyAgICAqcmVzb3VyY2VzUGFyYW0g
PSByZXN1bHQ7ICAgICAgICAgCit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZShXZWJGcmFtZSogZnJhbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZWN1cnNpdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNl
cmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIw
ZGFjZWJmMzAyZjdjNjRjMDY0ZjlkM2FhODc0ZWZmMjQ2ZjI2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3Bw
CkBAIC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViRnJh
bWUuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJp
YWxpemVyLmgiCisjaW5jbHVkZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiV2ViU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNp
bmNsdWRlICJXZWJVUkxSZXF1ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNp
bmNsdWRlICJXZWJWaWV3LmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KKyNp
bmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9z
dXBwb3J0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2Ns
YXNzIFRlc3RXZWJGcmFtZUNsaWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7CitwdWJsaWM6
CisgICAgVGVzdFdlYkZyYW1lQ2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQoZmFsc2UpIHsgfQor
ICAgIHZpcnR1YWwgYm9vbCBhbGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgLyogZW5hYmxlZFBl
clNldHRpbmdzICovKSB7IHJldHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29sIG1fc2Ny
aXB0RW5hYmxlZDsKK307CisKK2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0IDogcHVibGlj
IHRlc3Rpbmc6OlRlc3QgeworcHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0KCkK
KyAgICAgICAgOiBtX2h0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwi
KSkKKyAgICAgICAgLCBtX3hodG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGlj
YXRpb24veGh0bWwreG1sIikpCisgICAgICAgICwgbV9jc3NNaW1lVHlwZShXZWJTdHJpbmc6OmZy
b21VVEY4KCJ0ZXh0L2NzcyIpKQorICAgICAgICAsIG1fcG5nTWltZVR5cGUoV2ViU3RyaW5nOjpm
cm9tVVRGOCgiaW1hZ2UvcG5nIikpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBTZXRVcCgpCisgICAgeworICAgICAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxp
emUgdGhlIFdlYlZpZXcuCisgICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsK
KworICAgICAgICAvLyBXZSB3YW50IHRoZSBpbWFnZXMgdG8gbG9hZC4KKyAgICAgICAgV2ViU2V0
dGluZ3MqIHNldHRpbmdzID0gbV93ZWJWaWV3LT5zZXR0aW5ncygpOworICAgICAgICBzZXR0aW5n
cy0+c2V0SW1hZ2VzRW5hYmxlZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldExvYWRzSW1h
Z2VzQXV0b21hdGljYWxseSh0cnVlKTsKKworICAgICAgICBtX3dlYlZpZXctPmluaXRpYWxpemVN
YWluRnJhbWUoJm1fd2ViRnJhbWVDbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBU
ZWFyRG93bigpCisgICAgeworICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3RlckFsbE1v
Y2tlZFVSTHMoKTsKKyAgICAgICAgbV93ZWJWaWV3LT5jbG9zZSgpOworICAgIH0KKworICAgIHZv
aWQgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJTdHJp
bmcmIGZpbGVOYW1lLCBjb25zdCBXZWJTdHJpbmcmIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAg
V2ViVVJMUmVzcG9uc2UgcmVzcG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsK
KyAgICAgICAgcmVzcG9uc2Uuc2V0TUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICByZXNwb25z
ZS5zZXRIVFRQU3RhdHVzQ29kZSgyMDApOworICAgICAgICBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9
IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOworICAgICAgICBmaWxl
UGF0aC5hcHBlbmQoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvIik7CisgICAgICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkpOworICAg
ICAgICB3ZWJraXRfc3VwcG9ydDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25zZSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOChmaWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZFVSTElu
VG9wRnJhbWUoY29uc3QgR1VSTCYgdXJsKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVxdWVzdCB1
cmxSZXF1ZXN0OworICAgICAgICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAgICAgICAgdXJs
UmVxdWVzdC5zZXRVUkwoV2ViVVJMKHVybCkpOworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFt
ZSgpLT5sb2FkUmVxdWVzdCh1cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIGFueSBw
ZW5kaW5nIHJlcXVlc3QgZ2V0IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZl
QXN5bmNocm9ub3VzTW9ja2VkUmVxdWVzdHMoKTsKKyAgICAgICAgLy8gU29tZSByZXF1ZXN0cyBn
ZXQgZGVsYXllZCwgcnVuIHRoZSB0aW1lci4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFs
bFBlbmRpbmdNZXNzYWdlcygpOworICAgICAgICAvLyBTZXJ2ZXIgdGhlIGRlbGF5ZWQgcmVzb3Vy
Y2VzLgorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1
ZXN0cygpOworICAgIH0KKworICAgIHZvaWQgZW5hYmxlSlMoKQorICAgIHsKKyAgICAgICAgbV93
ZWJGcmFtZUNsaWVudC5tX3NjcmlwdEVuYWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQg
cnVuT25Mb2FkKCkKKyAgICB7CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmV4ZWN1
dGVTY3JpcHQoV2ViU2NyaXB0U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgoIm9uTG9hZCgpIikp
KTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJTdHJpbmcmIGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1faHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiB4aHRtbE1pbWVU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV94aHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3Ry
aW5nJiBjc3NNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzTWltZVR5cGU7IH0KKyAgICBj
b25zdCBXZWJTdHJpbmcmIHBuZ01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wbmdNaW1lVHlw
ZTsgfQorICAgIAorICAgIHN0YXRpYyBib29sIHJlc291cmNlVmVjdG9yQ29udGFpbnMoY29uc3Qg
V2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4mIHJlc291cmNlcywgY2hhciog
dXJsLCBjaGFyKiBtaW1lVHlwZSkKKyAgICB7CisgICAgICAgIFdlYlVSTCB3ZWJVUkwgPSBXZWJV
UkwoR1VSTCh1cmwpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZXMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNv
dXJjZSYgcmVzb3VyY2UgPSByZXNvdXJjZXNbaV07CisgICAgICAgICAgICBpZiAocmVzb3VyY2Uu
dXJsID09IHdlYlVSTCAmJiAhcmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkgJiYgIXJlc291cmNlLm1p
bWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZyhtaW1lVHlwZSkpKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgV2ViVmlldyogbV93ZWJWaWV3OworCitwcml2YXRlOgorICAgIFdlYlN0cmluZyBtX2h0
bWxNaW1lVHlwZTsKKyAgICBXZWJTdHJpbmcgbV94aHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmlu
ZyBtX2Nzc01pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAgIFRlc3RX
ZWJGcmFtZUNsaWVudCBtX3dlYkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVzdHMgdGhhdCBhIHBh
Z2Ugd2l0aCByZXNvdXJjZXMgYW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFsbCBpdHMg
cmVzb3VyY2VzLgorLy8gRklYTUU6IHJlZW5hYmxlIHRoZXNlIHRlc3RzIG9uY2UgdGhlIENocm9t
aXVtIHBhcnQgb2YgdGhlIHRlc3Rfd2Via2l0X2NsaWVudCBoYXZlIGxhbmRlZC4KK1RFU1RfRihX
ZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfUGFnZVdpdGhGcmFtZXMpCit7CisgICAg
Ly8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0g
R1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0
b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1p
bWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL2lmcmFtZS5odG1sIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZS5odG1sIiks
IGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbS9pZnJhbWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1l
Mi5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpm
cm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lz
dGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1
ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZy
YW1lKHRvcEZyYW1lVVJMKTsKKworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVz
b3VyY2U+IHJlc291cmNlczsKKyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2Vi
VmlldywgJnJlc291cmNlcyk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkp
OworICAgIAorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJh
bWUuCisgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJl
c291cmNlc1swXTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDov
L3d3dy50ZXN0LmNvbSIpKTsKKyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29t
cGFyZShXZWJDU3RyaW5nKCJ0ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJj
ZS5kYXRhLmlzRW1wdHkoKSk7CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3VyY2VzLnNpemUoKSk7
IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291
cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFj
a2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVj
dG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5w
bmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIsICJ0ZXh0L2h0
bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7Cit9CisK
Ky8vIFRlc3QgdGhhdCB3aGVuIHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENTUyByZXNvdXJjZXMg
YXJlIHJlcG9ydGVkLCBpbmNsdWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9ydHMgYW5kIGxpbmtz
LiBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRlbnRzLCB3ZSBvbmx5
IG1ha2Ugc3VyZQorLy8gdGhleSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhlIHJpZ2h0IG1pbWUg
dHlwZSBhbmQgdGhhdCB0aGV5IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9GKFdlYlBhZ2VOZXdT
ZXJpYWxpemVUZXN0LCBESVNBQkxFRF9DU1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIg
dGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRv
cEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRt
bE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL2xpbmtfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0
eWxlcy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgV2Vi
U3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgY3NzTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vaW1wb3J0X3N0eWxlcy5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxl
cy5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwo
Imh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rl
ck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3Vu
ZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3
LnRlc3QuY29tL3llbGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5
ZWxsb3dfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2Nr
ZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmci
KSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tn
cm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJwdXJwbGVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7Cisg
ICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90
LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ1bC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkp
OworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29s
LWRvdC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib2wtZG90LnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVV
UkwpOworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVy
OjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUo
bV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1w
dHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFp
bi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNl
ID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJo
dHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlw
ZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJl
c291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNp
emUoKSk7IC8vIFRoZXJlIHNob3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVF
KHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9s
aW5rX3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHls
ZXMuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9s
aW5rLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNv
bnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5n
IiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5z
KHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwg
ImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiwgImlt
YWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291
cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIp
KTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0
dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RS
VUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L29sLWRvdC5wbmciLCAiaW1hZ2UvcG5nIikpOworfQorCisvLyBUZXN0cyB0aGF0IHdoZW4gc2Vy
aWFsaXppbmcgYSBwYWdlIHdpdGggYmxhbmsgZnJhbWVzIHRoZXNlIGFyZSByZXBvcnRlZCB3aXRo
IHRoZWlyIHJlc291cmNlcy4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJM
RURfQmxhbmtGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQg
bG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3Qu
Y29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJibGFua19mcmFtZXMuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVn
aXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91
bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdN
aW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3Jh
bmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2Vk
VVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwg
V2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgp
KTsKKworICAgIGVuYWJsZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwp
OworICAgIHJ1bk9uTG9hZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpS
ZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93
ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHko
KSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1m
cmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0g
cmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5j
b21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291
cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgp
KTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNr
Z3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3Vu
ZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIC8vIFRoZSBibGFuayBmcmFtZXMgc2hvdWxkIGhh
dmUgZ290IGEgbWFnaWMgVVJMLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzAiLCAidGV4dC9odG1sIikpOworICAgIEVY
UEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2Zy
YW1lLzEiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzIiLCAidGV4dC9odG1sIikpOworfQor
CitURVNUX0YoV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1NlcmlhbGl6ZVhNTEhh
c1JpZ2h0RGVjbGFyYXRpb24pCit7CisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0
cDovL3d3dy50ZXN0LmNvbS9zaW1wbGUueGh0bWwiKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZS54aHRtbCIpLCB4aHRt
bE1pbWVUeXBlKCkpOworCisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisg
ICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAg
IFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAg
ICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gV2UgZXhw
ZWN0IG9ubHkgb25lIHJlc291cmNlLCB0aGUgWE1MLgorICAgIEFTU0VSVF9FUSgxLCByZXNvdXJj
ZXMuc2l6ZSgpKTsKKyAgICBzdGQ6OnN0cmluZyB4bWwgPSByZXNvdXJjZXNbMF0uZGF0YTsKKwor
ICAgIC8vIFdlIHNob3VsZCBoYXZlIG9uZSBhbmQgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIFhN
TCBkZWNsYXJhdGlvbi4KKyAgICBzaXplX3QgcG9zID0geG1sLmZpbmQoIjw/eG1sIHZlcnNpb249
Iik7CisgICAgQVNTRVJUX1RSVUUocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKworICAgIHBv
cyA9IHhtbC5maW5kKCI8P3htbCB2ZXJzaW9uPSIsIHBvcyArIDEpOworICAgIEFTU0VSVF9UUlVF
KHBvcyA9PSBzdGQ6OnN0cmluZzo6bnBvcyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRt
bCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFu
a19mcmFtZXMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZGZiMjA0OTljNDMyNjNjYjVjMjQ2ZmU3ZTE5MjU0
NDJjZDcxNDM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2ZyYW1lcy5odG1sCkBAIC0wLDAgKzEsMzcgQEAK
KzxodG1sPgorCis8c2NyaXB0PgorICBmdW5jdGlvbiBvbmxvYWQoKSB7CisgICAgdmFyIGZyYW1l
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7CisgICAgdmFyIGRpdiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjEiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUp
OworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAi
U29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdibHVlX2JhY2tncm91bmQucG5nJy4+PGJy
PjxiPlNvbWUgbW9yZSB0ZXh0PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiaWZyYW1lIik7CisgICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2
MiIpOworICAgIGRpdi5hcHBlbmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9j
dW1lbnQuYm9keS5pbm5lckhUTUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGlt
ZyBzcmM9J3JlZF9iYWNrZ3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisK
KyAgICBmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJteURpdjMiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQo
ZnJhbWUpOworCisgICAgZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9Cisg
ICAgICAiU29tZSB0ZXh0PGJyPkFuIGltYWdlIDxpbWcgc3JjPSdvcmFuZ2VfYmFja2dyb3VuZC5w
bmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgIH0KKyAgCis8L3NjcmlwdD4KKwor
PGJvZHkgb25sb2FkPSJvbmxvYWQoKSI+CisgIFRoaXMgcGFnZSBjcmVhdGVzIGVtcHR5IGlmcmFt
ZXMgYW5kIGFkZHMgY29udGVudCB0byB0aGVtIGR5bmFtaWNhbGx5Ljxicj48YnI+CisgIDxkaXYg
aWQ9Im15RGl2MSI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MiI+PC9kaXY+CisgIDxkaXYgaWQ9
Im15RGl2MyI+PC9kaXY+Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0
bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3Nz
X3Rlc3RfcGFnZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0NjM3ZjBmMDIyZDc1OWMwYWRjOWQyMDFiY2Y0
MzE2MTQ2YmQwNDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsMTEy
IEBACis8aHRtbD4KKworPCEtLSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJl
c291cmNlcyBhcmUgcmV0cmlldmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAgV2ViUGFnZVNlcmlh
bGl6ZXI6OmdlbmVyYXRlU25hcHNob3QgbWV0aG9kCistLT4KKworPGhlYWQ+CisKKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtfc3R5bGVzLmNzcyIgLz4K
KworPHN0eWxlPgorQGltcG9ydCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3NzJyk7CisKK0Bmb250LWZh
Y2UgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLm90
ZicpOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLXdlYmZvbnQuZW90KSBmb3JtYXQoJ2VvdCcpOwor
fQorCisjY2h1bmtmaXZlRGl2IHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZSwgc2Fucy1zZXJp
ZjsKK30KKzwvc3R5bGU+CisKKzxzdHlsZT4KKyNkaXZCbHVlIHsKKyAgYmFja2dyb3VuZC1pbWFn
ZTp1cmwoJ2JsdWVfYmFja2dyb3VuZC5wbmcnKTsKK30KKwordWwgeworICBsaXN0LXN0eWxlLWlt
YWdlOiB1cmwoJ3VsLWRvdC5wbmcnKTsKK30KKworb2wgeworICBsaXN0LXN0eWxlLWltYWdlOiB1
cmwoJ29sLWRvdC5wbmcnKTsKK30KKworPC9zdHlsZT4KKworPHNjcmlwdD4KKy8vIER5bmFtaWNh
bGx5IGNyZWF0ZXMgYSBDU1Mgc3R5bGUuCitmdW5jdGlvbiBvbkxvYWQoKSB7CisgIHZhciBzdHls
ZVRleHQgPSAiI2RpdlB1cnBsZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ3B1cnBsZV9iYWNrZ3Jv
dW5kLnBuZycpfSI7CisgIHZhciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UHVy
cGxlJyk7CisgIHZhciBzdHlsZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7
CisgIHN0eWxlTm9kZS50eXBlPSAndGV4dC9jc3MnOworICBzdHlsZU5vZGUubWVkaWE9ICdzY3Jl
ZW4nOworICBzdHlsZU5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5
bGVUZXh0KSk7CisgIGRpdi5hcHBlbmRDaGlsZChzdHlsZU5vZGUpOworfQorPC9zY3JpcHQ+Cis8
L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0ib25Mb2FkKCkiPgorCis8IS0tIFRleHQgdXNpbmcgYW4g
aW1wb3J0ZWQgZm9udCAtLT4KKzxkaXYgaWQ9J2NodW5rZml2ZURpdic+VGhpcyB0ZXh0IHVzZXMg
dGhlIENodW5rZml2ZSBmb250LjwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGxpbmtlZCBmaWxl
IC0tPgorPGRpdiBpZD0nZGl2UmVkJz4KK1RoaXMgZGl2IGhhcyBhIHJlZCBpbWFnZSBhcyBpdHMg
YmFja2dyb3VuZC4KKzwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGEgZmlsZSBpbXBvcnRlZCBp
biB0aGUgbGlua2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZPcmFuZ2UnPgorVGhpcyBkaXYgaGFz
IGEgb3JhbmdlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUg
aXMgaW4gYW4gaW1wb3J0ZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlllbGxvdyc+CitUaGlzIGRp
diBoYXMgYSB5ZWxsb3cgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBT
dHlsZSBpcyBkZWZpbmVkIGluIGEgc3R5bGUgc2VjdGlvbiBpbiB0aGUgaGVhZGVyIC0tPgorPGRp
diBpZD0nZGl2Qmx1ZSc+CitUaGlzIGRpdiBoYXMgYSBibHVlIGltYWdlIGFzIGl0cyBiYWNrZ3Jv
dW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW5saW5lZCAtLT4KKzxkaXYgaWQ9J2Rpdkdy
ZWVuJyBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2dyZWVuX2JhY2tncm91bmQucG5nJyki
PgorVGhpcyBkaXYgaGFzIGEgZ3JlZW4gaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4K
KworPCEtLSBTdHlsZSBpZCBkeW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0aCBKYXZhU2NyaXB0IGlu
IHRoZSBvbmxvYWQgaGFuZGxlciAtLT4KKzxkaXYgaWQ9J2RpdlB1cnBsZSc+CitUaGlzIGRpdiBo
YXMgYSBwdXJwbGUgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworVW5vcmRlcmVk
IGxpc3Q6PGJyPgorPHVsPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+
WWVsbG93PC9saT4KKyAgPGxpPkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVk
PC9saT4KKzwvdWw+Cis8YnI+CisKK09yZGVyZWQgbGlzdDo8YnI+Cis8b2w+CisgIDxsaT5CbHVl
PC9saT4KKyAgPGxpPlJlZDwvbGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+
CisgIDxsaT5HcmVlbjwvbGk+CisgIDxsaT5SZWQ8L2xpPgorPC9vbD4KKworPC9ib2R5PgorCis8
L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFn
ZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVlZGJkYzE4OTFjZjFi
NmY5NjdiN2QzNzYxZTIwNzMwZDgzOWU2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbApAQCAtMCww
ICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5n
Ii8+Cis8aW1nIHNyYz0icmVkX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1s
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL2lmcmFtZTIuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQwNDRiMmVjY2JiN2Y5ZTNm
MGI1ZGZjYTg2ODhmMmVkZmNmOTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKQEAgLTAsMCAr
MSw5IEBACis8aHRtbD4KKzxib2R5PgorCis8aW1nIHNyYz0iZ3JlZW5fYmFja2dyb3VuZC5wbmci
Lz4KKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1s
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmVmNjgzZTU4MWY0NmViNWVlZmIzNzY0NzE0MzBlOGNmYjJlYTZiZDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MKQEAgLTAsMCArMSwzIEBACisjZGl2T3Jh
bmdlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNrZ3JvdW5kLnBuZycpOwor
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5
bGVzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNGM3ZjRkNWY0YTk5YzdhZTZlNmMyNTRhODk2M2U0MmE5YTg0
YmEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzCkBAIC0wLDAgKzEsMyBAQAorI2Rpdlll
bGxvdyB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tncm91bmQucG5nJyk7
Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxl
cy5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjY3ZmI5OWE5YjBkYTA5YmVlMmMyNGVjODM1NWExN2U0MzA3YTYy
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVy
bCgnaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91
bmQtaW1hZ2U6IHVybCgncmVkX2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWYxMmRmNjM1
Njg2YzZmMWMxYzVlZGI0YmRkNTczNTIzZjgwMGFmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwK
QEAgLTAsMCArMSwxMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4K
KzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4i
ICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8
aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4K
KyA8aGVhZD4KKyA8dGl0bGU+WEhUTUwgMS4wIFN0cmljdCBFeGFtcGxlPC90aXRsZT4KKyA8L2hl
YWQ+CisgPGJvZHk+CisgICA8cD5IZWxsbyEgPC9wPgorIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90
b3BfZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci90b3BfZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMzE4NTIzYWZhNGExYjA5ODY1YzQ0
OTI4ZDM0YTdjMTFkMmY0MDJlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCkBAIC0wLDAgKzEs
MTIgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJyZWRfYmFja2dyb3VuZC5wbmciLz4K
KworPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48L2lmcmFtZT4KKzxvYmplY3QgZGF0YT0iaWZy
YW1lMi5odG1sIj48L29iamVjdD4KKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+
CisKKzwvYm9keT4KKworPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91293</attachid>
            <date>2011-04-27 08:51:41 -0700</date>
            <delta_ts>2011-04-28 02:13:46 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-58947-20110427085139.patch</filename>
            <type>text/plain</type>
            <size>65980</size>
            <attacher name="Jay Civelli">jcivelli</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Fu
ZHJvaWQubWsgYi9Tb3VyY2UvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IDRiYjkzYzk5NjlmNWNh
MTE0M2E3ZDc3Y2JhNzI3Mzk4NDNlMzBlZTkuLmE1MzU2YjNiYzY0YmMwYjQwNzIwMGM0NTdhMjIx
ZTcwNGEzODFjMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0FuZHJvaWQubWsKKysrIGIv
U291cmNlL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtNDQ2LDYgKzQ0Niw3IEBAIExPQ0FMX1NSQ19G
SUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCXBhZ2UvUGFnZS5jcHAgXAogCXBhZ2UvUGFn
ZUdyb3VwLmNwcCBcCiAJcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKKwlwYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCXBhZ2UvUGVyZm9y
bWFuY2VOYXZpZ2F0aW9uLmNwcCBcCiAJcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCBkOGFjNjQ1MGM3NGQ4ZTc2YmNkOWIzODczNmNiZjQzY2ViZDFl
YTc1Li5kMGUzYWFmMGU2NzQyODM3Y2MyNWFlYjhiMGE0OGEzYTg2NTYyMDcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dApAQCAtMTAyNCw2ICsxMDI0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAg
IHBhZ2UvUGFnZS5jcHAKICAgICBwYWdlL1BhZ2VHcm91cC5jcHAKICAgICBwYWdlL1BhZ2VHcm91
cExvYWREZWZlcnJlci5jcHAKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2UuY3BwCiAgICAgcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwCiAgICAg
cGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxYWFjMDA1ZjA4ZTA2NjZk
NTM1ZWRiNTViNmE5Nzg3Yzk2MDVjMWQyLi4xM2QxMTBkMjg4ODE1MGUxMzkzMDRmNzY0ZjQ2NTc5
OTU4ZGU3Zjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMTEtMDQtMjUgIEpheSBD
aXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCisKKyAgICAgICAgSW50cm9kdWNpbmcgYSBuZXcgY2xhc3MgdGhhdCBhbGxvd3Mg
c2VyaWFsaXphdGlvbiBvZiBhIHBhZ2UgYmFjaworICAgICAgICB0byBIVE1ML1hNTCB3aXRoIGFs
bCBpdHMgc3ViLWZyYW1lcyBhbmQgYWxzbyByZXRyaWV2ZXMgdGhlIHBhZ2UncworICAgICAgICBy
ZXNvdXJjZXMuCisgICAgICAgIFRlc3RzOiB1bml0LXRlc3RzIGluIGNocm9taXVtL3Rlc3RzL1dl
YlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBBbmRyb2lkLm1rOgorICAgICAg
ICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c3VnZ2VzdGVkTUlNRVR5cGUpOgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5oOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3RvbUF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVs
ZW1lbnQpOgorICAgICAgICAqIGVkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaDoKKyAgICAgICAg
KiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9jZXNzTWV0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKiBodG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaDoKKyAgICAgICAgKiBw
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcDogQWRkZWQuCisgICAgICAgICogcGFnZS9QYWdlU2VyaWFs
aXplci5oOiBBZGRlZC4KKwogMjAxMS0wNC0yNiAgQ2h1bi1MdW5nIEh1YW5nICA8YWx2aW5jbC5o
dWFuZ0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1ZDJmNjZlZGIyOTAyNmEyYThiZDQ5ZmJh
MWZhOTUzNmFmMzk3ZTFiLi45NjJmZDI0ZDllZGJmZDkyNTFkZWFhOWRlMDlkOTFlNmI1Nzk4NWM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTIyNDcsNiArMjI0Nyw4IEBAIHdl
YmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXAuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFs
aXplci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZvcm1hbmNlLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wYWdlL1BlcmZv
cm1hbmNlTmF2aWdhdGlvbi5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGNiZDZjYmYxZGRjMjhh
MzY1MWI2NzAzNTMyODVkODNkZWJjNzQyMGMuLjY4NzIxZTRjYzZhZWQ2MjI4ZGI2YTk0Y2I4NmU4
NGVjNTU0MWMxMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTcxMSw2ICs3MTEsNyBAQAogICAgICAg
ICAgICAgJ3BhZ2UvTWVtb3J5SW5mby5oJywKICAgICAgICAgICAgICdwYWdlL1BhZ2UuaCcsCiAg
ICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuaCcsCisgICAgICAgICAgICAncGFnZS9QYWdlU2Vy
aWFsaXplci5oJywKICAgICAgICAgICAgICdwYWdlL1BsdWdpbkhhbHRlckNsaWVudC5oJywKICAg
ICAgICAgICAgICdwYWdlL1Bvc2l0aW9uQ2FsbGJhY2suaCcsCiAgICAgICAgICAgICAncGFnZS9Q
b3NpdGlvbkVycm9yLmgnLApAQCAtMzQ2Myw2ICszNDY0LDcgQEAKICAgICAgICAgICAgICdwYWdl
L1BhZ2VHcm91cC5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3VwTG9hZERlZmVycmVy
LmNwcCcsCiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuaCcsCisgICAg
ICAgICAgICAncGFnZS9QYWdlU2VyaWFsaXplci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2UvUGVy
Zm9ybWFuY2UuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlLmgnLAogICAgICAg
ICAgICAgJ3BhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4
IDA2ZDhmNGE5NWNlYzZiNzM3YWNlYmFiZDkwNmJmNjgwMGY5OWM2YzAuLmFlODhiM2YyNDgwNTNm
YTBhYmMwOGE5NzU0NTU4MWFlZTVlZjg1NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05MzUsNiArOTM1
LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9QYWdlLmNwcCBcCiAgICAgcGFnZS9QYWdlR3Jv
dXAuY3BwIFwKICAgICBwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgXAorICAgIHBhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwIFwKICAgICBwYWdlL1BlcmZvcm1hbmNlLmNwcCBcCiAgICAgcGFn
ZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKICAgICBwYWdlL1BlcmZvcm1hbmNlVGltaW5n
LmNwcCBcCkBAIC0xODg0LDYgKzE4ODUsNyBAQCBIRUFERVJTICs9IFwKICAgICBwYWdlL1BhZ2VH
cm91cC5oIFwKICAgICBwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5oIFwKICAgICBwYWdlL1Bh
Z2UuaCBcCisgICAgcGFnZS9QYWdlU2VyaWFsaXplci5oIFwKICAgICBwYWdlL1BsdWdpbkhhbHRl
ci5oIFwKICAgICBwYWdlL1BsdWdpbkhhbHRlckNsaWVudC5oIFwKICAgICBwYWdlL1ByaW50Q29u
dGV4dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNGFjMzhmYTVkNzQ0ZDc5Nzc5NTRkNTIxNGFmNDQ4ZjNjYzkwMWRiMS4uODg3NDEwMGE5
ZDJmZjIzNmUwNzczMTU5Njk4NmM0MzJjOTk1MjZiNSAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI1MTY5LDYgKzI1MTY5LDE0IEBACiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxwYWdlXFBhZ2VHcm91cExvYWREZWZlcnJlci5oIgogCQkJCT4KIAkJ
CTwvRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5jcHAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIDwvRmlsZT4KKyAgICAgICAgICAgICAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdlU2VyaWFsaXplci5o
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAg
ICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQZXJmb3Jt
YW5jZS5jcHAiCiAJCQkJPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGE1YWI3OWY4ZDQ2YTdjYjVlMzBiNzhlNDA2NTJmNTRkNGQ4
ZTkxYzkuLjdkNTNhZTk0MzNmYjczMDc0YmZkYzgzOGYxNDc2YzU3ODVkNTcwYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg0
Nyw2ICs4NDcsOCBAQAogCQkzM0MwQ0NENTExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElu
cHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0Mw
Q0NEMzExMkM1RTYyMDBDRTA1N0QgLyogU2VjdXJlVGV4dElucHV0LmggKi87IH07CiAJCTMzRDAy
MTJEMTMxREIzN0IwMDQwOTFBOCAvKiBDb29raWVTdG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTNGMDFFQTEyNzBFMTBEMDBERkJBNzEgLyog
Q29va2llU3RvcmFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTM3MUE2N0NCMTFDNkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUE2N0NBMTFD
NkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNGLmNwcCAqLzsgfTsKKwkJMzcxRTY1Q0MxMzY2
MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNl
cmlhbGl6ZXIuaCAqLzsgfTsKKwkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJp
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi87IH07CiAJ
CTM3MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGM0UwRDI1QjlBRjAwRUNFMEQ1IC8q
IEZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzcxRjRGNDEwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNGMEQyNUI5QUYwMEVD
RTBENSAvKiBGb250RGF0YS5jcHAgKi87IH07CiAJCTM3MUY0RkZDMEQyNUU3RjMwMEVDRTBENSAv
KiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRh
LmggKi87IH07CkBAIC03MzcxLDYgKzczNzMsOCBAQAogCQkzM0MwQ0NEMjExMkM1RTYyMDBDRTA1
N0QgLyogU2VjdXJlVGV4dElucHV0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNlY3VyZVRleHRJbnB1dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTMzQzBDQ0QzMTEyQzVFNjIwMENFMDU3RCAvKiBTZWN1cmVUZXh0SW5wdXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VjdXJlVGV4dElucHV0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3MUE2N0NBMTFDNkM3REIwMDA0N0I4QiAvKiBIeXBoZW5hdGlvbkNG
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEh5cGhlbmF0aW9uQ0Yu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzFFNjVDQjEzNjYxRURDMDBCRUVE
QjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFnZVNlcmlhbGl6ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzcxRTY1Q0Qx
MzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhZ2VTZXJpYWxpemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzcxRjRGM0UwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTM3MUY0RjNGMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb250RGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50
ZWRGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRG
b250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ0MzYsNiArMTQ0NDAs
OCBAQAogCQkJCTkzMDJCMEJFMEQ3OUY4MkMwMEM3RUU4MyAvKiBQYWdlR3JvdXAuaCAqLywKIAkJ
CQk3QTY3NEJEOTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVyLmNwcCAq
LywKIAkJCQk3QTY3NEJEQTBGOUVCRjRFMDA2Q0YwOTkgLyogUGFnZUdyb3VwTG9hZERlZmVycmVy
LmggKi8sCisJCQkJMzcxRTY1Q0QxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNw
cCAqLywKKwkJCQkzNzFFNjVDQjEzNjYxRURDMDBCRUVEQjAgLyogUGFnZVNlcmlhbGl6ZXIuaCAq
LywKIAkJCQk4QTg0NEQwMTExRDNDMThFMDAxNDA2NUMgLyogUGVyZm9ybWFuY2UuY3BwICovLAog
CQkJCThBODQ0RDAyMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5oICovLAogCQkJCThB
ODQ0RDAzMTFEM0MxOEUwMDE0MDY1QyAvKiBQZXJmb3JtYW5jZS5pZGwgKi8sCkBAIC0yMzA4MSw2
ICsyMzA4Nyw3IEBACiAJCQkJNDM1OEU4ODYxMzYwQTMzQjAwRTQ3NDhDIC8qIFNWR0ZFRHJvcFNo
YWRvd0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFDMTM2NUE0OTYwMEVENkUz
MyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjM4MTBDMUUx
MzY1QTRENDAwRUQ2RTMzIC8qIFdvcmtlckNvbnRleHRJbnNwZWN0b3JQcm94eS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMzcxRTY1Q0MxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTI1Nzk0LDYgKzI1ODAxLDcgQEAKIAkJCQkxNEUwQkM1NjEzNjE0
OEE4MDAyQUQxMkUgLyogSlNET01Ub2tlbkxpc3RDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRjM4MTBDMUIxMzY1QTQ5NjAwRUQ2RTMzIC8qIEluc3BlY3RvcldvcmtlckFnZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTc4MTc1NTg2MTM2NUExQjAwMDkzQkUyRSAvKiBEYXRhVHJhbnNm
ZXJJdGVtcy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzNzFFNjVDRTEzNjYxRUVEMDBCRUVEQjAg
LyogUGFnZVNlcmlhbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAppbmRleCA2OTIwYzU0MzQ2OGU3MTg4OTk4ZDU4ODNkNThkZWM5ZTE3YjJlNmVjLi4wYzA5OTA5
YjI2MWU5N2NmZTk3YjVlNDkyYTVlNDA3MmQ1NDk3NTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKQEAgLTEwODAsNiArMTA4MCwyMCBAQCB2b2lkIERvY3VtZW50OjpzZXRDb250ZW50KGNvbnN0
IFN0cmluZyYgY29udGVudCkKICAgICBjbG9zZSgpOwogfQogCitTdHJpbmcgRG9jdW1lbnQ6OnN1
Z2dlc3RlZE1JTUVUeXBlKCkgY29uc3QKK3sKKyAgICBpZiAobV9kb2N1bWVudC0+aXNYSFRNTERv
Y3VtZW50KCkpCisgICAgICAgIHJldHVybiAiYXBwbGljYXRpb24veGh0bWwreG1sIjsKKyAgICBp
ZiAobV9kb2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4gImltYWdlL3N2
Zyt4bWwiOworICAgIGlmIChtX2RvY3VtZW50LT54bWxTdGFuZGFsb25lKCkpCisgICAgICAgIHJl
dHVybiAidGV4dC94bWwiOworICAgIGlmIChtX2RvY3VtZW50LT5pc0hUTUxEb2N1bWVudCgpKQor
ICAgICAgICByZXR1cm4gInRleHQvaHRtbCI7CisKKyAgICByZXR1cm4gbV9kb2N1bWVudExvYWRl
ci0+cmVzcG9uc2VNSU1FVHlwZSgpOworfQorCiAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNjdXNz
IHRoZSBET00gQVBJIGhlcmUgYXQgc29tZSBwb2ludC4gSWRlYXM6CiAvLyAqIG1ha2luZyBpdCBy
ZWNlaXZlIGEgcmVjdCBhcyBwYXJhbWV0ZXIsIGkuZS4gbm9kZXNGcm9tUmVjdCh4LCB5LCB3LCBo
KTsKIC8vICogbWFraW5nIGl0IHJlY2VpdmUgdGhlIGV4cGFkaW5nIHNpemUgb2YgZWFjaCBkaXJl
Y3Rpb24gc2VwYXJhdGVseSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKaW5kZXggMTQ1OWM5MjVjOTAyYjZi
YjIzMmYyZTUyNzA5Mzc2ZGM0ZDc1NmFlZC4uMzZkNGZhYzcyYjVhZmYzMzRhMDJkZGVjYmU0OWY1
OWNjNWYwMDM4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKQEAgLTM1Nyw2ICszNTcsOCBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldENvbnRlbnQoY29uc3QgU3RyaW5nJik7CiAKKyAgICBTdHJpbmcg
c3VnZ2VzdGVkTUlNRVR5cGUoKSBjb25zdDsKKwogICAgIFN0cmluZyBjb250ZW50TGFuZ3VhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRMYW5ndWFnZTsgfQogICAgIHZvaWQgc2V0Q29udGVu
dExhbmd1YWdlKGNvbnN0IFN0cmluZyYgbGFuZykgeyBtX2NvbnRlbnRMYW5ndWFnZSA9IGxhbmc7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAppbmRl
eCBiNmQ4NWQ2MWRiZTQxNWVkNTIxNzE3ZTlkNDllZGNhMTRlMjM1ZjI3Li45OTM5ZDZlODM2YmM4
NjMxMzUzYzBjNGY3MWZmYjQ3YjBiNDczZjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmNwcApAQCAtMTU4LDYgKzE1OCwxMCBAQCB2b2lkIE1hcmt1cEFj
Y3VtdWxhdG9yOjphcHBlbmRBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNv
bnN0IFN0cmluZwogICAgICAgICBkb2N1bWVudElzSFRNTCA/IEVudGl0eU1hc2tJbkhUTUxBdHRy
aWJ1dGVWYWx1ZSA6IEVudGl0eU1hc2tJbkF0dHJpYnV0ZVZhbHVlKTsKIH0KIAordm9pZCBNYXJr
dXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiwgRWxl
bWVudCosIE5hbWVzcGFjZXMqKQoreworfQorCiB2b2lkIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBl
bmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IFN0
cmluZyYgdXJsU3RyaW5nKQogewogICAgIFVDaGFyIHF1b3RlQ2hhciA9ICdcIic7CkBAIC0zMjcs
NiArMzMxLDkgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRWxlbWVudChWZWN0b3I8
VUNoYXI+JiBvdXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWUKICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAgICBhcHBlbmRBdHRyaWJ1dGUob3V0LCBl
bGVtZW50LCAqYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKSwgbmFtZXNwYWNlcyk7CiAKKyAg
ICAvLyBHaXZlIGFuIG9wcG9ydHVuaXR5IHRvIHN1YmNsYXNzZXMgdG8gYWRkIHRoZWlyIG93biBh
dHRyaWJ1dGVzLgorICAgIGFwcGVuZEN1c3RvbUF0dHJpYnV0ZXMob3V0LCBlbGVtZW50LCBuYW1l
c3BhY2VzKTsKKwogICAgIGFwcGVuZENsb3NlVGFnKG91dCwgZWxlbWVudCk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaAppbmRleCAwYmZjNmU2MDA1YmJm
NDRiMzBhZTNhZjc2ZjM0NmI4NzBhYTQ2ZmM5Li40ZjY4MTNlNjA3NDdmZjAyZmQxMTQwN2IyOGY0
NjlmNTliZmNmODQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRv
ci5oCkBAIC03NCwyNSArNzQsMjYgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRTdHJpbmcoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBhcHBlbmRTdGFydFRh
ZyhOb2RlKiwgTmFtZXNwYWNlcyogPSAwKTsKLSAgICB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVuZFRhZyhOb2RlKik7CiAgICAgc3RhdGljIHNpemVf
dCB0b3RhbExlbmd0aChjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwogICAgIHNpemVfdCBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiB0b3RhbExlbmd0aChtX3N1Y2NlZWRpbmdNYXJrdXApOyB9CiAgICAg
dm9pZCBjb25jYXRlbmF0ZU1hcmt1cChWZWN0b3I8VUNoYXI+JiBvdXQpOwogICAgIHZvaWQgYXBw
ZW5kQXR0cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIGF0
dHJpYnV0ZSwgYm9vbCBkb2N1bWVudElzSFRNTCk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEN1
c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CiAg
ICAgdm9pZCBhcHBlbmRRdW90ZWRVUkxBdHRyaWJ1dGVWYWx1ZShWZWN0b3I8VUNoYXI+JiByZXN1
bHQsIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nKTsKICAgICB2b2lkIGFwcGVuZE5vZGVWYWx1ZShW
ZWN0b3I8VUNoYXI+JiBvdXQsIGNvbnN0IE5vZGUqLCBjb25zdCBSYW5nZSosIEVudGl0eU1hc2sp
OwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNlRWxlbWVudChjb25zdCBFbGVtZW50Kik7CiAg
ICAgYm9vbCBzaG91bGRBZGROYW1lc3BhY2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiwgTmFt
ZXNwYWNlcyYpOwogICAgIHZvaWQgYXBwZW5kTmFtZXNwYWNlKFZlY3RvcjxVQ2hhcj4mIHJlc3Vs
dCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNw
YWNlVVJJLCBOYW1lc3BhY2VzJik7Ci0gICAgRW50aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChU
ZXh0KiB0ZXh0KSBjb25zdDsKKyAgICBFbnRpdHlNYXNrIGVudGl0eU1hc2tGb3JUZXh0KFRleHQq
KSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQs
IFRleHQqKTsKICAgICB2b2lkIGFwcGVuZENvbW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25z
dCBTdHJpbmcmIGNvbW1lbnQpOwogICAgIHZvaWQgYXBwZW5kRG9jdW1lbnRUeXBlKFZlY3RvcjxV
Q2hhcj4mIHJlc3VsdCwgY29uc3QgRG9jdW1lbnRUeXBlKik7CiAgICAgdm9pZCBhcHBlbmRQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBTdHJpbmcmIHRhcmdl
dCwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChW
ZWN0b3I8VUNoYXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7Ci0gICAgdm9pZCBhcHBl
bmRPcGVuVGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNl
cyopOwotICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiBlbGVtZW50KTsKLSAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZShWZWN0b3I8VUNoYXI+JiBvdXQs
IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMqKTsKKyAgICB2
b2lkIGFwcGVuZE9wZW5UYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNl
cyopOworICAgIHZvaWQgYXBwZW5kQ2xvc2VUYWcoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
Kik7CisgICAgdm9pZCBhcHBlbmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiwgY29uc3QgQXR0cmlidXRlJiwgTmFtZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kQ0RBVEFT
ZWN0aW9uKFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBzZWN0aW9uKTsKICAgICB2
b2lkIGFwcGVuZFN0YXJ0TWFya3VwKFZlY3RvcjxVQ2hhcj4mIHJlc3VsdCwgY29uc3QgTm9kZSos
IE5hbWVzcGFjZXMqKTsKICAgICBib29sIHNob3VsZFNlbGZDbG9zZShjb25zdCBOb2RlKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJz
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2Vy
LmNwcAppbmRleCBlYWM3ZDI4MWE0NDlmZmFiM2U5MzExY2IwYzRiYWIzNGRjM2U3M2Q1Li41NDEz
NDY2OTk2OTRhOTFjOGYzZjNhMGE3MWFlMzI5NTZkMDJiNzBhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKQEAgLTEwMiwx
NSArMTAyLDI3IEBAIFN0cmluZyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmV4dHJhY3RDaGFyc2V0
KGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGJvb2wgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpwcm9j
ZXNzTWV0YSgpCiB7CisgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0JiB0b2tlbkF0
dHJpYnV0ZXMgPSBtX3Rva2VuLmF0dHJpYnV0ZXMoKTsKKyAgICBBdHRyaWJ1dGVMaXN0IGF0dHJp
YnV0ZXM7CisgICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSB0b2tlbkF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRlciAhPSB0b2tlbkF0dHJpYnV0ZXMu
ZW5kKCk7ICsraXRlcikgeworICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZShpdGVyLT5tX25h
bWUuZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZVZhbHVlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3ZhbHVlLnNpemUoKSk7CisgICAg
ICAgIGF0dHJpYnV0ZXMuYXBwZW5kKG1ha2VfcGFpcihhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVW
YWx1ZSkpOworICAgIH0KKworICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZ0Zyb21NZXRhQXR0cmli
dXRlcyhhdHRyaWJ1dGVzKTsKKyAgICByZXR1cm4gbV9lbmNvZGluZy5pc1ZhbGlkKCk7Cit9CisK
K1RleHRFbmNvZGluZyBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OmVuY29kaW5nRnJvbU1ldGFBdHRy
aWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxpc3QmIGF0dHJpYnV0ZXMpCit7CiAgICAgYm9vbCBnb3RQ
cmFnbWEgPSBmYWxzZTsKICAgICBNb2RlIG1vZGUgPSBOb25lOwogICAgIFN0cmluZyBjaGFyc2V0
OwogCi0gICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0JiBhdHRyaWJ1dGVzID0gbV90
b2tlbi5hdHRyaWJ1dGVzKCk7Ci0gICAgZm9yIChIVE1MVG9rZW46OkF0dHJpYnV0ZUxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9
IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikgewotICAgICAgICBBdG9taWNTdHJpbmcgYXR0cmli
dXRlTmFtZShpdGVyLT5tX25hbWUuZGF0YSgpLCBpdGVyLT5tX25hbWUuc2l6ZSgpKTsKLSAgICAg
ICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlKGl0ZXItPm1fdmFsdWUuZGF0YSgpLCBpdGVyLT5tX3Zh
bHVlLnNpemUoKSk7CisgICAgZm9yIChBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVy
ID0gYXR0cmlidXRlcy5iZWdpbigpOyBpdGVyICE9IGF0dHJpYnV0ZXMuZW5kKCk7ICsraXRlcikg
eworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZU5hbWUgPSBpdGVyLT5maXJz
dDsKKyAgICAgICAgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGl0ZXItPnNlY29uZDsK
IAogICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0cikgewogICAgICAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHJpYnV0ZVZhbHVlLCAiY29udGVudC10eXBl
IikpCkBAIC0xMjcsMTMgKzEzOSwxMCBAQCBib29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJv
Y2Vzc01ldGEoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1vZGUgPT0gQ2hhcnNldCB8
fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290UHJhZ21hKSkgewotICAgICAgICBtX2VuY29kaW5nID0g
VGV4dEVuY29kaW5nKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhjaGFyc2V0KSk7
Ci0gICAgICAgIGlmIChtX2VuY29kaW5nLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KKyAgICBpZiAobW9kZSA9PSBDaGFyc2V0IHx8IChtb2RlID09IFByYWdtYSAm
JiBnb3RQcmFnbWEpKQorICAgICAgICByZXR1cm4gVGV4dEVuY29kaW5nKHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyhjaGFyc2V0KSk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIFRleHRFbmNvZGluZygpOwogfQogCiBzdGF0aWMgY29uc3QgaW50IGJ5dGVzVG9DaGVj
a1VuY29uZGl0aW9uYWxseSA9IDEwMjQ7IC8vIFRoYXQgbWFueSBpbnB1dCBieXRlcyB3aWxsIGJl
IGNoZWNrZWQgZm9yIG1ldGEgY2hhcnNldCBldmVuIGlmIDxoZWFkPiBzZWN0aW9uIGlzIG92ZXIu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQ
YXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNl
ci5oCmluZGV4IDQ1ZmJhZjdhYjliZTQ5NWE3ODYyNGNmMGYyMGI4NTcyNDAxNjA4OGEuLjFlZTg3
ZGY5YWQyODU3ZGE4MGIzZmFlZjE4OWE4Yzc5NmRkY2UzMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5oCkBAIC00OCwxMSArNDgs
MTYgQEAgcHVibGljOgogCiAgICAgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZygpIHsgcmV0
dXJuIG1fZW5jb2Rpbmc7IH0KIAorICAgIHR5cGVkZWYgVmVjdG9yPHBhaXI8U3RyaW5nLCBTdHJp
bmc+ID4gQXR0cmlidXRlTGlzdDsKKyAgICAvLyBUaGUgcmV0dXJuZWQgZW5jb2RpbmcgbWlnaHQg
bm90IGJlIHZhbGlkLgorICAgIHN0YXRpYyBUZXh0RW5jb2RpbmcgZW5jb2RpbmdGcm9tTWV0YUF0
dHJpYnV0ZXMoY29uc3QgQXR0cmlidXRlTGlzdCYKKyk7CisKIHByaXZhdGU6CiAgICAgSFRNTE1l
dGFDaGFyc2V0UGFyc2VyKCk7CiAKICAgICBib29sIHByb2Nlc3NNZXRhKCk7Ci0gICAgU3RyaW5n
IGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBTdHJpbmcgZXh0cmFj
dENoYXJzZXQoY29uc3QgU3RyaW5nJik7CiAKICAgICBlbnVtIE1vZGUgewogICAgICAgICBOb25l
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNjNhNGI0
ZjU0ODllOTdmMTY5NDI4Yzg1OWE3MzkzZWQ0YmFkNWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTAsMCArMSwzNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZVNlcmlhbGl6ZXIuaCIKKworI2luY2x1ZGUg
IkNTU0ltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbXBvcnRSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1
ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTGlua0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MTWV0YUNoYXJzZXRQYXJzZXIuaCIKKyNpbmNsdWRlICJIVE1M
TmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRUUFBh
cnNlcnMuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJNYXJrdXBBY2N1bXVsYXRvci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVJbWFnZS5oIgorI2lu
Y2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5h
dGUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgYm9vbCBpc0NoYXJzZXRTcGVj
aWZ5aW5nTm9kZShOb2RlKiBub2RlKQoreworICAgIGlmICghbm9kZS0+aXNIVE1MRWxlbWVudCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRv
SFRNTEVsZW1lbnQobm9kZSk7CisgICAgaWYgKCFlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1l
czo6bWV0YVRhZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBIVE1MTWV0YUNoYXJzZXRQ
YXJzZXI6OkF0dHJpYnV0ZUxpc3QgYXR0cmlidXRlczsKKyAgICBjb25zdCBOYW1lZE5vZGVNYXAq
IGF0dHJpYnV0ZXNNYXAgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKHRydWUpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzTWFwLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
IEF0dHJpYnV0ZSogaXRlbSA9IGF0dHJpYnV0ZXNNYXAtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGVhbCBhcHByb3ByaWF0ZWx5IHdpdGggdGhlIGF0dHJp
YnV0ZSBpZiB0aGV5IGhhdmUgYSBuYW1lc3BhY2UuCisgICAgICAgIGF0dHJpYnV0ZXMuYXBwZW5k
KG1ha2VfcGFpcihpdGVtLT5uYW1lKCkudG9TdHJpbmcoKSwgaXRlbS0+dmFsdWUoKS5zdHJpbmco
KSkpOworICAgIH0KKyAgICBUZXh0RW5jb2RpbmcgdGV4dEVuY29kaW5nID0gSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICBy
ZXR1cm4gdGV4dEVuY29kaW5nLmlzVmFsaWQoKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkSWdu
b3JlRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIHJldHVybiBlbGVtZW50LT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6c2NyaXB0VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6bm9zY3JpcHRUYWcpIHx8IGlzQ2hhcnNldFNwZWNpZnlpbmdOb2RlKGVsZW1lbnQpOwor
fQorCitzdGF0aWMgY29uc3QgUXVhbGlmaWVkTmFtZSYgZnJhbWVPd25lclVSTEF0dHJpYnV0ZU5h
bWUoY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50JiBmcmFtZU93bmVyKQoreworICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgc3VwcG9ydCBhbGwgZnJhbWUgb3duZXJzIGluY2x1ZGluZyBhcHBsZXRz
LgorICAgIHJldHVybiBmcmFtZU93bmVyLmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcp
ID8gSFRNTE5hbWVzOjpkYXRhQXR0ciA6IEhUTUxOYW1lczo6c3JjQXR0cjsKK30KKworY2xhc3Mg
U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIDogcHVibGljIFdlYkNvcmU6Ok1hcmt1cEFjY3Vt
dWxhdG9yIHsKK3B1YmxpYzoKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IoUGFnZVNl
cmlhbGl6ZXIqLCBEb2N1bWVudCosIFZlY3RvcjxOb2RlKj4qKTsKKyAgICB2aXJ0dWFsIH5TZXJp
YWxpemVyTWFya3VwQWNjdW11bGF0b3IoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRUZXh0KFZlY3RvcjxVQ2hhcj4mIG91dCwgVGV4dCopOworICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRFbGVtZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+
JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZEVu
ZFRhZyhOb2RlKik7CisKK3ByaXZhdGU6CisgICAgUGFnZVNlcmlhbGl6ZXIqIG1fc2VyaWFsaXpl
cjsKKyAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKK307CisKK1NlcmlhbGl6ZXJNYXJrdXBBY2N1
bXVsYXRvcjo6U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiBzZXJp
YWxpemVyLCBEb2N1bWVudCogZG9jdW1lbnQsIFZlY3RvcjxOb2RlKj4qIG5vZGVzKQorICAgIDog
TWFya3VwQWNjdW11bGF0b3Iobm9kZXMsIEFic29sdXRlVVJMcykKKyAgICAsIG1fc2VyaWFsaXpl
cihzZXJpYWxpemVyKQorICAgICwgbV9kb2N1bWVudChkb2N1bWVudCkKK3sKKyAgICAvLyBNYXJr
dXBBY2N1bXVsYXRvciBkb2VzIG5vdCBzZXJpYWxpemUgdGhlIDw/eG1sIC4uLiBsaW5lLCBzbyB3
ZSBhZGQgaXQgZXhwbGljaXRlbHkgdG8gZW5zdXJlIHRoZSByaWdodCBlbmNvZGluZyBpcyBzcGVj
aWZpZWQuCisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpIHx8IG1fZG9jdW1l
bnQtPnhtbFN0YW5kYWxvbmUoKSB8fCBtX2RvY3VtZW50LT5pc1NWR0RvY3VtZW50KCkpCisgICAg
ICAgIGFwcGVuZFN0cmluZyhtYWtlU3RyaW5nKCI8P3htbCB2ZXJzaW9uPVwiIiwgbV9kb2N1bWVu
dC0+eG1sVmVyc2lvbigpLCAiXCIgZW5jb2Rpbmc9XCIiLCBtX2RvY3VtZW50LT5jaGFyc2V0KCks
ICJcIj8+IikpOworfQorCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6On5TZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3IoKQoreworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVs
YXRvcjo6YXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+JiBvdXQsIFRleHQqIHRleHQpCit7CisgICAg
RWxlbWVudCogcGFyZW50ID0gdGV4dC0+cGFyZW50RWxlbWVudCgpOworICAgIGlmIChwYXJlbnQg
JiYgIXNob3VsZElnbm9yZUVsZW1lbnQocGFyZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0
b3I6OmFwcGVuZFRleHQob3V0LCB0ZXh0KTsKK30KKwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVt
ZW50LCBOYW1lc3BhY2VzKiBuYW1lc3BhY2VzKQoreworICAgIGlmICghc2hvdWxkSWdub3JlRWxl
bWVudChlbGVtZW50KSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVsZW1lbnQo
b3V0LCBlbGVtZW50LCBuYW1lc3BhY2VzKTsKKworICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6aGVhZFRhZykpIHsKKyAgICAgICAgU3RyaW5nIG1ldGEgPSBtYWtlU3RyaW5n
KCI8bWV0YSBjaGFyc2V0PVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI+Iik7CisgICAg
ICAgIG91dC5hcHBlbmQobWV0YS5jaGFyYWN0ZXJzKCksIG1ldGEubGVuZ3RoKCkpOworICAgIH0K
KworICAgIC8vIEZJWE1FOiBGb3Igb2JqZWN0IChwbHVnaW5zKSB0YWdzIGFuZCB2aWRlbyB0YWcg
d2UgY291bGQgcmVwbGFjZSB0aGVtIGJ5IGFuIGltYWdlIG9mIHRoZWlyIGN1cnJlbnQgY29udGVu
dHMuCit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21B
dHRyaWJ1dGVzKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNl
cyogbmFtZXNwYWNlcykKK3sKKyAgICBpZiAoIWVsZW1lbnQtPmlzRnJhbWVPd25lckVsZW1lbnQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93
bmVyID0gc3RhdGljX2Nhc3Q8SFRNTEZyYW1lT3duZXJFbGVtZW50Kj4oZWxlbWVudCk7CisgICAg
RnJhbWUqIGZyYW1lID0gZnJhbWVPd25lci0+Y29udGVudEZyYW1lKCk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCB1cmwgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+
dXJsKCk7CisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIXVybC5wcm90b2NvbElzKCJhYm91dCIp
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIHRvIGdpdmUgYSBmYWtlIGxvY2F0
aW9uIHRvIGJsYW5rIGZyYW1lcyBzbyB0aGV5IGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBzZXJp
YWxpemVkIGZyYW1lLgorICAgIHVybCA9IG1fc2VyaWFsaXplci0+dXJsRm9yQmxhbmtGcmFtZShm
cmFtZSk7CisgICAgUmVmUHRyPEF0dHJpYnV0ZT4gYXR0cmlidXRlID0gQXR0cmlidXRlOjpjcmVh
dGUoZnJhbWVPd25lclVSTEF0dHJpYnV0ZU5hbWUoKmZyYW1lT3duZXIpLCB1cmwuc3RyaW5nKCkp
OworICAgIGFwcGVuZEF0dHJpYnV0ZShvdXQsIGVsZW1lbnQsICphdHRyaWJ1dGUsIG5hbWVzcGFj
ZXMpOworfQorCit2b2lkIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kRW5kVGFn
KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiAhc2hvdWxk
SWdub3JlRWxlbWVudCh0b0VsZW1lbnQobm9kZSkpKQorICAgICAgICBNYXJrdXBBY2N1bXVsYXRv
cjo6YXBwZW5kRW5kVGFnKG5vZGUpOworfQorCitQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U6OlJl
c291cmNlKCkKK3sKK30KKworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBkYXRhKQorICAgIDogdXJsKHVybCkKKyAgICAsIG1pbWVUeXBlKG1pbWVUeXBlKQorICAg
ICwgZGF0YShkYXRhKQoreworfQorCitQYWdlU2VyaWFsaXplcjo6UGFnZVNlcmlhbGl6ZXIoVmVj
dG9yPFBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4qIHJlc291cmNlcykKKyAgICA6IG1fcmVzb3Vy
Y2VzKHJlc291cmNlcykKKyAgICAsIG1fYmxhbmtGcmFtZUNvdW50ZXIoMCkKK3sKK30KKwordm9p
ZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFBhZ2UqIHBhZ2UpCit7CisgICAgc2VyaWFsaXpl
RnJhbWUocGFnZS0+bWFpbkZyYW1lKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJp
YWxpemVGcmFtZShGcmFtZSogZnJhbWUpCit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCk7CisgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+dXJsKCk7CisgICAgaWYg
KCF1cmwuaXNWYWxpZCgpIHx8IHVybC5wcm90b2NvbElzKCJhYm91dCIpKSB7CisgICAgICAgIC8v
IEZvciBibGFuayBmcmFtZXMgd2UgZ2VuZXJhdGUgYSBmYWtlIFVSTCBzbyB0aGV5IGNhbiBiZSBy
ZWZlcmVuY2VkIGJ5IHRoZWlyIGNvbnRhaW5pbmcgZnJhbWUuCisgICAgICAgIHVybCA9IHVybEZv
ckJsYW5rRnJhbWUoZnJhbWUpOworICAgIH0KKworICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250
YWlucyh1cmwpKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIDIgZnJhbWUgd2l0
aCB0aGUgc2FtZSBVUkwgYnV0IHdoaWNoIHdlcmUgZHluYW1pY2FsbHkgY2hhbmdlZCBhbmQgaGF2
ZSBub3cKKyAgICAgICAgLy8gZGlmZmVyZW50IGNvbnRlbnQuIFNvIHdlIHNob3VsZCBzZXJpYWxp
emUgYm90aCBhbmQgc29tZWhvdyByZW5hbWUgdGhlIGZyYW1lIHNyYyBpbiB0aGUgY29udGFpbmlu
ZworICAgICAgICAvLyBmcmFtZS4gQXJnIQorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
VmVjdG9yPE5vZGUqPiBub2RlczsKKyAgICBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3IgYWNj
dW11bGF0b3IodGhpcywgZG9jdW1lbnQsICZub2Rlcyk7CisgICAgVGV4dEVuY29kaW5nIHRleHRF
bmNvZGluZyhUZXh0RW5jb2RpbmcoZG9jdW1lbnQtPmNoYXJzZXQoKSkpOworICAgIEFTU0VSVCh0
ZXh0RW5jb2RpbmcuaXNWYWxpZCgpKTsKKyAgICBTdHJpbmcgdGV4dCA9IGFjY3VtdWxhdG9yLnNl
cmlhbGl6ZU5vZGVzKGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSwgMCwgSW5jbHVkZU5vZGUp
OworICAgIENTdHJpbmcgZnJhbWVIVE1MID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0LmNoYXJh
Y3RlcnMoKSwgdGV4dC5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpOworICAgIG1f
cmVzb3VyY2VzLT5hcHBlbmQoUmVzb3VyY2UodXJsLCBkb2N1bWVudC0+c3VnZ2VzdGVkTUlNRVR5
cGUoKSwgU2hhcmVkQnVmZmVyOjpjcmVhdGUoZnJhbWVIVE1MLmRhdGEoKSwgZnJhbWVIVE1MLmxl
bmd0aCgpKSkpOworICAgIG1fcmVzb3VyY2VVUkxzLmFkZCh1cmwpOworCisgICAgZm9yIChWZWN0
b3I8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbm9kZXMuYmVnaW4oKTsgaXRlciAhPSBub2Rlcy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRlcjsKKyAgICAgICAgaWYg
KCFub2RlLT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAvLyBXZSBoYXZl
IHRvIHByb2Nlc3MgaW4tbGluZSBzdHlsZSBhcyBpdCBtaWdodCBjb250YWluIHNvbWUgcmVzb3Vy
Y2VzICh0eXBpY2FsbHkgYmFja2dyb3VuZCBpbWFnZXMpLgorICAgICAgICByZXRyaWV2ZVJlc291
cmNlc0ZvckNTU0RlY2xhcmF0aW9uKGVsZW1lbnQtPnN0eWxlKCkpOworCisgICAgICAgIGlmIChl
bGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSkgeworICAgICAgICAgICAgSFRN
TEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVu
dCo+KGVsZW1lbnQpOworICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVV
UkwoaW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAg
ICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZElt
YWdlKCk7CisgICAgICAgICAgICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCB1cmwp
OworICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5r
VGFnKSkgeworICAgICAgICAgICAgSFRNTExpbmtFbGVtZW50KiBsaW5rRWxlbWVudCA9IHN0YXRp
Y19jYXN0PEhUTUxMaW5rRWxlbWVudCo+KGVsZW1lbnQpOworICAgICAgICAgICAgU3R5bGVTaGVl
dCogc2hlZXQgPSBsaW5rRWxlbWVudC0+c2hlZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAm
JiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsKKyAgICAgICAgICAgICAgICBLVVJMIHVybCA9
IGRvY3VtZW50LT5jb21wbGV0ZVVSTChsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6aHJlZkF0dHIpKTsKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHlsZVNoZWV0KHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksIHVybCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykp
IHsKKyAgICAgICAgICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19j
YXN0PEhUTUxTdHlsZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQq
IHNoZWV0ID0gc3R5bGVFbGVtZW50LT5zaGVldCgpOworICAgICAgICAgICAgaWYgKHNoZWV0ICYm
IHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NT
dHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksIEtVUkwoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKEZyYW1lKiBjaGlsZEZyYW1lID0gZnJhbWUtPnRy
ZWUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZEZyYW1lOyBjaGlsZEZyYW1lID0gY2hpbGRGcmFtZS0+
dHJlZSgpLT5uZXh0U2libGluZygpKQorICAgICAgICBzZXJpYWxpemVGcmFtZShjaGlsZEZyYW1l
KTsKK30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplQ1NTU3R5bGVTaGVldChDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgU3RyaW5nQnVp
bGRlciBjc3NUZXh0OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHN0eWxlU2hlZXQtPml0
ZW0oaSk7CisgICAgICAgIFN0cmluZyBpdGVtVGV4dCA9IGl0ZW0tPmNzc1RleHQoKTsKKyAgICAg
ICAgaWYgKCFpdGVtVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNzc1RleHQuYXBwZW5k
KGl0ZW1UZXh0KTsKKyAgICAgICAgICAgIGlmIChpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAx
KQorICAgICAgICAgICAgICAgIGNzc1RleHQuYXBwZW5kKCJcblxuIik7CisgICAgICAgIH0KKyAg
ICAgICAgLy8gU29tZSBydWxlcyBoYXZlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlbSB0
aGF0IHdlIG5lZWQgdG8gcmV0cmlldmUuCisgICAgICAgIGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUo
KSkgeworICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0UnVsZSA9IHN0YXRpY19jYXN0
PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgIEtVUkwgaW1wb3J0VVJMID0gc3R5
bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaW1wb3J0UnVsZS0+aHJlZigpKTsKKyAg
ICAgICAgICAgIGlmIChtX3Jlc291cmNlVVJMcy5jb250YWlucyhpbXBvcnRVUkwpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChp
bXBvcnRSdWxlLT5zdHlsZVNoZWV0KCksIGltcG9ydFVSTCk7CisgICAgICAgIH0gZWxzZSBpZiAo
aXRlbS0+aXNGb250RmFjZVJ1bGUoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBmb250IGZhY2UgcnVsZS4gSXQgaXMgbm90IGNsZWFyIHRvIG1lIGF0IHRoaXMgcG9p
bnQgaWYgdGhlIGFjdHVhbCBvdGYvZW90IGZpbGUgY2FuCisgICAgICAgICAgICAvLyBiZSByZXRy
aWV2ZWQgZnJvbSB0aGUgQ1NTRm9udEZhY2VSdWxlIG9iamVjdC4KKyAgICAgICAgfSBlbHNlIGlm
IChpdGVtLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JD
U1NSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKKyAgICB9CisKKyAgICBp
ZiAodXJsLmlzVmFsaWQoKSAmJiAhbV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgeworICAg
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGNoZWNrIHdoZXRoZXIgYSBjaGFyc2V0IGhhcyBiZWVu
IHNwZWNpZmllZCBhbmQgaWYgbm9uZSB3YXMgZm91bmQgYWRkIG9uZS4KKyAgICAgICAgVGV4dEVu
Y29kaW5nIHRleHRFbmNvZGluZyA9IFRleHRFbmNvZGluZyhzdHlsZVNoZWV0LT5jaGFyc2V0KCkp
OworICAgICAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7CisgICAgICAgIFN0cmlu
ZyB0ZXh0U3RyaW5nID0gY3NzVGV4dC50b1N0cmluZygpOworICAgICAgICBDU3RyaW5nIHRleHQg
PSB0ZXh0RW5jb2RpbmcuZW5jb2RlKHRleHRTdHJpbmcuY2hhcmFjdGVycygpLCB0ZXh0U3RyaW5n
Lmxlbmd0aCgpLCBFbnRpdGllc0ZvclVuZW5jb2RhYmxlcyk7CisgICAgICAgIG1fcmVzb3VyY2Vz
LT5hcHBlbmQoUmVzb3VyY2UodXJsLCBTdHJpbmcoInRleHQvY3NzIiksIFNoYXJlZEJ1ZmZlcjo6
Y3JlYXRlKHRleHQuZGF0YSgpLCB0ZXh0Lmxlbmd0aCgpKSkpOworICAgICAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKKyAgICB9Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OmFkZEltYWdl
VG9SZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
aWYgKCF1cmwuaXNWYWxpZCgpIHx8IG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmICghaW1hZ2UgfHwgaW1hZ2UtPmltYWdlKCkgPT0gSW1hZ2U6
Om51bGxJbWFnZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbWltZVR5cGUgPSBp
bWFnZS0+cmVzcG9uc2UoKS5taW1lVHlwZSgpOworICAgIG1fcmVzb3VyY2VzLT5hcHBlbmQoUmVz
b3VyY2UodXJsLCBtaW1lVHlwZSwgaW1hZ2UtPmltYWdlKCktPmRhdGEoKSkpOworICAgIG1fcmVz
b3VyY2VVUkxzLmFkZCh1cmwpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJl
c291cmNlc0ZvckNTU1J1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAgIHJldHJpZXZlUmVz
b3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24ocnVsZS0+c3R5bGUoKSk7Cit9CisKK3ZvaWQgUGFnZVNl
cmlhbGl6ZXI6OnJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGVEZWNsYXJhdGlvbikKK3sKKyAgICBpZiAoIXN0eWxlRGVjbGFyYXRpb24p
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVl
dCgpLT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTU3R5bGVT
aGVldCogY3NzU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZURl
Y2xhcmF0aW9uLT5zdHlsZXNoZWV0KCkpOworCisgICAgLy8gVGhlIGJhY2tncm91bmQtaW1hZ2Ug
YW5kIGxpc3Qtc3R5bGUtaW1hZ2UgKGZvciB1bCBvciBvbCkgYXJlIHRoZSBDU1MgcHJvcGVydGll
cworICAgIC8vIHRoYXQgbWFrZSB1c2Ugb2YgaW1hZ2VzLiBXZSBpdGVyYXRlIHRvIG1ha2Ugc3Vy
ZSB3ZSBpbmNsdWRlIGFueSBvdGhlcgorICAgIC8vIGltYWdlIHByb3BlcnRpZXMgdGhlcmUgbWln
aHQgYmUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlRGVjbGFyYXRpb24tPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgLy8gRklYTUU6IEl0J3Mga2luZCBvZiByaWRpY3Vsb3Vz
IHRvIGdldCB0aGUgcHJvcGVydHkgbmFtZSBhbmQgdGhlbiBnZXQKKyAgICAgICAgLy8gdGhlIHZh
bHVlIG91dCBvZiB0aGUgbmFtZS4gSWRlYWxseSB3ZSB3b3VsZCBnZXQgdGhlIHZhbHVlIG91dCBv
ZiB0aGUKKyAgICAgICAgLy8gcHJvcGVydHkgSUQsIGJ1dCBDU1NTdHlsZURlY2xhcmF0aW9uIG9u
bHkgZ2l2ZXMgYWNjZXNzIHRvIHByb3BlcnR5CisgICAgICAgIC8vIG5hbWVzLCBub3QgSURzLgor
ICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGNzc1ZhbHVlID0gc3R5bGVEZWNsYXJhdGlvbi0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShzdHlsZURlY2xhcmF0aW9uLT5pdGVtKGkpKTsKKyAgICAgICAgaWYg
KCFjc3NWYWx1ZS0+aXNJbWFnZVZhbHVlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBDU1NJbWFnZVZhbHVlKiBpbWFnZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTSW1hZ2VWYWx1
ZSo+KGNzc1ZhbHVlLmdldCgpKTsKKyAgICAgICAgU3R5bGVJbWFnZSogc3R5bGVJbWFnZSA9IGlt
YWdlVmFsdWUtPmNhY2hlZE9yUGVuZGluZ0ltYWdlKCk7CisgICAgICAgIC8vIE5vbiBjYWNoZWQt
aW1hZ2VzIGFyZSBqdXN0IHBsYWNlLWhvbGRlcnMgYW5kIGRvIG5vdCBjb250YWluIGRhdGEuCisg
ICAgICAgIGlmICghc3R5bGVJbWFnZSB8fCAhc3R5bGVJbWFnZS0+aXNDYWNoZWRJbWFnZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gc3Rh
dGljX2Nhc3Q8U3R5bGVDYWNoZWRJbWFnZSo+KHN0eWxlSW1hZ2UpLT5jYWNoZWRJbWFnZSgpOwor
CisgICAgICAgIEtVUkwgdXJsID0gY3NzU3R5bGVTaGVldC0+ZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwoaW1hZ2UtPnVybCgpKTsKKyAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhpbWFnZSwgdXJs
KTsKKyAgICB9Cit9CisKK0tVUkwgUGFnZVNlcmlhbGl6ZXI6OnVybEZvckJsYW5rRnJhbWUoRnJh
bWUqIGZyYW1lKQoreworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPjo6aXRlcmF0b3IgaXRlciA9
IG1fYmxhbmtGcmFtZVVSTHMuZmluZChmcmFtZSk7CisgICAgaWYgKGl0ZXIgIT0gbV9ibGFua0Zy
YW1lVVJMcy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGl0ZXItPnNlY29uZDsKKyAgICBTdHJpbmcg
dXJsID0gbWFrZVN0cmluZygid3ljaXd5ZzovL2ZyYW1lLyIsIFN0cmluZzo6bnVtYmVyKG1fYmxh
bmtGcmFtZUNvdW50ZXIrKykpOworICAgIEtVUkwgZmFrZVVSTChQYXJzZWRVUkxTdHJpbmcsIHVy
bCk7CisgICAgbV9ibGFua0ZyYW1lVVJMcy5hZGQoZnJhbWUsIGZha2VVUkwpOworCisgICAgcmV0
dXJuIGZha2VVUkw7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44ZTU3NTQ2MmE0NTNhYTdkMzdkNTU3NzA2MTUyNDQ3YjBmYzljY2YzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5oCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW8gdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBQYWdlU2VyaWFsaXplcl9oCisjZGVmaW5lIFBhZ2VTZXJpYWxpemVy
X2gKKworI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJLVVJMSGFzaC5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENhY2hlZEltYWdlOworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsK
K2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBGcmFtZTsK
K2NsYXNzIFBhZ2U7CisKKy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBzZXJpYWxpemUgYSBwYWdl
IGNvbnRlbnRzIGJhY2sgdG8gdGV4dCAodHlwaWNhbGx5IEhUTUwpLgorLy8gSXQgc2VyaWFsaXpl
cyBhbGwgdGhlIHBhZ2UgZnJhbWVzIGFuZCByZXRyaWV2ZXMgcmVzb3VyY2VzIHN1Y2ggYXMgaW1h
Z2VzIGFuZCBDU1Mgc3R5bGVzaGVldHMuCitjbGFzcyBQYWdlU2VyaWFsaXplciB7CitwdWJsaWM6
CisgICAgc3RydWN0IFJlc291cmNlIHsKKyAgICAgICAgS1VSTCB1cmw7CisgICAgICAgIFN0cmlu
ZyBtaW1lVHlwZTsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YTsKKyAgICAgICAg
UmVzb3VyY2UoKTsKKyAgICAgICAgUmVzb3VyY2UoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYg
bWltZVR5cGUsIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhKTsKKyAgICB9OworCisgICAg
ZXhwbGljaXQgUGFnZVNlcmlhbGl6ZXIoVmVjdG9yPFJlc291cmNlPiopOworCisgICAgLy8gSW5p
dGlhdGVzIHRoZSBzZXJpYWxpemF0aW9uIG9mIHRoZSBmcmFtZSdzIHBhZ2UuIEFsbCBzZXJpYWxp
emVkIGNvbnRlbnQgYW5kIHJldHJpZXZlZAorICAgIC8vIHJlc291cmNlcyBhcmUgYWRkZWQgdG8g
dGhlIFZlY3RvciBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBUaGUgZmlyc3QgcmVzb3VyY2Ug
aW4gdGhhdAorICAgIC8vIHZlY3RvciBpcyB0aGUgdG9wIGZyYW1lIHNlcmlhbGl6ZWQgY29udGVu
dC4KKyAgICB2b2lkIHNlcmlhbGl6ZShQYWdlKik7CisKKyAgICBLVVJMIHVybEZvckJsYW5rRnJh
bWUoRnJhbWUqKTsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNlcmlhbGl6ZUZyYW1lKEZyYW1lKik7
CisKKyAgICAvLyBTZXJpYWxpemVzIHRoZSBzdHlsZXNoZWV0IGJhY2sgdG8gdGV4dCBhbmQgYWRk
cyBpdCB0byB0aGUgcmVzb3VyY2VzIGlmIFVSTCBpcyBub3QtZW1wdHkuCisgICAgLy8gSXQgYWxz
byBhZGRzIGFueSByZXNvdXJjZXMgaW5jbHVkZWQgaW4gdGhhdCBzdHlsZXNoZWV0IChpbmNsdWRp
bmcgYW55IGltcG9ydGVkIHN0eWxlc2hlZXRzIGFuZCB0aGVpciBvd24gcmVzb3VyY2VzKS4KKyAg
ICB2b2lkIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IEtVUkwm
KTsKKworICAgIHZvaWQgYWRkSW1hZ2VUb1Jlc291cmNlcyhDYWNoZWRJbWFnZSosIGNvbnN0IEtV
UkwmKTsKKyAgICB2b2lkIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTRGVjbGFyYXRpb24oQ1NTU3R5
bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENT
U1N0eWxlUnVsZSopOworCisgICAgVmVjdG9yPFJlc291cmNlPiogbV9yZXNvdXJjZXM7CisgICAg
TGlzdEhhc2hTZXQ8S1VSTD4gbV9yZXNvdXJjZVVSTHM7CisgICAgSGFzaE1hcDxGcmFtZSosIEtV
Ukw+IG1fYmxhbmtGcmFtZVVSTHM7CisgICAgdW5zaWduZWQgbV9ibGFua0ZyYW1lQ291bnRlcjsK
K307CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDE3ODU1M2Y1
NzdkNmEyYjBlMTU2NTc0YzA4YWYzZmRlZGU1ZGQ5OGQuLmNjMGQ1NjljZTllNDY1NWM0YjRiZjdh
YWFiYjVjNDQ0MTVhZGVlYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzQgQEAKKzIwMTEtMDQtMjUgIEpheSBDaXZlbGxpICA8amNpdmVsbGlAY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCisKKyAgICAgICAgSW50cm9kdWNpbmcg
YSBuZXcgQVBJIHRvIHNlcmlhbGl6ZSBhIFdlYlZpZXcgYmFjayB0byBIVE1MLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg5NDcKKworICAgICAgICAq
IFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmg6CisgICAg
ICAgICogc3JjL1dlYlBhZ2VTZXJpYWxpemVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZSk6CisgICAgICAgICogdGVzdHMvV2ViUGFnZU5ld1Nlcmlh
bGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXpl
cjogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFt
ZXMuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibHVl
X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2Nzc190ZXN0X3BhZ2UuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdl
c2VyaWFsaXplci9ncmVlbl9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3M6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3M6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMuY3Nz
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL29sLWRvdC5wbmc6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvb3JhbmdlX2JhY2tn
cm91bmQucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3B1
cnBsZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2Vy
aWFsaXplci9yZWRfYmFja2dyb3VuZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL3VsLWRvdC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2Rh
dGEvcGFnZXNlcmlhbGl6ZXIveWVsbG93X2JhY2tncm91bmQucG5nOiBBZGRlZC4KKwogMjAxMS0w
NC0yNiAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg0OTUxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggYjA1Mjk4MWZkM2Q3YmYxMDQzMWFjOWQyOTlkYzBhMDU0MzFkMjk0OC4uN2Qz
YTZiOTU3NjJmMmE4MjRiYjUyZmJjNGU1OThkN2M5MzNjNjM1OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC03Nyw2ICs3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9Qb3B1cE1lbnVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmFuc3Bh
cmVuY3lXaW5UZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9VbmlzY3JpYmVI
ZWxwZXJUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlTmV3U2Vy
aWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJp
YWxpemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICB9XSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVy
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oCmlu
ZGV4IGI0ZDU3MTUzNWFhYjhmYzIyZWUyMDY2ZTJjZTBlMWJhYWY5ZDg2ZWQuLmExMDhhNjJjMDZl
NDNjYWM4YTExZmQzNTRjYzI0NWI2N2RmNTA4YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJpYWxpemVyLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaApAQCAtMzEsMTQgKzMxLDE0IEBACiAj
aWZuZGVmIFdlYlBhZ2VTZXJpYWxpemVyX2gKICNkZWZpbmUgV2ViUGFnZVNlcmlhbGl6ZXJfaAog
CisjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1
ZGUgIldlYlVSTC5oIgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLWNsYXNzIFdlYkNTdHJpbmc7CiBj
bGFzcyBXZWJGcmFtZTsKIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50OwogY2xhc3MgV2Vi
U3RyaW5nOwotY2xhc3MgV2ViVVJMOwogY2xhc3MgV2ViVmlldzsKIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAKQEAgLTQ2LDYgKzQ2LDIzIEBAIHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBXZWJWZWN0b3I7CiAvLyB3aGljaCBjb250YWluIGFsbCByZXNvdXJjZSBs
aW5rcyB0aGF0IGhhdmUgbG9jYWwgY29weS4KIGNsYXNzIFdlYlBhZ2VTZXJpYWxpemVyIHsKIHB1
YmxpYzoKKyAgICBzdHJ1Y3QgUmVzb3VyY2UgeworICAgICAgICBXZWJVUkwgdXJsOworICAgICAg
ICBXZWJDU3RyaW5nIG1pbWVUeXBlOworICAgICAgICBXZWJDU3RyaW5nIGRhdGE7CisgICAgfTsK
KworICAgIC8vIFNlcmlhbGl6ZXMgYWxsIHRoZSBmcmFtZXMgZnJvbSB0aGUgV2ViVmlldywgcmV0
cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAvLyByZXNvdXJjZXMgKHN1Y2ggYXMgaW1hZ2VzIGFuZCBD
U1MpIGFuZCBhZGRzIHRoZW0gdG8gdGhlIHBhc3NlZCB2ZWN0b3IuCisgICAgLy8gVGhlIGZpcnN0
IHJlc291cmNlIGluIHRoYXQgdmVjdG9yIGlzIHRoZSB0b3AgZnJhbWUgY29udGVudHMuCisgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgYWxzbyBzdHJpcHMtb3V0IGFueSBzY3JpcHQgdGFnIG9yIGxpbmsg
dG8gSmF2YVNjcmlwdC4KKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZShXZWJW
aWV3KiwgV2ViVmVjdG9yPFJlc291cmNlPiopOworCisgICAgLy8gSU1QT1JUQU5UOgorICAgIC8v
IFRoZSBBUEkgYmVsb3cgaXMgYW4gb2xkZXIgaW1wbGVtZW50YXRpb24gb2YgYSBwYWdlc2VyaWFs
aXphdGlvbiB0aGF0CisgICAgLy8gd2lsbCBiZSByZW1vdmVkIHNvb24uCisKKwogICAgIC8vIFRo
aXMgZnVuY3Rpb24gd2lsbCBmaW5kIG91dCBhbGwgZnJhbWVzIGFuZCBzZXJpYWxpemUgdGhlbSB0
byBIVE1MIGRhdGEuCiAgICAgLy8gV2UgaGF2ZSBhIGRhdGEgYnVmZmVyIHRvIHRlbXBvcmFyeSBz
YXZpbmcgZ2VuZXJhdGVkIGh0bWwgZGF0YS4gV2Ugd2lsbAogICAgIC8vIHNlcXVlbnRpYWxseSBj
YWxsIFdlYlBhZ2VTZXJpYXpsaWVyQ2xpZW50IG9uY2UgdGhlIGRhdGEgYnVmZmVyIGlzIGZ1bGwu
CkBAIC02NCw5ICs4MSw5IEBAIHB1YmxpYzoKICAgICAvLyBzYXZlZCBsaW5rcywgd2hpY2ggbWF0
Y2hlZCB3aXRoIHZlY3RvcjpsaW5rcyBvbmUgYnkgb25lLgogICAgIC8vIFRoZSBwYXJhbWV0ZXIg
bG9jYWxEaXJlY3RvcnlOYW1lIGlzIHJlbGF0aXZlIHBhdGggb2YgZGlyZWN0b3J5IHdoaWNoCiAg
ICAgLy8gY29udGFpbiBhbGwgc2F2ZWQgYXV4aWxpYXJ5IGZpbGVzIGluY2x1ZGVkIGFsbCBzdWIg
ZnJhbWVzIGFuZCByZXNvdXJjZXMuCi0gICAgV0VCS0lUX0FQSSBzdGF0aWMgYm9vbCBzZXJpYWxp
emUoV2ViRnJhbWUqIGZyYW1lLAorICAgIFdFQktJVF9BUEkgc3RhdGljIGJvb2wgc2VyaWFsaXpl
KFdlYkZyYW1lKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHJl
Y3Vyc2l2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2Vy
aWFsaXplckNsaWVudCogY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYlBhZ2VTZXJpYWxpemVyQ2xpZW50KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBXZWJWZWN0b3I8V2ViVVJMPiYgbGlua3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGxvY2Fs
UGF0aHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViU3Ry
aW5nJiBsb2NhbERpcmVjdG9yeU5hbWUpOwpAQCAtODUsNyArMTAyLDcgQEAgcHVibGljOgogICAg
IC8vIEdlbmVyYXRlIHRoZSBNRVRBIGZvciBjaGFyc2V0IGRlY2xhcmF0aW9uLgogICAgIFdFQktJ
VF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1ldGFDaGFyc2V0RGVjbGFyYXRpb24oY29u
c3QgV2ViU3RyaW5nJiBjaGFyc2V0KTsKICAgICAvLyBHZW5lcmF0ZSB0aGUgTU9UVyBkZWNsYXJh
dGlvbi4KLSAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2VuZXJhdGVNYXJrT2ZUaGVX
ZWJEZWNsYXJhdGlvbihjb25zdCBXZWJVUkwmIHVybCk7CisgICAgV0VCS0lUX0FQSSBzdGF0aWMg
V2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJMJik7
CiAgICAgLy8gR2VuZXJhdGUgdGhlIGRlZmF1bHQgYmFzZSB0YWcgZGVjbGFyYXRpb24uCiAgICAg
V0VCS0lUX0FQSSBzdGF0aWMgV2ViU3RyaW5nIGdlbmVyYXRlQmFzZVRhZ0RlY2xhcmF0aW9uKGNv
bnN0IFdlYlN0cmluZyYgYmFzZVRhcmdldCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IGM4Yzc1Mjk3ZjQyZDc4Yjg5ZmU3
MGRkOWY5NDAwMTMzN2Y5ZmNlOTkuLjIzMmUyMTE2MDE1OWM4ODZkOGU0ZWQxNDAwODRjNmI1Y2Y3
MzFlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFs
aXplci5jcHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBh
Z2VTZXJpYWxpemVyLmgiCiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAKICNpbmNsdWRlICJXZWJDU3Ry
aW5nLmgiCkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiV2ViVVJMLmgiCiAjaW5jbHVkZSAi
V2ViVmVjdG9yLmgiCiAjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdJbXBs
LmgiCiAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgogCkBAIC0xNzks
NiArMTgxLDI1IEBAIHZvaWQgcmV0cmlldmVSZXNvdXJjZXNGb3JGcmFtZShGcmFtZSogZnJhbWUs
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCit2b2lkIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emUoV2ViVmlldyogdmlldywgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4q
IHJlc291cmNlc1BhcmFtKQoreworICAgIFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+
IHJlc291cmNlczsKKyAgICBQYWdlU2VyaWFsaXplciBzZXJpYWxpemVyKCZyZXNvdXJjZXMpOwor
ICAgIHNlcmlhbGl6ZXIuc2VyaWFsaXplKHN0YXRpY19jYXN0PFdlYlZpZXdJbXBsKj4odmlldykt
PnBhZ2UoKSk7CisKKyAgICBWZWN0b3I8UmVzb3VyY2U+IHJlc3VsdDsKKyAgICBmb3IgKFZlY3Rv
cjxQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gcmVzb3Vy
Y2VzLmJlZ2luKCk7IGl0ZXIgIT0gcmVzb3VyY2VzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
UmVzb3VyY2UgcmVzb3VyY2U7CisgICAgICAgIHJlc291cmNlLnVybCA9IGl0ZXItPnVybDsKKyAg
ICAgICAgcmVzb3VyY2UubWltZVR5cGUgPSBpdGVyLT5taW1lVHlwZS5hc2NpaSgpOworICAgICAg
ICAvLyBGSVhNRTogd2UgYXJlIGNvcHlpbmcgYWxsIHRoZSByZXNvdXJjZSBkYXRhIGhlcmUuIElk
ZWFseSB3ZSB3b3VsZCBoYXZlIGEgV2ViU2hhcmVkRGF0YSgpLgorICAgICAgICByZXNvdXJjZS5k
YXRhID0gV2ViQ1N0cmluZyhpdGVyLT5kYXRhLT5kYXRhKCksIGl0ZXItPmRhdGEtPnNpemUoKSk7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVzb3VyY2UpOworICAgIH0KKworICAgICpyZXNvdXJj
ZXNQYXJhbSA9IHJlc3VsdDsgICAgICAgICAKK30KKwogYm9vbCBXZWJQYWdlU2VyaWFsaXplcjo6
c2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJQYWdlU2VyaWFsaXplckNsaWVudCogY2xpZW50LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI0YjBkYWNlYmYzMDJmN2M2NGMwNjRmOWQzYWE4NzRlZmYyNDZmMjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVy
VGVzdC5jcHAKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2Vi
UGFnZVNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJXZWJTY3JpcHRTb3VyY2UuaCIKKyNpbmNsdWRl
ICJXZWJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorI2luY2x1ZGUgIldlYlVS
TC5oIgorI2luY2x1ZGUgIldlYlVSTFJlcXVlc3QuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXNwb25z
ZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKworI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvZ3Vy
bC5oPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQv
d2Via2l0X3N1cHBvcnQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgVGVzdFdlYkZyYW1lQ2xpZW50IDogcHVibGljIFdlYkZyYW1lQ2xpZW50IHsK
K3B1YmxpYzoKKyAgICBUZXN0V2ViRnJhbWVDbGllbnQoKSA6IG1fc2NyaXB0RW5hYmxlZChmYWxz
ZSkgeyB9CisgICAgdmlydHVhbCBib29sIGFsbG93U2NyaXB0KFdlYkZyYW1lKiwgYm9vbCAvKiBl
bmFibGVkUGVyU2V0dGluZ3MgKi8pIHsgcmV0dXJuIG1fc2NyaXB0RW5hYmxlZDsgfQorICAgIGJv
b2wgbV9zY3JpcHRFbmFibGVkOworfTsKKworY2xhc3MgV2ViUGFnZU5ld1NlcmlhbGl6ZVRlc3Qg
OiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6CisgICAgV2ViUGFnZU5ld1NlcmlhbGl6
ZVRlc3QoKQorICAgICAgICA6IG1faHRtbE1pbWVUeXBlKFdlYlN0cmluZzo6ZnJvbVVURjgoInRl
eHQvaHRtbCIpKQorICAgICAgICAsIG1feGh0bWxNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4
KCJhcHBsaWNhdGlvbi94aHRtbCt4bWwiKSkKKyAgICAgICAgLCBtX2Nzc01pbWVUeXBlKFdlYlN0
cmluZzo6ZnJvbVVURjgoInRleHQvY3NzIikpCisgICAgICAgICwgbV9wbmdNaW1lVHlwZShXZWJT
dHJpbmc6OmZyb21VVEY4KCJpbWFnZS9wbmciKSkKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIFNldFVwKCkKKyAgICB7CisgICAgICAgIC8vIENyZWF0ZSBhbmQg
aW5pdGlhbGl6ZSB0aGUgV2ViVmlldy4KKyAgICAgICAgbV93ZWJWaWV3ID0gV2ViVmlldzo6Y3Jl
YXRlKDApOworCisgICAgICAgIC8vIFdlIHdhbnQgdGhlIGltYWdlcyB0byBsb2FkLgorICAgICAg
ICBXZWJTZXR0aW5ncyogc2V0dGluZ3MgPSBtX3dlYlZpZXctPnNldHRpbmdzKCk7CisgICAgICAg
IHNldHRpbmdzLT5zZXRJbWFnZXNFbmFibGVkKHRydWUpOworICAgICAgICBzZXR0aW5ncy0+c2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworCisgICAgICAgIG1fd2ViVmlldy0+aW5p
dGlhbGl6ZU1haW5GcmFtZSgmbV93ZWJGcmFtZUNsaWVudCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIFRlYXJEb3duKCkKKyAgICB7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpVbnJlZ2lz
dGVyQWxsTW9ja2VkVVJMcygpOworICAgICAgICBtX3dlYlZpZXctPmNsb3NlKCk7CisgICAgfQor
CisgICAgdm9pZCByZWdpc3Rlck1vY2tlZFVSTExvYWQoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0
IFdlYlN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFdlYlN0cmluZyYgbWltZVR5cGUpCisgICAgewor
ICAgICAgICBXZWJVUkxSZXNwb25zZSByZXNwb25zZTsKKyAgICAgICAgcmVzcG9uc2UuaW5pdGlh
bGl6ZSgpOworICAgICAgICByZXNwb25zZS5zZXRNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgICAg
IHJlc3BvbnNlLnNldEhUVFBTdGF0dXNDb2RlKDIwMCk7CisgICAgICAgIHN0ZDo6c3RyaW5nIGZp
bGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJvb3REaXIoKS51dGY4KCk7CisgICAg
ICAgIGZpbGVQYXRoLmFwcGVuZCgiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci8iKTsKKyAgICAgICAgZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lLnV0Zjgo
KSk7CisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSZWdpc3Rlck1vY2tlZFVSTCh1cmwsIHJlc3Bv
bnNlLCBXZWJTdHJpbmc6OmZyb21VVEY4KGZpbGVQYXRoKSk7CisgICAgfQorCisgICAgdm9pZCBs
b2FkVVJMSW5Ub3BGcmFtZShjb25zdCBHVVJMJiB1cmwpCisgICAgeworICAgICAgICBXZWJVUkxS
ZXF1ZXN0IHVybFJlcXVlc3Q7CisgICAgICAgIHVybFJlcXVlc3QuaW5pdGlhbGl6ZSgpOworICAg
ICAgICB1cmxSZXF1ZXN0LnNldFVSTChXZWJVUkwodXJsKSk7CisgICAgICAgIG1fd2ViVmlldy0+
bWFpbkZyYW1lKCktPmxvYWRSZXF1ZXN0KHVybFJlcXVlc3QpOworICAgICAgICAvLyBNYWtlIHN1
cmUgYW55IHBlbmRpbmcgcmVxdWVzdCBnZXQgc2VydmVkLgorICAgICAgICB3ZWJraXRfc3VwcG9y
dDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgICAgICAvLyBTb21lIHJl
cXVlc3RzIGdldCBkZWxheWVkLCBydW4gdGhlIHRpbWVyLgorICAgICAgICB3ZWJraXRfc3VwcG9y
dDo6UnVuQWxsUGVuZGluZ01lc3NhZ2VzKCk7CisgICAgICAgIC8vIFNlcnZlciB0aGUgZGVsYXll
ZCByZXNvdXJjZXMuCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpTZXJ2ZUFzeW5jaHJvbm91c01v
Y2tlZFJlcXVlc3RzKCk7CisgICAgfQorCisgICAgdm9pZCBlbmFibGVKUygpCisgICAgeworICAg
ICAgICBtX3dlYkZyYW1lQ2xpZW50Lm1fc2NyaXB0RW5hYmxlZCA9IHRydWU7CisgICAgfQorCisg
ICAgdm9pZCBydW5PbkxvYWQoKQorICAgIHsKKyAgICAgICAgbV93ZWJWaWV3LT5tYWluRnJhbWUo
KS0+ZXhlY3V0ZVNjcmlwdChXZWJTY3JpcHRTb3VyY2UoV2ViU3RyaW5nOjpmcm9tVVRGOCgib25M
b2FkKCkiKSkpOworICAgIH0KKworICAgIGNvbnN0IFdlYlN0cmluZyYgaHRtbE1pbWVUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9odG1sTWltZVR5cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIHho
dG1sTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3hodG1sTWltZVR5cGU7IH0KKyAgICBjb25z
dCBXZWJTdHJpbmcmIGNzc01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9jc3NNaW1lVHlwZTsg
fQorICAgIGNvbnN0IFdlYlN0cmluZyYgcG5nTWltZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX3Bu
Z01pbWVUeXBlOyB9CisgICAgCisgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VWZWN0b3JDb250YWlu
cyhjb25zdCBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiYgcmVzb3VyY2Vz
LCBjaGFyKiB1cmwsIGNoYXIqIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViVVJMIHdlYlVS
TCA9IFdlYlVSTChHVVJMKHVybCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJl
c291cmNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgY29uc3QgV2ViUGFnZVNlcmlhbGl6
ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1tpXTsKKyAgICAgICAgICAgIGlmIChy
ZXNvdXJjZS51cmwgPT0gd2ViVVJMICYmICFyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSAmJiAhcmVz
b3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKG1pbWVUeXBlKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisKK3ByaXZhdGU6CisgICAgV2ViU3Ry
aW5nIG1faHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX3hodG1sTWltZVR5cGU7CisgICAg
V2ViU3RyaW5nIG1fY3NzTWltZVR5cGU7CisgICAgV2ViU3RyaW5nIG1fcG5nTWltZVR5cGU7Cisg
ICAgVGVzdFdlYkZyYW1lQ2xpZW50IG1fd2ViRnJhbWVDbGllbnQ7Cit9OworCisvLyBUZXN0cyB0
aGF0IGEgcGFnZSB3aXRoIHJlc291cmNlcyBhbmQgc3ViLWZyYW1lIGlzIHJlcG9ydGVkIHdpdGgg
YWxsIGl0cyByZXNvdXJjZXMuCisvLyBGSVhNRTogcmVlbmFibGUgdGhlc2UgdGVzdHMgb25jZSB0
aGUgQ2hyb21pdW0gcGFydCBvZiB0aGUgdGVzdF93ZWJraXRfY2xpZW50IGhhdmUgbGFuZGVkLgor
VEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNBQkxFRF9QYWdlV2l0aEZyYW1lcykK
K3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lcy4KKyAgICBXZWJVUkwgdG9wRnJh
bWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ0b3BfZnJhbWUuaHRtbCIp
LCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6
Ly93d3cudGVzdC5jb20vaWZyYW1lLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1l
Lmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZTIuaHRtbCIpLCBXZWJTdHJpbmc6OmZyb21VVEY4
KCJpZnJhbWUyLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJM
TG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJT
dHJpbmc6OmZyb21VVEY4KCJyZWRfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7Cisg
ICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5f
YmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworCisgICAgbG9hZFVS
TEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxp
emVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxp
emUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlz
RW1wdHkoKSk7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUg
bWFpbi1mcmFtZS4KKyAgICBjb25zdCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291
cmNlID0gcmVzb3VyY2VzWzBdOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJM
KCJodHRwOi8vd3d3LnRlc3QuY29tIikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1l
VHlwZS5jb21wYXJlKFdlYkNTdHJpbmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNF
KHJlc291cmNlLmRhdGEuaXNFbXB0eSgpKTsKKworICAgIEVYUEVDVF9FUSg2LCByZXNvdXJjZXMu
c2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RS
VUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29t
L3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVz
b3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVu
X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJj
ZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNr
Z3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1sIiwg
InRleHQvaHRtbCIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJl
c291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaWZyYW1lMi5odG1sIiwgInRleHQvaHRtbCIp
KTsKK30KKworLy8gVGVzdCB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlLCBhbGwgQ1NTIHJl
c291cmNlcyBhcmUgcmVwb3J0ZWQsIGluY2x1ZGluZyB1cmwoKSdzCisvLyBhbmQgaW1wb3J0cyBh
bmQgbGlua3MuIE5vdGUgdGhhdCB3ZSBkb24ndCB0ZXN0IHRoZSByZXNvdXJjZXMgY29udGVudHMs
IHdlIG9ubHkgbWFrZSBzdXJlCisvLyB0aGV5IGFyZSBhbGwgcmVwb3J0ZWQgd2l0aCB0aGUgcmln
aHQgbWltZSB0eXBlIGFuZCB0aGF0IHRoZXkgY29udGFpbiBzb21lIGRhdGEuCitURVNUX0YoV2Vi
UGFnZU5ld1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX0NTU1Jlc291cmNlcykKK3sKKyAgICAvLyBS
ZWdpc3RlciB0aGUgbW9ja2VkIGZyYW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFt
ZVVSTCA9IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQodG9wRnJhbWVVUkwsIFdlYlN0cmluZzo6ZnJvbVVURjgoImNzc190ZXN0X3BhZ2UuaHRt
bCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vbGlua19zdHlsZXMuY3NzIiksIFdlYlN0cmluZzo6ZnJvbVVURjgo
Imxpbmtfc3R5bGVzLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVS
TExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNz
cyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIpLCBj
c3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJpbXBv
cnRfc3R5bGVzLmNzcyIpLCBjc3NNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExv
YWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9i
YWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJv
bVVURjgoInllbGxvd19iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdp
c3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJncmVlbl9iYWNrZ3JvdW5kLnBuZyIpLCBw
bmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3
dy50ZXN0LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImJs
dWVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcHVycGxlX2JhY2tncm91bmQucG5nIiks
IFdlYlN0cmluZzo6ZnJvbVVURjgoInB1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlw
ZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNv
bS91bC1kb3QucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInVsLWRvdC5wbmciKSwgcG5nTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vb2wtZG90LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJvbC1kb3QucG5nIiksIHBu
Z01pbWVUeXBlKCkpOworCisgICAgZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0
b3BGcmFtZVVSTCk7CisgICAgcnVuT25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNl
cmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNl
cmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJj
ZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJl
IHRoZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYg
cmVzb3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09
IEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNl
Lm1pbWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDEyLCByZXNv
dXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxkIGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQ
RUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRl
c3QuY29tL2xpbmtfc3R5bGVzLmNzcyIsICJ0ZXh0L2NzcyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vaW1w
b3J0X3N0eWxlcy5jc3MiLCAidGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHls
ZV9mcm9tX2xpbmsuY3NzIiwgInRleHQvY3NzIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dy
b3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9y
Q29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3Vu
ZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS95ZWxsb3dfYmFja2dyb3VuZC5w
bmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFp
bnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIs
ICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhy
ZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1h
Z2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9wdXJwbGVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2Uv
cG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2Vz
LCAiaHR0cDovL3d3dy50ZXN0LmNvbS91bC1kb3QucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vb2wtZG90LnBuZyIsICJpbWFnZS9wbmciKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
d2hlbiBzZXJpYWxpemluZyBhIHBhZ2Ugd2l0aCBibGFuayBmcmFtZXMgdGhlc2UgYXJlIHJlcG9y
dGVkIHdpdGggdGhlaXIgcmVzb3VyY2VzLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0
LCBESVNBQkxFRF9CbGFua0ZyYW1lcykKK3sKKyAgICAvLyBSZWdpc3RlciB0aGUgbW9ja2VkIGZy
YW1lIGFuZCBsb2FkIGl0LgorICAgIFdlYlVSTCB0b3BGcmFtZVVSTCA9IEdVUkwoImh0dHA6Ly93
d3cudGVzdC5jb20iKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdl
YlN0cmluZzo6ZnJvbVVURjgoImJsYW5rX2ZyYW1lcy5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRf
YmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2JhY2tncm91bmQucG5n
IiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21V
VEY4KCJvcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5k
LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01p
bWVUeXBlKCkpOworCisgICAgZW5hYmxlSlMoKTsKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BG
cmFtZVVSTCk7CisgICAgcnVuT25Mb2FkKCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlh
bGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZShtX3dlYlZpZXcsICZyZXNvdXJjZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMu
aXNFbXB0eSgpKTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgcmVzb3VyY2Ugc2hvdWxkIGJlIHRo
ZSBtYWluLWZyYW1lLgorICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVz
b3VyY2UgPSByZXNvdXJjZXNbMF07CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2UudXJsID09IEdV
UkwoImh0dHA6Ly93d3cudGVzdC5jb20iKSk7CisgICAgRVhQRUNUX0VRKDAsIHJlc291cmNlLm1p
bWVUeXBlLmNvbXBhcmUoV2ViQ1N0cmluZygidGV4dC9odG1sIikpKTsKKyAgICBFWFBFQ1RfRkFM
U0UocmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkpOworCisgICAgRVhQRUNUX0VRKDcsIHJlc291cmNl
cy5zaXplKCkpOyAvLyBUaGVyZSBzaG91bGQgYmUgbm8gZHVwbGljYXRlcy4KKyAgICBFWFBFQ1Rf
VFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5j
b20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vb3Jh
bmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNv
dXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9i
YWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgLy8gVGhlIGJsYW5rIGZyYW1lcyBz
aG91bGQgaGF2ZSBnb3QgYSBtYWdpYyBVUkwuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0
b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMCIsICJ0ZXh0L2h0bWwiKSk7
CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNp
d3lnOi8vZnJhbWUvMSIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VW
ZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJ3eWNpd3lnOi8vZnJhbWUvMiIsICJ0ZXh0L2h0bWwi
KSk7Cit9CisKK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfU2VyaWFs
aXplWE1MSGFzUmlnaHREZWNsYXJhdGlvbikKK3sKKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3NpbXBsZS54aHRtbCIpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3RyaW5nOjpmcm9tVVRGOCgic2ltcGxlLnhodG1s
IiksIHhodG1sTWltZVR5cGUoKSk7CisKKyAgICBsb2FkVVJMSW5Ub3BGcmFtZSh0b3BGcmFtZVVS
TCk7CisKKyAgICBXZWJWZWN0b3I8V2ViUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJj
ZXM7CisgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShtX3dlYlZpZXcsICZyZXNvdXJj
ZXMpOworICAgIEFTU0VSVF9GQUxTRShyZXNvdXJjZXMuaXNFbXB0eSgpKTsKKyAgICAKKyAgICAv
LyBXZSBleHBlY3Qgb25seSBvbmUgcmVzb3VyY2UsIHRoZSBYTUwuCisgICAgQVNTRVJUX0VRKDEs
IHJlc291cmNlcy5zaXplKCkpOworICAgIHN0ZDo6c3RyaW5nIHhtbCA9IHJlc291cmNlc1swXS5k
YXRhOworCisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgb25lIGFuZCBvbmx5IG9uZSBpbnN0YW5jZSBv
ZiB0aGUgWE1MIGRlY2xhcmF0aW9uLgorICAgIHNpemVfdCBwb3MgPSB4bWwuZmluZCgiPD94bWwg
dmVyc2lvbj0iKTsKKyAgICBBU1NFUlRfVFJVRShwb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOwor
CisgICAgcG9zID0geG1sLmZpbmQoIjw/eG1sIHZlcnNpb249IiwgcG9zICsgMSk7CisgICAgQVNT
RVJUX1RSVUUocG9zID09IHN0ZDo6c3RyaW5nOjpucG9zKTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2JsYW5rX2Zy
YW1lcy5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2JsYW5rX2ZyYW1lcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZkZmIyMDQ5OWM0MzI2M2NiNWMyNDZm
ZTdlMTkyNTQ0MmNkNzE0MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWwKQEAgLTAsMCAr
MSwzNyBAQAorPGh0bWw+CisKKzxzY3JpcHQ+CisgIGZ1bmN0aW9uIG9ubG9hZCgpIHsKKyAgICB2
YXIgZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICB2YXIgZGl2
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MSIpOworICAgIGRpdi5hcHBlbmRDaGls
ZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwgKz0K
KyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J2JsdWVfYmFja2dyb3VuZC5w
bmcnLj48YnI+PGI+U29tZSBtb3JlIHRleHQ8L2I+IgorCisgICAgZnJhbWUgPSBkb2N1bWVudC5j
cmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKKyAgICBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgibXlEaXYyIik7CisgICAgZGl2LmFwcGVuZENoaWxkKGZyYW1lKTsKKworICAgIGZyYW1lLmNv
bnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCArPQorICAgICAgIlNvbWUgdGV4dDxicj5BbiBp
bWFnZSA8aW1nIHNyYz0ncmVkX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0
PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MyIpOworICAgIGRpdi5hcHBl
bmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J29yYW5nZV9iYWNr
Z3JvdW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgfQorICAKKzwvc2Ny
aXB0PgorCis8Ym9keSBvbmxvYWQ9Im9ubG9hZCgpIj4KKyAgVGhpcyBwYWdlIGNyZWF0ZXMgZW1w
dHkgaWZyYW1lcyBhbmQgYWRkcyBjb250ZW50IHRvIHRoZW0gZHluYW1pY2FsbHkuPGJyPjxicj4K
KyAgPGRpdiBpZD0ibXlEaXYxIj48L2Rpdj4KKyAgPGRpdiBpZD0ibXlEaXYyIj48L2Rpdj4KKyAg
PGRpdiBpZD0ibXlEaXYzIj48L2Rpdj4KKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2Nzc190ZXN0
X3BhZ2UuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9jc3NfdGVzdF9wYWdlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjQ2MzdmMGYwMjJkNzU5YzBhZGM5
ZDIwMWJjZjQzMTYxNDZiZDA0NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwKQEAgLTAs
MCArMSwxMTIgQEAKKzxodG1sPgorCis8IS0tIFRoaXMgcGFnZSBpcyB1c2VkIHRvIHRlc3QgdGhh
dCBDU1MgcmVzb3VyY2VzIGFyZSByZXRyaWV2ZWQgY29ycmVjdGx5IGJ5IHRoZQorICAgICBXZWJQ
YWdlU2VyaWFsaXplcjo6Z2VuZXJhdGVTbmFwc2hvdCBtZXRob2QKKy0tPgorCis8aGVhZD4KKwor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0ibGlua19zdHlsZXMu
Y3NzIiAvPgorCis8c3R5bGU+CitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlcy5jc3MnKTsKKwor
QGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBDaHVua2ZpdmU7CisgIHNyYzogdXJsKCdDaHVu
a2ZpdmUub3RmJyk7CisgIHNyYzogdXJsKCdDaHVua2ZpdmUtd2ViZm9udC5lb3QpIGZvcm1hdCgn
ZW90Jyk7Cit9CisKKyNjaHVua2ZpdmVEaXYgeworICBmb250LWZhbWlseTogQ2h1bmtmaXZlLCBz
YW5zLXNlcmlmOworfQorPC9zdHlsZT4KKworPHN0eWxlPgorI2RpdkJsdWUgeworICBiYWNrZ3Jv
dW5kLWltYWdlOnVybCgnYmx1ZV9iYWNrZ3JvdW5kLnBuZycpOworfQorCit1bCB7CisgIGxpc3Qt
c3R5bGUtaW1hZ2U6IHVybCgndWwtZG90LnBuZycpOworfQorCitvbCB7CisgIGxpc3Qtc3R5bGUt
aW1hZ2U6IHVybCgnb2wtZG90LnBuZycpOworfQorCis8L3N0eWxlPgorCis8c2NyaXB0PgorLy8g
RHluYW1pY2FsbHkgY3JlYXRlcyBhIENTUyBzdHlsZS4KK2Z1bmN0aW9uIG9uTG9hZCgpIHsKKyAg
dmFyIHN0eWxlVGV4dCA9ICIjZGl2UHVycGxlIHtiYWNrZ3JvdW5kLWltYWdlOnVybCgncHVycGxl
X2JhY2tncm91bmQucG5nJyl9IjsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdkaXZQdXJwbGUnKTsKKyAgdmFyIHN0eWxlTm9kZT0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
c3R5bGUnKTsKKyAgc3R5bGVOb2RlLnR5cGU9ICd0ZXh0L2Nzcyc7CisgIHN0eWxlTm9kZS5tZWRp
YT0gJ3NjcmVlbic7CisgIHN0eWxlTm9kZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShzdHlsZVRleHQpKTsKKyAgZGl2LmFwcGVuZENoaWxkKHN0eWxlTm9kZSk7Cit9Cis8L3Nj
cmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJvbkxvYWQoKSI+CisKKzwhLS0gVGV4dCB1
c2luZyBhbiBpbXBvcnRlZCBmb250IC0tPgorPGRpdiBpZD0nY2h1bmtmaXZlRGl2Jz5UaGlzIHRl
eHQgdXNlcyB0aGUgQ2h1bmtmaXZlIGZvbnQuPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gbGlu
a2VkIGZpbGUgLS0+Cis8ZGl2IGlkPSdkaXZSZWQnPgorVGhpcyBkaXYgaGFzIGEgcmVkIGltYWdl
IGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYSBmaWxlIGlt
cG9ydGVkIGluIHRoZSBsaW5rZWQgZmlsZSAtLT4KKzxkaXYgaWQ9J2Rpdk9yYW5nZSc+CitUaGlz
IGRpdiBoYXMgYSBvcmFuZ2UgaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEt
LSBTdHlsZSBpcyBpbiBhbiBpbXBvcnRlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2WWVsbG93Jz4K
K1RoaXMgZGl2IGhhcyBhIHllbGxvdyBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2Pgor
Cis8IS0tIFN0eWxlIGlzIGRlZmluZWQgaW4gYSBzdHlsZSBzZWN0aW9uIGluIHRoZSBoZWFkZXIg
LS0+Cis8ZGl2IGlkPSdkaXZCbHVlJz4KK1RoaXMgZGl2IGhhcyBhIGJsdWUgaW1hZ2UgYXMgaXRz
IGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBpbmxpbmVkIC0tPgorPGRpdiBp
ZD0nZGl2R3JlZW4nIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOnVybCgnZ3JlZW5fYmFja2dyb3Vu
ZC5wbmcnKSI+CitUaGlzIGRpdiBoYXMgYSBncmVlbiBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4K
KzwvZGl2PgorCis8IS0tIFN0eWxlIGlkIGR5bmFtaWNhbGx5IGdlbmVyYXRlZCB3aXRoIEphdmFT
Y3JpcHQgaW4gdGhlIG9ubG9hZCBoYW5kbGVyIC0tPgorPGRpdiBpZD0nZGl2UHVycGxlJz4KK1Ro
aXMgZGl2IGhhcyBhIHB1cnBsZSBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2PgorCitV
bm9yZGVyZWQgbGlzdDo8YnI+Cis8dWw+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwvbGk+
CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+Cisg
IDxsaT5SZWQ8L2xpPgorPC91bD4KKzxicj4KKworT3JkZXJlZCBsaXN0Ojxicj4KKzxvbD4KKyAg
PGxpPkJsdWU8L2xpPgorICA8bGk+UmVkPC9saT4KKyAgPGxpPlllbGxvdzwvbGk+CisgIDxsaT5C
bHVlPC9saT4KKyAgPGxpPkdyZWVuPC9saT4KKyAgPGxpPlJlZDwvbGk+Cis8L29sPgorCis8L2Jv
ZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWVkYmRj
MTg5MWNmMWI2Zjk2N2I3ZDM3NjFlMjA3MzBkODM5ZTZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZS5odG1s
CkBAIC0wLDAgKzEsOSBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9ImJsdWVfYmFja2dy
b3VuZC5wbmciLz4KKzxpbWcgc3JjPSJyZWRfYmFja2dyb3VuZC5wbmciLz4KKworPC9ib2R5Pgor
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaWZyYW1lMi5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDA0NGIyZWNj
YmI3ZjllM2YwYjVkZmNhODY4OGYyZWRmY2Y5NzhmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRtbApA
QCAtMCwwICsxLDkgQEAKKzxodG1sPgorPGJvZHk+CisKKzxpbWcgc3JjPSJncmVlbl9iYWNrZ3Jv
dW5kLnBuZyIvPgorPGltZyBzcmM9ImJsdWVfYmFja2dyb3VuZC5wbmciLz4KKworPC9ib2R5Pgor
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
cGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlX2Zyb21fbGlu
ay5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZWY2ODNlNTgxZjQ2ZWI1ZWVmYjM3NjQ3MTQzMGU4Y2ZiMmVhNmJk
OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9w
YWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcwpAQCAtMCwwICsxLDMgQEAK
KyNkaXZPcmFuZ2UgeworICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnb3JhbmdlX2JhY2tncm91bmQu
cG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMu
Y3NzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lt
cG9ydF9zdHlsZXMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY0YzdmNGQ1ZjRhOTljN2FlNmU2YzI1NGE4OTYz
ZTQyYTlhODRiYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxlcy5jc3MKQEAgLTAsMCArMSwzIEBA
CisjZGl2WWVsbG93IHsKKyAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCd5ZWxsb3dfYmFja2dyb3Vu
ZC5wbmcnKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvbGlua19zdHlsZXMu
Y3NzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xp
bmtfc3R5bGVzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjdmYjk5YTliMGRhMDliZWUyYzI0ZWM4MzU1YTE3
ZTQzMDdhNjI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcwpAQCAtMCwwICsxLDUgQEAKK0Bp
bXBvcnQgdXJsKCdpbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcycpOworCisjZGl2UmVkIHsKKyAg
YmFja2dyb3VuZC1pbWFnZTogdXJsKCdyZWRfYmFja2dyb3VuZC5wbmcnKTsKK30KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvc2ltcGxlLnhodG1sIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41
ZjEyZGY2MzU2ODZjNmYxYzFjNWVkYjRiZGQ1NzM1MjNmODAwYWZmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBs
ZS54aHRtbApAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJV
VEYtOCI/PgorPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3Ry
aWN0Ly9FTiIgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3Qu
ZHRkIj4KKzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiB4bWw6bGFu
Zz0iZW4iPgorIDxoZWFkPgorIDx0aXRsZT5YSFRNTCAxLjAgU3RyaWN0IEV4YW1wbGU8L3RpdGxl
PgorIDwvaGVhZD4KKyA8Ym9keT4KKyAgIDxwPkhlbGxvISA8L3A+CisgPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJp
YWxpemVyL3RvcF9mcmFtZS5odG1sIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzMTg1MjNhZmE0YTFi
MDk4NjVjNDQ5MjhkMzRhN2MxMWQyZjQwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvdG9wX2ZyYW1lLmh0bWwKQEAg
LTAsMCArMSwxMiBAQAorPGh0bWw+Cis8Ym9keT4KKworPGltZyBzcmM9InJlZF9iYWNrZ3JvdW5k
LnBuZyIvPgorCis8aWZyYW1lIHNyYz0iaWZyYW1lLmh0bWwiPjwvaWZyYW1lPgorPG9iamVjdCBk
YXRhPSJpZnJhbWUyLmh0bWwiPjwvb2JqZWN0PgorPGlmcmFtZSBzcmM9ImlmcmFtZS5odG1sIj48
L2lmcmFtZT4KKworPC9ib2R5PgorCis8L2h0bWw+Cg==
</data>
<flag name="commit-queue"
          id="84112"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91452</attachid>
            <date>2011-04-28 02:13:46 -0700</date>
            <delta_ts>2011-04-28 15:04:09 -0700</delta_ts>
            <desc>patch (updated to avoid Android.mk)</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>65498</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQ5OTAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDhhYzY0
NTBjNzRkOGU3NmJjZDliMzg3MzZjYmY0M2NlYmQxZWE3NS4uZDBlM2FhZjBlNjc0MjgzN2NjMjVh
ZWI4YjBhNDhhM2E4NjU2MjA3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwMjQsNiArMTAy
NCw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwYWdlL1BhZ2UuY3BwCiAgICAgcGFnZS9Q
YWdlR3JvdXAuY3BwCiAgICAgcGFnZS9QYWdlR3JvdXBMb2FkRGVmZXJyZXIuY3BwCisgICAgcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKICAgICBwYWdlL1BlcmZvcm1hbmNlLmNwcAogICAgIHBhZ2Uv
UGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNwcAogICAgIHBhZ2UvUGVyZm9ybWFuY2VUaW1pbmcuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggMWFhYzAwNWYwOGUwNjY2ZDUzNWVkYjU1YjZhOTc4N2M5NjA1YzFkMi4u
MTNkMTEwZDI4ODgxNTBlMTM5MzA0Zjc2NGY0NjU3OTk1OGRlN2Y3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDMzIEBACisyMDExLTA0LTI1ICBKYXkgQ2l2ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIEludHJv
ZHVjaW5nIGEgbmV3IGNsYXNzIHRoYXQgYWxsb3dzIHNlcmlhbGl6YXRpb24gb2YgYSBwYWdlIGJh
Y2sKKyAgICAgICAgdG8gSFRNTC9YTUwgd2l0aCBhbGwgaXRzIHN1Yi1mcmFtZXMgYW5kIGFsc28g
cmV0cmlldmVzIHRoZSBwYWdlJ3MKKyAgICAgICAgcmVzb3VyY2VzLgorICAgICAgICBUZXN0czog
dW5pdC10ZXN0cyBpbiBjaHJvbWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3Bw
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODk0Nwor
CisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
ajoKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnQ6OnN1Z2dlc3RlZE1JTUVUeXBlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuaDoKKyAgICAg
ICAgKiBlZGl0aW5nL01hcmt1cEFjY3VtdWxhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRDdXN0b21BdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KToKKyAgICAgICAgKiBlZGl0aW5n
L01hcmt1cEFjY3VtdWxhdG9yLmg6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFy
c2V0UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6
cHJvY2Vzc01ldGEpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpl
bmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyk6CisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmg6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6IEFk
ZGVkLgorICAgICAgICAqIHBhZ2UvUGFnZVNlcmlhbGl6ZXIuaDogQWRkZWQuCisKIDIwMTEtMDQt
MjYgIENodW4tTHVuZyBIdWFuZyAgPGFsdmluY2wuaHVhbmdAZ21haWwuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEFkZWxlIFBldGVyc29uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggNWQyZjY2ZWRiMjkwMjZhMmE4YmQ0OWZiYTFmYTk1MzZhZjM5N2UxYi4uOTYyZmQyNGQ5
ZWRiZmQ5MjUxZGVhYTlkZTA5ZDkxZTZiNTc5ODVjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCkBAIC0yMjQ3LDYgKzIyNDcsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmggXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdy
b3VwTG9hZERlZmVycmVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3JvdXBMb2Fk
RGVmZXJyZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgXAor
CVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCBcCiAJU291cmNlL1dlYkNvcmUv
cGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFuY2Uu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZU5hdmlnYXRpb24uY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCBjYmQ2Y2JmMWRkYzI4YTM2NTFiNjcwMzUzMjg1ZDgzZGViYzc0MjBj
Li42ODcyMWU0Y2M2YWVkNjIyOGRiNmE5NGNiODZlODRlYzU1NDFjMTE4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC03MTEsNiArNzExLDcgQEAKICAgICAgICAgICAgICdwYWdlL01lbW9yeUluZm8uaCcs
CiAgICAgICAgICAgICAncGFnZS9QYWdlLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUGFnZUdyb3Vw
LmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaCcsCiAgICAgICAgICAgICAn
cGFnZS9QbHVnaW5IYWx0ZXJDbGllbnQuaCcsCiAgICAgICAgICAgICAncGFnZS9Qb3NpdGlvbkNh
bGxiYWNrLmgnLAogICAgICAgICAgICAgJ3BhZ2UvUG9zaXRpb25FcnJvci5oJywKQEAgLTM0NjMs
NiArMzQ2NCw3IEBACiAgICAgICAgICAgICAncGFnZS9QYWdlR3JvdXAuY3BwJywKICAgICAgICAg
ICAgICdwYWdlL1BhZ2VHcm91cExvYWREZWZlcnJlci5jcHAnLAogICAgICAgICAgICAgJ3BhZ2Uv
UGFnZUdyb3VwTG9hZERlZmVycmVyLmgnLAorICAgICAgICAgICAgJ3BhZ2UvUGFnZVNlcmlhbGl6
ZXIuY3BwJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlLmNwcCcsCiAgICAgICAgICAg
ICAncGFnZS9QZXJmb3JtYW5jZS5oJywKICAgICAgICAgICAgICdwYWdlL1BlcmZvcm1hbmNlTmF2
aWdhdGlvbi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwNmQ4ZjRhOTVjZWM2YjczN2FjZWJhYmQ5
MDZiZjY4MDBmOTljNmMwLi5hZTg4YjNmMjQ4MDUzZmEwYWJjMDhhOTc1NDU1ODFhZWU1ZWY4NTZi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwpAQCAtOTM1LDYgKzkzNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBh
Z2UvUGFnZS5jcHAgXAogICAgIHBhZ2UvUGFnZUdyb3VwLmNwcCBcCiAgICAgcGFnZS9QYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuY3BwIFwKKyAgICBwYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBcCiAgICAg
cGFnZS9QZXJmb3JtYW5jZS5jcHAgXAogICAgIHBhZ2UvUGVyZm9ybWFuY2VOYXZpZ2F0aW9uLmNw
cCBcCiAgICAgcGFnZS9QZXJmb3JtYW5jZVRpbWluZy5jcHAgXApAQCAtMTg4NCw2ICsxODg1LDcg
QEAgSEVBREVSUyArPSBcCiAgICAgcGFnZS9QYWdlR3JvdXAuaCBcCiAgICAgcGFnZS9QYWdlR3Jv
dXBMb2FkRGVmZXJyZXIuaCBcCiAgICAgcGFnZS9QYWdlLmggXAorICAgIHBhZ2UvUGFnZVNlcmlh
bGl6ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0ZXIuaCBcCiAgICAgcGFnZS9QbHVnaW5IYWx0
ZXJDbGllbnQuaCBcCiAgICAgcGFnZS9QcmludENvbnRleHQuaCBcCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDRhYzM4ZmE1ZDc0NGQ3OTc3OTU0
ZDUyMTRhZjQ0OGYzY2M5MDFkYjEuLjg4NzQxMDBhOWQyZmYyMzZlMDc3MzE1OTY5ODZjNDMyYzk5
NTI2YjUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CkBAIC0yNTE2OSw2ICsyNTE2OSwxNCBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGFnZVxQYWdl
R3JvdXBMb2FkRGVmZXJyZXIuaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICAgICAg
ICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICAg
ICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWxhdGl2
ZVBhdGg9Ii4uXHBhZ2VcUGFnZVNlcmlhbGl6ZXIuaCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPgorICAgICAgICAgICAgICAgICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBhZ2VcUGVyZm9ybWFuY2UuY3BwIgogCQkJCT4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhNWFi
NzlmOGQ0NmE3Y2I1ZTMwYjc4ZTQwNjUyZjU0ZDRkOGU5MWM5Li43ZDUzYWU5NDMzZmI3MzA3NGJm
ZGM4MzhmMTQ3NmM1Nzg1ZDU3MGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04NDcsNiArODQ3LDggQEAKIAkJMzNDMENDRDUx
MTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNDMENDRDMxMTJDNUU2MjAwQ0UwNTdEIC8qIFNl
Y3VyZVRleHRJbnB1dC5oICovOyB9OwogCQkzM0QwMjEyRDEzMURCMzdCMDA0MDkxQTggLyogQ29v
a2llU3RvcmFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTEzRjAxRUExMjcwRTEwRDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2UuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzFBNjdDQjExQzZDN0RC
MDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFBNjdDQTExQzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRp
b25DRi5jcHAgKi87IH07CisJCTM3MUU2NUNDMTM2NjFFREMwMEJFRURCMCAvKiBQYWdlU2VyaWFs
aXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcx
RTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi87IH07CisJCTM3MUU2
NUNFMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFFNjVDRDEzNjYxRUVEMDBCRUVEQjAg
LyogUGFnZVNlcmlhbGl6ZXIuY3BwICovOyB9OwogCQkzNzFGNEY0MDBEMjVCOUFGMDBFQ0UwRDUg
LyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3MUY0RjQxMEQyNUI5QUYwMEVD
RTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovOyB9
OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9udERhdGEuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RkZBMEQyNUU3
RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICovOyB9OwpAQCAtNzM3MSw2ICs3Mzcz
LDggQEAKIAkJMzNDMENDRDIxMTJDNUU2MjAwQ0UwNTdEIC8qIFNlY3VyZVRleHRJbnB1dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTZWN1cmVUZXh0SW5wdXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzM0MwQ0NEMzExMkM1RTYyMDBDRTA1N0Qg
LyogU2VjdXJlVGV4dElucHV0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNl
Y3VyZVRleHRJbnB1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFBNjdDQTEx
QzZDN0RCMDAwNDdCOEIgLyogSHlwaGVuYXRpb25DRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBIeXBoZW5hdGlvbkNGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzcxRTY1Q0IxMzY2MUVEQzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhZ2VTZXJpYWxpemVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3MUU2NUNEMTM2NjFFRUQwMEJFRURCMCAvKiBQYWdlU2Vy
aWFsaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYWdlU2Vy
aWFsaXplci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RjNFMEQyNUI5
QUYwMEVDRTBENSAvKiBGb250RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEYzRjBEMjVC
OUFGMDBFQ0UwRDUgLyogRm9udERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRm9udERhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFG
NEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVkRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2VnbWVudGVkRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE0NDM2LDYgKzE0NDQwLDggQEAKIAkJCQk5MzAyQjBCRTBENzlGODJD
MDBDN0VFODMgLyogUGFnZUdyb3VwLmggKi8sCiAJCQkJN0E2NzRCRDkwRjlFQkY0RTAwNkNGMDk5
IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5jcHAgKi8sCiAJCQkJN0E2NzRCREEwRjlFQkY0RTAw
NkNGMDk5IC8qIFBhZ2VHcm91cExvYWREZWZlcnJlci5oICovLAorCQkJCTM3MUU2NUNEMTM2NjFF
RUQwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5jcHAgKi8sCisJCQkJMzcxRTY1Q0IxMzY2MUVE
QzAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmggKi8sCiAJCQkJOEE4NDREMDExMUQzQzE4RTAw
MTQwNjVDIC8qIFBlcmZvcm1hbmNlLmNwcCAqLywKIAkJCQk4QTg0NEQwMjExRDNDMThFMDAxNDA2
NUMgLyogUGVyZm9ybWFuY2UuaCAqLywKIAkJCQk4QTg0NEQwMzExRDNDMThFMDAxNDA2NUMgLyog
UGVyZm9ybWFuY2UuaWRsICovLApAQCAtMjMwODEsNiArMjMwODcsNyBAQAogCQkJCTQzNThFODg2
MTM2MEEzM0IwMEU0NzQ4QyAvKiBTVkdGRURyb3BTaGFkb3dFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlGMzgxMEMxQzEzNjVBNDk2MDBFRDZFMzMgLyogSW5zcGVjdG9yV29ya2VyQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUYzODEwQzFFMTM2NUE0RDQwMEVENkUzMyAvKiBXb3JrZXJD
b250ZXh0SW5zcGVjdG9yUHJveHkuaCBpbiBIZWFkZXJzICovLAorCQkJCTM3MUU2NUNDMTM2NjFF
REMwMEJFRURCMCAvKiBQYWdlU2VyaWFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yNTc5NCw2
ICsyNTgwMSw3IEBACiAJCQkJMTRFMEJDNTYxMzYxNDhBODAwMkFEMTJFIC8qIEpTRE9NVG9rZW5M
aXN0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUYzODEwQzFCMTM2NUE0OTYwMEVENkUz
MyAvKiBJbnNwZWN0b3JXb3JrZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3ODE3NTU4
NjEzNjVBMUIwMDA5M0JFMkUgLyogRGF0YVRyYW5zZmVySXRlbXMuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMzcxRTY1Q0UxMzY2MUVFRDAwQkVFREIwIC8qIFBhZ2VTZXJpYWxpemVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Npbmcg
PSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNjkyMGM1NDM0NjhlNzE4ODk5
OGQ1ODgzZDU4ZGVjOWUxN2IyZTZlYy4uMGMwOTkwOWIyNjFlOTdjZmU5N2I1ZTQ5MmE1ZTQwNzJk
NTQ5NzU1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC0xMDgwLDYgKzEwODAsMjAgQEAg
dm9pZCBEb2N1bWVudDo6c2V0Q29udGVudChjb25zdCBTdHJpbmcmIGNvbnRlbnQpCiAgICAgY2xv
c2UoKTsKIH0KIAorU3RyaW5nIERvY3VtZW50OjpzdWdnZXN0ZWRNSU1FVHlwZSgpIGNvbnN0Cit7
CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpKQorICAgICAgICByZXR1cm4g
ImFwcGxpY2F0aW9uL3hodG1sK3htbCI7CisgICAgaWYgKG1fZG9jdW1lbnQtPmlzU1ZHRG9jdW1l
bnQoKSkKKyAgICAgICAgcmV0dXJuICJpbWFnZS9zdmcreG1sIjsKKyAgICBpZiAobV9kb2N1bWVu
dC0+eG1sU3RhbmRhbG9uZSgpKQorICAgICAgICByZXR1cm4gInRleHQveG1sIjsKKyAgICBpZiAo
bV9kb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuICJ0ZXh0L2h0bWwi
OworCisgICAgcmV0dXJuIG1fZG9jdW1lbnRMb2FkZXItPnJlc3BvbnNlTUlNRVR5cGUoKTsKK30K
KwogLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzY3VzcyB0aGUgRE9NIEFQSSBoZXJlIGF0IHNvbWUg
cG9pbnQuIElkZWFzOgogLy8gKiBtYWtpbmcgaXQgcmVjZWl2ZSBhIHJlY3QgYXMgcGFyYW1ldGVy
LCBpLmUuIG5vZGVzRnJvbVJlY3QoeCwgeSwgdywgaCk7CiAvLyAqIG1ha2luZyBpdCByZWNlaXZl
IHRoZSBleHBhZGluZyBzaXplIG9mIGVhY2ggZGlyZWN0aW9uIHNlcGFyYXRlbHksCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCmluZGV4IDE0NTljOTI1YzkwMmI2YmIyMzJmMmU1MjcwOTM3NmRjNGQ3NTZhZWQu
LjM2ZDRmYWM3MmI1YWZmMzM0YTAyZGRlY2JlNDlmNTljYzVmMDAzODQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5oCkBAIC0zNTcsNiArMzU3LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRDb250ZW50
KGNvbnN0IFN0cmluZyYpOwogCisgICAgU3RyaW5nIHN1Z2dlc3RlZE1JTUVUeXBlKCkgY29uc3Q7
CisKICAgICBTdHJpbmcgY29udGVudExhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZW50
TGFuZ3VhZ2U7IH0KICAgICB2b2lkIHNldENvbnRlbnRMYW5ndWFnZShjb25zdCBTdHJpbmcmIGxh
bmcpIHsgbV9jb250ZW50TGFuZ3VhZ2UgPSBsYW5nOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKaW5kZXggYjZkODVkNjFkYmU0MTVlZDUyMTcxN2U5
ZDQ5ZWRjYTE0ZTIzNWYyNy4uOTkzOWQ2ZTgzNmJjODYzMTM1M2MwYzRmNzFmZmI0N2IwYjQ3M2Y0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5jcHAKQEAg
LTE1OCw2ICsxNTgsMTAgQEAgdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQXR0cmlidXRl
VmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcKICAgICAgICAgZG9jdW1l
bnRJc0hUTUwgPyBFbnRpdHlNYXNrSW5IVE1MQXR0cmlidXRlVmFsdWUgOiBFbnRpdHlNYXNrSW5B
dHRyaWJ1dGVWYWx1ZSk7CiB9CiAKK3ZvaWQgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEN1c3Rv
bUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKikKK3sKK30K
Kwogdm9pZCBNYXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kUXVvdGVkVVJMQXR0cmlidXRlVmFsdWUo
VmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmluZykKIHsKICAgICBV
Q2hhciBxdW90ZUNoYXIgPSAnXCInOwpAQCAtMzI3LDYgKzMzMSw5IEBAIHZvaWQgTWFya3VwQWNj
dW11bGF0b3I6OmFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVt
ZW50LCBOYW1lCiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykK
ICAgICAgICAgYXBwZW5kQXR0cmlidXRlKG91dCwgZWxlbWVudCwgKmF0dHJpYnV0ZXMtPmF0dHJp
YnV0ZUl0ZW0oaSksIG5hbWVzcGFjZXMpOwogCisgICAgLy8gR2l2ZSBhbiBvcHBvcnR1bml0eSB0
byBzdWJjbGFzc2VzIHRvIGFkZCB0aGVpciBvd24gYXR0cmlidXRlcy4KKyAgICBhcHBlbmRDdXN0
b21BdHRyaWJ1dGVzKG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7CisKICAgICBhcHBlbmRDbG9z
ZVRhZyhvdXQsIGVsZW1lbnQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL01hcmt1cEFjY3VtdWxhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL01hcmt1cEFj
Y3VtdWxhdG9yLmgKaW5kZXggMGJmYzZlNjAwNWJiZjQ0YjMwYWUzYWY3NmYzNDZiODcwYWE0NmZj
OS4uNGY2ODEzZTYwNzQ3ZmYwMmZkMTE0MDdiMjhmNDY5ZjU5YmZjZjg0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9NYXJrdXBBY2N1bXVsYXRvci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvTWFya3VwQWNjdW11bGF0b3IuaApAQCAtNzQsMjUgKzc0LDI2IEBAIHB1
YmxpYzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kU3RyaW5nKGNvbnN0IFN0
cmluZyYpOwogICAgIHZvaWQgYXBwZW5kU3RhcnRUYWcoTm9kZSosIE5hbWVzcGFjZXMqID0gMCk7
Ci0gICAgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRF
bmRUYWcoTm9kZSopOwogICAgIHN0YXRpYyBzaXplX3QgdG90YWxMZW5ndGgoY29uc3QgVmVjdG9y
PFN0cmluZz4mKTsKICAgICBzaXplX3QgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gdG90YWxMZW5n
dGgobV9zdWNjZWVkaW5nTWFya3VwKTsgfQogICAgIHZvaWQgY29uY2F0ZW5hdGVNYXJrdXAoVmVj
dG9yPFVDaGFyPiYgb3V0KTsKICAgICB2b2lkIGFwcGVuZEF0dHJpYnV0ZVZhbHVlKFZlY3RvcjxV
Q2hhcj4mIHJlc3VsdCwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGUsIGJvb2wgZG9jdW1lbnRJc0hU
TUwpOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRDdXN0b21BdHRyaWJ1dGVzKFZlY3RvcjxVQ2hh
cj4mLCBFbGVtZW50KiwgTmFtZXNwYWNlcyopOwogICAgIHZvaWQgYXBwZW5kUXVvdGVkVVJMQXR0
cmlidXRlVmFsdWUoVmVjdG9yPFVDaGFyPiYgcmVzdWx0LCBjb25zdCBTdHJpbmcmIHVybFN0cmlu
Zyk7CiAgICAgdm9pZCBhcHBlbmROb2RlVmFsdWUoVmVjdG9yPFVDaGFyPiYgb3V0LCBjb25zdCBO
b2RlKiwgY29uc3QgUmFuZ2UqLCBFbnRpdHlNYXNrKTsKICAgICBib29sIHNob3VsZEFkZE5hbWVz
cGFjZUVsZW1lbnQoY29uc3QgRWxlbWVudCopOwogICAgIGJvb2wgc2hvdWxkQWRkTmFtZXNwYWNl
QXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVzcGFjZXMmKTsKICAgICB2b2lkIGFwcGVu
ZE5hbWVzcGFjZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJl
Zml4LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgTmFtZXNwYWNlcyYpOwotICAg
IEVudGl0eU1hc2sgZW50aXR5TWFza0ZvclRleHQoVGV4dCogdGV4dCkgY29uc3Q7CisgICAgRW50
aXR5TWFzayBlbnRpdHlNYXNrRm9yVGV4dChUZXh0KikgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lk
IGFwcGVuZFRleHQoVmVjdG9yPFVDaGFyPiYgb3V0LCBUZXh0Kik7CiAgICAgdm9pZCBhcHBlbmRD
b21tZW50KFZlY3RvcjxVQ2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiBjb21tZW50KTsKICAgICB2
b2lkIGFwcGVuZERvY3VtZW50VHlwZShWZWN0b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IERvY3Vt
ZW50VHlwZSopOwogICAgIHZvaWQgYXBwZW5kUHJvY2Vzc2luZ0luc3RydWN0aW9uKFZlY3RvcjxV
Q2hhcj4mIG91dCwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgZGF0YSk7CiAg
ICAgdmlydHVhbCB2b2lkIGFwcGVuZEVsZW1lbnQoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50
KiwgTmFtZXNwYWNlcyopOwotICAgIHZvaWQgYXBwZW5kT3BlblRhZyhWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqKTsKLSAgICB2b2lkIGFwcGVuZENsb3Nl
VGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCk7Ci0gICAgdm9pZCBhcHBl
bmRBdHRyaWJ1dGUoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBB
dHRyaWJ1dGUmLCBOYW1lc3BhY2VzKik7CisgICAgdm9pZCBhcHBlbmRPcGVuVGFnKFZlY3RvcjxV
Q2hhcj4mIG91dCwgRWxlbWVudCosIE5hbWVzcGFjZXMqKTsKKyAgICB2b2lkIGFwcGVuZENsb3Nl
VGFnKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCopOworICAgIHZvaWQgYXBwZW5kQXR0cmli
dXRlKFZlY3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0ZSYsIE5hbWVz
cGFjZXMqKTsKICAgICB2b2lkIGFwcGVuZENEQVRBU2VjdGlvbihWZWN0b3I8VUNoYXI+JiBvdXQs
IGNvbnN0IFN0cmluZyYgc2VjdGlvbik7CiAgICAgdm9pZCBhcHBlbmRTdGFydE1hcmt1cChWZWN0
b3I8VUNoYXI+JiByZXN1bHQsIGNvbnN0IE5vZGUqLCBOYW1lc3BhY2VzKik7CiAgICAgYm9vbCBz
aG91bGRTZWxmQ2xvc2UoY29uc3QgTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxNZXRhQ2hhcnNldFBhcnNlci5jcHAKaW5kZXggZWFjN2QyODFhNDQ5ZmZh
YjNlOTMxMWNiMGM0YmFiMzRkYzNlNzNkNS4uNTQxMzQ2Njk5Njk0YTkxYzhmM2YzYTBhNzFhZTMy
OTU2ZDAyYjcwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTE1l
dGFDaGFyc2V0UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
TWV0YUNoYXJzZXRQYXJzZXIuY3BwCkBAIC0xMDIsMTUgKzEwMiwyNyBAQCBTdHJpbmcgSFRNTE1l
dGFDaGFyc2V0UGFyc2VyOjpleHRyYWN0Q2hhcnNldChjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBi
b29sIEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6cHJvY2Vzc01ldGEoKQogeworICAgIGNvbnN0IEhU
TUxUb2tlbjo6QXR0cmlidXRlTGlzdCYgdG9rZW5BdHRyaWJ1dGVzID0gbV90b2tlbi5hdHRyaWJ1
dGVzKCk7CisgICAgQXR0cmlidXRlTGlzdCBhdHRyaWJ1dGVzOworICAgIGZvciAoSFRNTFRva2Vu
OjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gdG9rZW5BdHRyaWJ1dGVzLmJl
Z2luKCk7IGl0ZXIgIT0gdG9rZW5BdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAg
U3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEoKSwgaXRlci0+bV9uYW1lLnNp
emUoKSk7CisgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShpdGVyLT5tX3ZhbHVlLmRhdGEo
KSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtl
X3BhaXIoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpKTsKKyAgICB9CisKKyAgICBtX2Vu
Y29kaW5nID0gZW5jb2RpbmdGcm9tTWV0YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0
dXJuIG1fZW5jb2RpbmcuaXNWYWxpZCgpOworfQorCitUZXh0RW5jb2RpbmcgSFRNTE1ldGFDaGFy
c2V0UGFyc2VyOjplbmNvZGluZ0Zyb21NZXRhQXR0cmlidXRlcyhjb25zdCBBdHRyaWJ1dGVMaXN0
JiBhdHRyaWJ1dGVzKQorewogICAgIGJvb2wgZ290UHJhZ21hID0gZmFsc2U7CiAgICAgTW9kZSBt
b2RlID0gTm9uZTsKICAgICBTdHJpbmcgY2hhcnNldDsKIAotICAgIGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlTGlzdCYgYXR0cmlidXRlcyA9IG1fdG9rZW4uYXR0cmlidXRlcygpOwotICAgIGZv
ciAoSFRNTFRva2VuOjpBdHRyaWJ1dGVMaXN0Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gYXR0cmli
dXRlcy5iZWdpbigpOwotICAgICAgICAgaXRlciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIp
IHsKLSAgICAgICAgQXRvbWljU3RyaW5nIGF0dHJpYnV0ZU5hbWUoaXRlci0+bV9uYW1lLmRhdGEo
KSwgaXRlci0+bV9uYW1lLnNpemUoKSk7Ci0gICAgICAgIFN0cmluZyBhdHRyaWJ1dGVWYWx1ZShp
dGVyLT5tX3ZhbHVlLmRhdGEoKSwgaXRlci0+bV92YWx1ZS5zaXplKCkpOworICAgIGZvciAoQXR0
cmlidXRlTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGF0dHJpYnV0ZXMuYmVnaW4oKTsgaXRl
ciAhPSBhdHRyaWJ1dGVzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiBhdHRyaWJ1dGVOYW1lID0gaXRlci0+Zmlyc3Q7CisgICAgICAgIGNvbnN0IFN0cmluZyYg
YXR0cmlidXRlVmFsdWUgPSBpdGVyLT5zZWNvbmQ7CiAKICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h
bWUgPT0gaHR0cF9lcXVpdkF0dHIpIHsKICAgICAgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShhdHRyaWJ1dGVWYWx1ZSwgImNvbnRlbnQtdHlwZSIpKQpAQCAtMTI3LDEzICsxMzksMTAgQEAg
Ym9vbCBIVE1MTWV0YUNoYXJzZXRQYXJzZXI6OnByb2Nlc3NNZXRhKCkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGlmIChtb2RlID09IENoYXJzZXQgfHwgKG1vZGUgPT0gUHJhZ21hICYmIGdvdFBy
YWdtYSkpIHsKLSAgICAgICAgbV9lbmNvZGluZyA9IFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNldCkpOwotICAgICAgICBpZiAobV9lbmNvZGluZy5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgaWYgKG1vZGUg
PT0gQ2hhcnNldCB8fCAobW9kZSA9PSBQcmFnbWEgJiYgZ290UHJhZ21hKSkKKyAgICAgICAgcmV0
dXJuIFRleHRFbmNvZGluZyhzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoY2hhcnNl
dCkpOwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBUZXh0RW5jb2RpbmcoKTsKIH0K
IAogc3RhdGljIGNvbnN0IGludCBieXRlc1RvQ2hlY2tVbmNvbmRpdGlvbmFsbHkgPSAxMDI0OyAv
LyBUaGF0IG1hbnkgaW5wdXQgYnl0ZXMgd2lsbCBiZSBjaGVja2VkIGZvciBtZXRhIGNoYXJzZXQg
ZXZlbiBpZiA8aGVhZD4gc2VjdGlvbiBpcyBvdmVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9wYXJzZXIvSFRNTE1ldGFDaGFyc2V0UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MTWV0YUNoYXJzZXRQYXJzZXIuaAppbmRleCA0NWZiYWY3YWI5YmU0OTVh
Nzg2MjRjZjBmMjBiODU3MjQwMTYwODhhLi4xZWU4N2RmOWFkMjg1N2RhODBiM2ZhZWYxODlhOGM3
OTZkZGNlMzBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0
YUNoYXJzZXRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MTWV0
YUNoYXJzZXRQYXJzZXIuaApAQCAtNDgsMTEgKzQ4LDE2IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFRleHRFbmNvZGluZyYgZW5jb2RpbmcoKSB7IHJldHVybiBtX2VuY29kaW5nOyB9CiAKKyAgICB0
eXBlZGVmIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IEF0dHJpYnV0ZUxpc3Q7CisgICAg
Ly8gVGhlIHJldHVybmVkIGVuY29kaW5nIG1pZ2h0IG5vdCBiZSB2YWxpZC4KKyAgICBzdGF0aWMg
VGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbU1ldGFBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZUxp
c3QmCispOworCiBwcml2YXRlOgogICAgIEhUTUxNZXRhQ2hhcnNldFBhcnNlcigpOwogCiAgICAg
Ym9vbCBwcm9jZXNzTWV0YSgpOwotICAgIFN0cmluZyBleHRyYWN0Q2hhcnNldChjb25zdCBTdHJp
bmcmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGV4dHJhY3RDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwog
CiAgICAgZW51bSBNb2RlIHsKICAgICAgICAgTm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2Vy
aWFsaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTYzYTRiNGY1NDg5ZTk3ZjE2OTQyOGM4NTlhNzM5M2Vk
NGJhZDVlMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlh
bGl6ZXIuY3BwCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhZ2VTZXJpYWxpemVyLmgiCisKKyNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVk
ZSAiQ1NTSW1wb3J0UnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50
LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MRnJhbWVPd25lckVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTExpbmtFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE1ldGFD
aGFyc2V0UGFyc2VyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0
eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUVFBQYXJzZXJzLmgiCisjaW5jbHVkZSAiSW1hZ2Uu
aCIKKyNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiTWFya3VwQWNjdW11
bGF0b3IuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5o
IgorI2luY2x1ZGUgIlN0eWxlSW1hZ2UuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAi
VGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIGJvb2wgaXNDaGFyc2V0U3BlY2lmeWluZ05vZGUoTm9kZSogbm9kZSkKK3sK
KyAgICBpZiAoIW5vZGUtPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVtZW50KG5vZGUpOworICAgIGlm
ICghZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om1ldGFUYWcpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgSFRNTE1ldGFDaGFyc2V0UGFyc2VyOjpBdHRyaWJ1dGVMaXN0IGF0dHJp
YnV0ZXM7CisgICAgY29uc3QgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzTWFwID0gZWxlbWVudC0+
YXR0cmlidXRlcyh0cnVlKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRl
c01hcC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGl0ZW0gPSBhdHRyaWJ1
dGVzTWFwLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGRl
YWwgYXBwcm9wcmlhdGVseSB3aXRoIHRoZSBhdHRyaWJ1dGUgaWYgdGhleSBoYXZlIGEgbmFtZXNw
YWNlLgorICAgICAgICBhdHRyaWJ1dGVzLmFwcGVuZChtYWtlX3BhaXIoaXRlbS0+bmFtZSgpLnRv
U3RyaW5nKCksIGl0ZW0tPnZhbHVlKCkuc3RyaW5nKCkpKTsKKyAgICB9CisgICAgVGV4dEVuY29k
aW5nIHRleHRFbmNvZGluZyA9IEhUTUxNZXRhQ2hhcnNldFBhcnNlcjo6ZW5jb2RpbmdGcm9tTWV0
YUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgcmV0dXJuIHRleHRFbmNvZGluZy5pc1ZhbGlk
KCk7Cit9CisKK3N0YXRpYyBib29sIHNob3VsZElnbm9yZUVsZW1lbnQoRWxlbWVudCogZWxlbWVu
dCkKK3sKKyAgICByZXR1cm4gZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnNjcmlwdFRh
ZykgfHwgZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om5vc2NyaXB0VGFnKSB8fCBpc0No
YXJzZXRTcGVjaWZ5aW5nTm9kZShlbGVtZW50KTsKK30KKworc3RhdGljIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVOYW1lKGNvbnN0IEhUTUxGcmFtZU93bmVyRWxl
bWVudCYgZnJhbWVPd25lcikKK3sKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHN1cHBvcnQgYWxs
IGZyYW1lIG93bmVycyBpbmNsdWRpbmcgYXBwbGV0cy4KKyAgICByZXR1cm4gZnJhbWVPd25lci5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6b2JqZWN0VGFnKSA/IEhUTUxOYW1lczo6ZGF0YUF0dHIgOiBI
VE1MTmFtZXM6OnNyY0F0dHI7Cit9CisKK2NsYXNzIFNlcmlhbGl6ZXJNYXJrdXBBY2N1bXVsYXRv
ciA6IHB1YmxpYyBXZWJDb3JlOjpNYXJrdXBBY2N1bXVsYXRvciB7CitwdWJsaWM6CisgICAgU2Vy
aWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKFBhZ2VTZXJpYWxpemVyKiwgRG9jdW1lbnQqLCBWZWN0
b3I8Tm9kZSo+Kik7CisgICAgdmlydHVhbCB+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kVGV4dChWZWN0b3I8VUNoYXI+
JiBvdXQsIFRleHQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kRWxlbWVudChWZWN0b3I8VUNo
YXI+JiBvdXQsIEVsZW1lbnQqLCBOYW1lc3BhY2VzKik7CisgICAgdmlydHVhbCB2b2lkIGFwcGVu
ZEN1c3RvbUF0dHJpYnV0ZXMoVmVjdG9yPFVDaGFyPiYgb3V0LCBFbGVtZW50KiwgTmFtZXNwYWNl
cyopOworICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRFbmRUYWcoTm9kZSopOworCitwcml2YXRlOgor
ICAgIFBhZ2VTZXJpYWxpemVyKiBtX3NlcmlhbGl6ZXI7CisgICAgRG9jdW1lbnQqIG1fZG9jdW1l
bnQ7Cit9OworCitTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OlNlcmlhbGl6ZXJNYXJrdXBB
Y2N1bXVsYXRvcihQYWdlU2VyaWFsaXplciogc2VyaWFsaXplciwgRG9jdW1lbnQqIGRvY3VtZW50
LCBWZWN0b3I8Tm9kZSo+KiBub2RlcykKKyAgICA6IE1hcmt1cEFjY3VtdWxhdG9yKG5vZGVzLCBB
YnNvbHV0ZVVSTHMpCisgICAgLCBtX3NlcmlhbGl6ZXIoc2VyaWFsaXplcikKKyAgICAsIG1fZG9j
dW1lbnQoZG9jdW1lbnQpCit7CisgICAgLy8gTWFya3VwQWNjdW11bGF0b3IgZG9lcyBub3Qgc2Vy
aWFsaXplIHRoZSA8P3htbCAuLi4gbGluZSwgc28gd2UgYWRkIGl0IGV4cGxpY2l0ZWx5IHRvIGVu
c3VyZSB0aGUgcmlnaHQgZW5jb2RpbmcgaXMgc3BlY2lmaWVkLgorICAgIGlmIChtX2RvY3VtZW50
LT5pc1hIVE1MRG9jdW1lbnQoKSB8fCBtX2RvY3VtZW50LT54bWxTdGFuZGFsb25lKCkgfHwgbV9k
b2N1bWVudC0+aXNTVkdEb2N1bWVudCgpKQorICAgICAgICBhcHBlbmRTdHJpbmcobWFrZVN0cmlu
ZygiPD94bWwgdmVyc2lvbj1cIiIsIG1fZG9jdW1lbnQtPnhtbFZlcnNpb24oKSwgIlwiIGVuY29k
aW5nPVwiIiwgbV9kb2N1bWVudC0+Y2hhcnNldCgpLCAiXCI/PiIpKTsKK30KKworU2VyaWFsaXpl
ck1hcmt1cEFjY3VtdWxhdG9yOjp+U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yKCkKK3sKK30K
Kwordm9pZCBTZXJpYWxpemVyTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZFRleHQoVmVjdG9yPFVD
aGFyPiYgb3V0LCBUZXh0KiB0ZXh0KQoreworICAgIEVsZW1lbnQqIHBhcmVudCA9IHRleHQtPnBh
cmVudEVsZW1lbnQoKTsKKyAgICBpZiAocGFyZW50ICYmICFzaG91bGRJZ25vcmVFbGVtZW50KHBh
cmVudCkpCisgICAgICAgIE1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRUZXh0KG91dCwgdGV4dCk7
Cit9CisKK3ZvaWQgU2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KFZl
Y3RvcjxVQ2hhcj4mIG91dCwgRWxlbWVudCogZWxlbWVudCwgTmFtZXNwYWNlcyogbmFtZXNwYWNl
cykKK3sKKyAgICBpZiAoIXNob3VsZElnbm9yZUVsZW1lbnQoZWxlbWVudCkpCisgICAgICAgIE1h
cmt1cEFjY3VtdWxhdG9yOjphcHBlbmRFbGVtZW50KG91dCwgZWxlbWVudCwgbmFtZXNwYWNlcyk7
CisKKyAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmhlYWRUYWcpKSB7Cisg
ICAgICAgIFN0cmluZyBtZXRhID0gbWFrZVN0cmluZygiPG1ldGEgY2hhcnNldD1cIiIsIG1fZG9j
dW1lbnQtPmNoYXJzZXQoKSwgIlwiPiIpOworICAgICAgICBvdXQuYXBwZW5kKG1ldGEuY2hhcmFj
dGVycygpLCBtZXRhLmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogRm9yIG9iamVj
dCAocGx1Z2lucykgdGFncyBhbmQgdmlkZW8gdGFnIHdlIGNvdWxkIHJlcGxhY2UgdGhlbSBieSBh
biBpbWFnZSBvZiB0aGVpciBjdXJyZW50IGNvbnRlbnRzLgorfQorCit2b2lkIFNlcmlhbGl6ZXJN
YXJrdXBBY2N1bXVsYXRvcjo6YXBwZW5kQ3VzdG9tQXR0cmlidXRlcyhWZWN0b3I8VUNoYXI+JiBv
dXQsIEVsZW1lbnQqIGVsZW1lbnQsIE5hbWVzcGFjZXMqIG5hbWVzcGFjZXMpCit7CisgICAgaWYg
KCFlbGVtZW50LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpCisgICAgICAgIHJldHVybjsKKworICAg
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogZnJhbWVPd25lciA9IHN0YXRpY19jYXN0PEhUTUxGcmFt
ZU93bmVyRWxlbWVudCo+KGVsZW1lbnQpOworICAgIEZyYW1lKiBmcmFtZSA9IGZyYW1lT3duZXIt
PmNvbnRlbnRGcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAg
IEtVUkwgdXJsID0gZnJhbWUtPmRvY3VtZW50KCktPnVybCgpOworICAgIGlmICh1cmwuaXNWYWxp
ZCgpICYmICF1cmwucHJvdG9jb2xJcygiYWJvdXQiKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gV2UgbmVlZCB0byBnaXZlIGEgZmFrZSBsb2NhdGlvbiB0byBibGFuayBmcmFtZXMgc28gdGhl
eSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgc2VyaWFsaXplZCBmcmFtZS4KKyAgICB1cmwgPSBt
X3NlcmlhbGl6ZXItPnVybEZvckJsYW5rRnJhbWUoZnJhbWUpOworICAgIFJlZlB0cjxBdHRyaWJ1
dGU+IGF0dHJpYnV0ZSA9IEF0dHJpYnV0ZTo6Y3JlYXRlKGZyYW1lT3duZXJVUkxBdHRyaWJ1dGVO
YW1lKCpmcmFtZU93bmVyKSwgdXJsLnN0cmluZygpKTsKKyAgICBhcHBlbmRBdHRyaWJ1dGUob3V0
LCBlbGVtZW50LCAqYXR0cmlidXRlLCBuYW1lc3BhY2VzKTsKK30KKwordm9pZCBTZXJpYWxpemVy
TWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhOb2RlKiBub2RlKQoreworICAgIGlmIChu
b2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgIXNob3VsZElnbm9yZUVsZW1lbnQodG9FbGVtZW50KG5v
ZGUpKSkKKyAgICAgICAgTWFya3VwQWNjdW11bGF0b3I6OmFwcGVuZEVuZFRhZyhub2RlKTsKK30K
KworUGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlOjpSZXNvdXJjZSgpCit7Cit9CisKK1BhZ2VTZXJp
YWxpemVyOjpSZXNvdXJjZTo6UmVzb3VyY2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSkKKyAgICA6IHVybCh1cmwp
CisgICAgLCBtaW1lVHlwZShtaW1lVHlwZSkKKyAgICAsIGRhdGEoZGF0YSkKK3sKK30KKworUGFn
ZVNlcmlhbGl6ZXI6OlBhZ2VTZXJpYWxpemVyKFZlY3RvcjxQYWdlU2VyaWFsaXplcjo6UmVzb3Vy
Y2U+KiByZXNvdXJjZXMpCisgICAgOiBtX3Jlc291cmNlcyhyZXNvdXJjZXMpCisgICAgLCBtX2Js
YW5rRnJhbWVDb3VudGVyKDApCit7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZShQYWdlKiBwYWdlKQoreworICAgIHNlcmlhbGl6ZUZyYW1lKHBhZ2UtPm1haW5GcmFtZSgpKTsK
K30KKwordm9pZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQor
eworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOworICAgIEtVUkwg
dXJsID0gZG9jdW1lbnQtPnVybCgpOworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCB1cmwucHJv
dG9jb2xJcygiYWJvdXQiKSkgeworICAgICAgICAvLyBGb3IgYmxhbmsgZnJhbWVzIHdlIGdlbmVy
YXRlIGEgZmFrZSBVUkwgc28gdGhleSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGVpciBjb250YWlu
aW5nIGZyYW1lLgorICAgICAgICB1cmwgPSB1cmxGb3JCbGFua0ZyYW1lKGZyYW1lKTsKKyAgICB9
CisKKyAgICBpZiAobV9yZXNvdXJjZVVSTHMuY29udGFpbnModXJsKSkgeworICAgICAgICAvLyBG
SVhNRTogV2UgY291bGQgaGF2ZSAyIGZyYW1lIHdpdGggdGhlIHNhbWUgVVJMIGJ1dCB3aGljaCB3
ZXJlIGR5bmFtaWNhbGx5IGNoYW5nZWQgYW5kIGhhdmUgbm93CisgICAgICAgIC8vIGRpZmZlcmVu
dCBjb250ZW50LiBTbyB3ZSBzaG91bGQgc2VyaWFsaXplIGJvdGggYW5kIHNvbWVob3cgcmVuYW1l
IHRoZSBmcmFtZSBzcmMgaW4gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gZnJhbWUuIEFyZyEK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxOb2RlKj4gbm9kZXM7CisgICAg
U2VyaWFsaXplck1hcmt1cEFjY3VtdWxhdG9yIGFjY3VtdWxhdG9yKHRoaXMsIGRvY3VtZW50LCAm
bm9kZXMpOworICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcoVGV4dEVuY29kaW5nKGRvY3Vt
ZW50LT5jaGFyc2V0KCkpKTsKKyAgICBBU1NFUlQodGV4dEVuY29kaW5nLmlzVmFsaWQoKSk7Cisg
ICAgU3RyaW5nIHRleHQgPSBhY2N1bXVsYXRvci5zZXJpYWxpemVOb2Rlcyhkb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCksIDAsIEluY2x1ZGVOb2RlKTsKKyAgICBDU3RyaW5nIGZyYW1lSFRNTCA9
IHRleHRFbmNvZGluZy5lbmNvZGUodGV4dC5jaGFyYWN0ZXJzKCksIHRleHQubGVuZ3RoKCksIEVu
dGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNl
KHVybCwgZG9jdW1lbnQtPnN1Z2dlc3RlZE1JTUVUeXBlKCksIFNoYXJlZEJ1ZmZlcjo6Y3JlYXRl
KGZyYW1lSFRNTC5kYXRhKCksIGZyYW1lSFRNTC5sZW5ndGgoKSkpKTsKKyAgICBtX3Jlc291cmNl
VVJMcy5hZGQodXJsKTsKKworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9
IG5vZGVzLmJlZ2luKCk7IGl0ZXIgIT0gbm9kZXMuZW5kKCk7ICsraXRlcikgeworICAgICAgICBO
b2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxl
bWVudChub2RlKTsKKyAgICAgICAgLy8gV2UgaGF2ZSB0byBwcm9jZXNzIGluLWxpbmUgc3R5bGUg
YXMgaXQgbWlnaHQgY29udGFpbiBzb21lIHJlc291cmNlcyAodHlwaWNhbGx5IGJhY2tncm91bmQg
aW1hZ2VzKS4KKyAgICAgICAgcmV0cmlldmVSZXNvdXJjZXNGb3JDU1NEZWNsYXJhdGlvbihlbGVt
ZW50LT5zdHlsZSgpKTsKKworICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZShIVE1MTmFt
ZXM6OmltZ1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50KTsKKyAgICAgICAgICAg
IEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+Z2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6c3JjQXR0cikpOworICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gaW1hZ2VFbGVtZW50LT5jYWNoZWRJbWFnZSgpOworICAgICAgICAgICAgYWRkSW1h
Z2VUb1Jlc291cmNlcyhjYWNoZWRJbWFnZSwgdXJsKTsKKyAgICAgICAgfSBlbHNlIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsKKyAgICAgICAgICAgIEhUTUxM
aW5rRWxlbWVudCogbGlua0VsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihl
bGVtZW50KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gbGlua0VsZW1lbnQtPnNo
ZWV0KCk7CisgICAgICAgICAgICBpZiAoc2hlZXQgJiYgc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgp
KSB7CisgICAgICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwobGlu
a0VsZW1lbnQtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CisgICAgICAgICAg
ICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
c2hlZXQpLCB1cmwpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250
YWlucyh1cmwpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKSB7CisgICAgICAgICAgICBIVE1MU3R5bGVF
bGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4oZWxl
bWVudCk7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlRWxlbWVudC0+c2hl
ZXQoKTsKKyAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkp
CisgICAgICAgICAgICAgICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NT
dHlsZVNoZWV0Kj4oc2hlZXQpLCBLVVJMKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChGcmFtZSogY2hpbGRGcmFtZSA9IGZyYW1lLT50cmVlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGRG
cmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS0+bmV4dFNpYmxpbmcoKSkKKyAg
ICAgICAgc2VyaWFsaXplRnJhbWUoY2hpbGRGcmFtZSk7Cit9CisKK3ZvaWQgUGFnZVNlcmlhbGl6
ZXI6OnNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgY29u
c3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZ0J1aWxkZXIgY3NzVGV4dDsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc3R5bGVTaGVldC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBT
dHlsZUJhc2UqIGl0ZW0gPSBzdHlsZVNoZWV0LT5pdGVtKGkpOworICAgICAgICBTdHJpbmcgaXRl
bVRleHQgPSBpdGVtLT5jc3NUZXh0KCk7CisgICAgICAgIGlmICghaXRlbVRleHQuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBjc3NUZXh0LmFwcGVuZChpdGVtVGV4dCk7CisgICAgICAgICAgICBp
ZiAoaSA8IHN0eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkKKyAgICAgICAgICAgICAgICBjc3NUZXh0
LmFwcGVuZCgiXG5cbiIpOworICAgICAgICB9CisgICAgICAgIC8vIFNvbWUgcnVsZXMgaGF2ZSBy
ZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdCB3ZSBuZWVkIHRvIHJldHJpZXZlLgor
ICAgICAgICBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKKyAgICAgICAgICAgIENTU0ltcG9y
dFJ1bGUqIGltcG9ydFJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7Cisg
ICAgICAgICAgICBLVVJMIGltcG9ydFVSTCA9IHN0eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKGltcG9ydFJ1bGUtPmhyZWYoKSk7CisgICAgICAgICAgICBpZiAobV9yZXNvdXJjZVVS
THMuY29udGFpbnMoaW1wb3J0VVJMKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIHNlcmlhbGl6ZUNTU1N0eWxlU2hlZXQoaW1wb3J0UnVsZS0+c3R5bGVTaGVldCgpLCBp
bXBvcnRVUkwpOworICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkpIHsK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZm9udCBmYWNlIHJ1bGUuIEl0
IGlzIG5vdCBjbGVhciB0byBtZSBhdCB0aGlzIHBvaW50IGlmIHRoZSBhY3R1YWwgb3RmL2VvdCBm
aWxlIGNhbgorICAgICAgICAgICAgLy8gYmUgcmV0cmlldmVkIGZyb20gdGhlIENTU0ZvbnRGYWNl
UnVsZSBvYmplY3QuCisgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKKyAg
ICAgICAgICAgIHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShzdGF0aWNfY2FzdDxDU1NTdHls
ZVJ1bGUqPihpdGVtKSk7CisgICAgfQorCisgICAgaWYgKHVybC5pc1ZhbGlkKCkgJiYgIW1fcmVz
b3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBj
aGVjayB3aGV0aGVyIGEgY2hhcnNldCBoYXMgYmVlbiBzcGVjaWZpZWQgYW5kIGlmIG5vbmUgd2Fz
IGZvdW5kIGFkZCBvbmUuCisgICAgICAgIFRleHRFbmNvZGluZyB0ZXh0RW5jb2RpbmcgPSBUZXh0
RW5jb2Rpbmcoc3R5bGVTaGVldC0+Y2hhcnNldCgpKTsKKyAgICAgICAgQVNTRVJUKHRleHRFbmNv
ZGluZy5pc1ZhbGlkKCkpOworICAgICAgICBTdHJpbmcgdGV4dFN0cmluZyA9IGNzc1RleHQudG9T
dHJpbmcoKTsKKyAgICAgICAgQ1N0cmluZyB0ZXh0ID0gdGV4dEVuY29kaW5nLmVuY29kZSh0ZXh0
U3RyaW5nLmNoYXJhY3RlcnMoKSwgdGV4dFN0cmluZy5sZW5ndGgoKSwgRW50aXRpZXNGb3JVbmVu
Y29kYWJsZXMpOworICAgICAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgU3Ry
aW5nKCJ0ZXh0L2NzcyIpLCBTaGFyZWRCdWZmZXI6OmNyZWF0ZSh0ZXh0LmRhdGEoKSwgdGV4dC5s
ZW5ndGgoKSkpKTsKKyAgICAgICAgbV9yZXNvdXJjZVVSTHMuYWRkKHVybCk7CisgICAgfQorfQor
Cit2b2lkIFBhZ2VTZXJpYWxpemVyOjphZGRJbWFnZVRvUmVzb3VyY2VzKENhY2hlZEltYWdlKiBp
bWFnZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIGlmICghdXJsLmlzVmFsaWQoKSB8fCBtX3Jl
c291cmNlVVJMcy5jb250YWlucyh1cmwpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWlt
YWdlIHx8IGltYWdlLT5pbWFnZSgpID09IEltYWdlOjpudWxsSW1hZ2UoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU3RyaW5nIG1pbWVUeXBlID0gaW1hZ2UtPnJlc3BvbnNlKCkubWltZVR5cGUo
KTsKKyAgICBtX3Jlc291cmNlcy0+YXBwZW5kKFJlc291cmNlKHVybCwgbWltZVR5cGUsIGltYWdl
LT5pbWFnZSgpLT5kYXRhKCkpKTsKKyAgICBtX3Jlc291cmNlVVJMcy5hZGQodXJsKTsKK30KKwor
dm9pZCBQYWdlU2VyaWFsaXplcjo6cmV0cmlldmVSZXNvdXJjZXNGb3JDU1NSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSkKK3sKKyAgICByZXRyaWV2ZVJlc291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKHJ1
bGUtPnN0eWxlKCkpOworfQorCit2b2lkIFBhZ2VTZXJpYWxpemVyOjpyZXRyaWV2ZVJlc291cmNl
c0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRGVjbGFyYXRpb24p
Cit7CisgICAgaWYgKCFzdHlsZURlY2xhcmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIXN0eWxlRGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKS0+aXNDU1NTdHlsZVNoZWV0KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVEZWNsYXJhdGlvbi0+c3R5bGVzaGVldCgpKTsK
KworICAgIC8vIFRoZSBiYWNrZ3JvdW5kLWltYWdlIGFuZCBsaXN0LXN0eWxlLWltYWdlIChmb3Ig
dWwgb3Igb2wpIGFyZSB0aGUgQ1NTIHByb3BlcnRpZXMKKyAgICAvLyB0aGF0IG1ha2UgdXNlIG9m
IGltYWdlcy4gV2UgaXRlcmF0ZSB0byBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhbnkgb3RoZXIKKyAg
ICAvLyBpbWFnZSBwcm9wZXJ0aWVzIHRoZXJlIG1pZ2h0IGJlLgorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzdHlsZURlY2xhcmF0aW9uLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBJdCdzIGtpbmQgb2YgcmlkaWN1bG91cyB0byBnZXQgdGhlIHByb3BlcnR5IG5hbWUg
YW5kIHRoZW4gZ2V0CisgICAgICAgIC8vIHRoZSB2YWx1ZSBvdXQgb2YgdGhlIG5hbWUuIElkZWFs
bHkgd2Ugd291bGQgZ2V0IHRoZSB2YWx1ZSBvdXQgb2YgdGhlCisgICAgICAgIC8vIHByb3BlcnR5
IElELCBidXQgQ1NTU3R5bGVEZWNsYXJhdGlvbiBvbmx5IGdpdmVzIGFjY2VzcyB0byBwcm9wZXJ0
eQorICAgICAgICAvLyBuYW1lcywgbm90IElEcy4KKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBj
c3NWYWx1ZSA9IHN0eWxlRGVjbGFyYXRpb24tPmdldFByb3BlcnR5Q1NTVmFsdWUoc3R5bGVEZWNs
YXJhdGlvbi0+aXRlbShpKSk7CisgICAgICAgIGlmICghY3NzVmFsdWUtPmlzSW1hZ2VWYWx1ZSgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgQ1NTSW1hZ2VWYWx1ZSogaW1hZ2VW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWUqPihjc3NWYWx1ZS5nZXQoKSk7CisgICAg
ICAgIFN0eWxlSW1hZ2UqIHN0eWxlSW1hZ2UgPSBpbWFnZVZhbHVlLT5jYWNoZWRPclBlbmRpbmdJ
bWFnZSgpOworICAgICAgICAvLyBOb24gY2FjaGVkLWltYWdlcyBhcmUganVzdCBwbGFjZS1ob2xk
ZXJzIGFuZCBkbyBub3QgY29udGFpbiBkYXRhLgorICAgICAgICBpZiAoIXN0eWxlSW1hZ2UgfHwg
IXN0eWxlSW1hZ2UtPmlzQ2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IHN0YXRpY19jYXN0PFN0eWxlQ2FjaGVkSW1hZ2Uq
PihzdHlsZUltYWdlKS0+Y2FjaGVkSW1hZ2UoKTsKKworICAgICAgICBLVVJMIHVybCA9IGNzc1N0
eWxlU2hlZXQtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGltYWdlLT51cmwoKSk7CisgICAgICAg
IGFkZEltYWdlVG9SZXNvdXJjZXMoaW1hZ2UsIHVybCk7CisgICAgfQorfQorCitLVVJMIFBhZ2VT
ZXJpYWxpemVyOjp1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKiBmcmFtZSkKK3sKKyAgICBIYXNoTWFw
PEZyYW1lKiwgS1VSTD46Oml0ZXJhdG9yIGl0ZXIgPSBtX2JsYW5rRnJhbWVVUkxzLmZpbmQoZnJh
bWUpOworICAgIGlmIChpdGVyICE9IG1fYmxhbmtGcmFtZVVSTHMuZW5kKCkpCisgICAgICAgIHJl
dHVybiBpdGVyLT5zZWNvbmQ7CisgICAgU3RyaW5nIHVybCA9IG1ha2VTdHJpbmcoInd5Y2l3eWc6
Ly9mcmFtZS8iLCBTdHJpbmc6Om51bWJlcihtX2JsYW5rRnJhbWVDb3VudGVyKyspKTsKKyAgICBL
VVJMIGZha2VVUkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpOworICAgIG1fYmxhbmtGcmFtZVVSTHMu
YWRkKGZyYW1lLCBmYWtlVVJMKTsKKworICAgIHJldHVybiBmYWtlVVJMOworfQorCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGU1NzU0NjJhNDUzYWE3ZDM3
ZDU1NzcwNjE1MjQ0N2IwZmM5Y2NmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZVNlcmlhbGl6ZXIuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vIHRl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgUGFnZVNlcmlh
bGl6ZXJfaAorI2RlZmluZSBQYWdlU2VyaWFsaXplcl9oCisKKyNpbmNsdWRlICJLVVJMLmgiCisj
aW5jbHVkZSAiS1VSTEhhc2guaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWNoZWRJbWFn
ZTsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFz
cyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRnJhbWU7CitjbGFzcyBQYWdlOworCisvLyBUaGlzIGNs
YXNzIGlzIHVzZWQgdG8gc2VyaWFsaXplIGEgcGFnZSBjb250ZW50cyBiYWNrIHRvIHRleHQgKHR5
cGljYWxseSBIVE1MKS4KKy8vIEl0IHNlcmlhbGl6ZXMgYWxsIHRoZSBwYWdlIGZyYW1lcyBhbmQg
cmV0cmlldmVzIHJlc291cmNlcyBzdWNoIGFzIGltYWdlcyBhbmQgQ1NTIHN0eWxlc2hlZXRzLgor
Y2xhc3MgUGFnZVNlcmlhbGl6ZXIgeworcHVibGljOgorICAgIHN0cnVjdCBSZXNvdXJjZSB7Cisg
ICAgICAgIEtVUkwgdXJsOworICAgICAgICBTdHJpbmcgbWltZVR5cGU7CisgICAgICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGE7CisgICAgICAgIFJlc291cmNlKCk7CisgICAgICAgIFJlc291
cmNlKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBQYXNzUmVmUHRyPFNoYXJl
ZEJ1ZmZlcj4gZGF0YSk7CisgICAgfTsKKworICAgIGV4cGxpY2l0IFBhZ2VTZXJpYWxpemVyKFZl
Y3RvcjxSZXNvdXJjZT4qKTsKKworICAgIC8vIEluaXRpYXRlcyB0aGUgc2VyaWFsaXphdGlvbiBv
ZiB0aGUgZnJhbWUncyBwYWdlLiBBbGwgc2VyaWFsaXplZCBjb250ZW50IGFuZCByZXRyaWV2ZWQK
KyAgICAvLyByZXNvdXJjZXMgYXJlIGFkZGVkIHRvIHRoZSBWZWN0b3IgcGFzc2VkIHRvIHRoZSBj
b25zdHJ1Y3Rvci4gVGhlIGZpcnN0IHJlc291cmNlIGluIHRoYXQKKyAgICAvLyB2ZWN0b3IgaXMg
dGhlIHRvcCBmcmFtZSBzZXJpYWxpemVkIGNvbnRlbnQuCisgICAgdm9pZCBzZXJpYWxpemUoUGFn
ZSopOworCisgICAgS1VSTCB1cmxGb3JCbGFua0ZyYW1lKEZyYW1lKik7CisKK3ByaXZhdGU6Cisg
ICAgdm9pZCBzZXJpYWxpemVGcmFtZShGcmFtZSopOworCisgICAgLy8gU2VyaWFsaXplcyB0aGUg
c3R5bGVzaGVldCBiYWNrIHRvIHRleHQgYW5kIGFkZHMgaXQgdG8gdGhlIHJlc291cmNlcyBpZiBV
UkwgaXMgbm90LWVtcHR5LgorICAgIC8vIEl0IGFsc28gYWRkcyBhbnkgcmVzb3VyY2VzIGluY2x1
ZGVkIGluIHRoYXQgc3R5bGVzaGVldCAoaW5jbHVkaW5nIGFueSBpbXBvcnRlZCBzdHlsZXNoZWV0
cyBhbmQgdGhlaXIgb3duIHJlc291cmNlcykuCisgICAgdm9pZCBzZXJpYWxpemVDU1NTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBLVVJMJik7CisKKyAgICB2b2lkIGFkZEltYWdlVG9S
ZXNvdXJjZXMoQ2FjaGVkSW1hZ2UqLCBjb25zdCBLVVJMJik7CisgICAgdm9pZCByZXRyaWV2ZVJl
c291cmNlc0ZvckNTU0RlY2xhcmF0aW9uKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lk
IHJldHJpZXZlUmVzb3VyY2VzRm9yQ1NTUnVsZShDU1NTdHlsZVJ1bGUqKTsKKworICAgIFZlY3Rv
cjxSZXNvdXJjZT4qIG1fcmVzb3VyY2VzOworICAgIExpc3RIYXNoU2V0PEtVUkw+IG1fcmVzb3Vy
Y2VVUkxzOworICAgIEhhc2hNYXA8RnJhbWUqLCBLVVJMPiBtX2JsYW5rRnJhbWVVUkxzOworICAg
IHVuc2lnbmVkIG1fYmxhbmtGcmFtZUNvdW50ZXI7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCAxNzg1NTNmNTc3ZDZhMmIwZTE1NjU3NGMwOGFmM2ZkZWRl
NWRkOThkLi5jYzBkNTY5Y2U5ZTQ2NTVjNGI0YmY3YWFhYmI1YzQ0NDE1YWRlZWIzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDExLTA0LTI1ICBKYXkgQ2l2
ZWxsaSAgPGpjaXZlbGxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgorCisgICAgICAgIEludHJvZHVjaW5nIGEgbmV3IEFQSSB0byBzZXJpYWxpemUgYSBX
ZWJWaWV3IGJhY2sgdG8gSFRNTC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4OTQ3CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1
YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oOgorICAgICAgICAqIHNyYy9XZWJQYWdlU2VyaWFsaXpl
ci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUpOgor
ICAgICAgICAqIHRlc3RzL1dlYlBhZ2VOZXdTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXI6IEFkZGVkLgorICAgICAgICAqIHRlc3Rz
L2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmxhbmtfZnJhbWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvYmx1ZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvZ3JlZW5fYmFja2dyb3Vu
ZC5wbmc6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Mi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9y
dF9zdHlsZV9mcm9tX2xpbmsuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2ltcG9ydF9zdHlsZXMuY3NzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRh
L3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzczogQWRkZWQuCisgICAgICAgICogdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9vbC1kb3QucG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL29yYW5nZV9iYWNrZ3JvdW5kLnBuZzogQWRkZWQuCisgICAgICAg
ICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9wdXJwbGVfYmFja2dyb3VuZC5wbmc6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvcmVkX2JhY2tncm91bmQucG5n
OiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3NpbXBsZS54aHRt
bDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUu
aHRtbDogQWRkZWQuCisgICAgICAgICogdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci91bC1kb3Qu
cG5nOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3llbGxvd19i
YWNrZ3JvdW5kLnBuZzogQWRkZWQuCisKIDIwMTEtMDQtMjYgIFNoZXJpZmYgQm90ICA8d2Via2l0
LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0
IHI4NDk1MS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGIwNTI5ODFmZDNkN2Jm
MTA0MzFhYzlkMjk5ZGMwYTA1NDMxZDI5NDguLjdkM2E2Yjk1NzYyZjJhODI0YmI1MmZiYzRlNTk4
ZDdjOTMzYzYzNTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5
cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzcsNiArNzcs
NyBAQAogICAgICAgICAgICAgICAgICAgICAndGVzdHMvUG9wdXBNZW51VGVzdC5jcHAnLAogICAg
ICAgICAgICAgICAgICAgICAndGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAndGVzdHMvVW5pc2NyaWJlSGVscGVyVGVzdC5jcHAnLAorICAgICAgICAg
ICAgICAgICAgICAndGVzdHMvV2ViUGFnZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwJywKICAgICAgICAg
ICAgICAgICBdLAogICAgICAgICAgICAgfV0sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3B1YmxpYy9XZWJQYWdlU2VyaWFsaXplci5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViUGFnZVNlcmlhbGl6ZXIuaAppbmRleCBiNGQ1NzE1MzVhYWI4ZmMyMmVlMjA2
NmUyY2UwZTFiYWFmOWQ4NmVkLi5hMTA4YTYyYzA2ZTQzY2FjOGExMWZkMzU0Y2MyNDViNjdkZjUw
OGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJQYWdlU2Vy
aWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYlBhZ2VTZXJp
YWxpemVyLmgKQEAgLTMxLDE0ICszMSwxNCBAQAogI2lmbmRlZiBXZWJQYWdlU2VyaWFsaXplcl9o
CiAjZGVmaW5lIFdlYlBhZ2VTZXJpYWxpemVyX2gKIAorI2luY2x1ZGUgIldlYkNTdHJpbmcuaCIK
ICNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKIAogbmFtZXNwYWNl
IFdlYktpdCB7Ci1jbGFzcyBXZWJDU3RyaW5nOwogY2xhc3MgV2ViRnJhbWU7CiBjbGFzcyBXZWJQ
YWdlU2VyaWFsaXplckNsaWVudDsKIGNsYXNzIFdlYlN0cmluZzsKLWNsYXNzIFdlYlVSTDsKIGNs
YXNzIFdlYlZpZXc7CiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwogCkBA
IC00Niw2ICs0NiwyMyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgV2ViVmVjdG9yOwog
Ly8gd2hpY2ggY29udGFpbiBhbGwgcmVzb3VyY2UgbGlua3MgdGhhdCBoYXZlIGxvY2FsIGNvcHku
CiBjbGFzcyBXZWJQYWdlU2VyaWFsaXplciB7CiBwdWJsaWM6CisgICAgc3RydWN0IFJlc291cmNl
IHsKKyAgICAgICAgV2ViVVJMIHVybDsKKyAgICAgICAgV2ViQ1N0cmluZyBtaW1lVHlwZTsKKyAg
ICAgICAgV2ViQ1N0cmluZyBkYXRhOworICAgIH07CisKKyAgICAvLyBTZXJpYWxpemVzIGFsbCB0
aGUgZnJhbWVzIGZyb20gdGhlIFdlYlZpZXcsIHJldHJpZXZlcyB0aGUgcGFnZSdzCisgICAgLy8g
cmVzb3VyY2VzIChzdWNoIGFzIGltYWdlcyBhbmQgQ1NTKSBhbmQgYWRkcyB0aGVtIHRvIHRoZSBw
YXNzZWQgdmVjdG9yLgorICAgIC8vIFRoZSBmaXJzdCByZXNvdXJjZSBpbiB0aGF0IHZlY3RvciBp
cyB0aGUgdG9wIGZyYW1lIGNvbnRlbnRzLgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGFsc28gc3Ry
aXBzLW91dCBhbnkgc2NyaXB0IHRhZyBvciBsaW5rIHRvIEphdmFTY3JpcHQuCisgICAgV0VCS0lU
X0FQSSBzdGF0aWMgdm9pZCBzZXJpYWxpemUoV2ViVmlldyosIFdlYlZlY3RvcjxSZXNvdXJjZT4q
KTsKKworICAgIC8vIElNUE9SVEFOVDoKKyAgICAvLyBUaGUgQVBJIGJlbG93IGlzIGFuIG9sZGVy
IGltcGxlbWVudGF0aW9uIG9mIGEgcGFnZXNlcmlhbGl6YXRpb24gdGhhdAorICAgIC8vIHdpbGwg
YmUgcmVtb3ZlZCBzb29uLgorCisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmluZCBvdXQg
YWxsIGZyYW1lcyBhbmQgc2VyaWFsaXplIHRoZW0gdG8gSFRNTCBkYXRhLgogICAgIC8vIFdlIGhh
dmUgYSBkYXRhIGJ1ZmZlciB0byB0ZW1wb3Jhcnkgc2F2aW5nIGdlbmVyYXRlZCBodG1sIGRhdGEu
IFdlIHdpbGwKICAgICAvLyBzZXF1ZW50aWFsbHkgY2FsbCBXZWJQYWdlU2VyaWF6bGllckNsaWVu
dCBvbmNlIHRoZSBkYXRhIGJ1ZmZlciBpcyBmdWxsLgpAQCAtNjQsOSArODEsOSBAQCBwdWJsaWM6
CiAgICAgLy8gc2F2ZWQgbGlua3MsIHdoaWNoIG1hdGNoZWQgd2l0aCB2ZWN0b3I6bGlua3Mgb25l
IGJ5IG9uZS4KICAgICAvLyBUaGUgcGFyYW1ldGVyIGxvY2FsRGlyZWN0b3J5TmFtZSBpcyByZWxh
dGl2ZSBwYXRoIG9mIGRpcmVjdG9yeSB3aGljaAogICAgIC8vIGNvbnRhaW4gYWxsIHNhdmVkIGF1
eGlsaWFyeSBmaWxlcyBpbmNsdWRlZCBhbGwgc3ViIGZyYW1lcyBhbmQgcmVzb3VyY2VzLgotICAg
IFdFQktJVF9BUEkgc3RhdGljIGJvb2wgc2VyaWFsaXplKFdlYkZyYW1lKiBmcmFtZSwKKyAgICBX
RUJLSVRfQVBJIHN0YXRpYyBib29sIHNlcmlhbGl6ZShXZWJGcmFtZSosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJQYWdlU2VyaWFsaXplckNsaWVu
dCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgV2ViVmVjdG9y
PFdlYlVSTD4mIGxpbmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiBsb2NhbFBhdGhzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFdlYlN0cmluZyYgbG9jYWxEaXJlY3RvcnlOYW1lKTsK
QEAgLTg1LDcgKzEwMiw3IEBAIHB1YmxpYzoKICAgICAvLyBHZW5lcmF0ZSB0aGUgTUVUQSBmb3Ig
Y2hhcnNldCBkZWNsYXJhdGlvbi4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJTdHJpbmcgZ2Vu
ZXJhdGVNZXRhQ2hhcnNldERlY2xhcmF0aW9uKGNvbnN0IFdlYlN0cmluZyYgY2hhcnNldCk7CiAg
ICAgLy8gR2VuZXJhdGUgdGhlIE1PVFcgZGVjbGFyYXRpb24uCi0gICAgV0VCS0lUX0FQSSBzdGF0
aWMgV2ViU3RyaW5nIGdlbmVyYXRlTWFya09mVGhlV2ViRGVjbGFyYXRpb24oY29uc3QgV2ViVVJM
JiB1cmwpOworICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmluZyBnZW5lcmF0ZU1hcmtPZlRo
ZVdlYkRlY2xhcmF0aW9uKGNvbnN0IFdlYlVSTCYpOwogICAgIC8vIEdlbmVyYXRlIHRoZSBkZWZh
dWx0IGJhc2UgdGFnIGRlY2xhcmF0aW9uLgogICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYlN0cmlu
ZyBnZW5lcmF0ZUJhc2VUYWdEZWNsYXJhdGlvbihjb25zdCBXZWJTdHJpbmcmIGJhc2VUYXJnZXQp
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJp
YWxpemVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlBhZ2VTZXJpYWxpemVy
LmNwcAppbmRleCBjOGM3NTI5N2Y0MmQ3OGI4OWZlNzBkZDlmOTQwMDEzMzdmOWZjZTk5Li4yMzJl
MjExNjAxNTljODg2ZDhlNGVkMTQwMDg0YzZiNWNmNzMxZTUxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJQYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0zOSw2ICszOSw3IEBA
CiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgog
I2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlU2VyaWFsaXplci5oIgogI2luY2x1ZGUg
IlZlY3Rvci5oIgogCiAjaW5jbHVkZSAiV2ViQ1N0cmluZy5oIgpAQCAtNTAsNiArNTEsNyBAQAog
I2luY2x1ZGUgIldlYlVSTC5oIgogI2luY2x1ZGUgIldlYlZlY3Rvci5oIgogI2luY2x1ZGUgIldl
YlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgogCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KIApAQCAtMTc5LDYgKzE4MSwyNSBAQCB2b2lkIHJldHJpZXZl
UmVzb3VyY2VzRm9yRnJhbWUoRnJhbWUqIGZyYW1lLAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAor
dm9pZCBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKFdlYlZpZXcqIHZpZXcsIFdlYlZlY3Rv
cjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+KiByZXNvdXJjZXNQYXJhbSkKK3sKKyAgICBW
ZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlPiByZXNvdXJjZXM7CisgICAgUGFnZVNlcmlh
bGl6ZXIgc2VyaWFsaXplcigmcmVzb3VyY2VzKTsKKyAgICBzZXJpYWxpemVyLnNlcmlhbGl6ZShz
dGF0aWNfY2FzdDxXZWJWaWV3SW1wbCo+KHZpZXcpLT5wYWdlKCkpOworCisgICAgVmVjdG9yPFJl
c291cmNlPiByZXN1bHQ7CisgICAgZm9yIChWZWN0b3I8UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNl
Pjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IHJlc291cmNlcy5iZWdpbigpOyBpdGVyICE9IHJlc291
cmNlcy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFJlc291cmNlIHJlc291cmNlOworICAgICAg
ICByZXNvdXJjZS51cmwgPSBpdGVyLT51cmw7CisgICAgICAgIHJlc291cmNlLm1pbWVUeXBlID0g
aXRlci0+bWltZVR5cGUuYXNjaWkoKTsKKyAgICAgICAgLy8gRklYTUU6IHdlIGFyZSBjb3B5aW5n
IGFsbCB0aGUgcmVzb3VyY2UgZGF0YSBoZXJlLiBJZGVhbHkgd2Ugd291bGQgaGF2ZSBhIFdlYlNo
YXJlZERhdGEoKS4KKyAgICAgICAgcmVzb3VyY2UuZGF0YSA9IFdlYkNTdHJpbmcoaXRlci0+ZGF0
YS0+ZGF0YSgpLCBpdGVyLT5kYXRhLT5zaXplKCkpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJl
c291cmNlKTsKKyAgICB9CisKKyAgICAqcmVzb3VyY2VzUGFyYW0gPSByZXN1bHQ7ICAgICAgICAg
Cit9CisKIGJvb2wgV2ViUGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6ZShXZWJGcmFtZSogZnJhbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZWN1cnNpdmUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViUGFnZVNlcmlhbGl6ZXJDbGllbnQqIGNs
aWVudCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFnZU5l
d1NlcmlhbGl6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViUGFn
ZU5ld1NlcmlhbGl6ZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNGIwZGFjZWJmMzAyZjdjNjRjMDY0
ZjlkM2FhODc0ZWZmMjQ2ZjI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJQYWdlTmV3U2VyaWFsaXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUNsaWVudC5oIgorI2luY2x1ZGUgIldlYlBhZ2VTZXJpYWxpemVyLmgiCisjaW5jbHVk
ZSAiV2ViU2NyaXB0U291cmNlLmgiCisjaW5jbHVkZSAiV2ViU2V0dGluZ3MuaCIKKyNpbmNsdWRl
ICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJVUkxSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJXZWJWaWV3Lmgi
CisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL2d1cmwuaD4KKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFRlc3RXZWJGcmFtZUNs
aWVudCA6IHB1YmxpYyBXZWJGcmFtZUNsaWVudCB7CitwdWJsaWM6CisgICAgVGVzdFdlYkZyYW1l
Q2xpZW50KCkgOiBtX3NjcmlwdEVuYWJsZWQoZmFsc2UpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBh
bGxvd1NjcmlwdChXZWJGcmFtZSosIGJvb2wgLyogZW5hYmxlZFBlclNldHRpbmdzICovKSB7IHJl
dHVybiBtX3NjcmlwdEVuYWJsZWQ7IH0KKyAgICBib29sIG1fc2NyaXB0RW5hYmxlZDsKK307CisK
K2NsYXNzIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0IDogcHVibGljIHRlc3Rpbmc6OlRlc3Qgewor
cHVibGljOgorICAgIFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0KCkKKyAgICAgICAgOiBtX2h0bWxN
aW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2h0bWwiKSkKKyAgICAgICAgLCBtX3ho
dG1sTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiYXBwbGljYXRpb24veGh0bWwreG1sIikp
CisgICAgICAgICwgbV9jc3NNaW1lVHlwZShXZWJTdHJpbmc6OmZyb21VVEY4KCJ0ZXh0L2NzcyIp
KQorICAgICAgICAsIG1fcG5nTWltZVR5cGUoV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1hZ2UvcG5n
IikpCisgICAgeworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBTZXRVcCgp
CisgICAgeworICAgICAgICAvLyBDcmVhdGUgYW5kIGluaXRpYWxpemUgdGhlIFdlYlZpZXcuCisg
ICAgICAgIG1fd2ViVmlldyA9IFdlYlZpZXc6OmNyZWF0ZSgwKTsKKworICAgICAgICAvLyBXZSB3
YW50IHRoZSBpbWFnZXMgdG8gbG9hZC4KKyAgICAgICAgV2ViU2V0dGluZ3MqIHNldHRpbmdzID0g
bV93ZWJWaWV3LT5zZXR0aW5ncygpOworICAgICAgICBzZXR0aW5ncy0+c2V0SW1hZ2VzRW5hYmxl
ZCh0cnVlKTsKKyAgICAgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0
cnVlKTsKKworICAgICAgICBtX3dlYlZpZXctPmluaXRpYWxpemVNYWluRnJhbWUoJm1fd2ViRnJh
bWVDbGllbnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBUZWFyRG93bigpCisgICAgewor
ICAgICAgICB3ZWJraXRfc3VwcG9ydDo6VW5yZWdpc3RlckFsbE1vY2tlZFVSTHMoKTsKKyAgICAg
ICAgbV93ZWJWaWV3LT5jbG9zZSgpOworICAgIH0KKworICAgIHZvaWQgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJTdHJpbmcmIGZpbGVOYW1lLCBjb25z
dCBXZWJTdHJpbmcmIG1pbWVUeXBlKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVzcG9uc2UgcmVz
cG9uc2U7CisgICAgICAgIHJlc3BvbnNlLmluaXRpYWxpemUoKTsKKyAgICAgICAgcmVzcG9uc2Uu
c2V0TUlNRVR5cGUobWltZVR5cGUpOworICAgICAgICByZXNwb25zZS5zZXRIVFRQU3RhdHVzQ29k
ZSgyMDApOworICAgICAgICBzdGQ6OnN0cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpH
ZXRXZWJLaXRSb290RGlyKCkudXRmOCgpOworICAgICAgICBmaWxlUGF0aC5hcHBlbmQoIi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvIik7CisgICAgICAg
IGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZS51dGY4KCkpOworICAgICAgICB3ZWJraXRfc3VwcG9y
dDo6UmVnaXN0ZXJNb2NrZWRVUkwodXJsLCByZXNwb25zZSwgV2ViU3RyaW5nOjpmcm9tVVRGOChm
aWxlUGF0aCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZFVSTEluVG9wRnJhbWUoY29uc3QgR1VS
TCYgdXJsKQorICAgIHsKKyAgICAgICAgV2ViVVJMUmVxdWVzdCB1cmxSZXF1ZXN0OworICAgICAg
ICB1cmxSZXF1ZXN0LmluaXRpYWxpemUoKTsKKyAgICAgICAgdXJsUmVxdWVzdC5zZXRVUkwoV2Vi
VVJMKHVybCkpOworICAgICAgICBtX3dlYlZpZXctPm1haW5GcmFtZSgpLT5sb2FkUmVxdWVzdCh1
cmxSZXF1ZXN0KTsKKyAgICAgICAgLy8gTWFrZSBzdXJlIGFueSBwZW5kaW5nIHJlcXVlc3QgZ2V0
IHNlcnZlZC4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlNlcnZlQXN5bmNocm9ub3VzTW9ja2Vk
UmVxdWVzdHMoKTsKKyAgICAgICAgLy8gU29tZSByZXF1ZXN0cyBnZXQgZGVsYXllZCwgcnVuIHRo
ZSB0aW1lci4KKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bkFsbFBlbmRpbmdNZXNzYWdlcygp
OworICAgICAgICAvLyBTZXJ2ZXIgdGhlIGRlbGF5ZWQgcmVzb3VyY2VzLgorICAgICAgICB3ZWJr
aXRfc3VwcG9ydDo6U2VydmVBc3luY2hyb25vdXNNb2NrZWRSZXF1ZXN0cygpOworICAgIH0KKwor
ICAgIHZvaWQgZW5hYmxlSlMoKQorICAgIHsKKyAgICAgICAgbV93ZWJGcmFtZUNsaWVudC5tX3Nj
cmlwdEVuYWJsZWQgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgcnVuT25Mb2FkKCkKKyAgICB7
CisgICAgICAgIG1fd2ViVmlldy0+bWFpbkZyYW1lKCktPmV4ZWN1dGVTY3JpcHQoV2ViU2NyaXB0
U291cmNlKFdlYlN0cmluZzo6ZnJvbVVURjgoIm9uTG9hZCgpIikpKTsKKyAgICB9CisKKyAgICBj
b25zdCBXZWJTdHJpbmcmIGh0bWxNaW1lVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1faHRtbE1pbWVU
eXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiB4aHRtbE1pbWVUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV94aHRtbE1pbWVUeXBlOyB9CisgICAgY29uc3QgV2ViU3RyaW5nJiBjc3NNaW1lVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3NzTWltZVR5cGU7IH0KKyAgICBjb25zdCBXZWJTdHJpbmcmIHBu
Z01pbWVUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wbmdNaW1lVHlwZTsgfQorICAgIAorICAgIHN0
YXRpYyBib29sIHJlc291cmNlVmVjdG9yQ29udGFpbnMoY29uc3QgV2ViVmVjdG9yPFdlYlBhZ2VT
ZXJpYWxpemVyOjpSZXNvdXJjZT4mIHJlc291cmNlcywgY2hhciogdXJsLCBjaGFyKiBtaW1lVHlw
ZSkKKyAgICB7CisgICAgICAgIFdlYlVSTCB3ZWJVUkwgPSBXZWJVUkwoR1VSTCh1cmwpKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXNvdXJjZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgIGNvbnN0IFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZSYgcmVzb3VyY2UgPSBy
ZXNvdXJjZXNbaV07CisgICAgICAgICAgICBpZiAocmVzb3VyY2UudXJsID09IHdlYlVSTCAmJiAh
cmVzb3VyY2UuZGF0YS5pc0VtcHR5KCkgJiYgIXJlc291cmNlLm1pbWVUeXBlLmNvbXBhcmUoV2Vi
Q1N0cmluZyhtaW1lVHlwZSkpKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgV2ViVmlldyogbV93
ZWJWaWV3OworCitwcml2YXRlOgorICAgIFdlYlN0cmluZyBtX2h0bWxNaW1lVHlwZTsKKyAgICBX
ZWJTdHJpbmcgbV94aHRtbE1pbWVUeXBlOworICAgIFdlYlN0cmluZyBtX2Nzc01pbWVUeXBlOwor
ICAgIFdlYlN0cmluZyBtX3BuZ01pbWVUeXBlOworICAgIFRlc3RXZWJGcmFtZUNsaWVudCBtX3dl
YkZyYW1lQ2xpZW50OworfTsKKworLy8gVGVzdHMgdGhhdCBhIHBhZ2Ugd2l0aCByZXNvdXJjZXMg
YW5kIHN1Yi1mcmFtZSBpcyByZXBvcnRlZCB3aXRoIGFsbCBpdHMgcmVzb3VyY2VzLgorLy8gRklY
TUU6IHJlZW5hYmxlIHRoZXNlIHRlc3RzIG9uY2UgdGhlIENocm9taXVtIHBhcnQgb2YgdGhlIHRl
c3Rfd2Via2l0X2NsaWVudCBoYXZlIGxhbmRlZC4KK1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXpl
VGVzdCwgRElTQUJMRURfUGFnZVdpdGhGcmFtZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1v
Y2tlZCBmcmFtZXMuCisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50
ZXN0LmNvbSIpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZCh0b3BGcmFtZVVSTCwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgidG9wX2ZyYW1lLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAgIHJl
Z2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2lmcmFtZS5odG1s
IiksIFdlYlN0cmluZzo6ZnJvbVVURjgoImlmcmFtZS5odG1sIiksIGh0bWxNaW1lVHlwZSgpKTsK
KyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9pZnJh
bWUyLmh0bWwiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaWZyYW1lMi5odG1sIiksIGh0bWxNaW1l
VHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0
LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgicmVkX2JhY2tn
cm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChH
VVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2dyZWVuX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoImdyZWVuX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFj
a2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIp
LCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGxvYWRVUkxJblRvcEZyYW1lKHRvcEZyYW1lVVJMKTsK
KworICAgIFdlYlZlY3RvcjxXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2U+IHJlc291cmNlczsK
KyAgICBXZWJQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplKG1fd2ViVmlldywgJnJlc291cmNlcyk7
CisgICAgQVNTRVJUX0ZBTFNFKHJlc291cmNlcy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIFRo
ZSBmaXJzdCByZXNvdXJjZSBzaG91bGQgYmUgdGhlIG1haW4tZnJhbWUuCisgICAgY29uc3QgV2Vi
UGFnZVNlcmlhbGl6ZXI6OlJlc291cmNlJiByZXNvdXJjZSA9IHJlc291cmNlc1swXTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZS51cmwgPT0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbSIpKTsK
KyAgICBFWFBFQ1RfRVEoMCwgcmVzb3VyY2UubWltZVR5cGUuY29tcGFyZShXZWJDU3RyaW5nKCJ0
ZXh0L2h0bWwiKSkpOworICAgIEVYUEVDVF9GQUxTRShyZXNvdXJjZS5kYXRhLmlzRW1wdHkoKSk7
CisKKyAgICBFWFBFQ1RfRVEoNiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNob3VsZCBi
ZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMo
cmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9yZWRfYmFja2dyb3VuZC5wbmciLCAiaW1h
Z2UvcG5nIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3Vy
Y2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9ncmVlbl9iYWNrZ3JvdW5kLnBuZyIsICJpbWFnZS9w
bmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMs
ICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikp
OworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0
cDovL3d3dy50ZXN0LmNvbS9pZnJhbWUuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7CisgICAgRVhQRUNU
X1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3Qu
Y29tL2lmcmFtZTIuaHRtbCIsICJ0ZXh0L2h0bWwiKSk7Cit9CisKKy8vIFRlc3QgdGhhdCB3aGVu
IHNlcmlhbGl6aW5nIGEgcGFnZSwgYWxsIENTUyByZXNvdXJjZXMgYXJlIHJlcG9ydGVkLCBpbmNs
dWRpbmcgdXJsKCkncworLy8gYW5kIGltcG9ydHMgYW5kIGxpbmtzLiBOb3RlIHRoYXQgd2UgZG9u
J3QgdGVzdCB0aGUgcmVzb3VyY2VzIGNvbnRlbnRzLCB3ZSBvbmx5IG1ha2Ugc3VyZQorLy8gdGhl
eSBhcmUgYWxsIHJlcG9ydGVkIHdpdGggdGhlIHJpZ2h0IG1pbWUgdHlwZSBhbmQgdGhhdCB0aGV5
IGNvbnRhaW4gc29tZSBkYXRhLgorVEVTVF9GKFdlYlBhZ2VOZXdTZXJpYWxpemVUZXN0LCBESVNB
QkxFRF9DU1NSZXNvdXJjZXMpCit7CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBh
bmQgbG9hZCBpdC4KKyAgICBXZWJVUkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tIik7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJp
bmc6OmZyb21VVEY4KCJjc3NfdGVzdF9wYWdlLmh0bWwiKSwgaHRtbE1pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL2xpbmtfc3R5
bGVzLmNzcyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJsaW5rX3N0eWxlcy5jc3MiKSwgY3NzTWlt
ZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVz
dC5jb20vaW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgi
aW1wb3J0X3N0eWxlX2Zyb21fbGluay5jc3MiKSwgY3NzTWltZVR5cGUoKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vaW1wb3J0X3N0eWxlcy5j
c3MiKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgiaW1wb3J0X3N0eWxlcy5jc3MiKSwgY3NzTWltZVR5
cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5j
b20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmluZzo6ZnJvbVVURjgoInJlZF9iYWNrZ3Jv
dW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VS
TCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5n
Ojpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAg
IHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL3llbGxvd19i
YWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJ5ZWxsb3dfYmFja2dyb3VuZC5w
bmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0
dHA6Ly93d3cudGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9t
VVRGOCgiZ3JlZW5fYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vYmx1ZV9iYWNrZ3JvdW5k
LnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibHVlX2JhY2tncm91bmQucG5nIiksIHBuZ01p
bWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRl
c3QuY29tL3B1cnBsZV9iYWNrZ3JvdW5kLnBuZyIpLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJwdXJw
bGVfYmFja2dyb3VuZC5wbmciKSwgcG5nTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRV
UkxMb2FkKEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vdWwtZG90LnBuZyIpLCBXZWJTdHJpbmc6
OmZyb21VVEY4KCJ1bC1kb3QucG5nIiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9j
a2VkVVJMTG9hZChHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciKSwgV2ViU3Ry
aW5nOjpmcm9tVVRGOCgib2wtZG90LnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJs
ZUpTKCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9h
ZCgpOworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3Vy
Y2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3Vy
Y2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAg
Ly8gVGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25z
dCBXZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOwor
ICAgIEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29t
IikpOworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJp
bmcoInRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0
eSgpKTsKKworICAgIEVYUEVDVF9FUSgxMiwgcmVzb3VyY2VzLnNpemUoKSk7IC8vIFRoZXJlIHNo
b3VsZCBiZSBubyBkdXBsaWNhdGVzLgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29u
dGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0LmNvbS9saW5rX3N0eWxlcy5jc3MiLCAi
dGV4dC9jc3MiKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2ltcG9ydF9zdHlsZXMuY3NzIiwgInRleHQvY3Nz
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
aHR0cDovL3d3dy50ZXN0LmNvbS9pbXBvcnRfc3R5bGVfZnJvbV9saW5rLmNzcyIsICJ0ZXh0L2Nz
cyIpKTsKKyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywg
Imh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsK
KyAgICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6
Ly93d3cudGVzdC5jb20vb3JhbmdlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAg
ICBFWFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93
d3cudGVzdC5jb20veWVsbG93X2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBF
WFBFQ1RfVFJVRShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cu
dGVzdC5jb20vZ3JlZW5fYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5nIikpOworICAgIEVYUEVD
VF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAiaHR0cDovL3d3dy50ZXN0
LmNvbS9ibHVlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJV
RShyZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20v
cHVycGxlX2JhY2tncm91bmQucG5nIiwgImltYWdlL3BuZyIpKTsKKyAgICBFWFBFQ1RfVFJVRShy
ZXNvdXJjZVZlY3RvckNvbnRhaW5zKHJlc291cmNlcywgImh0dHA6Ly93d3cudGVzdC5jb20vdWwt
ZG90LnBuZyIsICJpbWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JD
b250YWlucyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29sLWRvdC5wbmciLCAiaW1h
Z2UvcG5nIikpOworfQorCisvLyBUZXN0cyB0aGF0IHdoZW4gc2VyaWFsaXppbmcgYSBwYWdlIHdp
dGggYmxhbmsgZnJhbWVzIHRoZXNlIGFyZSByZXBvcnRlZCB3aXRoIHRoZWlyIHJlc291cmNlcy4K
K1RFU1RfRihXZWJQYWdlTmV3U2VyaWFsaXplVGVzdCwgRElTQUJMRURfQmxhbmtGcmFtZXMpCit7
CisgICAgLy8gUmVnaXN0ZXIgdGhlIG1vY2tlZCBmcmFtZSBhbmQgbG9hZCBpdC4KKyAgICBXZWJV
UkwgdG9wRnJhbWVVUkwgPSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIik7CisgICAgcmVnaXN0
ZXJNb2NrZWRVUkxMb2FkKHRvcEZyYW1lVVJMLCBXZWJTdHJpbmc6OmZyb21VVEY4KCJibGFua19m
cmFtZXMuaHRtbCIpLCBodG1sTWltZVR5cGUoKSk7CisgICAgcmVnaXN0ZXJNb2NrZWRVUkxMb2Fk
KEdVUkwoImh0dHA6Ly93d3cudGVzdC5jb20vcmVkX2JhY2tncm91bmQucG5nIiksIFdlYlN0cmlu
Zzo6ZnJvbVVURjgoInJlZF9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKyAgICBy
ZWdpc3Rlck1vY2tlZFVSTExvYWQoR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9vcmFuZ2VfYmFj
a2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRGOCgib3JhbmdlX2JhY2tncm91bmQucG5n
IiksIHBuZ01pbWVUeXBlKCkpOworICAgIHJlZ2lzdGVyTW9ja2VkVVJMTG9hZChHVVJMKCJodHRw
Oi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciKSwgV2ViU3RyaW5nOjpmcm9tVVRG
OCgiYmx1ZV9iYWNrZ3JvdW5kLnBuZyIpLCBwbmdNaW1lVHlwZSgpKTsKKworICAgIGVuYWJsZUpT
KCk7CisgICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworICAgIHJ1bk9uTG9hZCgp
OworCisgICAgV2ViVmVjdG9yPFdlYlBhZ2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2Vz
OworICAgIFdlYlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2Vz
KTsKKyAgICBBU1NFUlRfRkFMU0UocmVzb3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8g
VGhlIGZpcnN0IHJlc291cmNlIHNob3VsZCBiZSB0aGUgbWFpbi1mcmFtZS4KKyAgICBjb25zdCBX
ZWJQYWdlU2VyaWFsaXplcjo6UmVzb3VyY2UmIHJlc291cmNlID0gcmVzb3VyY2VzWzBdOworICAg
IEVYUEVDVF9UUlVFKHJlc291cmNlLnVybCA9PSBHVVJMKCJodHRwOi8vd3d3LnRlc3QuY29tIikp
OworICAgIEVYUEVDVF9FUSgwLCByZXNvdXJjZS5taW1lVHlwZS5jb21wYXJlKFdlYkNTdHJpbmco
InRleHQvaHRtbCIpKSk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc291cmNlLmRhdGEuaXNFbXB0eSgp
KTsKKworICAgIEVYUEVDVF9FUSg3LCByZXNvdXJjZXMuc2l6ZSgpKTsgLy8gVGhlcmUgc2hvdWxk
IGJlIG5vIGR1cGxpY2F0ZXMuCisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlu
cyhyZXNvdXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL3JlZF9iYWNrZ3JvdW5kLnBuZyIsICJp
bWFnZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNv
dXJjZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL29yYW5nZV9iYWNrZ3JvdW5kLnBuZyIsICJpbWFn
ZS9wbmciKSk7CisgICAgRVhQRUNUX1RSVUUocmVzb3VyY2VWZWN0b3JDb250YWlucyhyZXNvdXJj
ZXMsICJodHRwOi8vd3d3LnRlc3QuY29tL2JsdWVfYmFja2dyb3VuZC5wbmciLCAiaW1hZ2UvcG5n
IikpOworICAgIC8vIFRoZSBibGFuayBmcmFtZXMgc2hvdWxkIGhhdmUgZ290IGEgbWFnaWMgVVJM
LgorICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3lj
aXd5ZzovL2ZyYW1lLzAiLCAidGV4dC9odG1sIikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNl
VmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAid3ljaXd5ZzovL2ZyYW1lLzEiLCAidGV4dC9odG1s
IikpOworICAgIEVYUEVDVF9UUlVFKHJlc291cmNlVmVjdG9yQ29udGFpbnMocmVzb3VyY2VzLCAi
d3ljaXd5ZzovL2ZyYW1lLzIiLCAidGV4dC9odG1sIikpOworfQorCitURVNUX0YoV2ViUGFnZU5l
d1NlcmlhbGl6ZVRlc3QsIERJU0FCTEVEX1NlcmlhbGl6ZVhNTEhhc1JpZ2h0RGVjbGFyYXRpb24p
Cit7CisgICAgV2ViVVJMIHRvcEZyYW1lVVJMID0gR1VSTCgiaHR0cDovL3d3dy50ZXN0LmNvbS9z
aW1wbGUueGh0bWwiKTsKKyAgICByZWdpc3Rlck1vY2tlZFVSTExvYWQodG9wRnJhbWVVUkwsIFdl
YlN0cmluZzo6ZnJvbVVURjgoInNpbXBsZS54aHRtbCIpLCB4aHRtbE1pbWVUeXBlKCkpOworCisg
ICAgbG9hZFVSTEluVG9wRnJhbWUodG9wRnJhbWVVUkwpOworCisgICAgV2ViVmVjdG9yPFdlYlBh
Z2VTZXJpYWxpemVyOjpSZXNvdXJjZT4gcmVzb3VyY2VzOworICAgIFdlYlBhZ2VTZXJpYWxpemVy
OjpzZXJpYWxpemUobV93ZWJWaWV3LCAmcmVzb3VyY2VzKTsKKyAgICBBU1NFUlRfRkFMU0UocmVz
b3VyY2VzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8gV2UgZXhwZWN0IG9ubHkgb25lIHJlc291
cmNlLCB0aGUgWE1MLgorICAgIEFTU0VSVF9FUSgxLCByZXNvdXJjZXMuc2l6ZSgpKTsKKyAgICBz
dGQ6OnN0cmluZyB4bWwgPSByZXNvdXJjZXNbMF0uZGF0YTsKKworICAgIC8vIFdlIHNob3VsZCBo
YXZlIG9uZSBhbmQgb25seSBvbmUgaW5zdGFuY2Ugb2YgdGhlIFhNTCBkZWNsYXJhdGlvbi4KKyAg
ICBzaXplX3QgcG9zID0geG1sLmZpbmQoIjw/eG1sIHZlcnNpb249Iik7CisgICAgQVNTRVJUX1RS
VUUocG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKworICAgIHBvcyA9IHhtbC5maW5kKCI8P3ht
bCB2ZXJzaW9uPSIsIHBvcyArIDEpOworICAgIEFTU0VSVF9UUlVFKHBvcyA9PSBzdGQ6OnN0cmlu
Zzo6bnBvcyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9ibGFua19mcmFtZXMuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZGZiMjA0OTljNDMyNjNjYjVjMjQ2ZmU3ZTE5MjU0NDJjZDcxNDM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxp
emVyL2JsYW5rX2ZyYW1lcy5odG1sCkBAIC0wLDAgKzEsMzcgQEAKKzxodG1sPgorCis8c2NyaXB0
PgorICBmdW5jdGlvbiBvbmxvYWQoKSB7CisgICAgdmFyIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiaWZyYW1lIik7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJteURpdjEiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJhbWUuY29u
dGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJyPkFuIGlt
YWdlIDxpbWcgc3JjPSdibHVlX2JhY2tncm91bmQucG5nJy4+PGJyPjxiPlNvbWUgbW9yZSB0ZXh0
PC9iPiIKKworICAgIGZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Cisg
ICAgZGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm15RGl2MiIpOworICAgIGRpdi5hcHBl
bmRDaGlsZChmcmFtZSk7CisKKyAgICBmcmFtZS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhU
TUwgKz0KKyAgICAgICJTb21lIHRleHQ8YnI+QW4gaW1hZ2UgPGltZyBzcmM9J3JlZF9iYWNrZ3Jv
dW5kLnBuZycuPjxicj48Yj5Tb21lIG1vcmUgdGV4dDwvYj4iCisKKyAgICBmcmFtZSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGRpdiA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJteURpdjMiKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQoZnJhbWUpOworCisgICAgZnJh
bWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MICs9CisgICAgICAiU29tZSB0ZXh0PGJy
PkFuIGltYWdlIDxpbWcgc3JjPSdvcmFuZ2VfYmFja2dyb3VuZC5wbmcnLj48YnI+PGI+U29tZSBt
b3JlIHRleHQ8L2I+IgorCisgIH0KKyAgCis8L3NjcmlwdD4KKworPGJvZHkgb25sb2FkPSJvbmxv
YWQoKSI+CisgIFRoaXMgcGFnZSBjcmVhdGVzIGVtcHR5IGlmcmFtZXMgYW5kIGFkZHMgY29udGVu
dCB0byB0aGVtIGR5bmFtaWNhbGx5Ljxicj48YnI+CisgIDxkaXYgaWQ9Im15RGl2MSI+PC9kaXY+
CisgIDxkaXYgaWQ9Im15RGl2MiI+PC9kaXY+CisgIDxkaXYgaWQ9Im15RGl2MyI+PC9kaXY+Cis8
L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvZGF0YS9wYWdlc2VyaWFsaXplci9jc3NfdGVzdF9wYWdlLmh0bWwgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjI0NjM3ZjBmMDIyZDc1OWMwYWRjOWQyMDFiY2Y0MzE2MTQ2YmQwNDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlh
bGl6ZXIvY3NzX3Rlc3RfcGFnZS5odG1sCkBAIC0wLDAgKzEsMTEyIEBACis8aHRtbD4KKworPCEt
LSBUaGlzIHBhZ2UgaXMgdXNlZCB0byB0ZXN0IHRoYXQgQ1NTIHJlc291cmNlcyBhcmUgcmV0cmll
dmVkIGNvcnJlY3RseSBieSB0aGUKKyAgICAgV2ViUGFnZVNlcmlhbGl6ZXI6OmdlbmVyYXRlU25h
cHNob3QgbWV0aG9kCistLT4KKworPGhlYWQ+CisKKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlw
ZT0idGV4dC9jc3MiIGhyZWY9Imxpbmtfc3R5bGVzLmNzcyIgLz4KKworPHN0eWxlPgorQGltcG9y
dCB1cmwoJ2ltcG9ydF9zdHlsZXMuY3NzJyk7CisKK0Bmb250LWZhY2UgeworICBmb250LWZhbWls
eTogQ2h1bmtmaXZlOworICBzcmM6IHVybCgnQ2h1bmtmaXZlLm90ZicpOworICBzcmM6IHVybCgn
Q2h1bmtmaXZlLXdlYmZvbnQuZW90KSBmb3JtYXQoJ2VvdCcpOworfQorCisjY2h1bmtmaXZlRGl2
IHsKKyAgZm9udC1mYW1pbHk6IENodW5rZml2ZSwgc2Fucy1zZXJpZjsKK30KKzwvc3R5bGU+CisK
KzxzdHlsZT4KKyNkaXZCbHVlIHsKKyAgYmFja2dyb3VuZC1pbWFnZTp1cmwoJ2JsdWVfYmFja2dy
b3VuZC5wbmcnKTsKK30KKwordWwgeworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ3VsLWRvdC5w
bmcnKTsKK30KKworb2wgeworICBsaXN0LXN0eWxlLWltYWdlOiB1cmwoJ29sLWRvdC5wbmcnKTsK
K30KKworPC9zdHlsZT4KKworPHNjcmlwdD4KKy8vIER5bmFtaWNhbGx5IGNyZWF0ZXMgYSBDU1Mg
c3R5bGUuCitmdW5jdGlvbiBvbkxvYWQoKSB7CisgIHZhciBzdHlsZVRleHQgPSAiI2RpdlB1cnBs
ZSB7YmFja2dyb3VuZC1pbWFnZTp1cmwoJ3B1cnBsZV9iYWNrZ3JvdW5kLnBuZycpfSI7CisgIHZh
ciBkaXYgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGl2UHVycGxlJyk7CisgIHZhciBzdHls
ZU5vZGU9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgIHN0eWxlTm9kZS50eXBl
PSAndGV4dC9jc3MnOworICBzdHlsZU5vZGUubWVkaWE9ICdzY3JlZW4nOworICBzdHlsZU5vZGUu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoc3R5bGVUZXh0KSk7CisgIGRpdi5h
cHBlbmRDaGlsZChzdHlsZU5vZGUpOworfQorPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9u
bG9hZD0ib25Mb2FkKCkiPgorCis8IS0tIFRleHQgdXNpbmcgYW4gaW1wb3J0ZWQgZm9udCAtLT4K
KzxkaXYgaWQ9J2NodW5rZml2ZURpdic+VGhpcyB0ZXh0IHVzZXMgdGhlIENodW5rZml2ZSBmb250
LjwvZGl2PgorCis8IS0tIFN0eWxlIGlzIGluIGxpbmtlZCBmaWxlIC0tPgorPGRpdiBpZD0nZGl2
UmVkJz4KK1RoaXMgZGl2IGhhcyBhIHJlZCBpbWFnZSBhcyBpdHMgYmFja2dyb3VuZC4KKzwvZGl2
PgorCis8IS0tIFN0eWxlIGlzIGluIGEgZmlsZSBpbXBvcnRlZCBpbiB0aGUgbGlua2VkIGZpbGUg
LS0+Cis8ZGl2IGlkPSdkaXZPcmFuZ2UnPgorVGhpcyBkaXYgaGFzIGEgb3JhbmdlIGltYWdlIGFz
IGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwhLS0gU3R5bGUgaXMgaW4gYW4gaW1wb3J0ZWQg
ZmlsZSAtLT4KKzxkaXYgaWQ9J2RpdlllbGxvdyc+CitUaGlzIGRpdiBoYXMgYSB5ZWxsb3cgaW1h
Z2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpcyBkZWZpbmVkIGlu
IGEgc3R5bGUgc2VjdGlvbiBpbiB0aGUgaGVhZGVyIC0tPgorPGRpdiBpZD0nZGl2Qmx1ZSc+CitU
aGlzIGRpdiBoYXMgYSBibHVlIGltYWdlIGFzIGl0cyBiYWNrZ3JvdW5kLgorPC9kaXY+CisKKzwh
LS0gU3R5bGUgaXMgaW5saW5lZCAtLT4KKzxkaXYgaWQ9J2RpdkdyZWVuJyBzdHlsZT0iYmFja2dy
b3VuZC1pbWFnZTp1cmwoJ2dyZWVuX2JhY2tncm91bmQucG5nJykiPgorVGhpcyBkaXYgaGFzIGEg
Z3JlZW4gaW1hZ2UgYXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworPCEtLSBTdHlsZSBpZCBk
eW5hbWljYWxseSBnZW5lcmF0ZWQgd2l0aCBKYXZhU2NyaXB0IGluIHRoZSBvbmxvYWQgaGFuZGxl
ciAtLT4KKzxkaXYgaWQ9J2RpdlB1cnBsZSc+CitUaGlzIGRpdiBoYXMgYSBwdXJwbGUgaW1hZ2Ug
YXMgaXRzIGJhY2tncm91bmQuCis8L2Rpdj4KKworVW5vcmRlcmVkIGxpc3Q6PGJyPgorPHVsPgor
ICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5SZWQ8L2xpPgorICA8bGk+WWVsbG93PC9saT4KKyAgPGxp
PkJsdWU8L2xpPgorICA8bGk+R3JlZW48L2xpPgorICA8bGk+UmVkPC9saT4KKzwvdWw+Cis8YnI+
CisKK09yZGVyZWQgbGlzdDo8YnI+Cis8b2w+CisgIDxsaT5CbHVlPC9saT4KKyAgPGxpPlJlZDwv
bGk+CisgIDxsaT5ZZWxsb3c8L2xpPgorICA8bGk+Qmx1ZTwvbGk+CisgIDxsaT5HcmVlbjwvbGk+
CisgIDxsaT5SZWQ8L2xpPgorPC9vbD4KKworPC9ib2R5PgorCis8L2h0bWw+CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaWZyYW1l
Lmh0bWwgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIv
aWZyYW1lLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjVlZGJkYzE4OTFjZjFiNmY5NjdiN2QzNzYxZTIwNzMw
ZDgzOWU2YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
ZGF0YS9wYWdlc2VyaWFsaXplci9pZnJhbWUuaHRtbApAQCAtMCwwICsxLDkgQEAKKzxodG1sPgor
PGJvZHk+CisKKzxpbWcgc3JjPSJibHVlX2JhY2tncm91bmQucG5nIi8+Cis8aW1nIHNyYz0icmVk
X2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lmcmFtZTIuaHRt
bCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pZnJh
bWUyLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQwNDRiMmVjY2JiN2Y5ZTNmMGI1ZGZjYTg2ODhmMmVkZmNm
OTc4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXplci9pZnJhbWUyLmh0bWwKQEAgLTAsMCArMSw5IEBACis8aHRtbD4KKzxi
b2R5PgorCis8aW1nIHNyYz0iZ3JlZW5fYmFja2dyb3VuZC5wbmciLz4KKzxpbWcgc3JjPSJibHVl
X2JhY2tncm91bmQucG5nIi8+CisKKzwvYm9keT4KKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2ltcG9ydF9zdHls
ZV9mcm9tX2xpbmsuY3NzIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2Vz
ZXJpYWxpemVyL2ltcG9ydF9zdHlsZV9mcm9tX2xpbmsuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjgzZTU4
MWY0NmViNWVlZmIzNzY0NzE0MzBlOGNmYjJlYTZiZDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvcGFnZXNlcmlhbGl6ZXIvaW1wb3J0X3N0eWxl
X2Zyb21fbGluay5jc3MKQEAgLTAsMCArMSwzIEBACisjZGl2T3JhbmdlIHsKKyAgYmFja2dyb3Vu
ZC1pbWFnZTp1cmwoJ29yYW5nZV9iYWNrZ3JvdW5kLnBuZycpOworfQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9pbXBvcnRfc3R5bGVzLmNzcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mNGM3ZjRkNWY0YTk5YzdhZTZlNmMyNTRhODk2M2U0MmE5YTg0YmEyCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL2lt
cG9ydF9zdHlsZXMuY3NzCkBAIC0wLDAgKzEsMyBAQAorI2RpdlllbGxvdyB7CisgIGJhY2tncm91
bmQtaW1hZ2U6IHVybCgneWVsbG93X2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9k
YXRhL3BhZ2VzZXJpYWxpemVyL2xpbmtfc3R5bGVzLmNzcyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5rX3N0eWxlcy5jc3MKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZjY3ZmI5OWE5YjBkYTA5YmVlMmMyNGVjODM1NWExN2U0MzA3YTYyNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9saW5r
X3N0eWxlcy5jc3MKQEAgLTAsMCArMSw1IEBACitAaW1wb3J0IHVybCgnaW1wb3J0X3N0eWxlX2Zy
b21fbGluay5jc3MnKTsKKworI2RpdlJlZCB7CisgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgncmVk
X2JhY2tncm91bmQucG5nJyk7Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3BhZ2VzZXJpYWxpemVyL3Np
bXBsZS54aHRtbCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFs
aXplci9zaW1wbGUueGh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWYxMmRmNjM1Njg2YzZmMWMxYzVlZGI0YmRk
NTczNTIzZjgwMGFmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci9zaW1wbGUueGh0bWwKQEAgLTAsMCArMSwxMCBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KKzwhRE9DVFlQRSBodG1sIFBV
QkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICAiaHR0cDovL3d3dy53My5v
cmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cis8aHRtbCB4bWxucz0iaHR0cDov
L3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIj4KKyA8aGVhZD4KKyA8dGl0bGU+
WEhUTUwgMS4wIFN0cmljdCBFeGFtcGxlPC90aXRsZT4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICA8
cD5IZWxsbyEgPC9wPgorIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUuaHRtbCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9wYWdlc2VyaWFsaXplci90b3BfZnJhbWUu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yMzE4NTIzYWZhNGExYjA5ODY1YzQ0OTI4ZDM0YTdjMTFkMmY0MDJl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL3Bh
Z2VzZXJpYWxpemVyL3RvcF9mcmFtZS5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorPGJv
ZHk+CisKKzxpbWcgc3JjPSJyZWRfYmFja2dyb3VuZC5wbmciLz4KKworPGlmcmFtZSBzcmM9Imlm
cmFtZS5odG1sIj48L2lmcmFtZT4KKzxvYmplY3QgZGF0YT0iaWZyYW1lMi5odG1sIj48L29iamVj
dD4KKzxpZnJhbWUgc3JjPSJpZnJhbWUuaHRtbCI+PC9pZnJhbWU+CisKKzwvYm9keT4KKworPC9o
dG1sPgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>