<?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>45825</bug_id>
          
          <creation_ts>2010-09-15 10:37:34 -0700</creation_ts>
          <short_desc>Web Inspector: Factor out InspectorCSSAgent</short_desc>
          <delta_ts>2010-10-07 02:56:01 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46367</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>bweinstein</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>279612</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-09-15 10:37:34 -0700</bug_when>
    <thetext>Currently InspectorDOMAgent does a bit too much wrt CSS handling (using InspectorCSSStore which has become too bloated, too). The absolute majority of the CSS-related code should go into a new InspectorCSSAgent class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284362</commentid>
    <comment_count>1</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-09-24 07:13:30 -0700</bug_when>
    <thetext>CSS rule selector handling changes should be added in a bug 46367 patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286127</commentid>
    <comment_count>2</comment_count>
      <attachid>69032</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-09-28 02:07:14 -0700</bug_when>
    <thetext>Created attachment 69032
[PATCH] Suggested solution without disabled properties. Contains integrated bug 46367 patch until one is landed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286314</commentid>
    <comment_count>3</comment_count>
      <attachid>69063</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-09-28 09:57:20 -0700</bug_when>
    <thetext>Created attachment 69063
[PATCH] Refactored solution according to pfeldman&apos;s advice. No ChangeLogs, not ready for Mac - preliminary review only</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286780</commentid>
    <comment_count>4</comment_count>
      <attachid>69173</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-09-29 02:18:39 -0700</bug_when>
    <thetext>Created attachment 69173
[PATCH] The correct preliminary patch in place of the previous one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288324</commentid>
    <comment_count>5</comment_count>
      <attachid>69482</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-01 10:20:36 -0700</bug_when>
    <thetext>Created attachment 69482
[PATCH] Introduced InspectorStyleSheet variations to avoid multiple maps, as suggested by pfeldman</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288327</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-01 10:24:36 -0700</bug_when>
    <thetext>Attachment 69482 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorCSSAgent.h:141:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebCore/inspector/InspectorUtilities.cpp:37:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/InspectorCSSAgent.cpp:619:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
WebCore/inspector/InspectorCSSAgent.cpp:939:  Missing space after ,  [whitespace/comma] [3]
WebCore/inspector/InspectorCSSAgent.cpp:968:  Missing space after ,  [whitespace/comma] [3]
WebCore/inspector/InspectorCSSAgent.cpp:57:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:60:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:67:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:68:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:69:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:70:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
WebCore/inspector/InspectorCSSAgent.cpp:75:  Line contains invalid UTF-8 (or Unicode replacement character).  [readability/utf8] [5]
Total errors found: 12 in 25 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>288332</commentid>
    <comment_count>7</comment_count>
      <attachid>69484</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-01 10:29:19 -0700</bug_when>
    <thetext>Created attachment 69484
[PATCH] Preliminary patch style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288346</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-01 10:57:12 -0700</bug_when>
    <thetext>Attachment 69484 did not build on mac:
Build output: http://queues.webkit.org/results/4220039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288861</commentid>
    <comment_count>9</comment_count>
      <attachid>69484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-04 03:25:38 -0700</bug_when>
    <thetext>Comment on attachment 69484
[PATCH] Preliminary patch style fixed

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

Could you please submit a change with new InspectorStyleSheet and InspectorCSSAgent components. I believe rest if orthogonal to the change.

&gt; WebCore/inspector/InspectorCSSAgent.h:92
&gt; +class InspectorStyleSheet : public RefCounted&lt;InspectorStyleSheet&gt; {

InspectorStyleSheet should be defined in its own class.

&gt; WebCore/inspector/InspectorUtilities.h:50
&gt; +    static CSSStyleSheet* parentStyleSheet(StyleBase*);

CSS-specific utilities should belong to InspectorCSSAgent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288887</commentid>
    <comment_count>10</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-04 05:42:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 69484 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69484&amp;action=review
&gt; 
&gt; Could you please submit a change with new InspectorStyleSheet and InspectorCSSAgent components. I believe rest if orthogonal to the change.

Refactoring the change to only contain the InspectorStyleSheet and InspectorCSSAgent {cpp,h} files and changes for these to be included into all builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288892</commentid>
    <comment_count>11</comment_count>
      <attachid>69484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-04 05:56:18 -0700</bug_when>
    <thetext>Comment on attachment 69484
[PATCH] Preliminary patch style fixed

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

Some InspectorStyleSheet API notes.

&gt; WebCore/inspector/InspectorCSSAgent.h:67
&gt; +class ParsedStyleSheet {

Move this into InspectorStyleSheet.

&gt; WebCore/inspector/InspectorCSSAgent.h:69
&gt; +    typedef Vector&lt;RefPtr&lt;CSSStyleSourceData&gt; &gt; SourceData;

You should instead introduce CSSRuleSourceData that would own this style source data and operate on it.

&gt; WebCore/inspector/InspectorCSSAgent.h:72
&gt; +    CSSStyleSheet* cssStyleSheet() const { return m_styleSheetByParser; }

m_styleSheetByParser -&gt; m_parserOutput ?

&gt; WebCore/inspector/InspectorCSSAgent.h:79
&gt; +    bool ensureSourceData(Node* ownerNode);

I don&apos;t think ParsedStyleSheet should be node-aware.

&gt; WebCore/inspector/InspectorCSSAgent.h:94
&gt; +    static PassRefPtr&lt;InspectorStyleSheet&gt; create(const String&amp; id, CSSStyleSheet* liveStyleSheet)

liveStyleSheet -&gt; domStyleSheet?

&gt; WebCore/inspector/InspectorCSSAgent.h:102
&gt; +    virtual CSSStyleSheet* liveStyleSheet() const { return m_liveStyleSheet; }

domStyleSheet?

&gt; WebCore/inspector/InspectorCSSAgent.h:105
&gt; +    virtual bool setStyleText(CSSStyleDeclaration*, const String&amp;);

Where would you get CSSStyleDeclaration to pass in? Should you use style id instead?

&gt; WebCore/inspector/InspectorCSSAgent.h:106
&gt; +    virtual Document* ownerDocument() const;

I can&apos;t come up with the scenario where ownerDocument needs to be exposed.

&gt; WebCore/inspector/InspectorCSSAgent.h:107
&gt; +    virtual RefPtr&lt;CSSStyleSourceData&gt; styleSourceDataFor(CSSStyleDeclaration* style) const { return m_parsedStyleSheet.styleSourceDataAt(ruleIndexByStyle(style)); }

As we agreed, you should not expose CSSStyleSourceData.

&gt; WebCore/inspector/InspectorCSSAgent.h:108
&gt; +    virtual String fullRuleOrStyleId(CSSStyleDeclaration* style) const { return id() + &quot;:&quot; + ruleOrStyleId(style); }

I don&apos;t think we should mix rules and styles.

&gt; WebCore/inspector/InspectorCSSAgent.h:110
&gt; +    virtual CSSStyleRule* setRuleSelector(const String&amp; id, const String&amp; selector);

id -&gt; ruleId?
Also, why do you return new style rule instance?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288894</commentid>
    <comment_count>12</comment_count>
      <attachid>69484</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-04 06:02:16 -0700</bug_when>
    <thetext>Comment on attachment 69484
[PATCH] Preliminary patch style fixed

Implementation looks good.

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

&gt; WebCore/inspector/InspectorCSSAgent.cpp:369
&gt; +void InspectorStyleSheet::didStyleSheetTextChange(const String&amp; newText)

You should simply call it setStyleSheetText. did* is only used for clients in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288988</commentid>
    <comment_count>13</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-04 10:07:59 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 69484 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69484&amp;action=review
&gt; 
&gt; Some InspectorStyleSheet API notes.
&gt; 
&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:67
&gt; &gt; +class ParsedStyleSheet {
&gt; 
&gt; Move this into InspectorStyleSheet.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:69
&gt; &gt; +    typedef Vector&lt;RefPtr&lt;CSSStyleSourceData&gt; &gt; SourceData;
&gt; 
&gt; You should instead introduce CSSRuleSourceData that would own this style source data and operate on it.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:72
&gt; &gt; +    CSSStyleSheet* cssStyleSheet() const { return m_styleSheetByParser; }
&gt; 
&gt; m_styleSheetByParser -&gt; m_parserOutput ?

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:79
&gt; &gt; +    bool ensureSourceData(Node* ownerNode);
&gt; 
&gt; I don&apos;t think ParsedStyleSheet should be node-aware.

Refactored.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:94
&gt; &gt; +    static PassRefPtr&lt;InspectorStyleSheet&gt; create(const String&amp; id, CSSStyleSheet* liveStyleSheet)
&gt; 
&gt; liveStyleSheet -&gt; domStyleSheet?
&gt; 
&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:102
&gt; &gt; +    virtual CSSStyleSheet* liveStyleSheet() const { return m_liveStyleSheet; }
&gt; 
&gt; domStyleSheet?
&gt; 

We seem to have agreed on pageStyleSheet, as CSS is only slightly related to DOM.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:105
&gt; &gt; +    virtual bool setStyleText(CSSStyleDeclaration*, const String&amp;);
&gt; 
&gt; Where would you get CSSStyleDeclaration to pass in? Should you use style id instead?

CSSStyleSelector::styleRulesForElement() (discussed offline)

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:106
&gt; &gt; +    virtual Document* ownerDocument() const;
&gt; 
&gt; I can&apos;t come up with the scenario where ownerDocument needs to be exposed.

Please see throughout the patch. In brief:
- documentURL (to calculate relative URLs in frames: WebInspector.resourceURLForRelatedNode)
- inspectorStyleSheetForDocument (to retrieve a &quot;via inspector&quot; stylesheet for the same document as the InspectorStyleSheet belongs in)
- idForDocumentNode (to retrieve a document node id, documentElementId. Unused ATM - can we remove it altogether? Will make things much simpler)

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:107
&gt; &gt; +    virtual RefPtr&lt;CSSStyleSourceData&gt; styleSourceDataFor(CSSStyleDeclaration* style) const { return m_parsedStyleSheet.styleSourceDataAt(ruleIndexByStyle(style)); }
&gt; 
&gt; As we agreed, you should not expose CSSStyleSourceData.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:108
&gt; &gt; +    virtual String fullRuleOrStyleId(CSSStyleDeclaration* style) const { return id() + &quot;:&quot; + ruleOrStyleId(style); }
&gt; 
&gt; I don&apos;t think we should mix rules and styles.

Introduced separate API methods for these (relying on the same private method as of now).

&gt; &gt; WebCore/inspector/InspectorCSSAgent.h:110
&gt; &gt; +    virtual CSSStyleRule* setRuleSelector(const String&amp; id, const String&amp; selector);
&gt; 
&gt; id -&gt; ruleId?
&gt; Also, why do you return new style rule instance?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288995</commentid>
    <comment_count>14</comment_count>
      <attachid>69647</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-04 10:19:29 -0700</bug_when>
    <thetext>Created attachment 69647
[PRELIMINARY PATCH] Comments addressed

I need an approval of the CSS{Style,Rule}SourceData + API changes, hence the full patch. NOT MAC-READY</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288996</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-04 10:21:30 -0700</bug_when>
    <thetext>Attachment 69647 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/inspector/InspectorStyleSheet.cpp:26:  Found other header before a header this file implements. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 29 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>289007</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-04 10:59:13 -0700</bug_when>
    <thetext>Attachment 69647 did not build on mac:
Build output: http://queues.webkit.org/results/4248031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289098</commentid>
    <comment_count>17</comment_count>
      <attachid>69647</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-04 13:22:14 -0700</bug_when>
    <thetext>Comment on attachment 69647
[PRELIMINARY PATCH] Comments addressed

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

&gt; WebCore/inspector/InspectorCSSAgent.cpp:130
&gt; +    m_domAgent-&gt;setDOMListener(this);

Listeners are generally added, not set.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:143
&gt; +Element* InspectorCSSAgent::elementForId(long nodeId)

Implementation order should match declaration.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:224
&gt; +        return; // ???

We don&apos;t have proper error handling yet, so just return here.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:303
&gt; +    if (!inspectorStyleSheet &amp;&amp; createIfAbsent) {

nit: replace if with guard to avoid nesting.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:317
&gt; +        String id = String::number(m_lastStyleSheetId++);

These four lines look a lot like bindStyleSheet. Should you call it from here instead?

&gt; WebCore/inspector/InspectorCSSAgent.cpp:339
&gt; +    *styleSheetObject = inspectorStyleSheet-&gt;buildObjectForStyleSheet(domAgent()-&gt;idForDocumentNode(doc), domAgent()-&gt;documentURLString(doc), inspectorStyleSheetForDocument(doc, false));

Why does this method accept so many parameters? InspectorStyleSheet should have buildObjectForStyleSheet() with no parameters at all. Last one concerns me most, see more comments on it.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:368
&gt; +{

Please add FIXME here.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:458
&gt; +        if (styleSheetForDoc &amp;&amp; styleSheet == styleSheetForDoc-&gt;pageStyleSheet())

So you pass it all the way to this place to set the origin? But type of the InspectorStyleSheet already gives you complete information on it. Just add an abstract getter for origin or accept it in the InspectorStyleSheet constructor.

&gt; WebCore/inspector/InspectorStyleSheet.cpp:365
&gt; +PassRefPtr&lt;InspectorObject&gt; InspectorStyleSheet::buildObjectForStyleSheet(long ownerDocumentNodeId, const String&amp; documentURL, InspectorStyleSheet* styleSheetForDocument)

styleSheetForDocument-&gt;viaInspectorStyleSheet

&gt; WebCore/inspector/InspectorStyleSheet.cpp:377
&gt; +        RefPtr&lt;InspectorArray&gt; cssRules = internalBuildArrayForRuleList(cssRuleList.get(), documentURL, styleSheetForDocument);

no need for &apos;internal&apos; prefix - just make sure it is private.

&gt; WebCore/inspector/InspectorStyleSheet.h:28
&gt; +#include &quot;CSSPropertySourceData.h&quot;

I don&apos;t think you need these includes.

&gt; WebCore/inspector/InspectorStyleSheet.h:54
&gt; +class ParsedStyleSheet {

You should be able to define this in .cpp - no need to expose this internal structure to clients.

&gt; WebCore/inspector/InspectorStyleSheet.h:88
&gt; +    virtual Document* ownerDocument() const { return m_pageStyleSheet-&gt;document(); }

Do you need to expose this information from stylesheet?

&gt; WebCore/inspector/InspectorStyleSheet.h:89
&gt; +    virtual bool text(String* result) const;

In fact, I think you can get away with only few of these being virtual.

&gt; WebCore/inspector/InspectorStyleSheet.h:99
&gt; +    virtual PassRefPtr&lt;InspectorObject&gt; buildObjectForStyleSheet(long ownerDocumentNodeId, const String&amp; documentURL, InspectorStyleSheet* styleSheetForDocument);

I don&apos;t think build methods should be virtual.

&gt; WebCore/inspector/InspectorStyleSheet.h:105
&gt; +    String ruleOrStyleId(CSSStyleDeclaration* style) const { unsigned index = ruleIndexByStyle(style); return index == UINT_MAX ? &quot;&quot; : String::number(index); }

It is not clear to me why we are mixing rule and style identifiers. In fact, should we even bother having style identifiers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289533</commentid>
    <comment_count>18</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-05 04:33:32 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 69647 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69647&amp;action=review
&gt; 
&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:130
&gt; &gt; +    m_domAgent-&gt;setDOMListener(this);
&gt; 
&gt; Listeners are generally added, not set.

Right - in the event when there may be several of those. In this case, we can handle only one. Please see Document::setWindowAttributeEventListener(), EventTarget::setAttributeEventListener() and v8::Debug::SetDebugEventListener() for examples.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:143
&gt; &gt; +Element* InspectorCSSAgent::elementForId(long nodeId)
&gt; 
&gt; Implementation order should match declaration.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:224
&gt; &gt; +        return; // ???
&gt; 
&gt; We don&apos;t have proper error handling yet, so just return here.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:303
&gt; &gt; +    if (!inspectorStyleSheet &amp;&amp; createIfAbsent) {
&gt; 
&gt; nit: replace if with guard to avoid nesting.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:317
&gt; &gt; +        String id = String::number(m_lastStyleSheetId++);
&gt; 
&gt; These four lines look a lot like bindStyleSheet. Should you call it from here instead?

As you can see, the created inspectorStyleSheet instances are of different types, so this doesn&apos;t work. I could extract the 3 or 4 lines into a utility method, though...

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:339
&gt; &gt; +    *styleSheetObject = inspectorStyleSheet-&gt;buildObjectForStyleSheet(domAgent()-&gt;idForDocumentNode(doc), domAgent()-&gt;documentURLString(doc), inspectorStyleSheetForDocument(doc, false));
&gt; 
&gt; Why does this method accept so many parameters? InspectorStyleSheet should have buildObjectForStyleSheet() with no parameters at all. Last one concerns me most, see more comments on it.

Feel free to examine the code a bit closer. Basically, there are 2 primary solutions:
1. Pass an Inspector[CSS|DOM]Agent (either-or) instance into the InspectorStyleSheet constructor, which seems wasteful, or
2. Fill the related InspectorObject fields here, outside of buildObjectForStyleSheet().
Which one looks better to you?

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:368
&gt; &gt; +{
&gt; 
&gt; Please add FIXME here.

Done.

&gt; &gt; WebCore/inspector/InspectorCSSAgent.cpp:458
&gt; &gt; +        if (styleSheetForDoc &amp;&amp; styleSheet == styleSheetForDoc-&gt;pageStyleSheet())
&gt; 
&gt; So you pass it all the way to this place to set the origin? But type of the InspectorStyleSheet already gives you complete information on it. Just add an abstract getter for origin or accept it in the InspectorStyleSheet constructor.

Done. It seems a bit of waste to store the origin inside...

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:365
&gt; &gt; +PassRefPtr&lt;InspectorObject&gt; InspectorStyleSheet::buildObjectForStyleSheet(long ownerDocumentNodeId, const String&amp; documentURL, InspectorStyleSheet* styleSheetForDocument)
&gt; 
&gt; styleSheetForDocument-&gt;viaInspectorStyleSheet

Done.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.cpp:377
&gt; &gt; +        RefPtr&lt;InspectorArray&gt; cssRules = internalBuildArrayForRuleList(cssRuleList.get(), documentURL, styleSheetForDocument);
&gt; 
&gt; no need for &apos;internal&apos; prefix - just make sure it is private.

Done.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:28
&gt; &gt; +#include &quot;CSSPropertySourceData.h&quot;
&gt; 
&gt; I don&apos;t think you need these includes.

I do, since some of the simple operations/setters/getters are defined here. I can move them into cpp and get rid of the includes. Does it make sense?

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:54
&gt; &gt; +class ParsedStyleSheet {
&gt; 
&gt; You should be able to define this in .cpp - no need to expose this internal structure to clients.

Done.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:88
&gt; &gt; +    virtual Document* ownerDocument() const { return m_pageStyleSheet-&gt;document(); }
&gt; 
&gt; Do you need to expose this information from stylesheet?

I don&apos;t, once we solve the buildObjectForStyleSheet() parameters issue.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:89
&gt; &gt; +    virtual bool text(String* result) const;
&gt; 
&gt; In fact, I think you can get away with only few of these being virtual.

See next comment.

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:99
&gt; &gt; +    virtual PassRefPtr&lt;InspectorObject&gt; buildObjectForStyleSheet(long ownerDocumentNodeId, const String&amp; documentURL, InspectorStyleSheet* styleSheetForDocument);
&gt; 
&gt; I don&apos;t think build methods should be virtual.

Please see the patch. I&apos;m trying to have assertions in InspectorStyleSheetForInlineStyle for all methods that don&apos;t make sense being called on its instances. Do you think we should allow forbidden operations (like buildObjectForStyleSheet() on an inline style)?

&gt; &gt; WebCore/inspector/InspectorStyleSheet.h:105
&gt; &gt; +    String ruleOrStyleId(CSSStyleDeclaration* style) const { unsigned index = ruleIndexByStyle(style); return index == UINT_MAX ? &quot;&quot; : String::number(index); }
&gt; 
&gt; It is not clear to me why we are mixing rule and style identifiers. In fact, should we even bother having style identifiers?

We are not mixing them. Why does this implementation detail bother you? Does the way of id generation for different domains make any difference?
Please see the protocol doc for the styleId need reasoning.

I will attach a fixed patch once we are done with the open issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289624</commentid>
    <comment_count>19</comment_count>
      <attachid>69790</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-05 08:32:02 -0700</bug_when>
    <thetext>Created attachment 69790
[PRELIMINARY PATCH] Comments addressed

This patch addresses the second batch of comments (the solutions for the questionable ones are also implemented)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289632</commentid>
    <comment_count>20</comment_count>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-10-05 08:43:35 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Created an attachment (id=69790) [details]
&gt; [PRELIMINARY PATCH] Comments addressed
&gt; 
&gt; This patch addresses the second batch of comments (the solutions for the questionable ones are also implemented)

ChangeLog is missing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289636</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-05 08:47:18 -0700</bug_when>
    <thetext>Attachment 69790 did not build on mac:
Build output: http://queues.webkit.org/results/4236054</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289637</commentid>
    <comment_count>22</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-05 08:49:08 -0700</bug_when>
    <thetext>Attachment 69790 did not build on qt:
Build output: http://queues.webkit.org/results/4202071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289736</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-05 10:39:39 -0700</bug_when>
    <thetext>Attachment 69790 did not build on chromium:
Build output: http://queues.webkit.org/results/4212086</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289761</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-05 11:15:54 -0700</bug_when>
    <thetext>Attachment 69790 did not build on gtk:
Build output: http://queues.webkit.org/results/4242061</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290195</commentid>
    <comment_count>25</comment_count>
      <attachid>69923</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-06 04:34:33 -0700</bug_when>
    <thetext>Created attachment 69923
[PRELIMINARY PATCH] Short version with WebCore/css changes removed. NOT FOR LANDING</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290199</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-06 04:43:09 -0700</bug_when>
    <thetext>Attachment 69923 did not build on mac:
Build output: http://queues.webkit.org/results/4236078</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290202</commentid>
    <comment_count>27</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-06 04:45:56 -0700</bug_when>
    <thetext>Attachment 69923 did not build on qt:
Build output: http://queues.webkit.org/results/4204095</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290212</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-06 05:00:26 -0700</bug_when>
    <thetext>Attachment 69923 did not build on gtk:
Build output: http://queues.webkit.org/results/4258006</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290262</commentid>
    <comment_count>29</comment_count>
      <attachid>69923</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-10-06 06:49:23 -0700</bug_when>
    <thetext>Comment on attachment 69923
[PRELIMINARY PATCH] Short version with WebCore/css changes removed. NOT FOR LANDING

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

r+ with nits. this has been up in the air for too long. lets land and fix remaining stuff later. This agent is not yet wired / used in the code, so we are fine.

&gt; WebCore/inspector/InspectorCSSAgent.cpp:344
&gt; +    bool success = inspectorStyleSheet-&gt;setRuleSelector(ruleId, selector);

You might want to return the rule pointer here and use it below (as in addRule)

&gt; WebCore/inspector/InspectorCSSAgent.h:28
&gt; +#include &quot;CSSPropertySourceData.h&quot;

These are not used.

&gt; WebCore/inspector/InspectorCSSAgent.h:59
&gt; +    static PassRefPtr&lt;InspectorCSSAgent&gt; create(InspectorFrontend* frontend, InspectorDOMAgent* domAgent)

Swap the parameters order?

&gt; WebCore/inspector/InspectorCSSAgent.h:91
&gt; +    typedef HashMap&lt;RefPtr&lt;Document&gt;, RefPtr&lt;InspectorStyleSheet&gt; &gt; DocumentToInspectorStyleSheetMap; // &quot;via inspector&quot; stylesheets

DocumentToViaInspectorStyleSheet

&gt; WebCore/inspector/InspectorCSSAgent.h:101
&gt; +    InspectorDOMAgent* domAgent() const { return m_domAgent.get(); }

Why do you need a private getter? Just access m_domAgent inline.

&gt; WebCore/inspector/InspectorDOMAgent.h:154
&gt; +        long idForDocumentNode(Node*);

This method is unused and dangerous. One should use pushNodeToFrontend instead in order to obtain the id.

&gt; WebCore/inspector/InspectorStyleSheet.h:28
&gt; +#include &quot;CSSPropertySourceData.h&quot;

Please remove unused includes.

&gt; WebCore/inspector/InspectorUtilities.cpp:34
&gt; +#include &quot;CSSRule.h&quot;

I don&apos;t think you need theses includes here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290898</commentid>
    <comment_count>30</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-10-07 02:56:01 -0700</bug_when>
    <thetext>Committed with suggested changes: http://trac.webkit.org/changeset/69284</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69032</attachid>
            <date>2010-09-28 02:07:14 -0700</date>
            <delta_ts>2010-09-28 09:57:20 -0700</delta_ts>
            <desc>[PATCH] Suggested solution without disabled properties. Contains integrated bug 46367 patch until one is landed</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>103373</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1B
UEkuY3NzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5j
c3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2Q2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEku
Y3NzCkBAIC0wLDAgKzEsMjIgQEAKK2h0bWwgeworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisK
K2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAhCisKKyAgICBpbXBv
cnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICov
OworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejogIiFpbXBvcnRhbnQi
OworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFkY29sb3IiICEgaW1w
b3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovOworfQorCisvKiBj
b21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVj
dG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8qIG5vdCBhbiAhaW1w
b3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICovCisKK2JvZHkubWFp
bjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBv
cnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisKK2JvZHk6OmFmdGVy
ICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNGNiZGE4NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0ODYgQEAKK1Rl
c3RzIHRoYXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4K
KworCis9PT0gQ29tcHV0ZWQgc3R5bGUgZm9yIGJvZHkgPT09CisKK3N0eWxlCitlbGVtZW50LnN0
eWxlIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidzY3Jv
bGwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2JvcmRlci1i
b3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidyZ2IoMCwg
MTI4LCAwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1pbWFnZSc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzoncGFkZGlu
Zy1ib3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24nOicw
JSAwJSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQnOidyZXBl
YXQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtc2l6ZSc6J2F1dG8gYXV0
byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1jb2xvcic6J3JnYigy
NDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9tLWxl
ZnQtcmFkaXVzJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9t
LXJpZ2h0LXJhZGl1cyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJv
dHRvbS1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1ib3R0
b20td2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1jb2xsYXBz
ZSc6J3NlcGFyYXRlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItbGVmdC1jb2xv
cic6J3JnYigyNDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXIt
bGVmdC1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1sZWZ0
LXdpZHRoJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItcmlnaHQtY29s
b3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVy
LXJpZ2h0LXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXJp
Z2h0LXdpZHRoJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLWNv
bG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRl
ci10b3AtbGVmdC1yYWRpdXMnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRl
ci10b3AtcmlnaHQtcmFkaXVzJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3Jk
ZXItdG9wLXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRv
cC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm90dG9tJzonYXV0bydd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY2FwdGlvbi1zaWRlJzondG9wJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydjbGVhcic6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2NsaXAnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjb2xvcic6J3JnYigyNDAs
IDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjdXJzb3InOidhdXRvJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXJlY3Rpb24nOidsdHInXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZW1w
dHktY2VsbHMnOidzaG93J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmbG9hdCc6J25vbmUn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtZmFtaWx5JzonVGltZXMnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2ZvbnQtc3R5bGUnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Zv
bnQtdmFyaWFudCc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZm9udC13ZWln
aHQnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2hlaWdodCc6JzYwMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsZWZ0JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snbGV0dGVyLXNwYWNpbmcnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2xpbmUtaGVpZ2h0Jzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaXN0
LXN0eWxlLWltYWdlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbGlzdC1zdHls
ZS1wb3NpdGlvbic6J291dHNpZGUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2xpc3Qtc3R5
bGUtdHlwZSc6J2Rpc2MnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1ib3R0b20n
Oic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1sZWZ0JzonOHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tcmlnaHQnOicxMTBweCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snbWF4LWhlaWdodCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21heC13aWR0
aCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21pbi1oZWlnaHQnOicwcHgnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21pbi13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ29ycGhh
bnMnOicyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdXRsaW5lLWNvbG9yJzoncmdiKDI0
MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ291dGxpbmUtc3R5bGUnOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdXRsaW5lLXdpZHRoJzonMHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdmVyZmxvdy14JzondmlzaWJsZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snb3ZlcmZsb3cteSc6J3Zpc2libGUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ3BhZGRpbmctYm90dG9tJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydw
YWRkaW5nLWxlZnQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZGRpbmctcmln
aHQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZGRpbmctdG9wJzonMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwYWdlLWJyZWFrLWFmdGVyJzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFnZS1icmVhay1iZWZvcmUnOidhdXRvJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydwYWdlLWJyZWFrLWluc2lkZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ3BvaW50ZXItZXZlbnRzJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1sncG9zaXRpb24nOidzdGF0aWMnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Jlc2l6
ZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3JpZ2h0JzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1sndGFibGUtbGF5b3V0JzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1sndGV4dC1hbGlnbic6Jy13ZWJraXQtYXV0byddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1sndGV4dC1kZWNvcmF0aW9uJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1sndGV4dC1pbmRlbnQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtcmVu
ZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndGV4dC1zaGFkb3cnOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd0ZXh0LW92ZXJmbG93JzonY2xpcCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndGV4dC10cmFuc2Zvcm0nOidub25lJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyd0b3AnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd1
bmljb2RlLWJpZGknOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3ZlcnRpY2Fs
LWFsaWduJzonYmFzZWxpbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Zpc2liaWxpdHkn
Oid2aXNpYmxlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd3aGl0ZS1zcGFjZSc6J25vcm1h
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd2lkb3dzJzonMiddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snd2lkdGgnOic2NjdweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd29y
ZC1icmVhayc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd29yZC1zcGFjaW5n
JzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd3b3JkLXdyYXAnOidub3JtYWwnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3otaW5kZXgnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyd6b29tJzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tZGVsYXknOicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tZGlyZWN0aW9uJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbic6JzBzJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGUnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnOicxJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWFuaW1hdGlvbi1uYW1lJzonbm9uZSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZSc6J3J1bm5pbmcn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5j
dGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEsIDAsMjUsIDEpJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LWFwcGVhcmFuY2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHknOid2aXNpYmxlJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJhY2tncm91bmQtY2xpcCc6J2JvcmRlci1ib3gnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGUnOidz
b3VyY2Utb3ZlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZ3JvdW5k
LW9yaWdpbic6J3BhZGRpbmctYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0
LWJhY2tncm91bmQtc2l6ZSc6J2F1dG8gYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1ibG9jay1mbG93JzondGInXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJr
aXQtYm9yZGVyLWZpdCc6J2JvcmRlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtp
dC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWyctd2Via2l0LWJvcmRlci1pbWFnZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJy13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmcnOicwcHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWFsaWduJzonc3RyZXRjaCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtZGlyZWN0aW9uJzonbm9ybWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1mbGV4JzonMCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1ib3gtZmxleC1ncm91cCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJy13ZWJraXQtYm94LWxpbmVzJzonc2luZ2xlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snLXdlYmtpdC1ib3gtb3JpZW50JzonaG9yaXpvbnRhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1ib3gtcGFjayc6J3N0YXJ0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWJveC1yZWZsZWN0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1ib3gtc2hhZG93Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1ib3gtc2l6aW5nJzonY29udGVudC1ib3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
Jy13ZWJraXQtY29sb3ItY29ycmVjdGlvbic6J2RlZmF1bHQnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyJzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlJzonYXV0byddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlJzonYXV0byddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tY291bnQnOidhdXRvJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1nYXAnOidub3JtYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3InOidyZ2IoMjQw
LCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tcnVs
ZS1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1u
LXJ1bGUtd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29s
dW1uLXNwYW4nOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi13
aWR0aCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtZm9udC1zbW9v
dGhpbmcnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWhpZ2hsaWdo
dCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbGluZS1icmVhayc6
J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1saW5lLWNsYW1wJzon
bm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJnaW4tYm90dG9tLWNv
bGxhcHNlJzonY29sbGFwc2UnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFy
Z2luLXRvcC1jb2xsYXBzZSc6J2NvbGxhcHNlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9uJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snLXdlYmtpdC1tYXJxdWVlLWluY3JlbWVudCc6JzZweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24nOidpbmZpbml0ZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLXN0eWxlJzonc2Nyb2xsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2stYXR0YWNobWVudCc6J3Njcm9sbCddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLWJveC1pbWFnZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1jbGlwJzonYm9yZGVyLWJveCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLWNvbXBvc2l0ZSc6J3NvdXJjZS1v
dmVyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2staW1hZ2UnOidub25l
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2stb3JpZ2luJzonYm9yZGVy
LWJveCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLXBvc2l0aW9uJzon
MCUgMCUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1yZXBlYXQnOidy
ZXBlYXQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1zaXplJzonYXV0
byBhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW5ic3AtbW9kZSc6J25v
cm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1wZXJzcGVjdGl2ZSc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2lu
JzonMzMzcHggMzAwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcnRsLW9y
ZGVyaW5nJzonbG9naWNhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0
LWRlY29yYXRpb25zLWluLWVmZmVjdCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
Jy13ZWJraXQtdGV4dC1maWxsLWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1zZWN1cml0eSc6J25vbmUnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1zdHJva2UtY29sb3InOidyZ2IoMjQwLCAxMSwg
MTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0
aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0nOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4n
OiczMzNweCAzMDBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zv
cm0tc3R5bGUnOidmbGF0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5z
aXRpb24tZGVsYXknOicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFu
c2l0aW9uLWR1cmF0aW9uJzonMHMnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dHJhbnNpdGlvbi1wcm9wZXJ0eSc6J2FsbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEs
IDAsMjUsIDEpJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXVzZXItZHJhZyc6
J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1tb2RpZnknOidy
ZWFkLW9ubHknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1zZWxlY3Qn
Oid0ZXh0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwLXBhdGgnOidub25lJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwLXJ1bGUnOidub256ZXJvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydtYXNrJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmls
dGVyJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmxvb2QtY29sb3InOidyZ2Io
MCwgMCwgMCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Zsb29kLW9wYWNpdHknOicxJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaWdodGluZy1jb2xvcic6J3JnYigyNTUsIDI1NSwg
MjU1KSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3RvcC1jb2xvcic6J3JnYigwLCAwLCAw
KSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3RvcC1vcGFjaXR5JzonMSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snY29sb3ItaW50ZXJwb2xhdGlvbic6J3NyZ2InXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6J2xpbmVhcnJnYidd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY29sb3ItcmVuZGVyaW5nJzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snZmlsbCc6JyMwMDAwMDAnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2ZpbGwtb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwt
cnVsZSc6J25vbnplcm8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ltYWdlLXJlbmRlcmlu
Zyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmtlci1lbmQnOidub25lJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJrZXItbWlkJzonbm9uZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFya2VyLXN0YXJ0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc2hhcGUtcmVuZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
c3Ryb2tlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWRhc2hhcnJh
eSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3N0cm9rZS1kYXNob2Zmc2V0Jzon
MCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWxpbmVjYXAnOididXR0J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydzdHJva2UtbGluZWpvaW4nOidtaXRlciddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLW1pdGVybGltaXQnOic0J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydzdHJva2Utb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J3N0cm9rZS13aWR0aCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2FsaWdubWVudC1i
YXNlbGluZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Jhc2VsaW5lLXNoaWZ0
JzonYmFzZWxpbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2RvbWluYW50LWJhc2VsaW5l
JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sna2VybmluZyc6JzAnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ3RleHQtYW5jaG9yJzonc3RhcnQnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ3dyaXRpbmctbW9kZSc6J2xyLXRiJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzonMGRlZyddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOidhdXRvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LXN2Zy1zaGFkb3cnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyd2ZWN0b3ItZWZmZWN0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
KworPT09IE1hdGNoZWQgcnVsZXMgZm9yIGJvZHkgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1h
Z2VudCcgdW5kZWZpbmVkLXVuZGVmaW5lZF0gW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3Bs
YXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tYm90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydtYXJnaW4tbGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVs
ZQorYm9keTogWycnIDMyLTM2XSBbMzgtMjk4XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIx
XQorWydmb28nOidiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkg
bm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBb
MjYtMTA0XQorWydoZWlnaHQnOicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDkt
MTMzXQorWydjb2xvcnonOiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1sn
aW1wb3J0YW50JzonJyBub24tcGFyc2VkXSBAWzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9y
IiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMt
aW1wb3J0YW50XSBAWzE5MC0yNTldCisKK3J1bGUKK2JvZHkubWFpbjE6IFsnJyAzMzAtMzY4XSBb
MzY5LTQ1MF0KK1snY29sb3InOicjRjAwQkFBJ10gQFsxMy0yOF0KK1snem9vJzonbW9vIC8qIG5v
dCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsy
OC04MV0KKworcnVsZQorYm9keS5tYWluMjogWycnIDQ2Ni00NzZdIFs0NzctNTcyXQorWydiYWNr
Z3JvdW5kJzonZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQg
Lyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1
XQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidncmVlbiddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KKworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRl
Y29yYXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5v
bi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1Bz
ZXVkb0lkPTQKKworcnVsZQorYm9keTo6YWZ0ZXI6IFsnJyA1NzUtNTg2XSBbNTg5LTYxN10KK1sn
Y29udGVudCc6JyJBZnRlciBib2R5IiddIEBbNS0yN10KKworPT09IEF0dHJpYnV0ZSBzdHlsZXMg
Zm9yIHRhYmxlID09PQorQXR0cmlidXRlOiB3aWR0aAorCitzdHlsZQorZWxlbWVudC5zdHlsZSBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd2lkdGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCisKKz09PSBJbmhlcml0ZWQgc3R5bGVzIGZvciBib2R5ID09PQorTGV2ZWw9MQorCitydWxl
CitodG1sOiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1
bGUKK2h0bWw6IFsnJyAwLTRdIFs2LTI5XQorWydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0K
KworPT09IElubGluZSBzdHlsZSBmb3IgYm9keSA9PT0KKworc3R5bGUKK2VsZW1lbnQuc3R5bGUg
WzAtMzFdCitbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQorWyd3aWR0aCc6Jzg1JSdd
IEBbMjEtMzFdCisKKz09PSBBbGwgc3R5bGVzaGVldHMgPT09CisKK1N0eWxlU2hlZXQ6IDMKK1Rl
eHQ6ICdodG1sIHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250
LXNpemU6IDEycHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRh
bnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEw
MCUgIWltcG9ydGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6
IWltcG9ydGFudDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHBy
b3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2Vs
ZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50
ICovY29sb3I6ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6
ZWQgcHJvcGVydHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdy
ZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWlj
b2xvbiwgdmVyeSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6
ICJBZnRlciBib2R5IjsKK30KKycKKworcnVsZQoraHRtbDogWycnIDAtNF0gWzYtMjldCitbJ2Zv
bnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXQorCitydWxlCitib2R5OiBbJycgMzItMzZdIFszOC0y
OThdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdCitbJ2Zvbyc6J2JhciAhCisKKyAgICBp
bXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3Jl
ICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0xMDRdCitbJ2hlaWdodCc6JzEwMCUg
IWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdCitbJ2NvbG9yeic6JyIhaW1wb3J0
YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgtMTU5XQorWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRd
IEBbMTY0LTE3NF0KK1snY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJv
cGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnRdIEBbMTkwLTI1OV0KKwor
cnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUwXQorWydjb2xvcic6JyNGMDBC
QUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25p
emVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQorCitydWxlCitib2R5Lm1haW4y
OiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAh
aW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWlt
cG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidp
bml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC14Jzon
aW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteSc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0YWNobWVu
dCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRp
b24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9z
aXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
b3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1j
bGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jb2xv
cic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCitydWxlCitib2R5OjphZnRlcjog
WycnIDU3NS01ODZdIFs1ODktNjE3XQorWydjb250ZW50JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3
XQorCitTdHlsZVNoZWV0OiA0CitUZXh0OiAnCisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICov
Citib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0
IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBy
dWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKycKKworcnVsZQorYm9k
eS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29yYXRpb24nOidub25l
J10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3
LTEzMV0KKworPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PQorCitTdHlsZVNoZWV0OiA0
CitUZXh0OiAnYm9keS5tYWlucGFnZSB7ICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3Vn
aDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0
aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFsnJyAwLTEzXSBbMTUtNzhdCitbJ3RleHQt
ZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJh
ZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDc5LTgzXSBb
ODUtMTA5XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHNl
bGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDogNAorVGV4dDogJ2h0bWwgKiwgYm9keVtmb289
ImJhciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0
eTogMmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQor
aHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFsnJyAwLTIzXSBbMjUtODhdCitbJ3RleHQtZGVjb3Jh
dGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVl
Micgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDg5LTkzXSBbOTUtMTE5
XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHN0eWxlIHRl
eHQgc2V0ID09PQorCitTdHlsZVNoZWV0OiA0CitUZXh0OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFy
Il0ge2NvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0LWFsaWdu
OiBqdXN0aWZ5O30nCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbJycgMC0yM10g
WzI1LTU3XQorWydjb2xvcic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3JvdW5kJzonYmxhY2sn
XSBAWzE0LTMyXQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhdCitbJ3RleHQtYWxp
Z24nOidqdXN0aWZ5J10gQFs0LTI0XQorCis9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFk
ZGVkID09PQorCitydWxlCitib2R5OiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRd
IFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J21hcmdpbi1yaWdodCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWJv
dHRvbSc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWxlZnQnOic4cHgn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyAzMi0zNl0gWzM4LTI5
OF0KK1snZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFyICEKKworICAgIGlt
cG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUg
Ki8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVpZ2h0JzonMTAwJSAh
aW1wb3J0YW50JyBpcy1pbXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6JzonIiFpbXBvcnRh
bnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0g
QFsxNjQtMTc0XQorWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9w
ZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XQorCity
dWxlCitodG1sICosIGJvZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsyNS01N10KK1snY29sb3In
Oid3aGl0ZSddIEBbMC0xM10KK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsxNC0zMl0KK1snYmFj
a2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tn
cm91bmQtcmVwZWF0LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNr
Z3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFj
a2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
YmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snYmFja2dyb3VuZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLWNvbG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1
bGUKK2JvZHk6IFsnJyA1OC02Ml0gWzY0LTg4XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBb
NC0yNF0KKworcnVsZQorYm9keTogWydpbnNwZWN0b3InIDAtNF0gWzUtMTZdCitbJ2ZvbnQnOidz
ZXJpZiddIEBbMC0xMV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUw
XQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFp
bXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQor
CitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQn
OidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBz
ZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2Jh
Y2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNr
Z3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFj
a2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Jh
Y2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbCBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmMxYWQwNWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI0NCBAQAorPGh0bWw+
Cis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVz
LW5ldy1BUEkuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9y
L2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0
cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAgICBmdW5j
dGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXkocmVzdWx0KTsK
KyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9y
KCJmcm9udGVuZF9ydW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0
aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKK3sKKyAg
ICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9N
U3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9s
bGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0
aW9uIGNvbXB1dGVkU3R5bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29tcHV0ZWRTdHlsZSkK
KyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsK
KyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IENvbXB1dGVkIHN0
eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxl
KHRlc3RDb250cm9sbGVyLCBjb21wdXRlZFN0eWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIG1hdGNoZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVs
ZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgi
Iik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVk
IHJ1bGVzIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJy
YXkodGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBwc2V1ZG9SdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBwc2V1ZG9SdWxl
cykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIi
KTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IFBzZXVkbyBy
dWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNl
dWRvUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIlBzZXVkb0lkPSIgKyBwc2V1ZG9SdWxlc1tpXS5wc2V1ZG9JZCk7CisgICAg
ICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHBzZXVk
b1J1bGVzW2ldLnJ1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIGF0dHJpYnV0ZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBhdHRyaWJ1dGVT
dHlsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVz
aCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRy
aWJ1dGUgc3R5bGVzIGZvciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIg
aW4gYXR0cmlidXRlU3R5bGVzKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVz
dWx0cy5wdXNoKCJBdHRyaWJ1dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVu
ZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRT
dHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7
CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAg
ICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3Ig
Ym9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkU3R5
bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCJMZXZlbD0iICsgKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVt
cFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0uaW5saW5lU3R5
bGUpOworICAgICAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9s
bGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0ubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2FsbGJhY2sodGVzdENv
bnRyb2xsZXIsIGlubGluZVN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCI9PT0gSW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJv
bnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmxpbmVTdHlsZSk7CisgICAg
ICAgICAgICBmcm9udGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xsZXIpOworICAgICAg
ICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNvbXB1dGVkU3R5bGVDYWxs
YmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
LmJvZHkuaWQsIG1hdGNoZWRSdWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2Rl
MihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgcHNldWRvUnVsZXNDYWxs
YmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIoZnJvbnRlbmRfbm9kZUZvcklkKCJ0aGV0YWJs
ZSIpLmlkLCBhdHRyaWJ1dGVTdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVy
KSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGluaGVyaXRlZFN0eWxlc0Nh
bGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5nZXRJbmxpbmVTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVu
dC5ib2R5LmlkLCBpbmxpbmVTdHlsZUNhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENv
bnRyb2xsZXIsIHJ1bGVzKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICBmcm9udGVu
ZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIHJ1bGVzW2ldKTsKK30KKworZnVuY3Rp
b24gZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKQorewordmFyIG5ld1N0
eWxlU2hlZXRUZXh0ID0KKyJib2R5Lm1haW5wYWdlIHtcCisgICAgdGV4dC1kZWNvcmF0aW9uOiBz
dHJpa2V0aHJvdWdoO1wKKyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjtcCit9XAorXAorYm9k
eSB7XAorICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XAorfVwKKyI7CisKKyAgICBmdW5jdGlvbiBw
YXRjaFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxl
ci5yZXN1bHRzLnB1c2goIj09PSBMYXN0IHN0eWxlc2hlZXQgcGF0Y2hlZCA9PT0iKTsKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVTaGVldC5pZCwgbmV3
U3R5bGVTaGVldFRleHQsCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hl
ZXQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldC5pZCwgZnJvbnRlbmRfY2hh
bmdlU2VsZWN0b3IuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpKTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBzdHlsZVNoZWV0SWRzTG9hZGVkKHRlc3RDb250cm9sbGVyLCBpZHMpCisgICAgewor
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBbGwgc3R5bGVzaGVldHMgPT09Iik7CisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRl
bmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBpZHNbaV0sIChpIDwgaWRz
Lmxlbmd0aCAtIDEpID8gbnVsbCA6IHBhdGNoU3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250
cm9sbGVyKSk7CisgICAgfQorICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzMihzdHls
ZVNoZWV0SWRzTG9hZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rp
b24gZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7
CisgICAgZnVuY3Rpb24gZGlkU2V0U2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAg
eworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzZWxlY3RvciBzZXQgPT09Iik7Cisg
ICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgcnVs
ZS5wYXJlbnRTdHlsZVNoZWV0LmlkLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0
ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNl
bGVjdG9yMihzdHlsZVNoZWV0LmNzc1J1bGVzWzBdLmlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJh
clwiXSIsIGRpZFNldFNlbGVjdG9yLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKwor
ZnVuY3Rpb24gZnJvbnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0
KQoreworICAgIGZ1bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGUp
CisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHlsZSB0ZXh0IHNldCA9
PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9s
bGVyLCBzdHlsZS5wYXJlbnRTdHlsZVNoZWV0SWQsIGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5
bGVUZXh0MihzdHlsZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmlkLCAiY29sb3I6IHdoaXRlOyBi
YWNrZ3JvdW5kOiBibGFjazsiLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJv
bGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9hZGRSdWxlKHRlc3RDb250cm9sbGVyKQor
eworICAgIGZ1bmN0aW9uIGRpZEdldE1hdGNoZWRSdWxlcyh0ZXN0Q29udHJvbGxlciwgbWF0Y2hl
ZENTU1J1bGVzKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIi
KTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxl
cyBhZnRlciBydWxlIGFkZGVkID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJh
eSh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgdGVzdENvbnRyb2xs
ZXIubm90aWZ5RG9uZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgZGlkR2V0TWF0Y2hlZFJ1bGVzLmJpbmQobnVsbCwg
dGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydWxlQWRkZWQodGVzdENv
bnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxl
VGV4dDIocnVsZS5zdHlsZS5pZCwgImZvbnQ6IHNlcmlmIiwgZGlkU2V0U3R5bGVUZXh0LmJpbmQo
bnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmFk
ZFJ1bGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCAiYm9keSIsIHJ1
bGVBZGRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250
ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZU9yU3R5bGUpCit7CisgICAg
aWYgKCFydWxlT3JTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBpc1J1bGUgPSAhIShy
dWxlT3JTdHlsZS5zdHlsZSk7CisgICAgdmFyIHN0eWxlID0gaXNSdWxlID8gcnVsZU9yU3R5bGUu
c3R5bGUgOiBydWxlT3JTdHlsZTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaChpc1J1bGUgPyAicnVsZSIgOiAic3R5
bGUiKTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IChydWxlT3JT
dHlsZS5zZWxlY3RvclRleHQgKyAiOiBbJyIgKyBydWxlT3JTdHlsZS5vcmlnaW4gKyAiJyAiICsg
cnVsZU9yU3R5bGUuc2VsZWN0b3JTdGFydE9mZnNldCArICItIiArIHJ1bGVPclN0eWxlLnNlbGVj
dG9yRW5kT2Zmc2V0ICsgIl0iKSA6ICJlbGVtZW50LnN0eWxlIikgKyAiIFsiICsgc3R5bGUuc3Rh
cnRPZmZzZXQgKyAiLSIgKyBzdHlsZS5lbmRPZmZzZXQgKyAiXSIpOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgc3R5bGUucHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcHJv
cGVydHkgPSBzdHlsZS5wcm9wZXJ0aWVzW2ldOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIlsnIiArIHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3BlcnR5LnZhbHVlICsg
IiciICsgKHByb3BlcnR5LnByaW9yaXR5ID8gIiBpcy1pbXBvcnRhbnQiIDogIiIpICsgKHByb3Bl
cnR5LnBhcnNlZE9rID8gIiIgOiAiIG5vbi1wYXJzZWQiKSArIl0gQFsiICsgcHJvcGVydHkuc3Rh
cnRPZmZzZXQgKyAiLSIgKyBwcm9wZXJ0eS5lbmRPZmZzZXQgKyAiXSIpOworICAgIH0KK30KKwor
CitmdW5jdGlvbiBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIs
IHN0eWxlU2hlZXRJZCwgY29udGludWF0aW9uKQoreworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRM
b2FkZWQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIlN0eWxlU2hlZXQ6ICIgKyBzdHlsZVNoZWV0LmlkKTsKKyAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCJUZXh0OiAnIiArIHN0eWxlU2hlZXQudGV4dCArICInIik7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVTaGVldC5jc3NSdWxlcy5sZW5ndGg7ICsr
aSkKKyAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwg
c3R5bGVTaGVldC5jc3NSdWxlc1tpXSk7CisgICAgICAgIGlmIChjb250aW51YXRpb24pCisgICAg
ICAgICAgICBjb250aW51YXRpb24oc3R5bGVTaGVldCk7CisgICAgfQorCisgICAgSW5zcGVjdG9y
QmFja2VuZC5nZXRTdHlsZVNoZWV0MihzdHlsZVNoZWV0SWQsIHN0eWxlU2hlZXRMb2FkZWQuYmlu
ZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCisvKgorQ292ZXJlZCBBUEkgbWV0aG9kczoK
KyAtIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlMgorIC0gZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIK
KyAtIGdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyCisgLSBnZXRBdHRyaWJ1dGVTdHlsZXNG
b3JOb2RlMgorIC0gZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIKKyAtIGdldElubGluZVN0eWxl
Rm9yTm9kZTIKKyAtIGdldEFsbFN0eWxlczIKKyAtIGdldFN0eWxlU2hlZXQyCisgLSBzZXRTdHls
ZVNoZWV0VGV4dDIKKyAtIHNldFN0eWxlVGV4dDIKKyAtIHNldFJ1bGVTZWxlY3RvcjIKKyAtIGFk
ZFJ1bGUyCisqLworCis8L3NjcmlwdD4KKworPHN0eWxlPgorCisvKiBBbiBpbmxpbmUgc3R5bGVz
aGVldCAqLworYm9keS5tYWlucGFnZSB7CisgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAvKiBh
dCBsZWFzdCBvbmUgdmFsaWQgcHJvcGVydHkgaXMgbmVjZXNzYXJ5IGZvciBXZWJDb3JlIHRvIG1h
dGNoIGEgcnVsZSAqLworICAgIGJhZHByb3BlcnR5OiAxYmFkdmFsdWUxOworfQorCis8L3N0eWxl
PgorPC9oZWFkPgorCis8Ym9keSBjbGFzcz0ibWFpbjEgbWFpbjIgbWFpbnBhZ2UiIG9ubG9hZD0i
b25sb2FkKCkiIHN0eWxlPSJmb250LXdlaWdodDogbm9ybWFsOyB3aWR0aDogODUlIj4KKzxwPgor
VGVzdHMgdGhhdCBJbnNwZWN0b3JDU1NBZ2VudCBBUEkgbWV0aG9kcyB3b3JrIGFzIGV4cGVjdGVk
LgorPC9wPgorPHRhYmxlIHdpZHRoPTUwJSBpZD0idGhldGFibGUiPgorPC90YWJsZT4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291
cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1z
b3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQKaW5kZXggZTRkMzNkOC4uYmVlYzcyOCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1l
eHBlY3RlZC50eHQKQEAgLTEsNiArMSw2IEBACiBUZXN0cyB0aGF0IHByb3BlciBkYXRhIGFuZCBz
dGFydC9lbmQgb2Zmc2V0IHBvc2l0aW9ucyBhcmUgcmVwb3J0ZWQgZm9yIENTUyBzdHlsZSBkZWNs
YXJhdGlvbnMgYW5kIHByb3BlcnRpZXMuCiAKLWJvZHk6IFs2LTI2Nl0KK2JvZHk6IFswLTRdIFs2
LTI2Nl0KIFsnZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0KIFsnZm9vJzonYmFyICEKIApAQCAt
OSwxNSArOSwxNSBAQCBib2R5OiBbNi0yNjZdCiBbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9u
LXBhcnNlZF0gQFsxMzgtMTU5XQogWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3
NF0KIFsnY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0
aCBzdHJhbmdlIHZhbHVlICovJyAhaW1wb3J0YW50XSBAWzE5MC0yNTldCi1ib2R5Lm1haW4xOiBb
MzM3LTQxOF0KK2JvZHkubWFpbjE6IFsyOTgtMzM2XSBbMzM3LTQxOF0KIFsnY29sb3InOicjRjAw
QkFBJ10gQFsxMy0yOF0KIFsnem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2du
aXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KLWJvZHkubWFpbjI6IFs0NDUt
NTQwXQorYm9keS5tYWluMjogWzQzNC00NDRdIFs0NDUtNTQwXQogWydiYWNrZ3JvdW5kJzonZ3Jl
ZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNv
bG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nICFpbXBvcnRhbnRdIEBbMC05NV0KLWJvZHkubWFpbnBh
Z2U6IFsxNy0xNDldCitib2R5Lm1haW5wYWdlOiBbMi0xNV0gWzE3LTE0OV0KIFsndGV4dC1kZWNv
cmF0aW9uJzonbm9uZSddIEBbNS0yN10KIFsnYmFkcHJvcGVydHknOicxYmFkdmFsdWUxJyBub24t
cGFyc2VkXSBAWzEwNy0xMzFdCi1lbGVtZW50LnN0eWxlOiBbMC0zMV0KK2VsZW1lbnQuc3R5bGU6
IFswLTBdIFswLTMxXQogWydmb250LXdlaWdodCc6J25vcm1hbCddIEBbMC0yMF0KIFsnd2lkdGgn
Oic4MCUnXSBAWzIxLTMxXQogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmh0bWwKaW5kZXggZmNmOTI4Zi4uYjkzMTg5ZiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisrKyBiL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMjQsMTEgKzI0
LDYgQEAgZnVuY3Rpb24gZG9pdCgpCiAKIGZ1bmN0aW9uIGZyb250ZW5kX3J1blRlc3QodGVzdENv
bnRyb2xsZXIpCiB7Ci0gICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291cmNlcy5yZXNv
dXJjZVRyYWNraW5nRW5hYmxlZCkgewotICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnJlc291
cmNlcy5fdG9nZ2xlUmVzb3VyY2VUcmFja2luZygpOwotICAgICAgICByZXR1cm4gInJlZnJlc2hp
bmciOwotICAgIH0KLQogICAgIHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKICAgICBm
cm9udGVuZF9leHBhbmRET01TdWJ0cmVlKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudCk7
CiAgICAgdGVzdENvbnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigp
IHsKQEAgLTQ4LDcgKzQzLDcgQEAgZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJv
bGxlcikKIGZ1bmN0aW9uIGZyb250ZW5kX3N0eWxlRGF0YVJlY2VpdmVkKHRlc3RDb250cm9sbGVy
LCBydWxlT3JTdHlsZSwgc2hvdWxkQmFpbCwgZGF0YSkKIHsKICAgICB2YXIgaXNSdWxlID0gISEo
cnVsZU9yU3R5bGUuc3R5bGUpOwotICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNS
dWxlID8gcnVsZU9yU3R5bGUuc2VsZWN0b3JUZXh0IDogImVsZW1lbnQuc3R5bGUiKSArICI6IFsi
ICsgZGF0YS5ib2R5UmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLmJvZHlSYW5nZS5lbmQgKyAiXSIp
OworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8gcnVsZU9yU3R5bGUu
c2VsZWN0b3JUZXh0IDogImVsZW1lbnQuc3R5bGUiKSArICI6IFsiICsgZGF0YS5zZWxlY3RvclJh
bmdlLnN0YXJ0ICsgIi0iICsgZGF0YS5zZWxlY3RvclJhbmdlLmVuZCArICJdIFsiICsgZGF0YS5i
b2R5UmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLmJvZHlSYW5nZS5lbmQgKyAiXSIpOwogICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgZGF0YS5wcm9wZXJ0eURhdGEubGVuZ3RoOyArK2kpIHsKICAgICAg
ICAgdmFyIHByb3BlcnR5RGF0dW0gPSBkYXRhLnByb3BlcnR5RGF0YVtpXTsKICAgICAgICAgdGVz
dENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJbJyIgKyBwcm9wZXJ0eURhdHVtLm5hbWUgKyAiJzon
IiArIHByb3BlcnR5RGF0dW0udmFsdWUgKyAiJyIgKyAocHJvcGVydHlEYXR1bS5pbXBvcnRhbnQg
PyAiICFpbXBvcnRhbnQiIDogIiIpICsgKHByb3BlcnR5RGF0dW0ucGFyc2VkID8gIiIgOiAiIG5v
bi1wYXJzZWQiKSArIl0gQFsiICsgcHJvcGVydHlEYXR1bS5zdGFydCArICItIiArIHByb3BlcnR5
RGF0dW0uZW5kICsgIl0iKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGZhZWQ4ZWUuLmY4ZTE5NzMgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAt
MTA2NSw2ICsxMDY1LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9Jbmpl
Y3RlZFNjcmlwdEhvc3QuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2Fj
aGVBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKyAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ0YzcxYjUuLjZmZTc5YTUgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTcyNCw2ICsxNzI0LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKKwlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggN2NmNTBhYS4uNDE2NjU2ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTE4MjYsNiArMTgyNiw4IEBACiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuaCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgnLAogICAgICAgICAgICAgJ2lu
c3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCcsCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAxZmRlNjg1Li42OWI4
NTcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5wcm8KQEAgLTk2MCw2ICs5NjAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5q
ZWN0ZWRTY3JpcHRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9u
Q2FjaGVBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBcCisg
ICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgXApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXggNTVjOGQ3Mi4uYjc2YmRjYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MjQxMyw2ICs1MjQxMywxNCBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNw
ZWN0b3JcSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvckNTU0FnZW50Lmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxp
bnNwZWN0b3JcSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZGQ0YThiNi4uMmNi
OGE3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE0
NTEsNiArMTQ1MSw4IEBACiAJCTgxQkUyMDk5MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVy
ZmFjZS5oICovOyB9OwogCQk4MUJFMjBEMjExRjRCQzMyMDA5MTVERkEgLyogSlNJREJDdXJzb3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIw
QTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLzsgfTsKIAkJODFCRTIwRDMx
MUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBODExRjRCNjZGMDA5MTVERkEgLyogSlNJREJD
dXJzb3IuaCAqLzsgfTsKKwkJODJBQjE3NDMxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNT
U0FnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgKi87IH07
CisJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJBQjE3NDIxMjRCOTlF
QzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggKi87IH07CiAJCTgyQjY1ODk4MTE4OUUz
OTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3Bl
Y3RvckNTU1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODJCNjU4OUExMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQjY1ODk5
MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi87IH07CiAJCTgyRTNE
OERFMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJFM0Q4REMxMjJFQTBEMTAw
M0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi87IH07CkBAIC03NDEzLDYgKzc0
MTUsOCBAQAogCQk4MUJFMjA5QzExRjRBQkJEMDA5MTVERkEgLyogSURCQ3Vyc29yLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBJREJDdXJzb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJDdXJzb3IuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjBBODExRjRCNjZGMDA5MTVERkEgLyogSlNJREJD
dXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNJREJDdXJzb3IuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODJBQjE3NDExMjRCOTlFQzAwQzUwNjlEIC8q
IEluc3BlY3RvckNTU0FnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluc3BlY3RvckNTU0FnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU0FnZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JD
U1NTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDU1NT
dG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkI2NTg5OTExODlFNDc2MDBF
MDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk4MkUzRDhEQzEyMkVBMEQxMDAzQUU1QkMgLyogQ1NTUHJvcGVydHlTb3VyY2VEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5U291
cmNlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTg2NCw2ICsxMTg2
OCw4IEBACiAJCQkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5o
ICovLAogCQkJCTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVy
LmNwcCAqLywKIAkJCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJv
bGxlci5oICovLAorCQkJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NB
Z2VudC5jcHAgKi8sCisJCQkJODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNT
U0FnZW50LmggKi8sCiAJCQkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNT
U1N0b3JlLmNwcCAqLywKIAkJCQk4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9y
Q1NTU3RvcmUuaCAqLywKIAkJCQk0MUYwNjIxMzBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5jcHAgKi8sCkBAIC0yMDU4Miw2ICsyMDU4OCw3IEBACiAJCQkJODQ3
MzBEOTExMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyogUG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODQ3MzBEOTMxMjQ4RjBCMzAwRDNBOUM5IC8qIFNwb3RMaWdodFNvdXJjZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJODJBQjE3NDQxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3Rv
ckNTU0FnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIzMDYxLDYgKzIzMDY4LDcgQEAKIAkJCQk4
NDczMEQ4QTEyNDhGMEIzMDBEM0E5QzkgLyogRkVUaWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg0NzMwRDhDMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVR1cmJ1bGVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODQ3MzBEOTAxMjQ4RjBCMzAwRDNBOUM5IC8qIExpZ2h0U291cmNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueSBiL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRleCBjNTVmOTk4Li5jMDEzOWEyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvV2ViQ29yZS9jc3MvQ1NT
R3JhbW1hci55CkBAIC00MDgsNyArNDA4LDkgQEAgcnVsZV9saXN0OgogIDsKIAogdmFsaWRfcnVs
ZToKLSAgICBydWxlc2V0CisgICAgYmVmb3JlX3J1bGVzZXQgcnVsZXNldCB7CisgICAgICAgICQk
ID0gJDI7CisgICAgfQogICB8IG1lZGlhCiAgIHwgcGFnZQogICB8IGZvbnRfZmFjZQpAQCAtOTEw
LDggKzkxMiwyMiBAQCBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb246CiAgICAgfQogICA7
CiAKK2JlZm9yZV9ydWxlc2V0OgorICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFyc2Vy
KiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFya1Nl
bGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgfQorICA7CisKK2JlZm9yZV9ydWxlX29wZW5pbmdfYnJh
Y2U6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2Fz
dDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrU2VsZWN0b3JMaXN0RW5kKCk7
CisgICAgfQorICA7CisKIHJ1bGVzZXQ6Ci0gICAgc2VsZWN0b3JfbGlzdCAneycgbWF5YmVfc3Bh
Y2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Cisg
ICAgc2VsZWN0b3JfbGlzdCBiZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlICd7JyBtYXliZV9zcGFj
ZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKICAg
ICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKTsKICAg
ICAgICAgJCQgPSBwLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOwogICAgIH0KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4
IDg2YmNkMGQuLmZjYmJkM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
KysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTQ2LDEwICsxNDYsOSBAQCBDU1NQ
YXJzZXI6OkNTU1BhcnNlcihib29sIHN0cmljdFBhcnNpbmcpCiAgICAgLCBtX2hhc0ZvbnRGYWNl
T25seVZhbHVlcyhmYWxzZSkKICAgICAsIG1faGFkU3ludGFjdGljYWxseVZhbGlkQ1NTUnVsZShm
YWxzZSkKICAgICAsIG1fZGVmYXVsdE5hbWVzcGFjZShzdGFyQXRvbSkKLSAgICAsIG1fcnVsZUJv
ZHlTdGFydE9mZnNldCgwKQotICAgICwgbV9ydWxlQm9keUVuZE9mZnNldCgwKQotICAgICwgbV9w
cm9wZXJ0eVN0YXJ0T2Zmc2V0KFVJTlRfTUFYKQotICAgICwgbV9wcm9wZXJ0eUVuZE9mZnNldChV
SU5UX01BWCkKKyAgICAsIG1fc2VsZWN0b3JMaXN0UmFuZ2UoMCwgMCkKKyAgICAsIG1fcnVsZUJv
ZHlSYW5nZSgwLCAwKQorICAgICwgbV9wcm9wZXJ0eVJhbmdlKFVJTlRfTUFYLCBVSU5UX01BWCkK
ICAgICAsIG1fcnVsZVJhbmdlTWFwKDApCiAgICAgLCBtX2N1cnJlbnRTdHlsZURhdGEoMCkKICAg
ICAsIG1fZGF0YSgwKQpAQCAtNTQ4MCwxMSArNTQ3OSwxMyBAQCBDU1NSdWxlKiBDU1NQYXJzZXI6
OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8Q1NTU2VsZWN0b3IqPiogc2VsZWN0b3JzKQogICAgICAg
ICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZS5yZWxlYXNlKCkpOwogICAgICAgICBp
ZiAobV9ydWxlUmFuZ2VNYXApIHsKICAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRTdHlsZURh
dGEpOwotICAgICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRhLT5zdHlsZUJvZHlSYW5nZSA9IFNv
dXJjZVJhbmdlKG1fcnVsZUJvZHlTdGFydE9mZnNldCwgbV9ydWxlQm9keUVuZE9mZnNldCk7Cisg
ICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlID0gbV9zZWxl
Y3Rvckxpc3RSYW5nZTsKKyAgICAgICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c3R5bGVCb2R5
UmFuZ2UgPSBtX3J1bGVCb2R5UmFuZ2U7CiAgICAgICAgICAgICBtX3J1bGVSYW5nZU1hcC0+c2V0
KHJlc3VsdCwgbV9jdXJyZW50U3R5bGVEYXRhLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBtX2N1
cnJlbnRTdHlsZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICB9
CiAgICAgfQorICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKTsKICAgICByZXNldFJ1bGVCb2R5
TWFya3MoKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
NTczMywyNiArNTczNCw0NCBAQCB2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGlu
ZUFuZFBvc2l0aW9uKCkKICAgICBtYXJrUnVsZUJvZHlTdGFydCgpOwogfQogCit2b2lkIENTU1Bh
cnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCkKK3sKKyAgICBtX3NlbGVjdG9yTGlzdFJhbmdl
LnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRhOworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya1NlbGVj
dG9yTGlzdEVuZCgpCit7CisgICAgaWYgKCFtX2N1cnJlbnRTdHlsZURhdGEpCisgICAgICAgIHJl
dHVybjsKKyAgICBVQ2hhciogbGlzdEVuZCA9IHl5dGV4dDsKKyAgICB3aGlsZSAobGlzdEVuZCA+
IG1fZGF0YSArIDEpIHsKKyAgICAgICAgaWYgKGlzQ1NTV2hpdGVzcGFjZSgqKGxpc3RFbmQgLSAx
KSkpCisgICAgICAgICAgICAtLWxpc3RFbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IGxpc3RFbmQgLSBtX2Rh
dGE7Cit9CisKIHZvaWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlTdGFydCgpCiB7CiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwogICAgIGlmICgqeXl0ZXh0ID09ICd7JykK
ICAgICAgICAgKytvZmZzZXQ7IC8vIFNraXAgdGhlIHJ1bGUgYm9keSBvcGVuaW5nIGJyYWNlLgot
ICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpCi0gICAgICAgIG1fcnVsZUJv
ZHlTdGFydE9mZnNldCA9IG9mZnNldDsKKyAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0KQorICAgICAgICBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQgPSBvZmZzZXQ7CiB9CiAKIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUnVsZUJvZHlFbmQoKQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9
IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBpZiAob2Zmc2V0ID4gbV9ydWxlQm9keUVuZE9mZnNldCkK
LSAgICAgICAgbV9ydWxlQm9keUVuZE9mZnNldCA9IG9mZnNldDsKKyAgICBpZiAob2Zmc2V0ID4g
bV9ydWxlQm9keVJhbmdlLmVuZCkKKyAgICAgICAgbV9ydWxlQm9keVJhbmdlLmVuZCA9IG9mZnNl
dDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eVN0YXJ0KCkKIHsKLSAgICB1bnNp
Z25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7Ci0gICAgbV9wcm9wZXJ0eVN0YXJ0T2Zmc2V0
ID0gb2Zmc2V0OworICAgIG1fcHJvcGVydHlSYW5nZS5zdGFydCA9IHl5dGV4dCAtIG1fZGF0YTsK
IH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91
bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKQEAgLTU3NjAsMTEgKzU3NzksMTEgQEAgdm9pZCBD
U1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQ
cm9wZXJ0eVBhcnNlZCkKICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAg
ICAgaWYgKCp5eXRleHQgPT0gJzsnKSAvLyBJbmNsdWRlIHNlbWljb2xvbiBpbnRvIHRoZSBwcm9w
ZXJ0eSB0ZXh0LgogICAgICAgICArK29mZnNldDsKLSAgICBtX3Byb3BlcnR5RW5kT2Zmc2V0ID0g
b2Zmc2V0OwotICAgIGlmIChtX3Byb3BlcnR5U3RhcnRPZmZzZXQgIT0gVUlOVF9NQVggJiYgbV9j
dXJyZW50U3R5bGVEYXRhKSB7CisgICAgbV9wcm9wZXJ0eVJhbmdlLmVuZCA9IG9mZnNldDsKKyAg
ICBpZiAobV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ICE9IFVJTlRfTUFYICYmIG1fY3VycmVudFN0eWxl
RGF0YSkgewogICAgICAgICAvLyBUaGlzIHN0dWZmIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiB0aGUg
c3R5bGUgZGF0YSByZXRyaWV2YWwgaXMgcmVxdWVzdGVkIGJ5IGNsaWVudC4KLSAgICAgICAgY29u
c3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5U3RhcnRPZmZzZXQ7Ci0gICAgICAgIGNvbnN0
IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlFbmRPZmZzZXQ7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0OworICAgICAgICBjb25zdCB1bnNpZ25l
ZCBlbmQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5kOwogICAgICAgICBBU1NFUlQoc3RhcnQgPCBlbmQp
OwogICAgICAgICBTdHJpbmcgcHJvcGVydHlTdHJpbmcgPSBTdHJpbmcobV9kYXRhICsgc3RhcnQs
IGVuZCAtIHN0YXJ0KS5zdHJpcFdoaXRlU3BhY2UoKTsKICAgICAgICAgaWYgKHByb3BlcnR5U3Ry
aW5nLmVuZHNXaXRoKCI7IiwgdHJ1ZSkpCkBAIC01Nzc3LDcgKzU3OTYsNyBAQCB2b2lkIENTU1Bh
cnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3Bl
cnR5UGFyc2VkKQogICAgICAgICBTdHJpbmcgdmFsdWUgPSBwcm9wZXJ0eVN0cmluZy5zdWJzdHJp
bmcoY29sb25JbmRleCArIDEsIHByb3BlcnR5U3RyaW5nLmxlbmd0aCgpKS5zdHJpcFdoaXRlU3Bh
Y2UoKTsKICAgICAgICAgLy8gVGhlIHByb3BlcnR5IHJhbmdlIGlzIHJlbGF0aXZlIHRvIHRoZSBk
ZWNsYXJhdGlvbiBzdGFydCBvZmZzZXQuCiAgICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+cHJv
cGVydHlEYXRhLmFwcGVuZCgKLSAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1l
LCB2YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uo
bV9wcm9wZXJ0eVN0YXJ0T2Zmc2V0IC0gbV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3Byb3BlcnR5
RW5kT2Zmc2V0IC0gbV9ydWxlQm9keVN0YXJ0T2Zmc2V0KSkpOworICAgICAgICAgICAgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5
UGFyc2VkLCBTb3VyY2VSYW5nZShzdGFydCAtIG1fcnVsZUJvZHlSYW5nZS5zdGFydCwgZW5kIC0g
bV9ydWxlQm9keVJhbmdlLnN0YXJ0KSkpOwogICAgIH0KICAgICByZXNldFByb3BlcnR5TWFya3Mo
KTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKaW5kZXggZjhiMjRkZi4uNzZiYzY1NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTI0MSwxOCAr
MjQxLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVm
YXVsdE5hbWVzcGFjZTsKIAogICAgICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQot
ICAgICAgICB1bnNpZ25lZCBtX3J1bGVCb2R5U3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IG1fcnVsZUJvZHlFbmRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVkIG1fcHJvcGVydHlTdGFydE9m
ZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAgICAgU291
cmNlUmFuZ2UgbV9zZWxlY3Rvckxpc3RSYW5nZTsKKyAgICAgICAgU291cmNlUmFuZ2UgbV9ydWxl
Qm9keVJhbmdlOworICAgICAgICBTb3VyY2VSYW5nZSBtX3Byb3BlcnR5UmFuZ2U7CiAgICAgICAg
IFN0eWxlUnVsZVJhbmdlTWFwKiBtX3J1bGVSYW5nZU1hcDsKICAgICAgICAgUmVmUHRyPENTU1N0
eWxlU291cmNlRGF0YT4gbV9jdXJyZW50U3R5bGVEYXRhOworICAgICAgICB2b2lkIG1hcmtTZWxl
Y3Rvckxpc3RTdGFydCgpOworICAgICAgICB2b2lkIG1hcmtTZWxlY3Rvckxpc3RFbmQoKTsKICAg
ICAgICAgdm9pZCBtYXJrUnVsZUJvZHlTdGFydCgpOwogICAgICAgICB2b2lkIG1hcmtSdWxlQm9k
eUVuZCgpOwogICAgICAgICB2b2lkIG1hcmtQcm9wZXJ0eVN0YXJ0KCk7CiAgICAgICAgIHZvaWQg
bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFy
c2VkKTsKLSAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlTdGFy
dE9mZnNldCA9IG1fcnVsZUJvZHlFbmRPZmZzZXQgPSAwOyB9Ci0gICAgICAgIHZvaWQgcmVzZXRQ
cm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5U3RhcnRPZmZzZXQgPSBtX3Byb3BlcnR5RW5kT2Zm
c2V0ID0gVUlOVF9NQVg7IH0KKyAgICAgICAgdm9pZCByZXNldFNlbGVjdG9yTGlzdE1hcmtzKCkg
eyBtX3NlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gbV9zZWxlY3Rvckxpc3RSYW5nZS5lbmQgPSAw
OyB9CisgICAgICAgIHZvaWQgcmVzZXRSdWxlQm9keU1hcmtzKCkgeyBtX3J1bGVCb2R5UmFuZ2Uu
c3RhcnQgPSBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gMDsgfQorICAgICAgICB2b2lkIHJlc2V0UHJv
cGVydHlNYXJrcygpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVu
ZCA9IFVJTlRfTUFYOyB9CiAgICAgICAgIGludCBsZXgodm9pZCogeXlsdmFsKTsKICAgICAgICAg
aW50IHRva2VuKCkgeyByZXR1cm4geXlUb2s7IH0KICAgICAgICAgVUNoYXIqIHRleHQoaW50KiBs
ZW5ndGgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNw
cCBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAKaW5kZXggMTYyODAzMS4u
ZWI5YzJjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNw
cAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwCkBAIC01NCwxMyAr
NTQsNiBAQCBTb3VyY2VSYW5nZTo6U291cmNlUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVk
IGVuZCkKIHsKIH0KIAotU291cmNlUmFuZ2UmIFNvdXJjZVJhbmdlOjpvcGVyYXRvcj0oY29uc3Qg
U291cmNlUmFuZ2UmIG90aGVyKQotewotICAgIHRoaXMtPnN0YXJ0ID0gb3RoZXIuc3RhcnQ7Ci0g
ICAgdGhpcy0+ZW5kID0gb3RoZXIuZW5kOwotICAgIHJldHVybiAqdGhpczsKLX0KLQogQ1NTUHJv
cGVydHlTb3VyY2VEYXRhOjpDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBwYXJzZWRPaywgY29u
c3QgU291cmNlUmFuZ2UmIHJhbmdlKQogICAgIDogbmFtZShuYW1lKQogICAgICwgdmFsdWUodmFs
dWUpCkBAIC04OCwxNiArODEsNiBAQCBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5
U291cmNlRGF0YSgpCiB7CiB9CiAKLUNTU1Byb3BlcnR5U291cmNlRGF0YSYgQ1NTUHJvcGVydHlT
b3VyY2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBvdGhlcikK
LXsKLSAgICBuYW1lID0gb3RoZXIubmFtZTsKLSAgICB2YWx1ZSA9IG90aGVyLnZhbHVlOwotICAg
IGltcG9ydGFudCA9IG90aGVyLmltcG9ydGFudDsKLSAgICBwYXJzZWRPayA9IG90aGVyLnBhcnNl
ZE9rOwotICAgIHJhbmdlID0gb3RoZXIucmFuZ2U7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBT
dHJpbmcgQ1NTUHJvcGVydHlTb3VyY2VEYXRhOjp0b1N0cmluZygpIGNvbnN0CiB7CiAgICAgREVG
SU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGVtcHR5VmFsdWUsICgiZSIpKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oIGIvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmgKaW5kZXggYmVhZTlkMC4uYWM1NTQxMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmgKQEAgLTQ0LDcgKzQ0LDYgQEAgY2xhc3MgQ1NTU3R5bGVSdWxlOwog
c3RydWN0IFNvdXJjZVJhbmdlIHsKICAgICBTb3VyY2VSYW5nZSgpOwogICAgIFNvdXJjZVJhbmdl
KHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpOwotICAgIFNvdXJjZVJhbmdlJiBvcGVyYXRv
cj0oY29uc3QgU291cmNlUmFuZ2UmIG90aGVyKTsKIAogICAgIHVuc2lnbmVkIHN0YXJ0OwogICAg
IHVuc2lnbmVkIGVuZDsKQEAgLTU2LDkgKzU1LDcgQEAgc3RydWN0IENTU1Byb3BlcnR5U291cmNl
RGF0YSB7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgcGFyc2VkT2ssIGNvbnN0IFNv
dXJjZVJhbmdlJiByYW5nZSk7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKGNvbnN0IENTU1By
b3BlcnR5U291cmNlRGF0YSYgb3RoZXIpOwogICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSgpOwot
ICAgIEFMV0FZU19JTkxJTkUgfkNTU1Byb3BlcnR5U291cmNlRGF0YSgpIHsgfQogCi0gICAgQ1NT
UHJvcGVydHlTb3VyY2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRh
JiBvdGhlcik7CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OwogCkBAIC03OSw2ICs3NiwxMCBAQCBzdHJ1Y3QgQ1NTU3R5bGVTb3VyY2VEYXRh
IDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTU3R5bGVTb3VyY2VEYXRhPiB7CiAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTU3R5bGVTb3VyY2VEYXRhKCkpOwogICAgIH0KIAorICAgIC8vIFtP
cHRpb25hbF0gUmFuZ2Ugb2YgdGhlIHNlbGVjdG9yIGxpc3QgaW4gdGhlIGVuY2xvc2luZyBzb3Vy
Y2UuCisgICAgLy8gSWYgdGhlIHN0eWxlIGlzIGEgcHVyZSBkZWNsYXJhdGlvbiwgdGhlIHJhbmdl
IGlzICgwLCAwKS4KKyAgICBTb3VyY2VSYW5nZSBzZWxlY3Rvckxpc3RSYW5nZTsKKwogICAgIC8v
IFJhbmdlIG9mIHRoZSBzdHlsZSB0ZXh0IGluIHRoZSBlbmNsb3Npbmcgc291cmNlLgogICAgIFNv
dXJjZVJhbmdlIHN0eWxlQm9keVJhbmdlOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURh
dGE+IHByb3BlcnR5RGF0YTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVj
dG9yLnBtCmluZGV4IDgwZTI0M2IuLjJmNWY0MTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29k
ZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzMsNiArMzMsMTEgQEAgJHR5cGVUcmFuc2Zvcm17
IkRPTSJ9ID0gewogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2VudC5oIiwKICAgICAi
ZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRvbUFnZW50KCkiLAog
fTsKKyR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKKyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3Rv
ckNTU0FnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIsCisgICAg
ImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5jc3NBZ2VudCgpIiwK
K307CiAkdHlwZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewogICAgICJmb3J3YXJk
IiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwK
aW5kZXggY2UyYjAzZi4uM2YwNzllZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0xOTEs
NyArMTkxLDI1IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHRv
Z2dsZVN0eWxlRW5hYmxlZChpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyBwcm9wZXJ0eU5hbWUs
IGluIGJvb2xlYW4gZGlzYWJsZWQsIG91dCBWYWx1ZSBzdHlsZSk7CiAgICAgICAgIFtoYW5kbGVy
PURPTV0gdm9pZCBzZXRSdWxlU2VsZWN0b3IoaW4gbG9uZyBydWxlSWQsIGluIFN0cmluZyBzZWxl
Y3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFu
IHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgYWRkUnVs
ZShpbiBTdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcgc2VsZWN0ZWROb2RlSWQsIG91dCBWYWx1ZSBy
dWxlLCBvdXQgYm9vbGVhbiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICAgICAgW2hhbmRsZXI9
RE9NXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRp
ZXMpOworCisgICAgICAgIC8vIEdldCBhbGwgc3R5bGVzIGFwcGxpY2FibGUgdG8gdGhlIGdpdmVu
IG5vZGUuCisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9k
ZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNT
U10gdm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IEFycmF5
IHJ1bGVzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNoZWRQc2V1ZG9SdWxl
c0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcnVsZXMpOyAvLyBhcnJheSBvZiB7
IHBzZXVkb0lkOiA8bnVtYmVyPiwgcnVsZXM6IGFycmF5IG9mICNjc3NSdWxlIH0KKyAgICAgICAg
W2hhbmRsZXI9Q1NTXSB2b2lkIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGluIGxvbmcgbm9k
ZUlkLCBvdXQgVmFsdWUgc3R5bGVzKTsgLy8gbWFwOiBhdHRyaWJ1dGVOYW1lOiAjY3NzU3R5bGUK
KyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGlu
IGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcmVzdWx0KTsgLy8gYXJyYXkgb2YgeyBpbmxpbmVTdHls
ZTogI2Nzc1N0eWxlLCBtYXRjaGVkQ1NTUnVsZXM6IGFycmF5IG9mICNjc3NSdWxlIH0KKyAgICAg
ICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldElubGluZVN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2Rl
SWQsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRBbGxT
dHlsZXMyKG91dCBBcnJheSBzdHlsZVNoZWV0SWRzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIGdldFN0eWxlU2hlZXQyKGluIGxvbmcgc3R5bGVTaGVldElkLCBvdXQgVmFsdWUgc3R5bGVT
aGVldCk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoaW4g
bG9uZyBzdHlsZVNoZWV0SWQsIGluIFN0cmluZyB0ZXh0KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIHNldFN0eWxlVGV4dDIoaW4gbG9uZyBzdHlsZUlkLCBpbiBTdHJpbmcgdGV4dCwgb3V0
IFZhbHVlIHN0eWxlKTsKKworICAgICAgICAvLyBFbmFibGUvZGlzYWJsZSBwcm9wZXJ0eS4gW21v
ZGVsXQorICAgICAgICAvLyBTaG91bGQgYmUgc2VudCBpbiBhIGJhdGNoIGJlZm9yZSBzZXRTdHls
ZVRleHQoKSAoc28gdGhhdCBub3RoaW5nIGNhbiBoYXBwZW4gYmV0d2VlbiB0aGUgdHdvIGNhbGxz
KS4KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHRvZ2dsZVByb3BlcnR5MihpbiBsb25nIHN0
eWxlSWQsIGluIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBpbiBib29sZWFuIGRpc2FibGVkKTsKKyAg
ICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFJ1bGVTZWxlY3RvcjIoaW4gbG9uZyBydWxlSWQs
IGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOworICAgICAgICBbaGFuZGxlcj1D
U1NdIHZvaWQgYWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9kZUlkLCBpbiBTdHJpbmcgc2VsZWN0
b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOwogCiAgICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywgb3V0
IFN0cmluZyBjb29raWVzU3RyaW5nKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9p
ZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUsIGluIFN0cmluZyBkb21haW4pOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmNiMjZhZDYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJO
b2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0
TGlzdC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW5zcGVjdG9yQ1NTQWdlbnQ6Oklu
c3BlY3RvckNTU0FnZW50KEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpCisgICAgOiBtX2Nz
c1N0b3JlKGNzc1N0b3JlKQorICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKKyAgICAsIG1fZG9t
QWdlbnQoZG9tQWdlbnQpCit7Cit9CisKK0luc3BlY3RvckNTU0FnZW50Ojp+SW5zcGVjdG9yQ1NT
QWdlbnQoKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnJl
c2V0KCkKK3sKK30KKworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChs
b25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5v
ZGVJZCk7CisgICAgcmV0dXJuICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVM
RU1FTlRfTk9ERSkgPyAwIDogc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQorCit2b2lk
IEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQg
PSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCk7Cisg
ICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBkb2N1bWVudC0+c3R5bGVTZWxlY3Rvcigp
OworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxl
UnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAqcmVzdWx0ID0gYnVp
bGRBcnJheUZvckNTU1J1bGVzKGRvY3VtZW50LCBtYXRjaGVkUnVsZXMuZ2V0KCkpOworfQorCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25n
IG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQoreworICAgIEVsZW1lbnQq
IGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAg
ICAgIHJldHVybjsKKyAgICAqcmVzdWx0ID0gYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKGVs
ZW1lbnQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBdHRyaWJ1dGVTdHlsZXNG
b3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQorewor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JBdHRy
aWJ1dGVTdHlsZXMoZWxlbWVudCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElu
bGluZVN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0
eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAg
ICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKyAgICAqc3R5bGUgPSBidWlsZE9iamVj
dEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCksIHRydWUpOworfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9y
SWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIERP
TVdpbmRvdyogZGVmYXVsdFZpZXcgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRW
aWV3KCk7CisgICAgaWYgKCFkZWZhdWx0VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgKnN0
eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShkZWZhdWx0Vmlldy0+Z2V0Q29tcHV0ZWRTdHlsZShl
bGVtZW50LCAiIikuZ2V0KCksIGZhbHNlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9k
ZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpIHsKKyAgICAgICAgKnN0eWxlID0gSW5zcGVjdG9yQXJy
YXk6OmNyZWF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBpbmhlcml0ZWRTdHlsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7Cisg
ICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAg
ICB3aGlsZSAocGFyZW50RWxlbWVudCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBwYXJlbnRTdHlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChw
YXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgp
KQorICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldE9iamVjdCgiaW5saW5lU3R5bGUiLCBidWls
ZE9iamVjdEZvclN0eWxlKHBhcmVudEVsZW1lbnQtPnN0eWxlKCksIHRydWUpKTsKKworICAgICAg
ICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVy
RG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVu
dChwYXJlbnRFbGVtZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHBhcmVudFN0eWxlLT5zZXRB
cnJheSgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvckNTU1J1bGVzKHBhcmVudEVsZW1l
bnQtPm93bmVyRG9jdW1lbnQoKSwgcGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisKKyAgICAg
ICAgaW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0eWxlLnJlbGVhc2UoKSk7Cisg
ICAgICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Cisg
ICAgfQorICAgICpzdHlsZSA9IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piog
c3R5bGVzKQoreworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiYgZG9j
dW1lbnRzID0gZG9tQWdlbnQoKS0+ZG9jdW1lbnRzKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxS
ZWZQdHI8RG9jdW1lbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZG9jdW1lbnRzLmJlZ2luKCk7
IGl0ICE9IGRvY3VtZW50cy5lbmQoKTsgKytpdCkgeworICAgICAgICBTdHlsZVNoZWV0TGlzdCog
bGlzdCA9ICgqaXQpLT5zdHlsZVNoZWV0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXND
U1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgKCpzdHlsZXMpLT5wdXNoTnVtYmVyKGNz
c1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHls
ZVNoZWV0KSkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50
OjpnZXRTdHlsZVNoZWV0Mihsb25nIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVl
Piogc3R5bGVTaGVldE9iamVjdCkKK3sKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0g
Y3NzU3RvcmUoKS0+c3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYgKHN0eWxl
U2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgKnN0eWxlU2hlZXRPYmpl
Y3QgPSBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSwgc3R5
bGVTaGVldCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0
Mihsb25nIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5zdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVl
dElkKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERy
b3AgYWxsIHN0eWxlc2hlZXQtcmVsYXRlZCBkYXRhIGFuZCBiaW5kaW5ncy4KKyAgICBjc3NTdG9y
ZSgpLT5kaWRTdHlsZVNoZWV0VGV4dENoYW5nZShzdHlsZVNoZWV0SWQsIHRleHQpOworCisgICAg
Ly8gQ2xlYXIgdGhlIHN0eWxlIHNoZWV0LgorICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgc3R5bGVTaGVl
dC0+cmVtb3ZlKGkpOworCisgICAgc3R5bGVTaGVldC0+cGFyc2VTdHJpbmcodGV4dCwgc3R5bGVT
aGVldC0+dXNlU3RyaWN0UGFyc2luZygpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
c2V0U3R5bGVUZXh0Mihsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQoreworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQor
ICAgICAgICByZXR1cm47CisgICAgRWxlbWVudCogaW5saW5lU3R5bGVFbGVtZW50ID0gY3NzU3Rv
cmUoKS0+aW5saW5lU3R5bGVFbGVtZW50KHN0eWxlKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBpZiAoaW5saW5lU3R5bGVFbGVtZW50KQorICAgICAgICBpbmxpbmVTdHlsZUVsZW1l
bnQtPnNldEF0dHJpYnV0ZSgic3R5bGUiLCBjc3NUZXh0LCBlYyk7CisgICAgZWxzZQorICAgICAg
ICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7CisKKyAgICBpZiAoZWMpCisgICAgICAg
IHJldHVybjsKKworICAgIGNzc1N0b3JlKCktPmRpZFN0eWxlVGV4dENoYW5nZShzdHlsZUlkLCBj
c3NUZXh0KTsKKyAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mihsb25nIC8qc3R5
bGVJZCovLCBsb25nIC8qcHJvcGVydHlPcmRpbmFsKi8sIGJvb2wgLypkaXNhYmxlZCovKQorewor
ICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKK30KKworLy8gVGhlcmUgaXMgbm8gd2F5IHRvIHRlbGwg
aWYgdGhlIHNldHRpbmcgaGFzIHN1Y2NlZWRlZCwgc2luY2UgQ1NTU3R5bGVSdWxlOjpzZXRTZWxl
Y3RvclRleHQoKQorLy8gZG9lcyBub3QgcmVwb3J0IGVycm9ycywgYXMgcGVyIHRoZSBjdXJyZW50
IENTU09NIFczQyBFZGl0b3IncyBEcmFmdCAoMzEgQXVndXN0IDIwMTApLgordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yMihsb25nIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQoreworICAgIENTU1N0eWxl
UnVsZSogcnVsZSA9IGNzc1N0b3JlKCktPnJ1bGVGb3JJZChydWxlSWQpOworICAgIGlmICghcnVs
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IElu
c3BlY3RvckNTU1N0b3JlOjpnZXRQYXJlbnRTdHlsZVNoZWV0KHJ1bGUtPnN0eWxlKCkpOworICAg
IGlmICghc3R5bGVTaGVldCB8fCAhc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgU3RyaW5nIHNoZWV0VGV4dDsKKyAgICBsb25nIHN0eWxlU2hlZXRJZCA9IGNz
c1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgIGJvb2wgc3VjY2VzcyA9
IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnNoZWV0VGV4dCk7Cisg
ICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVT
b3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAg
ICBzdWNjZXNzID0gY3NzU3RvcmUoKS0+Z2V0U3R5bGVTb3VyY2VEYXRhKHJ1bGUtPnN0eWxlKCks
ICZzb3VyY2VEYXRhKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAg
IHJ1bGUtPnNldFNlbGVjdG9yVGV4dChzZWxlY3Rvcik7CisKKyAgICBTdHJpbmcgbmV3U3R5bGVT
aGVldFRleHQgPSBzaGVldFRleHQuc3Vic3RyaW5nKDAsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlz
dFJhbmdlLnN0YXJ0KTsKKyAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzZWxlY3RvcjsKKyAgICBu
ZXdTdHlsZVNoZWV0VGV4dCArPSBzaGVldFRleHQucmlnaHQoc2hlZXRUZXh0Lmxlbmd0aCgpIC0g
c291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICBjc3NTdG9yZSgpLT5kaWRT
dHlsZVNoZWV0VGV4dENoYW5nZShzdHlsZVNoZWV0SWQsIG5ld1N0eWxlU2hlZXRUZXh0LCBmYWxz
ZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShzdHlsZVNoZWV0LT5kb2N1bWVu
dCgpLCBydWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZTIobG9uZyBj
b250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50KCktPm5vZGVGb3JJZChj
b250ZXh0Tm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0
KG5vZGUtPmRvY3VtZW50KCksIHRydWUpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAg
cmV0dXJuOyAvLyBjb3VsZCBub3QgYWRkIGEgc3R5bGVzaGVldCB0byB0aGUgb3duZXJEb2N1bWVu
dAorCisgICAgU3RyaW5nIHRleHQ7CisgICAgbG9uZyBzdHlsZVNoZWV0SWQgPSBjc3NTdG9yZSgp
LT5iaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBjc3NTdG9y
ZSgpLT5zdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0SWQsICZ0ZXh0KTsKKyAgICBpZiAoIXN1Y2Nl
c3MpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAodGV4dC5sZW5ndGgoKSkKKyAgICAgICAgdGV4
dCArPSAiXG4iOworICAgIHRleHQgKz0gc2VsZWN0b3I7CisgICAgdGV4dCArPSAieyB9IjsKKyAg
ICBzZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVTaGVldElkLCB0ZXh0KTsKKyAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHJ1bGVzID0gc3R5bGVTaGVldC0+Y3NzUnVsZXMoKTsKKworICAgIEFTU0VSVChy
dWxlcy0+bGVuZ3RoKCkpOworICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvckNTU1N0
b3JlOjphc0NTU1N0eWxlUnVsZShydWxlcy0+aXRlbShydWxlcy0+bGVuZ3RoKCkgLSAxKSk7Cisg
ICAgQVNTRVJUKHJ1bGUpOworICAgICpyZXN1bHQgPSBidWlsZE9iamVjdEZvclJ1bGUobm9kZS0+
ZG9jdW1lbnQoKSwgcnVsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyAr
K2kpCisgICAgICAgIHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lU3RyaW5nc1tp
XSk7CisgICAgKmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
ckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50KQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHN0eWxlQXR0cmlidXRlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5h
dHRyaWJ1dGVJdGVtKGkpOworICAgICAgICBpZiAoYXR0cmlidXRlLT5zdHlsZSgpKSB7CisgICAg
ICAgICAgICBTdHJpbmcgYXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7Cisg
ICAgICAgICAgICBzdHlsZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0Zjgo
KS5kYXRhKCksIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCB0cnVlKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHN0eWxlQXR0cmlidXRlczsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkQXJyYXlGb3JD
U1NSdWxlcyhEb2N1bWVudCogb3duZXJEb2N1bWVudCwgQ1NTUnVsZUxpc3QqIG1hdGNoZWRSdWxl
cykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1hdGNoZWRDU1NSdWxlcyA9IEluc3Bl
Y3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBtYXRjaGVkUnVs
ZXMgJiYgaSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBDU1NSdWxl
KiBydWxlID0gbWF0Y2hlZFJ1bGVzLT5pdGVtKGkpOworICAgICAgICBpZiAocnVsZS0+dHlwZSgp
ID09IENTU1J1bGU6OlNUWUxFX1JVTEUpCisgICAgICAgICAgICBtYXRjaGVkQ1NTUnVsZXMtPnB1
c2hPYmplY3QoYnVpbGRPYmplY3RGb3JSdWxlKG93bmVyRG9jdW1lbnQsIHN0YXRpY19jYXN0PENT
U1N0eWxlUnVsZSo+KHJ1bGUpKSk7CisgICAgfQorICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXMu
cmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7CisgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25lckRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBSZWZQdHI8UmVuZGVyU3R5bGU+IHJlbmRlclN0
eWxlID0gZWxlbWVudC0+c3R5bGVGb3JSZW5kZXJlcigpOworCisgICAgZm9yIChQc2V1ZG9JZCBw
c2V1ZG9JZCA9IEZJUlNUX1BVQkxJQ19QU0VVRE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lO
VEVSTkFMX1BTRVVET0lEOyBwc2V1ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9J
ZCArIDEpKSB7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2Vs
ZWN0b3ItPnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBmYWxz
ZSwgdHJ1ZSk7CisgICAgICAgIGlmIChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5n
dGgoKSkgeworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHNldWRvU3R5bGVz
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+
c2V0TnVtYmVyKCJwc2V1ZG9JZCIsIHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKTsKKyAgICAg
ICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvckNTU1J1
bGVzKGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSwgbWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAg
ICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJlbGVhc2UoKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBiaW5kLCBSZWZQdHI8Q1NTU3R5bGVT
b3VyY2VEYXRhPiogc291cmNlRGF0YSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmIChiaW5kKSB7CisgICAg
ICAgIGxvbmcgc3R5bGVJZCA9IGNzc1N0b3JlKCktPmJpbmRTdHlsZShzdHlsZSk7CisgICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJpZCIsIHN0eWxlSWQpOworICAgICAgICBDU1NTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0ID0gSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFBhcmVudFN0eWxlU2hl
ZXQoc3R5bGUpOworICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgeworICAgICAgICAgICAg
bG9uZyBwYXJlbnRTdHlsZVNoZWV0SWQgPSBJbnNwZWN0b3JDU1NTdG9yZTo6aW5saW5lU3R5bGVF
bGVtZW50KHN0eWxlKSA/IC0xIDogY3NzU3RvcmUoKS0+YmluZFN0eWxlU2hlZXQocGFyZW50U3R5
bGVTaGVldCk7CisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcigicGFyZW50U3R5bGVTaGVl
dElkIiwgcGFyZW50U3R5bGVTaGVldElkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQt
PnNldFN0cmluZygid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJo
ZWlnaHQiKSk7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0
YSA9IDA7CisgICAgYm9vbCBoYXNTb3VyY2VEYXRhID0gISghc291cmNlRGF0YSk7CisgICAgUmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4gbmV3U291cmNlRGF0YTsKKyAgICBpZiAoIWhhc1NvdXJj
ZURhdGEpIHsKKyAgICAgICAgbmV3U291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3Jl
YXRlKCk7CisgICAgICAgIGhhc1NvdXJjZURhdGEgPSBjc3NTdG9yZSgpLT5nZXRTdHlsZVNvdXJj
ZURhdGEoc3R5bGUsICZuZXdTb3VyY2VEYXRhKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbmV3U291
cmNlRGF0YSA9ICpzb3VyY2VEYXRhOworICAgIGlmIChoYXNTb3VyY2VEYXRhKSB7CisgICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIG5ld1NvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIG5l
d1NvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgICAgIHByb3BlcnR5RGF0YSA9
ICZuZXdTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgfQorICAgIHBvcHVsYXRlT2JqZWN0
V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eURhdGEpOwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50
Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiogcHJvcGVydHlEYXRhKQoreworICAgIC8vIHByb3BlcnRpZXM6IEFycmF5IG9mCisgICAg
Ly8gICBpbmRleDpudW1iZXIgPz8/CisgICAgLy8gICBuYW1lOnN0cmluZworICAgIC8vICAgdmFs
dWU6c3RyaW5nCisgICAgLy8gICBwcmlvcml0eTp7ImltcG9ydGFudCIsICIifQorICAgIC8vICAg
c3RhdHVzOnsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIn0KKyAgICAvLyAgIHBhcnNl
ZDpib29sZWFuCisgICAgLy8gICBpbXBsaWNpdDpib29sZWFuCisgICAgLy8gICBzaG9ydGhhbmQ6
c3RyaW5nIChtYXkgYmUgZW1wdHkpCisgICAgLy8gc2hvcnRoYW5kVmFsdWVzOiBNYXAKKyAgICAv
LyAgIHNob3J0aGFuZE5hbWUgLT4gc2hvcnRoYW5kVmFsdWUKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9w
ZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4g
Zm91bmRTaG9ydGhhbmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVz
OworCisgICAgLy8gU291cmNlLWJhc2VkIHByb3BlcnRpZXMuCisgICAgaWYgKHByb3BlcnR5RGF0
YSkgeworICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5l
bmQoKTsgKytpdCkgeworICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBw
cm9wZXJ0eUVudHJ5ID0gKml0OworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHJvcGVy
dGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
bmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFt
ZXMuYWRkKG5hbWUpOworCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwg
bmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5
RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHki
LCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOworICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOyAvLyBGSVhNRTogbm8g
ZGlzYWJsZWQgcHJvcGVydGllcyBzdXBwb3J0IGZvciB0aGUgbW9tZW50CisgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsK
KyAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlF
bnRyeS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRP
ZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7CisgICAgICAgICAgICBpZiAocHJvcGVy
dHlFbnRyeS5wYXJzZWRPaykgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0g
c3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICAgICAgICAgIHByb3Bl
cnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5z
KHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChz
aG9ydGhhbmQpOworICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmlu
ZyhzaG9ydGhhbmQsIHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5
LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPjo6aXRlcmF0
b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChu
YW1lKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3Vz
QWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25k
LT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIpOyAvLyBib3RoICJkaXNhYmxlZCIgYW5k
ICJhY3RpdmUiIHNoYWxsIHR1cm4gImluYWN0aXZlIgorICAgICAgICAgICAgICAgIGFjdGl2ZUl0
LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsgLy8gaW5hY3RpdmUgcHJv
cGVydGllcyBkbyBub3QgcGFydGljaXBhdGUgaW4gc2hvcnRoYW5kcworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1l
LCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdHlsZS1iYXNlZCBwcm9w
ZXJ0aWVzLgorICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7CisgICAg
ICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisKKyAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKTsKKyAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQ
cmlvcml0eSgibmFtZSIpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0
Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIHByb3BlcnR5LT5z
ZXRCb29sZWFuKCJwYXJzZWRPayIsIHRydWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJzdGF0dXMiLCAic3R5bGUiKTsKKyAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5n
ZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
c2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAg
ICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFu
ZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0
aGFuZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVy
dGllcyIsIHByb3BlcnRpZXMpOworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRWYWx1
ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERp
c2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24pCit7CisgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZv
ciAoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uOjppdGVyYXRvciBpdCA9IGRlY2xhcmF0aW9uLT5i
ZWdpbigpOyBpdCAhPSBkZWNsYXJhdGlvbi0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgaXQtPmZpcnN0KTsKKyAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBpdC0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBpdC0+c2Vjb25kLnNlY29uZCk7CisgICAg
ICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkucmVsZWFzZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHByb3BlcnRpZXMucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChEb2N1
bWVudCogb3duZXJEb2N1bWVudCwgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5iaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsK
KyAgICByZXN1bHQtPnNldE51bWJlcigiaWQiLCBpZCk7CisgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOworICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygi
dGl0bGUiLCBzdHlsZVNoZWV0LT50aXRsZSgpKTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29s
IHN1Y2Nlc3MgPSBjc3NTdG9yZSgpLT5zdHlsZVNoZWV0VGV4dChpZCwgJnRleHQpOworICAgIGlm
IChzdWNjZXNzKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHRleHQpOworICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIGRvbUFnZW50KCktPmlkRm9y
RG9jdW1lbnROb2RlKHN0eWxlU2hlZXQtPmRvY3VtZW50KCkpKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGNzc1J1bGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFBhc3NS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHls
ZVNoZWV0LCB0cnVlKTsKKyAgICBpZiAoY3NzUnVsZUxpc3QpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNzc1J1bGVMaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBDU1NSdWxlKiBydWxlID0gY3NzUnVsZUxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAo
cnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgICAgICBjc3NSdWxlcy0+cHVzaE9iamVj
dChidWlsZE9iamVjdEZvclJ1bGUob3duZXJEb2N1bWVudCwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4ocnVsZSkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQtPnNldEFycmF5KCJj
c3NSdWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1bGUq
IHJ1bGUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzZXJBZ2VudCwgKCJ1
c2VyLWFnZW50IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1c2VyLCAoInVz
ZXIiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGluc3BlY3RvciwgKCJpbnNw
ZWN0b3IiKSk7CisgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBh
cmVudFN0eWxlU2hlZXQoKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVj
dG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygi
Y3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJj
ZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1
bWVudFVSTCIsIGRvbUFnZW50KCktPmRvY3VtZW50VVJMU3RyaW5nKG93bmVyRG9jdW1lbnQpKTsK
KyAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaHJlZiIsIHBhcmVudFN0
eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0TnVt
YmVyKCJpZCIsIGNzc1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHls
ZVNoZWV0VmFsdWUucmVsZWFzZSgpKTsKKyAgICB9CisgICAgU3RyaW5nIG9yaWdpbigiIik7Cisg
ICAgaWYgKHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgp
ICYmIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAgICAgIG9yaWdpbiA9
IHVzZXJBZ2VudDsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHlsZVNoZWV0ICYmIHBhcmVudFN0eWxl
U2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2Rl
TmFtZSgpID09ICIjZG9jdW1lbnQiKQorICAgICAgICBvcmlnaW4gPSB1c2VyOworICAgIGVsc2Ug
aWYgKHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9PSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHls
ZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZhbHNlKSkKKyAgICAgICAgb3JpZ2luID0gaW5zcGVjdG9y
OworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBvcmlnaW4pOworCisgICAgLy8gQmlu
ZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCisgICAgYm9vbCBiaW5kID0gb3JpZ2luICE9IHVzZXJB
Z2VudCAmJiBvcmlnaW4gIT0gdXNlcjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBz
b3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1Y2Nl
c3MgPSBjc3NTdG9yZSgpLT5nZXRTdHlsZVNvdXJjZURhdGEocnVsZS0+c3R5bGUoKSwgJnNvdXJj
ZURhdGEpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJz
ZWxlY3RvclN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQp
OworICAgICAgICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JFbmRPZmZzZXQiLCBzb3VyY2VE
YXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOworICAgIH0KKyAgICByZXN1bHQtPnNldE9iamVj
dCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQsIHN1Y2Nl
c3MgPyAmc291cmNlRGF0YSA6IDApKTsKKworICAgIGlmIChiaW5kKQorICAgICAgICByZXN1bHQt
PnNldE51bWJlcigiaWQiLCBjc3NTdG9yZSgpLT5iaW5kUnVsZShydWxlKSk7CisgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50
Ojpsb25naGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0
cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGll
czsKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBp
bmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJv
cGVydGllcy5jb250YWlucyhpbmRpdmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0
eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVh
bFByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworU3RyaW5nIEluc3BlY3Rv
ckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29u
c3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBTb21lIHNob3J0aGFuZHMgKGxpa2UgYm9yZGVyKSByZXR1
cm4gYSBudWxsIHZhbHVlLCBzbyBjb21wdXRlIGEgc2hvcnRoYW5kIHZhbHVlLgorICAgICAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTgyMyBpcyBmaXhlZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFBy
b3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmlzUHJvcGVy
dHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBpZiAoaW5kaXZpZHVhbFZh
bHVlID09ICJpbml0aWFsIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIiAiKTsK
KyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChpbmRpdmlkdWFsVmFsdWUpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50Ojpz
aG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5n
JiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0
UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5Lmlz
RW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHls
ZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJp
b3JpdHkoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBwcmlvcml0eTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiYTM5YTEKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NBZ2Vu
dF9oCisjZGVmaW5lIEluc3BlY3RvckNTU0FnZW50X2gKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1
ZXMuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2NsYXNzIENTU1J1bGU7CitjbGFz
cyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHls
ZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRWxlbWVudDsKK2NsYXNzIEV2ZW50
OworY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CitjbGFzcyBJbnNwZWN0b3JGcm9udGVuZDsKK2Ns
YXNzIE1hdGNoSm9iOworY2xhc3MgTmFtZU5vZGVNYXA7CitjbGFzcyBOb2RlOworY2xhc3MgUGFn
ZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50IDog
cHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ1NTQWdlbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gY3JlYXRlKEluc3BlY3RvckNTU1N0b3Jl
KiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbnNwZWN0b3JET01BZ2Vu
dCogZG9tQWdlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rv
ckNTU0FnZW50KGNzc1N0b3JlLCBmcm9udGVuZCwgZG9tQWdlbnQpKTsKKyAgICB9CisKKyAgICBJ
bnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZy
b250ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KTsKKyAgICB+SW5z
cGVjdG9yQ1NTQWdlbnQoKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIE1ldGhvZHMg
Y2FsbGVkIGZyb20gdGhlIGZyb250ZW5kIGZvciBDU1Mgc3R5bGVzIGluc3BlY3Rpb24uCisgICAg
dm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiogcnVsZXMpOworICAgIHZvaWQgZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIo
bG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJ1bGVzKTsKKyAgICB2b2lkIGdl
dEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZXMpOworICAgIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpOworICAgIHZvaWQgZ2V0Q29tcHV0ZWRT
dHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSk7
CisgICAgdm9pZCBnZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRy
PEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKKworICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOyAvLyBhcnJheSBvZjogc3R5bGVTaGVldElkCisK
KyAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgc2V0U3R5bGVTaGVldFRleHQyKGxvbmcgc3R5
bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZvaWQgc2V0U3R5bGVUZXh0Mihs
b25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KTsKKyAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgdm9pZCB0b2dnbGVQcm9wZXJ0
eTIobG9uZyBzdHlsZUlkLCBsb25nIHByb3BlcnR5T3JkaW5hbCwgYm9vbCBkaXNhYmxlZCk7Cisg
ICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgYWRkUnVsZTIo
bG9uZyBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOworCitwcml2YXRlOgorICAgIEluc3BlY3Rv
ckNTU1N0b3JlKiBjc3NTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzU3RvcmU7IH0KKyAgICBJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RvbUFnZW50OyB9
CisKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBiaW5kLCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
Piogc291cmNlRGF0YSA9IDApOworICAgIHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9w
ZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVj
dG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSk7CisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERp
c2FibGVkU3R5bGVEZWNsYXJhdGlvbiopOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
IGJ1aWxkQXJyYXlGb3JFbGVtZW50QXR0cmlidXRlcyhFbGVtZW50KiBlbGVtZW50KTsKKyAgICBQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yQ1NTUnVsZXMoRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQsIENTU1J1bGVMaXN0Kik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gYnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQpOworICAg
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxl
cyhFbGVtZW50KiBlbGVtZW50KTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVp
bGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1bGUqKTsK
KyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0
KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVNoZWV0Kik7CisgICAgVmVjdG9yPFN0
cmluZz4gbG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJp
bmcmIHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworICAgIFN0
cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5n
JiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgRWxlbWVudCogZWxlbWVudEZvcklkKGxvbmcgbm9k
ZUlkKTsKKworICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CisKKyAgICBJbnNwZWN0b3JDU1NT
dG9yZSogbV9jc3NTdG9yZTsKKyAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKKyAg
ICBJbnNwZWN0b3JET01BZ2VudCogbV9kb21BZ2VudDsKK307CisKKyNlbmRpZgorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNwZWN0b3JDU1NBZ2VudF9o
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwCmluZGV4IGIwMTk4NjAuLjRh
ODc3YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNw
cAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTcwLDgg
KzcwLDggQEAgdm9pZCBJbnNwZWN0b3JDU1NTdG9yZTo6cmVzZXQoKQogICAgIG1faWRUb1N0eWxl
LmNsZWFyKCk7CiAgICAgbV9ydWxlVG9JZC5jbGVhcigpOwogICAgIG1faWRUb1J1bGUuY2xlYXIo
KTsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9zdHlsZVNoZWV0VG9PZmZzZXRzKTsKLSAgICBtX3N0
eWxlU2hlZXRUb09mZnNldHMuY2xlYXIoKTsKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9pZFRvU3R5
bGVTaGVldE9mZnNldHMpOworICAgIG1faWRUb1N0eWxlU2hlZXRPZmZzZXRzLmNsZWFyKCk7CiAg
ICAgbV9zdHlsZVNoZWV0VG9JZC5jbGVhcigpOwogICAgIG1faWRUb1N0eWxlU2hlZXQuY2xlYXIo
KTsKICAgICBtX2lkVG9TdHlsZVNoZWV0VGV4dC5jbGVhcigpOwpAQCAtMTEyLDMyICsxMTIsMjgg
QEAgQ1NTU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTU3RvcmU6Omluc3BlY3RvclN0eWxlU2hlZXQo
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIGIKICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVl
dDsKIH0KIAotU3RyaW5nIEluc3BlY3RvckNTU1N0b3JlOjpzdHlsZVNoZWV0VGV4dChsb25nIHN0
eWxlU2hlZXRJZCkKK2Jvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OnN0eWxlU2hlZXRUZXh0KGxvbmcg
c3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBJZFRvU3R5bGVTaGVldFRleHRN
YXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvU3R5bGVTaGVldFRleHQuZmluZChzdHlsZVNoZWV0SWQp
OwotICAgIGlmIChpdCAhPSBtX2lkVG9TdHlsZVNoZWV0VGV4dC5lbmQoKSkKLSAgICAgICAgcmV0
dXJuIGl0LT5zZWNvbmQ7CisgICAgaWYgKGl0ICE9IG1faWRUb1N0eWxlU2hlZXRUZXh0LmVuZCgp
KSB7CisgICAgICAgICpyZXN1bHQgPSBpdC0+c2Vjb25kOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CiAKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklk
KHN0eWxlU2hlZXRJZCk7CiAgICAgaWYgKCFzdHlsZVNoZWV0KQotICAgICAgICByZXR1cm4gU3Ry
aW5nKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFN0cmluZyByZXN1bHQ7Ci0gICAg
Ym9vbCBzdWNjZXNzID0gZmFsc2U7Ci0gICAgTm9kZSogb3duZXJOb2RlID0gc3R5bGVTaGVldC0+
b3duZXJOb2RlKCk7Ci0gICAgaWYgKG93bmVyTm9kZSAmJiBvd25lck5vZGUtPm5vZGVUeXBlKCkg
PT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7Ci0gICAgICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihvd25lck5vZGUpOwotICAgICAgICBpZiAob3duZXJFbGVt
ZW50LT50YWdOYW1lKCkubG93ZXIoKSA9PSAic3R5bGUiKSB7Ci0gICAgICAgICAgICByZXN1bHQg
PSBpbmxpbmVTdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0KTsKLSAgICAgICAgICAgIHN1Y2Nlc3Mg
PSB0cnVlOwotICAgICAgICB9Ci0gICAgfQorICAgIFN0cmluZyB0ZXh0OworICAgIGJvb2wgc3Vj
Y2VzcyA9IGlubGluZVN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXQsICZ0ZXh0KTsKICAgICBpZiAo
IXN1Y2Nlc3MpCi0gICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KHN0eWxl
U2hlZXQsICZyZXN1bHQpOworICAgICAgICBzdWNjZXNzID0gcmVzb3VyY2VTdHlsZVNoZWV0VGV4
dChzdHlsZVNoZWV0LCAmdGV4dCk7CiAKLSAgICBpZiAoc3VjY2VzcykKLSAgICAgICAgbV9pZFRv
U3R5bGVTaGVldFRleHQuc2V0KHN0eWxlU2hlZXRJZCwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVz
dWx0OworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIG1faWRUb1N0eWxlU2hlZXRUZXh0LnNl
dChzdHlsZVNoZWV0SWQsIHRleHQpOworICAgICAgICAqcmVzdWx0ID0gdGV4dDsKKyAgICB9Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKIGJvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OnJlc291cmNl
U3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgU3RyaW5nKiByZXN1bHQp
CkBAIC0xNDUsMTggKzE0MSwxOCBAQCBib29sIEluc3BlY3RvckNTU1N0b3JlOjpyZXNvdXJjZVN0
eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIFN0cmluZwogICAgIHJldHVy
biBtX2luc3BlY3RvckNvbnRyb2xsZXItPnJlc291cmNlQ29udGVudEZvclVSTChzdHlsZVNoZWV0
LT5maW5hbFVSTCgpLCBzdHlsZVNoZWV0LT5kb2N1bWVudCgpLCByZXN1bHQpOwogfQogCi1TdHJp
bmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmlubGluZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQq
IHN0eWxlU2hlZXQpCitib29sIEluc3BlY3RvckNTU1N0b3JlOjppbmxpbmVTdHlsZVNoZWV0VGV4
dChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBTdHJpbmcqIHJlc3VsdCkKIHsKICAgICBOb2Rl
KiBvd25lck5vZGUgPSBzdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKICAgICBpZiAoIW93bmVyTm9k
ZSB8fCBvd25lck5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFIHx8IG1fc3R5
bGVTaGVldFRvSWQuZmluZChzdHlsZVNoZWV0KSA9PSBtX3N0eWxlU2hlZXRUb0lkLmVuZCgpKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBFbGVt
ZW50KiBvd25lckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob3duZXJOb2RlKTsKICAg
ICBpZiAob3duZXJFbGVtZW50LT50YWdOYW1lKCkubG93ZXIoKSAhPSAic3R5bGUiKQotICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgcmV0dXJuIG93bmVyRWxlbWVudC0+aW5uZXJUZXh0KCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqcmVzdWx0ID0gb3duZXJFbGVtZW50LT5pbm5l
clRleHQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotCiAvLyBBbGwgcmFuZ2VzIGFyZTogW3N0
YXJ0OyBlbmQpIChzdGFydCAtIGluY2x1c2l2ZSwgZW5kIC0gZXhjbHVzaXZlKS4KIGJvb2wgSW5z
cGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0YShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkKIHsKQEAgLTE3OSwyMCAr
MTc1LDIzIEBAIGJvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0YShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmVmUHRyPENTCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+KiByYW5nZXNWZWN0b3Ig
PSAwOwotICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXA6Oml0ZXJhdG9yIGl0ID0gbV9zdHlsZVNo
ZWV0VG9PZmZzZXRzLmZpbmQoc3R5bGVTaGVldCk7Ci0gICAgaWYgKGl0ID09IG1fc3R5bGVTaGVl
dFRvT2Zmc2V0cy5lbmQoKSkgewotICAgICAgICBTdHJpbmcgdGV4dCA9IHN0eWxlU2hlZXRUZXh0
KGJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpKTsKLSAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHko
KSkgeworICAgIGxvbmcgc3R5bGVTaGVldElkID0gYmluZFN0eWxlU2hlZXQoc3R5bGVTaGVldCk7
CisgICAgSWRUb1N0eWxlU2hlZXRPZmZzZXRzTWFwOjppdGVyYXRvciBpdCA9IG1faWRUb1N0eWxl
U2hlZXRPZmZzZXRzLmZpbmQoc3R5bGVTaGVldElkKTsKKyAgICBpZiAoaXQgPT0gbV9pZFRvU3R5
bGVTaGVldE9mZnNldHMuZW5kKCkpIHsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIGJv
b2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnRleHQpOworICAgICAg
ICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0
eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldC0+b3duZXJOb2RlKCkp
OwogICAgICAgICAgICAgQ1NTUGFyc2VyIHA7CiAgICAgICAgICAgICBTdHlsZVJ1bGVSYW5nZU1h
cCBydWxlUmFuZ2VNYXA7CiAgICAgICAgICAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5n
ZXQoKSwgdGV4dCwgMCwgJnJ1bGVSYW5nZU1hcCk7CiAgICAgICAgICAgICByYW5nZXNWZWN0b3Ig
PSBuZXcgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID47CiAgICAgICAgICAgICBl
eHRyYWN0UmFuZ2VzKG5ld1N0eWxlU2hlZXQuZ2V0KCksIHJ1bGVSYW5nZU1hcCwgcmFuZ2VzVmVj
dG9yKTsKLSAgICAgICAgICAgIG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5zZXQoc3R5bGVTaGVldCwg
cmFuZ2VzVmVjdG9yKTsKKyAgICAgICAgICAgIG1faWRUb1N0eWxlU2hlZXRPZmZzZXRzLnNldChz
dHlsZVNoZWV0SWQsIHJhbmdlc1ZlY3Rvcik7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAg
ICAgcmFuZ2VzVmVjdG9yID0gaXQtPnNlY29uZDsKKwogICAgIGlmICghcmFuZ2VzVmVjdG9yKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIyOSw2ICsyMjgsOSBAQCBib29sIEluc3BlY3Rv
ckNTU1N0b3JlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhOb2RlKiBub2RlLCBSZWZQdHI8Q1NT
U3R5bGVTb3VyYwogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBTdHJpbmcgc3R5bGVUZXh0
ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInN0eWxl
Iik7CisKKyAgICAoKnJlc3VsdCktPnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0ID0gMDsKKyAgICAo
KnJlc3VsdCktPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IDA7CiAgICAgaWYgKHN0eWxlVGV4dC5p
c0VtcHR5KCkpIHsKICAgICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7
CiAgICAgICAgICgqcmVzdWx0KS0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gMDsKQEAgLTI0MSw2ICsy
NDMsMzcgQEAgYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMo
Tm9kZSogbm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAor
Ym9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5bGVUZXh0KGxvbmcgc3R5bGVJZCwgU3RyaW5n
KiBkZWNsYXJhdGlvblRleHQpCit7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBz
dHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGUpOwor
ICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICpkZWNsYXJhdGlvblRleHQgPSBlbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoInN0eWxlIik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBnZXRQYXJlbnRTdHlsZVNoZWV0KHN0eWxlKTsK
KyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTdHJpbmcg
dGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dChiaW5kU3R5bGVTaGVldChz
dHlsZVNoZWV0KSwgJnRleHQpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc3R5bGVTb3VyY2VEYXRhID0g
Q1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBzdWNjZXNzID0gZ2V0U3R5bGVTb3Vy
Y2VEYXRhKHN0eWxlLCAmc3R5bGVTb3VyY2VEYXRhKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQoc3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlS
YW5nZS5zdGFydCA8IHRleHQubGVuZ3RoKCkpOworICAgIEFTU0VSVChzdHlsZVNvdXJjZURhdGEt
PnN0eWxlQm9keVJhbmdlLmVuZCA8IHRleHQubGVuZ3RoKCkpOworICAgICpkZWNsYXJhdGlvblRl
eHQgPSB0ZXh0LnN1YnN0cmluZyhzdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0
LCBzdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCAtIHN0eWxlU291cmNlRGF0YS0+
c3R5bGVCb2R5UmFuZ2Uuc3RhcnQpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0aWMK
IENTU1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU1N0b3JlOjpnZXRQYXJlbnRTdHlsZVNoZWV0KENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQogewogICAgIGlmICghc3R5bGUpCkBAIC0yODksNiAr
MzIyLDgwIEBAIENTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTU3RvcmU6OnJ1bGVGb3JJZChsb25n
IHJ1bGVJZCkKICAgICByZXR1cm4gaXQgPT0gbV9pZFRvUnVsZS5lbmQoKSA/IDAgOiBpdC0+c2Vj
b25kLmdldCgpOwogfQogCitsb25nIEluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGVTaGVldChD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIGxvbmcgaWQgPSBtX3N0eWxlU2hlZXRU
b0lkLmdldChzdHlsZVNoZWV0KTsKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIGlkID0gbV9sYXN0
U3R5bGVTaGVldElkKys7CisgICAgICAgIG1faWRUb1N0eWxlU2hlZXQuc2V0KGlkLCBzdHlsZVNo
ZWV0KTsKKyAgICAgICAgbV9zdHlsZVNoZWV0VG9JZC5zZXQoc3R5bGVTaGVldCwgaWQpOworICAg
IH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTU3RvcmU6OmRpZFN0eWxl
U2hlZXRUZXh0Q2hhbmdlKGxvbmcgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIG5ld1RleHQs
IGJvb2wgc2hvdWxkRHJvcFJ1bGVzKQoreworICAgIGlmIChzaG91bGREcm9wUnVsZXMpCisgICAg
ICAgIGRyb3BSdWxlcyhzdHlsZVNoZWV0SWQpOworICAgIG1faWRUb1N0eWxlU2hlZXRUZXh0LnNl
dChzdHlsZVNoZWV0SWQsIG5ld1RleHQpOworICAgIG1faWRUb1N0eWxlU2hlZXRPZmZzZXRzLnJl
bW92ZShzdHlsZVNoZWV0SWQpOworfQorCit2b2lkIEluc3BlY3RvckNTU1N0b3JlOjpkaWRTdHls
ZVRleHRDaGFuZ2UobG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCit7CisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlm
ICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChpbmxpbmVTdHlsZUVsZW1lbnQo
c3R5bGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHls
ZVNoZWV0ID0gZ2V0UGFyZW50U3R5bGVTaGVldChzdHlsZSk7CisgICAgU3RyaW5nIHBhdGNoZWRU
ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShw
YXJlbnRTdHlsZVNoZWV0LCBzdHlsZUlkLCBuZXdUZXh0LCAmcGF0Y2hlZFRleHQpOworICAgIGlm
ICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOworICAgIGRpZFN0eWxlU2hlZXRUZXh0Q2hhbmdl
KGJpbmRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpLCBwYXRjaGVkVGV4dCwgZmFsc2UpOwor
fQorCitib29sIEluc3BlY3RvckNTU1N0b3JlOjpzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5
bGUoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcm
IG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgbG9uZyBzdHlsZVNoZWV0SWQg
PSBiaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29s
IHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0SWQsICZ0ZXh0KTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NTdHlsZVNv
dXJjZURhdGE+IHN0eWxlUmFuZ2VzID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAg
ICBzdWNjZXNzID0gZ2V0U3R5bGVTb3VyY2VEYXRhKHN0eWxlRm9ySWQoc3R5bGVJZCksICZzdHls
ZVJhbmdlcyk7CisgICAgQVNTRVJUKHN1Y2Nlc3MpOworICAgIHVuc2lnbmVkIGJvZHlTdGFydCA9
IHN0eWxlUmFuZ2VzLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKKyAgICB1bnNpZ25lZCBib2R5RW5k
ID0gc3R5bGVSYW5nZXMtPnN0eWxlQm9keVJhbmdlLmVuZDsKKyAgICBBU1NFUlQoYm9keVN0YXJ0
IDwgYm9keUVuZCk7CisgICAgQVNTRVJUKGJvZHlFbmQgPD0gdGV4dC5sZW5ndGgoKSk7IC8vIGJv
ZHlFbmQgaXMgZXhjbHVzaXZlCisKKyAgICBTdHJpbmcgcGF0Y2hlZFRleHQgPSB0ZXh0LnN1YnN0
cmluZygwLCBib2R5U3RhcnQpOworICAgIHBhdGNoZWRUZXh0ICs9IG5ld1N0eWxlVGV4dDsKKyAg
ICBwYXRjaGVkVGV4dCArPSB0ZXh0LnN1YnN0cmluZyhib2R5RW5kLCB0ZXh0Lmxlbmd0aCgpKTsK
KyAgICAqcmVzdWx0ID0gcGF0Y2hlZFRleHQ7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTU3RvcmU6OmRyb3BSdWxlcyhsb25nIHN0eWxlU2hlZXRJZCkKK3sKKyAgICBp
ZiAoIXN0eWxlU2hlZXRJZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOworICAgIEFTU0VSVChz
dHlsZVNoZWV0KTsKKworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZXMgPSBzdHlsZVNoZWV0
LT5jc3NSdWxlcyh0cnVlKTsKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAg
Zm9yIChpbnQgaSA9IDAsIHNpemUgPSBydWxlcy0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisg
ICAgICAgIHVuYmluZFJ1bGUoYXNDU1NTdHlsZVJ1bGUocnVsZXMtPml0ZW0oaSkpKTsKK30KKwog
bG9uZyBJbnNwZWN0b3JDU1NTdG9yZTo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKQogewogICAgIGxvbmcgaWQgPSBtX3N0eWxlVG9JZC5nZXQoc3R5bGUpOwpAQCAtMzAwLDE1
ICs0MDcsMTYgQEAgbG9uZyBJbnNwZWN0b3JDU1NTdG9yZTo6YmluZFN0eWxlKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQogICAgIHJldHVybiBpZDsKIH0KIAotbG9uZyBJbnNwZWN0b3JDU1NT
dG9yZTo6YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3ZvaWQgSW5z
cGVjdG9yQ1NTU3RvcmU6OnVuYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQog
ewotICAgIGxvbmcgaWQgPSBtX3N0eWxlU2hlZXRUb0lkLmdldChzdHlsZVNoZWV0KTsKLSAgICBp
ZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0U3R5bGVTaGVldElkKys7Ci0gICAgICAgIG1f
aWRUb1N0eWxlU2hlZXQuc2V0KGlkLCBzdHlsZVNoZWV0KTsKLSAgICAgICAgbV9zdHlsZVNoZWV0
VG9JZC5zZXQoc3R5bGVTaGVldCwgaWQpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7CisgICAgaWYg
KCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbG9uZyBpZCA9IG1fc3R5bGVUb0lkLmdl
dChzdHlsZSk7CisgICAgaWYgKCFpZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRUb1N0eWxl
LnJlbW92ZShpZCk7CisgICAgbV9zdHlsZVRvSWQucmVtb3ZlKHN0eWxlKTsKIH0KIAogbG9uZyBJ
bnNwZWN0b3JDU1NTdG9yZTo6YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQpAQCAtMzIyLDYg
KzQzMCwxOSBAQCBsb25nIEluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUpCiAgICAgcmV0dXJuIGlkOwogfQogCit2b2lkIEluc3BlY3RvckNTU1N0b3JlOjp1bmJp
bmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGxvbmcgaWQgPSBtX3J1bGVUb0lkLmdldChydWxlKTsKKyAgICBpZiAoIWlk
KQorICAgICAgICByZXR1cm47CisgICAgbV9pZFRvUnVsZS5yZW1vdmUoaWQpOworICAgIG1fcnVs
ZVRvSWQucmVtb3ZlKHJ1bGUpOworICAgIHVuYmluZFN0eWxlKHJ1bGUtPnN0eWxlKCkpOworfQor
CiAvLyBzdGF0aWMKIEVsZW1lbnQqIEluc3BlY3RvckNTU1N0b3JlOjppbmxpbmVTdHlsZUVsZW1l
bnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTU3RvcmUuaAppbmRleCA5YjMyOWRmLi5hMDllNWU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmgKQEAgLTU1LDcgKzU1LDcgQEAgdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxl
RGVjbGFyYXRpb24qLCBsb25nPiBTdHlsZVRvSWRNYXA7CiB0eXBlZGVmIEhhc2hNYXA8bG9uZywg
UmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+ID4gSWRUb1N0eWxlTWFwOwogdHlwZWRlZiBIYXNo
TWFwPENTU1N0eWxlUnVsZSosIGxvbmc+IFJ1bGVUb0lkTWFwOwogdHlwZWRlZiBIYXNoTWFwPGxv
bmcsIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gSWRUb1J1bGVNYXA7Ci10eXBlZGVmIEhhc2hNYXA8
Q1NTU3R5bGVTaGVldCosIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+KiA+IFN0
eWxlU2hlZXRUb09mZnNldHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8bG9uZywgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4qID4gSWRUb1N0eWxlU2hlZXRPZmZzZXRzTWFwOwogdHlw
ZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBsb25nPiBTdHlsZVNoZWV0VG9JZE1hcDsKIHR5
cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBJZFRvU3R5bGVTaGVl
dE1hcDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBTdHJpbmc+IElkVG9TdHlsZVNoZWV0VGV4dE1h
cDsKQEAgLTY3LDYgKzY3LDcgQEAgY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmUgewogcHVibGljOgog
ICAgIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBnZXRQYXJlbnRTdHlsZVNoZWV0KENTU1N0eWxlRGVj
bGFyYXRpb24qKTsKICAgICBzdGF0aWMgRWxlbWVudCogaW5saW5lU3R5bGVFbGVtZW50KENTU1N0
eWxlRGVjbGFyYXRpb24qKTsKKyAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVs
ZShTdHlsZUJhc2UqKTsKIAogICAgIEluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xs
ZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpOwogICAgIH5JbnNwZWN0b3JDU1NTdG9yZSgpOwpAQCAt
NzYsMjYgKzc3LDMyIEBAIHB1YmxpYzoKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0Rm9y
SWQobG9uZyBzdHlsZVNoZWV0SWQpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGxvbmcg
c3R5bGVSdWxlSWQpOwogICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJsZWRTdHls
ZUZvcklkKGxvbmcgc3R5bGVJZCwgYm9vbCBjcmVhdGVJZkFic2VudCk7Ci0gICAgU3RyaW5nIHN0
eWxlU2hlZXRUZXh0KGxvbmcgc3R5bGVTaGVldElkKTsKKyAgICBib29sIHN0eWxlU2hlZXRUZXh0
KGxvbmcgc3R5bGVTaGVldElkLCBTdHJpbmcqIHJlc3VsdCk7CisgICAgdm9pZCBkaWRTdHlsZVNo
ZWV0VGV4dENoYW5nZShsb25nIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBi
b29sIHNob3VsZERyb3BSdWxlcyA9IHRydWUpOworICAgIHZvaWQgZGlkU3R5bGVUZXh0Q2hhbmdl
KGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KTsKICAgICBDU1NTdHlsZVNoZWV0
KiBpbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBib29sIGNyZWF0
ZUlmQWJzZW50KTsKICAgICB2b2lkIHJlbW92ZURvY3VtZW50KERvY3VtZW50Kik7CiAKLSAgICBs
b25nIGJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSk7Ci0gICAgbG9uZyBiaW5kU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOwotICAgIGxvbmcgYmluZFN0eWxlU2hlZXQoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCk7CisgICAgbG9uZyBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNo
ZWV0Kik7CisgICAgbG9uZyBiaW5kUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICB2b2lkIHVuYmlu
ZFJ1bGUoQ1NTU3R5bGVSdWxlKik7CisgICAgdm9pZCBkcm9wUnVsZXMobG9uZyBzdHlsZVNoZWV0
SWQpOworICAgIGxvbmcgYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lk
IHVuYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0
aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqKTsKLSAgICBTdHJpbmcg
aW5saW5lU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCopOworICAgIGJvb2wgaW5saW5lU3R5
bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCosIFN0cmluZyogcmVzdWx0KTsKICAgICBib29sIHJl
c291cmNlU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCosIFN0cmluZyogcmVzdWx0KTsKICAg
ICB2b2lkIGV4dHJhY3RSYW5nZXMoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0eWxlUnVsZVJhbmdl
TWFwJiwgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4qIHJhbmdlc1ZlY3Rvcik7
CiAgICAgYm9vbCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhOb2RlKiBwYXJlbnROb2RlLCBSZWZQ
dHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogcmVzdWx0KTsKKyAgICBib29sIGdldFN0eWxlVGV4dChs
b25nIHN0eWxlSWQsIFN0cmluZyogZGVjbGFyYXRpb25UZXh0KTsKKyAgICBib29sIHN0eWxlU2hl
ZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZVNoZWV0KiwgbG9uZyBzdHlsZUlkLCBjb25z
dCBTdHJpbmcmIG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpOwogCiAgICAgU3R5bGVUb0lk
TWFwIG1fc3R5bGVUb0lkOwogICAgIElkVG9TdHlsZU1hcCBtX2lkVG9TdHlsZTsKICAgICBSdWxl
VG9JZE1hcCBtX3J1bGVUb0lkOwogICAgIElkVG9SdWxlTWFwIG1faWRUb1J1bGU7Ci0gICAgU3R5
bGVTaGVldFRvT2Zmc2V0c01hcCBtX3N0eWxlU2hlZXRUb09mZnNldHM7CisgICAgSWRUb1N0eWxl
U2hlZXRPZmZzZXRzTWFwIG1faWRUb1N0eWxlU2hlZXRPZmZzZXRzOwogICAgIFN0eWxlU2hlZXRU
b0lkTWFwIG1fc3R5bGVTaGVldFRvSWQ7CiAgICAgSWRUb0Rpc2FibGVkU3R5bGVNYXAgbV9pZFRv
RGlzYWJsZWRTdHlsZTsKICAgICBJZFRvU3R5bGVTaGVldE1hcCBtX2lkVG9TdHlsZVNoZWV0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCA3NjllYWQ0Li5l
YmQ2MjY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAt
NTgsNiArNTgsNyBAQAogI2luY2x1ZGUgIkluamVjdGVkU2NyaXB0SG9zdC5oIgogI2luY2x1ZGUg
Ikluc3BlY3RvckJhY2tlbmQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
ci5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q1NTU3RvcmUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JET01BZ2VudC5oIgpAQCAtNTIxLDYgKzUyMiw3IEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6Y29ubmVjdEZyb250ZW5kKCkKICAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50
cygpOwogICAgIG1fZnJvbnRlbmQgPSBuZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9jbGllbnQpOwog
ICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fY3NzU3RvcmUuZ2V0
KCksIG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fY3NzQWdlbnQgPSBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Y3JlYXRlKG1fY3NzU3RvcmUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCksIG1fZG9tQWdlbnQu
Z2V0KCkpOwogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIG1fc3RvcmFnZUFnZW50ID0gSW5z
cGVjdG9yU3RvcmFnZUFnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CkBAIC02MzMsNiAr
NjM1LDEwIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRp
bWVBZ2VudHMoKQogICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwogICAgIG1fZG9tQWdlbnQu
Y2xlYXIoKTsKIAorICAgIGlmIChtX2Nzc0FnZW50KQorICAgICAgICBtX2Nzc0FnZW50LT5yZXNl
dCgpOworICAgIG1fY3NzQWdlbnQuY2xlYXIoKTsKKwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAg
ICBpZiAobV9zdG9yYWdlQWdlbnQpCiAgICAgICAgIG1fc3RvcmFnZUFnZW50LT5jbGVhckZyb250
ZW5kKCk7CkBAIC04MDQsNiArODEwLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRD
b21taXRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIGlmIChtX2Zyb250ZW5k
KSB7CiAgICAgICAgICAgICBtX2Zyb250ZW5kLT5yZXNldCgpOwogICAgICAgICAgICAgbV9kb21B
Z2VudC0+cmVzZXQoKTsKKyAgICAgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7CiAgICAgICAg
IH0KICNpZiBFTkFCTEUoV09SS0VSUykKICAgICAgICAgbV93b3JrZXJzLmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKaW5kZXggOWU2M2YwMS4uNTFlMDQ1NyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjEsNiArNjEsNyBA
QCBjbGFzcyBJbnNwZWN0b3JBcnJheTsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNz
IEluc3BlY3RvckNTU0FnZW50OwogY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7CiBjbGFzcyBJbnNw
ZWN0b3JET01BZ2VudDsKIGNsYXNzIEluc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZTsKQEAgLTMw
NCw2ICszMDUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRNb25pdG9yaW5nWEhSRW5hYmxl
ZChib29sIGVuYWJsZWQsIGJvb2wqIG5ld1N0YXRlKTsKICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2
ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKKyAgICBJbnNwZWN0b3JDU1NBZ2VudCog
Y3NzQWdlbnQoKSB7IHJldHVybiBtX2Nzc0FnZW50LmdldCgpOyB9CiAgICAgSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50KCkgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQogICAgIHZvaWQg
cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKIApAQCAtMzY3LDYgKzM2OSw3IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPEluc3BlY3RvckZyb250ZW5kQ2xpZW50PiBtX2luc3BlY3RvckZy
b250ZW5kQ2xpZW50OwogICAgIGJvb2wgbV9vcGVuaW5nRnJvbnRlbmQ7CiAgICAgT3duUHRyPElu
c3BlY3RvckZyb250ZW5kPiBtX2Zyb250ZW5kOworICAgIFJlZlB0cjxJbnNwZWN0b3JDU1NBZ2Vu
dD4gbV9jc3NBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7
CiAgICAgUmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAg
T3duUHRyPEluc3BlY3RvckNTU1N0b3JlPiBtX2Nzc1N0b3JlOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCmluZGV4IGY1MWRhNzMuLjBhNTVjNGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTM5OCw2ICszOTgsMTEgQEAgTm9kZSogSW5z
cGVjdG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChsb25nIGlkKQogICAgIHJldHVybiAwOwogfQogCits
b25nIEluc3BlY3RvckRPTUFnZW50OjppZEZvckRvY3VtZW50Tm9kZShOb2RlKiBkb2NOb2RlKQor
eworICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGRvY05vZGUpOworfQorCiB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRDaGlsZE5vZGVzKGxvbmcgbm9kZUlkKQogewogICAg
IHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChub2RlSWQpOwpAQCAtMTIzMCw2ICsxMjM1LDEwIEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlU291cmNlRGF0YShsb25nIHN0eWxlSWQs
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+CiAgICAgcmVzdWx0LT5zZXRPYmplY3QoImJvZHlSYW5n
ZSIsIGJvZHlSYW5nZSk7CiAgICAgYm9keVJhbmdlLT5zZXROdW1iZXIoInN0YXJ0Iiwgc291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQpOwogICAgIGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJl
bmQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOworICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHNlbGVjdG9yUmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgc2VsZWN0b3JSYW5nZSk7CisgICAg
c2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlz
dFJhbmdlLnN0YXJ0KTsKKyAgICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNvdXJj
ZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm9wZXJ0eVJhbmdlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICByZXN1bHQt
PnNldEFycmF5KCJwcm9wZXJ0eURhdGEiLCBwcm9wZXJ0eVJhbmdlcyk7CiAgICAgVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJjZURhdGEtPnByb3BlcnR5
RGF0YTsKQEAgLTE0ODgsMTQgKzE0OTcsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRS
dWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZgogICAg
ICpydWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwg
bmV3UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykKLXsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRl
KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAg
ICAgIHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lU3RyaW5nc1tpXSk7Ci0gICAg
KmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKLX0KLQogUGFzc1JlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQpCiB7CiAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDg5YzZmZDAuLjQxN2Y5NGYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTMxLDcgKzEzMSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0b2dnbGVTdHlsZUVuYWJsZWQobG9uZyBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxlZCwgUmVmUHRyPEluc3Bl
Y3RvclZhbHVlPiogc3R5bGVPYmplY3QpOwogICAgICAgICB2b2lkIHNldFJ1bGVTZWxlY3Rvcihs
b25nIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3Rz
Tm9kZSk7CiAgICAgICAgIHZvaWQgYWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25n
IHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29s
KiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICAgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9w
ZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpOwogCiAgICAgICAg
IC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3RvckNvbnRyb2xsZXIuCiAgICAgICAg
IHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KTsKQEAgLTE0MywxMSArMTQyLDE1
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZp
ZWQoQ2hhcmFjdGVyRGF0YSopOwogCiAgICAgICAgIE5vZGUqIG5vZGVGb3JJZChsb25nIG5vZGVJ
ZCk7CisgICAgICAgIGxvbmcgaWRGb3JEb2N1bWVudE5vZGUoTm9kZSopOwogICAgICAgICBsb25n
IHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSk7CiAgICAgICAgIHZvaWQgcHVzaENo
aWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKTsKICAgICAgICAgdm9pZCBwdXNoTm9kZUJ5
UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nKiBub2RlSWQpOwogICAgICAg
ICBsb25nIGluc3BlY3RlZE5vZGUodW5zaWduZWQgbG9uZyBudW0pOwogICAgICAgICB2b2lkIGNv
cHlOb2RlKGxvbmcgbm9kZUlkKTsKKyAgICAgICAgY29uc3QgTGlzdEhhc2hTZXQ8UmVmUHRyPERv
Y3VtZW50PiA+JiBkb2N1bWVudHMoKSB7IHJldHVybiBtX2RvY3VtZW50czsgfQorCisgICAgICAg
IFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzdGFydExpc3RlbmluZyhEb2N1bWVudCogZG9jdW1l
bnQpOwpAQCAtMTg1LDcgKzE4OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBpc1doaXRlc3BhY2UoTm9kZSogbm9kZSk7CiAKICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFt
ZURvY3VtZW50KCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1
bWVudCogZG9jdW1lbnQpIGNvbnN0OwogICAgICAgICBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3Rv
cmUoKSB7IHJldHVybiBtX2Nzc1N0b3JlOyB9CiAKICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1Rp
bWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69063</attachid>
            <date>2010-09-28 09:57:20 -0700</date>
            <delta_ts>2010-09-29 02:18:39 -0700</delta_ts>
            <desc>[PATCH] Refactored solution according to pfeldman&apos;s advice. No ChangeLogs, not ready for Mac - preliminary review only</desc>
            <filename>cssagent.diff</filename>
            <type>text/plain</type>
            <size>92739</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1B
UEkuY3NzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5j
c3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2Q2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEku
Y3NzCkBAIC0wLDAgKzEsMjIgQEAKK2h0bWwgeworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisK
K2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAhCisKKyAgICBpbXBv
cnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICov
OworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejogIiFpbXBvcnRhbnQi
OworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFkY29sb3IiICEgaW1w
b3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovOworfQorCisvKiBj
b21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVj
dG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8qIG5vdCBhbiAhaW1w
b3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICovCisKK2JvZHkubWFp
bjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBv
cnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisKK2JvZHk6OmFmdGVy
ICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLW5ldy1BUEkuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4y
MjJlMmE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1u
ZXctQVBJLmh0bWwKQEAgLTAsMCArMSwyNDQgQEAKKzxodG1sPgorPGhlYWQ+CisKKzxsaW5rIHJl
bD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyIgLS0+CisK
KzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZWxlbWVudHMtdGVzdHMuanMiPjwvc2NyaXB0PgorPHNj
cmlwdD4KKworZnVuY3Rpb24gZG9pdCgpCit7CisgICAgZnVuY3Rpb24gY2FsbGJhY2socmVzdWx0
KQorICAgIHsKKyAgICAgICAgZHVtcEFycmF5KHJlc3VsdCk7CisgICAgICAgIG5vdGlmeURvbmUo
KTsKKyAgICB9CisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZnJvbnRlbmRfcnVuVGVzdCIs
IGNhbGxiYWNrKTsKK30KKworCisvLyBGcm9udGVuZCBmdW5jdGlvbnMuCisKK2Z1bmN0aW9uIGZy
b250ZW5kX3J1blRlc3QodGVzdENvbnRyb2xsZXIpCit7CisgICAgdGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmRvY3VtZW50KTsKKyAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdE
aXNwYXRjaGVzKGZ1bmN0aW9uKCkgeworICAgICAgICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlQ2Fs
bGJhY2sodGVzdENvbnRyb2xsZXIsIGNvbXB1dGVkU3R5bGUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBDb21wdXRlZCBzdHlsZSBmb3IgYm9keSA9PT0iKTsK
KyAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgY29t
cHV0ZWRTdHlsZSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBtYXRjaGVkUnVsZXND
YWxsYmFjayh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKQorICAgICAgICB7CisgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVz
dENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9keSA9PT0i
KTsKKyAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBt
YXRjaGVkQ1NTUnVsZXMpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcHNldWRvUnVs
ZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgcHNldWRvUnVsZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBQc2V1ZG8gcnVsZXMgZm9yIGJvZHkgPT09ICIp
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwc2V1ZG9SdWxlcy5sZW5ndGg7ICsr
aSkgeworICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiUHNldWRv
SWQ9IiArIHBzZXVkb1J1bGVzW2ldLnBzZXVkb0lkKTsKKyAgICAgICAgICAgICAgICBmcm9udGVu
ZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgcHNldWRvUnVsZXNbaV0ucnVsZXMpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gYXR0cmlidXRlU3R5
bGVzQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlcykKKyAgICAgICAgewor
ICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEF0dHJpYnV0ZSBzdHlsZXMgZm9yIHRh
YmxlID09PSAiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cmlidXRlU3R5bGVz
KSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJBdHRyaWJ1
dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUo
dGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRTdHlsZXNDYWxsYmFjayh0ZXN0
Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3IgYm9keSA9PT0gIik7CisgICAg
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaGVyaXRlZFN0eWxlcy5sZW5ndGg7ICsraSkg
eworICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiTGV2ZWw9IiAr
IChpICsgMSkpOworICAgICAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0
Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzW2ldLmlubGluZVN0eWxlKTsKKyAgICAgICAgICAg
ICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5
bGVzW2ldLm1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBpbmxpbmVTdHlsZUNhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBpbmxpbmVT
dHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNo
KCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IElubGlu
ZSBzdHlsZSBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlT3JT
dHlsZSh0ZXN0Q29udHJvbGxlciwgaW5saW5lU3R5bGUpOworICAgICAgICAgICAgZnJvbnRlbmRf
dGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21B
Z2VudC5kb2N1bWVudC5ib2R5LmlkLCBjb21wdXRlZFN0eWxlQ2FsbGJhY2suYmluZChudWxsLCB0
ZXN0Q29udHJvbGxlcikpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldE1hdGNoZWRSdWxl
c0Zvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBtYXRjaGVk
UnVsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRv
bUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIHBzZXVkb1J1bGVzQ2FsbGJhY2suYmluZChudWxsLCB0
ZXN0Q29udHJvbGxlcikpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldEF0dHJpYnV0ZVN0
eWxlc0Zvck5vZGUyKGZyb250ZW5kX25vZGVGb3JJZCgidGhldGFibGUiKS5pZCwgYXR0cmlidXRl
U3R5bGVzQ2FsbGJhY2suYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgICAgICBJbnNw
ZWN0b3JCYWNrZW5kLmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKFdlYkluc3BlY3Rvci5kb21B
Z2VudC5kb2N1bWVudC5ib2R5LmlkLCBpbmhlcml0ZWRTdHlsZXNDYWxsYmFjay5iaW5kKG51bGws
IHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0SW5saW5lU3R5
bGVGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgaW5saW5l
U3R5bGVDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfSk7Cit9CisK
K2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBydWxlcykK
K3sKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBydWxlcy5sZW5ndGg7ICsraSkKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxl
KHRlc3RDb250cm9sbGVyLCBydWxlc1tpXSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX3Rlc3RT
dHlsZVNoZWV0cyh0ZXN0Q29udHJvbGxlcikKK3sKK3ZhciBuZXdTdHlsZVNoZWV0VGV4dCA9Cisi
Ym9keS5tYWlucGFnZSB7XAorICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3VnaDtcCisg
ICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7XAorfVwKK1wKK2JvZHkge1wKKyAgICB0ZXh0LWFs
aWduOiBqdXN0aWZ5O1wKK31cCisiOworCisgICAgZnVuY3Rpb24gcGF0Y2hTdHlsZVNoZWV0KHRl
c3RDb250cm9sbGVyLCBzdHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9
PT0gTGFzdCBzdHlsZXNoZWV0IHBhdGNoZWQgPT09Iik7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuc2V0U3R5bGVTaGVldFRleHQyKHN0eWxlU2hlZXQuaWQsIG5ld1N0eWxlU2hlZXRUZXh0LAor
ICAgICAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVz
dENvbnRyb2xsZXIsIHN0eWxlU2hlZXQuaWQsIGZyb250ZW5kX2NoYW5nZVNlbGVjdG9yLmJpbmQo
bnVsbCwgdGVzdENvbnRyb2xsZXIpKSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3R5bGVTaGVl
dElkc0xvYWRlZCh0ZXN0Q29udHJvbGxlciwgaWRzKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5w
dXNoKCI9PT0gQWxsIHN0eWxlc2hlZXRzID09PSIpOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGlkcy5sZW5ndGg7ICsraSkKKyAgICAgICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5
bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgaWRzW2ldLCAoaSA8IGlkcy5sZW5ndGggLSAxKSA/IG51
bGwgOiBwYXRjaFN0eWxlU2hlZXQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0K
KyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldEFsbFN0eWxlczIoc3R5bGVTaGVldElkc0xvYWRlZC5i
aW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2NoYW5n
ZVNlbGVjdG9yKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0KQoreworICAgIGZ1bmN0aW9uIGRp
ZFNldFNlbGVjdG9yKHRlc3RDb250cm9sbGVyLCBydWxlKQorICAgIHsKKyAgICAgICAgdGVzdENv
bnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCI9PT0gQWZ0ZXIgc2VsZWN0b3Igc2V0ID09PSIpOworICAgICAgICBmcm9udGVuZF9s
b2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHJ1bGUucGFyZW50U3R5bGVTaGVl
dC5pZCwgZnJvbnRlbmRfc2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsK
KyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFJ1bGVTZWxlY3RvcjIoc3R5bGVTaGVl
dC5jc3NSdWxlc1swXS5pZCwgImh0bWwgKiwgYm9keVtmb289XCJiYXJcIl0iLCBkaWRTZXRTZWxl
Y3Rvci5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5k
X3NldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKK3sKKyAgICBmdW5jdGlv
biBkaWRTZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCI9PT0gQWZ0ZXIgc3R5bGUgdGV4dCBzZXQgPT09Iik7CisgICAgICAgIGZy
b250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgc3R5bGUucGFyZW50
U3R5bGVTaGVldElkLCBmcm9udGVuZF9hZGRSdWxlLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dDIoc3R5bGVTaGVl
dC5jc3NSdWxlc1swXS5zdHlsZS5pZCwgImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7
IiwgZGlkU2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVu
Y3Rpb24gZnJvbnRlbmRfYWRkUnVsZSh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICBmdW5jdGlvbiBk
aWRHZXRNYXRjaGVkUnVsZXModGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxlcykKKyAgICB7
CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IE1hdGNoZWQgcnVsZXMgYWZ0ZXIgcnVsZSBhZGRl
ZCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIs
IG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUodGVz
dENvbnRyb2xsZXIucmVzdWx0cyk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVU
ZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
LmJvZHkuaWQsIGRpZEdldE1hdGNoZWRSdWxlcy5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gcnVsZUFkZGVkKHRlc3RDb250cm9sbGVyLCBydWxlKQor
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVRleHQyKHJ1bGUuc3R5bGUu
aWQsICJmb250OiBzZXJpZiIsIGRpZFNldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5hZGRSdWxlMihXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgImJvZHkiLCBydWxlQWRkZWQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUnVsZU9yU3R5
bGUodGVzdENvbnRyb2xsZXIsIHJ1bGVPclN0eWxlKQoreworICAgIGlmICghcnVsZU9yU3R5bGUp
CisgICAgICAgIHJldHVybjsKKyAgICB2YXIgaXNSdWxlID0gISEocnVsZU9yU3R5bGUuc3R5bGUp
OworICAgIHZhciBzdHlsZSA9IGlzUnVsZSA/IHJ1bGVPclN0eWxlLnN0eWxlIDogcnVsZU9yU3R5
bGU7CisgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goaXNSdWxlID8gInJ1bGUgaWQ9IiArIHJ1bGVPclN0eWxlLmlkICsg
IiAoc3R5bGUgaWQ9IiArIHN0eWxlLmlkICArICIpIiA6ICJzdHlsZSBpZD0iICsgcnVsZU9yU3R5
bGUuaWQpOworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8gKHJ1bGVP
clN0eWxlLnNlbGVjdG9yVGV4dCArICI6IFsnIiArIHJ1bGVPclN0eWxlLm9yaWdpbiArICInICIg
KyBydWxlT3JTdHlsZS5zZWxlY3RvclN0YXJ0T2Zmc2V0ICsgIi0iICsgcnVsZU9yU3R5bGUuc2Vs
ZWN0b3JFbmRPZmZzZXQgKyAiXSIpIDogImVsZW1lbnQuc3R5bGUiKSArICIgWyIgKyBzdHlsZS5z
dGFydE9mZnNldCArICItIiArIHN0eWxlLmVuZE9mZnNldCArICJdIik7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBzdHlsZS5wcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBw
cm9wZXJ0eSA9IHN0eWxlLnByb3BlcnRpZXNbaV07CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiWyciICsgcHJvcGVydHkubmFtZSArICInOiciICsgcHJvcGVydHkudmFsdWUg
KyAiJyIgKyAocHJvcGVydHkucHJpb3JpdHkgPyAiIGlzLWltcG9ydGFudCIgOiAiIikgKyAocHJv
cGVydHkucGFyc2VkT2sgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eS5z
dGFydE9mZnNldCArICItIiArIHByb3BlcnR5LmVuZE9mZnNldCArICJdIik7CisgICAgfQorfQor
CisKK2Z1bmN0aW9uIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxl
ciwgc3R5bGVTaGVldElkLCBjb250aW51YXRpb24pCit7CisgICAgZnVuY3Rpb24gc3R5bGVTaGVl
dExvYWRlZCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKKyAgICB7CisgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiU3R5bGVTaGVldDogIiArIHN0eWxlU2hlZXQuaWQpOworICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIlRleHQ6ICciICsgc3R5bGVTaGVldC50ZXh0ICsgIiciKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aDsg
KytpKQorICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVy
LCBzdHlsZVNoZWV0LmNzc1J1bGVzW2ldKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAg
ICAgICAgICAgIGNvbnRpbnVhdGlvbihzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAgICBJbnNwZWN0
b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJZCwgc3R5bGVTaGVldExvYWRlZC5i
aW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKKy8qCitDb3ZlcmVkIEFQSSBtZXRob2Rz
OgorIC0gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyCisgLSBnZXRNYXRjaGVkUnVsZXNGb3JOb2Rl
MgorIC0gZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIKKyAtIGdldEF0dHJpYnV0ZVN0eWxl
c0Zvck5vZGUyCisgLSBnZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMgorIC0gZ2V0SW5saW5lU3R5
bGVGb3JOb2RlMgorIC0gZ2V0QWxsU3R5bGVzMgorIC0gZ2V0U3R5bGVTaGVldDIKKyAtIHNldFN0
eWxlU2hlZXRUZXh0MgorIC0gc2V0U3R5bGVUZXh0MgorIC0gc2V0UnVsZVNlbGVjdG9yMgorIC0g
YWRkUnVsZTIKKyovCisKKzwvc2NyaXB0PgorCis8c3R5bGU+CisKKy8qIEFuIGlubGluZSBzdHls
ZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8q
IGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8g
bWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKzwvc3R5
bGU+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWluMSBtYWluMiBtYWlucGFnZSIgb25sb2Fk
PSJvbmxvYWQoKSIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWwsIHdpZHRoOiA4NSUiPgorPHA+
CitUZXN0cyB0aGF0IHByb3BlciBkYXRhIGFuZCBzdGFydC9lbmQgb2Zmc2V0IHBvc2l0aW9ucyBh
cmUgcmVwb3J0ZWQgZm9yIENTUyBzdHlsZSBkZWNsYXJhdGlvbnMgYW5kIHByb3BlcnRpZXMuCis8
L3A+Cis8dGFibGUgd2lkdGg9NTAlIGlkPSJ0aGV0YWJsZSI+Cis8L3RhYmxlPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Ut
b2Zmc2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJj
ZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAppbmRleCBlNGQzM2Q4Li5iZWVjNzI4IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4
dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVj
dGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRlc3RzIHRoYXQgcHJvcGVyIGRhdGEgYW5kIHN0YXJ0
L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHN0eWxlIGRlY2xhcmF0
aW9ucyBhbmQgcHJvcGVydGllcy4KIAotYm9keTogWzYtMjY2XQorYm9keTogWzAtNF0gWzYtMjY2
XQogWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQogWydmb28nOidiYXIgIQogCkBAIC05LDE1
ICs5LDE1IEBAIGJvZHk6IFs2LTI2Nl0KIFsnY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFy
c2VkXSBAWzEzOC0xNTldCiBbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQog
Wydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0
cmFuZ2UgdmFsdWUgKi8nICFpbXBvcnRhbnRdIEBbMTkwLTI1OV0KLWJvZHkubWFpbjE6IFszMzct
NDE4XQorYm9keS5tYWluMTogWzI5OC0zMzZdIFszMzctNDE4XQogWydjb2xvcic6JyNGMDBCQUEn
XSBAWzEzLTI4XQogWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVk
IHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQotYm9keS5tYWluMjogWzQ0NS01NDBd
Citib2R5Lm1haW4yOiBbNDM0LTQ0NF0gWzQ0NS01NDBdCiBbJ2JhY2tncm91bmQnOidncmVlbiAv
KiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24s
IHZlcnkgIWltcG9ydGFudCAqLycgIWltcG9ydGFudF0gQFswLTk1XQotYm9keS5tYWlucGFnZTog
WzE3LTE0OV0KK2JvZHkubWFpbnBhZ2U6IFsyLTE1XSBbMTctMTQ5XQogWyd0ZXh0LWRlY29yYXRp
b24nOidub25lJ10gQFs1LTI3XQogWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJz
ZWRdIEBbMTA3LTEzMV0KLWVsZW1lbnQuc3R5bGU6IFswLTMxXQorZWxlbWVudC5zdHlsZTogWzAt
MF0gWzAtMzFdCiBbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQogWyd3aWR0aCc6Jzgw
JSddIEBbMjEtMzFdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMt
c291cmNlLW9mZnNldHMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNl
LW9mZnNldHMuaHRtbAppbmRleCBmY2Y5MjhmLi5iOTMxODlmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCkBAIC0yNCwxMSArMjQsNiBA
QCBmdW5jdGlvbiBkb2l0KCkKIAogZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJv
bGxlcikKIHsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNl
VHJhY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2Vz
Ll90b2dnbGVSZXNvdXJjZVRyYWNraW5nKCk7Ci0gICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7
Ci0gICAgfQotCiAgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIGZyb250
ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50KTsKICAg
ICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgewpA
QCAtNDgsNyArNDMsNyBAQCBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVy
KQogZnVuY3Rpb24gZnJvbnRlbmRfc3R5bGVEYXRhUmVjZWl2ZWQodGVzdENvbnRyb2xsZXIsIHJ1
bGVPclN0eWxlLCBzaG91bGRCYWlsLCBkYXRhKQogewogICAgIHZhciBpc1J1bGUgPSAhIShydWxl
T3JTdHlsZS5zdHlsZSk7Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUg
PyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBk
YXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7Cisg
ICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxl
Y3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVjdG9yUmFuZ2Uu
c3RhcnQgKyAiLSIgKyBkYXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBkYXRhLmJvZHlS
YW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CiAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBkYXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgICB2
YXIgcHJvcGVydHlEYXR1bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwogICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSArICInOiciICsg
cHJvcGVydHlEYXR1bS52YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9ydGFudCA/ICIg
IWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6ICIgbm9uLXBh
cnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJvcGVydHlEYXR1
bS5lbmQgKyAiXSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmFlZDhlZS4uZjhlMTk3MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDY1
LDYgKzEwNjUsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9yL0luamVjdGVk
U2NyaXB0SG9zdC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFn
ZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCiAgICAgaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggZTcyNjViNi4uMjU0ZGQ0ZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CkBAIC0xNzI0LDYgKzE3MjQsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNsaWVudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
IFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAorCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpp
bmRleCBjODcwMmZjLi5iMDkzZjM0IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQor
KysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTgyNSw2ICsxODI1LDggQEAKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDVkMzY1MGMuLjRmMDJjNTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBy
bwpAQCAtOTYwLDYgKzk2MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbmplY3Rl
ZFNjcmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwIFwKKyAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTU3RvcmUuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA1MmNiMjZiLi5mNGNiNDYxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUyNDEzLDYgKzUyNDEzLDE0IEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTQWdlbnQuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JDU1NTdG9yZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBhZGJiNDM0Li4zZTk5MDA3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ1MSw2
ICsxNDUxLDggQEAKIAkJODFCRTIwOTkxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmggKi87IH07CiAJCTgxQkUyMEQyMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBNzEx
RjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICovOyB9OwogCQk4MUJFMjBEMzExRjRC
QzMyMDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNv
ci5oICovOyB9OworCQk4MkFCMTc0MzEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJB
QjE3NDExMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCAqLzsgfTsKKwkJ
ODJBQjE3NDQxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc0MjEyNEI5OUVDMDBD
NTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLzsgfTsKIAkJODJCNjU4OTgxMTg5RTM5MjAw
RTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9y
Q1NTU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk4MkI2NTg5QTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTkxMTg5
RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCAqLzsgfTsKIAkJODJFM0Q4REUx
MjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkUzRDhEQzEyMkVBMEQxMDAzQUU1
QkMgLyogQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcCAqLzsgfTsKQEAgLTc0MTMsNiArNzQxNSw4
IEBACiAJCTgxQkUyMDlDMTFGNEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IElEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgxQkUyMEE3MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkN1cnNvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MkFCMTc0MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5z
cGVjdG9yQ1NTQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MkFC
MTc0MjEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ1NTQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0
b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU1N0b3Jl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgyQjY1ODk5MTE4OUU0NzYwMEUwNTJB
MSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBJbnNwZWN0b3JDU1NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTgyRTNEOERDMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlTb3VyY2VE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExODY0LDYgKzExODY4LDgg
QEAKIAkJCQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8s
CiAJCQkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3Bw
ICovLAogCQkJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVy
LmggKi8sCisJCQkJODJBQjE3NDExMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50
LmNwcCAqLywKKwkJCQk4MkFCMTc0MjEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdl
bnQuaCAqLywKIAkJCQk4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3Rv
cmUuY3BwICovLAogCQkJCTgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NT
dG9yZS5oICovLAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRh
YmFzZVJlc291cmNlLmNwcCAqLywKQEAgLTIwNTgyLDYgKzIwNTg4LDcgQEAKIAkJCQk4NDczMEQ5
MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0
NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NDczMEQ5MzEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk4MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NT
QWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjMwNjEsNiArMjMwNjgsNyBAQAogCQkJCTg0NzMw
RDhBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODQ3
MzBEOEMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJODJBQjE3NDMxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55
IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGM1NWY5OTguLmMwMTM5YTIgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFt
bWFyLnkKQEAgLTQwOCw3ICs0MDgsOSBAQCBydWxlX2xpc3Q6CiAgOwogCiB2YWxpZF9ydWxlOgot
ICAgIHJ1bGVzZXQKKyAgICBiZWZvcmVfcnVsZXNldCBydWxlc2V0IHsKKyAgICAgICAgJCQgPSAk
MjsKKyAgICB9CiAgIHwgbWVkaWEKICAgfCBwYWdlCiAgIHwgZm9udF9mYWNlCkBAIC05MTAsOCAr
OTEyLDIyIEBAIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbjoKICAgICB9CiAgIDsKIAor
YmVmb3JlX3J1bGVzZXQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQYXJzZXIqIHAg
PSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrU2VsZWN0
b3JMaXN0U3RhcnQoKTsKKyAgICB9CisgIDsKKworYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZToK
KyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENT
U1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtTZWxlY3Rvckxpc3RFbmQoKTsKKyAg
ICB9CisgIDsKKwogcnVsZXNldDoKLSAgICBzZWxlY3Rvcl9saXN0ICd7JyBtYXliZV9zcGFjZV9i
ZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAgICBz
ZWxlY3Rvcl9saXN0IGJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2UgJ3snIG1heWJlX3NwYWNlX2Jl
Zm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgewogICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAg
ICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggODZi
Y2QwZC4uNDhkMDI0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysg
Yi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNDYsMTAgKzE0Niw5IEBAIENTU1BhcnNl
cjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZhbHNl
KQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQotICAgICwgbV9ydWxlQm9keVN0
YXJ0T2Zmc2V0KDApCi0gICAgLCBtX3J1bGVCb2R5RW5kT2Zmc2V0KDApCi0gICAgLCBtX3Byb3Bl
cnR5U3RhcnRPZmZzZXQoVUlOVF9NQVgpCi0gICAgLCBtX3Byb3BlcnR5RW5kT2Zmc2V0KFVJTlRf
TUFYKQorICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQorICAgICwgbV9ydWxlQm9keVJh
bmdlKDAsIDApCisgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAg
ICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVudFN0eWxlRGF0YSgwKQogICAgICwg
bV9kYXRhKDApCkBAIC01NDgwLDExICs1NDc5LDEzIEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3Jl
YXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxlY3RvcnMpCiAgICAgICAgIG1f
cGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlmICht
X3J1bGVSYW5nZU1hcCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFN0eWxlRGF0YSk7
Ci0gICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnN0eWxlQm9keVJhbmdlID0gU291cmNl
UmFuZ2UobV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3J1bGVCb2R5RW5kT2Zmc2V0KTsKKyAgICAg
ICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UgPSBtX3NlbGVjdG9y
TGlzdFJhbmdlOworICAgICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRhLT5zdHlsZUJvZHlSYW5n
ZSA9IG1fcnVsZUJvZHlSYW5nZTsKICAgICAgICAgICAgIG1fcnVsZVJhbmdlTWFwLT5zZXQocmVz
dWx0LCBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpKTsKICAgICAgICAgICAgIG1fY3VycmVu
dFN0eWxlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIH0KICAg
ICB9CisgICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwogICAgIHJlc2V0UnVsZUJvZHlNYXJr
cygpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC01NzMz
LDI2ICs1NzM0LDU0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5k
UG9zaXRpb24oKQogICAgIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiB9CiAKK3ZvaWQgQ1NTUGFyc2Vy
OjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQoreworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3Rh
cnQgPSB5eXRleHQgLSBtX2RhdGE7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JM
aXN0RW5kKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFN0eWxlRGF0YSkKKyAgICAgICAgcmV0dXJu
OworICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OworICAgIGJvb2wgZG9uZSA9IGZhbHNlOwor
ICAgIHdoaWxlIChsaXN0RW5kID4gbV9kYXRhICsgMSAmJiAhZG9uZSkgeworICAgICAgICBzd2l0
Y2ggKCoobGlzdEVuZCAtIDEpKSB7CisgICAgICAgICAgICBjYXNlICdcbic6CisgICAgICAgICAg
ICBjYXNlICdccic6CisgICAgICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgICBjYXNlICdc
dic6CisgICAgICAgICAgICBjYXNlICdcZic6CisgICAgICAgICAgICBjYXNlICcgJzoKKyAgICAg
ICAgICAgICAgICAtLWxpc3RFbmQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0g
bGlzdEVuZCAtIG1fZGF0YTsKK30KKwogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0
KCkKIHsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAgICAgaWYgKCp5
eXRleHQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9w
ZW5pbmcgYnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlTdGFydE9mZnNldCkKLSAg
ICAgICAgbV9ydWxlQm9keVN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBt
X3J1bGVCb2R5UmFuZ2Uuc3RhcnQpCisgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9m
ZnNldDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7CiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVC
b2R5RW5kT2Zmc2V0KQotICAgICAgICBtX3J1bGVCb2R5RW5kT2Zmc2V0ID0gb2Zmc2V0OworICAg
IGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQorICAgICAgICBtX3J1bGVCb2R5UmFu
Z2UuZW5kID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQo
KQogewotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBtX3Byb3Bl
cnR5U3RhcnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0
ZXh0IC0gbV9kYXRhOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wg
aXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQpAQCAtNTc2MCwxMSArNTc4
OSwxMSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRG
b3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4
dCAtIG1fZGF0YTsKICAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9u
IGludG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVy
dHlFbmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlTdGFydE9mZnNldCAhPSBV
SU5UX01BWCAmJiBtX2N1cnJlbnRTdHlsZURhdGEpIHsKKyAgICBtX3Byb3BlcnR5UmFuZ2UuZW5k
ID0gb2Zmc2V0OworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYg
bV9jdXJyZW50U3R5bGVEYXRhKSB7CiAgICAgICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVj
dXRlZCB3aGVuIHRoZSBzdHlsZSBkYXRhIHJldHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50
LgotICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlTdGFydE9mZnNldDsK
LSAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VS
VChzdGFydCA8IGVuZCk7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyht
X2RhdGEgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBp
ZiAocHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKQEAgLTU3NzcsNyArNTgwNiw3
IEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5k
LCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5
U3RyaW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkp
LnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVs
YXRpdmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KICAgICAgICAgbV9jdXJyZW50
U3R5bGVEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlT
b3VyY2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2Vk
LCBTb3VyY2VSYW5nZShtX3Byb3BlcnR5U3RhcnRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZz
ZXQsIG1fcHJvcGVydHlFbmRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpKSk7CisgICAg
ICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91
bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdl
LnN0YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAgIHJlc2V0
UHJvcGVydHlNYXJrcygpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgg
Yi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBmOGIyNGRmLi43NmJjNjU0IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aApAQCAtMjQxLDE4ICsyNDEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBdG9t
aWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRva2VuaXplciBtZXRo
b2RzIGFuZCBkYXRhCi0gICAgICAgIHVuc2lnbmVkIG1fcnVsZUJvZHlTdGFydE9mZnNldDsKLSAg
ICAgICAgdW5zaWduZWQgbV9ydWxlQm9keUVuZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9w
cm9wZXJ0eVN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5RW5kT2Zmc2V0
OworICAgICAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICBTb3Vy
Y2VSYW5nZSBtX3J1bGVCb2R5UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlS
YW5nZTsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwogICAgICAg
ICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRTdHlsZURhdGE7CisgICAgICAg
IHZvaWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya1NlbGVjdG9y
TGlzdEVuZCgpOwogICAgICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgICAgIHZv
aWQgbWFya1J1bGVCb2R5RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsK
ICAgICAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29s
IGlzUHJvcGVydHlQYXJzZWQpOwotICAgICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsg
bV9ydWxlQm9keVN0YXJ0T2Zmc2V0ID0gbV9ydWxlQm9keUVuZE9mZnNldCA9IDA7IH0KLSAgICAg
ICAgdm9pZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG1f
cHJvcGVydHlFbmRPZmZzZXQgPSBVSU5UX01BWDsgfQorICAgICAgICB2b2lkIHJlc2V0U2VsZWN0
b3JMaXN0TWFya3MoKSB7IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlz
dFJhbmdlLmVuZCA9IDA7IH0KKyAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1f
cnVsZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CisgICAgICAg
IHZvaWQgcmVzZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3By
b3BlcnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2
YWwpOwogICAgICAgICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hh
ciogdGV4dChpbnQqIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcApp
bmRleCAxNjI4MDMxLi5lYjljMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5j
cHAKQEAgLTU0LDEzICs1NCw2IEBAIFNvdXJjZVJhbmdlOjpTb3VyY2VSYW5nZSh1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgZW5kKQogewogfQogCi1Tb3VyY2VSYW5nZSYgU291cmNlUmFuZ2U6Om9w
ZXJhdG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpCi17Ci0gICAgdGhpcy0+c3RhcnQgPSBv
dGhlci5zdGFydDsKLSAgICB0aGlzLT5lbmQgPSBvdGhlci5lbmQ7Ci0gICAgcmV0dXJuICp0aGlz
OwotfQotCiBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5U291cmNlRGF0YShjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29s
IHBhcnNlZE9rLCBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiAgICAgOiBuYW1lKG5hbWUpCiAg
ICAgLCB2YWx1ZSh2YWx1ZSkKQEAgLTg4LDE2ICs4MSw2IEBAIENTU1Byb3BlcnR5U291cmNlRGF0
YTo6Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkKIHsKIH0KIAotQ1NTUHJvcGVydHlTb3VyY2VEYXRh
JiBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6Om9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJj
ZURhdGEmIG90aGVyKQotewotICAgIG5hbWUgPSBvdGhlci5uYW1lOwotICAgIHZhbHVlID0gb3Ro
ZXIudmFsdWU7Ci0gICAgaW1wb3J0YW50ID0gb3RoZXIuaW1wb3J0YW50OwotICAgIHBhcnNlZE9r
ID0gb3RoZXIucGFyc2VkT2s7Ci0gICAgcmFuZ2UgPSBvdGhlci5yYW5nZTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KIFN0cmluZyBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OnRvU3RyaW5nKCkgY29u
c3QKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZW1wdHlWYWx1ZSwgKCJlIikp
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCBiZWFlOWQwLi43MmIxNTZhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBD
U1NTdHlsZVJ1bGU7CiBzdHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CiAg
ICAgU291cmNlUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgU291cmNl
UmFuZ2UmIG9wZXJhdG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpOwogCiAgICAgdW5zaWdu
ZWQgc3RhcnQ7CiAgICAgdW5zaWduZWQgZW5kOwpAQCAtNTgsNyArNTcsNiBAQCBzdHJ1Y3QgQ1NT
UHJvcGVydHlTb3VyY2VEYXRhIHsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoKTsKICAgICBB
TFdBWVNfSU5MSU5FIH5DU1NQcm9wZXJ0eVNvdXJjZURhdGEoKSB7IH0KIAotICAgIENTU1Byb3Bl
cnR5U291cmNlRGF0YSYgb3BlcmF0b3I9KGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgb3Ro
ZXIpOwogICAgIFN0cmluZyB0b1N0cmluZygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKIApAQCAtNzksNiArNzcsMTAgQEAgc3RydWN0IENTU1N0eWxlU291cmNlRGF0YSA6IHB1
YmxpYyBSZWZDb3VudGVkPENTU1N0eWxlU291cmNlRGF0YT4gewogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENTU1N0eWxlU291cmNlRGF0YSgpKTsKICAgICB9CiAKKyAgICAvLyBbT3B0aW9u
YWxdIFJhbmdlIG9mIHRoZSBzZWxlY3RvciBsaXN0IGluIHRoZSBlbmNsb3Npbmcgc291cmNlLgor
ICAgIC8vIElmIHRoZSBzdHlsZSBpcyBhIHB1cmUgZGVjbGFyYXRpb24sIHRoZSByYW5nZSBpcyAo
MCwgMCkuCisgICAgU291cmNlUmFuZ2Ugc2VsZWN0b3JMaXN0UmFuZ2U7CisKICAgICAvLyBSYW5n
ZSBvZiB0aGUgc3R5bGUgdGV4dCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJjZS4KICAgICBTb3VyY2VS
YW5nZSBzdHlsZUJvZHlSYW5nZTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiBw
cm9wZXJ0eURhdGE7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwIGIv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAppbmRleCAxMDM2ZThmLi43Y2MwOTdiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NT
U1N0eWxlUnVsZS5jcHAKQEAgLTIzLDcgKzIzLDEyIEBACiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxl
LmgiCiAKICNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUg
IkNTU1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1NlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC01MCw5ICs1NSwzNCBAQCBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpzZWxlY3RvclRleHQoKSBjb25z
dAogICAgIHJldHVybiBzdHI7CiB9CiAKLXZvaWQgQ1NTU3R5bGVSdWxlOjpzZXRTZWxlY3RvclRl
eHQoY29uc3QgU3RyaW5nJiAvKnNlbGVjdG9yVGV4dCovLCBFeGNlcHRpb25Db2RlJiAvKmVjKi8p
Cit2b2lkIENTU1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYgc2VsZWN0
b3JUZXh0LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IQor
ICAgIENTU1BhcnNlciBwOworICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rvckxpc3Q7CisgICAg
RG9jdW1lbnQqIGRvYyA9IDA7CisgICAgU3R5bGVTaGVldCogb3duZXJTdHlsZVNoZWV0ID0gbV9z
dHlsZS0+c3R5bGVzaGVldCgpOworICAgIGlmIChvd25lclN0eWxlU2hlZXQpIHsKKyAgICAgICAg
aWYgKG93bmVyU3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICBkb2Mg
PSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4ob3duZXJTdHlsZVNoZWV0KS0+ZG9jdW1lbnQo
KTsKKyAgICAgICAgaWYgKCFkb2MpCisgICAgICAgICAgICBkb2MgPSBvd25lclN0eWxlU2hlZXQt
Pm93bmVyTm9kZSgpID8gb3duZXJTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+ZG9jdW1lbnQoKSA6
IDA7CisgICAgfQorICAgIGlmICghZG9jKQorICAgICAgICBkb2MgPSBtX3N0eWxlLT5ub2RlKCkg
PyBtX3N0eWxlLT5ub2RlKCktPmRvY3VtZW50KCkgOiAwOworCisgICAgaWYgKCFkb2MpIHsKKyAg
ICAgICAgZWMgPSBXUk9OR19ET0NVTUVOVF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBwLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JUZXh0LCBkb2MsIHNlbGVjdG9yTGlzdCk7Cisg
ICAgaWYgKCFzZWxlY3Rvckxpc3QuZmlyc3QoKSkgeworICAgICAgICBlYyA9IFNZTlRBWF9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3NlbGVjdG9yTGlzdC5hZG9wdChzZWxl
Y3Rvckxpc3QpOworICAgIGRvYy0+c3R5bGVTZWxlY3RvckNoYW5nZWQoUmVjYWxjU3R5bGVJbW1l
ZGlhdGVseSk7CiB9CiAKIFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lci5oIGIvV2ViQ29yZS9kb20vRXZlbnRM
aXN0ZW5lci5oCmluZGV4IDk2YmM4NTguLjhkZTg1ZWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZG9t
L0V2ZW50TGlzdGVuZXIuaAorKysgYi9XZWJDb3JlL2RvbS9FdmVudExpc3RlbmVyLmgKQEAgLTM3
LDcgKzM3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHB1YmxpYzoKICAgICAgICAgZW51
bSBUeXBlIHsKICAgICAgICAgICAgIEpTRXZlbnRMaXN0ZW5lclR5cGUsIAotICAgICAgICAgICAg
SW1hZ2VFdmVudExpc3RlbmVyVHlwZSwgCisgICAgICAgICAgICBJbWFnZUV2ZW50TGlzdGVuZXJU
eXBlLAorICAgICAgICAgICAgSW5zcGVjdG9yQ1NTQWdlbnRUeXBlLAogICAgICAgICAgICAgSW5z
cGVjdG9yRE9NQWdlbnRUeXBlLAogICAgICAgICAgICAgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291
cmNlVHlwZSwKICAgICAgICAgICAgIE9iakNFdmVudExpc3RlbmVyVHlwZSwKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDgwZTI0M2IuLjJmNWY0MTEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0K
KysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzMs
NiArMzMsMTEgQEAgJHR5cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JET01BZ2VudC5oIiwKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3Rv
ckNvbnRyb2xsZXItPmRvbUFnZW50KCkiLAogfTsKKyR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsK
KyAgICAiZm9yd2FyZCIgPT4gIkluc3BlY3RvckNTU0FnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAi
SW5zcGVjdG9yQ1NTQWdlbnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0
b3JDb250cm9sbGVyLT5jc3NBZ2VudCgpIiwKK307CiAkdHlwZVRyYW5zZm9ybXsiQXBwbGljYXRp
b25DYWNoZSJ9ID0gewogICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNo
ZUFnZW50IiwKICAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50
LmgiLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKaW5kZXggOWExYjk0Yi4uNWNkY2Q1OCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3IuaWRsCkBAIC0xOTQsNyArMTk0LDQxIEBAIG1vZHVsZSBjb3JlIHsKICAg
ICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChpbiBsb25nIHN0eWxl
SWQsIGluIFN0cmluZyBwcm9wZXJ0eU5hbWUsIGluIGJvb2xlYW4gZGlzYWJsZWQsIG91dCBWYWx1
ZSBzdHlsZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZXRSdWxlU2VsZWN0b3IoaW4g
bG9uZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwg
b3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAg
ICBbaGFuZGxlcj1ET01dIHZvaWQgYWRkUnVsZShpbiBTdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcg
c2VsZWN0ZWROb2RlSWQsIG91dCBWYWx1ZSBydWxlLCBvdXQgYm9vbGVhbiBzZWxlY3RvckFmZmVj
dHNOb2RlKTsKLSAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3Bl
cnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOworCisgICAgICAgIC8vIEdldCBhbGwgc3R5
bGVzIGFwcGxpY2FibGUgdG8gdGhlIGdpdmVuIG5vZGUuCisgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBz
dHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2Rl
MihpbiBsb25nIG5vZGVJZCwgb3V0IEFycmF5IHJ1bGVzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIGdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQg
QXJyYXkgcnVsZXMpOyAvLyBhcnJheSBvZiB7IHBzZXVkb0lkOiA8bnVtYmVyPiwgcnVsZXM6IGFy
cmF5IG9mICNjc3NSdWxlIH0KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEF0dHJpYnV0
ZVN0eWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5bGVzKTsgLy8gbWFw
OiBhdHRyaWJ1dGVOYW1lOiAjY3NzU3R5bGUKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdl
dEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcmVzdWx0
KTsgLy8gYXJyYXkgb2YgeyBpbmxpbmVTdHlsZTogI2Nzc1N0eWxlLCBtYXRjaGVkQ1NTUnVsZXM6
IGFycmF5IG9mICNjc3NSdWxlIH0KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldElubGlu
ZVN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CisKKyAgICAg
ICAgLy8gQWxsIHN0eWxlc2hlZXQgaWQncyBvd25lZCBieSBhbGwgZG9jdW1lbnRzIChmb3IgYXVk
aXRzKS4gW21vZGVsXQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0QWxsU3R5bGVzMihv
dXQgQXJyYXkgc3R5bGVzKTsKKworICAgICAgICAvLyBMb2FkcyBjdXJyZW50IHN0eWxlc2hlZXQg
d2l0aCB0ZXh0IHRvIGVuYWJsZSBmcm9udGVuZC1zaWRlIHN0eWxlIHRleHQgcGF0Y2hpbmcgZm9y
IHNldFN0eWxlVGV4dCgpLiBbbW9kZWxdCisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRT
dHlsZVNoZWV0MihpbiBsb25nIHN0eWxlU2hlZXRJZCwgb3V0IFZhbHVlIHN0eWxlU2hlZXQpOwor
CisgICAgICAgIC8vIFNldHMgbmV3IHN0eWxlc2hlZXQgdGV4dCBjb250ZW50IChmb3IgZnJlZS10
ZXh0IGVkaXRpbmcpLiBbdGV4dF0KKyAgICAgICAgLy8gVGhlIGFnZW50IHN0YXRlIGlzIGludmFs
aWRhdGVkIGR1ZSB0byB0aGUgbG9zcyBvZiBhbGwgZXhpc3RpbmcgYmluZGluZ3MuCisgICAgICAg
IC8vIFs/Pz9dIEltcGxlbWVudGF0aW9uPworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0
U3R5bGVTaGVldFRleHQyKGluIGxvbmcgc3R5bGVTaGVldElkLCBpbiBTdHJpbmcgdGV4dCk7CisK
KyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlVGV4dDIoaW4gbG9uZyBzdHlsZUlk
LCBpbiBTdHJpbmcgdGV4dCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgLy8gQWxsb3dzIHBy
b3BlcnR5IGNoYW5nZXMvYWRkaXRpb24vcmVtb3ZhbC4gW21vZGVsXQorCisgICAgICAgIC8vIEVu
YWJsZS9kaXNhYmxlIHByb3BlcnR5LiBbbW9kZWxdCisgICAgICAgIC8vIFNob3VsZCBiZSBzZW50
IGluIGEgYmF0Y2ggYmVmb3JlIHNldFN0eWxlVGV4dCgpIChzbyB0aGF0IG5vdGhpbmcgY2FuIGhh
cHBlbiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMpLgorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQg
dG9nZ2xlUHJvcGVydHkyKGluIGxvbmcgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eU9yZGluYWws
IGluIGJvb2xlYW4gZGlzYWJsZWQpOworCisgICAgICAgIC8vIFNldHMgbmV3IHJ1bGUgc2VsZWN0
b3IuIFttb2RlbF0KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFJ1bGVTZWxlY3RvcjIo
aW4gbG9uZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOworCisg
ICAgICAgIC8vIEFkZHMgbmV3IGVtcHR5IHJ1bGUgd2l0aCBnaXZlbiBzZWxlY3Rvci4gW21vZGVs
XQorICAgICAgICAvLyBUaGUgY29udGV4dE5vZGVJZCAod2hpY2ggY2FuIGJlIGEgZG9jdW1lbnQp
IGlzIG5lZWRlZCB0byBzZWxlY3QgdGhlIHJpZ2h0IHRhcmdldCBkb2N1bWVudC4KKyAgICAgICAg
W2hhbmRsZXI9Q1NTXSB2b2lkIGFkZFJ1bGUyKGluIGxvbmcgY29udGV4dE5vZGVJZCwgaW4gU3Ry
aW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUgcnVsZSk7CisKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOwog
CiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkg
Y29va2llcywgb3V0IFN0cmluZyBjb29raWVzU3RyaW5nKTsKICAgICAgICAgW2hhbmRsZXI9Q29u
dHJvbGxlcl0gdm9pZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUsIGluIFN0cmlu
ZyBkb21haW4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YWMyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTAsMCArMSw3MTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSm9zZXBoIFBlY29yYXJvCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCisjaW5jbHVkZSAiQXR0ci5oIgorI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5o
IgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1
ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRUeXBlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZVRyZWUuaCIKKyNp
bmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRnJv
bnRlbmQuaCIKKyNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiTm9kZS5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgorI2lu
Y2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
SW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckNTU1N0b3JlKiBj
c3NTdG9yZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQpCisgICAgOiBFdmVudExpc3RlbmVyKEluc3BlY3RvckNTU0FnZW50VHlwZSkKKyAg
ICAsIG1fY3NzU3RvcmUoY3NzU3RvcmUpCisgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQorICAg
ICwgbV9kb21BZ2VudChkb21BZ2VudCkKK3sKK30KKworSW5zcGVjdG9yQ1NTQWdlbnQ6On5JbnNw
ZWN0b3JDU1NBZ2VudCgpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6cmVzZXQoKQoreworICAgIExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiBjb3B5
ID0gbV9kb2N1bWVudHM7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46
Oml0ZXJhdG9yIGl0ID0gY29weS5iZWdpbigpOyBpdCAhPSBjb3B5LmVuZCgpOyArK2l0KQorICAg
ICAgICBzdG9wTGlzdGVuaW5nKCgqaXQpLmdldCgpKTsKKworICAgIEFTU0VSVCghbV9kb2N1bWVu
dHMuc2l6ZSgpKTsKK30KKworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJ
ZChsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklk
KG5vZGVJZCk7CisgICAgcmV0dXJuICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6
OkVMRU1FTlRfTk9ERSkgPyAwIDogc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQorCiti
b29sIEluc3BlY3RvckNTU0FnZW50OjpvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIGxp
c3RlbmVyKQoreworICAgIGlmIChjb25zdCBJbnNwZWN0b3JDU1NBZ2VudCogaW5zcGVjdG9yQ1NT
QWdlbnRMaXN0ZW5lciA9IEluc3BlY3RvckNTU0FnZW50OjpjYXN0KCZsaXN0ZW5lcikpCisgICAg
ICAgIHJldHVybiBtYWluRnJhbWVEb2N1bWVudCgpID09IGluc3BlY3RvckNTU0FnZW50TGlzdGVu
ZXItPm1haW5GcmFtZURvY3VtZW50KCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitEb2N1bWVu
dCogSW5zcGVjdG9yQ1NTQWdlbnQ6Om1haW5GcmFtZURvY3VtZW50KCkgY29uc3QKK3sKKyAgICBM
aXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9kb2N1
bWVudHMuYmVnaW4oKTsKKyAgICBpZiAoaXQgIT0gbV9kb2N1bWVudHMuZW5kKCkpCisgICAgICAg
IHJldHVybiBpdC0+Z2V0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnN0YXJ0TGlzdGVuaW5nKERvY3VtZW50KiBkb2MpCit7CisgICAgaWYgKG1fZG9jdW1l
bnRzLmNvbnRhaW5zKGRvYykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBsaXN0
ZW4gdG8gQ1NTIG1vZGlmaWNhdGlvbnMKKy8vICAgIGRvYy0+YWRkRXZlbnRMaXN0ZW5lcihldmVu
dE5hbWVzKCkuRE9NQ29udGVudExvYWRlZEV2ZW50LCB0aGlzLCBmYWxzZSk7CisvLyAgICBkb2Mt
PmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgdGhpcywgdHJ1ZSk7Cisg
ICAgbV9kb2N1bWVudHMuYWRkKGRvYyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0
b3BMaXN0ZW5pbmcoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoIW1fZG9jdW1lbnRzLmNvbnRh
aW5zKGRvYykpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBsaXN0ZW4gdG8gQ1NT
IG1vZGlmaWNhdGlvbnMKKy8vICAgIGRvYy0+cmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVz
KCkuRE9NQ29udGVudExvYWRlZEV2ZW50LCB0aGlzLCBmYWxzZSk7CisvLyAgICBkb2MtPnJlbW92
ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgdGhpcywgdHJ1ZSk7CisgICAg
bV9kb2N1bWVudHMucmVtb3ZlKGRvYyk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omhh
bmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopCit7CisgICAgLy8gRklY
TUU6IGhhbmRsZSBldmVudHMKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hl
ZFJ1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZWxlbWVudC0+b3duZXJEb2N1bWVudCgpOworICAgIENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
ID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1h
dGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBmYWxz
ZSwgdHJ1ZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhkb2N1bWVudCwg
bWF0Y2hlZFJ1bGVzLmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0
Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJ
ZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgKnJlc3VsdCA9IGJ1
aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50KTsKK30KKwordm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVu
dEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAg
KnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpOworfQorCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1
cm47CisgICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpLCB0
cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5v
ZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3sKKyAgICBF
bGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gZWxlbWVu
dC0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIGlmICghZGVmYXVsdFZpZXcp
CisgICAgICAgIHJldHVybjsKKworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZGVm
YXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgpLCBmYWxzZSk7Cit9
CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KSB7Cisg
ICAgICAgICpzdHlsZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5oZXJpdGVkU3R5bGVzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJl
bnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRPYmplY3QoImlubGluZVN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShwYXJlbnRFbGVtZW50
LT5zdHlsZSgpLCB0cnVlKSk7CisKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2Vs
ZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsK
KyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRT
ZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxk
QXJyYXlGb3JDU1NSdWxlcyhwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCksIHBhcmVudE1h
dGNoZWRSdWxlcy5nZXQoKSkpOworCisgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVj
dChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50
RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIH0KKyAgICAqc3R5bGUgPSBpbmhlcml0ZWRT
dHlsZXMucmVsZWFzZSgpOworfQorCisvL3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxl
cyhsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBz
dHlsZXMpCisvL3sKKy8vICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlk
KTsKKy8vICAgIGlmICghZWxlbWVudCkKKy8vICAgICAgICByZXR1cm47CisvLworLy8gICAgRE9N
V2luZG93KiBkZWZhdWx0VmlldyA9IG5vZGUtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXco
KTsKKy8vICAgIGlmICghZGVmYXVsdFZpZXcpCisvLyAgICAgICAgcmV0dXJuOworLy8KKy8vICAg
IEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CisvLyAgICBS
ZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlSW5mbyA9IGNv
bXB1dGVkU3R5bGUobm9kZSwgdHJ1ZSk7IC8vIFN1cHBvcnQgdGhlIHZpZXdpbmcgb2YgOnZpc2l0
ZWQgaW5mb3JtYXRpb24gaW4gY29tcHV0ZWQgc3R5bGUuCisvLworLy8gICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKy8vICAgIGlm
IChlbGVtZW50LT5zdHlsZSgpKQorLy8gICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJpbmxpbmVT
dHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSwgdHJ1ZSkpOworLy8g
ICAgcmVzdWx0LT5zZXRPYmplY3QoImNvbXB1dGVkU3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxl
KGNvbXB1dGVkU3R5bGVJbmZvLmdldCgpLCBmYWxzZSkpOworLy8KKy8vICAgIENTU1N0eWxlU2Vs
ZWN0b3IqIHNlbGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
KCk7CisvLyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5z
dHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBhdXRob3JPbmx5LCB0cnVlKTsKKy8vICAgIHJl
c3VsdC0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhu
b2RlLT5vd25lckRvY3VtZW50KCksIG1hdGNoZWRSdWxlcy5nZXQoKSkpOworLy8KKy8vICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWlsZE9iamVjdEZvckF0dHJpYnV0
ZVN0eWxlcyhlbGVtZW50KSk7CisvLyAgICByZXN1bHQtPnNldEFycmF5KCJwc2V1ZG9FbGVtZW50
cyIsIGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50LCBhdXRob3JPbmx5KSk7Cisv
LworLy8gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gY3VycmVudFN0eWxlID0gcmVzdWx0Owor
Ly8gICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsK
Ky8vICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CisvLyAgICAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworLy8gICAg
ICAgIGN1cnJlbnRTdHlsZS0+c2V0T2JqZWN0KCJwYXJlbnQiLCBwYXJlbnRTdHlsZSk7CisvLyAg
ICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+c3R5bGUo
KS0+bGVuZ3RoKCkpCisvLyAgICAgICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGlu
ZVN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShwYXJlbnRFbGVtZW50LT5zdHlsZSgpLCB0cnVl
KSk7CisvLworLy8gICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFy
ZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisvLyAgICAgICAg
UmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRTZWxlY3Rvci0+
c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgYXV0aG9yT25seSwgdHJ1ZSk7Cisv
LyAgICAgICAgcGFyZW50U3R5bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFy
cmF5Rm9yQ1NTUnVsZXMocGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLCBwYXJlbnRNYXRj
aGVkUnVsZXMuZ2V0KCkpKTsKKy8vCisvLyAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKy8vICAgICAgICBjdXJyZW50U3R5bGUgPSBwYXJlbnRT
dHlsZTsKKy8vICAgIH0KKy8vICAgICpzdHlsZXMgPSByZXN1bHQucmVsZWFzZSgpOworLy99CisK
K3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFy
cmF5Piogc3R5bGVzKQoreworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4g
PiYgZG9jdW1lbnRzID0gZG9tQWdlbnQoKS0+ZG9jdW1lbnRzKCk7CisgICAgZm9yIChMaXN0SGFz
aFNldDxSZWZQdHI8RG9jdW1lbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZG9jdW1lbnRzLmJl
Z2luKCk7IGl0ICE9IGRvY3VtZW50cy5lbmQoKTsgKytpdCkgeworICAgICAgICBTdHlsZVNoZWV0
TGlzdCogbGlzdCA9ICgqaXQpLT5zdHlsZVNoZWV0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3R5bGVTaGVl
dCogc3R5bGVTaGVldCA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTaGVl
dC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICAgICAgKCpzdHlsZXMpLT5wdXNoTnVt
YmVyKGNzc1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
PihzdHlsZVNoZWV0KSkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpnZXRTdHlsZVNoZWV0Mihsb25nIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogc3R5bGVTaGVldE9iamVjdCkKK3sKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0ID0gY3NzU3RvcmUoKS0+c3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYg
KHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkKKyAgICAgICAgKnN0eWxlU2hl
ZXRPYmplY3QgPSBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQo
KSwgc3R5bGVTaGVldCk7Cit9CisvLworLy92b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRSdWxl
UmFuZ2VzKGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlUmFu
Z2UpCisvL3sKKy8vICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5z
dHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKy8vICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0
eWxlU2hlZXQtPmRvY3VtZW50KCkpIHsKKy8vICAgICAgICBIYXNoTWFwPGxvbmcsIFNvdXJjZVJh
bmdlPiBydWxlUmFuZ2VzID0gY3NzU3RvcmUoKS0+Z2V0UnVsZVJhbmdlcyhzdHlsZVNoZWV0KTsK
Ky8vICAgICAgICBpZiAoIXJ1bGVSYW5nZXMuc2l6ZSgpKQorLy8gICAgICAgICAgICByZXR1cm47
CisvLyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKy8vICAgICAgICBmb3IgKEhhc2hNYXA8bG9uZywgU291cmNlUmFuZ2U+
OjppdGVyYXRvciBpdCA9IHJ1bGVSYW5nZXMuYmVnaW4oKTsgaXQgIT0gcnVsZVJhbmdlcy5lbmQo
KTsgKytpdCkgeworLy8gICAgICAgICAgICBpZiAoaXQtPnNlY29uZC5zZWNvbmQpIHsKKy8vICAg
ICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJ1bGVSYW5nZSA9IEluc3BlY3Rv
ck9iamVjdDo6Y3JlYXRlKCk7CisvLyAgICAgICAgICAgICAgICByZXN1bHQtPnNldE9iamVjdChT
dHJpbmc6Om51bWJlcihpdC0+Zmlyc3QpLnV0ZjgoKS5kYXRhKCksIHJ1bGVSYW5nZSk7CisvLyAg
ICAgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBib2R5UmFuZ2UgPSBJbnNwZWN0
b3JPYmplY3Q6OmNyZWF0ZSgpOworLy8gICAgICAgICAgICAgICAgcnVsZVJhbmdlLT5zZXRPYmpl
Y3QoImJvZHlSYW5nZSIsIGJvZHlSYW5nZSk7CisvLyAgICAgICAgICAgICAgICBib2R5UmFuZ2Ut
PnNldE51bWJlcigic3RhcnQiLCBpdC0+c2Vjb25kLmZpcnN0KTsKKy8vICAgICAgICAgICAgICAg
IGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJlbmQiLCBpdC0+c2Vjb25kLnNlY29uZCk7CisvLyAgICAg
ICAgICAgIH0KKy8vICAgICAgICB9CisvLyAgICAgICAgKnJ1bGVSYW5nZSA9IHJlc3VsdC5yZWxl
YXNlKCk7CisvLyAgICB9CisvL30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVT
aGVldFRleHQyKGxvbmcgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPnN0eWxlU2hlZXRGb3JJZChz
dHlsZVNoZWV0SWQpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgLy8gRHJvcCBhbGwgc3R5bGVzaGVldC1yZWxhdGVkIGRhdGEgYW5kIGJpbmRpbmdzLgorICAg
IGNzc1N0b3JlKCktPmRpZFN0eWxlU2hlZXRUZXh0Q2hhbmdlKHN0eWxlU2hlZXRJZCwgdGV4dCk7
CisKKyAgICAvLyBDbGVhciB0aGUgc3R5bGUgc2hlZXQuCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBz
dHlsZVNoZWV0LT5yZW1vdmUoaSk7CisKKyAgICBzdHlsZVNoZWV0LT5wYXJzZVN0cmluZyh0ZXh0
LCBzdHlsZVNoZWV0LT51c2VTdHJpY3RQYXJzaW5nKCkpOworfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRTdHlsZVRleHQyKGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICgh
c3R5bGUpCisgICAgICAgIHJldHVybjsKKyAgICBFbGVtZW50KiBpbmxpbmVTdHlsZUVsZW1lbnQg
PSBjc3NTdG9yZSgpLT5pbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGUpOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmIChpbmxpbmVTdHlsZUVsZW1lbnQpCisgICAgICAgIGlubGluZVN0
eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJzdHlsZSIsIGNzc1RleHQsIGVjKTsKKyAgICBlbHNl
CisgICAgICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKKworICAgIGlmIChlYykK
KyAgICAgICAgcmV0dXJuOworCisgICAgY3NzU3RvcmUoKS0+ZGlkU3R5bGVUZXh0Q2hhbmdlKHN0
eWxlSWQsIGNzc1RleHQpOworICAgICpyZXN1bHQgPSBidWlsZE9iamVjdEZvclN0eWxlKHN0eWxl
LCB0cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGxv
bmcgLypzdHlsZUlkKi8sIGxvbmcgLypwcm9wZXJ0eU9yZGluYWwqLywgYm9vbCAvKmRpc2FibGVk
Ki8pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpzZXRSdWxlU2VsZWN0b3IyKGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgQ1NTU3R5bGVSdWxlKiBy
dWxlID0gY3NzU3RvcmUoKS0+cnVsZUZvcklkKHJ1bGVJZCk7CisgICAgaWYgKCFydWxlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gSW5zcGVjdG9y
Q1NTU3RvcmU6OmdldFBhcmVudFN0eWxlU2hlZXQocnVsZS0+c3R5bGUoKSk7CisgICAgaWYgKCFz
dHlsZVNoZWV0IHx8ICFzdHlsZVNoZWV0LT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBTdHJpbmcgc2hlZXRUZXh0OworICAgIGxvbmcgc3R5bGVTaGVldElkID0gY3NzU3RvcmUo
KS0+YmluZFN0eWxlU2hlZXQoc3R5bGVTaGVldCk7CisgICAgYm9vbCBzdWNjZXNzID0gY3NzU3Rv
cmUoKS0+c3R5bGVTaGVldFRleHQoc3R5bGVTaGVldElkLCAmc2hlZXRUZXh0KTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURh
dGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgIHN1Y2Nl
c3MgPSBjc3NTdG9yZSgpLT5nZXRTdHlsZVNvdXJjZURhdGEocnVsZS0+c3R5bGUoKSwgJnNvdXJj
ZURhdGEpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5n
IG5ld1N0eWxlU2hlZXRUZXh0ID0gc2hlZXRUZXh0LnN1YnN0cmluZygwLCBzb3VyY2VEYXRhLT5z
ZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7CisgICAgbmV3U3R5bGVTaGVldFRleHQgKz0gc2VsZWN0
b3I7CisgICAgbmV3U3R5bGVTaGVldFRleHQgKz0gc2hlZXRUZXh0LnJpZ2h0KHNoZWV0VGV4dC5s
ZW5ndGgoKSAtIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBydWxlLT5zZXRTZWxlY3RvclRleHQoc2VsZWN0b3IsIGVj
KTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybjsKKworICAgIGNzc1N0b3JlKCktPmRpZFN0
eWxlU2hlZXRUZXh0Q2hhbmdlKHN0eWxlU2hlZXRJZCwgbmV3U3R5bGVTaGVldFRleHQsIGZhbHNl
KTsKKyAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JSdWxlKHN0eWxlU2hlZXQtPmRvY3VtZW50
KCksIHJ1bGUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlMihsb25nIGNv
bnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklkKGNv
bnRleHROb2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQo
bm9kZS0+ZG9jdW1lbnQoKSwgdHJ1ZSk7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICBy
ZXR1cm47IC8vIGNvdWxkIG5vdCBhZGQgYSBzdHlsZXNoZWV0IHRvIHRoZSBvd25lckRvY3VtZW50
CisKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBsb25nIHN0eWxlU2hlZXRJZCA9IGNzc1N0b3JlKCkt
PmJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgIGJvb2wgc3VjY2VzcyA9IGNzc1N0b3Jl
KCktPnN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnRleHQpOworICAgIGlmICghc3VjY2Vz
cykKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQorICAgICAgICB0ZXh0
ICs9ICJcbiI7CisgICAgdGV4dCArPSBzZWxlY3RvcjsKKyAgICB0ZXh0ICs9ICJ7IH0iOworICAg
IHNldFN0eWxlU2hlZXRUZXh0MihzdHlsZVNoZWV0SWQsIHRleHQpOworICAgIFJlZlB0cjxDU1NS
dWxlTGlzdD4gcnVsZXMgPSBzdHlsZVNoZWV0LT5jc3NSdWxlcygpOworCisgICAgQVNTRVJUKHJ1
bGVzLT5sZW5ndGgoKSk7CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yQ1NTU3Rv
cmU6OmFzQ1NTU3R5bGVSdWxlKHJ1bGVzLT5pdGVtKHJ1bGVzLT5sZW5ndGgoKSAtIDEpKTsKKyAg
ICBBU1NFUlQocnVsZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5k
b2N1bWVudCgpLCBydWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKQor
eworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5
OjpjcmVhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsr
aSkKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWVTdHJpbmdzW2ld
KTsKKyAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOworfQorCitQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9y
QXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gc3R5bGVBdHRyaWJ1dGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0
dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgIGlmIChhdHRyaWJ1dGUtPnN0eWxlKCkpIHsKKyAgICAg
ICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKTsKKyAg
ICAgICAgICAgIHN0eWxlQXR0cmlidXRlcy0+c2V0T2JqZWN0KGF0dHJpYnV0ZU5hbWUudXRmOCgp
LmRhdGEoKSwgYnVpbGRPYmplY3RGb3JTdHlsZShhdHRyaWJ1dGUtPnN0eWxlKCksIHRydWUpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3R5bGVBdHRyaWJ1dGVzOworfQorCitQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckNT
U1J1bGVzKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NSdWxlTGlzdCogbWF0Y2hlZFJ1bGVz
KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWF0Y2hlZENTU1J1bGVzID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG1hdGNoZWRSdWxl
cyAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENTU1J1bGUq
IHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7CisgICAgICAgIGlmIChydWxlLT50eXBlKCkg
PT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgICAgIG1hdGNoZWRDU1NSdWxlcy0+cHVz
aE9iamVjdChidWlsZE9iamVjdEZvclJ1bGUob3duZXJEb2N1bWVudCwgc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVSdWxlKj4ocnVsZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIG1hdGNoZWRDU1NSdWxlcy5y
ZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckNTU0Fn
ZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUo
KTsKKyAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVuZGVyU3R5
bGUgPSBlbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKCk7CisKKyAgICBmb3IgKFBzZXVkb0lkIHBz
ZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5U
RVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lk
ICsgMSkpIHsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxl
Y3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIGZhbHNl
LCB0cnVlKTsKKyAgICAgICAgaWYgKG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0
aCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5z
ZXROdW1iZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOworICAgICAg
ICAgICAgcHNldWRvU3R5bGVzLT5zZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9yQ1NTUnVs
ZXMoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLCBtYXRjaGVkUnVsZXMuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIHJlc3VsdC0+cHVzaE9iamVjdChwc2V1ZG9TdHlsZXMucmVsZWFzZSgpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0eWxl
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQsIFJlZlB0cjxDU1NTdHlsZVNv
dXJjZURhdGE+KiBzb3VyY2VEYXRhKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGJpbmQpIHsKKyAgICAg
ICAgbG9uZyBzdHlsZUlkID0gY3NzU3RvcmUoKS0+YmluZFN0eWxlKHN0eWxlKTsKKyAgICAgICAg
cmVzdWx0LT5zZXROdW1iZXIoImlkIiwgc3R5bGVJZCk7CisgICAgICAgIENTU1N0eWxlU2hlZXQq
IHBhcmVudFN0eWxlU2hlZXQgPSBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0UGFyZW50U3R5bGVTaGVl
dChzdHlsZSk7CisgICAgICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CisgICAgICAgICAgICBs
b25nIHBhcmVudFN0eWxlU2hlZXRJZCA9IEluc3BlY3RvckNTU1N0b3JlOjppbmxpbmVTdHlsZUVs
ZW1lbnQoc3R5bGUpID8gLTEgOiBjc3NTdG9yZSgpLT5iaW5kU3R5bGVTaGVldChwYXJlbnRTdHls
ZVNoZWV0KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJwYXJlbnRTdHlsZVNoZWV0
SWQiLCBwYXJlbnRTdHlsZVNoZWV0SWQpOworICAgICAgICB9CisgICAgfQorICAgIHJlc3VsdC0+
c2V0U3RyaW5nKCJ3aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKKyAg
ICByZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhl
aWdodCIpKTsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRh
ID0gMDsKKyAgICBib29sIGhhc1NvdXJjZURhdGEgPSBzb3VyY2VEYXRhICE9IDA7CisgICAgUmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4gbmV3U291cmNlRGF0YTsKKyAgICBpZiAoIWhhc1NvdXJj
ZURhdGEpIHsKKyAgICAgICAgbmV3U291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3Jl
YXRlKCk7CisgICAgICAgIGhhc1NvdXJjZURhdGEgPSBjc3NTdG9yZSgpLT5nZXRTdHlsZVNvdXJj
ZURhdGEoc3R5bGUsICZuZXdTb3VyY2VEYXRhKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbmV3U291
cmNlRGF0YSA9ICpzb3VyY2VEYXRhOworICAgIGlmIChoYXNTb3VyY2VEYXRhKSB7CisgICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIG5ld1NvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIG5l
d1NvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgICAgIHByb3BlcnR5RGF0YSA9
ICZuZXdTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgfQorICAgIHBvcHVsYXRlT2JqZWN0
V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eURhdGEpOwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50
Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiogcHJvcGVydHlEYXRhKQoreworICAgIC8vIHByb3BlcnRpZXM6IEFycmF5IG9mCisgICAg
Ly8gICBpbmRleDpudW1iZXIgPz8/CisgICAgLy8gICBuYW1lOnN0cmluZworICAgIC8vICAgdmFs
dWU6c3RyaW5nCisgICAgLy8gICBwcmlvcml0eTp7ImltcG9ydGFudCIsICIifQorICAgIC8vICAg
c3RhdHVzOnsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIn0KKyAgICAvLyAgIHBhcnNl
ZDpib29sZWFuCisgICAgLy8gICBpbXBsaWNpdDpib29sZWFuCisgICAgLy8gICBzaG9ydGhhbmQ6
c3RyaW5nIChtYXkgYmUgZW1wdHkpCisgICAgLy8gc2hvcnRoYW5kVmFsdWVzOiBNYXAKKyAgICAv
LyAgIHNob3J0aGFuZE5hbWUgLT4gc2hvcnRoYW5kVmFsdWUKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9w
ZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisKKyAgICBIYXNoU2V0PFN0cmluZz4g
Zm91bmRTaG9ydGhhbmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVz
OworCisgICAgLy8gU291cmNlLWJhc2VkIHByb3BlcnRpZXMuCisgICAgaWYgKHByb3BlcnR5RGF0
YSkgeworICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRhLT5l
bmQoKTsgKytpdCkgeworICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBw
cm9wZXJ0eUVudHJ5ID0gKml0OworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHJvcGVy
dGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
bmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5TmFt
ZXMuYWRkKG5hbWUpOworCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwg
bmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3BlcnR5
RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHki
LCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOworICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOyAvLyBGSVhNRTogbm8g
ZGlzYWJsZWQgcHJvcGVydGllcyBzdXBwb3J0IGZvciB0aGUgbW9tZW50CisgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKTsK
KyAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVydHlF
bnRyeS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJlbmRP
ZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7CisgICAgICAgICAgICBpZiAocHJvcGVy
dHlFbnRyeS5wYXJzZWRPaykgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFu
KCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0g
c3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICAgICAgICAgIHByb3Bl
cnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOworICAgICAgICAgICAg
ICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5z
KHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChz
aG9ydGhhbmQpOworICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0cmlu
ZyhzaG9ydGhhbmQsIHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3BlcnR5
LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPjo6aXRlcmF0
b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmluZChu
YW1lKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3Vz
QWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vjb25k
LT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIpOyAvLyBib3RoICJkaXNhYmxlZCIgYW5k
ICJhY3RpdmUiIHNoYWxsIHR1cm4gImluYWN0aXZlIgorICAgICAgICAgICAgICAgIGFjdGl2ZUl0
LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsgLy8gaW5hY3RpdmUgcHJv
cGVydGllcyBkbyBub3QgcGFydGljaXBhdGUgaW4gc2hvcnRoYW5kcworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChuYW1l
LCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdHlsZS1iYXNlZCBwcm9w
ZXJ0aWVzLgorICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7CisgICAg
ICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisKKyAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKTsKKyAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQ
cmlvcml0eSgibmFtZSIpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0
Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIHByb3BlcnR5LT5z
ZXRCb29sZWFuKCJwYXJzZWRPayIsIHRydWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJzdGF0dXMiLCAic3R5bGUiKTsKKyAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5n
ZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
c2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1w
dHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAg
ICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFu
ZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0
aGFuZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVy
dGllcyIsIHByb3BlcnRpZXMpOworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRWYWx1
ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJ
bnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERp
c2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24pCit7CisgICAgUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZv
ciAoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uOjppdGVyYXRvciBpdCA9IGRlY2xhcmF0aW9uLT5i
ZWdpbigpOyBpdCAhPSBkZWNsYXJhdGlvbi0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgaXQtPmZpcnN0KTsKKyAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBpdC0+c2Vjb25kLmZpcnN0KTsKKyAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBpdC0+c2Vjb25kLnNlY29uZCk7CisgICAg
ICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkucmVsZWFzZSgpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHByb3BlcnRpZXMucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChEb2N1
bWVudCogb3duZXJEb2N1bWVudCwgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgp
OworICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5iaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsK
KyAgICByZXN1bHQtPnNldE51bWJlcigiaWQiLCBpZCk7CisgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOworICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygi
dGl0bGUiLCBzdHlsZVNoZWV0LT50aXRsZSgpKTsKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29s
IHN1Y2Nlc3MgPSBjc3NTdG9yZSgpLT5zdHlsZVNoZWV0VGV4dChpZCwgJnRleHQpOworICAgIGlm
IChzdWNjZXNzKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygidGV4dCIsIHRleHQpOworICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIGRvbUFnZW50KCktPmlkRm9y
RG9jdW1lbnROb2RlKHN0eWxlU2hlZXQtPmRvY3VtZW50KCkpKTsKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IGNzc1J1bGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFBhc3NS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHls
ZVNoZWV0LCB0cnVlKTsKKyAgICBpZiAoY3NzUnVsZUxpc3QpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNzc1J1bGVMaXN0LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAg
ICBDU1NSdWxlKiBydWxlID0gY3NzUnVsZUxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAo
cnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgICAgICAgICBjc3NSdWxlcy0+cHVzaE9iamVj
dChidWlsZE9iamVjdEZvclJ1bGUob3duZXJEb2N1bWVudCwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVS
dWxlKj4ocnVsZSkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQtPnNldEFycmF5KCJj
c3NSdWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNl
KCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6
YnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1bGUq
IHJ1bGUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzZXJBZ2VudCwgKCJ1
c2VyLWFnZW50IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1c2VyLCAoInVz
ZXIiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGluc3BlY3RvciwgKCJpbnNw
ZWN0b3IiKSk7CisgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBh
cmVudFN0eWxlU2hlZXQoKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVj
dG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygi
Y3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJj
ZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1
bWVudFVSTCIsIGRvbUFnZW50KCktPmRvY3VtZW50VVJMU3RyaW5nKG93bmVyRG9jdW1lbnQpKTsK
KyAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgICAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaHJlZiIsIHBhcmVudFN0
eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0TnVt
YmVyKCJpZCIsIGNzc1N0b3JlKCktPmJpbmRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpKTsK
KyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHls
ZVNoZWV0VmFsdWUucmVsZWFzZSgpKTsKKyAgICB9CisgICAgU3RyaW5nIG9yaWdpbigiIik7Cisg
ICAgaWYgKHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgp
ICYmIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAgICAgIG9yaWdpbiA9
IHVzZXJBZ2VudDsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHlsZVNoZWV0ICYmIHBhcmVudFN0eWxl
U2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2Rl
TmFtZSgpID09ICIjZG9jdW1lbnQiKQorICAgICAgICBvcmlnaW4gPSB1c2VyOworICAgIGVsc2Ug
aWYgKHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9PSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHls
ZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZhbHNlKSkKKyAgICAgICAgb3JpZ2luID0gaW5zcGVjdG9y
OworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBvcmlnaW4pOworCisgICAgLy8gQmlu
ZCBlZGl0YWJsZSBzY3JpcHRzIG9ubHkuCisgICAgYm9vbCBiaW5kID0gb3JpZ2luICE9IHVzZXJB
Z2VudCAmJiBvcmlnaW4gIT0gdXNlcjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBz
b3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1Y2Nl
c3MgPSBjc3NTdG9yZSgpLT5nZXRTdHlsZVNvdXJjZURhdGEocnVsZS0+c3R5bGUoKSwgJnNvdXJj
ZURhdGEpOworICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJz
ZWxlY3RvclN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQp
OworICAgICAgICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JFbmRPZmZzZXQiLCBzb3VyY2VE
YXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOworICAgIH0KKyAgICByZXN1bHQtPnNldE9iamVj
dCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQsIHN1Y2Nl
c3MgPyAmc291cmNlRGF0YSA6IDApKTsKKworICAgIGlmIChiaW5kKQorICAgICAgICByZXN1bHQt
PnNldE51bWJlcigiaWQiLCBjc3NTdG9yZSgpLT5iaW5kUnVsZShydWxlKSk7CisgICAgcmV0dXJu
IHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50
Ojpsb25naGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0
cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGll
czsKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBp
bmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJv
cGVydGllcy5jb250YWlucyhpbmRpdmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0
eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVh
bFByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5
KTsKKyAgICB9CisKKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworU3RyaW5nIEluc3BlY3Rv
ckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29u
c3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkgeworICAgICAgICAvLyBTb21lIHNob3J0aGFuZHMgKGxpa2UgYm9yZGVyKSByZXR1
cm4gYSBudWxsIHZhbHVlLCBzbyBjb21wdXRlIGEgc2hvcnRoYW5kIHZhbHVlLgorICAgICAgICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgd2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTgyMyBpcyBmaXhlZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFBy
b3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3Bl
cnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmlzUHJvcGVy
dHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0
eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBpZiAoaW5kaXZpZHVhbFZh
bHVlID09ICJpbml0aWFsIikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGlmICh2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIiAiKTsK
KyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChpbmRpdmlkdWFsVmFsdWUpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50Ojpz
aG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5n
JiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0
UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5Lmlz
RW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHls
ZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJp
b3JpdHkoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiBwcmlvcml0eTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNDkwMzAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBA
IC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NBZ2Vu
dF9oCisjZGVmaW5lIEluc3BlY3RvckNTU0FnZW50X2gKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yQ1NTU3RvcmUuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMu
aCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRl
IDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
QXRvbWljU3RyaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBDb250YWlu
ZXJOb2RlOworICAgIGNsYXNzIENTU1J1bGU7CisgICAgY2xhc3MgQ1NTUnVsZUxpc3Q7CisgICAg
Y2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKKyAgICBjbGFzcyBDU1NTdHlsZVJ1bGU7CisgICAg
Y2xhc3MgQ1NTU3R5bGVTaGVldDsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIEV2ZW50
OworICAgIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OworICAgIGNsYXNzIEluc3BlY3RvckZyb250
ZW5kOworICAgIGNsYXNzIE1hdGNoSm9iOworICAgIGNsYXNzIE5hbWVOb2RlTWFwOworICAgIGNs
YXNzIE5vZGU7CisgICAgY2xhc3MgUGFnZTsKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyAg
ICBjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckNTU0FnZW50PiBjcmVh
dGUoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRl
bmQsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JDU1NBZ2VudChjc3NTdG9yZSwgZnJvbnRlbmQs
IGRvbUFnZW50KSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgY29uc3QgSW5zcGVjdG9y
Q1NTQWdlbnQqIGNhc3QoY29uc3QgRXZlbnRMaXN0ZW5lciogbGlzdGVuZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBsaXN0ZW5lci0+dHlwZSgpID09IEluc3BlY3RvckNTU0FnZW50
VHlwZQorICAgICAgICAgICAgICAgID8gc3RhdGljX2Nhc3Q8Y29uc3QgSW5zcGVjdG9yQ1NTQWdl
bnQqPihsaXN0ZW5lcikKKyAgICAgICAgICAgICAgICA6IDA7CisgICAgICAgIH0KKworICAgICAg
ICBJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3Rv
ckZyb250ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KTsKKyAgICAg
ICAgfkluc3BlY3RvckNTU0FnZW50KCk7CisKKyAgICAgICAgdm9pZCByZXNldCgpOworCisgICAg
ICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEV2ZW50TGlzdGVuZXImIG90aGVyKTsK
KworICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBmcm9udGVuZCBmb3IgQ1NTIHN0
eWxlcyBpbnNwZWN0aW9uLgorICAgICAgICB2b2lkIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxlcyk7CisgICAgICAgIHZvaWQg
Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJ1bGVzKTsKKyAgICAgICAgdm9pZCBnZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2Rl
Mihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICAgICAg
dm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiBzdHlsZSk7CisgICAgICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSk7CisgICAgICAgIHZvaWQg
Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHJlc3VsdCk7CisKKyAgICAgICAgdm9pZCBnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIHN0eWxlcyk7IC8vIGFycmF5IG9mOiBzdHlsZVNoZWV0SWQKKworICAgICAg
ICB2b2lkIGdldFN0eWxlU2hlZXQyKGxvbmcgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiByZXN1bHQpOworICAgICAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0Mihsb25nIHN0
eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICAgICAgdm9pZCBzZXRTdHlsZVRl
eHQyKGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpOworICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50CisgICAgICAgIHZvaWQg
dG9nZ2xlUHJvcGVydHkyKGxvbmcgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJvb2wg
ZGlzYWJsZWQpOworICAgICAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcjIobG9uZyBydWxlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7Cisg
ICAgICAgIHZvaWQgYWRkUnVsZTIobG9uZyBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgICAgICB2b2lkIGdl
dFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmcoRG9jdW1lbnQqIGRv
Y3VtZW50KTsKKyAgICAgICAgdm9pZCBzdG9wTGlzdGVuaW5nKERvY3VtZW50KiBkb2N1bWVudCk7
CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBFdmVudCogZXZlbnQpOworCisgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzU3RvcmU7IH0KKyAgICAgICAgSW5zcGVjdG9yRE9NQWdl
bnQqIGRvbUFnZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb21BZ2VudDsgfQorICAgICAgICBEb2N1
bWVudCogbWFpbkZyYW1lRG9jdW1lbnQoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGRvY3VtZW50
VVJMU3RyaW5nKERvY3VtZW50KikgY29uc3Q7CisKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wg
YmluZCwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHNvdXJjZURhdGEgPSAwKTsKKyAgICAg
ICAgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiogcHJvcGVydHlEYXRhKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKERpc2FibGVkU3R5bGVEZWNsYXJh
dGlvbiopOworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9y
RWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCk7CisgICAgICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhEb2N1bWVudCogb3duZXJEb2N1
bWVudCwgQ1NTUnVsZUxpc3QqKTsKKyAgICAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4g
YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQpOworICAgICAgICBQ
YXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMo
RWxlbWVudCogZWxlbWVudCk7CisgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
dWlsZE9iamVjdEZvclJ1bGUoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1N0eWxlUnVsZSop
OworICAgICAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHls
ZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVNoZWV0Kik7CisgICAgICAg
IFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwg
Y29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgICAgIFN0cmluZyBzaG9ydGhh
bmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9w
ZXJ0eSk7CisgICAgICAgIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0
aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgICAgIEVsZW1lbnQq
IGVsZW1lbnRGb3JJZChsb25nIG5vZGVJZCk7CisKKyAgICAgICAgdm9pZCBkaXNjYXJkQmluZGlu
Z3MoKTsKKworICAgICAgICBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4gbV9kb2N1bWVu
dHM7CisgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBtX2Nzc1N0b3JlOworICAgICAgICBJbnNw
ZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKKyAgICAgICAgSW5zcGVjdG9yRE9NQWdlbnQqIG1f
ZG9tQWdlbnQ7CisgICAgfTsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNTU0FnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NTdG9yZS5jcHAKaW5kZXggYjAxOTg2MC4uMzYwZDQ4ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcApAQCAtNzAsOCArNzAsOCBAQCB2b2lkIEluc3Bl
Y3RvckNTU1N0b3JlOjpyZXNldCgpCiAgICAgbV9pZFRvU3R5bGUuY2xlYXIoKTsKICAgICBtX3J1
bGVUb0lkLmNsZWFyKCk7CiAgICAgbV9pZFRvUnVsZS5jbGVhcigpOwotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX3N0eWxlU2hlZXRUb09mZnNldHMpOwotICAgIG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5j
bGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2lkVG9TdHlsZVNoZWV0T2Zmc2V0cyk7Cisg
ICAgbV9pZFRvU3R5bGVTaGVldE9mZnNldHMuY2xlYXIoKTsKICAgICBtX3N0eWxlU2hlZXRUb0lk
LmNsZWFyKCk7CiAgICAgbV9pZFRvU3R5bGVTaGVldC5jbGVhcigpOwogICAgIG1faWRUb1N0eWxl
U2hlZXRUZXh0LmNsZWFyKCk7CkBAIC0xMTIsMzIgKzExMiwyOCBAQCBDU1NTdHlsZVNoZWV0KiBJ
bnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogb3duZXJEb2N1
bWVudCwgYgogICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0OwogfQogCi1TdHJpbmcgSW5z
cGVjdG9yQ1NTU3RvcmU6OnN0eWxlU2hlZXRUZXh0KGxvbmcgc3R5bGVTaGVldElkKQorYm9vbCBJ
bnNwZWN0b3JDU1NTdG9yZTo6c3R5bGVTaGVldFRleHQobG9uZyBzdHlsZVNoZWV0SWQsIFN0cmlu
ZyogcmVzdWx0KQogewogICAgIElkVG9TdHlsZVNoZWV0VGV4dE1hcDo6aXRlcmF0b3IgaXQgPSBt
X2lkVG9TdHlsZVNoZWV0VGV4dC5maW5kKHN0eWxlU2hlZXRJZCk7Ci0gICAgaWYgKGl0ICE9IG1f
aWRUb1N0eWxlU2hlZXRUZXh0LmVuZCgpKQotICAgICAgICByZXR1cm4gaXQtPnNlY29uZDsKKyAg
ICBpZiAoaXQgIT0gbV9pZFRvU3R5bGVTaGVldFRleHQuZW5kKCkpIHsKKyAgICAgICAgKnJlc3Vs
dCA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KIAogICAgIENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKICAg
ICBpZiAoIXN0eWxlU2hlZXQpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBib29sIHN1Y2Nlc3MgPSBmYWxz
ZTsKLSAgICBOb2RlKiBvd25lck5vZGUgPSBzdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKLSAgICBp
ZiAob3duZXJOb2RlICYmIG93bmVyTm9kZS0+bm9kZVR5cGUoKSA9PSBOb2RlOjpFTEVNRU5UX05P
REUpIHsKLSAgICAgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVu
dCo+KG93bmVyTm9kZSk7Ci0gICAgICAgIGlmIChvd25lckVsZW1lbnQtPnRhZ05hbWUoKS5sb3dl
cigpID09ICJzdHlsZSIpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IGlubGluZVN0eWxlU2hlZXRU
ZXh0KHN0eWxlU2hlZXQpOwotICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7Ci0gICAgICAgIH0K
LSAgICB9CisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gaW5saW5lU3R5bGVT
aGVldFRleHQoc3R5bGVTaGVldCwgJnRleHQpOwogICAgIGlmICghc3VjY2VzcykKLSAgICAgICAg
c3VjY2VzcyA9IHJlc291cmNlU3R5bGVTaGVldFRleHQoc3R5bGVTaGVldCwgJnJlc3VsdCk7Cisg
ICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXQsICZ0ZXh0
KTsKIAotICAgIGlmIChzdWNjZXNzKQotICAgICAgICBtX2lkVG9TdHlsZVNoZWV0VGV4dC5zZXQo
c3R5bGVTaGVldElkLCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgaWYgKHN1Y2Nl
c3MpIHsKKyAgICAgICAgbV9pZFRvU3R5bGVTaGVldFRleHQuc2V0KHN0eWxlU2hlZXRJZCwgdGV4
dCk7CisgICAgICAgICpyZXN1bHQgPSB0ZXh0OworICAgIH0KKyAgICByZXR1cm4gc3VjY2VzczsK
IH0KIAogYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChDU1NT
dHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBTdHJpbmcqIHJlc3VsdCkKQEAgLTE0NSwyNCArMTQxLDI1
IEBAIGJvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OnJlc291cmNlU3R5bGVTaGVldFRleHQoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCwgU3RyaW5nCiAgICAgcmV0dXJuIG1faW5zcGVjdG9yQ29udHJv
bGxlci0+cmVzb3VyY2VDb250ZW50Rm9yVVJMKHN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIHN0eWxl
U2hlZXQtPmRvY3VtZW50KCksIHJlc3VsdCk7CiB9CiAKLVN0cmluZyBJbnNwZWN0b3JDU1NTdG9y
ZTo6aW5saW5lU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK2Jvb2wg
SW5zcGVjdG9yQ1NTU3RvcmU6OmlubGluZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQsIFN0cmluZyogcmVzdWx0KQogewogICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0eWxl
U2hlZXQtPm93bmVyTm9kZSgpOwogICAgIGlmICghb3duZXJOb2RlIHx8IG93bmVyTm9kZS0+bm9k
ZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUgfHwgbV9zdHlsZVNoZWV0VG9JZC5maW5kKHN0
eWxlU2hlZXQpID09IG1fc3R5bGVTaGVldFRvSWQuZW5kKCkpCi0gICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIEVsZW1lbnQqIG93bmVyRWxlbWVudCA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihvd25lck5vZGUpOwogICAgIGlmIChvd25lckVsZW1lbnQt
PnRhZ05hbWUoKS5sb3dlcigpICE9ICJzdHlsZSIpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsK
LSAgICByZXR1cm4gb3duZXJFbGVtZW50LT5pbm5lclRleHQoKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICpyZXN1bHQgPSBvd25lckVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIHJldHVy
biB0cnVlOwogfQogCi0KIC8vIEFsbCByYW5nZXMgYXJlOiBbc3RhcnQ7IGVuZCkgKHN0YXJ0IC0g
aW5jbHVzaXZlLCBlbmQgLSBleGNsdXNpdmUpLgogYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0
U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1NTU3R5
bGVTb3VyY2VEYXRhPiogcmVzdWx0KQogewogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAorICAgIGZwcmludGYoc3RkZXJyLCAiUXVlcnkgZGF0YSBmb3Igc3R5bGUgJXBc
biIsIHN0eWxlKTsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gaW5saW5lU3R5bGVFbGVtZW50KHN0
eWxlKTsKICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAvLyBJbmxpbmU6IHN0eWxlPSIuLi4i
LgpAQCAtMTc5LDIwICsxNzYsMjUgQEAgYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5bGVT
b3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1MKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4q
IHJhbmdlc1ZlY3RvciA9IDA7Ci0gICAgU3R5bGVTaGVldFRvT2Zmc2V0c01hcDo6aXRlcmF0b3Ig
aXQgPSBtX3N0eWxlU2hlZXRUb09mZnNldHMuZmluZChzdHlsZVNoZWV0KTsKLSAgICBpZiAoaXQg
PT0gbV9zdHlsZVNoZWV0VG9PZmZzZXRzLmVuZCgpKSB7Ci0gICAgICAgIFN0cmluZyB0ZXh0ID0g
c3R5bGVTaGVldFRleHQoYmluZFN0eWxlU2hlZXQoc3R5bGVTaGVldCkpOwotICAgICAgICBpZiAo
IXRleHQuaXNFbXB0eSgpKSB7CisgICAgbG9uZyBzdHlsZVNoZWV0SWQgPSBiaW5kU3R5bGVTaGVl
dChzdHlsZVNoZWV0KTsKKyAgICBJZFRvU3R5bGVTaGVldE9mZnNldHNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvU3R5bGVTaGVldE9mZnNldHMuZmluZChzdHlsZVNoZWV0SWQpOworICAgIGlmIChp
dCA9PSBtX2lkVG9TdHlsZVNoZWV0T2Zmc2V0cy5lbmQoKSkgeworICAgICAgICBTdHJpbmcgdGV4
dDsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHQoc3R5bGVTaGVldElkLCAm
dGV4dCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIkV4dHJhY3Qgb2Zmc2V0cyBmb3Igc3R5bGVTaGVldCAlbGRcbiIsIHN0eWxlU2hlZXRJZCk7
CiAgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbmV3U3R5bGVTaGVldCA9IENTU1N0
eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0LT5vd25lck5vZGUoKSk7CiAgICAgICAgICAgICBD
U1NQYXJzZXIgcDsKICAgICAgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwIHJ1bGVSYW5nZU1hcDsK
ICAgICAgICAgICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgpLCB0ZXh0LCAwLCAm
cnVsZVJhbmdlTWFwKTsKICAgICAgICAgICAgIHJhbmdlc1ZlY3RvciA9IG5ldyBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4gPjsKICAgICAgICAgICAgIGV4dHJhY3RSYW5nZXMobmV3
U3R5bGVTaGVldC5nZXQoKSwgcnVsZVJhbmdlTWFwLCByYW5nZXNWZWN0b3IpOwotICAgICAgICAg
ICAgbV9zdHlsZVNoZWV0VG9PZmZzZXRzLnNldChzdHlsZVNoZWV0LCByYW5nZXNWZWN0b3IpOwor
ICAgICAgICAgICAgbV9pZFRvU3R5bGVTaGVldE9mZnNldHMuc2V0KHN0eWxlU2hlZXRJZCwgcmFu
Z2VzVmVjdG9yKTsKICAgICAgICAgfQotICAgIH0gZWxzZQorICAgIH0gZWxzZSB7CiAgICAgICAg
IHJhbmdlc1ZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT2Zm
c2V0cyBrbm93biBmb3Igc3R5bGVTaGVldCAlbGRcbiIsIHN0eWxlU2hlZXRJZCk7CisgICAgfQog
ICAgIGlmICghcmFuZ2VzVmVjdG9yKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIwMiw2
ICsyMDQsNyBAQCBib29sIEluc3BlY3RvckNTU1N0b3JlOjpnZXRTdHlsZVNvdXJjZURhdGEoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJlZlB0cjxDUwogICAgICAgICBpZiAoIXJ1bGUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKHJ1bGUtPnN0eWxlKCkgPT0gc3R5bGUp
IHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiR290IGRhdGEgZm9yIHN0eWxlICVwXG4i
LCBzdHlsZSk7CiAgICAgICAgICAgICBBU1NFUlQocnVsZUluZGV4IDwgcmFuZ2VzVmVjdG9yLT5z
aXplKCkpOwogICAgICAgICAgICAgKnJlc3VsdCA9IHJhbmdlc1ZlY3Rvci0+YXQocnVsZUluZGV4
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMjI5LDYgKzIzMiw5IEBAIGJvb2wgSW5z
cGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKE5vZGUqIG5vZGUsIFJlZlB0
cjxDU1NTdHlsZVNvdXJjCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBzdHls
ZVRleHQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZSgi
c3R5bGUiKTsKKworICAgICgqcmVzdWx0KS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSAwOwor
ICAgICgqcmVzdWx0KS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gMDsKICAgICBpZiAoc3R5bGVU
ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAoKnJlc3VsdCktPnN0eWxlQm9keVJhbmdlLnN0YXJ0
ID0gMDsKICAgICAgICAgKCpyZXN1bHQpLT5zdHlsZUJvZHlSYW5nZS5lbmQgPSAwOwpAQCAtMjQx
LDYgKzI0NywzNyBAQCBib29sIEluc3BlY3RvckNTU1N0b3JlOjpnZXRTdHlsZUF0dHJpYnV0ZVJh
bmdlcyhOb2RlKiBub2RlLCBSZWZQdHI8Q1NTU3R5bGVTb3VyYwogICAgIHJldHVybiB0cnVlOwog
fQogCitib29sIEluc3BlY3RvckNTU1N0b3JlOjpnZXRTdHlsZVRleHQobG9uZyBzdHlsZUlkLCBT
dHJpbmcqIGRlY2xhcmF0aW9uVGV4dCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSA9IHN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgRWxlbWVudCogZWxlbWVudCA9IGlubGluZVN0eWxlRWxlbWVudChzdHls
ZSk7CisgICAgaWYgKGVsZW1lbnQpIHsKKyAgICAgICAgKmRlY2xhcmF0aW9uVGV4dCA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZSgic3R5bGUiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGdldFBhcmVudFN0eWxlU2hlZXQoc3R5
bGUpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFN0
cmluZyB0ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KGJpbmRTdHlsZVNo
ZWV0KHN0eWxlU2hlZXQpLCAmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURh
dGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgIHN1Y2Nlc3MgPSBnZXRTdHls
ZVNvdXJjZURhdGEoc3R5bGUsICZzdHlsZVNvdXJjZURhdGEpOworICAgIGlmICghc3VjY2VzcykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIEFTU0VSVChzdHlsZVNvdXJjZURhdGEtPnN0eWxl
Qm9keVJhbmdlLnN0YXJ0IDwgdGV4dC5sZW5ndGgoKSk7CisgICAgQVNTRVJUKHN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIDwgdGV4dC5sZW5ndGgoKSk7CisgICAgKmRlY2xhcmF0
aW9uVGV4dCA9IHRleHQuc3Vic3RyaW5nKHN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uu
c3RhcnQsIHN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIC0gc3R5bGVTb3VyY2VE
YXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIHN0
YXRpYwogQ1NTU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFBhcmVudFN0eWxlU2hl
ZXQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCiB7CiAgICAgaWYgKCFzdHlsZSkKQEAgLTI4
OSw2ICszMjYsODEgQEAgQ1NTU3R5bGVSdWxlKiBJbnNwZWN0b3JDU1NTdG9yZTo6cnVsZUZvcklk
KGxvbmcgcnVsZUlkKQogICAgIHJldHVybiBpdCA9PSBtX2lkVG9SdWxlLmVuZCgpID8gMCA6IGl0
LT5zZWNvbmQuZ2V0KCk7CiB9CiAKK2xvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgbG9uZyBpZCA9IG1fc3R5bGVT
aGVldFRvSWQuZ2V0KHN0eWxlU2hlZXQpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBt
X2xhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAgbV9pZFRvU3R5bGVTaGVldC5zZXQoaWQsIHN0
eWxlU2hlZXQpOworICAgICAgICBtX3N0eWxlU2hlZXRUb0lkLnNldChzdHlsZVNoZWV0LCBpZCk7
CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NTdG9yZTo6ZGlk
U3R5bGVTaGVldFRleHRDaGFuZ2UobG9uZyBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgbmV3
VGV4dCwgYm9vbCBzaG91bGREcm9wUnVsZXMpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJEcm9w
cGluZyBvZmZzZXRzIGZvciBzdHlsZVNoZWV0ICVsZFxuIiwgc3R5bGVTaGVldElkKTsKKyAgICBp
ZiAoc2hvdWxkRHJvcFJ1bGVzKQorICAgICAgICBkcm9wUnVsZXMoc3R5bGVTaGVldElkKTsKKyAg
ICBtX2lkVG9TdHlsZVNoZWV0VGV4dC5zZXQoc3R5bGVTaGVldElkLCBuZXdUZXh0KTsKKyAgICBt
X2lkVG9TdHlsZVNoZWV0T2Zmc2V0cy5yZW1vdmUoc3R5bGVTaGVldElkKTsKK30KKwordm9pZCBJ
bnNwZWN0b3JDU1NTdG9yZTo6ZGlkU3R5bGVUZXh0Q2hhbmdlKGxvbmcgc3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiBuZXdUZXh0KQoreworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5
bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAoaW5saW5lU3R5bGVFbGVtZW50KHN0eWxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IGdldFBhcmVudFN0eWxlU2hlZXQoc3R5
bGUpOworICAgIFN0cmluZyBwYXRjaGVkVGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNo
ZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUocGFyZW50U3R5bGVTaGVldCwgc3R5bGVJZCwgbmV3VGV4
dCwgJnBhdGNoZWRUZXh0KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKyAg
ICBkaWRTdHlsZVNoZWV0VGV4dENoYW5nZShiaW5kU3R5bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0
KSwgcGF0Y2hlZFRleHQsIGZhbHNlKTsKK30KKworYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6c3R5
bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0cmluZyogcmVzdWx0KQor
eworICAgIGxvbmcgc3R5bGVTaGVldElkID0gYmluZFN0eWxlU2hlZXQoc3R5bGVTaGVldCk7Cisg
ICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHQoc3R5bGVT
aGVldElkLCAmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVJhbmdlcyA9IENTU1N0eWxl
U291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgc3VjY2VzcyA9IGdldFN0eWxlU291cmNlRGF0YShz
dHlsZUZvcklkKHN0eWxlSWQpLCAmc3R5bGVSYW5nZXMpOworICAgIEFTU0VSVChzdWNjZXNzKTsK
KyAgICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzdHlsZVJhbmdlcy0+c3R5bGVCb2R5UmFuZ2Uuc3Rh
cnQ7CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHN0eWxlUmFuZ2VzLT5zdHlsZUJvZHlSYW5nZS5l
bmQ7CisgICAgQVNTRVJUKGJvZHlTdGFydCA8IGJvZHlFbmQpOworICAgIEFTU0VSVChib2R5RW5k
IDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4Y2x1c2l2ZQorCisgICAgU3RyaW5n
IHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9keVN0YXJ0KTsKKyAgICBwYXRjaGVk
VGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRleHQgKz0gdGV4dC5zdWJzdHJpbmco
Ym9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3VsdCA9IHBhdGNoZWRUZXh0OworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEluc3BlY3RvckNTU1N0b3JlOjpkcm9wUnVsZXMobG9u
ZyBzdHlsZVNoZWV0SWQpCit7CisgICAgaWYgKCFzdHlsZVNoZWV0SWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5
bGVTaGVldElkKTsKKyAgICBBU1NFUlQoc3R5bGVTaGVldCk7CisKKyAgICBSZWZQdHI8Q1NTUnVs
ZUxpc3Q+IHJ1bGVzID0gc3R5bGVTaGVldC0+Y3NzUnVsZXModHJ1ZSk7CisgICAgaWYgKCFydWxl
cykKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gcnVsZXMtPmxl
bmd0aCgpOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICB1bmJpbmRSdWxlKGFzQ1NTU3R5bGVSdWxl
KHJ1bGVzLT5pdGVtKGkpKSk7Cit9CisKIGxvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKICAgICBsb25nIGlkID0gbV9zdHlsZVRv
SWQuZ2V0KHN0eWxlKTsKQEAgLTMwMCwxNSArNDEyLDE2IEBAIGxvbmcgSW5zcGVjdG9yQ1NTU3Rv
cmU6OmJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKICAgICByZXR1cm4gaWQ7
CiB9CiAKLWxvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQpCit2b2lkIEluc3BlY3RvckNTU1N0b3JlOjp1bmJpbmRTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKIHsKLSAgICBsb25nIGlkID0gbV9zdHlsZVNoZWV0VG9J
ZC5nZXQoc3R5bGVTaGVldCk7Ci0gICAgaWYgKCFpZCkgewotICAgICAgICBpZCA9IG1fbGFzdFN0
eWxlU2hlZXRJZCsrOwotICAgICAgICBtX2lkVG9TdHlsZVNoZWV0LnNldChpZCwgc3R5bGVTaGVl
dCk7Ci0gICAgICAgIG1fc3R5bGVTaGVldFRvSWQuc2V0KHN0eWxlU2hlZXQsIGlkKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGlkOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKworICAg
IGxvbmcgaWQgPSBtX3N0eWxlVG9JZC5nZXQoc3R5bGUpOworICAgIGlmICghaWQpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2lkVG9TdHlsZS5yZW1vdmUoaWQpOworICAgIG1fc3R5bGVUb0lkLnJl
bW92ZShzdHlsZSk7CiB9CiAKIGxvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSkKQEAgLTMyMiw2ICs0MzUsMTkgQEAgbG9uZyBJbnNwZWN0b3JDU1NTdG9y
ZTo6YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogICAgIHJldHVybiBpZDsKIH0KIAordm9p
ZCBJbnNwZWN0b3JDU1NTdG9yZTo6dW5iaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7Cisg
ICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBsb25nIGlkID0gbV9ydWxlVG9J
ZC5nZXQocnVsZSk7CisgICAgaWYgKCFpZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRUb1J1
bGUucmVtb3ZlKGlkKTsKKyAgICBtX3J1bGVUb0lkLnJlbW92ZShydWxlKTsKKyAgICB1bmJpbmRT
dHlsZShydWxlLT5zdHlsZSgpKTsKK30KKwogLy8gc3RhdGljCiBFbGVtZW50KiBJbnNwZWN0b3JD
U1NTdG9yZTo6aW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQog
ewpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgKaW5kZXggOWIzMjlkZi4uYTA5ZTVl
NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaAorKysg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCkBAIC01NSw3ICs1NSw3IEBA
IHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgbG9uZz4gU3R5bGVUb0lkTWFw
OwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiA+IElk
VG9TdHlsZU1hcDsKIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBsb25nPiBSdWxlVG9J
ZE1hcDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IElkVG9S
dWxlTWFwOwotdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8UmVmUHRyPENT
U1N0eWxlU291cmNlRGF0YT4gPiogPiBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOwordHlwZWRlZiBI
YXNoTWFwPGxvbmcsIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+KiA+IElkVG9T
dHlsZVNoZWV0T2Zmc2V0c01hcDsKIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgbG9u
Zz4gU3R5bGVTaGVldFRvSWRNYXA7CiB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0
eWxlU2hlZXQ+ID4gSWRUb1N0eWxlU2hlZXRNYXA7CiB0eXBlZGVmIEhhc2hNYXA8bG9uZywgU3Ry
aW5nPiBJZFRvU3R5bGVTaGVldFRleHRNYXA7CkBAIC02Nyw2ICs2Nyw3IEBAIGNsYXNzIEluc3Bl
Y3RvckNTU1N0b3JlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCogZ2V0UGFy
ZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKik7CiAgICAgc3RhdGljIEVsZW1lbnQq
IGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgc3RhdGljIENT
U1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUoU3R5bGVCYXNlKik7CiAKICAgICBJbnNwZWN0b3JD
U1NTdG9yZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKTsKICAgICB+
SW5zcGVjdG9yQ1NTU3RvcmUoKTsKQEAgLTc2LDI2ICs3NywzMiBAQCBwdWJsaWM6CiAgICAgQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldEZvcklkKGxvbmcgc3R5bGVTaGVldElkKTsKICAgICBDU1NT
dHlsZVJ1bGUqIHJ1bGVGb3JJZChsb25nIHN0eWxlUnVsZUlkKTsKICAgICBEaXNhYmxlZFN0eWxl
RGVjbGFyYXRpb24qIGRpc2FibGVkU3R5bGVGb3JJZChsb25nIHN0eWxlSWQsIGJvb2wgY3JlYXRl
SWZBYnNlbnQpOwotICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4dChsb25nIHN0eWxlU2hlZXRJZCk7
CisgICAgYm9vbCBzdHlsZVNoZWV0VGV4dChsb25nIHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1
bHQpOworICAgIHZvaWQgZGlkU3R5bGVTaGVldFRleHRDaGFuZ2UobG9uZyBzdHlsZVNoZWV0SWQs
IGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgYm9vbCBzaG91bGREcm9wUnVsZXMgPSB0cnVlKTsKKyAg
ICB2b2lkIGRpZFN0eWxlVGV4dENoYW5nZShsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmV3
VGV4dCk7CiAgICAgQ1NTU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCog
b3duZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCk7CiAgICAgdm9pZCByZW1vdmVEb2N1
bWVudChEb2N1bWVudCopOwogCi0gICAgbG9uZyBiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUp
OwotICAgIGxvbmcgYmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKLSAgICBs
b25nIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpOworICAgIGxvbmcg
YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5
bGVSdWxlKik7CisgICAgdm9pZCB1bmJpbmRSdWxlKENTU1N0eWxlUnVsZSopOworICAgIHZvaWQg
ZHJvcFJ1bGVzKGxvbmcgc3R5bGVTaGVldElkKTsKKyAgICBsb25nIGJpbmRTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCB1bmJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
Kik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUo
U3R5bGVCYXNlKik7Ci0gICAgU3RyaW5nIGlubGluZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hl
ZXQqKTsKKyAgICBib29sIGlubGluZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQqLCBTdHJp
bmcqIHJlc3VsdCk7CiAgICAgYm9vbCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hl
ZXQqLCBTdHJpbmcqIHJlc3VsdCk7CiAgICAgdm9pZCBleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBTdHlsZVJ1bGVSYW5nZU1hcCYsIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3Vy
Y2VEYXRhPiA+KiByYW5nZXNWZWN0b3IpOwogICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5n
ZXMoTm9kZSogcGFyZW50Tm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCk7
CisgICAgYm9vbCBnZXRTdHlsZVRleHQobG9uZyBzdHlsZUlkLCBTdHJpbmcqIGRlY2xhcmF0aW9u
VGV4dCk7CisgICAgYm9vbCBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoQ1NTU3R5bGVT
aGVldCosIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0cmluZyog
cmVzdWx0KTsKIAogICAgIFN0eWxlVG9JZE1hcCBtX3N0eWxlVG9JZDsKICAgICBJZFRvU3R5bGVN
YXAgbV9pZFRvU3R5bGU7CiAgICAgUnVsZVRvSWRNYXAgbV9ydWxlVG9JZDsKICAgICBJZFRvUnVs
ZU1hcCBtX2lkVG9SdWxlOwotICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXAgbV9zdHlsZVNoZWV0
VG9PZmZzZXRzOworICAgIElkVG9TdHlsZVNoZWV0T2Zmc2V0c01hcCBtX2lkVG9TdHlsZVNoZWV0
T2Zmc2V0czsKICAgICBTdHlsZVNoZWV0VG9JZE1hcCBtX3N0eWxlU2hlZXRUb0lkOwogICAgIElk
VG9EaXNhYmxlZFN0eWxlTWFwIG1faWRUb0Rpc2FibGVkU3R5bGU7CiAgICAgSWRUb1N0eWxlU2hl
ZXRNYXAgbV9pZFRvU3R5bGVTaGVldDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKaW5kZXggN2VhMTViOS4uMjRkMDMyMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJJbmplY3Rl
ZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2Vu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9y
Q2xpZW50LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKQEAgLTUxNyw2ICs1MTgs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgcmVs
ZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKTsKICAgICBtX2Zyb250ZW5kID0gbmV3IEluc3Bl
Y3RvckZyb250ZW5kKG1fY2xpZW50KTsKICAgICBtX2RvbUFnZW50ID0gSW5zcGVjdG9yRE9NQWdl
bnQ6OmNyZWF0ZShtX2Nzc1N0b3JlLmdldCgpLCBtX2Zyb250ZW5kLmdldCgpKTsKKyAgICBtX2Nz
c0FnZW50ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmNyZWF0ZShtX2Nzc1N0b3JlLmdldCgpLCBtX2Zy
b250ZW5kLmdldCgpLCBtX2RvbUFnZW50LmdldCgpKTsKIAogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICBtX3N0b3JhZ2VBZ2VudCA9IEluc3BlY3RvclN0b3JhZ2VBZ2VudDo6Y3JlYXRlKG1fZnJv
bnRlbmQuZ2V0KCkpOwpAQCAtNjI5LDYgKzYzMSwxMCBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xs
ZXI6OnJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCkKICAgICAgICAgbV9kb21BZ2VudC0+
cmVzZXQoKTsKICAgICBtX2RvbUFnZW50LmNsZWFyKCk7CiAKKyAgICBpZiAobV9jc3NBZ2VudCkK
KyAgICAgICAgbV9jc3NBZ2VudC0+cmVzZXQoKTsKKyAgICBtX2Nzc0FnZW50LmNsZWFyKCk7CisK
ICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgaWYgKG1fc3RvcmFnZUFnZW50KQogICAgICAgICBt
X3N0b3JhZ2VBZ2VudC0+Y2xlYXJGcm9udGVuZCgpOwpAQCAtODA0LDYgKzgxMCw3IEBAIHZvaWQg
SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZChEb2N1bWVudExvYWRlciogbG9hZGVy
KQogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAgICAgICAgbV9mcm9udGVuZC0+cmVz
ZXQoKTsKICAgICAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CisgICAgICAgICAgICBtX2Nz
c0FnZW50LT5yZXNldCgpOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFdPUktFUlMpCiAgICAgICAg
IG1fd29ya2Vycy5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5o
CmluZGV4IGYzYTE3YzIuLjVjMGVkNDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250
cm9sbGVyLmgKQEAgLTYxLDYgKzYxLDcgQEAgY2xhc3MgSW5zcGVjdG9yQXJyYXk7CiBjbGFzcyBJ
bnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI7CiBjbGFz
cyBJbnNwZWN0b3JDbGllbnQ7CitjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudDsKIGNsYXNzIEluc3Bl
Y3RvckNTU1N0b3JlOwogY2xhc3MgSW5zcGVjdG9yRE9NQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JE
T01TdG9yYWdlUmVzb3VyY2U7CkBAIC0zMDUsNiArMzA2LDcgQEAgcHJpdmF0ZToKIAogICAgIHZv
aWQgc2V0TW9uaXRvcmluZ1hIUkVuYWJsZWQoYm9vbCBlbmFibGVkLCBib29sKiBuZXdTdGF0ZSk7
CiAgICAgdm9pZCBzdG9yZUxhc3RBY3RpdmVQYW5lbChjb25zdCBTdHJpbmcmIHBhbmVsTmFtZSk7
CisgICAgSW5zcGVjdG9yQ1NTQWdlbnQqIGNzc0FnZW50KCkgeyByZXR1cm4gbV9jc3NBZ2VudC5n
ZXQoKTsgfQogICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCgpIHsgcmV0dXJuIG1fZG9t
QWdlbnQuZ2V0KCk7IH0KICAgICB2b2lkIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7
CiAKQEAgLTM2OCw2ICszNzAsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxJbnNwZWN0b3JGcm9u
dGVuZENsaWVudD4gbV9pbnNwZWN0b3JGcm9udGVuZENsaWVudDsKICAgICBib29sIG1fb3Blbmlu
Z0Zyb250ZW5kOwogICAgIE93blB0cjxJbnNwZWN0b3JGcm9udGVuZD4gbV9mcm9udGVuZDsKKyAg
ICBSZWZQdHI8SW5zcGVjdG9yQ1NTQWdlbnQ+IG1fY3NzQWdlbnQ7CiAgICAgUmVmUHRyPEluc3Bl
Y3RvckRPTUFnZW50PiBtX2RvbUFnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ+IG1fc3RvcmFnZUFnZW50OwogICAgIE93blB0cjxJbnNwZWN0b3JDU1NTdG9yZT4gbV9jc3NT
dG9yZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCBmNTFkYTcz
Li4wYTU1YzRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0z
OTgsNiArMzk4LDExIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQobG9uZyBp
ZCkKICAgICByZXR1cm4gMDsKIH0KIAorbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6aWRGb3JEb2N1
bWVudE5vZGUoTm9kZSogZG9jTm9kZSkKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudE5vZGVUb0lk
TWFwLmdldChkb2NOb2RlKTsKK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q2hpbGRO
b2Rlcyhsb25nIG5vZGVJZCkKIHsKICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlk
KTsKQEAgLTEyMzAsNiArMTIzNSwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHls
ZVNvdXJjZURhdGEobG9uZyBzdHlsZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PgogICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJib2R5UmFuZ2UiLCBib2R5UmFuZ2UpOwogICAgIGJvZHlSYW5nZS0+
c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0KTsKICAg
ICBib2R5UmFuZ2UtPnNldE51bWJlcigiZW5kIiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uu
ZW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZWxlY3RvclJhbmdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgic2VsZWN0b3JSYW5n
ZSIsIHNlbGVjdG9yUmFuZ2UpOworICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51bWJlcigic3RhcnQi
LCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7CisgICAgc2VsZWN0b3JSYW5n
ZS0+c2V0TnVtYmVyKCJlbmQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwog
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydHlSYW5nZXMgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVydHlEYXRhIiwgcHJvcGVy
dHlSYW5nZXMpOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURh
dGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CkBAIC0xNDg4LDE0ICsxNDk3LDYgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25n
IHNlbGVjdGVkTm9kZUlkLCBSZWYKICAgICAqcnVsZU9iamVjdCA9IGJ1aWxkT2JqZWN0Rm9yUnVs
ZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpOwogfQogCi12b2lkIEluc3BlY3RvckRP
TUFnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4q
IGNzc1Byb3BlcnRpZXMpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVz
ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt
Q1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVzLT5wdXNoU3RyaW5nKHByb3Bl
cnR5TmFtZVN0cmluZ3NbaV0pOwotICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5yZWxl
YXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgYm9vbCBi
aW5kKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4
OWM2ZmQwLi40MTdmOTRmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAg
LTEzMSw3ICsxMzEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdG9nZ2xl
U3R5bGVFbmFibGVkKGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJv
b2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlT2JqZWN0KTsKICAgICAg
ICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0
b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmpl
Y3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAgICB2b2lkIGFkZFJ1bGUoY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAg
IHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBj
c3NQcm9wZXJ0aWVzKTsKIAogICAgICAgICAvLyBNZXRob2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNw
ZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCk7CkBAIC0xNDMsMTEgKzE0MiwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRhdGEqKTsKIAogICAgICAgICBO
b2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOworICAgICAgICBsb25nIGlkRm9yRG9jdW1lbnRO
b2RlKE5vZGUqKTsKICAgICAgICAgbG9uZyBwdXNoTm9kZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5v
ZGUpOwogICAgICAgICB2b2lkIHB1c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChsb25nIG5vZGVJZCk7
CiAgICAgICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5kKGNvbnN0IFN0cmluZyYgcGF0
aCwgbG9uZyogbm9kZUlkKTsKICAgICAgICAgbG9uZyBpbnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxv
bmcgbnVtKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShsb25nIG5vZGVJZCk7CisgICAgICAgIGNv
bnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiYgZG9jdW1lbnRzKCkgeyByZXR1cm4g
bV9kb2N1bWVudHM7IH0KKworICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc3RhcnRM
aXN0ZW5pbmcoRG9jdW1lbnQqIGRvY3VtZW50KTsKQEAgLTE4NSw3ICsxODgsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlKE5vZGUqIG5vZGUpOwogCiAg
ICAgICAgIERvY3VtZW50KiBtYWluRnJhbWVEb2N1bWVudCgpIGNvbnN0OwotICAgICAgICBTdHJp
bmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdDsKICAgICAgICAg
SW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlKCkgeyByZXR1cm4gbV9jc3NTdG9yZTsgfQogCiAg
ICAgICAgIHZvaWQgb25NYXRjaEpvYnNUaW1lcihUaW1lcjxJbnNwZWN0b3JET01BZ2VudD4qKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69173</attachid>
            <date>2010-09-29 02:18:39 -0700</date>
            <delta_ts>2010-10-01 10:20:36 -0700</delta_ts>
            <desc>[PATCH] The correct preliminary patch in place of the previous one</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>125449</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1B
UEkuY3NzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5j
c3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2Q2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEku
Y3NzCkBAIC0wLDAgKzEsMjIgQEAKK2h0bWwgeworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisK
K2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAhCisKKyAgICBpbXBv
cnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICov
OworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejogIiFpbXBvcnRhbnQi
OworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFkY29sb3IiICEgaW1w
b3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovOworfQorCisvKiBj
b21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVj
dG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8qIG5vdCBhbiAhaW1w
b3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICovCisKK2JvZHkubWFp
bjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBv
cnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisKK2JvZHk6OmFmdGVy
ICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZDJjNDFkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0ODEgQEAKK1Rl
c3RzIHRoYXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4K
KworCis9PT0gQ29tcHV0ZWQgc3R5bGUgZm9yIGJvZHkgPT09CisKK3N0eWxlCitlbGVtZW50LnN0
eWxlIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidzY3Jv
bGwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2JvcmRlci1i
b3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidyZ2IoMCwg
MTI4LCAwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1pbWFnZSc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzoncGFkZGlu
Zy1ib3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24nOicw
JSAwJSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQnOidyZXBl
YXQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtc2l6ZSc6J2F1dG8gYXV0
byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1jb2xvcic6J3JnYigy
NDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9tLWxl
ZnQtcmFkaXVzJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9t
LXJpZ2h0LXJhZGl1cyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJv
dHRvbS1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1ib3R0
b20td2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1jb2xsYXBz
ZSc6J3NlcGFyYXRlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItbGVmdC1jb2xv
cic6J3JnYigyNDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXIt
bGVmdC1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1sZWZ0
LXdpZHRoJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItcmlnaHQtY29s
b3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVy
LXJpZ2h0LXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXJp
Z2h0LXdpZHRoJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLWNv
bG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRl
ci10b3AtbGVmdC1yYWRpdXMnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRl
ci10b3AtcmlnaHQtcmFkaXVzJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3Jk
ZXItdG9wLXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRv
cC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm90dG9tJzonYXV0bydd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY2FwdGlvbi1zaWRlJzondG9wJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydjbGVhcic6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2NsaXAnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjb2xvcic6J3JnYigyNDAs
IDExLCAxNzApJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjdXJzb3InOidhdXRvJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXJlY3Rpb24nOidsdHInXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZW1w
dHktY2VsbHMnOidzaG93J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmbG9hdCc6J25vbmUn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtZmFtaWx5JzonVGltZXMnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2ZvbnQtc3R5bGUnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Zv
bnQtdmFyaWFudCc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZm9udC13ZWln
aHQnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2hlaWdodCc6JzYwMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsZWZ0JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snbGV0dGVyLXNwYWNpbmcnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2xpbmUtaGVpZ2h0Jzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaXN0
LXN0eWxlLWltYWdlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbGlzdC1zdHls
ZS1wb3NpdGlvbic6J291dHNpZGUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2xpc3Qtc3R5
bGUtdHlwZSc6J2Rpc2MnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1ib3R0b20n
Oic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1sZWZ0JzonOHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tcmlnaHQnOicxMTBweCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snbWF4LWhlaWdodCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21heC13aWR0
aCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21pbi1oZWlnaHQnOicwcHgnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21pbi13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ29ycGhh
bnMnOicyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdXRsaW5lLWNvbG9yJzoncmdiKDI0
MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ291dGxpbmUtc3R5bGUnOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdXRsaW5lLXdpZHRoJzonMHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydvdmVyZmxvdy14JzondmlzaWJsZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snb3ZlcmZsb3cteSc6J3Zpc2libGUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ3BhZGRpbmctYm90dG9tJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydw
YWRkaW5nLWxlZnQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZGRpbmctcmln
aHQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZGRpbmctdG9wJzonMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwYWdlLWJyZWFrLWFmdGVyJzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFnZS1icmVhay1iZWZvcmUnOidhdXRvJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydwYWdlLWJyZWFrLWluc2lkZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ3BvaW50ZXItZXZlbnRzJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1sncG9zaXRpb24nOidzdGF0aWMnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Jlc2l6
ZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3JpZ2h0JzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1sndGFibGUtbGF5b3V0JzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1sndGV4dC1hbGlnbic6Jy13ZWJraXQtYXV0byddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1sndGV4dC1kZWNvcmF0aW9uJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1sndGV4dC1pbmRlbnQnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtcmVu
ZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndGV4dC1zaGFkb3cnOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd0ZXh0LW92ZXJmbG93JzonY2xpcCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndGV4dC10cmFuc2Zvcm0nOidub25lJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyd0b3AnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd1
bmljb2RlLWJpZGknOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3ZlcnRpY2Fs
LWFsaWduJzonYmFzZWxpbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Zpc2liaWxpdHkn
Oid2aXNpYmxlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd3aGl0ZS1zcGFjZSc6J25vcm1h
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd2lkb3dzJzonMiddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snd2lkdGgnOic2NjdweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd29y
ZC1icmVhayc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd29yZC1zcGFjaW5n
JzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd3b3JkLXdyYXAnOidub3JtYWwnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3otaW5kZXgnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyd6b29tJzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tZGVsYXknOicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tZGlyZWN0aW9uJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbic6JzBzJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGUnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQnOicxJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWFuaW1hdGlvbi1uYW1lJzonbm9uZSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tcGxheS1zdGF0ZSc6J3J1bm5pbmcn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5j
dGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEsIDAsMjUsIDEpJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LWFwcGVhcmFuY2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LWJhY2tmYWNlLXZpc2liaWxpdHknOid2aXNpYmxlJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJhY2tncm91bmQtY2xpcCc6J2JvcmRlci1ib3gnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGUnOidz
b3VyY2Utb3ZlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZ3JvdW5k
LW9yaWdpbic6J3BhZGRpbmctYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0
LWJhY2tncm91bmQtc2l6ZSc6J2F1dG8gYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1ibG9jay1mbG93JzondGInXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJr
aXQtYm9yZGVyLWZpdCc6J2JvcmRlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtp
dC1ib3JkZXItaG9yaXpvbnRhbC1zcGFjaW5nJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWyctd2Via2l0LWJvcmRlci1pbWFnZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJy13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmcnOicwcHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWFsaWduJzonc3RyZXRjaCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtZGlyZWN0aW9uJzonbm9ybWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1mbGV4JzonMCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1ib3gtZmxleC1ncm91cCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJy13ZWJraXQtYm94LWxpbmVzJzonc2luZ2xlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWJveC1vcmRpbmFsLWdyb3VwJzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snLXdlYmtpdC1ib3gtb3JpZW50JzonaG9yaXpvbnRhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1ib3gtcGFjayc6J3N0YXJ0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWJveC1yZWZsZWN0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1ib3gtc2hhZG93Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1ib3gtc2l6aW5nJzonY29udGVudC1ib3gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
Jy13ZWJraXQtY29sb3ItY29ycmVjdGlvbic6J2RlZmF1bHQnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtY29sdW1uLWJyZWFrLWFmdGVyJzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tYnJlYWstYmVmb3JlJzonYXV0byddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tYnJlYWstaW5zaWRlJzonYXV0byddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tY291bnQnOidhdXRvJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1nYXAnOidub3JtYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1uLXJ1bGUtY29sb3InOidyZ2IoMjQw
LCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4tcnVs
ZS1zdHlsZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1u
LXJ1bGUtd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29s
dW1uLXNwYW4nOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi13
aWR0aCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtZm9udC1zbW9v
dGhpbmcnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWhpZ2hsaWdo
dCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbGluZS1icmVhayc6
J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1saW5lLWNsYW1wJzon
bm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJnaW4tYm90dG9tLWNv
bGxhcHNlJzonY29sbGFwc2UnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFy
Z2luLXRvcC1jb2xsYXBzZSc6J2NvbGxhcHNlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9uJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snLXdlYmtpdC1tYXJxdWVlLWluY3JlbWVudCc6JzZweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snLXdlYmtpdC1tYXJxdWVlLXJlcGV0aXRpb24nOidpbmZpbml0ZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLXN0eWxlJzonc2Nyb2xsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2stYXR0YWNobWVudCc6J3Njcm9sbCddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLWJveC1pbWFnZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1jbGlwJzonYm9yZGVyLWJveCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLWNvbXBvc2l0ZSc6J3NvdXJjZS1v
dmVyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2staW1hZ2UnOidub25l
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hc2stb3JpZ2luJzonYm9yZGVy
LWJveCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXNrLXBvc2l0aW9uJzon
MCUgMCUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1yZXBlYXQnOidy
ZXBlYXQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtbWFzay1zaXplJzonYXV0
byBhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW5ic3AtbW9kZSc6J25v
cm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1wZXJzcGVjdGl2ZSc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2lu
JzonMzMzcHggMzAwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcnRsLW9y
ZGVyaW5nJzonbG9naWNhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0
LWRlY29yYXRpb25zLWluLWVmZmVjdCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
Jy13ZWJraXQtdGV4dC1maWxsLWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1zZWN1cml0eSc6J25vbmUnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1zdHJva2UtY29sb3InOidyZ2IoMjQwLCAxMSwg
MTcwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0
aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0nOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4n
OiczMzNweCAzMDBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zv
cm0tc3R5bGUnOidmbGF0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5z
aXRpb24tZGVsYXknOicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFu
c2l0aW9uLWR1cmF0aW9uJzonMHMnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dHJhbnNpdGlvbi1wcm9wZXJ0eSc6J2FsbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEs
IDAsMjUsIDEpJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXVzZXItZHJhZyc6
J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1tb2RpZnknOidy
ZWFkLW9ubHknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1zZWxlY3Qn
Oid0ZXh0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwLXBhdGgnOidub25lJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwLXJ1bGUnOidub256ZXJvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydtYXNrJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmls
dGVyJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmxvb2QtY29sb3InOidyZ2Io
MCwgMCwgMCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Zsb29kLW9wYWNpdHknOicxJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaWdodGluZy1jb2xvcic6J3JnYigyNTUsIDI1NSwg
MjU1KSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3RvcC1jb2xvcic6J3JnYigwLCAwLCAw
KSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3RvcC1vcGFjaXR5JzonMSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snY29sb3ItaW50ZXJwb2xhdGlvbic6J3NyZ2InXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyc6J2xpbmVhcnJnYidd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY29sb3ItcmVuZGVyaW5nJzonYXV0byddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snZmlsbCc6JyMwMDAwMDAnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2ZpbGwtb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwt
cnVsZSc6J25vbnplcm8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ltYWdlLXJlbmRlcmlu
Zyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmtlci1lbmQnOidub25lJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJrZXItbWlkJzonbm9uZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFya2VyLXN0YXJ0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc2hhcGUtcmVuZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
c3Ryb2tlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWRhc2hhcnJh
eSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3N0cm9rZS1kYXNob2Zmc2V0Jzon
MCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWxpbmVjYXAnOididXR0J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydzdHJva2UtbGluZWpvaW4nOidtaXRlciddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLW1pdGVybGltaXQnOic0J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydzdHJva2Utb3BhY2l0eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J3N0cm9rZS13aWR0aCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2FsaWdubWVudC1i
YXNlbGluZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Jhc2VsaW5lLXNoaWZ0
JzonYmFzZWxpbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2RvbWluYW50LWJhc2VsaW5l
JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sna2VybmluZyc6JzAnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ3RleHQtYW5jaG9yJzonc3RhcnQnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ3dyaXRpbmctbW9kZSc6J2xyLXRiJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJzonMGRlZyddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOidhdXRvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LXN2Zy1zaGFkb3cnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyd2ZWN0b3ItZWZmZWN0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
KworPT09IE1hdGNoZWQgcnVsZXMgZm9yIGJvZHkgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1h
Z2VudCcgdW5kZWZpbmVkLXVuZGVmaW5lZF0gW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3Bs
YXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tYm90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydtYXJnaW4tbGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVs
ZQorYm9keTogWycnIDMyLTM2XSBbMzgtMjk4XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIx
XQorWydmb28nOidiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkg
bm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBb
MjYtMTA0XQorWydoZWlnaHQnOicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDkt
MTMzXQorWydjb2xvcnonOiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1sn
aW1wb3J0YW50JzonJyBub24tcGFyc2VkXSBAWzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9y
IiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMt
aW1wb3J0YW50XSBAWzE5MC0yNTldCisKK3J1bGUKK2JvZHkubWFpbjE6IFsnJyAzMzAtMzY4XSBb
MzY5LTQ1MF0KK1snY29sb3InOicjRjAwQkFBJ10gQFsxMy0yOF0KK1snem9vJzonbW9vIC8qIG5v
dCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsy
OC04MV0KKworcnVsZQorYm9keS5tYWluMjogWycnIDQ2Ni00NzZdIFs0NzctNTcyXQorWydiYWNr
Z3JvdW5kJzonZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQg
Lyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1
XQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidncmVlbiddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KKworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRl
Y29yYXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5v
bi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1Bz
ZXVkb0lkPTQKKworcnVsZQorYm9keTo6YWZ0ZXI6IFsnJyA1NzUtNTg2XSBbNTg5LTYxN10KK1sn
Y29udGVudCc6JyJBZnRlciBib2R5IiddIEBbNS0yN10KKworPT09IEF0dHJpYnV0ZSBzdHlsZXMg
Zm9yIHRhYmxlID09PQorQXR0cmlidXRlOiB3aWR0aAorCitzdHlsZQorZWxlbWVudC5zdHlsZSBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd2lkdGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCisKKz09PSBJbmhlcml0ZWQgc3R5bGVzIGZvciBib2R5ID09PQorTGV2ZWw9MQorCitydWxl
CitodG1sOiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1
bGUKK2h0bWw6IFsnJyAwLTRdIFs2LTI5XQorWydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0K
KworPT09IElubGluZSBzdHlsZSBmb3IgYm9keSA9PT0KKworc3R5bGUKK2VsZW1lbnQuc3R5bGUg
WzAtMzFdCitbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQorWyd3aWR0aCc6Jzg1JSdd
IEBbMjEtMzFdCisKKz09PSBBbGwgc3R5bGVzaGVldHMgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1s
IHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVy
dHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9y
dGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFu
dDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdp
dGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9i
b2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6
ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBi
b2R5IjsKK30KKycKKworcnVsZQoraHRtbDogWycnIDAtNF0gWzYtMjldCitbJ2ZvbnQtd2VpZ2h0
JzonNDAwJ10gQFs1LTIyXQorCitydWxlCitib2R5OiBbJycgMzItMzZdIFszOC0yOThdCitbJ2Zv
bnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdCitbJ2Zvbyc6J2JhciAhCisKKyAgICBpbXBvcnRhbnQg
LyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICovJyBpcy1p
bXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0xMDRdCitbJ2hlaWdodCc6JzEwMCUgIWltcG9ydGFu
dCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNdCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9u
LXBhcnNlZF0gQFsxMzgtMTU5XQorWydpbXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3
NF0KK1snY29sb3InOiciYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0
aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBvcnRhbnRdIEBbMTkwLTI1OV0KKworcnVsZQorYm9k
eS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEz
LTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3Bl
cnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2
LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50
IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAq
LycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2lu
aXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzon
aW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5p
dGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVu
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCitydWxlCitib2R5OjphZnRlcjogWycnIDU3NS01
ODZdIFs1ODktNjE3XQorWydjb250ZW50JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3XQorCitTdHls
ZVNoZWV0OiAnCisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsK
KyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0
eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJv
cGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKycKKworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5
LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRw
cm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09IExhc3Qg
c3R5bGVzaGVldCBwYXRjaGVkID09PQorCitTdHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7ICAg
IHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1
ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBh
Z2U6IFsnJyAwLTEzXSBbMTUtNzhdCitbJ3RleHQtZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gn
XSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02
M10KKworcnVsZQorYm9keTogWycnIDc5LTgzXSBbODUtMTA5XQorWyd0ZXh0LWFsaWduJzonanVz
dGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVl
dDogJ2h0bWwgKiwgYm9keVtmb289ImJhciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0
aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246
IGp1c3RpZnk7fScKKworcnVsZQoraHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06IFsnJyAwLTIzXSBb
MjUtODhdCitbJ3RleHQtZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2Jh
ZHByb3BlcnR5JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9k
eTogWycnIDg5LTkzXSBbOTUtMTE5XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0K
KworPT09IEFmdGVyIHN0eWxlIHRleHQgc2V0ID09PQorCitTdHlsZVNoZWV0OiAnaHRtbCAqLCBi
b2R5W2Zvbz0iYmFyIl0ge2NvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAg
ICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30nCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJd
OiBbJycgMC0yM10gWzI1LTU3XQorWydjb2xvcic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3Jv
dW5kJzonYmxhY2snXSBAWzE0LTMyXQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFs
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0
aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidp
bml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2lu
aXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidibGFjaydd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhd
CitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10gQFs0LTI0XQorCis9PT0gTWF0Y2hlZCBydWxlcyBh
ZnRlciBydWxlIGFkZGVkID09PQorCitydWxlCitib2R5OiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5l
ZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ21hcmdpbi1yaWdodCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snbWFyZ2luLWJvdHRvbSc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2lu
LWxlZnQnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyAz
Mi0zNl0gWzM4LTI5OF0KK1snZm9udC1zaXplJzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFy
ICEKKworICAgIGltcG9ydGFudCAvKiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVk
IGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVp
Z2h0JzonMTAwJSAhaW1wb3J0YW50JyBpcy1pbXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6
JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycg
bm9uLXBhcnNlZF0gQFsxNjQtMTc0XQorWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQg
LyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsx
OTAtMjU5XQorCitydWxlCitodG1sICosIGJvZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsyNS01
N10KK1snY29sb3InOid3aGl0ZSddIEBbMC0xM10KK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsx
NC0zMl0KK1snYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNvbG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyA1OC02Ml0gWzY0LTg4XQorWyd0ZXh0LWFsaWduJzon
anVzdGlmeSddIEBbNC0yNF0KKworcnVsZQorYm9keTogWydpbnNwZWN0b3InIDAtNF0gWzUtMTZd
CitbJ2ZvbnQnOidzZXJpZiddIEBbMC0xMV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0z
NjhdIFszNjktNDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28g
Lyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2Vk
XSBAWzI4LTgxXQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitb
J2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9y
dGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBA
WzAtOTVdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1B
UEkuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4NWMxZTgKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI0
MyBAQAorPGh0bWw+Cis8aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNv
dXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVz
dHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJl
bGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkK
K3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJy
YXkocmVzdWx0KTsKKyAgICAgICAgbm90aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUlu
V2ViSW5zcGVjdG9yKCJmcm9udGVuZF9ydW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZy
b250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJv
bGxlcikKK3sKKyAgICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRl
bmRfZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAg
IHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7Cisg
ICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkU3R5bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29t
cHV0ZWRTdHlsZSkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0
cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09
IENvbXB1dGVkIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVt
cFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBjb21wdXRlZFN0eWxlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIG1hdGNoZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBt
YXRjaGVkQ1NTUnVsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2go
Ij09PSBNYXRjaGVkIHJ1bGVzIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRf
ZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiBwc2V1ZG9SdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVy
LCBwc2V1ZG9SdWxlcykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVz
dWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgi
PT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgcHNldWRvUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlBzZXVkb0lkPSIgKyBwc2V1ZG9SdWxlc1tpXS5wc2V1
ZG9JZCk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRy
b2xsZXIsIHBzZXVkb1J1bGVzW2ldLnJ1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVy
LCBhdHRyaWJ1dGVTdHlsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVy
LnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBBdHRyaWJ1dGUgc3R5bGVzIGZvciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGF0dHIgaW4gYXR0cmlidXRlU3R5bGVzKSB7CisgICAgICAgICAgICAgICAgdGVzdENv
bnRyb2xsZXIucmVzdWx0cy5wdXNoKCJBdHRyaWJ1dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAg
ICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0
eWxlc1thdHRyXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlv
biBpbmhlcml0ZWRTdHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVz
KQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVk
IHN0eWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aW5oZXJpdGVkU3R5bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCJMZXZlbD0iICsgKGkgKyAxKSk7CisgICAgICAgICAgICAgICAg
ZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNb
aV0uaW5saW5lU3R5bGUpOworICAgICAgICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5
KHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0ubWF0Y2hlZENTU1J1bGVzKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2Fs
bGJhY2sodGVzdENvbnRyb2xsZXIsIGlubGluZVN0eWxlKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAg
ICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmxpbmVT
dHlsZSk7CisgICAgICAgICAgICBmcm9udGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xs
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0
eWxlRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNvbXB1
dGVkU3R5bGVDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFn
ZW50LmRvY3VtZW50LmJvZHkuaWQsIG1hdGNoZWRSdWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVz
dENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUHNldWRv
UnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgcHNl
dWRvUnVsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIoZnJvbnRlbmRfbm9kZUZv
cklkKCJ0aGV0YWJsZSIpLmlkLCBhdHRyaWJ1dGVTdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0SW5oZXJpdGVkU3R5
bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGluaGVy
aXRlZFN0eWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5nZXRJbmxpbmVTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21B
Z2VudC5kb2N1bWVudC5ib2R5LmlkLCBpbmxpbmVTdHlsZUNhbGxiYWNrLmJpbmQobnVsbCwgdGVz
dENvbnRyb2xsZXIpKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcFJ1bGVz
QXJyYXkodGVzdENvbnRyb2xsZXIsIHJ1bGVzKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAg
IHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgKytpKQorICAg
ICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIHJ1bGVzW2ldKTsK
K30KKworZnVuY3Rpb24gZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKQor
ewordmFyIG5ld1N0eWxlU2hlZXRUZXh0ID0KKyJib2R5Lm1haW5wYWdlIHtcCisgICAgdGV4dC1k
ZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoO1wKKyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjtc
Cit9XAorXAorYm9keSB7XAorICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XAorfVwKKyI7CisKKyAg
ICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisg
ICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBMYXN0IHN0eWxlc2hlZXQgcGF0Y2hlZCA9
PT0iKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVT
aGVldC5pZCwgbmV3U3R5bGVTaGVldFRleHQsCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5k
RHVtcFN0eWxlU2hlZXQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldC5pZCwg
ZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpKTsKKyAg
ICB9CisKKyAgICBmdW5jdGlvbiBzdHlsZVNoZWV0SWRzTG9hZGVkKHRlc3RDb250cm9sbGVyLCBp
ZHMpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBbGwgc3R5bGVzaGVldHMgPT09
Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKQorICAgICAg
ICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBpZHNb
aV0sIChpIDwgaWRzLmxlbmd0aCAtIDEpID8gbnVsbCA6IHBhdGNoU3R5bGVTaGVldC5iaW5kKG51
bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxs
U3R5bGVzMihzdHlsZVNoZWV0SWRzTG9hZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsK
K30KKworZnVuY3Rpb24gZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHN0
eWxlU2hlZXQpCit7CisgICAgZnVuY3Rpb24gZGlkU2V0U2VsZWN0b3IodGVzdENvbnRyb2xsZXIs
IHJ1bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOwor
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzZWxlY3RvciBz
ZXQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29u
dHJvbGxlciwgcnVsZS5wYXJlbnRTdHlsZVNoZWV0LmlkLCBmcm9udGVuZF9zZXRTdHlsZVRleHQu
YmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tl
bmQuc2V0UnVsZVNlbGVjdG9yMihzdHlsZVNoZWV0LmNzc1J1bGVzWzBdLmlkLCAiaHRtbCAqLCBi
b2R5W2Zvbz1cImJhclwiXSIsIGRpZFNldFNlbGVjdG9yLmJpbmQobnVsbCwgdGVzdENvbnRyb2xs
ZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVy
LCBzdHlsZVNoZWV0KQoreworICAgIGZ1bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJv
bGxlciwgc3R5bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2go
IiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHls
ZSB0ZXh0IHNldCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0
KHRlc3RDb250cm9sbGVyLCBzdHlsZS5wYXJlbnRTdHlsZVNoZWV0SWQsIGZyb250ZW5kX2FkZFJ1
bGUuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJh
Y2tlbmQuc2V0U3R5bGVUZXh0MihzdHlsZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmlkLCAiY29s
b3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBibGFjazsiLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9hZGRSdWxlKHRlc3RD
b250cm9sbGVyKQoreworICAgIGZ1bmN0aW9uIGRpZEdldE1hdGNoZWRSdWxlcyh0ZXN0Q29udHJv
bGxlciwgbWF0Y2hlZENTU1J1bGVzKQorICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVz
dWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0g
TWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PSIpOworICAgICAgICBmcm9udGVuZF9k
dW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAg
dGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQor
ICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihX
ZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgZGlkR2V0TWF0Y2hlZFJ1bGVz
LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydWxl
QWRkZWQodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLnNldFN0eWxlVGV4dDIocnVsZS5zdHlsZS5pZCwgImZvbnQ6IHNlcmlmIiwgZGlkU2V0U3R5
bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBJbnNwZWN0
b3JCYWNrZW5kLmFkZFJ1bGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5Lmlk
LCAiYm9keSIsIHJ1bGVBZGRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1
bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZU9yU3R5
bGUpCit7CisgICAgaWYgKCFydWxlT3JTdHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBp
c1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHlsZSk7CisgICAgdmFyIHN0eWxlID0gaXNSdWxlID8g
cnVsZU9yU3R5bGUuc3R5bGUgOiBydWxlT3JTdHlsZTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIiIpOworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaChpc1J1bGUgPyAi
cnVsZSIgOiAic3R5bGUiKTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVs
ZSA/IChydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgKyAiOiBbJyIgKyBydWxlT3JTdHlsZS5vcmln
aW4gKyAiJyAiICsgcnVsZU9yU3R5bGUuc2VsZWN0b3JTdGFydE9mZnNldCArICItIiArIHJ1bGVP
clN0eWxlLnNlbGVjdG9yRW5kT2Zmc2V0ICsgIl0iKSA6ICJlbGVtZW50LnN0eWxlIikgKyAiIFsi
ICsgc3R5bGUuc3RhcnRPZmZzZXQgKyAiLSIgKyBzdHlsZS5lbmRPZmZzZXQgKyAiXSIpOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUucHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAg
ICAgICB2YXIgcHJvcGVydHkgPSBzdHlsZS5wcm9wZXJ0aWVzW2ldOworICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3Bl
cnR5LnZhbHVlICsgIiciICsgKHByb3BlcnR5LnByaW9yaXR5ID8gIiBpcy1pbXBvcnRhbnQiIDog
IiIpICsgKHByb3BlcnR5LnBhcnNlZE9rID8gIiIgOiAiIG5vbi1wYXJzZWQiKSArIl0gQFsiICsg
cHJvcGVydHkuc3RhcnRPZmZzZXQgKyAiLSIgKyBwcm9wZXJ0eS5lbmRPZmZzZXQgKyAiXSIpOwor
ICAgIH0KK30KKworCitmdW5jdGlvbiBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVz
dENvbnRyb2xsZXIsIHN0eWxlU2hlZXRJZCwgY29udGludWF0aW9uKQoreworICAgIGZ1bmN0aW9u
IHN0eWxlU2hlZXRMb2FkZWQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIlN0eWxlU2hlZXQ6ICciICsgc3R5bGVTaGVldC50ZXh0ICsgIici
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0
aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9s
bGVyLCBzdHlsZVNoZWV0LmNzc1J1bGVzW2ldKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikK
KyAgICAgICAgICAgIGNvbnRpbnVhdGlvbihzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAgICBJbnNw
ZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJZCwgc3R5bGVTaGVldExvYWRl
ZC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKKy8qCitDb3ZlcmVkIEFQSSBtZXRo
b2RzOgorIC0gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyCisgLSBnZXRNYXRjaGVkUnVsZXNGb3JO
b2RlMgorIC0gZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIKKyAtIGdldEF0dHJpYnV0ZVN0
eWxlc0Zvck5vZGUyCisgLSBnZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMgorIC0gZ2V0SW5saW5l
U3R5bGVGb3JOb2RlMgorIC0gZ2V0QWxsU3R5bGVzMgorIC0gZ2V0U3R5bGVTaGVldDIKKyAtIHNl
dFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0U3R5bGVUZXh0MgorIC0gc2V0UnVsZVNlbGVjdG9yMgor
IC0gYWRkUnVsZTIKKyovCisKKzwvc2NyaXB0PgorCis8c3R5bGU+CisKKy8qIEFuIGlubGluZSBz
dHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUg
dG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKzwv
c3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWluMSBtYWluMiBtYWlucGFnZSIgb25s
b2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7IHdpZHRoOiA4NSUiPgor
PHA+CitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhw
ZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lkdGg9NTAlIGlkPSJ0aGV0YWJsZSI+Cis8L3RhYmxlPgor
PC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxl
cy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAppbmRleCBlNGQzM2Q4Li5iZWVjNzI4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4
cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZz
ZXRzLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRlc3RzIHRoYXQgcHJvcGVyIGRhdGEg
YW5kIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHN0eWxl
IGRlY2xhcmF0aW9ucyBhbmQgcHJvcGVydGllcy4KIAotYm9keTogWzYtMjY2XQorYm9keTogWzAt
NF0gWzYtMjY2XQogWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQogWydmb28nOidiYXIgIQog
CkBAIC05LDE1ICs5LDE1IEBAIGJvZHk6IFs2LTI2Nl0KIFsnY29sb3J6JzonIiFpbXBvcnRhbnQi
JyBub24tcGFyc2VkXSBAWzEzOC0xNTldCiBbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsx
NjQtMTc0XQogWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0
eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8nICFpbXBvcnRhbnRdIEBbMTkwLTI1OV0KLWJvZHkubWFp
bjE6IFszMzctNDE4XQorYm9keS5tYWluMTogWzI5OC0zMzZdIFszMzctNDE4XQogWydjb2xvcic6
JyNGMDBCQUEnXSBAWzEzLTI4XQogWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5y
ZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQotYm9keS5tYWluMjog
WzQ0NS01NDBdCitib2R5Lm1haW4yOiBbNDM0LTQ0NF0gWzQ0NS01NDBdCiBbJ2JhY2tncm91bmQn
OidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBz
ZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgIWltcG9ydGFudF0gQFswLTk1XQotYm9keS5t
YWlucGFnZTogWzE3LTE0OV0KK2JvZHkubWFpbnBhZ2U6IFsyLTE1XSBbMTctMTQ5XQogWyd0ZXh0
LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XQogWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEn
IG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KLWVsZW1lbnQuc3R5bGU6IFswLTMxXQorZWxlbWVudC5z
dHlsZTogWzAtMF0gWzAtMzFdCiBbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQogWyd3
aWR0aCc6JzgwJSddIEBbMjEtMzFdCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHls
ZXMtc291cmNlLW9mZnNldHMuaHRtbAppbmRleCBmY2Y5MjhmLi5iOTMxODlmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCkBAIC0yNCwx
MSArMjQsNiBAQCBmdW5jdGlvbiBkb2l0KCkKIAogZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0
ZXN0Q29udHJvbGxlcikKIHsKLSAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2Vz
LnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMu
cmVzb3VyY2VzLl90b2dnbGVSZXNvdXJjZVRyYWNraW5nKCk7Ci0gICAgICAgIHJldHVybiAicmVm
cmVzaGluZyI7Ci0gICAgfQotCiAgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwog
ICAgIGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3Vt
ZW50KTsKICAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0
aW9uKCkgewpAQCAtNDgsNyArNDMsNyBAQCBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RD
b250cm9sbGVyKQogZnVuY3Rpb24gZnJvbnRlbmRfc3R5bGVEYXRhUmVjZWl2ZWQodGVzdENvbnRy
b2xsZXIsIHJ1bGVPclN0eWxlLCBzaG91bGRCYWlsLCBkYXRhKQogewogICAgIHZhciBpc1J1bGUg
PSAhIShydWxlT3JTdHlsZS5zdHlsZSk7Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNo
KChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsg
IjogWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCAr
ICJdIik7CisgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JT
dHlsZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVj
dG9yUmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBk
YXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CiAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewog
ICAgICAgICB2YXIgcHJvcGVydHlEYXR1bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwogICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSAr
ICInOiciICsgcHJvcGVydHlEYXR1bS52YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9y
dGFudCA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6
ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJv
cGVydHlEYXR1bS5lbmQgKyAiXSIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZmFlZDhlZS4uY2VlMmIxMCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xMDY1LDYgKzEwNjUsOCBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaW5zcGVjdG9y
L0luamVjdGVkU2NyaXB0SG9zdC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBwbGljYXRp
b25DYWNoZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcAorICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTTW9kZWwuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAogICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAKQEAgLTEwNzUsNiArMTA3Nyw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5j
cHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5j
cHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQ0
YzcxYjUuLjhiYTc4NzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTcyNCw2ICsxNzI0LDEwIEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggXAogCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBcCisJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTTW9kZWwuY3BwIFwKKwlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NNb2RlbC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmggXAog
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKQEAgLTE3
NDcsNiArMTc1MSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclRp
bWVsaW5lQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFn
ZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAgXAorCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oIFwKIAlXZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IDdjZjUwYWEuLjhkMTg0MWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xODI2LDYgKzE4MjYsMTAgQEAKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oJywK
KyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTTW9kZWwuY3BwJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTTW9kZWwuaCcsCiAgICAgICAgICAgICAnaW5zcGVj
dG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFz
ZVJlc291cmNlLmNwcCcsCkBAIC0xODQ3LDYgKzE4NTEsOCBAQAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yVGltZWxpbmVBZ2VudC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVXRp
bGl0aWVzLmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCiAgICAgICAg
ICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0
b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAxZmRlNjg1Li5iOGIyNzI5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAg
LTk2MCw2ICs5NjAsOCBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2Vu
dC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBcCisgICAgaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU01v
ZGVsLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
RGF0YWJhc2VSZXNvdXJjZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggNTVjOGQ3Mi4uOGE0YjlhZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC01MjQxMyw2ICs1MjQxMywyMiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvckNTU0FnZW50LmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTTW9kZWwu
Y3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0i
Li5caW5zcGVjdG9yXEluc3BlY3RvckNTU01vZGVsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTU3Rv
cmUuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTUyNTA1LDYgKzUyNTIxLDE0IEBACiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JVdGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxG
aWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclV0aWxpdGllcy5o
Ig0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5c
aW5zcGVjdG9yXEluc3BlY3RvclZhbHVlcy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBkZDRhOGI2Li4yY2I4
YTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ1
MSw2ICsxNDUxLDggQEAKIAkJODFCRTIwOTkxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDgxQkUyMDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlLmggKi87IH07CiAJCTgxQkUyMEQyMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBB
NzExRjRCNjZGMDA5MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICovOyB9OwogCQk4MUJFMjBEMzEx
RjRCQzMyMDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1
cnNvci5oICovOyB9OworCQk4MkFCMTc0MzEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODJBQjE3NDExMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCAqLzsgfTsK
KwkJODJBQjE3NDQxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc0MjEyNEI5OUVD
MDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLzsgfTsKIAkJODJCNjU4OTgxMTg5RTM5
MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVj
dG9yQ1NTU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQk4MkI2NTg5QTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTkx
MTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCAqLzsgfTsKIAkJODJFM0Q4
REUxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkUzRDhEQzEyMkVBMEQxMDAz
QUU1QkMgLyogQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcCAqLzsgfTsKQEAgLTc0MTMsNiArNzQx
NSw4IEBACiAJCTgxQkUyMDlDMTFGNEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IElEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgxQkUyMEE3MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1
cnNvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkN1cnNvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MkFCMTc0MTEyNEI5OUVDMDBDNTA2OUQgLyog
SW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9yQ1NTQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4
MkFCMTc0MjEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ1NTQWdlbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNT
U1N0b3JlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU1N0
b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgyQjY1ODk5MTE4OUU0NzYwMEUw
NTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBJbnNwZWN0b3JDU1NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTgyRTNEOERDMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExODY0LDYgKzExODY4
LDggQEAKIAkJCQkxQzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50Lmgg
Ki8sCiAJCQkJMUM4MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIu
Y3BwICovLAogCQkJCTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmggKi8sCisJCQkJODJBQjE3NDExMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0Fn
ZW50LmNwcCAqLywKKwkJCQk4MkFCMTc0MjEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NT
QWdlbnQuaCAqLywKIAkJCQk4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NT
U3RvcmUuY3BwICovLAogCQkJCTgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JD
U1NTdG9yZS5oICovLAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JE
YXRhYmFzZVJlc291cmNlLmNwcCAqLywKQEAgLTIwNTgyLDYgKzIwNTg4LDcgQEAKIAkJCQk4NDcz
MEQ5MTEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg0NzMwRDkyMTI0OEYwQjMwMEQzQTlDOSAvKiBQb2ludExpZ2h0U291cmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NDczMEQ5MzEyNDhGMEIzMDBEM0E5QzkgLyogU3BvdExpZ2h0U291cmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk4MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9y
Q1NTQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50
UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjMwNjEsNiArMjMwNjgsNyBAQAogCQkJCTg0
NzMwRDhBMTI0OEYwQjMwMEQzQTlDOSAvKiBGRVRpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODQ3MzBEOEMxMjQ4RjBCMzAwRDNBOUM5IC8qIEZFVHVyYnVsZW5jZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NDczMEQ5MDEyNDhGMEIzMDBEM0E5QzkgLyogTGlnaHRTb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJODJBQjE3NDMxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0Fn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGM1NWY5OTguLmMwMTM5YTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJDb3JlL2Nzcy9DU1NH
cmFtbWFyLnkKQEAgLTQwOCw3ICs0MDgsOSBAQCBydWxlX2xpc3Q6CiAgOwogCiB2YWxpZF9ydWxl
OgotICAgIHJ1bGVzZXQKKyAgICBiZWZvcmVfcnVsZXNldCBydWxlc2V0IHsKKyAgICAgICAgJCQg
PSAkMjsKKyAgICB9CiAgIHwgbWVkaWEKICAgfCBwYWdlCiAgIHwgZm9udF9mYWNlCkBAIC05MTAs
OCArOTEyLDIyIEBAIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbjoKICAgICB9CiAgIDsK
IAorYmVmb3JlX3J1bGVzZXQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQYXJzZXIq
IHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5tYXJrU2Vs
ZWN0b3JMaXN0U3RhcnQoKTsKKyAgICB9CisgIDsKKworYmVmb3JlX3J1bGVfb3BlbmluZ19icmFj
ZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0
PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtTZWxlY3Rvckxpc3RFbmQoKTsK
KyAgICB9CisgIDsKKwogcnVsZXNldDoKLSAgICBzZWxlY3Rvcl9saXN0ICd7JyBtYXliZV9zcGFj
ZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKKyAg
ICBzZWxlY3Rvcl9saXN0IGJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2UgJ3snIG1heWJlX3NwYWNl
X2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgewogICAg
ICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAg
ICAgICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXgg
ODZiY2QwZC4uZmNiYmQzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAor
KysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNDYsMTAgKzE0Niw5IEBAIENTU1Bh
cnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1faGFzRm9udEZhY2VP
bmx5VmFsdWVzKGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZh
bHNlKQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQotICAgICwgbV9ydWxlQm9k
eVN0YXJ0T2Zmc2V0KDApCi0gICAgLCBtX3J1bGVCb2R5RW5kT2Zmc2V0KDApCi0gICAgLCBtX3By
b3BlcnR5U3RhcnRPZmZzZXQoVUlOVF9NQVgpCi0gICAgLCBtX3Byb3BlcnR5RW5kT2Zmc2V0KFVJ
TlRfTUFYKQorICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQorICAgICwgbV9ydWxlQm9k
eVJhbmdlKDAsIDApCisgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQog
ICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVudFN0eWxlRGF0YSgwKQogICAg
ICwgbV9kYXRhKDApCkBAIC01NDgwLDExICs1NDc5LDEzIEBAIENTU1J1bGUqIENTU1BhcnNlcjo6
Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxlY3RvcnMpCiAgICAgICAg
IG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7CiAgICAgICAgIGlm
IChtX3J1bGVSYW5nZU1hcCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFN0eWxlRGF0
YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnN0eWxlQm9keVJhbmdlID0gU291
cmNlUmFuZ2UobV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3J1bGVCb2R5RW5kT2Zmc2V0KTsKKyAg
ICAgICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UgPSBtX3NlbGVj
dG9yTGlzdFJhbmdlOworICAgICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRhLT5zdHlsZUJvZHlS
YW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKICAgICAgICAgICAgIG1fcnVsZVJhbmdlTWFwLT5zZXQo
cmVzdWx0LCBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpKTsKICAgICAgICAgICAgIG1fY3Vy
cmVudFN0eWxlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIH0K
ICAgICB9CisgICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwogICAgIHJlc2V0UnVsZUJvZHlN
YXJrcygpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC01
NzMzLDI2ICs1NzM0LDQ0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKQogICAgIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiB9CiAKK3ZvaWQgQ1NTUGFy
c2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQoreworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uu
c3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0
b3JMaXN0RW5kKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFN0eWxlRGF0YSkKKyAgICAgICAgcmV0
dXJuOworICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OworICAgIHdoaWxlIChsaXN0RW5kID4g
bV9kYXRhICsgMSkgeworICAgICAgICBpZiAoaXNDU1NXaGl0ZXNwYWNlKCoobGlzdEVuZCAtIDEp
KSkKKyAgICAgICAgICAgIC0tbGlzdEVuZDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVuZCAtIG1fZGF0
YTsKK30KKwogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIHsKICAgICB1bnNp
Z25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAgICAgaWYgKCp5eXRleHQgPT0gJ3snKQog
ICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcgYnJhY2UuCi0g
ICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlTdGFydE9mZnNldCkKLSAgICAgICAgbV9ydWxlQm9k
eVN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2Uu
c3RhcnQpCisgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNldDsKIH0KIAogdm9p
ZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0g
eXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5RW5kT2Zmc2V0KQot
ICAgICAgICBtX3J1bGVCb2R5RW5kT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBt
X3J1bGVCb2R5UmFuZ2UuZW5kKQorICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5kID0gb2Zmc2V0
OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewotICAgIHVuc2ln
bmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBtX3Byb3BlcnR5U3RhcnRPZmZzZXQg
PSBvZmZzZXQ7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRhOwog
fQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3Vu
ZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQpAQCAtNTc2MCwxMSArNTc3OSwxMSBAQCB2b2lkIENT
U1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1By
b3BlcnR5UGFyc2VkKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKICAg
ICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8gdGhlIHByb3Bl
cnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlFbmRPZmZzZXQgPSBv
ZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlTdGFydE9mZnNldCAhPSBVSU5UX01BWCAmJiBtX2N1
cnJlbnRTdHlsZURhdGEpIHsKKyAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zmc2V0OworICAg
IGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJyZW50U3R5bGVE
YXRhKSB7CiAgICAgICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRlZCB3aGVuIHRoZSBz
dHlsZSBkYXRhIHJldHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50LgotICAgICAgICBjb25z
dCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlTdGFydE9mZnNldDsKLSAgICAgICAgY29uc3Qg
dW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CisgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChzdGFydCA8IGVuZCk7
CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGEgKyBzdGFydCwg
ZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAocHJvcGVydHlTdHJp
bmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKQEAgLTU3NzcsNyArNTc5Niw3IEBAIHZvaWQgQ1NTUGFy
c2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVy
dHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3RyaW5nLnN1YnN0cmlu
Zyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0cmlwV2hpdGVTcGFj
ZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRpdmUgdG8gdGhlIGRl
Y2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRhLT5wcm9w
ZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKG5hbWUs
IHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBTb3VyY2VSYW5nZSht
X3Byb3BlcnR5U3RhcnRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQsIG1fcHJvcGVydHlF
bmRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpKSk7CisgICAgICAgICAgICBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlzUHJvcGVydHlQ
YXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0YXJ0LCBlbmQgLSBt
X3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAgIHJlc2V0UHJvcGVydHlNYXJrcygp
OwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaAppbmRleCBmOGIyNGRmLi43NmJjNjU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjQxLDE4ICsy
NDEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZh
dWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFuZCBkYXRhCi0g
ICAgICAgIHVuc2lnbmVkIG1fcnVsZUJvZHlTdGFydE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQg
bV9ydWxlQm9keUVuZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0eVN0YXJ0T2Zm
c2V0OwotICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5RW5kT2Zmc2V0OworICAgICAgICBTb3Vy
Y2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICBTb3VyY2VSYW5nZSBtX3J1bGVC
b2R5UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5nZTsKICAgICAgICAg
U3R5bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwogICAgICAgICBSZWZQdHI8Q1NTU3R5
bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRTdHlsZURhdGE7CisgICAgICAgIHZvaWQgbWFya1NlbGVj
dG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdEVuZCgpOwogICAg
ICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgICAgIHZvaWQgbWFya1J1bGVCb2R5
RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICAgICAgdm9pZCBt
YXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJz
ZWQpOwotICAgICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVN0YXJ0
T2Zmc2V0ID0gbV9ydWxlQm9keUVuZE9mZnNldCA9IDA7IH0KLSAgICAgICAgdm9pZCByZXNldFBy
b3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG1fcHJvcGVydHlFbmRPZmZz
ZXQgPSBVSU5UX01BWDsgfQorICAgICAgICB2b2lkIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKSB7
IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJhbmdlLmVuZCA9IDA7
IH0KKyAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlSYW5nZS5z
dGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CisgICAgICAgIHZvaWQgcmVzZXRQcm9w
ZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2UuZW5k
ID0gVUlOVF9NQVg7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwogICAgICAgICBp
bnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciogdGV4dChpbnQqIGxl
bmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3Bw
IGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcAppbmRleCAxNjI4MDMxLi5l
YjljMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3Bw
CisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAKQEAgLTU0LDEzICs1
NCw2IEBAIFNvdXJjZVJhbmdlOjpTb3VyY2VSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kKQogewogfQogCi1Tb3VyY2VSYW5nZSYgU291cmNlUmFuZ2U6Om9wZXJhdG9yPShjb25zdCBT
b3VyY2VSYW5nZSYgb3RoZXIpCi17Ci0gICAgdGhpcy0+c3RhcnQgPSBvdGhlci5zdGFydDsKLSAg
ICB0aGlzLT5lbmQgPSBvdGhlci5lbmQ7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5U291cmNlRGF0YShjb25zdCBTdHJpbmcmIG5hbWUs
IGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIHBhcnNlZE9rLCBjb25z
dCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiAgICAgOiBuYW1lKG5hbWUpCiAgICAgLCB2YWx1ZSh2YWx1
ZSkKQEAgLTg4LDE2ICs4MSw2IEBAIENTU1Byb3BlcnR5U291cmNlRGF0YTo6Q1NTUHJvcGVydHlT
b3VyY2VEYXRhKCkKIHsKIH0KIAotQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBDU1NQcm9wZXJ0eVNv
dXJjZURhdGE6Om9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG90aGVyKQot
ewotICAgIG5hbWUgPSBvdGhlci5uYW1lOwotICAgIHZhbHVlID0gb3RoZXIudmFsdWU7Ci0gICAg
aW1wb3J0YW50ID0gb3RoZXIuaW1wb3J0YW50OwotICAgIHBhcnNlZE9rID0gb3RoZXIucGFyc2Vk
T2s7Ci0gICAgcmFuZ2UgPSBvdGhlci5yYW5nZTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIFN0
cmluZyBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZW1wdHlWYWx1ZSwgKCJlIikpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaAppbmRleCBiZWFlOWQwLi5hYzU1NDExIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBDU1NTdHlsZVJ1bGU7CiBz
dHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CiAgICAgU291cmNlUmFuZ2Uo
dW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgU291cmNlUmFuZ2UmIG9wZXJhdG9y
PShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpOwogCiAgICAgdW5zaWduZWQgc3RhcnQ7CiAgICAg
dW5zaWduZWQgZW5kOwpAQCAtNTYsOSArNTUsNyBAQCBzdHJ1Y3QgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhIHsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBwYXJzZWRPaywgY29uc3QgU291
cmNlUmFuZ2UmIHJhbmdlKTsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhJiBvdGhlcik7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKCk7Ci0g
ICAgQUxXQVlTX0lOTElORSB+Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkgeyB9CiAKLSAgICBDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEmIG9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEm
IG90aGVyKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3Q7CiAKQEAgLTc5LDYgKzc2LDEwIEBAIHN0cnVjdCBDU1NTdHlsZVNvdXJjZURhdGEg
OiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsKICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNvdXJjZURhdGEoKSk7CiAgICAgfQogCisgICAgLy8gW09w
dGlvbmFsXSBSYW5nZSBvZiB0aGUgc2VsZWN0b3IgbGlzdCBpbiB0aGUgZW5jbG9zaW5nIHNvdXJj
ZS4KKyAgICAvLyBJZiB0aGUgc3R5bGUgaXMgYSBwdXJlIGRlY2xhcmF0aW9uLCB0aGUgcmFuZ2Ug
aXMgKDAsIDApLgorICAgIFNvdXJjZVJhbmdlIHNlbGVjdG9yTGlzdFJhbmdlOworCiAgICAgLy8g
UmFuZ2Ugb2YgdGhlIHN0eWxlIHRleHQgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCiAgICAgU291
cmNlUmFuZ2Ugc3R5bGVCb2R5UmFuZ2U7CiAgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0
YT4gcHJvcGVydHlEYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVy
YXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0
b3IucG0KaW5kZXggODBlMjQzYi4uMmY1ZjQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2Rl
R2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0zMyw2ICszMywxMSBAQCAkdHlwZVRyYW5zZm9ybXsi
RE9NIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAogICAgICJk
b21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9
OworJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0geworICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9y
Q1NTQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwKKyAgICAi
ZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmNzc0FnZW50KCkiLAor
fTsKICR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImZvcndhcmQi
ID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJ
bnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApp
bmRleCBjZTJiMDNmLi4zZjA3OWVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTE5MSw3
ICsxOTEsMjUgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgdG9n
Z2xlU3R5bGVFbmFibGVkKGluIGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHByb3BlcnR5TmFtZSwg
aW4gYm9vbGVhbiBkaXNhYmxlZCwgb3V0IFZhbHVlIHN0eWxlKTsKICAgICAgICAgW2hhbmRsZXI9
RE9NXSB2b2lkIHNldFJ1bGVTZWxlY3RvcihpbiBsb25nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVj
dG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwgb3V0IGJvb2xlYW4g
c2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhZGRSdWxl
KGluIFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1
bGUsIG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAgICBbaGFuZGxlcj1E
T01dIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkgY3NzUHJvcGVydGll
cyk7CisKKyAgICAgICAgLy8gR2V0IGFsbCBzdHlsZXMgYXBwbGljYWJsZSB0byB0aGUgZ2l2ZW4g
bm9kZS4KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2Rl
MihpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NT
XSB2b2lkIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkg
cnVsZXMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0TWF0Y2hlZFBzZXVkb1J1bGVz
Rm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBBcnJheSBydWxlcyk7IC8vIGFycmF5IG9mIHsg
cHNldWRvSWQ6IDxudW1iZXI+LCBydWxlczogYXJyYXkgb2YgI2Nzc1J1bGUgfQorICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIoaW4gbG9uZyBub2Rl
SWQsIG91dCBWYWx1ZSBzdHlsZXMpOyAvLyBtYXA6IGF0dHJpYnV0ZU5hbWU6ICNjc3NTdHlsZQor
ICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIoaW4g
bG9uZyBub2RlSWQsIG91dCBBcnJheSByZXN1bHQpOyAvLyBhcnJheSBvZiB7IGlubGluZVN0eWxl
OiAjY3NzU3R5bGUsIG1hdGNoZWRDU1NSdWxlczogYXJyYXkgb2YgI2Nzc1J1bGUgfQorICAgICAg
ICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJ
ZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEFsbFN0
eWxlczIob3V0IEFycmF5IHN0eWxlU2hlZXRJZHMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZv
aWQgZ2V0U3R5bGVTaGVldDIoaW4gbG9uZyBzdHlsZVNoZWV0SWQsIG91dCBWYWx1ZSBzdHlsZVNo
ZWV0KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlU2hlZXRUZXh0MihpbiBs
b25nIHN0eWxlU2hlZXRJZCwgaW4gU3RyaW5nIHRleHQpOworICAgICAgICBbaGFuZGxlcj1DU1Nd
IHZvaWQgc2V0U3R5bGVUZXh0MihpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyB0ZXh0LCBvdXQg
VmFsdWUgc3R5bGUpOworCisgICAgICAgIC8vIEVuYWJsZS9kaXNhYmxlIHByb3BlcnR5LiBbbW9k
ZWxdCisgICAgICAgIC8vIFNob3VsZCBiZSBzZW50IGluIGEgYmF0Y2ggYmVmb3JlIHNldFN0eWxl
VGV4dCgpIChzbyB0aGF0IG5vdGhpbmcgY2FuIGhhcHBlbiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMp
LgorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGluIGxvbmcgc3R5
bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGluIGJvb2xlYW4gZGlzYWJsZWQpOworICAg
ICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihpbiBsb25nIHJ1bGVJZCwg
aW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUgcnVsZSk7CisgICAgICAgIFtoYW5kbGVyPUNT
U10gdm9pZCBhZGRSdWxlMihpbiBsb25nIGNvbnRleHROb2RlSWQsIGluIFN0cmluZyBzZWxlY3Rv
ciwgb3V0IFZhbHVlIHJ1bGUpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkgY3NzUHJvcGVydGllcyk7CiAKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBnZXRDb29raWVzKG91dCBBcnJheSBjb29raWVzLCBvdXQg
U3RyaW5nIGNvb2tpZXNTdHJpbmcpOwogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lk
IGRlbGV0ZUNvb2tpZShpbiBTdHJpbmcgY29va2llTmFtZSwgaW4gU3RyaW5nIGRvbWFpbik7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNDZkODE1MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmNwcApAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JDU1NBZ2VudC5oIgor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0
YS5oIgorI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNp
bmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUg
IlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKKworLy8gY3NzUHJvcGVydHkgPSB7CisvLyAgICBuYW1lICAg
ICAgICAgIDogPHN0cmluZz4sCisvLyAgICB2YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCisvLyAg
ICBwcmlvcml0eSAgICAgIDogPHN0cmluZz4sIC8vIJOUIGZvciBub24tcGFyc2VkT2sgcHJvcGVy
dGllcworLy8gICAgaW1wbGljaXQgICAgICA6IDxib29sZWFuPiwKKy8vICAgIHBhcnNlZE9rICAg
ICAgOiA8Ym9vbGVhbj4sIC8vIHdoZXRoZXIgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSBXZWJD
b3JlCisvLyAgICBzdGF0dXMgICAgICAgIDogPHN0cmluZz4sIC8vIJNkaXNhYmxlZJQgfCCTYWN0
aXZllCB8IJNpbmFjdGl2ZZQgfCCTc3R5bGWUCisvLyAgICBzaG9ydGhhbmROYW1lIDogPHN0cmlu
Zz4sCisvLyAgICBzdGFydE9mZnNldCAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVy
dHkgdGV4dCBzdGFydCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNl
bnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8vICAgIGVuZE9mZnNldCAgICAgOiA8
bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9wZXJ0eSB0ZXh0IGVuZCBvZmZzZXQgaW4gZW5jbG9z
aW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3Vj
aC4KKy8vIH0KKy8vCisvLyBzdGF0dXM6CisvLyCTZGlzYWJsZWSUID09IHByb3BlcnR5IGRpc2Fi
bGVkIGJ5IHVzZXIKKy8vIJNhY3RpdmWUID09IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUg
Y29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24KKy8vIJNpbmFjdGl2ZZQgPT0gcHJvcGVydHkgZG9l
cyBubyBwYXJ0aWNpcGF0ZSBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4g
b3ZlcnJpZGRlbiBieSBhIHN1YnNlcXVlbnQgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQor
Ly8gk3N0eWxllCA9PSBwcm9wZXJ0eSBpcyBhY3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUg
V2ViQ29yZSBDU1NTdHlsZURlY2xhcmF0aW9uIHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAo
ZS5nLiBpbXBsaWNpdCBsb25naGFuZCBwcm9wZXJ0aWVzKQorLy8KKy8vCisvLyBjc3NTdHlsZSA9
IHsKKy8vICAgIHN0eWxlSWQgICAgICAgICA6IDxudW1iZXI+LCAvLyBPcHRpb25hbAorLy8gICAg
c3R5bGVTaGVldElkICAgIDogPG51bWJlcj4sIC8vIFBhcmVudDogLTEgZm9yIGlubGluZSBzdHls
ZXMgKDxmb28gc3R5bGU9lC4ulD4pCisvLyAgICBjc3NQcm9wZXJ0aWVzICAgOiBbCisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgI2Nzc1Byb3BlcnR5LAorLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgIC4uLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQorLy8g
ICAgICAgICAgICAgICAgICAgIF0sCisvLyAgICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTEgOiBzaG9ydGhhbmRWYWx1ZTEsCisv
LyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRWYWx1
ZTIKKy8vICAgICAgICAgICAgICAgICAgICAgIH0sCisvLyAgICBjc3NUZXh0ICAgICAgICAgOiA8
c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB9
IC8vID8/PworLy8gfQorLy8KKy8vIC8vIFRPRE86CisvLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQ
cm9wZXJ0aWVzIHRvIGVuYWJsZWQgZmxhZy4KKy8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0
IHRvIHByb3BlcnRpZXMKKy8vCisvLyBjc3NSdWxlID0geworLy8gICAgcnVsZUlkICAgICAgIDog
PG51bWJlcj4sCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJM
ICAgIDogPHN0cmluZz4KKy8vICAgIHNvdXJjZUxpbmUgICA6IDxzdHJpbmc+CisvLyAgICBzdHls
ZVNoZWV0SWQgOiA8bnVtYmVyPiAvLyBhbHNvIGZvdW5kIGluIHN0eWxlCisvLyAgICBvcmlnaW4g
ICAgICAgOiA8c3RyaW5nPiAvLyAiIiB8fCAidXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNw
ZWN0b3IiCisvLyAgICBzdHlsZSAgICAgICAgOiAjY3NzU3R5bGUKKy8vIH0KKy8vCisvLyAvLyBU
T0RPOgorLy8gLy8gLSBmaXggb3JpZ2luCisvLyAvLyAtIGFkZCBzb3VyY2VVUkwKKy8vIC8vIC0g
Zml4IHBhcmVudFN0eWxlU2hlZXRJZAorLy8KKy8vIGNzc1N0eWxlU2hlZXQgPSB7CisvLyAgICBz
dHlsZVNoZWV0SWQgICA6IDxudW1iZXI+CisvLyAgICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+
CisvLyAgICB0aXRsZSAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICBkaXNhYmxlZCAgICAgICA6
IDxib29sZWFuPgorLy8gICAgZG9jdW1lbnROb2RlSWQgOiA8bnVtYmVyPgorLy8gICAgcnVsZXMg
ICAgICAgICAgOiBbCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUnVsZSwKKy8vICAg
ICAgICAgICAgICAgICAgICAgICAgIC4uLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nz
c1J1bGUKKy8vICAgICAgICAgICAgICAgICAgICAgXQorLy8gfQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0luc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JDU1NN
b2RlbCogY3NzTW9kZWwsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9N
QWdlbnQqIGRvbUFnZW50KQorICAgIDogbV9jc3NNb2RlbChjc3NNb2RlbCkKKyAgICAsIG1fZnJv
bnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX2RvbUFnZW50KGRvbUFnZW50KQoreworfQorCitJbnNw
ZWN0b3JDU1NBZ2VudDo6fkluc3BlY3RvckNTU0FnZW50KCkKK3sKKyAgICByZXNldCgpOworfQor
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCit7Cit9CisKK0VsZW1lbnQqIEluc3Bl
Y3RvckNTU0FnZW50OjplbGVtZW50Rm9ySWQobG9uZyBub2RlSWQpCit7CisgICAgTm9kZSogbm9k
ZSA9IGRvbUFnZW50KCktPm5vZGVGb3JJZChub2RlSWQpOworICAgIHJldHVybiAoIW5vZGUgfHwg
bm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpID8gMCA6IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihub2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hl
ZFJ1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3Vs
dCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
ZWxlbWVudC0+b3duZXJEb2N1bWVudCgpOworICAgIENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
ID0gZG9jdW1lbnQtPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1h
dGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBmYWxz
ZSwgdHJ1ZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JDU1NSdWxlcyhkb2N1bWVudCwg
bWF0Y2hlZFJ1bGVzLmdldCgpKTsKK30KKworLy8gY3NzUHNldWRvRWxlbWVudCA9IHsKKy8vICAg
IHBzZXVkb0lkIDogPG51bWJlcj4sCisvLyAgICBydWxlcyAgICA6IFsKKy8vICAgICAgICAgICAg
ICAgICAgICNjc3NSdWxlLAorLy8gICAgICAgICAgICAgICAgICAgLi4uLAorLy8gICAgICAgICAg
ICAgICAgICAgI2Nzc1J1bGUKKy8vICAgICAgICAgICAgICAgXQorLy8gfQordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0g
ZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47
CisgICAgKnJlc3VsdCA9IGJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50KTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIobG9u
ZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAg
ICAgICByZXR1cm47CisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVz
KGVsZW1lbnQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVTdHlsZUZv
ck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3sKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVt
ZW50KQorICAgICAgICByZXR1cm47CisgICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShl
bGVtZW50LT5zdHlsZSgpLCB0cnVlKTsKK30KKworLy8gQSBzaW5nbGUgc3R5bGUgb2JqZWN0Lgor
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gZWxlbWVudC0+b3duZXJEb2N1
bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIGlmICghZGVmYXVsdFZpZXcpCisgICAgICAgIHJl
dHVybjsKKworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZGVmYXVsdFZpZXctPmdl
dENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgpLCBmYWxzZSk7Cit9CisKKy8vIGNzc0lu
aGVyaXRhYmxlTm9kZVN0eWxlcyA9IHsKKy8vICAgIGlubGluZVN0eWxlICAgICA6ICNjc3NTdHls
ZSwKKy8vICAgIG1hdGNoZWRDU1NSdWxlcyA6IFsKKy8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAjY3NzUnVsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4sCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUKKy8vICAgICAgICAgICAgICAgICAgICAgIF0KKy8v
IH0KK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KSB7Cisg
ICAgICAgICpzdHlsZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gaW5oZXJpdGVkU3R5bGVzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKKyAg
ICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0b3JPYmpl
Y3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJl
bnRFbGVtZW50LT5zdHlsZSgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgIHBhcmVudFN0eWxlLT5z
ZXRPYmplY3QoImlubGluZVN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShwYXJlbnRFbGVtZW50
LT5zdHlsZSgpLCB0cnVlKSk7CisKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50U2Vs
ZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsK
KyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJlbnRT
ZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgZmFsc2UsIHRydWUp
OworICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1aWxk
QXJyYXlGb3JDU1NSdWxlcyhwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCksIHBhcmVudE1h
dGNoZWRSdWxlcy5nZXQoKSkpOworCisgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVj
dChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50
RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIH0KKyAgICAqc3R5bGUgPSBpbmhlcml0ZWRT
dHlsZXMucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHls
ZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKK3sKKyAgICBjb25zdCBMaXN0SGFz
aFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4mIGRvY3VtZW50cyA9IGRvbUFnZW50KCktPmRvY3VtZW50
cygpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgU3R5bGVTaGVldExpc3QqIGxpc3QgPSAoKml0KS0+c3R5bGVTaGVldHMoKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBsaXN0LT5pdGVtKGkpOworICAg
ICAgICAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAg
ICAgICgqc3R5bGVzKS0+cHVzaE51bWJlcihjc3NNb2RlbCgpLT5iaW5kU3R5bGVTaGVldChzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldDIobG9uZyBzdHlsZVNo
ZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlU2hlZXRPYmplY3QpCit7CisgICAg
UGFyc2VkU3R5bGVTaGVldCogcGFyc2VkU3R5bGVTaGVldCA9IGNzc01vZGVsKCktPnN0eWxlU2hl
ZXRGb3JJZChzdHlsZVNoZWV0SWQpOworICAgIGlmICghcGFyc2VkU3R5bGVTaGVldCkKKyAgICAg
ICAgcmV0dXJuOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJzZWRTdHlsZVNo
ZWV0LT5jc3NTdHlsZVNoZWV0KCk7CisgICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+
ZG9jdW1lbnQoKSkKKyAgICAgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBidWlsZE9iamVjdEZvclN0
eWxlU2hlZXQoc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSwgc3R5bGVTaGVldCk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihsb25nIHN0eWxlU2hlZXRJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIFBhcnNlZFN0eWxlU2hlZXQqIHBhcnNlZFN0eWxl
U2hlZXQgPSBjc3NNb2RlbCgpLT5zdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBp
ZiAoIXBhcnNlZFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQgPSBwYXJzZWRTdHlsZVNoZWV0LT5jc3NTdHlsZVNoZWV0KCk7CisKKyAg
ICAvLyBEcm9wIGFsbCBzdHlsZXNoZWV0LXJlbGF0ZWQgZGF0YSBhbmQgYmluZGluZ3MuCisgICAg
Y3NzTW9kZWwoKS0+ZGlkU3R5bGVTaGVldFRleHRDaGFuZ2Uoc3R5bGVTaGVldElkLCB0ZXh0KTsK
KworICAgIC8vIENsZWFyIHRoZSBzdHlsZSBzaGVldC4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
LCBzaXplID0gc3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHN0
eWxlU2hlZXQtPnJlbW92ZShpKTsKKworICAgIHN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQs
IHN0eWxlU2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NT
QWdlbnQ6OnNldFN0eWxlVGV4dDIobG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQs
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSA9IGNzc01vZGVsKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFz
dHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIEVsZW1lbnQqIGlubGluZVN0eWxlRWxlbWVudCA9
IEluc3BlY3RvckNTU01vZGVsOjppbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGUpOworICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgIGlmIChpbmxpbmVTdHlsZUVsZW1lbnQpCisgICAgICAgIGlu
bGluZVN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJzdHlsZSIsIGNzc1RleHQsIGVjKTsKKyAg
ICBlbHNlCisgICAgICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKKworICAgIGlm
IChlYykKKyAgICAgICAgcmV0dXJuOworCisgICAgY3NzTW9kZWwoKS0+ZGlkU3R5bGVUZXh0Q2hh
bmdlKHN0eWxlSWQsIGNzc1RleHQpOworICAgICpyZXN1bHQgPSBidWlsZE9iamVjdEZvclN0eWxl
KHN0eWxlLCB0cnVlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVy
dHkyKGxvbmcgLypzdHlsZUlkKi8sIGxvbmcgLypwcm9wZXJ0eU9yZGluYWwqLywgYm9vbCAvKmRp
c2FibGVkKi8pCit7CisgICAgLy8gRklYTUU6IGltcGxlbWVudAorfQorCisvLyBUaGVyZSBpcyBu
byB3YXkgdG8gdGVsbCBpZiB0aGUgc2V0dGluZyBoYXMgc3VjY2VlZGVkLCBzaW5jZSBDU1NTdHls
ZVJ1bGU6OnNldFNlbGVjdG9yVGV4dCgpCisvLyBkb2VzIG5vdCByZXBvcnQgZXJyb3JzLCBhcyBw
ZXIgdGhlIGN1cnJlbnQgQ1NTT00gVzNDIEVkaXRvcidzIERyYWZ0ICgzMSBBdWd1c3QgMjAxMCku
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGxvbmcgcnVsZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7
CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gY3NzTW9kZWwoKS0+cnVsZUZvcklkKHJ1bGVJZCk7
CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0ID0gSW5zcGVjdG9yVXRpbGl0aWVzOjpwYXJlbnRTdHlsZVNoZWV0KHJ1bGUtPnN0
eWxlKCkpOworICAgIGlmICghc3R5bGVTaGVldCB8fCAhc3R5bGVTaGVldC0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgU3RyaW5nIHNoZWV0VGV4dDsKKyAgICBsb25nIHN0eWxl
U2hlZXRJZCA9IGNzc01vZGVsKCktPmJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgIGJv
b2wgc3VjY2VzcyA9IGNzc01vZGVsKCktPnN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnNo
ZWV0VGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQ
dHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpj
cmVhdGUoKTsKKyAgICBzdWNjZXNzID0gY3NzTW9kZWwoKS0+Z2V0U3R5bGVTb3VyY2VEYXRhKHJ1
bGUtPnN0eWxlKCksICZzb3VyY2VEYXRhKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJl
dHVybjsKKworICAgIHJ1bGUtPnNldFNlbGVjdG9yVGV4dChzZWxlY3Rvcik7CisKKyAgICBTdHJp
bmcgbmV3U3R5bGVTaGVldFRleHQgPSBzaGVldFRleHQuc3Vic3RyaW5nKDAsIHNvdXJjZURhdGEt
PnNlbGVjdG9yTGlzdFJhbmdlLnN0YXJ0KTsKKyAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzZWxl
Y3RvcjsKKyAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzaGVldFRleHQucmlnaHQoc2hlZXRUZXh0
Lmxlbmd0aCgpIC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICBjc3NN
b2RlbCgpLT5kaWRTdHlsZVNoZWV0VGV4dENoYW5nZShzdHlsZVNoZWV0SWQsIG5ld1N0eWxlU2hl
ZXRUZXh0LCBmYWxzZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShzdHlsZVNo
ZWV0LT5kb2N1bWVudCgpLCBydWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRk
UnVsZTIobG9uZyBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50KCkt
Pm5vZGVGb3JJZChjb250ZXh0Tm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVy
bjsKKworICAgIFBhcnNlZFN0eWxlU2hlZXQqIHBhcnNlZFN0eWxlU2hlZXQgPSBjc3NNb2RlbCgp
LT5pbnNwZWN0b3JTdHlsZVNoZWV0KG5vZGUtPmRvY3VtZW50KCksIHRydWUpOworICAgIGlmICgh
cGFyc2VkU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOyAvLyBjb3VsZCBub3QgYWRkIGEgc3R5
bGVzaGVldCB0byB0aGUgb3duZXJEb2N1bWVudAorCisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IHBhcnNlZFN0eWxlU2hlZXQtPmNzc1N0eWxlU2hlZXQoKTsKKyAgICBTdHJpbmcgdGV4
dDsKKyAgICBsb25nIHN0eWxlU2hlZXRJZCA9IGNzc01vZGVsKCktPmJpbmRTdHlsZVNoZWV0KHN0
eWxlU2hlZXQpOworICAgIGJvb2wgc3VjY2VzcyA9IGNzc01vZGVsKCktPnN0eWxlU2hlZXRUZXh0
KHN0eWxlU2hlZXRJZCwgJnRleHQpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQorICAgICAgICB0ZXh0ICs9ICJcbiI7CisgICAgdGV4
dCArPSBzZWxlY3RvcjsKKyAgICB0ZXh0ICs9ICJ7IH0iOworICAgIHNldFN0eWxlU2hlZXRUZXh0
MihzdHlsZVNoZWV0SWQsIHRleHQpOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZXMgPSBz
dHlsZVNoZWV0LT5jc3NSdWxlcygpOworCisgICAgQVNTRVJUKHJ1bGVzLT5sZW5ndGgoKSk7Cisg
ICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yQ1NTTW9kZWw6OmFzQ1NTU3R5bGVSdWxl
KHJ1bGVzLT5pdGVtKHJ1bGVzLT5sZW5ndGgoKSAtIDEpKTsKKyAgICBBU1NFUlQocnVsZSk7Cisg
ICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5kb2N1bWVudCgpLCBydWxlKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKQoreworICAgIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgcHJvcGVy
dGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWVTdHJpbmdzW2ldKTsKKyAgICAqY3NzUHJvcGVy
dGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOworfQorCisvLyBDU1NNZXNzYWdlRmFjdG9yeQor
CitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc3R5bGVBdHRyaWJ1dGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy0+
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0
ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAgIGlmIChhdHRyaWJ1dGUtPnN0eWxlKCkpIHsK
KyAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLT5sb2NhbE5hbWUo
KTsKKyAgICAgICAgICAgIHN0eWxlQXR0cmlidXRlcy0+c2V0T2JqZWN0KGF0dHJpYnV0ZU5hbWUu
dXRmOCgpLmRhdGEoKSwgYnVpbGRPYmplY3RGb3JTdHlsZShhdHRyaWJ1dGUtPnN0eWxlKCksIHRy
dWUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc3R5bGVBdHRyaWJ1dGVzOworfQor
CitQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJh
eUZvckNTU1J1bGVzKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NSdWxlTGlzdCogbWF0Y2hl
ZFJ1bGVzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbWF0Y2hlZENTU1J1bGVzID0g
SW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IG1hdGNo
ZWRSdWxlcyAmJiBpIDwgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIENT
U1J1bGUqIHJ1bGUgPSBtYXRjaGVkUnVsZXMtPml0ZW0oaSk7CisgICAgICAgIGlmIChydWxlLT50
eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgICAgIG1hdGNoZWRDU1NSdWxl
cy0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclJ1bGUob3duZXJEb2N1bWVudCwgc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpKTsKKyAgICB9CisgICAgcmV0dXJuIG1hdGNoZWRDU1NS
dWxlcy5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IEluc3BlY3Rv
ckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxlbWVudCkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKKyAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVy
RG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJlZlB0cjxSZW5kZXJTdHlsZT4gcmVu
ZGVyU3R5bGUgPSBlbGVtZW50LT5zdHlsZUZvclJlbmRlcmVyKCk7CisKKyAgICBmb3IgKFBzZXVk
b0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xB
U1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBz
ZXVkb0lkICsgMSkpIHsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMg
PSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQs
IGZhbHNlLCB0cnVlKTsKKyAgICAgICAgaWYgKG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMt
Pmxlbmd0aCgpKSB7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9T
dHlsZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHNldWRvU3R5
bGVzLT5zZXROdW1iZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOwor
ICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9y
Q1NTUnVsZXMoZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLCBtYXRjaGVkUnVsZXMuZ2V0KCkpKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+cHVzaE9iamVjdChwc2V1ZG9TdHlsZXMucmVsZWFzZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZv
clN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQsIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+KiBzb3VyY2VEYXRhKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKGJpbmQpIHsK
KyAgICAgICAgbG9uZyBzdHlsZUlkID0gY3NzTW9kZWwoKS0+YmluZFN0eWxlKHN0eWxlKTsKKyAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImlkIiwgc3R5bGVJZCk7CisgICAgICAgIENTU1N0eWxl
U2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBJbnNwZWN0b3JVdGlsaXRpZXM6OnBhcmVudFN0eWxl
U2hlZXQoc3R5bGUpOworICAgICAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgeworICAgICAgICAg
ICAgbG9uZyBwYXJlbnRTdHlsZVNoZWV0SWQgPSBJbnNwZWN0b3JDU1NNb2RlbDo6aW5saW5lU3R5
bGVFbGVtZW50KHN0eWxlKSA/IC0xIDogY3NzTW9kZWwoKS0+YmluZFN0eWxlU2hlZXQocGFyZW50
U3R5bGVTaGVldCk7CisgICAgICAgICAgICByZXN1bHQtPnNldE51bWJlcigicGFyZW50U3R5bGVT
aGVldElkIiwgcGFyZW50U3R5bGVTaGVldElkKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1
bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7
CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KCJoZWlnaHQiKSk7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5
RGF0YSA9IDA7CisgICAgYm9vbCBoYXNTb3VyY2VEYXRhID0gISghc291cmNlRGF0YSk7CisgICAg
UmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gbmV3U291cmNlRGF0YTsKKyAgICBpZiAoIWhhc1Nv
dXJjZURhdGEpIHsKKyAgICAgICAgbmV3U291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6
Y3JlYXRlKCk7CisgICAgICAgIGhhc1NvdXJjZURhdGEgPSBjc3NNb2RlbCgpLT5nZXRTdHlsZVNv
dXJjZURhdGEoc3R5bGUsICZuZXdTb3VyY2VEYXRhKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbmV3
U291cmNlRGF0YSA9ICpzb3VyY2VEYXRhOworICAgIGlmIChoYXNTb3VyY2VEYXRhKSB7CisgICAg
ICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIG5ld1NvdXJjZURhdGEtPnN0eWxl
Qm9keVJhbmdlLnN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImVuZE9mZnNldCIs
IG5ld1NvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgICAgIHByb3BlcnR5RGF0
YSA9ICZuZXdTb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgfQorICAgIHBvcHVsYXRlT2Jq
ZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eURhdGEp
OworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhPiogcHJvcGVydHlEYXRhKQoreworICAgIC8vIHByb3BlcnRpZXM6IEFycmF5IG9mCisg
ICAgLy8gICBpbmRleDpudW1iZXIgPz8/CisgICAgLy8gICBuYW1lOnN0cmluZworICAgIC8vICAg
dmFsdWU6c3RyaW5nCisgICAgLy8gICBwcmlvcml0eTp7ImltcG9ydGFudCIsICIifQorICAgIC8v
ICAgc3RhdHVzOnsiYWN0aXZlIiwgImluYWN0aXZlIiwgImRpc2FibGVkIn0KKyAgICAvLyAgIHBh
cnNlZDpib29sZWFuCisgICAgLy8gICBpbXBsaWNpdDpib29sZWFuCisgICAgLy8gICBzaG9ydGhh
bmQ6c3RyaW5nIChtYXkgYmUgZW1wdHkpCisgICAgLy8gc2hvcnRoYW5kVmFsdWVzOiBNYXAKKyAg
ICAvLyAgIHNob3J0aGFuZE5hbWUgLT4gc2hvcnRoYW5kVmFsdWUKKyAgICBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBw
cm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gZm91bmRTaG9ydGhhbmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5h
bWVzOworCisgICAgLy8gU291cmNlLWJhc2VkIHByb3BlcnRpZXMuCisgICAgaWYgKHByb3BlcnR5
RGF0YSkgeworICAgICAgICBmb3IgKFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IHByb3BlcnR5RGF0YS0+YmVnaW4oKTsgaXQgIT0gcHJvcGVydHlEYXRh
LT5lbmQoKTsgKytpdCkgeworICAgICAgICAgICAgY29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRh
JiBwcm9wZXJ0eUVudHJ5ID0gKml0OworICAgICAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHJv
cGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisKKyAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNvdXJjZVByb3BlcnR5
TmFtZXMuYWRkKG5hbWUpOworCisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1l
IiwgbmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHByb3Bl
cnR5RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3Jp
dHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOworICAgICAg
ICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOyAvLyBGSVhNRTog
bm8gZGlzYWJsZWQgcHJvcGVydGllcyBzdXBwb3J0IGZvciB0aGUgbW9tZW50CisgICAgICAgICAg
ICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigicGFyc2VkT2siLCBwcm9wZXJ0eUVudHJ5LnBhcnNlZE9r
KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0IiwgcHJvcGVy
dHlFbnRyeS5yYW5nZS5zdGFydCk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJl
bmRPZmZzZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLmVuZCk7CisgICAgICAgICAgICBpZiAocHJv
cGVydHlFbnRyeS5wYXJzZWRPaykgeworICAgICAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29s
ZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgc2hvcnRoYW5k
ID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUpOworICAgICAgICAgICAgICAgIHBy
b3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCBzaG9ydGhhbmQpOworICAgICAgICAg
ICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRh
aW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFk
ZChzaG9ydGhhbmQpOworICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmRWYWx1ZXMtPnNldFN0
cmluZyhzaG9ydGhhbmQsIHNob3J0aGFuZFZhbHVlKHN0eWxlLCBzaG9ydGhhbmQpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByb3Bl
cnR5LT5zZXRCb29sZWFuKCJpbXBsaWNpdCIsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPjo6aXRl
cmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZmlu
ZChuYW1lKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5hbWVUb1ByZXZp
b3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVJdC0+c2Vj
b25kLT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIpOyAvLyBib3RoICJkaXNhYmxlZCIg
YW5kICJhY3RpdmUiIHNoYWxsIHR1cm4gImluYWN0aXZlIgorICAgICAgICAgICAgICAgIGFjdGl2
ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsgLy8gaW5hY3RpdmUg
cHJvcGVydGllcyBkbyBub3QgcGFydGljaXBhdGUgaW4gc2hvcnRoYW5kcworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5LnNldChu
YW1lLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBTdHlsZS1iYXNlZCBw
cm9wZXJ0aWVzLgorICAgIGZvciAoaW50IGkgPSAwLCBzaXplID0gc3R5bGUtPmxlbmd0aCgpOyBp
IDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0cmluZyBuYW1lID0gc3R5bGUtPml0ZW0oaSk7Cisg
ICAgICAgIGlmIChzb3VyY2VQcm9wZXJ0eU5hbWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7Cisg
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaE9iamVjdChwcm9wZXJ0eSk7CisK
KyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9w
ZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKTsK
KyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJpb3JpdHkiLCBzdHlsZS0+Z2V0UHJvcGVy
dHlQcmlvcml0eSgibmFtZSIpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxp
Y2l0Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIHByb3BlcnR5
LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHRydWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3Ry
aW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKKyAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmlu
Zygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlz
RW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAg
ICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0
aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNo
b3J0aGFuZCkpOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgicHJv
cGVydGllcyIsIHByb3BlcnRpZXMpOworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRW
YWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOworfQorCisvL1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRp
ZXMoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbikKKy8veworLy8gICAgUmVm
UHRyPEluc3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworLy8gICAgZm9yIChEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb246Oml0ZXJhdG9yIGl0ID0gZGVj
bGFyYXRpb24tPmJlZ2luKCk7IGl0ICE9IGRlY2xhcmF0aW9uLT5lbmQoKTsgKytpdCkgeworLy8g
ICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0
OjpjcmVhdGUoKTsKKy8vICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJuYW1lIiwgaXQtPmZp
cnN0KTsKKy8vICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIGl0LT5zZWNvbmQu
Zmlyc3QpOworLy8gICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInByaW9yaXR5IiwgaXQtPnNl
Y29uZC5zZWNvbmQpOworLy8gICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHku
cmVsZWFzZSgpKTsKKy8vICAgIH0KKy8vICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsK
Ky8vfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChEb2N1bWVudCogb3duZXJEb2N1bWVudCwgQ1NTU3R5bGVT
aGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGxvbmcgaWQgPSBjc3NNb2RlbCgpLT5i
aW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsKKyAgICByZXN1bHQtPnNldE51bWJlcigiaWQiLCBp
ZCk7CisgICAgcmVzdWx0LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2Fi
bGVkKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigp
KTsKKyAgICByZXN1bHQtPnNldFN0cmluZygidGl0bGUiLCBzdHlsZVNoZWV0LT50aXRsZSgpKTsK
KyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBjc3NNb2RlbCgpLT5zdHlsZVNo
ZWV0VGV4dChpZCwgJnRleHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygidGV4dCIsIHRleHQpOworICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVs
ZW1lbnRJZCIsIGRvbUFnZW50KCktPmlkRm9yRG9jdW1lbnROb2RlKHN0eWxlU2hlZXQtPmRvY3Vt
ZW50KCkpKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNzc1J1bGVzID0gSW5zcGVjdG9y
QXJyYXk6OmNyZWF0ZSgpOworICAgIFBhc3NSZWZQdHI8Q1NTUnVsZUxpc3Q+IGNzc1J1bGVMaXN0
ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0cnVlKTsKKyAgICBpZiAoY3NzUnVs
ZUxpc3QpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNzc1J1bGVMaXN0LT5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBDU1NSdWxlKiBydWxlID0gY3NzUnVsZUxpc3Qt
Pml0ZW0oaSk7CisgICAgICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAg
ICAgICAgICBjc3NSdWxlcy0+cHVzaE9iamVjdChidWlsZE9iamVjdEZvclJ1bGUob3duZXJEb2N1
bWVudCwgc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSkpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXN1bHQtPnNldEFycmF5KCJjc3NSdWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7
CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBv
d25lckRvY3VtZW50LCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgREVGSU5FX1NUQVRJQ19M
T0NBTChTdHJpbmcsIHVzZXJBZ2VudCwgKCJ1c2VyLWFnZW50IikpOworICAgIERFRklORV9TVEFU
SUNfTE9DQUwoU3RyaW5nLCB1c2VyLCAoInVzZXIiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGluc3BlY3RvciwgKCJpbnNwZWN0b3IiKSk7CisgICAgQ1NTU3R5bGVTaGVldCog
cGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKworICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgp
KTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7Cisg
ICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOwor
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIGRvbUFnZW50KCktPmRvY3VtZW50
VVJMU3RyaW5nKG93bmVyRG9jdW1lbnQpKTsKKyAgICBpZiAocGFyZW50U3R5bGVTaGVldCkgewor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUt
PnNldFN0cmluZygiaHJlZiIsIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgICAgIHBh
cmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0TnVtYmVyKCJpZCIsIGNzc01vZGVsKCktPmJpbmRTdHls
ZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRPYmplY3QoInBh
cmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUucmVsZWFzZSgpKTsKKyAgICB9
CisgICAgU3RyaW5nIG9yaWdpbigiIik7CisgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQgJiYgIXBh
cmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKS5p
c0VtcHR5KCkpCisgICAgICAgIG9yaWdpbiA9IHVzZXJBZ2VudDsKKyAgICBlbHNlIGlmIChwYXJl
bnRTdHlsZVNoZWV0ICYmIHBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0
eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1lbnQiKQorICAgICAg
ICBvcmlnaW4gPSB1c2VyOworICAgIGVsc2UgeworICAgICAgICBQYXJzZWRTdHlsZVNoZWV0KiBw
YXJzZWRTdHlsZVNoZWV0ID0gY3NzTW9kZWwoKS0+aW5zcGVjdG9yU3R5bGVTaGVldChvd25lckRv
Y3VtZW50LCBmYWxzZSk7CisgICAgICAgIGlmIChwYXJzZWRTdHlsZVNoZWV0ICYmIHJ1bGUtPnBh
cmVudFN0eWxlU2hlZXQoKSA9PSBwYXJzZWRTdHlsZVNoZWV0LT5jc3NTdHlsZVNoZWV0KCkpCisg
ICAgICAgICAgICBvcmlnaW4gPSBpbnNwZWN0b3I7CisgICAgfQorICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJvcmlnaW4iLCBvcmlnaW4pOworCisgICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRzIG9u
bHkuCisgICAgYm9vbCBiaW5kID0gb3JpZ2luICE9IHVzZXJBZ2VudCAmJiBvcmlnaW4gIT0gdXNl
cjsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVT
b3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBjc3NNb2RlbCgpLT5nZXRT
dHlsZVNvdXJjZURhdGEocnVsZS0+c3R5bGUoKSwgJnNvdXJjZURhdGEpOworICAgIGlmIChzdWNj
ZXNzKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvclN0YXJ0T2Zmc2V0Iiwg
c291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpOworICAgICAgICByZXN1bHQtPnNl
dE51bWJlcigic2VsZWN0b3JFbmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5n
ZS5lbmQpOworICAgIH0KKyAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBidWlsZE9iamVj
dEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQsIHN1Y2Nlc3MgPyAmc291cmNlRGF0YSA6IDAp
KTsKKworICAgIGlmIChiaW5kKQorICAgICAgICByZXN1bHQtPnNldE51bWJlcigiaWQiLCBjc3NN
b2RlbCgpLT5iaW5kUnVsZShydWxlKSk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50Ojpsb25naGFuZFByb3BlcnRpZXMo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVy
dHkpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAgICBIYXNoU2V0PFN0cmlu
Zz4gZm91bmRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxl
LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBz
dHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJvcGVydGllcy5jb250YWlucyhpbmRp
dmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFs
UHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAg
cHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICB9CisKKyAgICByZXR1
cm4gcHJvcGVydGllczsKK30KKworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9ydGhhbmRW
YWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQ
cm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShz
aG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAv
LyBTb21lIHNob3J0aGFuZHMgKGxpa2UgYm9yZGVyKSByZXR1cm4gYSBudWxsIHZhbHVlLCBzbyBj
b21wdXRlIGEgc2hvcnRoYW5kIHZhbHVlLgorICAgICAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
d2hlbiBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgyMyBpcyBmaXhl
ZC4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0o
aSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1
YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChpbmRpdmlkdWFs
UHJvcGVydHkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgU3RyaW5n
IGluZGl2aWR1YWxWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKGluZGl2aWR1YWxQcm9w
ZXJ0eSk7CisgICAgICAgICAgICBpZiAoaW5kaXZpZHVhbFZhbHVlID09ICJpbml0aWFsIikKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSkK
KyAgICAgICAgICAgICAgICB2YWx1ZS5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAgIHZhbHVlLmFw
cGVuZChpbmRpdmlkdWFsVmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1
ZTsKK30KKworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9ydGhhbmRQcmlvcml0eShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkK
K3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShzaG9y
dGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5LmlzRW1wdHkoKSkgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAg
ICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3BlcnR5KSAh
PSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkoaW5kaXZpZHVhbFByb3Bl
cnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBw
cmlvcml0eTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0Fn
ZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyM2MzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0wLDAgKzEsMTI0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICog
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NBZ2VudF9oCisjZGVmaW5lIEluc3BlY3Rv
ckNTU0FnZW50X2gKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTTW9kZWwuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9EZXF1
ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29udGFpbmVyTm9kZTsKK2Ns
YXNzIENTU1J1bGU7CitjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CitjbGFzcyBDU1NTdHlsZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRWxl
bWVudDsKK2NsYXNzIEV2ZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTTW9kZWw7CitjbGFzcyBJbnNw
ZWN0b3JET01BZ2VudDsKK2NsYXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgTWF0Y2hKb2I7
CitjbGFzcyBOYW1lTm9kZU1hcDsKK2NsYXNzIE5vZGU7CitjbGFzcyBQYWdlOworCisjaWYgRU5B
QkxFKElOU1BFQ1RPUikKKworY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgOiBwdWJsaWMgUmVmQ291
bnRlZDxJbnNwZWN0b3JDU1NBZ2VudD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvckNTU0FnZW50PiBjcmVhdGUoSW5zcGVjdG9yQ1NTTW9kZWwqIGNzc01vZGVsLCBJ
bnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkK
KyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yQ1NTQWdlbnQoY3Nz
TW9kZWwsIGZyb250ZW5kLCBkb21BZ2VudCkpOworICAgIH0KKworICAgIEluc3BlY3RvckNTU0Fn
ZW50KEluc3BlY3RvckNTU01vZGVsKiBjc3NNb2RlbCwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpOworICAgIH5JbnNwZWN0b3JDU1NBZ2Vu
dCgpOworCisgICAgdm9pZCByZXNldCgpOworCisgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0
aGUgZnJvbnRlbmQgZm9yIENTUyBzdHlsZXMgaW5zcGVjdGlvbi4KKyAgICB2b2lkIGdldE1hdGNo
ZWRSdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxl
cyk7CisgICAgdm9pZCBnZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvckFycmF5PiogcnVsZXMpOworICAgIHZvaWQgZ2V0QXR0cmlidXRlU3R5
bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7
CisgICAgdm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+KiBzdHlsZSk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIo
bG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKKyAgICB2b2lkIGdl
dEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+KiByZXN1bHQpOworCisgICAgdm9pZCBnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHN0eWxlcyk7IC8vIGFycmF5IG9mOiBzdHlsZVNoZWV0SWQKKworICAgIHZvaWQgZ2V0
U3R5bGVTaGVldDIobG9uZyBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJl
c3VsdCk7CisgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIobG9uZyBzdHlsZVNoZWV0SWQsIGNv
bnN0IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCBzZXRTdHlsZVRleHQyKGxvbmcgc3R5bGVJZCwg
Y29uc3QgU3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICB2b2lkIHRvZ2dsZVByb3BlcnR5Mihsb25nIHN0eWxl
SWQsIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBib29sIGRpc2FibGVkKTsKKyAgICB2b2lkIHNldFJ1
bGVTZWxlY3RvcjIobG9uZyBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBhZGRSdWxlMihsb25nIGNvbnRleHRO
b2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJl
c3VsdCk7CisgICAgdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJlc3VsdCk7CisKK3ByaXZhdGU6CisgICAgSW5zcGVjdG9yQ1NTTW9kZWwqIGNz
c01vZGVsKCkgY29uc3QgeyByZXR1cm4gbV9jc3NNb2RlbDsgfQorICAgIEluc3BlY3RvckRPTUFn
ZW50KiBkb21BZ2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tQWdlbnQ7IH0KKworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qLCBib29sIGJpbmQsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiBzb3VyY2VEYXRh
ID0gMCk7CisgICAgdm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVy
dHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhKTsKKyAgICAvL1Bhc3NSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVydGllcyhEaXNhYmxlZFN0eWxl
RGVjbGFyYXRpb24qKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5
Rm9yRWxlbWVudEF0dHJpYnV0ZXMoRWxlbWVudCogZWxlbWVudCk7CisgICAgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvckNTU1J1bGVzKERvY3VtZW50KiBvd25lckRvY3Vt
ZW50LCBDU1NSdWxlTGlzdCopOworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJ1aWxk
QXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50KiBlbGVtZW50KTsKKyAgICBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCog
ZWxlbWVudCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9y
UnVsZShEb2N1bWVudCogb3duZXJEb2N1bWVudCwgQ1NTU3R5bGVSdWxlKik7CisgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChEb2N1bWVudCog
b3duZXJEb2N1bWVudCwgQ1NTU3R5bGVTaGVldCopOworICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdo
YW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhh
bmRQcm9wZXJ0eSk7CisgICAgU3RyaW5nIHNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBTdHJpbmcgc2hvcnRo
YW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5k
UHJvcGVydHkpOworICAgIEVsZW1lbnQqIGVsZW1lbnRGb3JJZChsb25nIG5vZGVJZCk7CisKKyAg
ICB2b2lkIGRpc2NhcmRCaW5kaW5ncygpOworCisgICAgSW5zcGVjdG9yQ1NTTW9kZWwqIG1fY3Nz
TW9kZWw7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgSW5zcGVjdG9y
RE9NQWdlbnQqIG1fZG9tQWdlbnQ7Cit9OworCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yQ1NTQWdlbnRfaCkKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU01vZGVsLmNwcCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU01vZGVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4yOGRmNThmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ1NTTW9kZWwuY3BwCkBAIC0wLDAgKzEsNDE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNTU01vZGVsLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiU3R5
bGVTaGVldExpc3QuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworLy8gc3RhdGljCitFbGVtZW50KiBJbnNwZWN0b3JDU1NNb2RlbDo6aW5saW5lU3R5
bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIGlmICghc3R5bGUg
fHwgIXN0eWxlLT5pc011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpCisgICAgICAgIHJldHVybiAw
OworICAgIE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bio+KHN0eWxlKS0+bm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+aXNTdHlsZWRFbGVt
ZW50KCkgfHwgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpLT5nZXRJbmxpbmVTdHls
ZURlY2woKSAhPSBzdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihub2RlKTsKK30KKworLy8gc3RhdGljCitDU1NTdHlsZVJ1bGUqIEluc3Bl
Y3RvckNTU01vZGVsOjphc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sKKyAg
ICBpZiAoIXN0eWxlQmFzZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Q1NTUnVsZSogcnVsZSA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZUJhc2UpOworICAgIGlm
IChydWxlLT50eXBlKCkgIT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOworfQorCitJbnNw
ZWN0b3JDU1NNb2RlbDo6SW5zcGVjdG9yQ1NTTW9kZWwoKQorICAgIDogbV9sYXN0U3R5bGVTaGVl
dElkKDEpCisgICAgLCBtX2xhc3RSdWxlSWQoMSkKKyAgICAsIG1fbGFzdFN0eWxlSWQoMSkKK3sK
K30KKworYm9vbCBJbnNwZWN0b3JDU1NNb2RlbDo6c3R5bGVTaGVldFRleHQobG9uZyBzdHlsZVNo
ZWV0SWQsIFN0cmluZyogcmVzdWx0KQoreworICAgIFBhcnNlZFN0eWxlU2hlZXQqIHBhcnNlZFN0
eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBpZiAoIXBhcnNl
ZFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIENTU1N0eWxlU2hlZXQq
IHN0eWxlU2hlZXQgPSBwYXJzZWRTdHlsZVNoZWV0LT5jc3NTdHlsZVNoZWV0KCk7CisgICAgaWYg
KHBhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkgeworICAgICAgICAqcmVzdWx0ID0gcGFyc2Vk
U3R5bGVTaGVldC0+dGV4dCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBT
dHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBpbmxpbmVTdHlsZVNoZWV0VGV4dChzdHls
ZVNoZWV0LCAmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICBzdWNjZXNzID0gcmVz
b3VyY2VTdHlsZVNoZWV0VGV4dChzdHlsZVNoZWV0LCAmdGV4dCk7CisKKyAgICBpZiAoc3VjY2Vz
cykgeworICAgICAgICBwYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOworICAgICAgICAq
cmVzdWx0ID0gdGV4dDsKKyAgICB9CisgICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgSW5z
cGVjdG9yQ1NTTW9kZWw6OnJlc291cmNlU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgcmV0dXJuIEluc3BlY3RvclV0aWxpdGll
czo6cmVzb3VyY2VDb250ZW50Rm9yVVJMKHN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCksIHJlc3VsdCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yQ1NTTW9kZWw6Omlu
bGluZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIFN0cmluZyogcmVz
dWx0KQoreworICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwor
ICAgIGlmICghb3duZXJOb2RlIHx8IG93bmVyTm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVN
RU5UX05PREUgfHwgbV9zdHlsZVNoZWV0VG9JZC5maW5kKHN0eWxlU2hlZXQpID09IG1fc3R5bGVT
aGVldFRvSWQuZW5kKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFbGVtZW50KiBvd25l
ckVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAob3du
ZXJFbGVtZW50LT50YWdOYW1lKCkubG93ZXIoKSAhPSAic3R5bGUiKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgKnJlc3VsdCA9IG93bmVyRWxlbWVudC0+aW5uZXJUZXh0KCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKKy8vIEFsbCByYW5nZXMgYXJlOiBbc3RhcnQ7IGVuZCkgKHN0YXJ0IC0g
aW5jbHVzaXZlLCBlbmQgLSBleGNsdXNpdmUpLgorYm9vbCBJbnNwZWN0b3JDU1NNb2RlbDo6Z2V0
U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1NTU3R5
bGVTb3VyY2VEYXRhPiogcmVzdWx0KQoreworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpbmxpbmVTdHlsZUVsZW1lbnQoc3R5
bGUpOworICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIC8vIElubGluZTogc3R5bGU9Ii4uLiIu
CisgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0YSA9IENT
U1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGdldFN0
eWxlQXR0cmlidXRlUmFuZ2VzKGVsZW1lbnQsICZzdHlsZVNvdXJjZURhdGEpOworICAgICAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICpyZXN1bHQg
PSBzdHlsZVNvdXJjZURhdGE7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBJbnNwZWN0b3JVdGlsaXRpZXM6OnBhcmVudFN0eWxl
U2hlZXQoc3R5bGUpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4qIHJhbmdlc1ZlY3Rv
ciA9IDA7CisgICAgbG9uZyBzdHlsZVNoZWV0SWQgPSBiaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0
KTsKKyAgICBQYXJzZWRTdHlsZVNoZWV0KiBwYXJzZWRTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZv
cklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYgKCFwYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VE
YXRhKCkpIHsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IHN0
eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnRleHQpOworICAgICAgICBpZiAoc3VjY2Vzcykg
eworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NT
dHlsZVNoZWV0OjpjcmVhdGUoc3R5bGVTaGVldC0+b3duZXJOb2RlKCkpOworICAgICAgICAgICAg
Q1NTUGFyc2VyIHA7CisgICAgICAgICAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7
CisgICAgICAgICAgICBwLnBhcnNlU2hlZXQobmV3U3R5bGVTaGVldC5nZXQoKSwgdGV4dCwgMCwg
JnJ1bGVSYW5nZU1hcCk7CisgICAgICAgICAgICByYW5nZXNWZWN0b3IgPSBuZXcgVmVjdG9yPFJl
ZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID47CisgICAgICAgICAgICBleHRyYWN0UmFuZ2VzKG5l
d1N0eWxlU2hlZXQuZ2V0KCksIHJ1bGVSYW5nZU1hcCwgcmFuZ2VzVmVjdG9yKTsKKyAgICAgICAg
ICAgIHBhcnNlZFN0eWxlU2hlZXQtPnNldFNvdXJjZURhdGEocmFuZ2VzVmVjdG9yKTsKKyAgICAg
ICAgfQorICAgIH0gZWxzZQorICAgICAgICByYW5nZXNWZWN0b3IgPSBwYXJzZWRTdHlsZVNoZWV0
LT5zb3VyY2VEYXRhKCk7CisKKyAgICBpZiAoIXJhbmdlc1ZlY3RvcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdW5zaWduZWQgcnVsZUluZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwLCBsZW5ndGggPSBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7
CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGFzQ1NTU3R5bGVSdWxlKHN0eWxlU2hlZXQt
Pml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKHJ1bGUtPnN0eWxlKCkgPT0gc3R5bGUpIHsKKyAgICAgICAgICAgIEFTU0VSVChy
dWxlSW5kZXggPCByYW5nZXNWZWN0b3ItPnNpemUoKSk7CisgICAgICAgICAgICAqcmVzdWx0ID0g
cmFuZ2VzVmVjdG9yLT5hdChydWxlSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgcnVsZUluZGV4Kys7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBJbnNwZWN0b3JDU1NNb2RlbDo6ZXh0cmFjdFJhbmdlcyhDU1NTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0LCBjb25zdCBTdHlsZVJ1bGVSYW5nZU1hcCYgcnVsZVJhbmdlTWFwLCBWZWN0
b3I8UmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gPiogcmFuZ2VzVmVjdG9yKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gYXNDU1NTdHlsZVJ1bGUo
c3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlmICghcnVsZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBTdHlsZVJ1bGVSYW5nZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBy
dWxlUmFuZ2VNYXAuZmluZChydWxlKTsKKyAgICAgICAgaWYgKGl0ICE9IHJ1bGVSYW5nZU1hcC5l
bmQoKSkKKyAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBwZW5kKGl0LT5zZWNvbmQpOworICAg
IH0KK30KKworYm9vbCBJbnNwZWN0b3JDU1NNb2RlbDo6Z2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMo
Tm9kZSogbm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkKK3sKKyAgICBp
ZiAoIW5vZGUgfHwgIW5vZGUtPmlzU3R5bGVkRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBTdHJpbmcgc3R5bGVUZXh0ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CisKKyAgICAoKnJlc3VsdCktPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0ID0gMDsKKyAgICAoKnJlc3VsdCktPnNlbGVjdG9yTGlzdFJhbmdlLmVu
ZCA9IDA7CisgICAgaWYgKHN0eWxlVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgKCpyZXN1bHQp
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCA9IDA7CisgICAgICAgICgqcmVzdWx0KS0+c3R5bGVCb2R5
UmFuZ2UuZW5kID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRy
PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CisgICAgQ1NTUGFyc2VyIHA7CisgICAgcC5wYXJz
ZURlY2xhcmF0aW9uKHRlbXBEZWNsYXJhdGlvbi5nZXQoKSwgc3R5bGVUZXh0LCByZXN1bHQtPmdl
dCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JDU1NNb2RlbDo6c3R5
bGVUZXh0KGxvbmcgc3R5bGVJZCwgU3RyaW5nKiBkZWNsYXJhdGlvblRleHQpCit7CisgICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICgh
c3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBp
bmxpbmVTdHlsZUVsZW1lbnQoc3R5bGUpOworICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICpk
ZWNsYXJhdGlvblRleHQgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBJ
bnNwZWN0b3JVdGlsaXRpZXM6OnBhcmVudFN0eWxlU2hlZXQoc3R5bGUpOworICAgIGlmICghc3R5
bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFN0cmluZyB0ZXh0OworICAgIGJv
b2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KGJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpLCAm
dGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBS
ZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJj
ZURhdGE6OmNyZWF0ZSgpOworICAgIHN1Y2Nlc3MgPSBnZXRTdHlsZVNvdXJjZURhdGEoc3R5bGUs
ICZzdHlsZVNvdXJjZURhdGEpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIEFTU0VSVChzdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0IDwg
dGV4dC5sZW5ndGgoKSk7CisgICAgQVNTRVJUKHN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFu
Z2UuZW5kIDwgdGV4dC5sZW5ndGgoKSk7CisgICAgKmRlY2xhcmF0aW9uVGV4dCA9IHRleHQuc3Vi
c3RyaW5nKHN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQsIHN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kIC0gc3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5n
ZS5zdGFydCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NTTW9kZWw6
OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgbG9uZyBp
ZCA9IG1fc3R5bGVTaGVldFRvSWQuZ2V0KHN0eWxlU2hlZXQpOworICAgIGlmICghaWQpIHsKKyAg
ICAgICAgaWQgPSBtX2xhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAgbV9pZFRvUGFyc2VkU3R5
bGVTaGVldC5zZXQoaWQsIFBhcnNlZFN0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0KSk7Cisg
ICAgICAgIG1fc3R5bGVTaGVldFRvSWQuc2V0KHN0eWxlU2hlZXQsIGlkKTsKKyAgICB9CisgICAg
cmV0dXJuIGlkOworfQorCit2b2lkIEluc3BlY3RvckNTU01vZGVsOjpkcm9wUnVsZXMobG9uZyBz
dHlsZVNoZWV0SWQpCit7CisgICAgaWYgKCFzdHlsZVNoZWV0SWQpCisgICAgICAgIHJldHVybjsK
KworICAgIFBhcnNlZFN0eWxlU2hlZXQqIHBhcnNlZFN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9y
SWQoc3R5bGVTaGVldElkKTsKKyAgICBBU1NFUlQocGFyc2VkU3R5bGVTaGVldCk7CisKKyAgICBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyc2VkU3R5bGVTaGVldC0+Y3NzU3R5bGVTaGVl
dCgpOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZXMgPSBzdHlsZVNoZWV0LT5jc3NSdWxl
cyh0cnVlKTsKKyAgICBpZiAoIXJ1bGVzKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChpbnQg
aSA9IDAsIHNpemUgPSBydWxlcy0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHVu
YmluZFJ1bGUoYXNDU1NTdHlsZVJ1bGUocnVsZXMtPml0ZW0oaSkpKTsKK30KKworbG9uZyBJbnNw
ZWN0b3JDU1NNb2RlbDo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQorewor
ICAgIGxvbmcgaWQgPSBtX3N0eWxlVG9JZC5nZXQoc3R5bGUpOworICAgIGlmICghaWQpIHsKKyAg
ICAgICAgaWQgPSBtX2xhc3RTdHlsZUlkKys7CisgICAgICAgIG1faWRUb1N0eWxlLnNldChpZCwg
c3R5bGUpOworICAgICAgICBtX3N0eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKKyAgICB9CisgICAg
cmV0dXJuIGlkOworfQorCit2b2lkIEluc3BlY3RvckNTU01vZGVsOjp1bmJpbmRTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1
cm47CisKKyAgICBsb25nIGlkID0gbV9zdHlsZVRvSWQuZ2V0KHN0eWxlKTsKKyAgICBpZiAoIWlk
KQorICAgICAgICByZXR1cm47CisgICAgbV9pZFRvU3R5bGUucmVtb3ZlKGlkKTsKKyAgICBtX3N0
eWxlVG9JZC5yZW1vdmUoc3R5bGUpOworfQorCitsb25nIEluc3BlY3RvckNTU01vZGVsOjpiaW5k
UnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgbG9uZyBpZCA9IG1fcnVsZVRvSWQuZ2V0
KHJ1bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBtX2xhc3RSdWxlSWQrKzsKKyAg
ICAgICAgbV9pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOworICAgICAgICBtX3J1bGVUb0lkLnNldChy
dWxlLCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NN
b2RlbDo6dW5iaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgaWYgKCFydWxlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBsb25nIGlkID0gbV9ydWxlVG9JZC5nZXQocnVsZSk7Cisg
ICAgaWYgKCFpZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1faWRUb1J1bGUucmVtb3ZlKGlkKTsK
KyAgICBtX3J1bGVUb0lkLnJlbW92ZShydWxlKTsKKyAgICB1bmJpbmRTdHlsZShydWxlLT5zdHls
ZSgpKTsKK30KKworUGFyc2VkU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTTW9kZWw6OnN0eWxlU2hl
ZXRGb3JJZChsb25nIHN0eWxlU2hlZXRJZCkKK3sKKyAgICBNb2RlbElkVG9QYXJzZWRTdHlsZVNo
ZWV0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb1BhcnNlZFN0eWxlU2hlZXQuZmluZChzdHlsZVNo
ZWV0SWQpOworICAgIHJldHVybiBpdCA9PSBtX2lkVG9QYXJzZWRTdHlsZVNoZWV0LmVuZCgpID8g
MCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yQ1NTTW9k
ZWw6OnJ1bGVGb3JJZChsb25nIHJ1bGVJZCkKK3sKKyAgICBNb2RlbElkVG9SdWxlTWFwOjppdGVy
YXRvciBpdCA9IG1faWRUb1J1bGUuZmluZChydWxlSWQpOworICAgIHJldHVybiBpdCA9PSBtX2lk
VG9SdWxlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK0NTU1N0eWxlRGVjbGFy
YXRpb24qIEluc3BlY3RvckNTU01vZGVsOjpzdHlsZUZvcklkKGxvbmcgc3R5bGVJZCkKK3sKKyAg
ICBNb2RlbElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9TdHlsZS5maW5kKHN0eWxl
SWQpOworICAgIHJldHVybiBpdCA9PSBtX2lkVG9TdHlsZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25k
LmdldCgpOworfQorCit2b2lkIEluc3BlY3RvckNTU01vZGVsOjpyZW1vdmVEb2N1bWVudChEb2N1
bWVudCogZG9jKQoreworICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFw
LnJlbW92ZShkb2MpOworfQorCitQYXJzZWRTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NNb2RlbDo6
aW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogb3duZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJ
ZkFic2VudCkKK3sKKyAgICBNb2RlbERvY3VtZW50VG9QYXJzZWRTdHlsZVNoZWV0TWFwOjppdGVy
YXRvciBpdCA9IG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwLmZpbmQob3du
ZXJEb2N1bWVudCk7CisgICAgaWYgKGl0ICE9IG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JTdHls
ZVNoZWV0TWFwLmVuZCgpKQorICAgICAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKKyAgICBp
ZiAoIWNyZWF0ZUlmQWJzZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0gb3duZXJEb2N1bWVu
dC0+Y3JlYXRlRWxlbWVudCgic3R5bGUiLCBlYyk7CisgICAgaWYgKCFlYykKKyAgICAgICAgc3R5
bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3MiLCBlYyk7CisgICAgaWYg
KCFlYykKKyAgICAgICAgb3duZXJEb2N1bWVudC0+aGVhZCgpLT5hcHBlbmRDaGlsZChzdHlsZUVs
ZW1lbnQsIGVjKTsKKyAgICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIFN0eWxlU2hl
ZXRMaXN0KiBzdHlsZVNoZWV0cyA9IG93bmVyRG9jdW1lbnQtPnN0eWxlU2hlZXRzKCk7CisgICAg
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRzLT5pdGVtKHN0eWxlU2hlZXRzLT5s
ZW5ndGgoKSAtIDEpOworICAgIGlmICghc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIENTU1N0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQg
PSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisgICAgUmVmUHRyPFBh
cnNlZFN0eWxlU2hlZXQ+IHBhcnNlZFN0eWxlU2hlZXQgPSBQYXJzZWRTdHlsZVNoZWV0OjpjcmVh
dGUoaW5zcGVjdG9yU3R5bGVTaGVldCk7CisgICAgcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4dCgi
Iik7CisgICAgbV9kb2N1bWVudE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAuc2V0KG93bmVy
RG9jdW1lbnQsIHBhcnNlZFN0eWxlU2hlZXQpOworICAgIHJldHVybiBwYXJzZWRTdHlsZVNoZWV0
LmdldCgpOworfQorCit2b2lkIEluc3BlY3RvckNTU01vZGVsOjpkaWRTdHlsZVNoZWV0VGV4dENo
YW5nZShsb25nIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0LCBib29sIHNob3Vs
ZERyb3BSdWxlcykKK3sKKyAgICBpZiAoc2hvdWxkRHJvcFJ1bGVzKQorICAgICAgICBkcm9wUnVs
ZXMoc3R5bGVTaGVldElkKTsKKyAgICBQYXJzZWRTdHlsZVNoZWV0KiBwYXJzZWRTdHlsZVNoZWV0
ID0gc3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgcGFyc2VkU3R5bGVTaGVldC0+
c2V0VGV4dChuZXdUZXh0KTsKKyAgICBwYXJzZWRTdHlsZVNoZWV0LT5zZXRTb3VyY2VEYXRhKDAp
OworfQorCit2b2lkIEluc3BlY3RvckNTU01vZGVsOjpkaWRTdHlsZVRleHRDaGFuZ2UobG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcmIG5ld1RleHQpCit7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUgPSBzdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmIChpbmxpbmVTdHlsZUVsZW1lbnQoc3R5bGUpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gSW5zcGVjdG9y
VXRpbGl0aWVzOjpwYXJlbnRTdHlsZVNoZWV0KHN0eWxlKTsKKyAgICBTdHJpbmcgcGF0Y2hlZFRl
eHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKHBh
cmVudFN0eWxlU2hlZXQsIHN0eWxlSWQsIG5ld1RleHQsICZwYXRjaGVkVGV4dCk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisgICAgZGlkU3R5bGVTaGVldFRleHRDaGFuZ2Uo
YmluZFN0eWxlU2hlZXQocGFyZW50U3R5bGVTaGVldCksIHBhdGNoZWRUZXh0LCBmYWxzZSk7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yQ1NTTW9kZWw6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHls
ZShDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYg
bmV3U3R5bGVUZXh0LCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBsb25nIHN0eWxlU2hlZXRJZCA9
IGJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgIFN0cmluZyB0ZXh0OworICAgIGJvb2wg
c3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KHN0eWxlU2hlZXRJZCwgJnRleHQpOworICAgIGlmICgh
c3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1N0eWxlU291
cmNlRGF0YT4gc3R5bGVSYW5nZXMgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAg
IHN1Y2Nlc3MgPSBnZXRTdHlsZVNvdXJjZURhdGEoc3R5bGVGb3JJZChzdHlsZUlkKSwgJnN0eWxl
UmFuZ2VzKTsKKyAgICBBU1NFUlQoc3VjY2Vzcyk7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0ID0g
c3R5bGVSYW5nZXMtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OworICAgIHVuc2lnbmVkIGJvZHlFbmQg
PSBzdHlsZVJhbmdlcy0+c3R5bGVCb2R5UmFuZ2UuZW5kOworICAgIEFTU0VSVChib2R5U3RhcnQg
PCBib2R5RW5kKTsKKyAgICBBU1NFUlQoYm9keUVuZCA8PSB0ZXh0Lmxlbmd0aCgpKTsgLy8gYm9k
eUVuZCBpcyBleGNsdXNpdmUKKworICAgIFN0cmluZyBwYXRjaGVkVGV4dCA9IHRleHQuc3Vic3Ry
aW5nKDAsIGJvZHlTdGFydCk7CisgICAgcGF0Y2hlZFRleHQgKz0gbmV3U3R5bGVUZXh0OworICAg
IHBhdGNoZWRUZXh0ICs9IHRleHQuc3Vic3RyaW5nKGJvZHlFbmQsIHRleHQubGVuZ3RoKCkpOwor
ICAgICpyZXN1bHQgPSBwYXRjaGVkVGV4dDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU01vZGVsLmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NNb2RlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjUyNmZhNWQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NNb2RlbC5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
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
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NNb2RlbF9o
CisjZGVmaW5lIEluc3BlY3RvckNTU01vZGVsX2gKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisK
KworI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNl
RGF0YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdI
YXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlv
bjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEVsZW1lbnQ7
CitjbGFzcyBOb2RlOworY2xhc3MgU3R5bGVCYXNlOworCitjbGFzcyBQYXJzZWRTdHlsZVNoZWV0
IDogcHVibGljIFJlZkNvdW50ZWQ8UGFyc2VkU3R5bGVTaGVldD4geworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFBhcnNlZFN0eWxlU2hlZXQ+IGNyZWF0ZShDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQYXJzZWRTdHls
ZVNoZWV0KHN0eWxlU2hlZXQpKTsKKyAgICB9CisgICAgc3RhdGljIEVsZW1lbnQqIGlubGluZVN0
eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICBQYXJzZWRTdHlsZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCisgICAgICAgIDogbV9zdHlsZVNoZWV0KHN0eWxl
U2hlZXQpCisgICAgICAgICwgbV9oYXNUZXh0KGZhbHNlKQorICAgICAgICAsIG1faGFzU291cmNl
RGF0YShmYWxzZSkKKyAgICB7CisgICAgfQorCisgICAgQ1NTU3R5bGVTaGVldCogY3NzU3R5bGVT
aGVldCgpIHsgcmV0dXJuIG1fc3R5bGVTaGVldDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dCgp
IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
IHsgbV9oYXNUZXh0ID0gdHJ1ZTsgbV90ZXh0ID0gdGV4dDsgfQorICAgIGJvb2wgaGFzVGV4dCgp
IHsgcmV0dXJuIG1faGFzVGV4dDsgfQorICAgIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VE
YXRhPiA+KiBzb3VyY2VEYXRhKCkgeyByZXR1cm4gJm1fc291cmNlRGF0YTsgfQorICAgIHZvaWQg
c2V0U291cmNlRGF0YShWZWN0b3I8UmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gPiogc291cmNl
RGF0YSkgeyBtX2hhc1NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOyBpZiAoc291cmNlRGF0YSkgeyBt
X3NvdXJjZURhdGEgPSAqc291cmNlRGF0YTsgfSB9CisgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkg
eyByZXR1cm4gbV9oYXNTb3VyY2VEYXRhOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTU3R5bGVTaGVl
dCogbV9zdHlsZVNoZWV0OworICAgIFN0cmluZyBtX3RleHQ7CisgICAgYm9vbCBtX2hhc1RleHQ7
CisgICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4gbV9zb3VyY2VEYXRhOwor
ICAgIGJvb2wgbV9oYXNTb3VyY2VEYXRhOworfTsKKwordHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJl
ZlB0cjxQYXJzZWRTdHlsZVNoZWV0PiA+IE1vZGVsSWRUb1BhcnNlZFN0eWxlU2hlZXRNYXA7Cit0
eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIGxvbmc+IE1vZGVsU3R5bGVTaGVldFRvSWRN
YXA7Cit0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBNb2RlbElk
VG9SdWxlTWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlUnVsZSosIGxvbmc+IE1vZGVsUnVs
ZVRvSWRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRp
b24+ID4gTW9kZWxJZFRvU3R5bGVNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJh
dGlvbiosIGxvbmc+IE1vZGVsU3R5bGVUb0lkTWFwOwordHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxE
b2N1bWVudD4sIFJlZlB0cjxQYXJzZWRTdHlsZVNoZWV0PiA+IE1vZGVsRG9jdW1lbnRUb1BhcnNl
ZFN0eWxlU2hlZXRNYXA7CisKK2NsYXNzIEluc3BlY3RvckNTU01vZGVsIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqKTsKKyAgICBz
dGF0aWMgRWxlbWVudCogaW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qKTsK
KworICAgIEluc3BlY3RvckNTU01vZGVsKCk7CisgICAgYm9vbCBzdHlsZVNoZWV0VGV4dChsb25n
IHN0eWxlU2hlZXRJZCwgU3RyaW5nKiByZXN1bHQpOworICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNo
ZWV0VGV4dChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBTdHJpbmcqIHJlc3VsdCk7CisgICAg
Ym9vbCBpbmxpbmVTdHlsZVNoZWV0VGV4dChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBTdHJp
bmcqIHJlc3VsdCk7CisgICAgYm9vbCBnZXRTdHlsZVNvdXJjZURhdGEoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiByZXN1bHQpOworICAgIHZv
aWQgZXh0cmFjdFJhbmdlcyhDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBjb25zdCBTdHlsZVJ1
bGVSYW5nZU1hcCYgcnVsZVJhbmdlTWFwLCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU291cmNlRGF0
YT4gPiogcmFuZ2VzVmVjdG9yKTsKKyAgICBib29sIGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKE5v
ZGUqIG5vZGUsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+KiByZXN1bHQpOworICAgIC8vID8/
PworICAgIGJvb2wgc3R5bGVUZXh0KGxvbmcgc3R5bGVJZCwgU3RyaW5nKiBkZWNsYXJhdGlvblRl
eHQpOworCisgICAgbG9uZyBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgbG9u
ZyBiaW5kUnVsZShDU1NTdHlsZVJ1bGUqKTsKKyAgICB2b2lkIHVuYmluZFJ1bGUoQ1NTU3R5bGVS
dWxlKik7CisgICAgdm9pZCBkcm9wUnVsZXMobG9uZyBzdHlsZVNoZWV0SWQpOworICAgIGxvbmcg
YmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHVuYmluZFN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qKTsKKworICAgIHZvaWQgZGlkU3R5bGVTaGVldFRleHRDaGFuZ2Uo
bG9uZyBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgbmV3VGV4dCwgYm9vbCBzaG91bGREcm9w
UnVsZXMgPSB0cnVlKTsKKyAgICB2b2lkIGRpZFN0eWxlVGV4dENoYW5nZShsb25nIHN0eWxlSWQs
IGNvbnN0IFN0cmluZyYgbmV3VGV4dCk7CisgICAgdm9pZCByZW1vdmVEb2N1bWVudChEb2N1bWVu
dCopOworICAgIFBhcnNlZFN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQoRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpOworCisgICAgUGFyc2VkU3R5bGVT
aGVldCogc3R5bGVTaGVldEZvcklkKGxvbmcgc3R5bGVTaGVldElkKTsKKyAgICBDU1NTdHlsZVJ1
bGUqIHJ1bGVGb3JJZChsb25nIHJ1bGVJZCk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGVGb3JJZChsb25nIHN0eWxlSWQpOworCitwcml2YXRlOgorICAgIGJvb2wgc3R5bGVTaGVldFRl
eHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlU2hlZXQqLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJpbmcqIHJlc3VsdCk7CisKKyAgICBNb2RlbElkVG9QYXJz
ZWRTdHlsZVNoZWV0TWFwIG1faWRUb1BhcnNlZFN0eWxlU2hlZXQ7CisgICAgTW9kZWxTdHlsZVNo
ZWV0VG9JZE1hcCBtX3N0eWxlU2hlZXRUb0lkOworICAgIE1vZGVsSWRUb1J1bGVNYXAgbV9pZFRv
UnVsZTsKKyAgICBNb2RlbFJ1bGVUb0lkTWFwIG1fcnVsZVRvSWQ7CisgICAgTW9kZWxJZFRvU3R5
bGVNYXAgbV9pZFRvU3R5bGU7CisgICAgTW9kZWxTdHlsZVRvSWRNYXAgbV9zdHlsZVRvSWQ7Cisg
ICAgTW9kZWxEb2N1bWVudFRvUGFyc2VkU3R5bGVTaGVldE1hcCBtX2RvY3VtZW50Tm9kZVRvSW5z
cGVjdG9yU3R5bGVTaGVldE1hcDsKKworICAgIGxvbmcgbV9sYXN0U3R5bGVTaGVldElkOworICAg
IGxvbmcgbV9sYXN0UnVsZUlkOworICAgIGxvbmcgbV9sYXN0U3R5bGVJZDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yQ1NTTW9kZWxfaCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAKaW5kZXggNzY5ZWFkNC4uNDA0MGU4YSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTU4LDYgKzU4LDggQEAKICNpbmNsdWRl
ICJJbmplY3RlZFNjcmlwdEhvc3QuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JCYWNrZW5kLmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0
b3JDU1NBZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNTU01vZGVsLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ1NTU3RvcmUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnQuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgpAQCAtMTYwLDYgKzE2Miw3IEBAIEluc3BlY3RvckNv
bnRyb2xsZXI6Okluc3BlY3RvckNvbnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50
KiBjbGllbnQpCiAgICAgOiBtX2luc3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNs
aWVudCkKICAgICAsIG1fb3BlbmluZ0Zyb250ZW5kKGZhbHNlKQorICAgICwgbV9jc3NNb2RlbChu
ZXcgSW5zcGVjdG9yQ1NTTW9kZWwoKSkKICAgICAsIG1fY3NzU3RvcmUobmV3IEluc3BlY3RvckNT
U1N0b3JlKHRoaXMpKQogICAgICwgbV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQogICAg
ICwgbV9zaG93QWZ0ZXJWaXNpYmxlKGxhc3RBY3RpdmVQYW5lbCkKQEAgLTUyMCw3ICs1MjMsOCBA
QCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmNvbm5lY3RGcm9udGVuZCgpCiAgICAgbV9vcGVu
aW5nRnJvbnRlbmQgPSBmYWxzZTsKICAgICByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygp
OwogICAgIG1fZnJvbnRlbmQgPSBuZXcgSW5zcGVjdG9yRnJvbnRlbmQobV9jbGllbnQpOwotICAg
IG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6Y3JlYXRlKG1fY3NzU3RvcmUuZ2V0KCks
IG1fZnJvbnRlbmQuZ2V0KCkpOworICAgIG1fZG9tQWdlbnQgPSBJbnNwZWN0b3JET01BZ2VudDo6
Y3JlYXRlKG1fY3NzTW9kZWwuZ2V0KCksIG1fY3NzU3RvcmUuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0
KCkpOworICAgIG1fY3NzQWdlbnQgPSBJbnNwZWN0b3JDU1NBZ2VudDo6Y3JlYXRlKG1fY3NzTW9k
ZWwuZ2V0KCksIG1fZnJvbnRlbmQuZ2V0KCksIG1fZG9tQWdlbnQuZ2V0KCkpOwogCiAjaWYgRU5B
QkxFKERBVEFCQVNFKQogICAgIG1fc3RvcmFnZUFnZW50ID0gSW5zcGVjdG9yU3RvcmFnZUFnZW50
OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSk7CkBAIC02MzMsNiArNjM3LDEwIEBAIHZvaWQgSW5z
cGVjdG9yQ29udHJvbGxlcjo6cmVsZWFzZUZyb250ZW5kTGlmZXRpbWVBZ2VudHMoKQogICAgICAg
ICBtX2RvbUFnZW50LT5yZXNldCgpOwogICAgIG1fZG9tQWdlbnQuY2xlYXIoKTsKIAorICAgIGlm
IChtX2Nzc0FnZW50KQorICAgICAgICBtX2Nzc0FnZW50LT5yZXNldCgpOworICAgIG1fY3NzQWdl
bnQuY2xlYXIoKTsKKwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICBpZiAobV9zdG9yYWdlQWdl
bnQpCiAgICAgICAgIG1fc3RvcmFnZUFnZW50LT5jbGVhckZyb250ZW5kKCk7CkBAIC04MDQsNiAr
ODEyLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpkaWRDb21taXRMb2FkKERvY3VtZW50
TG9hZGVyKiBsb2FkZXIpCiAgICAgICAgIGlmIChtX2Zyb250ZW5kKSB7CiAgICAgICAgICAgICBt
X2Zyb250ZW5kLT5yZXNldCgpOwogICAgICAgICAgICAgbV9kb21BZ2VudC0+cmVzZXQoKTsKKyAg
ICAgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7CiAgICAgICAgIH0KICNpZiBFTkFCTEUoV09S
S0VSUykKICAgICAgICAgbV93b3JrZXJzLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKaW5kZXggOWU2M2YwMS4uZGFiODY2MiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNjEsNiArNjEsOCBAQCBjbGFzcyBJbnNwZWN0b3JB
cnJheTsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmQ7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kRGlz
cGF0Y2hlcjsKIGNsYXNzIEluc3BlY3RvckNsaWVudDsKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50
OworY2xhc3MgSW5zcGVjdG9yQ1NTTW9kZWw7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNs
YXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNl
OwpAQCAtMzA0LDYgKzMwNiw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldE1vbml0b3JpbmdY
SFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwogICAgIHZvaWQgc3RvcmVM
YXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOworICAgIEluc3BlY3RvckNT
U0FnZW50KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNw
ZWN0b3JET01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAg
ICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCkBAIC0zNjcsNiArMzcw
LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ7CiAgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBP
d25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CisgICAgT3duUHRyPEluc3BlY3Rv
ckNTU01vZGVsPiBtX2Nzc01vZGVsOworICAgIFJlZlB0cjxJbnNwZWN0b3JDU1NBZ2VudD4gbV9j
c3NBZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IG1fZG9tQWdlbnQ7CiAgICAg
UmVmUHRyPEluc3BlY3RvclN0b3JhZ2VBZ2VudD4gbV9zdG9yYWdlQWdlbnQ7CiAgICAgT3duUHRy
PEluc3BlY3RvckNTU1N0b3JlPiBtX2Nzc1N0b3JlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwCmluZGV4IGY1MWRhNzMuLjZhODMxZWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlICJGcmFtZVRy
ZWUuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZU93bmVy
RWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNTU01vZGVsLmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJNdXRhdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAi
Tm9kZS5oIgpAQCAtMjExLDggKzIxMiw5IEBAIGNvbnN0IGludCBkb21CcmVha3BvaW50RGVyaXZl
ZFR5cGVTaGlmdCA9IDE2OwogCiB9CiAKLUluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01B
Z2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9u
dGVuZCkKK0luc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NN
b2RlbCogY3NzTW9kZWwsIEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJv
bnRlbmQqIGZyb250ZW5kKQogICAgIDogRXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JET01BZ2VudFR5
cGUpCisgICAgLCBtX2Nzc01vZGVsKGNzc01vZGVsKQogICAgICwgbV9jc3NTdG9yZShjc3NTdG9y
ZSkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKQEAg
LTMyNiw2ICszMjgsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9k
ZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAg
ICAgIHN0b3BMaXN0ZW5pbmcoZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAg
ICBtX2Nzc01vZGVsLT5yZW1vdmVEb2N1bWVudChmcmFtZU93bmVyLT5jb250ZW50RG9jdW1lbnQo
KSk7CiAgICAgICAgIGNzc1N0b3JlKCktPnJlbW92ZURvY3VtZW50KGZyYW1lT3duZXItPmNvbnRl
bnREb2N1bWVudCgpKTsKICAgICB9CiAKQEAgLTM5OCw2ICs0MDEsMTEgQEAgTm9kZSogSW5zcGVj
dG9yRE9NQWdlbnQ6Om5vZGVGb3JJZChsb25nIGlkKQogICAgIHJldHVybiAwOwogfQogCitsb25n
IEluc3BlY3RvckRPTUFnZW50OjppZEZvckRvY3VtZW50Tm9kZShOb2RlKiBkb2NOb2RlKQorewor
ICAgIHJldHVybiBtX2RvY3VtZW50Tm9kZVRvSWRNYXAuZ2V0KGRvY05vZGUpOworfQorCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRDaGlsZE5vZGVzKGxvbmcgbm9kZUlkKQogewogICAgIHB1
c2hDaGlsZE5vZGVzVG9Gcm9udGVuZChub2RlSWQpOwpAQCAtMTIzMCw2ICsxMjM4LDEwIEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0eWxlU291cmNlRGF0YShsb25nIHN0eWxlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+CiAgICAgcmVzdWx0LT5zZXRPYmplY3QoImJvZHlSYW5nZSIs
IGJvZHlSYW5nZSk7CiAgICAgYm9keVJhbmdlLT5zZXROdW1iZXIoInN0YXJ0Iiwgc291cmNlRGF0
YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQpOwogICAgIGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJlbmQi
LCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOworICAgIFJlZlB0cjxJbnNwZWN0b3JP
YmplY3Q+IHNlbGVjdG9yUmFuZ2UgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJl
c3VsdC0+c2V0T2JqZWN0KCJzZWxlY3RvclJhbmdlIiwgc2VsZWN0b3JSYW5nZSk7CisgICAgc2Vs
ZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJh
bmdlLnN0YXJ0KTsKKyAgICBzZWxlY3RvclJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNvdXJjZURh
dGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7CiAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBw
cm9wZXJ0eVJhbmdlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNl
dEFycmF5KCJwcm9wZXJ0eURhdGEiLCBwcm9wZXJ0eVJhbmdlcyk7CiAgICAgVmVjdG9yPENTU1By
b3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJjZURhdGEtPnByb3BlcnR5RGF0
YTsKQEAgLTE0ODgsMTQgKzE1MDAsNiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxl
KGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZgogICAgICpy
dWxlT2JqZWN0ID0gYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgbmV3
UnVsZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3Bl
cnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcykKLXsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAg
IHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlOYW1lU3RyaW5nc1tpXSk7Ci0gICAgKmNz
c1Byb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKLX0KLQogUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQpCiB7CiAgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IDg5YzZmZDAuLjA3Y2Q0MzggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtNTYsNiArNTYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQ2hhcmFjdGVyRGF0YTsKICAgICBjbGFzcyBFbGVtZW50OwogICAg
IGNsYXNzIEV2ZW50OworICAgIGNsYXNzIEluc3BlY3RvckNTU01vZGVsOwogICAgIGNsYXNzIElu
c3BlY3RvckRPTUFnZW50OwogICAgIGNsYXNzIEluc3BlY3RvckZyb250ZW5kOwogICAgIGNsYXNz
IE1hdGNoSm9iOwpAQCAtODAsOSArODEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAgICBwdWJs
aWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUo
SW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQp
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5z
cGVjdG9yQ1NTTW9kZWwqIGNzc01vZGVsLCBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIElu
c3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01BZ2VudChjc3NTdG9yZSwgZnJvbnRlbmQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRE9NQWdlbnQoY3NzTW9kZWws
IGNzc1N0b3JlLCBmcm9udGVuZCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGNvbnN0
IEluc3BlY3RvckRPTUFnZW50KiBjYXN0KGNvbnN0IEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQpA
QCAtOTIsNyArOTMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgOiAw
OwogICAgICAgICB9CiAKLSAgICAgICAgSW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3Rv
cmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpOworICAgICAgICBJbnNw
ZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NNb2RlbCogY3NzTW9kZWwsIEluc3BlY3RvckNTU1N0
b3JlKiBjc3NTdG9yZSwgSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kKTsKICAgICAgICAgfklu
c3BlY3RvckRPTUFnZW50KCk7CiAKICAgICAgICAgdm9pZCByZXNldCgpOwpAQCAtMTMxLDcgKzEz
Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0b2dnbGVTdHlsZUVuYWJs
ZWQobG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxl
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVPYmplY3QpOwogICAgICAgICB2b2lkIHNl
dFJ1bGVTZWxlY3Rvcihsb25nIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBz
ZWxlY3RlZE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCog
c2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAgICAgIHZvaWQgYWRkUnVsZShjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBy
dWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICAgICAgdm9pZCBnZXRT
dXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRp
ZXMpOwogCiAgICAgICAgIC8vIE1ldGhvZHMgY2FsbGVkIGZyb20gdGhlIEluc3BlY3RvckNvbnRy
b2xsZXIuCiAgICAgICAgIHZvaWQgc2V0RG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KTsKQEAg
LTE0MywxMSArMTQzLDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjaGFy
YWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSopOwogCiAgICAgICAgIE5vZGUqIG5vZGVG
b3JJZChsb25nIG5vZGVJZCk7CisgICAgICAgIGxvbmcgaWRGb3JEb2N1bWVudE5vZGUoTm9kZSop
OwogICAgICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9kZSk7CiAgICAg
ICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKTsKICAgICAgICAg
dm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nKiBu
b2RlSWQpOwogICAgICAgICBsb25nIGluc3BlY3RlZE5vZGUodW5zaWduZWQgbG9uZyBudW0pOwog
ICAgICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlkKTsKKyAgICAgICAgY29uc3QgTGlzdEhh
c2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+JiBkb2N1bWVudHMoKSB7IHJldHVybiBtX2RvY3VtZW50
czsgfQorCisgICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1l
bnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzdGFydExpc3RlbmluZyhE
b2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTg1LDcgKzE4OSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSogbm9kZSk7CiAKICAgICAgICAgRG9j
dW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkgY29uc3Q7Ci0gICAgICAgIFN0cmluZyBkb2N1bWVu
dFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogICAgICAgICBJbnNwZWN0b3JD
U1NTdG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0b3JlOyB9CiAKICAgICAgICAgdm9p
ZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50PiopOwpAQCAtMjA1LDYg
KzIwOCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIGRpc2NhcmRCaW5k
aW5ncygpOwogCisgICAgICAgIEluc3BlY3RvckNTU01vZGVsKiBtX2Nzc01vZGVsOwogICAgICAg
ICBJbnNwZWN0b3JDU1NTdG9yZSogbV9jc3NTdG9yZTsKICAgICAgICAgSW5zcGVjdG9yRnJvbnRl
bmQqIG1fZnJvbnRlbmQ7CiAgICAgICAgIE5vZGVUb0lkTWFwIG1fZG9jdW1lbnROb2RlVG9JZE1h
cDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYTg1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVk
ZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hl
ZFJlc291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNp
bmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIHN0YXRpYworYm9vbCBJbnNwZWN0b3JVdGlsaXRpZXM6OnJlc291cmNl
Q29udGVudEZvclVSTChjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50KiBmcmFtZURvY3VtZW50LCBT
dHJpbmcqIHJlc3VsdCkKK3sKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcjsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmll
cih1cmwsIGZyYW1lRG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXF1ZXN0VVJMKCkpKSB7CisgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZURvY3Vt
ZW50LT5pbnB1dEVuY29kaW5nKCk7CisgICAgICAgIGJ1ZmZlciA9IGZyYW1lRG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJj
ZURhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9
IHVybC5zdHJpbmcoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0g
ZnJhbWVEb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UodXJs
U3RyaW5nKTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAgICAgIGNhY2hl
ZFJlc291cmNlID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKKworICAgICAg
ICBBU1NFUlQoY2FjaGVkUmVzb3VyY2UpOyAvLyBGSVhNRShhcGF2bG92KTogVGhpcyBtaWdodCBi
ZSB0b28gYWdncmVzc2l2ZS4KKworICAgICAgICBib29sIGlzVW5wdXJnZWFibGUgPSB0cnVlOwor
ICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSByZXNvdXJjZSBpcyBwdXJnZWFibGUgdGhlbiBtYWtlIGl0IHVucHVyZ2VhYmxl
IHRvIGdldAorICAgICAgICAgICAgLy8gaXRzIGRhdGEuIFRoaXMgbWlnaHQgZmFpbCwgaW4gd2hp
Y2ggY2FzZSB3ZSByZXR1cm4gYW4KKyAgICAgICAgICAgIC8vIGVtcHR5IFN0cmluZy4KKyAgICAg
ICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQorICAgICAg
ICAgICAgICAgIGlzVW5wdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
aXNVbnB1cmdlYWJsZSkgeworICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlZFJl
c291cmNlLT5lbmNvZGluZygpOworICAgICAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVzb3VyY2Ut
PmRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
VGV4dEVuY29kaW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgICAgICBpZiAoIWVu
Y29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xhdGluMUVu
Y29kaW5nKCk7CisgICAgICAgICpyZXN1bHQgPSBlbmNvZGluZy5kZWNvZGUoYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLyBzdGF0aWMKK0NTU1N0eWxlU2hlZXQqIEluc3BlY3RvclV0
aWxpdGllczo6cGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sK
KyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFN0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBzdHlsZS0+c3R5bGVzaGVldCgpOworICAgIGlmIChzdHlsZVNoZWV0ICYmIHN0
eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHN0eWxlU2hlZXQpOworCisgICAgcmV0dXJuIDA7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmUwMDM3NGUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JVdGlsaXRpZXMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JVdGlsaXRp
ZXNfaAorI2RlZmluZSBJbnNwZWN0b3JVdGlsaXRpZXNfaAorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7CisKK2NsYXNzIEluc3BlY3RvclV0aWxpdGllcyB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VDb250ZW50Rm9yVVJMKGNvbnN0IEtVUkwm
IHVybCwgRG9jdW1lbnQqIGZyYW1lRG9jdW1lbnQsIFN0cmluZyogcmVzdWx0KTsKKyAgICBzdGF0
aWMgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldChDU1NTdHlsZURlY2xhcmF0aW9uKik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQorCisjZW5kaWYgLy8gIWRlZmluZWQoSW5zcGVjdG9yVXRpbGl0aWVzX2gpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69482</attachid>
            <date>2010-10-01 10:20:36 -0700</date>
            <delta_ts>2010-10-01 10:29:19 -0700</delta_ts>
            <desc>[PATCH] Introduced InspectorStyleSheet variations to avoid multiple maps, as suggested by pfeldman</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>122375</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDVlMzI3NmRjOTY0MmI4MDljOGRhODQ4MzA0ZDAwYjJiMDU0OGMwYTcKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVlYzdkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcwpAQCAtMCwwICsxLDIyIEBACitodG1s
IHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVy
dHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9y
dGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFu
dDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdp
dGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9i
b2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6
ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBi
b2R5IjsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQ
SS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzE1NDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDgxIEBACitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50
IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCisKKworPT09IENvbXB1dGVkIHN0eWxlIGZv
ciBib2R5ID09PQorCitzdHlsZQorZWxlbWVudC5zdHlsZSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1hdHRhY2htZW50Jzonc2Nyb2xsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWNsaXAnOidib3JkZXItYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWNvbG9yJzoncmdiKDAsIDEyOCwgMCknXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J3BhZGRpbmctYm94J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uJzonMCUgMCUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0JzoncmVwZWF0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLXNpemUnOidhdXRvIGF1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JvcmRlci1ib3R0b20tY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyc6JzBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOicwcHgnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1ib3R0b20tc3R5bGUnOidub25lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9tLXdpZHRoJzonMHB4J10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydib3JkZXItY29sbGFwc2UnOidzZXBhcmF0ZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLWxlZnQtY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWxlZnQtc3R5bGUnOidub25lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItbGVmdC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLXJpZ2h0LWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1yaWdodC1zdHlsZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1yaWdodC13aWR0aCc6JzBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRvcC1jb2xvcic6J3JnYigyNDAsIDExLCAxNzApJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLWxlZnQtcmFkaXVzJzonMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6JzBweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRvcC1zdHlsZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci10b3Atd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2JvdHRvbSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2NhcHRpb24tc2lkZSc6J3RvcCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY2xlYXInOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwJzonYXV0byddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snY3Vyc29yJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZGly
ZWN0aW9uJzonbHRyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2sn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2VtcHR5LWNlbGxzJzonc2hvdyddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snZmxvYXQnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wydmb250LWZhbWlseSc6J1RpbWVzJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXNp
emUnOicxMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXN0eWxlJzonbm9ybWFs
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXZhcmlhbnQnOidub3JtYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydoZWlnaHQnOic2MDBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
bGVmdCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2xldHRlci1zcGFjaW5nJzon
bm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaW5lLWhlaWdodCc6J25vcm1hbCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbGlzdC1zdHlsZS1pbWFnZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2xpc3Qtc3R5bGUtcG9zaXRpb24nOidvdXRzaWRlJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaXN0LXN0eWxlLXR5cGUnOidkaXNjJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tYm90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydtYXJnaW4tbGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFy
Z2luLXJpZ2h0JzonMTEwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi10b3An
Oic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21heC1oZWlnaHQnOidub25lJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXgtd2lkdGgnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydtaW4taGVpZ2h0JzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydt
aW4td2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ29wYWNpdHknOicxJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvcnBoYW5zJzonMiddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snb3V0bGluZS1jb2xvcic6J3JnYigyNDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydvdXRsaW5lLXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snb3V0bGluZS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snb3Zl
cmZsb3cteCc6J3Zpc2libGUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ292ZXJmbG93LXkn
Oid2aXNpYmxlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwYWRkaW5nLWJvdHRvbSc6JzBw
eCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFkZGluZy1sZWZ0JzonMHB4J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydwYWRkaW5nLXJpZ2h0JzonMHB4J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydwYWRkaW5nLXRvcCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
cGFnZS1icmVhay1hZnRlcic6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZ2Ut
YnJlYWstYmVmb3JlJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFnZS1icmVh
ay1pbnNpZGUnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwb2ludGVyLWV2ZW50
cyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Bvc2l0aW9uJzonc3RhdGljJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydyZXNpemUnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydyaWdodCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RhYmxl
LWxheW91dCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtYWxpZ24nOict
d2Via2l0LWF1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtZGVjb3JhdGlvbic6
J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtaW5kZW50JzonMHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyd0ZXh0LXJlbmRlcmluZyc6J2F1dG8nXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ3RleHQtc2hhZG93Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1sndGV4dC1vdmVyZmxvdyc6J2NsaXAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Rl
eHQtdHJhbnNmb3JtJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndG9wJzonYXV0
byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndW5pY29kZS1iaWRpJzonbm9ybWFsJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyd2ZXJ0aWNhbC1hbGlnbic6J2Jhc2VsaW5lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyd2aXNpYmlsaXR5JzondmlzaWJsZSddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snd2hpdGUtc3BhY2UnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ3dpZG93cyc6JzInXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dpZHRoJzonNjY3cHgn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dvcmQtYnJlYWsnOidub3JtYWwnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ3dvcmQtc3BhY2luZyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snd29yZC13cmFwJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd6
LWluZGV4JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snem9vbSc6JzEnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5JzonMHMnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbic6J25vcm1h
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24n
OicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tZmlsbC1t
b2RlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24t
aXRlcmF0aW9uLWNvdW50JzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tbmFtZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
YW5pbWF0aW9uLXBsYXktc3RhdGUnOidydW5uaW5nJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nOidjdWJpYy1iZXppZXIoMCwyNSwg
MCwxLCAwLDI1LCAxKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hcHBlYXJh
bmNlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZmFjZS12
aXNpYmlsaXR5JzondmlzaWJsZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1i
YWNrZ3JvdW5kLWNsaXAnOidib3JkZXItYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LWJhY2tncm91bmQtY29tcG9zaXRlJzonc291cmNlLW92ZXInXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW4nOidwYWRkaW5nLWJveCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUnOidhdXRvIGF1
dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYmxvY2stZmxvdyc6J3RiJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJvcmRlci1maXQnOidib3JkZXInXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2lu
Zyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3JkZXItaW1hZ2Un
Oidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJvcmRlci12ZXJ0aWNh
bC1zcGFjaW5nJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1h
bGlnbic6J3N0cmV0Y2gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWRp
cmVjdGlvbic6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gt
ZmxleCc6JzAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWZsZXgtZ3Jv
dXAnOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1saW5lcyc6J3Np
bmdsZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91
cCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LW9yaWVudCc6J2hv
cml6b250YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXBhY2snOidz
dGFydCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtcmVmbGVjdCc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXNoYWRvdyc6J25vbmUn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXNpemluZyc6J2NvbnRlbnQt
Ym94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24n
OidkZWZhdWx0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1icmVh
ay1hZnRlcic6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1u
LWJyZWFrLWJlZm9yZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
Y29sdW1uLWJyZWFrLWluc2lkZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13
ZWJraXQtY29sdW1uLWNvdW50JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1jb2x1bW4tZ2FwJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Vi
a2l0LWNvbHVtbi1ydWxlLWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGUnOidub25lJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1ydWxlLXdpZHRoJzonMHB4J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1zcGFuJzonMSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4td2lkdGgnOidhdXRvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LWZvbnQtc21vb3RoaW5nJzonYXV0byddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1oaWdobGlnaHQnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LWxpbmUtYnJlYWsnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbGluZS1jbGFtcCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtbWFyZ2luLWJlZm9yZS1jb2xsYXBzZSc6J2NvbGxhcHNlJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hcmdpbi1hZnRlci1jb2xsYXBzZSc6J2NvbGxh
cHNlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9u
JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLWluY3Jl
bWVudCc6JzZweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLXJl
cGV0aXRpb24nOidpbmZpbml0ZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1t
YXJxdWVlLXN0eWxlJzonc2Nyb2xsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0
LW1hc2stYXR0YWNobWVudCc6J3Njcm9sbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1tYXNrLWJveC1pbWFnZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13
ZWJraXQtbWFzay1jbGlwJzonYm9yZGVyLWJveCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1tYXNrLWNvbXBvc2l0ZSc6J3NvdXJjZS1vdmVyJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LW1hc2staW1hZ2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWyctd2Via2l0LW1hc2stb3JpZ2luJzonYm9yZGVyLWJveCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC1tYXNrLXBvc2l0aW9uJzonMCUgMCUnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbWFzay1yZXBlYXQnOidyZXBlYXQnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbWFzay1zaXplJzonYXV0byBhdXRvJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LW5ic3AtbW9kZSc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC1wZXJzcGVjdGl2ZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luJzonMzMzcHggMzAwcHgnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcnRsLW9yZGVyaW5nJzonbG9naWNhbCddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCc6
J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1maWxsLWNvbG9y
JzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dGV4dC1zZWN1cml0eSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dGV4dC1zdHJva2UtY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0nOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4nOiczMzNweCAzMDBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGUnOidmbGF0J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5zaXRpb24tZGVsYXknOicwcyddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uJzonMHMnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eSc6J2Fs
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1m
dW5jdGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEsIDAsMjUsIDEpJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LXVzZXItZHJhZyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtdXNlci1tb2RpZnknOidyZWFkLW9ubHknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1zZWxlY3QnOid0ZXh0J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydjbGlwLXBhdGgnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydj
bGlwLXJ1bGUnOidub256ZXJvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXNrJzonbm9u
ZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmlsdGVyJzonbm9uZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snZmxvb2QtY29sb3InOidyZ2IoMCwgMCwgMCknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2Zsb29kLW9wYWNpdHknOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydsaWdodGluZy1jb2xvcic6J3JnYigyNTUsIDI1NSwgMjU1KSddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snc3RvcC1jb2xvcic6J3JnYigwLCAwLCAwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc3RvcC1vcGFjaXR5JzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY29sb3It
aW50ZXJwb2xhdGlvbic6J3NyZ2InXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2NvbG9yLWlu
dGVycG9sYXRpb24tZmlsdGVycyc6J2xpbmVhcnJnYiddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snY29sb3ItcmVuZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmls
bCc6JyMwMDAwMDAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwtb3BhY2l0eSc6JzEn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwtcnVsZSc6J25vbnplcm8nXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2ltYWdlLXJlbmRlcmluZyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ21hcmtlci1lbmQnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydtYXJrZXItbWlkJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFya2VyLXN0
YXJ0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc2hhcGUtcmVuZGVyaW5nJzon
YXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlJzonbm9uZSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWRhc2hhcnJheSc6J25vbmUnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ3N0cm9rZS1kYXNob2Zmc2V0JzonMCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc3Ryb2tlLWxpbmVjYXAnOididXR0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydz
dHJva2UtbGluZWpvaW4nOidtaXRlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tl
LW1pdGVybGltaXQnOic0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydzdHJva2Utb3BhY2l0
eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3N0cm9rZS13aWR0aCc6JzEnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2FsaWdubWVudC1iYXNlbGluZSc6J2F1dG8nXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2Jhc2VsaW5lLXNoaWZ0JzonYmFzZWxpbmUnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2RvbWluYW50LWJhc2VsaW5lJzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1sna2VybmluZyc6JzAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQt
YW5jaG9yJzonc3RhcnQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dyaXRpbmctbW9kZSc6
J2xyLXRiJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydnbHlwaC1vcmllbnRhdGlvbi1ob3Jp
em9udGFsJzonMGRlZyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZ2x5cGgtb3JpZW50YXRp
b24tdmVydGljYWwnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXN2
Zy1zaGFkb3cnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd2ZWN0b3ItZWZmZWN0
Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworPT09IE1hdGNoZWQgcnVsZXMgZm9y
IGJvZHkgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1hZ2VudCcgdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snbWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4t
Ym90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tbGVmdCc6Jzhw
eCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDMyLTM2XSBbMzgt
Mjk4XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQorWydmb28nOidiYXIgIQorCisgICAg
aW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29y
ZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBbMjYtMTA0XQorWydoZWlnaHQnOicxMDAl
ICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXQorWydjb2xvcnonOiciIWltcG9y
dGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1snaW1wb3J0YW50JzonJyBub24tcGFyc2Vk
XSBAWzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHBy
b3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5MC0yNTldCisK
K3J1bGUKK2JvZHkubWFpbjE6IFsnJyAzMzAtMzY4XSBbMzY5LTQ1MF0KK1snY29sb3InOicjRjAw
QkFBJ10gQFsxMy0yOF0KK1snem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2du
aXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KKworcnVsZQorYm9keS5tYWlu
MjogWycnIDQ2Ni00NzZdIFs0NzctNTcyXQorWydiYWNrZ3JvdW5kJzonZ3JlZW4gLyogdmFsdWUg
IWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFp
bXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XQorWydiYWNrZ3JvdW5kLWltYWdlJzon
aW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXkn
Oidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1l
bnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0
aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBv
c2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5k
LW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
Y2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29s
b3InOidncmVlbiddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keS5tYWlucGFn
ZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3
XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KKwor
PT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1BzZXVkb0lkPTQKKworcnVsZQorYm9keTo6
YWZ0ZXI6IFsnJyA1NzUtNTg2XSBbNTg5LTYxN10KK1snY29udGVudCc6JyJBZnRlciBib2R5Iidd
IEBbNS0yN10KKworPT09IEF0dHJpYnV0ZSBzdHlsZXMgZm9yIHRhYmxlID09PQorQXR0cmlidXRl
OiB3aWR0aAorCitzdHlsZQorZWxlbWVudC5zdHlsZSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
d2lkdGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKKz09PSBJbmhlcml0ZWQgc3R5
bGVzIGZvciBib2R5ID09PQorTGV2ZWw9MQorCitydWxlCitodG1sOiBbJ3VzZXItYWdlbnQnIHVu
ZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxv
Y2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2h0bWw6IFsnJyAwLTRdIFs2LTI5
XQorWydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0KKworPT09IElubGluZSBzdHlsZSBmb3Ig
Ym9keSA9PT0KKworc3R5bGUKK2VsZW1lbnQuc3R5bGUgWzAtMzFdCitbJ2ZvbnQtd2VpZ2h0Jzon
bm9ybWFsJ10gQFswLTIwXQorWyd3aWR0aCc6Jzg1JSddIEBbMjEtMzFdCisKKz09PSBBbGwgc3R5
bGVzaGVldHMgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1sIHsKKyAgICBmb250LXdlaWdodDogNDAw
OworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgZm9vOiBiYXIgIQorCisg
ICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2Vi
Q29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKKyAgICBjb2xvcno6ICIhaW1w
b3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFudDsKKyAgICBjb2xvcjogImJhZGNvbG9y
IiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLzsKK30K
KworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRl
ciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6ICNGMDBCQUE7em9vOm1vbyAvKiBub3Qg
YW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi99LyogY29tbWVudCAqLworCiti
b2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29tbWVudCAq
LyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICovfQorCitib2R5
OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBib2R5IjsKK30KKycKKworcnVsZQoraHRt
bDogWycnIDAtNF0gWzYtMjldCitbJ2ZvbnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXQorCitydWxl
Citib2R5OiBbJycgMzItMzZdIFszOC0yOThdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFd
CitbJ2Zvbyc6J2JhciAhCisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBu
b3QgcmVjb2duaXplZCBieSBXZWJDb3JlICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsy
Ni0xMDRdCitbJ2hlaWdodCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0x
MzNdCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgtMTU5XQorWydp
bXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0KK1snY29sb3InOiciYmFkY29sb3Ii
ICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1p
bXBvcnRhbnRdIEBbMTkwLTI1OV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFsz
NjktNDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90
IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4
LTgxXQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tn
cm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAv
KiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVd
CitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorCitydWxlCitib2R5OjphZnRlcjogWycnIDU3NS01ODZdIFs1ODktNjE3XQorWydjb250ZW50
JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3XQorCitTdHlsZVNoZWV0OiAnCisKKy8qIEFuIGlubGlu
ZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNv
cmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisK
KycKKworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRl
Y29yYXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5v
bi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PQor
CitTdHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7ICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtl
dGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWdu
OiBqdXN0aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFsnJyAwLTEzXSBbMTUtNzhdCitb
J3RleHQtZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5
JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDc5
LTgzXSBbODUtMTA5XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFm
dGVyIHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgKiwgYm9keVtmb289ImJh
ciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTog
MmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQoraHRt
bCAqLCBib2R5W2Zvbz0iYmFyIl06IFsnJyAwLTIzXSBbMjUtODhdCitbJ3RleHQtZGVjb3JhdGlv
bic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicg
bm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDg5LTkzXSBbOTUtMTE5XQor
Wyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHN0eWxlIHRleHQg
c2V0ID09PQorCitTdHlsZVNoZWV0OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl0ge2NvbG9yOiB3
aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30n
CisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbJycgMC0yM10gWzI1LTU3XQorWydj
b2xvcic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3JvdW5kJzonYmxhY2snXSBAWzE0LTMyXQor
WydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
YmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
KworcnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhdCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5
J10gQFs0LTI0XQorCis9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PQorCity
dWxlCitib2R5OiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1yaWdo
dCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWJvdHRvbSc6JzhweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWxlZnQnOic4cHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyAzMi0zNl0gWzM4LTI5OF0KK1snZm9udC1z
aXplJzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFyICEKKworICAgIGltcG9ydGFudCAvKiAh
aW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9y
dGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50JyBp
cy1pbXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFy
c2VkXSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQor
Wydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0
cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XQorCitydWxlCitodG1sICos
IGJvZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsyNS01N10KK1snY29sb3InOid3aGl0ZSddIEBb
MC0xM10KK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsxNC0zMl0KK1snYmFja2dyb3VuZC1pbWFn
ZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0
LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVh
dC15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1hdHRh
Y2htZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1w
b3NpdGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1wb3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dy
b3VuZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3Jv
dW5kLWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5k
LWNvbG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsn
JyA1OC02Ml0gWzY0LTg4XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworcnVs
ZQorYm9keTogWydpbnNwZWN0b3InIDAtNF0gWzYtMTddCitbJ2ZvbnQnOidzZXJpZiddIEBbMC0x
MV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUwXQorWydjb2xvcic6
JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5y
ZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQorCitydWxlCitib2R5
Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2
YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZl
cnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2JhY2tncm91bmQtaW1h
Z2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVh
dC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBl
YXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0
YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91
bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tn
cm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dy
b3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjg4NWMxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI0MyBAQAorPGh0bWw+Cis8aGVhZD4KKwor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3Nz
IiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFj
ayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXkocmVzdWx0KTsKKyAgICAgICAgbm90
aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVuZF9y
dW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVu
Y3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICB0ZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVy
UGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVk
U3R5bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IENvbXB1dGVkIHN0eWxlIGZvciBib2R5
ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9s
bGVyLCBjb21wdXRlZFN0eWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1hdGNo
ZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVsZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVkIHJ1bGVzIGZvciBi
b2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRy
b2xsZXIsIG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBw
c2V1ZG9SdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBwc2V1ZG9SdWxlcykKKyAgICAgICAg
eworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAg
ICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IFBzZXVkbyBydWxlcyBmb3IgYm9k
eSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNldWRvUnVsZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2go
IlBzZXVkb0lkPSIgKyBwc2V1ZG9SdWxlc1tpXS5wc2V1ZG9JZCk7CisgICAgICAgICAgICAgICAg
ZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHBzZXVkb1J1bGVzW2ldLnJ1
bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGF0dHJp
YnV0ZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBhdHRyaWJ1dGVTdHlsZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRyaWJ1dGUgc3R5bGVz
IGZvciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cmlidXRl
U3R5bGVzKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJB
dHRyaWJ1dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9y
U3R5bGUodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRTdHlsZXNDYWxsYmFj
ayh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3IgYm9keSA9PT0iKTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkU3R5bGVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJMZXZl
bD0iICsgKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxl
KHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0uaW5saW5lU3R5bGUpOworICAgICAg
ICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBpbmhlcml0
ZWRTdHlsZXNbaV0ubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIGlu
bGluZVN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0g
SW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1
bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmxpbmVTdHlsZSk7CisgICAgICAgICAgICBmcm9u
dGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xsZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIoV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKG51
bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0TWF0Y2hl
ZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIG1h
dGNoZWRSdWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgcHNldWRvUnVsZXNDYWxsYmFjay5iaW5kKG51
bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QXR0cmli
dXRlU3R5bGVzRm9yTm9kZTIoZnJvbnRlbmRfbm9kZUZvcklkKCJ0aGV0YWJsZSIpLmlkLCBhdHRy
aWJ1dGVTdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGluaGVyaXRlZFN0eWxlc0NhbGxiYWNrLmJpbmQo
bnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRJbmxp
bmVTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBp
bmxpbmVTdHlsZUNhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9KTsK
K30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHJ1
bGVzKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9y
U3R5bGUodGVzdENvbnRyb2xsZXIsIHJ1bGVzW2ldKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
dGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKQorewordmFyIG5ld1N0eWxlU2hlZXRUZXh0
ID0KKyJib2R5Lm1haW5wYWdlIHtcCisgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdo
O1wKKyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjtcCit9XAorXAorYm9keSB7XAorICAgIHRl
eHQtYWxpZ246IGp1c3RpZnk7XAorfVwKKyI7CisKKyAgICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hl
ZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBMYXN0IHN0eWxlc2hlZXQgcGF0Y2hlZCA9PT0iKTsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVTaGVldC5pZCwgbmV3U3R5bGVTaGVldFRl
eHQsCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldC5pZCwgZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3Iu
YmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdHls
ZVNoZWV0SWRzTG9hZGVkKHRlc3RDb250cm9sbGVyLCBpZHMpCisgICAgeworICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIj09PSBBbGwgc3R5bGVzaGVldHMgPT09Iik7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1
bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBpZHNbaV0sIChpIDwgaWRzLmxlbmd0aCAtIDEp
ID8gbnVsbCA6IHBhdGNoU3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cisg
ICAgfQorICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzMihzdHlsZVNoZWV0SWRzTG9h
ZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
Y2hhbmdlU2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7CisgICAgZnVuY3Rp
b24gZGlkU2V0U2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIj09PSBBZnRlciBzZWxlY3RvciBzZXQgPT09Iik7CisgICAgICAgIGZyb250
ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgcnVsZS5wYXJlbnRTdHls
ZVNoZWV0LmlkLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxl
cikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yMihzdHls
ZVNoZWV0LmNzc1J1bGVzWzBdLmlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJhclwiXSIsIGRpZFNl
dFNlbGVjdG9yLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJv
bnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0KQoreworICAgIGZ1
bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHlsZSB0ZXh0IHNldCA9PT0iKTsKKyAgICAg
ICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZS5w
YXJlbnRTdHlsZVNoZWV0SWQsIGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29udHJv
bGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0MihzdHls
ZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmlkLCAiY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBi
bGFjazsiLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQor
CitmdW5jdGlvbiBmcm9udGVuZF9hZGRSdWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIGZ1bmN0
aW9uIGRpZEdldE1hdGNoZWRSdWxlcyh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKQor
ICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxl
IGFkZGVkID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJv
bGxlciwgbWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaWRTZXRT
dHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9j
dW1lbnQuYm9keS5pZCwgZGlkR2V0TWF0Y2hlZFJ1bGVzLmJpbmQobnVsbCwgdGVzdENvbnRyb2xs
ZXIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydWxlQWRkZWQodGVzdENvbnRyb2xsZXIsIHJ1
bGUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dDIocnVsZS5z
dHlsZS5pZCwgImZvbnQ6IHNlcmlmIiwgZGlkU2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENv
bnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUyKFdlYklu
c3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCAiYm9keSIsIHJ1bGVBZGRlZC5iaW5k
KG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxl
T3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZU9yU3R5bGUpCit7CisgICAgaWYgKCFydWxlT3JT
dHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5z
dHlsZSk7CisgICAgdmFyIHN0eWxlID0gaXNSdWxlID8gcnVsZU9yU3R5bGUuc3R5bGUgOiBydWxl
T3JTdHlsZTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaChpc1J1bGUgPyAicnVsZSIgOiAic3R5bGUiKTsKKyAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IChydWxlT3JTdHlsZS5zZWxlY3Rv
clRleHQgKyAiOiBbJyIgKyBydWxlT3JTdHlsZS5vcmlnaW4gKyAiJyAiICsgcnVsZU9yU3R5bGUu
c2VsZWN0b3JTdGFydE9mZnNldCArICItIiArIHJ1bGVPclN0eWxlLnNlbGVjdG9yRW5kT2Zmc2V0
ICsgIl0iKSA6ICJlbGVtZW50LnN0eWxlIikgKyAiIFsiICsgc3R5bGUuc3RhcnRPZmZzZXQgKyAi
LSIgKyBzdHlsZS5lbmRPZmZzZXQgKyAiXSIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5
bGUucHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcHJvcGVydHkgPSBzdHls
ZS5wcm9wZXJ0aWVzW2ldOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsn
IiArIHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3BlcnR5LnZhbHVlICsgIiciICsgKHByb3Bl
cnR5LnByaW9yaXR5ID8gIiBpcy1pbXBvcnRhbnQiIDogIiIpICsgKHByb3BlcnR5LnBhcnNlZE9r
ID8gIiIgOiAiIG5vbi1wYXJzZWQiKSArIl0gQFsiICsgcHJvcGVydHkuc3RhcnRPZmZzZXQgKyAi
LSIgKyBwcm9wZXJ0eS5lbmRPZmZzZXQgKyAiXSIpOworICAgIH0KK30KKworCitmdW5jdGlvbiBm
cm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXRJ
ZCwgY29udGludWF0aW9uKQoreworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRMb2FkZWQodGVzdENv
bnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlN0eWxl
U2hlZXQ6ICciICsgc3R5bGVTaGVldC50ZXh0ICsgIiciKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJv
bnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0LmNzc1J1bGVz
W2ldKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVhdGlv
bihzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hl
ZXQyKHN0eWxlU2hlZXRJZCwgc3R5bGVTaGVldExvYWRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7Cit9CisKKy8qCitDb3ZlcmVkIEFQSSBtZXRob2RzOgorIC0gZ2V0Q29tcHV0ZWRTdHls
ZUZvck5vZGUyCisgLSBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMgorIC0gZ2V0TWF0Y2hlZFBzZXVk
b1J1bGVzRm9yTm9kZTIKKyAtIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyCisgLSBnZXRJbmhl
cml0ZWRTdHlsZXNGb3JOb2RlMgorIC0gZ2V0SW5saW5lU3R5bGVGb3JOb2RlMgorIC0gZ2V0QWxs
U3R5bGVzMgorIC0gZ2V0U3R5bGVTaGVldDIKKyAtIHNldFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0
U3R5bGVUZXh0MgorIC0gc2V0UnVsZVNlbGVjdG9yMgorIC0gYWRkUnVsZTIKKyovCisKKzwvc2Ny
aXB0PgorCis8c3R5bGU+CisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5w
YWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBw
cm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAg
YmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
IGNsYXNzPSJtYWluMSBtYWluMiBtYWlucGFnZSIgb25sb2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZv
bnQtd2VpZ2h0OiBub3JtYWw7IHdpZHRoOiA4NSUiPgorPHA+CitUZXN0cyB0aGF0IEluc3BlY3Rv
ckNTU0FnZW50IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lk
dGg9NTAlIGlkPSJ0aGV0YWJsZSI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVj
dGVkLnR4dAppbmRleCBlNGQzM2Q4Li5iZWVjNzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMSw2
ICsxLDYgQEAKIFRlc3RzIHRoYXQgcHJvcGVyIGRhdGEgYW5kIHN0YXJ0L2VuZCBvZmZzZXQgcG9z
aXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHN0eWxlIGRlY2xhcmF0aW9ucyBhbmQgcHJvcGVy
dGllcy4KIAotYm9keTogWzYtMjY2XQorYm9keTogWzAtNF0gWzYtMjY2XQogWydmb250LXNpemUn
OicxMnB4J10gQFs1LTIxXQogWydmb28nOidiYXIgIQogCkBAIC05LDE1ICs5LDE1IEBAIGJvZHk6
IFs2LTI2Nl0KIFsnY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTld
CiBbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQogWydjb2xvcic6JyJiYWRj
b2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8n
ICFpbXBvcnRhbnRdIEBbMTkwLTI1OV0KLWJvZHkubWFpbjE6IFszMzctNDE4XQorYm9keS5tYWlu
MTogWzI5OC0zMzZdIFszMzctNDE4XQogWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQogWyd6
b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBu
b24tcGFyc2VkXSBAWzI4LTgxXQotYm9keS5tYWluMjogWzQ0NS01NDBdCitib2R5Lm1haW4yOiBb
NDM0LTQ0NF0gWzQ0NS01NDBdCiBbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0
YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFu
dCAqLycgIWltcG9ydGFudF0gQFswLTk1XQotYm9keS5tYWlucGFnZTogWzE3LTE0OV0KK2JvZHku
bWFpbnBhZ2U6IFsyLTE1XSBbMTctMTQ5XQogWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1
LTI3XQogWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0K
LWVsZW1lbnQuc3R5bGU6IFswLTMxXQorZWxlbWVudC5zdHlsZTogWzAtMF0gWzAtMzFdCiBbJ2Zv
bnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQogWyd3aWR0aCc6JzgwJSddIEBbMjEtMzFdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApp
bmRleCBmY2Y5MjhmLi5iOTMxODlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0
eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCkBAIC0yNCwxMSArMjQsNiBAQCBmdW5jdGlvbiBkb2l0
KCkKIAogZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKIHsKLSAgICBp
ZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVk
KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLl90b2dnbGVSZXNvdXJj
ZVRyYWNraW5nKCk7Ci0gICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7Ci0gICAgfQotCiAgICAg
dGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIGZyb250ZW5kX2V4cGFuZERPTVN1
YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50KTsKICAgICB0ZXN0Q29udHJvbGxl
ci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgewpAQCAtNDgsNyArNDMsNyBA
QCBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVyKQogZnVuY3Rpb24gZnJv
bnRlbmRfc3R5bGVEYXRhUmVjZWl2ZWQodGVzdENvbnRyb2xsZXIsIHJ1bGVPclN0eWxlLCBzaG91
bGRCYWlsLCBkYXRhKQogewogICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHlsZSk7
Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5z
ZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLmJvZHlSYW5nZS5z
dGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CisgICAgdGVzdENvbnRyb2xs
ZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAiZWxl
bWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVjdG9yUmFuZ2Uuc3RhcnQgKyAiLSIgKyBk
YXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCArICIt
IiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
YXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgcHJvcGVydHlEYXR1
bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSArICInOiciICsgcHJvcGVydHlEYXR1bS52
YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9ydGFudCA/ICIgIWltcG9ydGFudCIgOiAi
IikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIg
KyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJvcGVydHlEYXR1bS5lbmQgKyAiXSIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMjlhMDRkNTcuLjA3NDlmMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5OCw2ICsxMDk4LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTExMDgsNiArMTEwOSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDk4NWI1
Y2UuLjNiOTAyOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTc4NCw2ICsxNzg0LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBcCiAJV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU1N0b3JlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwIFwKQEAgLTE4MDcsNiArMTgwOSw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAogCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclV0aWxpdGllcy5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGll
cy5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDJiMmM5MmMuLmQwNTc3NTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xODg0
LDYgKzE4ODQsOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAn
LApAQCAtMTkwNSw2ICsxOTA3LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
U3RvcmFnZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvcldv
cmtlclJlc291cmNlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KaW5kZXggZTU5NWYzYi4uMzUyMWJlMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05ODksNiArOTg5LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKQEAgLTEwMDEsNiArMTAwMiw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCiAgICAgaW5zcGVjdG9yL1Njcmlw
dEJyZWFrcG9pbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmODFiNzdhLi42YTk1
OTJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUyNjY5LDYgKzUy
NjY5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
Q1NTQWdlbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NTdG9yZS5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpAQCAtNTI3NjEsNiArNTI3NjksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclV0aWxpdGll
cy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVXRpbGl0aWVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFs
dWVzLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGQxMDQ0NTUuLjhhYzk4N2YgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDYzLDYgKzE0NjMsOCBAQAogCQk4MUJF
MjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTQxMUY0QUI4
RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJODFCRTIw
RDIxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE3MTFGNEI2NkYwMDkxNURGQSAvKiBK
U0lEQkN1cnNvci5jcHAgKi87IH07CiAJCTgxQkUyMEQzMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lE
QkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggKi87IH07CisJCTgyQUIx
NzQzMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc0MTEyNEI5OUVDMDBDNTA2
OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovOyB9OworCQk4MkFCMTc0NDEyNEI5OUVDMDBD
NTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JD
U1NBZ2VudC5oICovOyB9OwogCQk4MkI2NTg5ODExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9y
Q1NTU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgyQjY1ODlBMTE4OUU0
NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5z
cGVjdG9yQ1NTU3RvcmUuY3BwICovOyB9OwogCQk4MkUzRDhERTEyMkVBMEQxMDAzQUU1QkMgLyog
Q1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgyRTNEOERDMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwICovOyB9OwpAQCAtNzQ4Niw2ICs3NDg4LDggQEAKIAkJODFCRTIwOUMxMUY0
QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURC
Q3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwQTcxMUY0QjY2
RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDU1NBZ2VudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDU1NBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkI2
NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ1NTU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0
b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNT
U1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODJFM0Q4REMxMjJFQTBE
MTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTE5ODksNiArMTE5OTMsOCBAQAogCQkJCTFDODFCOTU4MEU5
NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTcz
MzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUM4MUI5NTYw
RTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk4MkFCMTc0
MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovLAorCQkJCTgyQUIx
NzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovLAogCQkJCTgyQjY1
ODk5MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi8sCiAJCQkJODJC
NjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi8sCiAJCQkJNDFG
MDYyMTMwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICov
LApAQCAtMTk0MDYsNiArMTk0MTIsNyBAQAogCQkJCTRGNzA3QTlBMTFFRjY3OTQwMEFDREE2OSAv
KiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5
NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJCNjU4OTgxMTg5RTM5MjAwRTA1MkExIC8qIElu
c3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjIxNDBGNUYxOTI2MDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjE5MzksNiArMjE5NDYsNyBAQAogCQkJCTdBNzRFQ0JBMTAxODM5QTYw
MEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNzA3
QTk5MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MkFCMTc0MzEyNEI5OUVDMDBDNTA2OUQg
LyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODJCNjU4OUExMTg5
RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUYzM0YwNTNEMTIwQjBEQTUwMEU1NzQzQSAvKiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGM1NWY5OTgu
LmMwMTM5YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTQwOCw3ICs0MDgsOSBAQCBydWxlX2xpc3Q6CiAgOwog
CiB2YWxpZF9ydWxlOgotICAgIHJ1bGVzZXQKKyAgICBiZWZvcmVfcnVsZXNldCBydWxlc2V0IHsK
KyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIHwgbWVkaWEKICAgfCBwYWdlCiAgIHwgZm9udF9m
YWNlCkBAIC05MTAsOCArOTEyLDIyIEBAIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbjoK
ICAgICB9CiAgIDsKIAorYmVmb3JlX3J1bGVzZXQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAg
ICBwLT5tYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKKyAgICB9CisgIDsKKworYmVmb3JlX3J1bGVf
b3BlbmluZ19icmFjZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtTZWxlY3Rv
ckxpc3RFbmQoKTsKKyAgICB9CisgIDsKKwogcnVsZXNldDoKLSAgICBzZWxlY3Rvcl9saXN0ICd7
JyBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5n
X2JyYWNlIHsKKyAgICBzZWxlY3Rvcl9saXN0IGJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2UgJ3sn
IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3Npbmdf
YnJhY2UgewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKaW5kZXggZGU0YTk5MS4uZjkzN2Q1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNDQsMTAgKzE0
NCw5IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1f
aGFzRm9udEZhY2VPbmx5VmFsdWVzKGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFs
aWRDU1NSdWxlKGZhbHNlKQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQotICAg
ICwgbV9ydWxlQm9keVN0YXJ0T2Zmc2V0KDApCi0gICAgLCBtX3J1bGVCb2R5RW5kT2Zmc2V0KDAp
Ci0gICAgLCBtX3Byb3BlcnR5U3RhcnRPZmZzZXQoVUlOVF9NQVgpCi0gICAgLCBtX3Byb3BlcnR5
RW5kT2Zmc2V0KFVJTlRfTUFYKQorICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQorICAg
ICwgbV9ydWxlQm9keVJhbmdlKDAsIDApCisgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgs
IFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVudFN0eWxl
RGF0YSgwKQogICAgICwgbV9kYXRhKDApCkBAIC01NDgwLDExICs1NDc5LDEzIEBAIENTU1J1bGUq
IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxlY3Rv
cnMpCiAgICAgICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7
CiAgICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudFN0eWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnN0eWxlQm9k
eVJhbmdlID0gU291cmNlUmFuZ2UobV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3J1bGVCb2R5RW5k
T2Zmc2V0KTsKKyAgICAgICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c2VsZWN0b3JMaXN0UmFu
Z2UgPSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRh
LT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKICAgICAgICAgICAgIG1fcnVsZVJh
bmdlTWFwLT5zZXQocmVzdWx0LCBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgIG1fY3VycmVudFN0eWxlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CiAgICAgICAgIH0KICAgICB9CisgICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwogICAgIHJl
c2V0UnVsZUJvZHlNYXJrcygpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC01NzMzLDI2ICs1NzM0LDQ0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0
U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKQogICAgIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiB9CiAK
K3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQoreworICAgIG1fc2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7Cit9CisKK3ZvaWQgQ1NTUGFyc2Vy
OjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFN0eWxlRGF0YSkK
KyAgICAgICAgcmV0dXJuOworICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OworICAgIHdoaWxl
IChsaXN0RW5kID4gbV9kYXRhICsgMSkgeworICAgICAgICBpZiAoaXNDU1NXaGl0ZXNwYWNlKCoo
bGlzdEVuZCAtIDEpKSkKKyAgICAgICAgICAgIC0tbGlzdEVuZDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlz
dEVuZCAtIG1fZGF0YTsKK30KKwogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkK
IHsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAgICAgaWYgKCp5eXRl
eHQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5p
bmcgYnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlTdGFydE9mZnNldCkKLSAgICAg
ICAgbV9ydWxlQm9keVN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBtX3J1
bGVCb2R5UmFuZ2Uuc3RhcnQpCisgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNl
dDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7CiAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5
RW5kT2Zmc2V0KQotICAgICAgICBtX3J1bGVCb2R5RW5kT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlm
IChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQorICAgICAgICBtX3J1bGVCb2R5UmFuZ2Uu
ZW5kID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQog
ewotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBtX3Byb3BlcnR5
U3RhcnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0
IC0gbV9kYXRhOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJ
bXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQpAQCAtNTc2MCwxMSArNTc3OSwx
MSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3Vu
ZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAt
IG1fZGF0YTsKICAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGlu
dG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlF
bmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlTdGFydE9mZnNldCAhPSBVSU5U
X01BWCAmJiBtX2N1cnJlbnRTdHlsZURhdGEpIHsKKyAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0g
b2Zmc2V0OworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9j
dXJyZW50U3R5bGVEYXRhKSB7CiAgICAgICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRl
ZCB3aGVuIHRoZSBzdHlsZSBkYXRhIHJldHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50Lgot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlTdGFydE9mZnNldDsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChz
dGFydCA8IGVuZCk7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2Rh
dGEgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAo
cHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKQEAgLTU3NzcsNyArNTc5Niw3IEBA
IHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBi
b29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3Ry
aW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0
cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRp
dmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KICAgICAgICAgbV9jdXJyZW50U3R5
bGVEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBT
b3VyY2VSYW5nZShtX3Byb3BlcnR5U3RhcnRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQs
IG1fcHJvcGVydHlFbmRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpKSk7CisgICAgICAg
ICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQs
IGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0
YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAgIHJlc2V0UHJv
cGVydHlNYXJrcygpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBmOGIyNGRmLi43NmJjNjU0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApA
QCAtMjQxLDE4ICsyNDEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBdG9taWNT
dHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRva2VuaXplciBtZXRob2Rz
IGFuZCBkYXRhCi0gICAgICAgIHVuc2lnbmVkIG1fcnVsZUJvZHlTdGFydE9mZnNldDsKLSAgICAg
ICAgdW5zaWduZWQgbV9ydWxlQm9keUVuZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9wcm9w
ZXJ0eVN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5RW5kT2Zmc2V0Owor
ICAgICAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICBTb3VyY2VS
YW5nZSBtX3J1bGVCb2R5UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5n
ZTsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwogICAgICAgICBS
ZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRTdHlsZURhdGE7CisgICAgICAgIHZv
aWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya1NlbGVjdG9yTGlz
dEVuZCgpOwogICAgICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgICAgIHZvaWQg
bWFya1J1bGVCb2R5RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAg
ICAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlz
UHJvcGVydHlQYXJzZWQpOwotICAgICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9y
dWxlQm9keVN0YXJ0T2Zmc2V0ID0gbV9ydWxlQm9keUVuZE9mZnNldCA9IDA7IH0KLSAgICAgICAg
dm9pZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG1fcHJv
cGVydHlFbmRPZmZzZXQgPSBVSU5UX01BWDsgfQorICAgICAgICB2b2lkIHJlc2V0U2VsZWN0b3JM
aXN0TWFya3MoKSB7IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJh
bmdlLmVuZCA9IDA7IH0KKyAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVs
ZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CisgICAgICAgIHZv
aWQgcmVzZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwp
OwogICAgICAgICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciog
dGV4dChpbnQqIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcAppbmRl
eCAxNjI4MDMxLi5lYjljMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAK
QEAgLTU0LDEzICs1NCw2IEBAIFNvdXJjZVJhbmdlOjpTb3VyY2VSYW5nZSh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKQogewogfQogCi1Tb3VyY2VSYW5nZSYgU291cmNlUmFuZ2U6Om9wZXJh
dG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpCi17Ci0gICAgdGhpcy0+c3RhcnQgPSBvdGhl
ci5zdGFydDsKLSAgICB0aGlzLT5lbmQgPSBvdGhlci5lbmQ7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCiBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5U291cmNlRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIHBh
cnNlZE9rLCBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiAgICAgOiBuYW1lKG5hbWUpCiAgICAg
LCB2YWx1ZSh2YWx1ZSkKQEAgLTg4LDE2ICs4MSw2IEBAIENTU1Byb3BlcnR5U291cmNlRGF0YTo6
Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkKIHsKIH0KIAotQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBD
U1NQcm9wZXJ0eVNvdXJjZURhdGE6Om9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEmIG90aGVyKQotewotICAgIG5hbWUgPSBvdGhlci5uYW1lOwotICAgIHZhbHVlID0gb3RoZXIu
dmFsdWU7Ci0gICAgaW1wb3J0YW50ID0gb3RoZXIuaW1wb3J0YW50OwotICAgIHBhcnNlZE9rID0g
b3RoZXIucGFyc2VkT2s7Ci0gICAgcmFuZ2UgPSBvdGhlci5yYW5nZTsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KIFN0cmluZyBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OnRvU3RyaW5nKCkgY29uc3QK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZW1wdHlWYWx1ZSwgKCJlIikpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCBiZWFlOWQwLi5hYzU1NDExIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBDU1NT
dHlsZVJ1bGU7CiBzdHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CiAgICAg
U291cmNlUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgU291cmNlUmFu
Z2UmIG9wZXJhdG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpOwogCiAgICAgdW5zaWduZWQg
c3RhcnQ7CiAgICAgdW5zaWduZWQgZW5kOwpAQCAtNTYsOSArNTUsNyBAQCBzdHJ1Y3QgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhIHsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBwYXJzZWRP
aywgY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlKTsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEo
Y29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBvdGhlcik7CiAgICAgQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhKCk7Ci0gICAgQUxXQVlTX0lOTElORSB+Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkgeyB9
CiAKLSAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0
eVNvdXJjZURhdGEmIG90aGVyKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTc5LDYgKzc2LDEwIEBAIHN0cnVjdCBDU1NTdHls
ZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNvdXJjZURhdGEoKSk7CiAgICAgfQog
CisgICAgLy8gW09wdGlvbmFsXSBSYW5nZSBvZiB0aGUgc2VsZWN0b3IgbGlzdCBpbiB0aGUgZW5j
bG9zaW5nIHNvdXJjZS4KKyAgICAvLyBJZiB0aGUgc3R5bGUgaXMgYSBwdXJlIGRlY2xhcmF0aW9u
LCB0aGUgcmFuZ2UgaXMgKDAsIDApLgorICAgIFNvdXJjZVJhbmdlIHNlbGVjdG9yTGlzdFJhbmdl
OworCiAgICAgLy8gUmFuZ2Ugb2YgdGhlIHN0eWxlIHRleHQgaW4gdGhlIGVuY2xvc2luZyBzb3Vy
Y2UuCiAgICAgU291cmNlUmFuZ2Ugc3R5bGVCb2R5UmFuZ2U7CiAgICAgVmVjdG9yPENTU1Byb3Bl
cnR5U291cmNlRGF0YT4gcHJvcGVydHlEYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KaW5kZXggODBlMjQzYi4uMmY1ZjQxMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0zMyw2ICszMywxMSBAQCAkdHlw
ZVRyYW5zZm9ybXsiRE9NIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50
LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9t
QWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0geworICAgICJmb3J3YXJkIiA9
PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2Vu
dC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmNz
c0FnZW50KCkiLAorfTsKICR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAg
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAogICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbAppbmRleCBhMDhhNjIyLi5mYTUxMjM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwKQEAgLTE5MSw3ICsxOTEsMjUgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1E
T01dIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGluIGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHBy
b3BlcnR5TmFtZSwgaW4gYm9vbGVhbiBkaXNhYmxlZCwgb3V0IFZhbHVlIHN0eWxlKTsKICAgICAg
ICAgW2hhbmRsZXI9RE9NXSB2b2lkIHNldFJ1bGVTZWxlY3RvcihpbiBsb25nIHJ1bGVJZCwgaW4g
U3RyaW5nIHNlbGVjdG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwg
b3V0IGJvb2xlYW4gc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0g
dm9pZCBhZGRSdWxlKGluIFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwg
b3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAg
ICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkg
Y3NzUHJvcGVydGllcyk7CisKKyAgICAgICAgLy8gR2V0IGFsbCBzdHlsZXMgYXBwbGljYWJsZSB0
byB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldENvbXB1dGVk
U3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAg
W2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlk
LCBvdXQgQXJyYXkgcnVsZXMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0TWF0Y2hl
ZFBzZXVkb1J1bGVzRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBBcnJheSBydWxlcyk7IC8v
IGFycmF5IG9mIHsgcHNldWRvSWQ6IDxudW1iZXI+LCBydWxlczogYXJyYXkgb2YgI2Nzc1J1bGUg
fQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIo
aW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZXMpOyAvLyBtYXA6IGF0dHJpYnV0ZU5hbWU6
ICNjc3NTdHlsZQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5oZXJpdGVkU3R5bGVz
Rm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBBcnJheSByZXN1bHQpOyAvLyBhcnJheSBvZiB7
IGlubGluZVN0eWxlOiAjY3NzU3R5bGUsIG1hdGNoZWRDU1NSdWxlczogYXJyYXkgb2YgI2Nzc1J1
bGUgfQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihp
biBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIGdldEFsbFN0eWxlczIob3V0IEFycmF5IHN0eWxlU2hlZXRJZHMpOworICAgICAgICBbaGFu
ZGxlcj1DU1NdIHZvaWQgZ2V0U3R5bGVTaGVldDIoaW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgb3V0
IFZhbHVlIHN0eWxlU2hlZXQpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQyKGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIGluIFN0cmluZyB0ZXh0KTsKKyAgICAg
ICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlVGV4dDIoaW4gU3RyaW5nIHN0eWxlSWQsIGlu
IFN0cmluZyB0ZXh0LCBvdXQgVmFsdWUgc3R5bGUpOworCisgICAgICAgIC8vIEVuYWJsZS9kaXNh
YmxlIHByb3BlcnR5LiBbbW9kZWxdCisgICAgICAgIC8vIFNob3VsZCBiZSBzZW50IGluIGEgYmF0
Y2ggYmVmb3JlIHNldFN0eWxlVGV4dCgpIChzbyB0aGF0IG5vdGhpbmcgY2FuIGhhcHBlbiBiZXR3
ZWVuIHRoZSB0d28gY2FsbHMpLgorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJv
cGVydHkyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5T3JkaW5hbCwgaW4gYm9v
bGVhbiBkaXNhYmxlZCk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0
b3IyKGluIFN0cmluZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUp
OworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgYWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9k
ZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRs
ZXI9Q1NTXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3Bl
cnRpZXMpOwogCiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhv
dXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29raWVzU3RyaW5nKTsKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUs
IGluIFN0cmluZyBkb21haW4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOWFiNGIKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTAsMCAr
MSwxMDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKworLy8g
Y3NzUHJvcGVydHkgPSB7CisvLyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICB2
YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICBwcmlvcml0eSAgICAgIDogPHN0cmluZz4s
IC8vIJOUIGZvciBub24tcGFyc2VkT2sgcHJvcGVydGllcworLy8gICAgaW1wbGljaXQgICAgICA6
IDxib29sZWFuPiwKKy8vICAgIHBhcnNlZE9rICAgICAgOiA8Ym9vbGVhbj4sIC8vIHdoZXRoZXIg
cHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSBXZWJDb3JlCisvLyAgICBzdGF0dXMgICAgICAgIDog
PHN0cmluZz4sIC8vIJNkaXNhYmxlZJQgfCCTYWN0aXZllCB8IJNpbmFjdGl2ZZQgfCCTc3R5bGWU
CisvLyAgICBzaG9ydGhhbmROYW1lIDogPHN0cmluZz4sCisvLyAgICBzdGFydE9mZnNldCAgIDog
PG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVydHkgdGV4dCBzdGFydCBvZmZzZXQgaW4gZW5j
bG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQg
c3VjaC4KKy8vICAgIGVuZE9mZnNldCAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9w
ZXJ0eSB0ZXh0IGVuZCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNl
bnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8vIH0KKy8vCisvLyBzdGF0dXM6Cisv
LyCTZGlzYWJsZWSUID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKKy8vIJNhY3RpdmWUID09
IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24K
Ky8vIJNpbmFjdGl2ZZQgPT0gcHJvcGVydHkgZG9lcyBubyBwYXJ0aWNpcGF0ZSBpbiB0aGUgY29t
cHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJpZGRlbiBieSBhIHN1YnNlcXVlbnQg
cHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQorLy8gk3N0eWxllCA9PSBwcm9wZXJ0eSBpcyBh
Y3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29yZSBDU1NTdHlsZURlY2xhcmF0aW9u
IHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBpbXBsaWNpdCBsb25naGFuZCBwcm9w
ZXJ0aWVzKQorLy8KKy8vCisvLyBjc3NTdHlsZSA9IHsKKy8vICAgIHN0eWxlSWQgICAgICAgICA6
IDxudW1iZXI+LCAvLyBPcHRpb25hbAorLy8gICAgc3R5bGVTaGVldElkICAgIDogPG51bWJlcj4s
IC8vIFBhcmVudDogLTEgZm9yIGlubGluZSBzdHlsZXMgKDxmb28gc3R5bGU9lC4ulD4pCisvLyAg
ICBjc3NQcm9wZXJ0aWVzICAgOiBbCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1By
b3BlcnR5LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQorLy8gICAgICAgICAgICAgICAgICAgIF0sCisvLyAg
ICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kTmFtZTEgOiBzaG9ydGhhbmRWYWx1ZTEsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRWYWx1ZTIKKy8vICAgICAgICAgICAgICAgICAgICAg
IH0sCisvLyAgICBjc3NUZXh0ICAgICAgICAgOiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4
dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB9IC8vID8/PworLy8gfQorLy8KKy8vIC8vIFRP
RE86CisvLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQcm9wZXJ0aWVzIHRvIGVuYWJsZWQgZmxhZy4K
Ky8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0IHRvIHByb3BlcnRpZXMKKy8vCisvLyBjc3NS
dWxlID0geworLy8gICAgcnVsZUlkICAgICAgIDogPG51bWJlcj4sCisvLyAgICBzZWxlY3RvclRl
eHQgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgIDogPHN0cmluZz4KKy8vICAgIHNvdXJj
ZUxpbmUgICA6IDxzdHJpbmc+CisvLyAgICBzdHlsZVNoZWV0SWQgOiA8bnVtYmVyPiAvLyBhbHNv
IGZvdW5kIGluIHN0eWxlCisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiAvLyAiIiB8fCAi
dXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3IiCisvLyAgICBzdHlsZSAgICAgICAg
OiAjY3NzU3R5bGUKKy8vIH0KKy8vCisvLyAvLyBUT0RPOgorLy8gLy8gLSBmaXggb3JpZ2luCisv
LyAvLyAtIGFkZCBzb3VyY2VVUkwKKy8vIC8vIC0gZml4IHBhcmVudFN0eWxlU2hlZXRJZAorLy8K
Ky8vIGNzc1N0eWxlU2hlZXQgPSB7CisvLyAgICBzdHlsZVNoZWV0SWQgICA6IDxudW1iZXI+Cisv
LyAgICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICB0aXRsZSAgICAgICAgICA6IDxz
dHJpbmc+CisvLyAgICBkaXNhYmxlZCAgICAgICA6IDxib29sZWFuPgorLy8gICAgZG9jdW1lbnRO
b2RlSWQgOiA8bnVtYmVyPgorLy8gICAgcnVsZXMgICAgICAgICAgOiBbCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAjY3NzUnVsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgor
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUKKy8vICAgICAgICAgICAgICAgICAg
ICAgXQorLy8gfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhcnNlZFN0eWxlU2hlZXQ6OlBh
cnNlZFN0eWxlU2hlZXQoKQorICAgIDogbV9zdHlsZVNoZWV0QnlQYXJzZXIoMCkKKyAgICAsIG1f
aGFzVGV4dChmYWxzZSkKK3sKK30KKwordm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBtX2hhc1RleHQgPSB0cnVlOworICAgIG1fdGV4dCA9
IHRleHQ7CisgICAgc2V0U291cmNlRGF0YSgwKTsKK30KKwordm9pZCBQYXJzZWRTdHlsZVNoZWV0
OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSkKK3sKKyAg
ICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOworfQorCitSZWZQdHI8Q1NTU3R5bGVTb3VyY2VE
YXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpzdHlsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc1NvdXJjZURhdGEoKSB8fCBpbmRleCA+PSBtX3NvdXJjZURh
dGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2VEYXRh
LT5hdChpbmRleCk7Cit9CisKK2Jvb2wgUGFyc2VkU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0
YShOb2RlKiBvd25lck5vZGUpCit7CisgICAgaWYgKGhhc1NvdXJjZURhdGEoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWhhc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGUob3duZXJOb2RlKTsKKyAgICBDU1NQYXJzZXIgcDsKKyAgICBTdHlsZVJ1bGVS
YW5nZU1hcCBydWxlUmFuZ2VNYXA7CisgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0
KCksIG1fdGV4dCwgMCwgJnJ1bGVSYW5nZU1hcCk7CisgICAgT3duUHRyPFNvdXJjZURhdGE+IHJh
bmdlc1ZlY3RvcihuZXcgU291cmNlRGF0YSk7CisgICAgZXh0cmFjdFJhbmdlcyhuZXdTdHlsZVNo
ZWV0LmdldCgpLCBydWxlUmFuZ2VNYXAsIHJhbmdlc1ZlY3Rvci5nZXQoKSk7CisgICAgc2V0U291
cmNlRGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbV9zb3VyY2VEYXRh
OworfQorCit2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OmV4dHJhY3RSYW5nZXMoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCwgY29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAmIHJ1bGVSYW5nZU1hcCwgU291
cmNlRGF0YSogcmFuZ2VzVmVjdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0
aCA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgQ1NT
U3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yVXRpbGl0aWVzOjphc0NTU1N0eWxlUnVsZShzdHls
ZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJ1bGVS
YW5nZU1hcC5maW5kKHJ1bGUpOworICAgICAgICBpZiAoaXQgIT0gcnVsZVJhbmdlTWFwLmVuZCgp
KQorICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgfQor
fQorCisKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3QgU3Ry
aW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogbGl2ZVN0eWxlU2hlZXQpCisgICAgOiBtX2lkKGlkKQor
ICAgICwgbV9saXZlU3R5bGVTaGVldChsaXZlU3R5bGVTaGVldCkKKyAgICAsIG1faXNSZXZhbGlk
YXRpbmcoZmFsc2UpCit7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJp
bmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIWVuc3VyZVRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpyZXN1bHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpOworICAg
IHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIGxpdmVTdHlsZSkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2
ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxl
UnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NTdHlsZVJ1bGUobV9saXZlU3R5
bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlmICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAocnVsZS0+c3R5bGUoKSA9PSBsaXZlU3R5bGUpCisgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisKKyAgICAgICAgKytpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIFVJ
TlRfTUFYOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmRMaXZl
UnVsZVdpdGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBzaXplID0gbV9saXZlU3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yVXRpbGl0aWVz
Ojphc0NTU1N0eWxlUnVsZShtX2xpdmVTdHlsZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYg
KCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydWxlLT5zdHlsZSgp
ID09IHN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIHJ1bGU7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiBsaXZlU3R5bGUpCit7CisgICAgaWYgKG1faXNSZXZhbGlkYXRpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faXNSZXZhbGlkYXRpbmcgPSB0cnVlOworICAgIENTU1N0
eWxlU2hlZXQqIHBhcnNlZFNoZWV0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LmNzc1N0eWxlU2hlZXQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcGFyc2VkU2hlZXQtPmxlbmd0aCgp
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gcGFyc2Vk
U2hlZXQtPml0ZW0oaSk7CisgICAgICAgIENTU1N0eWxlUnVsZSogcGFyc2VkUnVsZSA9IEluc3Bl
Y3RvclV0aWxpdGllczo6YXNDU1NTdHlsZVJ1bGUoc3R5bGVCYXNlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRSdWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChwYXJzZWRSdWxl
LT5zdHlsZSgpID09IGxpdmVTdHlsZSkgeworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0
eWxlKCktPmNzc1RleHQoKSAhPSBsaXZlU3R5bGUtPmNzc1RleHQoKSkKKyAgICAgICAgICAgICAg
ICBzZXRTdHlsZVRleHQobGl2ZVN0eWxlLCBsaXZlU3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2lzUmV2YWxpZGF0aW5nID0gZmFs
c2U7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0VGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCit7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBtX2xpdmVTdHlsZVNoZWV0LT5yZW1vdmUoaSk7CisKKyAgICBt
X2xpdmVTdHlsZVNoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCBtX2xpdmVTdHlsZVNoZWV0LT51c2VT
dHJpY3RQYXJzaW5nKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmVuc3VyZVRleHQoKSBjb25zdAoreworICAgIGlmIChtX3BhcnNlZFN0eWxlU2hl
ZXQuaGFzVGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyB0ZXh0Owor
ICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBpZiAoc3VjY2Vz
cykKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisKKyAgICByZXR1
cm4gc3VjY2VzczsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4
dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1
Y2Nlc3MgPSBpbmxpbmVTdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICBzdWNjZXNzID0gcmVzb3VyY2VTdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYg
KHN1Y2Nlc3MpCisgICAgICAgICpyZXN1bHQgPSB0ZXh0OworICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEluc3BlY3RvclV0aWxpdGllczo6cmVz
b3VyY2VDb250ZW50Rm9yVVJMKG1fbGl2ZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIG93bmVyRG9j
dW1lbnQoKSwgcmVzdWx0KTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVT
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBOb2RlKiBvd25lck5v
ZGUgPSBtX2xpdmVTdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCBvd25lck5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFtZSgpLmxvd2Vy
KCkgIT0gInN0eWxlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpyZXN1bHQgPSBvd25l
ckVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCit7CisgICAgcmV0dXJuIGVu
c3VyZVRleHQoKSAmJiBtX3BhcnNlZFN0eWxlU2hlZXQuZW5zdXJlU291cmNlRGF0YShsaXZlU3R5
bGVTaGVldCgpLT5vd25lck5vZGUoKSk7Cit9CisKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5
bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQoreworICAgIFN0cmluZyB0
ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgbV9saXZlU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZXMg
PSBtX2xpdmVTdHlsZVNoZWV0LT5jc3NSdWxlcygpOworICAgIEFTU0VSVChydWxlcy0+bGVuZ3Ro
KCkpOworICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NT
dHlsZVJ1bGUocnVsZXMtPml0ZW0ocnVsZXMtPmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVChy
dWxlKTsKKworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQorICAgICAgICB0ZXh0ICs9ICJcbiI7CisK
KyAgICB0ZXh0ICs9IHNlbGVjdG9yOworICAgIHRleHQgKz0gIiB7fSI7CisgICAgbV9wYXJzZWRT
dHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisKKyAgICByZXR1cm4gcnVsZTsKK30KKworQ1NTU3R5
bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBpZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKK3sKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUg
PSBydWxlRm9ySWQoaWQpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IEluc3BlY3RvclV0aWxpdGllczo6cGFyZW50U3R5
bGVTaGVldChydWxlKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3VyZVBhcnNlZERhdGFS
ZWFkeSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJ1bGUtPnNldFNlbGVjdG9yVGV4dChz
ZWxlY3Rvcik7CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHN0
eWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgpKTsKKyAgICBpZiAoIXNvdXJjZURhdGEpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgU3RyaW5nJiBzaGVldFRleHQgPSBtX3BhcnNl
ZFN0eWxlU2hlZXQudGV4dCgpOworICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0VGV4dCA9IHNoZWV0
VGV4dC5zdWJzdHJpbmcoMCwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpOwor
ICAgIG5ld1N0eWxlU2hlZXRUZXh0ICs9IHNlbGVjdG9yOworICAgIG5ld1N0eWxlU2hlZXRUZXh0
ICs9IHNoZWV0VGV4dC5yaWdodChzaGVldFRleHQubGVuZ3RoKCkgLSBzb3VyY2VEYXRhLT5zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldC5zZXRUZXh0KG5ld1N0
eWxlU2hlZXRUZXh0KTsKKyAgICByZXR1cm4gcnVsZTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0
cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsK
KyAgICBpZiAoIWlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBzdHlsZS0+c2V0Q3NzVGV4dCh0ZXh0LCBlYyk7CisgICAgaWYgKCFlYykK
KyAgICAgICAgZGlkU3R5bGVUZXh0Q2hhbmdlKGlkLCB0ZXh0KTsKKworICAgIHJldHVybiAhZWM7
Cit9CisKK0RvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9saXZlU3R5bGVTaGVldC0+ZG9jdW1lbnQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpkaWRTdHlsZVNoZWV0VGV4dENoYW5nZShjb25zdCBTdHJp
bmcmIG5ld1RleHQpCit7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQobmV3VGV4dCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGlkU3R5bGVUZXh0Q2hhbmdlKGNvbnN0
IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQoreworICAgIENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
ID0gSW5zcGVjdG9yVXRpbGl0aWVzOjpwYXJlbnRTdHlsZVNoZWV0KHN0eWxlKTsKKyAgICBTdHJp
bmcgcGF0Y2hlZFRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHRXaXRoQ2hh
bmdlZFN0eWxlKHBhcmVudFN0eWxlU2hlZXQsIHN0eWxlSWQsIG5ld1RleHQsICZwYXRjaGVkVGV4
dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisgICAgZGlkU3R5bGVTaGVl
dFRleHRDaGFuZ2UocGF0Y2hlZFRleHQpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
LCBjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJp
bmcqIHJlc3VsdCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9y
SWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHN0eWxlU291cmNl
RGF0YUZvcihzdHlsZSk7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0ID0gc291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2Uuc3RhcnQ7CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLmVuZDsKKyAgICBBU1NFUlQoYm9keVN0YXJ0IDw9IGJvZHlFbmQpOworCisg
ICAgU3RyaW5nIHRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpOworICAgIEFTU0VSVChi
b2R5RW5kIDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4Y2x1c2l2ZQorCisgICAg
U3RyaW5nIHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9keVN0YXJ0KTsKKyAgICBw
YXRjaGVkVGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRleHQgKz0gdGV4dC5zdWJz
dHJpbmcoYm9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3VsdCA9IHBhdGNoZWRUZXh0
OworICAgIHJldHVybiB0cnVlOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJ1bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAoreworICAgIGJvb2wgb2s7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBpZC50b1VJbnQoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGll
czo6YXNDU1NTdHlsZVJ1bGUobV9saXZlU3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlm
ICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5kZXggPT0gY3Vy
cmVudEluZGV4KQorICAgICAgICAgICAgcmV0dXJuIHJ1bGU7CisKKyAgICAgICAgKytjdXJyZW50
SW5kZXg7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7
CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKKyAgICBpZiAoIXJ1bGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7Cit9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFk
eSgpKQorICAgICAgICBzb3VyY2VEYXRhID0gc3R5bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCBmdWxsUnVsZU9yU3R5bGVJZChzdHlsZSksIHNvdXJj
ZURhdGEuZ2V0KCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwYXJlbnRTdHlsZVNoZWV0SWQi
LCBpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworCitJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50KQorICAgIDogSW5zcGVjdG9yU3R5
bGVTaGVldChpZCwgMCkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9zdHlsZVNv
dXJjZURhdGEoMCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSgic3R5bGUiLCB0ZXh0LCBlYyk7CisgICAg
bV9zdHlsZVNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICByZXR1cm4gIWVjOworfQorCit1bnNpZ25l
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnJ1bGVJbmRleEJ5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlID09IGlu
bGluZVN0eWxlKCkpOworICAgIHJldHVybiAwOyAvLyB0aGUgb25seSBzdHlsZSBpbiB0aGUgImZh
a2UiIHN0eWxlc2hlZXQKK30KKworQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlkID09ICIwIik7CisgICAgcmV0dXJuIGlubGluZVN0eWxlKCk7Cit9CisK
K1JlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6c3R5bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dAoreworICAgIEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsKKyAgICByZXR1cm4gbV9z
dHlsZVNvdXJjZURhdGE7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQoreworICAgIGlmIChtX3N0eWxlU291cmNlRGF0
YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1
Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhzb3VyY2VEYXRhLmdldCgpKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3R5bGVTb3VyY2VE
YXRhID0gc291cmNlRGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdl
cyhDU1NTdHlsZVNvdXJjZURhdGEqIHJlc3VsdCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgc3R5bGVBdHRyaWJ1dGVOYW1lLCAoInN0eWxlIikpOworCisgICAgaWYgKCFtX2Vs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBT
dHJpbmcgc3R5bGVUZXh0ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkt
PmdldEF0dHJpYnV0ZShzdHlsZUF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzdHlsZVRleHQuaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAg
ICAgICByZXN1bHQtPnN0eWxlQm9keVJhbmdlLmVuZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcERl
Y2xhcmF0aW9uID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIENT
U1BhcnNlciBwOworICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCks
IHN0eWxlVGV4dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitJbnNwZWN0b3JD
U1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpCisgICAgOiBtX2Zyb250ZW5kKGZyb250ZW5kKQor
ICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKKyAgICAsIG1fbGFzdFN0eWxlU2hlZXRJZCgxKQor
ICAgICwgbV9sYXN0UnVsZUlkKDEpCisgICAgLCBtX2xhc3RTdHlsZUlkKDEpCit7CisgICAgbV9k
b21BZ2VudC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7Cit9CisKK0luc3BlY3RvckNTU0FnZW50Ojp+
SW5zcGVjdG9yQ1NTQWdlbnQoKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcigwKTsK
K30KKworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChsb25nIG5vZGVJ
ZCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7Cisg
ICAgcmV0dXJuICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9E
RSkgPyAwIDogc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQorCisvLyBbcmVxXSBJbnNw
ZWN0b3JDU1NBZ2VudAorUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCit7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgaWYgKCFydWxlTGlzdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZUxpc3QtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxp
dGllczo6YXNDU1NTdHlsZVJ1bGUocnVsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1
bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoSW5zcGVjdG9yVXRpbGl0aWVzOjpw
YXJlbnRTdHlsZVNoZWV0KHJ1bGUpKTsKKyAgICAgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpCisg
ICAgICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JSdWxlKHBhcmVudFN0
eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSwgcnVsZSkpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFJ1
bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkK
K3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JF
bGVtZW50KGVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAqcmVzdWx0ID0gYnVpbGRBcnJheUZv
clJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRG
b3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKTsKKyAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElD
X1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVk
b0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKKyAgICAgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgaWYg
KG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXROdW1iZXIoInBzZXVkb0lkIiwg
c3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5z
ZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgp
KSk7CisgICAgICAgICAgICAoKnJlc3VsdCktPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJlbGVh
c2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2Rl
SWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9
IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpOworfQorCisvLyBzdGF0aWMK
K0VsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmlzTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgTm9kZSogbm9kZSA9
IHN0YXRpY19jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4oc3R5bGUpLT5ub2RlKCk7
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obm9kZSktPmdldElubGluZVN0eWxlRGVjbCgpICE9IHN0eWxlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
OworfQorCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0Fn
ZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBOb2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOworICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXQuZW5kKCkpIHsKKyAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hlZXRJZCA9IFN0
cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOworICAgICAgICBpZiAoIXN0eWxlKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShuZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQpOworICAgICAg
ICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGVsZW1lbnQsIGluc3BlY3RvclN0eWxl
U2hlZXQpOworICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChuZXdTdHlsZVNo
ZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5
bGVTaGVldC5nZXQoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0
KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldElubGluZVN0eWxlRm9yTm9kZTIo
bG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKQoreworICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSog
c3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50KTsKKyAgICBpZiAoIXN0
eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsgLy8gPz8/CisKKyAgICAqc3R5bGUgPSBzdHlsZVNo
ZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGVsZW1lbnQtPnN0eWxlKCkpOworfQorCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBl
bGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCkt
PmRlZmF1bHRWaWV3KCk7CisgICAgaWYgKCFkZWZhdWx0VmlldykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgKnN0eWxlID0gYnVpbGRPYmplY3RGb3JTdHlsZShkZWZhdWx0Vmlldy0+Z2V0Q29tcHV0
ZWRTdHlsZShlbGVtZW50LCAiIikuZ2V0KCksICIiKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6Z2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9y
SWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpIHsKKyAgICAgICAgKnN0eWxlID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gaW5oZXJpdGVkU3R5bGVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgp
OworICAgIEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7
CisgICAgd2hpbGUgKHBhcmVudEVsZW1lbnQpIHsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcGFyZW50U3R5bGUgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBp
ZiAocGFyZW50RWxlbWVudC0+c3R5bGUoKSAmJiBwYXJlbnRFbGVtZW50LT5zdHlsZSgpLT5sZW5n
dGgoKSkgeworICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBz
dHlsZVNoZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KGVsZW1lbnQpOworICAgICAgICAgICAg
aWYgKHN0eWxlU2hlZXQpCisgICAgICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldE9iamVjdCgi
aW5saW5lU3R5bGUiLCBzdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHN0eWxlU2hlZXQt
PmlubGluZVN0eWxlKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIENTU1N0eWxlU2VsZWN0b3Iq
IHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNl
bGVjdG9yKCk7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVz
ID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIGZh
bHNlLCB0cnVlKTsKKyAgICAgICAgcGFyZW50U3R5bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVs
ZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7Cisg
ICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChwYXJlbnRTdHlsZS5yZWxlYXNlKCkp
OworICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgp
OworICAgIH0KKyAgICAqc3R5bGUgPSBpbmhlcml0ZWRTdHlsZXMucmVsZWFzZSgpOworfQorCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJh
eT4qIHN0eWxlcykKK3sKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4m
IGRvY3VtZW50cyA9IGRvbUFnZW50KCktPmRvY3VtZW50cygpOworICAgIGZvciAoTGlzdEhhc2hT
ZXQ8UmVmUHRyPERvY3VtZW50PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGRvY3VtZW50cy5iZWdp
bigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgU3R5bGVTaGVldExp
c3QqIGxpc3QgPSAoKml0KS0+c3R5bGVTaGVldHMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQq
IHN0eWxlU2hlZXQgPSBsaXN0LT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQt
PmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVl
dCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0
eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgICAgICAgICAgICAgKCpzdHlsZXMpLT5wdXNo
U3RyaW5nKGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorfQorCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6
YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBSZWZQdHI8
SW5zcGVjdG9yU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVldCA9IG1fY3NzU3R5bGVTaGVl
dFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoc3R5bGVTaGVldCk7CisgICAgaWYgKCFpbnNwZWN0
b3JTdHlsZVNoZWV0KSB7CisgICAgICAgIFN0cmluZyBpZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFz
dFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmNyZWF0ZShpZCwgc3R5bGVTaGVldCk7CisgICAgICAgIG1faWRUb0luc3Bl
Y3RvclN0eWxlU2hlZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9j
c3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChzdHlsZVNoZWV0LCBpbnNwZWN0
b3JTdHlsZVNoZWV0KTsKKyAgICB9CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0
KCk7Cit9CisKK0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjppbnNwZWN0
b3JTdHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZUlm
QWJzZW50KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHls
ZVNoZWV0ID0gbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoZG9jdW1lbnQpOwor
ICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCAmJiBjcmVhdGVJZkFic2VudCkgeworICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxl
bWVudCA9IGRvY3VtZW50LT5jcmVhdGVFbGVtZW50KCJzdHlsZSIsIGVjKTsKKyAgICAgICAgaWYg
KCFlYykKKyAgICAgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJ0eXBlIiwgInRl
eHQvY3NzIiwgZWMpOworICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAgZG9jdW1lbnQtPmhl
YWQoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAgICAgIGlmIChlYykKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMg
PSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKTsKKyAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHN0eWxlU2hlZXRzLT5pdGVtKHN0eWxlU2hlZXRzLT5sZW5ndGgoKSAtIDEpOworICAgICAg
ICBpZiAoIXN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxD
U1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisgICAgICAgIFN0cmluZyBpZCA9IFN0cmluZzo6
bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVl
dCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShpZCwgY3NzU3R5bGVTaGVldCk7CisgICAg
ICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0
KTsKKyAgICAgICAgbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChjc3NT
dHlsZVNoZWV0LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9kb2N1bWVudFRvSW5z
cGVjdG9yU3R5bGVTaGVldC5zZXQoZG9jdW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAg
IH0KKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKK30KKworSW5zcGVjdG9y
U3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRGb3JJZChjb25zdCBTdHJp
bmcmIHN0eWxlU2hlZXRJZCkKK3sKKyAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDo6aXRl
cmF0b3IgaXQgPSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElkKTsK
KyAgICByZXR1cm4gaXQgPT0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSA/IDAgOiBp
dC0+c2Vjb25kLmdldCgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNo
ZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
c3R5bGVTaGVldE9iamVjdCkKK3sKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYgKCFpbnNw
ZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICAqc3R5bGVTaGVldE9iamVj
dCA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChpbnNwZWN0b3JTdHlsZVNoZWV0LT5vd25lckRv
Y3VtZW50KCksIGluc3BlY3RvclN0eWxlU2hlZXQtPmxpdmVTdHlsZVNoZWV0KCkpOworfQorCit2
b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBz
dHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7
CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBp
bnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOworfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRTdHlsZVRleHQyKGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IGlkUGFydHM7CisgICAgZnVsbFN0eWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsK
KyAgICBBU1NFUlQoaWRQYXJ0cy5zaXplKCkgPT0gMik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKGlkUGFydHMuYXQoMCkp
OworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHlsZUZv
cklkKGlkUGFydHMuYXQoMSkpOworICAgIGlmICghc3R5bGUpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0U3R5bGVUZXh0KHN0eWxlLCB0ZXh0KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojp0
b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5nJiwgbG9uZywgYm9vbCkKK3sKK30KKwordm9pZCBJ
bnNwZWN0b3JDU1NBZ2VudDo6c2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIHJ1bGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQor
eworICAgIFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7CisgICAgcnVsZUlkLnNwbGl0KCc6JywgaWRQ
YXJ0cyk7CisgICAgQVNTRVJUKGlkUGFydHMuc2l6ZSgpID09IDIpOworCisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChpZFBhcnRz
LmF0KDApKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsK
KworICAgIENTU1N0eWxlUnVsZSogbW9kaWZpZWRSdWxlID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+
c2V0UnVsZVNlbGVjdG9yKGlkUGFydHMuYXQoMSksIHNlbGVjdG9yKTsKKyAgICBpZiAoIW1vZGlm
aWVkUnVsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9y
UnVsZShpbnNwZWN0b3JTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCksIG1vZGlmaWVkUnVsZSk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4
dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
cmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSBkb21BZ2VudCgpLT5ub2RlRm9ySWQoY29udGV4
dE5vZGVJZCk7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gaW5zcGVjdG9yU3R5bGVTaGVldEZv
ckRvY3VtZW50KG5vZGUtPmRvY3VtZW50KCksIHRydWUpOworICAgIENTU1N0eWxlUnVsZSogbmV3
UnVsZSA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IpOworICAgIGlmIChu
ZXdSdWxlKQorICAgICAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0
eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSwgbmV3UnVsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5
PiogY3NzUHJvcGVydGllcykKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRp
ZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu
dW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJv
cGVydHlOYW1lU3RyaW5nc1tpXSk7CisKKyAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMu
cmVsZWFzZSgpOworfQorCisvLyBbcmVxXSBJbnNwZWN0b3JET01BZ2VudAorLy8gW3JlcV0gSW5z
cGVjdG9yQ1NTQWdlbnQKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBD
U1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwor
ICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCkpOwor
ICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgp
KTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7Cisg
ICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUoKSk7CisgICAg
U3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+dGV4
dCgmdGV4dCk7CisgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0
ZXh0IiwgdGV4dCk7CisKKyAgICByZXN1bHQtPnNldE51bWJlcigiZG9jdW1lbnRFbGVtZW50SWQi
LCBkb21BZ2VudCgpLT5pZEZvckRvY3VtZW50Tm9kZShvd25lckRvY3VtZW50KSk7CisgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUoc3R5bGVT
aGVldCwgdHJ1ZSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGJ1aWxk
QXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7CisgICAgcmVzdWx0LT5zZXRBcnJh
eSgiY3NzUnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNlKCkpOworICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZSgpOworfQorCisvLyBbcmVxXSBJbnNwZWN0b3JET01BZ2VudAorLy8gW3JlcV0gSW5zcGVj
dG9yQ1NTQWdlbnQKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1
bGUqIHJ1bGUpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzZXJBZ2VudCwg
KCJ1c2VyLWFnZW50IikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1c2VyLCAo
InVzZXIiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIGluc3BlY3RvciwgKCJp
bnNwZWN0b3IiKSk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJzZWxlY3RvclRl
eHQiLCBydWxlLT5zZWxlY3RvclRleHQoKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoImNzc1Rl
eHQiLCBydWxlLT5jc3NUZXh0KCkpOworICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzb3VyY2VMaW5l
IiwgcnVsZS0+c291cmNlTGluZSgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiZG9jdW1lbnRV
UkwiLCBkb21BZ2VudCgpLT5kb2N1bWVudFVSTFN0cmluZyhvd25lckRvY3VtZW50KSk7CisKKyAg
ICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gSW5zcGVjdG9yVXRpbGl0aWVzOjpw
YXJlbnRTdHlsZVNoZWV0KHJ1bGUpOworICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0KSB7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0
U3RyaW5nKCJocmVmIiwgcGFyZW50U3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICAgICAgcGFyZW50
U3R5bGVTaGVldFZhbHVlLT5zZXRTdHJpbmcoImlkIiwgYmluZFN0eWxlU2hlZXQocGFyZW50U3R5
bGVTaGVldCktPmlkKCkpOworICAgICAgICByZXN1bHQtPnNldE9iamVjdCgicGFyZW50U3R5bGVT
aGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNlKCkpOworICAgIH0KKworICAgIFN0
cmluZyBvcmlnaW4oIiIpOworICAgIGlmIChwYXJlbnRTdHlsZVNoZWV0ICYmICFwYXJlbnRTdHls
ZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0LT5ocmVmKCkuaXNFbXB0eSgp
KQorICAgICAgICBvcmlnaW4gPSB1c2VyQWdlbnQ7CisgICAgZWxzZSBpZiAocGFyZW50U3R5bGVT
aGVldCAmJiBwYXJlbnRTdHlsZVNoZWV0LT5vd25lck5vZGUoKSAmJiBwYXJlbnRTdHlsZVNoZWV0
LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IikKKyAgICAgICAgb3JpZ2lu
ID0gdXNlcjsKKyAgICBlbHNlIHsKKyAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVT
aGVldEZvckRvYyA9IGluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChvd25lckRvY3VtZW50
LCBmYWxzZSk7CisgICAgICAgIGlmIChzdHlsZVNoZWV0Rm9yRG9jICYmIHBhcmVudFN0eWxlU2hl
ZXQgPT0gc3R5bGVTaGVldEZvckRvYy0+bGl2ZVN0eWxlU2hlZXQoKSkKKyAgICAgICAgICAgIG9y
aWdpbiA9IGluc3BlY3RvcjsKKyAgICB9CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoIm9yaWdpbiIs
IG9yaWdpbik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gY29udGFpbmVySW5zcGVjdG9yU3R5bGVTaGVldChydWxlLT5zdHlsZSgpKTsKKyAgICBBU1NF
UlQoaW5zcGVjdG9yU3R5bGVTaGVldCk7CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4g
c291cmNlRGF0YTsKKyAgICBpZiAoaW5zcGVjdG9yU3R5bGVTaGVldC0+ZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkpCisgICAgICAgIHNvdXJjZURhdGEgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zdHls
ZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7CisgICAgaWYgKHNvdXJjZURhdGEpIHsKKyAg
ICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9yU3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRh
LT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJz
ZWxlY3RvckVuZE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7Cisg
ICAgfQorCisgICAgU3RyaW5nIGZ1bGxJZCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmZ1bGxSdWxl
T3JTdHlsZUlkKHJ1bGUtPnN0eWxlKCkpOworICAgIGJvb2wgYmluZCA9IG9yaWdpbiAhPSB1c2Vy
QWdlbnQgJiYgb3JpZ2luICE9IHVzZXI7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxlIiwg
aW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7
CisgICAgaWYgKGJpbmQpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGZ1bGxJZCk7
CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxl
cyhFbGVtZW50KiBlbGVtZW50KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHN0eWxl
QXR0cmlidXRlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgTmFtZWROb2RlTWFw
KiBhdHRyaWJ1dGVzID0gZWxlbWVudC0+YXR0cmlidXRlcygpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGF0dHJpYnV0ZXMgJiYgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVzLT5hdHRyaWJ1dGVJdGVtKGkp
OworICAgICAgICBpZiAoYXR0cmlidXRlLT5zdHlsZSgpKSB7CisgICAgICAgICAgICBTdHJpbmcg
YXR0cmlidXRlTmFtZSA9IGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCk7CisgICAgICAgICAgICBzdHls
ZUF0dHJpYnV0ZXMtPnNldE9iamVjdChhdHRyaWJ1dGVOYW1lLnV0ZjgoKS5kYXRhKCksIGJ1aWxk
T2JqZWN0Rm9yU3R5bGUoYXR0cmlidXRlLT5zdHlsZSgpLCAiIikpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHN0eWxlQXR0cmlidXRlczsKK30KKworLy8gc3RhdGljCitQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQs
IENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIGlmICghZnVs
bFN0eWxlSWQuaXNFbXB0eSgpKQorICAgICAgICByZXN1bHQtPnNldFN0cmluZygiaWQiLCBmdWxs
U3R5bGVJZCk7CisKKyAgICByZXN1bHQtPnNldFN0cmluZygid2lkdGgiLCBzdHlsZS0+Z2V0UHJv
cGVydHlWYWx1ZSgid2lkdGgiKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoImhlaWdodCIsIHN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5
U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7CisKKyAgICBpZiAoc291cmNlRGF0YSkgewor
ICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHls
ZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJlbmRPZmZzZXQi
LCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQpOworICAgICAgICBwcm9wZXJ0eURhdGEg
PSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOworICAgIH0KKyAgICBwb3B1bGF0ZU9iamVjdFdp
dGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5nZXQoKSwgcHJvcGVydHlEYXRhKTsKKwor
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCisvLyBzdGF0aWMKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURl
Y2xhcmF0aW9uKiBzdHlsZSwgSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+KiBwcm9wZXJ0eURhdGEpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIFJlZlB0cjxJ
bnNwZWN0b3JPYmplY3Q+IHNob3J0aGFuZFZhbHVlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgSGFzaE1hcDxTdHJpbmcsUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0
eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5k
U2hvcnRoYW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlOYW1lczsKKyAg
ICBpZiAocHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlEYXRhLT5iZWdpbigpOyBpdCAh
PSBwcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSAqaXQ7CisgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBwcm9wZXJ0aWVzLT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKKyAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNv
dXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0
cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFs
dWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInByaW9yaXR5IiwgcHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgPyAiaW1wb3J0YW50IiA6ICIi
KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJhY3RpdmUiKTsK
KyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50
cnkucGFyc2VkT2spOworICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3RhcnRPZmZz
ZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5z
ZXROdW1iZXIoImVuZE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2UuZW5kKTsKKyAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7CisgICAgICAgICAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAgIFN0cmlu
ZyBzaG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7
CisgICAgICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0
aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZFNo
b3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZFZh
bHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFu
ZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZyxSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9w
ZXJ0eS5maW5kKG5hbWUpOworICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFt
ZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGFjdGl2
ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7CisgICAgICAgICAg
ICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVBy
b3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAg
ICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoc291cmNlUHJv
cGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
IHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJuYW1lIiwgbmFtZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVl
Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0
U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1lIikpOwor
ICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0
eUltcGxpY2l0KG5hbWUpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9r
IiwgdHJ1ZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIp
OworICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5k
KG5hbWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hv
cnRoYW5kKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0
aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRz
LmFkZChzaG9ydGhhbmQpOworICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmco
c2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7
CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVl
cyk7Cit9CisKKy8vIHN0YXRpYworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yQ1NTQWdlbnQ6Omxv
bmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5n
JiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0aWVzOwor
ICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFByb3BlcnRpZXM7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbmRpdmlk
dWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJvcGVydGll
cy5jb250YWlucyhpbmRpdmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0
aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFkZChpbmRpdmlkdWFsUHJv
cGVydHkpOworICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlkdWFsUHJvcGVydHkpOwor
ICAgIH0KKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworLy8gc3RhdGljCitTdHJpbmcgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQoreworICAgIFN0cmluZyB2YWx1ZSA9
IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBpZiAodmFs
dWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9
IHN0eWxlLT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0
aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN0eWxlLT5pc1Byb3BlcnR5SW1wbGlj
aXQoaW5kaXZpZHVhbFByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIFN0cmluZyBpbmRpdmlkdWFsVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShp
bmRpdmlkdWFsUHJvcGVydHkpOworICAgICAgICAgICAgaWYgKGluZGl2aWR1YWxWYWx1ZSA9PSAi
aW5pdGlhbCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodmFs
dWUubGVuZ3RoKCkpCisgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCIgIik7CisgICAgICAg
ICAgICB2YWx1ZS5hcHBlbmQoaW5kaXZpZHVhbFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gdmFsdWU7Cit9CisKKy8vIHN0YXRpYworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50
OjpzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+
Z2V0UHJvcGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5
LmlzRW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBz
dHlsZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhh
bmQoaW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5
UHJpb3JpdHkoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorICAgIHJldHVybiBwcmlvcml0eTsKK30KKworSW5zcGVjdG9yU3R5bGVTaGVl
dCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmNvbnRhaW5lckluc3BlY3RvclN0eWxlU2hlZXQoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGlubGluZVN0
eWxlRWxlbWVudChzdHlsZSk7CisgICAgaWYgKGVsZW1lbnQpCisgICAgICAgIHJldHVybiBhc0lu
c3BlY3RvclN0eWxlU2hlZXQoZWxlbWVudCk7CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRT
dHlsZVNoZWV0ID0gSW5zcGVjdG9yVXRpbGl0aWVzOjpwYXJlbnRTdHlsZVNoZWV0KHN0eWxlKTsK
KyAgICBpZiAoIXBhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0
dXJuIGJpbmRTdHlsZVNoZWV0KHBhcmVudFN0eWxlU2hlZXQpOworfQorCit2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgTm9kZVRvSW5z
cGVjdG9yU3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXQuZmluZChub2RlKTsKKyAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX25vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXQucmVtb3ZlKG5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRSZW1v
dmVEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgbV9kb2N1bWVudFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5yZW1vdmUoZG9jdW1lbnQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNTU0FnZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMThiYzVmZQot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgK
QEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckNTU0Fn
ZW50X2gKKyNkZWZpbmUgSW5zcGVjdG9yQ1NTQWdlbnRfaAorCisjaW5jbHVkZSAiQ1NTUGFyc2Vy
LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yRE9NQWdlbnQu
aCIKKyNpbmNsdWRlICJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JW
YWx1ZXMuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbnRh
aW5lck5vZGU7CitjbGFzcyBDU1NSdWxlOworY2xhc3MgQ1NTUnVsZUxpc3Q7CitjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVl
dDsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBFdmVudDsKK2NsYXNzIEluc3BlY3RvckRPTUFnZW50
OworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBNYXRjaEpvYjsKK2NsYXNzIE5hbWVO
b2RlTWFwOworY2xhc3MgTm9kZTsKK2NsYXNzIFBhZ2U7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9S
KQorCitjbGFzcyBQYXJzZWRTdHlsZVNoZWV0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+IFNvdXJjZURhdGE7CisgICAgUGFyc2VkU3R5
bGVTaGVldCgpOworCisgICAgQ1NTU3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3R5bGVTaGVldEJ5UGFyc2VyOyB9CisgICAgY29uc3QgU3RyaW5nJiB0ZXh0KCkg
Y29uc3QgeyByZXR1cm4gbV90ZXh0OyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFN0cmluZyYg
dGV4dCk7CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXh0OyB9Cisg
ICAgU291cmNlRGF0YSogc291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlRGF0YS5n
ZXQoKTsgfQorICAgIHZvaWQgc2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+IHNv
dXJjZURhdGEpOworICAgIGJvb2wgaGFzU291cmNlRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc291
cmNlRGF0YTsgfQorICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YShOb2RlKiBvd25lck5vZGUpOwor
ICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0YUF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB2b2lkIGV4dHJhY3RSYW5nZXMoQ1NTU3R5
bGVTaGVldCosIGNvbnN0IFN0eWxlUnVsZVJhbmdlTWFwJiwgU291cmNlRGF0YSogcmVzdWx0KTsK
KworICAgIC8vIFN0eWxlU2hlZXQgY29uc3RydWN0ZWQgd2hpbGUgcGFyc2luZyBtX3RleHQuCisg
ICAgQ1NTU3R5bGVTaGVldCogbV9zdHlsZVNoZWV0QnlQYXJzZXI7CisgICAgU3RyaW5nIG1fdGV4
dDsKKyAgICBib29sIG1faGFzVGV4dDsKKyAgICBPd25QdHI8U291cmNlRGF0YT4gbV9zb3VyY2VE
YXRhOworfTsKKworY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldCA6IHB1YmxpYyBSZWZDb3VudGVk
PEluc3BlY3RvclN0eWxlU2hlZXQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JTdHlsZVNoZWV0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVl
dCogbGl2ZVN0eWxlU2hlZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
c3BlY3RvclN0eWxlU2hlZXQoaWQsIGxpdmVTdHlsZVNoZWV0KSk7CisgICAgfQorCisgICAgSW5z
cGVjdG9yU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBsaXZlU3R5
bGVTaGVldCk7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVy
biBtX2lkOyB9CisgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBsaXZlU3R5bGVTaGVldCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGl2ZVN0eWxlU2hlZXQ7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdGV4dChT
dHJpbmcqIHJlc3VsdCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldFRleHQoY29uc3QgU3Ry
aW5nJik7CisgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgp
IGNvbnN0OworICAgIHZpcnR1YWwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc3R5bGVTb3Vy
Y2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBtX3Bh
cnNlZFN0eWxlU2hlZXQuc3R5bGVTb3VyY2VEYXRhQXQocnVsZUluZGV4QnlTdHlsZShzdHlsZSkp
OyB9CisgICAgdmlydHVhbCBTdHJpbmcgZnVsbFJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIGlkKCkgKyAiOiIgKyBydWxlT3JTdHlsZUlkKHN0
eWxlKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IpOworICAgIHZpcnR1YWwgQ1NTU3R5bGVSdWxlKiBzZXRSdWxlU2VsZWN0b3IoY29u
c3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgdmlydHVhbCBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZp
cnR1YWwgQ1NTU3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworCisgICAgdmlydHVhbCBQYXNz
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIFN0cmluZyBydWxlT3JT
dHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHVuc2lnbmVkIGluZGV4
ID0gcnVsZUluZGV4QnlTdHlsZShzdHlsZSk7IHJldHVybiBpbmRleCA9PSBVSU5UX01BWCA/ICIi
IDogU3RyaW5nOjpudW1iZXIoaW5kZXgpOyB9CisgICAgdmlydHVhbCB2b2lkIGRpZFN0eWxlVGV4
dENoYW5nZShjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIG5ld1RleHQpOworICAgIHZp
cnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkaWRTdHlsZVNoZWV0VGV4dENoYW5nZShjb25zdCBT
dHJpbmcmIG5ld1RleHQpOworICAgIGJvb2wgc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxl
KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmV3
U3R5bGVUZXh0LCBTdHJpbmcqIHJlc3VsdCk7CisgICAgQ1NTU3R5bGVSdWxlKiBmaW5kTGl2ZVJ1
bGVXaXRoU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZvaWQgcmVidWlsZFBhcnNl
ZFN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0VGV4dCk7CisgICAgdm9pZCByZXZh
bGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIGJvb2wgZW5zdXJlVGV4dCgp
IGNvbnN0OworICAgIGJvb2wgcmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkg
Y29uc3Q7CisgICAgYm9vbCBpbmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3Q7CisgICAgYm9vbCBzdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CisKKyAg
ICBTdHJpbmcgbV9pZDsKKyAgICBDU1NTdHlsZVNoZWV0KiBtX2xpdmVTdHlsZVNoZWV0OworICAg
IGJvb2wgbV9pc1JldmFsaWRhdGluZzsKKyAgICBtdXRhYmxlIFBhcnNlZFN0eWxlU2hlZXQgbV9w
YXJzZWRTdHlsZVNoZWV0OworfTsKKworCitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5s
aW5lU3R5bGUgOiBwdWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldAoreworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShpZCwgZWxl
bWVudCkpOworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShj
b25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50KTsKKyAgICBDU1NTdHlsZURlY2xhcmF0
aW9uKiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+c3R5bGUoKTsgfQor
ICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2Vs
ZW1lbnQtPmRvY3VtZW50KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGV4dChjb25zdCBTdHJp
bmcmKSB7IEFTU0VSVChmYWxzZSk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBz
ZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgdGV4dCk7Cisg
ICAgdmlydHVhbCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGFGb3Io
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OworICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3R5bGVUZXh0Q2hhbmdlKGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYgbmV3VGV4dCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBib29sIGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKENTU1N0eWxlU291cmNlRGF0YSogcmVz
dWx0KTsKKworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3Vy
Y2VEYXRhPiBtX3N0eWxlU291cmNlRGF0YTsKK307CisKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50
IDogcHVibGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ1NTQWdlbnQ+LCBwdWJsaWMgSW5zcGVjdG9y
RE9NQWdlbnQ6OkRPTUxpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JDU1NBZ2VudD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgSW5z
cGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBJbnNwZWN0b3JDU1NBZ2VudChmcm9udGVuZCwgZG9tQWdlbnQpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxl
U291cmNlRGF0YSogPSAwKTsKKworICAgIEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckZyb250
ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KTsKKyAgICB+SW5zcGVj
dG9yQ1NTQWdlbnQoKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGdldE1hdGNoZWRS
dWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxlcyk7
CisgICAgdm9pZCBnZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVm
UHRyPEluc3BlY3RvckFycmF5PiogcnVsZXMpOworICAgIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVz
Rm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7Cisg
ICAgdm9pZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yVmFsdWU+KiBzdHlsZSk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9u
ZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKKyAgICB2b2lkIGdldElu
aGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiByZXN1bHQpOworICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBzdHlsZXMpOworICAgIHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNo
ZWV0SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBzZXRTdHls
ZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4
dCk7CisgICAgdm9pZCBzZXRTdHlsZVRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQg
dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGlu
YWwsIGJvb2wgZGlzYWJsZWQpOworICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJp
bmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogcmVzdWx0KTsKKyAgICB2b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwg
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsK
KyAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5
PiogcmVzdWx0KTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQ
dHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDsKKyAg
ICB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNo
ZWV0PiA+IENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7CisgICAgdHlwZWRl
ZiBIYXNoTWFwPE5vZGUqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxl
PiA+IE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7IC8vIGZvciBib2d1cyAic3R5bGVzaGVl
dHMiIHdpdGggaW5saW5lIG5vZGUgc3R5bGVzCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxE
b2N1bWVudD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9JbnNwZWN0
b3JTdHlsZVNoZWV0TWFwOyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKworICAgIHN0
YXRpYyBFbGVtZW50KiBpbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwor
ICAgIHN0YXRpYyB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHls
ZURlY2xhcmF0aW9uKiwgSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0
eVNvdXJjZURhdGE+KiBwcm9wZXJ0eURhdGEpOworICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5k
VmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVy
dHkpOworICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJh
dGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworICAgIHN0YXRpYyBWZWN0
b3I8U3RyaW5nPiBsb25naGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0
IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCk7Cisg
ICAgRWxlbWVudCogZWxlbWVudEZvcklkKGxvbmcgbm9kZUlkKTsKKyAgICBJbnNwZWN0b3JET01B
Z2VudCogZG9tQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CisKKyAg
ICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7Cisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERv
Y3VtZW50KiwgYm9vbCBjcmVhdGVJZkFic2VudCk7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCog
c3R5bGVTaGVldEZvcklkKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKTsKKworICAgIFBhc3NS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQsIENTU1N0eWxlU2hlZXQqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NT
dHlsZVJ1bGUqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9y
UnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCk7
CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogY29udGFpbmVySW5zcGVjdG9yU3R5bGVTaGVldChD
U1NTdHlsZURlY2xhcmF0aW9uKik7CisKKyAgICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlz
dGVuZXIgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3Vt
ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOworCisgICAg
SW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckRPTUFn
ZW50PiBtX2RvbUFnZW50OworCisgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAgbV9pZFRv
SW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNo
ZWV0TWFwIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBOb2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0TWFwIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBE
b2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHls
ZVNoZWV0OworCisgICAgbG9uZyBtX2xhc3RTdHlsZVNoZWV0SWQ7CisgICAgbG9uZyBtX2xhc3RS
dWxlSWQ7CisgICAgbG9uZyBtX2xhc3RTdHlsZUlkOworfTsKKworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNTU0FnZW50X2gp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGYyZWUyYzEu
LjUyZWUyY2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBA
IC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVk
ZSAiSW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0
b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCkBAIC01MjIsNiArNTIzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250
cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdl
bnRzKCk7CiAgICAgbV9mcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7
CiAgICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9jc3NTdG9yZS5n
ZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9jc3NBZ2VudCA9IEluc3BlY3RvckNTU0Fn
ZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSwgbV9kb21BZ2VudC5nZXQoKSk7CiAKICNpZiBF
TkFCTEUoREFUQUJBU0UpCiAgICAgbV9zdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JTdG9yYWdlQWdl
bnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKQEAgLTYzNCw2ICs2MzYsMTAgQEAgdm9pZCBJ
bnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAgICAg
ICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CiAgICAgbV9kb21BZ2VudC5jbGVhcigpOwogCisgICAg
aWYgKG1fY3NzQWdlbnQpCisgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7CisgICAgbV9jc3NB
Z2VudC5jbGVhcigpOworCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIGlmIChtX3N0b3JhZ2VB
Z2VudCkKICAgICAgICAgbV9zdG9yYWdlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKQEAgLTgwMyw2
ICs4MDksNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1l
bnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAg
IG1fZnJvbnRlbmQtPnJlc2V0KCk7CiAgICAgICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOwor
ICAgICAgICAgICAgbV9jc3NBZ2VudC0+cmVzZXQoKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShX
T1JLRVJTKQogICAgICAgICBtX3dvcmtlcnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNvbnRyb2xsZXIuaAppbmRleCA5ZTYzZjAxLi41MWUwNDU3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIEluc3BlY3Rv
ckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmRE
aXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTQWdl
bnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50Owog
Y2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOwpAQCAtMzA0LDYgKzMwNSw3IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwg
Ym9vbCogbmV3U3RhdGUpOwogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3Ry
aW5nJiBwYW5lbE5hbWUpOworICAgIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCgpIHsgcmV0
dXJuIG1fY3NzQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQo
KSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRM
aWZldGltZUFnZW50cygpOwogCkBAIC0zNjcsNiArMzY5LDcgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiAg
ICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+
IG1fZnJvbnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50Owog
ICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBSZWZQdHI8SW5z
cGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9y
Q1NTU3RvcmU+IG1fY3NzU3RvcmU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHAKaW5kZXggZjUxZGE3My4uOTlmYmM2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmNwcApAQCAtMjE3LDYgKzIxNyw3IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0
b3JET01BZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250CiAg
ICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCiAgICAgLCBt
X21hdGNoSm9ic1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1l
cikKKyAgICAsIG1fZG9tTGlzdGVuZXIoMCkKIHsKIH0KIApAQCAtMjM3LDYgKzIzOCwxMSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiAgICAgQVNTRVJUKCFtX2RvY3VtZW50cy5z
aXplKCkpOwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01MaXN0ZW5lcihET01M
aXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgbV9kb21MaXN0ZW5lciA9IGxpc3RlbmVyOworfQor
CiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQogewog
ICAgIGlmIChkb2MgPT0gbWFpbkZyYW1lRG9jdW1lbnQoKSkKQEAgLTMyNiw2ICszMzIsOCBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5v
ZGVzTWFwKQogICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKICAgICAgICAg
Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8Y29u
c3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIHN0b3BMaXN0ZW5pbmco
ZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICBpZiAobV9kb21MaXN0ZW5l
cikKKyAgICAgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURvY3VtZW50KGZyYW1lT3du
ZXItPmNvbnRlbnREb2N1bWVudCgpKTsKICAgICAgICAgY3NzU3RvcmUoKS0+cmVtb3ZlRG9jdW1l
bnQoZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOwogICAgIH0KIApAQCAtMzk4LDYgKzQw
NiwxMSBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxvbmcgaWQpCiAgICAg
cmV0dXJuIDA7CiB9CiAKK2xvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmlkRm9yRG9jdW1lbnROb2Rl
KE5vZGUqIGRvY05vZGUpCit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQo
ZG9jTm9kZSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldENoaWxkTm9kZXMobG9u
ZyBub2RlSWQpCiB7CiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCk7CkBAIC0x
MTAyLDYgKzExMTUsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2Rl
KE5vZGUqIG5vZGUpCiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCisgICAg
aWYgKG1fZG9tTGlzdGVuZXIpCisgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURPTU5v
ZGUobm9kZSk7CisKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMocGFyZW50
SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBwZWQgeWV0IC0+IG9ubHkgbm90
aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCiAgICAgICAgIGlmIChpbm5lckNoaWxkTm9k
ZUNvdW50KHBhcmVudCkgPT0gMSkKQEAgLTEyMzAsNiArMTI0NiwxMCBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpnZXRTdHlsZVNvdXJjZURhdGEobG9uZyBzdHlsZUlkLCBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PgogICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJib2R5UmFuZ2UiLCBib2R5UmFuZ2Up
OwogICAgIGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0KTsKICAgICBib2R5UmFuZ2UtPnNldE51bWJlcigiZW5kIiwgc291cmNlRGF0
YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZWxl
Y3RvclJhbmdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXN1bHQtPnNldE9i
amVjdCgic2VsZWN0b3JSYW5nZSIsIHNlbGVjdG9yUmFuZ2UpOworICAgIHNlbGVjdG9yUmFuZ2Ut
PnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7
CisgICAgc2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJlbmQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rv
ckxpc3RSYW5nZS5lbmQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydHlSYW5n
ZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRBcnJheSgicHJv
cGVydHlEYXRhIiwgcHJvcGVydHlSYW5nZXMpOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJj
ZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CkBAIC0xNDg4
LDE0ICsxNTA4LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWYKICAgICAqcnVsZU9iamVjdCA9
IGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpOwogfQog
Ci12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpCi17Ci0gICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVz
LT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOwotICAgICpjc3NQcm9wZXJ0aWVz
ID0gcHJvcGVydGllcy5yZWxlYXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgYm9vbCBiaW5kKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJl
c3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuaAppbmRleCA4OWM2ZmQwLi44YzBiMTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmgKQEAgLTgwLDYgKzgwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgIGNsYXNzIEluc3BlY3RvckRPTUFnZW50IDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAg
IHB1YmxpYzoKKyAgICAgICAgc3RydWN0IERPTUxpc3RlbmVyIHsKKyAgICAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZW1vdmVEb2N1bWVudChEb2N1bWVudCopID0gMDsKKyAgICAgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUqKSA9IDA7CisgICAgICAgIH07CisKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNwZWN0
b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01BZ2VudChj
c3NTdG9yZSwgZnJvbnRlbmQpKTsKQEAgLTEzMSw3ICsxMzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgc3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHN0eWxlT2JqZWN0KTsKICAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBydWxl
SWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwog
ICAgICAgICB2b2lkIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3Rl
ZE5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0
b3JBZmZlY3RzTm9kZSk7Ci0gICAgICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhS
ZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKTsKIAogICAgICAgICAvLyBNZXRo
b2RzIGNhbGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNl
dERvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCk7CkBAIC0xNDMsMTEgKzE0NywxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJh
Y3RlckRhdGEqKTsKIAogICAgICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOworICAg
ICAgICBsb25nIGlkRm9yRG9jdW1lbnROb2RlKE5vZGUqKTsKICAgICAgICAgbG9uZyBwdXNoTm9k
ZVBhdGhUb0Zyb250ZW5kKE5vZGUqIG5vZGUpOwogICAgICAgICB2b2lkIHB1c2hDaGlsZE5vZGVz
VG9Gcm9udGVuZChsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zy
b250ZW5kKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKICAgICAgICAgbG9uZyBp
bnNwZWN0ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShs
b25nIG5vZGVJZCk7CisgICAgICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4g
PiYgZG9jdW1lbnRzKCkgeyByZXR1cm4gbV9kb2N1bWVudHM7IH0KKyAgICAgICAgdm9pZCBzZXRE
T01MaXN0ZW5lcihET01MaXN0ZW5lciopOworCisgICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0
cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAg
dm9pZCBzdGFydExpc3RlbmluZyhEb2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTg1LDcgKzE5NCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSog
bm9kZSk7CiAKICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkgY29uc3Q7Ci0g
ICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0
OwogICAgICAgICBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0
b3JlOyB9CiAKICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRP
TUFnZW50PiopOwpAQCAtMjA0LDYgKzIxMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZGF0YSk7CiAKICAgICAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKKyAgICAgICAgRE9N
TGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIG1f
Y3NzU3RvcmU7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWViZWYxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclV0aWxpdGllcy5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJDYWNoZS5o
IgorI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuaCIKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJh
dGlvbi5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hl
ZXQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
IktVUkwuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdHlsZUJhc2Uu
aCIKKyNpbmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisK
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKy8vIHN0YXRpYworYm9vbCBJbnNwZWN0b3JVdGlsaXRpZXM6OnJl
c291cmNlQ29udGVudEZvclVSTChjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50KiBmcmFtZURvY3Vt
ZW50LCBTdHJpbmcqIHJlc3VsdCkKK3sKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOworICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGJ1ZmZlcjsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRl
bnRpZmllcih1cmwsIGZyYW1lRG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExv
YWRlcigpLT5yZXF1ZXN0VVJMKCkpKSB7CisgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFt
ZURvY3VtZW50LT5pbnB1dEVuY29kaW5nKCk7CisgICAgICAgIGJ1ZmZlciA9IGZyYW1lRG9jdW1l
bnQtPmZyYW1lKCktPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPm1haW5S
ZXNvdXJjZURhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0
cmluZyA9IHVybC5zdHJpbmcoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291
cmNlID0gZnJhbWVEb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+Y2FjaGVkUmVzb3Vy
Y2UodXJsU3RyaW5nKTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAgICAg
IGNhY2hlZFJlc291cmNlID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKKwor
ICAgICAgICBBU1NFUlQoY2FjaGVkUmVzb3VyY2UpOyAvLyBGSVhNRShhcGF2bG92KTogVGhpcyBt
aWdodCBiZSB0b28gYWdncmVzc2l2ZS4KKworICAgICAgICBib29sIGlzVW5wdXJnZWFibGUgPSB0
cnVlOworICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpIHsKKyAgICAg
ICAgICAgIC8vIElmIHRoZSByZXNvdXJjZSBpcyBwdXJnZWFibGUgdGhlbiBtYWtlIGl0IHVucHVy
Z2VhYmxlIHRvIGdldAorICAgICAgICAgICAgLy8gaXRzIGRhdGEuIFRoaXMgbWlnaHQgZmFpbCwg
aW4gd2hpY2ggY2FzZSB3ZSByZXR1cm4gYW4KKyAgICAgICAgICAgIC8vIGVtcHR5IFN0cmluZy4K
KyAgICAgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQor
ICAgICAgICAgICAgICAgIGlzVW5wdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoaXNVbnB1cmdlYWJsZSkgeworICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGNh
Y2hlZFJlc291cmNlLT5lbmNvZGluZygpOworICAgICAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVz
b3VyY2UtPmRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZmZXIpIHsKKyAg
ICAgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgICAgICBp
ZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xh
dGluMUVuY29kaW5nKCk7CisgICAgICAgICpyZXN1bHQgPSBlbmNvZGluZy5kZWNvZGUoYnVmZmVy
LT5kYXRhKCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBzdGF0aWMKK0NTU1N0eWxlU2hlZXQqIEluc3Bl
Y3RvclV0aWxpdGllczo6cGFyZW50U3R5bGVTaGVldChTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sK
KyAgICBpZiAoIXN0eWxlQmFzZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHlsZVNoZWV0
KiBzdHlsZVNoZWV0ID0gc3R5bGVCYXNlLT5zdHlsZXNoZWV0KCk7CisgICAgaWYgKHN0eWxlU2hl
ZXQgJiYgc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisKKyAgICByZXR1cm4gMDsKK30K
KworLy8gc3RhdGljCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NTdHls
ZVJ1bGUoU3R5bGVCYXNlKiBzdHlsZUJhc2UpCit7CisgICAgaWYgKCFzdHlsZUJhc2UtPmlzU3R5
bGVSdWxlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIENTU1J1bGUqIHJ1bGUgPSBzdGF0aWNf
Y2FzdDxDU1NSdWxlKj4oc3R5bGVCYXNlKTsKKyAgICBpZiAocnVsZS0+dHlwZSgpICE9IENTU1J1
bGU6OlNUWUxFX1JVTEUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVJ1bGUqPihydWxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvclV0aWxpdGllcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0
aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1NDBiOAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJp
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
RS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclV0aWxpdGllc19oCisjZGVmaW5lIEluc3BlY3Rv
clV0aWxpdGllc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaWYgRU5BQkxF
KElOU1BFQ1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNz
IERvY3VtZW50OworY2xhc3MgS1VSTDsKK2NsYXNzIFN0eWxlQmFzZTsKKworY2xhc3MgSW5zcGVj
dG9yVXRpbGl0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZUNvbnRlbnRG
b3JVUkwoY29uc3QgS1VSTCYgdXJsLCBEb2N1bWVudCogZnJhbWVEb2N1bWVudCwgU3RyaW5nKiBy
ZXN1bHQpOworICAgIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxl
QmFzZSopOworICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFz
ZSopOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElO
U1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclV0aWxpdGllc19oKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69484</attachid>
            <date>2010-10-01 10:29:19 -0700</date>
            <delta_ts>2010-10-04 12:42:17 -0700</delta_ts>
            <desc>[PATCH] Preliminary patch style fixed</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>122369</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IGQ0NjI3MTBlNTA1NzljZDIyMjE3MjRlMWVmODlmZWRjODQ5MGRjOTEKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVlYzdkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcwpAQCAtMCwwICsxLDIyIEBACitodG1s
IHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVy
dHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9y
dGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFu
dDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdp
dGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9i
b2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6
ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBi
b2R5IjsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQ
SS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzYzE1NDkKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDgxIEBACitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50
IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCisKKworPT09IENvbXB1dGVkIHN0eWxlIGZv
ciBib2R5ID09PQorCitzdHlsZQorZWxlbWVudC5zdHlsZSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1hdHRhY2htZW50Jzonc2Nyb2xsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWNsaXAnOidib3JkZXItYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLWNvbG9yJzoncmdiKDAsIDEyOCwgMCknXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J3BhZGRpbmctYm94J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uJzonMCUgMCUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0JzoncmVwZWF0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLXNpemUnOidhdXRvIGF1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JvcmRlci1ib3R0b20tY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1cyc6JzBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXMnOicwcHgnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1ib3R0b20tc3R5bGUnOidub25lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItYm90dG9tLXdpZHRoJzonMHB4J10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydib3JkZXItY29sbGFwc2UnOidzZXBhcmF0ZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLWxlZnQtY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLWxlZnQtc3R5bGUnOidub25lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItbGVmdC13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYm9yZGVyLXJpZ2h0LWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1yaWdodC1zdHlsZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci1yaWdodC13aWR0aCc6JzBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRvcC1jb2xvcic6J3JnYigyNDAsIDExLCAxNzApJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLWxlZnQtcmFkaXVzJzonMHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydib3JkZXItdG9wLXJpZ2h0LXJhZGl1cyc6JzBweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYm9yZGVyLXRvcC1zdHlsZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2JvcmRlci10b3Atd2lkdGgnOicwcHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2JvdHRvbSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2NhcHRpb24tc2lkZSc6J3RvcCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY2xlYXInOidu
b25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydjbGlwJzonYXV0byddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snY3Vyc29yJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZGly
ZWN0aW9uJzonbHRyJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2sn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2VtcHR5LWNlbGxzJzonc2hvdyddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snZmxvYXQnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wydmb250LWZhbWlseSc6J1RpbWVzJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXNp
emUnOicxMnB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXN0eWxlJzonbm9ybWFs
J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydmb250LXZhcmlhbnQnOidub3JtYWwnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZvbnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydoZWlnaHQnOic2MDBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
bGVmdCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2xldHRlci1zcGFjaW5nJzon
bm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaW5lLWhlaWdodCc6J25vcm1hbCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbGlzdC1zdHlsZS1pbWFnZSc6J25vbmUnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2xpc3Qtc3R5bGUtcG9zaXRpb24nOidvdXRzaWRlJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydsaXN0LXN0eWxlLXR5cGUnOidkaXNjJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tYm90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydtYXJnaW4tbGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFy
Z2luLXJpZ2h0JzonMTEwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi10b3An
Oic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21heC1oZWlnaHQnOidub25lJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXgtd2lkdGgnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydtaW4taGVpZ2h0JzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydt
aW4td2lkdGgnOicwcHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ29wYWNpdHknOicxJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydvcnBoYW5zJzonMiddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snb3V0bGluZS1jb2xvcic6J3JnYigyNDAsIDExLCAxNzApJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydvdXRsaW5lLXN0eWxlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snb3V0bGluZS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snb3Zl
cmZsb3cteCc6J3Zpc2libGUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ292ZXJmbG93LXkn
Oid2aXNpYmxlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwYWRkaW5nLWJvdHRvbSc6JzBw
eCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFkZGluZy1sZWZ0JzonMHB4J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWydwYWRkaW5nLXJpZ2h0JzonMHB4J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydwYWRkaW5nLXRvcCc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
cGFnZS1icmVhay1hZnRlcic6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3BhZ2Ut
YnJlYWstYmVmb3JlJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sncGFnZS1icmVh
ay1pbnNpZGUnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydwb2ludGVyLWV2ZW50
cyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Bvc2l0aW9uJzonc3RhdGljJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydyZXNpemUnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydyaWdodCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RhYmxl
LWxheW91dCc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtYWxpZ24nOict
d2Via2l0LWF1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtZGVjb3JhdGlvbic6
J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQtaW5kZW50JzonMHB4J10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyd0ZXh0LXJlbmRlcmluZyc6J2F1dG8nXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ3RleHQtc2hhZG93Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1sndGV4dC1vdmVyZmxvdyc6J2NsaXAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3Rl
eHQtdHJhbnNmb3JtJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndG9wJzonYXV0
byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sndW5pY29kZS1iaWRpJzonbm9ybWFsJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyd2ZXJ0aWNhbC1hbGlnbic6J2Jhc2VsaW5lJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyd2aXNpYmlsaXR5JzondmlzaWJsZSddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snd2hpdGUtc3BhY2UnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ3dpZG93cyc6JzInXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dpZHRoJzonNjY3cHgn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dvcmQtYnJlYWsnOidub3JtYWwnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ3dvcmQtc3BhY2luZyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snd29yZC13cmFwJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd6
LWluZGV4JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snem9vbSc6JzEnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLWRlbGF5JzonMHMnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlvbic6J25vcm1h
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24n
OicwcyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24tZmlsbC1t
b2RlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hbmltYXRpb24t
aXRlcmF0aW9uLWNvdW50JzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1h
bmltYXRpb24tbmFtZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
YW5pbWF0aW9uLXBsYXktc3RhdGUnOidydW5uaW5nJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
Wyctd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb24nOidjdWJpYy1iZXppZXIoMCwyNSwg
MCwxLCAwLDI1LCAxKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1hcHBlYXJh
bmNlJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZmFjZS12
aXNpYmlsaXR5JzondmlzaWJsZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1i
YWNrZ3JvdW5kLWNsaXAnOidib3JkZXItYm94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyct
d2Via2l0LWJhY2tncm91bmQtY29tcG9zaXRlJzonc291cmNlLW92ZXInXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtYmFja2dyb3VuZC1vcmlnaW4nOidwYWRkaW5nLWJveCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1iYWNrZ3JvdW5kLXNpemUnOidhdXRvIGF1
dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYmxvY2stZmxvdyc6J3RiJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJvcmRlci1maXQnOidib3JkZXInXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2lu
Zyc6JzBweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3JkZXItaW1hZ2Un
Oidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJvcmRlci12ZXJ0aWNh
bC1zcGFjaW5nJzonMHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1h
bGlnbic6J3N0cmV0Y2gnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWRp
cmVjdGlvbic6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gt
ZmxleCc6JzAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LWZsZXgtZ3Jv
dXAnOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWJveC1saW5lcyc6J3Np
bmdsZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtb3JkaW5hbC1ncm91
cCc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LW9yaWVudCc6J2hv
cml6b250YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXBhY2snOidz
dGFydCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1ib3gtcmVmbGVjdCc6J25v
bmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXNoYWRvdyc6J25vbmUn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtYm94LXNpemluZyc6J2NvbnRlbnQt
Ym94J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbG9yLWNvcnJlY3Rpb24n
OidkZWZhdWx0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1icmVh
ay1hZnRlcic6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1u
LWJyZWFrLWJlZm9yZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
Y29sdW1uLWJyZWFrLWluc2lkZSc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13
ZWJraXQtY29sdW1uLWNvdW50JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1jb2x1bW4tZ2FwJzonbm9ybWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Vi
a2l0LWNvbHVtbi1ydWxlLWNvbG9yJzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtY29sdW1uLXJ1bGUtc3R5bGUnOidub25lJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1ydWxlLXdpZHRoJzonMHB4J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LWNvbHVtbi1zcGFuJzonMSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1jb2x1bW4td2lkdGgnOidhdXRvJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LWZvbnQtc21vb3RoaW5nJzonYXV0byddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snLXdlYmtpdC1oaWdobGlnaHQnOidub25lJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LWxpbmUtYnJlYWsnOidub3JtYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbGluZS1jbGFtcCc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtbWFyZ2luLWJlZm9yZS1jb2xsYXBzZSc6J2NvbGxhcHNlJ10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hcmdpbi1hZnRlci1jb2xsYXBzZSc6J2NvbGxh
cHNlJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LW1hcnF1ZWUtZGlyZWN0aW9u
JzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLWluY3Jl
bWVudCc6JzZweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1tYXJxdWVlLXJl
cGV0aXRpb24nOidpbmZpbml0ZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC1t
YXJxdWVlLXN0eWxlJzonc2Nyb2xsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0
LW1hc2stYXR0YWNobWVudCc6J3Njcm9sbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdl
YmtpdC1tYXNrLWJveC1pbWFnZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13
ZWJraXQtbWFzay1jbGlwJzonYm9yZGVyLWJveCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
LXdlYmtpdC1tYXNrLWNvbXBvc2l0ZSc6J3NvdXJjZS1vdmVyJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LW1hc2staW1hZ2UnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWyctd2Via2l0LW1hc2stb3JpZ2luJzonYm9yZGVyLWJveCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC1tYXNrLXBvc2l0aW9uJzonMCUgMCUnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbWFzay1yZXBlYXQnOidyZXBlYXQnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtbWFzay1zaXplJzonYXV0byBhdXRvJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWyctd2Via2l0LW5ic3AtbW9kZSc6J25vcm1hbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC1wZXJzcGVjdGl2ZSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJy13ZWJraXQtcGVyc3BlY3RpdmUtb3JpZ2luJzonMzMzcHggMzAwcHgnXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtcnRsLW9yZGVyaW5nJzonbG9naWNhbCddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCc6
J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdGV4dC1maWxsLWNvbG9y
JzoncmdiKDI0MCwgMTEsIDE3MCknXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dGV4dC1zZWN1cml0eSc6J25vbmUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQt
dGV4dC1zdHJva2UtY29sb3InOidyZ2IoMjQwLCAxMSwgMTcwKSddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snLXdlYmtpdC10ZXh0LXN0cm9rZS13aWR0aCc6JzBweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0nOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWyctd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4nOiczMzNweCAzMDBweCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2Zvcm0tc3R5bGUnOidmbGF0J10gQFt1bmRl
ZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXRyYW5zaXRpb24tZGVsYXknOicwcyddIEBbdW5k
ZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uJzonMHMnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eSc6J2Fs
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1m
dW5jdGlvbic6J2N1YmljLWJlemllcigwLDI1LCAwLDEsIDAsMjUsIDEpJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWyctd2Via2l0LXVzZXItZHJhZyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJy13ZWJraXQtdXNlci1tb2RpZnknOidyZWFkLW9ubHknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJy13ZWJraXQtdXNlci1zZWxlY3QnOid0ZXh0J10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydjbGlwLXBhdGgnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydj
bGlwLXJ1bGUnOidub256ZXJvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXNrJzonbm9u
ZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmlsdGVyJzonbm9uZSddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snZmxvb2QtY29sb3InOidyZ2IoMCwgMCwgMCknXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2Zsb29kLW9wYWNpdHknOicxJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydsaWdodGluZy1jb2xvcic6J3JnYigyNTUsIDI1NSwgMjU1KSddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snc3RvcC1jb2xvcic6J3JnYigwLCAwLCAwKSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc3RvcC1vcGFjaXR5JzonMSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snY29sb3It
aW50ZXJwb2xhdGlvbic6J3NyZ2InXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2NvbG9yLWlu
dGVycG9sYXRpb24tZmlsdGVycyc6J2xpbmVhcnJnYiddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snY29sb3ItcmVuZGVyaW5nJzonYXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZmls
bCc6JyMwMDAwMDAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwtb3BhY2l0eSc6JzEn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2ZpbGwtcnVsZSc6J25vbnplcm8nXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2ltYWdlLXJlbmRlcmluZyc6J2F1dG8nXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ21hcmtlci1lbmQnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydtYXJrZXItbWlkJzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFya2VyLXN0
YXJ0Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc2hhcGUtcmVuZGVyaW5nJzon
YXV0byddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlJzonbm9uZSddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tlLWRhc2hhcnJheSc6J25vbmUnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ3N0cm9rZS1kYXNob2Zmc2V0JzonMCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snc3Ryb2tlLWxpbmVjYXAnOididXR0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydz
dHJva2UtbGluZWpvaW4nOidtaXRlciddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snc3Ryb2tl
LW1pdGVybGltaXQnOic0J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydzdHJva2Utb3BhY2l0
eSc6JzEnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3N0cm9rZS13aWR0aCc6JzEnXSBAW3Vu
ZGVmaW5lZC11bmRlZmluZWRdCitbJ2FsaWdubWVudC1iYXNlbGluZSc6J2F1dG8nXSBAW3VuZGVm
aW5lZC11bmRlZmluZWRdCitbJ2Jhc2VsaW5lLXNoaWZ0JzonYmFzZWxpbmUnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2RvbWluYW50LWJhc2VsaW5lJzonYXV0byddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1sna2VybmluZyc6JzAnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3RleHQt
YW5jaG9yJzonc3RhcnQnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ3dyaXRpbmctbW9kZSc6
J2xyLXRiJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydnbHlwaC1vcmllbnRhdGlvbi1ob3Jp
em9udGFsJzonMGRlZyddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZ2x5cGgtb3JpZW50YXRp
b24tdmVydGljYWwnOidhdXRvJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyctd2Via2l0LXN2
Zy1zaGFkb3cnOidub25lJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWyd2ZWN0b3ItZWZmZWN0
Jzonbm9uZSddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworPT09IE1hdGNoZWQgcnVsZXMgZm9y
IGJvZHkgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1hZ2VudCcgdW5kZWZpbmVkLXVuZGVmaW5l
ZF0gW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snbWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4t
Ym90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tbGVmdCc6Jzhw
eCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDMyLTM2XSBbMzgt
Mjk4XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQorWydmb28nOidiYXIgIQorCisgICAg
aW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29y
ZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBbMjYtMTA0XQorWydoZWlnaHQnOicxMDAl
ICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXQorWydjb2xvcnonOiciIWltcG9y
dGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1snaW1wb3J0YW50JzonJyBub24tcGFyc2Vk
XSBAWzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHBy
b3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5MC0yNTldCisK
K3J1bGUKK2JvZHkubWFpbjE6IFsnJyAzMzAtMzY4XSBbMzY5LTQ1MF0KK1snY29sb3InOicjRjAw
QkFBJ10gQFsxMy0yOF0KK1snem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2du
aXplZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KKworcnVsZQorYm9keS5tYWlu
MjogWycnIDQ2Ni00NzZdIFs0NzctNTcyXQorWydiYWNrZ3JvdW5kJzonZ3JlZW4gLyogdmFsdWUg
IWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFp
bXBvcnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XQorWydiYWNrZ3JvdW5kLWltYWdlJzon
aW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXkn
Oidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1l
bnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0
aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBv
c2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5k
LW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
Y2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29s
b3InOidncmVlbiddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keS5tYWlucGFn
ZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3
XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KKwor
PT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1BzZXVkb0lkPTQKKworcnVsZQorYm9keTo6
YWZ0ZXI6IFsnJyA1NzUtNTg2XSBbNTg5LTYxN10KK1snY29udGVudCc6JyJBZnRlciBib2R5Iidd
IEBbNS0yN10KKworPT09IEF0dHJpYnV0ZSBzdHlsZXMgZm9yIHRhYmxlID09PQorQXR0cmlidXRl
OiB3aWR0aAorCitzdHlsZQorZWxlbWVudC5zdHlsZSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
d2lkdGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKKz09PSBJbmhlcml0ZWQgc3R5
bGVzIGZvciBib2R5ID09PQorTGV2ZWw9MQorCitydWxlCitodG1sOiBbJ3VzZXItYWdlbnQnIHVu
ZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxv
Y2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2h0bWw6IFsnJyAwLTRdIFs2LTI5
XQorWydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0KKworPT09IElubGluZSBzdHlsZSBmb3Ig
Ym9keSA9PT0KKworc3R5bGUKK2VsZW1lbnQuc3R5bGUgWzAtMzFdCitbJ2ZvbnQtd2VpZ2h0Jzon
bm9ybWFsJ10gQFswLTIwXQorWyd3aWR0aCc6Jzg1JSddIEBbMjEtMzFdCisKKz09PSBBbGwgc3R5
bGVzaGVldHMgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1sIHsKKyAgICBmb250LXdlaWdodDogNDAw
OworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgZm9vOiBiYXIgIQorCisg
ICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2Vi
Q29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKKyAgICBjb2xvcno6ICIhaW1w
b3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFudDsKKyAgICBjb2xvcjogImJhZGNvbG9y
IiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLzsKK30K
KworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRl
ciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6ICNGMDBCQUE7em9vOm1vbyAvKiBub3Qg
YW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi99LyogY29tbWVudCAqLworCiti
b2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29tbWVudCAq
LyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICovfQorCitib2R5
OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBib2R5IjsKK30KKycKKworcnVsZQoraHRt
bDogWycnIDAtNF0gWzYtMjldCitbJ2ZvbnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXQorCitydWxl
Citib2R5OiBbJycgMzItMzZdIFszOC0yOThdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFd
CitbJ2Zvbyc6J2JhciAhCisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBu
b3QgcmVjb2duaXplZCBieSBXZWJDb3JlICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsy
Ni0xMDRdCitbJ2hlaWdodCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0x
MzNdCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgtMTU5XQorWydp
bXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0KK1snY29sb3InOiciYmFkY29sb3Ii
ICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1p
bXBvcnRhbnRdIEBbMTkwLTI1OV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFsz
NjktNDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90
IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4
LTgxXQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tn
cm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAv
KiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVd
CitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorCitydWxlCitib2R5OjphZnRlcjogWycnIDU3NS01ODZdIFs1ODktNjE3XQorWydjb250ZW50
JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3XQorCitTdHlsZVNoZWV0OiAnCisKKy8qIEFuIGlubGlu
ZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5v
bmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNv
cmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisK
KycKKworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRl
Y29yYXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5v
bi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PQor
CitTdHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7ICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtl
dGhyb3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWdu
OiBqdXN0aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFsnJyAwLTEzXSBbMTUtNzhdCitb
J3RleHQtZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5
JzonMmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDc5
LTgzXSBbODUtMTA5XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFm
dGVyIHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgKiwgYm9keVtmb289ImJh
ciJdIHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTog
MmJhZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQoraHRt
bCAqLCBib2R5W2Zvbz0iYmFyIl06IFsnJyAwLTIzXSBbMjUtODhdCitbJ3RleHQtZGVjb3JhdGlv
bic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicg
bm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDg5LTkzXSBbOTUtMTE5XQor
Wyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHN0eWxlIHRleHQg
c2V0ID09PQorCitTdHlsZVNoZWV0OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl0ge2NvbG9yOiB3
aGl0ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30n
CisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbJycgMC0yM10gWzI1LTU3XQorWydj
b2xvcic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3JvdW5kJzonYmxhY2snXSBAWzE0LTMyXQor
WydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
YmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
KworcnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhdCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5
J10gQFs0LTI0XQorCis9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PQorCity
dWxlCitib2R5OiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J21hcmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1yaWdo
dCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWJvdHRvbSc6JzhweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWxlZnQnOic4cHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyAzMi0zNl0gWzM4LTI5OF0KK1snZm9udC1z
aXplJzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFyICEKKworICAgIGltcG9ydGFudCAvKiAh
aW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9y
dGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50JyBp
cy1pbXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFy
c2VkXSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQor
Wydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0
cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XQorCitydWxlCitodG1sICos
IGJvZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsyNS01N10KK1snY29sb3InOid3aGl0ZSddIEBb
MC0xM10KK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsxNC0zMl0KK1snYmFja2dyb3VuZC1pbWFn
ZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0
LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVh
dC15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1hdHRh
Y2htZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1w
b3NpdGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1wb3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dy
b3VuZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3Jv
dW5kLWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5k
LWNvbG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsn
JyA1OC02Ml0gWzY0LTg4XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworcnVs
ZQorYm9keTogWydpbnNwZWN0b3InIDAtNF0gWzYtMTddCitbJ2ZvbnQnOidzZXJpZiddIEBbMC0x
MV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUwXQorWydjb2xvcic6
JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5y
ZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQorCitydWxlCitib2R5
Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2
YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZl
cnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2JhY2tncm91bmQtaW1h
Z2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVh
dC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBl
YXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0
YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91
bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tn
cm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dy
b3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjg4NWMxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI0MyBAQAorPGh0bWw+Cis8aGVhZD4KKwor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3Nz
IiAtLT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10
ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFj
ayhyZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXkocmVzdWx0KTsKKyAgICAgICAgbm90
aWZ5RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVuZF9y
dW5UZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVu
Y3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICB0ZXN0Q29udHJv
bGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJ
bnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVy
UGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVk
U3R5bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IENvbXB1dGVkIHN0eWxlIGZvciBib2R5
ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9s
bGVyLCBjb21wdXRlZFN0eWxlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1hdGNo
ZWRSdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVsZXMpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVkIHJ1bGVzIGZvciBi
b2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRy
b2xsZXIsIG1hdGNoZWRDU1NSdWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBw
c2V1ZG9SdWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBwc2V1ZG9SdWxlcykKKyAgICAgICAg
eworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAg
ICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IFBzZXVkbyBydWxlcyBmb3IgYm9k
eSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNldWRvUnVsZXMubGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2go
IlBzZXVkb0lkPSIgKyBwc2V1ZG9SdWxlc1tpXS5wc2V1ZG9JZCk7CisgICAgICAgICAgICAgICAg
ZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHBzZXVkb1J1bGVzW2ldLnJ1
bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGF0dHJp
YnV0ZVN0eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBhdHRyaWJ1dGVTdHlsZXMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAg
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRyaWJ1dGUgc3R5bGVz
IGZvciB0YWJsZSA9PT0iKTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cmlidXRl
U3R5bGVzKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJB
dHRyaWJ1dGU6ICIgKyBhdHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9y
U3R5bGUodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRTdHlsZXNDYWxsYmFj
ayh0ZXN0Q29udHJvbGxlciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3IgYm9keSA9PT0iKTsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkU3R5bGVzLmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJMZXZl
bD0iICsgKGkgKyAxKSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxl
KHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0uaW5saW5lU3R5bGUpOworICAgICAg
ICAgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBpbmhlcml0
ZWRTdHlsZXNbaV0ubWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIGlubGluZVN0eWxlQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIGlu
bGluZVN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0g
SW5saW5lIHN0eWxlIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1
bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBpbmxpbmVTdHlsZSk7CisgICAgICAgICAgICBmcm9u
dGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xsZXIpOworICAgICAgICB9CisKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIoV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGNvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKG51
bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0TWF0Y2hl
ZFJ1bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIG1h
dGNoZWRSdWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5nZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgcHNldWRvUnVsZXNDYWxsYmFjay5iaW5kKG51
bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QXR0cmli
dXRlU3R5bGVzRm9yTm9kZTIoZnJvbnRlbmRfbm9kZUZvcklkKCJ0aGV0YWJsZSIpLmlkLCBhdHRy
aWJ1dGVTdHlsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAg
IEluc3BlY3RvckJhY2tlbmQuZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9y
LmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIGluaGVyaXRlZFN0eWxlc0NhbGxiYWNrLmJpbmQo
bnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRJbmxp
bmVTdHlsZUZvck5vZGUyKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBp
bmxpbmVTdHlsZUNhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9KTsK
K30KKworZnVuY3Rpb24gZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHJ1
bGVzKQoreworICAgIGlmICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9y
U3R5bGUodGVzdENvbnRyb2xsZXIsIHJ1bGVzW2ldKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
dGVzdFN0eWxlU2hlZXRzKHRlc3RDb250cm9sbGVyKQorewordmFyIG5ld1N0eWxlU2hlZXRUZXh0
ID0KKyJib2R5Lm1haW5wYWdlIHtcCisgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdo
O1wKKyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVlMjtcCit9XAorXAorYm9keSB7XAorICAgIHRl
eHQtYWxpZ246IGp1c3RpZnk7XAorfVwKKyI7CisKKyAgICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hl
ZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBMYXN0IHN0eWxlc2hlZXQgcGF0Y2hlZCA9PT0iKTsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5zZXRTdHlsZVNoZWV0VGV4dDIoc3R5bGVTaGVldC5pZCwgbmV3U3R5bGVTaGVldFRl
eHQsCisgICAgICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQuYmluZChudWxs
LCB0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldC5pZCwgZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3Iu
YmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdHls
ZVNoZWV0SWRzTG9hZGVkKHRlc3RDb250cm9sbGVyLCBpZHMpCisgICAgeworICAgICAgICB0ZXN0
Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIj09PSBBbGwgc3R5bGVzaGVldHMgPT09Iik7CisgICAgICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgaWRzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1
bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBpZHNbaV0sIChpIDwgaWRzLmxlbmd0aCAtIDEp
ID8gbnVsbCA6IHBhdGNoU3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cisg
ICAgfQorICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzMihzdHlsZVNoZWV0SWRzTG9h
ZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRf
Y2hhbmdlU2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7CisgICAgZnVuY3Rp
b24gZGlkU2V0U2VsZWN0b3IodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIj09PSBBZnRlciBzZWxlY3RvciBzZXQgPT09Iik7CisgICAgICAgIGZyb250
ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgcnVsZS5wYXJlbnRTdHls
ZVNoZWV0LmlkLCBmcm9udGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxl
cikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yMihzdHls
ZVNoZWV0LmNzc1J1bGVzWzBdLmlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJhclwiXSIsIGRpZFNl
dFNlbGVjdG9yLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJv
bnRlbmRfc2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0KQoreworICAgIGZ1
bmN0aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAg
ICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIj09PSBBZnRlciBzdHlsZSB0ZXh0IHNldCA9PT0iKTsKKyAgICAg
ICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZS5w
YXJlbnRTdHlsZVNoZWV0SWQsIGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29udHJv
bGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0MihzdHls
ZVNoZWV0LmNzc1J1bGVzWzBdLnN0eWxlLmlkLCAiY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBi
bGFjazsiLCBkaWRTZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQor
CitmdW5jdGlvbiBmcm9udGVuZF9hZGRSdWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIGZ1bmN0
aW9uIGRpZEdldE1hdGNoZWRSdWxlcyh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKQor
ICAgIHsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxl
IGFkZGVkID09PSIpOworICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJv
bGxlciwgbWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSh0ZXN0Q29udHJvbGxlci5yZXN1bHRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaWRTZXRT
dHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9j
dW1lbnQuYm9keS5pZCwgZGlkR2V0TWF0Y2hlZFJ1bGVzLmJpbmQobnVsbCwgdGVzdENvbnRyb2xs
ZXIpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBydWxlQWRkZWQodGVzdENvbnRyb2xsZXIsIHJ1
bGUpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dDIocnVsZS5z
dHlsZS5pZCwgImZvbnQ6IHNlcmlmIiwgZGlkU2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENv
bnRyb2xsZXIpKTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUyKFdlYklu
c3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCAiYm9keSIsIHJ1bGVBZGRlZC5iaW5k
KG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxl
T3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZU9yU3R5bGUpCit7CisgICAgaWYgKCFydWxlT3JT
dHlsZSkKKyAgICAgICAgcmV0dXJuOworICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5z
dHlsZSk7CisgICAgdmFyIHN0eWxlID0gaXNSdWxlID8gcnVsZU9yU3R5bGUuc3R5bGUgOiBydWxl
T3JTdHlsZTsKKyAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaChpc1J1bGUgPyAicnVsZSIgOiAic3R5bGUiKTsKKyAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IChydWxlT3JTdHlsZS5zZWxlY3Rv
clRleHQgKyAiOiBbJyIgKyBydWxlT3JTdHlsZS5vcmlnaW4gKyAiJyAiICsgcnVsZU9yU3R5bGUu
c2VsZWN0b3JTdGFydE9mZnNldCArICItIiArIHJ1bGVPclN0eWxlLnNlbGVjdG9yRW5kT2Zmc2V0
ICsgIl0iKSA6ICJlbGVtZW50LnN0eWxlIikgKyAiIFsiICsgc3R5bGUuc3RhcnRPZmZzZXQgKyAi
LSIgKyBzdHlsZS5lbmRPZmZzZXQgKyAiXSIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5
bGUucHJvcGVydGllcy5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcHJvcGVydHkgPSBzdHls
ZS5wcm9wZXJ0aWVzW2ldOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsn
IiArIHByb3BlcnR5Lm5hbWUgKyAiJzonIiArIHByb3BlcnR5LnZhbHVlICsgIiciICsgKHByb3Bl
cnR5LnByaW9yaXR5ID8gIiBpcy1pbXBvcnRhbnQiIDogIiIpICsgKHByb3BlcnR5LnBhcnNlZE9r
ID8gIiIgOiAiIG5vbi1wYXJzZWQiKSArIl0gQFsiICsgcHJvcGVydHkuc3RhcnRPZmZzZXQgKyAi
LSIgKyBwcm9wZXJ0eS5lbmRPZmZzZXQgKyAiXSIpOworICAgIH0KK30KKworCitmdW5jdGlvbiBm
cm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXRJ
ZCwgY29udGludWF0aW9uKQoreworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRMb2FkZWQodGVzdENv
bnRyb2xsZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlN0eWxl
U2hlZXQ6ICciICsgc3R5bGVTaGVldC50ZXh0ICsgIiciKTsKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHlsZVNoZWV0LmNzc1J1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJv
bnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0LmNzc1J1bGVz
W2ldKTsKKyAgICAgICAgaWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVhdGlv
bihzdHlsZVNoZWV0KTsKKyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hl
ZXQyKHN0eWxlU2hlZXRJZCwgc3R5bGVTaGVldExvYWRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7Cit9CisKKy8qCitDb3ZlcmVkIEFQSSBtZXRob2RzOgorIC0gZ2V0Q29tcHV0ZWRTdHls
ZUZvck5vZGUyCisgLSBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMgorIC0gZ2V0TWF0Y2hlZFBzZXVk
b1J1bGVzRm9yTm9kZTIKKyAtIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyCisgLSBnZXRJbmhl
cml0ZWRTdHlsZXNGb3JOb2RlMgorIC0gZ2V0SW5saW5lU3R5bGVGb3JOb2RlMgorIC0gZ2V0QWxs
U3R5bGVzMgorIC0gZ2V0U3R5bGVTaGVldDIKKyAtIHNldFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0
U3R5bGVUZXh0MgorIC0gc2V0UnVsZVNlbGVjdG9yMgorIC0gYWRkUnVsZTIKKyovCisKKzwvc2Ny
aXB0PgorCis8c3R5bGU+CisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5w
YWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBw
cm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAg
YmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5
IGNsYXNzPSJtYWluMSBtYWluMiBtYWlucGFnZSIgb25sb2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZv
bnQtd2VpZ2h0OiBub3JtYWw7IHdpZHRoOiA4NSUiPgorPHA+CitUZXN0cyB0aGF0IEluc3BlY3Rv
ckNTU0FnZW50IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lk
dGg9NTAlIGlkPSJ0aGV0YWJsZSI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVj
dGVkLnR4dAppbmRleCBlNGQzM2Q4Li5iZWVjNzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMSw2
ICsxLDYgQEAKIFRlc3RzIHRoYXQgcHJvcGVyIGRhdGEgYW5kIHN0YXJ0L2VuZCBvZmZzZXQgcG9z
aXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHN0eWxlIGRlY2xhcmF0aW9ucyBhbmQgcHJvcGVy
dGllcy4KIAotYm9keTogWzYtMjY2XQorYm9keTogWzAtNF0gWzYtMjY2XQogWydmb250LXNpemUn
OicxMnB4J10gQFs1LTIxXQogWydmb28nOidiYXIgIQogCkBAIC05LDE1ICs5LDE1IEBAIGJvZHk6
IFs2LTI2Nl0KIFsnY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTld
CiBbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQogWydjb2xvcic6JyJiYWRj
b2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8n
ICFpbXBvcnRhbnRdIEBbMTkwLTI1OV0KLWJvZHkubWFpbjE6IFszMzctNDE4XQorYm9keS5tYWlu
MTogWzI5OC0zMzZdIFszMzctNDE4XQogWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQogWyd6
b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBu
b24tcGFyc2VkXSBAWzI4LTgxXQotYm9keS5tYWluMjogWzQ0NS01NDBdCitib2R5Lm1haW4yOiBb
NDM0LTQ0NF0gWzQ0NS01NDBdCiBbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0
YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFu
dCAqLycgIWltcG9ydGFudF0gQFswLTk1XQotYm9keS5tYWlucGFnZTogWzE3LTE0OV0KK2JvZHku
bWFpbnBhZ2U6IFsyLTE1XSBbMTctMTQ5XQogWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1
LTI3XQogWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0K
LWVsZW1lbnQuc3R5bGU6IFswLTMxXQorZWxlbWVudC5zdHlsZTogWzAtMF0gWzAtMzFdCiBbJ2Zv
bnQtd2VpZ2h0Jzonbm9ybWFsJ10gQFswLTIwXQogWyd3aWR0aCc6JzgwJSddIEBbMjEtMzFdCiAK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApp
bmRleCBmY2Y5MjhmLi5iOTMxODlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0
eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCkBAIC0yNCwxMSArMjQsNiBAQCBmdW5jdGlvbiBkb2l0
KCkKIAogZnVuY3Rpb24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKIHsKLSAgICBp
ZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVk
KSB7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLl90b2dnbGVSZXNvdXJj
ZVRyYWNraW5nKCk7Ci0gICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7Ci0gICAgfQotCiAgICAg
dGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwogICAgIGZyb250ZW5kX2V4cGFuZERPTVN1
YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50KTsKICAgICB0ZXN0Q29udHJvbGxl
ci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgewpAQCAtNDgsNyArNDMsNyBA
QCBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVyKQogZnVuY3Rpb24gZnJv
bnRlbmRfc3R5bGVEYXRhUmVjZWl2ZWQodGVzdENvbnRyb2xsZXIsIHJ1bGVPclN0eWxlLCBzaG91
bGRCYWlsLCBkYXRhKQogewogICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHlsZSk7
Ci0gICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5z
ZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLmJvZHlSYW5nZS5z
dGFydCArICItIiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CisgICAgdGVzdENvbnRyb2xs
ZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAiZWxl
bWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLnNlbGVjdG9yUmFuZ2Uuc3RhcnQgKyAiLSIgKyBk
YXRhLnNlbGVjdG9yUmFuZ2UuZW5kICsgIl0gWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCArICIt
IiArIGRhdGEuYm9keVJhbmdlLmVuZCArICJdIik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBk
YXRhLnByb3BlcnR5RGF0YS5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgcHJvcGVydHlEYXR1
bSA9IGRhdGEucHJvcGVydHlEYXRhW2ldOwogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIlsnIiArIHByb3BlcnR5RGF0dW0ubmFtZSArICInOiciICsgcHJvcGVydHlEYXR1bS52
YWx1ZSArICInIiArIChwcm9wZXJ0eURhdHVtLmltcG9ydGFudCA/ICIgIWltcG9ydGFudCIgOiAi
IikgKyAocHJvcGVydHlEYXR1bS5wYXJzZWQgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIg
KyBwcm9wZXJ0eURhdHVtLnN0YXJ0ICsgIi0iICsgcHJvcGVydHlEYXR1bS5lbmQgKyAiXSIpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKaW5kZXggMjlhMDRkNTcuLjA3NDlmMTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5OCw2ICsxMDk4LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTExMDgsNiArMTEwOSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yRnJvbnRlbmRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JQcm9maWxlckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAK
KyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JWYWx1ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDk4NWI1
Y2UuLjNiOTAyOWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTc4NCw2ICsxNzg0LDggQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBcCiAJV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdl
bnQuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIFwKIAlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU1N0b3JlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFi
YXNlUmVzb3VyY2UuY3BwIFwKQEAgLTE4MDcsNiArMTgwOSw4IEBAIHdlYmNvcmVfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAogCVdlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclV0aWxpdGllcy5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGll
cy5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyUmVzb3VyY2UuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBi
L1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDJiMmM5MmMuLmQwNTc3NTcgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xODg0
LDYgKzE4ODQsOCBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCiAgICAg
ICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5o
JywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAn
LApAQCAtMTkwNSw2ICsxOTA3LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9y
U3RvcmFnZUFnZW50LmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAnLAor
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCcsCiAgICAgICAgICAg
ICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3Rvcldv
cmtlclJlc291cmNlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNv
cmUvV2ViQ29yZS5wcm8KaW5kZXggZTU5NWYzYi4uMzUyMWJlMSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05ODksNiArOTg5LDcg
QEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JD
U1NBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKQEAgLTEwMDEsNiArMTAwMiw3IEBAIFNPVVJDRVMg
Kz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5jcHAgXAogICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGlt
ZWxpbmVBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCiAgICAgaW5zcGVjdG9yL1Njcmlw
dEJyZWFrcG9pbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNw
cCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmODFiNzdhLi42YTk1
OTJhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUyNjY5LDYgKzUy
NjY5LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiDQorCQkJCT4NCisJCQk8L0Zp
bGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9y
Q1NTQWdlbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NTdG9yZS5jcHAiDQogCQkJCT4NCiAJCQk8
L0ZpbGU+DQpAQCAtNTI3NjEsNiArNTI3NjksMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclV0aWxpdGll
cy5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVXRpbGl0aWVzLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVmFs
dWVzLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGQxMDQ0NTUuLjhhYzk4N2YgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDYzLDYgKzE0NjMsOCBAQAogCQk4MUJF
MjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODFCRTIwOTQxMUY0QUI4
RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCAqLzsgfTsKIAkJODFCRTIw
RDIxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE3MTFGNEI2NkYwMDkxNURGQSAvKiBK
U0lEQkN1cnNvci5jcHAgKi87IH07CiAJCTgxQkUyMEQzMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lE
QkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggKi87IH07CisJCTgyQUIx
NzQzMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc0MTEyNEI5OUVDMDBDNTA2
OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovOyB9OworCQk4MkFCMTc0NDEyNEI5OUVDMDBD
NTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JD
U1NBZ2VudC5oICovOyB9OwogCQk4MkI2NTg5ODExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9y
Q1NTU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTgyQjY1ODlBMTE4OUU0
NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5z
cGVjdG9yQ1NTU3RvcmUuY3BwICovOyB9OwogCQk4MkUzRDhERTEyMkVBMEQxMDAzQUU1QkMgLyog
Q1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDgyRTNEOERDMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwICovOyB9OwpAQCAtNzQ4Niw2ICs3NDg4LDggQEAKIAkJODFCRTIwOUMxMUY0
QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURC
Q3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwQTcxMUY0QjY2
RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
ODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQ3Vyc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNwZWN0b3JDU1NBZ2VudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBJbnNwZWN0b3JDU1NBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkI2
NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yQ1NTU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0
b3JlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNT
U1N0b3JlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODJFM0Q4REMxMjJFQTBE
MTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTE5ODksNiArMTE5OTMsOCBAQAogCQkJCTFDODFCOTU4MEU5
NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCAqLywKIAkJCQkxQzgxQjk1NzBFOTcz
MzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgKi8sCiAJCQkJMUM4MUI5NTYw
RTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCAqLywKKwkJCQk4MkFCMTc0
MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovLAorCQkJCTgyQUIx
NzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovLAogCQkJCTgyQjY1
ODk5MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi8sCiAJCQkJODJC
NjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi8sCiAJCQkJNDFG
MDYyMTMwRjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwICov
LApAQCAtMTk0MDYsNiArMTk0MTIsNyBAQAogCQkJCTRGNzA3QTlBMTFFRjY3OTQwMEFDREE2OSAv
KiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5
NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJCNjU4OTgxMTg5RTM5MjAwRTA1MkExIC8qIElu
c3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MUYwNjIxNDBGNUYxOTI2MDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjE5MzksNiArMjE5NDYsNyBAQAogCQkJCTdBNzRFQ0JBMTAxODM5QTYw
MEJGOTM5RSAvKiBJbnNwZWN0b3JCYWNrZW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRGNzA3
QTk5MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxQzgxQjk1QjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29u
dHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk4MkFCMTc0MzEyNEI5OUVDMDBDNTA2OUQg
LyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODJCNjU4OUExMTg5
RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTQxRjA2MjE1MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUYzM0YwNTNEMTIwQjBEQTUwMEU1NzQzQSAvKiBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CmluZGV4IGM1NWY5OTgu
LmMwMTM5YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQorKysgYi9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKQEAgLTQwOCw3ICs0MDgsOSBAQCBydWxlX2xpc3Q6CiAgOwog
CiB2YWxpZF9ydWxlOgotICAgIHJ1bGVzZXQKKyAgICBiZWZvcmVfcnVsZXNldCBydWxlc2V0IHsK
KyAgICAgICAgJCQgPSAkMjsKKyAgICB9CiAgIHwgbWVkaWEKICAgfCBwYWdlCiAgIHwgZm9udF9m
YWNlCkBAIC05MTAsOCArOTEyLDIyIEBAIG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbjoK
ICAgICB9CiAgIDsKIAorYmVmb3JlX3J1bGVzZXQ6CisgICAgLyogZW1wdHkgKi8geworICAgICAg
ICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAg
ICBwLT5tYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKKyAgICB9CisgIDsKKworYmVmb3JlX3J1bGVf
b3BlbmluZ19icmFjZToKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtTZWxlY3Rv
ckxpc3RFbmQoKTsKKyAgICB9CisgIDsKKwogcnVsZXNldDoKLSAgICBzZWxlY3Rvcl9saXN0ICd7
JyBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlzdCBjbG9zaW5n
X2JyYWNlIHsKKyAgICBzZWxlY3Rvcl9saXN0IGJlZm9yZV9ydWxlX29wZW5pbmdfYnJhY2UgJ3sn
IG1heWJlX3NwYWNlX2JlZm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3Npbmdf
YnJhY2UgewogICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihw
YXJzZXIpOwogICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5jcHAKaW5kZXggZGU0YTk5MS4uZjkzN2Q1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NT
UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC0xNDQsMTAgKzE0
NCw5IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1f
aGFzRm9udEZhY2VPbmx5VmFsdWVzKGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFs
aWRDU1NSdWxlKGZhbHNlKQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQotICAg
ICwgbV9ydWxlQm9keVN0YXJ0T2Zmc2V0KDApCi0gICAgLCBtX3J1bGVCb2R5RW5kT2Zmc2V0KDAp
Ci0gICAgLCBtX3Byb3BlcnR5U3RhcnRPZmZzZXQoVUlOVF9NQVgpCi0gICAgLCBtX3Byb3BlcnR5
RW5kT2Zmc2V0KFVJTlRfTUFYKQorICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQorICAg
ICwgbV9ydWxlQm9keVJhbmdlKDAsIDApCisgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgs
IFVJTlRfTUFYKQogICAgICwgbV9ydWxlUmFuZ2VNYXAoMCkKICAgICAsIG1fY3VycmVudFN0eWxl
RGF0YSgwKQogICAgICwgbV9kYXRhKDApCkBAIC01NDgwLDExICs1NDc5LDEzIEBAIENTU1J1bGUq
IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxlY3Rv
cnMpCiAgICAgICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJlbGVhc2UoKSk7
CiAgICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewogICAgICAgICAgICAgQVNTRVJUKG1fY3Vy
cmVudFN0eWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnN0eWxlQm9k
eVJhbmdlID0gU291cmNlUmFuZ2UobV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3J1bGVCb2R5RW5k
T2Zmc2V0KTsKKyAgICAgICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c2VsZWN0b3JMaXN0UmFu
Z2UgPSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRh
LT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKICAgICAgICAgICAgIG1fcnVsZVJh
bmdlTWFwLT5zZXQocmVzdWx0LCBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpKTsKICAgICAg
ICAgICAgIG1fY3VycmVudFN0eWxlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7
CiAgICAgICAgIH0KICAgICB9CisgICAgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpOwogICAgIHJl
c2V0UnVsZUJvZHlNYXJrcygpOwogICAgIGNsZWFyUHJvcGVydGllcygpOwogICAgIHJldHVybiBy
ZXN1bHQ7CkBAIC01NzMzLDI2ICs1NzM0LDQ0IEBAIHZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0
U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKQogICAgIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiB9CiAK
K3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0U3RhcnQoKQoreworICAgIG1fc2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7Cit9CisKK3ZvaWQgQ1NTUGFyc2Vy
OjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFN0eWxlRGF0YSkK
KyAgICAgICAgcmV0dXJuOworICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OworICAgIHdoaWxl
IChsaXN0RW5kID4gbV9kYXRhICsgMSkgeworICAgICAgICBpZiAoaXNDU1NXaGl0ZXNwYWNlKCoo
bGlzdEVuZCAtIDEpKSkKKyAgICAgICAgICAgIC0tbGlzdEVuZDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlz
dEVuZCAtIG1fZGF0YTsKK30KKwogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkK
IHsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAgICAgaWYgKCp5eXRl
eHQgPT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5p
bmcgYnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlTdGFydE9mZnNldCkKLSAgICAg
ICAgbV9ydWxlQm9keVN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBtX3J1
bGVCb2R5UmFuZ2Uuc3RhcnQpCisgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNl
dDsKIH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7CiAgICAgdW5zaWdu
ZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5
RW5kT2Zmc2V0KQotICAgICAgICBtX3J1bGVCb2R5RW5kT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlm
IChvZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQorICAgICAgICBtX3J1bGVCb2R5UmFuZ2Uu
ZW5kID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQog
ewotICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBtX3Byb3BlcnR5
U3RhcnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0
IC0gbV9kYXRhOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJ
bXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQpAQCAtNTc2MCwxMSArNTc3OSwx
MSBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3Vu
ZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAt
IG1fZGF0YTsKICAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGlu
dG8gdGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlF
bmRPZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlTdGFydE9mZnNldCAhPSBVSU5U
X01BWCAmJiBtX2N1cnJlbnRTdHlsZURhdGEpIHsKKyAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0g
b2Zmc2V0OworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9j
dXJyZW50U3R5bGVEYXRhKSB7CiAgICAgICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRl
ZCB3aGVuIHRoZSBzdHlsZSBkYXRhIHJldHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50Lgot
ICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlTdGFydE9mZnNldDsKLSAg
ICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChz
dGFydCA8IGVuZCk7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2Rh
dGEgKyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAo
cHJvcGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKQEAgLTU3NzcsNyArNTc5Niw3IEBA
IHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBi
b29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3Ry
aW5nLnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0
cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRp
dmUgdG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KICAgICAgICAgbV9jdXJyZW50U3R5
bGVEYXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBT
b3VyY2VSYW5nZShtX3Byb3BlcnR5U3RhcnRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQs
IG1fcHJvcGVydHlFbmRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpKSk7CisgICAgICAg
ICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQs
IGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0
YXJ0LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAgIHJlc2V0UHJv
cGVydHlNYXJrcygpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBmOGIyNGRmLi43NmJjNjU0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApA
QCAtMjQxLDE4ICsyNDEsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBdG9taWNT
dHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRva2VuaXplciBtZXRob2Rz
IGFuZCBkYXRhCi0gICAgICAgIHVuc2lnbmVkIG1fcnVsZUJvZHlTdGFydE9mZnNldDsKLSAgICAg
ICAgdW5zaWduZWQgbV9ydWxlQm9keUVuZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9wcm9w
ZXJ0eVN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5RW5kT2Zmc2V0Owor
ICAgICAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICBTb3VyY2VS
YW5nZSBtX3J1bGVCb2R5UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5n
ZTsKICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwogICAgICAgICBS
ZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRTdHlsZURhdGE7CisgICAgICAgIHZv
aWQgbWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya1NlbGVjdG9yTGlz
dEVuZCgpOwogICAgICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgICAgIHZvaWQg
bWFya1J1bGVCb2R5RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAg
ICAgICAgdm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlz
UHJvcGVydHlQYXJzZWQpOwotICAgICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9y
dWxlQm9keVN0YXJ0T2Zmc2V0ID0gbV9ydWxlQm9keUVuZE9mZnNldCA9IDA7IH0KLSAgICAgICAg
dm9pZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG1fcHJv
cGVydHlFbmRPZmZzZXQgPSBVSU5UX01BWDsgfQorICAgICAgICB2b2lkIHJlc2V0U2VsZWN0b3JM
aXN0TWFya3MoKSB7IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJh
bmdlLmVuZCA9IDA7IH0KKyAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVs
ZUJvZHlSYW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CisgICAgICAgIHZv
aWQgcmVzZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3Bl
cnR5UmFuZ2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwp
OwogICAgICAgICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciog
dGV4dChpbnQqIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcAppbmRl
eCAxNjI4MDMxLi5lYjljMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAK
QEAgLTU0LDEzICs1NCw2IEBAIFNvdXJjZVJhbmdlOjpTb3VyY2VSYW5nZSh1bnNpZ25lZCBzdGFy
dCwgdW5zaWduZWQgZW5kKQogewogfQogCi1Tb3VyY2VSYW5nZSYgU291cmNlUmFuZ2U6Om9wZXJh
dG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpCi17Ci0gICAgdGhpcy0+c3RhcnQgPSBvdGhl
ci5zdGFydDsKLSAgICB0aGlzLT5lbmQgPSBvdGhlci5lbmQ7Ci0gICAgcmV0dXJuICp0aGlzOwot
fQotCiBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5U291cmNlRGF0YShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIHBh
cnNlZE9rLCBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiAgICAgOiBuYW1lKG5hbWUpCiAgICAg
LCB2YWx1ZSh2YWx1ZSkKQEAgLTg4LDE2ICs4MSw2IEBAIENTU1Byb3BlcnR5U291cmNlRGF0YTo6
Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkKIHsKIH0KIAotQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBD
U1NQcm9wZXJ0eVNvdXJjZURhdGE6Om9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURh
dGEmIG90aGVyKQotewotICAgIG5hbWUgPSBvdGhlci5uYW1lOwotICAgIHZhbHVlID0gb3RoZXIu
dmFsdWU7Ci0gICAgaW1wb3J0YW50ID0gb3RoZXIuaW1wb3J0YW50OwotICAgIHBhcnNlZE9rID0g
b3RoZXIucGFyc2VkT2s7Ci0gICAgcmFuZ2UgPSBvdGhlci5yYW5nZTsKLSAgICByZXR1cm4gKnRo
aXM7Ci19Ci0KIFN0cmluZyBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OnRvU3RyaW5nKCkgY29uc3QK
IHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZW1wdHlWYWx1ZSwgKCJlIikpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCBiZWFlOWQwLi5hYzU1NDExIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9XZWJDb3Jl
L2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBDU1NT
dHlsZVJ1bGU7CiBzdHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CiAgICAg
U291cmNlUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgU291cmNlUmFu
Z2UmIG9wZXJhdG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpOwogCiAgICAgdW5zaWduZWQg
c3RhcnQ7CiAgICAgdW5zaWduZWQgZW5kOwpAQCAtNTYsOSArNTUsNyBAQCBzdHJ1Y3QgQ1NTUHJv
cGVydHlTb3VyY2VEYXRhIHsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBwYXJzZWRP
aywgY29uc3QgU291cmNlUmFuZ2UmIHJhbmdlKTsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEo
Y29uc3QgQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBvdGhlcik7CiAgICAgQ1NTUHJvcGVydHlTb3Vy
Y2VEYXRhKCk7Ci0gICAgQUxXQVlTX0lOTElORSB+Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkgeyB9
CiAKLSAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0
eVNvdXJjZURhdGEmIG90aGVyKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTc5LDYgKzc2LDEwIEBAIHN0cnVjdCBDU1NTdHls
ZVNvdXJjZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NTdHlsZVNvdXJjZURhdGEoKSk7CiAgICAgfQog
CisgICAgLy8gW09wdGlvbmFsXSBSYW5nZSBvZiB0aGUgc2VsZWN0b3IgbGlzdCBpbiB0aGUgZW5j
bG9zaW5nIHNvdXJjZS4KKyAgICAvLyBJZiB0aGUgc3R5bGUgaXMgYSBwdXJlIGRlY2xhcmF0aW9u
LCB0aGUgcmFuZ2UgaXMgKDAsIDApLgorICAgIFNvdXJjZVJhbmdlIHNlbGVjdG9yTGlzdFJhbmdl
OworCiAgICAgLy8gUmFuZ2Ugb2YgdGhlIHN0eWxlIHRleHQgaW4gdGhlIGVuY2xvc2luZyBzb3Vy
Y2UuCiAgICAgU291cmNlUmFuZ2Ugc3R5bGVCb2R5UmFuZ2U7CiAgICAgVmVjdG9yPENTU1Byb3Bl
cnR5U291cmNlRGF0YT4gcHJvcGVydHlEYXRhOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBiL1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5l
cmF0b3JJbnNwZWN0b3IucG0KaW5kZXggODBlMjQzYi4uMmY1ZjQxMSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9yLnBtCkBAIC0zMyw2ICszMywxMSBAQCAkdHlw
ZVRyYW5zZm9ybXsiRE9NIn0gPSB7CiAgICAgImhlYWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50
LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4gIm1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9t
QWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17IkNTUyJ9ID0geworICAgICJmb3J3YXJkIiA9
PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAorICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2Vu
dC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmNz
c0FnZW50KCkiLAorfTsKICR0eXBlVHJhbnNmb3JteyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAg
ICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQiLAogICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQuaCIsCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yLmlkbAppbmRleCBhMDhhNjIyLi5mYTUxMjM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5p
ZGwKQEAgLTE5MSw3ICsxOTEsMjUgQEAgbW9kdWxlIGNvcmUgewogICAgICAgICBbaGFuZGxlcj1E
T01dIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGluIGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHBy
b3BlcnR5TmFtZSwgaW4gYm9vbGVhbiBkaXNhYmxlZCwgb3V0IFZhbHVlIHN0eWxlKTsKICAgICAg
ICAgW2hhbmRsZXI9RE9NXSB2b2lkIHNldFJ1bGVTZWxlY3RvcihpbiBsb25nIHJ1bGVJZCwgaW4g
U3RyaW5nIHNlbGVjdG9yLCBpbiBsb25nIHNlbGVjdGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwg
b3V0IGJvb2xlYW4gc2VsZWN0b3JBZmZlY3RzTm9kZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0g
dm9pZCBhZGRSdWxlKGluIFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwg
b3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAg
ICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkg
Y3NzUHJvcGVydGllcyk7CisKKyAgICAgICAgLy8gR2V0IGFsbCBzdHlsZXMgYXBwbGljYWJsZSB0
byB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldENvbXB1dGVk
U3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAg
W2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlk
LCBvdXQgQXJyYXkgcnVsZXMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0TWF0Y2hl
ZFBzZXVkb1J1bGVzRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBBcnJheSBydWxlcyk7IC8v
IGFycmF5IG9mIHsgcHNldWRvSWQ6IDxudW1iZXI+LCBydWxlczogYXJyYXkgb2YgI2Nzc1J1bGUg
fQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIo
aW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZXMpOyAvLyBtYXA6IGF0dHJpYnV0ZU5hbWU6
ICNjc3NTdHlsZQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5oZXJpdGVkU3R5bGVz
Rm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBBcnJheSByZXN1bHQpOyAvLyBhcnJheSBvZiB7
IGlubGluZVN0eWxlOiAjY3NzU3R5bGUsIG1hdGNoZWRDU1NSdWxlczogYXJyYXkgb2YgI2Nzc1J1
bGUgfQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihp
biBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2
b2lkIGdldEFsbFN0eWxlczIob3V0IEFycmF5IHN0eWxlU2hlZXRJZHMpOworICAgICAgICBbaGFu
ZGxlcj1DU1NdIHZvaWQgZ2V0U3R5bGVTaGVldDIoaW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgb3V0
IFZhbHVlIHN0eWxlU2hlZXQpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0U3R5bGVT
aGVldFRleHQyKGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIGluIFN0cmluZyB0ZXh0KTsKKyAgICAg
ICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxlVGV4dDIoaW4gU3RyaW5nIHN0eWxlSWQsIGlu
IFN0cmluZyB0ZXh0LCBvdXQgVmFsdWUgc3R5bGUpOworCisgICAgICAgIC8vIEVuYWJsZS9kaXNh
YmxlIHByb3BlcnR5LiBbbW9kZWxdCisgICAgICAgIC8vIFNob3VsZCBiZSBzZW50IGluIGEgYmF0
Y2ggYmVmb3JlIHNldFN0eWxlVGV4dCgpIChzbyB0aGF0IG5vdGhpbmcgY2FuIGhhcHBlbiBiZXR3
ZWVuIHRoZSB0d28gY2FsbHMpLgorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJv
cGVydHkyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBsb25nIHByb3BlcnR5T3JkaW5hbCwgaW4gYm9v
bGVhbiBkaXNhYmxlZCk7CisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0
b3IyKGluIFN0cmluZyBydWxlSWQsIGluIFN0cmluZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUp
OworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgYWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9k
ZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRs
ZXI9Q1NTXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3Bl
cnRpZXMpOwogCiAgICAgICAgIFtoYW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhv
dXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBjb29raWVzU3RyaW5nKTsKICAgICAgICAgW2hh
bmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkZWxldGVDb29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUs
IGluIFN0cmluZyBkb21haW4pOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjhlN2MKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTAsMCAr
MSwxMDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKworLy8g
Y3NzUHJvcGVydHkgPSB7CisvLyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICB2
YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICBwcmlvcml0eSAgICAgIDogPHN0cmluZz4s
IC8vICIiIGZvciBub24tcGFyc2VkT2sgcHJvcGVydGllcworLy8gICAgaW1wbGljaXQgICAgICA6
IDxib29sZWFuPiwKKy8vICAgIHBhcnNlZE9rICAgICAgOiA8Ym9vbGVhbj4sIC8vIHdoZXRoZXIg
cHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSBXZWJDb3JlCisvLyAgICBzdGF0dXMgICAgICAgIDog
PHN0cmluZz4sIC8vICJkaXNhYmxlZCIgfCAiYWN0aXZlIiB8ICJpbmFjdGl2ZSIgfCAic3R5bGUi
CisvLyAgICBzaG9ydGhhbmROYW1lIDogPHN0cmluZz4sCisvLyAgICBzdGFydE9mZnNldCAgIDog
PG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVydHkgdGV4dCBzdGFydCBvZmZzZXQgaW4gZW5j
bG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQg
c3VjaC4KKy8vICAgIGVuZE9mZnNldCAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9w
ZXJ0eSB0ZXh0IGVuZCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNl
bnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8vIH0KKy8vCisvLyBzdGF0dXM6Cisv
LyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKKy8vICJhY3RpdmUiID09
IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24K
Ky8vICJpbmFjdGl2ZSIgPT0gcHJvcGVydHkgZG9lcyBubyBwYXJ0aWNpcGF0ZSBpbiB0aGUgY29t
cHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJpZGRlbiBieSBhIHN1YnNlcXVlbnQg
cHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQorLy8gInN0eWxlIiA9PSBwcm9wZXJ0eSBpcyBh
Y3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29yZSBDU1NTdHlsZURlY2xhcmF0aW9u
IHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBpbXBsaWNpdCBsb25naGFuZCBwcm9w
ZXJ0aWVzKQorLy8KKy8vCisvLyBjc3NTdHlsZSA9IHsKKy8vICAgIHN0eWxlSWQgICAgICAgICA6
IDxudW1iZXI+LCAvLyBPcHRpb25hbAorLy8gICAgc3R5bGVTaGVldElkICAgIDogPG51bWJlcj4s
IC8vIFBhcmVudDogLTEgZm9yIGlubGluZSBzdHlsZXMgKDxmb28gc3R5bGU9Ii4uIj4pCisvLyAg
ICBjc3NQcm9wZXJ0aWVzICAgOiBbCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1By
b3BlcnR5LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQorLy8gICAgICAgICAgICAgICAgICAgIF0sCisvLyAg
ICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kTmFtZTEgOiBzaG9ydGhhbmRWYWx1ZTEsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRWYWx1ZTIKKy8vICAgICAgICAgICAgICAgICAgICAg
IH0sCisvLyAgICBjc3NUZXh0ICAgICAgICAgOiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4
dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB9IC8vID8/PworLy8gfQorLy8KKy8vIC8vIFRP
RE86CisvLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQcm9wZXJ0aWVzIHRvIGVuYWJsZWQgZmxhZy4K
Ky8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0IHRvIHByb3BlcnRpZXMKKy8vCisvLyBjc3NS
dWxlID0geworLy8gICAgcnVsZUlkICAgICAgIDogPG51bWJlcj4sCisvLyAgICBzZWxlY3RvclRl
eHQgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgIDogPHN0cmluZz4KKy8vICAgIHNvdXJj
ZUxpbmUgICA6IDxzdHJpbmc+CisvLyAgICBzdHlsZVNoZWV0SWQgOiA8bnVtYmVyPiAvLyBhbHNv
IGZvdW5kIGluIHN0eWxlCisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiAvLyAiIiB8fCAi
dXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3IiCisvLyAgICBzdHlsZSAgICAgICAg
OiAjY3NzU3R5bGUKKy8vIH0KKy8vCisvLyAvLyBUT0RPOgorLy8gLy8gLSBmaXggb3JpZ2luCisv
LyAvLyAtIGFkZCBzb3VyY2VVUkwKKy8vIC8vIC0gZml4IHBhcmVudFN0eWxlU2hlZXRJZAorLy8K
Ky8vIGNzc1N0eWxlU2hlZXQgPSB7CisvLyAgICBzdHlsZVNoZWV0SWQgICA6IDxudW1iZXI+Cisv
LyAgICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICB0aXRsZSAgICAgICAgICA6IDxz
dHJpbmc+CisvLyAgICBkaXNhYmxlZCAgICAgICA6IDxib29sZWFuPgorLy8gICAgZG9jdW1lbnRO
b2RlSWQgOiA8bnVtYmVyPgorLy8gICAgcnVsZXMgICAgICAgICAgOiBbCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAjY3NzUnVsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgor
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUKKy8vICAgICAgICAgICAgICAgICAg
ICAgXQorLy8gfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1BhcnNlZFN0eWxlU2hlZXQ6OlBh
cnNlZFN0eWxlU2hlZXQoKQorICAgIDogbV9zdHlsZVNoZWV0QnlQYXJzZXIoMCkKKyAgICAsIG1f
aGFzVGV4dChmYWxzZSkKK3sKK30KKwordm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRUZXh0KGNv
bnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBtX2hhc1RleHQgPSB0cnVlOworICAgIG1fdGV4dCA9
IHRleHQ7CisgICAgc2V0U291cmNlRGF0YSgwKTsKK30KKwordm9pZCBQYXJzZWRTdHlsZVNoZWV0
OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSkKK3sKKyAg
ICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRhOworfQorCitSZWZQdHI8Q1NTU3R5bGVTb3VyY2VE
YXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpzdHlsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc1NvdXJjZURhdGEoKSB8fCBpbmRleCA+PSBtX3NvdXJjZURh
dGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9zb3VyY2VEYXRh
LT5hdChpbmRleCk7Cit9CisKK2Jvb2wgUGFyc2VkU3R5bGVTaGVldDo6ZW5zdXJlU291cmNlRGF0
YShOb2RlKiBvd25lck5vZGUpCit7CisgICAgaWYgKGhhc1NvdXJjZURhdGEoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIWhhc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNo
ZWV0OjpjcmVhdGUob3duZXJOb2RlKTsKKyAgICBDU1NQYXJzZXIgcDsKKyAgICBTdHlsZVJ1bGVS
YW5nZU1hcCBydWxlUmFuZ2VNYXA7CisgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0
KCksIG1fdGV4dCwgMCwgJnJ1bGVSYW5nZU1hcCk7CisgICAgT3duUHRyPFNvdXJjZURhdGE+IHJh
bmdlc1ZlY3RvcihuZXcgU291cmNlRGF0YSk7CisgICAgZXh0cmFjdFJhbmdlcyhuZXdTdHlsZVNo
ZWV0LmdldCgpLCBydWxlUmFuZ2VNYXAsIHJhbmdlc1ZlY3Rvci5nZXQoKSk7CisgICAgc2V0U291
cmNlRGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbV9zb3VyY2VEYXRh
OworfQorCit2b2lkIFBhcnNlZFN0eWxlU2hlZXQ6OmV4dHJhY3RSYW5nZXMoQ1NTU3R5bGVTaGVl
dCogc3R5bGVTaGVldCwgY29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAmIHJ1bGVSYW5nZU1hcCwgU291
cmNlRGF0YSogcmFuZ2VzVmVjdG9yKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbmd0
aCA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgQ1NT
U3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yVXRpbGl0aWVzOjphc0NTU1N0eWxlUnVsZShzdHls
ZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIFN0eWxlUnVsZVJhbmdlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IHJ1bGVS
YW5nZU1hcC5maW5kKHJ1bGUpOworICAgICAgICBpZiAoaXQgIT0gcnVsZVJhbmdlTWFwLmVuZCgp
KQorICAgICAgICAgICAgcmFuZ2VzVmVjdG9yLT5hcHBlbmQoaXQtPnNlY29uZCk7CisgICAgfQor
fQorCisKK0luc3BlY3RvclN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3QgU3Ry
aW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogbGl2ZVN0eWxlU2hlZXQpCisgICAgOiBtX2lkKGlkKQor
ICAgICwgbV9saXZlU3R5bGVTaGVldChsaXZlU3R5bGVTaGVldCkKKyAgICAsIG1faXNSZXZhbGlk
YXRpbmcoZmFsc2UpCit7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJp
bmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIWVuc3VyZVRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICpyZXN1bHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpOworICAg
IHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIGxpdmVTdHlsZSkgY29uc3QKK3sKKyAgICB1
bnNpZ25lZCBpbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2
ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxl
UnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NTdHlsZVJ1bGUobV9saXZlU3R5
bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlmICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAocnVsZS0+c3R5bGUoKSA9PSBsaXZlU3R5bGUpCisgICAgICAgICAg
ICByZXR1cm4gaW5kZXg7CisKKyAgICAgICAgKytpbmRleDsKKyAgICB9CisgICAgcmV0dXJuIFVJ
TlRfTUFYOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmRMaXZl
UnVsZVdpdGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwLCBzaXplID0gbV9saXZlU3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBzaXpl
OyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yVXRpbGl0aWVz
Ojphc0NTU1N0eWxlUnVsZShtX2xpdmVTdHlsZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYg
KCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChydWxlLT5zdHlsZSgp
ID09IHN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIHJ1bGU7CisgICAgfQorICAgIHJldHVybiAw
OworfQorCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJldmFsaWRhdGVTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiBsaXZlU3R5bGUpCit7CisgICAgaWYgKG1faXNSZXZhbGlkYXRpbmcpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1faXNSZXZhbGlkYXRpbmcgPSB0cnVlOworICAgIENTU1N0
eWxlU2hlZXQqIHBhcnNlZFNoZWV0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LmNzc1N0eWxlU2hlZXQo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcGFyc2VkU2hlZXQtPmxlbmd0aCgp
OyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVCYXNlID0gcGFyc2Vk
U2hlZXQtPml0ZW0oaSk7CisgICAgICAgIENTU1N0eWxlUnVsZSogcGFyc2VkUnVsZSA9IEluc3Bl
Y3RvclV0aWxpdGllczo6YXNDU1NTdHlsZVJ1bGUoc3R5bGVCYXNlKTsKKyAgICAgICAgaWYgKCFw
YXJzZWRSdWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChwYXJzZWRSdWxl
LT5zdHlsZSgpID09IGxpdmVTdHlsZSkgeworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0
eWxlKCktPmNzc1RleHQoKSAhPSBsaXZlU3R5bGUtPmNzc1RleHQoKSkKKyAgICAgICAgICAgICAg
ICBzZXRTdHlsZVRleHQobGl2ZVN0eWxlLCBsaXZlU3R5bGUtPmNzc1RleHQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2lzUmV2YWxpZGF0aW5nID0gZmFs
c2U7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0VGV4dChjb25zdCBTdHJpbmcm
IHRleHQpCit7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBtX2xpdmVTdHlsZVNoZWV0LT5yZW1vdmUoaSk7CisKKyAgICBt
X2xpdmVTdHlsZVNoZWV0LT5wYXJzZVN0cmluZyh0ZXh0LCBtX2xpdmVTdHlsZVNoZWV0LT51c2VT
dHJpY3RQYXJzaW5nKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmVuc3VyZVRleHQoKSBjb25zdAoreworICAgIGlmIChtX3BhcnNlZFN0eWxlU2hl
ZXQuaGFzVGV4dCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIFN0cmluZyB0ZXh0Owor
ICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBpZiAoc3VjY2Vz
cykKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisKKyAgICByZXR1
cm4gc3VjY2VzczsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZVNoZWV0VGV4
dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1
Y2Nlc3MgPSBpbmxpbmVTdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQor
ICAgICAgICBzdWNjZXNzID0gcmVzb3VyY2VTdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYg
KHN1Y2Nlc3MpCisgICAgICAgICpyZXN1bHQgPSB0ZXh0OworICAgIHJldHVybiBzdWNjZXNzOwor
fQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJlc291cmNlU3R5bGVTaGVldFRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0Cit7CisgICAgcmV0dXJuIEluc3BlY3RvclV0aWxpdGllczo6cmVz
b3VyY2VDb250ZW50Rm9yVVJMKG1fbGl2ZVN0eWxlU2hlZXQtPmZpbmFsVVJMKCksIG93bmVyRG9j
dW1lbnQoKSwgcmVzdWx0KTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0OjppbmxpbmVT
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBOb2RlKiBvd25lck5v
ZGUgPSBtX2xpdmVTdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCBvd25lck5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFtZSgpLmxvd2Vy
KCkgIT0gInN0eWxlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpyZXN1bHQgPSBvd25l
ckVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OmVuc3VyZVBhcnNlZERhdGFSZWFkeSgpCit7CisgICAgcmV0dXJuIGVu
c3VyZVRleHQoKSAmJiBtX3BhcnNlZFN0eWxlU2hlZXQuZW5zdXJlU291cmNlRGF0YShsaXZlU3R5
bGVTaGVldCgpLT5vd25lck5vZGUoKSk7Cit9CisKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5
bGVTaGVldDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQoreworICAgIFN0cmluZyB0
ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBpZiAo
IXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgbV9saXZlU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsKKyAgICBp
ZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcnVsZXMg
PSBtX2xpdmVTdHlsZVNoZWV0LT5jc3NSdWxlcygpOworICAgIEFTU0VSVChydWxlcy0+bGVuZ3Ro
KCkpOworICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NT
dHlsZVJ1bGUocnVsZXMtPml0ZW0ocnVsZXMtPmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVChy
dWxlKTsKKworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQorICAgICAgICB0ZXh0ICs9ICJcbiI7CisK
KyAgICB0ZXh0ICs9IHNlbGVjdG9yOworICAgIHRleHQgKz0gIiB7fSI7CisgICAgbV9wYXJzZWRT
dHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisKKyAgICByZXR1cm4gcnVsZTsKK30KKworQ1NTU3R5
bGVSdWxlKiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5n
JiBpZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKK3sKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUg
PSBydWxlRm9ySWQoaWQpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
Q1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IEluc3BlY3RvclV0aWxpdGllczo6cGFyZW50U3R5
bGVTaGVldChydWxlKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3VyZVBhcnNlZERhdGFS
ZWFkeSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJ1bGUtPnNldFNlbGVjdG9yVGV4dChz
ZWxlY3Rvcik7CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHN0
eWxlU291cmNlRGF0YUZvcihydWxlLT5zdHlsZSgpKTsKKyAgICBpZiAoIXNvdXJjZURhdGEpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgY29uc3QgU3RyaW5nJiBzaGVldFRleHQgPSBtX3BhcnNl
ZFN0eWxlU2hlZXQudGV4dCgpOworICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0VGV4dCA9IHNoZWV0
VGV4dC5zdWJzdHJpbmcoMCwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpOwor
ICAgIG5ld1N0eWxlU2hlZXRUZXh0ICs9IHNlbGVjdG9yOworICAgIG5ld1N0eWxlU2hlZXRUZXh0
ICs9IHNoZWV0VGV4dC5yaWdodChzaGVldFRleHQubGVuZ3RoKCkgLSBzb3VyY2VEYXRhLT5zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldC5zZXRUZXh0KG5ld1N0
eWxlU2hlZXRUZXh0KTsKKyAgICByZXR1cm4gcnVsZTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0
cmluZyYgdGV4dCkKK3sKKyAgICBpZiAoIWVuc3VyZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgaWQgPSBydWxlT3JTdHlsZUlkKHN0eWxlKTsK
KyAgICBpZiAoIWlkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBzdHlsZS0+c2V0Q3NzVGV4dCh0ZXh0LCBlYyk7CisgICAgaWYgKCFlYykK
KyAgICAgICAgZGlkU3R5bGVUZXh0Q2hhbmdlKGlkLCB0ZXh0KTsKKworICAgIHJldHVybiAhZWM7
Cit9CisKK0RvY3VtZW50KiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpvd25lckRvY3VtZW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9saXZlU3R5bGVTaGVldC0+ZG9jdW1lbnQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpkaWRTdHlsZVNoZWV0VGV4dENoYW5nZShjb25zdCBTdHJp
bmcmIG5ld1RleHQpCit7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRleHQobmV3VGV4dCk7
Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZGlkU3R5bGVUZXh0Q2hhbmdlKGNvbnN0
IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KQoreworICAgIENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxl
KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0
ID0gSW5zcGVjdG9yVXRpbGl0aWVzOjpwYXJlbnRTdHlsZVNoZWV0KHN0eWxlKTsKKyAgICBTdHJp
bmcgcGF0Y2hlZFRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHRXaXRoQ2hh
bmdlZFN0eWxlKHBhcmVudFN0eWxlU2hlZXQsIHN0eWxlSWQsIG5ld1RleHQsICZwYXRjaGVkVGV4
dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisgICAgZGlkU3R5bGVTaGVl
dFRleHRDaGFuZ2UocGF0Y2hlZFRleHQpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6
OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
LCBjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgbmV3U3R5bGVUZXh0LCBTdHJp
bmcqIHJlc3VsdCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0eWxlRm9y
SWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHN0eWxlU291cmNl
RGF0YUZvcihzdHlsZSk7CisgICAgdW5zaWduZWQgYm9keVN0YXJ0ID0gc291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2Uuc3RhcnQ7CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnN0
eWxlQm9keVJhbmdlLmVuZDsKKyAgICBBU1NFUlQoYm9keVN0YXJ0IDw9IGJvZHlFbmQpOworCisg
ICAgU3RyaW5nIHRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpOworICAgIEFTU0VSVChi
b2R5RW5kIDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4Y2x1c2l2ZQorCisgICAg
U3RyaW5nIHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9keVN0YXJ0KTsKKyAgICBw
YXRjaGVkVGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRleHQgKz0gdGV4dC5zdWJz
dHJpbmcoYm9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3VsdCA9IHBhdGNoZWRUZXh0
OworICAgIHJldHVybiB0cnVlOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnJ1bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAoreworICAgIGJvb2wgb2s7Cisg
ICAgdW5zaWduZWQgaW5kZXggPSBpZC50b1VJbnQoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fbGl2ZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6
ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxpdGll
czo6YXNDU1NTdHlsZVJ1bGUobV9saXZlU3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlm
ICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoaW5kZXggPT0gY3Vy
cmVudEluZGV4KQorICAgICAgICAgICAgcmV0dXJuIHJ1bGU7CisKKyAgICAgICAgKytjdXJyZW50
SW5kZXg7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7
CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKKyAgICBpZiAoIXJ1bGUp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7Cit9CisKK1Bh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZE9iamVj
dEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGE7CisgICAgaWYgKGVuc3VyZVBhcnNlZERhdGFSZWFk
eSgpKQorICAgICAgICBzb3VyY2VEYXRhID0gc3R5bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKKwor
ICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlKHN0eWxlLCBmdWxsUnVsZU9yU3R5bGVJZChzdHlsZSksIHNvdXJj
ZURhdGEuZ2V0KCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJwYXJlbnRTdHlsZVNoZWV0SWQi
LCBpZCgpKTsKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworCitJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6Okluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50KQorICAgIDogSW5zcGVjdG9yU3R5
bGVTaGVldChpZCwgMCkKKyAgICAsIG1fZWxlbWVudChlbGVtZW50KQorICAgICwgbV9zdHlsZVNv
dXJjZURhdGEoMCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKKyAgICBtX2VsZW1lbnQtPnNldEF0dHJpYnV0ZSgic3R5bGUiLCB0ZXh0LCBlYyk7CisgICAg
bV9zdHlsZVNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICByZXR1cm4gIWVjOworfQorCit1bnNpZ25l
ZCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OnJ1bGVJbmRleEJ5U3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlID09IGlu
bGluZVN0eWxlKCkpOworICAgIHJldHVybiAwOyAvLyB0aGUgb25seSBzdHlsZSBpbiB0aGUgImZh
a2UiIHN0eWxlc2hlZXQKK30KKworQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlOjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7
CisgICAgQVNTRVJUKGlkID09ICIwIik7CisgICAgcmV0dXJuIGlubGluZVN0eWxlKCk7Cit9CisK
K1JlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVT
dHlsZTo6c3R5bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dAoreworICAgIEFTU0VSVChzdHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsKKyAgICByZXR1cm4gbV9z
dHlsZVNvdXJjZURhdGE7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQoreworICAgIGlmIChtX3N0eWxlU291cmNlRGF0
YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiBzb3VyY2VEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1
Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhzb3VyY2VEYXRhLmdldCgpKTsKKyAgICBp
ZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3R5bGVTb3VyY2VE
YXRhID0gc291cmNlRGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdl
cyhDU1NTdHlsZVNvdXJjZURhdGEqIHJlc3VsdCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFN0cmluZywgc3R5bGVBdHRyaWJ1dGVOYW1lLCAoInN0eWxlIikpOworCisgICAgaWYgKCFtX2Vs
ZW1lbnQtPmlzU3R5bGVkRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBT
dHJpbmcgc3R5bGVUZXh0ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCkt
PmdldEF0dHJpYnV0ZShzdHlsZUF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzdHlsZVRleHQuaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlc3VsdC0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAg
ICAgICByZXN1bHQtPnN0eWxlQm9keVJhbmdlLmVuZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcERl
Y2xhcmF0aW9uID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIENT
U1BhcnNlciBwOworICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCks
IHN0eWxlVGV4dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworCitJbnNwZWN0b3JD
U1NBZ2VudDo6SW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJ
bnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpCisgICAgOiBtX2Zyb250ZW5kKGZyb250ZW5kKQor
ICAgICwgbV9kb21BZ2VudChkb21BZ2VudCkKKyAgICAsIG1fbGFzdFN0eWxlU2hlZXRJZCgxKQor
ICAgICwgbV9sYXN0UnVsZUlkKDEpCisgICAgLCBtX2xhc3RTdHlsZUlkKDEpCit7CisgICAgbV9k
b21BZ2VudC0+c2V0RE9NTGlzdGVuZXIodGhpcyk7Cit9CisKK0luc3BlY3RvckNTU0FnZW50Ojp+
SW5zcGVjdG9yQ1NTQWdlbnQoKQoreworICAgIHJlc2V0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnJlc2V0KCkKK3sKKyAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcigwKTsK
K30KKworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1lbnRGb3JJZChsb25nIG5vZGVJ
ZCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklkKG5vZGVJZCk7Cisg
ICAgcmV0dXJuICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9IE5vZGU6OkVMRU1FTlRfTk9E
RSkgPyAwIDogc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOworfQorCisvLyBbcmVxXSBJbnNw
ZWN0b3JDU1NBZ2VudAorUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmJ1aWxkQXJyYXlGb3JSdWxlTGlzdChDU1NSdWxlTGlzdCogcnVsZUxpc3QpCit7CisgICAg
UmVmUHRyPEluc3BlY3RvckFycmF5PiByZXN1bHQgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CisgICAgaWYgKCFydWxlTGlzdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcnVsZUxpc3QtPmxlbmd0aCgpOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvclV0aWxp
dGllczo6YXNDU1NTdHlsZVJ1bGUocnVsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1
bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0
KiBwYXJlbnRTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoSW5zcGVjdG9yVXRpbGl0aWVzOjpw
YXJlbnRTdHlsZVNoZWV0KHJ1bGUpKTsKKyAgICAgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpCisg
ICAgICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JSdWxlKHBhcmVudFN0
eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSwgcnVsZSkpOworICAgIH0KKyAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0TWF0Y2hlZFJ1
bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCkK
K3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHlsZVNlbGVjdG9yKiBzZWxl
Y3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JF
bGVtZW50KGVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAqcmVzdWx0ID0gYnVpbGRBcnJheUZv
clJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdl
bnQ6OmdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5z
cGVjdG9yQXJyYXk+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRG
b3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKTsKKyAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lkID0gRklSU1RfUFVCTElD
X1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxfUFNFVURPSUQ7IHBzZXVk
b0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkpIHsKKyAgICAgICAgUmVm
UHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+cHNldWRvU3R5bGVSdWxl
c0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgaWYg
KG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXROdW1iZXIoInBzZXVkb0lkIiwg
c3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5z
ZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgp
KSk7CisgICAgICAgICAgICAoKnJlc3VsdCktPnB1c2hPYmplY3QocHNldWRvU3R5bGVzLnJlbGVh
c2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6Omdl
dEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2Rl
SWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9
IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpOworfQorCisvLyBzdGF0aWMK
K0VsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmlzTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgTm9kZSogbm9kZSA9
IHN0YXRpY19jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4oc3R5bGUpLT5ub2RlKCk7
CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1N0eWxlZEVsZW1lbnQoKSB8fCBzdGF0aWNfY2Fz
dDxTdHlsZWRFbGVtZW50Kj4obm9kZSktPmdldElubGluZVN0eWxlRGVjbCgpICE9IHN0eWxlKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUp
OworfQorCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0Fn
ZW50Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBOb2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9y
U3R5bGVTaGVldC5maW5kKGVsZW1lbnQpOworICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXQuZW5kKCkpIHsKKyAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hlZXRJZCA9IFN0
cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgQ1NTU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5zdHlsZSgpOworICAgICAgICBpZiAoIXN0eWxlKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU+IGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShuZXdTdHlsZVNoZWV0SWQsIGVsZW1lbnQpOworICAgICAg
ICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGVsZW1lbnQsIGluc3BlY3RvclN0eWxl
U2hlZXQpOworICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChuZXdTdHlsZVNo
ZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5
bGVTaGVldC5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKK30K
Kwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVGb3JOb2RlMihsb25nIG5v
ZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCit7CisgICAgRWxlbWVudCogZWxl
bWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNo
ZWV0ID0gYXNJbnNwZWN0b3JTdHlsZVNoZWV0KGVsZW1lbnQpOworICAgIGlmICghc3R5bGVTaGVl
dCkKKyAgICAgICAgcmV0dXJuOyAvLyA/Pz8KKworICAgICpzdHlsZSA9IHN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVudC0+c3R5bGUoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPElu
c3BlY3RvclZhbHVlPiogc3R5bGUpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRG
b3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
RE9NV2luZG93KiBkZWZhdWx0VmlldyA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVs
dFZpZXcoKTsKKyAgICBpZiAoIWRlZmF1bHRWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICAq
c3R5bGUgPSBidWlsZE9iamVjdEZvclN0eWxlKGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxl
KGVsZW1lbnQsICIiKS5nZXQoKSwgIiIpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFy
cmF5Piogc3R5bGUpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2Rl
SWQpOworICAgIGlmICghZWxlbWVudCkgeworICAgICAgICAqc3R5bGUgPSBJbnNwZWN0b3JBcnJh
eTo6Y3JlYXRlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUmVmUHRyPEluc3BlY3Rv
ckFycmF5PiBpbmhlcml0ZWRTdHlsZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAg
RWxlbWVudCogcGFyZW50RWxlbWVudCA9IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICB3
aGlsZSAocGFyZW50RWxlbWVudCkgeworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBw
YXJlbnRTdHlsZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChwYXJl
bnRFbGVtZW50LT5zdHlsZSgpICYmIHBhcmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgpKSB7
CisgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hl
ZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoc3R5
bGVTaGVldCkKKyAgICAgICAgICAgICAgICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVT
dHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+aW5saW5l
U3R5bGUoKSkpOworICAgICAgICB9CisKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciogcGFyZW50
U2VsZWN0b3IgPSBwYXJlbnRFbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBwYXJlbnRNYXRjaGVkUnVsZXMgPSBwYXJl
bnRTZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1lbnQocGFyZW50RWxlbWVudCwgZmFsc2UsIHRy
dWUpOworICAgICAgICBwYXJlbnRTdHlsZS0+c2V0QXJyYXkoIm1hdGNoZWRDU1NSdWxlcyIsIGJ1
aWxkQXJyYXlGb3JSdWxlTGlzdChwYXJlbnRNYXRjaGVkUnVsZXMuZ2V0KCkpKTsKKyAgICAgICAg
aW5oZXJpdGVkU3R5bGVzLT5wdXNoT2JqZWN0KHBhcmVudFN0eWxlLnJlbGVhc2UoKSk7CisgICAg
ICAgIHBhcmVudEVsZW1lbnQgPSBwYXJlbnRFbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CisgICAg
fQorICAgICpzdHlsZSA9IGluaGVyaXRlZFN0eWxlcy5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OmdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5
bGVzKQoreworICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiYgZG9jdW1l
bnRzID0gZG9tQWdlbnQoKS0+ZG9jdW1lbnRzKCk7CisgICAgZm9yIChMaXN0SGFzaFNldDxSZWZQ
dHI8RG9jdW1lbnQ+ID46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZG9jdW1lbnRzLmJlZ2luKCk7IGl0
ICE9IGRvY3VtZW50cy5lbmQoKTsgKytpdCkgeworICAgICAgICBTdHlsZVNoZWV0TGlzdCogbGlz
dCA9ICgqaXQpLT5zdHlsZVNoZWV0cygpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGlzdC0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5bGVT
aGVldCA9IGxpc3QtPml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NT
dHlsZVNoZWV0KCkpIHsKKyAgICAgICAgICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNw
ZWN0b3JTdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KHN0eWxlU2hlZXQpKTsKKyAgICAgICAgICAgICAgICAoKnN0eWxlcyktPnB1c2hTdHJpbmco
aW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpiaW5kU3R5
bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gbV9jc3NTdHlsZVNoZWV0VG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmdldChzdHlsZVNoZWV0KTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxl
U2hlZXQpIHsKKyAgICAgICAgU3RyaW5nIGlkID0gU3RyaW5nOjpudW1iZXIobV9sYXN0U3R5bGVT
aGVldElkKyspOworICAgICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVT
aGVldDo6Y3JlYXRlKGlkLCBzdHlsZVNoZWV0KTsKKyAgICAgICAgbV9pZFRvSW5zcGVjdG9yU3R5
bGVTaGVldC5zZXQoaWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICBtX2Nzc1N0eWxl
U2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KHN0eWxlU2hlZXQsIGluc3BlY3RvclN0eWxl
U2hlZXQpOworICAgIH0KKyAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKK30K
KworSW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6Omluc3BlY3RvclN0eWxl
U2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQp
Cit7CisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0eWxlU2hlZXQg
PSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmdldChkb2N1bWVudCk7CisgICAgaWYg
KCFpbnNwZWN0b3JTdHlsZVNoZWV0ICYmIGNyZWF0ZUlmQWJzZW50KSB7CisgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0g
ZG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoInN0eWxlIiwgZWMpOworICAgICAgICBpZiAoIWVjKQor
ICAgICAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3Mi
LCBlYyk7CisgICAgICAgIGlmICghZWMpCisgICAgICAgICAgICBkb2N1bWVudC0+aGVhZCgpLT5h
cHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAgICAgICAgaWYgKGVjKQorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cyA9IGRvY3Vt
ZW50LT5zdHlsZVNoZWV0cygpOworICAgICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5
bGVTaGVldHMtPml0ZW0oc3R5bGVTaGVldHMtPmxlbmd0aCgpIC0gMSk7CisgICAgICAgIGlmICgh
c3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQqPihzdHlsZVNoZWV0KTsKKyAgICAgICAgU3RyaW5nIGlkID0gU3RyaW5nOjpudW1iZXIo
bV9sYXN0U3R5bGVTaGVldElkKyspOworICAgICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5z
cGVjdG9yU3R5bGVTaGVldDo6Y3JlYXRlKGlkLCBjc3NTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQoaWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAg
ICAgICBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGNzc1N0eWxlU2hl
ZXQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICBtX2RvY3VtZW50VG9JbnNwZWN0b3JT
dHlsZVNoZWV0LnNldChkb2N1bWVudCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CisgICAgfQorICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOworfQorCitJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVTaGVldEZvcklkKGNvbnN0IFN0cmluZyYgc3R5
bGVTaGVldElkKQoreworICAgIElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBp
dCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChzdHlsZVNoZWV0SWQpOworICAgIHJl
dHVybiBpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpID8gMCA6IGl0LT5zZWNv
bmQuZ2V0KCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldFN0eWxlU2hlZXQyKGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZVNo
ZWV0T2JqZWN0KQoreworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hl
ZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBpZiAoIWluc3BlY3RvclN0
eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgICpzdHlsZVNoZWV0T2JqZWN0ID0gYnVp
bGRPYmplY3RGb3JTdHlsZVNoZWV0KGluc3BlY3RvclN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQo
KSwgaW5zcGVjdG9yU3R5bGVTaGVldC0+bGl2ZVN0eWxlU2hlZXQoKSk7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hl
ZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBp
ZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3Rv
clN0eWxlU2hlZXQtPnNldFRleHQodGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OnNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0
ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gaWRQYXJ0czsKKyAgICBmdWxsU3R5bGVJZC5zcGxpdCgnOicsIGlkUGFydHMpOworICAgIEFT
U0VSVChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5hdCgwKSk7CisgICAg
aWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoaWRQ
YXJ0cy5hdCgxKSk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRTdHlsZVRleHQoc3R5bGUsIHRleHQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICAqcmVzdWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmpl
Y3RGb3JTdHlsZShzdHlsZSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVBy
b3BlcnR5Mihjb25zdCBTdHJpbmcmLCBsb25nLCBib29sKQoreworfQorCit2b2lkIEluc3BlY3Rv
ckNTU0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBT
dHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAg
VmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKKyAgICBydWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsK
KyAgICBBU1NFUlQoaWRQYXJ0cy5zaXplKCkgPT0gMik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKGlkUGFydHMuYXQoMCkp
OworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q1NTU3R5bGVSdWxlKiBtb2RpZmllZFJ1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRSdWxl
U2VsZWN0b3IoaWRQYXJ0cy5hdCgxKSwgc2VsZWN0b3IpOworICAgIGlmICghbW9kaWZpZWRSdWxl
KQorICAgICAgICByZXR1cm47CisKKyAgICAqcmVzdWx0ID0gYnVpbGRPYmplY3RGb3JSdWxlKGlu
c3BlY3RvclN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSwgbW9kaWZpZWRSdWxlKTsKK30KKwor
dm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6YWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
Cit7CisgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50KCktPm5vZGVGb3JJZChjb250ZXh0Tm9kZUlk
KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIEluc3BlY3RvclN0eWxl
U2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9jdW1l
bnQobm9kZS0+ZG9jdW1lbnQoKSwgdHJ1ZSk7CisgICAgQ1NTU3R5bGVSdWxlKiBuZXdSdWxlID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3Rvcik7CisgICAgaWYgKG5ld1J1bGUp
CisgICAgICAgICpyZXN1bHQgPSBidWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVTaGVl
dC0+b3duZXJEb2N1bWVudCgpLCBuZXdSdWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQ
cm9wZXJ0aWVzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IElu
c3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1By
b3BlcnRpZXM7ICsraSkKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5h
bWVTdHJpbmdzW2ldKTsKKworICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5yZWxlYXNl
KCk7Cit9CisKKy8vIFtyZXFdIEluc3BlY3RvckRPTUFnZW50CisvLyBbcmVxXSBJbnNwZWN0b3JD
U1NBZ2VudAorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9y
U3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0eWxlU2hlZXQpOworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVz
dWx0LT5zZXRTdHJpbmcoImlkIiwgaW5zcGVjdG9yU3R5bGVTaGVldC0+aWQoKSk7CisgICAgcmVz
dWx0LT5zZXRCb29sZWFuKCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOworICAg
IHJlc3VsdC0+c2V0U3RyaW5nKCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICByZXN1
bHQtPnNldFN0cmluZygidGl0bGUiLCBzdHlsZVNoZWV0LT50aXRsZSgpKTsKKyAgICBTdHJpbmcg
dGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT50ZXh0KCZ0ZXh0
KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRleHQiLCB0
ZXh0KTsKKworICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIGRvbUFn
ZW50KCktPmlkRm9yRG9jdW1lbnROb2RlKG93bmVyRG9jdW1lbnQpKTsKKyAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0
cnVlKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGNzc1J1bGVzID0gYnVpbGRBcnJheUZv
clJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpKTsKKyAgICByZXN1bHQtPnNldEFycmF5KCJjc3NS
dWxlcyIsIGNzc1J1bGVzLnJlbGVhc2UoKSk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
Cit9CisKKy8vIFtyZXFdIEluc3BlY3RvckRPTUFnZW50CisvLyBbcmVxXSBJbnNwZWN0b3JDU1NB
Z2VudAorUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWls
ZE9iamVjdEZvclJ1bGUoRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1N0eWxlUnVsZSogcnVs
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdXNlckFnZW50LCAoInVzZXIt
YWdlbnQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVzZXIsICgidXNlciIp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW5zcGVjdG9yLCAoImluc3BlY3Rv
ciIpKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4dCIsIHJ1
bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiY3NzVGV4dCIsIHJ1
bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUiLCBydWxl
LT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1bWVudFVSTCIsIGRv
bUFnZW50KCktPmRvY3VtZW50VVJMU3RyaW5nKG93bmVyRG9jdW1lbnQpKTsKKworICAgIENTU1N0
eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBJbnNwZWN0b3JVdGlsaXRpZXM6OnBhcmVudFN0
eWxlU2hlZXQocnVsZSk7CisgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpIHsKKyAgICAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50U3R5bGVTaGVldFZhbHVlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgcGFyZW50U3R5bGVTaGVldFZhbHVlLT5zZXRTdHJpbmco
ImhyZWYiLCBwYXJlbnRTdHlsZVNoZWV0LT5ocmVmKCkpOworICAgICAgICBwYXJlbnRTdHlsZVNo
ZWV0VmFsdWUtPnNldFN0cmluZygiaWQiLCBiaW5kU3R5bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0
KS0+aWQoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJwYXJlbnRTdHlsZVNoZWV0Iiwg
cGFyZW50U3R5bGVTaGVldFZhbHVlLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgU3RyaW5nIG9y
aWdpbigiIik7CisgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQgJiYgIXBhcmVudFN0eWxlU2hlZXQt
Pm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAg
ICAgIG9yaWdpbiA9IHVzZXJBZ2VudDsKKyAgICBlbHNlIGlmIChwYXJlbnRTdHlsZVNoZWV0ICYm
IHBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPm93bmVy
Tm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1lbnQiKQorICAgICAgICBvcmlnaW4gPSB1c2Vy
OworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBzdHlsZVNoZWV0Rm9y
RG9jID0gaW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KG93bmVyRG9jdW1lbnQsIGZhbHNl
KTsKKyAgICAgICAgaWYgKHN0eWxlU2hlZXRGb3JEb2MgJiYgcGFyZW50U3R5bGVTaGVldCA9PSBz
dHlsZVNoZWV0Rm9yRG9jLT5saXZlU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgb3JpZ2luID0g
aW5zcGVjdG9yOworICAgIH0KKyAgICByZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgb3JpZ2lu
KTsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBjb250
YWluZXJJbnNwZWN0b3JTdHlsZVNoZWV0KHJ1bGUtPnN0eWxlKCkpOworICAgIEFTU0VSVChpbnNw
ZWN0b3JTdHlsZVNoZWV0KTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhOworICAgIGlmIChpbnNwZWN0b3JTdHlsZVNoZWV0LT5lbnN1cmVQYXJzZWREYXRhUmVhZHko
KSkKKyAgICAgICAgc291cmNlRGF0YSA9IGluc3BlY3RvclN0eWxlU2hlZXQtPnN0eWxlU291cmNl
RGF0YUZvcihydWxlLT5zdHlsZSgpKTsKKyAgICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICBy
ZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JTdGFydE9mZnNldCIsIHNvdXJjZURhdGEtPnNlbGVj
dG9yTGlzdFJhbmdlLnN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInNlbGVjdG9y
RW5kT2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgZnVsbElkID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+ZnVsbFJ1bGVPclN0eWxl
SWQocnVsZS0+c3R5bGUoKSk7CisgICAgYm9vbCBiaW5kID0gb3JpZ2luICE9IHVzZXJBZ2VudCAm
JiBvcmlnaW4gIT0gdXNlcjsKKyAgICByZXN1bHQtPnNldE9iamVjdCgic3R5bGUiLCBpbnNwZWN0
b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCkpKTsKKyAgICBp
ZiAoYmluZCkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbElkKTsKKworICAg
IHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1l
bnQqIGVsZW1lbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3R5bGVBdHRyaWJ1
dGVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJp
YnV0ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
YXR0cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAg
ICAgIGlmIChhdHRyaWJ1dGUtPnN0eWxlKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1
dGVOYW1lID0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIHN0eWxlQXR0cmli
dXRlcy0+c2V0T2JqZWN0KGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSwgYnVpbGRPYmplY3RG
b3JTdHlsZShhdHRyaWJ1dGUtPnN0eWxlKCksICIiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICByZXR1cm4gc3R5bGVBdHRyaWJ1dGVzOworfQorCisvLyBzdGF0aWMKK1Bhc3NSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgQ1NTU3R5
bGVTb3VyY2VEYXRhKiBzb3VyY2VEYXRhKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgaWYgKCFmdWxsU3R5bGVJ
ZC5pc0VtcHR5KCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGZ1bGxTdHlsZUlk
KTsKKworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ3aWR0aCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZh
bHVlKCJ3aWR0aCIpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiaGVpZ2h0Iiwgc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKyAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VE
YXRhPiogcHJvcGVydHlEYXRhID0gMDsKKworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAg
IHJlc3VsdC0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJh
bmdlLnN0YXJ0KTsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoImVuZE9mZnNldCIsIHNvdXJj
ZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgICAgIHByb3BlcnR5RGF0YSA9ICZzb3Vy
Y2VEYXRhLT5wcm9wZXJ0eURhdGE7CisgICAgfQorICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxl
UHJvcGVydGllcyhzdHlsZSwgcmVzdWx0LmdldCgpLCBwcm9wZXJ0eURhdGEpOworCisgICAgcmV0
dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT4qIHByb3BlcnR5RGF0YSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBy
b3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAg
ICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0eU5hbWVU
b1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kU2hvcnRo
YW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlOYW1lczsKKyAgICBpZiAo
cHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0
YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlEYXRhLT5iZWdpbigpOyBpdCAhPSBwcm9w
ZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eVNv
dXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSAqaXQ7CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAg
ICAgICBwcm9wZXJ0aWVzLT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKKyAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNvdXJjZVBy
b3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygi
bmFtZSIsIG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFsdWUiLCBw
cm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInBy
aW9yaXR5IiwgcHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgPyAiaW1wb3J0YW50IiA6ICIiKTsKKyAg
ICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJhY3RpdmUiKTsKKyAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50cnkucGFy
c2VkT2spOworICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3RhcnRPZmZzZXQiLCBw
cm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXROdW1i
ZXIoImVuZE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2UuZW5kKTsKKyAgICAgICAgICAgIGlm
IChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHktPnNl
dEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAgIFN0cmluZyBzaG9y
dGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAgICAgICAg
ICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMu
Y29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZFNob3J0aGFu
ZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+
c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
cHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAg
IHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPjo6
aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHku
ZmluZChuYW1lKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5hbWVUb1By
ZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3RpdmVJdC0+
c2Vjb25kLT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIpOworICAgICAgICAgICAgICAg
IGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0
eS5zZXQobmFtZSwgcHJvcGVydHkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChpbnQg
aSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
U3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKHNvdXJjZVByb3BlcnR5
TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBz
b3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9i
amVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBwcm9w
ZXJ0aWVzLT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmlu
ZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHN0
eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmlu
ZygicHJpb3JpdHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eSgibmFtZSIpKTsKKyAgICAg
ICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0Iiwgc3R5bGUtPmlzUHJvcGVydHlJbXBs
aWNpdChuYW1lKSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHRy
dWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUiKTsKKyAg
ICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1l
KTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFu
ZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9ydGhhbmRz
LmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5kcy5hZGQo
c2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5nKHNob3J0
aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVydGllcyIsIHByb3BlcnRpZXMpOworICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1ZXMpOwor
fQorCisvLyBzdGF0aWMKK1ZlY3RvcjxTdHJpbmc+IEluc3BlY3RvckNTU0FnZW50Ojpsb25naGFu
ZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hv
cnRoYW5kUHJvcGVydHkpCit7CisgICAgVmVjdG9yPFN0cmluZz4gcHJvcGVydGllczsKKyAgICBI
YXNoU2V0PFN0cmluZz4gZm91bmRQcm9wZXJ0aWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFBy
b3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAgIGlmIChmb3VuZFByb3BlcnRpZXMuY29u
dGFpbnMoaW5kaXZpZHVhbFByb3BlcnR5KSB8fCBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworCisgICAgICAgIGZvdW5kUHJvcGVydGllcy5hZGQoaW5kaXZpZHVhbFByb3BlcnR5
KTsKKyAgICAgICAgcHJvcGVydGllcy5hcHBlbmQoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICB9
CisgICAgcmV0dXJuIHByb3BlcnRpZXM7Cit9CisKKy8vIHN0YXRpYworU3RyaW5nIEluc3BlY3Rv
ckNTU0FnZW50OjpzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29u
c3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlz
RW1wdHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHls
ZS0+aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQo
aW5kaXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KGlu
ZGl2aWR1YWxQcm9wZXJ0eSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBTdHJpbmcgaW5kaXZpZHVhbFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoaW5kaXZp
ZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsVmFsdWUgPT0gImluaXRp
YWwiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHZhbHVlLmxl
bmd0aCgpKQorICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgiICIpOworICAgICAgICAgICAg
dmFsdWUuYXBwZW5kKGluZGl2aWR1YWxWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHZhbHVlOworfQorCisvLyBzdGF0aWMKK1N0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6c2hv
cnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYg
c2hvcnRoYW5kUHJvcGVydHkpCit7CisgICAgU3RyaW5nIHByaW9yaXR5ID0gc3R5bGUtPmdldFBy
b3BlcnR5UHJpb3JpdHkoc2hvcnRoYW5kUHJvcGVydHkpOworICAgIGlmIChwcmlvcml0eS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUt
Pml0ZW0oaSk7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGlu
ZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9y
aXR5KGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcHJpb3JpdHk7Cit9CisKK0luc3BlY3RvclN0eWxlU2hlZXQqIElu
c3BlY3RvckNTU0FnZW50Ojpjb250YWluZXJJbnNwZWN0b3JTdHlsZVNoZWV0KENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBpbmxpbmVTdHlsZUVs
ZW1lbnQoc3R5bGUpOworICAgIGlmIChlbGVtZW50KQorICAgICAgICByZXR1cm4gYXNJbnNwZWN0
b3JTdHlsZVNoZWV0KGVsZW1lbnQpOworCisgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVT
aGVldCA9IEluc3BlY3RvclV0aWxpdGllczo6cGFyZW50U3R5bGVTaGVldChzdHlsZSk7CisgICAg
aWYgKCFwYXJlbnRTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBi
aW5kU3R5bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0KTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NB
Z2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQoreworICAgIE5vZGVUb0luc3BlY3Rv
clN0eWxlU2hlZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LmZpbmQobm9kZSk7CisgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5l
bmQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5y
ZW1vdmUoaXQtPnNlY29uZC0+aWQoKSk7CisgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LnJlbW92ZShub2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRG9j
dW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0
eWxlU2hlZXQucmVtb3ZlKGRvY3VtZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NB
Z2VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhOGIzODIKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0w
LDAgKzEsMjQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NBZ2VudF9o
CisjZGVmaW5lIEluc3BlY3RvckNTU0FnZW50X2gKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgor
I2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0YS5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVz
LmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgor
I2luY2x1ZGUgIlRpbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb250YWluZXJO
b2RlOworY2xhc3MgQ1NTUnVsZTsKK2NsYXNzIENTU1J1bGVMaXN0OworY2xhc3MgQ1NTU3R5bGVE
ZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7Citj
bGFzcyBFbGVtZW50OworY2xhc3MgRXZlbnQ7CitjbGFzcyBJbnNwZWN0b3JET01BZ2VudDsKK2Ns
YXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgTWF0Y2hKb2I7CitjbGFzcyBOYW1lTm9kZU1h
cDsKK2NsYXNzIE5vZGU7CitjbGFzcyBQYWdlOworCisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKwor
Y2xhc3MgUGFyc2VkU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4gPiBTb3VyY2VEYXRhOworICAgIFBhcnNlZFN0eWxlU2hl
ZXQoKTsKKworICAgIENTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3N0eWxlU2hlZXRCeVBhcnNlcjsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGV4dDsgfQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQp
OworICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4dDsgfQorICAgIFNv
dXJjZURhdGEqIHNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldFNvdXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VE
YXRhKTsKKyAgICBib29sIGhhc1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURh
dGE7IH0KKyAgICBib29sIGVuc3VyZVNvdXJjZURhdGEoTm9kZSogb3duZXJOb2RlKTsKKyAgICBS
ZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGFBdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdm9pZCBleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBTdHlsZVJ1bGVSYW5nZU1hcCYsIFNvdXJjZURhdGEqIHJlc3VsdCk7CisKKyAg
ICAvLyBTdHlsZVNoZWV0IGNvbnN0cnVjdGVkIHdoaWxlIHBhcnNpbmcgbV90ZXh0LgorICAgIENT
U1N0eWxlU2hlZXQqIG1fc3R5bGVTaGVldEJ5UGFyc2VyOworICAgIFN0cmluZyBtX3RleHQ7Cisg
ICAgYm9vbCBtX2hhc1RleHQ7CisgICAgT3duUHRyPFNvdXJjZURhdGE+IG1fc291cmNlRGF0YTsK
K307CisKK2NsYXNzIEluc3BlY3RvclN0eWxlU2hlZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxJbnNw
ZWN0b3JTdHlsZVNoZWV0PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVj
dG9yU3R5bGVTaGVldD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaWQsIENTU1N0eWxlU2hlZXQqIGxp
dmVTdHlsZVNoZWV0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3JTdHlsZVNoZWV0KGlkLCBsaXZlU3R5bGVTaGVldCkpOworICAgIH0KKworICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogbGl2ZVN0eWxlU2hl
ZXQpOworCisgICAgdmlydHVhbCBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9p
ZDsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogbGl2ZVN0eWxlU2hlZXQoKSBjb25zdCB7
IHJldHVybiBtX2xpdmVTdHlsZVNoZWV0OyB9CisgICAgdmlydHVhbCBib29sIHRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYp
OworICAgIHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNv
bnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0
YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gbV9wYXJzZWRT
dHlsZVNoZWV0LnN0eWxlU291cmNlRGF0YUF0KHJ1bGVJbmRleEJ5U3R5bGUoc3R5bGUpKTsgfQor
ICAgIHZpcnR1YWwgU3RyaW5nIGZ1bGxSdWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlKSBjb25zdCB7IHJldHVybiBpZCgpICsgIjoiICsgcnVsZU9yU3R5bGVJZChzdHlsZSk7
IH0KKyAgICB2aXJ0dWFsIENTU1N0eWxlUnVsZSogYWRkUnVsZShjb25zdCBTdHJpbmcmIHNlbGVj
dG9yKTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlUnVsZSogc2V0UnVsZVNlbGVjdG9yKGNvbnN0IFN0
cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIHZpcnR1YWwgQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFs
IENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBTdHJpbmcgcnVsZU9yU3R5bGVJ
ZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyB1bnNpZ25lZCBpbmRleCA9IHJ1
bGVJbmRleEJ5U3R5bGUoc3R5bGUpOyByZXR1cm4gaW5kZXggPT0gVUlOVF9NQVggPyAiIiA6IFN0
cmluZzo6bnVtYmVyKGluZGV4KTsgfQorICAgIHZpcnR1YWwgdm9pZCBkaWRTdHlsZVRleHRDaGFu
Z2UoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgU3RyaW5nJiBuZXdUZXh0KTsKKyAgICB2aXJ0dWFs
IHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0Owor
Citwcml2YXRlOgorICAgIHZvaWQgZGlkU3R5bGVTaGVldFRleHRDaGFuZ2UoY29uc3QgU3RyaW5n
JiBuZXdUZXh0KTsKKyAgICBib29sIHN0eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NT
dHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIG5ld1N0eWxl
VGV4dCwgU3RyaW5nKiByZXN1bHQpOworICAgIENTU1N0eWxlUnVsZSogZmluZExpdmVSdWxlV2l0
aFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICB2b2lkIHJlYnVpbGRQYXJzZWRTdHls
ZVNoZWV0KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldFRleHQpOworICAgIHZvaWQgcmV2YWxpZGF0
ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICBib29sIGVuc3VyZVRleHQoKSBjb25z
dDsKKyAgICBib29sIHJlc291cmNlU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0
OworICAgIGJvb2wgaW5saW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0Owor
ICAgIGJvb2wgc3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OworCisgICAgU3Ry
aW5nIG1faWQ7CisgICAgQ1NTU3R5bGVTaGVldCogbV9saXZlU3R5bGVTaGVldDsKKyAgICBib29s
IG1faXNSZXZhbGlkYXRpbmc7CisgICAgbXV0YWJsZSBQYXJzZWRTdHlsZVNoZWV0IG1fcGFyc2Vk
U3R5bGVTaGVldDsKK307CisKKworY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0
eWxlIDogcHVibGljIEluc3BlY3RvclN0eWxlU2hlZXQgeworcHVibGljOgorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKGNvbnN0
IFN0cmluZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShpZCwgZWxlbWVudCkp
OworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShjb25zdCBT
dHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50KTsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBp
bmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+c3R5bGUoKTsgfQorICAgIHZp
cnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQt
PmRvY3VtZW50KCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2V0VGV4dChjb25zdCBTdHJpbmcmKSB7
IEFTU0VSVChmYWxzZSk7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzZXRTdHls
ZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgdmly
dHVhbCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGFGb3IoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0OworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIENTU1N0
eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3R5bGVUZXh0Q2hhbmdlKGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0
IFN0cmluZyYgbmV3VGV4dCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5kZXhCeVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBi
b29sIGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKENTU1N0eWxlU291cmNlRGF0YSogcmVzdWx0KTsK
KworICAgIEVsZW1lbnQqIG1fZWxlbWVudDsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiBtX3N0eWxlU291cmNlRGF0YTsKK307CisKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50IDogcHVi
bGljIFJlZkNvdW50ZWQ8SW5zcGVjdG9yQ1NTQWdlbnQ+LCBwdWJsaWMgSW5zcGVjdG9yRE9NQWdl
bnQ6OkRPTUxpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JDU1NBZ2VudD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9y
RE9NQWdlbnQqIGRvbUFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJ
bnNwZWN0b3JDU1NBZ2VudChmcm9udGVuZCwgZG9tQWdlbnQpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5
bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxlU291cmNl
RGF0YSogPSAwKTsKKworICAgIEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckZyb250ZW5kKiBm
cm9udGVuZCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KTsKKyAgICB+SW5zcGVjdG9yQ1NT
QWdlbnQoKTsKKworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGdldE1hdGNoZWRSdWxlc0Zv
ck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxlcyk7CisgICAg
dm9pZCBnZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiogcnVsZXMpOworICAgIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9k
ZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7CisgICAgdm9p
ZCBnZXRJbmxpbmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZSk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2Rl
SWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKKyAgICB2b2lkIGdldEluaGVyaXRl
ZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1
bHQpOworICAgIHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHls
ZXMpOworICAgIHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQs
IFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBzZXRTdHlsZVNoZWV0
VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7Cisg
ICAgdm9pZCBzZXRTdHlsZVRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5n
JiB0ZXh0LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xl
UHJvcGVydHkyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJv
b2wgZGlzYWJsZWQpOworICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIHJ1
bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVz
dWx0KTsKKyAgICB2b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2
b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVz
dWx0KTsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5z
cGVjdG9yU3R5bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDsKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+
IENTU1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPE5vZGUqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiA+IE5v
ZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7IC8vIGZvciBib2d1cyAic3R5bGVzaGVldHMiIHdp
dGggaW5saW5lIG5vZGUgc3R5bGVzCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVu
dD4sIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9JbnNwZWN0b3JTdHls
ZVNoZWV0TWFwOyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKworICAgIHN0YXRpYyBF
bGVtZW50KiBpbmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHN0
YXRpYyB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xh
cmF0aW9uKiwgSW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJj
ZURhdGE+KiBwcm9wZXJ0eURhdGEpOworICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kVmFsdWUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOwor
ICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbios
IGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBsb25naGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmlu
ZyYgc2hvcnRoYW5kUHJvcGVydHkpOworCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGlu
ZVN0eWxlKiBhc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCk7CisgICAgRWxl
bWVudCogZWxlbWVudEZvcklkKGxvbmcgbm9kZUlkKTsKKyAgICBJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQoKSBjb25zdCB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CisKKyAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldEZvckRvY3VtZW50KERvY3VtZW50
KiwgYm9vbCBjcmVhdGVJZkFic2VudCk7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVT
aGVldEZvcklkKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKTsKKworICAgIFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoRG9jdW1lbnQqIG93bmVy
RG9jdW1lbnQsIENTU1N0eWxlU2hlZXQqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1
bGUqKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUnVsZUxp
c3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCk7CisgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogY29udGFpbmVySW5zcGVjdG9yU3R5bGVTaGVldChDU1NTdHls
ZURlY2xhcmF0aW9uKik7CisKKyAgICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9NTGlzdGVuZXIg
aW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kik7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOworCisgICAgSW5zcGVj
dG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBt
X2RvbUFnZW50OworCisgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAgbV9pZFRvSW5zcGVj
dG9yU3R5bGVTaGVldDsKKyAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFw
IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBOb2RlVG9JbnNwZWN0
b3JTdHlsZVNoZWV0TWFwIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBEb2N1bWVu
dFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0
OworCisgICAgbG9uZyBtX2xhc3RTdHlsZVNoZWV0SWQ7CisgICAgbG9uZyBtX2xhc3RSdWxlSWQ7
CisgICAgbG9uZyBtX2xhc3RTdHlsZUlkOworfTsKKworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNTU0FnZW50X2gpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGYyZWUyYzEuLjUyZWUy
Y2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OCw2
ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5z
cGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NT
dG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckRPTUFnZW50LmgiCkBAIC01MjIsNiArNTIzLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVy
Ojpjb25uZWN0RnJvbnRlbmQoKQogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7
CiAgICAgbV9mcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7CiAgICAg
bV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9jc3NTdG9yZS5nZXQoKSwg
bV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9jc3NBZ2VudCA9IEluc3BlY3RvckNTU0FnZW50Ojpj
cmVhdGUobV9mcm9udGVuZC5nZXQoKSwgbV9kb21BZ2VudC5nZXQoKSk7CiAKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgbV9zdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNy
ZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKQEAgLTYzNCw2ICs2MzYsMTAgQEAgdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAgICAgICAgIG1f
ZG9tQWdlbnQtPnJlc2V0KCk7CiAgICAgbV9kb21BZ2VudC5jbGVhcigpOwogCisgICAgaWYgKG1f
Y3NzQWdlbnQpCisgICAgICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7CisgICAgbV9jc3NBZ2VudC5j
bGVhcigpOworCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgIGlmIChtX3N0b3JhZ2VBZ2VudCkK
ICAgICAgICAgbV9zdG9yYWdlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKQEAgLTgwMyw2ICs4MDks
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKICAgICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAgIG1fZnJv
bnRlbmQtPnJlc2V0KCk7CiAgICAgICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOworICAgICAg
ICAgICAgbV9jc3NBZ2VudC0+cmVzZXQoKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShXT1JLRVJT
KQogICAgICAgICBtX3dvcmtlcnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaAppbmRleCA5ZTYzZjAxLi41MWUwNDU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5oCkBAIC02MSw2ICs2MSw3IEBAIGNsYXNzIEluc3BlY3RvckFycmF5
OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CiBj
bGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3Mg
SW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOwpAQCAtMzA0LDYgKzMwNSw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCog
bmV3U3RhdGUpOwogICAgIHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBw
YW5lbE5hbWUpOworICAgIEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1f
Y3NzQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQoKSB7IHJl
dHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGlt
ZUFnZW50cygpOwogCkBAIC0zNjcsNiArMzY5LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiAgICAgYm9v
bCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJv
bnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50OwogICAgIFJl
ZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9y
U3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ1NTU3Rv
cmU+IG1fY3NzU3RvcmU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5k
ZXggZjUxZGE3My4uOTlmYmM2OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
LmNwcApAQCAtMjE3LDYgKzIxNyw3IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01B
Z2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250CiAgICAgLCBt
X2Zyb250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCiAgICAgLCBtX21hdGNo
Sm9ic1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcikKKyAg
ICAsIG1fZG9tTGlzdGVuZXIoMCkKIHsKIH0KIApAQCAtMjM3LDYgKzIzOCwxMSBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiAgICAgQVNTRVJUKCFtX2RvY3VtZW50cy5zaXplKCkp
OwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRET01MaXN0ZW5lcihET01MaXN0ZW5l
ciogbGlzdGVuZXIpCit7CisgICAgbV9kb21MaXN0ZW5lciA9IGxpc3RlbmVyOworfQorCiB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQogewogICAgIGlm
IChkb2MgPT0gbWFpbkZyYW1lRG9jdW1lbnQoKSkKQEAgLTMyNiw2ICszMzIsOCBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFw
KQogICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgY29uc3Qg
SFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRN
TEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIHN0b3BMaXN0ZW5pbmcoZnJhbWVP
d25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICBpZiAobV9kb21MaXN0ZW5lcikKKyAg
ICAgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURvY3VtZW50KGZyYW1lT3duZXItPmNv
bnRlbnREb2N1bWVudCgpKTsKICAgICAgICAgY3NzU3RvcmUoKS0+cmVtb3ZlRG9jdW1lbnQoZnJh
bWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOwogICAgIH0KIApAQCAtMzk4LDYgKzQwNiwxMSBA
QCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZvcklkKGxvbmcgaWQpCiAgICAgcmV0dXJu
IDA7CiB9CiAKK2xvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmlkRm9yRG9jdW1lbnROb2RlKE5vZGUq
IGRvY05vZGUpCit7CisgICAgcmV0dXJuIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZG9jTm9k
ZSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldENoaWxkTm9kZXMobG9uZyBub2Rl
SWQpCiB7CiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCk7CkBAIC0xMTAyLDYg
KzExMTUsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUq
IG5vZGUpCiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1f
ZG9tTGlzdGVuZXIpCisgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURPTU5vZGUobm9k
ZSk7CisKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMocGFyZW50SWQpKSB7
CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBwZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9u
IGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCiAgICAgICAgIGlmIChpbm5lckNoaWxkTm9kZUNvdW50
KHBhcmVudCkgPT0gMSkKQEAgLTEyMzAsNiArMTI0NiwxMCBAQCB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpnZXRTdHlsZVNvdXJjZURhdGEobG9uZyBzdHlsZUlkLCBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PgogICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJib2R5UmFuZ2UiLCBib2R5UmFuZ2UpOwogICAg
IGJvZHlSYW5nZS0+c2V0TnVtYmVyKCJzdGFydCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdl
LnN0YXJ0KTsKICAgICBib2R5UmFuZ2UtPnNldE51bWJlcigiZW5kIiwgc291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2UuZW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZWxlY3RvclJh
bmdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgi
c2VsZWN0b3JSYW5nZSIsIHNlbGVjdG9yUmFuZ2UpOworICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51
bWJlcigic3RhcnQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7CisgICAg
c2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJlbmQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RS
YW5nZS5lbmQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydHlSYW5nZXMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVydHlE
YXRhIiwgcHJvcGVydHlSYW5nZXMpOwogICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+
JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7CkBAIC0xNDg4LDE0ICsx
NTA4LDYgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZShjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWYKICAgICAqcnVsZU9iamVjdCA9IGJ1aWxk
T2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpOwogfQogCi12b2lk
IEluc3BlY3RvckRPTUFnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNw
ZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpCi17Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5
PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBwcm9wZXJ0aWVzLT5wdXNo
U3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOwotICAgICpjc3NQcm9wZXJ0aWVzID0gcHJv
cGVydGllcy5yZWxlYXNlKCk7Ci19Ci0KIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgYm9vbCBiaW5kKQogewogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdl
bnQuaAppbmRleCA4OWM2ZmQwLi44YzBiMTU5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRP
TUFnZW50LmgKQEAgLTgwLDYgKzgwLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNs
YXNzIEluc3BlY3RvckRPTUFnZW50IDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIHB1Ymxp
YzoKKyAgICAgICAgc3RydWN0IERPTUxpc3RlbmVyIHsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZW1vdmVEb2N1bWVudChEb2N1bWVudCopID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRSZW1vdmVET01Ob2RlKE5vZGUqKSA9IDA7CisgICAgICAgIH07CisKICAgICAgICAg
c3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDU1NT
dG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01BZ2VudChjc3NTdG9y
ZSwgZnJvbnRlbmQpKTsKQEAgLTEzMSw3ICsxMzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0
eWxlT2JqZWN0KTsKICAgICAgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IobG9uZyBydWxlSWQsIGNv
bnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAg
ICB2b2lkIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcnVsZU9iamVjdCwgYm9vbCogc2VsZWN0b3JBZmZl
Y3RzTm9kZSk7Ci0gICAgICAgIHZvaWQgZ2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKTsKIAogICAgICAgICAvLyBNZXRob2RzIGNh
bGxlZCBmcm9tIHRoZSBJbnNwZWN0b3JDb250cm9sbGVyLgogICAgICAgICB2b2lkIHNldERvY3Vt
ZW50KERvY3VtZW50KiBkb2N1bWVudCk7CkBAIC0xNDMsMTEgKzE0NywxNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2hhcmFjdGVyRGF0YU1vZGlmaWVkKENoYXJhY3RlckRh
dGEqKTsKIAogICAgICAgICBOb2RlKiBub2RlRm9ySWQobG9uZyBub2RlSWQpOworICAgICAgICBs
b25nIGlkRm9yRG9jdW1lbnROb2RlKE5vZGUqKTsKICAgICAgICAgbG9uZyBwdXNoTm9kZVBhdGhU
b0Zyb250ZW5kKE5vZGUqIG5vZGUpOwogICAgICAgICB2b2lkIHB1c2hDaGlsZE5vZGVzVG9Gcm9u
dGVuZChsb25nIG5vZGVJZCk7CiAgICAgICAgIHZvaWQgcHVzaE5vZGVCeVBhdGhUb0Zyb250ZW5k
KGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyogbm9kZUlkKTsKICAgICAgICAgbG9uZyBpbnNwZWN0
ZWROb2RlKHVuc2lnbmVkIGxvbmcgbnVtKTsKICAgICAgICAgdm9pZCBjb3B5Tm9kZShsb25nIG5v
ZGVJZCk7CisgICAgICAgIGNvbnN0IExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiYgZG9j
dW1lbnRzKCkgeyByZXR1cm4gbV9kb2N1bWVudHM7IH0KKyAgICAgICAgdm9pZCBzZXRET01MaXN0
ZW5lcihET01MaXN0ZW5lciopOworCisgICAgICAgIFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhE
b2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBz
dGFydExpc3RlbmluZyhEb2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTg1LDcgKzE5NCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UoTm9kZSogbm9kZSk7
CiAKICAgICAgICAgRG9jdW1lbnQqIG1haW5GcmFtZURvY3VtZW50KCkgY29uc3Q7Ci0gICAgICAg
IFN0cmluZyBkb2N1bWVudFVSTFN0cmluZyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0OwogICAg
ICAgICBJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUoKSB7IHJldHVybiBtX2Nzc1N0b3JlOyB9
CiAKICAgICAgICAgdm9pZCBvbk1hdGNoSm9ic1RpbWVyKFRpbWVyPEluc3BlY3RvckRPTUFnZW50
PiopOwpAQCAtMjA0LDYgKzIxMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gdG9BcnJheShjb25zdCBWZWN0b3I8U3RyaW5nPiYgZGF0
YSk7CiAKICAgICAgICAgdm9pZCBkaXNjYXJkQmluZGluZ3MoKTsKKyAgICAgICAgRE9NTGlzdGVu
ZXIqIG1fZG9tTGlzdGVuZXI7CiAKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIG1fY3NzU3Rv
cmU7CiAgICAgICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNDdjNWQwOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclV0aWxpdGllcy5jcHAKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisj
aW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwu
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdHlsZUJhc2UuaCIKKyNp
bmNsdWRlICJTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIHN0YXRpYworYm9vbCBJbnNwZWN0b3JVdGlsaXRpZXM6OnJlc291cmNl
Q29udGVudEZvclVSTChjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50KiBmcmFtZURvY3VtZW50LCBT
dHJpbmcqIHJlc3VsdCkKK3sKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGJ1ZmZlcjsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmll
cih1cmwsIGZyYW1lRG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXF1ZXN0VVJMKCkpKSB7CisgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZURvY3Vt
ZW50LT5pbnB1dEVuY29kaW5nKCk7CisgICAgICAgIGJ1ZmZlciA9IGZyYW1lRG9jdW1lbnQtPmZy
YW1lKCktPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJj
ZURhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9
IHVybC5zdHJpbmcoKTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0g
ZnJhbWVEb2N1bWVudC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UodXJs
U3RyaW5nKTsKKyAgICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAgICAgIGNhY2hl
ZFJlc291cmNlID0gY2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKKworICAgICAg
ICBBU1NFUlQoY2FjaGVkUmVzb3VyY2UpOyAvLyBGSVhNRShhcGF2bG92KTogVGhpcyBtaWdodCBi
ZSB0b28gYWdncmVzc2l2ZS4KKworICAgICAgICBib29sIGlzVW5wdXJnZWFibGUgPSB0cnVlOwor
ICAgICAgICBpZiAoY2FjaGVkUmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSByZXNvdXJjZSBpcyBwdXJnZWFibGUgdGhlbiBtYWtlIGl0IHVucHVyZ2VhYmxl
IHRvIGdldAorICAgICAgICAgICAgLy8gaXRzIGRhdGEuIFRoaXMgbWlnaHQgZmFpbCwgaW4gd2hp
Y2ggY2FzZSB3ZSByZXR1cm4gYW4KKyAgICAgICAgICAgIC8vIGVtcHR5IFN0cmluZy4KKyAgICAg
ICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQorICAgICAg
ICAgICAgICAgIGlzVW5wdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
aXNVbnB1cmdlYWJsZSkgeworICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlZFJl
c291cmNlLT5lbmNvZGluZygpOworICAgICAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVzb3VyY2Ut
PmRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAg
VGV4dEVuY29kaW5nIGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgICAgICBpZiAoIWVu
Y29kaW5nLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xhdGluMUVu
Y29kaW5nKCk7CisgICAgICAgICpyZXN1bHQgPSBlbmNvZGluZy5kZWNvZGUoYnVmZmVyLT5kYXRh
KCksIGJ1ZmZlci0+c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLyBzdGF0aWMKK0NTU1N0eWxlU2hlZXQqIEluc3BlY3RvclV0
aWxpdGllczo6cGFyZW50U3R5bGVTaGVldChTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sKKyAgICBp
ZiAoIXN0eWxlQmFzZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTdHlsZVNoZWV0KiBzdHls
ZVNoZWV0ID0gc3R5bGVCYXNlLT5zdHlsZXNoZWV0KCk7CisgICAgaWYgKHN0eWxlU2hlZXQgJiYg
c3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8g
c3RhdGljCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclV0aWxpdGllczo6YXNDU1NTdHlsZVJ1bGUo
U3R5bGVCYXNlKiBzdHlsZUJhc2UpCit7CisgICAgaWYgKCFzdHlsZUJhc2UtPmlzU3R5bGVSdWxl
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIENTU1J1bGUqIHJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NSdWxlKj4oc3R5bGVCYXNlKTsKKyAgICBpZiAocnVsZS0+dHlwZSgpICE9IENTU1J1bGU6OlNU
WUxFX1JVTEUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NT
dHlsZVJ1bGUqPihydWxlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclV0aWxpdGllcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U1NDBiOAotLS0gL2Rldi9udWxs
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEluc3BlY3RvclV0aWxpdGllc19oCisjZGVmaW5lIEluc3BlY3RvclV0aWxp
dGllc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaWYgRU5BQkxFKElOU1BF
Q1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9u
OworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsKK2NsYXNzIERvY3Vt
ZW50OworY2xhc3MgS1VSTDsKK2NsYXNzIFN0eWxlQmFzZTsKKworY2xhc3MgSW5zcGVjdG9yVXRp
bGl0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZUNvbnRlbnRGb3JVUkwo
Y29uc3QgS1VSTCYgdXJsLCBEb2N1bWVudCogZnJhbWVEb2N1bWVudCwgU3RyaW5nKiByZXN1bHQp
OworICAgIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0eWxlQmFzZSop
OworICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSopOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RP
UikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclV0aWxpdGllc19oKQo=
</data>
<flag name="review"
          id="59184"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69647</attachid>
            <date>2010-10-04 10:19:29 -0700</date>
            <delta_ts>2010-10-05 08:32:02 -0700</delta_ts>
            <desc>[PRELIMINARY PATCH] Comments addressed</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>124664</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">Y29tbWl0IDQ3NzQ5NjM2OGFkMTE3MmZiNzM3MWFiY2YzNjdiMzMzY2FjM2NiNWEKQXV0aG9yOiBB
bGV4YW5kZXIgUGF2bG92IDxhcGF2bG92QGNocm9taXVtLm9yZz4KRGF0ZTogICBUaHUgU2VwIDE2
IDIwOjA0OjA0IDIwMTAgKzA0MDAKCiAgICBXSVAKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcyBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjVlYzdkNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNw
ZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1uZXctQVBJLmNzcwpAQCAtMCwwICsxLDIyIEBACitodG1s
IHsKKyAgICBmb250LXdlaWdodDogNDAwOworfQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEy
cHg7CisgICAgZm9vOiBiYXIgIQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVy
dHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9y
dGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFu
dDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdp
dGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKworLyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9i
b2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6
ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi99LyogY29tbWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovfQorCitib2R5OjphZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBi
b2R5IjsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQ
SS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYjRjODgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEktZXhw
ZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjY5IEBACitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50
IEFQSSBtZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCisKKworPT09IENvbXB1dGVkIHN0eWxlIHBy
b3BlcnR5IGNvdW50IGZvciBib2R5ID09PQorT0sKKworPT09IE1hdGNoZWQgcnVsZXMgZm9yIGJv
ZHkgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1hZ2VudCcgdW5kZWZpbmVkLXVuZGVmaW5lZF0g
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
bWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tYm90
dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tbGVmdCc6JzhweCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDMyLTM2XSBbMzgtMjk4
XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQorWydmb28nOidiYXIgIQorCisgICAgaW1w
b3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29yZSAq
LycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBbMjYtMTA0XQorWydoZWlnaHQnOicxMDAlICFp
bXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXQorWydjb2xvcnonOiciIWltcG9ydGFu
dCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1snaW1wb3J0YW50JzonJyBub24tcGFyc2VkXSBA
WzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3Bl
cnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5MC0yNTldCisKK3J1
bGUKK2JvZHkubWFpbjE6IFsnJyAzMzAtMzY4XSBbMzY5LTQ1MF0KK1snY29sb3InOicjRjAwQkFB
J10gQFsxMy0yOF0KK1snem9vJzonbW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXpl
ZCBwcm9wZXJ0eSAqLycgbm9uLXBhcnNlZF0gQFsyOC04MV0KKworcnVsZQorYm9keS5tYWluMjog
WycnIDQ2Ni00NzZdIFs0NzctNTcyXQorWydiYWNrZ3JvdW5kJzonZ3JlZW4gLyogdmFsdWUgIWlt
cG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBv
cnRhbnQgKi8nIGlzLWltcG9ydGFudF0gQFswLTk1XQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5p
dGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2lu
aXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidp
bml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQn
Oidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9u
LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0
aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9y
aWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xp
cCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3In
OidncmVlbiddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keS5tYWlucGFnZTog
WycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XQor
WydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KKworPT09
IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0KK1BzZXVkb0lkPTQKKworcnVsZQorYm9keTo6YWZ0
ZXI6IFsnJyA1NzUtNTg2XSBbNTg5LTYxN10KK1snY29udGVudCc6JyJBZnRlciBib2R5IiddIEBb
NS0yN10KKworPT09IEF0dHJpYnV0ZSBzdHlsZXMgZm9yIHRhYmxlID09PQorQXR0cmlidXRlOiB3
aWR0aAorCitzdHlsZQorZWxlbWVudC5zdHlsZSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snd2lk
dGgnOic1MCUnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKKz09PSBJbmhlcml0ZWQgc3R5bGVz
IGZvciBib2R5ID09PQorTGV2ZWw9MQorCitydWxlCitodG1sOiBbJ3VzZXItYWdlbnQnIHVuZGVm
aW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2sn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2h0bWw6IFsnJyAwLTRdIFs2LTI5XQor
Wydmb250LXdlaWdodCc6JzQwMCddIEBbNS0yMl0KKworPT09IElubGluZSBzdHlsZSBmb3IgYm9k
eSA9PT0KKworc3R5bGUKK2VsZW1lbnQuc3R5bGUgWzAtMzFdCitbJ2ZvbnQtd2VpZ2h0Jzonbm9y
bWFsJ10gQFswLTIwXQorWyd3aWR0aCc6Jzg1JSddIEBbMjEtMzFdCisKKz09PSBBbGwgc3R5bGVz
aGVldHMgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1sIHsKKyAgICBmb250LXdlaWdodDogNDAwOwor
fQorCitib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7CisgICAgZm9vOiBiYXIgIQorCisgICAg
aW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQgYnkgV2ViQ29y
ZSAqLzsKKyAgICBoZWlnaHQ6IDEwMCUgIWltcG9ydGFudDsKKyAgICBjb2xvcno6ICIhaW1wb3J0
YW50IjsKKyAgICBpbXBvcnRhbnQ6IWltcG9ydGFudDsKKyAgICBjb2xvcjogImJhZGNvbG9yIiAh
IGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLzsKK30KKwor
LyogY29tbWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBz
ZWxlY3RvciAqL3svKiBjb21tZW50ICovY29sb3I6ICNGMDBCQUE7em9vOm1vbyAvKiBub3QgYW4g
IWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi99LyogY29tbWVudCAqLworCitib2R5
Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAh
aW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICovfQorCitib2R5Ojph
ZnRlciAgeworICAgIGNvbnRlbnQ6ICJBZnRlciBib2R5IjsKK30KKycKKworcnVsZQoraHRtbDog
WycnIDAtNF0gWzYtMjldCitbJ2ZvbnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXQorCitydWxlCiti
b2R5OiBbJycgMzItMzZdIFszOC0yOThdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdCitb
J2Zvbyc6J2JhciAhCisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3Qg
cmVjb2duaXplZCBieSBXZWJDb3JlICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsyNi0x
MDRdCitbJ2hlaWdodCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0xMzNd
CitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgtMTU5XQorWydpbXBv
cnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0KK1snY29sb3InOiciYmFkY29sb3IiICEg
aW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1pbXBv
cnRhbnRdIEBbMTkwLTI1OV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjkt
NDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFu
ICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgx
XQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91
bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBu
byBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitb
J2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydi
YWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1sn
YmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitb
J2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
CitydWxlCitib2R5OjphZnRlcjogWycnIDU3NS01ODZdIFs1ODktNjE3XQorWydjb250ZW50Jzon
IkFmdGVyIGJvZHkiJ10gQFs1LTI3XQorCitTdHlsZVNoZWV0OiAnCisKKy8qIEFuIGlubGluZSBz
dHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7
IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNlc3NhcnkgZm9yIFdlYkNvcmUg
dG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFiYWR2YWx1ZTE7Cit9CisKKycK
KworcnVsZQorYm9keS5tYWlucGFnZTogWycnIDI5LTQyXSBbNDQtMTc2XQorWyd0ZXh0LWRlY29y
YXRpb24nOidub25lJ10gQFs1LTI3XQorWydiYWRwcm9wZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1w
YXJzZWRdIEBbMTA3LTEzMV0KKworPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PQorCitT
dHlsZVNoZWV0OiAnYm9keS5tYWlucGFnZSB7ICAgIHRleHQtZGVjb3JhdGlvbjogc3RyaWtldGhy
b3VnaDsgICAgYmFkcHJvcGVydHk6IDJiYWR2YWx1ZTI7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBq
dXN0aWZ5O30nCisKK3J1bGUKK2JvZHkubWFpbnBhZ2U6IFsnJyAwLTEzXSBbMTUtNzhdCitbJ3Rl
eHQtZGVjb3JhdGlvbic6J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5Jzon
MmJhZHZhbHVlMicgbm9uLXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDc5LTgz
XSBbODUtMTA5XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVy
IHNlbGVjdG9yIHNldCA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwgKiwgYm9keVtmb289ImJhciJd
IHsgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTogMmJh
ZHZhbHVlMjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQoraHRtbCAq
LCBib2R5W2Zvbz0iYmFyIl06IFsnJyAwLTIzXSBbMjUtODhdCitbJ3RleHQtZGVjb3JhdGlvbic6
J3N0cmlrZXRocm91Z2gnXSBAWzQtMzVdCitbJ2JhZHByb3BlcnR5JzonMmJhZHZhbHVlMicgbm9u
LXBhcnNlZF0gQFszOS02M10KKworcnVsZQorYm9keTogWycnIDg5LTkzXSBbOTUtMTE5XQorWyd0
ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworPT09IEFmdGVyIHN0eWxlIHRleHQgc2V0
ID09PQorCitTdHlsZVNoZWV0OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl0ge2NvbG9yOiB3aGl0
ZTsgYmFja2dyb3VuZDogYmxhY2s7fWJvZHkgeyAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5O30nCisK
K3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbJycgMC0yM10gWzI1LTU3XQorWydjb2xv
cic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3JvdW5kJzonYmxhY2snXSBAWzE0LTMyXQorWydi
YWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFj
a2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Jh
Y2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydi
YWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKwor
cnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhdCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10g
QFs0LTI0XQorCis9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PQorCitydWxl
Citib2R5OiBbJ3VzZXItYWdlbnQnIHVuZGVmaW5lZC11bmRlZmluZWRdIFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydkaXNwbGF5JzonYmxvY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21h
cmdpbi10b3AnOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ21hcmdpbi1yaWdodCc6
JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWJvdHRvbSc6JzhweCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLWxlZnQnOic4cHgnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyAzMi0zNl0gWzM4LTI5OF0KK1snZm9udC1zaXpl
JzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFyICEKKworICAgIGltcG9ydGFudCAvKiAhaW1w
b3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8nIGlzLWltcG9ydGFu
dCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50JyBpcy1p
bXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2Vk
XSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQorWydj
b2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFu
Z2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XQorCitydWxlCitodG1sICosIGJv
ZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsyNS01N10KK1snY29sb3InOid3aGl0ZSddIEBbMC0x
M10KK1snYmFja2dyb3VuZCc6J2JsYWNrJ10gQFsxNC0zMl0KK1snYmFja2dyb3VuZC1pbWFnZSc6
J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXgn
Oidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC15
JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1hdHRhY2ht
ZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3Np
dGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1w
b3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5k
LWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNv
bG9yJzonYmxhY2snXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6IFsnJyA1
OC02Ml0gWzY0LTg4XQorWyd0ZXh0LWFsaWduJzonanVzdGlmeSddIEBbNC0yNF0KKworcnVsZQor
Ym9keTogWydpbnNwZWN0b3InIDAtNF0gWzYtMTddCitbJ2ZvbnQnOidzZXJpZiddIEBbMC0xMV0K
KworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFszNjktNDUwXQorWydjb2xvcic6JyNG
MDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90IGFuICFpbXBvcnRhbnQgdW5yZWNv
Z25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4LTgxXQorCitydWxlCitib2R5Lm1h
aW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1
ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkg
IWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVdCitbJ2JhY2tncm91bmQtaW1hZ2Un
Oidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC14
JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQt
eSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0YWNo
bWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9z
aXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQt
cG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91
bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3Vu
ZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1j
b2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLW5ldy1BUEkuaHRtbCBiL0xheW91dFRlc3RzL2luc3Bl
Y3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjM1ZDNkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5
bGVzLW5ldy1BUEkuaHRtbApAQCAtMCwwICsxLDI0NCBAQAorPGh0bWw+Cis8aGVhZD4KKworPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEkuY3NzIiAt
LT4KKworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhy
ZXN1bHQpCisgICAgeworICAgICAgICBkdW1wQXJyYXkocmVzdWx0KTsKKyAgICAgICAgbm90aWZ5
RG9uZSgpOworICAgIH0KKyAgICBldmFsdWF0ZUluV2ViSW5zcGVjdG9yKCJmcm9udGVuZF9ydW5U
ZXN0IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rp
b24gZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICB0ZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJbnNw
ZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVu
ZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNvbXB1dGVkU3R5
bGVDYWxsYmFjayh0ZXN0Q29udHJvbGxlciwgY29tcHV0ZWRTdHlsZSkKKyAgICAgICAgeworICAg
ICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRl
c3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IENvbXB1dGVkIHN0eWxlIHByb3BlcnR5IGNv
dW50IGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgdmFyIHByb3BDb3VudCA9IGNvbXB1dGVk
U3R5bGUucHJvcGVydGllcy5sZW5ndGg7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2gocHJvcENvdW50ID4gMjAwID8gIk9LIiA6ICJGQUlMICgiICsgcHJvcENvdW50ICsg
IikiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIG1hdGNoZWRSdWxlc0NhbGxiYWNr
KHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVsZXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVkIHJ1bGVzIGZvciBib2R5ID09PSIpOworICAg
ICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIG1hdGNoZWRD
U1NSdWxlcyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBwc2V1ZG9SdWxlc0NhbGxi
YWNrKHRlc3RDb250cm9sbGVyLCBwc2V1ZG9SdWxlcykKKyAgICAgICAgeworICAgICAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9s
bGVyLnJlc3VsdHMucHVzaCgiPT09IFBzZXVkbyBydWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHNldWRvUnVsZXMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlBzZXVkb0lkPSIgKyBw
c2V1ZG9SdWxlc1tpXS5wc2V1ZG9JZCk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1
bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHBzZXVkb1J1bGVzW2ldLnJ1bGVzKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGF0dHJpYnV0ZVN0eWxlc0NhbGxi
YWNrKHRlc3RDb250cm9sbGVyLCBhdHRyaWJ1dGVTdHlsZXMpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29u
dHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBBdHRyaWJ1dGUgc3R5bGVzIGZvciB0YWJsZSA9PT0i
KTsKKyAgICAgICAgICAgIGZvciAodmFyIGF0dHIgaW4gYXR0cmlidXRlU3R5bGVzKSB7CisgICAg
ICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJBdHRyaWJ1dGU6ICIgKyBh
dHRyKTsKKyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRy
b2xsZXIsIGF0dHJpYnV0ZVN0eWxlc1thdHRyXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBpbmhlcml0ZWRTdHlsZXNDYWxsYmFjayh0ZXN0Q29udHJvbGxl
ciwgaW5oZXJpdGVkU3R5bGVzKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxl
ci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5w
dXNoKCI9PT0gSW5oZXJpdGVkIHN0eWxlcyBmb3IgYm9keSA9PT0iKTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgaW5oZXJpdGVkU3R5bGVzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCJMZXZlbD0iICsgKGkgKyAxKSk7
CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVy
LCBpbmhlcml0ZWRTdHlsZXNbaV0uaW5saW5lU3R5bGUpOworICAgICAgICAgICAgICAgIGZyb250
ZW5kX2R1bXBSdWxlc0FycmF5KHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXNbaV0ubWF0
Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIGlubGluZVN0eWxlQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIGlubGluZVN0eWxlKQorICAg
ICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAg
ICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gSW5saW5lIHN0eWxlIGZv
ciBib2R5ID09PSIpOworICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RD
b250cm9sbGVyLCBpbmxpbmVTdHlsZSk7CisgICAgICAgICAgICBmcm9udGVuZF90ZXN0U3R5bGVT
aGVldHModGVzdENvbnRyb2xsZXIpOworICAgICAgICB9CisKKyAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5nZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3Vt
ZW50LmJvZHkuaWQsIGNvbXB1dGVkU3R5bGVDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIo
V2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIG1hdGNoZWRSdWxlc0NhbGxi
YWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5nZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9j
dW1lbnQuYm9keS5pZCwgcHNldWRvUnVsZXNDYWxsYmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9k
ZTIoZnJvbnRlbmRfbm9kZUZvcklkKCJ0aGV0YWJsZSIpLmlkLCBhdHRyaWJ1dGVTdHlsZXNDYWxs
YmFjay5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3Vt
ZW50LmJvZHkuaWQsIGluaGVyaXRlZFN0eWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRy
b2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRJbmxpbmVTdHlsZUZvck5vZGUy
KFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBpbmxpbmVTdHlsZUNhbGxi
YWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9KTsKK30KKworZnVuY3Rpb24g
ZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xsZXIsIHJ1bGVzKQoreworICAgIGlm
ICghcnVsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVz
Lmxlbmd0aDsgKytpKQorICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRy
b2xsZXIsIHJ1bGVzW2ldKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfdGVzdFN0eWxlU2hlZXRz
KHRlc3RDb250cm9sbGVyKQorewordmFyIG5ld1N0eWxlU2hlZXRUZXh0ID0KKyJib2R5Lm1haW5w
YWdlIHtcCisgICAgdGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoO1wKKyAgICBiYWRwcm9w
ZXJ0eTogMmJhZHZhbHVlMjtcCit9XAorXAorYm9keSB7XAorICAgIHRleHQtYWxpZ246IGp1c3Rp
Znk7XAorfVwKKyI7CisKKyAgICBmdW5jdGlvbiBwYXRjaFN0eWxlU2hlZXQodGVzdENvbnRyb2xs
ZXIsIHN0eWxlU2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBMYXN0IHN0
eWxlc2hlZXQgcGF0Y2hlZCA9PT0iKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHls
ZVNoZWV0VGV4dDIoc3R5bGVTaGVldC5pZCwgbmV3U3R5bGVTaGVldFRleHQsCisgICAgICAgICAg
ICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxl
ciwgc3R5bGVTaGVldC5pZCwgZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3IuYmluZChudWxsLCB0ZXN0
Q29udHJvbGxlcikpKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdHlsZVNoZWV0SWRzTG9hZGVk
KHRlc3RDb250cm9sbGVyLCBpZHMpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBB
bGwgc3R5bGVzaGVldHMgPT09Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxl
bmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRl
c3RDb250cm9sbGVyLCBpZHNbaV0sIChpIDwgaWRzLmxlbmd0aCAtIDEpID8gbnVsbCA6IHBhdGNo
U3R5bGVTaGVldC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorICAgIEluc3Bl
Y3RvckJhY2tlbmQuZ2V0QWxsU3R5bGVzMihzdHlsZVNoZWV0SWRzTG9hZGVkLmJpbmQobnVsbCwg
dGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfY2hhbmdlU2VsZWN0b3Io
dGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQpCit7CisgICAgZnVuY3Rpb24gZGlkU2V0U2VsZWN0
b3IodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09
PSBBZnRlciBzZWxlY3RvciBzZXQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1w
U3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgcnVsZS5wYXJlbnRTdHlsZVNoZWV0LmlkLCBmcm9u
dGVuZF9zZXRTdHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKwor
ICAgIEluc3BlY3RvckJhY2tlbmQuc2V0UnVsZVNlbGVjdG9yMihzdHlsZVNoZWV0LmNzc1J1bGVz
WzBdLmlkLCAiaHRtbCAqLCBib2R5W2Zvbz1cImJhclwiXSIsIGRpZFNldFNlbGVjdG9yLmJpbmQo
bnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRlbmRfc2V0U3R5bGVU
ZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0KQoreworICAgIGZ1bmN0aW9uIGRpZFNldFN0
eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAgICAgICB0ZXN0Q29udHJv
bGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1
c2goIj09PSBBZnRlciBzdHlsZSB0ZXh0IHNldCA9PT0iKTsKKyAgICAgICAgZnJvbnRlbmRfbG9h
ZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBzdHlsZS5wYXJlbnRTdHlsZVNoZWV0
SWQsIGZyb250ZW5kX2FkZFJ1bGUuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0K
KworICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVUZXh0MihzdHlsZVNoZWV0LmNzc1J1bGVz
WzBdLnN0eWxlLmlkLCAiY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBibGFjazsiLCBkaWRTZXRT
dHlsZVRleHQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlvbiBmcm9u
dGVuZF9hZGRSdWxlKHRlc3RDb250cm9sbGVyKQoreworICAgIGZ1bmN0aW9uIGRpZEdldE1hdGNo
ZWRSdWxlcyh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKQorICAgIHsKKyAgICAgICAg
dGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIiKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIu
cmVzdWx0cy5wdXNoKCI9PT0gTWF0Y2hlZCBydWxlcyBhZnRlciBydWxlIGFkZGVkID09PSIpOwor
ICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENT
U1J1bGVzKTsKKyAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSh0ZXN0Q29udHJvbGxl
ci5yZXN1bHRzKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBkaWRTZXRTdHlsZVRleHQodGVzdENv
bnRyb2xsZXIsIHN0eWxlKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRNYXRj
aGVkUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwg
ZGlkR2V0TWF0Y2hlZFJ1bGVzLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBydWxlQWRkZWQodGVzdENvbnRyb2xsZXIsIHJ1bGUpCisgICAgeworICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlVGV4dDIocnVsZS5zdHlsZS5pZCwgImZvbnQ6
IHNlcmlmIiwgZGlkU2V0U3R5bGVUZXh0LmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAg
ICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmFkZFJ1bGUyKFdlYkluc3BlY3Rvci5kb21BZ2Vu
dC5kb2N1bWVudC5ib2R5LmlkLCAiYm9keSIsIHJ1bGVBZGRlZC5iaW5kKG51bGwsIHRlc3RDb250
cm9sbGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29u
dHJvbGxlciwgcnVsZU9yU3R5bGUpCit7CisgICAgaWYgKCFydWxlT3JTdHlsZSkKKyAgICAgICAg
cmV0dXJuOworICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHlsZSk7CisgICAgdmFy
IHN0eWxlID0gaXNSdWxlID8gcnVsZU9yU3R5bGUuc3R5bGUgOiBydWxlT3JTdHlsZTsKKyAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOworICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaChpc1J1bGUgPyAicnVsZSIgOiAic3R5bGUiKTsKKyAgICB0ZXN0Q29udHJvbGxlci5y
ZXN1bHRzLnB1c2goKGlzUnVsZSA/IChydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgKyAiOiBbJyIg
KyBydWxlT3JTdHlsZS5vcmlnaW4gKyAiJyAiICsgcnVsZU9yU3R5bGUuc2VsZWN0b3JTdGFydE9m
ZnNldCArICItIiArIHJ1bGVPclN0eWxlLnNlbGVjdG9yRW5kT2Zmc2V0ICsgIl0iKSA6ICJlbGVt
ZW50LnN0eWxlIikgKyAiIFsiICsgc3R5bGUuc3RhcnRPZmZzZXQgKyAiLSIgKyBzdHlsZS5lbmRP
ZmZzZXQgKyAiXSIpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGUucHJvcGVydGllcy5s
ZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgcHJvcGVydHkgPSBzdHlsZS5wcm9wZXJ0aWVzW2ld
OworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHByb3BlcnR5Lm5h
bWUgKyAiJzonIiArIHByb3BlcnR5LnZhbHVlICsgIiciICsgKHByb3BlcnR5LnByaW9yaXR5ID8g
IiBpcy1pbXBvcnRhbnQiIDogIiIpICsgKHByb3BlcnR5LnBhcnNlZE9rID8gIiIgOiAiIG5vbi1w
YXJzZWQiKSArIl0gQFsiICsgcHJvcGVydHkuc3RhcnRPZmZzZXQgKyAiLSIgKyBwcm9wZXJ0eS5l
bmRPZmZzZXQgKyAiXSIpOworICAgIH0KK30KKworCitmdW5jdGlvbiBmcm9udGVuZF9sb2FkQW5k
RHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXRJZCwgY29udGludWF0aW9u
KQoreworICAgIGZ1bmN0aW9uIHN0eWxlU2hlZXRMb2FkZWQodGVzdENvbnRyb2xsZXIsIHN0eWxl
U2hlZXQpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIpOwor
ICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlN0eWxlU2hlZXQ6ICciICsgc3R5
bGVTaGVldC50ZXh0ICsgIiciKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZVNo
ZWV0LmNzc1J1bGVzLmxlbmd0aDsgKytpKQorICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVP
clN0eWxlKHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0LmNzc1J1bGVzW2ldKTsKKyAgICAgICAg
aWYgKGNvbnRpbnVhdGlvbikKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbihzdHlsZVNoZWV0KTsK
KyAgICB9CisKKyAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlU2hlZXQyKHN0eWxlU2hlZXRJ
ZCwgc3R5bGVTaGVldExvYWRlZC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSk7Cit9CisKKy8q
CitDb3ZlcmVkIEFQSSBtZXRob2RzOgorIC0gZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyCisgLSBn
ZXRNYXRjaGVkUnVsZXNGb3JOb2RlMgorIC0gZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIK
KyAtIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyCisgLSBnZXRJbmhlcml0ZWRTdHlsZXNGb3JO
b2RlMgorIC0gZ2V0SW5saW5lU3R5bGVGb3JOb2RlMgorIC0gZ2V0QWxsU3R5bGVzMgorIC0gZ2V0
U3R5bGVTaGVldDIKKyAtIHNldFN0eWxlU2hlZXRUZXh0MgorIC0gc2V0U3R5bGVUZXh0MgorIC0g
c2V0UnVsZVNlbGVjdG9yMgorIC0gYWRkUnVsZTIKKyovCisKKzwvc2NyaXB0PgorCis8c3R5bGU+
CisKKy8qIEFuIGlubGluZSBzdHlsZXNoZWV0ICovCitib2R5Lm1haW5wYWdlIHsKKyAgICB0ZXh0
LWRlY29yYXRpb246IG5vbmU7IC8qIGF0IGxlYXN0IG9uZSB2YWxpZCBwcm9wZXJ0eSBpcyBuZWNl
c3NhcnkgZm9yIFdlYkNvcmUgdG8gbWF0Y2ggYSBydWxlICovCisgICAgYmFkcHJvcGVydHk6IDFi
YWR2YWx1ZTE7Cit9CisKKzwvc3R5bGU+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWluMSBt
YWluMiBtYWlucGFnZSIgb25sb2FkPSJvbmxvYWQoKSIgc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3Jt
YWw7IHdpZHRoOiA4NSUiPgorPHA+CitUZXN0cyB0aGF0IEluc3BlY3RvckNTU0FnZW50IEFQSSBt
ZXRob2RzIHdvcmsgYXMgZXhwZWN0ZWQuCis8L3A+Cis8dGFibGUgd2lkdGg9NTAlIGlkPSJ0aGV0
YWJsZSI+Cis8L3RhYmxlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAppbmRleCBl
NGQzM2Q4Li5iZWVjNzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVz
LXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMSw2ICsxLDYgQEAKIFRlc3Rz
IHRoYXQgcHJvcGVyIGRhdGEgYW5kIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBv
cnRlZCBmb3IgQ1NTIHN0eWxlIGRlY2xhcmF0aW9ucyBhbmQgcHJvcGVydGllcy4KIAotYm9keTog
WzYtMjY2XQorYm9keTogWzAtNF0gWzYtMjY2XQogWydmb250LXNpemUnOicxMnB4J10gQFs1LTIx
XQogWydmb28nOidiYXIgIQogCkBAIC05LDE1ICs5LDE1IEBAIGJvZHk6IFs2LTI2Nl0KIFsnY29s
b3J6JzonIiFpbXBvcnRhbnQiJyBub24tcGFyc2VkXSBAWzEzOC0xNTldCiBbJ2ltcG9ydGFudCc6
Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0XQogWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRh
bnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRoIHN0cmFuZ2UgdmFsdWUgKi8nICFpbXBvcnRhbnRdIEBb
MTkwLTI1OV0KLWJvZHkubWFpbjE6IFszMzctNDE4XQorYm9keS5tYWluMTogWzI5OC0zMzZdIFsz
MzctNDE4XQogWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQogWyd6b28nOidtb28gLyogbm90
IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4
LTgxXQotYm9keS5tYWluMjogWzQ0NS01NDBdCitib2R5Lm1haW4yOiBbNDM0LTQ0NF0gWzQ0NS01
NDBdCiBbJ2JhY2tncm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8g
IWltcG9ydGFudCAvKiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgIWltcG9ydGFu
dF0gQFswLTk1XQotYm9keS5tYWlucGFnZTogWzE3LTE0OV0KK2JvZHkubWFpbnBhZ2U6IFsyLTE1
XSBbMTctMTQ5XQogWyd0ZXh0LWRlY29yYXRpb24nOidub25lJ10gQFs1LTI3XQogWydiYWRwcm9w
ZXJ0eSc6JzFiYWR2YWx1ZTEnIG5vbi1wYXJzZWRdIEBbMTA3LTEzMV0KLWVsZW1lbnQuc3R5bGU6
IFswLTMxXQorZWxlbWVudC5zdHlsZTogWzAtMF0gWzAtMzFdCiBbJ2ZvbnQtd2VpZ2h0Jzonbm9y
bWFsJ10gQFswLTIwXQogWyd3aWR0aCc6JzgwJSddIEBbMjEtMzFdCiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbCBiL0xheW91dFRl
c3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAppbmRleCBmY2Y5MjhmLi5i
OTMxODlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zm
c2V0cy5odG1sCkBAIC0yNCwxMSArMjQsNiBAQCBmdW5jdGlvbiBkb2l0KCkKIAogZnVuY3Rpb24g
ZnJvbnRlbmRfcnVuVGVzdCh0ZXN0Q29udHJvbGxlcikKIHsKLSAgICBpZiAoIVdlYkluc3BlY3Rv
ci5wYW5lbHMucmVzb3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSB7Ci0gICAgICAgIFdl
Ykluc3BlY3Rvci5wYW5lbHMucmVzb3VyY2VzLl90b2dnbGVSZXNvdXJjZVRyYWNraW5nKCk7Ci0g
ICAgICAgIHJldHVybiAicmVmcmVzaGluZyI7Ci0gICAgfQotCiAgICAgdGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOwogICAgIGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVj
dG9yLmRvbUFnZW50LmRvY3VtZW50KTsKICAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRp
bmdEaXNwYXRjaGVzKGZ1bmN0aW9uKCkgewpAQCAtNDgsNyArNDMsNyBAQCBmdW5jdGlvbiBmcm9u
dGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVyKQogZnVuY3Rpb24gZnJvbnRlbmRfc3R5bGVEYXRh
UmVjZWl2ZWQodGVzdENvbnRyb2xsZXIsIHJ1bGVPclN0eWxlLCBzaG91bGRCYWlsLCBkYXRhKQog
ewogICAgIHZhciBpc1J1bGUgPSAhIShydWxlT3JTdHlsZS5zdHlsZSk7Ci0gICAgdGVzdENvbnRy
b2xsZXIucmVzdWx0cy5wdXNoKChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAi
ZWxlbWVudC5zdHlsZSIpICsgIjogWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRh
dGEuYm9keVJhbmdlLmVuZCArICJdIik7CisgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNo
KChpc1J1bGUgPyBydWxlT3JTdHlsZS5zZWxlY3RvclRleHQgOiAiZWxlbWVudC5zdHlsZSIpICsg
IjogWyIgKyBkYXRhLnNlbGVjdG9yUmFuZ2Uuc3RhcnQgKyAiLSIgKyBkYXRhLnNlbGVjdG9yUmFu
Z2UuZW5kICsgIl0gWyIgKyBkYXRhLmJvZHlSYW5nZS5zdGFydCArICItIiArIGRhdGEuYm9keVJh
bmdlLmVuZCArICJdIik7CiAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnByb3BlcnR5RGF0
YS5sZW5ndGg7ICsraSkgewogICAgICAgICB2YXIgcHJvcGVydHlEYXR1bSA9IGRhdGEucHJvcGVy
dHlEYXRhW2ldOwogICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIlsnIiArIHBy
b3BlcnR5RGF0dW0ubmFtZSArICInOiciICsgcHJvcGVydHlEYXR1bS52YWx1ZSArICInIiArIChw
cm9wZXJ0eURhdHVtLmltcG9ydGFudCA/ICIgIWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVydHlE
YXR1bS5wYXJzZWQgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eURhdHVt
LnN0YXJ0ICsgIi0iICsgcHJvcGVydHlEYXR1bS5lbmQgKyAiXSIpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjE3MjUy
ZS4uODZhMGUxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMDk5LDYgKzEwOTksNyBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgaW5zcGVjdG9yL0luamVjdGVkU2NyaXB0SG9zdC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JCYWNrZW5kLmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMTEx
MCw2ICsxMTExLDggQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdl
bnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcAorICAgIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRp
ZXMuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmNwcApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KaW5kZXggNzg5YTkwYy4uNWM1YjQzMiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xNzg5LDYg
KzE3ODksOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNsaWVudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKKwlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3Jl
LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCBcCiAJV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgXApAQCAtMTgxMiw4ICsx
ODE0LDEyIEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUmVzb3VyY2UuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50
LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAorCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIFwKKwlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clRpbWVsaW5lQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGlu
ZUFnZW50LmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAgXAor
CVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yV29ya2VyUmVzb3VyY2UuaCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBp
CmluZGV4IGExN2Y2MWMuLjI3Y2Y0NTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0xODg3LDYgKzE4ODcsOCBAQAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNT
U0FnZW50LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50Lmgn
LAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oJywKICAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAnLApAQCAtMTkwOCw4ICsxOTEwLDEy
IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmgnLAogICAgICAg
ICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwJywKICAgICAgICAgICAg
ICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclRp
bWVsaW5lQWdlbnQuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxp
bmVBZ2VudC5oJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNw
cCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oJywKICAgICAg
ICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCcsCiAgICAgICAgICAgICAnaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVj
dG9yV29ya2VyUmVzb3VyY2UuaCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
V2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBkNzY5OTIxLi4wYTBjNzU3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk5MCw2ICs5
OTAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3JpcHRIb3N0LmNw
cCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAgXAog
ICAgIGluc3BlY3Rvci9JbnNwZWN0b3JCYWNrZW5kLmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgXApAQCAtMTAwMiw3ICsxMDAzLDkgQEAgU09V
UkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclByb2ZpbGVyQWdlbnQuY3BwIFwKICAg
ICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yU3RvcmFnZUFnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcCBcCiAgICAgaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuY3BwIFwKICAgICBp
bnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmNwcCBcCkBAIC0xODc5LDYgKzE4ODIsNyBA
QCBIRUFERVJTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5oIFwK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yUmVzb3VyY2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5oIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKICAgICBpbnNwZWN0
b3IvU2NyaXB0R0NFdmVudExpc3RlbmVyLmggXAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29y
ZEZhY3RvcnkuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA0Zjg0
N2EzLi4wODA0NzA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUy
NTI3LDYgKzUyNTI3LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yQ1NTQWdlbnQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NTdG9yZS5jcHAiDQogCQkJ
CT4NCiAJCQk8L0ZpbGU+DQpAQCAtNTI2MTksNiArNTI2MjcsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3Rv
clN0eWxlU2hlZXQuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0eWxlU2hlZXQuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC01MjYy
Nyw2ICs1MjY0MywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJ
bnNwZWN0b3JVdGlsaXRpZXMuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIg0KIAkJCQk+
DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYjg2ODQwOC4uZGRiZGFmYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTE1MTksNiArMTUxOSw4IEBACiAJCTgxQkUyMDk5MTFGNEFCOEQwMDkx
NURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjA5NDExRjRBQjhEMDA5MTVERkEgLyogSURC
Q3Vyc29yQmFja2VuZEludGVyZmFjZS5oICovOyB9OwogCQk4MUJFMjBEMjExRjRCQzMyMDA5MTVE
RkEgLyogSlNJREJDdXJzb3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gODFCRTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAq
LzsgfTsKIAkJODFCRTIwRDMxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBODExRjRCNjZG
MDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCAqLzsgfTsKKwkJODJBQjE3NDMxMjRCOTlFQzAwQzUw
NjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JD
U1NBZ2VudC5jcHAgKi87IH07CisJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0
b3JDU1NBZ2VudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggKi87IH07
CiAJCTgyQjY1ODk4MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTcxMTg5RTM5
MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJODJCNjU4OUExMTg5RTQ3NjAwRTA1MkExIC8qIElu
c3BlY3RvckNTU1N0b3JlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgyQjY1ODk5MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5j
cHAgKi87IH07CiAJCTgyRTNEOERFMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJj
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
ODJFM0Q4REMxMjJFQTBEMTAwM0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi87
IH07CkBAIC03NTgzLDYgKzc1ODUsOCBAQAogCQk4MUJFMjA5QzExRjRBQkJEMDA5MTVERkEgLyog
SURCQ3Vyc29yLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBJREJDdXJzb3IuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjBBNzExRjRCNjZGMDA5MTVERkEgLyogSlNJ
REJDdXJzb3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJREJD
dXJzb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MUJFMjBBODExRjRCNjZG
MDA5MTVERkEgLyogSlNJREJDdXJzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gSlNJREJDdXJzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODJBQjE3NDEx
MjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3RvckNTU0FnZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNT
U0FnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU0Fn
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgyQjY1ODk3MTE4OUUzOTIwMEUw
NTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBJbnNwZWN0b3JDU1NTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkUzRDhEQzEyMkVBMEQxMDAzQUU1QkMgLyogQ1NT
UHJvcGVydHlTb3VyY2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMjEwNCw2ICsxMjEwOCw4IEBACiAJCQkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8q
IEluc3BlY3RvckNsaWVudC5oICovLAogCQkJCTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywKIAkJCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcg
LyogSW5zcGVjdG9yQ29udHJvbGxlci5oICovLAorCQkJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgKi8sCisJCQkJODJBQjE3NDIxMjRCOTlFQzAwQzUw
NjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggKi8sCiAJCQkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1
MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCAqLywKIAkJCQk4MkI2NTg5NzExODlFMzkyMDBF
MDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuaCAqLywKIAkJCQk0MUYwNjIxMzBGNUYxOTI2MDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgKi8sCkBAIC0xOTU0OCw2ICsx
OTU1NCw3IEBACiAJCQkJNEY3MDdBOUExMUVGNjc5NDAwQUNEQTY5IC8qIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjk1QzBFOTczMzA4MDAyNjZF
MDcgLyogSW5zcGVjdG9yQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQzgxQjk1QTBFOTcz
MzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
ODJBQjE3NDQxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4MkI2NTg5ODExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRjA2MjE0MEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0
b3JEYXRhYmFzZVJlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGMzNGMDUzRTEyMEIwREE1
MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
MjEwMyw2ICsyMjExMCw3IEBACiAJCQkJN0E3NEVDQkExMDE4MzlBNjAwQkY5MzlFIC8qIEluc3Bl
Y3RvckJhY2tlbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNEY3MDdBOTkxMUVGNjc5NDAwQUNE
QTY5IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTFDODFCOTVCMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NB
Z2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4MkI2NTg5QTExODlFNDc2MDBFMDUyQTEgLyog
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFGMDYyMTUwRjVGMTky
NjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRjMzRjA1M0QxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkg
Yi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggYzU1Zjk5OC4uYzAxMzlhMiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueQpAQCAtNDA4LDcgKzQwOCw5IEBAIHJ1bGVfbGlzdDoKICA7CiAKIHZhbGlkX3J1bGU6Ci0g
ICAgcnVsZXNldAorICAgIGJlZm9yZV9ydWxlc2V0IHJ1bGVzZXQgeworICAgICAgICAkJCA9ICQy
OworICAgIH0KICAgfCBtZWRpYQogICB8IHBhZ2UKICAgfCBmb250X2ZhY2UKQEAgLTkxMCw4ICs5
MTIsMjIgQEAgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uOgogICAgIH0KICAgOwogCiti
ZWZvcmVfcnVsZXNldDoKKyAgICAvKiBlbXB0eSAqLyB7CisgICAgICAgIENTU1BhcnNlciogcCA9
IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtTZWxlY3Rv
ckxpc3RTdGFydCgpOworICAgIH0KKyAgOworCitiZWZvcmVfcnVsZV9vcGVuaW5nX2JyYWNlOgor
ICAgIC8qIGVtcHR5ICovIHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKTsKKyAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdEVuZCgpOworICAg
IH0KKyAgOworCiBydWxlc2V0OgotICAgIHNlbGVjdG9yX2xpc3QgJ3snIG1heWJlX3NwYWNlX2Jl
Zm9yZV9kZWNsYXJhdGlvbiBkZWNsYXJhdGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgeworICAgIHNl
bGVjdG9yX2xpc3QgYmVmb3JlX3J1bGVfb3BlbmluZ19icmFjZSAneycgbWF5YmVfc3BhY2VfYmVm
b3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7CiAgICAgICAg
IENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAg
ICQkID0gcC0+Y3JlYXRlU3R5bGVSdWxlKCQxKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA2YzIx
MTBmLi40MmM0Y2IxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBi
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTE0MywxMiArMTQzLDExIEBAIENTU1BhcnNl
cjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0UGFyc2luZykKICAgICAsIG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKGZhbHNlKQogICAgICwgbV9oYWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZhbHNl
KQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKHN0YXJBdG9tKQotICAgICwgbV9ydWxlQm9keVN0
YXJ0T2Zmc2V0KDApCi0gICAgLCBtX3J1bGVCb2R5RW5kT2Zmc2V0KDApCi0gICAgLCBtX3Byb3Bl
cnR5U3RhcnRPZmZzZXQoVUlOVF9NQVgpCi0gICAgLCBtX3Byb3BlcnR5RW5kT2Zmc2V0KFVJTlRf
TUFYKQorICAgICwgbV9zZWxlY3Rvckxpc3RSYW5nZSgwLCAwKQorICAgICwgbV9ydWxlQm9keVJh
bmdlKDAsIDApCisgICAgLCBtX3Byb3BlcnR5UmFuZ2UoVUlOVF9NQVgsIFVJTlRfTUFYKQogICAg
ICwgbV9ydWxlUmFuZ2VNYXAoMCkKLSAgICAsIG1fY3VycmVudFN0eWxlRGF0YSgwKQorICAgICwg
bV9jdXJyZW50UnVsZURhdGEoMCkKICAgICAsIG1fZGF0YSgwKQogICAgICwgeXlfc3RhcnQoMSkK
ICAgICAsIG1fbGluZU51bWJlcigwKQpAQCAtMjI4LDE0ICsyMjcsMTcgQEAgdm9pZCBDU1NQYXJz
ZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBpbnQgc3RhcnQKICAgICBtX3N0eWxlU2hlZXQgPSBzaGVldDsKICAgICBtX2RlZmF1bHROYW1l
c3BhY2UgPSBzdGFyQXRvbTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgogICAgIG1f
cnVsZVJhbmdlTWFwID0gcnVsZVJhbmdlTWFwOwotICAgIGlmIChydWxlUmFuZ2VNYXApCisgICAg
aWYgKHJ1bGVSYW5nZU1hcCkgeworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YSA9IENTU1J1bGVT
b3VyY2VEYXRhOjpjcmVhdGUoKTsKICAgICAgICAgbV9jdXJyZW50U3R5bGVEYXRhID0gQ1NTU3R5
bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICB9CiAKICAgICBtX2xpbmVOdW1iZXIgPSBzdGFy
dExpbmVOdW1iZXI7CiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywgIiIpOwogICAgIGNzc3l5
cGFyc2UodGhpcyk7CiAgICAgbV9ydWxlUmFuZ2VNYXAgPSAwOwogICAgIG1fY3VycmVudFN0eWxl
RGF0YSA9IDA7CisgICAgbV9jdXJyZW50UnVsZURhdGEgPSAwOwogICAgIG1fcnVsZSA9IDA7CiB9
CiAKQEAgLTM2Myw4ICszNjUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbGFyYXRpb24sIGNvbnN0CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoIW1fcnVsZVJhbmdlTWFwKQotICAgICAgICBtX2N1cnJlbnRTdHls
ZURhdGEgPSAwOworICAgIG1fY3VycmVudFN0eWxlRGF0YSA9IDA7CiAgICAgcmV0dXJuIG9rOwog
fQogCkBAIC01NDg1LDEyICs1NDg2LDE2IEBAIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5
bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxlY3RvcnMpCiAgICAgICAgIHJlc3VsdCA9
IHJ1bGUuZ2V0KCk7CiAgICAgICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChydWxlLnJl
bGVhc2UoKSk7CiAgICAgICAgIGlmIChtX3J1bGVSYW5nZU1hcCkgewotICAgICAgICAgICAgQVNT
RVJUKG1fY3VycmVudFN0eWxlRGF0YSk7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEt
PnN0eWxlQm9keVJhbmdlID0gU291cmNlUmFuZ2UobV9ydWxlQm9keVN0YXJ0T2Zmc2V0LCBtX3J1
bGVCb2R5RW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIG1fcnVsZVJhbmdlTWFwLT5zZXQocmVzdWx0
LCBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRTdHlsZURhdGEgJiYgbV9jdXJyZW50UnVsZURhdGEpOworICAgICAgICAgICAgbV9jdXJy
ZW50U3R5bGVEYXRhLT5zdHlsZUJvZHlSYW5nZSA9IG1fcnVsZUJvZHlSYW5nZTsKKyAgICAgICAg
ICAgIG1fY3VycmVudFJ1bGVEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZSA9IG1fc2VsZWN0b3JMaXN0
UmFuZ2U7CisgICAgICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0g
bV9jdXJyZW50U3R5bGVEYXRhLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIG1fcnVsZVJhbmdlTWFw
LT5zZXQocmVzdWx0LCBtX2N1cnJlbnRSdWxlRGF0YS5yZWxlYXNlKCkpOwogICAgICAgICAgICAg
bV9jdXJyZW50U3R5bGVEYXRhID0gQ1NTU3R5bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICAg
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwog
ICAgICAgICB9CiAgICAgfQorICAgIHJlc2V0U2VsZWN0b3JMaXN0TWFya3MoKTsKICAgICByZXNl
dFJ1bGVCb2R5TWFya3MoKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKICAgICByZXR1cm4gcmVz
dWx0OwpAQCAtNTczOSwyNiArNTc0NCw0NCBAQCB2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFzdFNl
bGVjdG9yTGluZUFuZFBvc2l0aW9uKCkKICAgICBtYXJrUnVsZUJvZHlTdGFydCgpOwogfQogCit2
b2lkIENTU1BhcnNlcjo6bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCkKK3sKKyAgICBtX3NlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0gbV9kYXRhOworfQorCit2b2lkIENTU1BhcnNlcjo6
bWFya1NlbGVjdG9yTGlzdEVuZCgpCit7CisgICAgaWYgKCFtX2N1cnJlbnRSdWxlRGF0YSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFVDaGFyKiBsaXN0RW5kID0geXl0ZXh0OworICAgIHdoaWxlIChs
aXN0RW5kID4gbV9kYXRhICsgMSkgeworICAgICAgICBpZiAoaXNDU1NXaGl0ZXNwYWNlKCoobGlz
dEVuZCAtIDEpKSkKKyAgICAgICAgICAgIC0tbGlzdEVuZDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gbGlzdEVu
ZCAtIG1fZGF0YTsKK30KKwogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keVN0YXJ0KCkKIHsK
ICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CiAgICAgaWYgKCp5eXRleHQg
PT0gJ3snKQogICAgICAgICArK29mZnNldDsgLy8gU2tpcCB0aGUgcnVsZSBib2R5IG9wZW5pbmcg
YnJhY2UuCi0gICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlTdGFydE9mZnNldCkKLSAgICAgICAg
bV9ydWxlQm9keVN0YXJ0T2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChvZmZzZXQgPiBtX3J1bGVC
b2R5UmFuZ2Uuc3RhcnQpCisgICAgICAgIG1fcnVsZUJvZHlSYW5nZS5zdGFydCA9IG9mZnNldDsK
IH0KIAogdm9pZCBDU1NQYXJzZXI6Om1hcmtSdWxlQm9keUVuZCgpCiB7CiAgICAgdW5zaWduZWQg
b2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwotICAgIGlmIChvZmZzZXQgPiBtX3J1bGVCb2R5RW5k
T2Zmc2V0KQotICAgICAgICBtX3J1bGVCb2R5RW5kT2Zmc2V0ID0gb2Zmc2V0OworICAgIGlmIChv
ZmZzZXQgPiBtX3J1bGVCb2R5UmFuZ2UuZW5kKQorICAgICAgICBtX3J1bGVCb2R5UmFuZ2UuZW5k
ID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5U3RhcnQoKQogewot
ICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKLSAgICBtX3Byb3BlcnR5U3Rh
cnRPZmZzZXQgPSBvZmZzZXQ7CisgICAgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0geXl0ZXh0IC0g
bV9kYXRhOwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBv
cnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQpAQCAtNTc2NiwxMSArNTc4OSwxMSBA
QCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwg
Ym9vbCBpc1Byb3BlcnR5UGFyc2VkKQogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1f
ZGF0YTsKICAgICBpZiAoKnl5dGV4dCA9PSAnOycpIC8vIEluY2x1ZGUgc2VtaWNvbG9uIGludG8g
dGhlIHByb3BlcnR5IHRleHQuCiAgICAgICAgICsrb2Zmc2V0OwotICAgIG1fcHJvcGVydHlFbmRP
ZmZzZXQgPSBvZmZzZXQ7Ci0gICAgaWYgKG1fcHJvcGVydHlTdGFydE9mZnNldCAhPSBVSU5UX01B
WCAmJiBtX2N1cnJlbnRTdHlsZURhdGEpIHsKKyAgICBtX3Byb3BlcnR5UmFuZ2UuZW5kID0gb2Zm
c2V0OworICAgIGlmIChtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgIT0gVUlOVF9NQVggJiYgbV9jdXJy
ZW50U3R5bGVEYXRhKSB7CiAgICAgICAgIC8vIFRoaXMgc3R1ZmYgaXMgb25seSBleGVjdXRlZCB3
aGVuIHRoZSBzdHlsZSBkYXRhIHJldHJpZXZhbCBpcyByZXF1ZXN0ZWQgYnkgY2xpZW50LgotICAg
ICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlTdGFydE9mZnNldDsKLSAgICAg
ICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eUVuZE9mZnNldDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc3RhcnQgPSBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQ7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGVuZCA9IG1fcHJvcGVydHlSYW5nZS5lbmQ7CiAgICAgICAgIEFTU0VSVChzdGFy
dCA8IGVuZCk7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eVN0cmluZyA9IFN0cmluZyhtX2RhdGEg
KyBzdGFydCwgZW5kIC0gc3RhcnQpLnN0cmlwV2hpdGVTcGFjZSgpOwogICAgICAgICBpZiAocHJv
cGVydHlTdHJpbmcuZW5kc1dpdGgoIjsiLCB0cnVlKSkKQEAgLTU3ODMsNyArNTgwNiw3IEBAIHZv
aWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29s
IGlzUHJvcGVydHlQYXJzZWQpCiAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHByb3BlcnR5U3RyaW5n
LnN1YnN0cmluZyhjb2xvbkluZGV4ICsgMSwgcHJvcGVydHlTdHJpbmcubGVuZ3RoKCkpLnN0cmlw
V2hpdGVTcGFjZSgpOwogICAgICAgICAvLyBUaGUgcHJvcGVydHkgcmFuZ2UgaXMgcmVsYXRpdmUg
dG8gdGhlIGRlY2xhcmF0aW9uIHN0YXJ0IG9mZnNldC4KICAgICAgICAgbV9jdXJyZW50U3R5bGVE
YXRhLT5wcm9wZXJ0eURhdGEuYXBwZW5kKAotICAgICAgICAgICAgQ1NTUHJvcGVydHlTb3VyY2VE
YXRhKG5hbWUsIHZhbHVlLCBpc0ltcG9ydGFudEZvdW5kLCBpc1Byb3BlcnR5UGFyc2VkLCBTb3Vy
Y2VSYW5nZShtX3Byb3BlcnR5U3RhcnRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQsIG1f
cHJvcGVydHlFbmRPZmZzZXQgLSBtX3J1bGVCb2R5U3RhcnRPZmZzZXQpKSk7CisgICAgICAgICAg
ICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91bmQsIGlz
UHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKHN0YXJ0IC0gbV9ydWxlQm9keVJhbmdlLnN0YXJ0
LCBlbmQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQpKSk7CiAgICAgfQogICAgIHJlc2V0UHJvcGVy
dHlNYXJrcygpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBmOGIyNGRmLi41OGY3N2UzIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAt
MjQxLDE4ICsyNDEsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBBdG9taWNTdHJp
bmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRva2VuaXplciBtZXRob2RzIGFu
ZCBkYXRhCi0gICAgICAgIHVuc2lnbmVkIG1fcnVsZUJvZHlTdGFydE9mZnNldDsKLSAgICAgICAg
dW5zaWduZWQgbV9ydWxlQm9keUVuZE9mZnNldDsKLSAgICAgICAgdW5zaWduZWQgbV9wcm9wZXJ0
eVN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5RW5kT2Zmc2V0OworICAg
ICAgICBTb3VyY2VSYW5nZSBtX3NlbGVjdG9yTGlzdFJhbmdlOworICAgICAgICBTb3VyY2VSYW5n
ZSBtX3J1bGVCb2R5UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcHJvcGVydHlSYW5nZTsK
ICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXAqIG1fcnVsZVJhbmdlTWFwOwogICAgICAgICBSZWZQ
dHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRTdHlsZURhdGE7CisgICAgICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gbV9jdXJyZW50UnVsZURhdGE7CisgICAgICAgIHZvaWQgbWFy
a1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya1NlbGVjdG9yTGlzdEVuZCgp
OwogICAgICAgICB2b2lkIG1hcmtSdWxlQm9keVN0YXJ0KCk7CiAgICAgICAgIHZvaWQgbWFya1J1
bGVCb2R5RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICAgICAg
dm9pZCBtYXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVy
dHlQYXJzZWQpOwotICAgICAgICB2b2lkIHJlc2V0UnVsZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9k
eVN0YXJ0T2Zmc2V0ID0gbV9ydWxlQm9keUVuZE9mZnNldCA9IDA7IH0KLSAgICAgICAgdm9pZCBy
ZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG1fcHJvcGVydHlF
bmRPZmZzZXQgPSBVSU5UX01BWDsgfQorICAgICAgICB2b2lkIHJlc2V0U2VsZWN0b3JMaXN0TWFy
a3MoKSB7IG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSBtX3NlbGVjdG9yTGlzdFJhbmdlLmVu
ZCA9IDA7IH0KKyAgICAgICAgdm9pZCByZXNldFJ1bGVCb2R5TWFya3MoKSB7IG1fcnVsZUJvZHlS
YW5nZS5zdGFydCA9IG1fcnVsZUJvZHlSYW5nZS5lbmQgPSAwOyB9CisgICAgICAgIHZvaWQgcmVz
ZXRQcm9wZXJ0eU1hcmtzKCkgeyBtX3Byb3BlcnR5UmFuZ2Uuc3RhcnQgPSBtX3Byb3BlcnR5UmFu
Z2UuZW5kID0gVUlOVF9NQVg7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwogICAg
ICAgICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciogdGV4dChp
bnQqIGxlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcAppbmRleCAxNjI4
MDMxLi5lYjljMmMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURh
dGEuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAKQEAgLTU0
LDEzICs1NCw2IEBAIFNvdXJjZVJhbmdlOjpTb3VyY2VSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5z
aWduZWQgZW5kKQogewogfQogCi1Tb3VyY2VSYW5nZSYgU291cmNlUmFuZ2U6Om9wZXJhdG9yPShj
b25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpCi17Ci0gICAgdGhpcy0+c3RhcnQgPSBvdGhlci5zdGFy
dDsKLSAgICB0aGlzLT5lbmQgPSBvdGhlci5lbmQ7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCiBD
U1NQcm9wZXJ0eVNvdXJjZURhdGE6OkNTU1Byb3BlcnR5U291cmNlRGF0YShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1wb3J0YW50LCBib29sIHBhcnNlZE9r
LCBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpCiAgICAgOiBuYW1lKG5hbWUpCiAgICAgLCB2YWx1
ZSh2YWx1ZSkKQEAgLTg4LDE2ICs4MSw2IEBAIENTU1Byb3BlcnR5U291cmNlRGF0YTo6Q1NTUHJv
cGVydHlTb3VyY2VEYXRhKCkKIHsKIH0KIAotQ1NTUHJvcGVydHlTb3VyY2VEYXRhJiBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE6Om9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG90
aGVyKQotewotICAgIG5hbWUgPSBvdGhlci5uYW1lOwotICAgIHZhbHVlID0gb3RoZXIudmFsdWU7
Ci0gICAgaW1wb3J0YW50ID0gb3RoZXIuaW1wb3J0YW50OwotICAgIHBhcnNlZE9rID0gb3RoZXIu
cGFyc2VkT2s7Ci0gICAgcmFuZ2UgPSBvdGhlci5yYW5nZTsKLSAgICByZXR1cm4gKnRoaXM7Ci19
Ci0KIFN0cmluZyBDU1NQcm9wZXJ0eVNvdXJjZURhdGE6OnRvU3RyaW5nKCkgY29uc3QKIHsKICAg
ICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgZW1wdHlWYWx1ZSwgKCJlIikpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmggYi9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaAppbmRleCBiZWFlOWQwLi5kYjgwZDQ2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNvdXJjZURhdGEuaAorKysgYi9XZWJDb3JlL2Nzcy9D
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaApAQCAtNDQsNyArNDQsNiBAQCBjbGFzcyBDU1NTdHlsZVJ1
bGU7CiBzdHJ1Y3QgU291cmNlUmFuZ2UgewogICAgIFNvdXJjZVJhbmdlKCk7CiAgICAgU291cmNl
UmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7Ci0gICAgU291cmNlUmFuZ2UmIG9w
ZXJhdG9yPShjb25zdCBTb3VyY2VSYW5nZSYgb3RoZXIpOwogCiAgICAgdW5zaWduZWQgc3RhcnQ7
CiAgICAgdW5zaWduZWQgZW5kOwpAQCAtNTYsOSArNTUsNyBAQCBzdHJ1Y3QgQ1NTUHJvcGVydHlT
b3VyY2VEYXRhIHsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBwYXJzZWRPaywgY29u
c3QgU291cmNlUmFuZ2UmIHJhbmdlKTsKICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoY29uc3Qg
Q1NTUHJvcGVydHlTb3VyY2VEYXRhJiBvdGhlcik7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRh
KCk7Ci0gICAgQUxXQVlTX0lOTElORSB+Q1NTUHJvcGVydHlTb3VyY2VEYXRhKCkgeyB9CiAKLSAg
ICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG9wZXJhdG9yPShjb25zdCBDU1NQcm9wZXJ0eVNvdXJj
ZURhdGEmIG90aGVyKTsKICAgICBTdHJpbmcgdG9TdHJpbmcoKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3Q7CiAKQEAgLTgzLDcgKzgwLDE4IEBAIHN0cnVjdCBDU1NTdHlsZVNvdXJj
ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxDU1NTdHlsZVNvdXJjZURhdGE+IHsKICAgICBTb3Vy
Y2VSYW5nZSBzdHlsZUJvZHlSYW5nZTsKICAgICBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRh
PiBwcm9wZXJ0eURhdGE7CiB9OwotdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlUnVsZSosIFJlZlB0
cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4gU3R5bGVSdWxlUmFuZ2VNYXA7CisKK3N0cnVjdCBDU1NS
dWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGVTb3VyY2VEYXRhPiB7Cisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IGNyZWF0ZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1J1bGVTb3VyY2VEYXRhKCkpOworICAgIH0K
KworICAgIC8vIFJhbmdlIG9mIHRoZSBzZWxlY3RvciBsaXN0IGluIHRoZSBlbmNsb3Npbmcgc291
cmNlLgorICAgIFNvdXJjZVJhbmdlIHNlbGVjdG9yTGlzdFJhbmdlOworICAgIFJlZlB0cjxDU1NT
dHlsZVNvdXJjZURhdGE+IHN0eWxlU291cmNlRGF0YTsKK307Cit0eXBlZGVmIEhhc2hNYXA8Q1NT
U3R5bGVSdWxlKiwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+IFN0eWxlUnVsZVJhbmdlTWFw
OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0gYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2Vu
ZXJhdG9ySW5zcGVjdG9yLnBtCmluZGV4IDgwZTI0M2IuLjJmNWY0MTEgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbQpAQCAtMzMsNiArMzMsMTEgQEAgJHR5
cGVUcmFuc2Zvcm17IkRPTSJ9ID0gewogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JET01BZ2Vu
dC5oIiwKICAgICAiZG9tYWluQWNjZXNzb3IiID0+ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmRv
bUFnZW50KCkiLAogfTsKKyR0eXBlVHJhbnNmb3JteyJDU1MifSA9IHsKKyAgICAiZm9yd2FyZCIg
PT4gIkluc3BlY3RvckNTU0FnZW50IiwKKyAgICAiaGVhZGVyIiA9PiAiSW5zcGVjdG9yQ1NTQWdl
bnQuaCIsCisgICAgImRvbWFpbkFjY2Vzc29yIiA9PiAibV9pbnNwZWN0b3JDb250cm9sbGVyLT5j
c3NBZ2VudCgpIiwKK307CiAkdHlwZVRyYW5zZm9ybXsiQXBwbGljYXRpb25DYWNoZSJ9ID0gewog
ICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50IiwKICAgICAi
aGVhZGVyIiA9PiAiSW5zcGVjdG9yQXBwbGljYXRpb25DYWNoZUFnZW50LmgiLApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5pZGwKaW5kZXggYTA4YTYyMi4uZmE1MTIzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsCkBAIC0xOTEsNyArMTkxLDI1IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2hhbmRsZXI9
RE9NXSB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChpbiBsb25nIHN0eWxlSWQsIGluIFN0cmluZyBw
cm9wZXJ0eU5hbWUsIGluIGJvb2xlYW4gZGlzYWJsZWQsIG91dCBWYWx1ZSBzdHlsZSk7CiAgICAg
ICAgIFtoYW5kbGVyPURPTV0gdm9pZCBzZXRSdWxlU2VsZWN0b3IoaW4gbG9uZyBydWxlSWQsIGlu
IFN0cmluZyBzZWxlY3RvciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUs
IG91dCBib29sZWFuIHNlbGVjdG9yQWZmZWN0c05vZGUpOwogICAgICAgICBbaGFuZGxlcj1ET01d
IHZvaWQgYWRkUnVsZShpbiBTdHJpbmcgc2VsZWN0b3IsIGluIGxvbmcgc2VsZWN0ZWROb2RlSWQs
IG91dCBWYWx1ZSBydWxlLCBvdXQgYm9vbGVhbiBzZWxlY3RvckFmZmVjdHNOb2RlKTsKLSAgICAg
ICAgW2hhbmRsZXI9RE9NXSB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMob3V0IEFycmF5
IGNzc1Byb3BlcnRpZXMpOworCisgICAgICAgIC8vIEdldCBhbGwgc3R5bGVzIGFwcGxpY2FibGUg
dG8gdGhlIGdpdmVuIG5vZGUuCisgICAgICAgIFtoYW5kbGVyPUNTU10gdm9pZCBnZXRDb21wdXRl
ZFN0eWxlRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAg
IFtoYW5kbGVyPUNTU10gdm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihpbiBsb25nIG5vZGVJ
ZCwgb3V0IEFycmF5IHJ1bGVzKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNo
ZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcnVsZXMpOyAv
LyBhcnJheSBvZiB7IHBzZXVkb0lkOiA8bnVtYmVyPiwgcnVsZXM6IGFycmF5IG9mICNjc3NSdWxl
IH0KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUy
KGluIGxvbmcgbm9kZUlkLCBvdXQgVmFsdWUgc3R5bGVzKTsgLy8gbWFwOiBhdHRyaWJ1dGVOYW1l
OiAjY3NzU3R5bGUKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEluaGVyaXRlZFN0eWxl
c0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcmVzdWx0KTsgLy8gYXJyYXkgb2Yg
eyBpbmxpbmVTdHlsZTogI2Nzc1N0eWxlLCBtYXRjaGVkQ1NTUnVsZXM6IGFycmF5IG9mICNjc3NS
dWxlIH0KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldElubGluZVN0eWxlRm9yTm9kZTIo
aW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHlsZSk7CisgICAgICAgIFtoYW5kbGVyPUNTU10g
dm9pZCBnZXRBbGxTdHlsZXMyKG91dCBBcnJheSBzdHlsZVNoZWV0SWRzKTsKKyAgICAgICAgW2hh
bmRsZXI9Q1NTXSB2b2lkIGdldFN0eWxlU2hlZXQyKGluIFN0cmluZyBzdHlsZVNoZWV0SWQsIG91
dCBWYWx1ZSBzdHlsZVNoZWV0KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxl
U2hlZXRUZXh0MihpbiBTdHJpbmcgc3R5bGVTaGVldElkLCBpbiBTdHJpbmcgdGV4dCk7CisgICAg
ICAgIFtoYW5kbGVyPUNTU10gdm9pZCBzZXRTdHlsZVRleHQyKGluIFN0cmluZyBzdHlsZUlkLCBp
biBTdHJpbmcgdGV4dCwgb3V0IFZhbHVlIHN0eWxlKTsKKworICAgICAgICAvLyBFbmFibGUvZGlz
YWJsZSBwcm9wZXJ0eS4gW21vZGVsXQorICAgICAgICAvLyBTaG91bGQgYmUgc2VudCBpbiBhIGJh
dGNoIGJlZm9yZSBzZXRTdHlsZVRleHQoKSAoc28gdGhhdCBub3RoaW5nIGNhbiBoYXBwZW4gYmV0
d2VlbiB0aGUgdHdvIGNhbGxzKS4KKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHRvZ2dsZVBy
b3BlcnR5MihpbiBTdHJpbmcgc3R5bGVJZCwgaW4gbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGluIGJv
b2xlYW4gZGlzYWJsZWQpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgc2V0UnVsZVNlbGVj
dG9yMihpbiBTdHJpbmcgcnVsZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBWYWx1ZSBydWxl
KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGFkZFJ1bGUyKGluIGxvbmcgY29udGV4dE5v
ZGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBvdXQgVmFsdWUgcnVsZSk7CisgICAgICAgIFtoYW5k
bGVyPUNTU10gdm9pZCBnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKG91dCBBcnJheSBjc3NQcm9w
ZXJ0aWVzKTsKIAogICAgICAgICBbaGFuZGxlcj1Db250cm9sbGVyXSB2b2lkIGdldENvb2tpZXMo
b3V0IEFycmF5IGNvb2tpZXMsIG91dCBTdHJpbmcgY29va2llc1N0cmluZyk7CiAgICAgICAgIFto
YW5kbGVyPUNvbnRyb2xsZXJdIHZvaWQgZGVsZXRlQ29va2llKGluIFN0cmluZyBjb29raWVOYW1l
LCBpbiBTdHJpbmcgZG9tYWluKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU0FnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTkzMDUwCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCkBAIC0wLDAg
KzEsNjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
Ikluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2luY2x1
ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRl
ICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJJ
bnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckZyb250ZW5kLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgi
CisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKworLy8g
Y3NzUHJvcGVydHkgPSB7CisvLyAgICBuYW1lICAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICB2
YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICBwcmlvcml0eSAgICAgIDogPHN0cmluZz4s
IC8vICIiIGZvciBub24tcGFyc2VkT2sgcHJvcGVydGllcworLy8gICAgaW1wbGljaXQgICAgICA6
IDxib29sZWFuPiwKKy8vICAgIHBhcnNlZE9rICAgICAgOiA8Ym9vbGVhbj4sIC8vIHdoZXRoZXIg
cHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSBXZWJDb3JlCisvLyAgICBzdGF0dXMgICAgICAgIDog
PHN0cmluZz4sIC8vICJkaXNhYmxlZCIgfCAiYWN0aXZlIiB8ICJpbmFjdGl2ZSIgfCAic3R5bGUi
CisvLyAgICBzaG9ydGhhbmROYW1lIDogPHN0cmluZz4sCisvLyAgICBzdGFydE9mZnNldCAgIDog
PG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVydHkgdGV4dCBzdGFydCBvZmZzZXQgaW4gZW5j
bG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQg
c3VjaC4KKy8vICAgIGVuZE9mZnNldCAgICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9w
ZXJ0eSB0ZXh0IGVuZCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNl
bnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8vIH0KKy8vCisvLyBzdGF0dXM6Cisv
LyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5IHVzZXIKKy8vICJhY3RpdmUiID09
IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24K
Ky8vICJpbmFjdGl2ZSIgPT0gcHJvcGVydHkgZG9lcyBubyBwYXJ0aWNpcGF0ZSBpbiB0aGUgY29t
cHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJpZGRlbiBieSBhIHN1YnNlcXVlbnQg
cHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQorLy8gInN0eWxlIiA9PSBwcm9wZXJ0eSBpcyBh
Y3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29yZSBDU1NTdHlsZURlY2xhcmF0aW9u
IHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBpbXBsaWNpdCBsb25naGFuZCBwcm9w
ZXJ0aWVzKQorLy8KKy8vCisvLyBjc3NTdHlsZSA9IHsKKy8vICAgIHN0eWxlSWQgICAgICAgICA6
IDxudW1iZXI+LCAvLyBPcHRpb25hbAorLy8gICAgc3R5bGVTaGVldElkICAgIDogPG51bWJlcj4s
IC8vIFBhcmVudDogLTEgZm9yIGlubGluZSBzdHlsZXMgKDxmb28gc3R5bGU9Ii4uIj4pCisvLyAg
ICBjc3NQcm9wZXJ0aWVzICAgOiBbCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1By
b3BlcnR5LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgorLy8gICAgICAgICAgICAg
ICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQorLy8gICAgICAgICAgICAgICAgICAgIF0sCisvLyAg
ICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kTmFtZTEgOiBzaG9ydGhhbmRWYWx1ZTEsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
c2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRWYWx1ZTIKKy8vICAgICAgICAgICAgICAgICAgICAg
IH0sCisvLyAgICBjc3NUZXh0ICAgICAgICAgOiA8c3RyaW5nPiwgLy8gZGVjbGFyYXRpb24gdGV4
dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB9IC8vID8/PworLy8gfQorLy8KKy8vIC8vIFRP
RE86CisvLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQcm9wZXJ0aWVzIHRvIGVuYWJsZWQgZmxhZy4K
Ky8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0IHRvIHByb3BlcnRpZXMKKy8vCisvLyBjc3NS
dWxlID0geworLy8gICAgcnVsZUlkICAgICAgIDogPG51bWJlcj4sCisvLyAgICBzZWxlY3RvclRl
eHQgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgIDogPHN0cmluZz4KKy8vICAgIHNvdXJj
ZUxpbmUgICA6IDxzdHJpbmc+CisvLyAgICBzdHlsZVNoZWV0SWQgOiA8bnVtYmVyPiAvLyBhbHNv
IGZvdW5kIGluIHN0eWxlCisvLyAgICBvcmlnaW4gICAgICAgOiA8c3RyaW5nPiAvLyAiIiB8fCAi
dXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3IiCisvLyAgICBzdHlsZSAgICAgICAg
OiAjY3NzU3R5bGUKKy8vIH0KKy8vCisvLyAvLyBUT0RPOgorLy8gLy8gLSBmaXggb3JpZ2luCisv
LyAvLyAtIGFkZCBzb3VyY2VVUkwKKy8vIC8vIC0gZml4IHBhcmVudFN0eWxlU2hlZXRJZAorLy8K
Ky8vIGNzc1N0eWxlU2hlZXQgPSB7CisvLyAgICBzdHlsZVNoZWV0SWQgICA6IDxudW1iZXI+Cisv
LyAgICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICB0aXRsZSAgICAgICAgICA6IDxz
dHJpbmc+CisvLyAgICBkaXNhYmxlZCAgICAgICA6IDxib29sZWFuPgorLy8gICAgZG9jdW1lbnRO
b2RlSWQgOiA8bnVtYmVyPgorLy8gICAgcnVsZXMgICAgICAgICAgOiBbCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAjY3NzUnVsZSwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgor
Ly8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUKKy8vICAgICAgICAgICAgICAgICAg
ICAgXQorLy8gfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0luc3BlY3RvckNTU0FnZW50OjpJ
bnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCkKKyAgICA6IG1fZnJvbnRlbmQoZnJvbnRlbmQpCisgICAgLCBtX2Rv
bUFnZW50KGRvbUFnZW50KQorICAgICwgbV9sYXN0U3R5bGVTaGVldElkKDEpCisgICAgLCBtX2xh
c3RSdWxlSWQoMSkKKyAgICAsIG1fbGFzdFN0eWxlSWQoMSkKK3sKKyAgICBtX2RvbUFnZW50LT5z
ZXRET01MaXN0ZW5lcih0aGlzKTsKK30KKworSW5zcGVjdG9yQ1NTQWdlbnQ6On5JbnNwZWN0b3JD
U1NBZ2VudCgpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
cmVzZXQoKQoreworICAgIG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKDApOworfQorCitFbGVt
ZW50KiBJbnNwZWN0b3JDU1NBZ2VudDo6ZWxlbWVudEZvcklkKGxvbmcgbm9kZUlkKQoreworICAg
IE5vZGUqIG5vZGUgPSBkb21BZ2VudCgpLT5ub2RlRm9ySWQobm9kZUlkKTsKKyAgICByZXR1cm4g
KCFub2RlIHx8IG5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSA/IDAgOiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3Qq
IHJ1bGVMaXN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVj
dG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlmICghcnVsZUxpc3QpCisgICAgICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVM
aXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUgPSBhc0NTU1N0eWxlUnVsZShydWxlTGlzdC0+aXRlbShpKSk7CisgICAgICAgIGlmICghcnVs
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQq
IHN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0KHJ1bGUpKTsKKyAg
ICAgICAgaWYgKHN0eWxlU2hlZXQpCisgICAgICAgICAgICByZXN1bHQtPnB1c2hPYmplY3Qoc3R5
bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUsIGRvbUFnZW50KCktPmRvY3VtZW50VVJM
U3RyaW5nKHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSksIGluc3BlY3RvclN0eWxlU2hlZXRG
b3JEb2N1bWVudChzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCksIGZhbHNlKSkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6Z2V0TWF0Y2hlZFJ1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5v
ZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NTdHls
ZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxl
Y3RvcigpOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3It
PnN0eWxlUnVsZXNGb3JFbGVtZW50KGVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAqcmVzdWx0
ID0gYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQoKSk7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9k
ZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxl
bWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25l
ckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBmb3IgKFBzZXVkb0lkIHBzZXVkb0lk
ID0gRklSU1RfUFVCTElDX1BTRVVET0lEOyBwc2V1ZG9JZCA8IEFGVEVSX0xBU1RfSU5URVJOQUxf
UFNFVURPSUQ7IHBzZXVkb0lkID0gc3RhdGljX2Nhc3Q8UHNldWRvSWQ+KHBzZXVkb0lkICsgMSkp
IHsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+
cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoZWxlbWVudCwgcHNldWRvSWQsIGZhbHNlLCB0cnVl
KTsKKyAgICAgICAgaWYgKG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpKSB7
CisgICAgICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwc2V1ZG9TdHlsZXMgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICAgICAgcHNldWRvU3R5bGVzLT5zZXROdW1i
ZXIoInBzZXVkb0lkIiwgc3RhdGljX2Nhc3Q8aW50Pihwc2V1ZG9JZCkpOworICAgICAgICAgICAg
cHNldWRvU3R5bGVzLT5zZXRBcnJheSgicnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QobWF0
Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgICAgICAgICAoKnJlc3VsdCktPnB1c2hPYmplY3QocHNl
dWRvU3R5bGVzLnJlbGVhc2UoKSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVs
ZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgKnJlc3VsdCA9IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKGVsZW1lbnQpOwor
fQorCisvLyBzdGF0aWMKK0VsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjppbmxpbmVTdHlsZUVs
ZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSB8fCAh
c3R5bGUtPmlzTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgTm9kZSogbm9kZSA9IHN0YXRpY19jYXN0PENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKj4o
c3R5bGUpLT5ub2RlKCk7CisgICAgaWYgKCFub2RlIHx8ICFub2RlLT5pc1N0eWxlZEVsZW1lbnQo
KSB8fCBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4obm9kZSktPmdldElubGluZVN0eWxlRGVj
bCgpICE9IHN0eWxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG5vZGUpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmxpbmVT
dHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkK
K3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hlZXQoZWxlbWVudCk7
CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47IC8vID8/PworCisgICAgKnN0
eWxlID0gc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShlbGVtZW50LT5zdHlsZSgpKTsK
K30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50
KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gZWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIGlmICghZGVmYXVsdFZpZXcpCisgICAg
ICAgIHJldHVybjsKKworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoZGVmYXVsdFZp
ZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgpLCAiIik7Cit9CisKK3ZvaWQg
SW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlk
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50
ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KSB7CisgICAgICAgICpz
dHlsZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0eWxlcyA9IEluc3BlY3RvckFy
cmF5OjpjcmVhdGUoKTsKKyAgICBFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZWxlbWVudC0+cGFy
ZW50RWxlbWVudCgpOworICAgIHdoaWxlIChwYXJlbnRFbGVtZW50KSB7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkgJiYgcGFyZW50RWxlbWVudC0+
c3R5bGUoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5bGVTaGVldChlbGVtZW50KTsK
KyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQorICAgICAgICAgICAgICAgIHBhcmVudFN0eWxl
LT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHls
ZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKCIwIikpKTsKKyAgICAgICAgfQorCisgICAgICAgIENT
U1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50RWxlbWVudC0+b3duZXJEb2N1
bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gcGFy
ZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxlUnVsZXNGb3JFbGVtZW50KHBh
cmVudEVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcGFyZW50U3R5bGUtPnNldEFycmF5
KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxpc3QocGFyZW50TWF0Y2hlZFJ1
bGVzLmdldCgpKSk7CisgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+cHVzaE9iamVjdChwYXJlbnRT
dHlsZS5yZWxlYXNlKCkpOworICAgICAgICBwYXJlbnRFbGVtZW50ID0gcGFyZW50RWxlbWVudC0+
cGFyZW50RWxlbWVudCgpOworICAgIH0KKyAgICAqc3R5bGUgPSBpbmhlcml0ZWRTdHlsZXMucmVs
ZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRBbGxTdHlsZXMyKFJlZlB0
cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKK3sKKyAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQ
dHI8RG9jdW1lbnQ+ID4mIGRvY3VtZW50cyA9IGRvbUFnZW50KCktPmRvY3VtZW50cygpOworICAg
IGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+Ojpjb25zdF9pdGVyYXRvciBpdCA9
IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5kKCk7ICsraXQpIHsKKyAgICAg
ICAgU3R5bGVTaGVldExpc3QqIGxpc3QgPSAoKml0KS0+c3R5bGVTaGVldHMoKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
ICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBsaXN0LT5pdGVtKGkpOworICAgICAgICAgICAg
aWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7CisgICAgICAgICAgICAgICAgSW5z
cGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGJpbmRTdHlsZVNoZWV0KHN0
YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7CisgICAgICAgICAgICAgICAg
KCpzdHlsZXMpLT5wdXNoU3RyaW5nKGluc3BlY3RvclN0eWxlU2hlZXQtPmlkKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNw
ZWN0b3JDU1NBZ2VudDo6YmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVldCA9
IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoc3R5bGVTaGVldCk7Cisg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KSB7CisgICAgICAgIFN0cmluZyBpZCA9IFN0cmlu
Zzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVT
aGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6OmNyZWF0ZShpZCwgc3R5bGVTaGVldCk7CisgICAg
ICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0
KTsKKyAgICAgICAgbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChzdHls
ZVNoZWV0LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICB9CisgICAgcmV0dXJuIGluc3BlY3Rv
clN0eWxlU2hlZXQuZ2V0KCk7Cit9CisKK0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNT
U0FnZW50OjppbnNwZWN0b3JTdHlsZVNoZWV0Rm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50
LCBib29sIGNyZWF0ZUlmQWJzZW50KQoreworICAgIGlmICghZG9jdW1lbnQpIHsKKyAgICAgICAg
QVNTRVJUKCFjcmVhdGVJZkFic2VudCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gbV9kb2N1
bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoZG9jdW1lbnQpOworICAgIGlmICghaW5zcGVj
dG9yU3R5bGVTaGVldCAmJiBjcmVhdGVJZkFic2VudCkgeworICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50
LT5jcmVhdGVFbGVtZW50KCJzdHlsZSIsIGVjKTsKKyAgICAgICAgaWYgKCFlYykKKyAgICAgICAg
ICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIiwgZWMpOwor
ICAgICAgICBpZiAoIWVjKQorICAgICAgICAgICAgZG9jdW1lbnQtPmhlYWQoKS0+YXBwZW5kQ2hp
bGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAgICAgIGlmIChlYykKKyAgICAgICAgICAgIHJldHVy
biAwOworICAgICAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMgPSBkb2N1bWVudC0+c3R5
bGVTaGVldHMoKTsKKyAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHN0eWxlU2hlZXRz
LT5pdGVtKHN0eWxlU2hlZXRzLT5sZW5ndGgoKSAtIDEpOworICAgICAgICBpZiAoIXN0eWxlU2hl
ZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIENT
U1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4o
c3R5bGVTaGVldCk7CisgICAgICAgIFN0cmluZyBpZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0
eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0
eWxlU2hlZXQ6OmNyZWF0ZShpZCwgY3NzU3R5bGVTaGVldCk7CisgICAgICAgIG1faWRUb0luc3Bl
Y3RvclN0eWxlU2hlZXQuc2V0KGlkLCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9j
c3NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChjc3NTdHlsZVNoZWV0LCBpbnNw
ZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVl
dC5zZXQoZG9jdW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgIH0KKyAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKK30KKworSW5zcGVjdG9yU3R5bGVTaGVldCogSW5z
cGVjdG9yQ1NTQWdlbnQ6OnN0eWxlU2hlZXRGb3JJZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCkKK3sKKyAgICBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lk
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQoc3R5bGVTaGVldElkKTsKKyAgICByZXR1cm4gaXQg
PT0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kLmdldCgp
OworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0Mihjb25zdCBTdHJp
bmcmIHN0eWxlU2hlZXRJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVTaGVldE9iamVj
dCkKK3sKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5
bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0
KQorICAgICAgICByZXR1cm47CisKKyAgICBEb2N1bWVudCogZG9jID0gaW5zcGVjdG9yU3R5bGVT
aGVldC0+b3duZXJEb2N1bWVudCgpOworICAgICpzdHlsZVNoZWV0T2JqZWN0ID0gaW5zcGVjdG9y
U3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KGRvbUFnZW50KCktPmlkRm9yRG9j
dW1lbnROb2RlKGRvYyksIGRvbUFnZW50KCktPmRvY3VtZW50VVJMU3RyaW5nKGRvYyksIGluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChkb2MsIGZhbHNlKSk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnNldFN0eWxlU2hlZXRUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoc3R5bGVTaGVldElkKTsKKyAgICBpZiAo
IWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGluc3BlY3RvclN0
eWxlU2hlZXQtPnNldFRleHQodGV4dCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNl
dFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
aWRQYXJ0czsKKyAgICBmdWxsU3R5bGVJZC5zcGxpdCgnOicsIGlkUGFydHMpOworICAgIEFTU0VS
VChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3Bl
Y3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5hdCgwKSk7CisgICAgaWYg
KCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIWluc3Bl
Y3RvclN0eWxlU2hlZXQtPnNldFN0eWxlVGV4dChpZFBhcnRzLmF0KDEpLCB0ZXh0KSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoaW5zcGVjdG9yU3R5bGVTaGVldC0+c3R5bGVGb3JJZChpZFBhcnRzLmF0KDEp
KSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OnRvZ2dsZVByb3BlcnR5Mihjb25zdCBT
dHJpbmcmLCBsb25nLCBib29sKQoreworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRS
dWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9y
LCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
aWRQYXJ0czsKKyAgICBydWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsKKyAgICBBU1NFUlQoaWRQ
YXJ0cy5zaXplKCkgPT0gMik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JT
dHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKGlkUGFydHMuYXQoMCkpOworICAgIGlmICghaW5z
cGVjdG9yU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYm9vbCBzdWNjZXNzID0g
aW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UnVsZVNlbGVjdG9yKGlkUGFydHMuYXQoMSksIHNlbGVj
dG9yKTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybjsKKworICAgICpyZXN1bHQg
PSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclJ1bGUoaW5zcGVjdG9yU3R5bGVT
aGVldC0+cnVsZUZvcklkKGlkUGFydHMuYXQoMSkpLCBkb21BZ2VudCgpLT5kb2N1bWVudFVSTFN0
cmluZyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCkpLCBpbnNwZWN0b3JTdHls
ZVNoZWV0Rm9yRG9jdW1lbnQoaW5zcGVjdG9yU3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpLCBm
YWxzZSkpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjphZGRSdWxlMihjb25zdCBsb25n
IGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JW
YWx1ZT4qIHJlc3VsdCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9kZUZvcklk
KGNvbnRleHROb2RlSWQpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
SW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IGluc3BlY3RvclN0eWxl
U2hlZXRGb3JEb2N1bWVudChub2RlLT5kb2N1bWVudCgpLCB0cnVlKTsKKyAgICBDU1NTdHlsZVJ1
bGUqIG5ld1J1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yKTsKKyAg
ICBpZiAobmV3UnVsZSkKKyAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1
aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlLCBkb21BZ2VudCgpLT5kb2N1bWVudFVSTFN0cmluZyhp
bnNwZWN0b3JTdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCkpLCBpbnNwZWN0b3JTdHlsZVNoZWV0
Rm9yRG9jdW1lbnQoaW5zcGVjdG9yU3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpLCBmYWxzZSkp
OworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVz
KFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGNzc1Byb3BlcnRpZXMpCit7CisgICAgUmVmUHRyPElu
c3BlY3RvckFycmF5PiBwcm9wZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQorICAgICAgICBwcm9w
ZXJ0aWVzLT5wdXNoU3RyaW5nKHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOworCisgICAgKmNzc1By
b3BlcnRpZXMgPSBwcm9wZXJ0aWVzLnJlbGVhc2UoKTsKK30KKworLy8gc3RhdGljCitDU1NTdHls
ZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6cGFyZW50U3R5bGVTaGVldChTdHlsZUJhc2UqIHN0
eWxlQmFzZSkKK3sKKyAgICBpZiAoIXN0eWxlQmFzZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVCYXNlLT5zdHlsZXNoZWV0KCk7CisgICAg
aWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisKKyAgICBy
ZXR1cm4gMDsKK30KKworLy8gc3RhdGljCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvckNTU0FnZW50
Ojphc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sKKyAgICBpZiAoIXN0eWxl
QmFzZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ1NTUnVsZSogcnVs
ZSA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZUJhc2UpOworICAgIGlmIChydWxlLT50eXBl
KCkgIT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOworfQorCitQYXNzUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gSW5zcGVjdG9yU3R5bGVTaGVldDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgSW5zcGVjdG9yU3R5bGVT
aGVldCogc3R5bGVTaGVldEZvckRvYykKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgdXNlckFnZW50LCAoInVzZXItYWdlbnQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChT
dHJpbmcsIHVzZXIsICgidXNlciIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
aW5zcGVjdG9yLCAoImluc3BlY3RvciIpKTsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJp
bmcoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNl
dFN0cmluZygiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1i
ZXIoInNvdXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3Ry
aW5nKCJkb2N1bWVudFVSTCIsIGRvY3VtZW50VVJMKTsKKworICAgIENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAg
aWYgKHN0eWxlU2hlZXQpCisgICAgICAgIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS0+c2V0U3RyaW5n
KCJocmVmIiwgc3R5bGVTaGVldC0+aHJlZigpKTsKKyAgICBwYXJlbnRTdHlsZVNoZWV0VmFsdWUt
PnNldFN0cmluZygiaWQiLCBpZCgpKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgicGFyZW50U3R5
bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZS5yZWxlYXNlKCkpOworCisgICAgU3RyaW5n
IG9yaWdpbigiIik7CisgICAgaWYgKHN0eWxlU2hlZXQgJiYgIXN0eWxlU2hlZXQtPm93bmVyTm9k
ZSgpICYmIHN0eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAgICAgIG9yaWdpbiA9IHVz
ZXJBZ2VudDsKKyAgICBlbHNlIGlmIChzdHlsZVNoZWV0ICYmIHN0eWxlU2hlZXQtPm93bmVyTm9k
ZSgpICYmIHN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1lbnQi
KQorICAgICAgICBvcmlnaW4gPSB1c2VyOworICAgIGVsc2UgeworICAgICAgICBpZiAoc3R5bGVT
aGVldEZvckRvYyAmJiBzdHlsZVNoZWV0ID09IHN0eWxlU2hlZXRGb3JEb2MtPnBhZ2VTdHlsZVNo
ZWV0KCkpCisgICAgICAgICAgICBvcmlnaW4gPSBpbnNwZWN0b3I7CisgICAgfQorICAgIHJlc3Vs
dC0+c2V0U3RyaW5nKCJvcmlnaW4iLCBvcmlnaW4pOworCisgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBzb3VyY2VEYXRhOworICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAg
ICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAg
IGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvclN0
YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQpOworICAgICAg
ICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JFbmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQpOworICAgIH0KKworICAgIGJvb2wgYmluZCA9IG9yaWdpbiAhPSB1
c2VyQWdlbnQgJiYgb3JpZ2luICE9IHVzZXI7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInN0eWxl
IiwgYnVpbGRPYmplY3RGb3JTdHlsZShydWxlLT5zdHlsZSgpKSk7CisgICAgaWYgKGJpbmQpCisg
ICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGZ1bGxSdWxlSWQocnVsZSkpOworCisgICAg
cmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0
PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVu
dCogZWxlbWVudCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdHlsZUF0dHJpYnV0
ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIE5hbWVkTm9kZU1hcCogYXR0cmli
dXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBh
dHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIEF0
dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgU3RyaW5nIGF0dHJpYnV0
ZU5hbWUgPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpOworICAgICAgICAgICAgc3R5bGVBdHRyaWJ1
dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVjdEZv
clN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBzdHlsZUF0dHJpYnV0ZXM7Cit9CisKKy8vIHN0YXRpYworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHls
ZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
cmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBpZiAoIWZ1bGxTdHlsZUlk
LmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQp
OworCisgICAgcmVzdWx0LT5zZXRTdHJpbmcoIndpZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFs
dWUoIndpZHRoIikpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJoZWlnaHQiLCBzdHlsZS0+Z2V0
UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IikpOworICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURh
dGE+KiBwcm9wZXJ0eURhdGEgPSAwOworCisgICAgaWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAg
cmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFu
Z2Uuc3RhcnQpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcigiZW5kT2Zmc2V0Iiwgc291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAgICAgICAgcHJvcGVydHlEYXRhID0gJnNvdXJj
ZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICB9CisgICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQ
cm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCksIHByb3BlcnR5RGF0YSk7CisKKyAgICByZXR1
cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworLy8gc3RhdGljCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3Vy
Y2VEYXRhPiogcHJvcGVydHlEYXRhKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
cGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiBzaG9ydGhhbmRWYWx1ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAg
IEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+IHByb3BlcnR5TmFtZVRv
UHJldmlvdXNBY3RpdmVQcm9wZXJ0eTsKKyAgICBIYXNoU2V0PFN0cmluZz4gZm91bmRTaG9ydGhh
bmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVzOworICAgIGlmIChw
cm9wZXJ0eURhdGEpIHsKKyAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRh
Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEtPmJlZ2luKCk7IGl0ICE9IHByb3Bl
cnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0IENTU1Byb3BlcnR5U291
cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9ICppdDsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOworICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOworICAgICAgICAgICAgc291cmNlUHJv
cGVydHlOYW1lcy5hZGQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJu
YW1lIiwgbmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1ZSIsIHBy
b3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygicHJp
b3JpdHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQiIDogIiIpOworICAg
ICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2ZSIpOworICAgICAg
ICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgcHJvcGVydHlFbnRyeS5wYXJz
ZWRPayk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJzdGFydE9mZnNldCIsIHBy
b3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJl
cigiZW5kT2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5lbmQpOworICAgICAgICAgICAgaWYg
KHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0
Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIHNob3J0
aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5kKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5kU2hvcnRoYW5kcy5j
b250YWlucyhzaG9ydGhhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5k
cy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5z
ZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
cHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+Ojpp
dGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5m
aW5kKG5hbWUpOworICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3BlcnR5TmFtZVRvUHJl
dmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgeworICAgICAgICAgICAgICAgIGFjdGl2ZUl0LT5z
ZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7CisgICAgICAgICAgICAgICAg
YWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgIiIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0FjdGl2ZVByb3BlcnR5
LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGludCBp
ID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBT
dHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoc291cmNlUHJvcGVydHlO
YW1lcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNv
dXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIHByb3Bl
cnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJuYW1lIiwgbmFtZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInZhbHVlIiwgc3R5
bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1lIikpOworICAgICAg
ICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQcm9wZXJ0eUltcGxp
Y2l0KG5hbWUpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgdHJ1
ZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJzdHlsZSIpOworICAg
ICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKG5hbWUp
OworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRoYW5k
KTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0aGFuZHMu
Y29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgZm91bmRTaG9ydGhhbmRzLmFkZChz
aG9ydGhhbmQpOworICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRo
YW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVydGllcyk7CisgICAg
cmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFuZFZhbHVlcyk7Cit9
CisKKy8vIHN0YXRpYworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yQ1NTQWdlbnQ6OmxvbmdoYW5k
UHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9y
dGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0aWVzOworICAgIEhh
c2hTZXQ8U3RyaW5nPiBmb3VuZFByb3BlcnRpZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJv
cGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJvcGVydGllcy5jb250
YWlucyhpbmRpdmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChp
bmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFkZChpbmRpdmlkdWFsUHJvcGVydHkp
OworICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlkdWFsUHJvcGVydHkpOworICAgIH0K
KyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworLy8gc3RhdGljCitTdHJpbmcgSW5zcGVjdG9y
Q1NTQWdlbnQ6OnNob3J0aGFuZFZhbHVlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25z
dCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQoreworICAgIFN0cmluZyB2YWx1ZSA9IHN0eWxl
LT5nZXRQcm9wZXJ0eVZhbHVlKHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBpZiAodmFsdWUuaXNF
bXB0eSgpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3Ro
KCk7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxl
LT5pdGVtKGkpOworICAgICAgICAgICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChp
bmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHN0eWxlLT5pc1Byb3BlcnR5SW1wbGljaXQoaW5k
aXZpZHVhbFByb3BlcnR5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IFN0cmluZyBpbmRpdmlkdWFsVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShpbmRpdmlk
dWFsUHJvcGVydHkpOworICAgICAgICAgICAgaWYgKGluZGl2aWR1YWxWYWx1ZSA9PSAiaW5pdGlh
bCIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAodmFsdWUubGVu
Z3RoKCkpCisgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCIgIik7CisgICAgICAgICAgICB2
YWx1ZS5hcHBlbmQoaW5kaXZpZHVhbFZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gdmFsdWU7Cit9CisKKy8vIHN0YXRpYworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9y
dGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBz
aG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0UHJv
cGVydHlQcmlvcml0eShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHByaW9yaXR5LmlzRW1w
dHkoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+
aXRlbShpKTsKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5k
aXZpZHVhbFByb3BlcnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3Jp
dHkoaW5kaXZpZHVhbFByb3BlcnR5KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBwcmlvcml0eTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQoreworICAgIE5vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmZpbmQo
bm9kZSk7CisgICAgaWYgKGl0ID09IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5yZW1vdmUo
aXQtPnNlY29uZC0+aWQoKSk7CisgICAgbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92
ZShub2RlKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6ZGlkUmVtb3ZlRG9jdW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hl
ZXQucmVtb3ZlKGRvY3VtZW50KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZGIwYTYKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oCkBAIC0wLDAgKzEs
MTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JDU1NBZ2VudF9oCisjZGVm
aW5lIEluc3BlY3RvckNTU0FnZW50X2gKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5U291cmNlRGF0
YS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclN0eWxlU2hlZXQuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1J1bGU7CitjbGFzcyBDU1NS
dWxlTGlzdDsKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBFbGVtZW50OworY2xh
c3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFzcyBOYW1lTm9kZU1hcDsKK2NsYXNzIE5vZGU7CisK
KyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCitjbGFzcyBJbnNwZWN0b3JDU1NBZ2VudCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEluc3BlY3RvckNTU0FnZW50PiwgcHVibGljIEluc3BlY3RvckRPTUFnZW50
OjpET01MaXN0ZW5lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5zcGVjdG9y
Q1NTQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQsIEluc3BlY3RvckRP
TUFnZW50KiBkb21BZ2VudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5z
cGVjdG9yQ1NTQWdlbnQoZnJvbnRlbmQsIGRvbUFnZW50KSk7CisgICAgfQorCisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxl
RGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZVNvdXJjZURh
dGEqID0gMCk7CisgICAgc3RhdGljIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoU3R5
bGVCYXNlKik7CisgICAgc3RhdGljIENTU1N0eWxlUnVsZSogYXNDU1NTdHlsZVJ1bGUoU3R5bGVC
YXNlKik7CisKKyAgICBJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRl
bmQsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCk7CisgICAgfkluc3BlY3RvckNTU0FnZW50
KCk7CisKKyAgICB2b2lkIHJlc2V0KCk7CisgICAgdm9pZCBnZXRNYXRjaGVkUnVsZXNGb3JOb2Rl
Mihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcnVsZXMpOworICAgIHZvaWQg
Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJ1bGVzKTsKKyAgICB2b2lkIGdldEF0dHJpYnV0ZVN0eWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZXMpOworICAgIHZvaWQgZ2V0
SW5saW5lU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiog
c3R5bGUpOworICAgIHZvaWQgZ2V0Q29tcHV0ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZSk7CisgICAgdm9pZCBnZXRJbmhlcml0ZWRTdHls
ZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsK
KyAgICB2b2lkIGdldEFsbFN0eWxlczIoUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGVzKTsK
KyAgICB2b2lkIGdldFN0eWxlU2hlZXQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgc2V0U3R5bGVTaGVldFRleHQy
KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZv
aWQgc2V0U3R5bGVUZXh0Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4
dCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHRvZ2dsZVByb3Bl
cnR5Mihjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGxvbmcgcHJvcGVydHlPcmRpbmFsLCBib29sIGRp
c2FibGVkKTsKKyAgICB2b2lkIHNldFJ1bGVTZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBydWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7
CisgICAgdm9pZCBhZGRSdWxlMihjb25zdCBsb25nIGNvbnRleHROb2RlSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBn
ZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7
CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rv
clN0eWxlU2hlZXQ+ID4gSWRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7CisgICAgdHlwZWRlZiBI
YXNoTWFwPENTU1N0eWxlU2hlZXQqLCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBDU1NT
dHlsZVNoZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxO
b2RlKiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gPiBOb2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0TWFwOyAvLyBmb3IgYm9ndXMgInN0eWxlc2hlZXRzIiB3aXRoIGlu
bGluZSBub2RlIHN0eWxlcworICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8RG9jdW1lbnQ+LCBS
ZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gPiBEb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVl
dE1hcDsgLy8gInZpYSBpbnNwZWN0b3IiIHN0eWxlc2hlZXRzCisKKyAgICBzdGF0aWMgRWxlbWVu
dCogaW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICBzdGF0aWMg
dm9pZCBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlv
biosIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NTUHJvcGVydHlTb3VyY2VEYXRh
PiogcHJvcGVydHlEYXRhKTsKKyAgICBzdGF0aWMgU3RyaW5nIHNob3J0aGFuZFZhbHVlKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBz
dGF0aWMgU3RyaW5nIHNob3J0aGFuZFByaW9yaXR5KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25z
dCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KTsKKyAgICBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
bG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmIHNo
b3J0aGFuZFByb3BlcnR5KTsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZSogYXNJbnNwZWN0b3JTdHlsZVNoZWV0KEVsZW1lbnQqIGVsZW1lbnQpOworICAgIEVsZW1lbnQq
IGVsZW1lbnRGb3JJZChsb25nIG5vZGVJZCk7CisgICAgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFn
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb21BZ2VudC5nZXQoKTsgfQorCisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogYmluZFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXRGb3JEb2N1bWVudChEb2N1bWVudCosIGJv
b2wgY3JlYXRlSWZBYnNlbnQpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXRG
b3JJZChjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCk7CisKKyAgICBQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KTsK
KyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVT
dHlsZXMoRWxlbWVudCogZWxlbWVudCk7CisKKyAgICAvLyBJbnNwZWN0b3JET01BZ2VudDo6RE9N
TGlzdGVuZXIgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURvY3VtZW50KERv
Y3VtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURPTU5vZGUoTm9kZSopOworCisg
ICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckRP
TUFnZW50PiBtX2RvbUFnZW50OworCisgICAgSWRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAgbV9p
ZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBDU1NTdHlsZVNoZWV0VG9JbnNwZWN0b3JTdHls
ZVNoZWV0TWFwIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBOb2Rl
VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwIG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAg
ICBEb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX2RvY3VtZW50VG9JbnNwZWN0b3JT
dHlsZVNoZWV0OworCisgICAgbG9uZyBtX2xhc3RTdHlsZVNoZWV0SWQ7CisgICAgbG9uZyBtX2xh
c3RSdWxlSWQ7CisgICAgbG9uZyBtX2xhc3RTdHlsZUlkOworfTsKKworI2VuZGlmCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvckNTU0FnZW50
X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKaW5kZXggYjAxOTg2MC4u
MDdhNWMyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
Y3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcApAQCAtMTU4
LDcgKzE1OCw3IEBAIFN0cmluZyBJbnNwZWN0b3JDU1NTdG9yZTo6aW5saW5lU3R5bGVTaGVldFRl
eHQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIAogCiAvLyBBbGwgcmFuZ2VzIGFyZTogW3N0
YXJ0OyBlbmQpIChzdGFydCAtIGluY2x1c2l2ZSwgZW5kIC0gZXhjbHVzaXZlKS4KLWJvb2wgSW5z
cGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0YShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCkKK2Jvb2wgSW5zcGVjdG9y
Q1NTU3RvcmU6OmdldFJ1bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+KiByZXN1bHQpCiB7CiAgICAgaWYgKCFzdHlsZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDExICsxNjYsMTMgQEAgYm9vbCBJbnNwZWN0b3JD
U1NTdG9yZTo6Z2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBS
ZWZQdHI8Q1MKICAgICBFbGVtZW50KiBlbGVtZW50ID0gaW5saW5lU3R5bGVFbGVtZW50KHN0eWxl
KTsKICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAvLyBJbmxpbmU6IHN0eWxlPSIuLi4iLgor
ICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhID0gQ1NTUnVs
ZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRh
PiBzdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAg
ICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhlbGVtZW50LCAmc3R5bGVT
b3VyY2VEYXRhKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAqcmVzdWx0ID0gc3R5bGVTb3VyY2VEYXRhOworICAgICAgICBydWxlU291
cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc3R5bGVTb3VyY2VEYXRhLnJlbGVhc2UoKTsKKyAg
ICAgICAgKnJlc3VsdCA9IHJ1bGVTb3VyY2VEYXRhOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKQEAgLTE3OCw3ICsxODAsNyBAQCBib29sIEluc3BlY3RvckNTU1N0b3JlOjpnZXRTdHls
ZVNvdXJjZURhdGEoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJlZlB0cjxDUwogICAgIGlm
ICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4qIHJhbmdlc1ZlY3RvciA9IDA7CisgICAgVmVjdG9yPFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gPiogcmFuZ2VzVmVjdG9yID0gMDsKICAgICBTdHlsZVNo
ZWV0VG9PZmZzZXRzTWFwOjppdGVyYXRvciBpdCA9IG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5maW5k
KHN0eWxlU2hlZXQpOwogICAgIGlmIChpdCA9PSBtX3N0eWxlU2hlZXRUb09mZnNldHMuZW5kKCkp
IHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBzdHlsZVNoZWV0VGV4dChiaW5kU3R5bGVTaGVldChz
dHlsZVNoZWV0KSk7CkBAIC0xODcsNyArMTg5LDcgQEAgYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6
Z2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1MK
ICAgICAgICAgICAgIENTU1BhcnNlciBwOwogICAgICAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXAg
cnVsZVJhbmdlTWFwOwogICAgICAgICAgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0
KCksIHRleHQsIDAsICZydWxlUmFuZ2VNYXApOwotICAgICAgICAgICAgcmFuZ2VzVmVjdG9yID0g
bmV3IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+OworICAgICAgICAgICAgcmFu
Z2VzVmVjdG9yID0gbmV3IFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID47CiAgICAg
ICAgICAgICBleHRyYWN0UmFuZ2VzKG5ld1N0eWxlU2hlZXQuZ2V0KCksIHJ1bGVSYW5nZU1hcCwg
cmFuZ2VzVmVjdG9yKTsKICAgICAgICAgICAgIG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5zZXQoc3R5
bGVTaGVldCwgcmFuZ2VzVmVjdG9yKTsKICAgICAgICAgfQpAQCAtMjExLDcgKzIxMyw3IEBAIGJv
b2wgSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0YShDU1NTdHlsZURlY2xhcmF0
aW9uKiBzdHlsZSwgUmVmUHRyPENTCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEluc3Bl
Y3RvckNTU1N0b3JlOjpleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNv
bnN0IFN0eWxlUnVsZVJhbmdlTWFwJiBydWxlUmFuZ2VNYXAsIFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTb3VyY2VEYXRhPiA+KiByYW5nZXNWZWN0b3IpCit2b2lkIEluc3BlY3RvckNTU1N0b3JlOjpl
eHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFN0eWxlUnVsZVJh
bmdlTWFwJiBydWxlUmFuZ2VNYXAsIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4q
IHJhbmdlc1ZlY3RvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBsZW5ndGggPSBzdHls
ZVNoZWV0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIENTU1N0eWxlUnVs
ZSogcnVsZSA9IGFzQ1NTU3R5bGVSdWxlKHN0eWxlU2hlZXQtPml0ZW0oaSkpOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNTU1N0b3JlLmgKaW5kZXggOWIzMjlkZi4uMjVhOWQxNSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCkBAIC01NSw3ICs1NSw3IEBAIHR5cGVkZWYgSGFz
aE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgbG9uZz4gU3R5bGVUb0lkTWFwOwogdHlwZWRlZiBI
YXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiA+IElkVG9TdHlsZU1hcDsK
IHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBsb25nPiBSdWxlVG9JZE1hcDsKIHR5cGVk
ZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IElkVG9SdWxlTWFwOwotdHlw
ZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU291cmNl
RGF0YT4gPiogPiBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0
eWxlU2hlZXQqLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+KiA+IFN0eWxlU2hl
ZXRUb09mZnNldHNNYXA7CiB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIGxvbmc+IFN0
eWxlU2hlZXRUb0lkTWFwOwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+IElkVG9TdHlsZVNoZWV0TWFwOwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFN0cmluZz4g
SWRUb1N0eWxlU2hlZXRUZXh0TWFwOwpAQCAtNzEsNyArNzEsNyBAQCBwdWJsaWM6CiAgICAgSW5z
cGVjdG9yQ1NTU3RvcmUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcik7
CiAgICAgfkluc3BlY3RvckNTU1N0b3JlKCk7CiAgICAgdm9pZCByZXNldCgpOwotICAgIGJvb2wg
Z2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qLCBSZWZQdHI8Q1NTU3R5bGVT
b3VyY2VEYXRhPiogcmVzdWx0KTsKKyAgICBib29sIGdldFJ1bGVTb3VyY2VEYXRhKENTU1N0eWxl
RGVjbGFyYXRpb24qLCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+KiByZXN1bHQpOwogICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQobG9uZyBzdHlsZUlkKTsKICAgICBDU1NTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0Rm9ySWQobG9uZyBzdHlsZVNoZWV0SWQpOwogICAgIENTU1N0eWxl
UnVsZSogcnVsZUZvcklkKGxvbmcgc3R5bGVSdWxlSWQpOwpAQCAtODgsNyArODgsNyBAQCBwcml2
YXRlOgogICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSop
OwogICAgIFN0cmluZyBpbmxpbmVTdHlsZVNoZWV0VGV4dChDU1NTdHlsZVNoZWV0Kik7CiAgICAg
Ym9vbCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hlZXQqLCBTdHJpbmcqIHJlc3Vs
dCk7Ci0gICAgdm9pZCBleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHlsZVJ1
bGVSYW5nZU1hcCYsIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+KiByYW5nZXNW
ZWN0b3IpOworICAgIHZvaWQgZXh0cmFjdFJhbmdlcyhDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3R5
bGVSdWxlUmFuZ2VNYXAmLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiA+KiByYW5n
ZXNWZWN0b3IpOwogICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoTm9kZSogcGFyZW50
Tm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3VsdCk7CiAKICAgICBTdHlsZVRv
SWRNYXAgbV9zdHlsZVRvSWQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIu
Y3BwCmluZGV4IGI1Y2ZmOGQuLjc5N2Y3ZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckNvbnRyb2xsZXIuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5jbHVkZSAiSW5qZWN0ZWRTY3Jp
cHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCkBAIC01MTUsNiArNTE2LDcgQEAg
dm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRlbmQoKQogICAgIHJlbGVhc2VG
cm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAgICAgbV9mcm9udGVuZCA9IG5ldyBJbnNwZWN0b3JG
cm9udGVuZChtX2NsaWVudCk7CiAgICAgbV9kb21BZ2VudCA9IEluc3BlY3RvckRPTUFnZW50Ojpj
cmVhdGUobV9jc3NTdG9yZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQoKSk7CisgICAgbV9jc3NBZ2Vu
dCA9IEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGUobV9mcm9udGVuZC5nZXQoKSwgbV9kb21BZ2Vu
dC5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgbV9zdG9yYWdlQWdlbnQgPSBJ
bnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5kLmdldCgpKTsKQEAgLTYyNyw2
ICs2MjksMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZWxlYXNlRnJvbnRlbmRMaWZl
dGltZUFnZW50cygpCiAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0KCk7CiAgICAgbV9kb21BZ2Vu
dC5jbGVhcigpOwogCisgICAgaWYgKG1fY3NzQWdlbnQpCisgICAgICAgIG1fY3NzQWdlbnQtPnJl
c2V0KCk7CisgICAgbV9jc3NBZ2VudC5jbGVhcigpOworCiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
ICAgIGlmIChtX3N0b3JhZ2VBZ2VudCkKICAgICAgICAgbV9zdG9yYWdlQWdlbnQtPmNsZWFyRnJv
bnRlbmQoKTsKQEAgLTc5Niw2ICs4MDIsNyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRp
ZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAgICAgICAgaWYgKG1fZnJvbnRl
bmQpIHsKICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc2V0KCk7CiAgICAgICAgICAgICBtX2Rv
bUFnZW50LT5yZXNldCgpOworICAgICAgICAgICAgbV9jc3NBZ2VudC0+cmVzZXQoKTsKICAgICAg
ICAgfQogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBtX3dvcmtlcnMuY2xlYXIoKTsKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRleCA1NjE2ZTAyLi4wNDY2Yzgy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCkBAIC01OSw2ICs1OSw3
IEBAIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVjdG9yQmFja2VuZDsKIGNsYXNz
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50OworY2xh
c3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZTsKIGNsYXNzIElu
c3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3RvcmFnZVJlc291cmNlOwpAQCAt
Mjk0LDYgKzI5NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNldE1vbml0b3JpbmdYSFJFbmFi
bGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwogICAgIHZvaWQgc3RvcmVMYXN0QWN0
aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOworICAgIEluc3BlY3RvckNTU0FnZW50
KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7IH0KICAgICBJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9p
ZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCkBAIC0zNDMsNiArMzQ1LDcgQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ+IG1faW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ7CiAgICAgYm9vbCBtX29wZW5pbmdGcm9udGVuZDsKICAgICBPd25QdHI8
SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CisgICAgUmVmUHRyPEluc3BlY3RvckNTU0Fn
ZW50PiBtX2Nzc0FnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2Vu
dDsKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBtX3N0b3JhZ2VBZ2VudDsKICAg
ICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1fY3NzU3RvcmU7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYzFjMjFiNi4uNzFlZGUyMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMjE5LDYgKzIxOSw3IEBAIEluc3BlY3Rv
ckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUs
IEluc3BlY3RvckZyb250CiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5kKQogICAgICwgbV9sYXN0
Tm9kZUlkKDEpCiAgICAgLCBtX21hdGNoSm9ic1RpbWVyKHRoaXMsICZJbnNwZWN0b3JET01BZ2Vu
dDo6b25NYXRjaEpvYnNUaW1lcikKKyAgICAsIG1fZG9tTGlzdGVuZXIoMCkKIHsKIH0KIApAQCAt
MjM5LDYgKzI0MCwxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpyZXNldCgpCiAgICAgQVNT
RVJUKCFtX2RvY3VtZW50cy5zaXplKCkpOwogfQogCit2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpz
ZXRET01MaXN0ZW5lcihET01MaXN0ZW5lciogbGlzdGVuZXIpCit7CisgICAgbV9kb21MaXN0ZW5l
ciA9IGxpc3RlbmVyOworfQorCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXREb2N1bWVudChE
b2N1bWVudCogZG9jKQogewogICAgIGlmIChkb2MgPT0gbWFpbkZyYW1lRG9jdW1lbnQoKSkKQEAg
LTMyOCw2ICszMzQsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9k
ZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVt
ZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVy
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAg
ICAgIHN0b3BMaXN0ZW5pbmcoZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAg
ICBpZiAobV9kb21MaXN0ZW5lcikKKyAgICAgICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92
ZURvY3VtZW50KGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgpKTsKICAgICAgICAgY3NzU3Rv
cmUoKS0+cmVtb3ZlRG9jdW1lbnQoZnJhbWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOwogICAg
IH0KIApAQCAtNDAwLDYgKzQwOCwxMSBAQCBOb2RlKiBJbnNwZWN0b3JET01BZ2VudDo6bm9kZUZv
cklkKGxvbmcgaWQpCiAgICAgcmV0dXJuIDA7CiB9CiAKK2xvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6
OmlkRm9yRG9jdW1lbnROb2RlKE5vZGUqIGRvY05vZGUpCit7CisgICAgcmV0dXJuIG1fZG9jdW1l
bnROb2RlVG9JZE1hcC5nZXQoZG9jTm9kZSk7Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldENoaWxkTm9kZXMobG9uZyBub2RlSWQpCiB7CiAgICAgcHVzaENoaWxkTm9kZXNUb0Zyb250
ZW5kKG5vZGVJZCk7CkBAIC0xMTA0LDYgKzExMTcsOSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYgKCFwYXJlbnRJZCkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKG1fZG9tTGlzdGVuZXIpCisgICAgICAgIG1fZG9tTGlzdGVu
ZXItPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisKICAgICBpZiAoIW1fY2hpbGRyZW5SZXF1ZXN0
ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5vIGNoaWxkcmVuIGFyZSBtYXBw
ZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFzQ2hpbGRyZW4uCiAgICAgICAg
IGlmIChpbm5lckNoaWxkTm9kZUNvdW50KHBhcmVudCkgPT0gMSkKQEAgLTEyMjMsMTggKzEyMzks
MjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVTb3VyY2VEYXRhKGxvbmcgc3R5
bGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4KICAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CiAgICAgaWYgKCFzdHlsZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURh
dGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAgIGJvb2wgc3VjY2VzcyA9IGNz
c1N0b3JlKCktPmdldFN0eWxlU291cmNlRGF0YShzdHlsZSwgJnNvdXJjZURhdGEpOworICAgIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENTU1J1bGVTb3VyY2VEYXRhOjpj
cmVhdGUoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBjc3NTdG9yZSgpLT5nZXRSdWxlU291cmNlRGF0
YShzdHlsZSwgJnNvdXJjZURhdGEpOwogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcmV0dXJu
OwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYm9keVJhbmdlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldE9iamVjdCgiYm9keVJhbmdlIiwg
Ym9keVJhbmdlKTsKLSAgICBib2R5UmFuZ2UtPnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgYm9keVJhbmdlLT5zZXROdW1iZXIoImVuZCIs
IHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAgYm9keVJhbmdlLT5zZXROdW1i
ZXIoInN0YXJ0Iiwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5z
dGFydCk7CisgICAgYm9keVJhbmdlLT5zZXROdW1iZXIoImVuZCIsIHNvdXJjZURhdGEtPnN0eWxl
U291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBzZWxlY3RvclJhbmdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICByZXN1
bHQtPnNldE9iamVjdCgic2VsZWN0b3JSYW5nZSIsIHNlbGVjdG9yUmFuZ2UpOworICAgIHNlbGVj
dG9yUmFuZ2UtPnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5n
ZS5zdGFydCk7CisgICAgc2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVyKCJlbmQiLCBzb3VyY2VEYXRh
LT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwogICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJv
cGVydHlSYW5nZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgcmVzdWx0LT5zZXRB
cnJheSgicHJvcGVydHlEYXRhIiwgcHJvcGVydHlSYW5nZXMpOwotICAgIFZlY3RvcjxDU1NQcm9w
ZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VEYXRhLT5wcm9wZXJ0eURhdGE7
CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHByb3BlcnR5RGF0YSA9IHNvdXJj
ZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwogICAgIGZvciAoVmVjdG9yPENT
U1Byb3BlcnR5U291cmNlRGF0YT46Oml0ZXJhdG9yIGl0ID0gcHJvcGVydHlEYXRhLmJlZ2luKCk7
IGl0ICE9IHByb3BlcnR5RGF0YS5lbmQoKTsgKytpdCkgewogICAgICAgICBSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBwcm9wZXJ0eVJhbmdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAg
ICAgICAgcHJvcGVydHlSYW5nZS0+c2V0U3RyaW5nKCJuYW1lIiwgaXQtPm5hbWUpOwpAQCAtMTQ5
MCwxNCArMTUxMCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUoY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVmCiAgICAgKnJ1bGVPYmplY3Qg
PSBidWlsZE9iamVjdEZvclJ1bGUobm9kZS0+b3duZXJEb2N1bWVudCgpLCBuZXdSdWxlKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQ
dHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKQotewotICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKLSAgICBmb3Ig
KGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKLSAgICAgICAgcHJvcGVydGll
cy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWVTdHJpbmdzW2ldKTsKLSAgICAqY3NzUHJvcGVydGll
cyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOwotfQotCiBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIGJvb2wgYmluZCkKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBy
ZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmgKaW5kZXggODljNmZkMC4uOGMwYjE1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JET01BZ2VudC5oCkBAIC04MCw2ICs4MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICAgICBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBFdmVudExpc3RlbmVyIHsKICAg
ICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBET01MaXN0ZW5lciB7CisgICAgICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKSA9IDA7CisgICAgICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlKikgPSAwOworICAgICAgICB9OworCiAg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBjcmVhdGUoSW5zcGVj
dG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVuZCogZnJvbnRlbmQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5zcGVjdG9yRE9NQWdlbnQo
Y3NzU3RvcmUsIGZyb250ZW5kKSk7CkBAIC0xMzEsNyArMTM2LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChsb25nIHN0eWxlSWQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkLCBSZWZQdHI8SW5zcGVjdG9yVmFs
dWU+KiBzdHlsZU9iamVjdCk7CiAgICAgICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yKGxvbmcgcnVs
ZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVjdGVkTm9kZUlkLCBSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxlY3RvckFmZmVjdHNOb2RlKTsK
ICAgICAgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0
ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVPYmplY3QsIGJvb2wqIHNlbGVj
dG9yQWZmZWN0c05vZGUpOwotICAgICAgICB2b2lkIGdldFN1cHBvcnRlZENTU1Byb3BlcnRpZXMo
UmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcyk7CiAKICAgICAgICAgLy8gTWV0
aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9yQ29udHJvbGxlci4KICAgICAgICAgdm9pZCBz
ZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTQzLDExICsxNDcsMTYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNoYXJhY3RlckRhdGFNb2RpZmllZChDaGFy
YWN0ZXJEYXRhKik7CiAKICAgICAgICAgTm9kZSogbm9kZUZvcklkKGxvbmcgbm9kZUlkKTsKKyAg
ICAgICAgbG9uZyBpZEZvckRvY3VtZW50Tm9kZShOb2RlKik7CiAgICAgICAgIGxvbmcgcHVzaE5v
ZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlKTsKICAgICAgICAgdm9pZCBwdXNoQ2hpbGROb2Rl
c1RvRnJvbnRlbmQobG9uZyBub2RlSWQpOwogICAgICAgICB2b2lkIHB1c2hOb2RlQnlQYXRoVG9G
cm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcqIG5vZGVJZCk7CiAgICAgICAgIGxvbmcg
aW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAgICAgICAgIHZvaWQgY29weU5vZGUo
bG9uZyBub2RlSWQpOworICAgICAgICBjb25zdCBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+
ID4mIGRvY3VtZW50cygpIHsgcmV0dXJuIG1fZG9jdW1lbnRzOyB9CisgICAgICAgIHZvaWQgc2V0
RE9NTGlzdGVuZXIoRE9NTGlzdGVuZXIqKTsKKworICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxT
dHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgc3RhcnRMaXN0ZW5pbmcoRG9jdW1lbnQqIGRvY3VtZW50KTsKQEAgLTE4NSw3ICsxOTQs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgaXNXaGl0ZXNwYWNlKE5vZGUq
IG5vZGUpOwogCiAgICAgICAgIERvY3VtZW50KiBtYWluRnJhbWVEb2N1bWVudCgpIGNvbnN0Owot
ICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25z
dDsKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlKCkgeyByZXR1cm4gbV9jc3NT
dG9yZTsgfQogCiAgICAgICAgIHZvaWQgb25NYXRjaEpvYnNUaW1lcihUaW1lcjxJbnNwZWN0b3JE
T01BZ2VudD4qKTsKQEAgLTIwNCw2ICsyMTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHRvQXJyYXkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGRhdGEpOwogCiAgICAgICAgIHZvaWQgZGlzY2FyZEJpbmRpbmdzKCk7CisgICAgICAgIERP
TUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogCiAgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBt
X2Nzc1N0b3JlOwogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2M2NTIyOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0wLDAgKzEsNDg5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50Lmgi
CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5j
bHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVkZSAiQ1NTUnVsZS5oIgorI2lu
Y2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVk
ZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNs
dWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JVdGlsaXRpZXMuaCIK
KyNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVk
ZSAiU3R5bGVTaGVldExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1BhcnNlZFN0eWxlU2hlZXQ6OlBhcnNlZFN0eWxlU2hlZXQoKQorICAg
IDogbV9wYXJzZXJPdXRwdXQoMCkKKyAgICAsIG1faGFzVGV4dChmYWxzZSkKK3sKK30KKwordm9p
ZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBt
X2hhc1RleHQgPSB0cnVlOworICAgIG1fdGV4dCA9IHRleHQ7CisgICAgc2V0U291cmNlRGF0YSgw
KTsKK30KKwordm9pZCBQYXJzZWRTdHlsZVNoZWV0OjpzZXRTb3VyY2VEYXRhKFBhc3NPd25QdHI8
U291cmNlRGF0YT4gc291cmNlRGF0YSkKK3sKKyAgICBtX3NvdXJjZURhdGEgPSBzb3VyY2VEYXRh
OworfQorCitSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IFBhcnNlZFN0eWxlU2hlZXQ6OnJ1bGVT
b3VyY2VEYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNTb3VyY2VE
YXRhKCkgfHwgaW5kZXggPj0gbV9zb3VyY2VEYXRhLT5zaXplKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIG1fc291cmNlRGF0YS0+YXQoaW5kZXgpOworfQorCisKK0luc3BlY3Rv
clN0eWxlU2hlZXQ6Okluc3BlY3RvclN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5
bGVTaGVldCogcGFnZVN0eWxlU2hlZXQpCisgICAgOiBtX2lkKGlkKQorICAgICwgbV9wYWdlU3R5
bGVTaGVldChwYWdlU3R5bGVTaGVldCkKKyAgICAsIG1faXNSZXZhbGlkYXRpbmcoZmFsc2UpCit7
Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6dGV4dChTdHJpbmcqIHJlc3VsdCkgY29u
c3QKK3sKKyAgICBpZiAoIWVuc3VyZVRleHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICpyZXN1bHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpOworICAgIHJldHVybiB0cnVlOwor
fQorCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSW5kZXhCeVN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxl
bmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGkp
KTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChydWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KworICAgICAgICArK2luZGV4OworICAgIH0KKyAgICByZXR1cm4gVUlOVF9NQVg7Cit9CisKK0NT
U1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmluZFBhZ2VSdWxlV2l0aFN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNp
emUgPSBtX3BhZ2VTdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAg
ICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUo
bV9wYWdlU3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlmICghcnVsZSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBpZiAocnVsZS0+c3R5bGUoKSA9PSBzdHlsZSkKKyAgICAg
ICAgICAgIHJldHVybiBydWxlOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBJbnNw
ZWN0b3JTdHlsZVNoZWV0OjpyZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcGFn
ZVN0eWxlKQoreworICAgIGlmIChtX2lzUmV2YWxpZGF0aW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICBtX2lzUmV2YWxpZGF0aW5nID0gdHJ1ZTsKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJzZWRT
aGVldCA9IG1fcGFyc2VkU3R5bGVTaGVldC5jc3NTdHlsZVNoZWV0KCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgc2l6ZSA9IHBhcnNlZFNoZWV0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBTdHlsZUJhc2UqIHN0eWxlQmFzZSA9IHBhcnNlZFNoZWV0LT5pdGVtKGkpOwor
ICAgICAgICBDU1NTdHlsZVJ1bGUqIHBhcnNlZFJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXND
U1NTdHlsZVJ1bGUoc3R5bGVCYXNlKTsKKyAgICAgICAgaWYgKCFwYXJzZWRSdWxlKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChwYXJzZWRSdWxlLT5zdHlsZSgpID09IHBhZ2VT
dHlsZSkgeworICAgICAgICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCktPmNzc1RleHQoKSAh
PSBwYWdlU3R5bGUtPmNzc1RleHQoKSkKKyAgICAgICAgICAgICAgICBpbm5lclNldFN0eWxlVGV4
dChwYWdlU3R5bGUsIHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgfQorICAgIG1faXNSZXZhbGlkYXRpbmcgPSBmYWxzZTsKK30KKworYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkK
K3sKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Lmhhc1NvdXJjZURhdGEoKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldC5oYXNUZXh0KCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBuZXdTdHls
ZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKG93bmVyTm9kZSk7CisgICAgQ1NTUGFyc2Vy
IHA7CisgICAgU3R5bGVSdWxlUmFuZ2VNYXAgcnVsZVJhbmdlTWFwOworICAgIHAucGFyc2VTaGVl
dChuZXdTdHlsZVNoZWV0LmdldCgpLCBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgpLCAwLCAmcnVs
ZVJhbmdlTWFwKTsKKyAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFu
Z2VzVmVjdG9yKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKCkpOworICAgIGV4dHJh
Y3RSYW5nZXMobmV3U3R5bGVTaGVldC5nZXQoKSwgcnVsZVJhbmdlTWFwLCByYW5nZXNWZWN0b3Iu
Z2V0KCkpOworICAgIG1fcGFyc2VkU3R5bGVTaGVldC5zZXRTb3VyY2VEYXRhKHJhbmdlc1ZlY3Rv
ci5yZWxlYXNlKCkpOworICAgIHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXQuaGFzU291cmNlRGF0
YSgpOworfQorCit2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmV4dHJhY3RSYW5nZXMoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCwgY29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAmIHJ1bGVSYW5nZU1h
cCwgUGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YSogcmFuZ2VzVmVjdG9yKQoreworICAgIGZv
ciAodW5zaWduZWQgaSA9IDAsIGxlbmd0aCA9IHN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgbGVu
Z3RoOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmFzQ1NTU3R5bGVSdWxlKHN0eWxlU2hlZXQtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1
bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU3R5bGVSdWxlUmFuZ2VNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcnVsZVJhbmdlTWFwLmZpbmQocnVsZSk7CisgICAgICAgIGlmIChp
dCAhPSBydWxlUmFuZ2VNYXAuZW5kKCkpCisgICAgICAgICAgICByYW5nZXNWZWN0b3ItPmFwcGVu
ZChpdC0+c2Vjb25kKTsKKyAgICB9Cit9CisKKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpz
ZXRUZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXQuc2V0
VGV4dCh0ZXh0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbV9wYWdlU3R5bGVT
aGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fcGFnZVN0eWxlU2hlZXQt
PnJlbW92ZShpKTsKKworICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsIG1f
cGFnZVN0eWxlU2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgpIGNvbnN0Cit7CisgICAg
aWYgKG1fcGFyc2VkU3R5bGVTaGVldC5oYXNUZXh0KCkpCisgICAgICAgIHJldHVybiB0cnVlOwor
CisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHQoJnRl
eHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXQuc2V0VGV4
dCh0ZXh0KTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIEluc3BlY3RvclN0eWxl
U2hlZXQ6OnN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAoreworICAgIFN0cmlu
ZyB0ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IGlubGluZVN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsK
KyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJjZVN0eWxlU2hlZXRU
ZXh0KCZ0ZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgKnJlc3VsdCA9IHRleHQ7Cisg
ICAgcmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3Vy
Y2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW5z
cGVjdG9yVXRpbGl0aWVzOjpyZXNvdXJjZUNvbnRlbnRGb3JVUkwobV9wYWdlU3R5bGVTaGVldC0+
ZmluYWxVUkwoKSwgb3duZXJEb2N1bWVudCgpLCByZXN1bHQpOworfQorCitib29sIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmlubGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAor
eworICAgIE5vZGUqIG93bmVyTm9kZSA9IG1fcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpOwor
ICAgIGlmICghb3duZXJOb2RlIHx8IG93bmVyTm9kZS0+bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVN
RU5UX05PREUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFbGVtZW50KiBvd25lckVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAob3duZXJFbGVt
ZW50LT50YWdOYW1lKCkubG93ZXIoKSAhPSAic3R5bGUiKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgKnJlc3VsdCA9IG93bmVyRWxlbWVudC0+aW5uZXJUZXh0KCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5
KCkKK3sKKyAgICByZXR1cm4gZW5zdXJlVGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEocGFnZVN0
eWxlU2hlZXQoKS0+b3duZXJOb2RlKCkpOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvcikKK3sKKyAgICBTdHJpbmcg
dGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYg
KCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IsICIiLCBlYyk7CisgICAg
aWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVz
ID0gbV9wYWdlU3R5bGVTaGVldC0+Y3NzUnVsZXMoKTsKKyAgICBBU1NFUlQocnVsZXMtPmxlbmd0
aCgpKTsKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NT
dHlsZVJ1bGUocnVsZXMtPml0ZW0ocnVsZXMtPmxlbmd0aCgpIC0gMSkpOworICAgIEFTU0VSVChy
dWxlKTsKKworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQorICAgICAgICB0ZXh0ICs9ICJcbiI7CisK
KyAgICB0ZXh0ICs9IHNlbGVjdG9yOworICAgIHRleHQgKz0gIiB7fSI7CisgICAgbV9wYXJzZWRT
dHlsZVNoZWV0LnNldFRleHQodGV4dCk7CisKKyAgICByZXR1cm4gcnVsZTsKK30KKworYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpzZXRSdWxlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBydWxlSWQs
IGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpCit7CisgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVs
ZUZvcklkKHJ1bGVJZCk7CisgICAgaWYgKCFydWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRT
dHlsZVNoZWV0KHJ1bGUpOworICAgIGlmICghc3R5bGVTaGVldCB8fCAhZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJ1bGUtPnNldFNlbGVjdG9y
VGV4dChzZWxlY3Rvcik7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRh
ID0gcnVsZVNvdXJjZURhdGFGb3IocnVsZS0+c3R5bGUoKSk7CisgICAgaWYgKCFzb3VyY2VEYXRh
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBTdHJpbmcmIHNoZWV0VGV4dCA9
IG1fcGFyc2VkU3R5bGVTaGVldC50ZXh0KCk7CisgICAgU3RyaW5nIG5ld1N0eWxlU2hlZXRUZXh0
ID0gc2hlZXRUZXh0LnN1YnN0cmluZygwLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5z
dGFydCk7CisgICAgbmV3U3R5bGVTaGVldFRleHQgKz0gc2VsZWN0b3I7CisgICAgbmV3U3R5bGVT
aGVldFRleHQgKz0gc2hlZXRUZXh0LnJpZ2h0KHNoZWV0VGV4dC5sZW5ndGgoKSAtIHNvdXJjZURh
dGEtPnNlbGVjdG9yTGlzdFJhbmdlLmVuZCk7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LnNldFRl
eHQobmV3U3R5bGVTaGVldFRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEluc3Bl
Y3RvclN0eWxlU2hlZXQ6OnNldFN0eWxlVGV4dChjb25zdCBTdHJpbmcmIHN0eWxlSWQsIGNvbnN0
IFN0cmluZyYgbmV3VGV4dCkKK3sKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IHN0
eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIGlubmVyU2V0U3R5bGVUZXh0KHN0eWxlLCBuZXdUZXh0KTsKK30KKwor
Ym9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Ojppbm5lclNldFN0eWxlVGV4dChDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGlmICghcGFnZVN0eWxl
U2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0cmluZyBwYXRjaGVkU3R5
bGVTaGVldFRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdl
ZFN0eWxlKHBhZ2VTdHlsZVNoZWV0KCksIHN0eWxlLCB0ZXh0LCAmcGF0Y2hlZFN0eWxlU2hlZXRU
ZXh0KTsKKyAgICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFN0
cmluZyBpZCA9IHJ1bGVPclN0eWxlSWQoc3R5bGUpOworICAgIGlmICghaWQpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHN0eWxlLT5zZXRD
c3NUZXh0KHRleHQsIGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICBpbm5lclNldFN0eWxlU2hl
ZXRUZXh0KHBhdGNoZWRTdHlsZVNoZWV0VGV4dCk7CisKKyAgICByZXR1cm4gIWVjOworfQorCit2
b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmlubmVyU2V0U3R5bGVTaGVldFRleHQoY29uc3QgU3Ry
aW5nJiBuZXdUZXh0KQoreworICAgIG1fcGFyc2VkU3R5bGVTaGVldC5zZXRUZXh0KG5ld1RleHQp
OworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlU2hlZXRUZXh0V2l0aENoYW5n
ZWRTdHlsZShDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgY29uc3QgU3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0cmluZyogcmVzdWx0KQoreworICAg
IGlmICghc3R5bGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghZW5zdXJlUGFy
c2VkRGF0YVJlYWR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKKyAg
ICB1bnNpZ25lZCBib2R5U3RhcnQgPSBzb3VyY2VEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxl
Qm9keVJhbmdlLnN0YXJ0OworICAgIHVuc2lnbmVkIGJvZHlFbmQgPSBzb3VyY2VEYXRhLT5zdHls
ZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZDsKKyAgICBBU1NFUlQoYm9keVN0YXJ0IDw9
IGJvZHlFbmQpOworCisgICAgU3RyaW5nIHRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQudGV4dCgp
OworICAgIEFTU0VSVChib2R5RW5kIDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4
Y2x1c2l2ZQorCisgICAgU3RyaW5nIHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9k
eVN0YXJ0KTsKKyAgICBwYXRjaGVkVGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRl
eHQgKz0gdGV4dC5zdWJzdHJpbmcoYm9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3Vs
dCA9IHBhdGNoZWRUZXh0OworICAgIHJldHVybiB0cnVlOworfQorCitDU1NTdHlsZVJ1bGUqIElu
c3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdAorewor
ICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQgaW5kZXggPSBpZC50b1VJbnQoJm9rKTsKKyAgICBp
ZiAoIW9rKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxl
bmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGkp
KTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChpbmRleCA9PSBjdXJyZW50SW5kZXgpCisgICAgICAgICAgICByZXR1cm4gcnVsZTsKKworICAg
ICAgICArK2N1cnJlbnRJbmRleDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0NTU1N0eWxl
RGVjbGFyYXRpb24qIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxlRm9ySWQoY29uc3QgU3RyaW5n
JiBpZCkgY29uc3QKK3sKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRm9ySWQoaWQpOwor
ICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcnVsZS0+c3R5
bGUoKTsKK30KKworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChsb25nIG93bmVyRG9jdW1lbnROb2RlSWQsIGNv
bnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXRG
b3JEb2N1bWVudCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNw
ZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIsIGlkKCkp
OworICAgIHJlc3VsdC0+c2V0TnVtYmVyKCJkb2N1bWVudEVsZW1lbnRJZCIsIG93bmVyRG9jdW1l
bnROb2RlSWQpOworCisgICAgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNo
ZWV0KCk7CisgICAgaWYgKHN0eWxlU2hlZXQpIHsKKyAgICAgICAgcmVzdWx0LT5zZXRCb29sZWFu
KCJkaXNhYmxlZCIsIHN0eWxlU2hlZXQtPmRpc2FibGVkKCkpOworICAgICAgICByZXN1bHQtPnNl
dFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJ0aXRsZSIsIHN0eWxlU2hlZXQtPnRpdGxlKCkpOworICAgICAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IGNzc1J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZShzdHlsZVNoZWV0LCB0
cnVlKTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NSdWxlcyA9IGludGVybmFs
QnVpbGRBcnJheUZvclJ1bGVMaXN0KGNzc1J1bGVMaXN0LmdldCgpLCBkb2N1bWVudFVSTCwgc3R5
bGVTaGVldEZvckRvY3VtZW50KTsKKyAgICAgICAgcmVzdWx0LT5zZXRBcnJheSgiY3NzUnVsZXMi
LCBjc3NSdWxlcy5yZWxlYXNlKCkpOworICAgIH0KKworICAgIFN0cmluZyBzdHlsZVNoZWV0VGV4
dDsKKyAgICBib29sIHN1Y2Nlc3MgPSB0ZXh0KCZzdHlsZVNoZWV0VGV4dCk7CisgICAgaWYgKHN1
Y2Nlc3MpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJ0ZXh0Iiwgc3R5bGVTaGVldFRleHQp
OworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmludGVybmFsQnVpbGRBcnJheUZvclJ1bGVM
aXN0KENTU1J1bGVMaXN0KiBydWxlTGlzdCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgSW5z
cGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldEZvckRvY3VtZW50KQoreworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlm
ICghcnVsZUxpc3QpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsr
aSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXND
U1NTdHlsZVJ1bGUocnVsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1bGUpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QoYnVpbGRPYmpl
Y3RGb3JSdWxlKHJ1bGUsIGRvY3VtZW50VVJMLCBzdHlsZVNoZWV0Rm9yRG9jdW1lbnQpKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKKworUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRh
PiBzb3VyY2VEYXRhOworICAgIGlmIChlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAg
c291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHN0eWxlKTsKKworICAgIFJlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3BlY3RvckNTU0FnZW50OjpidWlsZE9iamVjdEZvclN0
eWxlKHN0eWxlLCBmdWxsU3R5bGVJZChzdHlsZSksIHNvdXJjZURhdGEgPyBzb3VyY2VEYXRhLT5z
dHlsZVNvdXJjZURhdGEuZ2V0KCkgOiAwKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygicGFyZW50
U3R5bGVTaGVldElkIiwgaWQoKSk7CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisK
KworSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
Rm9ySW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCkKKyAgICA6
IEluc3BlY3RvclN0eWxlU2hlZXQoaWQsIDApCisgICAgLCBtX2VsZW1lbnQoZWxlbWVudCkKKyAg
ICAsIG1fcnVsZVNvdXJjZURhdGEoMCkKK3sKKyAgICBBU1NFUlQoZWxlbWVudCk7Cit9CisKK2Jv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpzZXRTdHlsZVRleHQoY29uc3Qg
U3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgQVNTRVJUKHN0eWxl
SWQgPT0gIjAiKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBtX2VsZW1lbnQtPnNl
dEF0dHJpYnV0ZSgic3R5bGUiLCB0ZXh0LCBlYyk7CisgICAgbV9ydWxlU291cmNlRGF0YS5jbGVh
cigpOworICAgIHJldHVybiAhZWM7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklu
bGluZVN0eWxlOjplbnN1cmVQYXJzZWREYXRhUmVhZHkoKQoreworICAgIGlmIChtX3J1bGVTb3Vy
Y2VEYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fcnVsZVNvdXJjZURhdGEgPSBD
U1NSdWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0
YT4gc291cmNlRGF0YSA9IENTU1N0eWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CisgICAgYm9vbCBz
dWNjZXNzID0gZ2V0U3R5bGVBdHRyaWJ1dGVSYW5nZXMoc291cmNlRGF0YS5nZXQoKSk7CisgICAg
aWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3J1bGVTb3VyY2VE
YXRhLT5zdHlsZVNvdXJjZURhdGEgPSBzb3VyY2VEYXRhLnJlbGVhc2UoKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmdldFN0
eWxlQXR0cmlidXRlUmFuZ2VzKENTU1N0eWxlU291cmNlRGF0YSogcmVzdWx0KQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzdHlsZUF0dHJpYnV0ZU5hbWUsICgic3R5bGUiKSk7
CisKKyAgICBpZiAoIW1fZWxlbWVudC0+aXNTdHlsZWRFbGVtZW50KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFN0cmluZyBzdHlsZVRleHQgPSBzdGF0aWNfY2FzdDxTdHlsZWRFbGVt
ZW50Kj4obV9lbGVtZW50KS0+Z2V0QXR0cmlidXRlKHN0eWxlQXR0cmlidXRlTmFtZSk7CisgICAg
aWYgKHN0eWxlVGV4dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0LT5zdHlsZUJvZHlSYW5n
ZS5zdGFydCA9IDA7CisgICAgICAgIHJlc3VsdC0+c3R5bGVCb2R5UmFuZ2UuZW5kID0gMDsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uPiB0ZW1wRGVjbGFyYXRpb24gPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Y3JlYXRlKCk7CisgICAgQ1NTUGFyc2VyIHA7CisgICAgcC5wYXJzZURlY2xhcmF0aW9uKHRlbXBE
ZWNsYXJhdGlvbi5nZXQoKSwgc3R5bGVUZXh0LCByZXN1bHQpOworICAgIHJldHVybiB0cnVlOwor
fQorCitJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50
Ojphc0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBOb2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5maW5kKGVsZW1lbnQpOworICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0
eWxlU2hlZXQuZW5kKCkpIHsKKyAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hlZXRJZCA9IFN0cmlu
Zzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUgPSBlbGVtZW50LT5pc1N0eWxlZEVsZW1lbnQoKSA/IGVsZW1lbnQtPnN0eWxl
KCkgOiAwOworICAgICAgICBpZiAoIXN0eWxlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGluc3BlY3RvclN0
eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShuZXdT
dHlsZVNoZWV0SWQsIGVsZW1lbnQpOworICAgICAgICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hl
ZXQuc2V0KGVsZW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICBtX2lkVG9JbnNw
ZWN0b3JTdHlsZVNoZWV0LnNldChuZXdTdHlsZVNoZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQp
OworICAgICAgICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gaXQtPnNlY29uZC5nZXQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0
eWxlU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDkyZjExCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5o
CkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JTdHls
ZVNoZWV0X2gKKyNkZWZpbmUgSW5zcGVjdG9yU3R5bGVTaGVldF9oCisKKyNpbmNsdWRlICJDU1NQ
cm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9y
VmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUnVsZTsKK2NsYXNzIENTU1J1bGVM
aXN0OworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxlUnVsZTsKK2Ns
YXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBFbGVtZW50OworY2xhc3MgTm9kZTsKK2NsYXNzIFBh
Z2U7CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCitjbGFzcyBQYXJzZWRTdHlsZVNoZWV0IHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+ID4g
U291cmNlRGF0YTsKKyAgICBQYXJzZWRTdHlsZVNoZWV0KCk7CisKKyAgICBDU1NTdHlsZVNoZWV0
KiBjc3NTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJPdXRwdXQ7IH0KKyAgICBj
b25zdCBTdHJpbmcmIHRleHQoKSBjb25zdCB7IHJldHVybiBtX3RleHQ7IH0KKyAgICB2b2lkIHNl
dFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc1RleHQ7IH0KKyAgICBTb3VyY2VEYXRhKiBzb3VyY2VEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9zb3VyY2VEYXRhLmdldCgpOyB9CisgICAgdm9pZCBzZXRTb3VyY2VEYXRhKFBhc3NP
d25QdHI8U291cmNlRGF0YT4gc291cmNlRGF0YSk7CisgICAgYm9vbCBoYXNTb3VyY2VEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2VEYXRhOyB9CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBydWxlU291cmNlRGF0YUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworcHJpdmF0ZToK
KworICAgIC8vIFN0eWxlU2hlZXQgY29uc3RydWN0ZWQgd2hpbGUgcGFyc2luZyBtX3RleHQuCisg
ICAgQ1NTU3R5bGVTaGVldCogbV9wYXJzZXJPdXRwdXQ7CisgICAgU3RyaW5nIG1fdGV4dDsKKyAg
ICBib29sIG1faGFzVGV4dDsKKyAgICBPd25QdHI8U291cmNlRGF0YT4gbV9zb3VyY2VEYXRhOwor
fTsKKworY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldCA6IHB1YmxpYyBSZWZDb3VudGVkPEluc3Bl
Y3RvclN0eWxlU2hlZXQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBpZCwgQ1NTU3R5bGVTaGVldCogcGFn
ZVN0eWxlU2hlZXQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3Rv
clN0eWxlU2hlZXQoaWQsIHBhZ2VTdHlsZVNoZWV0KSk7CisgICAgfQorCisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVl
dCk7CisKKyAgICBjb25zdCBTdHJpbmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAg
IENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3R5
bGVTaGVldDsgfQorICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7
IHJldHVybiBtX3BhZ2VTdHlsZVNoZWV0LT5kb2N1bWVudCgpOyB9CisgICAgdmlydHVhbCBib29s
IHRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBzZXRUZXh0KGNv
bnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5n
JiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZpcnR1YWwgQ1NTU3R5bGVSdWxl
KiBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIHZpcnR1YWwgYm9vbCBzZXRS
dWxlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBydWxlSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3Ip
OworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGNvbnN0IFN0
cmluZyYpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHkoKTsK
KyAgICB2aXJ0dWFsIFN0cmluZyBmdWxsUnVsZUlkKENTU1N0eWxlUnVsZSogcnVsZSkgY29uc3Qg
eyByZXR1cm4gZnVsbFJ1bGVPclN0eWxlSWQocnVsZS0+c3R5bGUoKSk7IH0KKyAgICB2aXJ0dWFs
IFN0cmluZyBmdWxsU3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyBy
ZXR1cm4gZnVsbFJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KGxvbmcgb3duZXJEb2N1
bWVudE5vZGVJZCwgY29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCwgSW5zcGVjdG9yU3R5bGVTaGVl
dCogc3R5bGVTaGVldEZvckRvY3VtZW50KTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SW5zcGVj
dG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiwgY29uc3QgU3RyaW5n
JiBkb2N1bWVudFVSTCwgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldEZvckRvYyk7Cisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHls
ZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisKK3Byb3RlY3RlZDoKKyAgICBTdHJpbmcgZnVsbFJ1
bGVPclN0eWxlSWQoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIGlk
KCkgKyAiOiIgKyBydWxlT3JTdHlsZUlkKHN0eWxlKTsgfQorICAgIFN0cmluZyBydWxlT3JTdHls
ZUlkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHVuc2lnbmVkIGluZGV4ID0g
cnVsZUluZGV4QnlTdHlsZShzdHlsZSk7IHJldHVybiBpbmRleCA9PSBVSU5UX01BWCA/ICIiIDog
U3RyaW5nOjpudW1iZXIoaW5kZXgpOyB9CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+IHJ1bGVTb3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25z
dCB7IHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXQucnVsZVNvdXJjZURhdGFBdChydWxlSW5kZXhC
eVN0eWxlKHN0eWxlKSk7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiopIGNvbnN0OworCitwcml2YXRlOgorICAgIGJvb2wgZW5zdXJl
VGV4dCgpIGNvbnN0OworICAgIGJvb2wgZW5zdXJlU291cmNlRGF0YShOb2RlKiBvd25lck5vZGUp
OworICAgIHZvaWQgZXh0cmFjdFJhbmdlcyhDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3R5bGVSdWxl
UmFuZ2VNYXAmLCBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKiByZXN1bHQpOworICAgIGJv
b2wgaW5uZXJTZXRTdHlsZVRleHQoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYp
OworICAgIHZvaWQgaW5uZXJTZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQp
OworICAgIGJvb2wgc3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlU2hlZXQq
LCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0cmlu
ZyogcmVzdWx0KTsKKyAgICBDU1NTdHlsZVJ1bGUqIGZpbmRQYWdlUnVsZVdpdGhTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKik7CisgICAgdm9pZCByZWJ1aWxkUGFyc2VkU3R5bGVTaGVldChjb25z
dCBTdHJpbmcmIHN0eWxlU2hlZXRUZXh0KTsKKyAgICB2b2lkIHJldmFsaWRhdGVTdHlsZShDU1NT
dHlsZURlY2xhcmF0aW9uKik7CisgICAgYm9vbCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmlu
ZyogcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGlubGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyog
cmVzdWx0KSBjb25zdDsKKyAgICBib29sIHN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBj
b25zdDsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbnRlcm5hbEJ1aWxkQXJyYXlG
b3JSdWxlTGlzdChDU1NSdWxlTGlzdCosIGNvbnN0IFN0cmluZyYgZG9jdW1lbnRVUkwsIEluc3Bl
Y3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXRGb3JEb2N1bWVudCk7CisKKyAgICBTdHJpbmcgbV9p
ZDsKKyAgICBDU1NTdHlsZVNoZWV0KiBtX3BhZ2VTdHlsZVNoZWV0OworICAgIGJvb2wgbV9pc1Jl
dmFsaWRhdGluZzsKKyAgICBtdXRhYmxlIFBhcnNlZFN0eWxlU2hlZXQgbV9wYXJzZWRTdHlsZVNo
ZWV0OworfTsKKworCitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBw
dWJsaWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoY29uc3QgU3RyaW5n
JiBpZCwgRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKGlkLCBlbGVtZW50KSk7CisgICAg
fQorCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKGNvbnN0IFN0cmluZyYg
aWQsIEVsZW1lbnQqIGVsZW1lbnQpOworICAgIHZpcnR1YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQtPmRvY3VtZW50KCk7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgc2V0VGV4dChjb25zdCBTdHJpbmcmKSB7IEFTU0VSVChmYWxzZSk7IHJldHVybiBmYWxz
ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBzZXRTdHlsZVRleHQoY29uc3QgU3RyaW5nJiBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGVGb3JJZChjb25zdCBTdHJpbmcmIGlkKSBjb25zdCB7IEFTU0VSVChpZCA9PSAiMCIpOyBy
ZXR1cm4gaW5saW5lU3R5bGUoKTsgfQorICAgIHZpcnR1YWwgQ1NTU3R5bGVSdWxlKiBydWxlRm9y
SWQoY29uc3QgU3RyaW5nJikgY29uc3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgQ1NTU3R5
bGVSdWxlKiBhZGRSdWxlKGNvbnN0IFN0cmluZyYpIHsgQVNTRVJUKGZhbHNlKTsgcmV0dXJuIDA7
IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2V0UnVsZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpIHsgQVNTRVJUKGZhbHNlKTsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBi
b29sIGVuc3VyZVBhcnNlZERhdGFSZWFkeSgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNw
ZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChsb25nLCBjb25zdCBTdHJpbmcm
LCBJbnNwZWN0b3JTdHlsZVNoZWV0KikgeyBBU1NFUlQoZmFsc2UpOyAvKiBzaG91bGQgbm90IGJl
IGNhbGxlZCAqLyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJbnNwZWN0b3JB
cnJheT4gaW50ZXJuYWxCdWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKSB7IEFTU0VS
VChmYWxzZSk7IC8qIHNob3VsZCBub3QgYmUgY2FsbGVkICovIHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSosIGNvbnN0IFN0cmluZyYsIEluc3BlY3RvclN0eWxlU2hlZXQqKSB7IEFTU0VSVChm
YWxzZSk7IC8qIHNob3VsZCBub3QgYmUgY2FsbGVkICovIHJldHVybiAwOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC0+c3R5bGUoKTsgfQorICAgIHZpcnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Qg
eyBBU1NFUlQoc3R5bGUgPT0gaW5saW5lU3R5bGUoKSk7IHJldHVybiBtX3J1bGVTb3VyY2VEYXRh
OyB9CisgICAgdmlydHVhbCB2b2lkIGlubmVyU2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgaWQs
IGNvbnN0IFN0cmluZyYgbmV3VGV4dCkgeyB9CisgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdCB7IHJldHVybiAwOyB9CisKK3By
aXZhdGU6CisgICAgYm9vbCBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NTdHlsZVNvdXJjZURh
dGEqIHJlc3VsdCk7CisKKyAgICBFbGVtZW50KiBtX2VsZW1lbnQ7CisgICAgUmVmUHRyPENTU1J1
bGVTb3VyY2VEYXRhPiBtX3J1bGVTb3VyY2VEYXRhOworfTsKKworI2VuZGlmCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclN0eWxlU2hlZXRf
aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNTJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvclV0aWxpdGllcy5oIgorCisjaW5jbHVk
ZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAi
Q2FjaGUuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dExvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAi
U3R5bGVCYXNlLmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIlRleHRFbmNv
ZGluZy5oIgorCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKElOU1BFQ1RP
UikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBzdGF0aWMKK2Jvb2wgSW5zcGVjdG9yVXRp
bGl0aWVzOjpyZXNvdXJjZUNvbnRlbnRGb3JVUkwoY29uc3QgS1VSTCYgdXJsLCBEb2N1bWVudCog
ZnJhbWVEb2N1bWVudCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgaWYgKCFmcmFtZURvY3VtZW50
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgdGV4dEVuY29kaW5nTmFtZTsK
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBidWZmZXI7CisgICAgaWYgKGVxdWFsSWdub3JpbmdG
cmFnbWVudElkZW50aWZpZXIodXJsLCBmcmFtZURvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdFVSTCgpKSkgeworICAgICAgICB0ZXh0RW5jb2RpbmdO
YW1lID0gZnJhbWVEb2N1bWVudC0+aW5wdXRFbmNvZGluZygpOworICAgICAgICBidWZmZXIgPSBm
cmFtZURvY3VtZW50LT5mcmFtZSgpLT5sb2FkZXIoKS0+cHJvdmlzaW9uYWxEb2N1bWVudExvYWRl
cigpLT5tYWluUmVzb3VyY2VEYXRhKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29uc3QgU3Ry
aW5nJiB1cmxTdHJpbmcgPSB1cmwuc3RyaW5nKCk7CisgICAgICAgIENhY2hlZFJlc291cmNlKiBj
YWNoZWRSZXNvdXJjZSA9IGZyYW1lRG9jdW1lbnQtPmNhY2hlZFJlc291cmNlTG9hZGVyKCktPmNh
Y2hlZFJlc291cmNlKHVybFN0cmluZyk7CisgICAgICAgIGlmICghY2FjaGVkUmVzb3VyY2UpCisg
ICAgICAgICAgICBjYWNoZWRSZXNvdXJjZSA9IGNhY2hlKCktPnJlc291cmNlRm9yVVJMKHVybFN0
cmluZyk7CisKKyAgICAgICAgQVNTRVJUKGNhY2hlZFJlc291cmNlKTsgLy8gRklYTUUoYXBhdmxv
dik6IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUuCisKKyAgICAgICAgYm9vbCBpc1VucHVy
Z2VhYmxlID0gdHJ1ZTsKKyAgICAgICAgaWYgKGNhY2hlZFJlc291cmNlLT5pc1B1cmdlYWJsZSgp
KSB7CisgICAgICAgICAgICAvLyBJZiB0aGUgcmVzb3VyY2UgaXMgcHVyZ2VhYmxlIHRoZW4gbWFr
ZSBpdCB1bnB1cmdlYWJsZSB0byBnZXQKKyAgICAgICAgICAgIC8vIGl0cyBkYXRhLiBUaGlzIG1p
Z2h0IGZhaWwsIGluIHdoaWNoIGNhc2Ugd2UgcmV0dXJuIGFuCisgICAgICAgICAgICAvLyBlbXB0
eSBTdHJpbmcuCisgICAgICAgICAgICBpZiAoIWNhY2hlZFJlc291cmNlLT5tYWtlUHVyZ2VhYmxl
KGZhbHNlKSkKKyAgICAgICAgICAgICAgICBpc1VucHVyZ2VhYmxlID0gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGlzVW5wdXJnZWFibGUpIHsKKyAgICAgICAgICAgIHRleHRFbmNvZGlu
Z05hbWUgPSBjYWNoZWRSZXNvdXJjZS0+ZW5jb2RpbmcoKTsKKyAgICAgICAgICAgIGJ1ZmZlciA9
IGNhY2hlZFJlc291cmNlLT5kYXRhKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnVm
ZmVyKSB7CisgICAgICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyh0ZXh0RW5jb2RpbmdOYW1lKTsK
KyAgICAgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpCisgICAgICAgICAgICBlbmNvZGluZyA9
IFdpbmRvd3NMYXRpbjFFbmNvZGluZygpOworICAgICAgICAqcmVzdWx0ID0gZW5jb2RpbmcuZGVj
b2RlKGJ1ZmZlci0+ZGF0YSgpLCBidWZmZXItPnNpemUoKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VXRpbGl0aWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgzNzQyNgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5o
CkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvclV0aWxpdGllc19oCisjZGVmaW5lIElu
c3BlY3RvclV0aWxpdGllc19oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaWYg
RU5BQkxFKElOU1BFQ1RPUikKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NTdHls
ZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTU3R5bGVSdWxlOworY2xhc3MgQ1NTU3R5bGVTaGVldDsK
K2NsYXNzIERvY3VtZW50OworY2xhc3MgS1VSTDsKK2NsYXNzIFN0eWxlQmFzZTsKKworY2xhc3Mg
SW5zcGVjdG9yVXRpbGl0aWVzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCByZXNvdXJjZUNv
bnRlbnRGb3JVUkwoY29uc3QgS1VSTCYgdXJsLCBEb2N1bWVudCogZnJhbWVEb2N1bWVudCwgU3Ry
aW5nKiByZXN1bHQpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKElOU1BFQ1RPUikKKworI2VuZGlmIC8vICFkZWZpbmVkKEluc3BlY3RvclV0aWxpdGll
c19oKQo=
</data>
<flag name="review"
          id="59360"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69790</attachid>
            <date>2010-10-05 08:32:02 -0700</date>
            <delta_ts>2010-10-06 04:34:33 -0700</delta_ts>
            <desc>[PRELIMINARY PATCH] Comments addressed</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>123495</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1B
UEkuY3NzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtbmV3LUFQSS5j
c3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVjN2Q2ZgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLW5ldy1BUEku
Y3NzCkBAIC0wLDAgKzEsMjIgQEAKK2h0bWwgeworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisK
K2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKKyAgICBmb286IGJhciAhCisKKyAgICBpbXBv
cnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICov
OworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OworICAgIGNvbG9yejogIiFpbXBvcnRhbnQi
OworICAgIGltcG9ydGFudDohaW1wb3J0YW50OworICAgIGNvbG9yOiAiYmFkY29sb3IiICEgaW1w
b3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovOworfQorCisvKiBj
b21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVj
dG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogI0YwMEJBQTt6b286bW9vIC8qIG5vdCBhbiAhaW1w
b3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0eSAqL30vKiBjb21tZW50ICovCisKK2JvZHkubWFp
bjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFsdWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBv
cnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5ICFpbXBvcnRhbnQgKi99CisKK2JvZHk6OmFmdGVy
ICB7CisgICAgY29udGVudDogIkFmdGVyIGJvZHkiOworfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmRiNGM4OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2lu
c3BlY3Rvci9zdHlsZXMtbmV3LUFQSS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNjkgQEAKK1Rl
c3RzIHRoYXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4K
KworCis9PT0gQ29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9yIGJvZHkgPT09CitPSwor
Cis9PT0gTWF0Y2hlZCBydWxlcyBmb3IgYm9keSA9PT0KKworcnVsZQorYm9keTogWyd1c2VyLWFn
ZW50JyB1bmRlZmluZWQtdW5kZWZpbmVkXSBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snZGlzcGxh
eSc6J2Jsb2NrJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tdG9wJzonOHB4J10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4tcmlnaHQnOic4cHgnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ21hcmdpbi1ib3R0b20nOic4cHgnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ21hcmdpbi1sZWZ0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCitydWxl
Citib2R5OiBbJycgMzItMzZdIFszOC0yOThdCitbJ2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFd
CitbJ2Zvbyc6J2JhciAhCisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0eSBu
b3QgcmVjb2duaXplZCBieSBXZWJDb3JlICovJyBpcy1pbXBvcnRhbnQgbm9uLXBhcnNlZF0gQFsy
Ni0xMDRdCitbJ2hlaWdodCc6JzEwMCUgIWltcG9ydGFudCcgaXMtaW1wb3J0YW50XSBAWzEwOS0x
MzNdCitbJ2NvbG9yeic6JyIhaW1wb3J0YW50Iicgbm9uLXBhcnNlZF0gQFsxMzgtMTU5XQorWydp
bXBvcnRhbnQnOicnIG5vbi1wYXJzZWRdIEBbMTY0LTE3NF0KK1snY29sb3InOiciYmFkY29sb3Ii
ICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0aCBzdHJhbmdlIHZhbHVlICovJyBpcy1p
bXBvcnRhbnRdIEBbMTkwLTI1OV0KKworcnVsZQorYm9keS5tYWluMTogWycnIDMzMC0zNjhdIFsz
NjktNDUwXQorWydjb2xvcic6JyNGMDBCQUEnXSBAWzEzLTI4XQorWyd6b28nOidtb28gLyogbm90
IGFuICFpbXBvcnRhbnQgdW5yZWNvZ25pemVkIHByb3BlcnR5ICovJyBub24tcGFyc2VkXSBAWzI4
LTgxXQorCitydWxlCitib2R5Lm1haW4yOiBbJycgNDY2LTQ3Nl0gWzQ3Ny01NzJdCitbJ2JhY2tn
cm91bmQnOidncmVlbiAvKiB2YWx1ZSAhaW1wb3J0YW50IGNvbW1lbnQgKi8gIWltcG9ydGFudCAv
KiBubyBzZW1pY29sb24sIHZlcnkgIWltcG9ydGFudCAqLycgaXMtaW1wb3J0YW50XSBAWzAtOTVd
CitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0K
K1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRd
CitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2dyZWVuJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVk
XQorCitydWxlCitib2R5Lm1haW5wYWdlOiBbJycgMjktNDJdIFs0NC0xNzZdCitbJ3RleHQtZGVj
b3JhdGlvbic6J25vbmUnXSBAWzUtMjddCitbJ2JhZHByb3BlcnR5JzonMWJhZHZhbHVlMScgbm9u
LXBhcnNlZF0gQFsxMDctMTMxXQorCis9PT0gUHNldWRvIHJ1bGVzIGZvciBib2R5ID09PQorUHNl
dWRvSWQ9NAorCitydWxlCitib2R5OjphZnRlcjogWycnIDU3NS01ODZdIFs1ODktNjE3XQorWydj
b250ZW50JzonIkFmdGVyIGJvZHkiJ10gQFs1LTI3XQorCis9PT0gQXR0cmlidXRlIHN0eWxlcyBm
b3IgdGFibGUgPT09CitBdHRyaWJ1dGU6IHdpZHRoCisKK3N0eWxlCitlbGVtZW50LnN0eWxlIFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWyd3aWR0aCc6JzUwJSddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KKworPT09IEluaGVyaXRlZCBzdHlsZXMgZm9yIGJvZHkgPT09CitMZXZlbD0xCisKK3J1bGUK
K2h0bWw6IFsndXNlci1hZ2VudCcgdW5kZWZpbmVkLXVuZGVmaW5lZF0gW3VuZGVmaW5lZC11bmRl
ZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVs
ZQoraHRtbDogWycnIDAtNF0gWzYtMjldCitbJ2ZvbnQtd2VpZ2h0JzonNDAwJ10gQFs1LTIyXQor
Cis9PT0gSW5saW5lIHN0eWxlIGZvciBib2R5ID09PQorCitzdHlsZQorZWxlbWVudC5zdHlsZSBb
MC0zMV0KK1snZm9udC13ZWlnaHQnOidub3JtYWwnXSBAWzAtMjBdCitbJ3dpZHRoJzonODUlJ10g
QFsyMS0zMV0KKworPT09IEFsbCBzdHlsZXNoZWV0cyA9PT0KKworU3R5bGVTaGVldDogJ2h0bWwg
eworICAgIGZvbnQtd2VpZ2h0OiA0MDA7Cit9CisKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJw
eDsKKyAgICBmb286IGJhciAhCisKKyAgICBpbXBvcnRhbnQgLyogIWltcG9ydGFudCBwcm9wZXJ0
eSBub3QgcmVjb2duaXplZCBieSBXZWJDb3JlICovOworICAgIGhlaWdodDogMTAwJSAhaW1wb3J0
YW50OworICAgIGNvbG9yejogIiFpbXBvcnRhbnQiOworICAgIGltcG9ydGFudDohaW1wb3J0YW50
OworICAgIGNvbG9yOiAiYmFkY29sb3IiICEgaW1wb3J0YW50IC8qIGdvb2QgcHJvcGVydHkgd2l0
aCBzdHJhbmdlIHZhbHVlICovOworfQorCisvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2Jv
ZHkubWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjog
I0YwMEJBQTt6b286bW9vIC8qIG5vdCBhbiAhaW1wb3J0YW50IHVucmVjb2duaXplZCBwcm9wZXJ0
eSAqL30vKiBjb21tZW50ICovCisKK2JvZHkubWFpbjJ7YmFja2dyb3VuZDogZ3JlZW4gLyogdmFs
dWUgIWltcG9ydGFudCBjb21tZW50ICovICFpbXBvcnRhbnQgLyogbm8gc2VtaWNvbG9uLCB2ZXJ5
ICFpbXBvcnRhbnQgKi99CisKK2JvZHk6OmFmdGVyICB7CisgICAgY29udGVudDogIkFmdGVyIGJv
ZHkiOworfQorJworCitydWxlCitodG1sOiBbJycgMC00XSBbNi0yOV0KK1snZm9udC13ZWlnaHQn
Oic0MDAnXSBAWzUtMjJdCisKK3J1bGUKK2JvZHk6IFsnJyAzMi0zNl0gWzM4LTI5OF0KK1snZm9u
dC1zaXplJzonMTJweCddIEBbNS0yMV0KK1snZm9vJzonYmFyICEKKworICAgIGltcG9ydGFudCAv
KiAhaW1wb3J0YW50IHByb3BlcnR5IG5vdCByZWNvZ25pemVkIGJ5IFdlYkNvcmUgKi8nIGlzLWlt
cG9ydGFudCBub24tcGFyc2VkXSBAWzI2LTEwNF0KK1snaGVpZ2h0JzonMTAwJSAhaW1wb3J0YW50
JyBpcy1pbXBvcnRhbnRdIEBbMTA5LTEzM10KK1snY29sb3J6JzonIiFpbXBvcnRhbnQiJyBub24t
cGFyc2VkXSBAWzEzOC0xNTldCitbJ2ltcG9ydGFudCc6Jycgbm9uLXBhcnNlZF0gQFsxNjQtMTc0
XQorWydjb2xvcic6JyJiYWRjb2xvciIgISBpbXBvcnRhbnQgLyogZ29vZCBwcm9wZXJ0eSB3aXRo
IHN0cmFuZ2UgdmFsdWUgKi8nIGlzLWltcG9ydGFudF0gQFsxOTAtMjU5XQorCitydWxlCitib2R5
Lm1haW4xOiBbJycgMzMwLTM2OF0gWzM2OS00NTBdCitbJ2NvbG9yJzonI0YwMEJBQSddIEBbMTMt
MjhdCitbJ3pvbyc6J21vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVy
dHkgKi8nIG5vbi1wYXJzZWRdIEBbMjgtODFdCisKK3J1bGUKK2JvZHkubWFpbjI6IFsnJyA0NjYt
NDc2XSBbNDc3LTU3Ml0KK1snYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQg
Y29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICov
JyBpcy1pbXBvcnRhbnRdIEBbMC05NV0KK1snYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCdd
IEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlh
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5p
dGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi15Jzon
aW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1vcmlnaW4nOidp
bml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0
aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3JlZW4n
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCisKK3J1bGUKK2JvZHk6OmFmdGVyOiBbJycgNTc1LTU4
Nl0gWzU4OS02MTddCitbJ2NvbnRlbnQnOiciQWZ0ZXIgYm9keSInXSBAWzUtMjddCisKK1N0eWxl
U2hlZXQ6ICcKKworLyogQW4gaW5saW5lIHN0eWxlc2hlZXQgKi8KK2JvZHkubWFpbnBhZ2Ugewor
ICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyogYXQgbGVhc3Qgb25lIHZhbGlkIHByb3BlcnR5
IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ29yZSB0byBtYXRjaCBhIHJ1bGUgKi8KKyAgICBiYWRwcm9w
ZXJ0eTogMWJhZHZhbHVlMTsKK30KKworJworCitydWxlCitib2R5Lm1haW5wYWdlOiBbJycgMjkt
NDJdIFs0NC0xNzZdCitbJ3RleHQtZGVjb3JhdGlvbic6J25vbmUnXSBAWzUtMjddCitbJ2JhZHBy
b3BlcnR5JzonMWJhZHZhbHVlMScgbm9uLXBhcnNlZF0gQFsxMDctMTMxXQorCis9PT0gTGFzdCBz
dHlsZXNoZWV0IHBhdGNoZWQgPT09CisKK1N0eWxlU2hlZXQ6ICdib2R5Lm1haW5wYWdlIHsgICAg
dGV4dC1kZWNvcmF0aW9uOiBzdHJpa2V0aHJvdWdoOyAgICBiYWRwcm9wZXJ0eTogMmJhZHZhbHVl
Mjt9Ym9keSB7ICAgIHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQorYm9keS5tYWlucGFn
ZTogWycnIDAtMTNdIFsxNS03OF0KK1sndGV4dC1kZWNvcmF0aW9uJzonc3RyaWtldGhyb3VnaCdd
IEBbNC0zNV0KK1snYmFkcHJvcGVydHknOicyYmFkdmFsdWUyJyBub24tcGFyc2VkXSBAWzM5LTYz
XQorCitydWxlCitib2R5OiBbJycgNzktODNdIFs4NS0xMDldCitbJ3RleHQtYWxpZ24nOidqdXN0
aWZ5J10gQFs0LTI0XQorCis9PT0gQWZ0ZXIgc2VsZWN0b3Igc2V0ID09PQorCitTdHlsZVNoZWV0
OiAnaHRtbCAqLCBib2R5W2Zvbz0iYmFyIl0geyAgICB0ZXh0LWRlY29yYXRpb246IHN0cmlrZXRo
cm91Z2g7ICAgIGJhZHByb3BlcnR5OiAyYmFkdmFsdWUyO31ib2R5IHsgICAgdGV4dC1hbGlnbjog
anVzdGlmeTt9JworCitydWxlCitodG1sICosIGJvZHlbZm9vPSJiYXIiXTogWycnIDAtMjNdIFsy
NS04OF0KK1sndGV4dC1kZWNvcmF0aW9uJzonc3RyaWtldGhyb3VnaCddIEBbNC0zNV0KK1snYmFk
cHJvcGVydHknOicyYmFkdmFsdWUyJyBub24tcGFyc2VkXSBAWzM5LTYzXQorCitydWxlCitib2R5
OiBbJycgODktOTNdIFs5NS0xMTldCitbJ3RleHQtYWxpZ24nOidqdXN0aWZ5J10gQFs0LTI0XQor
Cis9PT0gQWZ0ZXIgc3R5bGUgdGV4dCBzZXQgPT09CisKK1N0eWxlU2hlZXQ6ICdodG1sICosIGJv
ZHlbZm9vPSJiYXIiXSB7Y29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kOiBibGFjazt9Ym9keSB7ICAg
IHRleHQtYWxpZ246IGp1c3RpZnk7fScKKworcnVsZQoraHRtbCAqLCBib2R5W2Zvbz0iYmFyIl06
IFsnJyAwLTIzXSBbMjUtNTddCitbJ2NvbG9yJzond2hpdGUnXSBAWzAtMTNdCitbJ2JhY2tncm91
bmQnOidibGFjayddIEBbMTQtMzJdCitbJ2JhY2tncm91bmQtaW1hZ2UnOidpbml0aWFsJ10gQFt1
bmRlZmluZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC14JzonaW5pdGlhbCddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteSc6J2luaXRpYWwnXSBA
W3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtYXR0YWNobWVudCc6J2luaXRpYWwn
XSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teCc6J2luaXRp
YWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtcG9zaXRpb24teSc6J2lu
aXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtb3JpZ2luJzonaW5p
dGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jbGlwJzonaW5pdGlh
bCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1jb2xvcic6J2JsYWNrJ10g
QFt1bmRlZmluZWQtdW5kZWZpbmVkXQorCitydWxlCitib2R5OiBbJycgNTgtNjJdIFs2NC04OF0K
K1sndGV4dC1hbGlnbic6J2p1c3RpZnknXSBAWzQtMjRdCisKKz09PSBNYXRjaGVkIHJ1bGVzIGFm
dGVyIHJ1bGUgYWRkZWQgPT09CisKK3J1bGUKK2JvZHk6IFsndXNlci1hZ2VudCcgdW5kZWZpbmVk
LXVuZGVmaW5lZF0gW3VuZGVmaW5lZC11bmRlZmluZWRdCitbJ2Rpc3BsYXknOidibG9jayddIEBb
dW5kZWZpbmVkLXVuZGVmaW5lZF0KK1snbWFyZ2luLXRvcCc6JzhweCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snbWFyZ2luLXJpZ2h0JzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQor
WydtYXJnaW4tYm90dG9tJzonOHB4J10gQFt1bmRlZmluZWQtdW5kZWZpbmVkXQorWydtYXJnaW4t
bGVmdCc6JzhweCddIEBbdW5kZWZpbmVkLXVuZGVmaW5lZF0KKworcnVsZQorYm9keTogWycnIDMy
LTM2XSBbMzgtMjk4XQorWydmb250LXNpemUnOicxMnB4J10gQFs1LTIxXQorWydmb28nOidiYXIg
IQorCisgICAgaW1wb3J0YW50IC8qICFpbXBvcnRhbnQgcHJvcGVydHkgbm90IHJlY29nbml6ZWQg
YnkgV2ViQ29yZSAqLycgaXMtaW1wb3J0YW50IG5vbi1wYXJzZWRdIEBbMjYtMTA0XQorWydoZWln
aHQnOicxMDAlICFpbXBvcnRhbnQnIGlzLWltcG9ydGFudF0gQFsxMDktMTMzXQorWydjb2xvcnon
OiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRdIEBbMTM4LTE1OV0KK1snaW1wb3J0YW50JzonJyBu
b24tcGFyc2VkXSBAWzE2NC0xNzRdCitbJ2NvbG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAv
KiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5nZSB2YWx1ZSAqLycgaXMtaW1wb3J0YW50XSBAWzE5
MC0yNTldCisKK3J1bGUKK2h0bWwgKiwgYm9keVtmb289ImJhciJdOiBbJycgMC0yM10gWzI1LTU3
XQorWydjb2xvcic6J3doaXRlJ10gQFswLTEzXQorWydiYWNrZ3JvdW5kJzonYmxhY2snXSBAWzE0
LTMyXQorWydiYWNrZ3JvdW5kLWltYWdlJzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVmaW5l
ZF0KK1snYmFja2dyb3VuZC1yZXBlYXQteCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXknOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLWF0dGFjaG1lbnQnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5k
ZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLXBvc2l0aW9uLXknOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLW9yaWdpbic6J2luaXRpYWwnXSBAW3VuZGVmaW5l
ZC11bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY2xpcCc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11
bmRlZmluZWRdCitbJ2JhY2tncm91bmQtY29sb3InOidibGFjayddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KKworcnVsZQorYm9keTogWycnIDU4LTYyXSBbNjQtODhdCitbJ3RleHQtYWxpZ24nOidq
dXN0aWZ5J10gQFs0LTI0XQorCitydWxlCitib2R5OiBbJ2luc3BlY3RvcicgMC00XSBbNi0xN10K
K1snZm9udCc6J3NlcmlmJ10gQFswLTExXQorCitydWxlCitib2R5Lm1haW4xOiBbJycgMzMwLTM2
OF0gWzM2OS00NTBdCitbJ2NvbG9yJzonI0YwMEJBQSddIEBbMTMtMjhdCitbJ3pvbyc6J21vbyAv
KiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJvcGVydHkgKi8nIG5vbi1wYXJzZWRd
IEBbMjgtODFdCisKK3J1bGUKK2JvZHkubWFpbjI6IFsnJyA0NjYtNDc2XSBbNDc3LTU3Ml0KK1sn
YmFja2dyb3VuZCc6J2dyZWVuIC8qIHZhbHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0
YW50IC8qIG5vIHNlbWljb2xvbiwgdmVyeSAhaW1wb3J0YW50ICovJyBpcy1pbXBvcnRhbnRdIEBb
MC05NV0KK1snYmFja2dyb3VuZC1pbWFnZSc6J2luaXRpYWwnXSBAW3VuZGVmaW5lZC11bmRlZmlu
ZWRdCitbJ2JhY2tncm91bmQtcmVwZWF0LXgnOidpbml0aWFsJ10gQFt1bmRlZmluZWQtdW5kZWZp
bmVkXQorWydiYWNrZ3JvdW5kLXJlcGVhdC15JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVuZGVm
aW5lZF0KK1snYmFja2dyb3VuZC1hdHRhY2htZW50JzonaW5pdGlhbCddIEBbdW5kZWZpbmVkLXVu
ZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi14JzonaW5pdGlhbCddIEBbdW5kZWZpbmVk
LXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1wb3NpdGlvbi15JzonaW5pdGlhbCddIEBbdW5kZWZp
bmVkLXVuZGVmaW5lZF0KK1snYmFja2dyb3VuZC1vcmlnaW4nOidpbml0aWFsJ10gQFt1bmRlZmlu
ZWQtdW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNsaXAnOidpbml0aWFsJ10gQFt1bmRlZmluZWQt
dW5kZWZpbmVkXQorWydiYWNrZ3JvdW5kLWNvbG9yJzonZ3JlZW4nXSBAW3VuZGVmaW5lZC11bmRl
ZmluZWRdCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQ
SS5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1uZXctQVBJLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzVkM2Q5MwotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtbmV3LUFQSS5odG1sCkBAIC0wLDAgKzEsMjQ0
IEBACis8aHRtbD4KKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291
cmNlcy9zdHlsZXMtbmV3LUFQSS5jc3MiIC0tPgorCis8c2NyaXB0IHNyYz0iLi4vaHR0cC90ZXN0
cy9pbnNwZWN0b3IvaW5zcGVjdG9yLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImVs
ZW1lbnRzLXRlc3RzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2Z1bmN0aW9uIGRvaXQoKQor
eworICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHJlc3VsdCkKKyAgICB7CisgICAgICAgIGR1bXBBcnJh
eShyZXN1bHQpOworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX3J1blRlc3QiLCBjYWxsYmFjayk7Cit9CisKKworLy8gRnJv
bnRlbmQgZnVuY3Rpb25zLgorCitmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9s
bGVyKQoreworICAgIHRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICBmcm9udGVu
ZF9leHBhbmRET01TdWJ0cmVlKFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudCk7CisgICAg
dGVzdENvbnRyb2xsZXIucnVuQWZ0ZXJQZW5kaW5nRGlzcGF0Y2hlcyhmdW5jdGlvbigpIHsKKyAg
ICAgICAgZnVuY3Rpb24gY29tcHV0ZWRTdHlsZUNhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBjb21w
dXRlZFN0eWxlKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIiIpOworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0g
Q29tcHV0ZWQgc3R5bGUgcHJvcGVydHkgY291bnQgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAg
ICB2YXIgcHJvcENvdW50ID0gY29tcHV0ZWRTdHlsZS5wcm9wZXJ0aWVzLmxlbmd0aDsKKyAgICAg
ICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaChwcm9wQ291bnQgPiAyMDAgPyAiT0si
IDogIkZBSUwgKCIgKyBwcm9wQ291bnQgKyAiKSIpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gbWF0Y2hlZFJ1bGVzQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIG1hdGNoZWRDU1NSdWxl
cykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCIi
KTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IE1hdGNoZWQg
cnVsZXMgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJh
eSh0ZXN0Q29udHJvbGxlciwgbWF0Y2hlZENTU1J1bGVzKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHBzZXVkb1J1bGVzQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIHBzZXVkb1J1bGVz
KQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKCI9PT0gUHNldWRvIHJ1
bGVzIGZvciBib2R5ID09PSIpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwc2V1
ZG9SdWxlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJl
c3VsdHMucHVzaCgiUHNldWRvSWQ9IiArIHBzZXVkb1J1bGVzW2ldLnBzZXVkb0lkKTsKKyAgICAg
ICAgICAgICAgICBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29udHJvbGxlciwgcHNldWRv
UnVsZXNbaV0ucnVsZXMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gYXR0cmlidXRlU3R5bGVzQ2FsbGJhY2sodGVzdENvbnRyb2xsZXIsIGF0dHJpYnV0ZVN0
eWxlcykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNo
KCIiKTsKKyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEF0dHJp
YnV0ZSBzdHlsZXMgZm9yIHRhYmxlID09PSIpOworICAgICAgICAgICAgZm9yICh2YXIgYXR0ciBp
biBhdHRyaWJ1dGVTdHlsZXMpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1
bHRzLnB1c2goIkF0dHJpYnV0ZTogIiArIGF0dHIpOworICAgICAgICAgICAgICAgIGZyb250ZW5k
X2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgYXR0cmlidXRlU3R5bGVzW2F0dHJdKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGluaGVyaXRlZFN0
eWxlc0NhbGxiYWNrKHRlc3RDb250cm9sbGVyLCBpbmhlcml0ZWRTdHlsZXMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAg
ICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBJbmhlcml0ZWQgc3R5bGVzIGZvciBi
b2R5ID09PSIpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbmhlcml0ZWRTdHls
ZXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIkxldmVsPSIgKyAoaSArIDEpKTsKKyAgICAgICAgICAgICAgICBmcm9udGVuZF9kdW1w
UnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIGluaGVyaXRlZFN0eWxlc1tpXS5pbmxpbmVTdHls
ZSk7CisgICAgICAgICAgICAgICAgZnJvbnRlbmRfZHVtcFJ1bGVzQXJyYXkodGVzdENvbnRyb2xs
ZXIsIGluaGVyaXRlZFN0eWxlc1tpXS5tYXRjaGVkQ1NTUnVsZXMpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gaW5saW5lU3R5bGVDYWxsYmFjayh0ZXN0Q29u
dHJvbGxlciwgaW5saW5lU3R5bGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RDb250cm9s
bGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRz
LnB1c2goIj09PSBJbmxpbmUgc3R5bGUgZm9yIGJvZHkgPT09Iik7CisgICAgICAgICAgICBmcm9u
dGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIGlubGluZVN0eWxlKTsKKyAgICAg
ICAgICAgIGZyb250ZW5kX3Rlc3RTdHlsZVNoZWV0cyh0ZXN0Q29udHJvbGxlcik7CisgICAgICAg
IH0KKworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihX
ZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgY29tcHV0ZWRTdHlsZUNhbGxi
YWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5nZXRNYXRjaGVkUnVsZXNGb3JOb2RlMihXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQu
Ym9keS5pZCwgbWF0Y2hlZFJ1bGVzQ2FsbGJhY2suYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikp
OworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUy
KFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBwc2V1ZG9SdWxlc0NhbGxi
YWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2Vu
ZC5nZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2RlMihmcm9udGVuZF9ub2RlRm9ySWQoInRoZXRhYmxl
IikuaWQsIGF0dHJpYnV0ZVN0eWxlc0NhbGxiYWNrLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIp
KTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2RlMihX
ZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQuYm9keS5pZCwgaW5oZXJpdGVkU3R5bGVzQ2Fs
bGJhY2suYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgICAgICBJbnNwZWN0b3JCYWNr
ZW5kLmdldElubGluZVN0eWxlRm9yTm9kZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
LmJvZHkuaWQsIGlubGluZVN0eWxlQ2FsbGJhY2suYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikp
OworICAgIH0pOworfQorCitmdW5jdGlvbiBmcm9udGVuZF9kdW1wUnVsZXNBcnJheSh0ZXN0Q29u
dHJvbGxlciwgcnVsZXMpCit7CisgICAgaWYgKCFydWxlcykKKyAgICAgICAgcmV0dXJuOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyArK2kpCisgICAgICAgIGZyb250ZW5k
X2R1bXBSdWxlT3JTdHlsZSh0ZXN0Q29udHJvbGxlciwgcnVsZXNbaV0pOworfQorCitmdW5jdGlv
biBmcm9udGVuZF90ZXN0U3R5bGVTaGVldHModGVzdENvbnRyb2xsZXIpCit7Cit2YXIgbmV3U3R5
bGVTaGVldFRleHQgPQorImJvZHkubWFpbnBhZ2Uge1wKKyAgICB0ZXh0LWRlY29yYXRpb246IHN0
cmlrZXRocm91Z2g7XAorICAgIGJhZHByb3BlcnR5OiAyYmFkdmFsdWUyO1wKK31cCitcCitib2R5
IHtcCisgICAgdGV4dC1hbGlnbjoganVzdGlmeTtcCit9XAorIjsKKworICAgIGZ1bmN0aW9uIHBh
dGNoU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKKyAgICB7CisgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVy
LnJlc3VsdHMucHVzaCgiPT09IExhc3Qgc3R5bGVzaGVldCBwYXRjaGVkID09PSIpOworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnNldFN0eWxlU2hlZXRUZXh0MihzdHlsZVNoZWV0LmlkLCBuZXdT
dHlsZVNoZWV0VGV4dCwKKyAgICAgICAgICAgIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVl
dC5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyLCBzdHlsZVNoZWV0LmlkLCBmcm9udGVuZF9jaGFu
Z2VTZWxlY3Rvci5iaW5kKG51bGwsIHRlc3RDb250cm9sbGVyKSkpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIHN0eWxlU2hlZXRJZHNMb2FkZWQodGVzdENvbnRyb2xsZXIsIGlkcykKKyAgICB7Cisg
ICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250
cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFsbCBzdHlsZXNoZWV0cyA9PT0iKTsKKyAgICAgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBpZHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBmcm9udGVu
ZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xsZXIsIGlkc1tpXSwgKGkgPCBpZHMu
bGVuZ3RoIC0gMSkgPyBudWxsIDogcGF0Y2hTdHlsZVNoZWV0LmJpbmQobnVsbCwgdGVzdENvbnRy
b2xsZXIpKTsKKyAgICB9CisgICAgSW5zcGVjdG9yQmFja2VuZC5nZXRBbGxTdHlsZXMyKHN0eWxl
U2hlZXRJZHNMb2FkZWQuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitmdW5jdGlv
biBmcm9udGVuZF9jaGFuZ2VTZWxlY3Rvcih0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKK3sK
KyAgICBmdW5jdGlvbiBkaWRTZXRTZWxlY3Rvcih0ZXN0Q29udHJvbGxlciwgcnVsZSkKKyAgICB7
CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RD
b250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHNlbGVjdG9yIHNldCA9PT0iKTsKKyAg
ICAgICAgZnJvbnRlbmRfbG9hZEFuZER1bXBTdHlsZVNoZWV0KHRlc3RDb250cm9sbGVyLCBydWxl
LnBhcmVudFN0eWxlU2hlZXQuaWQsIGZyb250ZW5kX3NldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRl
c3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRSdWxlU2Vs
ZWN0b3IyKHN0eWxlU2hlZXQuY3NzUnVsZXNbMF0uaWQsICJodG1sICosIGJvZHlbZm9vPVwiYmFy
XCJdIiwgZGlkU2V0U2VsZWN0b3IuYmluZChudWxsLCB0ZXN0Q29udHJvbGxlcikpOworfQorCitm
dW5jdGlvbiBmcm9udGVuZF9zZXRTdHlsZVRleHQodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hlZXQp
Cit7CisgICAgZnVuY3Rpb24gZGlkU2V0U3R5bGVUZXh0KHRlc3RDb250cm9sbGVyLCBzdHlsZSkK
KyAgICB7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAg
IHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiPT09IEFmdGVyIHN0eWxlIHRleHQgc2V0ID09
PSIpOworICAgICAgICBmcm9udGVuZF9sb2FkQW5kRHVtcFN0eWxlU2hlZXQodGVzdENvbnRyb2xs
ZXIsIHN0eWxlLnBhcmVudFN0eWxlU2hlZXRJZCwgZnJvbnRlbmRfYWRkUnVsZS5iaW5kKG51bGws
IHRlc3RDb250cm9sbGVyKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRTdHls
ZVRleHQyKHN0eWxlU2hlZXQuY3NzUnVsZXNbMF0uc3R5bGUuaWQsICJjb2xvcjogd2hpdGU7IGJh
Y2tncm91bmQ6IGJsYWNrOyIsIGRpZFNldFN0eWxlVGV4dC5iaW5kKG51bGwsIHRlc3RDb250cm9s
bGVyKSk7Cit9CisKK2Z1bmN0aW9uIGZyb250ZW5kX2FkZFJ1bGUodGVzdENvbnRyb2xsZXIpCit7
CisgICAgZnVuY3Rpb24gZGlkR2V0TWF0Y2hlZFJ1bGVzKHRlc3RDb250cm9sbGVyLCBtYXRjaGVk
Q1NTUnVsZXMpCisgICAgeworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIiIp
OworICAgICAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goIj09PSBNYXRjaGVkIHJ1bGVz
IGFmdGVyIHJ1bGUgYWRkZWQgPT09Iik7CisgICAgICAgIGZyb250ZW5kX2R1bXBSdWxlc0FycmF5
KHRlc3RDb250cm9sbGVyLCBtYXRjaGVkQ1NTUnVsZXMpOworICAgICAgICB0ZXN0Q29udHJvbGxl
ci5ub3RpZnlEb25lKHRlc3RDb250cm9sbGVyLnJlc3VsdHMpOworICAgIH0KKworICAgIGZ1bmN0
aW9uIGRpZFNldFN0eWxlVGV4dCh0ZXN0Q29udHJvbGxlciwgc3R5bGUpCisgICAgeworICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLmdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKFdlYkluc3BlY3Rvci5k
b21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCBkaWRHZXRNYXRjaGVkUnVsZXMuYmluZChudWxsLCB0
ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHJ1bGVBZGRlZCh0ZXN0Q29u
dHJvbGxlciwgcnVsZSkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0U3R5bGVU
ZXh0MihydWxlLnN0eWxlLmlkLCAiZm9udDogc2VyaWYiLCBkaWRTZXRTdHlsZVRleHQuYmluZChu
dWxsLCB0ZXN0Q29udHJvbGxlcikpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQuYWRk
UnVsZTIoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsICJib2R5IiwgcnVs
ZUFkZGVkLmJpbmQobnVsbCwgdGVzdENvbnRyb2xsZXIpKTsKK30KKworZnVuY3Rpb24gZnJvbnRl
bmRfZHVtcFJ1bGVPclN0eWxlKHRlc3RDb250cm9sbGVyLCBydWxlT3JTdHlsZSkKK3sKKyAgICBp
ZiAoIXJ1bGVPclN0eWxlKQorICAgICAgICByZXR1cm47CisgICAgdmFyIGlzUnVsZSA9ICEhKHJ1
bGVPclN0eWxlLnN0eWxlKTsKKyAgICB2YXIgc3R5bGUgPSBpc1J1bGUgPyBydWxlT3JTdHlsZS5z
dHlsZSA6IHJ1bGVPclN0eWxlOworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7
CisgICAgdGVzdENvbnRyb2xsZXIucmVzdWx0cy5wdXNoKGlzUnVsZSA/ICJydWxlIiA6ICJzdHls
ZSIpOworICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMucHVzaCgoaXNSdWxlID8gKHJ1bGVPclN0
eWxlLnNlbGVjdG9yVGV4dCArICI6IFsnIiArIHJ1bGVPclN0eWxlLm9yaWdpbiArICInICIgKyBy
dWxlT3JTdHlsZS5zZWxlY3RvclN0YXJ0T2Zmc2V0ICsgIi0iICsgcnVsZU9yU3R5bGUuc2VsZWN0
b3JFbmRPZmZzZXQgKyAiXSIpIDogImVsZW1lbnQuc3R5bGUiKSArICIgWyIgKyBzdHlsZS5zdGFy
dE9mZnNldCArICItIiArIHN0eWxlLmVuZE9mZnNldCArICJdIik7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHlsZS5wcm9wZXJ0aWVzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIHZhciBwcm9w
ZXJ0eSA9IHN0eWxlLnByb3BlcnRpZXNbaV07CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3Vs
dHMucHVzaCgiWyciICsgcHJvcGVydHkubmFtZSArICInOiciICsgcHJvcGVydHkudmFsdWUgKyAi
JyIgKyAocHJvcGVydHkucHJpb3JpdHkgPyAiIGlzLWltcG9ydGFudCIgOiAiIikgKyAocHJvcGVy
dHkucGFyc2VkT2sgPyAiIiA6ICIgbm9uLXBhcnNlZCIpICsiXSBAWyIgKyBwcm9wZXJ0eS5zdGFy
dE9mZnNldCArICItIiArIHByb3BlcnR5LmVuZE9mZnNldCArICJdIik7CisgICAgfQorfQorCisK
K2Z1bmN0aW9uIGZyb250ZW5kX2xvYWRBbmREdW1wU3R5bGVTaGVldCh0ZXN0Q29udHJvbGxlciwg
c3R5bGVTaGVldElkLCBjb250aW51YXRpb24pCit7CisgICAgZnVuY3Rpb24gc3R5bGVTaGVldExv
YWRlZCh0ZXN0Q29udHJvbGxlciwgc3R5bGVTaGVldCkKKyAgICB7CisgICAgICAgIHRlc3RDb250
cm9sbGVyLnJlc3VsdHMucHVzaCgiIik7CisgICAgICAgIHRlc3RDb250cm9sbGVyLnJlc3VsdHMu
cHVzaCgiU3R5bGVTaGVldDogJyIgKyBzdHlsZVNoZWV0LnRleHQgKyAiJyIpOworICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHN0eWxlU2hlZXQuY3NzUnVsZXMubGVuZ3RoOyArK2kpCisgICAg
ICAgICAgICBmcm9udGVuZF9kdW1wUnVsZU9yU3R5bGUodGVzdENvbnRyb2xsZXIsIHN0eWxlU2hl
ZXQuY3NzUnVsZXNbaV0pOworICAgICAgICBpZiAoY29udGludWF0aW9uKQorICAgICAgICAgICAg
Y29udGludWF0aW9uKHN0eWxlU2hlZXQpOworICAgIH0KKworICAgIEluc3BlY3RvckJhY2tlbmQu
Z2V0U3R5bGVTaGVldDIoc3R5bGVTaGVldElkLCBzdHlsZVNoZWV0TG9hZGVkLmJpbmQobnVsbCwg
dGVzdENvbnRyb2xsZXIpKTsKK30KKworLyoKK0NvdmVyZWQgQVBJIG1ldGhvZHM6CisgLSBnZXRD
b21wdXRlZFN0eWxlRm9yTm9kZTIKKyAtIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyCisgLSBnZXRN
YXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMgorIC0gZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIK
KyAtIGdldEluaGVyaXRlZFN0eWxlc0Zvck5vZGUyCisgLSBnZXRJbmxpbmVTdHlsZUZvck5vZGUy
CisgLSBnZXRBbGxTdHlsZXMyCisgLSBnZXRTdHlsZVNoZWV0MgorIC0gc2V0U3R5bGVTaGVldFRl
eHQyCisgLSBzZXRTdHlsZVRleHQyCisgLSBzZXRSdWxlU2VsZWN0b3IyCisgLSBhZGRSdWxlMgor
Ki8KKworPC9zY3JpcHQ+CisKKzxzdHlsZT4KKworLyogQW4gaW5saW5lIHN0eWxlc2hlZXQgKi8K
K2JvZHkubWFpbnBhZ2UgeworICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsgLyogYXQgbGVhc3Qg
b25lIHZhbGlkIHByb3BlcnR5IGlzIG5lY2Vzc2FyeSBmb3IgV2ViQ29yZSB0byBtYXRjaCBhIHJ1
bGUgKi8KKyAgICBiYWRwcm9wZXJ0eTogMWJhZHZhbHVlMTsKK30KKworPC9zdHlsZT4KKzwvaGVh
ZD4KKworPGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIG1haW5wYWdlIiBvbmxvYWQ9Im9ubG9hZCgp
IiBzdHlsZT0iZm9udC13ZWlnaHQ6IG5vcm1hbDsgd2lkdGg6IDg1JSI+Cis8cD4KK1Rlc3RzIHRo
YXQgSW5zcGVjdG9yQ1NTQWdlbnQgQVBJIG1ldGhvZHMgd29yayBhcyBleHBlY3RlZC4KKzwvcD4K
Kzx0YWJsZSB3aWR0aD01MCUgaWQ9InRoZXRhYmxlIj4KKzwvdGFibGU+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZz
ZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9m
ZnNldHMtZXhwZWN0ZWQudHh0CmluZGV4IGU0ZDMzZDguLmJlZWM3MjggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0Cisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQu
dHh0CkBAIC0xLDYgKzEsNiBAQAogVGVzdHMgdGhhdCBwcm9wZXIgZGF0YSBhbmQgc3RhcnQvZW5k
IG9mZnNldCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1Mgc3R5bGUgZGVjbGFyYXRpb25z
IGFuZCBwcm9wZXJ0aWVzLgogCi1ib2R5OiBbNi0yNjZdCitib2R5OiBbMC00XSBbNi0yNjZdCiBb
J2ZvbnQtc2l6ZSc6JzEycHgnXSBAWzUtMjFdCiBbJ2Zvbyc6J2JhciAhCiAKQEAgLTksMTUgKzks
MTUgQEAgYm9keTogWzYtMjY2XQogWydjb2xvcnonOiciIWltcG9ydGFudCInIG5vbi1wYXJzZWRd
IEBbMTM4LTE1OV0KIFsnaW1wb3J0YW50JzonJyBub24tcGFyc2VkXSBAWzE2NC0xNzRdCiBbJ2Nv
bG9yJzonImJhZGNvbG9yIiAhIGltcG9ydGFudCAvKiBnb29kIHByb3BlcnR5IHdpdGggc3RyYW5n
ZSB2YWx1ZSAqLycgIWltcG9ydGFudF0gQFsxOTAtMjU5XQotYm9keS5tYWluMTogWzMzNy00MThd
Citib2R5Lm1haW4xOiBbMjk4LTMzNl0gWzMzNy00MThdCiBbJ2NvbG9yJzonI0YwMEJBQSddIEBb
MTMtMjhdCiBbJ3pvbyc6J21vbyAvKiBub3QgYW4gIWltcG9ydGFudCB1bnJlY29nbml6ZWQgcHJv
cGVydHkgKi8nIG5vbi1wYXJzZWRdIEBbMjgtODFdCi1ib2R5Lm1haW4yOiBbNDQ1LTU0MF0KK2Jv
ZHkubWFpbjI6IFs0MzQtNDQ0XSBbNDQ1LTU0MF0KIFsnYmFja2dyb3VuZCc6J2dyZWVuIC8qIHZh
bHVlICFpbXBvcnRhbnQgY29tbWVudCAqLyAhaW1wb3J0YW50IC8qIG5vIHNlbWljb2xvbiwgdmVy
eSAhaW1wb3J0YW50ICovJyAhaW1wb3J0YW50XSBAWzAtOTVdCi1ib2R5Lm1haW5wYWdlOiBbMTct
MTQ5XQorYm9keS5tYWlucGFnZTogWzItMTVdIFsxNy0xNDldCiBbJ3RleHQtZGVjb3JhdGlvbic6
J25vbmUnXSBAWzUtMjddCiBbJ2JhZHByb3BlcnR5JzonMWJhZHZhbHVlMScgbm9uLXBhcnNlZF0g
QFsxMDctMTMxXQotZWxlbWVudC5zdHlsZTogWzAtMzFdCitlbGVtZW50LnN0eWxlOiBbMC0wXSBb
MC0zMV0KIFsnZm9udC13ZWlnaHQnOidub3JtYWwnXSBAWzAtMjBdCiBbJ3dpZHRoJzonODAlJ10g
QFsyMS0zMV0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3Vy
Y2Utb2Zmc2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zm
c2V0cy5odG1sCmluZGV4IGZjZjkyOGYuLmI5MzE4OWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTI0LDExICsyNCw2IEBAIGZ1
bmN0aW9uIGRvaXQoKQogCiBmdW5jdGlvbiBmcm9udGVuZF9ydW5UZXN0KHRlc3RDb250cm9sbGVy
KQogewotICAgIGlmICghV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VUcmFj
a2luZ0VuYWJsZWQpIHsKLSAgICAgICAgV2ViSW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMuX3Rv
Z2dsZVJlc291cmNlVHJhY2tpbmcoKTsKLSAgICAgICAgcmV0dXJuICJyZWZyZXNoaW5nIjsKLSAg
ICB9Ci0KICAgICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CiAgICAgZnJvbnRlbmRf
ZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOwogICAgIHRl
c3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CkBAIC00
OCw3ICs0Myw3IEBAIGZ1bmN0aW9uIGZyb250ZW5kX3J1blRlc3QodGVzdENvbnRyb2xsZXIpCiBm
dW5jdGlvbiBmcm9udGVuZF9zdHlsZURhdGFSZWNlaXZlZCh0ZXN0Q29udHJvbGxlciwgcnVsZU9y
U3R5bGUsIHNob3VsZEJhaWwsIGRhdGEpCiB7CiAgICAgdmFyIGlzUnVsZSA9ICEhKHJ1bGVPclN0
eWxlLnN0eWxlKTsKLSAgICB0ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IHJ1
bGVPclN0eWxlLnNlbGVjdG9yVGV4dCA6ICJlbGVtZW50LnN0eWxlIikgKyAiOiBbIiArIGRhdGEu
Ym9keVJhbmdlLnN0YXJ0ICsgIi0iICsgZGF0YS5ib2R5UmFuZ2UuZW5kICsgIl0iKTsKKyAgICB0
ZXN0Q29udHJvbGxlci5yZXN1bHRzLnB1c2goKGlzUnVsZSA/IHJ1bGVPclN0eWxlLnNlbGVjdG9y
VGV4dCA6ICJlbGVtZW50LnN0eWxlIikgKyAiOiBbIiArIGRhdGEuc2VsZWN0b3JSYW5nZS5zdGFy
dCArICItIiArIGRhdGEuc2VsZWN0b3JSYW5nZS5lbmQgKyAiXSBbIiArIGRhdGEuYm9keVJhbmdl
LnN0YXJ0ICsgIi0iICsgZGF0YS5ib2R5UmFuZ2UuZW5kICsgIl0iKTsKICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGRhdGEucHJvcGVydHlEYXRhLmxlbmd0aDsgKytpKSB7CiAgICAgICAgIHZhciBw
cm9wZXJ0eURhdHVtID0gZGF0YS5wcm9wZXJ0eURhdGFbaV07CiAgICAgICAgIHRlc3RDb250cm9s
bGVyLnJlc3VsdHMucHVzaCgiWyciICsgcHJvcGVydHlEYXR1bS5uYW1lICsgIic6JyIgKyBwcm9w
ZXJ0eURhdHVtLnZhbHVlICsgIiciICsgKHByb3BlcnR5RGF0dW0uaW1wb3J0YW50ID8gIiAhaW1w
b3J0YW50IiA6ICIiKSArIChwcm9wZXJ0eURhdHVtLnBhcnNlZCA/ICIiIDogIiBub24tcGFyc2Vk
IikgKyJdIEBbIiArIHByb3BlcnR5RGF0dW0uc3RhcnQgKyAiLSIgKyBwcm9wZXJ0eURhdHVtLmVu
ZCArICJdIik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAppbmRleCAyMTcyNTJlLi44NmEwZTEwIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEwOTksNiAr
MTA5OSw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBpbnNwZWN0b3IvSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNhY2hlQWdlbnQu
Y3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQuY3BwCisgICAgaW5zcGVjdG9yL0lu
c3BlY3RvckNTU0FnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAK
ICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKICAgICBpbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuY3BwCkBAIC0xMTEwLDYgKzExMTEsOCBAQCBTRVQoV2ViQ29yZV9TT1VS
Q0VTCiAgICAgaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1lbnRhdGlvbi5jcHAKICAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yUHJvZmlsZXJBZ2VudC5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
UmVzb3VyY2UuY3BwCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCisgICAg
aW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9y
VmFsdWVzLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3ODlhOTBjLi41
YzViNDMyIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0KQEAgLTE3ODksNiArMTc4OSw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ2xpZW50LmggXAogCVdlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmggXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNw
cCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCBcCiAJV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJl
c291cmNlLmNwcCBcCkBAIC0xODEyLDggKzE4MTQsMTIgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKIAlXZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdG9yYWdlQWdlbnQuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAgXAorCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBcCiAJ
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAgXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRp
bGl0aWVzLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgXAogCVdl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYTE3ZjYxYy4uMjdjZjQ1OSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTE4ODcsNiArMTg4Nyw4IEBACiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckJhY2tl
bmQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwJywK
ICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oJywKKyAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwJywKKyAgICAgICAgICAgICdpbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNl
LmNwcCcsCkBAIC0xOTA4LDggKzE5MTAsMTIgQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yUmVzb3VyY2UuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3Jh
Z2VBZ2VudC5jcHAnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdl
bnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwJywK
KyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oJywKICAgICAgICAg
ICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAnLAogICAgICAgICAgICAg
J2luc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwJywKKyAgICAgICAgICAgICdpbnNwZWN0b3IvSW5z
cGVjdG9yVXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1
ZXMuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgnLAogICAg
ICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JXb3JrZXJSZXNvdXJjZS5oJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ3Njk5
MjEuLjBhMGM3NTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnBybwpAQCAtOTkwLDYgKzk5MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3Bl
Y3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQXBw
bGljYXRpb25DYWNoZUFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckJhY2tlbmQu
Y3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JEYXRhYmFzZVJlc291cmNlLmNwcCBc
CkBAIC0xMDAyLDcgKzEwMDMsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBpbnNwZWN0b3IvSW5zcGVj
dG9yUHJvZmlsZXJBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5j
cHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwIFwKKyAgICBpbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JU
aW1lbGluZUFnZW50LmNwcCBcCisgICAgaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5jcHAg
XAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwIFwKICAgICBpbnNwZWN0b3IvU2Ny
aXB0QnJlYWtwb2ludC5jcHAgXAogICAgIGluc3BlY3Rvci9UaW1lbGluZVJlY29yZEZhY3Rvcnku
Y3BwIFwKQEAgLTE4NzksNiArMTg4Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9J
bnNwZWN0b3JQcm9maWxlckFnZW50LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJj
ZS5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAorICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1l
bGluZUFnZW50LmggXAogICAgIGluc3BlY3Rvci9TY3JpcHRHQ0V2ZW50TGlzdGVuZXIuaCBcCiAg
ICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCmluZGV4IDRmODQ3YTMuLjA4MDQ3MDUgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTI1MjcsNiArNTI1MjcsMTQgQEAKIAkJCQk+DQogCQkJ
PC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3Bl
Y3RvckNTU0FnZW50LmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JDU1NBZ2VudC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
c3BlY3RvckNTU1N0b3JlLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC01MjYxOSw2ICs1
MjYyNywxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAiDQorCQkJCT4NCisJCQk8
L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVj
dG9yU3R5bGVTaGVldC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclRpbWVsaW5lQWdlbnQuY3BwIg0KIAkJ
CQk+DQogCQkJPC9GaWxlPg0KQEAgLTUyNjI3LDYgKzUyNjQzLDE0IEBACiAJCQkJPg0KIAkJCTwv
RmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0
b3JVdGlsaXRpZXMuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclV0aWxpdGllcy5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXElu
c3BlY3RvclZhbHVlcy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiODY4NDA4Li5kZGJkYWZiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTUxOSw2ICsxNTE5LDgg
QEAKIAkJODFCRTIwOTkxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZh
Y2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUy
MDk0MTFGNEFCOEQwMDkxNURGQSAvKiBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmggKi87IH07
CiAJCTgxQkUyMEQyMTFGNEJDMzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MUJFMjBBNzExRjRCNjZGMDA5
MTVERkEgLyogSlNJREJDdXJzb3IuY3BwICovOyB9OwogCQk4MUJFMjBEMzExRjRCQzMyMDA5MTVE
RkEgLyogSlNJREJDdXJzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovOyB9
OworCQk4MkFCMTc0MzEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJBQjE3NDExMjRC
OTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCAqLzsgfTsKKwkJODJBQjE3NDQx
MjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc0MjEyNEI5OUVDMDBDNTA2OUQgLyog
SW5zcGVjdG9yQ1NTQWdlbnQuaCAqLzsgfTsKIAkJODJCNjU4OTgxMTg5RTM5MjAwRTA1MkExIC8q
IEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk4MkI2
NTg5QTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTkxMTg5RTQ3NjAwRTA1
MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNwcCAqLzsgfTsKIAkJODJFM0Q4REUxMjJFQTBEMTAw
M0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkUzRDhEQzEyMkVBMEQxMDAzQUU1QkMgLyogQ1NT
UHJvcGVydHlTb3VyY2VEYXRhLmNwcCAqLzsgfTsKQEAgLTc1ODMsNiArNzU4NSw4IEBACiAJCTgx
QkUyMDlDMTFGNEFCQkQwMDkxNURGQSAvKiBJREJDdXJzb3IuaWRsICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsg
cGF0aCA9IElEQkN1cnNvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgxQkUy
MEE3MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0lEQkN1cnNvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgxQkUyMEE4MTFGNEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0lEQkN1cnNvci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4MkFCMTc0MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4MkFCMTc0MjEyNEI5
OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zcGVjdG9yQ1NTQWdlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNTU1N0b3JlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgyQjY1ODk5MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNw
ZWN0b3JDU1NTdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJ
bnNwZWN0b3JDU1NTdG9yZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTgyRTNE
OERDMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMTA0LDYgKzEyMTA4LDggQEAKIAkJCQkx
QzgxQjk1ODBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ2xpZW50LmggKi8sCiAJCQkJMUM4
MUI5NTcwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwICovLAogCQkJ
CTFDODFCOTU2MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmggKi8sCisJ
CQkJODJBQjE3NDExMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCAqLywK
KwkJCQk4MkFCMTc0MjEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCAqLywK
IAkJCQk4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUuY3BwICov
LAogCQkJCTgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oICov
LAogCQkJCTQxRjA2MjEzMEY1RjE5MjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JEYXRhYmFzZVJlc291
cmNlLmNwcCAqLywKQEAgLTE5NTQ4LDYgKzE5NTU0LDcgQEAKIAkJCQk0RjcwN0E5QTExRUY2Nzk0
MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFDODFCOTVDMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTFDODFCOTVBMEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk4MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5z
cGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTgyQjY1ODk4MTE4OUUzOTIwMEUw
NTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDFGMDYyMTQw
RjVGMTkyNjAwQTA3RUFDIC8qIEluc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUYzM0YwNTNFMTIwQjBEQTUwMEU1NzQzQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTIyMTAzLDYgKzIyMTEwLDcgQEAKIAkJCQk3QTc0RUNC
QTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9yQmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk0RjcwN0E5OTExRUY2Nzk0MDBBQ0RBNjkgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM4MUI5NUIwRTk3MzMwODAwMjY2RTA3IC8qIElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODJBQjE3NDMxMjRCOTlF
QzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgy
QjY1ODlBMTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk0MUYwNjIxNTBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGMzNGMDUzRDEyMEIwREE1MDBFNTc0M0Eg
LyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRl
eCBjNTVmOTk4Li5jMDEzOWEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkK
KysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC00MDgsNyArNDA4LDkgQEAgcnVsZV9s
aXN0OgogIDsKIAogdmFsaWRfcnVsZToKLSAgICBydWxlc2V0CisgICAgYmVmb3JlX3J1bGVzZXQg
cnVsZXNldCB7CisgICAgICAgICQkID0gJDI7CisgICAgfQogICB8IG1lZGlhCiAgIHwgcGFnZQog
ICB8IGZvbnRfZmFjZQpAQCAtOTEwLDggKzkxMiwyMiBAQCBtYXliZV9zcGFjZV9iZWZvcmVfZGVj
bGFyYXRpb246CiAgICAgfQogICA7CiAKK2JlZm9yZV9ydWxlc2V0OgorICAgIC8qIGVtcHR5ICov
IHsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2Vy
KTsKKyAgICAgICAgcC0+bWFya1NlbGVjdG9yTGlzdFN0YXJ0KCk7CisgICAgfQorICA7CisKK2Jl
Zm9yZV9ydWxlX29wZW5pbmdfYnJhY2U6CisgICAgLyogZW1wdHkgKi8geworICAgICAgICBDU1NQ
YXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICBwLT5t
YXJrU2VsZWN0b3JMaXN0RW5kKCk7CisgICAgfQorICA7CisKIHJ1bGVzZXQ6Ci0gICAgc2VsZWN0
b3JfbGlzdCAneycgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9uX2xp
c3QgY2xvc2luZ19icmFjZSB7CisgICAgc2VsZWN0b3JfbGlzdCBiZWZvcmVfcnVsZV9vcGVuaW5n
X2JyYWNlICd7JyBtYXliZV9zcGFjZV9iZWZvcmVfZGVjbGFyYXRpb24gZGVjbGFyYXRpb25fbGlz
dCBjbG9zaW5nX2JyYWNlIHsKICAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NT
UGFyc2VyKj4ocGFyc2VyKTsKICAgICAgICAgJCQgPSBwLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCmluZGV4IDZjMjExMGYuLjQyYzRjYjEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAt
MTQzLDEyICsxNDMsMTEgQEAgQ1NTUGFyc2VyOjpDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5n
KQogICAgICwgbV9oYXNGb250RmFjZU9ubHlWYWx1ZXMoZmFsc2UpCiAgICAgLCBtX2hhZFN5bnRh
Y3RpY2FsbHlWYWxpZENTU1J1bGUoZmFsc2UpCiAgICAgLCBtX2RlZmF1bHROYW1lc3BhY2Uoc3Rh
ckF0b20pCi0gICAgLCBtX3J1bGVCb2R5U3RhcnRPZmZzZXQoMCkKLSAgICAsIG1fcnVsZUJvZHlF
bmRPZmZzZXQoMCkKLSAgICAsIG1fcHJvcGVydHlTdGFydE9mZnNldChVSU5UX01BWCkKLSAgICAs
IG1fcHJvcGVydHlFbmRPZmZzZXQoVUlOVF9NQVgpCisgICAgLCBtX3NlbGVjdG9yTGlzdFJhbmdl
KDAsIDApCisgICAgLCBtX3J1bGVCb2R5UmFuZ2UoMCwgMCkKKyAgICAsIG1fcHJvcGVydHlSYW5n
ZShVSU5UX01BWCwgVUlOVF9NQVgpCiAgICAgLCBtX3J1bGVSYW5nZU1hcCgwKQotICAgICwgbV9j
dXJyZW50U3R5bGVEYXRhKDApCisgICAgLCBtX2N1cnJlbnRSdWxlRGF0YSgwKQogICAgICwgbV9k
YXRhKDApCiAgICAgLCB5eV9zdGFydCgxKQogICAgICwgbV9saW5lTnVtYmVyKDApCkBAIC0yMjgs
MTQgKzIyNywxNyBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBz
aGVldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCBzdGFydAogICAgIG1fc3R5bGVTaGVldCA9
IHNoZWV0OwogICAgIG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUg
ZGVmYXVsdCBuYW1lc3BhY2UuCiAgICAgbV9ydWxlUmFuZ2VNYXAgPSBydWxlUmFuZ2VNYXA7Ci0g
ICAgaWYgKHJ1bGVSYW5nZU1hcCkKKyAgICBpZiAocnVsZVJhbmdlTWFwKSB7CisgICAgICAgIG1f
Y3VycmVudFJ1bGVEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICBt
X2N1cnJlbnRTdHlsZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgIH0K
IAogICAgIG1fbGluZU51bWJlciA9IHN0YXJ0TGluZU51bWJlcjsKICAgICBzZXR1cFBhcnNlcigi
Iiwgc3RyaW5nLCAiIik7CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAgICBtX3J1bGVSYW5nZU1h
cCA9IDA7CiAgICAgbV9jdXJyZW50U3R5bGVEYXRhID0gMDsKKyAgICBtX2N1cnJlbnRSdWxlRGF0
YSA9IDA7CiAgICAgbV9ydWxlID0gMDsKIH0KIApAQCAtMzYzLDggKzM2NSw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNs
YXJhdGlvbiwgY29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghbV9ydWxlUmFuZ2VN
YXApCi0gICAgICAgIG1fY3VycmVudFN0eWxlRGF0YSA9IDA7CisgICAgbV9jdXJyZW50U3R5bGVE
YXRhID0gMDsKICAgICByZXR1cm4gb2s7CiB9CiAKQEAgLTU0ODUsMTIgKzU0ODYsMTYgQEAgQ1NT
UnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9yPENTU1NlbGVjdG9yKj4qIHNl
bGVjdG9ycykKICAgICAgICAgcmVzdWx0ID0gcnVsZS5nZXQoKTsKICAgICAgICAgbV9wYXJzZWRT
dHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAgICAgICAgaWYgKG1fcnVsZVJh
bmdlTWFwKSB7Ci0gICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50U3R5bGVEYXRhKTsKLSAgICAg
ICAgICAgIG1fY3VycmVudFN0eWxlRGF0YS0+c3R5bGVCb2R5UmFuZ2UgPSBTb3VyY2VSYW5nZSht
X3J1bGVCb2R5U3RhcnRPZmZzZXQsIG1fcnVsZUJvZHlFbmRPZmZzZXQpOwotICAgICAgICAgICAg
bV9ydWxlUmFuZ2VNYXAtPnNldChyZXN1bHQsIG1fY3VycmVudFN0eWxlRGF0YS5yZWxlYXNlKCkp
OworICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudFN0eWxlRGF0YSAmJiBtX2N1cnJlbnRSdWxl
RGF0YSk7CisgICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnN0eWxlQm9keVJhbmdlID0g
bV9ydWxlQm9keVJhbmdlOworICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlID0gbV9zZWxlY3Rvckxpc3RSYW5nZTsKKyAgICAgICAgICAgIG1fY3VycmVudFJ1
bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEgPSBtX2N1cnJlbnRTdHlsZURhdGEucmVsZWFzZSgpOwor
ICAgICAgICAgICAgbV9ydWxlUmFuZ2VNYXAtPnNldChyZXN1bHQsIG1fY3VycmVudFJ1bGVEYXRh
LnJlbGVhc2UoKSk7CiAgICAgICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEgPSBDU1NTdHlsZVNv
dXJjZURhdGE6OmNyZWF0ZSgpOworICAgICAgICAgICAgbV9jdXJyZW50UnVsZURhdGEgPSBDU1NS
dWxlU291cmNlRGF0YTo6Y3JlYXRlKCk7CiAgICAgICAgIH0KICAgICB9CisgICAgcmVzZXRTZWxl
Y3Rvckxpc3RNYXJrcygpOwogICAgIHJlc2V0UnVsZUJvZHlNYXJrcygpOwogICAgIGNsZWFyUHJv
cGVydGllcygpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC01NzM5LDI2ICs1NzQ0LDQ0IEBAIHZv
aWQgQ1NTUGFyc2VyOjp1cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKQogICAgIG1h
cmtSdWxlQm9keVN0YXJ0KCk7CiB9CiAKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0
U3RhcnQoKQoreworICAgIG1fc2VsZWN0b3JMaXN0UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2Rh
dGE7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU2VsZWN0b3JMaXN0RW5kKCkKK3sKKyAgICBp
ZiAoIW1fY3VycmVudFJ1bGVEYXRhKQorICAgICAgICByZXR1cm47CisgICAgVUNoYXIqIGxpc3RF
bmQgPSB5eXRleHQ7CisgICAgd2hpbGUgKGxpc3RFbmQgPiBtX2RhdGEgKyAxKSB7CisgICAgICAg
IGlmIChpc0NTU1doaXRlc3BhY2UoKihsaXN0RW5kIC0gMSkpKQorICAgICAgICAgICAgLS1saXN0
RW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgbV9zZWxl
Y3Rvckxpc3RSYW5nZS5lbmQgPSBsaXN0RW5kIC0gbV9kYXRhOworfQorCiB2b2lkIENTU1BhcnNl
cjo6bWFya1J1bGVCb2R5U3RhcnQoKQogewogICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAt
IG1fZGF0YTsKICAgICBpZiAoKnl5dGV4dCA9PSAneycpCiAgICAgICAgICsrb2Zmc2V0OyAvLyBT
a2lwIHRoZSBydWxlIGJvZHkgb3BlbmluZyBicmFjZS4KLSAgICBpZiAob2Zmc2V0ID4gbV9ydWxl
Qm9keVN0YXJ0T2Zmc2V0KQotICAgICAgICBtX3J1bGVCb2R5U3RhcnRPZmZzZXQgPSBvZmZzZXQ7
CisgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5zdGFydCkKKyAgICAgICAgbV9ydWxl
Qm9keVJhbmdlLnN0YXJ0ID0gb2Zmc2V0OwogfQogCiB2b2lkIENTU1BhcnNlcjo6bWFya1J1bGVC
b2R5RW5kKCkKIHsKICAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7Ci0gICAg
aWYgKG9mZnNldCA+IG1fcnVsZUJvZHlFbmRPZmZzZXQpCi0gICAgICAgIG1fcnVsZUJvZHlFbmRP
ZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKG9mZnNldCA+IG1fcnVsZUJvZHlSYW5nZS5lbmQpCisg
ICAgICAgIG1fcnVsZUJvZHlSYW5nZS5lbmQgPSBvZmZzZXQ7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
OjptYXJrUHJvcGVydHlTdGFydCgpCiB7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0g
bV9kYXRhOwotICAgIG1fcHJvcGVydHlTdGFydE9mZnNldCA9IG9mZnNldDsKKyAgICBtX3Byb3Bl
cnR5UmFuZ2Uuc3RhcnQgPSB5eXRleHQgLSBtX2RhdGE7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpt
YXJrUHJvcGVydHlFbmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJz
ZWQpCkBAIC01NzY2LDExICs1Nzg5LDExIEBAIHZvaWQgQ1NTUGFyc2VyOjptYXJrUHJvcGVydHlF
bmQoYm9vbCBpc0ltcG9ydGFudEZvdW5kLCBib29sIGlzUHJvcGVydHlQYXJzZWQpCiAgICAgdW5z
aWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOwogICAgIGlmICgqeXl0ZXh0ID09ICc7Jykg
Ly8gSW5jbHVkZSBzZW1pY29sb24gaW50byB0aGUgcHJvcGVydHkgdGV4dC4KICAgICAgICAgKytv
ZmZzZXQ7Ci0gICAgbV9wcm9wZXJ0eUVuZE9mZnNldCA9IG9mZnNldDsKLSAgICBpZiAobV9wcm9w
ZXJ0eVN0YXJ0T2Zmc2V0ICE9IFVJTlRfTUFYICYmIG1fY3VycmVudFN0eWxlRGF0YSkgeworICAg
IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBvZmZzZXQ7CisgICAgaWYgKG1fcHJvcGVydHlSYW5nZS5z
dGFydCAhPSBVSU5UX01BWCAmJiBtX2N1cnJlbnRTdHlsZURhdGEpIHsKICAgICAgICAgLy8gVGhp
cyBzdHVmZiBpcyBvbmx5IGV4ZWN1dGVkIHdoZW4gdGhlIHN0eWxlIGRhdGEgcmV0cmlldmFsIGlz
IHJlcXVlc3RlZCBieSBjbGllbnQuCi0gICAgICAgIGNvbnN0IHVuc2lnbmVkIHN0YXJ0ID0gbV9w
cm9wZXJ0eVN0YXJ0T2Zmc2V0OwotICAgICAgICBjb25zdCB1bnNpZ25lZCBlbmQgPSBtX3Byb3Bl
cnR5RW5kT2Zmc2V0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzdGFydCA9IG1fcHJvcGVydHlS
YW5nZS5zdGFydDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgZW5kID0gbV9wcm9wZXJ0eVJhbmdl
LmVuZDsKICAgICAgICAgQVNTRVJUKHN0YXJ0IDwgZW5kKTsKICAgICAgICAgU3RyaW5nIHByb3Bl
cnR5U3RyaW5nID0gU3RyaW5nKG1fZGF0YSArIHN0YXJ0LCBlbmQgLSBzdGFydCkuc3RyaXBXaGl0
ZVNwYWNlKCk7CiAgICAgICAgIGlmIChwcm9wZXJ0eVN0cmluZy5lbmRzV2l0aCgiOyIsIHRydWUp
KQpAQCAtNTc4Myw3ICs1ODA2LDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChi
b29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCkKICAgICAgICAgU3Ry
aW5nIHZhbHVlID0gcHJvcGVydHlTdHJpbmcuc3Vic3RyaW5nKGNvbG9uSW5kZXggKyAxLCBwcm9w
ZXJ0eVN0cmluZy5sZW5ndGgoKSkuc3RyaXBXaGl0ZVNwYWNlKCk7CiAgICAgICAgIC8vIFRoZSBw
cm9wZXJ0eSByYW5nZSBpcyByZWxhdGl2ZSB0byB0aGUgZGVjbGFyYXRpb24gc3RhcnQgb2Zmc2V0
LgogICAgICAgICBtX2N1cnJlbnRTdHlsZURhdGEtPnByb3BlcnR5RGF0YS5hcHBlbmQoCi0gICAg
ICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEobmFtZSwgdmFsdWUsIGlzSW1wb3J0YW50Rm91
bmQsIGlzUHJvcGVydHlQYXJzZWQsIFNvdXJjZVJhbmdlKG1fcHJvcGVydHlTdGFydE9mZnNldCAt
IG1fcnVsZUJvZHlTdGFydE9mZnNldCwgbV9wcm9wZXJ0eUVuZE9mZnNldCAtIG1fcnVsZUJvZHlT
dGFydE9mZnNldCkpKTsKKyAgICAgICAgICAgIENTU1Byb3BlcnR5U291cmNlRGF0YShuYW1lLCB2
YWx1ZSwgaXNJbXBvcnRhbnRGb3VuZCwgaXNQcm9wZXJ0eVBhcnNlZCwgU291cmNlUmFuZ2Uoc3Rh
cnQgLSBtX3J1bGVCb2R5UmFuZ2Uuc3RhcnQsIGVuZCAtIG1fcnVsZUJvZHlSYW5nZS5zdGFydCkp
KTsKICAgICB9CiAgICAgcmVzZXRQcm9wZXJ0eU1hcmtzKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGY4YjI0
ZGYuLjU4Zjc3ZTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yNDEsMTggKzI0MSwyMSBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1lc3BhY2U7CiAKICAgICAg
ICAgLy8gdG9rZW5pemVyIG1ldGhvZHMgYW5kIGRhdGEKLSAgICAgICAgdW5zaWduZWQgbV9ydWxl
Qm9keVN0YXJ0T2Zmc2V0OwotICAgICAgICB1bnNpZ25lZCBtX3J1bGVCb2R5RW5kT2Zmc2V0Owot
ICAgICAgICB1bnNpZ25lZCBtX3Byb3BlcnR5U3RhcnRPZmZzZXQ7Ci0gICAgICAgIHVuc2lnbmVk
IG1fcHJvcGVydHlFbmRPZmZzZXQ7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fc2VsZWN0b3JMaXN0
UmFuZ2U7CisgICAgICAgIFNvdXJjZVJhbmdlIG1fcnVsZUJvZHlSYW5nZTsKKyAgICAgICAgU291
cmNlUmFuZ2UgbV9wcm9wZXJ0eVJhbmdlOwogICAgICAgICBTdHlsZVJ1bGVSYW5nZU1hcCogbV9y
dWxlUmFuZ2VNYXA7CiAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IG1fY3VycmVu
dFN0eWxlRGF0YTsKKyAgICAgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBtX2N1cnJlbnRS
dWxlRGF0YTsKKyAgICAgICAgdm9pZCBtYXJrU2VsZWN0b3JMaXN0U3RhcnQoKTsKKyAgICAgICAg
dm9pZCBtYXJrU2VsZWN0b3JMaXN0RW5kKCk7CiAgICAgICAgIHZvaWQgbWFya1J1bGVCb2R5U3Rh
cnQoKTsKICAgICAgICAgdm9pZCBtYXJrUnVsZUJvZHlFbmQoKTsKICAgICAgICAgdm9pZCBtYXJr
UHJvcGVydHlTdGFydCgpOwogICAgICAgICB2b2lkIG1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1w
b3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7Ci0gICAgICAgIHZvaWQgcmVzZXRS
dWxlQm9keU1hcmtzKCkgeyBtX3J1bGVCb2R5U3RhcnRPZmZzZXQgPSBtX3J1bGVCb2R5RW5kT2Zm
c2V0ID0gMDsgfQotICAgICAgICB2b2lkIHJlc2V0UHJvcGVydHlNYXJrcygpIHsgbV9wcm9wZXJ0
eVN0YXJ0T2Zmc2V0ID0gbV9wcm9wZXJ0eUVuZE9mZnNldCA9IFVJTlRfTUFYOyB9CisgICAgICAg
IHZvaWQgcmVzZXRTZWxlY3Rvckxpc3RNYXJrcygpIHsgbV9zZWxlY3Rvckxpc3RSYW5nZS5zdGFy
dCA9IG1fc2VsZWN0b3JMaXN0UmFuZ2UuZW5kID0gMDsgfQorICAgICAgICB2b2lkIHJlc2V0UnVs
ZUJvZHlNYXJrcygpIHsgbV9ydWxlQm9keVJhbmdlLnN0YXJ0ID0gbV9ydWxlQm9keVJhbmdlLmVu
ZCA9IDA7IH0KKyAgICAgICAgdm9pZCByZXNldFByb3BlcnR5TWFya3MoKSB7IG1fcHJvcGVydHlS
YW5nZS5zdGFydCA9IG1fcHJvcGVydHlSYW5nZS5lbmQgPSBVSU5UX01BWDsgfQogICAgICAgICBp
bnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAgICAgICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9r
OyB9CiAgICAgICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgYi9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eVNvdXJjZURhdGEuY3BwCmluZGV4IDE2MjgwMzEuLmViOWMyYzEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUHJv
cGVydHlTb3VyY2VEYXRhLmNwcApAQCAtNTQsMTMgKzU0LDYgQEAgU291cmNlUmFuZ2U6OlNvdXJj
ZVJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQpCiB7CiB9CiAKLVNvdXJjZVJhbmdl
JiBTb3VyY2VSYW5nZTo6b3BlcmF0b3I9KGNvbnN0IFNvdXJjZVJhbmdlJiBvdGhlcikKLXsKLSAg
ICB0aGlzLT5zdGFydCA9IG90aGVyLnN0YXJ0OwotICAgIHRoaXMtPmVuZCA9IG90aGVyLmVuZDsK
LSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KIENTU1Byb3BlcnR5U291cmNlRGF0YTo6Q1NTUHJvcGVy
dHlTb3VyY2VEYXRhKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgYm9v
bCBpbXBvcnRhbnQsIGJvb2wgcGFyc2VkT2ssIGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSkKICAg
ICA6IG5hbWUobmFtZSkKICAgICAsIHZhbHVlKHZhbHVlKQpAQCAtODgsMTYgKzgxLDYgQEAgQ1NT
UHJvcGVydHlTb3VyY2VEYXRhOjpDU1NQcm9wZXJ0eVNvdXJjZURhdGEoKQogewogfQogCi1DU1NQ
cm9wZXJ0eVNvdXJjZURhdGEmIENTU1Byb3BlcnR5U291cmNlRGF0YTo6b3BlcmF0b3I9KGNvbnN0
IENTU1Byb3BlcnR5U291cmNlRGF0YSYgb3RoZXIpCi17Ci0gICAgbmFtZSA9IG90aGVyLm5hbWU7
Ci0gICAgdmFsdWUgPSBvdGhlci52YWx1ZTsKLSAgICBpbXBvcnRhbnQgPSBvdGhlci5pbXBvcnRh
bnQ7Ci0gICAgcGFyc2VkT2sgPSBvdGhlci5wYXJzZWRPazsKLSAgICByYW5nZSA9IG90aGVyLnJh
bmdlOwotICAgIHJldHVybiAqdGhpczsKLX0KLQogU3RyaW5nIENTU1Byb3BlcnR5U291cmNlRGF0
YTo6dG9TdHJpbmcoKSBjb25zdAogewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBl
bXB0eVZhbHVlLCAoImUiKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eVNv
dXJjZURhdGEuaCBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCmluZGV4IGJl
YWU5ZDAuLmRiODBkNDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNl
RGF0YS5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5U291cmNlRGF0YS5oCkBAIC00NCw3
ICs0NCw2IEBAIGNsYXNzIENTU1N0eWxlUnVsZTsKIHN0cnVjdCBTb3VyY2VSYW5nZSB7CiAgICAg
U291cmNlUmFuZ2UoKTsKICAgICBTb3VyY2VSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQg
ZW5kKTsKLSAgICBTb3VyY2VSYW5nZSYgb3BlcmF0b3I9KGNvbnN0IFNvdXJjZVJhbmdlJiBvdGhl
cik7CiAKICAgICB1bnNpZ25lZCBzdGFydDsKICAgICB1bnNpZ25lZCBlbmQ7CkBAIC01Niw5ICs1
NSw3IEBAIHN0cnVjdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEgewogICAgIENTU1Byb3BlcnR5U291
cmNlRGF0YShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUsIGJvb2wgaW1w
b3J0YW50LCBib29sIHBhcnNlZE9rLCBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UpOwogICAgIENT
U1Byb3BlcnR5U291cmNlRGF0YShjb25zdCBDU1NQcm9wZXJ0eVNvdXJjZURhdGEmIG90aGVyKTsK
ICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEoKTsKLSAgICBBTFdBWVNfSU5MSU5FIH5DU1NQcm9w
ZXJ0eVNvdXJjZURhdGEoKSB7IH0KIAotICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSYgb3BlcmF0
b3I9KGNvbnN0IENTU1Byb3BlcnR5U291cmNlRGF0YSYgb3RoZXIpOwogICAgIFN0cmluZyB0b1N0
cmluZygpIGNvbnN0OwogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIApAQCAtODMsNyArODAs
MTggQEAgc3RydWN0IENTU1N0eWxlU291cmNlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1N0
eWxlU291cmNlRGF0YT4gewogICAgIFNvdXJjZVJhbmdlIHN0eWxlQm9keVJhbmdlOwogICAgIFZl
Y3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+IHByb3BlcnR5RGF0YTsKIH07Ci10eXBlZGVmIEhh
c2hNYXA8Q1NTU3R5bGVSdWxlKiwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gPiBTdHlsZVJ1
bGVSYW5nZU1hcDsKKworc3RydWN0IENTU1J1bGVTb3VyY2VEYXRhIDogcHVibGljIFJlZkNvdW50
ZWQ8Q1NTUnVsZVNvdXJjZURhdGE+IHsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDU1NSdWxlU291
cmNlRGF0YT4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
UnVsZVNvdXJjZURhdGEoKSk7CisgICAgfQorCisgICAgLy8gUmFuZ2Ugb2YgdGhlIHNlbGVjdG9y
IGxpc3QgaW4gdGhlIGVuY2xvc2luZyBzb3VyY2UuCisgICAgU291cmNlUmFuZ2Ugc2VsZWN0b3JM
aXN0UmFuZ2U7CisgICAgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4gc3R5bGVTb3VyY2VEYXRh
OworfTsKK3R5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+ID4gU3R5bGVSdWxlUmFuZ2VNYXA7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvckluc3BlY3Rvci5wbSBi
L1dlYkNvcmUvaW5zcGVjdG9yL0NvZGVHZW5lcmF0b3JJbnNwZWN0b3IucG0KaW5kZXggODBlMjQz
Yi4uMmY1ZjQxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvQ29kZUdlbmVyYXRvcklu
c3BlY3Rvci5wbQorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9Db2RlR2VuZXJhdG9ySW5zcGVjdG9y
LnBtCkBAIC0zMyw2ICszMywxMSBAQCAkdHlwZVRyYW5zZm9ybXsiRE9NIn0gPSB7CiAgICAgImhl
YWRlciIgPT4gIkluc3BlY3RvckRPTUFnZW50LmgiLAogICAgICJkb21haW5BY2Nlc3NvciIgPT4g
Im1faW5zcGVjdG9yQ29udHJvbGxlci0+ZG9tQWdlbnQoKSIsCiB9OworJHR5cGVUcmFuc2Zvcm17
IkNTUyJ9ID0geworICAgICJmb3J3YXJkIiA9PiAiSW5zcGVjdG9yQ1NTQWdlbnQiLAorICAgICJo
ZWFkZXIiID0+ICJJbnNwZWN0b3JDU1NBZ2VudC5oIiwKKyAgICAiZG9tYWluQWNjZXNzb3IiID0+
ICJtX2luc3BlY3RvckNvbnRyb2xsZXItPmNzc0FnZW50KCkiLAorfTsKICR0eXBlVHJhbnNmb3Jt
eyJBcHBsaWNhdGlvbkNhY2hlIn0gPSB7CiAgICAgImZvcndhcmQiID0+ICJJbnNwZWN0b3JBcHBs
aWNhdGlvbkNhY2hlQWdlbnQiLAogICAgICJoZWFkZXIiID0+ICJJbnNwZWN0b3JBcHBsaWNhdGlv
bkNhY2hlQWdlbnQuaCIsCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3Iu
aWRsIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCBhMDhhNjIyLi5mYTUx
MjM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwKQEAgLTE5MSw3ICsxOTEsMjUgQEAgbW9kdWxl
IGNvcmUgewogICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgdG9nZ2xlU3R5bGVFbmFibGVkKGlu
IGxvbmcgc3R5bGVJZCwgaW4gU3RyaW5nIHByb3BlcnR5TmFtZSwgaW4gYm9vbGVhbiBkaXNhYmxl
ZCwgb3V0IFZhbHVlIHN0eWxlKTsKICAgICAgICAgW2hhbmRsZXI9RE9NXSB2b2lkIHNldFJ1bGVT
ZWxlY3RvcihpbiBsb25nIHJ1bGVJZCwgaW4gU3RyaW5nIHNlbGVjdG9yLCBpbiBsb25nIHNlbGVj
dGVkTm9kZUlkLCBvdXQgVmFsdWUgcnVsZSwgb3V0IGJvb2xlYW4gc2VsZWN0b3JBZmZlY3RzTm9k
ZSk7CiAgICAgICAgIFtoYW5kbGVyPURPTV0gdm9pZCBhZGRSdWxlKGluIFN0cmluZyBzZWxlY3Rv
ciwgaW4gbG9uZyBzZWxlY3RlZE5vZGVJZCwgb3V0IFZhbHVlIHJ1bGUsIG91dCBib29sZWFuIHNl
bGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAgICBbaGFuZGxlcj1ET01dIHZvaWQgZ2V0U3VwcG9y
dGVkQ1NTUHJvcGVydGllcyhvdXQgQXJyYXkgY3NzUHJvcGVydGllcyk7CisKKyAgICAgICAgLy8g
R2V0IGFsbCBzdHlsZXMgYXBwbGljYWJsZSB0byB0aGUgZ2l2ZW4gbm9kZS4KKyAgICAgICAgW2hh
bmRsZXI9Q1NTXSB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwg
b3V0IFZhbHVlIHN0eWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldE1hdGNoZWRS
dWxlc0Zvck5vZGUyKGluIGxvbmcgbm9kZUlkLCBvdXQgQXJyYXkgcnVsZXMpOworICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgZ2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIoaW4gbG9uZyBu
b2RlSWQsIG91dCBBcnJheSBydWxlcyk7IC8vIGFycmF5IG9mIHsgcHNldWRvSWQ6IDxudW1iZXI+
LCBydWxlczogYXJyYXkgb2YgI2Nzc1J1bGUgfQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQg
Z2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBWYWx1ZSBzdHls
ZXMpOyAvLyBtYXA6IGF0dHJpYnV0ZU5hbWU6ICNjc3NTdHlsZQorICAgICAgICBbaGFuZGxlcj1D
U1NdIHZvaWQgZ2V0SW5oZXJpdGVkU3R5bGVzRm9yTm9kZTIoaW4gbG9uZyBub2RlSWQsIG91dCBB
cnJheSByZXN1bHQpOyAvLyBhcnJheSBvZiB7IGlubGluZVN0eWxlOiAjY3NzU3R5bGUsIG1hdGNo
ZWRDU1NSdWxlczogYXJyYXkgb2YgI2Nzc1J1bGUgfQorICAgICAgICBbaGFuZGxlcj1DU1NdIHZv
aWQgZ2V0SW5saW5lU3R5bGVGb3JOb2RlMihpbiBsb25nIG5vZGVJZCwgb3V0IFZhbHVlIHN0eWxl
KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldEFsbFN0eWxlczIob3V0IEFycmF5IHN0
eWxlU2hlZXRJZHMpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQgZ2V0U3R5bGVTaGVldDIo
aW4gU3RyaW5nIHN0eWxlU2hlZXRJZCwgb3V0IFZhbHVlIHN0eWxlU2hlZXQpOworICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgc2V0U3R5bGVTaGVldFRleHQyKGluIFN0cmluZyBzdHlsZVNoZWV0
SWQsIGluIFN0cmluZyB0ZXh0KTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIHNldFN0eWxl
VGV4dDIoaW4gU3RyaW5nIHN0eWxlSWQsIGluIFN0cmluZyB0ZXh0LCBvdXQgVmFsdWUgc3R5bGUp
OworCisgICAgICAgIC8vIEVuYWJsZS9kaXNhYmxlIHByb3BlcnR5LiBbbW9kZWxdCisgICAgICAg
IC8vIFNob3VsZCBiZSBzZW50IGluIGEgYmF0Y2ggYmVmb3JlIHNldFN0eWxlVGV4dCgpIChzbyB0
aGF0IG5vdGhpbmcgY2FuIGhhcHBlbiBiZXR3ZWVuIHRoZSB0d28gY2FsbHMpLgorICAgICAgICBb
aGFuZGxlcj1DU1NdIHZvaWQgdG9nZ2xlUHJvcGVydHkyKGluIFN0cmluZyBzdHlsZUlkLCBpbiBs
b25nIHByb3BlcnR5T3JkaW5hbCwgaW4gYm9vbGVhbiBkaXNhYmxlZCk7CisgICAgICAgIFtoYW5k
bGVyPUNTU10gdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGluIFN0cmluZyBydWxlSWQsIGluIFN0cmlu
ZyBzZWxlY3Rvciwgb3V0IFZhbHVlIHJ1bGUpOworICAgICAgICBbaGFuZGxlcj1DU1NdIHZvaWQg
YWRkUnVsZTIoaW4gbG9uZyBjb250ZXh0Tm9kZUlkLCBpbiBTdHJpbmcgc2VsZWN0b3IsIG91dCBW
YWx1ZSBydWxlKTsKKyAgICAgICAgW2hhbmRsZXI9Q1NTXSB2b2lkIGdldFN1cHBvcnRlZENTU1By
b3BlcnRpZXMob3V0IEFycmF5IGNzc1Byb3BlcnRpZXMpOwogCiAgICAgICAgIFtoYW5kbGVyPUNv
bnRyb2xsZXJdIHZvaWQgZ2V0Q29va2llcyhvdXQgQXJyYXkgY29va2llcywgb3V0IFN0cmluZyBj
b29raWVzU3RyaW5nKTsKICAgICAgICAgW2hhbmRsZXI9Q29udHJvbGxlcl0gdm9pZCBkZWxldGVD
b29raWUoaW4gU3RyaW5nIGNvb2tpZU5hbWUsIGluIFN0cmluZyBkb21haW4pOwpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQ5MGMwNGQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5jcHAKQEAgLTAsMCArMSw2NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTQWdlbnQuaCIKKworI2lmIEVO
QUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNp
bmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJD
U1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkhUTUxI
ZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAi
SW5zcGVjdG9yRnJvbnRlbmQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JVdGlsaXRpZXMuaCIKKyNp
bmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKKyNpbmNsdWRlICJOb2RlLmgiCisjaW5jbHVkZSAi
U3R5bGVTaGVldExpc3QuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL0xpc3RIYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworCisvLyBjc3NQcm9wZXJ0eSA9IHsKKy8vICAgIG5hbWUgICAg
ICAgICAgOiA8c3RyaW5nPiwKKy8vICAgIHZhbHVlICAgICAgICAgOiA8c3RyaW5nPiwKKy8vICAg
IHByaW9yaXR5ICAgICAgOiA8c3RyaW5nPiwgLy8gIiIgZm9yIG5vbi1wYXJzZWRPayBwcm9wZXJ0
aWVzCisvLyAgICBpbXBsaWNpdCAgICAgIDogPGJvb2xlYW4+LAorLy8gICAgcGFyc2VkT2sgICAg
ICA6IDxib29sZWFuPiwgLy8gd2hldGhlciBwcm9wZXJ0eSBpcyB1bmRlcnN0b29kIGJ5IFdlYkNv
cmUKKy8vICAgIHN0YXR1cyAgICAgICAgOiA8c3RyaW5nPiwgLy8gImRpc2FibGVkIiB8ICJhY3Rp
dmUiIHwgImluYWN0aXZlIiB8ICJzdHlsZSIKKy8vICAgIHNob3J0aGFuZE5hbWUgOiA8c3RyaW5n
PiwKKy8vICAgIHN0YXJ0T2Zmc2V0ICAgOiA8bnVtYmVyPiwgLy8gT3B0aW9uYWwgLSBwcm9wZXJ0
eSB0ZXh0IHN0YXJ0IG9mZnNldCBpbiBlbmNsb3Npbmcgc3R5bGUgZGVjbGFyYXRpb24uIEFic2Vu
dCBmb3IgY29tcHV0ZWQgc3R5bGVzIGFuZCBzdWNoLgorLy8gICAgZW5kT2Zmc2V0ICAgICA6IDxu
dW1iZXI+LCAvLyBPcHRpb25hbCAtIHByb3BlcnR5IHRleHQgZW5kIG9mZnNldCBpbiBlbmNsb3Np
bmcgc3R5bGUgZGVjbGFyYXRpb24uIEFic2VudCBmb3IgY29tcHV0ZWQgc3R5bGVzIGFuZCBzdWNo
LgorLy8gfQorLy8KKy8vIHN0YXR1czoKKy8vICJkaXNhYmxlZCIgPT0gcHJvcGVydHkgZGlzYWJs
ZWQgYnkgdXNlcgorLy8gImFjdGl2ZSIgPT0gcHJvcGVydHkgcGFydGljaXBhdGVzIGluIHRoZSBj
b21wdXRlZCBzdHlsZSBjYWxjdWxhdGlvbgorLy8gImluYWN0aXZlIiA9PSBwcm9wZXJ0eSBkb2Vz
IG5vIHBhcnRpY2lwYXRlIGluIHRoZSBjb21wdXRlZCBzdHlsZSBjYWxjdWxhdGlvbiAoaS5lLiBv
dmVycmlkZGVuIGJ5IGEgc3Vic2VxdWVudCBwcm9wZXJ0eSB3aXRoIHRoZSBzYW1lIG5hbWUpCisv
LyAic3R5bGUiID09IHByb3BlcnR5IGlzIGFjdGl2ZSBhbmQgb3JpZ2luYXRlcyBmcm9tIHRoZSBX
ZWJDb3JlIENTU1N0eWxlRGVjbGFyYXRpb24gcmF0aGVyIHRoYW4gQ1NTIHNvdXJjZSBjb2RlIChl
LmcuIGltcGxpY2l0IGxvbmdoYW5kIHByb3BlcnRpZXMpCisvLworLy8KKy8vIGNzc1N0eWxlID0g
eworLy8gICAgc3R5bGVJZCAgICAgICAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsCisvLyAgICBz
dHlsZVNoZWV0SWQgICAgOiA8bnVtYmVyPiwgLy8gUGFyZW50OiAtMSBmb3IgaW5saW5lIHN0eWxl
cyAoPGZvbyBzdHlsZT0iLi4iPikKKy8vICAgIGNzc1Byb3BlcnRpZXMgICA6IFsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAjY3NzUHJvcGVydHksCisvLyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLi4uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1Byb3BlcnR5CisvLyAg
ICAgICAgICAgICAgICAgICAgXSwKKy8vICAgIHNob3J0aGFuZFZhbHVlcyA6IHsKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMSA6IHNob3J0aGFuZFZhbHVlMSwKKy8v
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydGhhbmROYW1lMiA6IHNob3J0aGFuZFZhbHVl
MgorLy8gICAgICAgICAgICAgICAgICAgICAgfSwKKy8vICAgIGNzc1RleHQgICAgICAgICA6IDxz
dHJpbmc+LCAvLyBkZWNsYXJhdGlvbiB0ZXh0CisvLyAgICBwcm9wZXJ0aWVzICAgICAgOiB7IH0g
Ly8gPz8/CisvLyB9CisvLworLy8gLy8gVE9ETzoKKy8vIC8vIC0gY29udmVydCBkaXNhYmxlZFBy
b3BlcnRpZXMgdG8gZW5hYmxlZCBmbGFnLgorLy8gLy8gLSBjb252ZXJ0IHdpZHRoLCBoZWlnaHQg
dG8gcHJvcGVydGllcworLy8KKy8vIGNzc1J1bGUgPSB7CisvLyAgICBydWxlSWQgICAgICAgOiA8
bnVtYmVyPiwKKy8vICAgIHNlbGVjdG9yVGV4dCA6IDxzdHJpbmc+CisvLyAgICBzb3VyY2VVUkwg
ICAgOiA8c3RyaW5nPgorLy8gICAgc291cmNlTGluZSAgIDogPHN0cmluZz4KKy8vICAgIHN0eWxl
U2hlZXRJZCA6IDxudW1iZXI+IC8vIGFsc28gZm91bmQgaW4gc3R5bGUKKy8vICAgIG9yaWdpbiAg
ICAgICA6IDxzdHJpbmc+IC8vICIiIHx8ICJ1c2VyLWFnZW50IiB8fCAidXNlciIgfHwgImluc3Bl
Y3RvciIKKy8vICAgIHN0eWxlICAgICAgICA6ICNjc3NTdHlsZQorLy8gfQorLy8KKy8vIC8vIFRP
RE86CisvLyAvLyAtIGZpeCBvcmlnaW4KKy8vIC8vIC0gYWRkIHNvdXJjZVVSTAorLy8gLy8gLSBm
aXggcGFyZW50U3R5bGVTaGVldElkCisvLworLy8gY3NzU3R5bGVTaGVldCA9IHsKKy8vICAgIHN0
eWxlU2hlZXRJZCAgIDogPG51bWJlcj4KKy8vICAgIGhyZWYgICAgICAgICAgIDogPHN0cmluZz4K
Ky8vICAgIHRpdGxlICAgICAgICAgIDogPHN0cmluZz4KKy8vICAgIGRpc2FibGVkICAgICAgIDog
PGJvb2xlYW4+CisvLyAgICBkb2N1bWVudE5vZGVJZCA6IDxudW1iZXI+CisvLyAgICBydWxlcyAg
ICAgICAgICA6IFsKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NSdWxlLAorLy8gICAg
ICAgICAgICAgICAgICAgICAgICAgLi4uCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAjY3Nz
UnVsZQorLy8gICAgICAgICAgICAgICAgICAgICBdCisvLyB9CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gc3RhdGljCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yQ1NT
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNv
bnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSogc291cmNlRGF0YSkK
K3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6
OmNyZWF0ZSgpOworICAgIGlmICghZnVsbFN0eWxlSWQuaXNFbXB0eSgpKQorICAgICAgICByZXN1
bHQtPnNldFN0cmluZygiaWQiLCBmdWxsU3R5bGVJZCk7CisKKyAgICByZXN1bHQtPnNldFN0cmlu
Zygid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7CisgICAgcmVzdWx0
LT5zZXRTdHJpbmcoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7
CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSA9IDA7CisK
KyAgICBpZiAoc291cmNlRGF0YSkgeworICAgICAgICByZXN1bHQtPnNldE51bWJlcigic3RhcnRP
ZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7CisgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKCJlbmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5lbmQp
OworICAgICAgICBwcm9wZXJ0eURhdGEgPSAmc291cmNlRGF0YS0+cHJvcGVydHlEYXRhOworICAg
IH0KKyAgICBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdC5n
ZXQoKSwgcHJvcGVydHlEYXRhKTsKKworICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworfQor
CisvLyBzdGF0aWMKK0NTU1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpwYXJlbnRTdHls
ZVNoZWV0KFN0eWxlQmFzZSogc3R5bGVCYXNlKQoreworICAgIGlmICghc3R5bGVCYXNlKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZUJhc2Ut
PnN0eWxlc2hlZXQoKTsKKyAgICBpZiAoc3R5bGVTaGVldCAmJiBzdHlsZVNoZWV0LT5pc0NTU1N0
eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihz
dHlsZVNoZWV0KTsKKworICAgIHJldHVybiAwOworfQorCisvLyBzdGF0aWMKK0NTU1N0eWxlUnVs
ZSogSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKFN0eWxlQmFzZSogc3R5bGVCYXNl
KQoreworICAgIGlmICghc3R5bGVCYXNlLT5pc1N0eWxlUnVsZSgpKQorICAgICAgICByZXR1cm4g
MDsKKyAgICBDU1NSdWxlKiBydWxlID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlQmFzZSk7
CisgICAgaWYgKHJ1bGUtPnR5cGUoKSAhPSBDU1NSdWxlOjpTVFlMRV9SVUxFKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocnVsZSk7Cit9
CisKKworSW5zcGVjdG9yQ1NTQWdlbnQ6Okluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckZyb250
ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KQorICAgIDogbV9mcm9u
dGVuZChmcm9udGVuZCkKKyAgICAsIG1fZG9tQWdlbnQoZG9tQWdlbnQpCisgICAgLCBtX2xhc3RT
dHlsZVNoZWV0SWQoMSkKKyAgICAsIG1fbGFzdFJ1bGVJZCgxKQorICAgICwgbV9sYXN0U3R5bGVJ
ZCgxKQoreworICAgIG1fZG9tQWdlbnQtPnNldERPTUxpc3RlbmVyKHRoaXMpOworfQorCitJbnNw
ZWN0b3JDU1NBZ2VudDo6fkluc3BlY3RvckNTU0FnZW50KCkKK3sKKyAgICByZXNldCgpOworfQor
Cit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpyZXNldCgpCit7CisgICAgbV9kb21BZ2VudC0+c2V0
RE9NTGlzdGVuZXIoMCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldE1hdGNoZWRS
dWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQp
Cit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlm
ICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2Vs
ZWN0b3IgPSBlbGVtZW50LT5vd25lckRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKKyAgICBS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9y
RWxlbWVudChlbGVtZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgKnJlc3VsdCA9IGJ1aWxkQXJyYXlG
b3JSdWxlTGlzdChtYXRjaGVkUnVsZXMuZ2V0KCkpOworfQorCit2b2lkIEluc3BlY3RvckNTU0Fn
ZW50OjpnZXRNYXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPElu
c3BlY3RvckFycmF5PiogcmVzdWx0KQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50
Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9yID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCk7CisgICAgZm9yIChQc2V1ZG9JZCBwc2V1ZG9JZCA9IEZJUlNUX1BVQkxJ
Q19QU0VVRE9JRDsgcHNldWRvSWQgPCBBRlRFUl9MQVNUX0lOVEVSTkFMX1BTRVVET0lEOyBwc2V1
ZG9JZCA9IHN0YXRpY19jYXN0PFBzZXVkb0lkPihwc2V1ZG9JZCArIDEpKSB7CisgICAgICAgIFJl
ZlB0cjxDU1NSdWxlTGlzdD4gbWF0Y2hlZFJ1bGVzID0gc2VsZWN0b3ItPnBzZXVkb1N0eWxlUnVs
ZXNGb3JFbGVtZW50KGVsZW1lbnQsIHBzZXVkb0lkLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIGlm
IChtYXRjaGVkUnVsZXMgJiYgbWF0Y2hlZFJ1bGVzLT5sZW5ndGgoKSkgeworICAgICAgICAgICAg
UmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcHNldWRvU3R5bGVzID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+c2V0TnVtYmVyKCJwc2V1ZG9JZCIs
IHN0YXRpY19jYXN0PGludD4ocHNldWRvSWQpKTsKKyAgICAgICAgICAgIHBzZXVkb1N0eWxlcy0+
c2V0QXJyYXkoInJ1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KG1hdGNoZWRSdWxlcy5nZXQo
KSkpOworICAgICAgICAgICAgKCpyZXN1bHQpLT5wdXNoT2JqZWN0KHBzZXVkb1N0eWxlcy5yZWxl
YXNlKCkpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZh
bHVlPiogcmVzdWx0KQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9k
ZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgICpyZXN1bHQg
PSBidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KTsKK30KKwordm9pZCBJbnNw
ZWN0b3JDU1NBZ2VudDo6Z2V0SW5saW5lU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRy
PEluc3BlY3RvclZhbHVlPiogc3R5bGUpCit7CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1l
bnRGb3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBzdHlsZVNoZWV0ID0gYXNJbnNw
ZWN0b3JTdHlsZVNoZWV0KGVsZW1lbnQpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgKnN0eWxlID0gc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShl
bGVtZW50LT5zdHlsZSgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0Q29tcHV0
ZWRTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHls
ZSkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAg
aWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBET01XaW5kb3cqIGRlZmF1bHRW
aWV3ID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOworICAgIGlmICgh
ZGVmYXVsdFZpZXcpCisgICAgICAgIHJldHVybjsKKworICAgICpzdHlsZSA9IGJ1aWxkT2JqZWN0
Rm9yU3R5bGUoZGVmYXVsdFZpZXctPmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCwgIiIpLmdldCgp
LCAiIik7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldEluaGVyaXRlZFN0eWxlc0Zv
ck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZSkKK3sKKyAg
ICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7CisgICAgaWYgKCFlbGVt
ZW50KSB7CisgICAgICAgICpzdHlsZSA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGluaGVyaXRlZFN0
eWxlcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBFbGVtZW50KiBwYXJlbnRFbGVt
ZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIHdoaWxlIChwYXJlbnRFbGVtZW50
KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHBhcmVudFN0eWxlID0gSW5zcGVj
dG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKHBhcmVudEVsZW1lbnQtPnN0eWxlKCkg
JiYgcGFyZW50RWxlbWVudC0+c3R5bGUoKS0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIEluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9yU3R5
bGVTaGVldChlbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0KQorICAgICAgICAg
ICAgICAgIHBhcmVudFN0eWxlLT5zZXRPYmplY3QoImlubGluZVN0eWxlIiwgc3R5bGVTaGVldC0+
YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZVNoZWV0LT5zdHlsZUZvcklkKCIwIikpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIENTU1N0eWxlU2VsZWN0b3IqIHBhcmVudFNlbGVjdG9yID0gcGFyZW50
RWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgICAgIFJlZlB0
cjxDU1NSdWxlTGlzdD4gcGFyZW50TWF0Y2hlZFJ1bGVzID0gcGFyZW50U2VsZWN0b3ItPnN0eWxl
UnVsZXNGb3JFbGVtZW50KHBhcmVudEVsZW1lbnQsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgcGFy
ZW50U3R5bGUtPnNldEFycmF5KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yUnVsZUxp
c3QocGFyZW50TWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgICAgIGluaGVyaXRlZFN0eWxlcy0+
cHVzaE9iamVjdChwYXJlbnRTdHlsZS5yZWxlYXNlKCkpOworICAgICAgICBwYXJlbnRFbGVtZW50
ID0gcGFyZW50RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIH0KKyAgICAqc3R5bGUgPSBp
bmhlcml0ZWRTdHlsZXMucmVsZWFzZSgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50Ojpn
ZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcykKK3sKKyAgICBjb25z
dCBMaXN0SGFzaFNldDxSZWZQdHI8RG9jdW1lbnQ+ID4mIGRvY3VtZW50cyA9IGRvbUFnZW50KCkt
PmRvY3VtZW50cygpOworICAgIGZvciAoTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IGRvY3VtZW50cy5iZWdpbigpOyBpdCAhPSBkb2N1bWVudHMuZW5k
KCk7ICsraXQpIHsKKyAgICAgICAgU3R5bGVTaGVldExpc3QqIGxpc3QgPSAoKml0KS0+c3R5bGVT
aGVldHMoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxpc3QtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBsaXN0LT5pdGVt
KGkpOworICAgICAgICAgICAgaWYgKHN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKSB7Cisg
ICAgICAgICAgICAgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9
IGJpbmRTdHlsZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzdHlsZVNoZWV0KSk7
CisgICAgICAgICAgICAgICAgKCpzdHlsZXMpLT5wdXNoU3RyaW5nKGluc3BlY3RvclN0eWxlU2hl
ZXQtPmlkKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIElu
c3BlY3RvckNTU0FnZW50OjpnZXRTdHlsZVNoZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJ
ZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVTaGVldE9iamVjdCkKK3sKKyAgICBJbnNw
ZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gc3R5bGVTaGVldEZvcklkKHN0
eWxlU2hlZXRJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1
cm47CisKKyAgICAqc3R5bGVTaGVldE9iamVjdCA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGVTaGVldCgpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRT
dHlsZVNoZWV0VGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYg
dGV4dCkKK3sKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
c3R5bGVTaGVldEZvcklkKHN0eWxlU2hlZXRJZCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNo
ZWV0KQorICAgICAgICByZXR1cm47CisKKyAgICBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRUZXh0
KHRleHQpOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpzZXRTdHlsZVRleHQyKGNvbnN0
IFN0cmluZyYgZnVsbFN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiogcmVzdWx0KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7CisgICAgZnVs
bFN0eWxlSWQuc3BsaXQoJzonLCBpZFBhcnRzKTsKKyAgICBBU1NFUlQoaWRQYXJ0cy5zaXplKCkg
PT0gMik7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0ID0g
c3R5bGVTaGVldEZvcklkKGlkUGFydHMuYXQoMCkpOworICAgIGlmICghaW5zcGVjdG9yU3R5bGVT
aGVldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0LT5z
ZXRTdHlsZVRleHQoaWRQYXJ0cy5hdCgxKSwgdGV4dCkpCisgICAgICAgIHJldHVybjsKKworICAg
ICpyZXN1bHQgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVjdEZvclN0eWxlKGluc3Bl
Y3RvclN0eWxlU2hlZXQtPnN0eWxlRm9ySWQoaWRQYXJ0cy5hdCgxKSkpOworfQorCit2b2lkIElu
c3BlY3RvckNTU0FnZW50Ojp0b2dnbGVQcm9wZXJ0eTIoY29uc3QgU3RyaW5nJiwgbG9uZywgYm9v
bCkKK3sKKyAgICAvLyBGSVhNRShhcGF2bG92KTogaW1wbGVtZW50Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OnNldFJ1bGVTZWxlY3RvcjIoY29uc3QgU3RyaW5nJiBmdWxsUnVsZUlkLCBj
b25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7
CisgICAgVmVjdG9yPFN0cmluZz4gaWRQYXJ0czsKKyAgICBmdWxsUnVsZUlkLnNwbGl0KCc6Jywg
aWRQYXJ0cyk7CisgICAgQVNTRVJUKGlkUGFydHMuc2l6ZSgpID09IDIpOworCisgICAgSW5zcGVj
dG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChpZFBh
cnRzLmF0KDApKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNvbnN0IFN0cmluZyYgcnVsZUlkID0gaWRQYXJ0cy5hdCgxKTsKKyAgICBib29s
IHN1Y2Nlc3MgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5zZXRSdWxlU2VsZWN0b3IocnVsZUlkLCBz
ZWxlY3Rvcik7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm47CisKKyAgICAqcmVz
dWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKGluc3BlY3RvclN0
eWxlU2hlZXQtPnJ1bGVGb3JJZChydWxlSWQpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVj
dG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpCit7CisgICAgTm9kZSogbm9kZSA9
IGRvbUFnZW50KCktPm5vZGVGb3JJZChjb250ZXh0Tm9kZUlkKTsKKyAgICBpZiAoIW5vZGUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxl
U2hlZXQgPSB2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KG5vZGUtPmRvY3VtZW50KCksIHRydWUpOwor
ICAgIENTU1N0eWxlUnVsZSogbmV3UnVsZSA9IGluc3BlY3RvclN0eWxlU2hlZXQtPmFkZFJ1bGUo
c2VsZWN0b3IpOworICAgIGlmIChuZXdSdWxlKQorICAgICAgICAqcmVzdWx0ID0gaW5zcGVjdG9y
U3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKG5ld1J1bGUpOworfQorCit2b2lkIEluc3Bl
Y3RvckNTU0FnZW50OjpnZXRTdXBwb3J0ZWRDU1NQcm9wZXJ0aWVzKFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIGNzc1Byb3BlcnRpZXMpCit7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBwcm9w
ZXJ0aWVzID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQorICAgICAgICBwcm9wZXJ0aWVzLT5wdXNoU3RyaW5n
KHByb3BlcnR5TmFtZVN0cmluZ3NbaV0pOworCisgICAgKmNzc1Byb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzLnJlbGVhc2UoKTsKK30KKworLy8gc3RhdGljCitFbGVtZW50KiBJbnNwZWN0b3JDU1NBZ2Vu
dDo6aW5saW5lU3R5bGVFbGVtZW50KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAg
IGlmICghc3R5bGUgfHwgIXN0eWxlLT5pc011dGFibGVTdHlsZURlY2xhcmF0aW9uKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIE5vZGUqIG5vZGUgPSBzdGF0aWNfY2FzdDxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbio+KHN0eWxlKS0+bm9kZSgpOworICAgIGlmICghbm9kZSB8fCAhbm9kZS0+
aXNTdHlsZWRFbGVtZW50KCkgfHwgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG5vZGUpLT5n
ZXRJbmxpbmVTdHlsZURlY2woKSAhPSBzdHlsZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKK30KKworLy8gc3RhdGljCit2b2lkIElu
c3BlY3RvckNTU0FnZW50Ojpwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUsIEluc3BlY3Rvck9iamVjdCogcmVzdWx0LCBWZWN0b3I8Q1NT
UHJvcGVydHlTb3VyY2VEYXRhPiogcHJvcGVydHlEYXRhKQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBzaG9ydGhhbmRWYWx1ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNy
ZWF0ZSgpOworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiA+IHBy
b3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eTsKKyAgICBIYXNoU2V0PFN0cmluZz4g
Zm91bmRTaG9ydGhhbmRzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBzb3VyY2VQcm9wZXJ0eU5hbWVz
OworICAgIGlmIChwcm9wZXJ0eURhdGEpIHsKKyAgICAgICAgZm9yIChWZWN0b3I8Q1NTUHJvcGVy
dHlTb3VyY2VEYXRhPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0eURhdGEtPmJlZ2luKCk7
IGl0ICE9IHByb3BlcnR5RGF0YS0+ZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5U291cmNlRGF0YSYgcHJvcGVydHlFbnRyeSA9ICppdDsKKyAgICAgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHByb3BlcnR5ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICAgICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOworICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBuYW1lID0gcHJvcGVydHlFbnRyeS5uYW1lOworICAgICAgICAg
ICAgc291cmNlUHJvcGVydHlOYW1lcy5hZGQobmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+
c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5n
KCJ2YWx1ZSIsIHByb3BlcnR5RW50cnkudmFsdWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygicHJpb3JpdHkiLCBwcm9wZXJ0eUVudHJ5LmltcG9ydGFudCA/ICJpbXBvcnRhbnQi
IDogIiIpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic3RhdHVzIiwgImFjdGl2
ZSIpOworICAgICAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBhcnNlZE9rIiwgcHJvcGVy
dHlFbnRyeS5wYXJzZWRPayk7CisgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0TnVtYmVyKCJzdGFy
dE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgcHJvcGVy
dHktPnNldE51bWJlcigiZW5kT2Zmc2V0IiwgcHJvcGVydHlFbnRyeS5yYW5nZS5lbmQpOworICAg
ICAgICAgICAgaWYgKHByb3BlcnR5RW50cnkucGFyc2VkT2spIHsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
U3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChuYW1lKTsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwgc2hvcnRo
YW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNob3J0aGFuZC5pc0VtcHR5KCkgJiYgIWZvdW5k
U2hvcnRoYW5kcy5jb250YWlucyhzaG9ydGhhbmQpKSB7CisgICAgICAgICAgICAgICAgICAgIGZv
dW5kU2hvcnRoYW5kcy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgICAgICAgICAgc2hvcnRo
YW5kVmFsdWVzLT5zZXRTdHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hv
cnRoYW5kKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9y
T2JqZWN0PiA+OjppdGVyYXRvciBhY3RpdmVJdCA9IHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3Rp
dmVQcm9wZXJ0eS5maW5kKG5hbWUpOworICAgICAgICAgICAgaWYgKGFjdGl2ZUl0ICE9IHByb3Bl
cnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQcm9wZXJ0eS5lbmQoKSkgeworICAgICAgICAgICAgICAg
IGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic3RhdHVzIiwgImluYWN0aXZlIik7CisgICAg
ICAgICAgICAgICAgYWN0aXZlSXQtPnNlY29uZC0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1lIiwg
IiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJvcGVydHlOYW1lVG9QcmV2aW91c0Fj
dGl2ZVByb3BlcnR5LnNldChuYW1lLCBwcm9wZXJ0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKGludCBpID0gMCwgc2l6ZSA9IHN0eWxlLT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkg
eworICAgICAgICBTdHJpbmcgbmFtZSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoc291
cmNlUHJvcGVydHlOYW1lcy5jb250YWlucyhuYW1lKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIHNvdXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgIHByb3BlcnRpZXMtPnB1c2hPYmplY3QocHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJuYW1lIiwgbmFtZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmco
InZhbHVlIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUobmFtZSkpOworICAgICAgICBwcm9wZXJ0
eS0+c2V0U3RyaW5nKCJwcmlvcml0eSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KCJuYW1l
IikpOworICAgICAgICBwcm9wZXJ0eS0+c2V0Qm9vbGVhbigiaW1wbGljaXQiLCBzdHlsZS0+aXNQ
cm9wZXJ0eUltcGxpY2l0KG5hbWUpKTsKKyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oInBh
cnNlZE9rIiwgdHJ1ZSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJz
dHlsZSIpOworICAgICAgICBTdHJpbmcgc2hvcnRoYW5kID0gc3R5bGUtPmdldFByb3BlcnR5U2hv
cnRoYW5kKG5hbWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzaG9ydGhhbmROYW1l
Iiwgc2hvcnRoYW5kKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3Vu
ZFNob3J0aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgZm91bmRTaG9y
dGhhbmRzLmFkZChzaG9ydGhhbmQpOworICAgICAgICAgICAgc2hvcnRoYW5kVmFsdWVzLT5zZXRT
dHJpbmcoc2hvcnRoYW5kLCBzaG9ydGhhbmRWYWx1ZShzdHlsZSwgc2hvcnRoYW5kKSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICByZXN1bHQtPnNldEFycmF5KCJwcm9wZXJ0aWVzIiwgcHJvcGVy
dGllcyk7CisgICAgcmVzdWx0LT5zZXRPYmplY3QoInNob3J0aGFuZFZhbHVlcyIsIHNob3J0aGFu
ZFZhbHVlcyk7Cit9CisKKy8vIHN0YXRpYworU3RyaW5nIEluc3BlY3RvckNTU0FnZW50OjpzaG9y
dGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgU3RyaW5nJiBzaG9y
dGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlW
YWx1ZShzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgaWYgKHZhbHVlLmlzRW1wdHkoKSkgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAg
ICAgICAgICAgIFN0cmluZyBpbmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAg
ICAgICAgICAgIGlmIChzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQoaW5kaXZpZHVhbFByb3Bl
cnR5KSAhPSBzaG9ydGhhbmRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChzdHlsZS0+aXNQcm9wZXJ0eUltcGxpY2l0KGluZGl2aWR1YWxQcm9wZXJ0
eSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBTdHJpbmcgaW5kaXZp
ZHVhbFZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoaW5kaXZpZHVhbFByb3BlcnR5KTsK
KyAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsVmFsdWUgPT0gImluaXRpYWwiKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCgpKQorICAgICAg
ICAgICAgICAgIHZhbHVlLmFwcGVuZCgiICIpOworICAgICAgICAgICAgdmFsdWUuYXBwZW5kKGlu
ZGl2aWR1YWxWYWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfQor
CisvLyBzdGF0aWMKK1N0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6c2hvcnRoYW5kUHJpb3JpdHko
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVy
dHkpCit7CisgICAgU3RyaW5nIHByaW9yaXR5ID0gc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHko
c2hvcnRoYW5kUHJvcGVydHkpOworICAgIGlmIChwcmlvcml0eS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAg
ICAgICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAg
ICAgICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0
eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KGluZGl2aWR1YWxQ
cm9wZXJ0eSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gcHJpb3JpdHk7Cit9CisKKworLy8gc3RhdGljCitWZWN0b3I8U3RyaW5nPiBJbnNwZWN0b3JD
U1NBZ2VudDo6bG9uZ2hhbmRQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBj
b25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQoreworICAgIFZlY3RvcjxTdHJpbmc+IHBy
b3BlcnRpZXM7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgc3R5bGUtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgU3Ry
aW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICBpZiAoZm91
bmRQcm9wZXJ0aWVzLmNvbnRhaW5zKGluZGl2aWR1YWxQcm9wZXJ0eSkgfHwgc3R5bGUtPmdldFBy
b3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkgIT0gc2hvcnRoYW5kUHJvcGVydHkp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3VuZFByb3BlcnRpZXMuYWRkKGlu
ZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAgICAgIHByb3BlcnRpZXMuYXBwZW5kKGluZGl2aWR1YWxQ
cm9wZXJ0eSk7CisgICAgfQorICAgIHJldHVybiBwcm9wZXJ0aWVzOworfQorCitJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIEluc3BlY3RvckNTU0FnZW50Ojphc0luc3BlY3RvclN0
eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0TWFwOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5kKGVs
ZW1lbnQpOworICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZW5kKCkp
IHsKKyAgICAgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBlbGVtZW50LT5pc1N0eWxl
ZEVsZW1lbnQoKSA/IGVsZW1lbnQtPnN0eWxlKCkgOiAwOworICAgICAgICBpZiAoIXN0eWxlKQor
ICAgICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAgICAgU3RyaW5nIG5ld1N0eWxlU2hlZXRJZCA9
IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJZCsrKTsKKyAgICAgICAgUmVmUHRyPElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gaW5zcGVjdG9yU3R5bGVTaGVldCA9IElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6Y3JlYXRlKG5ld1N0eWxlU2hlZXRJZCwg
ZWxlbWVudCwgIiIpOworICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChuZXdT
dHlsZVNoZWV0SWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAgICBtX25vZGVUb0luc3Bl
Y3RvclN0eWxlU2hlZXQuc2V0KGVsZW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgICAg
ICByZXR1cm4gaW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
aXQtPnNlY29uZC5nZXQoKTsKK30KKworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmVsZW1l
bnRGb3JJZChsb25nIG5vZGVJZCkKK3sKKyAgICBOb2RlKiBub2RlID0gZG9tQWdlbnQoKS0+bm9k
ZUZvcklkKG5vZGVJZCk7CisgICAgcmV0dXJuICghbm9kZSB8fCBub2RlLT5ub2RlVHlwZSgpICE9
IE5vZGU6OkVMRU1FTlRfTk9ERSkgPyAwIDogc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpOwor
fQorCitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6YmluZFN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVldCA9IG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9y
U3R5bGVTaGVldC5nZXQoc3R5bGVTaGVldCk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0
KSB7CisgICAgICAgIFN0cmluZyBpZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0eWxlU2hlZXRJ
ZCsrKTsKKyAgICAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNyZWF0ZShpZCwgc3R5bGVTaGVldCwgZGV0ZWN0T3JpZ2luKHN0eWxlU2hlZXQsIHN0eWxlU2hl
ZXQtPmRvY3VtZW50KCkpLCBkb21BZ2VudCgpLT5kb2N1bWVudFVSTFN0cmluZyhzdHlsZVNoZWV0
LT5kb2N1bWVudCgpKSk7CisgICAgICAgIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuc2V0KGlk
LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9jc3NTdHlsZVNoZWV0VG9JbnNwZWN0
b3JTdHlsZVNoZWV0LnNldChzdHlsZVNoZWV0LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICB9
CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7Cit9CisKK0luc3BlY3RvclN0
eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50Ojp2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCkKK3sKKyAgICBpZiAoIWRvY3VtZW50
KSB7CisgICAgICAgIEFTU0VSVCghY3JlYXRlSWZBYnNlbnQpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVT
aGVldCA9IG1fZG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXQuZ2V0KGRvY3VtZW50KTsKKyAg
ICBpZiAoaW5zcGVjdG9yU3R5bGVTaGVldCB8fCAhY3JlYXRlSWZBYnNlbnQpCisgICAgICAgIHJl
dHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LT5jcmVhdGVF
bGVtZW50KCJzdHlsZSIsIGVjKTsKKyAgICBpZiAoIWVjKQorICAgICAgICBzdHlsZUVsZW1lbnQt
PnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0L2NzcyIsIGVjKTsKKyAgICBpZiAoIWVjKQorICAg
ICAgICBkb2N1bWVudC0+aGVhZCgpLT5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQsIGVjKTsKKyAg
ICBpZiAoZWMpCisgICAgICAgIHJldHVybiAwOworICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNo
ZWV0cyA9IGRvY3VtZW50LT5zdHlsZVNoZWV0cygpOworICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQgPSBzdHlsZVNoZWV0cy0+aXRlbShzdHlsZVNoZWV0cy0+bGVuZ3RoKCkgLSAxKTsKKyAgICBp
ZiAoIXN0eWxlU2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBDU1NTdHlsZVNoZWV0KiBjc3NTdHlsZVNoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KHN0eWxlU2hlZXQpOworICAgIFN0cmluZyBpZCA9IFN0cmluZzo6bnVtYmVyKG1fbGFzdFN0
eWxlU2hlZXRJZCsrKTsKKyAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gSW5zcGVjdG9yU3R5bGVT
aGVldDo6Y3JlYXRlKGlkLCBjc3NTdHlsZVNoZWV0LCAiaW5zcGVjdG9yIiwgZG9tQWdlbnQoKS0+
ZG9jdW1lbnRVUkxTdHJpbmcoZG9jdW1lbnQpKTsKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0LnNldChpZCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CisgICAgbV9jc3NTdHlsZVNoZWV0VG9J
bnNwZWN0b3JTdHlsZVNoZWV0LnNldChjc3NTdHlsZVNoZWV0LCBpbnNwZWN0b3JTdHlsZVNoZWV0
KTsKKyAgICBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChkb2N1bWVudCwgaW5z
cGVjdG9yU3R5bGVTaGVldCk7CisgICAgcmV0dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7
Cit9CisKK0luc3BlY3RvclN0eWxlU2hlZXQqIEluc3BlY3RvckNTU0FnZW50OjpzdHlsZVNoZWV0
Rm9ySWQoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQpCit7CisgICAgSWRUb0luc3BlY3RvclN0
eWxlU2hlZXRNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5maW5k
KHN0eWxlU2hlZXRJZCk7CisgICAgcmV0dXJuIGl0ID09IG1faWRUb0luc3BlY3RvclN0eWxlU2hl
ZXQuZW5kKCkgPyAwIDogaXQtPnNlY29uZC5nZXQoKTsKK30KKworU3RyaW5nIEluc3BlY3RvckNT
U0FnZW50OjpkZXRlY3RPcmlnaW4oQ1NTU3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQsIERvY3Vt
ZW50KiBvd25lckRvY3VtZW50KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCB1
c2VyQWdlbnQsICgidXNlci1hZ2VudCIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmlu
ZywgdXNlciwgKCJ1c2VyIikpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBpbnNw
ZWN0b3IsICgiaW5zcGVjdG9yIikpOworCisgICAgU3RyaW5nIG9yaWdpbigiIik7CisgICAgaWYg
KHBhZ2VTdHlsZVNoZWV0ICYmICFwYWdlU3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFnZVN0
eWxlU2hlZXQtPmhyZWYoKS5pc0VtcHR5KCkpCisgICAgICAgIG9yaWdpbiA9IHVzZXJBZ2VudDsK
KyAgICBlbHNlIGlmIChwYWdlU3R5bGVTaGVldCAmJiBwYWdlU3R5bGVTaGVldC0+b3duZXJOb2Rl
KCkgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5ub2RlTmFtZSgpID09ICIjZG9jdW1l
bnQiKQorICAgICAgICBvcmlnaW4gPSB1c2VyOworICAgIGVsc2UgeworICAgICAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiB2aWFJbnNwZWN0b3JTdHlsZVNoZWV0Rm9yT3duZXIgPSB2aWFJbnNwZWN0
b3JTdHlsZVNoZWV0KG93bmVyRG9jdW1lbnQsIGZhbHNlKTsKKyAgICAgICAgaWYgKHZpYUluc3Bl
Y3RvclN0eWxlU2hlZXRGb3JPd25lciAmJiBwYWdlU3R5bGVTaGVldCA9PSB2aWFJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9yT3duZXItPnBhZ2VTdHlsZVNoZWV0KCkpCisgICAgICAgICAgICBvcmlnaW4g
PSBpbnNwZWN0b3I7CisgICAgfQorICAgIHJldHVybiBvcmlnaW47Cit9CisKK1Bhc3NSZWZQdHI8
SW5zcGVjdG9yQXJyYXk+IEluc3BlY3RvckNTU0FnZW50OjpidWlsZEFycmF5Rm9yUnVsZUxpc3Qo
Q1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcmVz
dWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlmICghcnVsZUxpc3QpCisgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
c2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBDU1NT
dHlsZVJ1bGUqIHJ1bGUgPSBhc0NTU1N0eWxlUnVsZShydWxlTGlzdC0+aXRlbShpKSk7CisgICAg
ICAgIGlmICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBiaW5kU3R5bGVTaGVldChwYXJlbnRTdHlsZVNoZWV0
KHJ1bGUpKTsKKyAgICAgICAgaWYgKHN0eWxlU2hlZXQpCisgICAgICAgICAgICByZXN1bHQtPnB1
c2hPYmplY3Qoc3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUpKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxl
bWVudCogZWxlbWVudCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzdHlsZUF0dHJp
YnV0ZXMgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIE5hbWVkTm9kZU1hcCogYXR0
cmlidXRlcyA9IGVsZW1lbnQtPmF0dHJpYnV0ZXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBhdHRyaWJ1dGVzICYmIGkgPCBhdHRyaWJ1dGVzLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKKyAg
ICAgICAgaWYgKGF0dHJpYnV0ZS0+c3R5bGUoKSkgeworICAgICAgICAgICAgU3RyaW5nIGF0dHJp
YnV0ZU5hbWUgPSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgpOworICAgICAgICAgICAgc3R5bGVBdHRy
aWJ1dGVzLT5zZXRPYmplY3QoYXR0cmlidXRlTmFtZS51dGY4KCkuZGF0YSgpLCBidWlsZE9iamVj
dEZvclN0eWxlKGF0dHJpYnV0ZS0+c3R5bGUoKSwgIiIpKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiBzdHlsZUF0dHJpYnV0ZXM7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6
OmRpZFJlbW92ZURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBtX2RvY3VtZW50
VG9JbnNwZWN0b3JTdHlsZVNoZWV0LnJlbW92ZShkb2N1bWVudCk7Cit9CisKK3ZvaWQgSW5zcGVj
dG9yQ1NTQWdlbnQ6OmRpZFJlbW92ZURPTU5vZGUoTm9kZSogbm9kZSkKK3sKKyAgICBOb2RlVG9J
bnNwZWN0b3JTdHlsZVNoZWV0TWFwOjppdGVyYXRvciBpdCA9IG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5maW5kKG5vZGUpOworICAgIGlmIChpdCA9PSBtX25vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXQuZW5kKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faWRUb0luc3BlY3RvclN0eWxl
U2hlZXQucmVtb3ZlKGl0LT5zZWNvbmQtPmlkKCkpOworICAgIG1fbm9kZVRvSW5zcGVjdG9yU3R5
bGVTaGVldC5yZW1vdmUobm9kZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NBZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGI0MTQxCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuaApAQCAtMCwwICsx
LDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5zcGVjdG9yQ1NTQWdlbnRfaAorI2Rl
ZmluZSBJbnNwZWN0b3JDU1NBZ2VudF9oCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURh
dGEuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNoZWV0
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yRE9NQWdlbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JTdHlsZVNoZWV0Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NSdWxlOworY2xhc3MgQ1NT
UnVsZUxpc3Q7CitjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgRWxlbWVudDsKK2Ns
YXNzIEluc3BlY3RvckZyb250ZW5kOworY2xhc3MgTmFtZU5vZGVNYXA7CitjbGFzcyBOb2RlOwor
CisjaWYgRU5BQkxFKElOU1BFQ1RPUikKKworY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQgOiBwdWJs
aWMgUmVmQ291bnRlZDxJbnNwZWN0b3JDU1NBZ2VudD4sIHB1YmxpYyBJbnNwZWN0b3JET01BZ2Vu
dDo6RE9NTGlzdGVuZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3Rv
ckNTU0FnZW50PiBjcmVhdGUoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250ZW5kLCBJbnNwZWN0b3JE
T01BZ2VudCogZG9tQWdlbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
c3BlY3RvckNTU0FnZW50KGZyb250ZW5kLCBkb21BZ2VudCkpOworICAgIH0KKworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBmdWxsU3R5bGVJZCwgQ1NTU3R5bGVTb3VyY2VE
YXRhKiA9IDApOworICAgIHN0YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KFN0
eWxlQmFzZSopOworICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFzQ1NTU3R5bGVSdWxlKFN0eWxl
QmFzZSopOworCisgICAgSW5zcGVjdG9yQ1NTQWdlbnQoSW5zcGVjdG9yRnJvbnRlbmQqIGZyb250
ZW5kLCBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQpOworICAgIH5JbnNwZWN0b3JDU1NBZ2Vu
dCgpOworCisgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgZ2V0TWF0Y2hlZFJ1bGVzRm9yTm9k
ZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJ1bGVzKTsKKyAgICB2b2lk
IGdldE1hdGNoZWRQc2V1ZG9SdWxlc0Zvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVj
dG9yQXJyYXk+KiBydWxlcyk7CisgICAgdm9pZCBnZXRBdHRyaWJ1dGVTdHlsZXNGb3JOb2RlMihs
b25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGVzKTsKKyAgICB2b2lkIGdl
dElubGluZVN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHN0eWxlKTsKKyAgICB2b2lkIGdldENvbXB1dGVkU3R5bGVGb3JOb2RlMihsb25nIG5vZGVJZCwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpOworICAgIHZvaWQgZ2V0SW5oZXJpdGVkU3R5
bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHJlc3VsdCk7
CisgICAgdm9pZCBnZXRBbGxTdHlsZXMyKFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIHN0eWxlcyk7
CisgICAgdm9pZCBnZXRTdHlsZVNoZWV0Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgUmVm
UHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIHNldFN0eWxlU2hlZXRUZXh0
Mihjb25zdCBTdHJpbmcmIHN0eWxlU2hlZXRJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKyAgICB2
b2lkIHNldFN0eWxlVGV4dDIoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRl
eHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCB0b2dnbGVQcm9w
ZXJ0eTIoY29uc3QgU3RyaW5nJiBzdHlsZUlkLCBsb25nIHByb3BlcnR5T3JkaW5hbCwgYm9vbCBk
aXNhYmxlZCk7CisgICAgdm9pZCBzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgcnVsZUlk
LCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQp
OworICAgIHZvaWQgYWRkUnVsZTIoY29uc3QgbG9uZyBjb250ZXh0Tm9kZUlkLCBjb25zdCBTdHJp
bmcmIHNlbGVjdG9yLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQg
Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQp
OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0PiA+IElkVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwOworICAgIHR5cGVkZWYg
SGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gQ1NT
U3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8
Tm9kZSosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+ID4gTm9kZVRv
SW5zcGVjdG9yU3R5bGVTaGVldE1hcDsgLy8gZm9yIGJvZ3VzICJzdHlsZXNoZWV0cyIgd2l0aCBp
bmxpbmUgbm9kZSBzdHlsZXMKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPERvY3VtZW50Piwg
UmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+ID4gRG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hl
ZXRNYXA7IC8vICJ2aWEgaW5zcGVjdG9yIiBzdHlsZXNoZWV0cworCisgICAgc3RhdGljIEVsZW1l
bnQqIGlubGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgc3RhdGlj
IHZvaWQgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRp
b24qLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0
YT4qIHByb3BlcnR5RGF0YSk7CisgICAgc3RhdGljIFN0cmluZyBzaG9ydGhhbmRWYWx1ZShDU1NT
dHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAg
c3RhdGljIFN0cmluZyBzaG9ydGhhbmRQcmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29u
c3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CisgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+
IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBz
aG9ydGhhbmRQcm9wZXJ0eSk7CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUqIGFzSW5zcGVjdG9yU3R5bGVTaGVldChFbGVtZW50KiBlbGVtZW50KTsKKyAgICBFbGVtZW50
KiBlbGVtZW50Rm9ySWQobG9uZyBub2RlSWQpOworICAgIEluc3BlY3RvckRPTUFnZW50KiBkb21B
Z2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9tQWdlbnQuZ2V0KCk7IH0KKworICAgIEluc3BlY3Rv
clN0eWxlU2hlZXQqIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqKTsKKyAgICBJbnNwZWN0
b3JTdHlsZVNoZWV0KiB2aWFJbnNwZWN0b3JTdHlsZVNoZWV0KERvY3VtZW50KiwgYm9vbCBjcmVh
dGVJZkFic2VudCk7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogc3R5bGVTaGVldEZvcklkKGNv
bnN0IFN0cmluZyYgc3R5bGVTaGVldElkKTsKKyAgICBTdHJpbmcgZGV0ZWN0T3JpZ2luKENTU1N0
eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCogb3duZXJEb2N1bWVudCk7CisKKyAg
ICBQYXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVs
ZUxpc3QqIHJ1bGVMaXN0KTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnVpbGRP
YmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoRWxlbWVudCogZWxlbWVudCk7CisKKyAgICAvLyBJbnNw
ZWN0b3JET01BZ2VudDo6RE9NTGlzdGVuZXIgaW50ZXJmYWNlCisgICAgdmlydHVhbCB2b2lkIGRp
ZFJlbW92ZURvY3VtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlbW92ZURP
TU5vZGUoTm9kZSopOworCisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIG1fZnJvbnRlbmQ7CisgICAg
UmVmUHRyPEluc3BlY3RvckRPTUFnZW50PiBtX2RvbUFnZW50OworCisgICAgSWRUb0luc3BlY3Rv
clN0eWxlU2hlZXRNYXAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKyAgICBDU1NTdHlsZVNo
ZWV0VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldDsKKyAgICBOb2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFwIG1fbm9kZVRvSW5zcGVj
dG9yU3R5bGVTaGVldDsKKyAgICBEb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX2Rv
Y3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0OworCisgICAgbG9uZyBtX2xhc3RTdHlsZVNoZWV0
SWQ7CisgICAgbG9uZyBtX2xhc3RSdWxlSWQ7CisgICAgbG9uZyBtX2xhc3RTdHlsZUlkOworfTsK
KworI2VuZGlmCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vICFkZWZpbmVk
KEluc3BlY3RvckNTU0FnZW50X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5j
cHAKaW5kZXggYjAxOTg2MC4uMDdhNWMyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNT
U1N0b3JlLmNwcApAQCAtMTU4LDcgKzE1OCw3IEBAIFN0cmluZyBJbnNwZWN0b3JDU1NTdG9yZTo6
aW5saW5lU3R5bGVTaGVldFRleHQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIAogCiAvLyBB
bGwgcmFuZ2VzIGFyZTogW3N0YXJ0OyBlbmQpIChzdGFydCAtIGluY2x1c2l2ZSwgZW5kIC0gZXhj
bHVzaXZlKS4KLWJvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0YShDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3Vs
dCkKK2Jvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFJ1bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+KiByZXN1bHQpCiB7CiAg
ICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTY2LDExICsxNjYsMTMg
QEAgYm9vbCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBSZWZQdHI8Q1MKICAgICBFbGVtZW50KiBlbGVtZW50ID0gaW5saW5l
U3R5bGVFbGVtZW50KHN0eWxlKTsKICAgICBpZiAoZWxlbWVudCkgewogICAgICAgICAvLyBJbmxp
bmU6IHN0eWxlPSIuLi4iLgorICAgICAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVT
b3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwogICAgICAgICBSZWZQdHI8
Q1NTU3R5bGVTb3VyY2VEYXRhPiBzdHlsZVNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6
OmNyZWF0ZSgpOwogICAgICAgICBib29sIHN1Y2Nlc3MgPSBnZXRTdHlsZUF0dHJpYnV0ZVJhbmdl
cyhlbGVtZW50LCAmc3R5bGVTb3VyY2VEYXRhKTsKICAgICAgICAgaWYgKCFzdWNjZXNzKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAqcmVzdWx0ID0gc3R5bGVTb3VyY2VEYXRh
OworICAgICAgICBydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc3R5bGVTb3VyY2VE
YXRhLnJlbGVhc2UoKTsKKyAgICAgICAgKnJlc3VsdCA9IHJ1bGVTb3VyY2VEYXRhOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE3OCw3ICsxODAsNyBAQCBib29sIEluc3BlY3Rv
ckNTU1N0b3JlOjpnZXRTdHlsZVNvdXJjZURhdGEoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IFJlZlB0cjxDUwogICAgIGlmICghc3R5bGVTaGVldCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+ID4qIHJhbmdlc1ZlY3RvciA9
IDA7CisgICAgVmVjdG9yPFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gPiogcmFuZ2VzVmVjdG9y
ID0gMDsKICAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOjppdGVyYXRvciBpdCA9IG1fc3R5bGVT
aGVldFRvT2Zmc2V0cy5maW5kKHN0eWxlU2hlZXQpOwogICAgIGlmIChpdCA9PSBtX3N0eWxlU2hl
ZXRUb09mZnNldHMuZW5kKCkpIHsKICAgICAgICAgU3RyaW5nIHRleHQgPSBzdHlsZVNoZWV0VGV4
dChiaW5kU3R5bGVTaGVldChzdHlsZVNoZWV0KSk7CkBAIC0xODcsNyArMTg5LDcgQEAgYm9vbCBJ
bnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBSZWZQdHI8Q1MKICAgICAgICAgICAgIENTU1BhcnNlciBwOwogICAgICAgICAgICAg
U3R5bGVSdWxlUmFuZ2VNYXAgcnVsZVJhbmdlTWFwOwogICAgICAgICAgICAgcC5wYXJzZVNoZWV0
KG5ld1N0eWxlU2hlZXQuZ2V0KCksIHRleHQsIDAsICZydWxlUmFuZ2VNYXApOwotICAgICAgICAg
ICAgcmFuZ2VzVmVjdG9yID0gbmV3IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+
OworICAgICAgICAgICAgcmFuZ2VzVmVjdG9yID0gbmV3IFZlY3RvcjxSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+ID47CiAgICAgICAgICAgICBleHRyYWN0UmFuZ2VzKG5ld1N0eWxlU2hlZXQuZ2V0
KCksIHJ1bGVSYW5nZU1hcCwgcmFuZ2VzVmVjdG9yKTsKICAgICAgICAgICAgIG1fc3R5bGVTaGVl
dFRvT2Zmc2V0cy5zZXQoc3R5bGVTaGVldCwgcmFuZ2VzVmVjdG9yKTsKICAgICAgICAgfQpAQCAt
MjExLDcgKzIxMyw3IEBAIGJvb2wgSW5zcGVjdG9yQ1NTU3RvcmU6OmdldFN0eWxlU291cmNlRGF0
YShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmVmUHRyPENTCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi12b2lkIEluc3BlY3RvckNTU1N0b3JlOjpleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQsIGNvbnN0IFN0eWxlUnVsZVJhbmdlTWFwJiBydWxlUmFuZ2VNYXAsIFZl
Y3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiA+KiByYW5nZXNWZWN0b3IpCit2b2lkIElu
c3BlY3RvckNTU1N0b3JlOjpleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQs
IGNvbnN0IFN0eWxlUnVsZVJhbmdlTWFwJiBydWxlUmFuZ2VNYXAsIFZlY3RvcjxSZWZQdHI8Q1NT
UnVsZVNvdXJjZURhdGE+ID4qIHJhbmdlc1ZlY3RvcikKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwLCBsZW5ndGggPSBzdHlsZVNoZWV0LT5sZW5ndGgoKTsgaSA8IGxlbmd0aDsgKytpKSB7CiAg
ICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IGFzQ1NTU3R5bGVSdWxlKHN0eWxlU2hlZXQtPml0
ZW0oaSkpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgKaW5kZXggOWIzMjlkZi4u
MjVhOWQxNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCkBAIC01NSw3ICs1
NSw3IEBAIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgbG9uZz4gU3R5bGVU
b0lkTWFwOwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9u
PiA+IElkVG9TdHlsZU1hcDsKIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBsb25nPiBS
dWxlVG9JZE1hcDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+
IElkVG9SdWxlTWFwOwotdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU291cmNlRGF0YT4gPiogPiBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOwordHlw
ZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVTb3VyY2VE
YXRhPiA+KiA+IFN0eWxlU2hlZXRUb09mZnNldHNNYXA7CiB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5
bGVTaGVldCosIGxvbmc+IFN0eWxlU2hlZXRUb0lkTWFwOwogdHlwZWRlZiBIYXNoTWFwPGxvbmcs
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IElkVG9TdHlsZVNoZWV0TWFwOwogdHlwZWRlZiBIYXNo
TWFwPGxvbmcsIFN0cmluZz4gSWRUb1N0eWxlU2hlZXRUZXh0TWFwOwpAQCAtNzEsNyArNzEsNyBA
QCBwdWJsaWM6CiAgICAgSW5zcGVjdG9yQ1NTU3RvcmUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlcik7CiAgICAgfkluc3BlY3RvckNTU1N0b3JlKCk7CiAgICAgdm9pZCBy
ZXNldCgpOwotICAgIGJvb2wgZ2V0U3R5bGVTb3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24q
LCBSZWZQdHI8Q1NTU3R5bGVTb3VyY2VEYXRhPiogcmVzdWx0KTsKKyAgICBib29sIGdldFJ1bGVT
b3VyY2VEYXRhKENTU1N0eWxlRGVjbGFyYXRpb24qLCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+
KiByZXN1bHQpOwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQobG9uZyBzdHls
ZUlkKTsKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0Rm9ySWQobG9uZyBzdHlsZVNoZWV0
SWQpOwogICAgIENTU1N0eWxlUnVsZSogcnVsZUZvcklkKGxvbmcgc3R5bGVSdWxlSWQpOwpAQCAt
ODgsNyArODgsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBDU1NTdHlsZVJ1bGUqIGFzQ1NTU3R5
bGVSdWxlKFN0eWxlQmFzZSopOwogICAgIFN0cmluZyBpbmxpbmVTdHlsZVNoZWV0VGV4dChDU1NT
dHlsZVNoZWV0Kik7CiAgICAgYm9vbCByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KENTU1N0eWxlU2hl
ZXQqLCBTdHJpbmcqIHJlc3VsdCk7Ci0gICAgdm9pZCBleHRyYWN0UmFuZ2VzKENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBTdHlsZVJ1bGVSYW5nZU1hcCYsIFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTb3Vy
Y2VEYXRhPiA+KiByYW5nZXNWZWN0b3IpOworICAgIHZvaWQgZXh0cmFjdFJhbmdlcyhDU1NTdHls
ZVNoZWV0KiwgY29uc3QgU3R5bGVSdWxlUmFuZ2VNYXAmLCBWZWN0b3I8UmVmUHRyPENTU1J1bGVT
b3VyY2VEYXRhPiA+KiByYW5nZXNWZWN0b3IpOwogICAgIGJvb2wgZ2V0U3R5bGVBdHRyaWJ1dGVS
YW5nZXMoTm9kZSogcGFyZW50Tm9kZSwgUmVmUHRyPENTU1N0eWxlU291cmNlRGF0YT4qIHJlc3Vs
dCk7CiAKICAgICBTdHlsZVRvSWRNYXAgbV9zdHlsZVRvSWQ7CmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IGI1Y2ZmOGQuLjc5N2Y3ZTIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisrKyBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC01OCw2ICs1OCw3IEBACiAjaW5j
bHVkZSAiSW5qZWN0ZWRTY3JpcHRIb3N0LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQmFja2VuZC5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yQ1NTQWdlbnQuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDU1NTdG9yZS5oIgogI2luY2x1
ZGUgIkluc3BlY3RvckNsaWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckRPTUFnZW50LmgiCkBA
IC01MTUsNiArNTE2LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpjb25uZWN0RnJvbnRl
bmQoKQogICAgIHJlbGVhc2VGcm9udGVuZExpZmV0aW1lQWdlbnRzKCk7CiAgICAgbV9mcm9udGVu
ZCA9IG5ldyBJbnNwZWN0b3JGcm9udGVuZChtX2NsaWVudCk7CiAgICAgbV9kb21BZ2VudCA9IElu
c3BlY3RvckRPTUFnZW50OjpjcmVhdGUobV9jc3NTdG9yZS5nZXQoKSwgbV9mcm9udGVuZC5nZXQo
KSk7CisgICAgbV9jc3NBZ2VudCA9IEluc3BlY3RvckNTU0FnZW50OjpjcmVhdGUobV9mcm9udGVu
ZC5nZXQoKSwgbV9kb21BZ2VudC5nZXQoKSk7CiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
bV9zdG9yYWdlQWdlbnQgPSBJbnNwZWN0b3JTdG9yYWdlQWdlbnQ6OmNyZWF0ZShtX2Zyb250ZW5k
LmdldCgpKTsKQEAgLTYyNyw2ICs2MjksMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpy
ZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpCiAgICAgICAgIG1fZG9tQWdlbnQtPnJlc2V0
KCk7CiAgICAgbV9kb21BZ2VudC5jbGVhcigpOwogCisgICAgaWYgKG1fY3NzQWdlbnQpCisgICAg
ICAgIG1fY3NzQWdlbnQtPnJlc2V0KCk7CisgICAgbV9jc3NBZ2VudC5jbGVhcigpOworCiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogICAgIGlmIChtX3N0b3JhZ2VBZ2VudCkKICAgICAgICAgbV9zdG9y
YWdlQWdlbnQtPmNsZWFyRnJvbnRlbmQoKTsKQEAgLTc5Niw2ICs4MDIsNyBAQCB2b2lkIEluc3Bl
Y3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2FkZXIqIGxvYWRlcikKICAg
ICAgICAgaWYgKG1fZnJvbnRlbmQpIHsKICAgICAgICAgICAgIG1fZnJvbnRlbmQtPnJlc2V0KCk7
CiAgICAgICAgICAgICBtX2RvbUFnZW50LT5yZXNldCgpOworICAgICAgICAgICAgbV9jc3NBZ2Vu
dC0+cmVzZXQoKTsKICAgICAgICAgfQogI2lmIEVOQUJMRShXT1JLRVJTKQogICAgICAgICBtX3dv
cmtlcnMuY2xlYXIoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaAppbmRl
eCA1NjE2ZTAyLi4wNDY2YzgyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDb250cm9sbGVyLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxl
ci5oCkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIEluc3BlY3RvckFycmF5OwogY2xhc3MgSW5zcGVj
dG9yQmFja2VuZDsKIGNsYXNzIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOwogY2xhc3MgSW5z
cGVjdG9yQ2xpZW50OworY2xhc3MgSW5zcGVjdG9yQ1NTQWdlbnQ7CiBjbGFzcyBJbnNwZWN0b3JD
U1NTdG9yZTsKIGNsYXNzIEluc3BlY3RvckRPTUFnZW50OwogY2xhc3MgSW5zcGVjdG9yRE9NU3Rv
cmFnZVJlc291cmNlOwpAQCAtMjk0LDYgKzI5NSw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHNl
dE1vbml0b3JpbmdYSFJFbmFibGVkKGJvb2wgZW5hYmxlZCwgYm9vbCogbmV3U3RhdGUpOwogICAg
IHZvaWQgc3RvcmVMYXN0QWN0aXZlUGFuZWwoY29uc3QgU3RyaW5nJiBwYW5lbE5hbWUpOworICAg
IEluc3BlY3RvckNTU0FnZW50KiBjc3NBZ2VudCgpIHsgcmV0dXJuIG1fY3NzQWdlbnQuZ2V0KCk7
IH0KICAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50
LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNlRnJvbnRlbmRMaWZldGltZUFnZW50cygpOwogCkBA
IC0zNDMsNiArMzQ1LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ+IG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7CiAgICAgYm9vbCBtX29wZW5pbmdGcm9u
dGVuZDsKICAgICBPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmQ+IG1fZnJvbnRlbmQ7CisgICAgUmVm
UHRyPEluc3BlY3RvckNTU0FnZW50PiBtX2Nzc0FnZW50OwogICAgIFJlZlB0cjxJbnNwZWN0b3JE
T01BZ2VudD4gbV9kb21BZ2VudDsKICAgICBSZWZQdHI8SW5zcGVjdG9yU3RvcmFnZUFnZW50PiBt
X3N0b3JhZ2VBZ2VudDsKICAgICBPd25QdHI8SW5zcGVjdG9yQ1NTU3RvcmU+IG1fY3NzU3RvcmU7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKaW5kZXggYzFjMjFiNi4uNzFl
ZGUyMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3Bw
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtMjE5LDYg
KzIxOSw3IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JD
U1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250CiAgICAgLCBtX2Zyb250ZW5kKGZyb250
ZW5kKQogICAgICwgbV9sYXN0Tm9kZUlkKDEpCiAgICAgLCBtX21hdGNoSm9ic1RpbWVyKHRoaXMs
ICZJbnNwZWN0b3JET01BZ2VudDo6b25NYXRjaEpvYnNUaW1lcikKKyAgICAsIG1fZG9tTGlzdGVu
ZXIoMCkKIHsKIH0KIApAQCAtMjM5LDYgKzI0MCwxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpyZXNldCgpCiAgICAgQVNTRVJUKCFtX2RvY3VtZW50cy5zaXplKCkpOwogfQogCit2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpzZXRET01MaXN0ZW5lcihET01MaXN0ZW5lciogbGlzdGVuZXIpCit7
CisgICAgbV9kb21MaXN0ZW5lciA9IGxpc3RlbmVyOworfQorCiB2b2lkIEluc3BlY3RvckRPTUFn
ZW50OjpzZXREb2N1bWVudChEb2N1bWVudCogZG9jKQogewogICAgIGlmIChkb2MgPT0gbWFpbkZy
YW1lRG9jdW1lbnQoKSkKQEAgLTMyOCw2ICszMzQsOCBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50
Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQogICAgIGlmIChub2Rl
LT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRNTEZyYW1lT3duZXJF
bGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZyYW1lT3duZXJFbGVt
ZW50Kj4obm9kZSk7CiAgICAgICAgIHN0b3BMaXN0ZW5pbmcoZnJhbWVPd25lci0+Y29udGVudERv
Y3VtZW50KCkpOworICAgICAgICBpZiAobV9kb21MaXN0ZW5lcikKKyAgICAgICAgICAgIG1fZG9t
TGlzdGVuZXItPmRpZFJlbW92ZURvY3VtZW50KGZyYW1lT3duZXItPmNvbnRlbnREb2N1bWVudCgp
KTsKICAgICAgICAgY3NzU3RvcmUoKS0+cmVtb3ZlRG9jdW1lbnQoZnJhbWVPd25lci0+Y29udGVu
dERvY3VtZW50KCkpOwogICAgIH0KIApAQCAtNDAwLDYgKzQwOCwxMSBAQCBOb2RlKiBJbnNwZWN0
b3JET01BZ2VudDo6bm9kZUZvcklkKGxvbmcgaWQpCiAgICAgcmV0dXJuIDA7CiB9CiAKK2xvbmcg
SW5zcGVjdG9yRE9NQWdlbnQ6OmlkRm9yRG9jdW1lbnROb2RlKE5vZGUqIGRvY05vZGUpCit7Cisg
ICAgcmV0dXJuIG1fZG9jdW1lbnROb2RlVG9JZE1hcC5nZXQoZG9jTm9kZSk7Cit9CisKIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmdldENoaWxkTm9kZXMobG9uZyBub2RlSWQpCiB7CiAgICAgcHVz
aENoaWxkTm9kZXNUb0Zyb250ZW5kKG5vZGVJZCk7CkBAIC0xMTA0LDYgKzExMTcsOSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgaWYg
KCFwYXJlbnRJZCkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fZG9tTGlzdGVuZXIpCisg
ICAgICAgIG1fZG9tTGlzdGVuZXItPmRpZFJlbW92ZURPTU5vZGUobm9kZSk7CisKICAgICBpZiAo
IW1fY2hpbGRyZW5SZXF1ZXN0ZWQuY29udGFpbnMocGFyZW50SWQpKSB7CiAgICAgICAgIC8vIE5v
IGNoaWxkcmVuIGFyZSBtYXBwZWQgeWV0IC0+IG9ubHkgbm90aWZ5IG9uIGNoYW5nZXMgb2YgaGFz
Q2hpbGRyZW4uCiAgICAgICAgIGlmIChpbm5lckNoaWxkTm9kZUNvdW50KHBhcmVudCkgPT0gMSkK
QEAgLTEyMjMsMTggKzEyMzksMjIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVT
b3VyY2VEYXRhKGxvbmcgc3R5bGVJZCwgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4KICAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7
CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxDU1NTdHlsZVNv
dXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOwotICAg
IGJvb2wgc3VjY2VzcyA9IGNzc1N0b3JlKCktPmdldFN0eWxlU291cmNlRGF0YShzdHlsZSwgJnNv
dXJjZURhdGEpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YSA9IENT
U1J1bGVTb3VyY2VEYXRhOjpjcmVhdGUoKTsKKyAgICBib29sIHN1Y2Nlc3MgPSBjc3NTdG9yZSgp
LT5nZXRSdWxlU291cmNlRGF0YShzdHlsZSwgJnNvdXJjZURhdGEpOwogICAgIGlmICghc3VjY2Vz
cykKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9
IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
Ym9keVJhbmdlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKICAgICByZXN1bHQtPnNldE9i
amVjdCgiYm9keVJhbmdlIiwgYm9keVJhbmdlKTsKLSAgICBib2R5UmFuZ2UtPnNldE51bWJlcigi
c3RhcnQiLCBzb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7Ci0gICAgYm9keVJhbmdl
LT5zZXROdW1iZXIoImVuZCIsIHNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLmVuZCk7CisgICAg
Ym9keVJhbmdlLT5zZXROdW1iZXIoInN0YXJ0Iiwgc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRh
LT5zdHlsZUJvZHlSYW5nZS5zdGFydCk7CisgICAgYm9keVJhbmdlLT5zZXROdW1iZXIoImVuZCIs
IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBzZWxlY3RvclJhbmdlID0gSW5zcGVjdG9yT2JqZWN0Ojpj
cmVhdGUoKTsKKyAgICByZXN1bHQtPnNldE9iamVjdCgic2VsZWN0b3JSYW5nZSIsIHNlbGVjdG9y
UmFuZ2UpOworICAgIHNlbGVjdG9yUmFuZ2UtPnNldE51bWJlcigic3RhcnQiLCBzb3VyY2VEYXRh
LT5zZWxlY3Rvckxpc3RSYW5nZS5zdGFydCk7CisgICAgc2VsZWN0b3JSYW5nZS0+c2V0TnVtYmVy
KCJlbmQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOwogICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gcHJvcGVydHlSYW5nZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7
CiAgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVydHlEYXRhIiwgcHJvcGVydHlSYW5nZXMpOwot
ICAgIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+JiBwcm9wZXJ0eURhdGEgPSBzb3VyY2VE
YXRhLT5wcm9wZXJ0eURhdGE7CisgICAgVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT4mIHBy
b3BlcnR5RGF0YSA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+cHJvcGVydHlEYXRhOwog
ICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291cmNlRGF0YT46Oml0ZXJhdG9yIGl0ID0gcHJv
cGVydHlEYXRhLmJlZ2luKCk7IGl0ICE9IHByb3BlcnR5RGF0YS5lbmQoKTsgKytpdCkgewogICAg
ICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eVJhbmdlID0gSW5zcGVjdG9yT2Jq
ZWN0OjpjcmVhdGUoKTsKICAgICAgICAgcHJvcGVydHlSYW5nZS0+c2V0U3RyaW5nKCJuYW1lIiwg
aXQtPm5hbWUpOwpAQCAtMTQ5MCwxNCArMTUxMCw2IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCwgUmVm
CiAgICAgKnJ1bGVPYmplY3QgPSBidWlsZE9iamVjdEZvclJ1bGUobm9kZS0+b3duZXJEb2N1bWVu
dCgpLCBuZXdSdWxlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3VwcG9ydGVk
Q1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBjc3NQcm9wZXJ0aWVzKQotewot
ICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGllcyA9IEluc3BlY3RvckFycmF5Ojpj
cmVhdGUoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkK
LSAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9wZXJ0eU5hbWVTdHJpbmdzW2ldKTsK
LSAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFzZSgpOwotfQotCiBQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5
bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGJvb2wgYmluZCkKIHsKICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggODljNmZkMC4uOGMwYjE1OSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC04MCw2ICs4MCwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBJbnNwZWN0b3JET01BZ2VudCA6IHB1YmxpYyBF
dmVudExpc3RlbmVyIHsKICAgICBwdWJsaWM6CisgICAgICAgIHN0cnVjdCBET01MaXN0ZW5lciB7
CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKSA9
IDA7CisgICAgICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVtb3ZlRE9NTm9kZShOb2RlKikgPSAw
OworICAgICAgICB9OworCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3BlY3RvckRPTUFn
ZW50PiBjcmVhdGUoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udGVu
ZCogZnJvbnRlbmQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SW5zcGVjdG9yRE9NQWdlbnQoY3NzU3RvcmUsIGZyb250ZW5kKSk7CkBAIC0xMzEsNyArMTM2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRvZ2dsZVN0eWxlRW5hYmxlZChs
b25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVkLCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHlsZU9iamVjdCk7CiAgICAgICAgIHZvaWQgc2V0UnVs
ZVNlbGVjdG9yKGxvbmcgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yLCBsb25nIHNlbGVj
dGVkTm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBydWxlT2JqZWN0LCBib29sKiBzZWxl
Y3RvckFmZmVjdHNOb2RlKTsKICAgICAgICAgdm9pZCBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHJ1bGVP
YmplY3QsIGJvb2wqIHNlbGVjdG9yQWZmZWN0c05vZGUpOwotICAgICAgICB2b2lkIGdldFN1cHBv
cnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogY3NzUHJvcGVydGllcyk7
CiAKICAgICAgICAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSB0aGUgSW5zcGVjdG9yQ29udHJvbGxl
ci4KICAgICAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpOwpAQCAtMTQz
LDExICsxNDcsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNoYXJhY3Rl
ckRhdGFNb2RpZmllZChDaGFyYWN0ZXJEYXRhKik7CiAKICAgICAgICAgTm9kZSogbm9kZUZvcklk
KGxvbmcgbm9kZUlkKTsKKyAgICAgICAgbG9uZyBpZEZvckRvY3VtZW50Tm9kZShOb2RlKik7CiAg
ICAgICAgIGxvbmcgcHVzaE5vZGVQYXRoVG9Gcm9udGVuZChOb2RlKiBub2RlKTsKICAgICAgICAg
dm9pZCBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobG9uZyBub2RlSWQpOwogICAgICAgICB2b2lk
IHB1c2hOb2RlQnlQYXRoVG9Gcm9udGVuZChjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcqIG5vZGVJ
ZCk7CiAgICAgICAgIGxvbmcgaW5zcGVjdGVkTm9kZSh1bnNpZ25lZCBsb25nIG51bSk7CiAgICAg
ICAgIHZvaWQgY29weU5vZGUobG9uZyBub2RlSWQpOworICAgICAgICBjb25zdCBMaXN0SGFzaFNl
dDxSZWZQdHI8RG9jdW1lbnQ+ID4mIGRvY3VtZW50cygpIHsgcmV0dXJuIG1fZG9jdW1lbnRzOyB9
CisgICAgICAgIHZvaWQgc2V0RE9NTGlzdGVuZXIoRE9NTGlzdGVuZXIqKTsKKworICAgICAgICBT
dHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdDsKIAogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc3RhcnRMaXN0ZW5pbmcoRG9jdW1lbnQqIGRvY3VtZW50
KTsKQEAgLTE4NSw3ICsxOTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wg
aXNXaGl0ZXNwYWNlKE5vZGUqIG5vZGUpOwogCiAgICAgICAgIERvY3VtZW50KiBtYWluRnJhbWVE
b2N1bWVudCgpIGNvbnN0OwotICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxTdHJpbmcoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdDsKICAgICAgICAgSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3Jl
KCkgeyByZXR1cm4gbV9jc3NTdG9yZTsgfQogCiAgICAgICAgIHZvaWQgb25NYXRjaEpvYnNUaW1l
cihUaW1lcjxJbnNwZWN0b3JET01BZ2VudD4qKTsKQEAgLTIwNCw2ICsyMTIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHRvQXJyYXko
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGRhdGEpOwogCiAgICAgICAgIHZvaWQgZGlzY2FyZEJpbmRp
bmdzKCk7CisgICAgICAgIERPTUxpc3RlbmVyKiBtX2RvbUxpc3RlbmVyOwogCiAgICAgICAgIElu
c3BlY3RvckNTU1N0b3JlKiBtX2Nzc1N0b3JlOwogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZCog
bV9mcm9udGVuZDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxl
U2hlZXQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg5MWI2YQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0wLDAgKzEs
NTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklu
c3BlY3RvclN0eWxlU2hlZXQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRl
ICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNs
dWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NT
dHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckNTU0FnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5j
bHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0
eWxlU2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFBhcnNlZFN0
eWxlU2hlZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpD
U1NSdWxlU291cmNlRGF0YT4gPiBTb3VyY2VEYXRhOworICAgIFBhcnNlZFN0eWxlU2hlZXQoKTsK
KworICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNlck91dHB1dDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fdGV4dDsgfQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpOwor
ICAgIGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4dDsgfQorICAgIFNvdXJj
ZURhdGEqIHNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEuZ2V0KCk7IH0K
KyAgICB2b2lkIHNldFNvdXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VEYXRh
KTsKKyAgICBib29sIGhhc1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGE7
IH0KKyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRh
QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorCisgICAgLy8gU3R5bGVTaGVl
dCBjb25zdHJ1Y3RlZCB3aGlsZSBwYXJzaW5nIG1fdGV4dC4KKyAgICBXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0KiBtX3BhcnNlck91dHB1dDsKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIGJvb2wgbV9o
YXNUZXh0OworICAgIE93blB0cjxTb3VyY2VEYXRhPiBtX3NvdXJjZURhdGE7Cit9OworCitQYXJz
ZWRTdHlsZVNoZWV0OjpQYXJzZWRTdHlsZVNoZWV0KCkKKyAgICA6IG1fcGFyc2VyT3V0cHV0KDAp
CisgICAgLCBtX2hhc1RleHQoZmFsc2UpCit7Cit9CisKK3ZvaWQgUGFyc2VkU3R5bGVTaGVldDo6
c2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgbV9oYXNUZXh0ID0gdHJ1ZTsKKyAg
ICBtX3RleHQgPSB0ZXh0OworICAgIHNldFNvdXJjZURhdGEoMCk7Cit9CisKK3ZvaWQgUGFyc2Vk
U3R5bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+IHNvdXJjZURh
dGEpCit7CisgICAgbV9zb3VyY2VEYXRhID0gc291cmNlRGF0YTsKK30KKworUmVmUHRyPFdlYkNv
cmU6OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmICghaGFzU291cmNlRGF0YSgpIHx8IGlu
ZGV4ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBtX3NvdXJjZURhdGEtPmF0KGluZGV4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitJbnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYg
aWQsIENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwg
Y29uc3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3BhZ2VT
dHlsZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICwg
bV9kb2N1bWVudFVSTChkb2N1bWVudFVSTCkKKyAgICAsIG1faXNSZXZhbGlkYXRpbmcoZmFsc2Up
Cit7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0ID0gbmV3IFBhcnNlZFN0eWxlU2hlZXQoKTsKK30K
KworSW5zcGVjdG9yU3R5bGVTaGVldDo6fkluc3BlY3RvclN0eWxlU2hlZXQoKQoreworICAgIGRl
bGV0ZSBtX3BhcnNlZFN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6
c2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hl
ZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0
VGV4dCh0ZXh0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbV9wYWdlU3R5bGVT
aGVldC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fcGFnZVN0eWxlU2hlZXQt
PnJlbW92ZShpKTsKKworICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsIG1f
cGFnZVN0eWxlU2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKGNvbnN0IFN0cmlu
ZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQoreworICAgIENTU1N0eWxlUnVsZSog
cnVsZSA9IHJ1bGVGb3JJZChydWxlSWQpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBJbnNwZWN0b3JDU1NBZ2Vu
dDo6cGFyZW50U3R5bGVTaGVldChydWxlKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3Vy
ZVBhcnNlZERhdGFSZWFkeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBydWxlLT5z
ZXRTZWxlY3RvclRleHQoc2VsZWN0b3IpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4g
c291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAgIGlmICgh
c291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU3RyaW5nJiBz
aGVldFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKKyAgICBTdHJpbmcgbmV3U3R5
bGVTaGVldFRleHQgPSBzaGVldFRleHQuc3Vic3RyaW5nKDAsIHNvdXJjZURhdGEtPnNlbGVjdG9y
TGlzdFJhbmdlLnN0YXJ0KTsKKyAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzZWxlY3RvcjsKKyAg
ICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzaGVldFRleHQucmlnaHQoc2hlZXRUZXh0Lmxlbmd0aCgp
IC0gc291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICBtX3BhcnNlZFN0eWxl
U2hlZXQtPnNldFRleHQobmV3U3R5bGVTaGVldFRleHQpOworICAgIHJldHVybiB0cnVlOworfQor
CitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcikKK3sKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHls
ZVNoZWV0VGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmFkZFJ1
bGUoc2VsZWN0b3IsICIiLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzID0gbV9wYWdlU3R5bGVTaGVldC0+Y3NzUnVsZXMo
KTsKKyAgICBBU1NFUlQocnVsZXMtPmxlbmd0aCgpKTsKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUg
PSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUocnVsZXMtPml0ZW0ocnVsZXMtPmxl
bmd0aCgpIC0gMSkpOworICAgIEFTU0VSVChydWxlKTsKKworICAgIGlmICh0ZXh0Lmxlbmd0aCgp
KQorICAgICAgICB0ZXh0ICs9ICJcbiI7CisKKyAgICB0ZXh0ICs9IHNlbGVjdG9yOworICAgIHRl
eHQgKz0gIiB7fSI7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOworCisg
ICAgcmV0dXJuIHJ1bGU7Cit9CisKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6
cnVsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2VTdHls
ZVNoZWV0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQg
aW5kZXggPSBpZC50b1VJbnQoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxl
UnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKCFydWxlKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCA9PSBjdXJyZW50SW5kZXgpCisg
ICAgICAgICAgICByZXR1cm4gcnVsZTsKKworICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICB9
CisgICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0
b3JTdHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQoreworICAgIENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOworICAgIGlmICghc3R5bGVTaGVl
dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1
bHQgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJp
ZCIsIGlkKCkpOworICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0
LT5kaXNhYmxlZCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQt
PmhyZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0
bGUoKSk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0
OjpjcmVhdGUoc3R5bGVTaGVldCwgdHJ1ZSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBj
c3NSdWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7CisgICAg
cmVzdWx0LT5zZXRBcnJheSgiY3NzUnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNlKCkpOworCisgICAg
U3RyaW5nIHN0eWxlU2hlZXRUZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHRleHQoJnN0eWxlU2hl
ZXRUZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRl
eHQiLCBzdHlsZVNoZWV0VGV4dCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30K
KworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxk
T2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgQ1NTU3R5bGVTaGVldCog
c3R5bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9y
VGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiY3Nz
VGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxp
bmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1bWVu
dFVSTCIsIG1fZG9jdW1lbnRVUkwpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFy
ZW50U3R5bGVTaGVldFZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJl
bnRTdHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaWQiLCBpZCgpKTsKKyAgICBwYXJlbnRTdHls
ZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAg
cmVzdWx0LT5zZXRPYmplY3QoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHlsZVNoZWV0VmFs
dWUucmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgbV9vcmlnaW4p
OworCisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOworICAgIGlmIChl
bnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VE
YXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIHJl
c3VsdC0+c2V0TnVtYmVyKCJzZWxlY3RvclN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0
b3JMaXN0UmFuZ2Uuc3RhcnQpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JF
bmRPZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOworICAgIH0KKwor
ICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUocnVsZS0+
c3R5bGUoKSkpOworICAgIGlmIChjYW5CaW5kKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5n
KCJpZCIsIGZ1bGxSdWxlSWQocnVsZSkpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7
Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0Ojpi
dWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKKyAgICBpZiAoZW5zdXJlUGFyc2Vk
RGF0YVJlYWR5KCkpCisgICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihzdHls
ZSk7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JDU1NB
Z2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxlSWQoc3R5bGUpLCBzb3Vy
Y2VEYXRhID8gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLmdldCgpIDogMCk7CisgICAgcmVz
dWx0LT5zZXRTdHJpbmcoInBhcmVudFN0eWxlU2hlZXRJZCIsIGlkKCkpOworICAgIHJldHVybiBy
ZXN1bHQucmVsZWFzZSgpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHls
ZVNoZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgQ1NTU3R5
bGVSdWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldDo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiBuZXdUZXh0KQoreworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVG
b3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICByZXR1cm4gaW5uZXJTZXRTdHlsZVRleHQoc3R5bGUsIG5ld1RleHQpOworfQorCitSZWZQ
dHI8Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRh
Rm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBtX3Bh
cnNlZFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhQXQocnVsZUluZGV4QnlTdHlsZShzdHlsZSkp
OworfQorCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSW5kZXhCeVN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbmRl
eCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQt
Pmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9
IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVt
KGkpKTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChydWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKworICAgICAgICArK2luZGV4OworICAgIH0KKyAgICByZXR1cm4gVUlOVF9NQVg7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKK3sKKyAg
ICByZXR1cm4gZW5zdXJlVGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEocGFnZVN0eWxlU2hlZXQo
KS0+b3duZXJOb2RlKCkpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnRleHQoU3Ry
aW5nKiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKCFlbnN1cmVUZXh0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAqcmVzdWx0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4
dCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNUZXh0KCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5
bGVTaGVldFRleHQoJnRleHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBtX3BhcnNlZFN0
eWxlU2hlZXQtPnNldFRleHQodGV4dCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9v
bCBJbnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkK
K3sKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0
eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUob3duZXJOb2RlKTsKKyAgICBDU1NQYXJz
ZXIgcDsKKyAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CisgICAgcC5wYXJzZVNo
ZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCAm
cnVsZVJhbmdlTWFwKTsKKyAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4g
cmFuZ2VzVmVjdG9yKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKCkpOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gbmV3U3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JD
U1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUobmV3U3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAg
IGlmICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTdHlsZVJ1bGVSYW5n
ZU1hcDo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VNYXAuZmluZChydWxlKTsKKyAgICAgICAgaWYg
KGl0ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBw
ZW5kKGl0LT5zZWNvbmQpOworICAgIH0KKworICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291
cmNlRGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbV9wYXJzZWRTdHls
ZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
aW5uZXJTZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQpCit7CisgICAgbV9w
YXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KG5ld1RleHQpOworfQorCitib29sIEluc3BlY3RvclN0
eWxlU2hlZXQ6OmlubmVyU2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBj
b25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFwYWdlU3R5bGVTaGVldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIHBhdGNoZWRTdHlsZVNoZWV0VGV4dDsKKyAg
ICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUocGFnZVN0eWxl
U2hlZXQoKSwgc3R5bGUsIHRleHQsICZwYXRjaGVkU3R5bGVTaGVldFRleHQpOworICAgIGlmICgh
c3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGlkID0gcnVsZU9y
U3R5bGVJZChzdHlsZSk7CisgICAgaWYgKGlkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgc3R5bGUtPnNldENzc1RleHQo
dGV4dCwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIGlubmVyU2V0U3R5bGVTaGVldFRleHQo
cGF0Y2hlZFN0eWxlU2hlZXRUZXh0KTsKKworICAgIHJldHVybiAhZWM7Cit9CisKK2Jvb2wgSW5z
cGVjdG9yU3R5bGVTaGVldDo6c3R5bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJp
bmcmIG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgaWYgKCFzdHlsZSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBz
b3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOworICAgIHVuc2lnbmVkIGJvZHlT
dGFydCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQ7
CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5
bGVCb2R5UmFuZ2UuZW5kOworICAgIEFTU0VSVChib2R5U3RhcnQgPD0gYm9keUVuZCk7CisKKyAg
ICBTdHJpbmcgdGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOworICAgIEFTU0VSVChi
b2R5RW5kIDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4Y2x1c2l2ZQorCisgICAg
U3RyaW5nIHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9keVN0YXJ0KTsKKyAgICBw
YXRjaGVkVGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRleHQgKz0gdGV4dC5zdWJz
dHJpbmcoYm9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3VsdCA9IHBhdGNoZWRUZXh0
OworICAgIHJldHVybiB0cnVlOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OmZpbmRQYWdlUnVsZVdpdGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbV9wYWdlU3R5bGVTaGVldC0+bGVuZ3Ro
KCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gSW5zcGVj
dG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKG1fcGFnZVN0eWxlU2hlZXQtPml0ZW0oaSkpOwor
ICAgICAgICBpZiAoIXJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJ1
bGUtPnN0eWxlKCkgPT0gc3R5bGUpCisgICAgICAgICAgICByZXR1cm4gcnVsZTsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2YWxpZGF0ZVN0
eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkKK3sKKyAgICBpZiAobV9pc1JldmFs
aWRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1JldmFsaWRhdGluZyA9IHRydWU7
CisgICAgQ1NTU3R5bGVTaGVldCogcGFyc2VkU2hlZXQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPmNz
c1N0eWxlU2hlZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gcGFyc2VkU2hl
ZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFzZSogc3R5bGVC
YXNlID0gcGFyc2VkU2hlZXQtPml0ZW0oaSk7CisgICAgICAgIENTU1N0eWxlUnVsZSogcGFyc2Vk
UnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShzdHlsZUJhc2UpOworICAg
ICAgICBpZiAoIXBhcnNlZFJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7CisgICAgICAgICAgICBpZiAocGFy
c2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4dCgpKQorICAg
ICAgICAgICAgICAgIGlubmVyU2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0eWxlLT5jc3NU
ZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9pc1Jl
dmFsaWRhdGluZyA9IGZhbHNlOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnN0eWxl
U2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAoreworICAgIFN0cmluZyB0ZXh0OworICAg
IGJvb2wgc3VjY2VzcyA9IGlubGluZVN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAgICBpZiAoIXN1
Y2Nlc3MpCisgICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJjZVN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsK
KyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgKnJlc3VsdCA9IHRleHQ7CisgICAgcmV0dXJuIHN1
Y2Nlc3M7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3VyY2VTdHlsZVNoZWV0
VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZVN0eWxlU2hlZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBJbnNwZWN0b3JVdGlsaXRpZXM6
OnJlc291cmNlQ29udGVudEZvclVSTChtX3BhZ2VTdHlsZVNoZWV0LT5maW5hbFVSTCgpLCBvd25l
ckRvY3VtZW50KCksIHJlc3VsdCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5s
aW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Bh
Z2VTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBvd25lck5v
ZGUgPSBtX3BhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCBvd25lck5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFtZSgpLmxvd2Vy
KCkgIT0gInN0eWxlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpyZXN1bHQgPSBvd25l
ckVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5Rm9yUnVsZUxp
c3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4g
cmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlmICghcnVsZUxpc3QpCisg
ICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBD
U1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUocnVs
ZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1bGUpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JSdWxlKHJ1bGUp
KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKKworSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5
bGUoY29uc3QgU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmln
aW4pCisgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KGlkLCAwLCBvcmlnaW4sICIiKQorICAgICwg
bV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3J1bGVTb3VyY2VEYXRhKDApCit7CisgICAgQVNT
RVJUKGVsZW1lbnQpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHls
ZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0
KQoreworICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgdGV4dCwgZWMpOworICAg
IG1fcnVsZVNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICByZXR1cm4gIWVjOworfQorCitib29sIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkK
K3sKKyAgICBpZiAobV9ydWxlU291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgpOworICAgIFJl
ZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNvdXJjZURhdGE6
OmNyZWF0ZSgpOworICAgIGJvb2wgc3VjY2VzcyA9IGdldFN0eWxlQXR0cmlidXRlUmFuZ2VzKHNv
dXJjZURhdGEuZ2V0KCkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgbV9ydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc291cmNlRGF0YS5y
ZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVl
dEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NTdHlsZVNvdXJjZURh
dGEqIHJlc3VsdCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc3R5bGVBdHRy
aWJ1dGVOYW1lLCAoInN0eWxlIikpOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmlzU3R5bGVkRWxl
bWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgc3R5bGVUZXh0ID0g
c3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCktPmdldEF0dHJpYnV0ZShzdHls
ZUF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzdHlsZVRleHQuaXNFbXB0eSgpKSB7CisgICAgICAg
IHJlc3VsdC0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICByZXN1bHQtPnN0eWxl
Qm9keVJhbmdlLmVuZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJl
ZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcERlY2xhcmF0aW9uID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIENTU1BhcnNlciBwOworICAgIHAu
cGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIHN0eWxlVGV4dCwgcmVzdWx0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvclN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTQ4ODkzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oCkBAIC0w
LDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JTdHlsZVNoZWV0
X2gKKyNkZWZpbmUgSW5zcGVjdG9yU3R5bGVTaGVldF9oCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NT
dHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2NsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUnVsZUxpc3Q7CitjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CisKKyNpZiBFTkFCTEUoSU5TUEVD
VE9SKQorCitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0IDogcHVibGljIFJlZkNvdW50ZWQ8SW5z
cGVjdG9yU3R5bGVTaGVldD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluc3Bl
Y3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0KiBw
YWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9jdW1l
bnRVUkwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxl
U2hlZXQoaWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50VVJMKSk7CisgICAgfQor
CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHlsZVNoZWV0
KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmluZyYgZG9j
dW1lbnRVUkwpOworICAgIH5JbnNwZWN0b3JTdHlsZVNoZWV0KCk7CisKKyAgICBjb25zdCBTdHJp
bmcmIGlkKCkgY29uc3QgeyByZXR1cm4gbV9pZDsgfQorICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VT
dHlsZVNoZWV0KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3R5bGVTaGVldDsgfQorICAgIGJvb2wg
c2V0VGV4dChjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIHNldFJ1bGVTZWxlY3Rvcihjb25zdCBT
dHJpbmcmIHJ1bGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAgQ1NTU3R5bGVSdWxl
KiBhZGRSdWxlKGNvbnN0IFN0cmluZyYgc2VsZWN0b3IpOworICAgIENTU1N0eWxlUnVsZSogcnVs
ZUZvcklkKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKTsKKyAgICBQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4gYnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSopOworICAgIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRp
b24qKTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQoY29uc3Qg
U3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJp
bmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisKK3Byb3RlY3RlZDoKKyAgICBib29s
IGNhbkJpbmQoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbiAhPSAidXNlckFnZW50IiAmJiBtX29y
aWdpbiAhPSAidXNlciI7IH0KKyAgICBTdHJpbmcgZnVsbFJ1bGVPclN0eWxlSWQoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgcmV0dXJuIGlkKCkgKyAiOiIgKyBydWxlT3JTdHls
ZUlkKHN0eWxlKTsgfQorICAgIFN0cmluZyBydWxlT3JTdHlsZUlkKENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKSBjb25zdCB7IHVuc2lnbmVkIGluZGV4ID0gcnVsZUluZGV4QnlTdHlsZShzdHls
ZSk7IHJldHVybiBpbmRleCA9PSBVSU5UX01BWCA/ICIiIDogU3RyaW5nOjpudW1iZXIoaW5kZXgp
OyB9CisgICAgdmlydHVhbCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fcGFnZVN0eWxlU2hlZXQtPmRvY3VtZW50KCk7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxDU1NS
dWxlU291cmNlRGF0YT4gcnVsZVNvdXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpIGNvbnN0OworICAgIHZpcnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHls
ZURlY2xhcmF0aW9uKikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGVuc3VyZVBhcnNlZERhdGFS
ZWFkeSgpOworCitwcml2YXRlOgorICAgIGJvb2wgdGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7
CisgICAgYm9vbCBlbnN1cmVUZXh0KCkgY29uc3Q7CisgICAgYm9vbCBlbnN1cmVTb3VyY2VEYXRh
KE5vZGUqIG93bmVyTm9kZSk7CisgICAgdm9pZCBpbm5lclNldFN0eWxlU2hlZXRUZXh0KGNvbnN0
IFN0cmluZyYgbmV3VGV4dCk7CisgICAgYm9vbCBpbm5lclNldFN0eWxlVGV4dChDU1NTdHlsZURl
Y2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJik7CisgICAgYm9vbCBzdHlsZVNoZWV0VGV4dFdpdGhD
aGFuZ2VkU3R5bGUoQ1NTU3R5bGVTaGVldCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBT
dHJpbmcmIG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpOworICAgIENTU1N0eWxlUnVsZSog
ZmluZFBhZ2VSdWxlV2l0aFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKKyAgICBTdHJpbmcg
ZnVsbFJ1bGVJZChDU1NTdHlsZVJ1bGUqIHJ1bGUpIGNvbnN0IHsgcmV0dXJuIGZ1bGxSdWxlT3JT
dHlsZUlkKHJ1bGUtPnN0eWxlKCkpOyB9CisgICAgU3RyaW5nIGZ1bGxTdHlsZUlkKENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IHJldHVybiBmdWxsUnVsZU9yU3R5bGVJZChzdHls
ZSk7IH0KKyAgICB2b2lkIHJldmFsaWRhdGVTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7Cisg
ICAgYm9vbCBzdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBy
ZXNvdXJjZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGlu
bGluZVN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdDsKKyAgICBQYXNzUmVmUHRy
PEluc3BlY3RvckFycmF5PiBidWlsZEFycmF5Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqKTsKKwor
ICAgIFN0cmluZyBtX2lkOworICAgIENTU1N0eWxlU2hlZXQqIG1fcGFnZVN0eWxlU2hlZXQ7Cisg
ICAgU3RyaW5nIG1fb3JpZ2luOworICAgIFN0cmluZyBtX2RvY3VtZW50VVJMOworICAgIGJvb2wg
bV9pc1JldmFsaWRhdGluZzsKKyAgICBQYXJzZWRTdHlsZVNoZWV0KiBtX3BhcnNlZFN0eWxlU2hl
ZXQ7Cit9OworCitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUgOiBwdWJs
aWMgSW5zcGVjdG9yU3R5bGVTaGVldCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiBjcmVhdGUoY29uc3QgU3RyaW5nJiBp
ZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBvcmlnaW4pCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZShp
ZCwgZWxlbWVudCwgb3JpZ2luKSk7CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZv
cklubGluZVN0eWxlKGNvbnN0IFN0cmluZyYgaWQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0
cmluZyYgb3JpZ2luKTsKKyAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9y
SWQoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QgeyBBU1NFUlQoaWQgPT0gIjAiKTsgcmV0dXJuIGlu
bGluZVN0eWxlKCk7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5bGVUZXh0KGNvbnN0IFN0cmlu
ZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQtPmRv
Y3VtZW50KCk7IH0KKyAgICB2aXJ0dWFsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZVNv
dXJjZURhdGFGb3IoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgQVNTRVJUKHN0
eWxlID09IGlubGluZVN0eWxlKCkpOyByZXR1cm4gbV9ydWxlU291cmNlRGF0YTsgfQorICAgIHZp
cnR1YWwgdW5zaWduZWQgcnVsZUluZGV4QnlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKikgY29u
c3QgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgYm9vbCBlbnN1cmVQYXJzZWREYXRhUmVhZHko
KTsKKworcHJpdmF0ZToKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBpbmxpbmVTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZWxlbWVudC0+c3R5bGUoKTsgfQorICAgIGJvb2wgZ2V0U3R5bGVBdHRy
aWJ1dGVSYW5nZXMoQ1NTU3R5bGVTb3VyY2VEYXRhKiByZXN1bHQpOworCisgICAgRWxlbWVudCog
bV9lbGVtZW50OworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gbV9ydWxlU291cmNlRGF0
YTsKK307CisKKyNlbmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAh
ZGVmaW5lZChJbnNwZWN0b3JTdHlsZVNoZWV0X2gpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
VXRpbGl0aWVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUyYjIz
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVz
LmNwcApAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
CisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbnNw
ZWN0b3JVdGlsaXRpZXMuaCIKKworI2luY2x1ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlICJDU1NT
dHlsZURlY2xhcmF0aW9uLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAi
Q1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2UuaCIKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXQuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gc3RhdGljCitib29sIEluc3BlY3RvclV0aWxpdGllczo6cmVzb3VyY2VDb250ZW50Rm9yVVJM
KGNvbnN0IEtVUkwmIHVybCwgRG9jdW1lbnQqIGZyYW1lRG9jdW1lbnQsIFN0cmluZyogcmVzdWx0
KQoreworICAgIGlmICghZnJhbWVEb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgU3RyaW5nIHRleHRFbmNvZGluZ05hbWU7CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gYnVm
ZmVyOworICAgIGlmIChlcXVhbElnbm9yaW5nRnJhZ21lbnRJZGVudGlmaWVyKHVybCwgZnJhbWVE
b2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3RVUkwo
KSkpIHsKKyAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGZyYW1lRG9jdW1lbnQtPmlucHV0RW5j
b2RpbmcoKTsKKyAgICAgICAgYnVmZmVyID0gZnJhbWVEb2N1bWVudC0+ZnJhbWUoKS0+bG9hZGVy
KCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291cmNlRGF0YSgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNvbnN0IFN0cmluZyYgdXJsU3RyaW5nID0gdXJsLnN0cmluZygp
OworICAgICAgICBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVzb3VyY2UgPSBmcmFtZURvY3VtZW50
LT5jYWNoZWRSZXNvdXJjZUxvYWRlcigpLT5jYWNoZWRSZXNvdXJjZSh1cmxTdHJpbmcpOworICAg
ICAgICBpZiAoIWNhY2hlZFJlc291cmNlKQorICAgICAgICAgICAgY2FjaGVkUmVzb3VyY2UgPSBj
YWNoZSgpLT5yZXNvdXJjZUZvclVSTCh1cmxTdHJpbmcpOworCisgICAgICAgIEFTU0VSVChjYWNo
ZWRSZXNvdXJjZSk7IC8vIEZJWE1FKGFwYXZsb3YpOiBUaGlzIG1pZ2h0IGJlIHRvbyBhZ2dyZXNz
aXZlLgorCisgICAgICAgIGJvb2wgaXNVbnB1cmdlYWJsZSA9IHRydWU7CisgICAgICAgIGlmIChj
YWNoZWRSZXNvdXJjZS0+aXNQdXJnZWFibGUoKSkgeworICAgICAgICAgICAgLy8gSWYgdGhlIHJl
c291cmNlIGlzIHB1cmdlYWJsZSB0aGVuIG1ha2UgaXQgdW5wdXJnZWFibGUgdG8gZ2V0CisgICAg
ICAgICAgICAvLyBpdHMgZGF0YS4gVGhpcyBtaWdodCBmYWlsLCBpbiB3aGljaCBjYXNlIHdlIHJl
dHVybiBhbgorICAgICAgICAgICAgLy8gZW1wdHkgU3RyaW5nLgorICAgICAgICAgICAgaWYgKCFj
YWNoZWRSZXNvdXJjZS0+bWFrZVB1cmdlYWJsZShmYWxzZSkpCisgICAgICAgICAgICAgICAgaXNV
bnB1cmdlYWJsZSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmIChpc1VucHVyZ2VhYmxl
KSB7CisgICAgICAgICAgICB0ZXh0RW5jb2RpbmdOYW1lID0gY2FjaGVkUmVzb3VyY2UtPmVuY29k
aW5nKCk7CisgICAgICAgICAgICBidWZmZXIgPSBjYWNoZWRSZXNvdXJjZS0+ZGF0YSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBUZXh0RW5jb2Rpbmcg
ZW5jb2RpbmcodGV4dEVuY29kaW5nTmFtZSk7CisgICAgICAgIGlmICghZW5jb2RpbmcuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBXaW5kb3dzTGF0aW4xRW5jb2RpbmcoKTsKKyAg
ICAgICAgKnJlc3VsdCA9IGVuY29kaW5nLmRlY29kZShidWZmZXItPmRhdGEoKSwgYnVmZmVyLT5z
aXplKCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNU
T1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGllcy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjI4Mzc0MjYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNw
ZWN0b3JVdGlsaXRpZXNfaAorI2RlZmluZSBJbnNwZWN0b3JVdGlsaXRpZXNfaAorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU1N0eWxl
UnVsZTsKK2NsYXNzIENTU1N0eWxlU2hlZXQ7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEtVUkw7
CitjbGFzcyBTdHlsZUJhc2U7CisKK2NsYXNzIEluc3BlY3RvclV0aWxpdGllcyB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgcmVzb3VyY2VDb250ZW50Rm9yVVJMKGNvbnN0IEtVUkwmIHVybCwg
RG9jdW1lbnQqIGZyYW1lRG9jdW1lbnQsIFN0cmluZyogcmVzdWx0KTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCisKKyNlbmRpZiAv
LyAhZGVmaW5lZChJbnNwZWN0b3JVdGlsaXRpZXNfaCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69923</attachid>
            <date>2010-10-06 04:34:33 -0700</date>
            <delta_ts>2010-10-06 06:49:22 -0700</delta_ts>
            <desc>[PRELIMINARY PATCH] Short version with WebCore/css changes removed. NOT FOR LANDING</desc>
            <filename>cssagent.patch</filename>
            <type>text/plain</type>
            <size>80347</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDI2Y2U1NDcuLmU0NTYzYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA5OSw2ICsxMDk5LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGluc3BlY3Rvci9JbmplY3RlZFNjcmlwdEhvc3QuY3Bw
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFwcGxpY2F0aW9uQ2FjaGVBZ2VudC5jcHAKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
QWdlbnQuY3BwCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAogICAgIGluc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKQEAgLTExMTAsNiArMTExMSw4IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBp
bnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmNwcAogICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JQcm9maWxlckFnZW50LmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5j
cHAKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKKyAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVXRpbGl0aWVzLmNwcAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3Bw
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDEzMzIxN2EuLjViYmYzNWQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMTgwNiw2ICsxODA2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JDbGllbnQuaCBcCiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xs
ZXIuaCBcCisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTQWdlbnQuY3BwIFwKKwlXZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5oIFwKIAlXZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JDU1NTdG9yZS5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3Bw
IFwKQEAgLTE4MjksOCArMTgzMSwxMiBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvclN0b3JhZ2VBZ2VudC5jcHAgXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0b3Jh
Z2VBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcCBc
CisJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5oIFwKIAlXZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCBcCiAJV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVGltZWxpbmVBZ2VudC5oIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JV
dGlsaXRpZXMuY3BwIFwKKwlXZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCBc
CiAJV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBcCiAJV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggXAogCVdlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvcldv
cmtlclJlc291cmNlLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCAxZjMzNTViLi4wMWNiNDI3IDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMTkxNSw2ICsx
OTE1LDggQEAKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5oJywKICAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAnLAogICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NBZ2VudC5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3Rv
cmUuY3BwJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaCcsCiAg
ICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwJywKQEAg
LTE5MzYsOCArMTkzOCwxMiBAQAogICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JSZXNv
dXJjZS5oJywKICAgICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3RvcmFnZUFnZW50LmNw
cCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5oJywKKyAg
ICAgICAgICAgICdpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAnLAorICAgICAgICAg
ICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmgnLAogICAgICAgICAgICAgJ2luc3Bl
Y3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmNwcCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9y
L0luc3BlY3RvclRpbWVsaW5lQWdlbnQuaCcsCisgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3Bl
Y3RvclV0aWxpdGllcy5jcHAnLAorICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JVdGls
aXRpZXMuaCcsCiAgICAgICAgICAgICAnaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAnLAog
ICAgICAgICAgICAgJ2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaCcsCiAgICAgICAgICAgICAn
aW5zcGVjdG9yL0luc3BlY3RvcldvcmtlclJlc291cmNlLmgnLApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggMzdkN2E0Ni4uZDllMTZk
OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUu
cHJvCkBAIC05OTAsNiArOTkwLDcgQEAgU09VUkNFUyArPSBcCiAgICAgaW5zcGVjdG9yL0luamVj
dGVkU2NyaXB0SG9zdC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JBcHBsaWNhdGlvbkNh
Y2hlQWdlbnQuY3BwIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5jcHAgXAorICAg
IGluc3BlY3Rvci9JbnNwZWN0b3JDU1NBZ2VudC5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0
b3JDU1NTdG9yZS5jcHAgXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBc
CiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVzb3VyY2UuY3BwIFwKQEAgLTEwMDIs
NyArMTAwMyw5IEBAIFNPVVJDRVMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxl
ckFnZW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclJlc291cmNlLmNwcCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvclN0b3JhZ2VBZ2VudC5jcHAgXAorICAgIGluc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvclRpbWVsaW5lQWdl
bnQuY3BwIFwKKyAgICBpbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBcCiAgICAgaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgXAogICAgIGluc3BlY3Rvci9TY3JpcHRCcmVha3Bv
aW50LmNwcCBcCiAgICAgaW5zcGVjdG9yL1RpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgXApAQCAt
MTg2OSw2ICsxODcyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckFw
cGxpY2F0aW9uQ2FjaGVBZ2VudC5oIFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQmFja2VuZC5o
IFwKICAgICBpbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oIFwKKyAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTQWdlbnQuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRhdGFiYXNlUmVz
b3VyY2UuaCBcCiAgICAgaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBcCiAgICAg
aW5zcGVjdG9yL0luc3BlY3RvckRPTVN0b3JhZ2VSZXNvdXJjZS5oIFwKQEAgLTE4NzksNyArMTg4
Myw5IEBAIEhFQURFUlMgKz0gXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JQcm9maWxlckFnZW50
LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JSZXNvdXJjZS5oIFwKICAgICBpbnNwZWN0b3Iv
SW5zcGVjdG9yU3RvcmFnZUFnZW50LmggXAorICAgIGluc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNo
ZWV0LmggXAogICAgIGluc3BlY3Rvci9JbnNwZWN0b3JUaW1lbGluZUFnZW50LmggXAorICAgIGlu
c3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaCBcCiAgICAgaW5zcGVjdG9yL1NjcmlwdEdDRXZl
bnRMaXN0ZW5lci5oIFwKICAgICBpbnNwZWN0b3IvVGltZWxpbmVSZWNvcmRGYWN0b3J5LmggXAog
ICAgIGxvYWRlci9hcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlR3JvdXAuaCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3Jl
LnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3NmY2NDQ2Li5mYmI2NmFmIDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTUyNzM1LDYgKzUyNzM1LDE0IEBACiAJCQkJ
Pg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3Rv
clxJbnNwZWN0b3JDU1NBZ2VudC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3JcSW5zcGVjdG9yQ1NTQWdlbnQuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JDU1NTdG9yZS5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNTI4
MjcsNiArNTI4MzUsMTQgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJl
bGF0aXZlUGF0aD0iLi5caW5zcGVjdG9yXEluc3BlY3RvclN0eWxlU2hlZXQuY3BwIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5caW5zcGVjdG9y
XEluc3BlY3RvclN0eWxlU2hlZXQuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
IAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JUaW1lbGluZUFnZW50LmNw
cCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC01MjgzNSw2ICs1Mjg1MSwxNCBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxpbnNwZWN0b3Jc
SW5zcGVjdG9yVXRpbGl0aWVzLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3BlY3RvclxJbnNwZWN0b3JVdGlsaXRpZXMuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGluc3Bl
Y3RvclxJbnNwZWN0b3JWYWx1ZXMuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggOGYxZWZlOS4uZWVhNmVmNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTE1MTksNiAr
MTUxOSwxMiBAQAogCQk4MUJFMjA5OTExRjRBQjhEMDA5MTVERkEgLyogSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODFCRTIwOTQxMUY0QUI4RDAwOTE1REZBIC8qIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2Uu
aCAqLzsgfTsKIAkJODFCRTIwRDIxMUY0QkMzMjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgxQkUyMEE3MTFG
NEI2NkYwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5jcHAgKi87IH07CiAJCTgxQkUyMEQzMTFGNEJD
MzIwMDkxNURGQSAvKiBKU0lEQkN1cnNvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29y
LmggKi87IH07CisJCTgyQUIxNzQzMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2Vu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFC
MTc0MTEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuY3BwICovOyB9OworCQk4
MkFCMTc0NDEyNEI5OUVDMDBDNTA2OUQgLyogSW5zcGVjdG9yQ1NTQWdlbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQUIxNzQyMTI0Qjk5RUMwMEM1
MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovOyB9OworCQk4MkFCMTc3MzEyNUM4MjY3MDBD
NTA2OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc2RjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVj
dG9yU3R5bGVTaGVldC5jcHAgKi87IH07CisJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5RCAvKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA4MkFCMTc3MDEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVl
dC5oICovOyB9OworCQk4MkFCMTc3NTEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRpbGl0
aWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgy
QUIxNzcxMTI1QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JVdGlsaXRpZXMuY3BwICovOyB9Owor
CQk4MkFCMTc3NjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRpbGl0aWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4MkFCMTc3MjEyNUM4MjY3
MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRpbGl0aWVzLmggKi87IH07CiAJCTgyQjY1ODk4MTE4OUUz
OTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJCNjU4OTcxMTg5RTM5MjAwRTA1MkExIC8qIEluc3Bl
Y3RvckNTU1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJODJCNjU4OUExMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDgyQjY1ODk5
MTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5jcHAgKi87IH07CiAJCTgyRTNE
OERFMTIyRUEwRDEwMDNBRTVCQyAvKiBDU1NQcm9wZXJ0eVNvdXJjZURhdGEuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODJFM0Q4REMxMjJFQTBEMTAw
M0FFNUJDIC8qIENTU1Byb3BlcnR5U291cmNlRGF0YS5jcHAgKi87IH07CkBAIC03NjEzLDYgKzc2
MTksMTIgQEAKIAkJODFCRTIwOUMxMUY0QUJCRDAwOTE1REZBIC8qIElEQkN1cnNvci5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gSURCQ3Vyc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODFCRTIwQTcxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURCQ3Vyc29yLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSURCQ3Vyc29yLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODFCRTIwQTgxMUY0QjY2RjAwOTE1REZBIC8qIEpTSURC
Q3Vyc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSURCQ3Vyc29yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAv
KiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JDU1NBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTgyQUIxNzQyMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDU1NBZ2VudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk4MkFCMTc2RjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODJBQjE3
NzAxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU3R5bGVTaGVldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk4MkFCMTc3MTEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRp
bGl0aWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc3BlY3Rv
clV0aWxpdGllcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTgyQUIxNzcyMTI1
QzgyNjcwMEM1MDY5RCAvKiBJbnNwZWN0b3JVdGlsaXRpZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yVXRpbGl0aWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTgyQjY1ODk3MTE4OUUzOTIwMEUwNTJBMSAvKiBJbnNwZWN0b3JDU1NTdG9yZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDU1NTdG9yZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4MkI2NTg5OTExODlFNDc2MDBFMDUyQTEgLyog
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4
MkUzRDhEQzEyMkVBMEQxMDAzQUU1QkMgLyogQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5U291cmNlRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjE2NCw2ICsxMjE3Niw4IEBACiAJ
CQkJMUM4MUI5NTgwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5oICovLAogCQkJ
CTFDODFCOTU3MEU5NzMzMDgwMDI2NkUwNyAvKiBJbnNwZWN0b3JDb250cm9sbGVyLmNwcCAqLywK
IAkJCQkxQzgxQjk1NjBFOTczMzA4MDAyNjZFMDcgLyogSW5zcGVjdG9yQ29udHJvbGxlci5oICov
LAorCQkJCTgyQUIxNzQxMTI0Qjk5RUMwMEM1MDY5RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5jcHAg
Ki8sCisJCQkJODJBQjE3NDIxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50Lmgg
Ki8sCiAJCQkJODJCNjU4OTkxMTg5RTQ3NjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmNw
cCAqLywKIAkJCQk4MkI2NTg5NzExODlFMzkyMDBFMDUyQTEgLyogSW5zcGVjdG9yQ1NTU3RvcmUu
aCAqLywKIAkJCQk0MUYwNjIxMzBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VS
ZXNvdXJjZS5jcHAgKi8sCkBAIC0xMjE4OCw4ICsxMjIwMiwxMiBAQAogCQkJCTQxRjA2MUZGMEY1
RjBCNjYwMEEwN0VBQyAvKiBJbnNwZWN0b3JSZXNvdXJjZS5oICovLAogCQkJCTdBQjBCMUJFMTIx
MUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuY3BwICovLAogCQkJCTdBQjBC
MUJGMTIxMUE2MjIwMEE3Njk0MCAvKiBJbnNwZWN0b3JTdG9yYWdlQWdlbnQuaCAqLywKKwkJCQk4
MkFCMTc2RjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAgKi8sCisJ
CQkJODJBQjE3NzAxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0eWxlU2hlZXQuaCAqLywK
IAkJCQk3NTQxMzNBOTEwMkUwMEY0MDAwNzVEMDAgLyogSW5zcGVjdG9yVGltZWxpbmVBZ2VudC5j
cHAgKi8sCiAJCQkJNzU0MTMzQTcxMDJFMDBFODAwMDc1RDAwIC8qIEluc3BlY3RvclRpbWVsaW5l
QWdlbnQuaCAqLywKKwkJCQk4MkFCMTc3MTEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRp
bGl0aWVzLmNwcCAqLywKKwkJCQk4MkFCMTc3MjEyNUM4MjY3MDBDNTA2OUQgLyogSW5zcGVjdG9y
VXRpbGl0aWVzLmggKi8sCiAJCQkJNEYzMjg5QjMxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5jcHAgKi8sCiAJCQkJNEYzMjg5QjQxMUE0MkFBQjAwNUFCRTdFIC8qIEluc3BlY3Rv
clZhbHVlcy5oICovLAogCQkJCUYzNzVDQzA2MTE1MEQzMDAwMDhEREI4MSAvKiBJbnNwZWN0b3JX
b3JrZXJSZXNvdXJjZS5oICovLApAQCAtMTk2MzgsNiArMTk2NTYsNyBAQAogCQkJCTRGNzA3QTlB
MTFFRjY3OTQwMEFDREE2OSAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMUM4MUI5NUMwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMUM4MUI5NUEwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3Rv
ckNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTgyQUIxNzQ0MTI0Qjk5RUMwMEM1MDY5
RCAvKiBJbnNwZWN0b3JDU1NBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODJCNjU4OTgxMTg5
RTM5MjAwRTA1MkExIC8qIEluc3BlY3RvckNTU1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0
MUYwNjIxNDBGNUYxOTI2MDBBMDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRjMzRjA1M0UxMjBCMERBNTAwRTU3NDNBIC8qIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjEwNjYsNiArMjEwODUsOCBAQAogCQkJ
CTg5M0M0ODNCMTI0OTU0NzIwMDJCM0Q4NiAvKiBKU0VudHJ5U3luYy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODkzQzQ4M0QxMjQ5NTQ3MjAwMkIzRDg2IC8qIEpTRmlsZUVudHJ5U3luYy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODkwQUUwRTExMjU2QTA3OTAwRjU5NjhDIC8qIERpcmVjdG9yeVJlYWRl
ckJhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTgyQUIxNzc0MTI1QzgyNjcwMEM1MDY5RCAvKiBJ
bnNwZWN0b3JTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKKwkJCQk4MkFCMTc3NjEyNUM4MjY3
MDBDNTA2OUQgLyogSW5zcGVjdG9yVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTIyMjA4
LDYgKzIyMjI5LDcgQEAKIAkJCQk3QTc0RUNCQTEwMTgzOUE2MDBCRjkzOUUgLyogSW5zcGVjdG9y
QmFja2VuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0RjcwN0E5OTExRUY2Nzk0MDBBQ0RBNjkg
LyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUM4
MUI5NUIwRTk3MzMwODAwMjY2RTA3IC8qIEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJODJBQjE3NDMxMjRCOTlFQzAwQzUwNjlEIC8qIEluc3BlY3RvckNTU0FnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTgyQjY1ODlBMTE4OUU0NzYwMEUwNTJBMSAvKiBJbnNw
ZWN0b3JDU1NTdG9yZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUYwNjIxNTBGNUYxOTI2MDBB
MDdFQUMgLyogSW5zcGVjdG9yRGF0YWJhc2VSZXNvdXJjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGMzNGMDUzRDEyMEIwREE1MDBFNTc0M0EgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTIzNjExLDYgKzIzNjMzLDggQEAKIAkJCQk4OTNDNDgzQTEyNDk1
NDcyMDAyQjNEODYgLyogSlNFbnRyeVN5bmMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODkzQzQ4
M0MxMjQ5NTQ3MjAwMkIzRDg2IC8qIEpTRmlsZUVudHJ5U3luYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4OTNDNDg1MzEyNDk5QjA2MDAyQjNEODYgLyogSlNFbnRyeVN5bmNDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJODJBQjE3NzMxMjVDODI2NzAwQzUwNjlEIC8qIEluc3BlY3RvclN0
eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJODJBQjE3NzUxMjVDODI2NzAwQzUwNjlE
IC8qIEluc3BlY3RvclV0aWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckNTU0FnZW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5kOTBjMDRkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
Q1NTQWdlbnQuY3BwCkBAIC0wLDAgKzEsNjUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3BlY3RvckNTU0FnZW50LmgiCisKKyNpZiBFTkFCTEUo
SU5TUEVDVE9SKQorCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9w
ZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgiCisjaW5jbHVk
ZSAiQ1NTUnVsZS5oIgorI2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiQ1NTU3R5
bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1N0
eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJET01XaW5kb3cuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JET01BZ2VudC5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckZyb250ZW5kLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKKworLy8gY3NzUHJvcGVydHkgPSB7CisvLyAgICBuYW1lICAgICAgICAg
IDogPHN0cmluZz4sCisvLyAgICB2YWx1ZSAgICAgICAgIDogPHN0cmluZz4sCisvLyAgICBwcmlv
cml0eSAgICAgIDogPHN0cmluZz4sIC8vICIiIGZvciBub24tcGFyc2VkT2sgcHJvcGVydGllcwor
Ly8gICAgaW1wbGljaXQgICAgICA6IDxib29sZWFuPiwKKy8vICAgIHBhcnNlZE9rICAgICAgOiA8
Ym9vbGVhbj4sIC8vIHdoZXRoZXIgcHJvcGVydHkgaXMgdW5kZXJzdG9vZCBieSBXZWJDb3JlCisv
LyAgICBzdGF0dXMgICAgICAgIDogPHN0cmluZz4sIC8vICJkaXNhYmxlZCIgfCAiYWN0aXZlIiB8
ICJpbmFjdGl2ZSIgfCAic3R5bGUiCisvLyAgICBzaG9ydGhhbmROYW1lIDogPHN0cmluZz4sCisv
LyAgICBzdGFydE9mZnNldCAgIDogPG51bWJlcj4sIC8vIE9wdGlvbmFsIC0gcHJvcGVydHkgdGV4
dCBzdGFydCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9y
IGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8vICAgIGVuZE9mZnNldCAgICAgOiA8bnVtYmVy
PiwgLy8gT3B0aW9uYWwgLSBwcm9wZXJ0eSB0ZXh0IGVuZCBvZmZzZXQgaW4gZW5jbG9zaW5nIHN0
eWxlIGRlY2xhcmF0aW9uLiBBYnNlbnQgZm9yIGNvbXB1dGVkIHN0eWxlcyBhbmQgc3VjaC4KKy8v
IH0KKy8vCisvLyBzdGF0dXM6CisvLyAiZGlzYWJsZWQiID09IHByb3BlcnR5IGRpc2FibGVkIGJ5
IHVzZXIKKy8vICJhY3RpdmUiID09IHByb3BlcnR5IHBhcnRpY2lwYXRlcyBpbiB0aGUgY29tcHV0
ZWQgc3R5bGUgY2FsY3VsYXRpb24KKy8vICJpbmFjdGl2ZSIgPT0gcHJvcGVydHkgZG9lcyBubyBw
YXJ0aWNpcGF0ZSBpbiB0aGUgY29tcHV0ZWQgc3R5bGUgY2FsY3VsYXRpb24gKGkuZS4gb3ZlcnJp
ZGRlbiBieSBhIHN1YnNlcXVlbnQgcHJvcGVydHkgd2l0aCB0aGUgc2FtZSBuYW1lKQorLy8gInN0
eWxlIiA9PSBwcm9wZXJ0eSBpcyBhY3RpdmUgYW5kIG9yaWdpbmF0ZXMgZnJvbSB0aGUgV2ViQ29y
ZSBDU1NTdHlsZURlY2xhcmF0aW9uIHJhdGhlciB0aGFuIENTUyBzb3VyY2UgY29kZSAoZS5nLiBp
bXBsaWNpdCBsb25naGFuZCBwcm9wZXJ0aWVzKQorLy8KKy8vCisvLyBjc3NTdHlsZSA9IHsKKy8v
ICAgIHN0eWxlSWQgICAgICAgICA6IDxudW1iZXI+LCAvLyBPcHRpb25hbAorLy8gICAgc3R5bGVT
aGVldElkICAgIDogPG51bWJlcj4sIC8vIFBhcmVudDogLTEgZm9yIGlubGluZSBzdHlsZXMgKDxm
b28gc3R5bGU9Ii4uIj4pCisvLyAgICBjc3NQcm9wZXJ0aWVzICAgOiBbCisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgI2Nzc1Byb3BlcnR5LAorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
IC4uLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICNjc3NQcm9wZXJ0eQorLy8gICAgICAg
ICAgICAgICAgICAgIF0sCisvLyAgICBzaG9ydGhhbmRWYWx1ZXMgOiB7CisvLyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTEgOiBzaG9ydGhhbmRWYWx1ZTEsCisvLyAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2hvcnRoYW5kTmFtZTIgOiBzaG9ydGhhbmRWYWx1ZTIKKy8v
ICAgICAgICAgICAgICAgICAgICAgIH0sCisvLyAgICBjc3NUZXh0ICAgICAgICAgOiA8c3RyaW5n
PiwgLy8gZGVjbGFyYXRpb24gdGV4dAorLy8gICAgcHJvcGVydGllcyAgICAgIDogeyB9IC8vID8/
PworLy8gfQorLy8KKy8vIC8vIFRPRE86CisvLyAvLyAtIGNvbnZlcnQgZGlzYWJsZWRQcm9wZXJ0
aWVzIHRvIGVuYWJsZWQgZmxhZy4KKy8vIC8vIC0gY29udmVydCB3aWR0aCwgaGVpZ2h0IHRvIHBy
b3BlcnRpZXMKKy8vCisvLyBjc3NSdWxlID0geworLy8gICAgcnVsZUlkICAgICAgIDogPG51bWJl
cj4sCisvLyAgICBzZWxlY3RvclRleHQgOiA8c3RyaW5nPgorLy8gICAgc291cmNlVVJMICAgIDog
PHN0cmluZz4KKy8vICAgIHNvdXJjZUxpbmUgICA6IDxzdHJpbmc+CisvLyAgICBzdHlsZVNoZWV0
SWQgOiA8bnVtYmVyPiAvLyBhbHNvIGZvdW5kIGluIHN0eWxlCisvLyAgICBvcmlnaW4gICAgICAg
OiA8c3RyaW5nPiAvLyAiIiB8fCAidXNlci1hZ2VudCIgfHwgInVzZXIiIHx8ICJpbnNwZWN0b3Ii
CisvLyAgICBzdHlsZSAgICAgICAgOiAjY3NzU3R5bGUKKy8vIH0KKy8vCisvLyAvLyBUT0RPOgor
Ly8gLy8gLSBmaXggb3JpZ2luCisvLyAvLyAtIGFkZCBzb3VyY2VVUkwKKy8vIC8vIC0gZml4IHBh
cmVudFN0eWxlU2hlZXRJZAorLy8KKy8vIGNzc1N0eWxlU2hlZXQgPSB7CisvLyAgICBzdHlsZVNo
ZWV0SWQgICA6IDxudW1iZXI+CisvLyAgICBocmVmICAgICAgICAgICA6IDxzdHJpbmc+CisvLyAg
ICB0aXRsZSAgICAgICAgICA6IDxzdHJpbmc+CisvLyAgICBkaXNhYmxlZCAgICAgICA6IDxib29s
ZWFuPgorLy8gICAgZG9jdW1lbnROb2RlSWQgOiA8bnVtYmVyPgorLy8gICAgcnVsZXMgICAgICAg
ICAgOiBbCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAjY3NzUnVsZSwKKy8vICAgICAgICAg
ICAgICAgICAgICAgICAgIC4uLgorLy8gICAgICAgICAgICAgICAgICAgICAgICAgI2Nzc1J1bGUK
Ky8vICAgICAgICAgICAgICAgICAgICAgXQorLy8gfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIHN0YXRpYworUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvckNTU0FnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBT
dHJpbmcmIGZ1bGxTdHlsZUlkLCBDU1NTdHlsZVNvdXJjZURhdGEqIHNvdXJjZURhdGEpCit7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcmVzdWx0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVh
dGUoKTsKKyAgICBpZiAoIWZ1bGxTdHlsZUlkLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdWx0LT5z
ZXRTdHJpbmcoImlkIiwgZnVsbFN0eWxlSWQpOworCisgICAgcmVzdWx0LT5zZXRTdHJpbmcoIndp
ZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOworICAgIHJlc3VsdC0+c2V0
U3RyaW5nKCJoZWlnaHQiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IikpOworICAg
IFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+KiBwcm9wZXJ0eURhdGEgPSAwOworCisgICAg
aWYgKHNvdXJjZURhdGEpIHsKKyAgICAgICAgcmVzdWx0LT5zZXROdW1iZXIoInN0YXJ0T2Zmc2V0
Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQpOworICAgICAgICByZXN1bHQtPnNl
dE51bWJlcigiZW5kT2Zmc2V0Iiwgc291cmNlRGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kKTsKKyAg
ICAgICAgcHJvcGVydHlEYXRhID0gJnNvdXJjZURhdGEtPnByb3BlcnR5RGF0YTsKKyAgICB9Cisg
ICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCByZXN1bHQuZ2V0KCks
IHByb3BlcnR5RGF0YSk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKworLy8g
c3RhdGljCitDU1NTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6cGFyZW50U3R5bGVTaGVl
dChTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sKKyAgICBpZiAoIXN0eWxlQmFzZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gc3R5bGVCYXNlLT5zdHls
ZXNoZWV0KCk7CisgICAgaWYgKHN0eWxlU2hlZXQgJiYgc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNo
ZWV0KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVT
aGVldCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLy8gc3RhdGljCitDU1NTdHlsZVJ1bGUqIElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShTdHlsZUJhc2UqIHN0eWxlQmFzZSkKK3sK
KyAgICBpZiAoIXN0eWxlQmFzZS0+aXNTdHlsZVJ1bGUoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgQ1NTUnVsZSogcnVsZSA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZUJhc2UpOworICAg
IGlmIChydWxlLT50eXBlKCkgIT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHJ1bGUpOworfQorCisK
K0luc3BlY3RvckNTU0FnZW50OjpJbnNwZWN0b3JDU1NBZ2VudChJbnNwZWN0b3JGcm9udGVuZCog
ZnJvbnRlbmQsIEluc3BlY3RvckRPTUFnZW50KiBkb21BZ2VudCkKKyAgICA6IG1fZnJvbnRlbmQo
ZnJvbnRlbmQpCisgICAgLCBtX2RvbUFnZW50KGRvbUFnZW50KQorICAgICwgbV9sYXN0U3R5bGVT
aGVldElkKDEpCisgICAgLCBtX2xhc3RSdWxlSWQoMSkKKyAgICAsIG1fbGFzdFN0eWxlSWQoMSkK
K3sKKyAgICBtX2RvbUFnZW50LT5zZXRET01MaXN0ZW5lcih0aGlzKTsKK30KKworSW5zcGVjdG9y
Q1NTQWdlbnQ6On5JbnNwZWN0b3JDU1NBZ2VudCgpCit7CisgICAgcmVzZXQoKTsKK30KKwordm9p
ZCBJbnNwZWN0b3JDU1NBZ2VudDo6cmVzZXQoKQoreworICAgIG1fZG9tQWdlbnQtPnNldERPTUxp
c3RlbmVyKDApOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRNYXRjaGVkUnVsZXNG
b3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KQorewor
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9ySWQobm9kZUlkKTsKKyAgICBpZiAoIWVs
ZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIENTU1N0eWxlU2VsZWN0b3IqIHNlbGVjdG9y
ID0gZWxlbWVudC0+b3duZXJEb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCk7CisgICAgUmVmUHRy
PENTU1J1bGVMaXN0PiBtYXRjaGVkUnVsZXMgPSBzZWxlY3Rvci0+c3R5bGVSdWxlc0ZvckVsZW1l
bnQoZWxlbWVudCwgZmFsc2UsIHRydWUpOworICAgICpyZXN1bHQgPSBidWlsZEFycmF5Rm9yUnVs
ZUxpc3QobWF0Y2hlZFJ1bGVzLmdldCgpKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6
Z2V0TWF0Y2hlZFBzZXVkb1J1bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4qIHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklk
KG5vZGVJZCk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBDU1NT
dHlsZVNlbGVjdG9yKiBzZWxlY3RvciA9IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVT
ZWxlY3RvcigpOworICAgIGZvciAoUHNldWRvSWQgcHNldWRvSWQgPSBGSVJTVF9QVUJMSUNfUFNF
VURPSUQ7IHBzZXVkb0lkIDwgQUZURVJfTEFTVF9JTlRFUk5BTF9QU0VVRE9JRDsgcHNldWRvSWQg
PSBzdGF0aWNfY2FzdDxQc2V1ZG9JZD4ocHNldWRvSWQgKyAxKSkgeworICAgICAgICBSZWZQdHI8
Q1NTUnVsZUxpc3Q+IG1hdGNoZWRSdWxlcyA9IHNlbGVjdG9yLT5wc2V1ZG9TdHlsZVJ1bGVzRm9y
RWxlbWVudChlbGVtZW50LCBwc2V1ZG9JZCwgZmFsc2UsIHRydWUpOworICAgICAgICBpZiAobWF0
Y2hlZFJ1bGVzICYmIG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCkpIHsKKyAgICAgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IHBzZXVkb1N0eWxlcyA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRl
KCk7CisgICAgICAgICAgICBwc2V1ZG9TdHlsZXMtPnNldE51bWJlcigicHNldWRvSWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHBzZXVkb0lkKSk7CisgICAgICAgICAgICBwc2V1ZG9TdHlsZXMtPnNldEFy
cmF5KCJydWxlcyIsIGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChtYXRjaGVkUnVsZXMuZ2V0KCkpKTsK
KyAgICAgICAgICAgICgqcmVzdWx0KS0+cHVzaE9iamVjdChwc2V1ZG9TdHlsZXMucmVsZWFzZSgp
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QXR0
cmlidXRlU3R5bGVzRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4q
IHJlc3VsdCkKK3sKKyAgICBFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvcklkKG5vZGVJZCk7
CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICAqcmVzdWx0ID0gYnVp
bGRPYmplY3RGb3JBdHRyaWJ1dGVTdHlsZXMoZWxlbWVudCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTQWdlbnQ6OmdldElubGluZVN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4qIHN0eWxlKQoreworICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9y
SWQobm9kZUlkKTsKKyAgICBpZiAoIWVsZW1lbnQpCisgICAgICAgIHJldHVybjsKKworICAgIElu
c3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZSogc3R5bGVTaGVldCA9IGFzSW5zcGVjdG9y
U3R5bGVTaGVldChlbGVtZW50KTsKKyAgICBpZiAoIXN0eWxlU2hlZXQpCisgICAgICAgIHJldHVy
bjsKKworICAgICpzdHlsZSA9IHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yU3R5bGUoZWxlbWVu
dC0+c3R5bGUoKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmdldENvbXB1dGVkU3R5
bGVGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogc3R5bGUpCit7
CisgICAgRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlmICgh
ZWxlbWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgRE9NV2luZG93KiBkZWZhdWx0VmlldyA9
IGVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKTsKKyAgICBpZiAoIWRlZmF1
bHRWaWV3KQorICAgICAgICByZXR1cm47CisKKyAgICAqc3R5bGUgPSBidWlsZE9iamVjdEZvclN0
eWxlKGRlZmF1bHRWaWV3LT5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQsICIiKS5nZXQoKSwgIiIp
OworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpnZXRJbmhlcml0ZWRTdHlsZXNGb3JOb2Rl
Mihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5Piogc3R5bGUpCit7CisgICAgRWxl
bWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JJZChub2RlSWQpOworICAgIGlmICghZWxlbWVudCkg
eworICAgICAgICAqc3R5bGUgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBpbmhlcml0ZWRTdHlsZXMg
PSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgRWxlbWVudCogcGFyZW50RWxlbWVudCA9
IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICB3aGlsZSAocGFyZW50RWxlbWVudCkgewor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBwYXJlbnRTdHlsZSA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChwYXJlbnRFbGVtZW50LT5zdHlsZSgpICYmIHBh
cmVudEVsZW1lbnQtPnN0eWxlKCktPmxlbmd0aCgpKSB7CisgICAgICAgICAgICBJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUqIHN0eWxlU2hlZXQgPSBhc0luc3BlY3RvclN0eWxlU2hl
ZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoc3R5bGVTaGVldCkKKyAgICAgICAgICAgICAg
ICBwYXJlbnRTdHlsZS0+c2V0T2JqZWN0KCJpbmxpbmVTdHlsZSIsIHN0eWxlU2hlZXQtPmJ1aWxk
T2JqZWN0Rm9yU3R5bGUoc3R5bGVTaGVldC0+c3R5bGVGb3JJZCgiMCIpKSk7CisgICAgICAgIH0K
KworICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1l
bnQtPm93bmVyRG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOworICAgICAgICBSZWZQdHI8Q1NT
UnVsZUxpc3Q+IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVz
Rm9yRWxlbWVudChwYXJlbnRFbGVtZW50LCBmYWxzZSwgdHJ1ZSk7CisgICAgICAgIHBhcmVudFN0
eWxlLT5zZXRBcnJheSgibWF0Y2hlZENTU1J1bGVzIiwgYnVpbGRBcnJheUZvclJ1bGVMaXN0KHBh
cmVudE1hdGNoZWRSdWxlcy5nZXQoKSkpOworICAgICAgICBpbmhlcml0ZWRTdHlsZXMtPnB1c2hP
YmplY3QocGFyZW50U3R5bGUucmVsZWFzZSgpKTsKKyAgICAgICAgcGFyZW50RWxlbWVudCA9IHBh
cmVudEVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAgICB9CisgICAgKnN0eWxlID0gaW5oZXJp
dGVkU3R5bGVzLnJlbGVhc2UoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6Z2V0QWxs
U3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpCit7CisgICAgY29uc3QgTGlz
dEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+JiBkb2N1bWVudHMgPSBkb21BZ2VudCgpLT5kb2N1
bWVudHMoKTsKKyAgICBmb3IgKExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPjo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBkb2N1bWVudHMuYmVnaW4oKTsgaXQgIT0gZG9jdW1lbnRzLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIFN0eWxlU2hlZXRMaXN0KiBsaXN0ID0gKCppdCktPnN0eWxlU2hlZXRz
KCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsaXN0LT5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gbGlzdC0+aXRlbShpKTsK
KyAgICAgICAgICAgIGlmIChzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgeworICAgICAg
ICAgICAgICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBiaW5k
U3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpOworICAg
ICAgICAgICAgICAgICgqc3R5bGVzKS0+cHVzaFN0cmluZyhpbnNwZWN0b3JTdHlsZVNoZWV0LT5p
ZCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6Z2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJl
ZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlU2hlZXRPYmplY3QpCit7CisgICAgSW5zcGVjdG9y
U3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxlU2hlZXRGb3JJZChzdHlsZVNo
ZWV0SWQpOworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgKnN0eWxlU2hlZXRPYmplY3QgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5idWlsZE9iamVj
dEZvclN0eWxlU2hlZXQoKTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVT
aGVldFRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkLCBjb25zdCBTdHJpbmcmIHRleHQp
Cit7CisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxl
U2hlZXRGb3JJZChzdHlsZVNoZWV0SWQpOworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0VGV4dCh0ZXh0
KTsKK30KKwordm9pZCBJbnNwZWN0b3JDU1NBZ2VudDo6c2V0U3R5bGVUZXh0Mihjb25zdCBTdHJp
bmcmIGZ1bGxTdHlsZUlkLCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1
ZT4qIHJlc3VsdCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBpZFBhcnRzOworICAgIGZ1bGxTdHls
ZUlkLnNwbGl0KCc6JywgaWRQYXJ0cyk7CisgICAgQVNTRVJUKGlkUGFydHMuc2l6ZSgpID09IDIp
OworCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldCA9IHN0eWxl
U2hlZXRGb3JJZChpZFBhcnRzLmF0KDApKTsKKyAgICBpZiAoIWluc3BlY3RvclN0eWxlU2hlZXQp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0U3R5
bGVUZXh0KGlkUGFydHMuYXQoMSksIHRleHQpKQorICAgICAgICByZXR1cm47CisKKyAgICAqcmVz
dWx0ID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+YnVpbGRPYmplY3RGb3JTdHlsZShpbnNwZWN0b3JT
dHlsZVNoZWV0LT5zdHlsZUZvcklkKGlkUGFydHMuYXQoMSkpKTsKK30KKwordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6dG9nZ2xlUHJvcGVydHkyKGNvbnN0IFN0cmluZyYsIGxvbmcsIGJvb2wpCit7
CisgICAgLy8gRklYTUUoYXBhdmxvdik6IGltcGxlbWVudAorfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpzZXRSdWxlU2VsZWN0b3IyKGNvbnN0IFN0cmluZyYgZnVsbFJ1bGVJZCwgY29uc3Qg
U3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQoreworICAg
IFZlY3RvcjxTdHJpbmc+IGlkUGFydHM7CisgICAgZnVsbFJ1bGVJZC5zcGxpdCgnOicsIGlkUGFy
dHMpOworICAgIEFTU0VSVChpZFBhcnRzLnNpemUoKSA9PSAyKTsKKworICAgIEluc3BlY3RvclN0
eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0Rm9ySWQoaWRQYXJ0cy5h
dCgwKSk7CisgICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBTdHJpbmcmIHJ1bGVJZCA9IGlkUGFydHMuYXQoMSk7CisgICAgYm9vbCBzdWNj
ZXNzID0gaW5zcGVjdG9yU3R5bGVTaGVldC0+c2V0UnVsZVNlbGVjdG9yKHJ1bGVJZCwgc2VsZWN0
b3IpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0dXJuOworCisgICAgKnJlc3VsdCA9
IGluc3BlY3RvclN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShpbnNwZWN0b3JTdHlsZVNo
ZWV0LT5ydWxlRm9ySWQocnVsZUlkKSk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yQ1NTQWdlbnQ6OmFk
ZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rvciwg
UmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KQoreworICAgIE5vZGUqIG5vZGUgPSBkb21B
Z2VudCgpLT5ub2RlRm9ySWQoY29udGV4dE5vZGVJZCk7CisgICAgaWYgKCFub2RlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBJbnNwZWN0b3JTdHlsZVNoZWV0KiBpbnNwZWN0b3JTdHlsZVNoZWV0
ID0gdmlhSW5zcGVjdG9yU3R5bGVTaGVldChub2RlLT5kb2N1bWVudCgpLCB0cnVlKTsKKyAgICBD
U1NTdHlsZVJ1bGUqIG5ld1J1bGUgPSBpbnNwZWN0b3JTdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVj
dG9yKTsKKyAgICBpZiAobmV3UnVsZSkKKyAgICAgICAgKnJlc3VsdCA9IGluc3BlY3RvclN0eWxl
U2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKTsKK30KKwordm9pZCBJbnNwZWN0b3JD
U1NBZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9yQXJyYXk+
KiBjc3NQcm9wZXJ0aWVzKQoreworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gcHJvcGVydGll
cyA9IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgcHJvcGVydGllcy0+cHVzaFN0cmluZyhwcm9w
ZXJ0eU5hbWVTdHJpbmdzW2ldKTsKKworICAgICpjc3NQcm9wZXJ0aWVzID0gcHJvcGVydGllcy5y
ZWxlYXNlKCk7Cit9CisKKy8vIHN0YXRpYworRWxlbWVudCogSW5zcGVjdG9yQ1NTQWdlbnQ6Omlu
bGluZVN0eWxlRWxlbWVudChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBpZiAo
IXN0eWxlIHx8ICFzdHlsZS0+aXNNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBOb2RlKiBub2RlID0gc3RhdGljX2Nhc3Q8Q1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qPihzdHlsZSktPm5vZGUoKTsKKyAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzU3R5
bGVkRWxlbWVudCgpIHx8IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihub2RlKS0+Z2V0SW5s
aW5lU3R5bGVEZWNsKCkgIT0gc3R5bGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Cit9CisKKy8vIHN0YXRpYwordm9pZCBJbnNwZWN0
b3JDU1NBZ2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVj
bGFyYXRpb24qIHN0eWxlLCBJbnNwZWN0b3JPYmplY3QqIHJlc3VsdCwgVmVjdG9yPENTU1Byb3Bl
cnR5U291cmNlRGF0YT4qIHByb3BlcnR5RGF0YSkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJy
YXk+IHByb3BlcnRpZXMgPSBJbnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPElu
c3BlY3Rvck9iamVjdD4gc2hvcnRoYW5kVmFsdWVzID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUo
KTsKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gPiBwcm9wZXJ0
eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHk7CisgICAgSGFzaFNldDxTdHJpbmc+IGZvdW5k
U2hvcnRoYW5kczsKKyAgICBIYXNoU2V0PFN0cmluZz4gc291cmNlUHJvcGVydHlOYW1lczsKKyAg
ICBpZiAocHJvcGVydHlEYXRhKSB7CisgICAgICAgIGZvciAoVmVjdG9yPENTU1Byb3BlcnR5U291
cmNlRGF0YT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydHlEYXRhLT5iZWdpbigpOyBpdCAh
PSBwcm9wZXJ0eURhdGEtPmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9w
ZXJ0eVNvdXJjZURhdGEmIHByb3BlcnR5RW50cnkgPSAqaXQ7CisgICAgICAgICAgICBSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBwcm9wZXJ0eSA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7Cisg
ICAgICAgICAgICBwcm9wZXJ0aWVzLT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKKyAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgbmFtZSA9IHByb3BlcnR5RW50cnkubmFtZTsKKyAgICAgICAgICAgIHNv
dXJjZVByb3BlcnR5TmFtZXMuYWRkKG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0
cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygidmFs
dWUiLCBwcm9wZXJ0eUVudHJ5LnZhbHVlKTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJp
bmcoInByaW9yaXR5IiwgcHJvcGVydHlFbnRyeS5pbXBvcnRhbnQgPyAiaW1wb3J0YW50IiA6ICIi
KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInN0YXR1cyIsICJhY3RpdmUiKTsK
KyAgICAgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRPayIsIHByb3BlcnR5RW50
cnkucGFyc2VkT2spOworICAgICAgICAgICAgcHJvcGVydHktPnNldE51bWJlcigic3RhcnRPZmZz
ZXQiLCBwcm9wZXJ0eUVudHJ5LnJhbmdlLnN0YXJ0KTsKKyAgICAgICAgICAgIHByb3BlcnR5LT5z
ZXROdW1iZXIoImVuZE9mZnNldCIsIHByb3BlcnR5RW50cnkucmFuZ2UuZW5kKTsKKyAgICAgICAg
ICAgIGlmIChwcm9wZXJ0eUVudHJ5LnBhcnNlZE9rKSB7CisgICAgICAgICAgICAgICAgcHJvcGVy
dHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAgICAgICAgIFN0cmlu
ZyBzaG9ydGhhbmQgPSBzdHlsZS0+Z2V0UHJvcGVydHlTaG9ydGhhbmQobmFtZSk7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNob3J0aGFuZCk7
CisgICAgICAgICAgICAgICAgaWYgKCFzaG9ydGhhbmQuaXNFbXB0eSgpICYmICFmb3VuZFNob3J0
aGFuZHMuY29udGFpbnMoc2hvcnRoYW5kKSkgeworICAgICAgICAgICAgICAgICAgICBmb3VuZFNo
b3J0aGFuZHMuYWRkKHNob3J0aGFuZCk7CisgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZFZh
bHVlcy0+c2V0U3RyaW5nKHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFu
ZCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0IiwgZmFsc2UpOworICAgICAgICAg
ICAgICAgIHByb3BlcnR5LT5zZXRTdHJpbmcoInNob3J0aGFuZE5hbWUiLCAiIik7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gPjo6aXRlcmF0b3IgYWN0aXZlSXQgPSBwcm9wZXJ0eU5hbWVUb1ByZXZpb3VzQWN0aXZlUHJv
cGVydHkuZmluZChuYW1lKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVJdCAhPSBwcm9wZXJ0eU5h
bWVUb1ByZXZpb3VzQWN0aXZlUHJvcGVydHkuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBhY3Rp
dmVJdC0+c2Vjb25kLT5zZXRTdHJpbmcoInN0YXR1cyIsICJpbmFjdGl2ZSIpOworICAgICAgICAg
ICAgICAgIGFjdGl2ZUl0LT5zZWNvbmQtPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsICIiKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHByb3BlcnR5TmFtZVRvUHJldmlvdXNBY3RpdmVQ
cm9wZXJ0eS5zZXQobmFtZSwgcHJvcGVydHkpOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
IChpbnQgaSA9IDAsIHNpemUgPSBzdHlsZS0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAg
ICAgICAgU3RyaW5nIG5hbWUgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKHNvdXJjZVBy
b3BlcnR5TmFtZXMuY29udGFpbnMobmFtZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBzb3VyY2VQcm9wZXJ0eU5hbWVzLmFkZChuYW1lKTsKKyAgICAgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gcHJvcGVydHkgPSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAg
ICBwcm9wZXJ0aWVzLT5wdXNoT2JqZWN0KHByb3BlcnR5KTsKKyAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygibmFtZSIsIG5hbWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJ2YWx1
ZSIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpKTsKKyAgICAgICAgcHJvcGVydHktPnNl
dFN0cmluZygicHJpb3JpdHkiLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eSgibmFtZSIpKTsK
KyAgICAgICAgcHJvcGVydHktPnNldEJvb2xlYW4oImltcGxpY2l0Iiwgc3R5bGUtPmlzUHJvcGVy
dHlJbXBsaWNpdChuYW1lKSk7CisgICAgICAgIHByb3BlcnR5LT5zZXRCb29sZWFuKCJwYXJzZWRP
ayIsIHRydWUpOworICAgICAgICBwcm9wZXJ0eS0+c2V0U3RyaW5nKCJzdGF0dXMiLCAic3R5bGUi
KTsKKyAgICAgICAgU3RyaW5nIHNob3J0aGFuZCA9IHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFu
ZChuYW1lKTsKKyAgICAgICAgcHJvcGVydHktPnNldFN0cmluZygic2hvcnRoYW5kTmFtZSIsIHNo
b3J0aGFuZCk7CisgICAgICAgIGlmICghc2hvcnRoYW5kLmlzRW1wdHkoKSAmJiAhZm91bmRTaG9y
dGhhbmRzLmNvbnRhaW5zKHNob3J0aGFuZCkpIHsKKyAgICAgICAgICAgIGZvdW5kU2hvcnRoYW5k
cy5hZGQoc2hvcnRoYW5kKTsKKyAgICAgICAgICAgIHNob3J0aGFuZFZhbHVlcy0+c2V0U3RyaW5n
KHNob3J0aGFuZCwgc2hvcnRoYW5kVmFsdWUoc3R5bGUsIHNob3J0aGFuZCkpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmVzdWx0LT5zZXRBcnJheSgicHJvcGVydGllcyIsIHByb3BlcnRpZXMp
OworICAgIHJlc3VsdC0+c2V0T2JqZWN0KCJzaG9ydGhhbmRWYWx1ZXMiLCBzaG9ydGhhbmRWYWx1
ZXMpOworfQorCisvLyBzdGF0aWMKK1N0cmluZyBJbnNwZWN0b3JDU1NBZ2VudDo6c2hvcnRoYW5k
VmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5k
UHJvcGVydHkpCit7CisgICAgU3RyaW5nIHZhbHVlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUo
c2hvcnRoYW5kUHJvcGVydHkpOworICAgIGlmICh2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
ICAgICBTdHJpbmcgaW5kaXZpZHVhbFByb3BlcnR5ID0gc3R5bGUtPml0ZW0oaSk7CisgICAgICAg
ICAgICBpZiAoc3R5bGUtPmdldFByb3BlcnR5U2hvcnRoYW5kKGluZGl2aWR1YWxQcm9wZXJ0eSkg
IT0gc2hvcnRoYW5kUHJvcGVydHkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICBpZiAoc3R5bGUtPmlzUHJvcGVydHlJbXBsaWNpdChpbmRpdmlkdWFsUHJvcGVydHkpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgU3RyaW5nIGluZGl2aWR1YWxW
YWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKGluZGl2aWR1YWxQcm9wZXJ0eSk7CisgICAg
ICAgICAgICBpZiAoaW5kaXZpZHVhbFZhbHVlID09ICJpbml0aWFsIikKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGgoKSkKKyAgICAgICAgICAg
ICAgICB2YWx1ZS5hcHBlbmQoIiAiKTsKKyAgICAgICAgICAgIHZhbHVlLmFwcGVuZChpbmRpdmlk
dWFsVmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB2YWx1ZTsKK30KKworLy8g
c3RhdGljCitTdHJpbmcgSW5zcGVjdG9yQ1NTQWdlbnQ6OnNob3J0aGFuZFByaW9yaXR5KENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25zdCBTdHJpbmcmIHNob3J0aGFuZFByb3BlcnR5KQor
eworICAgIFN0cmluZyBwcmlvcml0eSA9IHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHNob3J0
aGFuZFByb3BlcnR5KTsKKyAgICBpZiAocHJpb3JpdHkuaXNFbXB0eSgpKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHlsZS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgU3RyaW5nIGluZGl2aWR1YWxQcm9wZXJ0eSA9IHN0eWxlLT5pdGVtKGkpOworICAgICAgICAg
ICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9
IHNob3J0aGFuZFByb3BlcnR5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgcHJpb3JpdHkgPSBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShpbmRpdmlkdWFsUHJvcGVy
dHkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHBy
aW9yaXR5OworfQorCisKKy8vIHN0YXRpYworVmVjdG9yPFN0cmluZz4gSW5zcGVjdG9yQ1NTQWdl
bnQ6OmxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3Qg
U3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBwcm9wZXJ0
aWVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBmb3VuZFByb3BlcnRpZXM7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0eWxlLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFN0cmluZyBp
bmRpdmlkdWFsUHJvcGVydHkgPSBzdHlsZS0+aXRlbShpKTsKKyAgICAgICAgaWYgKGZvdW5kUHJv
cGVydGllcy5jb250YWlucyhpbmRpdmlkdWFsUHJvcGVydHkpIHx8IHN0eWxlLT5nZXRQcm9wZXJ0
eVNob3J0aGFuZChpbmRpdmlkdWFsUHJvcGVydHkpICE9IHNob3J0aGFuZFByb3BlcnR5KQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm91bmRQcm9wZXJ0aWVzLmFkZChpbmRpdmlk
dWFsUHJvcGVydHkpOworICAgICAgICBwcm9wZXJ0aWVzLmFwcGVuZChpbmRpdmlkdWFsUHJvcGVy
dHkpOworICAgIH0KKyAgICByZXR1cm4gcHJvcGVydGllczsKK30KKworSW5zcGVjdG9yU3R5bGVT
aGVldEZvcklubGluZVN0eWxlKiBJbnNwZWN0b3JDU1NBZ2VudDo6YXNJbnNwZWN0b3JTdHlsZVNo
ZWV0KEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1h
cDo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChlbGVtZW50
KTsKKyAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVuZCgpKSB7Cisg
ICAgICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gZWxlbWVudC0+aXNTdHlsZWRFbGVt
ZW50KCkgPyBlbGVtZW50LT5zdHlsZSgpIDogMDsKKyAgICAgICAgaWYgKCFzdHlsZSkKKyAgICAg
ICAgICAgIHJldHVybiAwOworCisgICAgICAgIFN0cmluZyBuZXdTdHlsZVNoZWV0SWQgPSBTdHJp
bmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU+IGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0
b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGU6OmNyZWF0ZShuZXdTdHlsZVNoZWV0SWQsIGVsZW1l
bnQsICIiKTsKKyAgICAgICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQobmV3U3R5bGVT
aGVldElkLCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgbV9ub2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0LnNldChlbGVtZW50LCBpbnNwZWN0b3JTdHlsZVNoZWV0KTsKKyAgICAgICAgcmV0
dXJuIGluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCk7CisgICAgfQorCisgICAgcmV0dXJuIGl0LT5z
ZWNvbmQuZ2V0KCk7Cit9CisKK0VsZW1lbnQqIEluc3BlY3RvckNTU0FnZW50OjplbGVtZW50Rm9y
SWQobG9uZyBub2RlSWQpCit7CisgICAgTm9kZSogbm9kZSA9IGRvbUFnZW50KCktPm5vZGVGb3JJ
ZChub2RlSWQpOworICAgIHJldHVybiAoIW5vZGUgfHwgbm9kZS0+bm9kZVR5cGUoKSAhPSBOb2Rl
OjpFTEVNRU5UX05PREUpID8gMCA6IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKK30KKwor
SW5zcGVjdG9yU3R5bGVTaGVldCogSW5zcGVjdG9yQ1NTQWdlbnQ6OmJpbmRTdHlsZVNoZWV0KENT
U1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hl
ZXQ+IGluc3BlY3RvclN0eWxlU2hlZXQgPSBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxl
U2hlZXQuZ2V0KHN0eWxlU2hlZXQpOworICAgIGlmICghaW5zcGVjdG9yU3R5bGVTaGVldCkgewor
ICAgICAgICBTdHJpbmcgaWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNoZWV0SWQrKyk7
CisgICAgICAgIGluc3BlY3RvclN0eWxlU2hlZXQgPSBJbnNwZWN0b3JTdHlsZVNoZWV0OjpjcmVh
dGUoaWQsIHN0eWxlU2hlZXQsIGRldGVjdE9yaWdpbihzdHlsZVNoZWV0LCBzdHlsZVNoZWV0LT5k
b2N1bWVudCgpKSwgZG9tQWdlbnQoKS0+ZG9jdW1lbnRVUkxTdHJpbmcoc3R5bGVTaGVldC0+ZG9j
dW1lbnQoKSkpOworICAgICAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LnNldChpZCwgaW5z
cGVjdG9yU3R5bGVTaGVldCk7CisgICAgICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVjdG9yU3R5
bGVTaGVldC5zZXQoc3R5bGVTaGVldCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7CisgICAgfQorICAg
IHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOworfQorCitJbnNwZWN0b3JTdHlsZVNo
ZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6dmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgY3JlYXRlSWZBYnNlbnQpCit7CisgICAgaWYgKCFkb2N1bWVudCkgewor
ICAgICAgICBBU1NFUlQoIWNyZWF0ZUlmQWJzZW50KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgUmVmUHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGluc3BlY3RvclN0eWxlU2hlZXQg
PSBtX2RvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0LmdldChkb2N1bWVudCk7CisgICAgaWYg
KGluc3BlY3RvclN0eWxlU2hlZXQgfHwgIWNyZWF0ZUlmQWJzZW50KQorICAgICAgICByZXR1cm4g
aW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwor
ICAgIFJlZlB0cjxFbGVtZW50PiBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC0+Y3JlYXRlRWxlbWVu
dCgic3R5bGUiLCBlYyk7CisgICAgaWYgKCFlYykKKyAgICAgICAgc3R5bGVFbGVtZW50LT5zZXRB
dHRyaWJ1dGUoInR5cGUiLCAidGV4dC9jc3MiLCBlYyk7CisgICAgaWYgKCFlYykKKyAgICAgICAg
ZG9jdW1lbnQtPmhlYWQoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAgaWYg
KGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVldHMg
PSBkb2N1bWVudC0+c3R5bGVTaGVldHMoKTsKKyAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0g
c3R5bGVTaGVldHMtPml0ZW0oc3R5bGVTaGVldHMtPmxlbmd0aCgpIC0gMSk7CisgICAgaWYgKCFz
dHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQ1NT
U3R5bGVTaGVldCogY3NzU3R5bGVTaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihz
dHlsZVNoZWV0KTsKKyAgICBTdHJpbmcgaWQgPSBTdHJpbmc6Om51bWJlcihtX2xhc3RTdHlsZVNo
ZWV0SWQrKyk7CisgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IEluc3BlY3RvclN0eWxlU2hlZXQ6
OmNyZWF0ZShpZCwgY3NzU3R5bGVTaGVldCwgImluc3BlY3RvciIsIGRvbUFnZW50KCktPmRvY3Vt
ZW50VVJMU3RyaW5nKGRvY3VtZW50KSk7CisgICAgbV9pZFRvSW5zcGVjdG9yU3R5bGVTaGVldC5z
ZXQoaWQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgIG1fY3NzU3R5bGVTaGVldFRvSW5zcGVj
dG9yU3R5bGVTaGVldC5zZXQoY3NzU3R5bGVTaGVldCwgaW5zcGVjdG9yU3R5bGVTaGVldCk7Cisg
ICAgbV9kb2N1bWVudFRvSW5zcGVjdG9yU3R5bGVTaGVldC5zZXQoZG9jdW1lbnQsIGluc3BlY3Rv
clN0eWxlU2hlZXQpOworICAgIHJldHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpOworfQor
CitJbnNwZWN0b3JTdHlsZVNoZWV0KiBJbnNwZWN0b3JDU1NBZ2VudDo6c3R5bGVTaGVldEZvcklk
KGNvbnN0IFN0cmluZyYgc3R5bGVTaGVldElkKQoreworICAgIElkVG9JbnNwZWN0b3JTdHlsZVNo
ZWV0TWFwOjppdGVyYXRvciBpdCA9IG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQuZmluZChzdHls
ZVNoZWV0SWQpOworICAgIHJldHVybiBpdCA9PSBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0LmVu
ZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK1N0cmluZyBJbnNwZWN0b3JDU1NBZ2Vu
dDo6ZGV0ZWN0T3JpZ2luKENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBEb2N1bWVudCog
b3duZXJEb2N1bWVudCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgdXNlckFn
ZW50LCAoInVzZXItYWdlbnQiKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHVz
ZXIsICgidXNlciIpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW5zcGVjdG9y
LCAoImluc3BlY3RvciIpKTsKKworICAgIFN0cmluZyBvcmlnaW4oIiIpOworICAgIGlmIChwYWdl
U3R5bGVTaGVldCAmJiAhcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhZ2VTdHlsZVNo
ZWV0LT5ocmVmKCkuaXNFbXB0eSgpKQorICAgICAgICBvcmlnaW4gPSB1c2VyQWdlbnQ7CisgICAg
ZWxzZSBpZiAocGFnZVN0eWxlU2hlZXQgJiYgcGFnZVN0eWxlU2hlZXQtPm93bmVyTm9kZSgpICYm
IHBhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKS0+bm9kZU5hbWUoKSA9PSAiI2RvY3VtZW50IikK
KyAgICAgICAgb3JpZ2luID0gdXNlcjsKKyAgICBlbHNlIHsKKyAgICAgICAgSW5zcGVjdG9yU3R5
bGVTaGVldCogdmlhSW5zcGVjdG9yU3R5bGVTaGVldEZvck93bmVyID0gdmlhSW5zcGVjdG9yU3R5
bGVTaGVldChvd25lckRvY3VtZW50LCBmYWxzZSk7CisgICAgICAgIGlmICh2aWFJbnNwZWN0b3JT
dHlsZVNoZWV0Rm9yT3duZXIgJiYgcGFnZVN0eWxlU2hlZXQgPT0gdmlhSW5zcGVjdG9yU3R5bGVT
aGVldEZvck93bmVyLT5wYWdlU3R5bGVTaGVldCgpKQorICAgICAgICAgICAgb3JpZ2luID0gaW5z
cGVjdG9yOworICAgIH0KKyAgICByZXR1cm4gb3JpZ2luOworfQorCitQYXNzUmVmUHRyPEluc3Bl
Y3RvckFycmF5PiBJbnNwZWN0b3JDU1NBZ2VudDo6YnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1
bGVMaXN0KiBydWxlTGlzdCkKK3sKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHJlc3VsdCA9
IEluc3BlY3RvckFycmF5OjpjcmVhdGUoKTsKKyAgICBpZiAoIXJ1bGVMaXN0KQorICAgICAgICBy
ZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDAsIHNpemUg
PSBydWxlTGlzdC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gYXNDU1NTdHlsZVJ1bGUocnVsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBp
ZiAoIXJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBzdHlsZVNoZWV0ID0gYmluZFN0eWxlU2hlZXQocGFyZW50U3R5bGVTaGVldChydWxl
KSk7CisgICAgICAgIGlmIChzdHlsZVNoZWV0KQorICAgICAgICAgICAgcmVzdWx0LT5wdXNoT2Jq
ZWN0KHN0eWxlU2hlZXQtPmJ1aWxkT2JqZWN0Rm9yUnVsZShydWxlKSk7CisgICAgfQorICAgIHJl
dHVybiByZXN1bHQucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
SW5zcGVjdG9yQ1NTQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQq
IGVsZW1lbnQpCit7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gc3R5bGVBdHRyaWJ1dGVz
ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMgPSBlbGVtZW50LT5hdHRyaWJ1dGVzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgYXR0
cmlidXRlcyAmJiBpIDwgYXR0cmlidXRlcy0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZXMtPmF0dHJpYnV0ZUl0ZW0oaSk7CisgICAgICAg
IGlmIChhdHRyaWJ1dGUtPnN0eWxlKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyBhdHRyaWJ1dGVO
YW1lID0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKTsKKyAgICAgICAgICAgIHN0eWxlQXR0cmlidXRl
cy0+c2V0T2JqZWN0KGF0dHJpYnV0ZU5hbWUudXRmOCgpLmRhdGEoKSwgYnVpbGRPYmplY3RGb3JT
dHlsZShhdHRyaWJ1dGUtPnN0eWxlKCksICIiKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gc3R5bGVBdHRyaWJ1dGVzOworfQorCit2b2lkIEluc3BlY3RvckNTU0FnZW50OjpkaWRS
ZW1vdmVEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgbV9kb2N1bWVudFRvSW5z
cGVjdG9yU3R5bGVTaGVldC5yZW1vdmUoZG9jdW1lbnQpOworfQorCit2b2lkIEluc3BlY3RvckNT
U0FnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCit7CisgICAgTm9kZVRvSW5zcGVj
dG9yU3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hl
ZXQuZmluZChub2RlKTsKKyAgICBpZiAoaXQgPT0gbV9ub2RlVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LmVuZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2lkVG9JbnNwZWN0b3JTdHlsZVNoZWV0
LnJlbW92ZShpdC0+c2Vjb25kLT5pZCgpKTsKKyAgICBtX25vZGVUb0luc3BlY3RvclN0eWxlU2hl
ZXQucmVtb3ZlKG5vZGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoSU5TUEVDVE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTBiNDE0MQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU0FnZW50LmgKQEAgLTAsMCArMSwxMzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluc3BlY3RvckNTU0FnZW50X2gKKyNkZWZpbmUg
SW5zcGVjdG9yQ1NTQWdlbnRfaAorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlTb3VyY2VEYXRhLmgi
CisjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIklu
c3BlY3RvckRPTUFnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yU3R5bGVTaGVldC5oIgorI2lu
Y2x1ZGUgIkluc3BlY3RvclZhbHVlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUnVsZTsKK2NsYXNzIENTU1J1bGVM
aXN0OworY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIEVsZW1lbnQ7CitjbGFzcyBJ
bnNwZWN0b3JGcm9udGVuZDsKK2NsYXNzIE5hbWVOb2RlTWFwOworY2xhc3MgTm9kZTsKKworI2lm
IEVOQUJMRShJTlNQRUNUT1IpCisKK2NsYXNzIEluc3BlY3RvckNTU0FnZW50IDogcHVibGljIFJl
ZkNvdW50ZWQ8SW5zcGVjdG9yQ1NTQWdlbnQ+LCBwdWJsaWMgSW5zcGVjdG9yRE9NQWdlbnQ6OkRP
TUxpc3RlbmVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbnNwZWN0b3JDU1NB
Z2VudD4gY3JlYXRlKEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwgSW5zcGVjdG9yRE9NQWdl
bnQqIGRvbUFnZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0
b3JDU1NBZ2VudChmcm9udGVuZCwgZG9tQWdlbnQpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNs
YXJhdGlvbiosIGNvbnN0IFN0cmluZyYgZnVsbFN0eWxlSWQsIENTU1N0eWxlU291cmNlRGF0YSog
PSAwKTsKKyAgICBzdGF0aWMgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldChTdHlsZUJh
c2UqKTsKKyAgICBzdGF0aWMgQ1NTU3R5bGVSdWxlKiBhc0NTU1N0eWxlUnVsZShTdHlsZUJhc2Uq
KTsKKworICAgIEluc3BlY3RvckNTU0FnZW50KEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCwg
SW5zcGVjdG9yRE9NQWdlbnQqIGRvbUFnZW50KTsKKyAgICB+SW5zcGVjdG9yQ1NTQWdlbnQoKTsK
KworICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGdldE1hdGNoZWRSdWxlc0Zvck5vZGUyKGxv
bmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBydWxlcyk7CisgICAgdm9pZCBnZXRN
YXRjaGVkUHNldWRvUnVsZXNGb3JOb2RlMihsb25nIG5vZGVJZCwgUmVmUHRyPEluc3BlY3RvckFy
cmF5PiogcnVsZXMpOworICAgIHZvaWQgZ2V0QXR0cmlidXRlU3R5bGVzRm9yTm9kZTIobG9uZyBu
b2RlSWQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlcyk7CisgICAgdm9pZCBnZXRJbmxp
bmVTdHlsZUZvck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiBzdHls
ZSk7CisgICAgdm9pZCBnZXRDb21wdXRlZFN0eWxlRm9yTm9kZTIobG9uZyBub2RlSWQsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIHN0eWxlKTsKKyAgICB2b2lkIGdldEluaGVyaXRlZFN0eWxlc0Zv
ck5vZGUyKGxvbmcgbm9kZUlkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiByZXN1bHQpOworICAg
IHZvaWQgZ2V0QWxsU3R5bGVzMihSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBzdHlsZXMpOworICAg
IHZvaWQgZ2V0U3R5bGVTaGVldDIoY29uc3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIFJlZlB0cjxJ
bnNwZWN0b3JWYWx1ZT4qIHJlc3VsdCk7CisgICAgdm9pZCBzZXRTdHlsZVNoZWV0VGV4dDIoY29u
c3QgU3RyaW5nJiBzdHlsZVNoZWV0SWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgdm9pZCBz
ZXRTdHlsZVRleHQyKGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+KiByZXN1bHQpOworICAgIHZvaWQgdG9nZ2xlUHJvcGVydHky
KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgbG9uZyBwcm9wZXJ0eU9yZGluYWwsIGJvb2wgZGlzYWJs
ZWQpOworICAgIHZvaWQgc2V0UnVsZVNlbGVjdG9yMihjb25zdCBTdHJpbmcmIHJ1bGVJZCwgY29u
c3QgU3RyaW5nJiBzZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAg
ICB2b2lkIGFkZFJ1bGUyKGNvbnN0IGxvbmcgY29udGV4dE5vZGVJZCwgY29uc3QgU3RyaW5nJiBz
ZWxlY3RvciwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogcmVzdWx0KTsKKyAgICB2b2lkIGdldFN1
cHBvcnRlZENTU1Byb3BlcnRpZXMoUmVmUHRyPEluc3BlY3RvckFycmF5PiogcmVzdWx0KTsKKwor
cHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8SW5zcGVjdG9yU3R5
bGVTaGVldD4gPiBJZFRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcDsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8Q1NTU3R5bGVTaGVldCosIFJlZlB0cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IENTU1N0eWxl
U2hlZXRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPE5vZGUq
LCBSZWZQdHI8SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlPiA+IE5vZGVUb0luc3Bl
Y3RvclN0eWxlU2hlZXRNYXA7IC8vIGZvciBib2d1cyAic3R5bGVzaGVldHMiIHdpdGggaW5saW5l
IG5vZGUgc3R5bGVzCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0
cjxJbnNwZWN0b3JTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9JbnNwZWN0b3JTdHlsZVNoZWV0TWFw
OyAvLyAidmlhIGluc3BlY3RvciIgc3R5bGVzaGVldHMKKworICAgIHN0YXRpYyBFbGVtZW50KiBp
bmxpbmVTdHlsZUVsZW1lbnQoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHN0YXRpYyB2b2lk
IHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwg
SW5zcGVjdG9yT2JqZWN0KiByZXN1bHQsIFZlY3RvcjxDU1NQcm9wZXJ0eVNvdXJjZURhdGE+KiBw
cm9wZXJ0eURhdGEpOworICAgIHN0YXRpYyBTdHJpbmcgc2hvcnRoYW5kVmFsdWUoQ1NTU3R5bGVE
ZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworICAgIHN0YXRp
YyBTdHJpbmcgc2hvcnRoYW5kUHJpb3JpdHkoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0
cmluZyYgc2hvcnRoYW5kUHJvcGVydHkpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBsb25n
aGFuZFByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYgc2hvcnRo
YW5kUHJvcGVydHkpOworCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlKiBh
c0luc3BlY3RvclN0eWxlU2hlZXQoRWxlbWVudCogZWxlbWVudCk7CisgICAgRWxlbWVudCogZWxl
bWVudEZvcklkKGxvbmcgbm9kZUlkKTsKKyAgICBJbnNwZWN0b3JET01BZ2VudCogZG9tQWdlbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CisKKyAgICBJbnNwZWN0b3JTdHls
ZVNoZWV0KiBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CisgICAgSW5zcGVjdG9yU3R5
bGVTaGVldCogdmlhSW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCosIGJvb2wgY3JlYXRlSWZB
YnNlbnQpOworICAgIEluc3BlY3RvclN0eWxlU2hlZXQqIHN0eWxlU2hlZXRGb3JJZChjb25zdCBT
dHJpbmcmIHN0eWxlU2hlZXRJZCk7CisgICAgU3RyaW5nIGRldGVjdE9yaWdpbihDU1NTdHlsZVNo
ZWV0KiBwYWdlU3R5bGVTaGVldCwgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQpOworCisgICAgUGFz
c1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0
KiBydWxlTGlzdCk7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0
Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQqIGVsZW1lbnQpOworCisgICAgLy8gSW5zcGVjdG9y
RE9NQWdlbnQ6OkRPTUxpc3RlbmVyIGludGVyZmFjZQorICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVEb2N1bWVudChEb2N1bWVudCopOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1vdmVET01Ob2Rl
KE5vZGUqKTsKKworICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOworICAgIFJlZlB0
cjxJbnNwZWN0b3JET01BZ2VudD4gbV9kb21BZ2VudDsKKworICAgIElkVG9JbnNwZWN0b3JTdHls
ZVNoZWV0TWFwIG1faWRUb0luc3BlY3RvclN0eWxlU2hlZXQ7CisgICAgQ1NTU3R5bGVTaGVldFRv
SW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX2Nzc1N0eWxlU2hlZXRUb0luc3BlY3RvclN0eWxlU2hl
ZXQ7CisgICAgTm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcCBtX25vZGVUb0luc3BlY3RvclN0
eWxlU2hlZXQ7CisgICAgRG9jdW1lbnRUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAgbV9kb2N1bWVu
dFRvSW5zcGVjdG9yU3R5bGVTaGVldDsKKworICAgIGxvbmcgbV9sYXN0U3R5bGVTaGVldElkOwor
ICAgIGxvbmcgbV9sYXN0UnVsZUlkOworICAgIGxvbmcgbV9sYXN0U3R5bGVJZDsKK307CisKKyNl
bmRpZgorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyAhZGVmaW5lZChJbnNw
ZWN0b3JDU1NBZ2VudF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
RE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCmlu
ZGV4IDIzMTZmMDQuLjQwYmFhYzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5jcHAKQEAgLTIxNyw2ICsyMTcsNyBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9N
QWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9udAogICAgIDog
RXZlbnRMaXN0ZW5lcihJbnNwZWN0b3JET01BZ2VudFR5cGUpCiAgICAgLCBtX2Nzc1N0b3JlKGNz
c1N0b3JlKQogICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKKyAgICAsIG1fZG9tTGlzdGVuZXIo
MCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQogICAgICwgbV9tYXRjaEpvYnNUaW1lcih0aGlzLCAm
SW5zcGVjdG9yRE9NQWdlbnQ6Om9uTWF0Y2hKb2JzVGltZXIpCiB7CkBAIC0yMzksNiArMjQwLDEx
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnJlc2V0KCkKICAgICBBU1NFUlQoIW1fZG9jdW1l
bnRzLnNpemUoKSk7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERPTUxpc3RlbmVy
KERPTUxpc3RlbmVyKiBsaXN0ZW5lcikKK3sKKyAgICBtX2RvbUxpc3RlbmVyID0gbGlzdGVuZXI7
Cit9CisKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldERvY3VtZW50KERvY3VtZW50KiBkb2Mp
CiB7CiAgICAgaWYgKGRvYyA9PSBtYWluRnJhbWVEb2N1bWVudCgpKQpAQCAtMzI4LDYgKzMzNCw4
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZChOb2RlKiBub2RlLCBOb2RlVG9JZE1h
cCogbm9kZXNNYXApCiAgICAgaWYgKG5vZGUtPmlzRnJhbWVPd25lckVsZW1lbnQoKSkgewogICAg
ICAgICBjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIGZyYW1lT3duZXIgPSBzdGF0aWNfY2Fz
dDxjb25zdCBIVE1MRnJhbWVPd25lckVsZW1lbnQqPihub2RlKTsKICAgICAgICAgc3RvcExpc3Rl
bmluZyhmcmFtZU93bmVyLT5jb250ZW50RG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChtX2RvbUxp
c3RlbmVyKQorICAgICAgICAgICAgbV9kb21MaXN0ZW5lci0+ZGlkUmVtb3ZlRG9jdW1lbnQoZnJh
bWVPd25lci0+Y29udGVudERvY3VtZW50KCkpOwogICAgICAgICBjc3NTdG9yZSgpLT5yZW1vdmVE
b2N1bWVudChmcmFtZU93bmVyLT5jb250ZW50RG9jdW1lbnQoKSk7CiAgICAgfQogCkBAIC00MDAs
NiArNDA4LDExIEBAIE5vZGUqIEluc3BlY3RvckRPTUFnZW50Ojpub2RlRm9ySWQobG9uZyBpZCkK
ICAgICByZXR1cm4gMDsKIH0KIAorbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6aWRGb3JEb2N1bWVu
dE5vZGUoTm9kZSogZG9jTm9kZSkKK3sKKyAgICByZXR1cm4gbV9kb2N1bWVudE5vZGVUb0lkTWFw
LmdldChkb2NOb2RlKTsKK30KKwogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0Q2hpbGROb2Rl
cyhsb25nIG5vZGVJZCkKIHsKICAgICBwdXNoQ2hpbGROb2Rlc1RvRnJvbnRlbmQobm9kZUlkKTsK
QEAgLTExMDQsNiArMTExNyw5IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZFJlbW92ZURP
TU5vZGUoTm9kZSogbm9kZSkKICAgICBpZiAoIXBhcmVudElkKQogICAgICAgICByZXR1cm47CiAK
KyAgICBpZiAobV9kb21MaXN0ZW5lcikKKyAgICAgICAgbV9kb21MaXN0ZW5lci0+ZGlkUmVtb3Zl
RE9NTm9kZShub2RlKTsKKwogICAgIGlmICghbV9jaGlsZHJlblJlcXVlc3RlZC5jb250YWlucyhw
YXJlbnRJZCkpIHsKICAgICAgICAgLy8gTm8gY2hpbGRyZW4gYXJlIG1hcHBlZCB5ZXQgLT4gb25s
eSBub3RpZnkgb24gY2hhbmdlcyBvZiBoYXNDaGlsZHJlbi4KICAgICAgICAgaWYgKGlubmVyQ2hp
bGROb2RlQ291bnQocGFyZW50KSA9PSAxKQpAQCAtMTUwMiw2ICsxNTE4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6Z2V0U3VwcG9ydGVkQ1NTUHJvcGVydGllcyhSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+KiBjc3NQcm8KICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHByb3BlcnRpZXMgPSBJ
bnNwZWN0b3JBcnJheTo6Y3JlYXRlKCk7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQ
cm9wZXJ0aWVzOyArK2kpCiAgICAgICAgIHByb3BlcnRpZXMtPnB1c2hTdHJpbmcocHJvcGVydHlO
YW1lU3RyaW5nc1tpXSk7CisKICAgICAqY3NzUHJvcGVydGllcyA9IHByb3BlcnRpZXMucmVsZWFz
ZSgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCA4OWM2ZmQw
Li5iMTBjMmI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2Vu
dC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTgwLDYg
KzgwLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEluc3BlY3RvckRPTUFn
ZW50IDogcHVibGljIEV2ZW50TGlzdGVuZXIgewogICAgIHB1YmxpYzoKKyAgICAgICAgc3RydWN0
IERPTUxpc3RlbmVyIHsKKyAgICAgICAgICAgIHZpcnR1YWwgfkRPTUxpc3RlbmVyKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZW1v
dmVEb2N1bWVudChEb2N1bWVudCopID0gMDsKKyAgICAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRS
ZW1vdmVET01Ob2RlKE5vZGUqKSA9IDA7CisgICAgICAgIH07CisKICAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SW5zcGVjdG9yRE9NQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JDU1NTdG9yZSogY3Nz
U3RvcmUsIEluc3BlY3RvckZyb250ZW5kKiBmcm9udGVuZCkKICAgICAgICAgewogICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JET01BZ2VudChjc3NTdG9yZSwgZnJvbnRl
bmQpKTsKQEAgLTE0MywxMSArMTUxLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBjaGFyYWN0ZXJEYXRhTW9kaWZpZWQoQ2hhcmFjdGVyRGF0YSopOwogCiAgICAgICAgIE5v
ZGUqIG5vZGVGb3JJZChsb25nIG5vZGVJZCk7CisgICAgICAgIGxvbmcgaWRGb3JEb2N1bWVudE5v
ZGUoTm9kZSopOwogICAgICAgICBsb25nIHB1c2hOb2RlUGF0aFRvRnJvbnRlbmQoTm9kZSogbm9k
ZSk7CiAgICAgICAgIHZvaWQgcHVzaENoaWxkTm9kZXNUb0Zyb250ZW5kKGxvbmcgbm9kZUlkKTsK
ICAgICAgICAgdm9pZCBwdXNoTm9kZUJ5UGF0aFRvRnJvbnRlbmQoY29uc3QgU3RyaW5nJiBwYXRo
LCBsb25nKiBub2RlSWQpOwogICAgICAgICBsb25nIGluc3BlY3RlZE5vZGUodW5zaWduZWQgbG9u
ZyBudW0pOwogICAgICAgICB2b2lkIGNvcHlOb2RlKGxvbmcgbm9kZUlkKTsKKyAgICAgICAgY29u
c3QgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+JiBkb2N1bWVudHMoKSB7IHJldHVybiBt
X2RvY3VtZW50czsgfQorICAgICAgICB2b2lkIHNldERPTUxpc3RlbmVyKERPTUxpc3RlbmVyKik7
CisKKyAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHN0YXJ0TGlzdGVuaW5nKERvY3Vt
ZW50KiBkb2N1bWVudCk7CkBAIC0xODUsNyArMTk4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIGlzV2hpdGVzcGFjZShOb2RlKiBub2RlKTsKIAogICAgICAgICBEb2N1bWVu
dCogbWFpbkZyYW1lRG9jdW1lbnQoKSBjb25zdDsKLSAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJM
U3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3Q7CiAgICAgICAgIEluc3BlY3RvckNTU1N0
b3JlKiBjc3NTdG9yZSgpIHsgcmV0dXJuIG1fY3NzU3RvcmU7IH0KIAogICAgICAgICB2b2lkIG9u
TWF0Y2hKb2JzVGltZXIoVGltZXI8SW5zcGVjdG9yRE9NQWdlbnQ+Kik7CkBAIC0yMDcsNiArMjE5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBt
X2Nzc1N0b3JlOwogICAgICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKKyAgICAg
ICAgRE9NTGlzdGVuZXIqIG1fZG9tTGlzdGVuZXI7CiAgICAgICAgIE5vZGVUb0lkTWFwIG1fZG9j
dW1lbnROb2RlVG9JZE1hcDsKICAgICAgICAgLy8gT3ducyBub2RlIG1hcHBpbmdzIGZvciBkYW5n
bGluZyBub2Rlcy4KICAgICAgICAgVmVjdG9yPE5vZGVUb0lkTWFwKj4gbV9kYW5nbGluZ05vZGVU
b0lkTWFwczsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjODdhZAotLS0gL2Rldi9udWxsCisrKyBi
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCkBAIC0wLDAgKzEsNTQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvclN0eWxlU2hlZXQuaCIKKworI2lmIEVOQUJMRShJTlNQRUNUT1IpCisKKyNpbmNsdWRlICJD
U1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRl
ICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKKyNpbmNsdWRlICJDU1NTdHls
ZVJ1bGUuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTU3R5
bGVTaGVldC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgorI2luY2x1ZGUgIkluc3Bl
Y3RvckNTU0FnZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVXRpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiTm9kZS5oIgorI2luY2x1ZGUgIlN0eWxl
U2hlZXRMaXN0LmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFBhcnNlZFN0eWxl
U2hlZXQgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxXZWJDb3JlOjpDU1NS
dWxlU291cmNlRGF0YT4gPiBTb3VyY2VEYXRhOworICAgIFBhcnNlZFN0eWxlU2hlZXQoKTsKKwor
ICAgIFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQqIGNzc1N0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVy
biBtX3BhcnNlck91dHB1dDsgfQorICAgIGNvbnN0IFN0cmluZyYgdGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdGV4dDsgfQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmIHRleHQpOworICAg
IGJvb2wgaGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4dDsgfQorICAgIFNvdXJjZURh
dGEqIHNvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGEuZ2V0KCk7IH0KKyAg
ICB2b2lkIHNldFNvdXJjZURhdGEoUGFzc093blB0cjxTb3VyY2VEYXRhPiBzb3VyY2VEYXRhKTsK
KyAgICBib29sIGhhc1NvdXJjZURhdGEoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZURhdGE7IH0K
KyAgICBSZWZQdHI8V2ViQ29yZTo6Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhQXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0OworCitwcml2YXRlOgorCisgICAgLy8gU3R5bGVTaGVldCBj
b25zdHJ1Y3RlZCB3aGlsZSBwYXJzaW5nIG1fdGV4dC4KKyAgICBXZWJDb3JlOjpDU1NTdHlsZVNo
ZWV0KiBtX3BhcnNlck91dHB1dDsKKyAgICBTdHJpbmcgbV90ZXh0OworICAgIGJvb2wgbV9oYXNU
ZXh0OworICAgIE93blB0cjxTb3VyY2VEYXRhPiBtX3NvdXJjZURhdGE7Cit9OworCitQYXJzZWRT
dHlsZVNoZWV0OjpQYXJzZWRTdHlsZVNoZWV0KCkKKyAgICA6IG1fcGFyc2VyT3V0cHV0KDApCisg
ICAgLCBtX2hhc1RleHQoZmFsc2UpCit7Cit9CisKK3ZvaWQgUGFyc2VkU3R5bGVTaGVldDo6c2V0
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgbV9oYXNUZXh0ID0gdHJ1ZTsKKyAgICBt
X3RleHQgPSB0ZXh0OworICAgIHNldFNvdXJjZURhdGEoMCk7Cit9CisKK3ZvaWQgUGFyc2VkU3R5
bGVTaGVldDo6c2V0U291cmNlRGF0YShQYXNzT3duUHRyPFNvdXJjZURhdGE+IHNvdXJjZURhdGEp
Cit7CisgICAgbV9zb3VyY2VEYXRhID0gc291cmNlRGF0YTsKK30KKworUmVmUHRyPFdlYkNvcmU6
OkNTU1J1bGVTb3VyY2VEYXRhPiBQYXJzZWRTdHlsZVNoZWV0OjpydWxlU291cmNlRGF0YUF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIGlmICghaGFzU291cmNlRGF0YSgpIHx8IGluZGV4
ID49IG1fc291cmNlRGF0YS0+c2l6ZSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVy
biBtX3NvdXJjZURhdGEtPmF0KGluZGV4KTsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpJbnNwZWN0b3JTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaWQs
IENTU1N0eWxlU2hlZXQqIHBhZ2VTdHlsZVNoZWV0LCBjb25zdCBTdHJpbmcmIG9yaWdpbiwgY29u
c3QgU3RyaW5nJiBkb2N1bWVudFVSTCkKKyAgICA6IG1faWQoaWQpCisgICAgLCBtX3BhZ2VTdHls
ZVNoZWV0KHBhZ2VTdHlsZVNoZWV0KQorICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICwgbV9k
b2N1bWVudFVSTChkb2N1bWVudFVSTCkKKyAgICAsIG1faXNSZXZhbGlkYXRpbmcoZmFsc2UpCit7
CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0ID0gbmV3IFBhcnNlZFN0eWxlU2hlZXQoKTsKK30KKwor
SW5zcGVjdG9yU3R5bGVTaGVldDo6fkluc3BlY3RvclN0eWxlU2hlZXQoKQoreworICAgIGRlbGV0
ZSBtX3BhcnNlZFN0eWxlU2hlZXQ7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0
VGV4dChjb25zdCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0VGV4
dCh0ZXh0KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbV9wYWdlU3R5bGVTaGVl
dC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fcGFnZVN0eWxlU2hlZXQtPnJl
bW92ZShpKTsKKworICAgIG1fcGFnZVN0eWxlU2hlZXQtPnBhcnNlU3RyaW5nKHRleHQsIG1fcGFn
ZVN0eWxlU2hlZXQtPnVzZVN0cmljdFBhcnNpbmcoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c2V0UnVsZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYg
cnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQoreworICAgIENTU1N0eWxlUnVsZSogcnVs
ZSA9IHJ1bGVGb3JJZChydWxlSWQpOworICAgIGlmICghcnVsZSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBJbnNwZWN0b3JDU1NBZ2VudDo6
cGFyZW50U3R5bGVTaGVldChydWxlKTsKKyAgICBpZiAoIXN0eWxlU2hlZXQgfHwgIWVuc3VyZVBh
cnNlZERhdGFSZWFkeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBydWxlLT5zZXRT
ZWxlY3RvclRleHQoc2VsZWN0b3IpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gc291
cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRhRm9yKHJ1bGUtPnN0eWxlKCkpOworICAgIGlmICghc291
cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgU3RyaW5nJiBzaGVl
dFRleHQgPSBtX3BhcnNlZFN0eWxlU2hlZXQtPnRleHQoKTsKKyAgICBTdHJpbmcgbmV3U3R5bGVT
aGVldFRleHQgPSBzaGVldFRleHQuc3Vic3RyaW5nKDAsIHNvdXJjZURhdGEtPnNlbGVjdG9yTGlz
dFJhbmdlLnN0YXJ0KTsKKyAgICBuZXdTdHlsZVNoZWV0VGV4dCArPSBzZWxlY3RvcjsKKyAgICBu
ZXdTdHlsZVNoZWV0VGV4dCArPSBzaGVldFRleHQucmlnaHQoc2hlZXRUZXh0Lmxlbmd0aCgpIC0g
c291cmNlRGF0YS0+c2VsZWN0b3JMaXN0UmFuZ2UuZW5kKTsKKyAgICBtX3BhcnNlZFN0eWxlU2hl
ZXQtPnNldFRleHQobmV3U3R5bGVTaGVldFRleHQpOworICAgIHJldHVybiB0cnVlOworfQorCitD
U1NTdHlsZVJ1bGUqIEluc3BlY3RvclN0eWxlU2hlZXQ6OmFkZFJ1bGUoY29uc3QgU3RyaW5nJiBz
ZWxlY3RvcikKK3sKKyAgICBTdHJpbmcgdGV4dDsKKyAgICBib29sIHN1Y2Nlc3MgPSBzdHlsZVNo
ZWV0VGV4dCgmdGV4dCk7CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIG1fcGFnZVN0eWxlU2hlZXQtPmFkZFJ1bGUo
c2VsZWN0b3IsICIiLCBlYyk7CisgICAgaWYgKGVjKQorICAgICAgICByZXR1cm4gMDsKKyAgICBS
ZWZQdHI8Q1NTUnVsZUxpc3Q+IHJ1bGVzID0gbV9wYWdlU3R5bGVTaGVldC0+Y3NzUnVsZXMoKTsK
KyAgICBBU1NFUlQocnVsZXMtPmxlbmd0aCgpKTsKKyAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJ
bnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHlsZVJ1bGUocnVsZXMtPml0ZW0ocnVsZXMtPmxlbmd0
aCgpIC0gMSkpOworICAgIEFTU0VSVChydWxlKTsKKworICAgIGlmICh0ZXh0Lmxlbmd0aCgpKQor
ICAgICAgICB0ZXh0ICs9ICJcbiI7CisKKyAgICB0ZXh0ICs9IHNlbGVjdG9yOworICAgIHRleHQg
Kz0gIiB7fSI7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0LT5zZXRUZXh0KHRleHQpOworCisgICAg
cmV0dXJuIHJ1bGU7Cit9CisKK0NTU1N0eWxlUnVsZSogSW5zcGVjdG9yU3R5bGVTaGVldDo6cnVs
ZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgaWYgKCFtX3BhZ2VTdHlsZVNo
ZWV0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGJvb2wgb2s7CisgICAgdW5zaWduZWQgaW5k
ZXggPSBpZC50b1VJbnQoJm9rKTsKKyAgICBpZiAoIW9rKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwg
c2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVs
ZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGkpKTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChpbmRleCA9PSBjdXJyZW50SW5kZXgpCisgICAg
ICAgICAgICByZXR1cm4gcnVsZTsKKworICAgICAgICArK2N1cnJlbnRJbmRleDsKKyAgICB9Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JT
dHlsZVNoZWV0OjpidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoKQoreworICAgIENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQgPSBwYWdlU3R5bGVTaGVldCgpOworICAgIGlmICghc3R5bGVTaGVldCkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJpZCIs
IGlkKCkpOworICAgIHJlc3VsdC0+c2V0Qm9vbGVhbigiZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5k
aXNhYmxlZCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhy
ZWYoKSk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRpdGxlIiwgc3R5bGVTaGVldC0+dGl0bGUo
KSk7CisgICAgUmVmUHRyPENTU1J1bGVMaXN0PiBjc3NSdWxlTGlzdCA9IENTU1J1bGVMaXN0Ojpj
cmVhdGUoc3R5bGVTaGVldCwgdHJ1ZSk7CisgICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBjc3NS
dWxlcyA9IGJ1aWxkQXJyYXlGb3JSdWxlTGlzdChjc3NSdWxlTGlzdC5nZXQoKSk7CisgICAgcmVz
dWx0LT5zZXRBcnJheSgiY3NzUnVsZXMiLCBjc3NSdWxlcy5yZWxlYXNlKCkpOworCisgICAgU3Ry
aW5nIHN0eWxlU2hlZXRUZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IHRleHQoJnN0eWxlU2hlZXRU
ZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgcmVzdWx0LT5zZXRTdHJpbmcoInRleHQi
LCBzdHlsZVNoZWV0VGV4dCk7CisKKyAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclN0eWxlU2hlZXQ6OmJ1aWxkT2Jq
ZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IHBhZ2VTdHlsZVNoZWV0KCk7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IHJlc3VsdCA9IEluc3Bl
Y3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgcmVzdWx0LT5zZXRTdHJpbmcoInNlbGVjdG9yVGV4
dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygiY3NzVGV4
dCIsIHJ1bGUtPmNzc1RleHQoKSk7CisgICAgcmVzdWx0LT5zZXROdW1iZXIoInNvdXJjZUxpbmUi
LCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJkb2N1bWVudFVS
TCIsIG1fZG9jdW1lbnRVUkwpOworCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gcGFyZW50
U3R5bGVTaGVldFZhbHVlID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBwYXJlbnRT
dHlsZVNoZWV0VmFsdWUtPnNldFN0cmluZygiaWQiLCBpZCgpKTsKKyAgICBwYXJlbnRTdHlsZVNo
ZWV0VmFsdWUtPnNldFN0cmluZygiaHJlZiIsIHN0eWxlU2hlZXQtPmhyZWYoKSk7CisgICAgcmVz
dWx0LT5zZXRPYmplY3QoInBhcmVudFN0eWxlU2hlZXQiLCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUu
cmVsZWFzZSgpKTsKKyAgICByZXN1bHQtPnNldFN0cmluZygib3JpZ2luIiwgbV9vcmlnaW4pOwor
CisgICAgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBzb3VyY2VEYXRhOworICAgIGlmIChlbnN1
cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAgc291cmNlRGF0YSA9IHJ1bGVTb3VyY2VEYXRh
Rm9yKHJ1bGUtPnN0eWxlKCkpOworICAgIGlmIChzb3VyY2VEYXRhKSB7CisgICAgICAgIHJlc3Vs
dC0+c2V0TnVtYmVyKCJzZWxlY3RvclN0YXJ0T2Zmc2V0Iiwgc291cmNlRGF0YS0+c2VsZWN0b3JM
aXN0UmFuZ2Uuc3RhcnQpOworICAgICAgICByZXN1bHQtPnNldE51bWJlcigic2VsZWN0b3JFbmRP
ZmZzZXQiLCBzb3VyY2VEYXRhLT5zZWxlY3Rvckxpc3RSYW5nZS5lbmQpOworICAgIH0KKworICAg
IHJlc3VsdC0+c2V0T2JqZWN0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUocnVsZS0+c3R5
bGUoKSkpOworICAgIGlmIChjYW5CaW5kKCkpCisgICAgICAgIHJlc3VsdC0+c2V0U3RyaW5nKCJp
ZCIsIGZ1bGxSdWxlSWQocnVsZSkpOworCisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9
CisKK1Bhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWls
ZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0
cjxDU1NSdWxlU291cmNlRGF0YT4gc291cmNlRGF0YTsKKyAgICBpZiAoZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkpCisgICAgICAgIHNvdXJjZURhdGEgPSBydWxlU291cmNlRGF0YUZvcihzdHlsZSk7
CisKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiByZXN1bHQgPSBJbnNwZWN0b3JDU1NBZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgZnVsbFN0eWxlSWQoc3R5bGUpLCBzb3VyY2VE
YXRhID8gc291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhLmdldCgpIDogMCk7CisgICAgcmVzdWx0
LT5zZXRTdHJpbmcoInBhcmVudFN0eWxlU2hlZXRJZCIsIGlkKCkpOworICAgIHJldHVybiByZXN1
bHQucmVsZWFzZSgpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JTdHlsZVNo
ZWV0OjpzdHlsZUZvcklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0Cit7CisgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gcnVsZUZvcklkKGlkKTsKKyAgICBpZiAoIXJ1bGUpCisgICAgICAgIHJldHVy
biAwOworCisgICAgcmV0dXJuIHJ1bGUtPnN0eWxlKCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5
bGVTaGVldDo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5n
JiBuZXdUZXh0KQoreworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gc3R5bGVGb3JJ
ZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gaW5uZXJTZXRTdHlsZVRleHQoc3R5bGUsIG5ld1RleHQpOworfQorCitSZWZQdHI8
Q1NTUnVsZVNvdXJjZURhdGE+IEluc3BlY3RvclN0eWxlU2hlZXQ6OnJ1bGVTb3VyY2VEYXRhRm9y
KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdAoreworICAgIHJldHVybiBtX3BhcnNl
ZFN0eWxlU2hlZXQtPnJ1bGVTb3VyY2VEYXRhQXQocnVsZUluZGV4QnlTdHlsZShzdHlsZSkpOwor
fQorCit1bnNpZ25lZCBJbnNwZWN0b3JTdHlsZVNoZWV0OjpydWxlSW5kZXhCeVN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkgY29uc3QKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9
IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc2l6ZSA9IG1fcGFnZVN0eWxlU2hlZXQtPmxl
bmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IElu
c3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShtX3BhZ2VTdHlsZVNoZWV0LT5pdGVtKGkp
KTsKKyAgICAgICAgaWYgKCFydWxlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlm
IChydWxlLT5zdHlsZSgpID09IHBhZ2VTdHlsZSkKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsK
KworICAgICAgICArK2luZGV4OworICAgIH0KKyAgICByZXR1cm4gVUlOVF9NQVg7Cit9CisKK2Jv
b2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCkKK3sKKyAgICBy
ZXR1cm4gZW5zdXJlVGV4dCgpICYmIGVuc3VyZVNvdXJjZURhdGEocGFnZVN0eWxlU2hlZXQoKS0+
b3duZXJOb2RlKCkpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXQ6OnRleHQoU3RyaW5n
KiByZXN1bHQpIGNvbnN0Cit7CisgICAgaWYgKCFlbnN1cmVUZXh0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAqcmVzdWx0ID0gbV9wYXJzZWRTdHlsZVNoZWV0LT50ZXh0KCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZW5zdXJlVGV4dCgp
IGNvbnN0Cit7CisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNUZXh0KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgU3RyaW5nIHRleHQ7CisgICAgYm9vbCBzdWNjZXNzID0gc3R5bGVT
aGVldFRleHQoJnRleHQpOworICAgIGlmIChzdWNjZXNzKQorICAgICAgICBtX3BhcnNlZFN0eWxl
U2hlZXQtPnNldFRleHQodGV4dCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjplbnN1cmVTb3VyY2VEYXRhKE5vZGUqIG93bmVyTm9kZSkKK3sK
KyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0LT5oYXNTb3VyY2VEYXRhKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXQtPmhhc1RleHQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IG5ld1N0eWxl
U2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUob3duZXJOb2RlKTsKKyAgICBDU1NQYXJzZXIg
cDsKKyAgICBTdHlsZVJ1bGVSYW5nZU1hcCBydWxlUmFuZ2VNYXA7CisgICAgcC5wYXJzZVNoZWV0
KG5ld1N0eWxlU2hlZXQuZ2V0KCksIG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpLCAwLCAmcnVs
ZVJhbmdlTWFwKTsKKyAgICBPd25QdHI8UGFyc2VkU3R5bGVTaGVldDo6U291cmNlRGF0YT4gcmFu
Z2VzVmVjdG9yKG5ldyBQYXJzZWRTdHlsZVNoZWV0OjpTb3VyY2VEYXRhKCkpOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMCwgbGVuZ3RoID0gbmV3U3R5bGVTaGVldC0+bGVuZ3RoKCk7IGkgPCBs
ZW5ndGg7ICsraSkgeworICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NB
Z2VudDo6YXNDU1NTdHlsZVJ1bGUobmV3U3R5bGVTaGVldC0+aXRlbShpKSk7CisgICAgICAgIGlm
ICghcnVsZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTdHlsZVJ1bGVSYW5nZU1h
cDo6aXRlcmF0b3IgaXQgPSBydWxlUmFuZ2VNYXAuZmluZChydWxlKTsKKyAgICAgICAgaWYgKGl0
ICE9IHJ1bGVSYW5nZU1hcC5lbmQoKSkKKyAgICAgICAgICAgIHJhbmdlc1ZlY3Rvci0+YXBwZW5k
KGl0LT5zZWNvbmQpOworICAgIH0KKworICAgIG1fcGFyc2VkU3R5bGVTaGVldC0+c2V0U291cmNl
RGF0YShyYW5nZXNWZWN0b3IucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNo
ZWV0LT5oYXNTb3VyY2VEYXRhKCk7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6aW5u
ZXJTZXRTdHlsZVNoZWV0VGV4dChjb25zdCBTdHJpbmcmIG5ld1RleHQpCit7CisgICAgbV9wYXJz
ZWRTdHlsZVNoZWV0LT5zZXRUZXh0KG5ld1RleHQpOworfQorCitib29sIEluc3BlY3RvclN0eWxl
U2hlZXQ6OmlubmVyU2V0U3R5bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBjb25z
dCBTdHJpbmcmIHRleHQpCit7CisgICAgaWYgKCFwYWdlU3R5bGVTaGVldCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFlbnN1cmVQYXJzZWREYXRhUmVhZHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIHBhdGNoZWRTdHlsZVNoZWV0VGV4dDsKKyAgICBi
b29sIHN1Y2Nlc3MgPSBzdHlsZVNoZWV0VGV4dFdpdGhDaGFuZ2VkU3R5bGUoc3R5bGUsIHRleHQs
ICZwYXRjaGVkU3R5bGVTaGVldFRleHQpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGlkID0gcnVsZU9yU3R5bGVJZChzdHlsZSk7CisgICAg
aWYgKGlkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgc3R5bGUtPnNldENzc1RleHQodGV4dCwgZWMpOworICAgIGlmICgh
ZWMpCisgICAgICAgIGlubmVyU2V0U3R5bGVTaGVldFRleHQocGF0Y2hlZFN0eWxlU2hlZXRUZXh0
KTsKKworICAgIHJldHVybiAhZWM7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6c3R5
bGVTaGVldFRleHRXaXRoQ2hhbmdlZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBj
b25zdCBTdHJpbmcmIG5ld1N0eWxlVGV4dCwgU3RyaW5nKiByZXN1bHQpCit7CisgICAgaWYgKCFz
dHlsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFlbnN1cmVQYXJzZWREYXRh
UmVhZHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU1J1bGVTb3Vy
Y2VEYXRhPiBzb3VyY2VEYXRhID0gcnVsZVNvdXJjZURhdGFGb3Ioc3R5bGUpOworICAgIHVuc2ln
bmVkIGJvZHlTdGFydCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNlRGF0YS0+c3R5bGVCb2R5UmFu
Z2Uuc3RhcnQ7CisgICAgdW5zaWduZWQgYm9keUVuZCA9IHNvdXJjZURhdGEtPnN0eWxlU291cmNl
RGF0YS0+c3R5bGVCb2R5UmFuZ2UuZW5kOworICAgIEFTU0VSVChib2R5U3RhcnQgPD0gYm9keUVu
ZCk7CisKKyAgICBTdHJpbmcgdGV4dCA9IG1fcGFyc2VkU3R5bGVTaGVldC0+dGV4dCgpOworICAg
IEFTU0VSVChib2R5RW5kIDw9IHRleHQubGVuZ3RoKCkpOyAvLyBib2R5RW5kIGlzIGV4Y2x1c2l2
ZQorCisgICAgU3RyaW5nIHBhdGNoZWRUZXh0ID0gdGV4dC5zdWJzdHJpbmcoMCwgYm9keVN0YXJ0
KTsKKyAgICBwYXRjaGVkVGV4dCArPSBuZXdTdHlsZVRleHQ7CisgICAgcGF0Y2hlZFRleHQgKz0g
dGV4dC5zdWJzdHJpbmcoYm9keUVuZCwgdGV4dC5sZW5ndGgoKSk7CisgICAgKnJlc3VsdCA9IHBh
dGNoZWRUZXh0OworICAgIHJldHVybiB0cnVlOworfQorCitDU1NTdHlsZVJ1bGUqIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmZpbmRQYWdlUnVsZVdpdGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0gbV9wYWdlU3R5bGVTaGVl
dC0+bGVuZ3RoKCk7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxl
ID0gSW5zcGVjdG9yQ1NTQWdlbnQ6OmFzQ1NTU3R5bGVSdWxlKG1fcGFnZVN0eWxlU2hlZXQtPml0
ZW0oaSkpOworICAgICAgICBpZiAoIXJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKHJ1bGUtPnN0eWxlKCkgPT0gc3R5bGUpCisgICAgICAgICAgICByZXR1cm4gcnVsZTsK
KyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmV2
YWxpZGF0ZVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHBhZ2VTdHlsZSkKK3sKKyAgICBpZiAo
bV9pc1JldmFsaWRhdGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9pc1JldmFsaWRhdGlu
ZyA9IHRydWU7CisgICAgQ1NTU3R5bGVTaGVldCogcGFyc2VkU2hlZXQgPSBtX3BhcnNlZFN0eWxl
U2hlZXQtPmNzc1N0eWxlU2hlZXQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBzaXplID0g
cGFyc2VkU2hlZXQtPmxlbmd0aCgpOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAgIFN0eWxlQmFz
ZSogc3R5bGVCYXNlID0gcGFyc2VkU2hlZXQtPml0ZW0oaSk7CisgICAgICAgIENTU1N0eWxlUnVs
ZSogcGFyc2VkUnVsZSA9IEluc3BlY3RvckNTU0FnZW50Ojphc0NTU1N0eWxlUnVsZShzdHlsZUJh
c2UpOworICAgICAgICBpZiAoIXBhcnNlZFJ1bGUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgaWYgKHBhcnNlZFJ1bGUtPnN0eWxlKCkgPT0gcGFnZVN0eWxlKSB7CisgICAgICAgICAg
ICBpZiAocGFyc2VkUnVsZS0+c3R5bGUoKS0+Y3NzVGV4dCgpICE9IHBhZ2VTdHlsZS0+Y3NzVGV4
dCgpKQorICAgICAgICAgICAgICAgIGlubmVyU2V0U3R5bGVUZXh0KHBhZ2VTdHlsZSwgcGFnZVN0
eWxlLT5jc3NUZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgbV9pc1JldmFsaWRhdGluZyA9IGZhbHNlOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hl
ZXQ6OnN0eWxlU2hlZXRUZXh0KFN0cmluZyogcmVzdWx0KSBjb25zdAoreworICAgIFN0cmluZyB0
ZXh0OworICAgIGJvb2wgc3VjY2VzcyA9IGlubGluZVN0eWxlU2hlZXRUZXh0KCZ0ZXh0KTsKKyAg
ICBpZiAoIXN1Y2Nlc3MpCisgICAgICAgIHN1Y2Nlc3MgPSByZXNvdXJjZVN0eWxlU2hlZXRUZXh0
KCZ0ZXh0KTsKKyAgICBpZiAoc3VjY2VzcykKKyAgICAgICAgKnJlc3VsdCA9IHRleHQ7CisgICAg
cmV0dXJuIHN1Y2Nlc3M7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVTaGVldDo6cmVzb3VyY2VT
dHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcGFnZVN0
eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBJbnNwZWN0b3JV
dGlsaXRpZXM6OnJlc291cmNlQ29udGVudEZvclVSTChtX3BhZ2VTdHlsZVNoZWV0LT5maW5hbFVS
TCgpLCBvd25lckRvY3VtZW50KCksIHJlc3VsdCk7Cit9CisKK2Jvb2wgSW5zcGVjdG9yU3R5bGVT
aGVldDo6aW5saW5lU3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0Cit7CisgICAg
aWYgKCFtX3BhZ2VTdHlsZVNoZWV0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2Rl
KiBvd25lck5vZGUgPSBtX3BhZ2VTdHlsZVNoZWV0LT5vd25lck5vZGUoKTsKKyAgICBpZiAoIW93
bmVyTm9kZSB8fCBvd25lck5vZGUtPm5vZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgRWxlbWVudCogb3duZXJFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKG93bmVyRWxlbWVudC0+dGFnTmFt
ZSgpLmxvd2VyKCkgIT0gInN0eWxlIikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICpyZXN1
bHQgPSBvd25lckVsZW1lbnQtPmlubmVyVGV4dCgpOworICAgIHJldHVybiB0cnVlOworfQorCitQ
YXNzUmVmUHRyPEluc3BlY3RvckFycmF5PiBJbnNwZWN0b3JTdHlsZVNoZWV0OjpidWlsZEFycmF5
Rm9yUnVsZUxpc3QoQ1NTUnVsZUxpc3QqIHJ1bGVMaXN0KQoreworICAgIFJlZlB0cjxJbnNwZWN0
b3JBcnJheT4gcmVzdWx0ID0gSW5zcGVjdG9yQXJyYXk6OmNyZWF0ZSgpOworICAgIGlmICghcnVs
ZUxpc3QpCisgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMCwgc2l6ZSA9IHJ1bGVMaXN0LT5sZW5ndGgoKTsgaSA8IHNpemU7ICsraSkgewor
ICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBJbnNwZWN0b3JDU1NBZ2VudDo6YXNDU1NTdHls
ZVJ1bGUocnVsZUxpc3QtPml0ZW0oaSkpOworICAgICAgICBpZiAoIXJ1bGUpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICByZXN1bHQtPnB1c2hPYmplY3QoYnVpbGRPYmplY3RGb3JS
dWxlKHJ1bGUpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlKCk7Cit9CisKKwor
SW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpJbnNwZWN0b3JTdHlsZVNoZWV0Rm9y
SW5saW5lU3R5bGUoY29uc3QgU3RyaW5nJiBpZCwgRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3Ry
aW5nJiBvcmlnaW4pCisgICAgOiBJbnNwZWN0b3JTdHlsZVNoZWV0KGlkLCAwLCBvcmlnaW4sICIi
KQorICAgICwgbV9lbGVtZW50KGVsZW1lbnQpCisgICAgLCBtX3J1bGVTb3VyY2VEYXRhKDApCit7
CisgICAgQVNTRVJUKGVsZW1lbnQpOworfQorCitib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJ
bmxpbmVTdHlsZTo6c2V0U3R5bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3Ry
aW5nJiB0ZXh0KQoreworICAgIEFTU0VSVChzdHlsZUlkID09ICIwIik7CisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgbV9lbGVtZW50LT5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgdGV4dCwg
ZWMpOworICAgIG1fcnVsZVNvdXJjZURhdGEuY2xlYXIoKTsKKyAgICByZXR1cm4gIWVjOworfQor
Citib29sIEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZTo6ZW5zdXJlUGFyc2VkRGF0
YVJlYWR5KCkKK3sKKyAgICBpZiAobV9ydWxlU291cmNlRGF0YSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICBtX3J1bGVTb3VyY2VEYXRhID0gQ1NTUnVsZVNvdXJjZURhdGE6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxDU1NTdHlsZVNvdXJjZURhdGE+IHNvdXJjZURhdGEgPSBDU1NTdHlsZVNv
dXJjZURhdGE6OmNyZWF0ZSgpOworICAgIGJvb2wgc3VjY2VzcyA9IGdldFN0eWxlQXR0cmlidXRl
UmFuZ2VzKHNvdXJjZURhdGEuZ2V0KCkpOworICAgIGlmICghc3VjY2VzcykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9ydWxlU291cmNlRGF0YS0+c3R5bGVTb3VyY2VEYXRhID0gc291
cmNlRGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgSW5zcGVjdG9y
U3R5bGVTaGVldEZvcklubGluZVN0eWxlOjpnZXRTdHlsZUF0dHJpYnV0ZVJhbmdlcyhDU1NTdHls
ZVNvdXJjZURhdGEqIHJlc3VsdCkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
c3R5bGVBdHRyaWJ1dGVOYW1lLCAoInN0eWxlIikpOworCisgICAgaWYgKCFtX2VsZW1lbnQtPmlz
U3R5bGVkRWxlbWVudCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTdHJpbmcgc3R5
bGVUZXh0ID0gc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KG1fZWxlbWVudCktPmdldEF0dHJp
YnV0ZShzdHlsZUF0dHJpYnV0ZU5hbWUpOworICAgIGlmIChzdHlsZVRleHQuaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlc3VsdC0+c3R5bGVCb2R5UmFuZ2Uuc3RhcnQgPSAwOworICAgICAgICByZXN1
bHQtPnN0eWxlQm9keVJhbmdlLmVuZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gdGVtcERlY2xhcmF0aW9u
ID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIENTU1BhcnNlciBw
OworICAgIHAucGFyc2VEZWNsYXJhdGlvbih0ZW1wRGVjbGFyYXRpb24uZ2V0KCksIHN0eWxlVGV4
dCwgcmVzdWx0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKElOU1BFQ1RPUikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTg4Yzcy
Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJbnNwZWN0b3JT
dHlsZVNoZWV0X2gKKyNkZWZpbmUgSW5zcGVjdG9yU3R5bGVTaGVldF9oCisKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eVNvdXJjZURhdGEuaCIKKyNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKKyNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
bGVtZW50LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK2NsYXNzIFBhcnNlZFN0eWxlU2hlZXQ7
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUnVsZUxpc3Q7CitjbGFzcyBDU1NT
dHlsZURlY2xhcmF0aW9uOworY2xhc3MgRWxlbWVudDsKK2NsYXNzIE5vZGU7CisKKyNpZiBFTkFC
TEUoSU5TUEVDVE9SKQorCitjbGFzcyBJbnNwZWN0b3JTdHlsZVNoZWV0IDogcHVibGljIFJlZkNv
dW50ZWQ8SW5zcGVjdG9yU3R5bGVTaGVldD4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclN0eWxlU2hlZXQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIGlkLCBDU1NTdHls
ZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0cmlu
ZyYgZG9jdW1lbnRVUkwpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluc3Bl
Y3RvclN0eWxlU2hlZXQoaWQsIHBhZ2VTdHlsZVNoZWV0LCBvcmlnaW4sIGRvY3VtZW50VVJMKSk7
CisgICAgfQorCisgICAgSW5zcGVjdG9yU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGlkLCBDU1NT
dHlsZVNoZWV0KiBwYWdlU3R5bGVTaGVldCwgY29uc3QgU3RyaW5nJiBvcmlnaW4sIGNvbnN0IFN0
cmluZyYgZG9jdW1lbnRVUkwpOworICAgIHZpcnR1YWwgfkluc3BlY3RvclN0eWxlU2hlZXQoKTsK
KworICAgIGNvbnN0IFN0cmluZyYgaWQoKSBjb25zdCB7IHJldHVybiBtX2lkOyB9CisgICAgQ1NT
U3R5bGVTaGVldCogcGFnZVN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhZ2VTdHlsZVNo
ZWV0OyB9CisgICAgYm9vbCBzZXRUZXh0KGNvbnN0IFN0cmluZyYpOworICAgIGJvb2wgc2V0UnVs
ZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgcnVsZUlkLCBjb25zdCBTdHJpbmcmIHNlbGVjdG9yKTsK
KyAgICBDU1NTdHlsZVJ1bGUqIGFkZFJ1bGUoY29uc3QgU3RyaW5nJiBzZWxlY3Rvcik7CisgICAg
Q1NTU3R5bGVSdWxlKiBydWxlRm9ySWQoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldCgpOworICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxl
Kik7CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJ1aWxkT2JqZWN0Rm9yU3R5bGUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiopOworICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGVGb3JJZChjb25zdCBTdHJpbmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgc2V0U3R5
bGVUZXh0KGNvbnN0IFN0cmluZyYgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiB0ZXh0KTsKKworcHJv
dGVjdGVkOgorICAgIGJvb2wgY2FuQmluZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luICE9ICJ1
c2VyQWdlbnQiICYmIG1fb3JpZ2luICE9ICJ1c2VyIjsgfQorICAgIFN0cmluZyBmdWxsUnVsZU9y
U3R5bGVJZChDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gaWQoKSAr
ICI6IiArIHJ1bGVPclN0eWxlSWQoc3R5bGUpOyB9CisgICAgU3RyaW5nIHJ1bGVPclN0eWxlSWQo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpIGNvbnN0IHsgdW5zaWduZWQgaW5kZXggPSBydWxl
SW5kZXhCeVN0eWxlKHN0eWxlKTsgcmV0dXJuIGluZGV4ID09IFVJTlRfTUFYID8gIiIgOiBTdHJp
bmc6Om51bWJlcihpbmRleCk7IH0KKyAgICB2aXJ0dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYWdlU3R5bGVTaGVldC0+ZG9jdW1lbnQoKTsgfQorICAgIHZp
cnR1YWwgUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBydWxlU291cmNlRGF0YUZvcihDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3Q7CisgICAgdmlydHVhbCB1bnNpZ25lZCBydWxlSW5k
ZXhCeVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wg
ZW5zdXJlUGFyc2VkRGF0YVJlYWR5KCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCB0ZXh0KFN0cmlu
ZyogcmVzdWx0KSBjb25zdDsKKyAgICBib29sIGVuc3VyZVRleHQoKSBjb25zdDsKKyAgICBib29s
IGVuc3VyZVNvdXJjZURhdGEoTm9kZSogb3duZXJOb2RlKTsKKyAgICB2b2lkIGlubmVyU2V0U3R5
bGVTaGVldFRleHQoY29uc3QgU3RyaW5nJiBuZXdUZXh0KTsKKyAgICBib29sIGlubmVyU2V0U3R5
bGVUZXh0KENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmKTsKKyAgICBib29sIHN0
eWxlU2hlZXRUZXh0V2l0aENoYW5nZWRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3Qg
U3RyaW5nJiBuZXdTdHlsZVRleHQsIFN0cmluZyogcmVzdWx0KTsKKyAgICBDU1NTdHlsZVJ1bGUq
IGZpbmRQYWdlUnVsZVdpdGhTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7CisgICAgU3RyaW5n
IGZ1bGxSdWxlSWQoQ1NTU3R5bGVSdWxlKiBydWxlKSBjb25zdCB7IHJldHVybiBmdWxsUnVsZU9y
U3R5bGVJZChydWxlLT5zdHlsZSgpKTsgfQorICAgIFN0cmluZyBmdWxsU3R5bGVJZChDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSkgY29uc3QgeyByZXR1cm4gZnVsbFJ1bGVPclN0eWxlSWQoc3R5
bGUpOyB9CisgICAgdm9pZCByZXZhbGlkYXRlU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopOwor
ICAgIGJvb2wgc3R5bGVTaGVldFRleHQoU3RyaW5nKiByZXN1bHQpIGNvbnN0OworICAgIGJvb2wg
cmVzb3VyY2VTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBp
bmxpbmVTdHlsZVNoZWV0VGV4dChTdHJpbmcqIHJlc3VsdCkgY29uc3Q7CisgICAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JBcnJheT4gYnVpbGRBcnJheUZvclJ1bGVMaXN0KENTU1J1bGVMaXN0Kik7CisK
KyAgICBTdHJpbmcgbV9pZDsKKyAgICBDU1NTdHlsZVNoZWV0KiBtX3BhZ2VTdHlsZVNoZWV0Owor
ICAgIFN0cmluZyBtX29yaWdpbjsKKyAgICBTdHJpbmcgbV9kb2N1bWVudFVSTDsKKyAgICBib29s
IG1faXNSZXZhbGlkYXRpbmc7CisgICAgUGFyc2VkU3R5bGVTaGVldCogbV9wYXJzZWRTdHlsZVNo
ZWV0OworfTsKKworY2xhc3MgSW5zcGVjdG9yU3R5bGVTaGVldEZvcklubGluZVN0eWxlIDogcHVi
bGljIEluc3BlY3RvclN0eWxlU2hlZXQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PEluc3BlY3RvclN0eWxlU2hlZXRGb3JJbmxpbmVTdHlsZT4gY3JlYXRlKGNvbnN0IFN0cmluZyYg
aWQsIEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgb3JpZ2luKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBJbnNwZWN0b3JTdHlsZVNoZWV0Rm9ySW5saW5lU3R5bGUo
aWQsIGVsZW1lbnQsIG9yaWdpbikpOworICAgIH0KKworICAgIEluc3BlY3RvclN0eWxlU2hlZXRG
b3JJbmxpbmVTdHlsZShjb25zdCBTdHJpbmcmIGlkLCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBT
dHJpbmcmIG9yaWdpbik7CisgICAgdmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZUZv
cklkKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0IHsgQVNTRVJUKGlkID09ICIwIik7IHJldHVybiBp
bmxpbmVTdHlsZSgpOyB9CisgICAgdmlydHVhbCBib29sIHNldFN0eWxlVGV4dChjb25zdCBTdHJp
bmcmIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0
dWFsIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LT5k
b2N1bWVudCgpOyB9CisgICAgdmlydHVhbCBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVT
b3VyY2VEYXRhRm9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKSBjb25zdCB7IEFTU0VSVChz
dHlsZSA9PSBpbmxpbmVTdHlsZSgpKTsgcmV0dXJuIG1fcnVsZVNvdXJjZURhdGE7IH0KKyAgICB2
aXJ0dWFsIHVuc2lnbmVkIHJ1bGVJbmRleEJ5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiopIGNv
bnN0IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgZW5zdXJlUGFyc2VkRGF0YVJlYWR5
KCk7CisKK3ByaXZhdGU6CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogaW5saW5lU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQtPnN0eWxlKCk7IH0KKyAgICBib29sIGdldFN0eWxlQXR0
cmlidXRlUmFuZ2VzKENTU1N0eWxlU291cmNlRGF0YSogcmVzdWx0KTsKKworICAgIEVsZW1lbnQq
IG1fZWxlbWVudDsKKyAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IG1fcnVsZVNvdXJjZURh
dGE7Cit9OworCisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSW5zcGVjdG9yU3R5bGVTaGVldF9oKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clV0aWxpdGllcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M1MmIy
MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclV0aWxpdGll
cy5jcHAKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5z
cGVjdG9yVXRpbGl0aWVzLmgiCisKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSAiQ1NT
U3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1N0eWxlUnVsZS5oIgorI2luY2x1ZGUg
IkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hlZFJl
c291cmNlLmgiCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlICJTdHlsZUJhc2UuaCIKKyNpbmNsdWRlICJTdHls
ZVNoZWV0LmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisKKyNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
Ky8vIHN0YXRpYworYm9vbCBJbnNwZWN0b3JVdGlsaXRpZXM6OnJlc291cmNlQ29udGVudEZvclVS
TChjb25zdCBLVVJMJiB1cmwsIERvY3VtZW50KiBmcmFtZURvY3VtZW50LCBTdHJpbmcqIHJlc3Vs
dCkKK3sKKyAgICBpZiAoIWZyYW1lRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFN0cmluZyB0ZXh0RW5jb2RpbmdOYW1lOworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGJ1
ZmZlcjsKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0ZyYWdtZW50SWRlbnRpZmllcih1cmwsIGZyYW1l
RG9jdW1lbnQtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0VVJM
KCkpKSB7CisgICAgICAgIHRleHRFbmNvZGluZ05hbWUgPSBmcmFtZURvY3VtZW50LT5pbnB1dEVu
Y29kaW5nKCk7CisgICAgICAgIGJ1ZmZlciA9IGZyYW1lRG9jdW1lbnQtPmZyYW1lKCktPmxvYWRl
cigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPm1haW5SZXNvdXJjZURhdGEoKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBjb25zdCBTdHJpbmcmIHVybFN0cmluZyA9IHVybC5zdHJpbmco
KTsKKyAgICAgICAgQ2FjaGVkUmVzb3VyY2UqIGNhY2hlZFJlc291cmNlID0gZnJhbWVEb2N1bWVu
dC0+Y2FjaGVkUmVzb3VyY2VMb2FkZXIoKS0+Y2FjaGVkUmVzb3VyY2UodXJsU3RyaW5nKTsKKyAg
ICAgICAgaWYgKCFjYWNoZWRSZXNvdXJjZSkKKyAgICAgICAgICAgIGNhY2hlZFJlc291cmNlID0g
Y2FjaGUoKS0+cmVzb3VyY2VGb3JVUkwodXJsU3RyaW5nKTsKKworICAgICAgICBBU1NFUlQoY2Fj
aGVkUmVzb3VyY2UpOyAvLyBGSVhNRShhcGF2bG92KTogVGhpcyBtaWdodCBiZSB0b28gYWdncmVz
c2l2ZS4KKworICAgICAgICBib29sIGlzVW5wdXJnZWFibGUgPSB0cnVlOworICAgICAgICBpZiAo
Y2FjaGVkUmVzb3VyY2UtPmlzUHVyZ2VhYmxlKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHRoZSBy
ZXNvdXJjZSBpcyBwdXJnZWFibGUgdGhlbiBtYWtlIGl0IHVucHVyZ2VhYmxlIHRvIGdldAorICAg
ICAgICAgICAgLy8gaXRzIGRhdGEuIFRoaXMgbWlnaHQgZmFpbCwgaW4gd2hpY2ggY2FzZSB3ZSBy
ZXR1cm4gYW4KKyAgICAgICAgICAgIC8vIGVtcHR5IFN0cmluZy4KKyAgICAgICAgICAgIGlmICgh
Y2FjaGVkUmVzb3VyY2UtPm1ha2VQdXJnZWFibGUoZmFsc2UpKQorICAgICAgICAgICAgICAgIGlz
VW5wdXJnZWFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXNVbnB1cmdlYWJs
ZSkgeworICAgICAgICAgICAgdGV4dEVuY29kaW5nTmFtZSA9IGNhY2hlZFJlc291cmNlLT5lbmNv
ZGluZygpOworICAgICAgICAgICAgYnVmZmVyID0gY2FjaGVkUmVzb3VyY2UtPmRhdGEoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgVGV4dEVuY29kaW5n
IGVuY29kaW5nKHRleHRFbmNvZGluZ05hbWUpOworICAgICAgICBpZiAoIWVuY29kaW5nLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIGVuY29kaW5nID0gV2luZG93c0xhdGluMUVuY29kaW5nKCk7Cisg
ICAgICAgICpyZXN1bHQgPSBlbmNvZGluZy5kZWNvZGUoYnVmZmVyLT5kYXRhKCksIGJ1ZmZlci0+
c2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVD
VE9SKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmgg
Yi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JVdGlsaXRpZXMuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4yODM3NDI2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yVXRpbGl0aWVzLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSW5z
cGVjdG9yVXRpbGl0aWVzX2gKKyNkZWZpbmUgSW5zcGVjdG9yVXRpbGl0aWVzX2gKKworI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpZiBFTkFCTEUoSU5TUEVDVE9SKQorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247CitjbGFzcyBDU1NTdHls
ZVJ1bGU7CitjbGFzcyBDU1NTdHlsZVNoZWV0OworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBLVVJM
OworY2xhc3MgU3R5bGVCYXNlOworCitjbGFzcyBJbnNwZWN0b3JVdGlsaXRpZXMgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIHJlc291cmNlQ29udGVudEZvclVSTChjb25zdCBLVVJMJiB1cmws
IERvY3VtZW50KiBmcmFtZURvY3VtZW50LCBTdHJpbmcqIHJlc3VsdCk7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoSU5TUEVDVE9SKQorCisjZW5kaWYg
Ly8gIWRlZmluZWQoSW5zcGVjdG9yVXRpbGl0aWVzX2gpCg==
</data>
<flag name="review"
          id="59683"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
    <flag name="commit-queue"
          id="59696"
          type_id="3"
          status="-"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>