<?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>49142</bug_id>
          
          <creation_ts>2010-11-07 07:45:57 -0800</creation_ts>
          <short_desc>[Meta] Implement HTML5 style scoped attribute</short_desc>
          <delta_ts>2016-08-11 12:31:35 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>61264</dependson>
    
    <dependson>67718</dependson>
    
    <dependson>67720</dependson>
    
    <dependson>67790</dependson>
    
    <dependson>72461</dependson>
    
    <dependson>72462</dependson>
    
    <dependson>72472</dependson>
    
    <dependson>72480</dependson>
    
    <dependson>72482</dependson>
    
    <dependson>72848</dependson>
    
    <dependson>73190</dependson>
    
    <dependson>73192</dependson>
    
    <dependson>73893</dependson>
    
    <dependson>77527</dependson>
    
    <dependson>77853</dependson>
    
    <dependson>79074</dependson>
    
    <dependson>79075</dependson>
    
    <dependson>79077</dependson>
    
    <dependson>80389</dependson>
          <blocked>32934</blocked>
    
    <blocked>46590</blocked>
    
    <blocked>59827</blocked>
    
    <blocked>82340</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>annulen</cc>
    
    <cc>arv</cc>
    
    <cc>bronislav.klucka</cc>
    
    <cc>dominicc</cc>
    
    <cc>eoconnor</cc>
    
    <cc>hyatt</cc>
    
    <cc>ian</cc>
    
    <cc>jackalmage</cc>
    
    <cc>kangax</cc>
    
    <cc>kennyluck</cc>
    
    <cc>koivisto</cc>
    
    <cc>mathias</cc>
    
    <cc>mihnea</cc>
    
    <cc>mike</cc>
    
    <cc>mitz</cc>
    
    <cc>morrita</cc>
    
    <cc>neonstalwart</cc>
    
    <cc>peter</cc>
    
    <cc>piet</cc>
    
    <cc>rolandsteiner</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>syoichi</cc>
    
    <cc>tabatkins</cc>
    
    <cc>tc</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.bugzilla</cc>
    
    <cc>webkit.org</cc>
    
    <cc>webmaster</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>305887</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-11-07 07:45:57 -0800</bug_when>
    <thetext>Per http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#attr-style-scoped

I couldn&apos;t find an existing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406966</commentid>
    <comment_count>1</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-20 02:25:58 -0700</bug_when>
    <thetext>I started looking into this. My angle of attack would be:

1.) move m_elemStyle, m_mappedElementStyle, m_styleSheets, m_styleSheetCandidateNodes, and m_styleSelector from Document into TreeScope, i.e., having a style selector for each scope. m_pageUserSheet and m_pageGroupuserSheets remain on Document.

2.) change the code to call style selection on the TreeScope rather than the document.

3.) Adapt JS GC code as necessary

Now, before starting to actually implement this (and potentially wasting a lot of time), I wanted to confirm that this is a reasonable approach. Any remarks or suggestions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407725</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-22 19:19:15 -0700</bug_when>
    <thetext>Having these member variables to TreeScope means only subclassses of TreeScope can have 
@scope attribute, that wouldn&apos;t satisfy the spec. Which allows us to put @scope anywhere.

I think what we should have seems separate &quot;StyleScope&quot; class or something like that.
It could be in ElementRareData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407727</commentid>
    <comment_count>3</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-05-22 19:42:45 -0700</bug_when>
    <thetext>I may be misunderstanding, but scoped=&quot;&quot; in HTML only has an effect on &lt;style&gt; elements (which may themselves then affect any descendants of the &lt;style&gt; element&apos;s parent).

(Furthermore, it&apos;s only allowed on &lt;style&gt; elements in &lt;body&gt; in certain places. But that is irrelevant for Web browser implementors.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407729</commentid>
    <comment_count>4</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-22 19:51:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; I may be misunderstanding, but scoped=&quot;&quot; in HTML only has an effect on &lt;style&gt; elements (which may themselves then affect any descendants of the &lt;style&gt; element&apos;s parent).
&gt; 
&gt; (Furthermore, it&apos;s only allowed on &lt;style&gt; elements in &lt;body&gt; in certain places. But that is irrelevant for Web browser implementors.)
You are right. I confused.
The point is that the style is applied the subtree of any &lt;style&gt; hosting parent element.
(That&apos;s what @scoped is for.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407734</commentid>
    <comment_count>5</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-22 20:58:14 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; I think what we should have seems separate &quot;StyleScope&quot; class or something like that.
&gt; It could be in ElementRareData.

Putting this into a separate class would definitely be a good idea to future-proof the code. 

However, for the time being I would propose to only implement this for shadow roots (i.e., the TreeScope class) for the following reason:

Currently, an element asks the Document object to resolve its style. Changing this to TreeScope is no problem. OTOH, having any arbitrary element be able to host a scoped &lt;style&gt; would mean either

a) climbing the tree for style resolution rather than O(1) access to Document/TreeScope, or
b) adding a separate style scope concept, requiring a separate style scope pointer on Element (memory overhead + updating overhead).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407742</commentid>
    <comment_count>6</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-05-22 21:26:06 -0700</bug_when>
    <thetext>&gt; However, for the time being I would propose to only implement this for shadow roots (i.e., the TreeScope class) for the following reason:
Sounds reasonable starting point. And it should be done as a sub-bug of this, as you might be planning.

By the way, introducing a separate class (that is hold by TreeScope) is possibly good even in this case.
Let&apos;s take this as a refactoring opportunity ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408238</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-23 13:46:21 -0700</bug_when>
    <thetext>Just to recap the latest thinking:

The easy-peasy way to implement this is to treat selectors in scoped styles as if they were prefixed with some unique id that matches only the parent node of the scoped style element.

So this makes the work as follows:
* define a new type of unique identifier, build a way to maintain a map of them at Document
* add plumbing to add/remove ids on the parent of scoped style element
* make CSS match this unique id on an element
* modify CSS selector parser to prefix each scoped style selector with a sub-selector that matches this unique id
* make sure changing scoped attribute causes all stylesheets to be reparsed.
* write nice tests

I don&apos;t think TreeScope really comes into play until we start dealing with shadow DOM. Once there, we should abstract out the notion of id/className cache in CSSStyleSelector and instead of using document(), use treeScope().

Does this make any sense?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408264</commentid>
    <comment_count>8</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-05-23 14:00:13 -0700</bug_when>
    <thetext>Note that http://www.whatwg.org/specs/web-apps/current-work/complete.html#attr-style-scoped also says:

&quot;For scoped CSS resources, the effect of @-rules must be scoped to the scoped sheet and its subresources, even if the @-rule in question would ordinarily apply to all style sheets that affect the Document. Any &apos;@page&apos; rules in scoped CSS resources must be ignored.&quot;

...which likely will complicate this a little (sorry).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408659</commentid>
    <comment_count>9</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-23 22:43:30 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; The easy-peasy way to implement this is to treat selectors in scoped styles as if they were prefixed with some unique id that matches only the parent node of the scoped style element.

Interesting approach, but it strikes me as a bit hacky. It also means that that unique artificial id mustn&apos;t take part in the normal specificity resolution. If I understand correctly, it would also meant that we have to update the Document-wide style rule set whenever an element is inserted or removed from the DOM that has a scoped style associated in its shadow DOM.

I would have intended to have a separate CSSStyleSelector on every TreeScope that builds the combined style rule set either on the fly, or on instantiation (This is probably the same overhead as above for instantiation, but there is no cost on deletion, as the Document style data itself isn&apos;t touched). It should also be more flexible to tackle issues such as the one mentioned by Hixie in comment #8.

(In reply to comment #8)

@Hixie: Speaking of specificity: I would have assumed that a scoped style sheet takes precedence of &quot;global&quot; styles, but that isn&apos;t mentioned in the spec. So am I correct to assume that the following is true?

&lt;style&gt;
    p p { color: red }
&lt;/style&gt;
&lt;p&gt;
    &lt;style scoped=&quot;scoped&quot;&gt;p { color: green}&lt;/style&gt;
    &lt;p&gt;Still red&lt;/p&gt;
&lt;/p&gt;
 
I.e., the scoped style doesn&apos;t take, because the global style is more specific (?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408839</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-24 07:38:19 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; The easy-peasy way to implement this is to treat selectors in scoped styles as if they were prefixed with some unique id that matches only the parent node of the scoped style element.
&gt; 
&gt; Interesting approach, but it strikes me as a bit hacky.

I don&apos;t see anything hacky. To me, it seems like a natural way to view scoped stylesheets.

&gt;It also means that that unique artificial id mustn&apos;t take part in the normal specificity resolution.

Can you explain a bit more here? Specificity is just an order in which the rules are applied. I don&apos;t understand how this approach would complicate anything here.

&gt;If I understand correctly, it would also meant that we have to update the Document-wide style rule set whenever an element is inserted or removed from the DOM that has a scoped style associated in its shadow DOM.

I think that&apos;s something that needs to be tackled orthogonally. This problem is still in place with all other stylesheets removal/addition.

&gt; 
&gt; I would have intended to have a separate CSSStyleSelector on every TreeScope that builds the combined style rule set either on the fly, or on instantiation (This is probably the same overhead as above for instantiation, but there is no cost on deletion, as the Document style data itself isn&apos;t touched).

I would caution that this is some of the most performance-sensitive code in WebKit. If you&apos;re thinking of a different approach, I would like to first understand how you will accomplish this.

&gt; It should also be more flexible to tackle issues such as the one mentioned by Hixie in comment #8.
&gt; 
&gt; (In reply to comment #8)
&gt; 
&gt; @Hixie: Speaking of specificity: I would have assumed that a scoped style sheet takes precedence of &quot;global&quot; styles, but that isn&apos;t mentioned in the spec. So am I correct to assume that the following is true?
&gt; 
&gt; &lt;style&gt;
&gt;     p p { color: red }
&gt; &lt;/style&gt;
&gt; &lt;p&gt;
&gt;     &lt;style scoped=&quot;scoped&quot;&gt;p { color: green}&lt;/style&gt;
&gt;     &lt;p&gt;Still red&lt;/p&gt;
&gt; &lt;/p&gt;
&gt; 
&gt; I.e., the scoped style doesn&apos;t take, because the global style is more specific (?).

It should work just like it would without the scoped attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409388</commentid>
    <comment_count>11</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-24 20:00:13 -0700</bug_when>
    <thetext>(In reply to comment #10)

Disclaimer: Note that below I don&apos;t want to argue against your approach (it indeed is probably simpler than mine) - just trying to understand the implications!

&gt; (In reply to comment #9)
&gt; &gt;It also means that that unique artificial id mustn&apos;t take part in the normal specificity resolution.
&gt; 
&gt; Can you explain a bit more here? Specificity is just an order in which the rules are applied. I don&apos;t understand how this approach would complicate anything here.

If we just rewrite a scoped selector &quot;span&quot; to &quot;#&lt;ID-of-scope-element&gt; span&quot; then the specificity would change, affecting style resolution later on. E.g.

&lt;style&gt;
    .red { color: red }
&lt;/style&gt;
&lt;p&gt;
    &lt;style scoped&gt;
        span { color: green }
    &lt;/style&gt;
    &lt;span class=&quot;red&quot;&gt;Should be red&lt;/span&gt;
&lt;/p&gt;

Without the rewrite, the &quot;.red&quot; selector has higher specificity, and the text should be red. With the rewrite, the scoped &quot;#&lt;id-of-p&gt; span&quot; selector has higher specificity, and the text would be green.

Also, the scope element might already have an ID of its own that can&apos;t be overwritten. Although we may be able to re-use that instead of generating a new one, that is another issue that needs to be tracked.

&gt; &gt;If I understand correctly, it would also meant that we have to update the Document-wide style rule set whenever an element is inserted or removed from the DOM that has a scoped style associated in its shadow DOM.
&gt;
&gt;I think that&apos;s something that needs to be tackled orthogonally. This problem is still in place with all other stylesheets removal/addition.

But inserting or removing an &lt;x-foo&gt; that happens to have a scoped style declaration in its shadow DOM is likely a far more common occurrence than specifically adding/removing a style sheet to/from the Document. Esp. note that it doesn&apos;t have to be the &lt;x-foo&gt; directly - attaching/detaching any subtree that contains an &lt;x-foo&gt; would need to trigger the update, as would adding/removing an &lt;x-bar&gt; that happens to be composed of an &lt;x-foo&gt;. 

Also, I would argue that adding/removing style-sheets to/from the Document is understood to have performance implications, while adding/removing &lt;x-...&gt; elements may not, esp. if the &lt;x-foo&gt; comes from some widget library.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409667</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-25 08:46:18 -0700</bug_when>
    <thetext>&gt; Also, the scope element might already have an ID of its own that can&apos;t be overwritten. Although we may be able to re-use that instead of generating a new one, that is another issue that needs to be tracked.

Ah, I think I understand the source of confusion now. The scoped-id is not going to interfere with element id. It&apos;s a parallel structure that&apos;s like id.

&gt; &gt; &gt;If I understand correctly, it would also meant that we have to update the Document-wide style rule set whenever an element is inserted or removed from the DOM that has a scoped style associated in its shadow DOM.
&gt; &gt;
&gt; &gt;I think that&apos;s something that needs to be tackled orthogonally. This problem is still in place with all other stylesheets removal/addition.
&gt; 
&gt; But inserting or removing an &lt;x-foo&gt; that happens to have a scoped style declaration in its shadow DOM is likely a far more common occurrence than specifically adding/removing a style sheet to/from the Document. Esp. note that it doesn&apos;t have to be the &lt;x-foo&gt; directly - attaching/detaching any subtree that contains an &lt;x-foo&gt; would need to trigger the update, as would adding/removing an &lt;x-bar&gt; that happens to be composed of an &lt;x-foo&gt;. 
&gt; 
&gt; Also, I would argue that adding/removing style-sheets to/from the Document is understood to have performance implications, while adding/removing &lt;x-...&gt; elements may not, esp. if the &lt;x-foo&gt; comes from some widget library.

This is a good point. The approach with scoped-id creates no room for reuse optimizations. It is the approach that we know we&apos;ll have to re-evaluate once we get to that point. So here&apos;s what we need to determine:

1) Overall design of the approach where CSSStyleSelector is TreeScope-based, and the rules are coalesced using TreeScope hierarchy.

2) Whether this design&apos;s complexity and performance impact outweighs the quick gains we can make with scoped-id approach.

I can see that this is a classic pay-now or pay-later decision.

Also, cc-ing Tab, because he had bright ideas on scoped stylesheet specificity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409806</commentid>
    <comment_count>13</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-05-25 12:03:08 -0700</bug_when>
    <thetext>Re comment 9, this feature is not intended to affect the cascade in any way other than changing which rules are in scope. The last sentence of comment 10 is correct. HTH.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410192</commentid>
    <comment_count>14</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-25 22:11:45 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Re comment 9, this feature is not intended to affect the cascade in any way other than changing which rules are in scope. The last sentence of comment 10 is correct. HTH.

Heh - this comment actually got me more confused ;). The spec says &quot;... styles are intended just for the subtree rooted at the style element&apos;s parent element, as opposed to the whole Document.&quot;

I.e., I assumed selectors of scoped style-sheets match up to that style-sheet&apos;s parent, but not up to the document root. That would be another way (besides being in effect or not) how style resolution for scoped style rules would be different from document-wide style rules. E.g.

&lt;div&gt;
    &lt;p&gt;
        &lt;style scoped&gt;
            div span { color: red }
        &lt;/style&gt;
        &lt;span&gt;Not actually red&lt;/span&gt;
    &lt;/p&gt;
&lt;/div&gt;

In this case, the style would not match, because selector matching stops at &lt;p&gt;, while in the case where the only thing that changes is whether the style rules are in effect or not, it _would_ match.

Now the obvious follow-up question is whether a selector &quot;p span&quot; would match. From a strict reading I would guess yes, but that might be counter-intuitive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410198</commentid>
    <comment_count>15</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-05-25 22:32:48 -0700</bug_when>
    <thetext>&gt; &lt;div&gt;
&gt;     &lt;p&gt;
&gt;         &lt;style scoped&gt;
&gt;             div span { color: red }
&gt;         &lt;/style&gt;
&gt;         &lt;span&gt;Not actually red&lt;/span&gt;
&gt;     &lt;/p&gt;
&gt; &lt;/div&gt;

Well this particular example is bad for unrelated reasons -- &lt;style&gt; isn&apos;t allowed in &lt;p&gt;. But ignoring that for a second, the above will be red, yes. The _only_ thing that this does is change which style sheets apply. It doesn&apos;t affect the cascade, it doesn&apos;t affect selector matching, it doesn&apos;t affect specificity, it doesn&apos;t affect inheritance, it doesn&apos;t affect anything else.

It would be helpful for me if you could quote the part of the specification that led you to conclude otherwise, so that I could fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410205</commentid>
    <comment_count>16</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-25 22:52:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; This is a good point. The approach with scoped-id creates no room for reuse optimizations. 

Actually, thinking a bit more about the issue (and maybe this is what you intended all along, and I just misunderstood you): 

If we generate the scoped-id from the MD5 hash (or similar) of the actual contents of the style sheet, then the need to constantly update the rule set within Document would vanish. An element matches the (prefixed to every rule) scoped-id iff it has a &lt;style scoped&gt; child whose contents would generate that id. This obviously cached, and wouldn&apos;t even needed to be re-calculated when instantiating shadow trees - the same style sheet replicated in various shadow DOMs would not create additional rule entries. We can add those entries when parsing the &lt;template&gt;, and adding or removing &lt;x-foo&gt; elements would be a no-op with regard to scoped style sheet updates.
It should also beautifully work with &lt;style scoped&gt; elements anywhere in the DOM (i.e., wouldn&apos;t need to be restricted to TreeScopes).

Furthermore, we would technically not need to ever remove rules from the Document (rules that reference an obsolete MD5 hash scope-id would just never match), just add new rules if a new unknown &lt;style scoped&gt; comes along. CSSOM could wreak havoc here, but for this we could add periodic rules garbage collection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410224</commentid>
    <comment_count>17</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-25 23:21:07 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Well this particular example is bad for unrelated reasons -- &lt;style&gt; isn&apos;t allowed in &lt;p&gt;. But ignoring that for a second, the above will be red, yes. The _only_ thing that this does is change which style sheets apply. It doesn&apos;t affect the cascade, it doesn&apos;t affect selector matching, it doesn&apos;t affect specificity, it doesn&apos;t affect inheritance, it doesn&apos;t affect anything else.

This is probably not the right forum for this (and likely repeating previous arguments), but that would mean that a scoped style applies to basically everything under that style&apos;s parent if any ancestor happens to also match that style&apos;s selector - I would argue that that&apos;s counterintuitive and diminishes the usefulness of scoped style sheets, again requiring very specific classes, etc. to avoid that. It would also preclude &quot;recursive&quot; use of the same scoped stylesheet - esp. in the case of shadow DOM/XBL one couldn&apos;t use both scoped stylesheets and @allow-selectors-through for recursive templates.

For the issue of how to implement &lt;style scoped&gt;, this means that a scoped-id implementation cannot just apply normal selector matching, but the scoped-id must be matched separately after regular selector matching as &quot;any ancestor has a scoped style sheet with that id&quot;.

&gt; It would be helpful for me if you could quote the part of the specification that led you to conclude otherwise, so that I could fix it.

From http://www.whatwg.org/specs/web-apps/current-work/multipage/semantics.html#the-style-element:

&quot;The scoped attribute is a boolean attribute. If set, it indicates that the styles are intended just for the subtree rooted at the style element&apos;s parent element, as opposed to the whole Document.&quot;

&quot;If the scoped attribute is present, then the user agent must apply the specified style information only to the style element&apos;s parent element (if any), and that element&apos;s child nodes. Otherwise, the specified styles must, if applied, be applied to the entire document.&quot;

I understood &quot;styles are intended just for...&quot; and &quot;specified style information&quot; to include the selectors, compounded by the &quot;otherwise&quot; statement (and probably fueled by some preconceived expectations as explained above).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410254</commentid>
    <comment_count>18</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-05-26 00:35:08 -0700</bug_when>
    <thetext>For bindings there&apos;s a bunch of other stuff that has to happen (e.g. XBL gives the author control over whether the styles apply to the bound element&apos;s explicit descendants, whether selectors can cross the shadow boundary, and so on), which don&apos;t really apply here. &lt;style scoped&gt; is intended for syndication cases, not cases where you&apos;d end up with similar structure inside and out, or cases where you&apos;d end up with nesting. But let&apos;s take the design discussion to the webkit-dev or whatwg lists.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410492</commentid>
    <comment_count>19</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-26 09:09:08 -0700</bug_when>
    <thetext>I agree with Hixie on design discussion. On implmentation: in the interest of making progress and understanding the problem better by solving at least some of it, let&apos;s pick the simplest possible design and go with it. Nothing is in stone, we can change this later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412499</commentid>
    <comment_count>20</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-05-31 01:31:10 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; ... let&apos;s pick the simplest possible design and go with it.

In this case I would suggest a hybrid of your original suggestion and my last one:

1.) create a scope-ID by simply having an incrementing counter
2.) automatically add all scoped stylesheets in &lt;template&gt;s
3.) add an additional flag for scoped style-sheets that are just instances of one in a &lt;template&gt;

Scoped stylesheets with the flag set are not added/removed from the Document (their rules are already present by virtue of 2.) OTOH, scoped stylesheets that are added otherwise are dynamically added/removed as originally suggested.

This should be easy enough, while still avoiding any overhead on inserting/removing &lt;x-foo&gt; elements.

If there are no objections, I could give this version a go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>412667</commentid>
    <comment_count>21</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-05-31 09:03:34 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; ... let&apos;s pick the simplest possible design and go with it.
&gt; 
&gt; In this case I would suggest a hybrid of your original suggestion and my last one:
&gt; 
&gt; 1.) create a scope-ID by simply having an incrementing counter
&gt; 2.) automatically add all scoped stylesheets in &lt;template&gt;s
&gt; 3.) add an additional flag for scoped style-sheets that are just instances of one in a &lt;template&gt;
&gt; 
&gt; Scoped stylesheets with the flag set are not added/removed from the Document (their rules are already present by virtue of 2.) OTOH, scoped stylesheets that are added otherwise are dynamically added/removed as originally suggested.
&gt; 
&gt; This should be easy enough, while still avoiding any overhead on inserting/removing &lt;x-foo&gt; elements.
&gt; 
&gt; If there are no objections, I could give this version a go.

SGTM.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415749</commentid>
    <comment_count>22</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-06 02:13:44 -0700</bug_when>
    <thetext>To give a quick update: I started implementing this as discussed, with the following modifications:

.) Use the address of the scoping element (parent of &lt;style scoped&gt;) as the &quot;ID&quot;. This can be shared by multiple &lt;style scoped&gt; under the same element and doesn&apos;t require bookkeeping.

.) Collect the rules of every scope (global, and for every scoping element) within separate hash maps. The idea is that we don&apos;t need to to even try matching rules if their scoping element isn&apos;t an ancestor.

.) add the scoping element address as &quot;hash&quot; to the bloom filter, so as to be able to quickly discard scoped style sheets that don&apos;t apply.

However, esp. the 2nd point leads to a bit of yak-shave to adapt all the functions that only expect a single, global RuleSet (originally containing only a single set of rules maps, i.e. hash maps that are distinguished by what the last selector of the rule is - ID, class, pseudo-class, tag name or &quot;universal&quot;).

A simpler implementation would be to add the scoping &quot;ID&quot;/address to RuleData. This has the disadvantage that it increases the size of RuleData, and that we&apos;d have to compare that for every rule rather than once per scope.

I&apos;d therefore be inclined to continue with the initially mentioned yak-shave, unless someone chimes in with a better idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>415859</commentid>
    <comment_count>23</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-06 09:34:06 -0700</bug_when>
    <thetext>Can you not just modify RuleSet to add an AtomRuleMap for these special ids, then add an extra check to RuleSet::addRule to add the rules containing special id selector there? That should save you quite a bit of work and will match how the rest of rule collection/matching is implemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416417</commentid>
    <comment_count>24</comment_count>
      <attachid>96223</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 02:57:25 -0700</bug_when>
    <thetext>Created attachment 96223
work-in-progress

Missing: update when &apos;scoped&apos; is set or unset, tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416419</commentid>
    <comment_count>25</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 03:03:24 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Can you not just modify RuleSet to add an AtomRuleMap for these special ids, then add an extra check to RuleSet::addRule to add the rules containing special id selector there? That should save you quite a bit of work and will match how the rest of rule collection/matching is implemented.

Uploaded a work-in-progress patch that follows this advice.

However, this has the drawback that all rules in scoped style-sheets are not filtered by ID/class/pseudo-ID/tag as global rules are. Perhaps this is not an issue as long as scoped style sheets are rare, but should they become more prevalent, this needs to be addressed (i.e., going back to my initial yak-shaving approach).

Also note that the scope &quot;ID&quot; also cannot be just added to the selector and has to be tested for separately, as I noted in comment #17 (there is no specific position where to add it) .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416420</commentid>
    <comment_count>26</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 03:08:14 -0700</bug_when>
    <thetext>Addendum: I also intend to add the address of elements that contain scoped style sheets to the bloom filter (didn&apos;t make it into the work-in-progress patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416439</commentid>
    <comment_count>27</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 04:57:14 -0700</bug_when>
    <thetext>Addendum 2: I also see that fastStyleSheetScopeIsAnAncestor has reverted itself to a primordial stage @_@. This should actually directly pull the applicable ancestor&apos;s scopes from the ParentStack (rather than just filtering).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416501</commentid>
    <comment_count>28</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-07 07:49:57 -0700</bug_when>
    <thetext>Please try to catch Dave Hyatt on #webkit and discuss your approach with him.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416546</commentid>
    <comment_count>29</comment_count>
      <attachid>96223</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 09:15:21 -0700</bug_when>
    <thetext>Comment on attachment 96223
work-in-progress

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

&gt; Source/WebCore/css/CSSStyleSelector.cpp:325
&gt; +typedef Vector&lt;RuleData&gt; RulesVector;

Avoid cleanups in non-trivial patches. Makes for very painful archeology.

&gt; Source/WebCore/dom/ElementRareData.h:90
&gt; +    ++m_numberOfScopedHTMLStyleChildren;

I don&apos;t think this is necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416556</commentid>
    <comment_count>30</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 09:29:20 -0700</bug_when>
    <thetext>&gt; For the issue of how to implement &lt;style scoped&gt;, this means that a scoped-id implementation cannot just apply normal selector matching, but the scoped-id must be matched separately after regular selector matching as &quot;any ancestor has a scoped style sheet with that id&quot;.

I totally missed this.  I still don&apos;t understand what you mean here? Why can&apos;t we just prefix the selector chain? For example, for:

&lt;div&gt;
    &lt;style scoped&gt;
        #foo { color: red; }
   &lt;/style&gt;
   &lt;div id=foo&gt;&lt;/div&gt;
&lt;/div&gt;

We just make sure that when parsing, the selector is added as &quot;${ID} #foo&quot;, where &quot;${ID}&quot; is some unique identifier we associate with the parent div (its address, as you suggested).

What is wrong with this approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416557</commentid>
    <comment_count>31</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 09:29:46 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (From update of attachment 96223 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96223&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:325
&gt; &gt; +typedef Vector&lt;RuleData&gt; RulesVector;
&gt; 
&gt; Avoid cleanups in non-trivial patches. Makes for very painful archeology.
&gt; 
&gt; &gt; Source/WebCore/dom/ElementRareData.h:90
&gt; &gt; +    ++m_numberOfScopedHTMLStyleChildren;
&gt; 
&gt; I don&apos;t think this is necessary.

^^ I should correct myself -- I didn&apos;t understand why it was necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>416566</commentid>
    <comment_count>32</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-07 09:40:57 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; Please try to catch Dave Hyatt on #webkit and discuss your approach with him.

That is a splendid idea. Roland -- can you find a slot of time to talk with hyatt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417018</commentid>
    <comment_count>33</comment_count>
      <attachid>96356</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 19:22:54 -0700</bug_when>
    <thetext>Created attachment 96356
work-in-progress (cleaned)

Still missing: update when &apos;scoped&apos; is set or unset, tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417020</commentid>
    <comment_count>34</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-07 19:28:26 -0700</bug_when>
    <thetext>(We discussed this in today&apos;s meeting, just summarizing below for posterity)

(In reply to comment #30)
&gt; &gt; For the issue of how to implement &lt;style scoped&gt;, this means that a scoped-id implementation cannot just apply normal selector matching, but the scoped-id must be matched separately after regular selector matching as &quot;any ancestor has a scoped style sheet with that id&quot;.
&gt; 
&gt; I totally missed this.  I still don&apos;t understand what you mean here? Why can&apos;t we just prefix the selector chain? For example, for:

According to the HTML5 spec, selectors still match globally, not locally - see comment #15. 

(In reply to comment #31)
&gt; (In reply to comment #29)
&gt; &gt; &gt; Source/WebCore/dom/ElementRareData.h:90
&gt; &gt; &gt; +    ++m_numberOfScopedHTMLStyleChildren;
&gt; &gt; 
&gt; &gt; I don&apos;t think this is necessary.
&gt; 
&gt; ^^ I should correct myself -- I didn&apos;t understand why it was necessary.

In my application, &lt;style scoped&gt; elements register with their containing elements, a sort of ref-counting if you will. This allows us to quickly determine whether an element needs to be considered a scope for style matching during style resolution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417268</commentid>
    <comment_count>35</comment_count>
      <attachid>96356</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2011-06-08 09:01:08 -0700</bug_when>
    <thetext>Comment on attachment 96356
work-in-progress (cleaned)

It seems like you&apos;ve lost the ability to filter rules by id/tag/class within scopes. This is because you made being scoped another category alongside id/tag/class. It seems like it would make more sense to have separate RuleSets for each scope.  Then you could still maintain id/tag/class filtering per-scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417750</commentid>
    <comment_count>36</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-08 19:16:59 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (From update of attachment 96356 [details])
&gt; It seems like you&apos;ve lost the ability to filter rules by id/tag/class within scopes. This is because you made being scoped another category alongside id/tag/class. It seems like it would make more sense to have separate RuleSets for each scope.  Then you could still maintain id/tag/class filtering per-scope.

Yes, that was my original approach, and I completely agree that this is a better solution, but as mentioned above, I ran into quite a bit of yak-shaving with that. However, in the meantime I got an idea how to avoid it, so I&apos;ll try and see what I can come up with.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417894</commentid>
    <comment_count>37</comment_count>
      <attachid>96559</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-09 01:38:55 -0700</bug_when>
    <thetext>Created attachment 96559
work-in-progress (scoped)

The patch is similar to the previous work-in-progress patch, but now has complete RuleSets scoped, as suggested. It still misses the same things the previous patches did (updating after &apos;scoped&apos; attribute change, tests). I will add these, unless there are objections with the directions the patch is going.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417895</commentid>
    <comment_count>38</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-09 01:40:54 -0700</bug_when>
    <thetext>One more question regarding my patch is whether lumping all sibling rules together is still the right thing to do, or whether they also need to be scoped somehow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418057</commentid>
    <comment_count>39</comment_count>
      <attachid>96559</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-06-09 09:22:16 -0700</bug_when>
    <thetext>Comment on attachment 96559
work-in-progress (scoped)

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

I think this looks pretty good.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:291
&gt; +typedef CSSStyleSelector::StyleSheetScope StyleSheetScope;

I think these typedefs are a bit misleading. If you want to understand what StyleSheetScope is, you have to traverse the code to discover.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420179</commentid>
    <comment_count>40</comment_count>
      <attachid>97062</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-13 20:24:24 -0700</bug_when>
    <thetext>Created attachment 97062
patch, full HTML5 version

full implementation, following the HTML5 spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420187</commentid>
    <comment_count>41</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-13 21:08:12 -0700</bug_when>
    <thetext>Caveat: I&apos;m not sure if all &quot;@rules-must-be scoped&quot; concerns are addressed with this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420192</commentid>
    <comment_count>42</comment_count>
      <attachid>97062</attachid>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-06-13 21:20:14 -0700</bug_when>
    <thetext>Comment on attachment 97062
patch, full HTML5 version

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

This is an exciting patch.

Have you considered testing boundary cases such as:
- selectors matching completely in ancestors of the element with style scoped
- selectors matching in part in ancestors and descendants
- selectors matching completely in descendants
- attaching and removing style scoped elements as sibling of the body, as child of the body, in a form element, etc.
- testing cascade between scoped and not scoped styles; between different sets of scoped styles
- cloning a style scoped
- using style scoped in a document fragment
- style scoped including @page rules, etc.

&gt; LayoutTests/fast/css/style-scoped-attach.html:37
&gt; +            var divElem =document.getElementById(&apos;DIV&apos;);

Two spaces around =

&gt; LayoutTests/fast/css/style-scoped-attach.html:40
&gt; +            styleElem.innerHTML = &quot;div { color: red; } p { color: green; }&quot;;

Don’t needlessly switch between &quot; and &apos;-quoted literals.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:458
&gt; +    if (!ownerNode || !ownerNode-&gt;isHTMLElement() || !ownerNode-&gt;hasTagName(HTMLNames::styleTag))

When is a stylesheet’s owner not a &lt;style&gt;? Inline styles?

&gt; Source/WebCore/css/CSSStyleSelector.cpp:842
&gt; +static inline bool compareRules(const RuleData* r1, const RuleData* r2)

Could you give this a better name? Because &quot;compareRules&quot; returning boolean could be confused with equality comparison.

&gt; Source/WebCore/html/HTMLStyleElement.cpp:69
&gt; +                unregisterWithScopingElement();

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420211</commentid>
    <comment_count>43</comment_count>
      <attachid>97067</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-13 22:06:56 -0700</bug_when>
    <thetext>Created attachment 97067
patch, HTML5 version, cleaned

full implementation with requested clean-up, same caveats as before (@-rules, handling of sibling rule features)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420214</commentid>
    <comment_count>44</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-06-13 22:08:30 -0700</bug_when>
    <thetext>(In reply to comment #43)

And the tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420218</commentid>
    <comment_count>45</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-13 22:24:29 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Have you considered testing boundary cases such as:
&gt; - selectors matching completely in ancestors of the element with style scoped
&gt; - selectors matching in part in ancestors and descendants

Extended style-scoped-basic.html

&gt; - selectors matching completely in descendants

This was already handled in style-scoped-basic.html

&gt; - attaching and removing style scoped elements as sibling of the body, as child of the body, in a form element, etc.

Attaching, removing, setting and un-setting of &apos;scoped&apos; is tested in style-scoped-attach/detach/set-scoped/remove-scoped.html. 

&gt; - testing cascade between scoped and not scoped styles; between different sets of scoped styles
&gt; - cloning a style scoped
&gt; - using style scoped in a document fragment

The implementation does not touch the cascade, and a &lt;style scoped&gt; is not special in any way until it is inserted into the document.

&gt; - style scoped including @page rules, etc.

@page rules should be ignored by the implementation, but this, as well as all other @-rules may indeed need further scrutiny and testing.

&gt; &gt; LayoutTests/fast/css/style-scoped-attach.html:37
&gt; &gt; +            var divElem =document.getElementById(&apos;DIV&apos;);
&gt; 
&gt; Two spaces around =

Done.

&gt; &gt; LayoutTests/fast/css/style-scoped-attach.html:40
&gt; &gt; +            styleElem.innerHTML = &quot;div { color: red; } p { color: green; }&quot;;
&gt; 
&gt; Don’t needlessly switch between &quot; and &apos;-quoted literals.

Cleaned-up.

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:458
&gt; &gt; +    if (!ownerNode || !ownerNode-&gt;isHTMLElement() || !ownerNode-&gt;hasTagName(HTMLNames::styleTag))
&gt; 
&gt; When is a stylesheet’s owner not a &lt;style&gt;? Inline styles?

&lt;link&gt;, processing instructions, and perhaps some SVG stuff. A style-sheet may also be @import-ed, etc.

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:842
&gt; &gt; +static inline bool compareRules(const RuleData* r1, const RuleData* r2)
&gt; 
&gt; Could you give this a better name? Because &quot;compareRules&quot; returning boolean could be confused with equality comparison.

That isn&apos;t originally my code, I just had to move it to before sortAndTransferMatchedRules(). But renamed it to &apos;lessSpecific()&apos;.

&gt; &gt; Source/WebCore/html/HTMLStyleElement.cpp:69
&gt; &gt; +                unregisterWithScopingElement();
&gt; 
&gt; Why?

At this point, the &lt;style&gt; element is no longer scoped, so it has to be unregistered from its parent, which in turn no longer acts as a scoping element (unless there are more &lt;style scoped&gt; children) - but perhaps I misunderstand the intent of the question (?).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420260</commentid>
    <comment_count>46</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-14 00:40:43 -0700</bug_when>
    <thetext>Summarizing the remaining questions and differences to the HTML5 spec (so, &quot;full HTML5 version&quot; in attachment #4 was perhaps overstating things a wee bit ^_^; ):

.) Scoping @-rules is largely unimplemented, esp. @font-face, which is mentioned in the spec. Ignoring @page is implemented, but untested (awaiting feedback on @-rules as a whole). Looking at the code, scoping @font-face seems to be quite tricky (suggestions would be very welcome).

.) No check whether a &lt;style scoped&gt; is indeed the first child of its parent, or only preceded by other &lt;style&gt; elements or inter-element white-space (implementing this seems to be very expensive for little to no gain).

.) Implementation ignores &apos;scoped&apos; if the &lt;style&gt; element is within the &lt;head&gt;, which is not specced as such, but seems intuitive, IMHO.

.) Implementation-detail question: whether there needs to be a special handling with regard of sibling rules.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420261</commentid>
    <comment_count>47</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-06-14 00:47:23 -0700</bug_when>
    <thetext>&gt; .) Scoping @-rules is largely unimplemented, esp. @font-face, which is mentioned in the spec. Ignoring @page is implemented, but untested (awaiting feedback on @-rules as a whole). Looking at the code, scoping @font-face seems to be quite tricky (suggestions would be very welcome).

@font-face in particular is pretty important, because not doing this would allow one scoped style sheet to dramatically affect the rest of the document.

@import is presumably also pretty important.

The various animation @rules are likely pretty important to prevent clashes that break animations.


&gt; .) No check whether a &lt;style scoped&gt; is indeed the first child of its parent, or only preceded by other &lt;style&gt; elements or inter-element white-space (implementing this seems to be very expensive for little to no gain).

Where does the spec require you to do that?


&gt; .) Implementation ignores &apos;scoped&apos; if the &lt;style&gt; element is within the &lt;head&gt;, which is not specced as such, but seems intuitive, IMHO.

That&apos;s a bug. Don&apos;t do that. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420792</commentid>
    <comment_count>48</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-06-14 15:53:44 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; &gt; .) No check whether a &lt;style scoped&gt; is indeed the first child of its parent, or only preceded by other &lt;style&gt; elements or inter-element white-space (implementing this seems to be very expensive for little to no gain).
&gt; 
&gt; Where does the spec require you to do that?

&quot;Contexts in which this element can be used:
[...]
If the scoped attribute is present: where flow content is expected, but before any other flow content other than other style elements and inter-element whitespace.&quot;

But I guess checking this well-formed-ness would be rather the job of the parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420803</commentid>
    <comment_count>49</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2011-06-14 16:04:17 -0700</bug_when>
    <thetext>First of all, the &quot;contexts in which this element can be used&quot; bits is explicitly non-normative:

   http://www.whatwg.org/specs/web-apps/current-work/complete.html#element-definitions

But even if it was normative (as the &quot;content model&quot; line is), it would be a requirement on documents, not on browsers. Only implement what the spec says you need to implement, not more. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442163</commentid>
    <comment_count>50</comment_count>
      <attachid>101982</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-26 02:56:03 -0700</bug_when>
    <thetext>Created attachment 101982
Work-in-progress

Work-in-progress patch (only because some layout tests fail for unfathomable reasons - most likely because of all the trees in front of the forest.)

Changes to previous patch:

-) As discussed on the ML, selectors are now scoped to the scoping element and its descendants
-) Addressed Hixie&apos;s remarks

The new version is somewhat more complicated, because it has to interfere with selector matching. Esp. RuleData grew by 4 bytes - I could not find an efficient way to avoid this. @keyframe and @font-face are also not yet handled - they are ignored for the time being (I would prefer to handle that in a follow-up patch). :root and :scope are also not yet handled - those, too, would be another patch for another bug(s).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442301</commentid>
    <comment_count>51</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-26 09:08:07 -0700</bug_when>
    <thetext>(In reply to comment #50)
&gt; Created an attachment (id=101982) [details]
&gt; Work-in-progress
&gt; 
&gt; Work-in-progress patch (only because some layout tests fail for unfathomable reasons - most likely because of all the trees in front of the forest.)
&gt; 
&gt; Changes to previous patch:
&gt; 
&gt; -) As discussed on the ML, selectors are now scoped to the scoping element and its descendants
&gt; -) Addressed Hixie&apos;s remarks
&gt; 
&gt; The new version is somewhat more complicated, because it has to interfere with selector matching. Esp. RuleData grew by 4 bytes - I could not find an efficient way to avoid this. @keyframe and @font-face are also not yet handled - they are ignored for the time being (I would prefer to handle that in a follow-up patch). :root and :scope are also not yet handled - those, too, would be another patch for another bug(s).

This may be a dumb thought, but with this approach, can we not just get back to the wonderful world of prefixing selector chain with a unique id?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442659</commentid>
    <comment_count>52</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-26 17:47:21 -0700</bug_when>
    <thetext>(In reply to comment #51)
&gt; This may be a dumb thought, but with this approach, can we not just get back to the wonderful world of prefixing selector chain with a unique id?

Technically yes, but I chose the current implementation approach for the following reasons:

.) Prepending a special identifier would require re-creating the selector lists whenever @scoped is set or removed. AFAICT there is no code path that does that currently, so I&apos;d have to implement that instead.

.) The majority of responses were in favor of the scoping element to be eligible for matching. A simple prefix (that presumably would have a &apos;descendant&apos; combinator) would not work for this, but would rather have to be implemented as a flag or some such.

.) With a prefix, most selectors would be matched up to the root, just then to fail with the prefix at the end. Inasmuch my implementation should be faster as it&apos;ll abort when passing the scoping element. OTOH, the prefix might be easier to add to the fast selector matching path...

OTOH, it just occurred to me there may indeed be a way to have a prefix and eat it, too, if we allow for a special &quot;prefix&quot; combinator (which may also be beneficial when it comes to template instances)... 
I&apos;ll nonetheless try to get the current code running as it&apos;s almost finished, and put it up before going off on that tangent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442766</commentid>
    <comment_count>53</comment_count>
      <attachid>102100</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-27 00:28:56 -0700</bug_when>
    <thetext>Created attachment 102100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>442774</commentid>
    <comment_count>54</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-27 00:47:08 -0700</bug_when>
    <thetext>Patch comments: By twisting around a few knobs, the new patch should now achieve the best of all worlds (even if I do say so myself)! :) In detail:

.) Scoped style sheets continue to be stored in their own RuleSets. That means that only the relevant style sheet rules are tested for for a given element. IOW, scoped stylesheets don&apos;t &quot;pollute the global namespace&quot;

.) The scope is not stored within the rule, nor the selector, so updating is not necessary even if @scoped is inserted or removed. Instead, the scope is passed in to the matching functions. This also means that in the future we can re-use the same RuleSet for XBL-like template instantiation.

.) Because of the above change I was able to again get rid of the 4-byte size increase of RuleData.

.) Selector matching can still abort early if the scoping element would be passed.

.) Scoped styles can now also participate in the fast selector matching path.

Things not implemented:

.) The patch includes no support for @keyframe and @font-face rules. Rather than scoping them, they are just ignored for the time being. I would prefer this to be addressed in future patches rather than cramming everything into this patch. @page is ignored as per the HTML5 spec, and @import is handled as normal.

.) Allowing selector matching to go past the scoping element if the selector contains :root or :scope is also a task for a future patch(es).

.) I extended the layout tests a bit, but can certainly add more (wanted to finish the code and get feedback first).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443847</commentid>
    <comment_count>55</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-07-29 01:20:48 -0700</bug_when>
    <thetext>This change looks to big. How about to divide it into
- Handling @scoped attribute in DOM world - which could be testable with window.internals.
- Handling CSS parser part
?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443859</commentid>
    <comment_count>56</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-29 02:30:23 -0700</bug_when>
    <thetext>(In reply to comment #55)
&gt; This change looks to big. How about to divide it into

Heh, it&apos;s not even close to my worst! ;) Also, please consider that the patch contains 5 layout tests.

&gt; - Handling @scoped attribute in DOM world - which could be testable with window.internals.
&gt; - Handling CSS parser part

I don&apos;t quite follow: the new patch doesn&apos;t touch the CSS parser, only the selector matching and the &lt;style&gt; element, either of which change is meaningless without the other.

In any case, I believe a &quot;non-native&quot; implementation would be counter-productive. Furthermore, in addition to the obvious applications, this patch opens up quite a few possibilities, e.g., a scoped querySelectorAll (with an optional &apos;scope&apos; parameter, or in a more limited &apos;querySelectorScoped&apos; version). Also, stylesheets that use rules like &quot;#menu .submenu div&quot; a lot could now be shunted verbatim into a &lt;style scoped&gt;. On browsers that don&apos;t honor @scoped this wouldn&apos;t change anything, but in WebKit, those rules now wouldn&apos;t even be looked at (!) unless at an element that is in that sub-tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443864</commentid>
    <comment_count>57</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-07-29 03:08:17 -0700</bug_when>
    <thetext>&gt; 
&gt; I don&apos;t quite follow: the new patch doesn&apos;t touch the CSS parser, only the selector matching and the &lt;style&gt; element, either of which change is meaningless without the other.
I&apos;m sorry for my confusing comment. I meant to say is css selector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>443982</commentid>
    <comment_count>58</comment_count>
      <attachid>102100</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-07-29 10:26:52 -0700</bug_when>
    <thetext>Comment on attachment 102100
Patch

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

This looks pretty hot. I agree it&apos;s largish, and I would really like Hyatt to take a look.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:3422
&gt; +                        // FIXME: We don&apos;t add @font-face rules of scoped style sheets for the moment.
&gt; +                        // Find a way to have scoped @font-face rules.

A good practice is to file a bug on this and mention it here.

&gt; Source/WebCore/css/CSSStyleSelector.cpp:3431
&gt; +                        // Find a way to have scoped @keyframe rules.

Ditto.

&gt; Source/WebCore/css/CSSStyleSelector.h:239
&gt; +        void matchRulesGlobally(RuleSet*, int&amp; firstRuleIndex, int&amp; lastRuleIndex, bool includeEmptyRules);

Can be just matchRules as before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444479</commentid>
    <comment_count>59</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-31 18:39:43 -0700</bug_when>
    <thetext>(In reply to comment #58)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=102100&amp;action=review
&gt; 
&gt; This looks pretty hot. I agree it&apos;s largish, and I would really like Hyatt to take a look.

I agree - could you please do the IM-pinging when you see him around?

&gt; &gt; Source/WebCore/css/CSSStyleSelector.cpp:3422
&gt; &gt; +                        // FIXME: We don&apos;t add @font-face rules of scoped style sheets for the moment.
&gt; &gt; +                        // Find a way to have scoped @font-face rules.
&gt; 
&gt; A good practice is to file a bug on this and mention it here.

I intended to add these on landing after confirming it&apos;s ok to leave out in the first patch.

&gt; &gt; Source/WebCore/css/CSSStyleSelector.h:239
&gt; &gt; +        void matchRulesGlobally(RuleSet*, int&amp; firstRuleIndex, int&amp; lastRuleIndex, bool includeEmptyRules);
&gt; 
&gt; Can be just matchRules as before?

I renamed it to make it (more) explicit that using this function will not scope the matching, even if one should call it on a RuleSet that comes from a &lt;style scoped&gt;. But if that&apos;s deemed obvious I can of course go back to &quot;matchRules&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444838</commentid>
    <comment_count>60</comment_count>
    <who name="piet">piet</who>
    <bug_when>2011-08-01 13:42:36 -0700</bug_when>
    <thetext>(In reply to comment #56)
&gt; Furthermore, in addition to the obvious applications, this patch opens up quite a few possibilities, e.g., a scoped querySelectorAll (with an optional &apos;scope&apos; parameter, or in a more limited &apos;querySelectorScoped&apos; version). Also, stylesheets that use rules like &quot;#menu .submenu div&quot; a lot could now be shunted verbatim into a &lt;style scoped&gt;. On browsers that don&apos;t honor @scoped this wouldn&apos;t change anything, but in WebKit, those rules now wouldn&apos;t even be looked at (!) unless at an element that is in that sub-tree.

I&apos;m not sure what a scoped querySelectorAll() would do because element.querySelectorAll() is already &quot;scoped&quot; to the node it is called upon (http://www.w3.org/TR/selectors-api/#queryselectorall). Otherwise, you are correct: this patch allows the specification of scopes through other means than the &apos;scoped&apos; attribute, for instance an @scope at-rule that would work like an @media at-rule, or a &apos;scope&apos; attribute in an @import at-rule. Examples:

@scope #id1, #id2 {
    ...
    /* rules */
    ...
}

@import (/path/to/style.css) screen, projection, scope(#id1, #id2);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444845</commentid>
    <comment_count>61</comment_count>
    <who name="Tab Atkins">tabatkins</who>
    <bug_when>2011-08-01 13:48:06 -0700</bug_when>
    <thetext>(In reply to comment #60)
&gt; (In reply to comment #56)
&gt; &gt; Furthermore, in addition to the obvious applications, this patch opens up quite a few possibilities, e.g., a scoped querySelectorAll (with an optional &apos;scope&apos; parameter, or in a more limited &apos;querySelectorScoped&apos; version). Also, stylesheets that use rules like &quot;#menu .submenu div&quot; a lot could now be shunted verbatim into a &lt;style scoped&gt;. On browsers that don&apos;t honor @scoped this wouldn&apos;t change anything, but in WebKit, those rules now wouldn&apos;t even be looked at (!) unless at an element that is in that sub-tree.
&gt; 
&gt; I&apos;m not sure what a scoped querySelectorAll() would do because element.querySelectorAll() is already &quot;scoped&quot; to the node it is called upon (http://www.w3.org/TR/selectors-api/#queryselectorall).

Not quite.  querySelector *filters* its output based on the node it&apos;s called on, to exclude any matches outside of the node&apos;s subtrees.  Scoping is slightly different.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462640</commentid>
    <comment_count>62</comment_count>
    <who name="Dominic Cooney">dominicc</who>
    <bug_when>2011-09-06 10:42:55 -0700</bug_when>
    <thetext>Could you update this patch to head (eg with fast checkable selectors?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462745</commentid>
    <comment_count>63</comment_count>
      <attachid>106466</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-09-06 12:35:04 -0700</bug_when>
    <thetext>Created attachment 106466
work-in-progress before break-up

Work-in-=progress patch before breaking it up into smaller chunks, mainly to fix merge conflicts. On a side note, extending querySelector[All] from r94089 to be scoped should be trivial, but isn&apos;t included in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463463</commentid>
    <comment_count>64</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-09-07 11:06:13 -0700</bug_when>
    <thetext>Note: Change to HTMLStyleElement.idl is missing - will add it to upcoming (smaller) patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>463693</commentid>
    <comment_count>65</comment_count>
      <attachid>106656</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-09-07 15:17:25 -0700</bug_when>
    <thetext>Created attachment 106656
work-in-progress (fix conflicts)

One more work-in-progress to resolve conflicts from changeset 94656.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>469965</commentid>
    <comment_count>66</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-09-20 02:26:00 -0700</bug_when>
    <thetext>You might be able to avoid adding branchiness and somewhat simplify the code by providing the scope element also in non-scoped case (document root). Current null tests would be replaced by scope elements tests everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>506718</commentid>
    <comment_count>67</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-11-20 22:31:52 -0800</bug_when>
    <thetext>(In reply to comment #66)
&gt; You might be able to avoid adding branchiness and somewhat simplify the code by providing the scope element also in non-scoped case (document root). Current null tests would be replaced by scope elements tests everywhere.

In theory yes, but that would require knowing the root node in all cases. This could be the document, but it could also be a DocumentFragment or a ShadowRoot. Now, once bug 59816 has been implemented, this will be trivial, but till then, a NULL pointer for &quot;no scope&quot; is IMHO easier and safer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>545506</commentid>
    <comment_count>68</comment_count>
    <who name="Ian &apos;Hixie&apos; Hickson">ian</who>
    <bug_when>2012-01-30 15:42:49 -0800</bug_when>
    <thetext>Spec is updated; let me know if there&apos;s anything wrong with it:

http://www.whatwg.org/specs/web-apps/current-work/#attr-style-scoped</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>983240</commentid>
    <comment_count>69</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-02-21 09:54:43 -0800</bug_when>
    <thetext>&lt;rdar://problem/16134460&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1219374</commentid>
    <comment_count>70</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2016-08-11 12:31:35 -0700</bug_when>
    <thetext>&lt;style scoped&gt; was removed from tree in r156683, as well as from spec.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96223</attachid>
            <date>2011-06-07 02:57:25 -0700</date>
            <delta_ts>2011-06-07 19:22:47 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-49142-20110607185723.patch</filename>
            <type>text/plain</type>
            <size>30829</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyMjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZmFhNDA5MWE0YzE5MTU1
ZWUzMDczNjMyYWU3NDUzM2E1YjVkMGJmLi4zOTZlYjVjOTAwNjM2MTdlNzM0OGI2YWY2ZmM5OTNm
ZWUxYzYyOGVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDYtMDcgIFJvbGFu
ZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhU
TUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisKKyAgICAgICAgQWRkIGEgbmV3IG1hcCB0byBSdWxl
U2V0IHRoYXQgY29udGFpbnMgcnVsZXMgZnJvbSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50cy4KKyAg
ICAgICAgQWRkIHBsdW1iaW5nIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIDxzdHlsZSBzY29w
ZWQ+IGVsZW1lbnRzIGZyb20gdGhlaXIgcGFyZW50cy4KKyAgICAgICAgRXh0ZW5kIHJ1bGUgbWF0
Y2hpbmcgZm9yIHNjb3BlZCBzdHlsZSBydWxlcy4gCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVs
ZVNldDo6Z2V0SURSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpnZXRDbGFzc1J1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmdldFRhZ1J1bGVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJ1bGVTZXQ6OmdldFBzZXVkb1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1
bGVTZXQ6OmdldFVuaXZlcnNhbFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6Omdl
dFBhZ2VSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjpzY29wZWRSdWxlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmZhc3RTdHlsZVNoZWV0U2NvcGVJc0FuQW5j
ZXN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c2xvd1N0eWxlU2hl
ZXRTY29wZUlzQW5BbmNlc3Rvcik6CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzSW5UcmVlU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxp
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OmFkZFRvUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0
OjphZGRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmRldGVybWluZVJ1bGVzU2Nv
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkU3R5bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmNv
bGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFBhZ2VSdWxlc0Zvckxpc3QpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJl
bnRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJOb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVl
dC5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpD
b250YWluZXJOb2RlOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNvbnRhaW5lck5vZGU6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDb250YWluZXJOb2RlOjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6
CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6
CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQp
OgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dS
b290OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YWRvd1Jvb3Q6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFkb3dSb290OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgICogaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OndpbGxSZW1vdmUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6c2NvcGVkKToKKyAgICAgICAg
KiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuaDoKKwogMjAxMS0wNi0wNyAgTU9SSVRBIEhhamltZSAg
PG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCBy
ODgyMTIgYW5kIHI4ODIxOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApp
bmRleCAxZDM3ZjUwYmEyNTYyNGFkOTA5Zjc1N2Q3YzYyZWMxYjk1Zjk1ZGFjLi4xYjg0YmNlNjE5
MDY4MTYxOTY1Y2NiMjgwN2JlYWEzYzk0N2FmMTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2VsZWN0b3IuY3BwCkBAIC02Myw4ICs2MywxMCBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVu
dEJhc2UuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxl
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJL
ZXlmcmFtZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgpAQCAtMjg2LDkgKzI4OCwxMSBA
QCBpZiAoaWQgPT0gcHJvcElEKSB7IFwKICAgICByZXR1cm47IFwKIH0KIAordHlwZWRlZiBDU1NT
dHlsZVNlbGVjdG9yOjpTdHlsZVNoZWV0U2NvcGUgU3R5bGVTaGVldFNjb3BlOworCiBjbGFzcyBS
dWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0
b3IqLCB1bnNpZ25lZCBwb3NpdGlvbik7CisgICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwgQ1NT
U2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgU3R5bGVTaGVldFNjb3BlKTsKIAogICAgIHVu
c2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAgIENTU1N0
eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtMzE4LDE5ICszMjIs
MjQgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2Rlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZp
ZXJIYXNoZXNbbWF4aW11bUlkZW50aWZpZXJDb3VudF07CiB9OwogCit0eXBlZGVmIFZlY3RvcjxS
dWxlRGF0YT4gUnVsZXNWZWN0b3I7CisKIGNsYXNzIFJ1bGVTZXQgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFJ1bGVTZXQpOwogcHVibGljOgogICAgIFJ1bGVTZXQoKTsKICAgICB+UnVsZVNl
dCgpOwotICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9y
PFJ1bGVEYXRhPio+IEF0b21SdWxlTWFwOwotICAgIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNl
bGVjdG9yKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVt
KTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2Vs
KTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCk7CisgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBSdWxlc1ZlY3Rv
cio+IEF0b21SdWxlTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxTdHlsZVNoZWV0U2NvcGUsIFJ1
bGVzVmVjdG9yKj4gU2NvcGVkUnVsZU1hcDsKKworICAgIFN0eWxlU2hlZXRTY29wZSBkZXRlcm1p
bmVSdWxlc1Njb3BlKENTU1N0eWxlU2hlZXQqKSBjb25zdDsKKworICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NT
dHlsZVNlbGVjdG9yKiA9IDAsIFN0eWxlU2hlZXRTY29wZSA9IDApOworCisgICAgdm9pZCBhZGRT
dHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiwgU3R5bGVTaGVldFNjb3BlKTsKKyAgICB2b2lkIGFkZFJ1
bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBTdHlsZVNoZWV0U2NvcGUpOworICAgIHZv
aWQgYWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIGFk
ZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsK
ICAgICB2b2lkIHNocmlua1RvRml0KCk7CkBAIC0zMzgsMjAgKzM0NywyMiBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYpIGNv
bnN0OwogICAgIAotICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGdldElEUnVsZXMoQXRvbWlj
U3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVybiBtX2lkUnVsZXMuZ2V0KGtleSk7IH0KLSAg
ICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBnZXRDbGFzc1J1bGVzKEF0b21pY1N0cmluZ0ltcGwq
IGtleSkgY29uc3QgeyByZXR1cm4gbV9jbGFzc1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3Qg
VmVjdG9yPFJ1bGVEYXRhPiogZ2V0VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25z
dCB7IHJldHVybiBtX3RhZ1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogZ2V0UHNldWRvUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVy
biBtX3BzZXVkb1J1bGVzLmdldChrZXkpOyB9Ci0gICAgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiog
Z2V0VW5pdmVyc2FsUnVsZXMoKSBjb25zdCB7IHJldHVybiAmbV91bml2ZXJzYWxSdWxlczsgfQot
ICAgIGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIGdldFBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJu
ICZtX3BhZ2VSdWxlczsgfQorICAgIGNvbnN0IFJ1bGVzVmVjdG9yKiBnZXRJRFJ1bGVzKEF0b21p
Y1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9pZFJ1bGVzLmdldChrZXkpOyB9Cisg
ICAgY29uc3QgUnVsZXNWZWN0b3IqIGdldENsYXNzUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5
KSBjb25zdCB7IHJldHVybiBtX2NsYXNzUnVsZXMuZ2V0KGtleSk7IH0KKyAgICBjb25zdCBSdWxl
c1ZlY3RvciogZ2V0VGFnUnVsZXMoQXRvbWljU3RyaW5nSW1wbCoga2V5KSBjb25zdCB7IHJldHVy
biBtX3RhZ1J1bGVzLmdldChrZXkpOyB9CisgICAgY29uc3QgUnVsZXNWZWN0b3IqIGdldFBzZXVk
b1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkgY29uc3QgeyByZXR1cm4gbV9wc2V1ZG9SdWxl
cy5nZXQoa2V5KTsgfQorICAgIGNvbnN0IFJ1bGVzVmVjdG9yKiBnZXRVbml2ZXJzYWxSdWxlcygp
IGNvbnN0IHsgcmV0dXJuICZtX3VuaXZlcnNhbFJ1bGVzOyB9CisgICAgY29uc3QgUnVsZXNWZWN0
b3IqIGdldFBhZ2VSdWxlcygpIGNvbnN0IHsgcmV0dXJuICZtX3BhZ2VSdWxlczsgfQorICAgIGNv
bnN0IFNjb3BlZFJ1bGVNYXAmIHNjb3BlZFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9zY29wZWRS
dWxlczsgfQogICAgIAogcHVibGljOgogICAgIEF0b21SdWxlTWFwIG1faWRSdWxlczsKICAgICBB
dG9tUnVsZU1hcCBtX2NsYXNzUnVsZXM7CiAgICAgQXRvbVJ1bGVNYXAgbV90YWdSdWxlczsKICAg
ICBBdG9tUnVsZU1hcCBtX3BzZXVkb1J1bGVzOwotICAgIFZlY3RvcjxSdWxlRGF0YT4gbV91bml2
ZXJzYWxSdWxlczsKLSAgICBWZWN0b3I8UnVsZURhdGE+IG1fcGFnZVJ1bGVzOworICAgIFJ1bGVz
VmVjdG9yIG1fdW5pdmVyc2FsUnVsZXM7CisgICAgUnVsZXNWZWN0b3IgbV9wYWdlUnVsZXM7Cisg
ICAgU2NvcGVkUnVsZU1hcCBtX3Njb3BlZFJ1bGVzOwogICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50
OwogICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwogfTsKQEAgLTYzMyw2ICs2NDQs
MTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50
KiBwYXJlbnQpCiAgICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hl
cy5zaXplKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAg
ICBtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJI
YXNoZXNbaV0pOworICAgIC8vIFBvaW50IHRvIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGNsb3Nlc3Qg
c3R5bGUgc2NvcGUgKG9yIGxlYXZlIGF0IDAgaWYgbm9uZSkuCisgICAgaWYgKHBhcmVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxl
U2NvcGVGcmFtZSA9ICZwYXJlbnRGcmFtZTsKKyAgICBlbHNlIGlmIChtX3BhcmVudFN0YWNrLnNp
emUoKSA+PSAyKQorICAgICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0g
bV9wYXJlbnRTdGFja1ttX3BhcmVudFN0YWNrLnNpemUoKSAtIDJdLmNsb3Nlc3RTdHlsZVNjb3Bl
RnJhbWU7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgp
CkBAIC03MTgsNyArNzM0LDI0IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhS
dWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgfQogICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFt
ZSgpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCks
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAg
CisgICAgLy8gQWRkIGFwcGxpY2FibGUgc2NvcGVkIHJ1bGVzLgorICAgIGJvb2wgY2FuVXNlRmFz
dFNjb3BpbmcgPSAhbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0
KCkuZWxlbWVudCA9PSBtX3BhcmVudE5vZGU7CisgICAgaWYgKGNhblVzZUZhc3RTY29waW5nKSB7
CisgICAgICAgIGZvciAoUnVsZVNldDo6U2NvcGVkUnVsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBydWxlcy0+c2NvcGVkUnVsZXMoKS5iZWdpbigpLCBpdEVuZCA9IHJ1bGVzLT5zY29wZWRSdWxl
cygpLmVuZCgpOyBpdCAhPSBpdEVuZDsgKytpdCkgeworICAgICAgICAgICAgQVNTRVJUKGl0LT5m
aXJzdCk7CisgICAgICAgICAgICBBU1NFUlQoaXQtPmZpcnN0LT5oYXNTY29wZWRIVE1MU3R5bGVD
aGlsZCgpKTsKKyAgICAgICAgICAgIGlmIChpdC0+Zmlyc3QgPT0gbV9lbGVtZW50IHx8IGZhc3RT
dHlsZVNoZWV0U2NvcGVJc0FuQW5jZXN0b3IoaXQtPmZpcnN0KSkKKyAgICAgICAgICAgICAgICBt
YXRjaFJ1bGVzRm9yTGlzdChpdC0+c2Vjb25kLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgaW5jbHVkZUVtcHR5UnVsZXMsIGl0LT5maXJzdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBmb3IgKFJ1bGVTZXQ6OlNjb3BlZFJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gcnVsZXMtPnNjb3BlZFJ1bGVzKCkuYmVnaW4oKSwgaXRFbmQgPSBydWxlcy0+c2NvcGVkUnVs
ZXMoKS5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+
Zmlyc3QpOworICAgICAgICAgICAgQVNTRVJUKGl0LT5maXJzdC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSk7CisgICAgICAgICAgICBpZiAoc2xvd1N0eWxlU2hlZXRTY29wZUlzQW5BbmNlc3Rv
cihpdC0+Zmlyc3QpKQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KGl0LT5zZWNv
bmQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcywgaXQt
PmZpcnN0KTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBh
bnkgcnVsZXMsIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtNzM5LDYgKzc3MiwzMCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdAogICAgIH0KIH0KIAorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpmYXN0U3R5bGVTaGVldFNj
b3BlSXNBbkFuY2VzdG9yKFN0eWxlU2hlZXRTY29wZSBzY29wZSkgY29uc3QKK3sKKyAgICBBU1NF
UlQoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpKTsgICAgCisgICAgUGFyZW50U3RhY2tGcmFtZSog
Y2xvc2VzdFNjb3BlRnJhbWUgPSBtX3BhcmVudFN0YWNrLmxhc3QoKS5jbG9zZXN0U3R5bGVTY29w
ZUZyYW1lOworICAgIHdoaWxlIChjbG9zZXN0U2NvcGVGcmFtZSkgeworICAgICAgICBpZiAoY2xv
c2VzdFNjb3BlRnJhbWUtPmVsZW1lbnQgPT0gc2NvcGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKGNsb3Nlc3RTY29wZUZyYW1lID09ICZtX3BhcmVudFN0YWNrLmZpcnN0
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC0tY2xvc2VzdFNjb3BlRnJh
bWU7CisgICAgICAgIGNsb3Nlc3RTY29wZUZyYW1lID0gY2xvc2VzdFNjb3BlRnJhbWUtPmNsb3Nl
c3RTdHlsZVNjb3BlRnJhbWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpzbG93U3R5bGVTaGVldFNjb3BlSXNBbkFuY2VzdG9yKFN0eWxlU2hl
ZXRTY29wZSBzY29wZSkgY29uc3QKK3sKKyAgICBmb3IgKGNvbnN0IENvbnRhaW5lck5vZGUqIG5v
ZGUgPSBtX2VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsK
KyAgICAgICAgaWYgKHNjb3BlID09IG5vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCiBpbmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9y
OjpmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKSBjb25zdAogewog
ICAgIEFTU0VSVChtX2FuY2VzdG9ySWRlbnRpZmllckZpbHRlcik7CkBAIC03NzksMTIgKzgzNiwx
NSBAQCBpbmxpbmUgYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMo
KQogCiBib29sIE1hdGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNl
OwogCi1pbmxpbmUgc3RhdGljIGJvb2wgbWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJl
ZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTSkKK2lubGluZSBzdGF0aWMgYm9v
bCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIFN0eWxlU2hlZXRTY29w
ZSBzdHlsZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTSkKIHsKLSAgICByZXR1
cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkgfHwgdHJlZVNjb3Bl
LT5hcHBseUF1dGhvclNoZWV0cygpIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsKKyAgICBy
ZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAg
fHwgdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCisgICAgICAgIHx8IChzdHlsZVNjb3Bl
ICYmIHN0eWxlU2NvcGUtPnRyZWVTY29wZSgpID09IHRyZWVTY29wZSkKKyAgICAgICAgfHwgcnVs
ZVJlYWNoZXNJbnRvU2hhZG93RE9NOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVs
ZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lk
IENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFJ1bGVzVmVjdG9yKiBy
dWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzLCBTdHlsZVNoZWV0U2NvcGUgc3R5bGVTY29wZSkKIHsKICAgICBpZiAoIXJ1
bGVzKQogICAgICAgICByZXR1cm47CkBAIC03OTgsNyArODU4LDcgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywg
aW50JiBmaXIKICAgICAgICAgaWYgKGNhblVzZUZhc3RSZWplY3QgJiYgZmFzdFJlamVjdFNlbGVj
dG9yKHJ1bGVEYXRhKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAoY2hlY2tT
ZWxlY3RvcihydWxlRGF0YSkpIHsKLSAgICAgICAgICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3Bl
KG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIG1fY2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVt
ZW50cykpCisgICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRy
ZWVTY29wZSgpLCBzdHlsZVNjb3BlLCBtX2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVu
dHMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1
bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24t
ZGVidWcgbW9kZS4KICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1
bGUoKTsKQEAgLTMwNDksMTQgKzMxMDksMTQgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2VsZWN0
b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGUKICAg
ICByZXR1cm4gc2VsZWN0b3ItPnRhZygpID09IHN0YXJBdG9tOwogfQogCi1SdWxlRGF0YTo6UnVs
ZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIHVuc2lnbmVk
IHBvc2l0aW9uKQorUnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2Vs
ZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbiwgU3R5bGVTaGVldFNjb3BlIHNjb3Bl
ID0gMCkKICAgICA6IG1fcnVsZShydWxlKQogICAgICwgbV9zZWxlY3RvcihzZWxlY3RvcikKICAg
ICAsIG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCiAgICAgLCBtX3Bvc2l0
aW9uKHBvc2l0aW9uKQogICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoaXNGYXN0Q2hl
Y2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKQogICAgICwgbV9oYXNNdWx0aXBhcnRTZWxlY3Rvcihz
ZWxlY3Rvci0+dGFnSGlzdG9yeSgpKQotICAgICwgbV9oYXNUb3BTZWxlY3Rvck1hdGNoaW5nSFRN
TEJhc2VkT25SdWxlSGFzaChpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNoKHNl
bGVjdG9yKSkKKyAgICAsIG1faGFzVG9wU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhh
c2goIXNjb3BlICYmIGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0
b3IpKQogewogICAgIGNvbGxlY3REZXNjZW5kYW50U2VsZWN0b3JJZGVudGlmaWVySGFzaGVzKCk7
CiB9CkBAIC0zMTIzLDE2ICszMTgzLDI1IEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0
b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKIHsKICAg
ICBpZiAoIWtleSkgcmV0dXJuOwotICAgIFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzID0gbWFwLmdl
dChrZXkpOworICAgIFJ1bGVzVmVjdG9yKiBydWxlcyA9IG1hcC5nZXQoa2V5KTsKICAgICBpZiAo
IXJ1bGVzKSB7Ci0gICAgICAgIHJ1bGVzID0gbmV3IFZlY3RvcjxSdWxlRGF0YT47CisgICAgICAg
IHJ1bGVzID0gbmV3IFJ1bGVzVmVjdG9yOwogICAgICAgICBtYXAuc2V0KGtleSwgcnVsZXMpOwog
ICAgIH0KICAgICBydWxlcy0+YXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxlQ291bnQr
KykpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NT
ZWxlY3Rvciogc2VsKQordm9pZCBSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwg
Q1NTU2VsZWN0b3IqIHNlbCwgU3R5bGVTaGVldFNjb3BlIHNjb3BlKQogeworICAgIGlmIChzY29w
ZSkgeworICAgICAgICBSdWxlc1ZlY3RvciogcnVsZXMgPSBtX3Njb3BlZFJ1bGVzLmdldChzY29w
ZSk7CisgICAgICAgIGlmICghcnVsZXMpIHsKKyAgICAgICAgICAgIHJ1bGVzID0gbmV3IFJ1bGVz
VmVjdG9yOworICAgICAgICAgICAgbV9zY29wZWRSdWxlcy5zZXQoc2NvcGUsIHJ1bGVzKTsKKyAg
ICAgICAgfQorICAgICAgICBydWxlcy0+YXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9ydWxl
Q291bnQrKywgc2NvcGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBpZiAoc2VsLT5t
X21hdGNoID09IENTU1NlbGVjdG9yOjpJZCkgewogICAgICAgICBhZGRUb1J1bGVTZXQoc2VsLT52
YWx1ZSgpLmltcGwoKSwgbV9pZFJ1bGVzLCBydWxlLCBzZWwpOwogICAgICAgICByZXR1cm47CkBA
IC0zMTYxLDcgKzMyMzAsMzQgQEAgdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NTdHlsZVJ1
bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKFJ1bGVE
YXRhKHJ1bGUsIHNlbCwgbV9wYWdlUnVsZXMuc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6
YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlF
dmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK1N0eWxl
U2hlZXRTY29wZSBSdWxlU2V0OjpkZXRlcm1pbmVSdWxlc1Njb3BlKENTU1N0eWxlU2hlZXQqIHNo
ZWV0KSBjb25zdAoreworICAgIGlmICghc2hlZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAg
Tm9kZSogb3duZXJOb2RlID0gc2hlZXQtPmZpbmRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVy
Tm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIVE1M
U3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50
Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAg
IHJldHVybiAwOworICAgICAgICAKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZUVsZW1l
bnQtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICAvLyBJZ25vcmUgJ3Njb3BlZCcgYXR0cmlidXRlIGZvciA8c3R5bGUgc2NvcGVkPiBlbGVt
ZW50cyB3aXRoaW4gPGhlYWQ+LgorICAgIEhUTUxIZWFkRWxlbWVudCogaGVhZCA9IGRvY3VtZW50
LT5oZWFkKCk7CisgICAgaWYgKGhlYWQgJiYgaGVhZC0+Y29udGFpbnMoc3R5bGVFbGVtZW50KSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgU3R5bGVTaGVldFNjb3BlIHNjb3BlID0gc3R5
bGVFbGVtZW50LT5wYXJlbnROb2RlKCk7CisKKyAgICByZXR1cm4gc2NvcGU7Cit9CisKK3ZvaWQg
UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1l
ZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rv
ciwgU3R5bGVTaGVldFNjb3BlIHNjb3BlKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJl
dHVybjsKQEAgLTMxNzYsNyArMzI3Miw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICBTdHlsZUJhc2UqIGl0ZW0g
PSBzaGVldC0+aXRlbShpKTsKICAgICAgICAgaWYgKGl0ZW0tPmlzU3R5bGVSdWxlKCkpCi0gICAg
ICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSkpOwor
ICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0p
LCBzY29wZSk7CiAgICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7CiAgICAg
ICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxl
Kj4oaXRlbSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZh
bChpbXBvcnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQpAQCAtMzE5Miw3ICszMjg4LDcgQEAg
dm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgICAgICAgICAgICAgQ1NTUnVsZSAqY2hp
bGRJdGVtID0gcnVsZXMtPml0ZW0oaik7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEl0
ZW0tPmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEg
U3R5bGVSdWxlLCBzbyBhcHBlbmQgaXQgdG8gb3VyIGxpc3QKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjaGlsZEl0ZW0pKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHls
ZVJ1bGUqPihjaGlsZEl0ZW0pLCBzY29wZSk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAoY2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUg
PSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwpAQCAtMzIxNCwxNCAr
MzMxMCwxNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgICAgICBzaHJpbmtUb0ZpdCgp
OwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit2
b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIFN0eWxlU2hlZXRT
Y29wZSBzY29wZSkKIHsKICAgICBpZiAocnVsZS0+aXNQYWdlUnVsZSgpKSB7CisgICAgICAgIC8v
IElnbm9yZSBAcGFnZSBydWxlcyBpZiB0aGUgc3R5bGUgc2hlZXQgaXMgc2NvcGVkCisgICAgICAg
IGlmIChzY29wZSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgQ1NTUGFnZVJ1bGUqIHBh
Z2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihydWxlKTsKICAgICAgICAgYWRkUGFn
ZVJ1bGUocGFnZVJ1bGUsIHBhZ2VSdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3JMaXN0
KCkuZmlyc3QoKTsgczsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKLSAgICAgICAgICAg
IGFkZFJ1bGUocnVsZSwgcyk7CisgICAgICAgICAgICBhZGRSdWxlKHJ1bGUsIHMsIHNjb3BlKTsK
ICAgICB9CiB9CiAgICAgCkBAIC0zMjYxLDcgKzMzNjAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
Y29sbGVjdEZlYXR1cmVzRnJvbVNlbGVjdG9yKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBm
ZWF0dQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJvbUxpc3QoQ1NT
U3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdCBWZWN0b3I8UnVsZURhdGE+
JiBydWxlcykKK3N0YXRpYyB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0KENTU1N0eWxlU2Vs
ZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcywgY29uc3QgUnVsZXNWZWN0b3ImIHJ1bGVzLCBTdHls
ZVNoZWV0U2NvcGUgc2NvcGUgPSAwKQogewogICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy5zaXpl
KCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewpAQCAtMzI4Miwx
MyArMzM4MSwxNSBAQCBzdGF0aWMgdm9pZCBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChDU1NTdHls
ZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0CiAgICAgICAgIGlmIChmb3VuZFNp
YmxpbmdTZWxlY3RvcikgewogICAgICAgICAgICAgaWYgKCFmZWF0dXJlcy5zaWJsaW5nUnVsZXMp
CiAgICAgICAgICAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzID0gYWRvcHRQdHIobmV3IFJ1
bGVTZXQpOwotICAgICAgICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLT5hZGRSdWxlKHJ1bGVE
YXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0b3IoKSk7ICAgCisgICAgICAgICAgICBmZWF0dXJl
cy5zaWJsaW5nUnVsZXMtPmFkZFJ1bGUocnVsZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3Rv
cigpLCBzY29wZSk7ICAgCiAgICAgICAgIH0KICAgICB9CiB9CiAKIHZvaWQgUnVsZVNldDo6Y29s
bGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QK
IHsKKyAgICBmb3IgKFNjb3BlZFJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRS
dWxlcy5iZWdpbigpLCBpdEVuZCA9IG1fc2NvcGVkUnVsZXMuZW5kKCk7IGl0ICE9IGl0RW5kOyAr
K2l0KQorICAgICAgICBjb2xsZWN0RmVhdHVyZXNGcm9tTGlzdChmZWF0dXJlcywgKml0LT5zZWNv
bmQsIGl0LT5maXJzdCk7CiAgICAgQXRvbVJ1bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1f
aWRSdWxlcy5lbmQoKTsKICAgICBmb3IgKEF0b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1faWRSdWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCiAgICAgICAgIGNvbGxlY3RGZWF0
dXJlc0Zyb21MaXN0KGZlYXR1cmVzLCAqaXQtPnNlY29uZCk7CkBAIC0zNDIyLDcgKzM1MjMsNyBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBi
b29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaQogICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24o
bV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSk7CiB9CiAKLXZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlz
dChjb25zdCBSdWxlc1ZlY3RvciogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpcnN0
UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAzMmViNmY2
OWNmOTBmZmViMjgyYzk0Zjg0MDIwODMyYWZjMDU1ZTRjLi41MzliM2QyNzNhOTE1ZWRiNTNhNzcy
MzEzMjdiZWNlNGEwOTJjZDJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
QEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVB
cHBseVByb3BlcnR5OwogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NTdHlsZVNlbGVj
dG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgorICAgICAgICB0eXBl
ZGVmIGNvbnN0IENvbnRhaW5lck5vZGUqIFN0eWxlU2hlZXRTY29wZTsKKwogICAgICAgICBDU1NT
dHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0cywgQ1NT
U3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAg
IENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5
bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKQEAg
LTIxNSw4ICsyMTcsMTAgQEAgcHVibGljOgogICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJh
dGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7CiAKICAgICAgICAgdm9pZCBt
YXRjaFJ1bGVzKFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOwotICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JM
aXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB2b2lkIG1hdGNo
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlU2hlZXRT
Y29wZSBzdHlsZVNjb3BlID0gMCk7CiAgICAgICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9yKGNv
bnN0IFJ1bGVEYXRhJikgY29uc3Q7CisgICAgICAgIGJvb2wgZmFzdFN0eWxlU2hlZXRTY29wZUlz
QW5BbmNlc3RvcihTdHlsZVNoZWV0U2NvcGUpIGNvbnN0OworICAgICAgICBib29sIHNsb3dTdHls
ZVNoZWV0U2NvcGVJc0FuQW5jZXN0b3IoU3R5bGVTaGVldFNjb3BlKSBjb25zdDsKICAgICAgICAg
dm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAgICAgICAgIAogICAgICAgICBib29sIGNoZWNrU2Vs
ZWN0b3IoY29uc3QgUnVsZURhdGEmKTsKQEAgLTIzOCw5ICsyNDIsMTEgQEAgcHVibGljOgogCiAg
ICAgICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKICAgICAgICAgICAgIFBhcmVudFN0YWNr
RnJhbWUoKSB7fQotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50
KSA6IGVsZW1lbnQoZWxlbWVudCkge30KKyAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxl
bWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpLCBjbG9zZXN0U3R5bGVTY29wZUZyYW1l
KDApIHsgfQogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKICAgICAgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKKyAgICAgICAgICAgIFBhcmVudFN0YWNr
RnJhbWUqIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CisgICAgICAgICAgICAKICAgICAgICAgfTsK
ICAgICAgICAgVmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50U3RhY2s7CiAgICAgICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCmluZGV4IDJmYzNmNDhjMDNlZDg0ZWI1
M2E2NjM5ZmY4NDFhYjYxMTZjMDRiMzUuLjI3ZTU0ZDEzMDlkNzBlYzQ2MGQ4MTkxYzA1NGZiZTg1
ZmEyYzBjZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKQEAgLTIzNiwyNCAr
MjM2LDI2IEBAIHZvaWQgQ1NTU3R5bGVTaGVldDo6c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCkK
ICAgICAgICAgb3duZXItPnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwogfQogCi1Eb2N1bWVu
dCogQ1NTU3R5bGVTaGVldDo6ZG9jdW1lbnQoKQorTm9kZSogQ1NTU3R5bGVTaGVldDo6ZmluZE93
bmVyTm9kZSgpIGNvbnN0CiB7Ci0gICAgU3R5bGVCYXNlKiBzdHlsZU9iamVjdCA9IHRoaXM7Ci0g
ICAgd2hpbGUgKHN0eWxlT2JqZWN0KSB7CisgICAgZm9yIChjb25zdCBTdHlsZUJhc2UqIHN0eWxl
T2JqZWN0ID0gdGhpczsgc3R5bGVPYmplY3Q7IHN0eWxlT2JqZWN0ID0gc3R5bGVPYmplY3QtPnBh
cmVudCgpKSB7CiAgICAgICAgIGlmIChzdHlsZU9iamVjdC0+aXNDU1NTdHlsZVNoZWV0KCkpIHsK
LSAgICAgICAgICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQq
PihzdHlsZU9iamVjdCktPm93bmVyTm9kZSgpOworICAgICAgICAgICAgTm9kZSogb3duZXJOb2Rl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTU3R5bGVTaGVldCo+KHN0eWxlT2JqZWN0KS0+b3duZXJO
b2RlKCk7CiAgICAgICAgICAgICBpZiAob3duZXJOb2RlKQotICAgICAgICAgICAgICAgIHJldHVy
biBvd25lck5vZGUtPmRvY3VtZW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyTm9k
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3R5bGVPYmplY3QtPmlzUnVsZSgpKQotICAgICAg
ICAgICAgc3R5bGVPYmplY3QgPSBzdGF0aWNfY2FzdDxDU1NSdWxlKj4oc3R5bGVPYmplY3QpLT5w
YXJlbnRTdHlsZVNoZWV0KCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlT2JqZWN0
ID0gc3R5bGVPYmplY3QtPnBhcmVudCgpOwogICAgIH0KLQogICAgIHJldHVybiAwOwogfQogCitE
b2N1bWVudCogQ1NTU3R5bGVTaGVldDo6ZG9jdW1lbnQoKQoreworICAgIE5vZGUqIG93bmVyTm9k
ZSA9IGZpbmRPd25lck5vZGUoKTsKKworICAgIHJldHVybiBvd25lck5vZGUgPyBvd25lck5vZGUt
PmRvY3VtZW50KCkgOiAwOworfQorCisKIHZvaWQgQ1NTU3R5bGVTaGVldDo6c3R5bGVTaGVldENo
YW5nZWQoKQogewogICAgIFN0eWxlQmFzZSogcm9vdCA9IHRoaXM7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2hlZXQuaAppbmRleCAzNWE0NTEwMmQxZWI2YjJkNjkyY2RiMTQxNTUzY2ZjOTExZTdiODdj
Li5lNGI1YTBiZDZlNzhjMmNjZDk4MGZkM2E2Zjk2OGMxNzA0YTEzYjg1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmgKQEAgLTg4LDYgKzg4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBjaGVja0xvYWRlZCgpOwogICAgIHZvaWQgc3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7
CiAKKyAgICBOb2RlKiBmaW5kT3duZXJOb2RlKCkgY29uc3Q7CiAgICAgRG9jdW1lbnQqIGRvY3Vt
ZW50KCk7CiAKICAgICBjb25zdCBTdHJpbmcmIGNoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2No
YXJzZXQ7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCmluZGV4IDlmNmRjZTU5OWZjYjgx
MmZjZjA3OWZkNzgwMTJmYmU5ZDE0YTVlOTkuLmFiNTQ0OGMwMTcwNDAzYWYyYWU4MWFjYmY0YmYx
ZTUxODIyMmZiNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2Rl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaApAQCAtODAsNyArODAs
MTQgQEAgcHVibGljOgogICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2Rl
Kik7CiAKICAgICB2b2lkIGNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlKiBjbG9uZSk7Ci0g
ICAgCisKKyAgICAvLyBUaGlzIGlzIHZpcnR1YWwgb24gQ29udGFpbmVyTm9kZSB3aXRoIGEgZGVm
YXVsdCBuby1vcCBpbXBsZW1lbnRhdGlvbiBmb3IgY29udmVuaWVuY2UuCisgICAgLy8gSWYgd2Ug
c2hvdWxkIGNvbnZlcnQgU2hhZG93Um9vdCB0byBiZWNvbWUgYSByZWd1bGFyIGVsZW1lbnQsIHdl
IGNhbiBtb3ZlIHRoZXNlIG1ldGhvZHMKKyAgICAvLyB0byBFbGVtZW50IGFuZCBtYWtlIHRoZW0g
bm9uLXZpcnR1YWwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxk
KCkgeyB9CisgICAgdmlydHVhbCBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKwogICAgIGJvb2wgZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VVUkwpOwogCiAgICAgc3RhdGljIHZvaWQgcXVldWVQb3N0QXR0YWNo
Q2FsbGJhY2soTm9kZUNhbGxiYWNrLCBOb2RlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXgg
ZGUyNWNmYTExOTBhY2ViOWE2N2JiZGNhMThiYzYwZWZiMWU3N2QyNi4uMjJkMmRhMWJiMDkzN2Fh
ZmUwZjEyMjMwZGE1YmQ4NjZmM2FjMjRlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM0
OSw2ICsxMzQ5LDIzIEBAIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdl
ZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmCiAgICAgICAgIGNoZWNrRm9y
U2libGluZ1N0eWxlQ2hhbmdlcyh0aGlzLCByZW5kZXJTdHlsZSgpLCBmYWxzZSwgYmVmb3JlQ2hh
bmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIH0KIAordm9pZCBFbGVtZW50Ojpy
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5y
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6dW5yZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7
CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCktPnVucmVnaXN0ZXJT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCitib29sIEVsZW1lbnQ6Omhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0
YSgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCiB2b2lkIEVsZW1lbnQ6OmJlZ2lu
UGFyc2luZ0NoaWxkcmVuKCkKIHsKICAgICBjbGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5oCmluZGV4IGUxNGU0OGI4ZTIzNDI0YmQ0ZjA2NTY5NzI0MDRhZTRm
MjkzYjA4ZGQuLjEyYzdiOGJlZmU0YjM5OWVmOGI5MmI3ODU3MTViZDA5YTMzNGI1M2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnQuaApAQCAtMjM2LDYgKzIzNiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIAorICAgIHZpcnR1
YWwgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgdmlydHVhbCB2b2lk
IHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIHZpcnR1YWwgYm9vbCBoYXNT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAgICAgUmVuZGVyU3R5bGUqIGNvbXB1dGVk
U3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETyk7CiAKICAgICBBdG9taWNTdHJpbmcgY29tcHV0ZUlu
aGVyaXRlZExhbmd1YWdlKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgK
aW5kZXggNWE2NWVkYjdlMTFjN2JkYTkwNWNhZDY2ZGE2ODY2NzIyNWQ1NTE3OC4uZDU3NTAzN2Nm
M2I5OGQ0N2M3NmI5MjdkY2YwMDdmYmQ3YjM0NTVhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
UmFyZURhdGEuaApAQCAtMzksNiArMzksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldENv
bXB1dGVkU3R5bGUoKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
OworICAgIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgYm9vbCBo
YXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAgICAgdXNpbmcgTm9kZVJhcmVEYXRh
OjpuZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsKICAgICB1c2luZyBO
b2RlUmFyZURhdGE6OnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
OwogCkBAIC00OSw2ICs1Myw4IEBAIHB1YmxpYzoKICAgICBPd25QdHI8RGF0YXNldERPTVN0cmlu
Z01hcD4gbV9kYXRhc2V0RE9NU3RyaW5nTWFwOwogICAgIE93blB0cjxDbGFzc0xpc3Q+IG1fY2xh
c3NMaXN0OwogCisgICAgdW5zaWduZWQgbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVu
OworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgIGJvb2wgbV9jb250YWluc0Z1bGxT
Y3JlZW5FbGVtZW50OwogI2VuZGlmCkBAIC02Miw2ICs2OCw3IEBAIGlubGluZSBJbnRTaXplIGRl
ZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVs
ZW1lbnRSYXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVsdE1p
bmltdW1TaXplRm9yUmVzaXppbmcoKSkKICAgICAsIG1fc2hhZG93Um9vdCgwKQorICAgICwgbV9u
dW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGZhbHNlKQogI2VuZGlmCkBA
IC03OCw1ICs4NSwyMSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJlc2V0Q29tcHV0
ZWRTdHlsZSgpCiAgICAgbV9jb21wdXRlZFN0eWxlLmNsZWFyKCk7CiB9CiAKK2lubGluZSB2b2lk
IEVsZW1lbnRSYXJlRGF0YTo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7CisgICAg
KyttX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKK2lubGluZSB2b2lkIEVs
ZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBB
U1NFUlQobV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuID4gMCk7CisgICAgLS1tX251
bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKK2lubGluZSBib29sIEVsZW1lbnRS
YXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBt
X251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKIH0KICNlbmRpZiAvLyBFbGVt
ZW50UmFyZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKaW5kZXggY2U4ZWIwZjFhNTliODFm
ZTdiMDY4OTg5ZTViZDE2NTZkYTdjNTRhMy4uMDJhNTM2NDYzNjk2MmI2ZjI2NjcxMmUzNGI4MmZm
N2NlZDg4NDdmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCkBAIC00NCw2ICs0NCwxMCBAQCBw
dWJsaWM6CiAgICAgQ29udGFpbmVyTm9kZSogYWN0aXZlQ29udGVudENvbnRhaW5lcigpOwogICAg
IHZvaWQgaG9zdENoaWxkcmVuQ2hhbmdlZCgpOwogCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlclNjb3Bl
ZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgdmlydHVhbCBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNo
aWxkKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgU2hhZG93Um9vdChEb2N1bWVudCopOwogICAg
IHZpcnR1YWwgflNoYWRvd1Jvb3QoKTsKQEAgLTU2LDYgKzYwLDggQEAgcHJpdmF0ZToKICAgICB2
aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAKICAgICBib29sIGhhc0NvbnRlbnRFbGVtZW50KCkgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CiB9
OwogCiBpbmxpbmUgUGFzc1JlZlB0cjxTaGFkb3dSb290PiBTaGFkb3dSb290OjpjcmVhdGUoRG9j
dW1lbnQqIGRvY3VtZW50KQpAQCAtNjMsNiArNjksMjIgQEAgaW5saW5lIFBhc3NSZWZQdHI8U2hh
ZG93Um9vdD4gU2hhZG93Um9vdDo6Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFNoYWRvd1Jvb3QoZG9jdW1lbnQpKTsKIH0KIAoraW5saW5lIHZvaWQg
U2hhZG93Um9vdDo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7CisgICAgKyttX251
bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKK2lubGluZSB2b2lkIFNoYWRvd1Jv
b3Q6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7CisgICAgQVNTRVJUKG1fbnVt
YmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbiA+IDApOworICAgIC0tbV9udW1iZXJPZlNjb3Bl
ZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCitpbmxpbmUgYm9vbCBTaGFkb3dSb290OjpoYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRI
VE1MU3R5bGVDaGlsZHJlbjsKK30KKwogfSAvLyBuYW1lc3BhY2UKIAogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IDE2NzllOTZhMDBhNGYzNDEx
YTlmZTBhYjc3ODFlYmE3NjQ3ZGIyNTIuLjQ4Zjk1MDVmNmZiNjZkOGE1YjBiMTY4MTY3YmMzMjk0
MDEzMjRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5h
bWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBA
IC0yNjUsNiArMjY1LDcgQEAgcnVsZXMKIHNhbmRib3gKIHNjaGVtZQogc2NvcGUKK3Njb3BlZAog
c2Nyb2xsYW1vdW50CiBzY3JvbGxkZWxheQogc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcAppbmRleCAwZjI1NmUxNWJiM2IyZGZmZGQwZjdmNGRmZmRmZjM4
NTRjYmY3MTU4Li5hMzdjYmYwNjJjZjAxYzcwOTNlMDM2N2EyYWM5YjZmOGRmYmNjZDQwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTczLDYgKzczLDIwIEBA
IHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwogICAgIFN0eWxlRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoZG9jdW1lbnQoKSwgdGhpcyk7CisgICAgaWYgKHNjb3BlZCgpKSB7
CisgICAgICAgIENvbnRhaW5lck5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsKKyAgICAgICAg
aWYgKHBhcmVudCkKKyAgICAgICAgICAgIHBhcmVudC0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVD
aGlsZCgpOworICAgIH0KK30KKwordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVtb3ZlKCkK
K3sKKyAgICBpZiAoc2NvcGVkKCkpIHsKKyAgICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50ID0g
cGFyZW50Tm9kZSgpOworICAgICAgICBpZiAocGFyZW50KQorICAgICAgICAgICAgcGFyZW50LT51
bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICB9CiB9CiAKIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCkBAIC0xMjAsNCArMTM0LDkgQEAgdm9p
ZCBIVE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChib29sIHNldERpc2FibGVkKQogICAgICAg
ICBzdHlsZVNoZWV0LT5zZXREaXNhYmxlZChzZXREaXNhYmxlZCk7CiB9CiAKK2Jvb2wgSFRNTFN0
eWxlRWxlbWVudDo6c2NvcGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0
ZShzY29wZWRBdHRyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQu
aAppbmRleCBhZjI4MDg1ZGJiYmY0NWVkN2NkZDRiZDI0ZjRkZjRmZGRmZmU0ZTFmLi40NDVjOGU3
ZmRkOGE4NDg0ZGM3ODA3Njg1NDI5Yzg5ZWI3NDgzYmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuaApAQCAtNDIsMTIgKzQyLDE1IEBAIHB1YmxpYzoKICAgICBib29sIGRp
c2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAorICAgIGJvb2wg
c2NvcGVkKCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgSFRNTFN0eWxlRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAKICAgICAv
LyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CiAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1
bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7CiAgICAgdmlydHVhbCB2b2lk
IHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2Vk
KGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5v
ZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96356</attachid>
            <date>2011-06-07 19:22:54 -0700</date>
            <delta_ts>2011-06-09 01:38:48 -0700</delta_ts>
            <desc>work-in-progress (cleaned)</desc>
            <filename>bug-49142-20110608112252.patch</filename>
            <type>text/plain</type>
            <size>28245</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODgyMjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZmFhNDA5MWE0YzE5MTU1
ZWUzMDczNjMyYWU3NDUzM2E1YjVkMGJmLi5mMmViMDRlZGYzOTAyM2Y2ZGQ3ZjdkNGJlN2EyMTYx
MTk0MDhkYWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTEtMDYtMDcgIFJvbGFu
ZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhU
TUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisKKyAgICAgICAgQWRkIGEgbmV3IG1hcCB0byBSdWxl
U2V0IHRoYXQgY29udGFpbnMgcnVsZXMgZnJvbSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50cy4KKyAg
ICAgICAgQWRkIHBsdW1iaW5nIHRvIHJlZ2lzdGVyIGFuZCB1bnJlZ2lzdGVyIDxzdHlsZSBzY29w
ZWQ+IGVsZW1lbnRzIGZyb20gdGhlaXIgcGFyZW50cy4KKyAgICAgICAgRXh0ZW5kIHJ1bGUgbWF0
Y2hpbmcgZm9yIHNjb3BlZCBzdHlsZSBydWxlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIChP
T1BTISkKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJ1bGVTZXQ6OnNjb3BlZFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWlu
ZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0
YWNrRnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjptYXRjaGVzSW5UcmVlU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UnVsZURhdGE6OlJ1bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFk
ZFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkU3R5bGVSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6
OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlBhcmVudFN0YWNrRnJhbWU6OlBhcmVu
dFN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTaGVldDo6ZG9jdW1lbnQpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0
Lmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWdpc3RlclNjb3BlZEhUTUxTdHls
ZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVucmVnaXN0ZXJTY29wZWRIVE1M
U3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCk6CisgICAgICAgICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVu
dFJhcmVEYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRS
YXJlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OnJlZ2lzdGVyU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjp1
bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgICogaHRtbC9IVE1M
QXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6d2lsbFJlbW92ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQpOgorICAgICAgICAqIGh0bWwv
SFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
aXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KToKKwogMjAxMS0wNi0wNyAgTU9SSVRBIEhh
amltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByODgyMTIgYW5kIHI4ODIxOS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmNwcAppbmRleCAxZDM3ZjUwYmEyNTYyNGFkOTA5Zjc1N2Q3YzYyZWMxYjk1Zjk1ZGFjLi5mZGEw
NWVkMGYzODdhNWVmMTliMGFmY2IzZGU4ZWZlNzI0NTE2YjYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC02Myw4ICs2MywxMCBAQAogI2luY2x1ZGUgIkhUTUxE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1l
RWxlbWVudEJhc2UuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJI
VE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNs
dWRlICJLZXlmcmFtZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgpAQCAtMjg2LDkgKzI4
OCwxMSBAQCBpZiAoaWQgPT0gcHJvcElEKSB7IFwKICAgICByZXR1cm47IFwKIH0KIAordHlwZWRl
ZiBDU1NTdHlsZVNlbGVjdG9yOjpTdHlsZVNoZWV0U2NvcGUgU3R5bGVTaGVldFNjb3BlOworCiBj
bGFzcyBSdWxlRGF0YSB7CiBwdWJsaWM6Ci0gICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxlKiwgQ1NT
U2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbik7CisgICAgUnVsZURhdGEoQ1NTU3R5bGVSdWxl
KiwgQ1NTU2VsZWN0b3IqLCB1bnNpZ25lZCBwb3NpdGlvbiwgU3R5bGVTaGVldFNjb3BlKTsKIAog
ICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsgfQogICAg
IENTU1N0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQpAQCAtMzIzLDE0
ICszMjcsMTUgQEAgY2xhc3MgUnVsZVNldCB7CiBwdWJsaWM6CiAgICAgUnVsZVNldCgpOwogICAg
IH5SdWxlU2V0KCk7Ci0gICAgCisKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIFZlY3RvcjxSdWxlRGF0YT4qPiBBdG9tUnVsZU1hcDsKLSAgICAKLSAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
Q1NTU3R5bGVTZWxlY3RvciogPSAwKTsKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3R5bGVTaGVldFNj
b3BlLCBWZWN0b3I8UnVsZURhdGE+Kj4gU2NvcGVkUnVsZU1hcDsKKworICAgIHZvaWQgYWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBD
U1NTdHlsZVNlbGVjdG9yKiA9IDAsIFN0eWxlU2hlZXRTY29wZSA9IDApOwogCi0gICAgdm9pZCBh
ZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVtKTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKENT
U1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRTdHlsZVJ1
bGUoQ1NTU3R5bGVSdWxlKiwgU3R5bGVTaGVldFNjb3BlKTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NT
U3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqLCBTdHlsZVNoZWV0U2NvcGUpOworICAgIHZvaWQgYWRk
UGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIGFkZFRvUnVs
ZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKICAgICB2
b2lkIHNocmlua1RvRml0KCk7CkBAIC0zNDQsNiArMzQ5LDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4qIGdldFBzZXVkb1J1bGVzKEF0b21pY1N0cmluZ0ltcGwqIGtleSkg
Y29uc3QgeyByZXR1cm4gbV9wc2V1ZG9SdWxlcy5nZXQoa2V5KTsgfQogICAgIGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIGdldFVuaXZlcnNhbFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gJm1fdW5pdmVy
c2FsUnVsZXM7IH0KICAgICBjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBnZXRQYWdlUnVsZXMoKSBj
b25zdCB7IHJldHVybiAmbV9wYWdlUnVsZXM7IH0KKyAgICBjb25zdCBTY29wZWRSdWxlTWFwJiBz
Y29wZWRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGVkUnVsZXM7IH0KICAgICAKIHB1Ymxp
YzoKICAgICBBdG9tUnVsZU1hcCBtX2lkUnVsZXM7CkBAIC0zNTIsNiArMzU4LDcgQEAgcHVibGlj
OgogICAgIEF0b21SdWxlTWFwIG1fcHNldWRvUnVsZXM7CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiBt
X3VuaXZlcnNhbFJ1bGVzOwogICAgIFZlY3RvcjxSdWxlRGF0YT4gbV9wYWdlUnVsZXM7CisgICAg
U2NvcGVkUnVsZU1hcCBtX3Njb3BlZFJ1bGVzOwogICAgIHVuc2lnbmVkIG1fcnVsZUNvdW50Owog
ICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwogfTsKQEAgLTQyNyw2ICs0MzQsMzkg
QEAgc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRvTGVmdERlY2xhcmF0
aW9uKCkKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQogCisvLyBEZXRlcm1p
bmUgdGhlIHNjb3BlIG9mIGEgc3R5bGUgc2hlZXQgKGlmIGFueSkuIFJldHVybnMgJ2ZhbHNlJyBp
ZiBpdCdzIGEgc2NvcGVkIHN0eWxlIHNoZWV0IGluIGFuIGludmFsaWQgbG9jYXRpb24uCitzdGF0
aWMgYm9vbCBkZXRlcm1pbmVTY29wZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgU3R5bGVTaGVldFNj
b3BlJiBzY29wZSkKK3sKKyAgICBzY29wZSA9IDA7CisKKyAgICBpZiAoIXNoZWV0KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZE93bmVy
Tm9kZSgpOworICAgIGlmICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQo
KSB8fCAhb3duZXJOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxTdHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVF
bGVtZW50LT5zY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIAorICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0eWxlRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZ25vcmUgJ3Njb3BlZCcg
YXR0cmlidXRlIGZvciA8c3R5bGUgc2NvcGVkPiBlbGVtZW50cyB3aXRoaW4gPGhlYWQ+LgorICAg
IEhUTUxIZWFkRWxlbWVudCogaGVhZCA9IGRvY3VtZW50LT5oZWFkKCk7CisgICAgaWYgKGhlYWQg
JiYgaGVhZC0+Y29udGFpbnMoc3R5bGVFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50T3JIb3N0ID0gc3R5bGVFbGVtZW50LT5wYXJl
bnRPckhvc3ROb2RlKCk7CisgICAgaWYgKCFwYXJlbnRPckhvc3QgfHwgIXBhcmVudE9ySG9zdC0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzY29wZSA9IHRv
RWxlbWVudChwYXJlbnRPckhvc3QpOworICAgIHJldHVybiB0cnVlOworfQorCiBDU1NTdHlsZVNl
bGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExp
c3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hl
ZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNo
ZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdHJpY3RQYXJz
aW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKQEAgLTQ5Nyw4ICs1MzcsMTQgQEAg
Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0
eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHlsZVNoZWV0
cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7Ci0gICAg
ICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQot
ICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYgKHNo
ZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsKKyAgICAgICAg
ICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+
KHNoZWV0KTsKKyAgICAgICAgICAgIFN0eWxlU2hlZXRTY29wZSBzY29wZSA9IDA7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQsIHNjb3BlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAgICAg
ICAgfQogICAgIH0gICAgCiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBz
aWJsaW5nIHNlbGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRo
ZSBjdXJyZW50IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhp
cyBpbmZvcm1hdGlvbiB0byByZWplY3QKQEAgLTYzMyw2ICs2NzksMTEgQEAgdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpCiAgICAgc2l6
ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBtX2FuY2VzdG9ySWRlbnRp
ZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOworICAgIC8v
IFBvaW50IHRvIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGNsb3Nlc3Qgc3R5bGUgc2NvcGUgKG9yIGxl
YXZlIGF0IDAgaWYgbm9uZSkuCisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKSkKKyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSA9ICZwYXJl
bnRGcmFtZTsKKyAgICBlbHNlIGlmIChtX3BhcmVudFN0YWNrLnNpemUoKSA+PSAyKQorICAgICAg
ICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0gbV9wYXJlbnRTdGFja1ttX3Bh
cmVudFN0YWNrLnNpemUoKSAtIDJdLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiB9CiAKIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCkBAIC03MTgsNyArNzY5LDMz
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgfQogICAgIG1hdGNoUnVsZXNGb3JMaXN0
KHJ1bGVzLT5nZXRUYWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hS
dWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgCisgICAgLy8gQWRkIGFwcGxp
Y2FibGUgc2NvcGVkIHJ1bGVzLgorICAgIGNvbnN0IFJ1bGVTZXQ6OlNjb3BlZFJ1bGVNYXAmIHJ1
bGVNYXAgPSBydWxlcy0+c2NvcGVkUnVsZXMoKTsKKyAgICBpZiAoIW1fcGFyZW50U3RhY2suaXNF
bXB0eSgpICYmIG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gbV9wYXJlbnROb2RlKSB7
CisgICAgICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5jbG9zaW5nIHNjb3BlcyBkaXJlY3Rs
eSBmcm9tIHBhcmVudCBzdGFjay4KKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZSogc2NvcGVGcmFt
ZSA9IG1fcGFyZW50U3RhY2subGFzdCgpLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CisgICAgICAg
IHdoaWxlIChzY29wZUZyYW1lKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0U2NvcGUgc2NvcGUg
PSBzY29wZUZyYW1lLT5lbGVtZW50OworICAgICAgICAgICAgVmVjdG9yPFJ1bGVEYXRhPiogcnVs
ZVZlY3RvciA9IHJ1bGVNYXAuZ2V0KHNjb3BlKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXNGb3JM
aXN0KHJ1bGVWZWN0b3IsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcywgc2NvcGUpOworICAgICAgICAgICAgaWYgKHNjb3BlRnJhbWUgPT0gJm1fcGFyZW50
U3RhY2suZmlyc3QoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC0tc2Nv
cGVGcmFtZTsKKyAgICAgICAgICAgIHNjb3BlRnJhbWUgPSBzY29wZUZyYW1lLT5jbG9zZXN0U3R5
bGVTY29wZUZyYW1lOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2xvdyBi
cmFuY2g6IGNsaW1iIHRyZWUsIGNoZWNrIGZvciBzdHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVu
dC4KKyAgICAgICAgZm9yIChjb25zdCBOb2RlKiBub2RlID0gbV9lbGVtZW50OyBub2RlOyBub2Rl
ID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aXNF
bGVtZW50Tm9kZSgpKSB7CisgICAgICAgICAgICAgICAgY29uc3QgRWxlbWVudCogZWxlbWVudCA9
IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVk
SFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAgICAgICAgICBWZWN0b3I8UnVsZURhdGE+
KiBydWxlVmVjdG9yID0gcnVsZU1hcC5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAg
IG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVWZWN0b3IsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBpbmNsdWRlRW1wdHlSdWxlcywgZWxlbWVudCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCiAgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNo
IGFueSBydWxlcywgd2UncmUgZG9uZS4KICAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm47CkBAIC03NzksMTIgKzg1NiwxNSBAQCBpbmxpbmUgYm9vbCBNYXRj
aGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFS
dWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi1pbmxpbmUgc3RhdGljIGJv
b2wgbWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlLCBib29sIHJ1bGVSZWFj
aGVzSW50b1NoYWRvd0RPTSkKK2lubGluZSBzdGF0aWMgYm9vbCBtYXRjaGVzSW5UcmVlU2NvcGUo
VHJlZVNjb3BlKiB0cmVlU2NvcGUsIFN0eWxlU2hlZXRTY29wZSBzdHlsZVNjb3BlLCBib29sIHJ1
bGVSZWFjaGVzSW50b1NoYWRvd0RPTSkKIHsKLSAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkgfHwgdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygp
IHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsKKyAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVz
U2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAgfHwgdHJlZVNjb3BlLT5hcHBseUF1
dGhvclNoZWV0cygpCisgICAgICAgIHx8IChzdHlsZVNjb3BlICYmIHN0eWxlU2NvcGUtPnRyZWVT
Y29wZSgpID09IHRyZWVTY29wZSkKKyAgICAgICAgfHwgcnVsZVJlYWNoZXNJbnRvU2hhZG93RE9N
OwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxl
SW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0
UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIFN0
eWxlU2hlZXRTY29wZSBzdHlsZVNjb3BlKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTc5OCw3ICs4NzgsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgICAg
ICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRh
KSkgewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVl
U2NvcGUoKSwgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKKyAgICAgICAg
ICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIHN0eWxl
U2NvcGUsIG1fY2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVy
dGllcyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAg
ICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwpAQCAtMzA0OSwx
NCArMzEyOSwxNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTZWxlY3Rvck1hdGNoaW5nSFRNTEJh
c2VkT25SdWxlSGFzaChjb25zdCBDU1NTZWxlY3Rvciogc2VsZQogICAgIHJldHVybiBzZWxlY3Rv
ci0+dGFnKCkgPT0gc3RhckF0b207CiB9CiAKLVJ1bGVEYXRhOjpSdWxlRGF0YShDU1NTdHlsZVJ1
bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgdW5zaWduZWQgcG9zaXRpb24pCitSdWxl
RGF0YTo6UnVsZURhdGEoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsZWN0b3Is
IHVuc2lnbmVkIHBvc2l0aW9uLCBTdHlsZVNoZWV0U2NvcGUgc2NvcGUgPSAwKQogICAgIDogbV9y
dWxlKHJ1bGUpCiAgICAgLCBtX3NlbGVjdG9yKHNlbGVjdG9yKQogICAgICwgbV9zcGVjaWZpY2l0
eShzZWxlY3Rvci0+c3BlY2lmaWNpdHkoKSkKICAgICAsIG1fcG9zaXRpb24ocG9zaXRpb24pCiAg
ICAgLCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihpc0Zhc3RDaGVja2FibGVTZWxlY3Rvcihz
ZWxlY3RvcikpCiAgICAgLCBtX2hhc011bHRpcGFydFNlbGVjdG9yKHNlbGVjdG9yLT50YWdIaXN0
b3J5KCkpCi0gICAgLCBtX2hhc1RvcFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KGlzU2VsZWN0b3JNYXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goc2VsZWN0b3IpKQorICAgICwg
bV9oYXNUb3BTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCghc2NvcGUgJiYgaXNT
ZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaChzZWxlY3RvcikpCiB7CiAgICAgY29s
bGVjdERlc2NlbmRhbnRTZWxlY3RvcklkZW50aWZpZXJIYXNoZXMoKTsKIH0KQEAgLTMxMzEsOCAr
MzIxMSwxNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBr
ZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAgcnVsZXMtPmFwcGVuZChSdWxlRGF0YShydWxlLCBz
ZWwsIG1fcnVsZUNvdW50KyspKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxl
UnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwsIFN0eWxlU2hlZXRTY29wZSBzY29wZSkK
IHsKKyAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMgPSBt
X3Njb3BlZFJ1bGVzLmdldChzY29wZSk7CisgICAgICAgIGlmICghcnVsZXMpIHsKKyAgICAgICAg
ICAgIHJ1bGVzID0gbmV3IFZlY3RvcjxSdWxlRGF0YT47CisgICAgICAgICAgICBtX3Njb3BlZFJ1
bGVzLnNldChzY29wZSwgcnVsZXMpOworICAgICAgICB9CisgICAgICAgIHJ1bGVzLT5hcHBlbmQo
UnVsZURhdGEocnVsZSwgc2VsLCBtX3J1bGVDb3VudCsrLCBzY29wZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OklkKSB7CiAg
ICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGUs
IHNlbCk7CiAgICAgICAgIHJldHVybjsKQEAgLTMxNjEsNyArMzI1MCw3IEBAIHZvaWQgUnVsZVNl
dDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQogICAg
IG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWwsIG1fcGFnZVJ1bGVzLnNpemUo
KSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0
b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0
eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0
eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIFN0eWxlU2hlZXRTY29wZSBzY29wZSkKIHsKICAg
ICBpZiAoIXNoZWV0KQogICAgICAgICByZXR1cm47CkBAIC0zMTc2LDcgKzMyNjUsNyBAQCB2b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsK
ICAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0ZW0oaSk7CiAgICAgICAgIGlmIChp
dGVtLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0
PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSwgc2NvcGUpOwogICAgICAgICBlbHNlIGlmIChpdGVt
LT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSogaW1wb3J0ID0g
c3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGl0ZW0pOwogICAgICAgICAgICAgaWYgKCFpbXBv
cnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0LT5tZWRpYSgpLCBzdHlsZVNlbGVjdG9y
KSkKQEAgLTMxOTIsNyArMzI4MSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
Q1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAg
ICAgICAgICAgICAgIENTU1J1bGUgKmNoaWxkSXRlbSA9IHJ1bGVzLT5pdGVtKGopOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoY2hpbGRJdGVtLT5pc1N0eWxlUnVsZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBJdCBpcyBhIFN0eWxlUnVsZSwgc28gYXBwZW5kIGl0IHRvIG91ciBs
aXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVSdWxlKj4oY2hpbGRJdGVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHls
ZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRJdGVtKSwgc2NvcGUpOwogICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNGb250RmFjZVJ1bGUoKSAm
JiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBm
b250IGZhY2UgdG8gb3VyIHNldC4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENTU0Zv
bnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4o
Y2hpbGRJdGVtKTsKQEAgLTMyMTQsMTQgKzMzMDMsMTcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRv
ciYKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlLCBTdHlsZVNoZWV0U2NvcGUgc2NvcGUpCiB7CiAgICAgaWYgKHJ1bGUtPmlz
UGFnZVJ1bGUoKSkgeworICAgICAgICAvLyBJZ25vcmUgQHBhZ2UgcnVsZXMgaWYgdGhlIHN0eWxl
IHNoZWV0IGlzIHNjb3BlZAorICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0PENTU1BhZ2VSdWxl
Kj4ocnVsZSk7CiAgICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdlUnVsZS0+c2VsZWN0
b3JMaXN0KCkuZmlyc3QoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChDU1NTZWxlY3Rv
ciogcyA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCk7IHM7IHMgPSBDU1NTZWxlY3Rvckxp
c3Q6Om5leHQocykpCi0gICAgICAgICAgICBhZGRSdWxlKHJ1bGUsIHMpOworICAgICAgICAgICAg
YWRkUnVsZShydWxlLCBzLCBzY29wZSk7CiAgICAgfQogfQogICAgIApAQCAtMzI2MSw3ICszMzUz
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIGNvbGxlY3RGZWF0dXJlc0Zyb21TZWxlY3RvcihDU1NT
dHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGNv
bGxlY3RGZWF0dXJlc0Zyb21MaXN0KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJl
cywgY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiYgcnVsZXMpCitzdGF0aWMgdm9pZCBjb2xsZWN0RmVh
dHVyZXNGcm9tTGlzdChDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVyZXMsIGNvbnN0
IFZlY3RvcjxSdWxlRGF0YT4mIHJ1bGVzLCBTdHlsZVNoZWV0U2NvcGUgc2NvcGUgPSAwKQogewog
ICAgIHVuc2lnbmVkIHNpemUgPSBydWxlcy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNpemU7ICsraSkgewpAQCAtMzI4MiwxMyArMzM3NCwxNSBAQCBzdGF0aWMgdm9pZCBj
b2xsZWN0RmVhdHVyZXNGcm9tTGlzdChDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVy
ZXMsIGNvbnN0CiAgICAgICAgIGlmIChmb3VuZFNpYmxpbmdTZWxlY3RvcikgewogICAgICAgICAg
ICAgaWYgKCFmZWF0dXJlcy5zaWJsaW5nUnVsZXMpCiAgICAgICAgICAgICAgICAgZmVhdHVyZXMu
c2libGluZ1J1bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOwotICAgICAgICAgICAgZmVhdHVy
ZXMuc2libGluZ1J1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVsZURhdGEuc2VsZWN0
b3IoKSk7ICAgCisgICAgICAgICAgICBmZWF0dXJlcy5zaWJsaW5nUnVsZXMtPmFkZFJ1bGUocnVs
ZURhdGEucnVsZSgpLCBydWxlRGF0YS5zZWxlY3RvcigpLCBzY29wZSk7ICAgCiAgICAgICAgIH0K
ICAgICB9CiB9CiAKIHZvaWQgUnVsZVNldDo6Y29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKIHsKKyAgICBmb3IgKFNjb3BlZFJ1bGVNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRSdWxlcy5iZWdpbigpLCBpdEVuZCA9IG1fc2Nv
cGVkUnVsZXMuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBjb2xsZWN0RmVhdHVy
ZXNGcm9tTGlzdChmZWF0dXJlcywgKml0LT5zZWNvbmQsIGl0LT5maXJzdCk7CiAgICAgQXRvbVJ1
bGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1faWRSdWxlcy5lbmQoKTsKICAgICBmb3IgKEF0
b21SdWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faWRSdWxlcy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpCiAgICAgICAgIGNvbGxlY3RGZWF0dXJlc0Zyb21MaXN0KGZlYXR1cmVzLCAqaXQt
PnNlY29uZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAzMmViNmY2
OWNmOTBmZmViMjgyYzk0Zjg0MDIwODMyYWZjMDU1ZTRjLi45MWYxYmI3ZmQzN2FjMzc3NGI1NDE4
ZWEwNzEzN2EzNzI1MjczNDMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
QEAgLTg3LDYgKzg3LDggQEAgcHVibGljOgogICAgICAgICBmcmllbmQgY2xhc3MgQ1NTU3R5bGVB
cHBseVByb3BlcnR5OwogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NTdHlsZVNlbGVj
dG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAgcHVibGljOgorICAgICAgICB0eXBl
ZGVmIGNvbnN0IEVsZW1lbnQqIFN0eWxlU2hlZXRTY29wZTsKKwogICAgICAgICBDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0cywgQ1NTU3R5bGVT
aGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0
eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKTsKQEAgLTIxNSw3
ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKTsKIAogICAgICAgICB2b2lkIG1hdGNoUnVs
ZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29u
c3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJ
bmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgU3R5bGVTaGVldFNjb3BlIHN0
eWxlU2NvcGUgPSAwKTsKICAgICAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVs
ZURhdGEmKSBjb25zdDsKICAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7CiAgICAgICAg
IApAQCAtMjM4LDkgKzI0MCwxMSBAQCBwdWJsaWM6CiAKICAgICAgICAgc3RydWN0IFBhcmVudFN0
YWNrRnJhbWUgewogICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZSgpIHt9Ci0gICAgICAgICAg
ICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSB7
fQorICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1l
bnQoZWxlbWVudCksIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWUoMCkgeyB9CiAgICAgICAgICAgICBF
bGVtZW50KiBlbGVtZW50OwogICAgICAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCA0PiBpZGVudGlm
aWVySGFzaGVzOworICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZSogY2xvc2VzdFN0eWxlU2Nv
cGVGcmFtZTsKKyAgICAgICAgICAgIAogICAgICAgICB9OwogICAgICAgICBWZWN0b3I8UGFyZW50
U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKICAgICAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTaGVldC5jcHAKaW5kZXggMmZjM2Y0OGMwM2VkODRlYjUzYTY2MzlmZjg0MWFiNjExNmMwNGIz
NS4uMjdlNTRkMTMwOWQ3MGVjNDYwZDgxOTFjMDU0ZmJlODVmYTJjMGNmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjM2LDI0ICsyMzYsMjYgQEAgdm9pZCBDU1NTdHls
ZVNoZWV0OjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKQogICAgICAgICBvd25lci0+c3RhcnRM
b2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9CiAKLURvY3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpkb2N1
bWVudCgpCitOb2RlKiBDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJOb2RlKCkgY29uc3QKIHsKLSAg
ICBTdHlsZUJhc2UqIHN0eWxlT2JqZWN0ID0gdGhpczsKLSAgICB3aGlsZSAoc3R5bGVPYmplY3Qp
IHsKKyAgICBmb3IgKGNvbnN0IFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0aGlzOyBzdHlsZU9i
amVjdDsgc3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+cGFyZW50KCkpIHsKICAgICAgICAgaWYg
KHN0eWxlT2JqZWN0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAgICAgICAgICAgTm9kZSogb3du
ZXJOb2RlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlT2JqZWN0KS0+b3duZXJO
b2RlKCk7CisgICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxjb25zdCBD
U1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUoKTsKICAgICAgICAgICAgIGlm
IChvd25lck5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyTm9kZS0+ZG9jdW1lbnQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChzdHlsZU9iamVjdC0+aXNSdWxlKCkpCi0gICAgICAgICAgICBzdHlsZU9iamVjdCA9IHN0
YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZU9iamVjdCktPnBhcmVudFN0eWxlU2hlZXQoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+cGFyZW50
KCk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKK0RvY3VtZW50KiBDU1NTdHlsZVNoZWV0
Ojpkb2N1bWVudCgpCit7CisgICAgTm9kZSogb3duZXJOb2RlID0gZmluZE93bmVyTm9kZSgpOwor
CisgICAgcmV0dXJuIG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1lbnQoKSA6IDA7Cit9CisK
Kwogdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiB7CiAgICAgU3R5bGVC
YXNlKiByb290ID0gdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCmluZGV4IDM1YTQ1
MTAyZDFlYjZiMmQ2OTJjZGIxNDE1NTNjZmM5MTFlN2I4N2MuLmU0YjVhMGJkNmU3OGMyY2NkOTgw
ZmQzYTZmOTY4YzE3MDRhMTNiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaApAQCAt
ODgsNiArODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAg
ICAgdm9pZCBzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIAorICAgIE5vZGUqIGZpbmRPd25l
ck5vZGUoKSBjb25zdDsKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKTsKIAogICAgIGNvbnN0IFN0
cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcnNldDsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9D
b250YWluZXJOb2RlLmgKaW5kZXggOWY2ZGNlNTk5ZmNiODEyZmNmMDc5ZmQ3ODAxMmZiZTlkMTRh
NWU5OS4uM2FlYThkMmQ0YTI2ODNiYmVmNWIxNmM0Zjk4OTM1NTA1MzAwN2RhZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ29udGFpbmVyTm9kZS5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IHRha2VBbGxDaGlsZHJlbkZyb20oQ29udGFpbmVyTm9kZSopOwogCiAgICAgdm9pZCBjbG9uZUNo
aWxkTm9kZXMoQ29udGFpbmVyTm9kZSogY2xvbmUpOwotICAgIAorCiAgICAgYm9vbCBkaXNwYXRj
aEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAKICAgICBzdGF0aWMg
dm9pZCBxdWV1ZVBvc3RBdHRhY2hDYWxsYmFjayhOb2RlQ2FsbGJhY2ssIE5vZGUqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcAppbmRleCBkZTI1Y2ZhMTE5MGFjZWI5YTY3YmJkY2ExOGJjNjBlZmIxZTc3
ZDI2Li4yMmQyZGExYmIwOTM3YWFmZTBmMTIyMzBkYTViZDg2NmYzYWMyNGVjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuY3BwCkBAIC0xMzQ5LDYgKzEzNDksMjMgQEAgdm9pZCBFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSog
YWYKICAgICAgICAgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKHRoaXMsIHJlbmRlclN0eWxl
KCksIGZhbHNlLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwog
fQogCit2b2lkIEVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAg
IGVuc3VyZVJhcmVEYXRhKCktPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKK30KKwor
dm9pZCBFbGVtZW50Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFT
U0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFy
ZURhdGEoKS0+dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK2Jvb2wgRWxl
bWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNS
YXJlRGF0YSgpICYmIHJhcmVEYXRhKCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisK
IHZvaWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQogewogICAgIGNsZWFySXNQYXJz
aW5nQ2hpbGRyZW5GaW5pc2hlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTE0ZTQ4YjhlMjM0
MjRiZDRmMDY1Njk3MjQwNGFlNGYyOTNiMDhkZC4uNWYyNzU2OTQxYzcxZDBlYWVmOWU1YjljY2M3
ZDJhMWUyZDUyNzcxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yMzYsNiArMjM2LDEwIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgp
IGNvbnN0OwogCisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAg
dm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBib29sIGhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7CisKICAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHls
ZShQc2V1ZG9JZCA9IE5PUFNFVURPKTsKIAogICAgIEF0b21pY1N0cmluZyBjb21wdXRlSW5oZXJp
dGVkTGFuZ3VhZ2UoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50UmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAppbmRl
eCA1YTY1ZWRiN2UxMWM3YmRhOTA1Y2FkNjZkYTY4NjY3MjI1ZDU1MTc4Li5kNTc1MDM3Y2YzYjk4
ZDQ3Yzc2YjkyN2RjZjAwN2ZiZDdiMzQ1NWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJl
RGF0YS5oCkBAIC0zOSw2ICszOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0Q29tcHV0
ZWRTdHlsZSgpOwogCisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBib29sIGhhc1Nj
b3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7CisKICAgICB1c2luZyBOb2RlUmFyZURhdGE6Om5l
ZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogICAgIHVzaW5nIE5vZGVS
YXJlRGF0YTo6c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CiAK
QEAgLTQ5LDYgKzUzLDggQEAgcHVibGljOgogICAgIE93blB0cjxEYXRhc2V0RE9NU3RyaW5nTWFw
PiBtX2RhdGFzZXRET01TdHJpbmdNYXA7CiAgICAgT3duUHRyPENsYXNzTGlzdD4gbV9jbGFzc0xp
c3Q7CiAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CisK
ICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgYm9vbCBtX2NvbnRhaW5zRnVsbFNjcmVl
bkVsZW1lbnQ7CiAjZW5kaWYKQEAgLTYyLDYgKzY4LDcgQEAgaW5saW5lIEludFNpemUgZGVmYXVs
dE1pbmltdW1TaXplRm9yUmVzaXppbmcoKQogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVu
dFJhcmVEYXRhKCkKICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11
bVNpemVGb3JSZXNpemluZygpKQogICAgICwgbV9zaGFkb3dSb290KDApCisgICAgLCBtX251bWJl
ck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4oMCkKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkp
CiAgICAgLCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoZmFsc2UpCiAjZW5kaWYKQEAgLTc4
LDUgKzg1LDIxIEBAIGlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0
eWxlKCkKICAgICBtX2NvbXB1dGVkU3R5bGUuY2xlYXIoKTsKIH0KIAoraW5saW5lIHZvaWQgRWxl
bWVudFJhcmVEYXRhOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICArK21f
bnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30KKworaW5saW5lIHZvaWQgRWxlbWVu
dFJhcmVEYXRhOjp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFTU0VS
VChtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4gPiAwKTsKKyAgICAtLW1fbnVtYmVy
T2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30KKworaW5saW5lIGJvb2wgRWxlbWVudFJhcmVE
YXRhOjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVt
YmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30KKwogfQogI2VuZGlmIC8vIEVsZW1lbnRS
YXJlRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVO
YW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4
IDE2NzllOTZhMDBhNGYzNDExYTlmZTBhYjc3ODFlYmE3NjQ3ZGIyNTIuLjQ4Zjk1MDVmNmZiNjZk
OGE1YjBiMTY4MTY3YmMzMjk0MDEzMjRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0
dHJpYnV0ZU5hbWVzLmluCkBAIC0yNjUsNiArMjY1LDcgQEAgcnVsZXMKIHNhbmRib3gKIHNjaGVt
ZQogc2NvcGUKK3Njb3BlZAogc2Nyb2xsYW1vdW50CiBzY3JvbGxkZWxheQogc2Nyb2xsaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAppbmRleCAwZjI1NmUxNWJiM2Iy
ZGZmZGQwZjdmNGRmZmRmZjM4NTRjYmY3MTU4Li5hMGMxMWZjOTNjYzdhN2Y1NjBiNjE0MGM1OWIz
OWU2OTllZmU3MjcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAK
QEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlw
dGFibGVEb2N1bWVudFBhcnNlci5oIgpAQCAtMzgsNiArMzksNyBAQCB1c2luZyBuYW1lc3BhY2Ug
SFRNTE5hbWVzOwogaW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwg
U3R5bGVFbGVtZW50KGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCisgICAgLCBtX2lzUmVnaXN0
ZXJlZFdpdGhTY29waW5nRWxlbWVudChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShz
dHlsZVRhZykpOwogfQpAQCAtNzMsNiArNzUsMzIgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50Ojpp
bnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0Rv
Y3VtZW50KCk7CiAgICAgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChkb2N1bWVu
dCgpLCB0aGlzKTsKKworICAgIGlmICghc2NvcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBp
ZiAoIXBhcmVudE9ySG9zdCB8fCAhcGFyZW50T3JIb3N0LT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIC8vIElnbm9yZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gPHN0eWxl
PiBlbGVtZW50cyB3aXRoaW4gPGhlYWQ+LgorICAgIEhUTUxIZWFkRWxlbWVudCogaGVhZCA9IGRv
Y3VtZW50KCktPmhlYWQoKTsKKyAgICBpZiAoaGVhZCAmJiBoZWFkLT5jb250YWlucyh0aGlzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgdG9FbGVtZW50KHBhcmVudE9ySG9zdCktPnJlZ2lzdGVy
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxl
bWVudCA9IHRydWU7Cit9CisKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6d2lsbFJlbW92ZSgpCit7
CisgICAgaWYgKGlzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCgpKSB7CisgICAgICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICAgICAg
QVNTRVJUKHBhcmVudE9ySG9zdCAmJiBwYXJlbnRPckhvc3QtPmlzSFRNTEVsZW1lbnQoKSk7Cisg
ICAgICAgIGlmIChwYXJlbnRPckhvc3QgJiYgcGFyZW50T3JIb3N0LT5pc0hUTUxFbGVtZW50KCkp
CisgICAgICAgICAgICB0b0hUTUxFbGVtZW50KHBhcmVudE9ySG9zdCktPnVucmVnaXN0ZXJTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpOworICAgICAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxl
bWVudCA9IGZhbHNlOworICAgIH0KIH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKQEAgLTEyMCw0ICsxNDgsOSBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnNldERpc2FibGVkKGJvb2wgc2V0RGlzYWJsZWQpCiAgICAgICAgIHN0eWxlU2hlZXQtPnNldERp
c2FibGVkKHNldERpc2FibGVkKTsKIH0KIAorYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQo
KSBjb25zdAoreworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCmluZGV4IGFmMjgwODVkYmJi
ZjQ1ZWQ3Y2RkNGJkMjRmNGRmNGZkZGZmZTRlMWYuLmFlNWE5YWUxM2EzZGY2NmM0ZDU2OGU0YmUz
ZWQzMmExYTRkMjdiNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBA
IC00MiwxMiArNDIsMTYgQEAgcHVibGljOgogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAg
ICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwogCisgICAgYm9vbCBzY29wZWQoKSBjb25zdDsKKyAg
ICBib29sIGlzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50OyB9CisKIHByaXZhdGU6CiAgICAgSFRNTFN0
eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRC
eVBhcnNlcik7CiAKICAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CiAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7
CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJl
Zm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0
YSA9IDApOwogCkBAIC02MSw2ICs2NSw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0
cmluZyYgdHlwZSgpIGNvbnN0OworCisgICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5n
RWxlbWVudDsKIH07CiAKIH0gLy9uYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96559</attachid>
            <date>2011-06-09 01:38:55 -0700</date>
            <delta_ts>2011-06-13 20:24:16 -0700</delta_ts>
            <desc>work-in-progress (scoped)</desc>
            <filename>bug-49142-20110609173854.patch</filename>
            <type>text/plain</type>
            <size>33757</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg0MzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhMzFjYzVmN2IyMTNkNDZm
Mzc2ZTUxNTg3YTQ2Y2EzYzc0OTBmOGVlLi4xOGEyY2Y4YzlkYzA0NTI0NjJkNTcwYjIyZGJlMGE1
ZjA0NDYwMDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTEtMDYtMDkgIFJvbGFu
ZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhU
TUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisKKyAgICAgICAgQXV0aGVyIHNoZWV0cyBhcmUgbm93
IHN0b3JlZCBpbiBhIG1hcCBFbGVtZW50KiAtPiBSdWxlU2V0LCB3aGVyZSB0aGUgTlVMTCBFbGVt
ZW50KgorICAgICAgICByZXByZXNlbnRzIGdsb2JhbCBydWxlcywgYW5kIG5vbi1OVUxMIEVsZW1l
bnQqIGVudHJpZXMgcmVwcmVzZW50IHJ1bGVzIGZvciA8c3R5bGUgc2NvcGVkPiBzaGVldHMuCisg
ICAgICAgIEFkZCBwbHVtYmluZyB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciA8c3R5bGUgc2Nv
cGVkPiBlbGVtZW50cyBmcm9tIHRoZWlyIHBhcmVudHMuCisgICAgICAgIEV4dGVuZCBydWxlIG1h
dGNoaW5nIGZvciBzY29wZWQgc3R5bGUgcnVsZXMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiAo
T09QUyEpCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6Z2xvYmFsUnVsZVNldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY29wZWRSdWxlU2V0czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZVNjb3Bl
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3Ip
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0YWNrRnJh
bWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hTY29wZWRSdWxl
cyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6CisgICAgICAg
IChXZWJDb3JlOjptYXRjaGVzSW5UcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxl
U2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
UnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6
YWRkU3R5bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpTY29wZWRS
dWxlU2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVT
ZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpzaHJpbmtUb0ZpdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6ZW5zdXJlRXhpc3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAqIGNz
cy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
OjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJlbnRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kT3du
ZXJOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAgICAgICAqIGRvbS9Db250YWluZXJOb2Rl
Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAqIGRvbS9FbGVtZW50
Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudFJhcmVEYXRhOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQpOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1l
bnQ6Omluc2VydGVkSW50b0RvY3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVs
ZW1lbnQ6OndpbGxSZW1vdmUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
c2NvcGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmlzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCk6
CisKIDIwMTEtMDYtMDggIEx1a2UgTWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNlaWRlbC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCA3OGVjYjlmMGZlNmRlYjFkOGZiYTdlOTdlNDM0YjBm
MzRlZDZhODJjLi42YjU0ZWZjNjZhOThiN2Q0N2JlZjA1ZWZhYTMyZjc4MjdmZWJmYmQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC02Myw4ICs2MywxMCBAQAog
I2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5j
bHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUZXh0QXJlYUVs
ZW1lbnQuaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5o
IgpAQCAtMjg2LDYgKzI4OCw4IEBAIGlmIChpZCA9PSBwcm9wSUQpIHsgXAogICAgIHJldHVybjsg
XAogfQogCit0eXBlZGVmIENTU1N0eWxlU2VsZWN0b3I6OlN0eWxlU2hlZXRTY29wZSBTdHlsZVNo
ZWV0U2NvcGU7CisKIGNsYXNzIFJ1bGVEYXRhIHsKIHB1YmxpYzoKICAgICBSdWxlRGF0YShDU1NT
dHlsZVJ1bGUqLCBDU1NTZWxlY3RvciosIHVuc2lnbmVkIHBvc2l0aW9uKTsKQEAgLTMyMywxNCAr
MzI3LDE0IEBAIGNsYXNzIFJ1bGVTZXQgewogcHVibGljOgogICAgIFJ1bGVTZXQoKTsKICAgICB+
UnVsZVNldCgpOwotICAgIAorCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBWZWN0b3I8UnVsZURhdGE+Kj4gQXRvbVJ1bGVNYXA7Ci0gICAgCi0gICAgdm9pZCBhZGRSdWxl
c0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENT
U1N0eWxlU2VsZWN0b3IqID0gMCk7CiAKLSAgICB2b2lkIGFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1
bGUqIGl0ZW0pOwotICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWwpOwotICAgIHZvaWQgYWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NT
ZWxlY3Rvciogc2VsKTsKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQq
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwLCBTdHls
ZVNoZWV0U2NvcGUgPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSos
IFN0eWxlU2hlZXRTY29wZSk7CisgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSosIENTU1Nl
bGVjdG9yKik7CisgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3Rv
ciopOwogICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1
bGVNYXAmIG1hcCwKICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENT
U1NlbGVjdG9yKiBzZWwpOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKQEAgLTM1Niw2ICszNjAs
MjcgQEAgcHVibGljOgogICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwogfTsKIAor
Y2xhc3MgU2NvcGVkUnVsZVNldHMgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZFJ1
bGVTZXRzKTsKK3B1YmxpYzoKKyAgICBTY29wZWRSdWxlU2V0cygpOworICAgIH5TY29wZWRSdWxl
U2V0cygpOworCisgICAgUnVsZVNldCogZ2xvYmFsUnVsZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
Z2xvYmFsUnVsZVNldDsgfQorICAgIFJ1bGVTZXQqIGdldChTdHlsZVNoZWV0U2NvcGUgc2NvcGUp
IHsgcmV0dXJuIG1fc2NvcGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOyB9CisgICAgUnVsZVNldCog
ZW5zdXJlRXhpc3RzKFN0eWxlU2hlZXRTY29wZSk7CisKKyAgICB2b2lkIHNocmlua1RvRml0KCk7
CisKKyAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHlsZVNoZWV0U2NvcGUs
IFJ1bGVTZXQqPiBTY29wZWRSdWxlU2V0TWFwOworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX3Nj
b3BlZFJ1bGVTZXRNYXA7CisgICAgUnVsZVNldCogY29uc3QgbV9nbG9iYWxSdWxlU2V0OyAvLyBQ
b2ludHMgdG8ga2V5ICcwJyB3aXRoaW4gbV9zY29wZWRSdWxlU2V0TWFwLgorfTsKKwogc3RhdGlj
IFJ1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5
bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CkBAIC00MjcsNiArNDUyLDM5
IEBAIHN0YXRpYyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcmlnaHRUb0xlZnREZWNsYXJh
dGlvbigpCiAgICAgcmV0dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorLy8gRGV0ZXJt
aW5lIHRoZSBzY29wZSBvZiBhIHN0eWxlIHNoZWV0IChpZiBhbnkpLiBSZXR1cm5zICdmYWxzZScg
aWYgaXQncyBhIHNjb3BlZCBzdHlsZSBzaGVldCBpbiBhbiBpbnZhbGlkIGxvY2F0aW9uLgorc3Rh
dGljIGJvb2wgZGV0ZXJtaW5lU2NvcGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIFN0eWxlU2hlZXRT
Y29wZSYgc2NvcGUpCit7CisgICAgc2NvcGUgPSAwOworCisgICAgaWYgKCFzaGVldCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPmZpbmRPd25l
ck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50
KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBz
dGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxl
RWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgRG9jdW1lbnQq
IGRvY3VtZW50ID0gc3R5bGVFbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIElnbm9yZSAnc2NvcGVkJyBhdHRyaWJ1
dGUgZm9yIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnRzIHdpdGhpbiA8aGVhZD4uCisgICAgSFRNTEhl
YWRFbGVtZW50KiBoZWFkID0gZG9jdW1lbnQtPmhlYWQoKTsKKyAgICBpZiAoaGVhZCAmJiBoZWFk
LT5jb250YWlucyhzdHlsZUVsZW1lbnQpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENv
bnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9IHN0eWxlRWxlbWVudC0+cGFyZW50T3JIb3N0Tm9k
ZSgpOworICAgIGlmICghcGFyZW50T3JIb3N0IHx8ICFwYXJlbnRPckhvc3QtPmlzRWxlbWVudE5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc2NvcGUgPSB0b0VsZW1lbnQocGFy
ZW50T3JIb3N0KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NT
U3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNo
ZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBW
ZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBt
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCkBAIC00NjgsOSArNTI2LDcgQEAgQ1NTU3R5bGVTZWxl
Y3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0
KiBzdHlsZVNoZWUKICAgICBpZiAobV9yb290RGVmYXVsdFN0eWxlICYmIHZpZXcpCiAgICAgICAg
IG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlFdmFsdWF0b3Iodmlldy0+bWVkaWFU
eXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSkpOwogCi0gICAg
bV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAvLyBBZGRpbmcgcnVs
ZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIG1fYXV0aG9y
U3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxl
cyA9IGFkb3B0UHRyKG5ldyBTY29wZWRSdWxlU2V0cyk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBz
dWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKICAgICBPd25QdHI8
UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKQEAgLTQ4Miw3
ICs1MzgsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBk
b2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICAgICAgaWYgKHBhZ2VH
cm91cFVzZXJTaGVldHMtPmF0KGkpLT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICAg
ICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+
YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNo
ZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9z
Y29wZWRBdXRob3JTdHlsZXMtPmdsb2JhbFJ1bGVTZXQoKS0+YWRkUnVsZXNGcm9tU2hlZXQocGFn
ZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAg
IH0KICAgICB9CiAKQEAgLTQ5MCwxNSArNTQ2LDIzIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVl
CiAgICAgICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAv
LyBBZGQgcnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYg
KG1hcHBlZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9t
U2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGlmIChtYXBw
ZWRFbGVtZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBzY29wZXMg
Y2FuL3Nob3VsZCBiZSBhZGRlZCBoZXJlLgorICAgICAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+
Z2xvYmFsUnVsZVNldCgpLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50U2hlZXQsICpt
X21lZGl1bSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9j
dW1lbnQKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFN0eWxlU2hl
ZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXND
U1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgpKQotICAgICAgICAgICAgbV9hdXRo
b3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNo
ZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hl
ZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsKKyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQq
IGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KTsKKyAgICAgICAg
ICAgIFN0eWxlU2hlZXRTY29wZSBzY29wZSA9IDA7CisKKyAgICAgICAgICAgIGlmICghZGV0ZXJt
aW5lU2NvcGUoY3NzU2hlZXQsIHNjb3BlKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5hZGRS
dWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAg
IH0KICAgICB9ICAgIAogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2li
bGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUg
Y3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMg
aW5mb3JtYXRpb24gdG8gcmVqZWN0CkBAIC01MDYsMTEgKzU3MCwxMSBAQCBDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3Qq
IHN0eWxlU2hlZQogICAgIC8vIFVzdWFsbHkgdGhlcmUgYXJlIG5vIHNpYmxpbmcgcnVsZXMgaW4g
dGhlIGRlZmF1bHQgc3R5bGUgYnV0IHRoZSBNYXRoTUwgc2hlZXQgaGFzIHNvbWUuCiAgICAgaWYg
KHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKQogICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1
bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIG1fYXV0aG9yU3R5bGUt
PmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+
Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAg
ICAgbV91c2VyU3R5bGUtPmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKIAotICAgIG1fYXV0
aG9yU3R5bGUtPnNocmlua1RvRml0KCk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPnNocmlu
a1RvRml0KCk7CiAgICAgaWYgKG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKQogICAgICAgICBtX2Zl
YXR1cmVzLnNpYmxpbmdSdWxlcy0+c2hyaW5rVG9GaXQoKTsKIApAQCAtNjMzLDYgKzY5NywxMSBA
QCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBh
cmVudCkKICAgICBzaXplX3QgY291bnQgPSBwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzLnNp
emUoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIG1f
YW5jZXN0b3JJZGVudGlmaWVyRmlsdGVyLT5hZGQocGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hl
c1tpXSk7CisgICAgLy8gUG9pbnQgdG8gZnJhbWUgY29udGFpbmluZyB0aGUgY2xvc2VzdCBzdHls
ZSBzY29wZSAob3IgbGVhdmUgYXQgMCBpZiBub25lKS4KKyAgICBpZiAocGFyZW50LT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29w
ZUZyYW1lID0gJnBhcmVudEZyYW1lOworICAgIGVsc2UgaWYgKG1fcGFyZW50U3RhY2suc2l6ZSgp
ID49IDIpCisgICAgICAgIHBhcmVudEZyYW1lLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWUgPSBtX3Bh
cmVudFN0YWNrW21fcGFyZW50U3RhY2suc2l6ZSgpIC0gMl0uY2xvc2VzdFN0eWxlU2NvcGVGcmFt
ZTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpwb3BQYXJlbnRTdGFja0ZyYW1lKCkKQEAg
LTY5MywxMyArNzYyLDU2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xh
cmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIG1fbWF0Y2hlZERl
Y2xzLmFwcGVuZChkZWNsKTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFNjb3Bl
ZFJ1bGVzKFNjb3BlZFJ1bGVTZXRzKiBzY29wZWRSdWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICBpZiAoIXNjb3BlZFJ1bGVzIHx8ICFtX2VsZW1lbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIE1hdGNoIGdsb2JhbCBydWxlcy4KKyAgICBtYXRj
aFJ1bGVTZXQoc2NvcGVkUnVsZXMtPmdsb2JhbFJ1bGVTZXQoKSwgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAvLyBNYXRjaCBzY29wZWQgc3R5
bGUgc2hlZXQncyBydWxlcy4KKyAgICBpZiAoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYmIG1f
cGFyZW50U3RhY2subGFzdCgpLmVsZW1lbnQgPT0gbV9wYXJlbnROb2RlKSB7CisgICAgICAgIC8v
IEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5jbG9zaW5nIHNjb3BlcyBkaXJlY3RseSBmcm9tIHBhcmVu
dCBzdGFjay4KKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZSogc2NvcGVGcmFtZSA9IG1fcGFyZW50
U3RhY2subGFzdCgpLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CisgICAgICAgIHdoaWxlIChzY29w
ZUZyYW1lKSB7CisgICAgICAgICAgICBTdHlsZVNoZWV0U2NvcGUgc2NvcGUgPSBzY29wZUZyYW1l
LT5lbGVtZW50OworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHNjb3BlZFJ1bGVzLT5n
ZXQoc2NvcGUpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0
Y2hSdWxlU2V0KHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgICAgICBpZiAoc2NvcGVGcmFtZSA9PSAmbV9wYXJlbnRTdGFj
ay5maXJzdCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLS1zY29wZUZy
YW1lOworICAgICAgICAgICAgc2NvcGVGcmFtZSA9IHNjb3BlRnJhbWUtPmNsb3Nlc3RTdHlsZVNj
b3BlRnJhbWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTbG93IGJyYW5j
aDogY2xpbWIgdHJlZSwgY2hlY2sgZm9yIHN0eWxlIHNjb3BlcyBhdCBldmVyeSBlbGVtZW50Lgor
ICAgICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBu
b2RlLT5wYXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1l
bnROb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBlbGVtZW50ID0gdG9F
bGVtZW50KG5vZGUpOworICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKSB7CisgICAgICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IHNjb3Bl
ZFJ1bGVzLT5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAg
ICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJzdFJ1bGVJbmRleCwgbGFz
dFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RS
dWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMu
Y2xlYXIoKTsKIAogICAgIGlmICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJu
OworCisgICAgbWF0Y2hSdWxlU2V0KHJ1bGVzLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgaW5jbHVkZUVtcHR5UnVsZXMpOworfQogICAgIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFJ1bGVTZXQoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKICAgICAvLyBXZSBuZWVkIHRv
IGNvbGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxz
ZSBpbnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlm
IChtX2VsZW1lbnQtPmhhc0lEKCkpCkBAIC03MTgsNyArODMwLDYgQEAgdm9pZCBDU1NTdHlsZVNl
bGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBp
bnQmIGxhc3QKICAgICB9CiAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVz
KG1fZWxlbWVudC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+
Z2V0VW5pdmVyc2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1
ZGVFbXB0eVJ1bGVzKTsKLSAgICAKICAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVz
LCB3ZSdyZSBkb25lLgogICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTc3OSwxMiArODkwLDE1IEBAIGlubGluZSBib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6
Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLWlubGluZSBzdGF0aWMgYm9vbCBtYXRjaGVz
SW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGJvb2wgcnVsZVJlYWNoZXNJbnRvU2hh
ZG93RE9NKQoraW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29wZShUcmVlU2NvcGUq
IHRyZWVTY29wZSwgU3R5bGVTaGVldFNjb3BlIHN0eWxlU2NvcGUsIGJvb2wgcnVsZVJlYWNoZXNJ
bnRvU2hhZG93RE9NKQogewotICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRj
aGluZ1VBUnVsZXMoKSB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU2hlZXRzKCkgfHwgcnVsZVJl
YWNoZXNJbnRvU2hhZG93RE9NOworICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNN
YXRjaGluZ1VBUnVsZXMoKQorICAgICAgICB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU2hlZXRz
KCkKKyAgICAgICAgfHwgKHN0eWxlU2NvcGUgJiYgc3R5bGVTY29wZS0+dHJlZVNjb3BlKCkgPT0g
dHJlZVNjb3BlKQorICAgICAgICB8fCBydWxlUmVhY2hlc0ludG9TaGFkb3dET007CiB9CiAKLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVE
YXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcywgU3R5bGVTaGVldFNj
b3BlIHN0eWxlU2NvcGUpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJuOwpAQCAt
Nzk4LDcgKzkxMiw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyCiAgICAgICAgIGlmIChjYW5V
c2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxlY3RvcihydWxlRGF0YSkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEpKSB7Ci0gICAg
ICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBt
X2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpKQorICAgICAgICAgICAgaWYgKCFt
YXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwgc3R5bGVTY29wZSwgbV9j
aGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFw
cGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBD
U1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CkBAIC0xNDQ1LDcgKzE1NTksNyBA
QCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1l
bnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bAogICAgIAogICAgICAgICAvLyA2LiBDaGVjayB0aGUg
cnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCks
IGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1h
dGNoU2NvcGVkUnVsZXMobV9zY29wZWRBdXRob3JTdHlsZXMuZ2V0KCksIGZpcnN0QXV0aG9yUnVs
ZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKIAogICAgICAgICAvLyA3LiBOb3cgY2hlY2sgb3Vy
IGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNl
clN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKQEAgLTE2NjUsNyArMTc3OSw3IEBAIFBhc3NS
ZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVu
dChQc2V1ZG9JZCBwc2V1ZG8sCiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMp
IHsKICAgICAgICAgbWF0Y2hSdWxlcyhtX3VzZXJTdHlsZS5nZXQoKSwgZmlyc3RVc2VyUnVsZSwg
bGFzdFVzZXJSdWxlLCBmYWxzZSk7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5n
ZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICBt
YXRjaFNjb3BlZFJ1bGVzKG1fc2NvcGVkQXV0aG9yU3R5bGVzLmdldCgpLCBmaXJzdEF1dGhvclJ1
bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hlZERl
Y2xzLmlzRW1wdHkoKSAmJiAhdmlzaXRlZFN0eWxlKQpAQCAtMTczNCw3ICsxODQ4LDggQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBw
YWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwog
ICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBh
Z2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmly
c3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVm
dCwgaXNGaXJzdCwgcGFnZSk7CisgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVT
ZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0Y2hQYWdl
UnVsZXMobV9zY29wZWRBdXRob3JTdHlsZXMtPmdsb2JhbFJ1bGVTZXQoKSwgaXNMZWZ0LCBpc0Zp
cnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlEZWNsYXJh
dGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogCkBAIC0y
MDI2LDcgKzIxNDEsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9y
Ojpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogCiAgICAgICAgIC8vIENo
ZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBpbnQgZmlyc3RBdXRob3JS
dWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRo
b3JTdHlsZS5nZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0lu
Y2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hTY29wZWRSdWxlcyhtX3Njb3Bl
ZEF1dGhvclN0eWxlcy5nZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVs
ZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAgICBtX2NoZWNrZXIubV9zYW1l
T3JpZ2luT25seSA9IGZhbHNlOwogICAgIH0KQEAgLTMxNjEsNyArMzI3Niw3IEBAIHZvaWQgUnVs
ZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQog
ICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWwsIG1fcGFnZVJ1bGVzLnNp
emUoKSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hl
ZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2Vs
ZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENT
U1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENT
U1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIFN0eWxlU2hlZXRTY29wZSBzY29wZSkKIHsK
ICAgICBpZiAoIXNoZWV0KQogICAgICAgICByZXR1cm47CkBAIC0zMTc2LDExICszMjkxLDExIEBA
IHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkr
KykgewogICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzaGVldC0+aXRlbShpKTsKICAgICAgICAg
aWYgKGl0ZW0tPmlzU3R5bGVSdWxlKCkpCi0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSkpOworICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0
YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pLCBzY29wZSk7CiAgICAgICAgIGVsc2UgaWYg
KGl0ZW0tPmlzSW1wb3J0UnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBv
cnQgPSBzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaXRlbSk7CiAgICAgICAgICAgICBpZiAo
IWltcG9ydC0+bWVkaWEoKSB8fCBtZWRpdW0uZXZhbChpbXBvcnQtPm1lZGlhKCksIHN0eWxlU2Vs
ZWN0b3IpKQotICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVT
aGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IpOworICAgICAgICAgICAgICAgIGFkZFJ1bGVz
RnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNj
b3BlKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChpdGVtLT5pc01lZGlhUnVsZSgpKSB7
CiAgICAgICAgICAgICBDU1NNZWRpYVJ1bGUqIHIgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUq
PihpdGVtKTsKQEAgLTMxOTIsNyArMzMwNyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAg
ICAgICAgICAgICAgICAgICAgIENTU1J1bGUgKmNoaWxkSXRlbSA9IHJ1bGVzLT5pdGVtKGopOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJdGVtLT5pc1N0eWxlUnVsZSgpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIFN0eWxlUnVsZSwgc28gYXBwZW5kIGl0IHRv
IG91ciBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRJdGVtKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBh
ZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRJdGVtKSwgc2NvcGUp
OwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNGb250RmFjZVJ1
bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQg
dGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VS
dWxlKj4oY2hpbGRJdGVtKTsKQEAgLTMyMTQsMTEgKzMzMjksMTQgQEAgdm9pZCBSdWxlU2V0Ojph
ZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2
YWx1YXRvciYKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRT
dHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUo
Q1NTU3R5bGVSdWxlKiBydWxlLCBTdHlsZVNoZWV0U2NvcGUgc2NvcGUpCiB7CiAgICAgaWYgKHJ1
bGUtPmlzUGFnZVJ1bGUoKSkgewotICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUgPSBzdGF0
aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOwotICAgICAgICBhZGRQYWdlUnVsZShwYWdlUnVs
ZSwgcGFnZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAgICAgICAvLyBJZ25vcmUg
QHBhZ2UgcnVsZXMgaWYgdGhlIHN0eWxlIHNoZWV0IGlzIHNjb3BlZAorICAgICAgICBpZiAoIXNj
b3BlKSB7CisgICAgICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUgPSBzdGF0aWNfY2FzdDxD
U1NQYWdlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgYWRkUGFnZVJ1bGUocGFnZVJ1bGUsIHBh
Z2VSdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rvckxpc3QoKS5maXJz
dCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQogICAgICAgICAgICAgYWRkUnVs
ZShydWxlLCBzKTsKQEAgLTMzMjEsNiArMzQzOSw0MSBAQCB2b2lkIFJ1bGVTZXQ6OnNocmlua1Rv
Rml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitTY29wZWRSdWxlU2V0
czo6U2NvcGVkUnVsZVNldHMoKQorICAgIDogbV9zY29wZWRSdWxlU2V0TWFwKCkKKyAgICAsIG1f
Z2xvYmFsUnVsZVNldChuZXcgUnVsZVNldCkKK3sKKyAgICBtX3Njb3BlZFJ1bGVTZXRNYXAuc2V0
KDAsIG1fZ2xvYmFsUnVsZVNldCk7CisgICAgLy8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUg
c2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVuZC4KKyAgICBtX2dsb2JhbFJ1bGVTZXQtPmRpc2FibGVB
dXRvU2hyaW5rVG9GaXQoKTsKK30KKworU2NvcGVkUnVsZVNldHM6On5TY29wZWRSdWxlU2V0cygp
Cit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1hcCk7Cit9CisKK3ZvaWQg
U2NvcGVkUnVsZVNldHM6OnNocmlua1RvRml0KCkKK3sKKyAgICBtX2dsb2JhbFJ1bGVTZXQtPnNo
cmlua1RvRml0KCk7Cit9CisKK1J1bGVTZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMo
U3R5bGVTaGVldFNjb3BlIHNjb3BlKQoreworICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3Bl
ZFJ1bGVTZXRNYXAuZ2V0KHNjb3BlKTsKKyAgICBpZiAoIXJ1bGVTZXQpIHsKKyAgICAgICAgcnVs
ZVNldCA9IG5ldyBSdWxlU2V0OworICAgICAgICBtX3Njb3BlZFJ1bGVTZXRNYXAuc2V0KHNjb3Bl
LCBydWxlU2V0KTsKKyAgICB9CisgICAgcmV0dXJuIHJ1bGVTZXQ7Cit9CisKK3ZvaWQgU2NvcGVk
UnVsZVNldHM6OmNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVh
dHVyZXMpIGNvbnN0Cit7CisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fc2NvcGVkUnVsZVNldE1hcC5iZWdpbigpLCBpdEVuZCA9IG1fc2NvcGVkUnVsZVNl
dE1hcC5lbmQoKTsgaXQgIT0gaXRFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmNvbGxl
Y3RGZWF0dXJlcyhmZWF0dXJlcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIC8vIHRoaXMgaXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0
YWluIHJ1bGUgdG8gdGhlIHJlbmRlcnN0eWxlLi4uCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oCmluZGV4IDMyZWI2ZjY5Y2Y5MGZmZWIyODJjOTRmODQwMjA4MzJhZmMwNTVlNGMu
LmJiMjU0ZTM5NWE3YmU0NWViZjU3NjQ3ZGM4MTczNjk0ZGI1YWIzODggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNjEsNiArNjEsNyBAQCBjbGFzcyBNZWRpYVF1ZXJ5
RXZhbHVhdG9yOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJ1bGVEYXRhOwogY2xhc3MgUnVsZVNldDsK
K2NsYXNzIFNjb3BlZFJ1bGVTZXRzOwogY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBTdHlsZUltYWdl
OwogY2xhc3MgU3R5bGVTaGVldDsKQEAgLTg3LDYgKzg4LDggQEAgcHVibGljOgogICAgICAgICBm
cmllbmQgY2xhc3MgQ1NTU3R5bGVBcHBseVByb3BlcnR5OwogICAgICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDU1NTdHlsZVNlbGVjdG9yKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
cHVibGljOgorICAgICAgICB0eXBlZGVmIGNvbnN0IEVsZW1lbnQqIFN0eWxlU2hlZXRTY29wZTsK
KwogICAgICAgICBDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1
dGhvclNoZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywKICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKTsKQEAgLTIxNCw4ICsyMTcsMTMgQEAgcHVibGljOgogICAgICAgICB2b2lkIGFk
ZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVu
ZChydWxlKTsgfQogICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7CiAKKyAgICAgICAgLy8gbWF0Y2hTY29wZWRSdWxlczog
aW5pdGlhbGl6YXRpb24sIHRoZW4gY2FsbHMgbWF0Y2hSdWxlU2V0IGZvciBldmVyeSBzY29wZSB0
aGF0IGlzIGFuIGFuY2VzdG9yIG9mIG1fZWxlbWVudC4KKyAgICAgICAgdm9pZCBtYXRjaFNjb3Bl
ZFJ1bGVzKFNjb3BlZFJ1bGVTZXRzKiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVs
ZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgLy8gbWF0Y2hSdWxlczog
cGVyZm9ybXMgaW5pdGlhbGl6YXRpb24sIHRoZW4gY2FsbHMgbWF0Y2hSdWxlU2V0LgogICAgICAg
ICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgICAgIHZvaWQgbWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIC8v
IG1hdGNoUnVsZVNldDogSW1wbGVtZW50YXRpb24gZm9yIGEgc2luZ2xlIFJ1bGVTZXQuCisgICAg
ICAgIHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQm
IGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB2b2lkIG1h
dGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIFN0eWxlU2hl
ZXRTY29wZSBzdHlsZVNjb3BlID0gMCk7CiAgICAgICAgIGJvb2wgZmFzdFJlamVjdFNlbGVjdG9y
KGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7CiAgICAgICAgIHZvaWQgc29ydE1hdGNoZWRSdWxlcygp
OwogICAgICAgICAKQEAgLTIzMCwxNyArMjM4LDE4IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBp
c1JpZ2h0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdCB7IHJldHVybiAhaXNMZWZ0UGFnZShwYWdl
SW5kZXgpOyB9CiAgICAgICAgIGJvb2wgaXNGaXJzdFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3Q7
CiAgICAgICAgIFN0cmluZyBwYWdlTmFtZShpbnQgcGFnZUluZGV4KSBjb25zdDsKLSAgICAgICAg
Ci0gICAgICAgIE93blB0cjxSdWxlU2V0PiBtX2F1dGhvclN0eWxlOworCisgICAgICAgIE93blB0
cjxTY29wZWRSdWxlU2V0cz4gbV9zY29wZWRBdXRob3JTdHlsZXM7CiAgICAgICAgIE93blB0cjxS
dWxlU2V0PiBtX3VzZXJTdHlsZTsKIAogICAgICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwogCiAg
ICAgICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKICAgICAgICAgICAgIFBhcmVudFN0YWNr
RnJhbWUoKSB7fQotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50
KSA6IGVsZW1lbnQoZWxlbWVudCkge30KKyAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxl
bWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpLCBjbG9zZXN0U3R5bGVTY29wZUZyYW1l
KDApIHsgfQogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKICAgICAgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKKyAgICAgICAgICAgIFBhcmVudFN0YWNr
RnJhbWUqIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiAgICAgICAgIH07CiAgICAgICAgIFZlY3Rv
cjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwogICAgICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCAyZmMzZjQ4YzAzZWQ4NGViNTNhNjYzOWZmODQxYWI2
MTE2YzA0YjM1Li4yN2U1NGQxMzA5ZDcwZWM0NjBkODE5MWMwNTRmYmU4NWZhMmMwY2Y3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0yMzYsMjQgKzIzNiwyNiBAQCB2b2lk
IENTU1N0eWxlU2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpCiAgICAgICAgIG93bmVy
LT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAotRG9jdW1lbnQqIENTU1N0eWxlU2hl
ZXQ6OmRvY3VtZW50KCkKK05vZGUqIENTU1N0eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUoKSBjb25z
dAogewotICAgIFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0aGlzOwotICAgIHdoaWxlIChzdHls
ZU9iamVjdCkgeworICAgIGZvciAoY29uc3QgU3R5bGVCYXNlKiBzdHlsZU9iamVjdCA9IHRoaXM7
IHN0eWxlT2JqZWN0OyBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQoKSkgewogICAg
ICAgICBpZiAoc3R5bGVPYmplY3QtPmlzQ1NTU3R5bGVTaGVldCgpKSB7Ci0gICAgICAgICAgICBO
b2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3Qp
LT5vd25lck5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0YXRpY19jYXN0
PGNvbnN0IENTU1N0eWxlU2hlZXQqPihzdHlsZU9iamVjdCktPm93bmVyTm9kZSgpOwogICAgICAg
ICAgICAgaWYgKG93bmVyTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlLT5k
b2N1bWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBvd25lck5vZGU7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5pc1J1bGUoKSkKLSAgICAgICAgICAgIHN0eWxlT2Jq
ZWN0ID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlT2JqZWN0KS0+cGFyZW50U3R5bGVTaGVl
dCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0
LT5wYXJlbnQoKTsKICAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAorRG9jdW1lbnQqIENTU1N0
eWxlU2hlZXQ6OmRvY3VtZW50KCkKK3sKKyAgICBOb2RlKiBvd25lck5vZGUgPSBmaW5kT3duZXJO
b2RlKCk7CisKKyAgICByZXR1cm4gb3duZXJOb2RlID8gb3duZXJOb2RlLT5kb2N1bWVudCgpIDog
MDsKK30KKworCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKIHsKICAg
ICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKaW5k
ZXggMzVhNDUxMDJkMWViNmIyZDY5MmNkYjE0MTU1M2NmYzkxMWU3Yjg3Yy4uZTRiNWEwYmQ2ZTc4
YzJjY2Q5ODBmZDNhNmY5NjhjMTcwNGExM2I4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5oCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2Fk
ZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwogCisgICAgTm9kZSog
ZmluZE93bmVyTm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50KiBkb2N1bWVudCgpOwogCiAgICAg
Y29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL0NvbnRhaW5lck5vZGUuaAppbmRleCA5ZjZkY2U1OTlmY2I4MTJmY2YwNzlmZDc4MDEy
ZmJlOWQxNGE1ZTk5Li4zYWVhOGQyZDRhMjY4M2JiZWY1YjE2YzRmOTg5MzU1MDUzMDA3ZGFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGljOgog
ICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2RlKik7CiAKICAgICB2b2lk
IGNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlKiBjbG9uZSk7Ci0gICAgCisKICAgICBib29s
IGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAogICAg
IHN0YXRpYyB2b2lkIHF1ZXVlUG9zdEF0dGFjaENhbGxiYWNrKE5vZGVDYWxsYmFjaywgTm9kZSop
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGFjYmEwM2MwMGVhNzI5NTJhYWJmY2Y0NzhjYmQ4
NWVjMTk5YjJmM2YuLjcyNDg2YTdlMWViMmM2MmMzNWYzN2MxNGJhMGUxMjgxZTA0NTM4ODYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEzNDYsNiArMTM0NiwyMyBAQCB2b2lkIEVsZW1lbnQ6
OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwgTm9kZSogYmVmb3JlQ2hhbmdl
LCBOb2RlKiBhZgogICAgICAgICBjaGVja0ZvclNpYmxpbmdTdHlsZUNoYW5nZXModGhpcywgcmVu
ZGVyU3R5bGUoKSwgZmFsc2UsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJDaGFuZ2UsIGNoaWxkQ291bnRE
ZWx0YSk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
Cit7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
OworfQorCit2b2lkIEVsZW1lbnQ6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7
CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAgIGlmIChoYXNSYXJlRGF0YSgpKQorICAg
ICAgICByYXJlRGF0YSgpLT51bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKK30KKwor
Ym9vbCBFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KTsKK30KKwogdm9pZCBFbGVtZW50OjpiZWdpblBhcnNpbmdDaGlsZHJlbigpCiB7CiAgICAgY2xl
YXJJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRleCBlMTRl
NDhiOGUyMzQyNGJkNGYwNjU2OTcyNDA0YWU0ZjI5M2IwOGRkLi41ZjI3NTY5NDFjNzFkMGVhZWY5
ZTViOWNjYzdkMmExZTJkNTI3NzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTIzNiw2ICsyMzYs
MTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1Bz
ZXVkb0lkKCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGJvb2wg
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdDsKKwogICAgIFJlbmRlclN0eWxlKiBjb21w
dXRlZFN0eWxlKFBzZXVkb0lkID0gTk9QU0VVRE8pOwogCiAgICAgQXRvbWljU3RyaW5nIGNvbXB1
dGVJbmhlcml0ZWRMYW5ndWFnZSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0VsZW1lbnRSYXJlRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0
YS5oCmluZGV4IDVhNjVlZGI3ZTExYzdiZGE5MDVjYWQ2NmRhNjg2NjcyMjVkNTUxNzguLmQ1NzUw
MzdjZjNiOThkNDdjNzZiOTI3ZGNmMDA3ZmJkN2IzNDU1YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudFJhcmVEYXRhLmgKQEAgLTM5LDYgKzM5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVz
ZXRDb21wdXRlZFN0eWxlKCk7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hp
bGQoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGJv
b2wgaGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdDsKKwogICAgIHVzaW5nIE5vZGVSYXJl
RGF0YTo6bmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CiAgICAgdXNp
bmcgTm9kZVJhcmVEYXRhOjpzZXROZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0
dGFjaDsKIApAQCAtNDksNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgT3duUHRyPERhdGFzZXRET01T
dHJpbmdNYXA+IG1fZGF0YXNldERPTVN0cmluZ01hcDsKICAgICBPd25QdHI8Q2xhc3NMaXN0PiBt
X2NsYXNzTGlzdDsKIAorICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGls
ZHJlbjsKKwogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICBib29sIG1fY29udGFpbnNG
dWxsU2NyZWVuRWxlbWVudDsKICNlbmRpZgpAQCAtNjIsNiArNjgsNyBAQCBpbmxpbmUgSW50U2l6
ZSBkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygpCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRh
OjpFbGVtZW50UmFyZURhdGEoKQogICAgIDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1
bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkpCiAgICAgLCBtX3NoYWRvd1Jvb3QoMCkKKyAgICAs
IG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbigwKQogI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKICAgICAsIG1fY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKICNlbmRp
ZgpAQCAtNzgsNSArODUsMjEgQEAgaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNldENv
bXB1dGVkU3R5bGUoKQogICAgIG1fY29tcHV0ZWRTdHlsZS5jbGVhcigpOwogfQogCitpbmxpbmUg
dm9pZCBFbGVtZW50UmFyZURhdGE6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQorewor
ICAgICsrbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCitpbmxpbmUgdm9p
ZCBFbGVtZW50UmFyZURhdGE6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7Cisg
ICAgQVNTRVJUKG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbiA+IDApOworICAgIC0t
bV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCitpbmxpbmUgYm9vbCBFbGVt
ZW50UmFyZURhdGE6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCiB9CiAjZW5kaWYgLy8g
RWxlbWVudFJhcmVEYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0
dHJpYnV0ZU5hbWVzLmluIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMu
aW4KaW5kZXggMTY3OWU5NmEwMGE0ZjM0MTFhOWZlMGFiNzc4MWViYTc2NDdkYjI1Mi4uNDhmOTUw
NWY2ZmI2NmQ4YTViMGIxNjgxNjdiYzMyOTQwMTMyNGZhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KQEAgLTI2NSw2ICsyNjUsNyBAQCBydWxlcwogc2FuZGJv
eAogc2NoZW1lCiBzY29wZQorc2NvcGVkCiBzY3JvbGxhbW91bnQKIHNjcm9sbGRlbGF5CiBzY3Jv
bGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDBmMjU2
ZTE1YmIzYjJkZmZkZDBmN2Y0ZGZmZGZmMzg1NGNiZjcxNTguLjc5NjU4OTE0NWJjNjE2MjkxNjVj
N2ViYjNmM2M4Yjg0MjM3Y2FlMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFN0eWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVt
ZW50LmNwcApAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAiQXR0cmlidXRlLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJTY3JpcHRFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiU2NyaXB0YWJsZURvY3VtZW50UGFyc2VyLmgiCkBAIC0zOCw2ICszOSw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CiBpbmxpbmUgSFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQp
CiAgICAgLCBTdHlsZUVsZW1lbnQoZG9jdW1lbnQsIGNyZWF0ZWRCeVBhcnNlcikKKyAgICAsIG1f
aXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KGZhbHNlKQogewogICAgIEFTU0VSVChoYXNU
YWdOYW1lKHN0eWxlVGFnKSk7CiB9CkBAIC03Myw2ICs3NSwzMyBAQCB2b2lkIEhUTUxTdHlsZUVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50
KGRvY3VtZW50KCksIHRoaXMpOworCisgICAgaWYgKCFzY29wZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50T3JIb3N0ID0gcGFyZW50T3JIb3N0Tm9kZSgp
OworICAgIGlmICghcGFyZW50T3JIb3N0IHx8ICFwYXJlbnRPckhvc3QtPmlzRWxlbWVudE5vZGUo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSWdub3JlICdzY29wZWQnIGF0dHJpYnV0ZSBv
biA8c3R5bGU+IGVsZW1lbnRzIHdpdGhpbiA8aGVhZD4uCisgICAgSFRNTEhlYWRFbGVtZW50KiBo
ZWFkID0gZG9jdW1lbnQoKS0+aGVhZCgpOworICAgIGlmIChoZWFkICYmIGhlYWQtPmNvbnRhaW5z
KHRoaXMpKQorICAgICAgICByZXR1cm47CisKKyAgICB0b0VsZW1lbnQocGFyZW50T3JIb3N0KS0+
cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIG1faXNSZWdpc3RlcmVkV2l0aFNj
b3BpbmdFbGVtZW50ID0gdHJ1ZTsKK30KKwordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVt
b3ZlKCkKK3sKKyAgICBpZiAoaXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KCkpIHsKKyAg
ICAgICAgQ29udGFpbmVyTm9kZSogcGFyZW50T3JIb3N0ID0gcGFyZW50T3JIb3N0Tm9kZSgpOwor
ICAgICAgICBBU1NFUlQocGFyZW50T3JIb3N0ICYmIHBhcmVudE9ySG9zdC0+aXNIVE1MRWxlbWVu
dCgpKTsKKyAgICAgICAgaWYgKHBhcmVudE9ySG9zdCAmJiBwYXJlbnRPckhvc3QtPmlzSFRNTEVs
ZW1lbnQoKSkKKyAgICAgICAgICAgIHRvSFRNTEVsZW1lbnQocGFyZW50T3JIb3N0KS0+dW5yZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVkV2l0aFNj
b3BpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgfQorICAgIEhUTUxFbGVtZW50Ojp3aWxsUmVtb3Zl
KCk7CiB9CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpCkBA
IC0xMjAsNCArMTQ5LDkgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpzZXREaXNhYmxlZChib29s
IHNldERpc2FibGVkKQogICAgICAgICBzdHlsZVNoZWV0LT5zZXREaXNhYmxlZChzZXREaXNhYmxl
ZCk7CiB9CiAKK2Jvb2wgSFRNTFN0eWxlRWxlbWVudDo6c2NvcGVkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShzY29wZWRBdHRyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuaAppbmRleCBhZjI4MDg1ZGJiYmY0NWVkN2NkZDRiZDI0ZjRk
ZjRmZGRmZmU0ZTFmLi5hZTVhOWFlMTNhM2RmNjZjNGQ1NjhlNGJlM2VkMzJhMWE0ZDI3YjcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaApAQCAtNDIsMTIgKzQyLDE2IEBA
IHB1YmxpYzoKICAgICBib29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxl
ZChib29sKTsKIAorICAgIGJvb2wgc2NvcGVkKCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZ2lzdGVy
ZWRXaXRoU2NvcGluZ0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVnaXN0ZXJlZFdpdGhT
Y29waW5nRWxlbWVudDsgfQorCiBwcml2YXRlOgogICAgIEhUTUxTdHlsZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAgICAg
Ly8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBO
b2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKIApAQCAtNjEs
NiArNjUsOCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIG1l
ZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUoKSBjb25z
dDsKKworICAgIGJvb2wgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7CiB9OwogCiB9
IC8vbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97062</attachid>
            <date>2011-06-13 20:24:24 -0700</date>
            <delta_ts>2011-06-13 22:06:47 -0700</delta_ts>
            <desc>patch, full HTML5 version</desc>
            <filename>bug-49142-20110614122422.patch</filename>
            <type>text/plain</type>
            <size>57160</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg3NDYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyOWMxMWMyODVjYTRhYzM3YmZkYWY2
NThmNTY1ZTkxZjI3NDVhYmNlLi5mMmM1N2U2NWNiNzQzZmYwNTYyMmMwOWM1MzkxYmNmYWJiYmI4
Y2E3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMTMgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNj
b3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgLSkg
YmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUg
PHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wNi0x
MyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmUwNjcxZmFjNmUxNmUzM2E0
MmM0MjlhZmVmZWRkMWEzNWFmOGNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAor
VGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdi
KDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAs
IDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgQVRU
QUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAw
LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwg
MCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwMGYxZWI1
NDFlMzRlMDZlYTQzZTNjNDkxZTU3MzE1NjQwOTFkYmEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3MCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBk
b2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3Bl
cnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFs
bCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0
KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7
CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisg
ICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7
CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicp
OworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0
eWxlJyk7CisgICAgICAgICAgICBzdHlsZUVsZW0uc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVl
KTsKKyAgICAgICAgICAgIHN0eWxlRWxlbS5pbm5lckhUTUwgPSAiZGl2IHsgY29sb3I6IHJlZDsg
fSBwIHsgY29sb3I6IGdyZWVuOyB9IjsKKyAgICAgICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3Jl
KHN0eWxlRWxlbSwgZGl2RWxlbS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQo
ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAg
IGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9z
Y3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkg
eyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBhdHRhY2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3Bl
ZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8
L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2
IGlkPSJESVYiPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBp
ZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIwYTNiMmNmMTRkNjI4MDI0NTUwMDlhMmJiOTJjNTFmMWE0YTE4MjEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjAgQEAKK1Rlc3QgPHN0eWxlIHNjb3BlZD4KKworVGV4
dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIENPTVBVVEVEIFNUWUxF
UyAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAw
LCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAs
IDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGY3YzM2Y2FiNTVmMDQzYjk0YmIxNTMyNzJjNzJj
YjFkNDcyZTkwNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsNTcgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0
bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAg
IGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUo
bXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAg
ICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChp
ZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0
Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIGxvZygnLS0t
IENPTVBVVEVEIFNUWUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAg
dGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQ
MycpOworCisgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgfQor
ICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkg
eyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJy
dW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCAmbHQ7c3R5bGUgc2NvcGVkJmd0OzwvcD4KKyAgICA8
ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQ
MSI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAg
ICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNw
YW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAg
PC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29s
ZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZWY2NTMx
NzQwNzJiNzg4N2Y3ZGYzZGFiZjkxYTlhNzM0MGUzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDI3IEBACitUZXN0IGRldGFjaGluZyBhIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4
dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQor
UzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQ
MjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0t
LSBBRlRFUiBERVRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQ
MTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzog
cmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42
MmZlZGFmNmEzMWY1MjgyMjQxZjE4NmNhYTVhMTk2OTViOGUyMzllCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCkBAIC0wLDAg
KzEsNzIgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5
cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5k
Q2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVs
ZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAn
OiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5n
ZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAg
ICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0
KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7
CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwo
KTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+
IC0tLScpOworICAgICAgICAgICAgdmFyIGRpdkVsZW0gPWRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdESVYnKTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnU1RZTEUnKTsKKyAgICAgICAgICAgIGRpdkVsZW0ucmVtb3ZlQ2hpbGQoc3R5bGVFbGVt
KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAg
ICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAg
IH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBkZXRh
Y2hpbmcgYSAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAg
ICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9w
PgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZ
TEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVk
OyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwv
c3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUg
aWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjNhMjA1ODdkZjVhZmZmNjJkYzI3ZjYyYWFlYzQ1MGIzMzc2NWNhYzgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVt
b3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCByZW1vdmluZyB0
aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQKK1RleHQK
KworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2Io
MCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigw
LCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIg
VU4tU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEy
OCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1
NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lYWFmMzc3NGNhYjJmYTc0ZmQ3MGM2MTFhZTAzMmJhMTE4NDNkN2VkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1z
Y29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicp
OworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7Cisg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIFVOLVNF
VFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdTVFlMRScpLnJlbW92ZUF0dHJpYnV0ZSgnc2NvcGVkJyk7CisgICAgICAgICAgICBzZXRUaW1l
b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAg
ICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAg
IDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBi
b2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9h
ZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQnIGF0dHJp
YnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8
c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAg
ICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0ZXh0
L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAg
ICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBp
ZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAg
IDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTBj
Nzk2M2M5N2M0NzgwMWUwODQ5Njc1MTEzNzIyMmM0NjY1ZDFjCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3Qgc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9u
IGEgPHN0eWxlPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitU
ZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAx
MjgsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigy
NTUsIDAsIDApCitQMzogcmdiKDAsIDEyOCwgMCkKKy0tLSBBRlRFUiBTRVRUSU5HIEBTQ09QRUQg
LS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwg
MCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAw
KQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OTAzYmQ0MWUyOTlkMDM1MDFjZWYx
MDU0MGZlMTk1MDBjNGU4MmVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
Y29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCct
LS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAg
IGxvZygnLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0nKTsKKyAgICAgICAgICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1ZSk7
CisgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRl
c3RBbGwoKTsKKyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAg
ICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9
LCAwKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyIgc2NvcGVkPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3Qgc2V0dGlu
ZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgor
ICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAg
aWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBp
ZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIj4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7
IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8
L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBp
ZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzgyZGZj
OTZmOGQ5Y2YxN2Y0YTMyMTZhMDE0NjRiMzQ3ZDA2MTA1Yy4uZjFlYzdlMzU1OThlODI4YzQ1MGJi
NzA5M2NiMjFlMTNiNjQzZTMwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDExLTA2
LTEzICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTE0MiAtIElt
cGxlbWVudCBIVE1MNSBzdHlsZSBzY29wZWQgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE0MgorCisgICAgICAgIEltcGxlbWVudGlu
ZyBzdXBwb3J0IGZvciA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciBo
b2xkcyBnbG9iYWwgYXMgd2VsbCBhcyBzY29wZWQgYXV0aG9yIHNoZWV0cy4KKyAgICAgICAgU2Nv
cGVkIGF1dGhvciBzaGVldHMgYXJlIG1hcHBlZCBieSB0aGVpciBzY29waW5nIGVsZW1lbnQgKHRo
ZSBwYXJlbnQgZWxlbWVudCBvZiA8c3R5bGUgc2NvcGVkPikuCisgICAgICAgIDxzdHlsZSBzY29w
ZWQ+IGVsZW1lbnRzIHJlZ2lzdGVyIGFuZCB1bi1yZWdpc3RlciB3aXRoIHRoZWlyIHNjb3Bpbmcg
cGFyZW50IGVsZW1lbnQKKyAgICAgICAgaW4gYSBraW5kIG9mIHJlZi1jb3VudGluZywgaW4gb3Jk
ZXIgdG8gYWxsb3cgcXVpY2sgbG9vay11cCBvZiB3aGV0aGVyIGFuIGVsZW1lbnQgaGFzIHNjb3Bl
ZCBzdHlsZSBjaGlsZHJlbi4KKyAgICAgICAgQWxzbywgcHJldmVudCBzdHlsZSBzaGFyaW5nIGZy
b20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMuCisKKyAgICAg
ICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbAorICAgICAgICAgICAg
ICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbAorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0
b3IuY3BwOiBhZGQgc3VwcG9ydCBmb3Igc2NvcGVkIGF1dGhvciBzaGVldHMKKyAgICAgICAgKFdl
YkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpTY29wZWRSdWxlU2V0cyk6IGNsYXNzIGZvciBzY29wZWQg
YXV0aG9yIHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKTogYWRkIHNjb3BpbmcgaW5mb3JtYXRp
b24gdG8gcGFyZW50IHN0YWNrIGZyYW1lCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaEF1dGhvclJ1bGVzKTogbWF0Y2ggc2NvcGVkIGF1dGhvciBydWxlcworICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6
Y29tcGFyZVJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IGNvZGUKKyAg
ICAgICAgKFdlYkNvcmU6Om1hdGNoZXNJblRyZWVTY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KTogYXZvaWQgY3Jvc3Npbmcgc2NvcGVk
IHN0eWxlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmNh
blNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6IGRpdHRvCisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxl
U2V0OjphZGRTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6On5T
Y29wZWRSdWxlU2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6ZW5zdXJl
RXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVy
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMp
OgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNlbGVjdG9yOjpQYXJlbnRTdGFja0ZyYW1lOjpQYXJlbnRTdGFja0ZyYW1lKToKKyAg
ICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0OjpmaW5kT3duZXJOb2RlKTogcmVmYWN0b3JpbmcgdG8gc2ltcGxpZnkgY29kZQorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6ZG9jdW1lbnQpOiBkaXR0bworICAgICAgICAq
IGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKTogcmVnaXN0ZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGls
ZAorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKTogdW4tcmVnaXN0ZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGlsZAorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiBxdWVyeSB3aGV0aGVyIGEgPHN0
eWxlIHNjb3BlZD4gY2hpbGQgaXMgcHJlc2VudAorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6Cisg
ICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOiBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCA8c3R5
bGUgc2NvcGVkPiBjaGlsZHJlbgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjpy
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKTogCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
UmFyZURhdGE6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50UmFyZURhdGE6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAg
KiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxl
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6IHVwZGF0ZSBzY29wZWQgc3RhdGUsIFt1bi1dcmVnaXN0ZXIgd2l0aCBwYXJl
bnQgYXMgbmVjZXNzYXJ5CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpyZWdp
c3RlcldpdGhTY29waW5nRWxlbWVudCk6IHJlZ2lzdGVyaW5nIHdpdGggcGFyZW50CisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50
KTogdW4tcmVnaXN0ZXJpbmcgd2l0aCBwYXJlbnQKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogcmVnaXN0ZXIgd2l0aCBwYXJlbnQgaWYg
bmVjZXNzYXJ5CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVtb3Zl
KTogdW4tcmVnaXN0ZXIgd2l0aCBwYXJlbnQgaWYgbmVjZXNzYXJ5CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQpOiBxdWVyeSBzY29wZWQgc3RhdHVzCisgICAgICAg
IChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpzY29waW5nRWxlbWVudCk6IGdldCBzY29waW5n
IGVsZW1lbnQKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmlzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCk6
IHdoZXRoZXIgdGhlIDxzdHlsZT4gZWxlbWVudCBpcyByZWdpc3RlcmVkIHdpdGggaXRzIHBhcmVu
dC4KKwogMjAxMS0wNi0xMyAgSmFtZXMgU2ltb25zZW4gIDxzaW1vbmphbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTZWxlY3Rvci5jcHAKaW5kZXggZjViNGM2NTkwYjAwMGY2NTczZTM3OTM2M2I2Zjg2
MDdkMzQzM2IzYy4uYTJkZGExYmUyNjViYWJmMzZjNjVlOTA0MDU3ZjMzZjhlMmNmNmQ2YSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNjMsOCArNjMsMTAgQEAK
ICNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFF
bGVtZW50LmgiCiAjaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCiAjaW5jbHVkZSAiTGlua0hhc2gu
aCIKQEAgLTMyMywxNCArMzI1LDE0IEBAIGNsYXNzIFJ1bGVTZXQgewogcHVibGljOgogICAgIFJ1
bGVTZXQoKTsKICAgICB+UnVsZVNldCgpOwotICAgIAorCiAgICAgdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBWZWN0b3I8UnVsZURhdGE+Kj4gQXRvbVJ1bGVNYXA7Ci0gICAgCi0g
ICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVy
eUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCk7CiAKLSAgICB2b2lkIGFkZFN0eWxl
UnVsZShDU1NTdHlsZVJ1bGUqIGl0ZW0pOwotICAgIHZvaWQgYWRkUnVsZShDU1NTdHlsZVJ1bGUq
IHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwotICAgIHZvaWQgYWRkUGFnZVJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKKyAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0
KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxl
Y3RvciogPSAwLCBjb25zdCBFbGVtZW50KiA9IDApOworCisgICAgdm9pZCBhZGRTdHlsZVJ1bGUo
Q1NTU3R5bGVSdWxlKiwgY29uc3QgRWxlbWVudCopOworICAgIHZvaWQgYWRkUnVsZShDU1NTdHls
ZVJ1bGUqLCBDU1NTZWxlY3RvciopOworICAgIHZvaWQgYWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxl
KiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIGFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBs
KiBrZXksIEF0b21SdWxlTWFwJiBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKICAgICB2b2lkIHNocmlua1RvRml0KCk7CkBA
IC0zNTYsNiArMzU4LDIzIEBAIHB1YmxpYzoKICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZDsKIH07CiAKK2NsYXNzIFNjb3BlZFJ1bGVTZXRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTY29wZWRSdWxlU2V0cyk7CitwdWJsaWM6CisgICAgU2NvcGVkUnVsZVNldHMoKSB7IH0K
KyAgICB+U2NvcGVkUnVsZVNldHMoKTsKKworICAgIFJ1bGVTZXQqIGdldChjb25zdCBFbGVtZW50
KiBzY29wZSkgeyByZXR1cm4gbV9zY29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7IH0KKyAgICBS
dWxlU2V0KiBlbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVudCopOworCisgICAgdm9pZCBjb2xsZWN0
RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgRWxlbWVudCosIFJ1bGVTZXQqPiBTY29wZWRSdWxl
U2V0TWFwOworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZFJ1bGVTZXRNYXA7Cit9Owor
CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRR
dWlya3NTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAgLTQyNyw2
ICs0NDYsMzkgQEAgc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRvTGVm
dERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQogCisv
LyBEZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgc3R5bGUgc2hlZXQgKGlmIGFueSkuIFJldHVybnMg
J2ZhbHNlJyBpZiBpdCdzIGEgc2NvcGVkIHN0eWxlIHNoZWV0IGluIGFuIGludmFsaWQgbG9jYXRp
b24uCitzdGF0aWMgYm9vbCBkZXRlcm1pbmVTY29wZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgRWxlbWVudComIHNjb3BlKQoreworICAgIHNjb3BlID0gMDsKKworICAgIGlmICghc2hlZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5m
aW5kT3duZXJOb2RlKCk7CisgICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNIVE1M
RWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykp
CisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYg
KCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0eWxlRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRv
Y3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBJZ25vcmUgJ3Njb3BlZCcg
YXR0cmlidXRlIGZvciA8c3R5bGUgc2NvcGVkPiBlbGVtZW50cyB3aXRoaW4gPGhlYWQ+LgorICAg
IEhUTUxIZWFkRWxlbWVudCogaGVhZCA9IGRvY3VtZW50LT5oZWFkKCk7CisgICAgaWYgKGhlYWQg
JiYgaGVhZC0+Y29udGFpbnMoc3R5bGVFbGVtZW50KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBDb250YWluZXJOb2RlKiBwYXJlbnRPckhvc3QgPSBzdHlsZUVsZW1lbnQtPnBhcmVudE9y
SG9zdE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudE9ySG9zdCB8fCAhcGFyZW50T3JIb3N0LT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNjb3BlID0gdG9FbGVt
ZW50KHBhcmVudE9ySG9zdCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIENTU1N0eWxlU2VsZWN0
b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCog
c3R5bGVTaGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJTaGVldCwg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2VyU2hlZXRz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcs
IGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQpAQCAtNDY4LDkgKzUyMCwxMCBAQCBDU1NT
dHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVT
aGVldExpc3QqIHN0eWxlU2hlZQogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykK
ICAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3
LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7
CiAKLSAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fZ2xv
YmFsQXV0aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fc2NvcGVkQXV0
aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRzKTsKICAgICAvLyBBZGRpbmcg
cnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIG1fYXV0
aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0
eWxlcy0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vj
a3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3duUHRyPFJ1
bGVTZXQ+IHRlbXBVc2VyU3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CkBAIC00ODIsNyAr
NTM1LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9j
dW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgICAgIGlmIChwYWdlR3Jv
dXBVc2VyU2hlZXRzLT5hdChpKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICAgICAgICAgICAg
IHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0
KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVl
dHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICAgICAgICAgIG1fZ2xv
YmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3JvdXBVc2VyU2hlZXRzLT5h
dChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNDkw
LDE1ICs1NDMsMjYgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVu
dCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91c2VyU3R5
bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBmcm9tIGVs
ZW1lbnRzIGxpa2UgU1ZHJ3MgPGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVudFNoZWV0
KQotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRFbGVtZW50
U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVldCkgewor
ICAgICAgICAvLyBGSVhNRTogc2VlIGlmIHN0eWxlIHNjb3BlcyBjYW4vc2hvdWxkIGJlIGFkZGVk
IGhlcmUuCisgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21TaGVldCht
YXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgfQogCiAgICAgLy8gYWRk
IHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHlsZVNo
ZWV0cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsr
KSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0oaSk7Ci0g
ICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgp
KQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3RhdGljX2Nh
c3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgaWYg
KHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsKKyAgICAg
ICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVl
dCo+KHNoZWV0KTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gMDsKKworICAg
ICAgICAgICAgaWYgKCFkZXRlcm1pbmVTY29wZShjc3NTaGVldCwgc2NvcGUpKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgICAg
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5hZGRSdWxlc0Zyb21T
aGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJvbVNoZWV0
KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICB9CiAgICAgfSAgICAKICAgICAv
LyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3JzICg6Zmly
c3QtY2hpbGQgYW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9mIHN0eWxl
c2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRvIHJlamVj
dApAQCAtNTA2LDExICs1NzAsMTIgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rv
cihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAvLyBV
c3VhbGx5IHRoZXJlIGFyZSBubyBzaWJsaW5nIHJ1bGVzIGluIHRoZSBkZWZhdWx0IHN0eWxlIGJ1
dCB0aGUgTWF0aE1MIHNoZWV0IGhhcyBzb21lLgogICAgIGlmIChzaWJsaW5nUnVsZXNJbkRlZmF1
bHRTdHlsZSkKICAgICAgICAgc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUtPmNvbGxlY3RGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBtX2F1dGhvclN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9m
ZWF0dXJlcyk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmNvbGxlY3RGZWF0dXJlcyhtX2Zl
YXR1cmVzKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Y29sbGVjdEZlYXR1cmVzKG1fZmVh
dHVyZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91c2VyU3R5bGUtPmNvbGxl
Y3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKIAotICAgIG1fYXV0aG9yU3R5bGUtPnNocmlua1RvRml0
KCk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPnNocmlua1RvRml0KCk7CiAgICAgaWYgKG1f
ZmVhdHVyZXMuc2libGluZ1J1bGVzKQogICAgICAgICBtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+
c2hyaW5rVG9GaXQoKTsKIApAQCAtNjMzLDYgKzY5OCwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCkKICAgICBzaXplX3QgY291
bnQgPSBwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzLnNpemUoKTsKICAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIG1fYW5jZXN0b3JJZGVudGlmaWVyRmls
dGVyLT5hZGQocGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlc1tpXSk7CisgICAgLy8gUG9pbnQg
dG8gZnJhbWUgY29udGFpbmluZyB0aGUgY2xvc2VzdCBzdHlsZSBzY29wZSAob3IgbGVhdmUgYXQg
MCBpZiBub25lKS4KKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0gJnBhcmVudEZyYW1l
OworICAgIGVsc2UgaWYgKG1fcGFyZW50U3RhY2suc2l6ZSgpID49IDIpCisgICAgICAgIHBhcmVu
dEZyYW1lLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWUgPSBtX3BhcmVudFN0YWNrW21fcGFyZW50U3Rh
Y2suc2l6ZSgpIC0gMl0uY2xvc2VzdFN0eWxlU2NvcGVGcmFtZTsKIH0KIAogdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjpwb3BQYXJlbnRTdGFja0ZyYW1lKCkKQEAgLTY5MywxMyArNzYzLDYyIEBAIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIG1fbWF0Y2hlZERlY2xzLmFwcGVuZChkZWNsKTsKIH0K
IAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxl
SW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKKyAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1dGhvciBy
dWxlcy4KKyAgICBtYXRjaFJ1bGVTZXQobV9nbG9iYWxBdXRob3JTdHlsZXMuZ2V0KCksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgLy8gTWF0
Y2ggc2NvcGVkIHN0eWxlIHNoZWV0J3MgcnVsZXMuCisgICAgaWYgKCFtX3BhcmVudFN0YWNrLmlz
RW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IG1fcGFyZW50Tm9kZSkg
eworICAgICAgICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMgZGlyZWN0
bHkgZnJvbSBwYXJlbnQgc3RhY2sKKyAgICAgICAgLy8gKGJ1dCBzdGFydCB3aXRoIGN1cnJlbnQg
ZWxlbWVudCkuCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxk
KCkpIHsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxl
cy0+Z2V0KG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAg
ICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgICAgICBQYXJlbnRTdGFja0ZyYW1l
KiBzY29wZUZyYW1lID0gbV9wYXJlbnRTdGFjay5sYXN0KCkuY2xvc2VzdFN0eWxlU2NvcGVGcmFt
ZTsKKyAgICAgICAgd2hpbGUgKHNjb3BlRnJhbWUpIHsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1l
bnQqIHNjb3BlID0gc2NvcGVGcmFtZS0+ZWxlbWVudDsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1
bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Z2V0KHNjb3BlKTsKKyAgICAgICAgICAgIGlm
IChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJzdFJ1
bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICAgICAg
aWYgKHNjb3BlRnJhbWUgPT0gJm1fcGFyZW50U3RhY2suZmlyc3QoKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIC0tc2NvcGVGcmFtZTsKKyAgICAgICAgICAgIHNjb3BlRnJh
bWUgPSBzY29wZUZyYW1lLT5jbG9zZXN0U3R5bGVTY29wZUZyYW1lOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1iIHRyZWUsIGNoZWNrIGZvciBz
dHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAgZm9yIChjb25zdCBOb2RlKiBu
b2RlID0gbV9lbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9kZSgpKSB7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1l
bnQobm9kZSk7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNo
aWxkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSdWxlU2V0KiBy
dWxlU2V0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChlbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB9
CisgICAgfQorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5tX2Nv
bGxlY3RSdWxlc09ubHkpOworfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMo
UnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwog
CiAgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQogICAgICAgICByZXR1cm47CisKKyAgICBt
YXRjaFJ1bGVTZXQocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5t
X2NvbGxlY3RSdWxlc09ubHkpOworfQogICAgIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVTZXQoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKICAgICAvLyBXZSBuZWVkIHRvIGNv
bGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBp
bnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmICht
X2VsZW1lbnQtPmhhc0lEKCkpCkBAIC03MTgsMjQgKzgzNywzNCBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdAogICAgIH0KICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMo
bV9lbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5n
ZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIAorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVz
KGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQoreworICAgIHVuc2lnbmVk
IHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOworICAgIHVuc2lnbmVkIHNwZWNpZmlj
aXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOworICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNw
ZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNp
dHkxIDwgc3BlY2lmaWNpdHkyOyAKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMoYm9vbCBjb2xsZWN0UnVsZXNPbmx5KQorewogICAgIC8vIElm
IHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1fbWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU29ydCB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIAor
ICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQo
KSwgY29tcGFyZVJ1bGVzKTsKKwogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNo
ZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5t
X2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0
aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwotICAgIH0gZWxz
ZSB7CisgICAgaWYgKGNvbGxlY3RSdWxlc09ubHkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAo
IW1fcnVsZUxpc3QpCiAgICAgICAgICAgICAgICAgbV9ydWxlTGlzdCA9IENTU1J1bGVMaXN0Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tp
XS0+cnVsZSgpKTsKICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGFk
ZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlv
bigpKTsKICAgICB9CiB9CiAKQEAgLTc3OSwxMiArOTA4LDE1IEBAIGlubGluZSBib29sIE1hdGNo
aW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1
bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLWlubGluZSBzdGF0aWMgYm9v
bCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGJvb2wgcnVsZVJlYWNo
ZXNJbnRvU2hhZG93RE9NKQoraW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29wZShU
cmVlU2NvcGUqIHRyZWVTY29wZSwgY29uc3QgRWxlbWVudCogc3R5bGVTY29wZSwgYm9vbCBydWxl
UmVhY2hlc0ludG9TaGFkb3dET00pCiB7Ci0gICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Njb3Bl
Ojppc01hdGNoaW5nVUFSdWxlcygpIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVldHMoKSB8
fCBydWxlUmVhY2hlc0ludG9TaGFkb3dET007CisgICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlOjppc01hdGNoaW5nVUFSdWxlcygpCisgICAgICAgIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRo
b3JTaGVldHMoKQorICAgICAgICB8fCAoc3R5bGVTY29wZSAmJiBzdHlsZVNjb3BlLT50cmVlU2Nv
cGUoKSA9PSB0cmVlU2NvcGUpCisgICAgICAgIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25z
dCBFbGVtZW50KiBzdHlsZVNjb3BlKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5OCw3ICs5MzAsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNG
b3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgICAgICBp
ZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkg
ewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2Nv
cGUoKSwgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKKyAgICAgICAgICAg
IGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIHN0eWxlU2Nv
cGUsIG1fY2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGll
cyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwpAQCAtODI3LDE4ICs5
NTksNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgIH0KIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiBy
MikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKLSAg
ICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4g
KHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9z
aXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCi19Ci0KLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygpCi17Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hl
ZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwotfQot
CiBpbmxpbmUgRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIWVs
ZW1lbnQgfHwgIWVsZW1lbnQtPmlzTGluaygpKQpAQCAtOTc2LDYgKzEwOTYsOCBAQCBOb2RlKiBD
U1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWdu
ZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAh
cGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHBh
cmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
U3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwog
ICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05OTEs
OCArMTExMywxMCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVs
ZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgIC8vIHdpbGwgbmV2ZXIg
Z28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVj
dXJzaW9uLgogICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwog
ICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgewor
ICAgICAgICBmb3IgKDsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnBy
ZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OworICAgICAgICAgICAg
aWYgKGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KGN1cnJlbnROb2Rl
KS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHls
ZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAvLyBBZGp1
c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KICAgICAgICAgICAgICAgICB2aXNpdGVkTm9k
ZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwpAQCAtMTAwMCw3ICsx
MTI0LDYgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50
KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChzdWJjb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2
aW91c1NpYmxpbmcoKTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNv
dXNpbkxpc3QodGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsK
ICAgICAgICAgdGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOwpAQCAtMTA2OSw2ICsxMTkyLDkgQEAg
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxlV2l0aEVsZW1lbnQoTm9kZSogbm9k
ZSkgY29uc3QKICAgICBpZiAoZWxlbWVudC0+aGFzSUQoKSAmJiBtX2ZlYXR1cmVzLmlkc0luUnVs
ZXMuY29udGFpbnMoZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBpZiAoZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgYm9vbCBpc0NvbnRyb2wgPSBl
bGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpOwogCiAgICAgaWYgKGlzQ29udHJvbCAhPSBt
X2VsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCkBAIC0xMTcwLDYgKzEyOTYsOCBAQCBB
TFdBWVNfSU5MSU5FIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRT
dHlsZSgpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChwYXJlbnRTdHlsZVByZXZlbnRzU2hh
cmluZyhtX3BhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fc3R5bGVk
RWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAK
ICAgICAvLyBDaGVjayBwcmV2aW91cyBzaWJsaW5ncyBhbmQgdGhlaXIgY291c2lucy4KICAgICB1
bnNpZ25lZCBjb3VudCA9IDA7CkBAIC0xNDQ4LDcgKzE1NzYsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVu
ZGVyU3R5bAogICAgIAogICAgICAgICAvLyA2LiBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cyBuZXh0LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAg
ICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwg
bGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmly
c3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIDcuIE5v
dyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtMTY2OCw3ICsxNzk2
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykgewogICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBmaXJz
dFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1
dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxzZSk7
CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlLCBm
YWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSAmJiAhdmlz
aXRlZFN0eWxlKQpAQCAtMTczNyw3ICsxODY1LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4g
Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY29uc3Qg
U3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5kZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRl
ZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1
bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQsIGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNo
UGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Cisg
ICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFsIFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBh
cyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0Y2hQYWdlUnVsZXMobV9nbG9iYWxBdXRob3JT
dHlsZXMuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFs
dWUgPSAwOwogICAgIGFwcGx5RGVjbGFyYXRpb25zPHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWRE
ZWNscy5zaXplKCkgLSAxKTsKIApAQCAtMjAyOSw3ICsyMTU4LDcgQEAgUGFzc1JlZlB0cjxDU1NS
dWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxl
bWVudCogZSwKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4K
ICAgICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwot
ICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwg
bGFzdEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAg
IG1hdGNoQXV0aG9yUnVsZXMoZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNU
b0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAgICBtX2NoZWNrZXIubV9zYW1lT3Jp
Z2luT25seSA9IGZhbHNlOwogICAgIH0KQEAgLTMxNjQsNyArMzI5Myw3IEBAIHZvaWQgUnVsZVNl
dDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQogICAg
IG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWwsIG1fcGFnZVJ1bGVzLnNpemUo
KSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0
b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0
eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0
eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAg
IGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTMxNzksMTEgKzMzMDgsMTEgQEAgdm9p
ZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
CiAgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHNoZWV0LT5pdGVtKGkpOwogICAgICAgICBpZiAo
aXRlbS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2Fz
dDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSksIHNjb3BlKTsKICAgICAgICAgZWxzZSBpZiAoaXRl
bS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENTU0ltcG9ydFJ1bGUqIGltcG9ydCA9
IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsKICAgICAgICAgICAgIGlmICghaW1w
b3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+bWVkaWEoKSwgc3R5bGVTZWxlY3Rv
cikpCi0gICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0
KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisgICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9t
U2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvciwgc2NvcGUp
OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzTWVkaWFSdWxlKCkpIHsKICAg
ICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGl0
ZW0pOwpAQCAtMzE5NSw3ICszMzI0LDcgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVl
dChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAg
ICAgICAgICAgICAgICAgQ1NTUnVsZSAqY2hpbGRJdGVtID0gcnVsZXMtPml0ZW0oaik7CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZEl0ZW0tPmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEl0IGlzIGEgU3R5bGVSdWxlLCBzbyBhcHBlbmQgaXQgdG8gb3Vy
IGxpc3QKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxD
U1NTdHlsZVJ1bGUqPihjaGlsZEl0ZW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0
eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjaGlsZEl0ZW0pLCBzY29wZSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgp
ICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlz
IGZvbnQgZmFjZSB0byBvdXIgc2V0LgogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NT
Rm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUq
PihjaGlsZEl0ZW0pOwpAQCAtMzIxNywxMSArMzM0NiwxNCBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1
bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJgogICAgICAgICBzaHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxl
UnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmIChydWxlLT5p
c1BhZ2VSdWxlKCkpIHsKLSAgICAgICAgQ1NTUGFnZVJ1bGUqIHBhZ2VSdWxlID0gc3RhdGljX2Nh
c3Q8Q1NTUGFnZVJ1bGUqPihydWxlKTsKLSAgICAgICAgYWRkUGFnZVJ1bGUocGFnZVJ1bGUsIHBh
Z2VSdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAgLy8gSWdub3JlIEBwYWdl
IHJ1bGVzIGlmIHRoZSBzdHlsZSBzaGVldCBpcyBzY29wZWQKKyAgICAgICAgaWYgKCFzY29wZSkg
eworICAgICAgICAgICAgQ1NTUGFnZVJ1bGUqIHBhZ2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGUqPihydWxlKTsKKyAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdlUnVs
ZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAg
ICAgICBmb3IgKENTU1NlbGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKTsg
czsgcyA9IENTU1NlbGVjdG9yTGlzdDo6bmV4dChzKSkKICAgICAgICAgICAgIGFkZFJ1bGUocnVs
ZSwgcyk7CkBAIC0zMzI0LDYgKzM0NTYsMjcgQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgp
CiAgICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorU2NvcGVkUnVsZVNldHM6On5T
Y29wZWRSdWxlU2V0cygpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1h
cCk7Cit9CisKK1J1bGVTZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMoY29uc3QgRWxl
bWVudCogc2NvcGUpCit7CisgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkUnVsZVNldE1h
cC5nZXQoc2NvcGUpOworICAgIGlmICghcnVsZVNldCkgeworICAgICAgICBydWxlU2V0ID0gbmV3
IFJ1bGVTZXQ7CisgICAgICAgIG1fc2NvcGVkUnVsZVNldE1hcC5zZXQoc2NvcGUsIHJ1bGVTZXQp
OworICAgIH0KKyAgICByZXR1cm4gcnVsZVNldDsKK30KKwordm9pZCBTY29wZWRSdWxlU2V0czo6
Y29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29u
c3QKK3sKKyAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9z
Y29wZWRSdWxlU2V0TWFwLmJlZ2luKCksIGl0RW5kID0gbV9zY29wZWRSdWxlU2V0TWFwLmVuZCgp
OyBpdCAhPSBpdEVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+Y29sbGVjdEZlYXR1cmVz
KGZlYXR1cmVzKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhp
cyBpcyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0
byB0aGUgcmVuZGVyc3R5bGUuLi4KIApAQCAtMzQxMiwxNyArMzU2NSw3IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFn
ZSwgYm9vbCBpc0ZpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlz
dChydWxlcy0+Z2V0UGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFt
ZSk7Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgot
ICAgIGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIFNvcnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMo
KTsKLQotICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0
byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRj
aGVkUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21h
dGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKKyAgICBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoZmFsc2UpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UGFnZVJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYm9vbCBpc0xl
ZnRQYWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMzJlYjZmNjljZjkwZmZlYjI4MmM5NGY4
NDAyMDgzMmFmYzA1NWU0Yy4uNGExNjgyNjU4ODQwZDRkYWFjZjRjM2M1MTExN2EzMzIyZTM0MTY3
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC02MSw2ICs2MSw3IEBA
IGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUnVsZURhdGE7
CiBjbGFzcyBSdWxlU2V0OworY2xhc3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBTZXR0aW5nczsK
IGNsYXNzIFN0eWxlSW1hZ2U7CiBjbGFzcyBTdHlsZVNoZWV0OwpAQCAtMjE0LDEwICsyMTUsMTUg
QEAgcHVibGljOgogICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBy
dWxlKSB7IG1fbWF0Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQogICAgICAgICB2b2lkIGFkZE1h
dGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7CiAKKyAg
ICAgICAgLy8gbWF0Y2hBdXRob3JSdWxlczogTWF0Y2ggYWxsIGdsb2JhbCBhbmQgYXBwbGljYWJs
ZSBzY29wZWQgYXV0aG9yLWRlZmluZWQgcnVsZXMuCisgICAgICAgIHZvaWQgbWF0Y2hBdXRob3JS
dWxlcyhpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVk
ZUVtcHR5UnVsZXMpOworICAgICAgICAvLyBtYXRjaFJ1bGVzOiBtYXRjaGVzIHZzLiBhbGwgcnVs
ZXMgaW4gdGhlIHBhc3NlZC1pbiBSdWxlU2V0LgogICAgICAgICB2b2lkIG1hdGNoUnVsZXMoUnVs
ZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcyk7Ci0gICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVj
dG9yPFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIC8vIEltcGxlbWVudGF0aW9uIG1ldGhv
ZHM6CisgICAgICAgIHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAg
ICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMs
IGNvbnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUgPSAwKTsKICAgICAgICAgYm9vbCBmYXN0UmVqZWN0
U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hl
ZFJ1bGVzKCk7CisgICAgICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wg
Y29sbGVjdFJ1bGVzT25seSk7CiAgICAgICAgIAogICAgICAgICBib29sIGNoZWNrU2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKTsKIApAQCAtMjMwLDE3ICsyMzYsMTkgQEAgcHVibGljOgogICAgICAg
ICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQ
YWdlKHBhZ2VJbmRleCk7IH0KICAgICAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4
KSBjb25zdDsKICAgICAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0Owot
ICAgICAgICAKLSAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisKKyAgICAg
ICAgT3duUHRyPFJ1bGVTZXQ+IG1fZ2xvYmFsQXV0aG9yU3R5bGVzOworICAgICAgICBPd25QdHI8
U2NvcGVkUnVsZVNldHM+IG1fc2NvcGVkQXV0aG9yU3R5bGVzOwogICAgICAgICBPd25QdHI8UnVs
ZVNldD4gbV91c2VyU3R5bGU7CiAKICAgICAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKIAogICAg
ICAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7CiAgICAgICAgICAgICBQYXJlbnRTdGFja0Zy
YW1lKCkge30KLSAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkg
OiBlbGVtZW50KGVsZW1lbnQpIHt9CisgICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1l
bnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSwgY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSgw
KSB7IH0KICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CiAgICAgICAgICAgICBWZWN0b3I8
dW5zaWduZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CisgICAgICAgICAgICBQYXJlbnRTdGFja0Zy
YW1lKiBjbG9zZXN0U3R5bGVTY29wZUZyYW1lOwogICAgICAgICB9OwogICAgICAgICBWZWN0b3I8
UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKICAgICAgICAgCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5jcHAKaW5kZXggMmZjM2Y0OGMwM2VkODRlYjUzYTY2MzlmZjg0MWFiNjEx
NmMwNGIzNS4uMjdlNTRkMTMwOWQ3MGVjNDYwZDgxOTFjMDU0ZmJlODVmYTJjMGNmNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjM2LDI0ICsyMzYsMjYgQEAgdm9pZCBD
U1NTdHlsZVNoZWV0OjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKQogICAgICAgICBvd25lci0+
c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9CiAKLURvY3VtZW50KiBDU1NTdHlsZVNoZWV0
Ojpkb2N1bWVudCgpCitOb2RlKiBDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJOb2RlKCkgY29uc3QK
IHsKLSAgICBTdHlsZUJhc2UqIHN0eWxlT2JqZWN0ID0gdGhpczsKLSAgICB3aGlsZSAoc3R5bGVP
YmplY3QpIHsKKyAgICBmb3IgKGNvbnN0IFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0aGlzOyBz
dHlsZU9iamVjdDsgc3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+cGFyZW50KCkpIHsKICAgICAg
ICAgaWYgKHN0eWxlT2JqZWN0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAgICAgICAgICAgTm9k
ZSogb3duZXJOb2RlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0eWxlT2JqZWN0KS0+
b3duZXJOb2RlKCk7CisgICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxj
b25zdCBDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUoKTsKICAgICAgICAg
ICAgIGlmIChvd25lck5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG93bmVyTm9kZS0+ZG9j
dW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlOwogICAgICAgICB9Ci0g
ICAgICAgIGlmIChzdHlsZU9iamVjdC0+aXNSdWxlKCkpCi0gICAgICAgICAgICBzdHlsZU9iamVj
dCA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZU9iamVjdCktPnBhcmVudFN0eWxlU2hlZXQo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+
cGFyZW50KCk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKK0RvY3VtZW50KiBDU1NTdHls
ZVNoZWV0Ojpkb2N1bWVudCgpCit7CisgICAgTm9kZSogb3duZXJOb2RlID0gZmluZE93bmVyTm9k
ZSgpOworCisgICAgcmV0dXJuIG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1lbnQoKSA6IDA7
Cit9CisKKwogdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdlZCgpCiB7CiAgICAg
U3R5bGVCYXNlKiByb290ID0gdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCmluZGV4
IDM1YTQ1MTAyZDFlYjZiMmQ2OTJjZGIxNDE1NTNjZmM5MTFlN2I4N2MuLmU0YjVhMGJkNmU3OGMy
Y2NkOTgwZmQzYTZmOTY4YzE3MDRhMTNiODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQu
aApAQCAtODgsNiArODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVk
KCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIAorICAgIE5vZGUqIGZp
bmRPd25lck5vZGUoKSBjb25zdDsKICAgICBEb2N1bWVudCogZG9jdW1lbnQoKTsKIAogICAgIGNv
bnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcnNldDsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Db250YWluZXJOb2RlLmgKaW5kZXggMmU1ODY4ODE5NzRlZTkzZmUxNGViMTQ0YTkwMWFl
OWMyMzFiMzM5MC4uM2U2MGU5NGU0NDAwMzU2ZmE0NDFmNTc0MDg1OTQyYzAzMDkxNzUzYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCkBAIC04MCw3ICs4MCw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHRha2VBbGxDaGlsZHJlbkZyb20oQ29udGFpbmVyTm9kZSopOwogCiAgICAgdm9pZCBj
bG9uZUNoaWxkTm9kZXMoQ29udGFpbmVyTm9kZSogY2xvbmUpOwotICAgIAorCiAgICAgYm9vbCBk
aXNwYXRjaEJlZm9yZUxvYWRFdmVudChjb25zdCBTdHJpbmcmIHNvdXJjZVVSTCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgc2NoZWR1bGVTZXROZWVkc1N0eWxlUmVjYWxjKFN0eWxlQ2hhbmdlVHlwZSA9
IEZ1bGxTdHlsZUNoYW5nZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggZTFkOTA4YTI4MGY1
YmQzN2JhMWQwMmM0NzlkZTg2MzJlYjQ2MTBmNy4uZWUyMDk2M2UzNDQxNTAwYmE1NjA4MGZmZDUy
MmQ0MzZiMmRiM2Y0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM0Niw2ICsxMzQ2LDIz
IEBAIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBO
b2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmCiAgICAgICAgIGNoZWNrRm9yU2libGluZ1N0eWxl
Q2hhbmdlcyh0aGlzLCByZW5kZXJTdHlsZSgpLCBmYWxzZSwgYmVmb3JlQ2hhbmdlLCBhZnRlckNo
YW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIH0KIAordm9pZCBFbGVtZW50OjpyZWdpc3RlclNjb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBlbnN1cmVSYXJlRGF0YSgpLT5yZWdpc3RlclNjb3Bl
ZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK3ZvaWQgRWxlbWVudDo6dW5yZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCkKK3sKKyAgICBBU1NFUlQoaGFzUmFyZURhdGEoKSk7CisgICAgaWYgKGhh
c1JhcmVEYXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCktPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5
bGVDaGlsZCgpOworfQorCitib29sIEVsZW1lbnQ6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEoKSAmJiByYXJlRGF0YSgpLT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCiB2b2lkIEVsZW1lbnQ6OmJlZ2luUGFyc2luZ0NoaWxk
cmVuKCkKIHsKICAgICBjbGVhcklzUGFyc2luZ0NoaWxkcmVuRmluaXNoZWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5oCmluZGV4IGUxNGU0OGI4ZTIzNDI0YmQ0ZjA2NTY5NzI0MDRhZTRmMjkzYjA4ZGQuLjVm
Mjc1Njk0MWM3MWQwZWFlZjllNWI5Y2NjN2QyYTFlMmQ1Mjc3MWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aApAQCAtMjM2LDYgKzIzNiwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21p
Y1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKIAorICAgIHZvaWQgcmVnaXN0ZXJTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKCk7CisgICAgYm9vbCBoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAgICAg
UmVuZGVyU3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETyk7CiAKICAgICBB
dG9taWNTdHJpbmcgY29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCkgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudFJhcmVEYXRhLmgKaW5kZXggNWE2NWVkYjdlMTFjN2JkYTkwNWNhZDY2ZGE2ODY2
NzIyNWQ1NTE3OC4uZDU3NTAzN2NmM2I5OGQ0N2M3NmI5MjdkY2YwMDdmYmQ3YjM0NTVhZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaApAQCAtMzksNiArMzksMTAgQEAgcHVibGlj
OgogCiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5bGUoKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHls
ZUNoaWxkKCk7CisgICAgYm9vbCBoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAg
ICAgdXNpbmcgTm9kZVJhcmVEYXRhOjpuZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRl
ckF0dGFjaDsKICAgICB1c2luZyBOb2RlUmFyZURhdGE6OnNldE5lZWRzRm9jdXNBcHBlYXJhbmNl
VXBkYXRlU29vbkFmdGVyQXR0YWNoOwogCkBAIC00OSw2ICs1Myw4IEBAIHB1YmxpYzoKICAgICBP
d25QdHI8RGF0YXNldERPTVN0cmluZ01hcD4gbV9kYXRhc2V0RE9NU3RyaW5nTWFwOwogICAgIE93
blB0cjxDbGFzc0xpc3Q+IG1fY2xhc3NMaXN0OwogCisgICAgdW5zaWduZWQgbV9udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuOworCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAg
IGJvb2wgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50OwogI2VuZGlmCkBAIC02Miw2ICs2OCw3
IEBAIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKIGlubGlu
ZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXpl
Rm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKICAgICAsIG1fc2hh
ZG93Um9vdCgwKQorICAgICwgbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCiAj
aWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVt
ZW50KGZhbHNlKQogI2VuZGlmCkBAIC03OCw1ICs4NSwyMSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50
UmFyZURhdGE6OnJlc2V0Q29tcHV0ZWRTdHlsZSgpCiAgICAgbV9jb21wdXRlZFN0eWxlLmNsZWFy
KCk7CiB9CiAKK2lubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVnaXN0ZXJTY29wZWRIVE1M
U3R5bGVDaGlsZCgpCit7CisgICAgKyttX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47
Cit9CisKK2lubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxT
dHlsZUNoaWxkKCkKK3sKKyAgICBBU1NFUlQobV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxk
cmVuID4gMCk7CisgICAgLS1tX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisK
K2lubGluZSBib29sIEVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBj
b25zdAoreworICAgIHJldHVybiBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9
CisKIH0KICNlbmRpZiAvLyBFbGVtZW50UmFyZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdHRyaWJ1dGVOYW1lcy5pbgppbmRleCAxNjc5ZTk2YTAwYTRmMzQxMWE5ZmUwYWI3NzgxZWJh
NzY0N2RiMjUyLi40OGY5NTA1ZjZmYjY2ZDhhNWIwYjE2ODE2N2JjMzI5NDAxMzI0ZmEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgpAQCAtMjY1LDYgKzI2NSw3
IEBAIHJ1bGVzCiBzYW5kYm94CiBzY2hlbWUKIHNjb3BlCitzY29wZWQKIHNjcm9sbGFtb3VudAog
c2Nyb2xsZGVsYXkKIHNjcm9sbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MU3R5bGVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVu
dC5jcHAKaW5kZXggMGYyNTZlMTViYjNiMmRmZmRkMGY3ZjRkZmZkZmYzODU0Y2JmNzE1OC4uZmZj
ZmI1OWQ1YmU3MDgyMzBmMGQ2ODI5NWYxYWI0ODNjZDRkNTA3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJB
dHRyaWJ1dGUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxl
bWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlz
dGVuZXIuaCIKICNpbmNsdWRlICJTY3JpcHRhYmxlRG9jdW1lbnRQYXJzZXIuaCIKQEAgLTM4LDYg
KzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGlubGluZSBIVE1MU3R5bGVFbGVt
ZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIFN0eWxlRWxlbWVudChkb2N1bWVudCwgY3JlYXRlZEJ5
UGFyc2VyKQorICAgICwgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQoZmFsc2UpCiB7
CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoc3R5bGVUYWcpKTsKIH0KQEAgLTU3LDEyICs1OSw1MCBA
QCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSog
YXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQog
ICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gc2NvcGVkQXR0cikgeworICAgICAgICBFbGVtZW50KiBzY29wZSA9IHNj
b3BpbmdFbGVtZW50KCk7CisgICAgICAgIEFTU0VSVChzY29wZSB8fCAhbV9pc1JlZ2lzdGVyZWRX
aXRoU2NvcGluZ0VsZW1lbnQpOworICAgICAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgICAgIGlm
IChzY29wZWQoKSkKKyAgICAgICAgICAgICAgICByZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGlu
Z0VsZW1lbnQoKTsKKyAgICAgICAgICAgIHNjb3BlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2lu
ZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JlcHJvY2Vzc0F0dHIpCiAgICAgICAgIHNldEF0dHJp
YnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZXByb2Nlc3NFdmVudCwgY3JlYXRl
QXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZQogICAgICAgICBI
VE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKK3ZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKQoreworICAgIEFTU0VSVCgh
bV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQpOworICAgIGlmICghbV9pc1JlZ2lzdGVy
ZWRXaXRoU2NvcGluZ0VsZW1lbnQpIHsKKyAgICAgICAgRWxlbWVudCogc2NvcGUgPSBzY29waW5n
RWxlbWVudCgpOworICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIHNjb3BlLT5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1f
aXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpCit7CisgICAg
QVNTRVJUKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50IHx8ICFzY29wZWQoKSk7Cisg
ICAgaWYgKG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KSB7CisgICAgICAgIEVsZW1l
bnQqIHNjb3BlID0gc2NvcGluZ0VsZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlKTsKKyAg
ICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1M
U3R5bGVDaGlsZCgpOworICAgICAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCA9
IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5n
Q2hpbGRyZW4oKQogewogICAgIFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRo
aXMpOwpAQCAtNzEsMTAgKzExMSwxNyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBh
cnNpbmdDaGlsZHJlbigpCiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKQogeworICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CiAgICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7CiAgICAgU3R5bGVFbGVtZW50OjppbnNlcnRl
ZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlzKTsKIH0KIAordm9pZCBIVE1MU3R5bGVFbGVt
ZW50Ojp3aWxsUmVtb3ZlKCkKK3sKKyAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7
CisgICAgSFRNTEVsZW1lbnQ6OndpbGxSZW1vdmUoKTsKK30KKwogdm9pZCBIVE1MU3R5bGVFbGVt
ZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCgpOwpAQCAtMTIwLDQgKzE2NywyOSBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnNldERpc2FibGVkKGJvb2wgc2V0RGlzYWJsZWQpCiAgICAgICAgIHN0eWxlU2hlZXQtPnNldERp
c2FibGVkKHNldERpc2FibGVkKTsKIH0KIAorYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQo
KSBjb25zdAoreworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpOworfQor
CitFbGVtZW50KiBIVE1MU3R5bGVFbGVtZW50OjpzY29waW5nRWxlbWVudCgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCAmJiAhc2NvcGVkKCkpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgbmVlZHMgdG8g
YmUgcmVmaW5lZCBmb3Igc2NvcGVkIHN0eWxlc2hlZXRzIHdpdGhpbiBzaGFkb3cgRE9NLgorICAg
IC8vIEFzIHdyaXR0ZW4sIHN1Y2ggYSBzdHlsZXNoZWV0IGNvdWxkIHN0eWxlIHRoZSBob3N0IGVs
ZW1lbnQsIGFzIHdlbGwgYXMgY2hpbGRyZW4gb2YgdGhlIGhvc3QuCisgICAgLy8gT1RPSCwgdGhp
cyBwYXZlcyB0aGUgd2F5IGZvciBhIDpib3VuZC1lbGVtZW50IGltcGxlbWVudGF0aW9uLgorICAg
IENvbnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBp
ZiAoIXBhcmVudE9ySG9zdCB8fCAhcGFyZW50T3JIb3N0LT5pc0VsZW1lbnROb2RlKCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgLy8gSWdub3JlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiA8c3R5
bGU+IGVsZW1lbnRzIHdpdGhpbiA8aGVhZD4uCisgICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkID0g
ZG9jdW1lbnQoKS0+aGVhZCgpOworICAgIGlmIChoZWFkICYmIGhlYWQtPmNvbnRhaW5zKHRoaXMp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiB0b0VsZW1lbnQocGFyZW50T3JIb3N0
KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVt
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAppbmRleCBhZjI4
MDg1ZGJiYmY0NWVkN2NkZDRiZDI0ZjRkZjRmZGRmZmU0ZTFmLi43MmFiODI4M2IyNTI0YjFkMmRk
ZWRhOWE3MTA0NDkxODUyOTRkMTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1l
bnQuaApAQCAtNDIsMTIgKzQyLDE3IEBAIHB1YmxpYzoKICAgICBib29sIGRpc2FibGVkKCkgY29u
c3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAorICAgIGJvb2wgc2NvcGVkKCkgY29u
c3Q7CisgICAgRWxlbWVudCogc2NvcGluZ0VsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVn
aXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50OyB9CisKIHByaXZhdGU6CiAgICAgSFRNTFN0eWxlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiAK
ICAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CiAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVtb3ZlKCk7CiAgICAgdmlydHVh
bCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5D
aGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5vZGUqIGJlZm9yZUNoYW5nZSA9
IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291bnREZWx0YSA9IDApOwogCkBA
IC02MSw2ICs2NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIG1lZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUo
KSBjb25zdDsKKworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKKyAgICB2
b2lkIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKKworICAgIGJvb2wgbV9pc1JlZ2lz
dGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7CiB9OwogCiB9IC8vbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97067</attachid>
            <date>2011-06-13 22:06:56 -0700</date>
            <delta_ts>2011-07-26 02:56:03 -0700</delta_ts>
            <desc>patch, HTML5 version, cleaned</desc>
            <filename>bug-49142-20110614140653.patch</filename>
            <type>text/plain</type>
            <size>57921</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg3NDYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyOWMxMWMyODVjYTRhYzM3YmZkYWY2
NThmNTY1ZTkxZjI3NDVhYmNlLi5mMmM1N2U2NWNiNzQzZmYwNTYyMmMwOWM1MzkxYmNmYWJiYmI4
Y2E3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDYtMTMgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNj
b3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgLSkg
YmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUg
PHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wNi0x
MyAgRGF2aWQgTGV2aW4gIDxsZXZpbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZmUwNjcxZmFjNmUxNmUzM2E0
MmM0MjlhZmVmZWRkMWEzNWFmOGNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAor
VGVzdCBhdHRhY2hpbmcgYSBuZXcgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCitUZXh0CitUZXh0
CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdi
KDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAs
IDAsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgQVRU
QUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAw
LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwg
MCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwM2RmNTVk
ZTQ5YmY2Y2ZlMWY4YzZhZDQwYjBlNjUwY2Y4YWU2ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKQEAgLTAsMCArMSw3MCBA
QAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4
dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChk
b2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBk
b2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3Bl
cnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFs
bCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0
KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7
CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisg
ICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tJyk7
CisgICAgICAgICAgICB2YXIgZGl2RWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdESVYn
KTsKKyAgICAgICAgICAgIHZhciBzdHlsZUVsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdz
dHlsZScpOworICAgICAgICAgICAgc3R5bGVFbGVtLnNldEF0dHJpYnV0ZSgnc2NvcGVkJywgdHJ1
ZSk7CisgICAgICAgICAgICBzdHlsZUVsZW0uaW5uZXJIVE1MID0gJ2RpdiB7IGNvbG9yOiByZWQ7
IH0gcCB7IGNvbG9yOiBncmVlbjsgfSc7CisgICAgICAgICAgICBkaXZFbGVtLmluc2VydEJlZm9y
ZShzdHlsZUVsZW0sIGRpdkVsZW0uZmlyc3RDaGlsZCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0
KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsKKyAgICAgICAgICAgICAg
ICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJv
bGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfQorICAgIDwv
c2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICBib2R5
IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0i
cnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgYXR0YWNoaW5nIGEgbmV3ICZsdDtzdHlsZSBzY29w
ZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0
PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRp
diBpZD0iRElWIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8
cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4g
aWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9k
aXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi44MGYxNTAyYTQwNjE4Y2MxNjM2NDI3ZmQ2NWExOGYyNjQzZWEzNTU1Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2lj
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM2IEBACitUZXN0IDxzdHlsZSBzY29wZWQ+CisKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CisKK1RleHQK
K1RleHQKK1RleHQKKworVGV4dAorLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0KK1MxOiByZ2IoMCwg
MCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1IxOiByZ2IoMCwgMCwgMCkKKworUzI6IHJnYigyNTUs
IDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1IyOiByZ2IoMCwgMCwgMjU1KQorCitTMzogcmdi
KDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCitSMzogcmdiKDAsIDAsIDApCisKK1M0OiByZ2Io
MCwgMCwgMCkKK1A0OiByZ2IoMCwgMCwgMCkKK1I0OiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5JU0hF
RCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJh
c2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MWU3YTcwODA1MTU2MGJhY2NjYjUwNGQ0ZTIxZWQ2NzhhZWNjZmIxCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0
bWwKQEAgLTAsMCArMSw3NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAg
IDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1z
ZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNv
bGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAg
ICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAg
IGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVs
ZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAg
ICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQ09NUFVURUQgU1RZTEVT
IC0tLScpOworCisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1IxJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAg
ICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0
ZXN0KCdSMicpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAg
ICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTNCcpOworICAgICAgICAgICAgdGVz
dCgnUDQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1I0Jyk7CisKKyAgICAgICAgICAgIGxvZygnLS0t
IEZJTklTSEVEIC0tLScpOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5
cGU9InRleHQvY3NzIj4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5
bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0ICZs
dDtzdHlsZSBzY29wZWQmZ3Q7PC9wPgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxz
cGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAg
ICAgICA8cHJlIGlkID0gIlIxIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgPC9kaXY+Cisg
ICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPGRpdj4KKyAgICAgICAgICAgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7
IH0KKyAgICAgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgICAgICAgICAg
LmZvbyAuYmFyIHsgY29sb3I6IGJsdWU7IH0KKyAgICAgICAgICAgIDwvc3R5bGU+CisgICAgICAg
ICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgICAgICA8cCBpZD0iUDIiPlRl
eHQ8L3A+CisgICAgICAgICAgICA8cHJlIGlkPSJSMiIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgor
ICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjMiIGNsYXNzPSJiYXIi
PlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8
c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQNCI+VGV4dDwvcD4KKyAg
ICAgICAgPHByZSBpZCA9ICJSNCIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgIDwvZGl2Pgor
ICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdmN2RmM2RhYmY5MWE5YTczNDBlM2U4Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBkZXRhY2hpbmcgYSA8c3R5bGUgc2Nv
cGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisK
Ky0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1My
OiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQ
MzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQor
UzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQorUDI6
IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJ
TklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNo
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYxY2I4NTU4YWMzMjdhMTg3NzFmMzll
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicp
OworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7Cisg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIERFVEFD
SElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOworICAgICAgICAgICAgZGl2RWxlbS5y
ZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigp
IHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0g
RklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29u
dHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAg
ICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBi
bGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7
Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHlsZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8
L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAg
ICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iRElWIj4KKyAg
ICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAg
ICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0K
KyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAg
ICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAg
PHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+Cisg
ICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNj
b3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVt
b3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EyMDU4N2RmNWFmZmY2MmRjMjdm
NjJhYWVjNDUwYjMzNzY1Y2FjOAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3
IEBACitUZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVs
ZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9S
SUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigy
NTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2Io
MCwgMCwgMCkKKy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDI1NSwg
MCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gRklO
SVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQt
cmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYWYzNzc0Y2FiMmZhNzRmZDcwYzYxMWFl
MDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQ
RSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw
dCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24g
dGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVm
YXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdj
b2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAg
ICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAg
ICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0t
LSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAg
bG9nKCctLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykucmVtb3ZlQXR0cmlidXRlKCdzY29wZWQnKTsK
KyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVz
dEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0s
IDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3Nz
IiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCByZW1vdmlu
ZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgor
ICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAg
aWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBp
ZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xv
cjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5
bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAy
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAg
IDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4NDk2NzUxMTM3MjIyYzQ2NjVkMWMK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0
LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBzZXR0aW5nIHRoZSAn
c2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitU
ZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigyNTUs
IDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigw
LCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwgMTI4LCAwKQorLS0tIEFG
VEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwg
MCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAs
IDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk5
MDNiZDQxZTI5OWQwMzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgyZWUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCkBAIC0w
LDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQg
KyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAg
ICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Az
Jyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RB
bGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLScp
OworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykuc2V0QXR0cmli
dXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJ
TklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxh
Y2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+
CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAmbHQ7c3R5
bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0
PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRp
dj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiPgorICAgICAgICAg
ICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQor
ICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAg
ICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8
c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAg
ICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3ODJkZmM5NmY4ZDljZjE3ZjRhMzIxNmEwMTQ2NGIzNDdkMDYxMDVjLi41
NWEzMjlmMjJmMTI2MzY5YzYyMWMyZTM3MWEyOGY0ZmQ2NTk4ZDIyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzkgQEAKKzIwMTEtMDYtMTMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisK
KyAgICAgICAgSW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIDxzdHlsZSBzY29wZWQ+OgorICAgICAg
ICBDU1NTdHlsZVNlbGVjdG9yIGhvbGRzIGdsb2JhbCBhcyB3ZWxsIGFzIHNjb3BlZCBhdXRob3Ig
c2hlZXRzLgorICAgICAgICBTY29wZWQgYXV0aG9yIHNoZWV0cyBhcmUgbWFwcGVkIGJ5IHRoZWly
IHNjb3BpbmcgZWxlbWVudCAodGhlIHBhcmVudCBlbGVtZW50IG9mIDxzdHlsZSBzY29wZWQ+KS4K
KyAgICAgICAgPHN0eWxlIHNjb3BlZD4gZWxlbWVudHMgcmVnaXN0ZXIgYW5kIHVuLXJlZ2lzdGVy
IHdpdGggdGhlaXIgc2NvcGluZyBwYXJlbnQgZWxlbWVudAorICAgICAgICBpbiBhIGtpbmQgb2Yg
cmVmLWNvdW50aW5nLCBpbiBvcmRlciB0byBhbGxvdyBxdWljayBsb29rLXVwIG9mIHdoZXRoZXIg
YW4gZWxlbWVudCBoYXMgc2NvcGVkIHN0eWxlIGNoaWxkcmVuLgorICAgICAgICBBbHNvLCBwcmV2
ZW50IHN0eWxlIHNoYXJpbmcgZnJvbSBjcm9zc2luZyBpbnRvL291dCBvZiBzY29wZWQgc3R5bGUg
Ym91bmRhcmllcy4KKworICAgICAgICBUZXN0czogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFj
aC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9y
IHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRz
KTogY2xhc3MgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRSdWxlU2V0czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZVNjb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0YWNrRnJhbWUpOiBh
ZGQgc2NvcGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgc3RhY2sgZnJhbWUKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMpOiBtYXRjaCBzY29wZWQg
YXV0aG9yIHJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6
CisgICAgICAgIChXZWJDb3JlOjpsZXNzU3BlY2lmaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKTogcmVmYWN0b3Jpbmcg
dG8gc2ltcGxpZnkgY29kZQorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0luVHJlZVNjb3BlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBh
dm9pZCBjcm9zc2luZyBzY29wZWQgc3R5bGUgYm91bmRhcmllcworICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
b3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVs
ZVNldHM6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlBhcmVudFN0YWNrRnJhbWU6OlBh
cmVudFN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUpOiByZWZhY3RvcmluZyB0
byBzaW1wbGlmeSBjb2RlCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpkb2N1bWVu
dCk6IGRpdHRvCisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiByZWdpc3RlciBh
IDxzdHlsZSBzY29wZWQ+IGNoaWxkCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1bnJlZ2lz
dGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiB1bi1yZWdpc3RlciBhIDxzdHlsZSBzY29wZWQ+IGNo
aWxkCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6
IHF1ZXJ5IHdoZXRoZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCBpcyBwcmVzZW50CisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSk6IGhvbGRzIGlu
Zm9ybWF0aW9uIGFib3V0IDxzdHlsZSBzY29wZWQ+IGNoaWxkcmVuCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UmFyZURhdGE6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiAKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQpOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAgICAg
ICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5
bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogdXBkYXRlIHNjb3BlZCBzdGF0ZSwgW3Vu
LV1yZWdpc3RlciB3aXRoIHBhcmVudCBhcyBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KTogcmVnaXN0ZXJpbmcg
d2l0aCBwYXJlbnQKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnVucmVnaXN0
ZXJXaXRoU2NvcGluZ0VsZW1lbnQpOiB1bi1yZWdpc3RlcmluZyB3aXRoIHBhcmVudAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiByZWdp
c3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OndpbGxSZW1vdmUpOiB1bi1yZWdpc3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZCk6IHF1ZXJ5IHNj
b3BlZCBzdGF0dXMKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BpbmdF
bGVtZW50KTogZ2V0IHNjb3BpbmcgZWxlbWVudAorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50KTogd2hldGhlciB0aGUgPHN0eWxlPiBlbGVtZW50IGlzIHJlZ2lz
dGVyZWQgd2l0aCBpdHMgcGFyZW50LgorCiAyMDExLTA2LTEzICBKYW1lcyBTaW1vbnNlbiAgPHNp
bW9uamFtQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBKYW1lcyBSb2JpbnNv
bi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCBmNWI0YzY1OTBi
MDAwZjY1NzNlMzc5MzYzYjZmODYwN2QzNDMzYjNjLi41ZTQyOGYwMTIzMWNjNjMyODIyYTcwMTZk
OWI4NWFkOWY2YjNiZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3Bw
CkBAIC02Myw4ICs2MywxMCBAQAogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUg
IkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEZyYW1lRWxlbWVudEJhc2UuaCIKKyNpbmNs
dWRlICJIVE1MSGVhZEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKICNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIK
ICNpbmNsdWRlICJMaW5rSGFzaC5oIgpAQCAtMzIzLDE0ICszMjUsMTQgQEAgY2xhc3MgUnVsZVNl
dCB7CiBwdWJsaWM6CiAgICAgUnVsZVNldCgpOwogICAgIH5SdWxlU2V0KCk7Ci0gICAgCisKICAg
ICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIFZlY3RvcjxSdWxlRGF0YT4qPiBB
dG9tUnVsZU1hcDsKLSAgICAKLSAgICB2b2lkIGFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hl
ZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgQ1NTU3R5bGVTZWxlY3RvciogPSAwKTsK
IAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogaXRlbSk7Ci0gICAgdm9pZCBh
ZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBh
ZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOworICAgIHZv
aWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CisKKyAg
ICB2b2lkIGFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqLCBjb25zdCBFbGVtZW50Kik7CisgICAg
dm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CisgICAgdm9pZCBhZGRQ
YWdlUnVsZShDU1NTdHlsZVJ1bGUqLCBDU1NTZWxlY3RvciopOwogICAgIHZvaWQgYWRkVG9SdWxl
U2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKICAgICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOwogICAgIHZv
aWQgc2hyaW5rVG9GaXQoKTsKQEAgLTM1Niw2ICszNTgsMjMgQEAgcHVibGljOgogICAgIGJvb2wg
bV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkOwogfTsKIAorY2xhc3MgU2NvcGVkUnVsZVNldHMgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNjb3BlZFJ1bGVTZXRzKTsKK3B1YmxpYzoKKyAgICBT
Y29wZWRSdWxlU2V0cygpIHsgfQorICAgIH5TY29wZWRSdWxlU2V0cygpOworCisgICAgUnVsZVNl
dCogZ2V0KGNvbnN0IEVsZW1lbnQqIHNjb3BlKSB7IHJldHVybiBtX3Njb3BlZFJ1bGVTZXRNYXAu
Z2V0KHNjb3BlKTsgfQorICAgIFJ1bGVTZXQqIGVuc3VyZUV4aXN0cyhjb25zdCBFbGVtZW50Kik7
CisKKyAgICB2b2lkIGNvbGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50Kiwg
UnVsZVNldCo+IFNjb3BlZFJ1bGVTZXRNYXA7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2Nv
cGVkUnVsZVNldE1hcDsKK307CisKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0
aWMgUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQ
cmludFN0eWxlOwpAQCAtNDI3LDYgKzQ0NiwzOSBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIHJpZ2h0VG9MZWZ0RGVjbGFyYXRpb24oKQogICAgIHJldHVybiByaWdodFRvTGVm
dERlY2wuZ2V0KCk7CiB9CiAKKy8vIERldGVybWluZSB0aGUgc2NvcGUgb2YgYSBzdHlsZSBzaGVl
dCAoaWYgYW55KS4gUmV0dXJucyAnZmFsc2UnIGlmIGl0J3MgYSBzY29wZWQgc3R5bGUgc2hlZXQg
aW4gYW4gaW52YWxpZCBsb2NhdGlvbi4KK3N0YXRpYyBib29sIGRldGVybWluZVNjb3BlKENTU1N0
eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBFbGVtZW50KiYgc2NvcGUpCit7CisgICAgc2NvcGUgPSAw
OworCisgICAgaWYgKCFzaGVldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSog
b3duZXJOb2RlID0gc2hlZXQtPmZpbmRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8
fCAhb3duZXJOb2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OnN0eWxlVGFnKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MU3R5
bGVFbGVtZW50KiBzdHlsZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4o
b3duZXJOb2RlKTsKKyAgICBpZiAoIXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVFbGVtZW50LT5kb2N1
bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IC8vIElnbm9yZSAnc2NvcGVkJyBhdHRyaWJ1dGUgZm9yIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnRz
IHdpdGhpbiA8aGVhZD4uCisgICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gZG9jdW1lbnQtPmhl
YWQoKTsKKyAgICBpZiAoaGVhZCAmJiBoZWFkLT5jb250YWlucyhzdHlsZUVsZW1lbnQpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9IHN0
eWxlRWxlbWVudC0+cGFyZW50T3JIb3N0Tm9kZSgpOworICAgIGlmICghcGFyZW50T3JIb3N0IHx8
ICFwYXJlbnRPckhvc3QtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgc2NvcGUgPSB0b0VsZW1lbnQocGFyZW50T3JIb3N0KTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1l
bnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cywgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxl
bWVudFNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVNo
ZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4q
IHBhZ2VHcm91cFVzZXJTaGVldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCkBAIC00
NjgsOSArNTIwLDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1l
bnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgaWYgKG1fcm9vdERl
ZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9IGFkb3B0UHRyKG5ldyBNZWRp
YVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3LT5mcmFtZSgpLCBtX3Jvb3RE
ZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIG1fYXV0aG9yU3R5bGUgPSBhZG9wdFB0cihuZXcg
UnVsZVNldCk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMgPSBhZG9wdFB0cihuZXcgUnVsZVNl
dCk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMgPSBhZG9wdFB0cihuZXcgU2NvcGVkUnVsZVNl
dHMpOwogICAgIC8vIEFkZGluZyBydWxlcyBmcm9tIG11bHRpcGxlIHNoZWV0cywgc2hyaW5rIGF0
IHRoZSBlbmQuCi0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwor
ICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQgaXMgcmVwYXJzZWQgZXZlcnkg
dGltZSEKICAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHlsZSA9IGFkb3B0UHRyKG5ldyBS
dWxlU2V0KTsKQEAgLTQ4Miw3ICs1MzUsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAg
ICAgICAgICAgaWYgKHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLT5pc1VzZXJTdHlsZVNoZWV0
KCkpCiAgICAgICAgICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFn
ZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7Cisg
ICAgICAgICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJvbVNoZWV0KHBh
Z2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC00OTAsMTUgKzU0MywyNiBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NT
dHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hl
ZQogICAgICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwogCiAgICAg
Ly8gQWRkIHJ1bGVzIGZyb20gZWxlbWVudHMgbGlrZSBTVkcncyA8Zm9udC1mYWNlPgotICAgIGlm
IChtYXBwZWRFbGVtZW50U2hlZXQpCi0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJv
bVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICBpZiAobWFw
cGVkRWxlbWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJWE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVz
IGNhbi9zaG91bGQgYmUgYWRkZWQgaGVyZS4KKyAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMt
PmFkZFJ1bGVzRnJvbVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsK
KyAgICB9CiAKICAgICAvLyBhZGQgc3R5bGVzaGVldHMgZnJvbSBkb2N1bWVudAogICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHN0eWxlU2hlZXRzLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHls
ZVNoZWV0cy0+aXRlbShpKTsKLSAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAm
JiAhc2hlZXQtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0s
IHRoaXMpOworICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+
ZGlzYWJsZWQoKSkgeworICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdGF0
aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpOworICAgICAgICAgICAgY29uc3QgRWxlbWVu
dCogc2NvcGUgPSAwOworCisgICAgICAgICAgICBpZiAoIWRldGVybWluZVNjb3BlKGNzc1NoZWV0
LCBzY29wZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc2Nv
cGUpCisgICAgICAgICAgICAgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmVuc3VyZUV4aXN0cyhz
Y29wZSktPmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3Bl
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxl
cy0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAg
IH0KICAgICB9ICAgIAogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2li
bGluZyBzZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUg
Y3VycmVudCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMg
aW5mb3JtYXRpb24gdG8gcmVqZWN0CkBAIC01MDYsMTEgKzU3MCwxMiBAQCBDU1NTdHlsZVNlbGVj
dG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3Qq
IHN0eWxlU2hlZQogICAgIC8vIFVzdWFsbHkgdGhlcmUgYXJlIG5vIHNpYmxpbmcgcnVsZXMgaW4g
dGhlIGRlZmF1bHQgc3R5bGUgYnV0IHRoZSBNYXRoTUwgc2hlZXQgaGFzIHNvbWUuCiAgICAgaWYg
KHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlKQogICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1
bHRTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIG1fYXV0aG9yU3R5bGUt
PmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+
Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5j
b2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAg
ICBtX3VzZXJTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogCi0gICAgbV9hdXRo
b3JTdHlsZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+c2hyaW5r
VG9GaXQoKTsKICAgICBpZiAobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpCiAgICAgICAgIG1fZmVh
dHVyZXMuc2libGluZ1J1bGVzLT5zaHJpbmtUb0ZpdCgpOwogCkBAIC02MzMsNiArNjk4LDExIEBA
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogcGFy
ZW50KQogICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6
ZSgpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgbV9h
bmNlc3RvcklkZW50aWZpZXJGaWx0ZXItPmFkZChwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVz
W2ldKTsKKyAgICAvLyBQb2ludCB0byBmcmFtZSBjb250YWluaW5nIHRoZSBjbG9zZXN0IHN0eWxl
IHNjb3BlIChvciBsZWF2ZSBhdCAwIGlmIG5vbmUpLgorICAgIGlmIChwYXJlbnQtPmhhc1Njb3Bl
ZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHBhcmVudEZyYW1lLmNsb3Nlc3RTdHlsZVNjb3Bl
RnJhbWUgPSAmcGFyZW50RnJhbWU7CisgICAgZWxzZSBpZiAobV9wYXJlbnRTdGFjay5zaXplKCkg
Pj0gMikKKyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSA9IG1fcGFy
ZW50U3RhY2tbbV9wYXJlbnRTdGFjay5zaXplKCkgLSAyXS5jbG9zZXN0U3R5bGVTY29wZUZyYW1l
OwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnBvcFBhcmVudFN0YWNrRnJhbWUoKQpAQCAt
NjkzLDEzICs3NjMsNjIgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFy
YXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCiAgICAgbV9tYXRjaGVkRGVj
bHMuYXBwZW5kKGRlY2wpOwogfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9y
UnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1
ZGVFbXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICAvLyBN
YXRjaCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAgIG1hdGNoUnVsZVNldChtX2dsb2JhbEF1dGhv
clN0eWxlcy5nZXQoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICAvLyBNYXRjaCBzY29wZWQgc3R5bGUgc2hlZXQncyBydWxlcy4KKyAgICBp
ZiAoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYmIG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1l
bnQgPT0gbV9wYXJlbnROb2RlKSB7CisgICAgICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5j
bG9zaW5nIHNjb3BlcyBkaXJlY3RseSBmcm9tIHBhcmVudCBzdGFjaworICAgICAgICAvLyAoYnV0
IHN0YXJ0IHdpdGggY3VycmVudCBlbGVtZW50KS4KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQobV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChy
dWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJzdFJ1bGVJ
bmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB9CisgICAg
ICAgIFBhcmVudFN0YWNrRnJhbWUqIHNjb3BlRnJhbWUgPSBtX3BhcmVudFN0YWNrLmxhc3QoKS5j
bG9zZXN0U3R5bGVTY29wZUZyYW1lOworICAgICAgICB3aGlsZSAoc2NvcGVGcmFtZSkgeworICAg
ICAgICAgICAgY29uc3QgRWxlbWVudCogc2NvcGUgPSBzY29wZUZyYW1lLT5lbGVtZW50OworICAg
ICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQoc2Nv
cGUpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxl
U2V0KHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgICAgICAgICBpZiAoc2NvcGVGcmFtZSA9PSAmbV9wYXJlbnRTdGFjay5maXJz
dCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLS1zY29wZUZyYW1lOwor
ICAgICAgICAgICAgc2NvcGVGcmFtZSA9IHNjb3BlRnJhbWUtPmNsb3Nlc3RTdHlsZVNjb3BlRnJh
bWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvLyBTbG93IGJyYW5jaDogY2xp
bWIgdHJlZSwgY2hlY2sgZm9yIHN0eWxlIHNjb3BlcyBhdCBldmVyeSBlbGVtZW50LgorICAgICAg
ICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQ7IG5vZGU7IG5vZGUgPSBub2RlLT5w
YXJlbnRPckhvc3ROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+aXNFbGVtZW50Tm9k
ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgY29uc3QgRWxlbWVu
dCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgIGlmICghZWxlbWVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Z2V0KGVs
ZW1lbnQpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hS
dWxlU2V0KHJ1bGVTZXQsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVk
UnVsZXMobV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSk7Cit9CisKIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0
Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBpZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCiAgICAg
ICAgIHJldHVybjsKKworICAgIG1hdGNoUnVsZVNldChydWxlcywgZmlyc3RSdWxlSW5kZXgsIGxh
c3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRj
aGVkUnVsZXMobV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSk7Cit9CiAgICAgCit2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldChSdWxlU2V0KiBydWxlcywgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQorewog
ICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBh
bmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRo
ZSBidWZmZXIuCiAgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKQEAgLTcxOCwyNCArODM3LDM0
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlcyhSdWxlU2V0KiBydWxlcywgaW50
JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0CiAgICAgfQogICAgIG1hdGNoUnVsZXNGb3JMaXN0
KHJ1bGVzLT5nZXRUYWdSdWxlcyhtX2VsZW1lbnQtPmxvY2FsTmFtZSgpLmltcGwoKSksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgbWF0Y2hS
dWxlc0Zvckxpc3QocnVsZXMtPmdldFVuaXZlcnNhbFJ1bGVzKCksIGZpcnN0UnVsZUluZGV4LCBs
YXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Ci0gICAgCit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBsZXNzU3BlY2lmaWMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSog
cjIpCit7CisgICAgdW5zaWduZWQgc3BlY2lmaWNpdHkxID0gcjEtPnNwZWNpZmljaXR5KCk7Cisg
ICAgdW5zaWduZWQgc3BlY2lmaWNpdHkyID0gcjItPnNwZWNpZmljaXR5KCk7CisgICAgcmV0dXJu
IChzcGVjaWZpY2l0eTEgPT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBv
c2l0aW9uKCkgOiBzcGVjaWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7IAorfQorCit2b2lkIENTU1N0
eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhib29sIGNvbGxlY3RSdWxl
c09ubHkpCit7CiAgICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9u
ZS4KICAgICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgCisKICAgICAvLyBTb3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0
Y2hlZFJ1bGVzKCk7Ci0gICAgCisgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCks
IG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBsZXNzU3BlY2lmaWMpOworCiAgICAgLy8gTm93IHRyYW5z
ZmVyIHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgot
ICAgIGlmICghbV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAg
ICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFy
YXRpb24oKSk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoY29sbGVjdFJ1bGVzT25seSkgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKysp
IHsKICAgICAgICAgICAgIGlmICghbV9ydWxlTGlzdCkKICAgICAgICAgICAgICAgICBtX3J1bGVM
aXN0ID0gQ1NTUnVsZUxpc3Q6OmNyZWF0ZSgpOwogICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBw
ZW5kKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCkpOwogICAgICAgICB9CisgICAgfSBlbHNlIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsg
aSsrKQorICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwogICAgIH0KIH0KIApAQCAtNzc5LDEyICs5MDgsMTUg
QEAgaW5saW5lIGJvb2wgTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkK
IAogYm9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsK
IAotaW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29wZShUcmVlU2NvcGUqIHRyZWVT
Y29wZSwgYm9vbCBydWxlUmVhY2hlc0ludG9TaGFkb3dET00pCitpbmxpbmUgc3RhdGljIGJvb2wg
bWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlLCBjb25zdCBFbGVtZW50KiBz
dHlsZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTSkKIHsKLSAgICByZXR1cm4g
TWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkgfHwgdHJlZVNjb3BlLT5h
cHBseUF1dGhvclNoZWV0cygpIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsKKyAgICByZXR1
cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAgfHwg
dHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpCisgICAgICAgIHx8IChzdHlsZVNjb3BlICYm
IHN0eWxlU2NvcGUtPnRyZWVTY29wZSgpID09IHRyZWVTY29wZSkKKyAgICAgICAgfHwgcnVsZVJl
YWNoZXNJbnRvU2hhZG93RE9NOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVs
ZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMsIGNvbnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUpCiB7CiAgICAgaWYgKCFy
dWxlcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzk4LDcgKzkzMCw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMs
IGludCYgZmlyCiAgICAgICAgIGlmIChjYW5Vc2VGYXN0UmVqZWN0ICYmIGZhc3RSZWplY3RTZWxl
Y3RvcihydWxlRGF0YSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgaWYgKGNoZWNr
U2VsZWN0b3IocnVsZURhdGEpKSB7Ci0gICAgICAgICAgICBpZiAoIW1hdGNoZXNJblRyZWVTY29w
ZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBtX2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxl
bWVudHMpKQorICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50
cmVlU2NvcGUoKSwgc3R5bGVTY29wZSwgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1l
bnRzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIC8vIElmIHRoZSBy
dWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9u
LWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5y
dWxlKCk7CkBAIC04MjcsMTggKzk1OSw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyCiAgICAg
fQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFyZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiBy
MSwgY29uc3QgUnVsZURhdGEqIHIyKQotewotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MSA9IHIx
LT5zcGVjaWZpY2l0eSgpOwotICAgIHVuc2lnbmVkIHNwZWNpZmljaXR5MiA9IHIyLT5zcGVjaWZp
Y2l0eSgpOwotICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNwZWNpZmljaXR5MikgPyByMS0+
cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNpdHkxIDwgc3BlY2lmaWNpdHky
OyAKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0TWF0Y2hlZFJ1bGVzKCkKLXsKLSAg
ICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCks
IGNvbXBhcmVSdWxlcyk7Ci19Ci0KIGlubGluZSBFSW5zaWRlTGluayBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0ZShFbGVtZW50KiBlbGVtZW50KSBj
b25zdAogewogICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVudC0+aXNMaW5rKCkpCkBAIC05NzYs
NiArMTA5Niw4IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxl
bWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDCiAgICAgICAgIHJldHVybiAwOwog
ICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICByZXR1cm4gMDsKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5bGVk
RWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAgICAg
ICByZXR1cm4gMDsKQEAgLTk5MSw4ICsxMTEzLDEwIEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6
OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVD
CiAgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRocmVz
aG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCiAgICAgdmlzaXRlZE5vZGVDb3VudCArPSBjU3R5
bGVTZWFyY2hUaHJlc2hvbGQ7CiAgICAgd2hpbGUgKHRoaXNDb3VzaW4pIHsKLSAgICAgICAgd2hp
bGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZTsgY3VycmVudE5v
ZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICsrc3Vi
Y291bnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0
b0VsZW1lbnQoY3VycmVudE5vZGUpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5kZXJT
dHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKSkgewogICAg
ICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgogICAgICAg
ICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0gc3Vi
Y291bnQ7CkBAIC0xMDAwLDcgKzExMjQsNiBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2Nh
dGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN1YmNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVz
aG9sZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGN1cnJlbnROb2Rl
ID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICB9CiAgICAgICAgIGN1
cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlzdCh0aGlzQ291c2luLT5wYXJlbnRFbGVtZW50KCks
IHZpc2l0ZWROb2RlQ291bnQpOwogICAgICAgICB0aGlzQ291c2luID0gY3VycmVudE5vZGU7CkBA
IC0xMDY5LDYgKzExOTIsOSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVX
aXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYm
IG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChlbGVtZW50
LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKICAg
ICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKQEAg
LTExNzAsNiArMTI5Niw4IEBAIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2Vs
ZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHBh
cmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4g
MDsKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0
aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTE0NDgsNyArMTU3Niw3
IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxl
bWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsCiAgICAgCiAgICAgICAgIC8vIDYuIENoZWNrIHRo
ZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9y
QW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQo
KSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICAgICAg
bWF0Y2hBdXRob3JSdWxlcyhmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxzZSk7
CiAKICAgICAgICAgLy8gNy4gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRlLgog
ICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVtZW50
KSB7CkBAIC0xNjY4LDcgKzE3OTYsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHls
ZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogCiAgICAg
aWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CiAgICAgICAgIG1hdGNoUnVsZXMobV91
c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAg
ICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFz
dEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdFVzZXJS
dWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVj
bHMuaXNFbXB0eSgpICYmICF2aXNpdGVkU3R5bGUpCkBAIC0xNzM3LDcgKzE4NjUsOCBAQCBQYXNz
UmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBh
Z2VJbmRleCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAg
ICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFn
ZSk7CiAgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJz
dCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0
LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgUnVsZVNl
dCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KKyAgICBtYXRjaFBhZ2VS
dWxlcyhtX2dsb2JhbEF1dGhvclN0eWxlcy5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsK
ICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4o
ZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogCkBAIC0yMDI5LDcgKzIxNTgs
NyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHls
ZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxl
cyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxh
c3RBdXRob3JSdWxlID0gLTE7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQo
KSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0
eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdEF1dGhvclJ1bGUsIGxh
c3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAg
IG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMzE2NCw3ICsz
MjkzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENT
U1NlbGVjdG9yKiBzZWwpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNl
bCwgbV9wYWdlUnVsZXMuc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1l
ZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK3ZvaWQgUnVsZVNldDo6YWRk
UnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIG1lZGl1bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgRWxl
bWVudCogc2NvcGUpCiB7CiAgICAgaWYgKCFzaGVldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMzE3
OSwxMSArMzMwOCwxMSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxl
U2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0
ZW0oaSk7CiAgICAgICAgIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRk
U3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKKyAgICAgICAgICAg
IGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSwgc2NvcGUpOwog
ICAgICAgICBlbHNlIGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NT
SW1wb3J0UnVsZSogaW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGl0ZW0pOwog
ICAgICAgICAgICAgaWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0LT5t
ZWRpYSgpLCBzdHlsZVNlbGVjdG9yKSkKLSAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVl
dChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBz
dHlsZVNlbGVjdG9yLCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaXRlbS0+
aXNNZWRpYVJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiByID0gc3RhdGljX2Nh
c3Q8Q1NTTWVkaWFSdWxlKj4oaXRlbSk7CkBAIC0zMTk1LDcgKzMzMjQsNyBAQCB2b2lkIFJ1bGVT
ZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJgogICAgICAgICAgICAgICAgICAgICBDU1NSdWxlICpjaGlsZEl0ZW0gPSBy
dWxlcy0+aXRlbShqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSXRlbS0+aXNTdHls
ZVJ1bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBTdHlsZVJ1bGUs
IHNvIGFwcGVuZCBpdCB0byBvdXIgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgYWRkU3R5
bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNoaWxkSXRlbSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNo
aWxkSXRlbSksIHNjb3BlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZEl0
ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19j
YXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7CkBAIC0zMjE3LDExICszMzQ2LDE0IEBA
IHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNv
bnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAKLXZv
aWQgUnVsZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3ZvaWQgUnVsZVNl
dDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgY29uc3QgRWxlbWVudCogc2NvcGUp
CiB7CiAgICAgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkgewotICAgICAgICBDU1NQYWdlUnVsZSog
cGFnZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOwotICAgICAgICBhZGRQ
YWdlUnVsZShwYWdlUnVsZSwgcGFnZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAg
ICAgICAvLyBJZ25vcmUgQHBhZ2UgcnVsZXMgaWYgdGhlIHN0eWxlIHNoZWV0IGlzIHNjb3BlZAor
ICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUg
PSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgYWRkUGFnZVJ1
bGUocGFnZVJ1bGUsIHBhZ2VSdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAg
fQogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxl
Y3Rvckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQogICAg
ICAgICAgICAgYWRkUnVsZShydWxlLCBzKTsKQEAgLTMzMjQsNiArMzQ1NiwyNyBAQCB2b2lkIFJ1
bGVTZXQ6OnNocmlua1RvRml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQog
CitTY29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1
ZXMobV9zY29wZWRSdWxlU2V0TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVu
c3VyZUV4aXN0cyhjb25zdCBFbGVtZW50KiBzY29wZSkKK3sKKyAgICBSdWxlU2V0KiBydWxlU2V0
ID0gbV9zY29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7CisgICAgaWYgKCFydWxlU2V0KSB7Cisg
ICAgICAgIHJ1bGVTZXQgPSBuZXcgUnVsZVNldDsKKyAgICAgICAgbV9zY29wZWRSdWxlU2V0TWFw
LnNldChzY29wZSwgcnVsZVNldCk7CisgICAgfQorICAgIHJldHVybiBydWxlU2V0OworfQorCit2
b2lkIFNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVh
dHVyZXMmIGZlYXR1cmVzKSBjb25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29u
c3RfaXRlcmF0b3IgaXQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Nj
b3BlZFJ1bGVTZXRNYXAuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vj
b25kLT5jb2xsZWN0RmVhdHVyZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFw
cGx5IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCkBAIC0zNDEyLDE3ICsz
NTY1LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiBy
dWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRQYWdlUnVsZXMoKSwgaXNMZWZ0UGFnZSwg
aXNGaXJzdFBhZ2UsIHBhZ2VOYW1lKTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBhbnkg
cnVsZXMsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0g
ICAgc29ydE1hdGNoZWRSdWxlcygpOwotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgYWRkTWF0
Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkp
OworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhmYWxzZSk7CiB9CiAKIHZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0
YT4qIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmlu
ZyYgcGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAzMmVi
NmY2OWNmOTBmZmViMjgyYzk0Zjg0MDIwODMyYWZjMDU1ZTRjLi40YTE2ODI2NTg4NDBkNGRhYWNm
NGMzYzUxMTE3YTMzMjJlMzQxNjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9y
LmgKQEAgLTYxLDYgKzYxLDcgQEAgY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKIGNsYXNzIE5v
ZGU7CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVTZXQ7CitjbGFzcyBTY29wZWRSdWxlU2V0
czsKIGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlU2hlZXQ7
CkBAIC0yMTQsMTAgKzIxNSwxNSBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgYWRkTWF0Y2hlZFJ1
bGUoY29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9
CiAgICAgICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsKTsKIAorICAgICAgICAvLyBtYXRjaEF1dGhvclJ1bGVzOiBNYXRjaCBhbGwg
Z2xvYmFsIGFuZCBhcHBsaWNhYmxlIHNjb3BlZCBhdXRob3ItZGVmaW5lZCBydWxlcy4KKyAgICAg
ICAgdm9pZCBtYXRjaEF1dGhvclJ1bGVzKGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIC8vIG1hdGNoUnVsZXM6
IG1hdGNoZXMgdnMuIGFsbCBydWxlcyBpbiB0aGUgcGFzc2VkLWluIFJ1bGVTZXQuCiAgICAgICAg
IHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0
UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgdm9pZCBtYXRjaFJ1
bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgLy8g
SW1wbGVtZW50YXRpb24gbWV0aG9kczoKKyAgICAgICAgdm9pZCBtYXRjaFJ1bGVTZXQoUnVsZVNl
dCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcywgY29uc3QgRWxlbWVudCogc3R5bGVTY29wZSA9IDApOwogICAg
ICAgICBib29sIGZhc3RSZWplY3RTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpIGNvbnN0OwotICAg
ICAgICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKKyAgICAgICAgdm9pZCBzb3J0QW5kVHJhbnNm
ZXJNYXRjaGVkUnVsZXMoYm9vbCBjb2xsZWN0UnVsZXNPbmx5KTsKICAgICAgICAgCiAgICAgICAg
IGJvb2wgY2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYpOwogCkBAIC0yMzAsMTcgKzIzNiwx
OSBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29u
c3QgeyByZXR1cm4gIWlzTGVmdFBhZ2UocGFnZUluZGV4KTsgfQogICAgICAgICBib29sIGlzRmly
c3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgICAgICBTdHJpbmcgcGFnZU5hbWUoaW50
IHBhZ2VJbmRleCkgY29uc3Q7Ci0gICAgICAgIAotICAgICAgICBPd25QdHI8UnVsZVNldD4gbV9h
dXRob3JTdHlsZTsKKworICAgICAgICBPd25QdHI8UnVsZVNldD4gbV9nbG9iYWxBdXRob3JTdHls
ZXM7CisgICAgICAgIE93blB0cjxTY29wZWRSdWxlU2V0cz4gbV9zY29wZWRBdXRob3JTdHlsZXM7
CiAgICAgICAgIE93blB0cjxSdWxlU2V0PiBtX3VzZXJTdHlsZTsKIAogICAgICAgICBGZWF0dXJl
cyBtX2ZlYXR1cmVzOwogCiAgICAgICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKICAgICAg
ICAgICAgIFBhcmVudFN0YWNrRnJhbWUoKSB7fQotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFt
ZShFbGVtZW50KiBlbGVtZW50KSA6IGVsZW1lbnQoZWxlbWVudCkge30KKyAgICAgICAgICAgIFBh
cmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpLCBjbG9z
ZXN0U3R5bGVTY29wZUZyYW1lKDApIHsgfQogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsK
ICAgICAgICAgICAgIFZlY3Rvcjx1bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKKyAgICAg
ICAgICAgIFBhcmVudFN0YWNrRnJhbWUqIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiAgICAgICAg
IH07CiAgICAgICAgIFZlY3RvcjxQYXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwogICAg
ICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCAyZmMzZjQ4YzAzZWQ4
NGViNTNhNjYzOWZmODQxYWI2MTE2YzA0YjM1Li4yN2U1NGQxMzA5ZDcwZWM0NjBkODE5MWMwNTRm
YmU4NWZhMmMwY2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0yMzYs
MjQgKzIzNiwyNiBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVl
dCgpCiAgICAgICAgIG93bmVyLT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAotRG9j
dW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK05vZGUqIENTU1N0eWxlU2hlZXQ6OmZp
bmRPd25lck5vZGUoKSBjb25zdAogewotICAgIFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0aGlz
OwotICAgIHdoaWxlIChzdHlsZU9iamVjdCkgeworICAgIGZvciAoY29uc3QgU3R5bGVCYXNlKiBz
dHlsZU9iamVjdCA9IHRoaXM7IHN0eWxlT2JqZWN0OyBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0
LT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoc3R5bGVPYmplY3QtPmlzQ1NTU3R5bGVTaGVldCgp
KSB7Ci0gICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNo
ZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIG93bmVy
Tm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU1N0eWxlU2hlZXQqPihzdHlsZU9iamVjdCktPm93
bmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKG93bmVyTm9kZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gb3duZXJOb2RlLT5kb2N1bWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBvd25l
ck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5pc1J1bGUoKSkKLSAg
ICAgICAgICAgIHN0eWxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlT2JqZWN0
KS0+cGFyZW50U3R5bGVTaGVldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZU9i
amVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQoKTsKICAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0K
IAorRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK3sKKyAgICBOb2RlKiBvd25l
ck5vZGUgPSBmaW5kT3duZXJOb2RlKCk7CisKKyAgICByZXR1cm4gb3duZXJOb2RlID8gb3duZXJO
b2RlLT5kb2N1bWVudCgpIDogMDsKK30KKworCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hl
ZXRDaGFuZ2VkKCkKIHsKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNoZWV0LmgKaW5kZXggMzVhNDUxMDJkMWViNmIyZDY5MmNkYjE0MTU1M2NmYzkxMWU3
Yjg3Yy4uZTRiNWEwYmQ2ZTc4YzJjY2Q5ODBmZDNhNmY5NjhjMTcwNGExM2I4NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5oCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVl
dCgpOwogCisgICAgTm9kZSogZmluZE93bmVyTm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50KiBk
b2N1bWVudCgpOwogCiAgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9jaGFyc2V0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAppbmRleCAyZTU4Njg4MTk3
NGVlOTNmZTE0ZWIxNDRhOTAxYWU5YzIzMWIzMzkwLi4zZTYwZTk0ZTQ0MDAzNTZmYTQ0MWY1NzQw
ODU5NDJjMDMwOTE3NTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVy
Tm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTgwLDcg
KzgwLDcgQEAgcHVibGljOgogICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJO
b2RlKik7CiAKICAgICB2b2lkIGNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlKiBjbG9uZSk7
Ci0gICAgCisKICAgICBib29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYg
c291cmNlVVJMKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNh
bGMoU3R5bGVDaGFuZ2VUeXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAppbmRleCBlMWQ5MDhhMjgwZjViZDM3YmExZDAyYzQ3OWRlODYzMmViNDYxMGY3Li5lZTIwOTYz
ZTM0NDE1MDBiYTU2MDgwZmZkNTIyZDQzNmIyZGIzZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CkBAIC0xMzQ2LDYgKzEzNDYsMjMgQEAgdm9pZCBFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9v
bCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWYKICAgICAgICAg
Y2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKHRoaXMsIHJlbmRlclN0eWxlKCksIGZhbHNlLCBi
ZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogfQogCit2b2lkIEVs
ZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIGVuc3VyZVJhcmVE
YXRhKCktPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKK30KKwordm9pZCBFbGVtZW50
Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFTU0VSVChoYXNSYXJl
RGF0YSgpKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+dW5y
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK2Jvb2wgRWxlbWVudDo6aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpICYm
IHJhcmVEYXRhKCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKIHZvaWQgRWxlbWVu
dDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQogewogICAgIGNsZWFySXNQYXJzaW5nQ2hpbGRyZW5G
aW5pc2hlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZTE0ZTQ4YjhlMjM0MjRiZDRmMDY1Njk3
MjQwNGFlNGYyOTNiMDhkZC4uNWYyNzU2OTQxYzcxZDBlYWVmOWU1YjljY2M3ZDJhMWUyZDUyNzcx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yMzYsNiArMjM2LDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogCisg
ICAgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgdm9pZCB1bnJlZ2lz
dGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNo
aWxkKCkgY29uc3Q7CisKICAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9
IE5PUFNFVURPKTsKIAogICAgIEF0b21pY1N0cmluZyBjb21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2Uo
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaAppbmRleCA1YTY1ZWRiN2Ux
MWM3YmRhOTA1Y2FkNjZkYTY4NjY3MjI1ZDU1MTc4Li5kNTc1MDM3Y2YzYjk4ZDQ3Yzc2YjkyN2Rj
ZjAwN2ZiZDdiMzQ1NWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJh
cmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCkBAIC0z
OSw2ICszOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZSgpOwog
CisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgdm9pZCB1bnJl
Z2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBib29sIGhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkgY29uc3Q7CisKICAgICB1c2luZyBOb2RlUmFyZURhdGE6Om5lZWRzRm9jdXNBcHBl
YXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6c2V0
TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CiAKQEAgLTQ5LDYgKzUz
LDggQEAgcHVibGljOgogICAgIE93blB0cjxEYXRhc2V0RE9NU3RyaW5nTWFwPiBtX2RhdGFzZXRE
T01TdHJpbmdNYXA7CiAgICAgT3duUHRyPENsYXNzTGlzdD4gbV9jbGFzc0xpc3Q7CiAKKyAgICB1
bnNpZ25lZCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47CisKICNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCiAgICAgYm9vbCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQ7CiAj
ZW5kaWYKQEAgLTYyLDYgKzY4LDcgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXpl
Rm9yUmVzaXppbmcoKQogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkK
ICAgICA6IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNp
emluZygpKQogICAgICwgbV9zaGFkb3dSb290KDApCisgICAgLCBtX251bWJlck9mU2NvcGVkSFRN
TFN0eWxlQ2hpbGRyZW4oMCkKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgLCBtX2Nv
bnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQoZmFsc2UpCiAjZW5kaWYKQEAgLTc4LDUgKzg1LDIxIEBA
IGlubGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKCkKICAgICBt
X2NvbXB1dGVkU3R5bGUuY2xlYXIoKTsKIH0KIAoraW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRh
OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICArK21fbnVtYmVyT2ZTY29w
ZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30KKworaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjp1
bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFTU0VSVChtX251bWJlck9m
U2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW4gPiAwKTsKKyAgICAtLW1fbnVtYmVyT2ZTY29wZWRIVE1M
U3R5bGVDaGlsZHJlbjsKK30KKworaW5saW5lIGJvb2wgRWxlbWVudFJhcmVEYXRhOjpoYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRI
VE1MU3R5bGVDaGlsZHJlbjsKK30KKwogfQogI2VuZGlmIC8vIEVsZW1lbnRSYXJlRGF0YV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IDE2NzllOTZhMDBh
NGYzNDExYTlmZTBhYjc3ODFlYmE3NjQ3ZGIyNTIuLjQ4Zjk1MDVmNmZiNjZkOGE1YjBiMTY4MTY3
YmMzMjk0MDEzMjRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJp
YnV0ZU5hbWVzLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVz
LmluCkBAIC0yNjUsNiArMjY1LDcgQEAgcnVsZXMKIHNhbmRib3gKIHNjaGVtZQogc2NvcGUKK3Nj
b3BlZAogc2Nyb2xsYW1vdW50CiBzY3JvbGxkZWxheQogc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAppbmRleCAwZjI1NmUxNWJiM2IyZGZmZGQwZjdmNGRm
ZmRmZjM4NTRjYmY3MTU4Li5mZmNmYjU5ZDViZTcwODIzMGYwZDY4Mjk1ZjFhYjQ4M2NkNGQ1MDcz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5j
bHVkZSAiU2NyaXB0RXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVu
dFBhcnNlci5oIgpAQCAtMzgsNiArMzksNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwog
aW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikK
ICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogICAgICwgU3R5bGVFbGVtZW50
KGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIpCisgICAgLCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29w
aW5nRWxlbWVudChmYWxzZSkKIHsKICAgICBBU1NFUlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwog
fQpAQCAtNTcsMTIgKzU5LDUwIEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0
bGVBdHRyICYmIG1fc2hlZXQpCiAgICAgICAgIG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVl
KCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzY29wZWRBdHRyKSB7CisgICAgICAg
IEVsZW1lbnQqIHNjb3BlID0gc2NvcGluZ0VsZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNjb3Bl
IHx8ICFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCk7CisgICAgICAgIGlmIChzY29w
ZSkgeworICAgICAgICAgICAgaWYgKHNjb3BlZCgpKQorICAgICAgICAgICAgICAgIHJlZ2lzdGVy
V2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
dW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgICAgICAgICAgc2NvcGUtPnNldE5l
ZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYm
ICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYgZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUp
OworICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25iZWZvcmVwcm9jZXNzQXR0
cikKICAgICAgICAgc2V0QXR0cmlidXRlRXZlbnRMaXN0ZW5lcihldmVudE5hbWVzKCkuYmVmb3Jl
cHJvY2Vzc0V2ZW50LCBjcmVhdGVBdHRyaWJ1dGVFdmVudExpc3RlbmVyKHRoaXMsIGF0dHIpKTsK
ICAgICBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KIAordm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nRWxlbWVu
dCgpCit7CisgICAgQVNTRVJUKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCk7Cisg
ICAgaWYgKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCkgeworICAgICAgICBFbGVt
ZW50KiBzY29wZSA9IHNjb3BpbmdFbGVtZW50KCk7CisgICAgICAgIGlmICghc2NvcGUpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2NvcGUtPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKTsKKyAgICAgICAgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQgPSB0cnVl
OworICAgIH0KK30KKwordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3Bp
bmdFbGVtZW50KCkKK3sKKyAgICBBU1NFUlQobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1l
bnQgfHwgIXNjb3BlZCgpKTsKKyAgICBpZiAobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1l
bnQpIHsKKyAgICAgICAgRWxlbWVudCogc2NvcGUgPSBzY29waW5nRWxlbWVudCgpOworICAgICAg
ICBBU1NFUlQoc2NvcGUpOworICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICBzY29wZS0+
dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50ID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEhUTUxTdHlsZUVs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiB7CiAgICAgU3R5bGVFbGVtZW50OjpmaW5p
c2hQYXJzaW5nQ2hpbGRyZW4odGhpcyk7CkBAIC03MSwxMCArMTExLDE3IEBAIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKIAogdm9pZCBIVE1MU3R5bGVFbGVt
ZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7CisgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ0Vs
ZW1lbnQoKTsKICAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBT
dHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQog
Cit2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OndpbGxSZW1vdmUoKQoreworICAgIHVucmVnaXN0ZXJX
aXRoU2NvcGluZ0VsZW1lbnQoKTsKKyAgICBIVE1MRWxlbWVudDo6d2lsbFJlbW92ZSgpOworfQor
CiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIEhU
TUxFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCk7CkBAIC0xMjAsNCArMTY3LDI5IEBAIHZv
aWQgSFRNTFN0eWxlRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBzZXREaXNhYmxlZCkKICAgICAg
ICAgc3R5bGVTaGVldC0+c2V0RGlzYWJsZWQoc2V0RGlzYWJsZWQpOwogfQogCitib29sIEhUTUxT
dHlsZUVsZW1lbnQ6OnNjb3BlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1
dGUoc2NvcGVkQXR0cik7Cit9CisKK0VsZW1lbnQqIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BpbmdF
bGVtZW50KCkgY29uc3QKK3sKKyAgICBpZiAoIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVt
ZW50ICYmICFzY29wZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVGhp
cyBwcm9iYWJseSBuZWVkcyB0byBiZSByZWZpbmVkIGZvciBzY29wZWQgc3R5bGVzaGVldHMgd2l0
aGluIHNoYWRvdyBET00uCisgICAgLy8gQXMgd3JpdHRlbiwgc3VjaCBhIHN0eWxlc2hlZXQgY291
bGQgc3R5bGUgdGhlIGhvc3QgZWxlbWVudCwgYXMgd2VsbCBhcyBjaGlsZHJlbiBvZiB0aGUgaG9z
dC4KKyAgICAvLyBPVE9ILCB0aGlzIHBhdmVzIHRoZSB3YXkgZm9yIGEgOmJvdW5kLWVsZW1lbnQg
aW1wbGVtZW50YXRpb24uCisgICAgQ29udGFpbmVyTm9kZSogcGFyZW50T3JIb3N0ID0gcGFyZW50
T3JIb3N0Tm9kZSgpOworICAgIGlmICghcGFyZW50T3JIb3N0IHx8ICFwYXJlbnRPckhvc3QtPmlz
RWxlbWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBJZ25vcmUgJ3Njb3Bl
ZCcgYXR0cmlidXRlIG9uIDxzdHlsZT4gZWxlbWVudHMgd2l0aGluIDxoZWFkPi4KKyAgICBIVE1M
SGVhZEVsZW1lbnQqIGhlYWQgPSBkb2N1bWVudCgpLT5oZWFkKCk7CisgICAgaWYgKGhlYWQgJiYg
aGVhZC0+Y29udGFpbnModGhpcykpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIHRv
RWxlbWVudChwYXJlbnRPckhvc3QpOworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxl
RWxlbWVudC5oCmluZGV4IGFmMjgwODVkYmJiZjQ1ZWQ3Y2RkNGJkMjRmNGRmNGZkZGZmZTRlMWYu
LjcyYWI4MjgzYjI1MjRiMWQyZGRlZGE5YTcxMDQ0OTE4NTI5NGQxNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBAIC00MiwxMiArNDIsMTcgQEAgcHVibGljOgogICAg
IGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2FibGVkKGJvb2wpOwogCisg
ICAgYm9vbCBzY29wZWQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBzY29waW5nRWxlbWVudCgpIGNv
bnN0OworICAgIGJvb2wgaXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7IH0KKwogcHJpdmF0ZToKICAg
ICBIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIC8vIG92ZXJsb2FkIGZyb20gSFRNTEVsZW1lbnQKICAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKik7CiAgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHdpbGxS
ZW1vdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1bWVudCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIgPSBmYWxzZSwg
Tm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2UgPSAwLCBpbnQgY2hpbGRD
b3VudERlbHRhID0gMCk7CiAKQEAgLTYxLDYgKzY2LDExIEBAIHByaXZhdGU6CiAKICAgICB2aXJ0
dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworCisgICAgdm9pZCByZWdpc3RlcldpdGhTY29w
aW5nRWxlbWVudCgpOworICAgIHZvaWQgdW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOwor
CisgICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudDsKIH07CiAKIH0gLy9u
YW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>101982</attachid>
            <date>2011-07-26 02:56:03 -0700</date>
            <delta_ts>2011-07-27 00:28:47 -0700</delta_ts>
            <desc>Work-in-progress</desc>
            <filename>scoped.patch</filename>
            <type>text/plain</type>
            <size>75076</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMzliYWQ4Li4yNzM1NWFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDct
MjYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1w
bGVtZW50IEhUTUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUg
c2NvcGVkPjoKKyAgICAgICAgLSkgYmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcv
dW4tc2V0dGluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0
aW5nL3JlbW92aW5nIGEgd2hvbGUgPHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICog
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1s
OiBBZGRlZC4KKwogMjAxMS0wNy0yNiAgTm9lbCBHb3Jkb24gIDxub2VsLmdvcmRvbkBnbWFpbC5j
b20+CiAKICAgICAgICAgQWRkIHJlZ3Jlc3Npb24gdGVzdCBmb3IgOmVtcHR5IHsgZGlzcGxheTog
bm9uZSB9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0
YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRh
Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmZTA2
NzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQt
YXR0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGF0dGFjaGluZyBhIG5l
dyA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitU
ZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2Io
MCwgMCwgMCkKK1MyOiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwg
MCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BF
RD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwg
MCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAw
LCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtYXR0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAz
ZGY1NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC1hdHRhY2guaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgor
PGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5j
dGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyAr
ICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwor
ICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1
dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAg
IH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAg
dGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdT
MicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVu
VGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7
CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIEFU
VEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxl
bSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICBzdHlsZUVs
ZW0uc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHN0eWxlRWxlbS5p
bm5lckhUTUwgPSAnZGl2IHsgY29sb3I6IHJlZDsgfSBwIHsgY29sb3I6IGdyZWVuOyB9JzsKKyAg
ICAgICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0eWxlRWxlbSwgZGl2RWxlbS5maXJzdENo
aWxkKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg
ICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOwor
ICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAg
ICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRl
eHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBh
dHRhY2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2
PgorICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+
VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3BhbiBp
ZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAg
IDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48
L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJlZmZkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1Rlc3Qg
PHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisK
K1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0
CitUZXh0CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJn
YigwLCAwLCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQorCitTMjogcmdi
KDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAyNTUpCitFMjog
cmdiKDI1NSwgMCwgMCkKKworUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorUjM6
IHJnYigwLCAwLCAwKQorRTM6IHJnYigwLCAwLCAwKQorCitTNDogcmdiKDAsIDAsIDApCitQNDog
cmdiKDAsIDAsIDApCitSNDogcmdiKDAsIDAsIDApCitFNDogcmdiKDAsIDAsIDApCistLS0gRklO
SVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJjMjNhYwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCkBA
IC0wLDAgKzEsODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyku
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAg
dmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2co
aWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBu
dWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIENPTVBVVEVEIFNUWUxFUyAtLS0n
KTsKKworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdSMScpOworICAgICAgICAgICAgdGVzdCgnRTEnKTsKKyAgICAgICAg
ICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgn
UDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1IyJyk7CisgICAgICAgICAgICB0ZXN0KCdFMicpOwor
ICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAg
ICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAgICAgICAgIHRlc3Qo
J0UzJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgnUzQnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdSNCcpOworICAgICAgICAg
ICAgdGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7Cisg
ICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgorICAg
ICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5
IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0eWxlIHNjb3BlZCZndDs8
L3A+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9z
cGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjEi
IGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTEiIGNsYXNzPSJiYXoi
PlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8
ZGl2PgorICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAg
ICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgICAgIHAgeyBjb2xvcjog
Z3JlZW47IH0KKyAgICAgICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9yOiBibHVlOyB9CisgICAg
ICAgICAgICAgICAgLmZvbyAuYmF6IHsgY29sb3I6IHB1cnBsZTsgfSAvKiBzaG91bGQgTk9UIGFw
cGx5ISAqLworICAgICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAgIDxzcGFuIGlkPSJTMiI+
VGV4dDwvc3Bhbj4KKyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICAgICAgICAg
IDxwcmUgaWQ9IlIyIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgICAgICA8cHJlIGlk
PSJFMiIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPHNw
YW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAg
ICAgIDxwcmUgaWQgPSAiUjMiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBp
ZD0iRTMiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNz
PSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQNCI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSNCIgY2xhc3M9ImJhciI+VGV4dDwv
cHJlPgorICAgICAgICA8cHJlIGlkPSJFNCIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwv
ZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2VmNjUzCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBkZXRhY2hpbmcgYSA8c3R5bGUgc2NvcGVk
PiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0t
LSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiBy
Z2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzog
cmdiKDAsIDAsIDApCistLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6
IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigwLCAwLCAwKQorUDI6IHJn
YigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklT
SEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQt
ZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGM4YmY2YQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApA
QCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNj
cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQor
ICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScp
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9n
KGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwg
bnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAg
ICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0
KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0
ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUg
U0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdTVFlMRScpOworICAgICAgICAgICAgZGl2RWxlbS5yZW1vdmVDaGlsZChz
dHlsZUVsZW0pOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0t
Jyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAg
ICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAg
ICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlw
ZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAg
IDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5U
ZXN0IGRldGFjaGluZyBhICZsdDtzdHlsZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRp
dj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEi
PlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHN0eWxl
IGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNv
bG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9z
dHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0i
UDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMz
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EyMDU4Nwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1v
dmUtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IHJlbW92aW5nIHRo
ZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4dAor
CitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigw
LCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAs
IDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBV
Ti1TRVRUSU5HIEBTQ09QRUQgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4
LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1
LCAwLCAwKQorUDM6IHJnYigwLCAxMjgsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYWYzNzcKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1s
CkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8
c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBs
b2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVt
LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOwor
ICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAg
ICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAg
ICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAg
IHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgVU4tU0VUVElORyBAU0NP
UEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJyku
cmVtb3ZlQXR0cmlidXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp
b24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygn
LS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+
CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xv
cjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0
cygpOyI+CisgICAgPHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEg
Jmx0O3N0eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJT
MSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2Pgor
ICAgIDxkaXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29w
ZWQ+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29s
b3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAz
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmZhMGM3OTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAor
VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQK
KworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFM
IC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1
LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2Io
MCwgMTI4LCAwKQorLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwgMCwg
MCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgs
IDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0t
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQtc2Nv
cGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MDNiZDQKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5o
dG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyht
c2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAg
ICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShl
bGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScp
OworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAg
IHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsK
KyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAg
ICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAg
ICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElORyBAU0NP
UEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJyku
c2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVu
Y3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxv
ZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3Jp
cHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBj
b2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5U
ZXN0cygpOyI+CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24g
YSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9
IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiPgor
ICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNvbG9yOiBn
cmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRleHQ8L3Nw
YW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2Pgor
ICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMyI+VGV4
dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYTRhNTNlLi5mOTg5N2MzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNzkgQEAKKzIwMTEtMDctMjYgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNjb3BlZCBhdHRyaWJ1dGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTQyCisK
KyAgICAgICAgSW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIDxzdHlsZSBzY29wZWQ+OgorICAgICAg
ICBDU1NTdHlsZVNlbGVjdG9yIGhvbGRzIGdsb2JhbCBhcyB3ZWxsIGFzIHNjb3BlZCBhdXRob3Ig
c2hlZXRzLgorICAgICAgICBTY29wZWQgYXV0aG9yIHNoZWV0cyBhcmUgbWFwcGVkIGJ5IHRoZWly
IHNjb3BpbmcgZWxlbWVudCAodGhlIHBhcmVudCBlbGVtZW50IG9mIDxzdHlsZSBzY29wZWQ+KS4K
KyAgICAgICAgPHN0eWxlIHNjb3BlZD4gZWxlbWVudHMgcmVnaXN0ZXIgYW5kIHVuLXJlZ2lzdGVy
IHdpdGggdGhlaXIgc2NvcGluZyBwYXJlbnQgZWxlbWVudAorICAgICAgICBpbiBhIGtpbmQgb2Yg
cmVmLWNvdW50aW5nLCBpbiBvcmRlciB0byBhbGxvdyBxdWljayBsb29rLXVwIG9mIHdoZXRoZXIg
YW4gZWxlbWVudCBoYXMgc2NvcGVkIHN0eWxlIGNoaWxkcmVuLgorICAgICAgICBBbHNvLCBwcmV2
ZW50IHN0eWxlIHNoYXJpbmcgZnJvbSBjcm9zc2luZyBpbnRvL291dCBvZiBzY29wZWQgc3R5bGUg
Ym91bmRhcmllcy4KKworICAgICAgICBUZXN0czogZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFj
aC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMuaHRtbAor
ICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCisgICAgICAg
ICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sCisKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBwb3J0IGZvciBzY29wZWQgYXV0aG9y
IHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRz
KTogY2xhc3MgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRSdWxlU2V0czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZVNjb3BlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0YWNrRnJhbWUpOiBh
ZGQgc2NvcGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgc3RhY2sgZnJhbWUKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVsZXMpOiBtYXRjaCBzY29wZWQg
YXV0aG9yIHJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1
bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZVNldCk6
CisgICAgICAgIChXZWJDb3JlOjpsZXNzU3BlY2lmaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKTogcmVmYWN0b3Jpbmcg
dG8gc2ltcGxpZnkgY29kZQorICAgICAgICAoV2ViQ29yZTo6bWF0Y2hlc0luVHJlZVNjb3BlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QpOiBh
dm9pZCBjcm9zc2luZyBzY29wZWQgc3R5bGUgYm91bmRhcmllcworICAgICAgICAoV2ViQ29yZTo6
Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KTogZGl0dG8KKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKTogZGl0dG8K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNj
b3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVs
ZVNldHM6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OlBhcmVudFN0YWNrRnJhbWU6OlBh
cmVudFN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUpOiByZWZhY3RvcmluZyB0
byBzaW1wbGlmeSBjb2RlCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpkb2N1bWVu
dCk6IGRpdHRvCisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBkb20v
Q29udGFpbmVyTm9kZS5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiByZWdpc3RlciBh
IDxzdHlsZSBzY29wZWQ+IGNoaWxkCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1bnJlZ2lz
dGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiB1bi1yZWdpc3RlciBhIDxzdHlsZSBzY29wZWQ+IGNo
aWxkCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6
IHF1ZXJ5IHdoZXRoZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCBpcyBwcmVzZW50CisgICAgICAg
ICogZG9tL0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSk6IGhvbGRzIGlu
Zm9ybWF0aW9uIGFib3V0IDxzdHlsZSBzY29wZWQ+IGNoaWxkcmVuCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UmFyZURhdGE6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiAKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQpOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAgICAg
ICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5
bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogdXBkYXRlIHNjb3BlZCBzdGF0ZSwgW3Vu
LV1yZWdpc3RlciB3aXRoIHBhcmVudCBhcyBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KTogcmVnaXN0ZXJpbmcg
d2l0aCBwYXJlbnQKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnVucmVnaXN0
ZXJXaXRoU2NvcGluZ0VsZW1lbnQpOiB1bi1yZWdpc3RlcmluZyB3aXRoIHBhcmVudAorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiByZWdp
c3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OndpbGxSZW1vdmUpOiB1bi1yZWdpc3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3Nh
cnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BlZCk6IHF1ZXJ5IHNj
b3BlZCBzdGF0dXMKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BpbmdF
bGVtZW50KTogZ2V0IHNjb3BpbmcgZWxlbWVudAorICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50KTogd2hldGhlciB0aGUgPHN0eWxlPiBlbGVtZW50IGlzIHJlZ2lz
dGVyZWQgd2l0aCBpdHMgcGFyZW50LgorCiAyMDExLTA3LTI1ICBSeXVhbiBDaG9pICA8cnl1YW4u
Y2hvaUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbQ01BS0VdIFNwbGl0IEpTQyByZWxhdGVkIGZp
bGVzIGZyb20gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1NlbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5j
cHAKaW5kZXggODA3ZWQzZS4uZTg4NjhjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1NlbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3Bw
CkBAIC0zNyw3ICszNyw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFj
ZSBIVE1MTmFtZXM7Ci0gICAgCisKIHZvaWQgQ1NTU2VsZWN0b3I6OmNyZWF0ZVJhcmVEYXRhKCkK
IHsKICAgICBpZiAobV9oYXNSYXJlRGF0YSkgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxl
Y3Rvci5jcHAKaW5kZXggNmYwOGMwYi4uN2RjMjM2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcApAQCAtNjMsOSArNjMsMTEgQEAKICNpbmNsdWRlICJIVE1MRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVsZW1l
bnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTElu
cHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9n
cmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgogI2luY2x1
ZGUgIkxpbmtIYXNoLmgiCkBAIC0yODksMTEgKzI5MSwxMiBAQCBpZiAoaWQgPT0gcHJvcElEKSB7
IFwKIAogY2xhc3MgUnVsZURhdGEgewogcHVibGljOgotICAgIFJ1bGVEYXRhKENTU1N0eWxlUnVs
ZSosIENTU1NlbGVjdG9yKiwgdW5zaWduZWQgcG9zaXRpb24pOworICAgIFJ1bGVEYXRhKENTU1N0
eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgY29uc3QgRWxlbWVudCosIHVuc2lnbmVkIHBvc2l0aW9u
KTsKIAogICAgIHVuc2lnbmVkIHBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbjsg
fQogICAgIENTU1N0eWxlUnVsZSogcnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQogICAg
IENTU1NlbGVjdG9yKiBzZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3I7IH0KKyAg
ICBjb25zdCBFbGVtZW50KiBzY29wZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NvcGU7IH0KICAgICAK
ICAgICBib29sIGhhc0Zhc3RDaGVja2FibGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1faGFz
RmFzdENoZWNrYWJsZVNlbGVjdG9yOyB9CiAgICAgYm9vbCBoYXNNdWx0aXBhcnRTZWxlY3Rvcigp
IGNvbnN0IHsgcmV0dXJuIG1faGFzTXVsdGlwYXJ0U2VsZWN0b3I7IH0KQEAgLTMxMCw2ICszMTMs
NyBAQCBwcml2YXRlOgogICAgIAogICAgIENTU1N0eWxlUnVsZSogbV9ydWxlOwogICAgIENTU1Nl
bGVjdG9yKiBtX3NlbGVjdG9yOworICAgIGNvbnN0IEVsZW1lbnQqIG1fc2NvcGU7CiAgICAgdW5z
aWduZWQgbV9zcGVjaWZpY2l0eTsKICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uIDogMjk7CiAgICAg
Ym9vbCBtX2hhc0Zhc3RDaGVja2FibGVTZWxlY3RvciA6IDE7CkBAIC0zMjQsMTYgKzMyOCwxNSBA
QCBjbGFzcyBSdWxlU2V0IHsKIHB1YmxpYzoKICAgICBSdWxlU2V0KCk7CiAgICAgflJ1bGVTZXQo
KTsKLSAgICAKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9y
PFJ1bGVEYXRhPio+IEF0b21SdWxlTWFwOwotICAgIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNl
bGVjdG9yKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVt
KTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2Vs
KTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCk7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9t
UnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwg
Q1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNo
ZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCwg
Y29uc3QgRWxlbWVudCogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVs
ZSosIGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NT
U2VsZWN0b3IqLCBjb25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NTdHls
ZVJ1bGUqLCBDU1NTZWxlY3RvciopOworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmlu
Z0ltcGwqLCBBdG9tUnVsZU1hcCYsIENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKiwgY29uc3Qg
RWxlbWVudCopOwogICAgIHZvaWQgc2hyaW5rVG9GaXQoKTsKICAgICB2b2lkIGRpc2FibGVBdXRv
U2hyaW5rVG9GaXQoKSB7IG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZCA9IGZhbHNlOyB9CiAKQEAg
LTM1Nyw2ICszNjAsMjMgQEAgcHVibGljOgogICAgIGJvb2wgbV9hdXRvU2hyaW5rVG9GaXRFbmFi
bGVkOwogfTsKIAorY2xhc3MgU2NvcGVkUnVsZVNldHMgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFNjb3BlZFJ1bGVTZXRzKTsKK3B1YmxpYzoKKyAgICBTY29wZWRSdWxlU2V0cygpIHsgfQor
ICAgIH5TY29wZWRSdWxlU2V0cygpOworCisgICAgUnVsZVNldCogZ2V0KGNvbnN0IEVsZW1lbnQq
IHNjb3BlKSB7IHJldHVybiBtX3Njb3BlZFJ1bGVTZXRNYXAuZ2V0KHNjb3BlKTsgfQorICAgIFJ1
bGVTZXQqIGVuc3VyZUV4aXN0cyhjb25zdCBFbGVtZW50Kik7CisKKyAgICB2b2lkIGNvbGxlY3RG
ZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIHR5cGVkZWYgSGFzaE1hcDxjb25zdCBFbGVtZW50KiwgUnVsZVNldCo+IFNjb3BlZFJ1bGVT
ZXRNYXA7CisKKyAgICBTY29wZWRSdWxlU2V0TWFwIG1fc2NvcGVkUnVsZVNldE1hcDsKK307CisK
IHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFF1
aXJrc1N0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwpAQCAtNDI4LDYg
KzQ0OCwzMiBAQCBzdGF0aWMgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHJpZ2h0VG9MZWZ0
RGVjbGFyYXRpb24oKQogICAgIHJldHVybiByaWdodFRvTGVmdERlY2wuZ2V0KCk7CiB9CiAKKy8v
IERldGVybWluZSB0aGUgc2NvcGUgb2YgYSBzdHlsZSBzaGVldCAoaWYgYW55KS4gUmV0dXJucyAn
ZmFsc2UnIGlmIGl0J3MgYSBzY29wZWQgc3R5bGUgc2hlZXQgaW4gYW4gaW52YWxpZCBsb2NhdGlv
bi4KK3N0YXRpYyBib29sIGRldGVybWluZVNjb3BlKENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25z
dCBFbGVtZW50KiYgc2NvcGUpCit7CisgICAgc2NvcGUgPSAwOworCisgICAgaWYgKCFzaGVldCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgTm9kZSogb3duZXJOb2RlID0gc2hlZXQtPmZp
bmRPd25lck5vZGUoKTsKKyAgICBpZiAoIW93bmVyTm9kZSB8fCAhb3duZXJOb2RlLT5pc0hUTUxF
bGVtZW50KCkgfHwgIW93bmVyTm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnN0eWxlVGFnKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIVE1MU3R5bGVFbGVtZW50KiBzdHlsZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxIVE1MU3R5bGVFbGVtZW50Kj4ob3duZXJOb2RlKTsKKyAgICBpZiAo
IXN0eWxlRWxlbWVudC0+c2NvcGVkKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gc3R5bGVFbGVtZW50LT5kb2N1bWVudCgpOworICAgIGlmICghZG9j
dW1lbnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHNjb3BlID0gc3R5bGVFbGVtZW50
LT5wYXJlbnRFbGVtZW50KCk7CisgICAgQVNTRVJUKHNjb3BlKTsKKworICAgIHJldHVybiBzY29w
ZTsgLy8gVGhlcmUgbXVzdCBiZSBhIHNjb3BpbmcgZWxlbWVudCAtIHJldHVybiAnZmFsc2UnIGlm
IGZvciB3aGF0ZXZlciByZWFzb24gdGhpcyBpcyBub3QgdGhlIGNhc2UuCit9CisKIENTU1N0eWxl
U2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0
TGlzdCogc3R5bGVTaGVldHMsIENTU1N0eWxlU2hlZXQqIG1hcHBlZEVsZW1lbnRTaGVldCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogcGFnZVVzZXJT
aGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+KiBwYWdlR3JvdXBVc2Vy
U2hlZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBh
cnNpbmcsIGJvb2wgbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKQpAQCAtNDY5LDkgKzUxNSwxMCBA
QCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwg
U3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYg
dmlldykKICAgICAgICAgbV9tZWRpdW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRv
cih2aWV3LT5tZWRpYVR5cGUoKSwgdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdl
dCgpKSk7CiAKLSAgICBtX2F1dGhvclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAg
IG1fZ2xvYmFsQXV0aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fc2Nv
cGVkQXV0aG9yU3R5bGVzID0gYWRvcHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRzKTsKICAgICAvLyBB
ZGRpbmcgcnVsZXMgZnJvbSBtdWx0aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAg
IG1fYXV0aG9yU3R5bGUtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1
dGhvclN0eWxlcy0+ZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpOwogCiAgICAgLy8gRklYTUU6IFRo
aXMgc3Vja3MhIFRoZSB1c2VyIHNoZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3du
UHRyPFJ1bGVTZXQ+IHRlbXBVc2VyU3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CkBAIC00
ODMsNyArNTMwLDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVu
dCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgICAgIGlmIChw
YWdlR3JvdXBVc2VyU2hlZXRzLT5hdChpKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICAgICAg
ICAgICAgIHRlbXBVc2VyU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVl
dHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVz
ZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICAgICAgICAg
IG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3JvdXBVc2VyU2hl
ZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtNDkxLDE1ICs1MzgsMjYgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihE
b2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgbV91
c2VyU3R5bGUgPSB0ZW1wVXNlclN0eWxlLnJlbGVhc2UoKTsKIAogICAgIC8vIEFkZCBydWxlcyBm
cm9tIGVsZW1lbnRzIGxpa2UgU1ZHJ3MgPGZvbnQtZmFjZT4KLSAgICBpZiAobWFwcGVkRWxlbWVu
dFNoZWV0KQotICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChtYXBwZWRF
bGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgaWYgKG1hcHBlZEVsZW1lbnRTaGVl
dCkgeworICAgICAgICAvLyBGSVhNRTogc2VlIGlmIHN0eWxlIHNjb3BlcyBjYW4vc2hvdWxkIGJl
IGFkZGVkIGhlcmUuCisgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21T
aGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgfQogCiAgICAg
Ly8gYWRkIHN0eWxlc2hlZXRzIGZyb20gZG9jdW1lbnQKICAgICB1bnNpZ25lZCBsZW5ndGggPSBz
dHlsZVNoZWV0cy0+bGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0
aDsgaSsrKSB7CiAgICAgICAgIFN0eWxlU2hlZXQqIHNoZWV0ID0gc3R5bGVTaGVldHMtPml0ZW0o
aSk7Ci0gICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNh
YmxlZCgpKQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHNoZWV0KSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAg
ICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hlZXQtPmRpc2FibGVkKCkpIHsK
KyAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIGNzc1NoZWV0ID0gc3RhdGljX2Nhc3Q8Q1NTU3R5
bGVTaGVldCo+KHNoZWV0KTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gMDsK
KworICAgICAgICAgICAgaWYgKCFkZXRlcm1pbmVTY29wZShjc3NTaGVldCwgc2NvcGUpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAg
ICAgICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5lbnN1cmVFeGlzdHMoc2NvcGUpLT5hZGRSdWxl
c0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzLCBzY29wZSk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJv
bVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICB9CiAgICAgfSAgICAK
ICAgICAvLyBDb2xsZWN0IGFsbCBpZHMgYW5kIHJ1bGVzIHVzaW5nIHNpYmxpbmcgc2VsZWN0b3Jz
ICg6Zmlyc3QtY2hpbGQgYW5kIHNpbWlsYXIpCiAgICAgLy8gaW4gdGhlIGN1cnJlbnQgc2V0IG9m
IHN0eWxlc2hlZXRzLiBTdHlsZSBzaGFyaW5nIGNvZGUgdXNlcyB0aGlzIGluZm9ybWF0aW9uIHRv
IHJlamVjdApAQCAtNTA3LDExICs1NjUsMTIgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVT
ZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAg
ICAvLyBVc3VhbGx5IHRoZXJlIGFyZSBubyBzaWJsaW5nIHJ1bGVzIGluIHRoZSBkZWZhdWx0IHN0
eWxlIGJ1dCB0aGUgTWF0aE1MIHNoZWV0IGhhcyBzb21lLgogICAgIGlmIChzaWJsaW5nUnVsZXNJ
bkRlZmF1bHRTdHlsZSkKICAgICAgICAgc2libGluZ1J1bGVzSW5EZWZhdWx0U3R5bGUtPmNvbGxl
Y3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKLSAgICBtX2F1dGhvclN0eWxlLT5jb2xsZWN0RmVhdHVy
ZXMobV9mZWF0dXJlcyk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmNvbGxlY3RGZWF0dXJl
cyhtX2ZlYXR1cmVzKTsKKyAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Y29sbGVjdEZlYXR1cmVz
KG1fZmVhdHVyZXMpOwogICAgIGlmIChtX3VzZXJTdHlsZSkKICAgICAgICAgbV91c2VyU3R5bGUt
PmNvbGxlY3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKIAotICAgIG1fYXV0aG9yU3R5bGUtPnNocmlu
a1RvRml0KCk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPnNocmlua1RvRml0KCk7CiAgICAg
aWYgKG1fZmVhdHVyZXMuc2libGluZ1J1bGVzKQogICAgICAgICBtX2ZlYXR1cmVzLnNpYmxpbmdS
dWxlcy0+c2hyaW5rVG9GaXQoKTsKIApAQCAtNjM0LDYgKzY5MywxMSBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIHBhcmVudCkKICAgICBzaXpl
X3QgY291bnQgPSBwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzLnNpemUoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCiAgICAgICAgIG1fYW5jZXN0b3JJZGVudGlm
aWVyRmlsdGVyLT5hZGQocGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlc1tpXSk7CisgICAgLy8g
UG9pbnQgdG8gZnJhbWUgY29udGFpbmluZyB0aGUgY2xvc2VzdCBzdHlsZSBzY29wZSAob3IgbGVh
dmUgYXQgMCBpZiBub25lKS4KKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGls
ZCgpKQorICAgICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0gJnBhcmVu
dEZyYW1lOworICAgIGVsc2UgaWYgKG1fcGFyZW50U3RhY2suc2l6ZSgpID49IDIpCisgICAgICAg
IHBhcmVudEZyYW1lLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWUgPSBtX3BhcmVudFN0YWNrW21fcGFy
ZW50U3RhY2suc2l6ZSgpIC0gMl0uY2xvc2VzdFN0eWxlU2NvcGVGcmFtZTsKIH0KIAogdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpwb3BQYXJlbnRTdGFja0ZyYW1lKCkKQEAgLTY5NCwxMyArNzU4LDYy
IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIG1fbWF0Y2hlZERlY2xzLmFwcGVuZChkZWNs
KTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykK
K3sKKyAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOworCisgICAgLy8gTWF0Y2ggZ2xvYmFsIGF1
dGhvciBydWxlcy4KKyAgICBtYXRjaFJ1bGVTZXQobV9nbG9iYWxBdXRob3JTdHlsZXMuZ2V0KCks
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAg
Ly8gTWF0Y2ggc2NvcGVkIHN0eWxlIHNoZWV0J3MgcnVsZXMuCisgICAgaWYgKCFtX3BhcmVudFN0
YWNrLmlzRW1wdHkoKSAmJiBtX3BhcmVudFN0YWNrLmxhc3QoKS5lbGVtZW50ID09IG1fcGFyZW50
Tm9kZSkgeworICAgICAgICAvLyBGYXN0IGJyYW5jaDogYWNjZXNzIGVuY2xvc2luZyBzY29wZXMg
ZGlyZWN0bHkgZnJvbSBwYXJlbnQgc3RhY2sKKyAgICAgICAgLy8gKGJ1dCBzdGFydCB3aXRoIGN1
cnJlbnQgZWxlbWVudCkuCisgICAgICAgIGlmIChtX2VsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHls
ZUNoaWxkKCkpIHsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhv
clN0eWxlcy0+Z2V0KG1fZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAg
ICAgICAgICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgICAgICBQYXJlbnRTdGFj
a0ZyYW1lKiBzY29wZUZyYW1lID0gbV9wYXJlbnRTdGFjay5sYXN0KCkuY2xvc2VzdFN0eWxlU2Nv
cGVGcmFtZTsKKyAgICAgICAgd2hpbGUgKHNjb3BlRnJhbWUpIHsKKyAgICAgICAgICAgIGNvbnN0
IEVsZW1lbnQqIHNjb3BlID0gc2NvcGVGcmFtZS0+ZWxlbWVudDsKKyAgICAgICAgICAgIFJ1bGVT
ZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+Z2V0KHNjb3BlKTsKKyAgICAgICAg
ICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAg
ICAgICAgaWYgKHNjb3BlRnJhbWUgPT0gJm1fcGFyZW50U3RhY2suZmlyc3QoKSkKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC0tc2NvcGVGcmFtZTsKKyAgICAgICAgICAgIHNj
b3BlRnJhbWUgPSBzY29wZUZyYW1lLT5jbG9zZXN0U3R5bGVTY29wZUZyYW1lOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2xvdyBicmFuY2g6IGNsaW1iIHRyZWUsIGNoZWNr
IGZvciBzdHlsZSBzY29wZXMgYXQgZXZlcnkgZWxlbWVudC4KKyAgICAgICAgZm9yIChjb25zdCBO
b2RlKiBub2RlID0gbV9lbGVtZW50OyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICBpZiAoIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQgPSB0b0VsZW1l
bnQobm9kZSk7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNo
aWxkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSdWxlU2V0KiBy
dWxlU2V0ID0gbV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChlbGVtZW50KTsKKyAgICAgICAgICAg
IGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBmaXJz
dFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB9
CisgICAgfQorCisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5tX2Nv
bGxlY3RSdWxlc09ubHkpOworfQorCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMo
UnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwg
Ym9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwog
CiAgICAgaWYgKCFydWxlcyB8fCAhbV9lbGVtZW50KQogICAgICAgICByZXR1cm47CisKKyAgICBt
YXRjaFJ1bGVTZXQocnVsZXMsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5t
X2NvbGxlY3RSdWxlc09ubHkpOworfQogICAgIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVTZXQoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3sKICAgICAvLyBXZSBuZWVkIHRvIGNv
bGxlY3QgdGhlIHJ1bGVzIGZvciBpZCwgY2xhc3MsIHRhZywgYW5kIGV2ZXJ5dGhpbmcgZWxzZSBp
bnRvIGEgYnVmZmVyIGFuZAogICAgIC8vIHRoZW4gc29ydCB0aGUgYnVmZmVyLgogICAgIGlmICht
X2VsZW1lbnQtPmhhc0lEKCkpCkBAIC03MTksMjQgKzgzMiwzNCBAQCB2b2lkIENTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGlu
dCYgbGFzdAogICAgIH0KICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMo
bV9lbGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJ
bmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5n
ZXRVbml2ZXJzYWxSdWxlcygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVk
ZUVtcHR5UnVsZXMpOwotICAgIAorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbGVzc1NwZWNpZmlj
KGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQoreworICAgIHVuc2lnbmVk
IHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOworICAgIHVuc2lnbmVkIHNwZWNpZmlj
aXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOworICAgIHJldHVybiAoc3BlY2lmaWNpdHkxID09IHNw
ZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3BlY2lmaWNp
dHkxIDwgc3BlY2lmaWNpdHkyOyAKK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5k
VHJhbnNmZXJNYXRjaGVkUnVsZXMoYm9vbCBjb2xsZWN0UnVsZXNPbmx5KQorewogICAgIC8vIElm
IHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVsZXMsIHdlJ3JlIGRvbmUuCiAgICAgaWYgKG1fbWF0Y2hl
ZFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gU29ydCB0
aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAgc29ydE1hdGNoZWRSdWxlcygpOwotICAgIAor
ICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigpLCBtX21hdGNoZWRSdWxlcy5lbmQo
KSwgbGVzc1NwZWNpZmljKTsKKwogICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNo
ZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBkZWNscy4KLSAgICBpZiAoIW1fY2hlY2tlci5t
X2NvbGxlY3RSdWxlc09ubHkpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgYWRkTWF0Y2hlZERlY2xhcmF0
aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwotICAgIH0gZWxz
ZSB7CisgICAgaWYgKGNvbGxlY3RSdWxlc09ubHkpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICBpZiAo
IW1fcnVsZUxpc3QpCiAgICAgICAgICAgICAgICAgbV9ydWxlTGlzdCA9IENTU1J1bGVMaXN0Ojpj
cmVhdGUoKTsKICAgICAgICAgICAgIG1fcnVsZUxpc3QtPmFwcGVuZChtX21hdGNoZWRSdWxlc1tp
XS0+cnVsZSgpKTsKICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKKyAgICAgICAgICAgIGFk
ZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlv
bigpKTsKICAgICB9CiB9CiAKQEAgLTc4MCwxMiArOTAzLDE1IEBAIGlubGluZSBib29sIE1hdGNo
aW5nVUFSdWxlc1Njb3BlOjppc01hdGNoaW5nVUFSdWxlcygpCiAKIGJvb2wgTWF0Y2hpbmdVQVJ1
bGVzU2NvcGU6Om1fbWF0Y2hpbmdVQVJ1bGVzID0gZmFsc2U7CiAKLWlubGluZSBzdGF0aWMgYm9v
bCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGJvb2wgcnVsZVJlYWNo
ZXNJbnRvU2hhZG93RE9NKQoraW5saW5lIHN0YXRpYyBib29sIG1hdGNoZXNJblRyZWVTY29wZShU
cmVlU2NvcGUqIHRyZWVTY29wZSwgY29uc3QgRWxlbWVudCogc3R5bGVTY29wZSwgYm9vbCBydWxl
UmVhY2hlc0ludG9TaGFkb3dET00pCiB7Ci0gICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Njb3Bl
Ojppc01hdGNoaW5nVUFSdWxlcygpIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRob3JTaGVldHMoKSB8
fCBydWxlUmVhY2hlc0ludG9TaGFkb3dET007CisgICAgcmV0dXJuIE1hdGNoaW5nVUFSdWxlc1Nj
b3BlOjppc01hdGNoaW5nVUFSdWxlcygpCisgICAgICAgIHx8IHRyZWVTY29wZS0+YXBwbHlBdXRo
b3JTaGVldHMoKQorICAgICAgICB8fCAoc3R5bGVTY29wZSAmJiBzdHlsZVNjb3BlLT50cmVlU2Nv
cGUoKSA9PSB0cmVlU2NvcGUpCisgICAgICAgIHx8IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUlu
ZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRj
aFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXJzdFJ1
bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzLCBjb25z
dCBFbGVtZW50KiBzdHlsZVNjb3BlKQogewogICAgIGlmICghcnVsZXMpCiAgICAgICAgIHJldHVy
bjsKQEAgLTc5OSw3ICs5MjUsNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNG
b3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgICAgICBp
ZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkg
ewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2Nv
cGUoKSwgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKKyAgICAgICAgICAg
IGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIHN0eWxlU2Nv
cGUsIG1fY2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykpCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAgICAgICAgICAgICAvLyBJZiB0aGUgcnVsZSBoYXMgbm8gcHJvcGVydGll
cyB0byBhcHBseSwgdGhlbiBpZ25vcmUgaXQgaW4gdGhlIG5vbi1kZWJ1ZyBtb2RlLgogICAgICAg
ICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gcnVsZURhdGEucnVsZSgpOwpAQCAtODI4LDE4ICs5
NTQsNiBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZl
Y3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcgogICAgIH0KIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiBy
MikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKLSAg
ICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAgICByZXR1cm4g
KHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9z
aXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCi19Ci0KLXZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygpCi17Ci0gICAgc3RkOjpzb3J0KG1fbWF0Y2hl
ZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVsZXMpOwotfQot
CiBpbmxpbmUgRUluc2lkZUxpbmsgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpk
ZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBpZiAoIWVs
ZW1lbnQgfHwgIWVsZW1lbnQtPmlzTGluaygpKQpAQCAtOTY3LDcgKzEwODEsNyBAQCBFSW5zaWRl
TGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtTdGF0
ZVNsb3dDYXNlKEVsZW1lbgogYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6
OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZWxlbWVudCkgY29uc3QK
IHsKICAgICBQc2V1ZG9JZCBkeW5hbWljUHNldWRvID0gTk9QU0VVRE87Ci0gICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UpID09
IFNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQs
IDAsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSkgPT0gU2VsZWN0b3JNYXRjaGVzOwogfQog
CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY1N0eWxlU2VhcmNoVGhyZXNob2xkID0gMTA7CkBAIC05
NzksNiArMTA5Myw4IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3Qo
RWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5vZGVDCiAgICAgICAgIHJldHVybiAw
OwogICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAg
ICByZXR1cm4gMDsKKyAgICBpZiAocGFyZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQor
ICAgICAgICByZXR1cm4gMDsKICAgICBTdHlsZWRFbGVtZW50KiBwID0gc3RhdGljX2Nhc3Q8U3R5
bGVkRWxlbWVudCo+KHBhcmVudCk7CiAgICAgaWYgKHAtPmlubGluZVN0eWxlRGVjbCgpKQogICAg
ICAgICByZXR1cm4gMDsKQEAgLTk5NCw4ICsxMTEwLDEwIEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0
b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5v
ZGVDCiAgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBjU3R5bGVTZWFyY2hMZXZlbFRo
cmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCiAgICAgdmlzaXRlZE5vZGVDb3VudCArPSBj
U3R5bGVTZWFyY2hUaHJlc2hvbGQ7CiAgICAgd2hpbGUgKHRoaXNDb3VzaW4pIHsKLSAgICAgICAg
d2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIGZvciAoOyBjdXJyZW50Tm9kZTsgY3VycmVu
dE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkpIHsKICAgICAgICAgICAgICsr
c3ViY291bnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUtPmlzRWxlbWVudE5vZGUoKSAm
JiB0b0VsZW1lbnQoY3VycmVudE5vZGUpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5yZW5k
ZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2RlLT5sYXN0Q2hpbGQoKSkgewog
ICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJlc2VydmVkIHRyaWVzLgogICAg
ICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxlU2VhcmNoVGhyZXNob2xkIC0g
c3ViY291bnQ7CkBAIC0xMDAzLDcgKzExMjEsNiBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjps
b2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHN1YmNvdW50ID49IGNTdHlsZVNlYXJjaFRo
cmVzaG9sZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIGN1cnJlbnRO
b2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2libGluZygpOwogICAgICAgICB9CiAgICAgICAg
IGN1cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlzdCh0aGlzQ291c2luLT5wYXJlbnRFbGVtZW50
KCksIHZpc2l0ZWROb2RlQ291bnQpOwogICAgICAgICB0aGlzQ291c2luID0gY3VycmVudE5vZGU7
CkBAIC0xMTI3LDYgKzEyNDQsOSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5
bGVXaXRoRWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgp
ICYmIG1fZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChlbGVt
ZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
ICAgICBib29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAK
ICAgICBpZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
QEAgLTExOTMsNiArMTMxMyw4IEBAIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIENTU1N0eWxl
U2VsZWN0b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KHBhcmVudFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1
cm4gMDsKKyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgp
KQorICAgICAgICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFu
ZCB0aGVpciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTE0NzEsNyArMTU5
Myw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9y
RWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsCiAgICAgCiAgICAgICAgIC8vIDYuIENoZWNr
IHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzIG5leHQuCiAgICAgICAgIGlmIChtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5n
ZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOworICAgICAgICAg
ICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxz
ZSk7CiAKICAgICAgICAgLy8gNy4gTm93IGNoZWNrIG91ciBpbmxpbmUgc3R5bGUgYXR0cmlidXRl
LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMgJiYgbV9zdHlsZWRFbGVt
ZW50KSB7CkBAIC0xNjg3LDcgKzE4MDksNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NT
dHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoUHNldWRvSWQgcHNldWRvLAogCiAg
ICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CiAgICAgICAgIG1hdGNoUnVsZXMo
bV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFsc2UpOwot
ICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwg
bGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdFVz
ZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVk
RGVjbHMuaXNFbXB0eSgpICYmICF2aXNpdGVkU3R5bGUpCkBAIC0xNzU0LDcgKzE4NzYsOCBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50
IHBhZ2VJbmRleCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7
CiAgICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwg
cGFnZSk7CiAgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNG
aXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgaXNM
ZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgUnVs
ZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KKyAgICBtYXRjaFBh
Z2VSdWxlcyhtX2dsb2JhbEF1dGhvclN0eWxlcy5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdl
KTsKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1
ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogCkBAIC0yMDQ5LDcgKzIx
NzIsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9T
dHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogCiAgICAgICAgIC8vIENoZWNrIHRoZSBy
dWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEs
IGxhc3RBdXRob3JSdWxlID0gLTE7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5n
ZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBF
bXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdEF1dGhvclJ1bGUs
IGxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAg
ICAgIG1fY2hlY2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMjA2Niw3
ICsyMTg5LDggQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihj
b25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAgICAgbV9jaGVja2VyLm1faGFzVW5rbm93blBzZXVk
b0VsZW1lbnRzID0gZmFsc2U7CiAKICAgICAvLyBMZXQgdGhlIHNsb3cgcGF0aCBoYW5kbGUgU1ZH
IGFzIGl0IGhhcyBzb21lIGFkZGl0aW9uYWwgcnVsZXMgcmVnYXJkaW5nIHNoYWRvdyB0cmVlcy4K
LSAgICBpZiAocnVsZURhdGEuaGFzRmFzdENoZWNrYWJsZVNlbGVjdG9yKCkgJiYgIW1fZWxlbWVu
dC0+aXNTVkdFbGVtZW50KCkpIHsKKyAgICAvLyBBbHNvLCBkb24ndCBwdXQgc2NvcGVkIHJ1bGVz
IG9uIHRoZSBmYXN0IHRyYWNrLgorICAgIGlmIChydWxlRGF0YS5oYXNGYXN0Q2hlY2thYmxlU2Vs
ZWN0b3IoKSAmJiAhcnVsZURhdGEuc2NvcGUoKSAmJiAhbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQo
KSkgewogICAgICAgICAvLyBXZSBrbm93IHRoaXMgc2VsZWN0b3IgZG9lcyBub3QgaW5jbHVkZSBh
bnkgcHNldWRvIHNlbGVjdG9ycy4KICAgICAgICAgaWYgKG1fY2hlY2tlci5tX3BzZXVkb1N0eWxl
ICE9IE5PUFNFVURPKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA3OCw3ICsyMjAy
LDcgQEAgaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBS
dWxlRGF0YSYgcnVsZURhdGEpCiAgICAgfQogCiAgICAgLy8gU2xvdyBwYXRoLgotICAgIFNlbGVj
dG9yTWF0Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3Rv
cigpLCBtX2VsZW1lbnQsIG1fZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlLCBtX2ZvcmNlUHNl
dWRvQ2xhc3NNYXNrLCBzdHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRl
clN0eWxlKCkgOiAwKTsKKyAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNr
U2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBydWxlRGF0YS5zY29wZSgp
LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwgbV9mb3JjZVBzZXVkb0NsYXNzTWFzaywg
c3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7
CiAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX2NoZWNr
ZXIubV9wc2V1ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCkBAIC0yMjA3LDcgKzIzMzEsMTYg
QEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVj
dG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWwKIC8vICogU2VsZWN0b3JNYXRjaGVzICAgICAgICAg
LSB0aGUgc2VsZWN0b3IgbWF0Y2hlcyB0aGUgZWxlbWVudCBlCiAvLyAqIFNlbGVjdG9yRmFpbHNM
b2NhbGx5ICAgIC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciB0aGUgZWxlbWVudCBlCiAvLyAqIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5IC0gdGhlIHNlbGVjdG9yIGZhaWxzIGZvciBlIGFuZCBhbnkg
c2libGluZyBvciBhbmNlc3RvciBvZiBlCi1DU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNo
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxl
Y3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1
YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgdW5zaWduZWQgZm9yY2VQc2V1ZG9DbGFz
c01hc2ssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFy
ZW50U3R5bGUpIGNvbnN0CitDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcigKKyAgICBDU1NTZWxlY3Rv
ciogc2VsLAorICAgIEVsZW1lbnQqIGUsCisgICAgY29uc3QgRWxlbWVudCogc2NvcGUsCisgICAg
UHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sCisgICAgYm9vbCBpc1N1YlNlbGVjdG9yLAorICAgIGJv
b2wgZW5jb3VudGVyZWRMaW5rLAorICAgIHVuc2lnbmVkIGZvcmNlUHNldWRvQ2xhc3NNYXNrLAor
ICAgIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRQ
YXJlbnRTdHlsZSkgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNwZWM6IENTUzIg
c2VsZWN0b3JzIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQg
RE9NIHRyZWUKQEAgLTIyMTcsMjEgKzIzNTAsMjUgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IK
ICNlbmRpZgogCiAgICAgLy8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYgKCFj
aGVja09uZVNlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3RvciwgZW5j
b3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0eWxlLCBlbGVtZW50
UGFyZW50U3R5bGUpKQorICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRv
Q2xhc3NNYXNrLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKIAotICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxl
Y3RvcnMgaGFzIHRvIG1hdGNoCi0gICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0g
c2VsLT5yZWxhdGlvbigpOwotCiAgICAgLy8gUHJlcGFyZSBuZXh0IHNlbAogICAgIHNlbCA9IHNl
bC0+dGFnSGlzdG9yeSgpOwogICAgIGlmICghc2VsKQogICAgICAgICByZXR1cm4gU2VsZWN0b3JN
YXRjaGVzOworICAgIAorICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1h
dGNoCisgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9uID0gc2VsLT5yZWxhdGlvbigp
OwogCi0gICAgaWYgKHJlbGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikKKyAgICBp
ZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKSB7CiAgICAgICAgIC8vIEJh
aWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFudCBmb3IgdGhlIHBzZXVkb1N0eWxl
CiAgICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fcHNldWRvU3R5bGUg
IT0gZHluYW1pY1BzZXVkbykKICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxl
dGVseTsKKyAgICAgICAgLy8gRG9uJ3QgZ28gcGFzdCB0aGUgc2NvcGluZyBlbGVtZW50IChpZiBh
bnkpLgorICAgICAgICBpZiAoZSA9PSBzY29wZSkKKyAgICAgICAgICAgIHJldHVybiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseTsKKyAgICB9CiAKICAgICAvLyBDaGVjayBmb3IgbmVzdGVkIGxpbmtz
LgogICAgIGlmIChtX21hdGNoVmlzaXRlZFBzZXVkb0NsYXNzICYmICFpc1N1YlNlbGVjdG9yKSB7
CkBAIC0yMjQ2LDI0ICsyMzgzLDI1IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2gg
Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAKICAgICBz
d2l0Y2ggKHJlbGF0aW9uKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ6
Ci0gICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgd2hpbGUgKGUgIT0gc2Nv
cGUpIHsKICAgICAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0gZS0+cGFyZW50Tm9kZSgp
OwogICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7CiAgICAgICAgICAg
ICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgICAgICBTZWxl
Y3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrKTsKKyAgICAgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFz
ayk7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7Ci0gICAgICAg
ICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFz
ayk7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlICE9IHNjb3BlKSB7CisgICAgICAgICAg
ICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAgICAgICAgIGUgPSBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4obik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Io
c2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluaywgZm9y
Y2VQc2V1ZG9DbGFzc01hc2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgogICAgICAgICB7CiAgICAg
ICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+
cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKQEAgLTIyNzgsNyArMjQxNiw3IEBAIENT
U1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JD
aGVja2VyOjpjaGVja1NlbGVjdG9yCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFp
bHNMb2NhbGx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKICAg
ICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKLSAgICAgICAgICAg
IHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291
bnRlcmVkTGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2spOworICAgICAgICAgICAgcmV0dXJuIGNo
ZWNrU2VsZWN0b3Ioc2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRl
cmVkTGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2spOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OkluZGlyZWN0QWRqYWNlbnQ6CiAgICAgICAgICAgICBpZiAoIW1fY29sbGVj
dFJ1bGVzT25seSAmJiBlLT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1l
bnROb2RlKCkpIHsKQEAgLTIyOTQsNyArMjQzMiw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVj
dG9yTWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9y
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAg
ICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogICAgICAgICAgICAgICAg
IG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3MgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBTZWxl
Y3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrKTsKKyAgICAgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFz
ayk7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICE9IFNlbGVjdG9yRmFpbHNMb2NhbGx5KQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgICAgICAgICB9OwpAQCAtMjMw
NiwxNCArMjQ0NCwxNCBAQCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0eWxl
U2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcgogICAgICAgICAgICAgaWYg
KChlbGVtZW50U3R5bGUgfHwgbV9jb2xsZWN0UnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9
IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1ZG8gIT0gU0VMRUNUSU9OICYmCiAgICAgICAgICAgICAg
ICAgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3JvbGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5h
bWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JORVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVS
KSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7Ci0gICAgICAgICAgICByZXR1
cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVk
TGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2ssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0
eWxlKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5
bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2ss
IGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKICAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAgICAgICAgICAgTm9kZSogc2hh
ZG93SG9zdE5vZGUgPSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICAgICAgICAgIGlmIChz
aGFkb3dIb3N0Tm9kZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAg
ICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOwotICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5j
b3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzayk7CisgICAgICAgICAgICByZXR1cm4g
Y2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3Vu
dGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzayk7CiAgICAgICAgIH0KICAgICB9CiAKQEAg
LTI0NzIsNyArMjYxMCw3IEBAIHN0YXRpYyBib29sIGFueUF0dHJpYnV0ZU1hdGNoZXMoTmFtZWRO
b2RlTWFwKiBhdHRyaWJ1dGVzLCBDU1NTZWxlY3Rvcjo6TWF0Y2ggbWF0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgdW5zaWdu
ZWQgZm9yY2VQc2V1ZG9DbGFzc01hc2ssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRl
clN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0Citib29sIENTU1N0eWxlU2VsZWN0b3I6
OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVt
ZW50KiBlLCBjb25zdCBFbGVtZW50KiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJv
b2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIHVuc2lnbmVkIGZvcmNlUHNl
dWRvQ2xhc3NNYXNrLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxl
bWVudFBhcmVudFN0eWxlKSBjb25zdAogewogICAgIEFTU0VSVChlKTsKICAgICBpZiAoIWUpCkBA
IC0yNTE0LDcgKzI2NTIsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAgICAgICAgICAg
ICAgIC8vIHRoZSBwYXJzZXIgZW5mb3JjZXMgdGhhdCB0aGlzIG5ldmVyIG9jY3VycwogICAgICAg
ICAgICAgICAgIEFTU0VSVChzdWJTZWwtPnBzZXVkb1R5cGUoKSAhPSBDU1NTZWxlY3Rvcjo6UHNl
dWRvTm90KTsKIAotICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWws
IGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZm9yY2VQc2V1ZG9DbGFz
c01hc2ssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICAgICAgICAgICAg
ICBpZiAoIWNoZWNrT25lU2VsZWN0b3Ioc3ViU2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywg
dHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNF
VURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5
bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0la
RVIpKSB7CkBAIC0yODQzLDcgKzI5ODEsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVj
dG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRv
QW55OgogICAgICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsLT5z
ZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NTU2VsZWN0b3JM
aXN0OjpuZXh0KHNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxl
Y3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBm
b3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09
IFNlbGVjdG9yTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3Io
c2VsZWN0b3IsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmss
IGZvcmNlUHNldWRvQ2xhc3NNYXNrLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkg
PT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzEzNiw5ICsz
Mjc0LDEwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc1NlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRP
blJ1bGVIYXNoKGNvbnN0IENTU1NlbGVjdG9yKiBzZWxlCiAgICAgcmV0dXJuIHNlbGVjdG9yLT50
YWcoKSA9PSBzdGFyQXRvbTsKIH0KIAotUnVsZURhdGE6OlJ1bGVEYXRhKENTU1N0eWxlUnVsZSog
cnVsZSwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCB1bnNpZ25lZCBwb3NpdGlvbikKK1J1bGVEYXRh
OjpSdWxlRGF0YShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29u
c3QgRWxlbWVudCogc2NvcGUsIHVuc2lnbmVkIHBvc2l0aW9uKQogICAgIDogbV9ydWxlKHJ1bGUp
CiAgICAgLCBtX3NlbGVjdG9yKHNlbGVjdG9yKQorICAgICwgbV9zY29wZShzY29wZSkKICAgICAs
IG1fc3BlY2lmaWNpdHkoc2VsZWN0b3ItPnNwZWNpZmljaXR5KCkpCiAgICAgLCBtX3Bvc2l0aW9u
KHBvc2l0aW9uKQogICAgICwgbV9oYXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoaXNGYXN0Q2hlY2th
YmxlU2VsZWN0b3Ioc2VsZWN0b3IpKQpAQCAtMzIwNyw3ICszMzQ2LDggQEAgUnVsZVNldDo6flJ1
bGVTZXQoKQogCiAKIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwq
IGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmICgha2V5KSBy
ZXR1cm47CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMgPSBtYXAuZ2V0KGtleSk7CkBAIC0z
MjE1LDQwICszMzU1LDQwIEBAIHZvaWQgUnVsZVNldDo6YWRkVG9SdWxlU2V0KEF0b21pY1N0cmlu
Z0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKICAgICAgICAgcnVsZXMgPSBuZXcgVmVjdG9y
PFJ1bGVEYXRhPjsKICAgICAgICAgbWFwLnNldChrZXksIHJ1bGVzKTsKICAgICB9Ci0gICAgcnVs
ZXMtPmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWwsIG1fcnVsZUNvdW50KyspKTsKKyAgICBydWxl
cy0+YXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgc2NvcGUsIG1fcnVsZUNvdW50KyspKTsKIH0K
IAotdm9pZCBSdWxlU2V0OjphZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3Iq
IHNlbCkKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVj
dG9yKiBzZWwsIGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmIChzZWwtPm1fbWF0Y2gg
PT0gQ1NTU2VsZWN0b3I6OklkKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCku
aW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGUsIHNlbCk7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWwt
PnZhbHVlKCkuaW1wbCgpLCBtX2lkUnVsZXMsIHJ1bGUsIHNlbCwgc2NvcGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNz
KSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgpLCBtX2NsYXNzUnVs
ZXMsIHJ1bGUsIHNlbCk7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgp
LCBtX2NsYXNzUnVsZXMsIHJ1bGUsIHNlbCwgc2NvcGUpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgICAKICAgICBpZiAoc2VsLT5pc1Vua25vd25Qc2V1ZG9FbGVtZW50KCkpIHsKLSAgICAg
ICAgYWRkVG9SdWxlU2V0KHNlbC0+dmFsdWUoKS5pbXBsKCksIG1fcHNldWRvUnVsZXMsIHJ1bGUs
IHNlbCk7CisgICAgICAgIGFkZFRvUnVsZVNldChzZWwtPnZhbHVlKCkuaW1wbCgpLCBtX3BzZXVk
b1J1bGVzLCBydWxlLCBzZWwsIHNjb3BlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbG9jYWxOYW1lID0gc2VsLT50YWcoKS5sb2NhbE5hbWUoKTsK
ICAgICBpZiAobG9jYWxOYW1lICE9IHN0YXJBdG9tKSB7Ci0gICAgICAgIGFkZFRvUnVsZVNldChs
b2NhbE5hbWUuaW1wbCgpLCBtX3RhZ1J1bGVzLCBydWxlLCBzZWwpOworICAgICAgICBhZGRUb1J1
bGVTZXQobG9jYWxOYW1lLmltcGwoKSwgbV90YWdSdWxlcywgcnVsZSwgc2VsLCBzY29wZSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX3VuaXZlcnNhbFJ1bGVzLmFwcGVuZChSdWxl
RGF0YShydWxlLCBzZWwsIG1fcnVsZUNvdW50KyspKTsKKyAgICBtX3VuaXZlcnNhbFJ1bGVzLmFw
cGVuZChSdWxlRGF0YShydWxlLCBzZWwsIHNjb3BlLCBtX3J1bGVDb3VudCsrKSk7CiB9CiAKIHZv
aWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciog
c2VsKQogewotICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBzZWwsIG1fcGFn
ZVJ1bGVzLnNpemUoKSkpOworICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBz
ZWwsIDAsIG1fcGFnZVJ1bGVzLnNpemUoKSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVz
RnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
JiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVTZXQ6
OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5
RXZhbHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNvbnN0
IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsKQEAg
LTMyNjMsMTEgKzM0MDMsMTEgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NT
dHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHNoZWV0
LT5pdGVtKGkpOwogICAgICAgICBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAg
IGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSksIHNjb3Bl
KTsKICAgICAgICAgZWxzZSBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAg
IENTU0ltcG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVt
KTsKICAgICAgICAgICAgIGlmICghaW1wb3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9y
dC0+bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCi0gICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9t
U2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisgICAg
ICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1
bSwgc3R5bGVTZWxlY3Rvciwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl0
ZW0tPmlzTWVkaWFSdWxlKCkpIHsKICAgICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRp
Y19jYXN0PENTU01lZGlhUnVsZSo+KGl0ZW0pOwpAQCAtMzI3OSwzNiArMzQxOSw1NyBAQCB2b2lk
IFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgICAgICAgICAgICAgICAgICBDU1NSdWxlICpjaGlsZEl0
ZW0gPSBydWxlcy0+aXRlbShqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSXRlbS0+
aXNTdHlsZVJ1bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBTdHls
ZVJ1bGUsIHNvIGFwcGVuZCBpdCB0byBvdXIgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAg
YWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNoaWxkSXRlbSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KGNoaWxkSXRlbSksIHNjb3BlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0
YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZv
bnRGYWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3Bl
ZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAv
LyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250
RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
U2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChjaGlsZEl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4K
LSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUo
c3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGNoaWxkSXRlbSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRo
ZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUg
c2NvcGVkIEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2Nv
cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJh
bWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVz
CiAgICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5p
c0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFkZCB0
aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VS
dWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpdGVtKTsK
LSAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1
bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3Ig
dGhlIG1vbWVudC4KKyAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8gaGF2ZSBzY29wZWQgQGZv
bnQtZmFjZSBydWxlcy4KKyAgICAgICAgICAgIGlmICghc2NvcGUpIHsKKyAgICAgICAgICAgICAg
ICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0Zv
bnRGYWNlUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRT
ZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0tleWZyYW1lc1J1bGUoKSkKLSAgICAgICAgICAg
IHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZSo+KGl0ZW0pKTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGSVhN
RTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZv
ciB0aGUgbW9tZW50LgorICAgICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBA
a2V5ZnJhbWUgcnVsZXMuCisgICAgICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgICAg
IHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZSo+KGl0ZW0pKTsKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5h
YmxlZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHls
ZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NT
U3R5bGVSdWxlKiBydWxlLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAocnVsZS0+
aXNQYWdlUnVsZSgpKSB7Ci0gICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19j
YXN0PENTU1BhZ2VSdWxlKj4ocnVsZSk7Ci0gICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBw
YWdlUnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSk7CisgICAgICAgIC8vIElnbm9yZSBAcGFn
ZSBydWxlcyBpZiB0aGUgc3R5bGUgc2hlZXQgaXMgc2NvcGVkCisgICAgICAgIGlmICghc2NvcGUp
IHsKKyAgICAgICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0PENTU1Bh
Z2VSdWxlKj4ocnVsZSk7CisgICAgICAgICAgICBhZGRQYWdlUnVsZShwYWdlUnVsZSwgcGFnZVJ1
bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCk7
IHM7IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCi0gICAgICAgICAgICBhZGRSdWxlKHJ1
bGUsIHMpOworICAgICAgICAgICAgYWRkUnVsZShydWxlLCBzLCBzY29wZSk7CiAgICAgfQogfQog
ICAgIApAQCAtMzM2OSw3ICszNTMwLDcgQEAgc3RhdGljIHZvaWQgY29sbGVjdEZlYXR1cmVzRnJv
bUxpc3QoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmIGZlYXR1cmVzLCBjb25zdAogICAgICAg
ICBpZiAoZm91bmRTaWJsaW5nU2VsZWN0b3IpIHsKICAgICAgICAgICAgIGlmICghZmVhdHVyZXMu
c2libGluZ1J1bGVzKQogICAgICAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcyA9IGFk
b3B0UHRyKG5ldyBSdWxlU2V0KTsKLSAgICAgICAgICAgIGZlYXR1cmVzLnNpYmxpbmdSdWxlcy0+
YWRkUnVsZShydWxlRGF0YS5ydWxlKCksIHJ1bGVEYXRhLnNlbGVjdG9yKCkpOyAgIAorICAgICAg
ICAgICAgZmVhdHVyZXMuc2libGluZ1J1bGVzLT5hZGRSdWxlKHJ1bGVEYXRhLnJ1bGUoKSwgcnVs
ZURhdGEuc2VsZWN0b3IoKSwgcnVsZURhdGEuc2NvcGUoKSk7ICAgCiAgICAgICAgIH0KICAgICB9
CiB9CkBAIC0zNDA4LDYgKzM1NjksMjcgQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAg
ICAgbV9wYWdlUnVsZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorU2NvcGVkUnVsZVNldHM6On5TY29w
ZWRSdWxlU2V0cygpCit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1hcCk7
Cit9CisKK1J1bGVTZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVu
dCogc2NvcGUpCit7CisgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkUnVsZVNldE1hcC5n
ZXQoc2NvcGUpOworICAgIGlmICghcnVsZVNldCkgeworICAgICAgICBydWxlU2V0ID0gbmV3IFJ1
bGVTZXQ7CisgICAgICAgIG1fc2NvcGVkUnVsZVNldE1hcC5zZXQoc2NvcGUsIHJ1bGVTZXQpOwor
ICAgIH0KKyAgICByZXR1cm4gcnVsZVNldDsKK30KKwordm9pZCBTY29wZWRSdWxlU2V0czo6Y29s
bGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QK
K3sKKyAgICBmb3IgKFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29w
ZWRSdWxlU2V0TWFwLmJlZ2luKCksIGl0RW5kID0gbV9zY29wZWRSdWxlU2V0TWFwLmVuZCgpOyBp
dCAhPSBpdEVuZDsgKytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+Y29sbGVjdEZlYXR1cmVzKGZl
YXR1cmVzKTsKK30KKwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBp
cyBtb3N0bHkgYm9yaW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0
aGUgcmVuZGVyc3R5bGUuLi4KIApAQCAtMzQ5NiwxNyArMzY3OCw3IEBAIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwg
Ym9vbCBpc0ZpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChy
dWxlcy0+Z2V0UGFnZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7
Ci0KLSAgICAvLyBJZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAg
IGlmIChtX21hdGNoZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8v
IFNvcnQgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsK
LQotICAgIC8vIE5vdyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBv
dXIgbGlzdCBvZiBkZWNscy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVk
UnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNo
ZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMoZmFsc2UpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFn
ZVJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYm9vbCBpc0xlZnRQ
YWdlLCBib29sIGlzRmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKaW5kZXggMzdkNmQzYy4uNzFkODQyNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC02Myw2ICs2Myw3IEBAIGNsYXNzIE1lZGlh
UXVlcnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxl
U2V0OworY2xhc3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxl
SW1hZ2U7CiBjbGFzcyBTdHlsZVNoZWV0OwpAQCAtMjMyLDEwICsyMzMsMTUgQEAgcHVibGljOgog
ICAgICAgICB2b2lkIGFkZE1hdGNoZWRSdWxlKGNvbnN0IFJ1bGVEYXRhKiBydWxlKSB7IG1fbWF0
Y2hlZFJ1bGVzLmFwcGVuZChydWxlKTsgfQogICAgICAgICB2b2lkIGFkZE1hdGNoZWREZWNsYXJh
dGlvbihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogZGVjbCk7CiAKKyAgICAgICAgLy8gbWF0
Y2hBdXRob3JSdWxlczogTWF0Y2ggYWxsIGdsb2JhbCBhbmQgYXBwbGljYWJsZSBzY29wZWQgYXV0
aG9yLWRlZmluZWQgcnVsZXMuCisgICAgICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgICAgICAvLyBtYXRjaFJ1bGVzOiBtYXRjaGVzIHZzLiBhbGwgcnVsZXMgaW4gdGhlIHBh
c3NlZC1pbiBSdWxlU2V0LgogICAgICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7Ci0gICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRl
RW1wdHlSdWxlcyk7CisgICAgICAgIC8vIEltcGxlbWVudGF0aW9uIG1ldGhvZHM6CisgICAgICAg
IHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxh
c3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAgICB2b2lkIG1hdGNo
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUluZGV4
LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMsIGNvbnN0IEVsZW1l
bnQqIHN0eWxlU2NvcGUgPSAwKTsKICAgICAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29u
c3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVzKCk7Cisg
ICAgICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wgY29sbGVjdFJ1bGVz
T25seSk7CiAgICAgICAgIAogICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3QgUnVsZURh
dGEmKTsKIApAQCAtMjQ4LDE3ICsyNTQsMTkgQEAgcHVibGljOgogICAgICAgICBib29sIGlzUmln
aHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRl
eCk7IH0KICAgICAgICAgYm9vbCBpc0ZpcnN0UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAg
ICAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBwYWdlSW5kZXgpIGNvbnN0OwotICAgICAgICAKLSAg
ICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0aG9yU3R5bGU7CisKKyAgICAgICAgT3duUHRyPFJ1
bGVTZXQ+IG1fZ2xvYmFsQXV0aG9yU3R5bGVzOworICAgICAgICBPd25QdHI8U2NvcGVkUnVsZVNl
dHM+IG1fc2NvcGVkQXV0aG9yU3R5bGVzOwogICAgICAgICBPd25QdHI8UnVsZVNldD4gbV91c2Vy
U3R5bGU7CiAKICAgICAgICAgRmVhdHVyZXMgbV9mZWF0dXJlczsKIAogICAgICAgICBzdHJ1Y3Qg
UGFyZW50U3RhY2tGcmFtZSB7CiAgICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKCkge30KLSAg
ICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVs
ZW1lbnQpIHt9CisgICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQp
IDogZWxlbWVudChlbGVtZW50KSwgY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSgwKSB7IH0KICAgICAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CiAgICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDQ+
IGlkZW50aWZpZXJIYXNoZXM7CisgICAgICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKiBjbG9zZXN0
U3R5bGVTY29wZUZyYW1lOwogICAgICAgICB9OwogICAgICAgICBWZWN0b3I8UGFyZW50U3RhY2tG
cmFtZT4gbV9wYXJlbnRTdGFjazsKICAgICAgICAgCkBAIC0yODMsOCArMjkxLDggQEAgcHVibGlj
OgogICAgICAgICAgICAgU2VsZWN0b3JDaGVja2VyKERvY3VtZW50KiwgYm9vbCBzdHJpY3RQYXJz
aW5nKTsKIAogICAgICAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxl
bWVudCopIGNvbnN0OwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENT
U1NlbGVjdG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3Vi
U2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCB1bnNpZ25lZCBmb3JjZVBzZXVkb0NsYXNz
TWFzayA9IERvTm90Rm9yY2VQc2V1ZG9DbGFzc01hc2ssIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRl
clN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUgPSAwKSBjb25zdDsKLSAgICAgICAgICAgIGJvb2wg
Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHluYW1p
Y1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgdW5zaWdu
ZWQgZm9yY2VQc2V1ZG9DbGFzc01hc2ssIFJlbmRlclN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1l
bnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRM
aW5rLCB1bnNpZ25lZCBmb3JjZVBzZXVkb0NsYXNzTWFzayA9IERvTm90Rm9yY2VQc2V1ZG9DbGFz
c01hc2ssIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUg
PSAwKSBjb25zdDsKKyAgICAgICAgICAgIGJvb2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rv
ciosIEVsZW1lbnQqLCBjb25zdCBFbGVtZW50KiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1
ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIHVuc2lnbmVkIGZv
cmNlUHNldWRvQ2xhc3NNYXNrLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFy
ZW50U3R5bGUpIGNvbnN0OwogICAgICAgICAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0Ns
YXNzKENTU1NlbGVjdG9yKiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgICAg
ICAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqLCBj
b25zdCBFbGVtZW50Kik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCAy
N2MwMWUzLi5jY2E1YmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0y
MzYsMjQgKzIzNiwyNiBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNT
aGVldCgpCiAgICAgICAgIG93bmVyLT5zdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAot
RG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK05vZGUqIENTU1N0eWxlU2hlZXQ6
OmZpbmRPd25lck5vZGUoKSBjb25zdAogewotICAgIFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0
aGlzOwotICAgIHdoaWxlIChzdHlsZU9iamVjdCkgeworICAgIGZvciAoY29uc3QgU3R5bGVCYXNl
KiBzdHlsZU9iamVjdCA9IHRoaXM7IHN0eWxlT2JqZWN0OyBzdHlsZU9iamVjdCA9IHN0eWxlT2Jq
ZWN0LT5wYXJlbnQoKSkgewogICAgICAgICBpZiAoc3R5bGVPYmplY3QtPmlzQ1NTU3R5bGVTaGVl
dCgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIG93
bmVyTm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IENTU1N0eWxlU2hlZXQqPihzdHlsZU9iamVjdCkt
Pm93bmVyTm9kZSgpOwogICAgICAgICAgICAgaWYgKG93bmVyTm9kZSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gb3duZXJOb2RlLT5kb2N1bWVudCgpOworICAgICAgICAgICAgICAgIHJldHVybiBv
d25lck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5pc1J1bGUoKSkK
LSAgICAgICAgICAgIHN0eWxlT2JqZWN0ID0gc3RhdGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlT2Jq
ZWN0KS0+cGFyZW50U3R5bGVTaGVldCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHls
ZU9iamVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQoKTsKICAgICB9Ci0KICAgICByZXR1cm4gMDsK
IH0KIAorRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KCkKK3sKKyAgICBOb2RlKiBv
d25lck5vZGUgPSBmaW5kT3duZXJOb2RlKCk7CisKKyAgICByZXR1cm4gb3duZXJOb2RlID8gb3du
ZXJOb2RlLT5kb2N1bWVudCgpIDogMDsKK30KKworCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxl
U2hlZXRDaGFuZ2VkKCkKIHsKICAgICBTdHlsZUJhc2UqIHJvb3QgPSB0aGlzOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmgKaW5kZXggMzVhNDUxMC4uZTRiNWEwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5oCkBAIC04OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZv
aWQgY2hlY2tMb2FkZWQoKTsKICAgICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwog
CisgICAgTm9kZSogZmluZE93bmVyTm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50KiBkb2N1bWVu
dCgpOwogCiAgICAgY29uc3QgU3RyaW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFy
c2V0OyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuaAppbmRleCAyZTU4Njg4Li4zZTYwZTk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKQEAgLTgwLDcgKzgwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgdGFrZUFsbENoaWxkcmVuRnJvbShDb250YWluZXJOb2RlKik7CiAKICAgICB2
b2lkIGNsb25lQ2hpbGROb2RlcyhDb250YWluZXJOb2RlKiBjbG9uZSk7Ci0gICAgCisKICAgICBi
b29sIGRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KGNvbnN0IFN0cmluZyYgc291cmNlVVJMKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBzY2hlZHVsZVNldE5lZWRzU3R5bGVSZWNhbGMoU3R5bGVDaGFuZ2VU
eXBlID0gRnVsbFN0eWxlQ2hhbmdlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCAyZWU3YTg0
Li40YzFmZDc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzk5LDYgKzEzOTksMjMgQEAg
dm9pZCBFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUq
IGJlZm9yZUNoYW5nZSwgTm9kZSogYWYKICAgICAgICAgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFu
Z2VzKHRoaXMsIHJlbmRlclN0eWxlKCksIGZhbHNlLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdl
LCBjaGlsZENvdW50RGVsdGEpOwogfQogCit2b2lkIEVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKQoreworICAgIGVuc3VyZVJhcmVEYXRhKCktPnJlZ2lzdGVyU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKTsKK30KKwordm9pZCBFbGVtZW50Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKQoreworICAgIEFTU0VSVChoYXNSYXJlRGF0YSgpKTsKKyAgICBpZiAoaGFzUmFy
ZURhdGEoKSkKKyAgICAgICAgcmFyZURhdGEoKS0+dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNo
aWxkKCk7Cit9CisKK2Jvb2wgRWxlbWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNSYXJlRGF0YSgpICYmIHJhcmVEYXRhKCktPmhhc1Njb3BlZEhU
TUxTdHlsZUNoaWxkKCk7Cit9CisKIHZvaWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4o
KQogewogICAgIGNsZWFySXNQYXJzaW5nQ2hpbGRyZW5GaW5pc2hlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKaW5kZXggODlkY2M2MC4uNmQ3NTBmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCkBAIC0yMzgsNiAr
MjM4LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgc2hhZG93
UHNldWRvSWQoKSBjb25zdDsKICAgICB2b2lkIHNldFNoYWRvd1BzZXVkb0lkKGNvbnN0IEF0b21p
Y1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRIVE1M
U3R5bGVDaGlsZCgpOworICAgIHZvaWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7
CisgICAgYm9vbCBoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAgICAgUmVuZGVy
U3R5bGUqIGNvbXB1dGVkU3R5bGUoUHNldWRvSWQgPSBOT1BTRVVETyk7CiAKICAgICB2b2lkIHNl
dFN0eWxlQWZmZWN0ZWRCeUVtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudFJhcmVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgK
aW5kZXggODMwMTUwNS4uZmIwYTIyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnRSYXJlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEu
aApAQCAtMzksNiArMzksMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNldENvbXB1dGVkU3R5
bGUoKTsKIAorICAgIHZvaWQgcmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIHZv
aWQgdW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgYm9vbCBoYXNTY29wZWRI
VE1MU3R5bGVDaGlsZCgpIGNvbnN0OworCiAgICAgdXNpbmcgTm9kZVJhcmVEYXRhOjpuZWVkc0Zv
Y3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsKICAgICB1c2luZyBOb2RlUmFyZURh
dGE6OnNldE5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogCkBAIC01
MCw2ICs1NCw4IEBAIHB1YmxpYzoKICAgICBPd25QdHI8RGF0YXNldERPTVN0cmluZ01hcD4gbV9k
YXRhc2V0RE9NU3RyaW5nTWFwOwogICAgIE93blB0cjxDbGFzc0xpc3Q+IG1fY2xhc3NMaXN0Owog
CisgICAgdW5zaWduZWQgbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworCiAgICAg
Ym9vbCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5OwogCiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJ
KQpAQCAtNjUsNiArNzEsNyBAQCBpbmxpbmUgSW50U2l6ZSBkZWZhdWx0TWluaW11bVNpemVGb3JS
ZXNpemluZygpCiBpbmxpbmUgRWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEoKQogICAg
IDogbV9taW5pbXVtU2l6ZUZvclJlc2l6aW5nKGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5n
KCkpCiAgICAgLCBtX3NoYWRvd1Jvb3QoMCkKKyAgICAsIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5
bGVDaGlsZHJlbigwKQogICAgICwgbV9zdHlsZUFmZmVjdGVkQnlFbXB0eShmYWxzZSkKICNpZiBF
TkFCTEUoRlVMTFNDUkVFTl9BUEkpCiAgICAgLCBtX2NvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnQo
ZmFsc2UpCkBAIC04Miw1ICs4OSwyMSBAQCBpbmxpbmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJl
c2V0Q29tcHV0ZWRTdHlsZSgpCiAgICAgbV9jb21wdXRlZFN0eWxlLmNsZWFyKCk7CiB9CiAKK2lu
bGluZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
Cit7CisgICAgKyttX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKK2lubGlu
ZSB2b2lkIEVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkK
K3sKKyAgICBBU1NFUlQobV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuID4gMCk7Cisg
ICAgLS1tX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKK2lubGluZSBib29s
IEVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAoreworICAg
IHJldHVybiBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRyZW47Cit9CisKIH0KICNlbmRp
ZiAvLyBFbGVtZW50UmFyZURhdGFfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQXR0cmlidXRlTmFtZXMuaW4gYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVO
YW1lcy5pbgppbmRleCAxNjc5ZTk2Li40OGY5NTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdHRyaWJ1dGVOYW1lcy5pbgpAQCAtMjY1LDYgKzI2NSw3IEBAIHJ1bGVzCiBzYW5kYm94CiBz
Y2hlbWUKIHNjb3BlCitzY29wZWQKIHNjcm9sbGFtb3VudAogc2Nyb2xsZGVsYXkKIHNjcm9sbGlu
ZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKaW5kZXggMGYyNTZlMS4u
ZmZjZmI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJBdHRyaWJ1dGUuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgogI2luY2x1ZGUgIlNjcmlwdEV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJTY3JpcHRhYmxl
RG9jdW1lbnRQYXJzZXIuaCIKQEAgLTM4LDYgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIGlubGluZSBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAsIFN0eWxl
RWxlbWVudChkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKQorICAgICwgbV9pc1JlZ2lzdGVyZWRX
aXRoU2NvcGluZ0VsZW1lbnQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUoc3R5bGVU
YWcpKTsKIH0KQEAgLTU3LDEyICs1OSw1MCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQogICAgICAgICBtX3NoZWV0LT5zZXRUaXRsZShhdHRy
LT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2NvcGVkQXR0cikgewor
ICAgICAgICBFbGVtZW50KiBzY29wZSA9IHNjb3BpbmdFbGVtZW50KCk7CisgICAgICAgIEFTU0VS
VChzY29wZSB8fCAhbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQpOworICAgICAgICBp
ZiAoc2NvcGUpIHsKKyAgICAgICAgICAgIGlmIChzY29wZWQoKSkKKyAgICAgICAgICAgICAgICBy
ZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKKyAgICAgICAgICAgIHNjb3Bl
LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGluRG9jdW1l
bnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGRvY3VtZW50KCktPnJlbmRlcmVyKCkp
CisgICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZlclJlY2Fs
Y1N0eWxlKTsKKyAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYmVmb3JlcHJv
Y2Vzc0F0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lcygp
LmJlZm9yZXByb2Nlc3NFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZlbnRMaXN0ZW5lcih0aGlzLCBh
dHRyKSk7CiAgICAgZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CiAKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVnaXN0ZXJXaXRoU2NvcGlu
Z0VsZW1lbnQoKQoreworICAgIEFTU0VSVCghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1l
bnQpOworICAgIGlmICghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQpIHsKKyAgICAg
ICAgRWxlbWVudCogc2NvcGUgPSBzY29waW5nRWxlbWVudCgpOworICAgICAgICBpZiAoIXNjb3Bl
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNjb3BlLT5yZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50
ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3Rlcldp
dGhTY29waW5nRWxlbWVudCgpCit7CisgICAgQVNTRVJUKG1faXNSZWdpc3RlcmVkV2l0aFNjb3Bp
bmdFbGVtZW50IHx8ICFzY29wZWQoKSk7CisgICAgaWYgKG1faXNSZWdpc3RlcmVkV2l0aFNjb3Bp
bmdFbGVtZW50KSB7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gc2NvcGluZ0VsZW1lbnQoKTsK
KyAgICAgICAgQVNTRVJUKHNjb3BlKTsKKyAgICAgICAgaWYgKHNjb3BlKQorICAgICAgICAgICAg
c2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgICAgICBtX2lzUmVn
aXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCA9IGZhbHNlOworICAgIH0KK30KKwogdm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewogICAgIFN0eWxlRWxlbWVu
dDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRoaXMpOwpAQCAtNzEsMTAgKzExMSwxNyBAQCB2b2lk
IEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpCiAKIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogeworICAgIHJlZ2lzdGVyV2l0aFNj
b3BpbmdFbGVtZW50KCk7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7
CiAgICAgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChkb2N1bWVudCgpLCB0aGlz
KTsKIH0KIAordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVtb3ZlKCkKK3sKKyAgICB1bnJl
Z2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAgSFRNTEVsZW1lbnQ6OndpbGxSZW1vdmUo
KTsKK30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50KCkKIHsK
ICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpAQCAtMTIwLDQgKzE2Nywy
OSBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldERpc2FibGVkKGJvb2wgc2V0RGlzYWJsZWQp
CiAgICAgICAgIHN0eWxlU2hlZXQtPnNldERpc2FibGVkKHNldERpc2FibGVkKTsKIH0KIAorYm9v
bCBIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQoKSBjb25zdAoreworICAgIHJldHVybiBmYXN0SGFz
QXR0cmlidXRlKHNjb3BlZEF0dHIpOworfQorCitFbGVtZW50KiBIVE1MU3R5bGVFbGVtZW50Ojpz
Y29waW5nRWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29w
aW5nRWxlbWVudCAmJiAhc2NvcGVkKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gRklY
TUU6IFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmVmaW5lZCBmb3Igc2NvcGVkIHN0eWxlc2hl
ZXRzIHdpdGhpbiBzaGFkb3cgRE9NLgorICAgIC8vIEFzIHdyaXR0ZW4sIHN1Y2ggYSBzdHlsZXNo
ZWV0IGNvdWxkIHN0eWxlIHRoZSBob3N0IGVsZW1lbnQsIGFzIHdlbGwgYXMgY2hpbGRyZW4gb2Yg
dGhlIGhvc3QuCisgICAgLy8gT1RPSCwgdGhpcyBwYXZlcyB0aGUgd2F5IGZvciBhIDpib3VuZC1l
bGVtZW50IGltcGxlbWVudGF0aW9uLgorICAgIENvbnRhaW5lck5vZGUqIHBhcmVudE9ySG9zdCA9
IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudE9ySG9zdCB8fCAhcGFyZW50T3JI
b3N0LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gSWdub3Jl
ICdzY29wZWQnIGF0dHJpYnV0ZSBvbiA8c3R5bGU+IGVsZW1lbnRzIHdpdGhpbiA8aGVhZD4uCisg
ICAgSFRNTEhlYWRFbGVtZW50KiBoZWFkID0gZG9jdW1lbnQoKS0+aGVhZCgpOworICAgIGlmICho
ZWFkICYmIGhlYWQtPmNvbnRhaW5zKHRoaXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiB0b0VsZW1lbnQocGFyZW50T3JIb3N0KTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuaAppbmRleCBhZjI4MDg1Li43MmFiODI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuaApAQCAtNDIsMTIgKzQyLDE3IEBAIHB1YmxpYzoKICAgICBi
b29sIGRpc2FibGVkKCkgY29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChib29sKTsKIAorICAg
IGJvb2wgc2NvcGVkKCkgY29uc3Q7CisgICAgRWxlbWVudCogc2NvcGluZ0VsZW1lbnQoKSBjb25z
dDsKKyAgICBib29sIGlzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50OyB9CisKIHByaXZhdGU6CiAgICAg
SFRNTFN0eWxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcik7CiAKICAgICAvLyBvdmVybG9hZCBmcm9tIEhUTUxFbGVtZW50CiAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSopOwogICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRlZEludG9Eb2N1bWVudCgpOworICAgIHZpcnR1YWwgdm9pZCB3aWxsUmVt
b3ZlKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tRG9jdW1lbnQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyID0gZmFsc2UsIE5v
ZGUqIGJlZm9yZUNoYW5nZSA9IDAsIE5vZGUqIGFmdGVyQ2hhbmdlID0gMCwgaW50IGNoaWxkQ291
bnREZWx0YSA9IDApOwogCkBAIC02MSw2ICs2NiwxMSBAQCBwcml2YXRlOgogCiAgICAgdmlydHVh
bCBjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBjb25zdCBB
dG9taWNTdHJpbmcmIHR5cGUoKSBjb25zdDsKKworICAgIHZvaWQgcmVnaXN0ZXJXaXRoU2NvcGlu
Z0VsZW1lbnQoKTsKKyAgICB2b2lkIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKKwor
ICAgIGJvb2wgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7CiB9OwogCiB9IC8vbmFt
ZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102100</attachid>
            <date>2011-07-27 00:28:56 -0700</date>
            <delta_ts>2011-09-06 12:34:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-49142-20110727162854.patch</filename>
            <type>text/plain</type>
            <size>79314</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTE3NDUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBlMzliYWQ4OWFjZDc5Mzk1OWQwMDIw
MDU2ZTEwNWNmZDU3YWJjN2E3Li4xNDI4MmNkZmRmMzQ2ZGI1ZmQ0NTRkZGViNDE4OGQwZGU1NDhk
ZTg0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDctMjcgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNj
b3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgLSkg
YmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUg
PHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wNy0y
NiAgTm9lbCBHb3Jkb24gIDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CiAKICAgICAgICAgQWRkIHJl
Z3Jlc3Npb24gdGVzdCBmb3IgOmVtcHR5IHsgZGlzcGxheTogbm9uZSB9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVmZTA2NzFmYWM2ZTE2ZTMzYTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGF0dGFjaGluZyBhIG5ldyA8c3R5bGUgc2Nv
cGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisK
Ky0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1My
OiByZ2IoMCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiBy
Z2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTog
cmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiBy
Z2IoMCwgMTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJ
TklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtYXR0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNo
Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNjAzZGY1NWRlNDliZjZjZmUxZjhjNmFkNDBiMGU2NTBjZjhhZTZl
NwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1h
dHRhY2guaHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhl
YWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlv
biBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdc
bicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAg
ICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVk
U3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVz
dCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicp
OworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAg
ICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVz
dHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgp
OworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7Cisg
ICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIEFUVEFD
SElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICBzdHlsZUVsZW0u
c2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHN0eWxlRWxlbS5pbm5l
ckhUTUwgPSAnZGl2IHsgY29sb3I6IHJlZDsgfSBwIHsgY29sb3I6IGdyZWVuOyB9JzsKKyAgICAg
ICAgICAgIGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0eWxlRWxlbSwgZGl2RWxlbS5maXJzdENoaWxk
KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAg
dGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAg
ICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAg
ICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAg
IH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQv
Y3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxl
PgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBhdHRh
Y2hpbmcgYSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2Pgor
ICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4
dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3BhbiBpZD0i
UzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0
eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZmZkNzZjODQ0YTlhODI4
OTMyYzllM2E1MGNiODMyMTA3ZmZjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDQgQEAK
K1Rlc3QgPHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitU
ZXh0CisKK1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAor
CitUZXh0CitUZXh0CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAwKQor
UDE6IHJnYigwLCAwLCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQorCitT
MjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAyNTUp
CitFMjogcmdiKDI1NSwgMCwgMCkKKworUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAw
KQorUjM6IHJnYigwLCAwLCAwKQorRTM6IHJnYigwLCAwLCAwKQorCitTNDogcmdiKDAsIDAsIDAp
CitQNDogcmdiKDAsIDAsIDApCitSNDogcmdiKDAsIDAsIDApCitFNDogcmdiKDAsIDAsIDApCist
LS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJh
c2ljLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMGJjMjNhY2Y3Y2QwNTgwMDYxOGI0NWU5NWViYzdkNTU1M2Jj
OTkyYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC1iYXNpYy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8
aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0
aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsg
J1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAg
eworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7Cisg
ICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0
ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIENPTVBV
VEVEIFNUWUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAg
IHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdSMScpOworICAgICAgICAgICAgdGVzdCgn
RTEnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAg
ICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1IyJyk7CisgICAgICAgICAg
ICB0ZXN0KCdFMicpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Mz
Jyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAg
ICAgICAgICAgIHRlc3QoJ0UzJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAg
dGVzdCgnUzQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdS
NCcpOworICAgICAgICAgICAgdGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklO
SVNIRUQgLS0tJyk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0
eWxlIHNjb3BlZCZndDs8L3A+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4g
aWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAg
IDxwcmUgaWQgPSAiUjEiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0i
RTEiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJm
b28iPgorICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBz
Y29wZWQ+CisgICAgICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAg
ICAgIHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9y
OiBibHVlOyB9CisgICAgICAgICAgICAgICAgLmZvbyAuYmF6IHsgY29sb3I6IHB1cnBsZTsgfSAv
KiBzaG91bGQgTk9UIGFwcGx5ISAqLworICAgICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAg
IDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwv
cD4KKyAgICAgICAgICAgIDxwcmUgaWQ9IlIyIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAg
ICAgICAgICA8cHJlIGlkPSJFMiIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgICAgICA8L2Rp
dj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMi
PlRleHQ8L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjMiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4K
KyAgICAgICAgPHByZSBpZD0iRTMiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+
CisgICAgICAgIDxwIGlkPSJQNCI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSNCIgY2xh
c3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFNCIgY2xhc3M9ImJheiI+VGV4
dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWRldGFjaC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQt
ZGV0YWNoLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdmN2RmM2Rh
YmY5MWE5YTczNDBlM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBk
ZXRhY2hpbmcgYSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAor
VGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkK
K1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDAp
CitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgREVUQUNISU5H
IDxTVFlMRSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQor
UzI6IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6
IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYx
Y2I4NTU4YWMzMjdhMTg3NzFmMzllZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZ
UEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp
cHQiPgorICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9u
IHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRl
ZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgn
Y29sb3InKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCct
LS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAg
IGxvZygnLS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAg
ICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAg
ICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOwor
ICAgICAgICAgICAgZGl2RWxlbS5yZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAg
c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAg
ICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAg
IH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAg
ICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHls
ZSBzY29wZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMx
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdiBpZD0iRElWIj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9j
c3MiIHNjb3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAg
IHAgeyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9
IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+
CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8
cCBpZD0iUDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9w
cmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
M2EyMDU4N2RmNWFmZmY2MmRjMjdmNjJhYWVjNDUwYjMzNzY1Y2FjOAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitUZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRy
aWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisK
K1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJn
YigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiBy
Z2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09Q
RUQgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigy
NTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJn
YigwLCAxMjgsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYWYz
Nzc0Y2FiMmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCkBAIC0w
LDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFy
IGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQg
KyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAg
ICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0
ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1Az
Jyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RB
bGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0t
LScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykucmVtb3Zl
QXR0cmlidXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7
CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJ
TklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAg
PHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxh
Y2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+
CisgICAgPHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0
eWxlJmd0OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4
dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxk
aXY+CisgICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+Cisg
ICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdy
ZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+Cisg
ICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0
PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNl
dC1zY29wZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LXNldC1zY29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4
NDk2NzUxMTM3MjIyYzQ2NjVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBA
QAorVGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1l
bnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJ
TkFMIC0tLQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2Io
MjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiBy
Z2IoMCwgMTI4LCAwKQorLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwg
MCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAx
MjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQg
LS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQt
c2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3Bl
ZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjk5MDNiZDQxZTI5OWQwMzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgy
ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQt
c2V0LXNjb3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1
bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNn
ICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBy
dW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0n
KTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIg
U0VUVElORyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ1NUWUxFJykuc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAg
ICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9
CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAg
ICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkg
b25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBh
dHRyaWJ1dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAg
ICAgPHNwYW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+
CisgICAgPC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0i
dGV4dC9jc3MiPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAg
cCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0i
UzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4K
KyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxw
IGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3By
ZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmYTRhNTNlMjgxZDJmMjc3MWRiMzdk
MDBkNzBmMzlmY2U1ZTJjNzM2Li43NWFiMmJmNDk2MzM5N2JmNjBjZTM4Y2M1ZjQ2ZGVkZDRiMmMw
YzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTEtMDctMjcgIFJvbGFuZCBTdGVp
bmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0
eWxlIHNjb3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ5MTQyCisKKyAgICAgICAgSW1wbGVtZW50aW5nIHN1cHBvcnQgZm9yIDxz
dHlsZSBzY29wZWQ+OgorICAgICAgICBDU1NTdHlsZVNlbGVjdG9yIGhvbGRzIGdsb2JhbCBhcyB3
ZWxsIGFzIHNjb3BlZCBhdXRob3Igc2hlZXRzLgorICAgICAgICBTY29wZWQgYXV0aG9yIHNoZWV0
cyBhcmUgbWFwcGVkIGJ5IHRoZWlyIHNjb3BpbmcgZWxlbWVudCAodGhlIHBhcmVudCBlbGVtZW50
IG9mIDxzdHlsZSBzY29wZWQ+KS4KKyAgICAgICAgPHN0eWxlIHNjb3BlZD4gZWxlbWVudHMgcmVn
aXN0ZXIgYW5kIHVuLXJlZ2lzdGVyIHdpdGggdGhlaXIgc2NvcGluZyBwYXJlbnQgZWxlbWVudAor
ICAgICAgICBpbiBhIGtpbmQgb2YgcmVmLWNvdW50aW5nLCBpbiBvcmRlciB0byBhbGxvdyBxdWlj
ayBsb29rLXVwIG9mIHdoZXRoZXIgYW4gZWxlbWVudCBoYXMgc2NvcGVkIHN0eWxlIGNoaWxkcmVu
LgorICAgICAgICBBbHNvLCBwcmV2ZW50IHN0eWxlIHNoYXJpbmcgZnJvbSBjcm9zc2luZyBpbnRv
L291dCBvZiBzY29wZWQgc3R5bGUgYm91bmRhcmllcy4KKworICAgICAgICBUZXN0czogZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHls
ZS1zY29wZWQtYmFzaWMuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWRldGFjaC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3Zl
LXNjb3BlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHA6IGFkZCBzdXBw
b3J0IGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVs
ZVNldHM6OlNjb3BlZFJ1bGVTZXRzKTogY2xhc3MgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisg
ICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OmRldGVybWluZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHVz
aFBhcmVudFN0YWNrRnJhbWUpOiBhZGQgc2NvcGluZyBpbmZvcm1hdGlvbiB0byBwYXJlbnQgc3Rh
Y2sgZnJhbWUKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9y
UnVsZXMpOiBtYXRjaCBzY29wZWQgYXV0aG9yIHJ1bGVzCisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6Om1hdGNoUnVsZVNldCk6CisgICAgICAgIChXZWJDb3JlOjpsZXNzU3BlY2lmaWMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRyYW5zZmVyTWF0Y2hl
ZFJ1bGVzKTogcmVmYWN0b3JpbmcgdG8gc2ltcGxpZnkgY29kZQorICAgICAgICAoV2ViQ29yZTo6
bWF0Y2hlc0luVHJlZVNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoUnVsZXNGb3JMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OmxvY2F0ZUNvdXNpbkxpc3QpOiBhdm9pZCBjcm9zc2luZyBzY29wZWQgc3R5bGUgYm91bmRhcmll
cworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhF
bGVtZW50KTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmxvY2F0
ZVNoYXJlZFN0eWxlKTogZGl0dG8KKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpw
c2V1ZG9TdHlsZUZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnBz
ZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFN0eWxlUnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmNvbGxlY3RGZWF0dXJlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyk6CisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6
OlBhcmVudFN0YWNrRnJhbWU6OlBhcmVudFN0YWNrRnJhbWUpOgorICAgICAgICAqIGNzcy9DU1NT
dHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmZpbmRPd25l
ck5vZGUpOiByZWZhY3RvcmluZyB0byBzaW1wbGlmeSBjb2RlCisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNoZWV0Ojpkb2N1bWVudCk6IGRpdHRvCisgICAgICAgICogY3NzL0NTU1N0eWxlU2hl
ZXQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKTogcmVnaXN0ZXIgYSA8c3R5bGUgc2Nv
cGVkPiBjaGlsZAorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dW5yZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKTogdW4tcmVnaXN0ZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGlsZAorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiBxdWVyeSB3aGV0
aGVyIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQgaXMgcHJlc2VudAorICAgICAgICAqIGRvbS9FbGVt
ZW50Lmg6CisgICAgICAgICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudFJhcmVEYXRhOjpFbGVtZW50UmFyZURhdGEpOiBob2xkcyBpbmZvcm1hdGlvbiBh
Ym91dCA8c3R5bGUgc2NvcGVkPiBjaGlsZHJlbgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJh
cmVEYXRhOjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKTogCisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50UmFyZURhdGE6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKToK
KyAgICAgICAgKiBodG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbjoKKyAgICAgICAgKiBodG1sL0hU
TUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOiB1cGRhdGUgc2NvcGVkIHN0YXRlLCBbdW4tXXJlZ2lzdGVy
IHdpdGggcGFyZW50IGFzIG5lY2Vzc2FyeQorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxl
bWVudDo6cmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQpOiByZWdpc3RlcmluZyB3aXRoIHBhcmVu
dAorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6dW5yZWdpc3RlcldpdGhTY29w
aW5nRWxlbWVudCk6IHVuLXJlZ2lzdGVyaW5nIHdpdGggcGFyZW50CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6IHJlZ2lzdGVyIHdpdGgg
cGFyZW50IGlmIG5lY2Vzc2FyeQorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
d2lsbFJlbW92ZSk6IHVuLXJlZ2lzdGVyIHdpdGggcGFyZW50IGlmIG5lY2Vzc2FyeQorICAgICAg
ICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6c2NvcGVkKTogcXVlcnkgc2NvcGVkIHN0YXR1
cworICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6c2NvcGluZ0VsZW1lbnQpOiBn
ZXQgc2NvcGluZyBlbGVtZW50CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Ojppc1JlZ2lzdGVyZWRXaXRoU2NvcGlu
Z0VsZW1lbnQpOiB3aGV0aGVyIHRoZSA8c3R5bGU+IGVsZW1lbnQgaXMgcmVnaXN0ZXJlZCB3aXRo
IGl0cyBwYXJlbnQuCisKIDIwMTEtMDctMjUgIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1
bmcuY29tPgogCiAgICAgICAgIFtDTUFLRV0gU3BsaXQgSlNDIHJlbGF0ZWQgZmlsZXMgZnJvbSBX
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
U3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKaW5kZXggNmYwOGMwYmY0ZDU0YWVlYWRlZDg0NTMzZGFiMzMwYzU5MjMwNjc1NS4uNzA3YmFi
YTM3MGQ1ZDAzNDkxZjhmMzdmMDJkMThkMmRiMjdlMTQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNjMsOSArNjMsMTEgQEAKICNpbmNsdWRlICJIVE1MRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxGcmFtZUVs
ZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRN
TElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQ
cm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgogI2lu
Y2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0zMjQsMTYgKzMyNiwxNSBAQCBjbGFzcyBSdWxlU2V0IHsK
IHB1YmxpYzoKICAgICBSdWxlU2V0KCk7CiAgICAgflJ1bGVTZXQoKTsKLSAgICAKKwogICAgIHR5
cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgVmVjdG9yPFJ1bGVEYXRhPio+IEF0b21S
dWxlTWFwOwotICAgIAotICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCos
IGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVjdG9yKiA9IDApOwogCi0g
ICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxlKiBpdGVtKTsKLSAgICB2b2lkIGFkZFJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKTsKLSAgICB2b2lkIGFkZFBh
Z2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBh
ZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAotICAg
ICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7
CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgTWVkaWFR
dWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3IqID0gMCwgY29uc3QgRWxlbWVudCogPSAw
KTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSosIGNvbnN0IEVsZW1lbnQq
KTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsKKyAgICB2
b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CisgICAgdm9pZCBh
ZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCosIEF0b21SdWxlTWFwJiwgQ1NTU3R5bGVSdWxl
KiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIHNocmlua1RvRml0KCk7CiAgICAgdm9pZCBkaXNh
YmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsg
fQogCkBAIC0zNTcsNiArMzU4LDIzIEBAIHB1YmxpYzoKICAgICBib29sIG1fYXV0b1Nocmlua1Rv
Rml0RW5hYmxlZDsKIH07CiAKK2NsYXNzIFNjb3BlZFJ1bGVTZXRzIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTY29wZWRSdWxlU2V0cyk7CitwdWJsaWM6CisgICAgU2NvcGVkUnVsZVNldHMo
KSB7IH0KKyAgICB+U2NvcGVkUnVsZVNldHMoKTsKKworICAgIFJ1bGVTZXQqIGdldChjb25zdCBF
bGVtZW50KiBzY29wZSkgeyByZXR1cm4gbV9zY29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7IH0K
KyAgICBSdWxlU2V0KiBlbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVudCopOworCisgICAgdm9pZCBj
b2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVyZXMmKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3QgRWxlbWVudCosIFJ1bGVTZXQqPiBTY29w
ZWRSdWxlU2V0TWFwOworCisgICAgU2NvcGVkUnVsZVNldE1hcCBtX3Njb3BlZFJ1bGVTZXRNYXA7
Cit9OworCiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRl
ZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAg
LTQyOCw2ICs0NDYsMzIgQEAgc3RhdGljIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiByaWdo
dFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4gcmlnaHRUb0xlZnREZWNsLmdldCgpOwog
fQogCisvLyBEZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEgc3R5bGUgc2hlZXQgKGlmIGFueSkuIFJl
dHVybnMgJ2ZhbHNlJyBpZiBpdCdzIGEgc2NvcGVkIHN0eWxlIHNoZWV0IGluIGFuIGludmFsaWQg
bG9jYXRpb24uCitzdGF0aWMgYm9vbCBkZXRlcm1pbmVTY29wZShDU1NTdHlsZVNoZWV0KiBzaGVl
dCwgY29uc3QgRWxlbWVudComIHNjb3BlKQoreworICAgIHNjb3BlID0gMDsKKworICAgIGlmICgh
c2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIE5vZGUqIG93bmVyTm9kZSA9IHNo
ZWV0LT5maW5kT3duZXJOb2RlKCk7CisgICAgaWYgKCFvd25lck5vZGUgfHwgIW93bmVyTm9kZS0+
aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpzdHls
ZVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSFRNTFN0eWxlRWxlbWVudCogc3R5
bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxlRWxlbWVudCo+KG93bmVyTm9kZSk7Cisg
ICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlRWxlbWVudC0+ZG9jdW1lbnQoKTsKKyAgICBp
ZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzY29wZSA9IHN0eWxl
RWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIEFTU0VSVChzY29wZSk7CisKKyAgICByZXR1
cm4gc2NvcGU7IC8vIFRoZXJlIG11c3QgYmUgYSBzY29waW5nIGVsZW1lbnQgLSByZXR1cm4gJ2Zh
bHNlJyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoaXMgaXMgbm90IHRoZSBjYXNlLgorfQorCiBD
U1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5
bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHlsZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hl
ZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlU2hlZXQqIHBh
Z2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdy
b3VwVXNlclNoZWV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBz
dHJpY3RQYXJzaW5nLCBib29sIG1hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKQEAgLTQ2OSw5ICs1
MTMsMTAgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9j
dW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICBpZiAobV9yb290RGVmYXVsdFN0
eWxlICYmIHZpZXcpCiAgICAgICAgIG1fbWVkaXVtID0gYWRvcHRQdHIobmV3IE1lZGlhUXVlcnlF
dmFsdWF0b3Iodmlldy0+bWVkaWFUeXBlKCksIHZpZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRT
dHlsZS5nZXQoKSkpOwogCi0gICAgbV9hdXRob3JTdHlsZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0
KTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcyA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKKyAg
ICBtX3Njb3BlZEF1dGhvclN0eWxlcyA9IGFkb3B0UHRyKG5ldyBTY29wZWRSdWxlU2V0cyk7CiAg
ICAgLy8gQWRkaW5nIHJ1bGVzIGZyb20gbXVsdGlwbGUgc2hlZXRzLCBzaHJpbmsgYXQgdGhlIGVu
ZC4KLSAgICBtX2F1dGhvclN0eWxlLT5kaXNhYmxlQXV0b1Nocmlua1RvRml0KCk7CisgICAgbV9n
bG9iYWxBdXRob3JTdHlsZXMtPmRpc2FibGVBdXRvU2hyaW5rVG9GaXQoKTsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIHN1Y2tzISBUaGUgdXNlciBzaGVldCBpcyByZXBhcnNlZCBldmVyeSB0aW1lIQog
ICAgIE93blB0cjxSdWxlU2V0PiB0ZW1wVXNlclN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQp
OwpAQCAtNDgzLDcgKzUyOCw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0b3Io
RG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAgICAg
ICBpZiAocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSktPmlzVXNlclN0eWxlU2hlZXQoKSkKICAg
ICAgICAgICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3JvdXBV
c2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYWdl
R3JvdXBVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAg
ICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3Vw
VXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIH0KICAg
ICB9CiAKQEAgLTQ5MSwxNSArNTM2LDI2IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2Vs
ZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAg
ICAgIG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQg
cnVsZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBl
ZEVsZW1lbnRTaGVldCkKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
bWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGlmIChtYXBwZWRFbGVt
ZW50U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBzY29wZXMgY2FuL3No
b3VsZCBiZSBhZGRlZCBoZXJlLgorICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRkUnVs
ZXNGcm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIH0K
IAogICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRvY3VtZW50CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7IGkrKykgewogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRz
LT5pdGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVl
dC0+ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNo
ZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1bSwgdGhpcyk7
CisgICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxl
ZCgpKSB7CisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0
PENTU1N0eWxlU2hlZXQqPihzaGVldCk7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29w
ZSA9IDA7CisKKyAgICAgICAgICAgIGlmICghZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQsIHNjb3Bl
KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAg
ICAgICAgICAgICAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+ZW5zdXJlRXhpc3RzKHNjb3BlKS0+
YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRS
dWxlc0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgfQogICAg
IH0gICAgCiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNl
bGVjdG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50
IHNldCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1h
dGlvbiB0byByZWplY3QKQEAgLTUwNywxMSArNTYzLDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNT
U1N0eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVT
aGVlCiAgICAgLy8gVXN1YWxseSB0aGVyZSBhcmUgbm8gc2libGluZyBydWxlcyBpbiB0aGUgZGVm
YXVsdCBzdHlsZSBidXQgdGhlIE1hdGhNTCBzaGVldCBoYXMgc29tZS4KICAgICBpZiAoc2libGlu
Z1J1bGVzSW5EZWZhdWx0U3R5bGUpCiAgICAgICAgIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxl
LT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0gICAgbV9hdXRob3JTdHlsZS0+Y29sbGVj
dEZlYXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmNvbGxlY3RG
ZWF0dXJlcyhtX2ZlYXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1fdXNl
clN0eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKLSAgICBtX2F1dGhvclN0eWxl
LT5zaHJpbmtUb0ZpdCgpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5zaHJpbmtUb0ZpdCgp
OwogICAgIGlmIChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcykKICAgICAgICAgbV9mZWF0dXJlcy5z
aWJsaW5nUnVsZXMtPnNocmlua1RvRml0KCk7CiAKQEAgLTYzNCw2ICs2OTEsMTEgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpCiAg
ICAgc2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBtX2FuY2VzdG9y
SWRlbnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOwor
ICAgIC8vIFBvaW50IHRvIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGNsb3Nlc3Qgc3R5bGUgc2NvcGUg
KG9yIGxlYXZlIGF0IDAgaWYgbm9uZSkuCisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKSkKKyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSA9
ICZwYXJlbnRGcmFtZTsKKyAgICBlbHNlIGlmIChtX3BhcmVudFN0YWNrLnNpemUoKSA+PSAyKQor
ICAgICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0gbV9wYXJlbnRTdGFj
a1ttX3BhcmVudFN0YWNrLnNpemUoKSAtIDJdLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiB9CiAK
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCkBAIC02OTQsNDkg
Kzc1NiwxMDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24o
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCiAgICAgbV9tYXRjaGVkRGVjbHMuYXBw
ZW5kKGRlY2wpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNl
dCogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBp
bmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxl
cyhpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVt
cHR5UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIC8vIE1hdGNo
IGdsb2JhbCBhdXRob3IgcnVsZXMuCisgICAgbWF0Y2hSdWxlU2V0KG1fZ2xvYmFsQXV0aG9yU3R5
bGVzLmdldCgpLCAwLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIC8vIE1hdGNoIHNjb3BlZCBzdHlsZSBzaGVldCdzIHJ1bGVzLgorICAgIGlm
ICghbV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVu
dCA9PSBtX3BhcmVudE5vZGUpIHsKKyAgICAgICAgLy8gRmFzdCBicmFuY2g6IGFjY2VzcyBlbmNs
b3Npbmcgc2NvcGVzIGRpcmVjdGx5IGZyb20gcGFyZW50IHN0YWNrCisgICAgICAgIC8vIChidXQg
c3RhcnQgd2l0aCBjdXJyZW50IGVsZW1lbnQpLgorICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNT
Y29wZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0g
bV9zY29wZWRBdXRob3JTdHlsZXMtPmdldChtX2VsZW1lbnQpOworICAgICAgICAgICAgaWYgKHJ1
bGVTZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIG1fZWxlbWVudCwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAg
ICAgfQorICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKiBzY29wZUZyYW1lID0gbV9wYXJlbnRTdGFj
ay5sYXN0KCkuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZTsKKyAgICAgICAgd2hpbGUgKHNjb3BlRnJh
bWUpIHsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gc2NvcGVGcmFtZS0+ZWxl
bWVudDsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxl
cy0+Z2V0KHNjb3BlKTsKKyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAg
IG1hdGNoUnVsZVNldChydWxlU2V0LCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIGlmIChzY29wZUZyYW1lID09ICZt
X3BhcmVudFN0YWNrLmZpcnN0KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAtLXNjb3BlRnJhbWU7CisgICAgICAgICAgICBzY29wZUZyYW1lID0gc2NvcGVGcmFtZS0+Y2xv
c2VzdFN0eWxlU2NvcGVGcmFtZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8v
IFNsb3cgYnJhbmNoOiBjbGltYiB0cmVlLCBjaGVjayBmb3Igc3R5bGUgc2NvcGVzIGF0IGV2ZXJ5
IGVsZW1lbnQuCisgICAgICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IG1fZWxlbWVudDsgbm9k
ZTsgbm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5p
c0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBj
b25zdCBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgaWYg
KCFlbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5
bGVzLT5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAg
ICAgICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZWxlbWVudCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhtX2NoZWNrZXIubV9jb2xsZWN0UnVsZXNPbmx5KTsK
K30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzR2xvYmFsbHkoUnVsZVNldCog
cnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKIHsKICAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogCiAgICAgaWYg
KCFydWxlcyB8fCAhbV9lbGVtZW50KQogICAgICAgICByZXR1cm47CisKKyAgICBtYXRjaFJ1bGVT
ZXQocnVsZXMsIDAsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlS
dWxlcyk7CisgICAgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKG1fY2hlY2tlci5tX2NvbGxl
Y3RSdWxlc09ubHkpOworfQogICAgIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVT
ZXQoUnVsZVNldCogcnVsZXMsIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit7CiAgICAg
Ly8gV2UgbmVlZCB0byBjb2xsZWN0IHRoZSBydWxlcyBmb3IgaWQsIGNsYXNzLCB0YWcsIGFuZCBl
dmVyeXRoaW5nIGVsc2UgaW50byBhIGJ1ZmZlciBhbmQKICAgICAvLyB0aGVuIHNvcnQgdGhlIGJ1
ZmZlci4KICAgICBpZiAobV9lbGVtZW50LT5oYXNJRCgpKQotICAgICAgICBtYXRjaFJ1bGVzRm9y
TGlzdChydWxlcy0+Z2V0SURSdWxlcyhtX2VsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCku
aW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVz
KTsKKyAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldElEUnVsZXMobV9lbGVtZW50
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpLmltcGwoKSksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwg
bGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIGlmIChtX2VsZW1lbnQtPmhh
c0NsYXNzKCkpIHsKICAgICAgICAgQVNTRVJUKG1fc3R5bGVkRWxlbWVudCk7CiAgICAgICAgIGNv
bnN0IFNwYWNlU3BsaXRTdHJpbmcmIGNsYXNzTmFtZXMgPSBtX3N0eWxlZEVsZW1lbnQtPmNsYXNz
TmFtZXMoKTsKICAgICAgICAgc2l6ZV90IHNpemUgPSBjbGFzc05hbWVzLnNpemUoKTsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCi0gICAgICAgICAgICBtYXRjaFJ1
bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhjbGFzc05hbWVzW2ldLmltcGwoKSksIGZp
cnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAg
ICAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0Q2xhc3NSdWxlcyhjbGFzc05hbWVzW2ld
LmltcGwoKSksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVt
cHR5UnVsZXMpOwogICAgIH0KICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHBzZXVkb0lkID0gbV9l
bGVtZW50LT5zaGFkb3dQc2V1ZG9JZCgpOwogICAgIGlmICghcHNldWRvSWQuaXNFbXB0eSgpKSB7
CiAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOwotICAgICAgICBtYXRjaFJ1bGVzRm9y
TGlzdChydWxlcy0+Z2V0UHNldWRvUnVsZXMocHNldWRvSWQuaW1wbCgpKSwgZmlyc3RSdWxlSW5k
ZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgbWF0Y2hSdWxl
c0Zvckxpc3QocnVsZXMtPmdldFBzZXVkb1J1bGVzKHBzZXVkb0lkLmltcGwoKSksIHNjb3BlLCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwogICAgIH0K
LSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMobV9lbGVtZW50LT5sb2Nh
bE5hbWUoKS5pbXBsKCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVt
cHR5UnVsZXMpOwotICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRVbml2ZXJzYWxSdWxl
cygpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwot
ICAgIAorICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRUYWdSdWxlcyhtX2VsZW1lbnQt
PmxvY2FsTmFtZSgpLmltcGwoKSksIHNjb3BlLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRl
eCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRV
bml2ZXJzYWxSdWxlcygpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGxlc3NTcGVjaWZpYyhj
b25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1bGVEYXRhKiByMikKK3sKKyAgICB1bnNpZ25lZCBz
cGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNpdHkoKTsKKyAgICB1bnNpZ25lZCBzcGVjaWZpY2l0
eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKKyAgICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVj
aWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkgPCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5
MSA8IHNwZWNpZmljaXR5MjsgCit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydEFuZFRy
YW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wgY29sbGVjdFJ1bGVzT25seSkKK3sKICAgICAvLyBJZiB3
ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgogICAgIGlmIChtX21hdGNoZWRS
dWxlcy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIFNvcnQgdGhl
IHNldCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLSAgICAKKyAg
ICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4oKSwgbV9tYXRjaGVkUnVsZXMuZW5kKCks
IGxlc3NTcGVjaWZpYyk7CisKICAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVk
IHJ1bGVzIG92ZXIgdG8gb3VyIGxpc3Qgb2YgZGVjbHMuCi0gICAgaWYgKCFtX2NoZWNrZXIubV9j
b2xsZWN0UnVsZXNPbmx5KSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21h
dGNoZWRSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlv
bihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKLSAgICB9IGVsc2Ug
eworICAgIGlmIChjb2xsZWN0UnVsZXNPbmx5KSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgaWYgKCFt
X3J1bGVMaXN0KQogICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NSdWxlTGlzdDo6Y3Jl
YXRlKCk7CiAgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRjaGVkUnVsZXNbaV0t
PnJ1bGUoKSk7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICBhZGRN
YXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24o
KSk7CiAgICAgfQogfQogCkBAIC03ODAsMTIgKzkwMSwxNSBAQCBpbmxpbmUgYm9vbCBNYXRjaGlu
Z1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1hdGNoaW5nVUFSdWxl
c1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi1pbmxpbmUgc3RhdGljIGJvb2wg
bWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlLCBib29sIHJ1bGVSZWFjaGVz
SW50b1NoYWRvd0RPTSkKK2lubGluZSBzdGF0aWMgYm9vbCBtYXRjaGVzSW5UcmVlU2NvcGUoVHJl
ZVNjb3BlKiB0cmVlU2NvcGUsIGNvbnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUsIGJvb2wgcnVsZVJl
YWNoZXNJbnRvU2hhZG93RE9NKQogewotICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29wZTo6
aXNNYXRjaGluZ1VBUnVsZXMoKSB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9yU2hlZXRzKCkgfHwg
cnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NOworICAgIHJldHVybiBNYXRjaGluZ1VBUnVsZXNTY29w
ZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQorICAgICAgICB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9y
U2hlZXRzKCkKKyAgICAgICAgfHwgKHN0eWxlU2NvcGUgJiYgc3R5bGVTY29wZS0+dHJlZVNjb3Bl
KCkgPT0gdHJlZVNjb3BlKQorICAgICAgICB8fCBydWxlUmVhY2hlc0ludG9TaGFkb3dET007CiB9
CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9y
PFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRl
eCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNvbnN0IEVsZW1lbnQq
IHN0eWxlU2NvcGUsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9v
bCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBpZiAoIXJ1bGVzKQogICAgICAgICByZXR1cm47
CkBAIC03OTgsOCArOTIyLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9y
TGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKICAgICAgICAgY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwogICAgICAgICBpZiAoY2FuVXNl
RmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRhKSkgewotICAgICAg
ICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwgbV9j
aGVja2VyLm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKKyAgICAgICAgaWYgKGNoZWNrU2Vs
ZWN0b3IocnVsZURhdGEsIHN0eWxlU2NvcGUpKSB7CisgICAgICAgICAgICBpZiAoIW1hdGNoZXNJ
blRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBzdHlsZVNjb3BlLCBtX2NoZWNrZXIu
bV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMgdG8gYXBwbHksIHRo
ZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAgICAgIENTU1N0eWxl
UnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKQEAgLTgyOCwxOCArOTUyLDYgQEAgdm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+
KiBydWxlcywgaW50JiBmaXIKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBjb21wYXJl
UnVsZXMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCi17Ci0gICAgdW5z
aWduZWQgc3BlY2lmaWNpdHkxID0gcjEtPnNwZWNpZmljaXR5KCk7Ci0gICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHkyID0gcjItPnNwZWNpZmljaXR5KCk7Ci0gICAgcmV0dXJuIChzcGVjaWZpY2l0eTEg
PT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVj
aWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7IAotfQotCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNv
cnRNYXRjaGVkUnVsZXMoKQotewotICAgIHN0ZDo6c29ydChtX21hdGNoZWRSdWxlcy5iZWdpbigp
LCBtX21hdGNoZWRSdWxlcy5lbmQoKSwgY29tcGFyZVJ1bGVzKTsKLX0KLQogaW5saW5lIEVJbnNp
ZGVMaW5rIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5lTGlua1N0
YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVt
ZW50LT5pc0xpbmsoKSkKQEAgLTk2Nyw3ICsxMDc5LDcgQEAgRUluc2lkZUxpbmsgQ1NTU3R5bGVT
ZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpkZXRlcm1pbmVMaW5rU3RhdGVTbG93Q2FzZShFbGVt
ZW4KIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9y
KENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgUHNldWRv
SWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNl
bCwgZWxlbWVudCwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNo
ZXM7CisgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5hbWljUHNl
dWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogc3RhdGljIGNvbnN0
IHVuc2lnbmVkIGNTdHlsZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAtOTc5LDYgKzEwOTEsOCBA
QCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVu
dCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBh
cmVudCB8fCAhcGFyZW50LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJu
IDA7CiAgICAgU3R5bGVkRWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihw
YXJlbnQpOwogICAgIGlmIChwLT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7
CkBAIC05OTQsOCArMTEwOCwxMCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3Vz
aW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgIC8vIHdp
bGwgbmV2ZXIgZ28gZGVlcGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxz
IGludG8gcmVjdXJzaW9uLgogICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhy
ZXNob2xkOwogICAgIHdoaWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50
Tm9kZSkgeworICAgICAgICBmb3IgKDsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVu
dE5vZGUtPnByZXZpb3VzU2libGluZygpKSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OworICAg
ICAgICAgICAgaWYgKGN1cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KGN1
cnJlbnROb2RlKS0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBw
YXJlbnRTdHlsZSAmJiBjdXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAg
ICAvLyBBZGp1c3QgZm9yIHVudXNlZCByZXNlcnZlZCB0cmllcy4KICAgICAgICAgICAgICAgICB2
aXNpdGVkTm9kZUNvdW50IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwpAQCAt
MTAwMyw3ICsxMTE5LDYgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlz
dChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmIChzdWJjb3VudCA+PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnRO
b2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAgICAgICAgfQogICAgICAgICBjdXJyZW50Tm9kZSA9
IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNpbi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9k
ZUNvdW50KTsKICAgICAgICAgdGhpc0NvdXNpbiA9IGN1cnJlbnROb2RlOwpAQCAtMTAxNSw3ICsx
MTMwLDcgQEAgTm9kZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50
KiBwYXJlbnQsIHVuc2lnbmVkJiB2aXNpdGVkTm9kZUMKIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
bWF0Y2hlc1NpYmxpbmdSdWxlcygpCiB7CiAgICAgaW50IGZpcnN0U2libGluZ1J1bGUgPSAtMSwg
bGFzdFNpYmxpbmdSdWxlID0gLTE7Ci0gICAgbWF0Y2hSdWxlcyhtX2ZlYXR1cmVzLnNpYmxpbmdS
dWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxlLCBmYWxzZSk7Cisg
ICAgbWF0Y2hSdWxlc0dsb2JhbGx5KG1fZmVhdHVyZXMuc2libGluZ1J1bGVzLmdldCgpLCBmaXJz
dFNpYmxpbmdSdWxlLCBsYXN0U2libGluZ1J1bGUsIGZhbHNlKTsKICAgICBpZiAobV9tYXRjaGVk
RGVjbHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgbV9tYXRjaGVkRGVj
bHMuY2xlYXIoKTsKQEAgLTExMjcsNiArMTI0Miw5IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUqIG5vZGUpIGNvbnN0CiAgICAgaWYgKGVsZW1l
bnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJblJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKwogICAgIGJvb2wgaXNDb250cm9sID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVs
ZW1lbnQoKTsKIAogICAgIGlmIChpc0NvbnRyb2wgIT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9s
RWxlbWVudCgpKQpAQCAtMTE5Myw2ICsxMzExLDggQEAgQUxXQVlTX0lOTElORSBSZW5kZXJTdHls
ZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hhcmVkU3R5bGUoKQogICAgICAgICByZXR1cm4g
MDsKICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAg
ICAgICAgIHJldHVybiAwOworICAgIGlmIChtX3N0eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAwOwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMg
c2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAgICAgdW5zaWduZWQgY291bnQgPSAwOwpAQCAt
MTIyNiwxNyArMTM0NiwxNyBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhp
bnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUpCiAgICAgLy8gRmlyc3Qgd2UgbWF0Y2gg
cnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KICAgICBSdWxlU2V0KiB1c2VyQWdlbnRT
dHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoInByaW50IikKICAg
ICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsKLSAgICBtYXRjaFJ1bGVz
KHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7Cisg
ICAgbWF0Y2hSdWxlc0dsb2JhbGx5KHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBs
YXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVs
ZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAgaWYgKCFtX2NoZWNrZXIu
bV9zdHJpY3RQYXJzaW5nKQotICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRRdWlya3NTdHlsZSwg
Zmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hSdWxlc0dsb2Jh
bGx5KGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsK
ICAgICAgICAgCiAgICAgLy8gSWYgZG9jdW1lbnQgdXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGlu
IHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZpZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHlsZSBzaGVldC4KICAgICBpZiAobV9jaGVja2Vy
Lm1fZG9jdW1lbnQtPmlzVmlld1NvdXJjZSgpKSB7CiAgICAgICAgIGlmICghZGVmYXVsdFZpZXdT
b3VyY2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRWaWV3U291cmNlU3R5bGUoKTsKLSAgICAgICAg
bWF0Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVs
ZSwgZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkoZGVmYXVsdFZpZXdTb3VyY2VT
dHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTE0
MjYsNyArMTU0Niw3IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6
OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBSZW5kZXJTdHlsCiAgICAgaWYgKCFyZXNvbHZl
Rm9yUm9vdERlZmF1bHQpIHsKICAgICAgICAgLy8gNC4gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQg
cnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAg
ICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2Vy
UnVsZSwgZmFsc2UpOworICAgICAgICAgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KG1fdXNlclN0eWxl
LmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKIAogICAgICAgICAv
LyA1LiBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBiZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50
YXRpb25hbCBhdHRyaWJ1dGVzCiAgICAgICAgIC8vIG1hcHBlZCBmcm9tIEhUTUwuCkBAIC0xNDcx
LDcgKzE1OTEsNyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpz
dHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVuZGVyU3R5bAogICAgIAogICAgICAgICAvLyA2
LiBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cyBuZXh0LgogICAgICAgICBpZiAobV9t
YXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9y
U3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAg
ICAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVs
ZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIDcuIE5vdyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0
dHJpYnV0ZS4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5
bGVkRWxlbWVudCkgewpAQCAtMTY4Niw4ICsxODA2LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHls
ZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVk
bywKICAgICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwogCiAgICAgaWYg
KG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7Ci0gICAgICAgIG1hdGNoUnVsZXMobV91c2Vy
U3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAg
ICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1
dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KG1fdXNlclN0eWxl
LmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hBdXRob3JSdWxlcyhmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKICAgICB9
CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNFbXB0eSgpICYmICF2aXNpdGVkU3R5bGUpCkBA
IC0xNzU0LDcgKzE4NzQsOCBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVj
dG9yOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9
IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgbWF0Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5
bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAgICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5
bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9h
dXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNv
bnNpZGVyIHRoZSBnbG9iYWwgUnVsZVNldCBmb3IgQHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRN
TDUgc3BlYy4KKyAgICBtYXRjaFBhZ2VSdWxlcyhtX2dsb2JhbEF1dGhvclN0eWxlcy5nZXQoKSwg
aXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBtX2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAg
YXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2UsIDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAt
IDEpOwogCkBAIC0yMDQwLDcgKzIxNjEsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NT
dHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogICAg
ICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVldCBydWxlcy4KICAgICAgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CiAgICAgICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZSA9
IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5
bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBF
bXB0eUNTU1J1bGVzKTsKKyAgICAgICAgICAgIG1hdGNoUnVsZXNHbG9iYWxseShtX3VzZXJTdHls
ZS5nZXQoKSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVt
cHR5Q1NTUnVsZXMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMDQ5LDcgKzIxNzAsNyBAQCBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVz
Rm9yRWxlbWVudChFbGVtZW50KiBlLAogCiAgICAgICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBh
dXRob3Igc2hlZXRzLgogICAgICAgICBpbnQgZmlyc3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRo
b3JSdWxlID0gLTE7Ci0gICAgICAgIG1hdGNoUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmly
c3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1
bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRo
b3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fY2hl
Y2tlci5tX3NhbWVPcmlnaW5Pbmx5ID0gZmFsc2U7CiAgICAgfQpAQCAtMjA2MCw3ICsyMTgxLDcg
QEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVS
dWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICByZXR1cm4gbV9ydWxlTGlzdC5yZWxlYXNl
KCk7CiB9CiAKLWlubGluZSBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29u
c3QgUnVsZURhdGEmIHJ1bGVEYXRhKQoraW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2hl
Y2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEsIGNvbnN0IEVsZW1lbnQqIHNjb3Bl
KQogewogICAgIG1fZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAgIG1fY2hlY2tlci5tX2hh
c1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IGZhbHNlOwpAQCAtMjA3NCwxMSArMjE5NSwxMSBAQCBp
bmxpbmUgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRh
JiBydWxlRGF0YSkKICAgICAgICAgLy8gVGhpcyBpcyBsaW1pdGVkIHRvIEhUTUwgb25seSBzbyB3
ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBuYW1lc3BhY2UuCiAgICAgICAgIGlmIChydWxlRGF0
YS5oYXNUb3BTZWxlY3Rvck1hdGNoaW5nSFRNTEJhc2VkT25SdWxlSGFzaCgpICYmICFydWxlRGF0
YS5oYXNNdWx0aXBhcnRTZWxlY3RvcigpICYmIG1fZWxlbWVudC0+aXNIVE1MRWxlbWVudCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6
OmZhc3RDaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCk7CisgICAg
ICAgIHJldHVybiBTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNl
bGVjdG9yKCksIG1fZWxlbWVudCwgc2NvcGUpOwogICAgIH0KIAogICAgIC8vIFNsb3cgcGF0aC4K
LSAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gbV9jaGVja2VyLmNoZWNrU2VsZWN0b3IocnVsZURh
dGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwg
bV9mb3JjZVBzZXVkb0NsYXNzTWFzaywgc3R5bGUoKSwgbV9wYXJlbnROb2RlID8gbV9wYXJlbnRO
b2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CisgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hl
Y2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwgc2NvcGUs
IG1fZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlLCBtX2ZvcmNlUHNldWRvQ2xhc3NNYXNrLCBz
dHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwKTsK
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JNYXRjaGVzKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgaWYgKG1fY2hlY2tlci5tX3BzZXVkb1N0eWxlICE9IE5PUFNFVURPICYmIG1fY2hlY2tl
ci5tX3BzZXVkb1N0eWxlICE9IG1fZHluYW1pY1BzZXVkbykKQEAgLTIxMTEsMTAgKzIyMzIsMTAg
QEAgaW5saW5lIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3Iq
IHNlbGVjdG9yKQogfQogICAgIAogdGVtcGxhdGUgPGJvb2wgY2hlY2tWYWx1ZShjb25zdCBFbGVt
ZW50KiwgQXRvbWljU3RyaW5nSW1wbCopPgotaW5saW5lIGJvb2wgZmFzdENoZWNrU2luZ2xlU2Vs
ZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3QgRWxlbWVudComIGVsZW1l
bnQsIGNvbnN0IENTU1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVt
ZW50KiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQoraW5saW5lIGJvb2wgZmFz
dENoZWNrU2luZ2xlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqJiBzZWxlY3RvciwgY29uc3Qg
RWxlbWVudComIGVsZW1lbnQsIGNvbnN0IEVsZW1lbnQqIHNjb3BlLCBjb25zdCBDU1NTZWxlY3Rv
ciomIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgY29uc3QgRWxlbWVudComIHRvcENoaWxkT3JTdWJz
ZWxlY3Rvck1hdGNoRWxlbWVudCkKIHsKICAgICBBdG9taWNTdHJpbmdJbXBsKiB2YWx1ZSA9IHNl
bGVjdG9yLT52YWx1ZSgpLmltcGwoKTsKLSAgICBmb3IgKDsgZWxlbWVudDsgZWxlbWVudCA9IGVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgeworICAgIGZvciAoOyBlbGVtZW50OyBlbGVtZW50ID0g
KGVsZW1lbnQgPT0gc2NvcGUpID8gMCA6IGVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKSkgewogICAg
ICAgICBpZiAoY2hlY2tWYWx1ZShlbGVtZW50LCB2YWx1ZSkgJiYgc2VsZWN0b3JUYWdNYXRjaGVz
KGVsZW1lbnQsIHNlbGVjdG9yKSkgewogICAgICAgICAgICAgaWYgKHNlbGVjdG9yLT5yZWxhdGlv
bigpID09IENTU1NlbGVjdG9yOjpEZXNjZW5kYW50KQogICAgICAgICAgICAgICAgIHRvcENoaWxk
T3JTdWJzZWxlY3RvciA9IDA7CkBAIC0yMTYyLDcgKzIyODMsNyBAQCBpbmxpbmUgYm9vbCBjaGVj
a1RhZ1ZhbHVlKGNvbnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBsKikKIAogfQogCi1ib29s
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29u
c3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50KQorYm9vbCBD
U1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKGNvbnN0
IENTU1NlbGVjdG9yKiBzZWxlY3RvciwgY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgRWxl
bWVudCogc2NvcGUpCiB7CiAgICAgQVNTRVJUKGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKHNlbGVj
dG9yKSk7CiAKQEAgLTIxODQsMTUgKzIzMDUsMTUgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiBzZWwK
ICAgICB3aGlsZSAoc2VsZWN0b3IpIHsKICAgICAgICAgc3dpdGNoIChzZWxlY3Rvci0+bV9tYXRj
aCkgewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDbGFzczoKLSAgICAgICAgICAgIGlmICgh
ZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tDbGFzc1ZhbHVlPihzZWxlY3RvciwgZWxlbWVu
dCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1l
bnQpKQorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNz
VmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJ
ZDoKLSAgICAgICAgICAgIGlmICghZmFzdENoZWNrU2luZ2xlU2VsZWN0b3I8Y2hlY2tJRFZhbHVl
PihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vi
c2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVT
ZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRP
clN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpOb25lOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxl
Y3RvcjxjaGVja1RhZ1ZhbHVlPihzZWxlY3RvciwgZWxlbWVudCwgdG9wQ2hpbGRPclN1YnNlbGVj
dG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQorICAgICAgICAgICAgaWYg
KCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja1RhZ1ZhbHVlPihzZWxlY3RvciwgZWxlbWVu
dCwgc2NvcGUsIHRvcENoaWxkT3JTdWJzZWxlY3RvciwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yTWF0
Y2hFbGVtZW50KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgZGVmYXVsdDoKQEAgLTIyMDcsNyArMjMyOCwxNiBAQCBib29sIENTU1N0
eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NT
U2VsZWN0b3IqIHNlbAogLy8gKiBTZWxlY3Rvck1hdGNoZXMgICAgICAgICAtIHRoZSBzZWxlY3Rv
ciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgLSB0
aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVtZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFu
Y2VzdG9yIG9mIGUKLUNTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVTZWxl
Y3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVs
ZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJv
b2wgZW5jb3VudGVyZWRMaW5rLCB1bnNpZ25lZCBmb3JjZVBzZXVkb0NsYXNzTWFzaywgUmVuZGVy
U3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29u
c3QKK0NTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2Vs
ZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKAorICAgIENTU1NlbGVjdG9yKiBzZWwsCisgICAg
RWxlbWVudCogZSwKKyAgICBjb25zdCBFbGVtZW50KiBzY29wZSwKKyAgICBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbywKKyAgICBib29sIGlzU3ViU2VsZWN0b3IsCisgICAgYm9vbCBlbmNvdW50ZXJl
ZExpbmssCisgICAgdW5zaWduZWQgZm9yY2VQc2V1ZG9DbGFzc01hc2ssCisgICAgUmVuZGVyU3R5
bGUqIGVsZW1lbnRTdHlsZSwKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBj
b25zdAogewogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gU3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fu
bm90IGJlIGFwcGxpZWQgdG8gdGhlIChjb25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJlZQpAQCAt
MjIxNyw3ICsyMzQ3LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IKICNlbmRpZgogCiAgICAg
Ly8gZmlyc3Qgc2VsZWN0b3IgaGFzIHRvIG1hdGNoCi0gICAgaWYgKCFjaGVja09uZVNlbGVjdG9y
KHNlbCwgZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3RvciwgZW5jb3VudGVyZWRMaW5rLCBm
b3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQor
ICAgIGlmICghY2hlY2tPbmVTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBp
c1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrLCBlbGVt
ZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzTG9jYWxseTsKIAogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBzZWxlY3RvcnMgaGFzIHRvIG1h
dGNoCkBAIC0yMjI4LDEwICsyMzU4LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0
Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAgICAg
aWYgKCFzZWwpCiAgICAgICAgIHJldHVybiBTZWxlY3Rvck1hdGNoZXM7CiAKLSAgICBpZiAocmVs
YXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQorICAgIGlmIChyZWxhdGlvbiAhPSBD
U1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpIHsKICAgICAgICAgLy8gQmFpbC1vdXQgaWYgdGhpcyBz
ZWxlY3RvciBpcyBpcnJlbGV2YW50IGZvciB0aGUgcHNldWRvU3R5bGUKICAgICAgICAgaWYgKG1f
cHNldWRvU3R5bGUgIT0gTk9QU0VVRE8gJiYgbV9wc2V1ZG9TdHlsZSAhPSBkeW5hbWljUHNldWRv
KQogICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OworICAgICAgICAv
LyBEb24ndCBnbyBwYXN0IHRoZSBzY29waW5nIGVsZW1lbnQgKGlmIGFueSkuCisgICAgICAgIGlm
IChlID09IHNjb3BlKQorICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5
OworICAgIH0KIAogICAgIC8vIENoZWNrIGZvciBuZXN0ZWQgbGlua3MuCiAgICAgaWYgKG1fbWF0
Y2hWaXNpdGVkUHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKQEAgLTIyNDYsMjQgKzIz
ODAsMjUgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IKIAogICAgIHN3aXRjaCAocmVsYXRpb24p
IHsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDoKLSAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICB3aGlsZSAoZSAhPSBzY29wZSkgewogICAgICAgICAg
ICAgICAgIENvbnRhaW5lck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgICAgICAgICBlID0gc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG4pOwotICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2gg
PSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVk
TGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2spOworICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0
Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrKTsKICAgICAgICAgICAg
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAgICAgICAgewotICAgICAgICAgICAgQ29u
dGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbiB8fCAh
bi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxz
Q29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0g
ICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrKTsKLSAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKGUgIT0gc2NvcGUpIHsKKyAgICAgICAgICAgICAgICBDb250YWluZXJO
b2RlKiBuID0gZS0+cGFyZW50Tm9kZSgpOworICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHk7CisgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFz
ayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghbV9j
b2xsZWN0UnVsZXNPbmx5ICYmIGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlz
RWxlbWVudE5vZGUoKSkgewpAQCAtMjI3OCw3ICsyNDEzLDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAg
ICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogICAgICAgICAgICAgbV9tYXRj
aFZpc2l0ZWRQc2V1ZG9DbGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2Vs
ZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3Jj
ZVBzZXVkb0NsYXNzTWFzayk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWws
IGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBz
ZXVkb0NsYXNzTWFzayk7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6SW5k
aXJlY3RBZGphY2VudDoKICAgICAgICAgICAgIGlmICghbV9jb2xsZWN0UnVsZXNPbmx5ICYmIGUt
PnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewpAQCAt
MjI5NCw3ICsyNDI5LDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NTdHls
ZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogICAgICAgICAgICAgICAgIGUgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obik7CiAgICAgICAgICAgICAgICAgbV9tYXRjaFZpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2gg
PSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVk
TGluaywgZm9yY2VQc2V1ZG9DbGFzc01hc2spOworICAgICAgICAgICAgICAgIFNlbGVjdG9yTWF0
Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZh
bHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrKTsKICAgICAgICAgICAg
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgIH07CkBAIC0yMzA2LDE0ICsyNDQxLDE0IEBA
IENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAgICAgICAgICAgICBpZiAoKGVsZW1lbnRTdHlsZSB8
fCBtX2NvbGxlY3RSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHlu
YW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKICAgICAgICAgICAgICAgICAhKChSZW5kZXJTY3Jv
bGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NS
T0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+bV9tYXRj
aCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAgICAgICAgIHJldHVybiBT
ZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9y
KHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVk
b0NsYXNzTWFzaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpOworICAgICAgICAg
ICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgdHJ1
ZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0eWxlLCBl
bGVtZW50UGFyZW50U3R5bGUpOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpTaGFkb3dEZXNj
ZW5kYW50OgogICAgICAgICB7CiAgICAgICAgICAgICBOb2RlKiBzaGFkb3dIb3N0Tm9kZSA9IGUt
PnNoYWRvd0FuY2VzdG9yTm9kZSgpOwogICAgICAgICAgICAgaWYgKHNoYWRvd0hvc3ROb2RlID09
IGUgfHwgIXNoYWRvd0hvc3ROb2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihzaGFkb3dIb3N0Tm9kZSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmssIGZv
cmNlUHNldWRvQ2xhc3NNYXNrKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNl
bCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNl
UHNldWRvQ2xhc3NNYXNrKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjQ3Miw3ICsyNjA3LDcg
QEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0
ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wg
Q1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlz
U3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCB1bnNpZ25lZCBmb3JjZVBzZXVkb0Ns
YXNzTWFzaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQ
YXJlbnRTdHlsZSkgY29uc3QKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2Vy
OjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIGNvbnN0IEVs
ZW1lbnQqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9y
LCBib29sIGVuY291bnRlcmVkTGluaywgdW5zaWduZWQgZm9yY2VQc2V1ZG9DbGFzc01hc2ssIFJl
bmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGUpOwogICAgIGlmICghZSkKQEAgLTI1MTQsNyArMjY0OSw3
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNl
ciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2ZXIgb2NjdXJzCiAgICAgICAgICAgICAgICAgQVNTRVJU
KHN1YlNlbC0+cHNldWRvVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOwogCi0gICAg
ICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgZHluYW1pY1BzZXVk
bywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBmb3JjZVBzZXVkb0NsYXNzTWFzaywgZWxlbWVudFN0
eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgICAgICAgICAgICAgIGlmICghY2hlY2tPbmVT
ZWxlY3RvcihzdWJTZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJl
ZExpbmssIGZvcmNlUHNldWRvQ2xhc3NNYXNrLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRT
dHlsZSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgaWYgKGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgKFJlbmRlclNj
cm9sbGJhcjo6c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBT
Q1JPTExCQVJfQ09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikpIHsKQEAgLTI4NDMs
NyArMjk3OCw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVj
a09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Bbnk6CiAgICAgICAgICAg
ICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5m
aXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0
b3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHNlbGVjdG9yLCBl
LCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGZvcmNlUHNldWRvQ2xhc3NN
YXNrLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkgPT0gU2VsZWN0b3JNYXRjaGVz
KQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgc2Nv
cGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZm9yY2VQc2V1ZG9DbGFz
c01hc2ssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSA9PSBTZWxlY3Rvck1hdGNo
ZXMpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zMjA3LDcgKzMzNDIsNyBAQCBSdWxlU2V0
Ojp+UnVsZVNldCgpCiAKIAogdm9pZCBSdWxlU2V0OjphZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5n
SW1wbCoga2V5LCBBdG9tUnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rvciogc2VsKQogewogICAg
IGlmICgha2V5KSByZXR1cm47CiAgICAgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMgPSBtYXAuZ2V0
KGtleSk7CkBAIC0zMjQ4LDcgKzMzODMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFBhZ2VSdWxlKENT
U1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCkKICAgICBtX3BhZ2VSdWxlcy5hcHBl
bmQoUnVsZURhdGEocnVsZSwgc2VsLCBtX3BhZ2VSdWxlcy5zaXplKCkpKTsKIH0KIAotdm9pZCBS
dWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgTWVk
aWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9y
KQordm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwg
Y29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBDU1NTdHlsZVNlbGVjdG9yKiBzdHls
ZVNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAoIXNoZWV0KQogICAg
ICAgICByZXR1cm47CkBAIC0zMjYzLDExICszMzk4LDExIEBAIHZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICBTdHlsZUJh
c2UqIGl0ZW0gPSBzaGVldC0+aXRlbShpKTsKICAgICAgICAgaWYgKGl0ZW0tPmlzU3R5bGVSdWxl
KCkpCi0gICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4o
aXRlbSkpOworICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVs
ZSo+KGl0ZW0pLCBzY29wZSk7CiAgICAgICAgIGVsc2UgaWYgKGl0ZW0tPmlzSW1wb3J0UnVsZSgp
KSB7CiAgICAgICAgICAgICBDU1NJbXBvcnRSdWxlKiBpbXBvcnQgPSBzdGF0aWNfY2FzdDxDU1NJ
bXBvcnRSdWxlKj4oaXRlbSk7CiAgICAgICAgICAgICBpZiAoIWltcG9ydC0+bWVkaWEoKSB8fCBt
ZWRpdW0uZXZhbChpbXBvcnQtPm1lZGlhKCksIHN0eWxlU2VsZWN0b3IpKQotICAgICAgICAgICAg
ICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxl
U2VsZWN0b3IpOworICAgICAgICAgICAgICAgIGFkZFJ1bGVzRnJvbVNoZWV0KGltcG9ydC0+c3R5
bGVTaGVldCgpLCBtZWRpdW0sIHN0eWxlU2VsZWN0b3IsIHNjb3BlKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlIGlmIChpdGVtLT5pc01lZGlhUnVsZSgpKSB7CiAgICAgICAgICAgICBDU1NNZWRp
YVJ1bGUqIHIgPSBzdGF0aWNfY2FzdDxDU1NNZWRpYVJ1bGUqPihpdGVtKTsKQEAgLTMyNzksMzMg
KzM0MTQsNTQgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHlsZVNoZWV0
KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICAgICAgICAgICAgICAgICAg
Q1NTUnVsZSAqY2hpbGRJdGVtID0gcnVsZXMtPml0ZW0oaik7CiAgICAgICAgICAgICAgICAgICAg
IGlmIChjaGlsZEl0ZW0tPmlzU3R5bGVSdWxlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEl0IGlzIGEgU3R5bGVSdWxlLCBzbyBhcHBlbmQgaXQgdG8gb3VyIGxpc3QKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihj
aGlsZEl0ZW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZFN0eWxlUnVsZShzdGF0aWNf
Y2FzdDxDU1NTdHlsZVJ1bGUqPihjaGlsZEl0ZW0pLCBzY29wZSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0ZvbnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0
b3IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBv
dXIgc2V0LgotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBm
b250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihjaGlsZEl0ZW0pOwot
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFk
ZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBhZGQgQGZvbnQtZmFj
ZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAZm9udC1mYWNlIHJ1
bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3Rh
dGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oY2hpbGRJdGVtKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxl
KGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2hpbGRJdGVtLT5pc0tleWZyYW1lc1J1bGUoKSAmJiBzdHlsZVNl
bGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGQgdGhpcyBrZXlmcmFtZSBy
dWxlIHRvIG91ciBzZXQuCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5h
ZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGls
ZEl0ZW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5
bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmlu
ZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAa2V5ZnJhbWUgcnVsZXMuCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZSo+KGNoaWxkSXRlbSkpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fSAgIC8vIGZvciBydWxlcwogICAgICAgICAgICAgfSAgIC8vIGlmIHJ1bGVzCiAgICAgICAgIH0g
ZWxzZSBpZiAoaXRlbS0+aXNGb250RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAg
ICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgIGNv
bnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZh
Y2VSdWxlKj4oaXRlbSk7Ci0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3Io
KS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7CisgICAgICAgICAgICAvLworICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBz
dHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRv
IGhhdmUgc2NvcGVkIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgICAgICBpZiAoIXNjb3BlKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpdGVtKTsKKyAgICAgICAgICAgICAgICBzdHls
ZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRGYWNlUnVsZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS0+aXNLZXlmcmFtZXNSdWxl
KCkpCi0gICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKSk7CisgICAgICAgICAgICAvLworICAg
ICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGFkZCBAa2V5ZnJhbWUgcnVsZXMgb2Ygc2NvcGVk
IHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkg
dG8gaGF2ZSBzY29wZWQgQGtleWZyYW1lIHJ1bGVzLgorICAgICAgICAgICAgaWYgKCFzY29wZSkK
KyAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKSk7CiAgICAgfQogICAgIGlmIChtX2F1
dG9TaHJpbmtUb0ZpdEVuYWJsZWQpCiAgICAgICAgIHNocmlua1RvRml0KCk7CiB9CiAKLXZvaWQg
UnVsZVNldDo6YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3ZvaWQgUnVsZVNldDo6
YWRkU3R5bGVSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgY29uc3QgRWxlbWVudCogc2NvcGUpCiB7
CiAgICAgaWYgKHJ1bGUtPmlzUGFnZVJ1bGUoKSkgewotICAgICAgICBDU1NQYWdlUnVsZSogcGFn
ZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOwotICAgICAgICBhZGRQYWdl
UnVsZShwYWdlUnVsZSwgcGFnZVJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAgICAg
ICAvLyBJZ25vcmUgQHBhZ2UgcnVsZXMgaWYgdGhlIHN0eWxlIHNoZWV0IGlzIHNjb3BlZAorICAg
ICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICBDU1NQYWdlUnVsZSogcGFnZVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NQYWdlUnVsZSo+KHJ1bGUpOworICAgICAgICAgICAgYWRkUGFnZVJ1bGUo
cGFnZVJ1bGUsIHBhZ2VSdWxlLT5zZWxlY3Rvckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAgfQog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHMgPSBydWxlLT5zZWxlY3Rv
ckxpc3QoKS5maXJzdCgpOyBzOyBzID0gQ1NTU2VsZWN0b3JMaXN0OjpuZXh0KHMpKQogICAgICAg
ICAgICAgYWRkUnVsZShydWxlLCBzKTsKQEAgLTM0MDgsNiArMzU2NCwyNyBAQCB2b2lkIFJ1bGVT
ZXQ6OnNocmlua1RvRml0KCkKICAgICBtX3BhZ2VSdWxlcy5zaHJpbmtUb0ZpdCgpOwogfQogCitT
Y29wZWRSdWxlU2V0czo6flNjb3BlZFJ1bGVTZXRzKCkKK3sKKyAgICBkZWxldGVBbGxWYWx1ZXMo
bV9zY29wZWRSdWxlU2V0TWFwKTsKK30KKworUnVsZVNldCogU2NvcGVkUnVsZVNldHM6OmVuc3Vy
ZUV4aXN0cyhjb25zdCBFbGVtZW50KiBzY29wZSkKK3sKKyAgICBSdWxlU2V0KiBydWxlU2V0ID0g
bV9zY29wZWRSdWxlU2V0TWFwLmdldChzY29wZSk7CisgICAgaWYgKCFydWxlU2V0KSB7CisgICAg
ICAgIHJ1bGVTZXQgPSBuZXcgUnVsZVNldDsKKyAgICAgICAgbV9zY29wZWRSdWxlU2V0TWFwLnNl
dChzY29wZSwgcnVsZVNldCk7CisgICAgfQorICAgIHJldHVybiBydWxlU2V0OworfQorCit2b2lk
IFNjb3BlZFJ1bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6RmVhdHVy
ZXMmIGZlYXR1cmVzKSBjb25zdAoreworICAgIGZvciAoU2NvcGVkUnVsZVNldE1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAuYmVnaW4oKSwgaXRFbmQgPSBtX3Njb3Bl
ZFJ1bGVTZXRNYXAuZW5kKCk7IGl0ICE9IGl0RW5kOyArK2l0KQorICAgICAgICBpdC0+c2Vjb25k
LT5jb2xsZWN0RmVhdHVyZXMoZmVhdHVyZXMpOworfQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAvLyB0aGlzIGlzIG1vc3RseSBib3Jpbmcgc3R1ZmYgb24gaG93IHRvIGFwcGx5
IGEgY2VydGFpbiBydWxlIHRvIHRoZSByZW5kZXJzdHlsZS4uLgogCkBAIC0zNDk2LDE3ICszNjcz
LDcgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBhZ2VSdWxlcyhSdWxlU2V0KiBydWxl
cywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlzRmkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbWF0
Y2hQYWdlUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRQYWdlUnVsZXMoKSwgaXNMZWZ0UGFnZSwgaXNG
aXJzdFBhZ2UsIHBhZ2VOYW1lKTsKLQotICAgIC8vIElmIHdlIGRpZG4ndCBtYXRjaCBhbnkgcnVs
ZXMsIHdlJ3JlIGRvbmUuCi0gICAgaWYgKG1fbWF0Y2hlZFJ1bGVzLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gU29ydCB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMuCi0gICAg
c29ydE1hdGNoZWRSdWxlcygpOwotCi0gICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0
Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgYWRkTWF0Y2hl
ZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9uKCkpOwor
ICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhmYWxzZSk7CiB9CiAKIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hQYWdlUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
IHJ1bGVzLCBib29sIGlzTGVmdFBhZ2UsIGJvb2wgaXNGaXJzdFBhZ2UsIGNvbnN0IFN0cmluZyYg
cGFnZU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rv
ci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAppbmRleCAzN2Q2ZDNj
OWViMzgxMjQ0NzE2YWMzMTcxYjc0YWJkNTdiMTA2Y2FhLi4xMWRlYzVkODUwM2VjNGQ4ZTVjN2Yw
ZjdhMzYyZjhiMzRiYWI1NDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
QEAgLTYzLDYgKzYzLDcgQEAgY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvcjsKIGNsYXNzIE5vZGU7
CiBjbGFzcyBSdWxlRGF0YTsKIGNsYXNzIFJ1bGVTZXQ7CitjbGFzcyBTY29wZWRSdWxlU2V0czsK
IGNsYXNzIFNldHRpbmdzOwogY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlU2hlZXQ7CkBA
IC0yMzIsMTIgKzIzMywxNyBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUo
Y29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CiAg
ICAgICAgIHZvaWQgYWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBkZWNsKTsKIAotICAgICAgICB2b2lkIG1hdGNoUnVsZXMoUnVsZVNldCosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
Ci0gICAgICAgIHZvaWQgbWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPios
IGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgICAgIC8vIG1hdGNoQXV0aG9yUnVsZXM6IE1hdGNoIGFsbCBnbG9iYWwg
YW5kIGFwcGxpY2FibGUgc2NvcGVkIGF1dGhvci1kZWZpbmVkIHJ1bGVzLgorICAgICAgICB2b2lk
IG1hdGNoQXV0aG9yUnVsZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgLy8gbWF0Y2hSdWxlczogbWF0Y2hl
cyB2cy4gYWxsIHJ1bGVzIGluIHRoZSBwYXNzZWQtaW4gUnVsZVNldC4KKyAgICAgICAgdm9pZCBt
YXRjaFJ1bGVzR2xvYmFsbHkoUnVsZVNldCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIC8vIEltcGxlbWVu
dGF0aW9uIG1ldGhvZHM6CisgICAgICAgIHZvaWQgbWF0Y2hSdWxlU2V0KFJ1bGVTZXQqLCBjb25z
dCBFbGVtZW50KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29s
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgdm9pZCBtYXRjaFJ1bGVzRm9yTGlzdChjb25z
dCBWZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgRWxlbWVudCosIGludCYgZmlyc3RSdWxlSW5kZXgs
IGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CiAgICAgICAgIGJv
b2wgZmFzdFJlamVjdFNlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJikgY29uc3Q7Ci0gICAgICAgIHZv
aWQgc29ydE1hdGNoZWRSdWxlcygpOworICAgICAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNo
ZWRSdWxlcyhib29sIGNvbGxlY3RSdWxlc09ubHkpOwogICAgICAgICAKLSAgICAgICAgYm9vbCBj
aGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJik7CisgICAgICAgIGJvb2wgY2hlY2tTZWxlY3Rv
cihjb25zdCBSdWxlRGF0YSYsIGNvbnN0IEVsZW1lbnQqKTsKIAogICAgICAgICB0ZW1wbGF0ZSA8
Ym9vbCBmaXJzdFBhc3M+CiAgICAgICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpbXBv
cnRhbnQsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwpAQCAtMjQ4LDE3ICsyNTQsMTkg
QEAgcHVibGljOgogICAgICAgICBib29sIGlzUmlnaHRQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0
IHsgcmV0dXJuICFpc0xlZnRQYWdlKHBhZ2VJbmRleCk7IH0KICAgICAgICAgYm9vbCBpc0ZpcnN0
UGFnZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAgICAgICAgU3RyaW5nIHBhZ2VOYW1lKGludCBw
YWdlSW5kZXgpIGNvbnN0OwotICAgICAgICAKLSAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fYXV0
aG9yU3R5bGU7CisKKyAgICAgICAgT3duUHRyPFJ1bGVTZXQ+IG1fZ2xvYmFsQXV0aG9yU3R5bGVz
OworICAgICAgICBPd25QdHI8U2NvcGVkUnVsZVNldHM+IG1fc2NvcGVkQXV0aG9yU3R5bGVzOwog
ICAgICAgICBPd25QdHI8UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKICAgICAgICAgRmVhdHVyZXMg
bV9mZWF0dXJlczsKIAogICAgICAgICBzdHJ1Y3QgUGFyZW50U3RhY2tGcmFtZSB7CiAgICAgICAg
ICAgICBQYXJlbnRTdGFja0ZyYW1lKCkge30KLSAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUo
RWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpIHt9CisgICAgICAgICAgICBQYXJl
bnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDogZWxlbWVudChlbGVtZW50KSwgY2xvc2Vz
dFN0eWxlU2NvcGVGcmFtZSgwKSB7IH0KICAgICAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQ7CiAg
ICAgICAgICAgICBWZWN0b3I8dW5zaWduZWQsIDQ+IGlkZW50aWZpZXJIYXNoZXM7CisgICAgICAg
ICAgICBQYXJlbnRTdGFja0ZyYW1lKiBjbG9zZXN0U3R5bGVTY29wZUZyYW1lOwogICAgICAgICB9
OwogICAgICAgICBWZWN0b3I8UGFyZW50U3RhY2tGcmFtZT4gbV9wYXJlbnRTdGFjazsKICAgICAg
ICAgCkBAIC0yODMsMTAgKzI5MSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBTZWxlY3RvckNo
ZWNrZXIoRG9jdW1lbnQqLCBib29sIHN0cmljdFBhcnNpbmcpOwogCiAgICAgICAgICAgICBib29s
IGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KikgY29uc3Q7Ci0gICAgICAgICAg
ICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNl
dWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJl
ZExpbmssIHVuc2lnbmVkIGZvcmNlUHNldWRvQ2xhc3NNYXNrID0gRG9Ob3RGb3JjZVBzZXVkb0Ns
YXNzTWFzaywgUmVuZGVyU3R5bGUqID0gMCwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHls
ZSA9IDApIGNvbnN0OwotICAgICAgICAgICAgYm9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVj
dG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0
b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCB1bnNpZ25lZCBmb3JjZVBzZXVkb0NsYXNzTWFzaywg
UmVuZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKKyAg
ICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1l
bnQqLCBjb25zdCBFbGVtZW50KiBzY29wZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wg
aXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIHVuc2lnbmVkIGZvcmNlUHNldWRv
Q2xhc3NNYXNrID0gRG9Ob3RGb3JjZVBzZXVkb0NsYXNzTWFzaywgUmVuZGVyU3R5bGUqID0gMCwg
UmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSA9IDApIGNvbnN0OworICAgICAgICAgICAg
Ym9vbCBjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGNvbnN0IEVsZW1l
bnQqIHNjb3BlLCBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBi
b29sIGVuY291bnRlcmVkTGluaywgdW5zaWduZWQgZm9yY2VQc2V1ZG9DbGFzc01hc2ssIFJlbmRl
clN0eWxlKiwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CiAgICAgICAg
ICAgICBib29sIGNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqLCBQc2V1ZG9J
ZCYgZHluYW1pY1BzZXVkbykgY29uc3Q7Ci0gICAgICAgICAgICBzdGF0aWMgYm9vbCBmYXN0Q2hl
Y2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsKKyAgICAgICAg
ICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29u
c3QgRWxlbWVudCosIGNvbnN0IEVsZW1lbnQqIHNjb3BlKTsKIAogICAgICAgICAgICAgRUluc2lk
ZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0OwogICAgICAg
ICAgICAgRUluc2lkZUxpbmsgZGV0ZXJtaW5lTGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxl
bWVudCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVl
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXggMjdjMDFl
MzYxMmY1YmJhNjljMTg3NzA4Y2VmN2ZiZjE3Njc2ZWE2NS4uY2NhNWJhZTRkYjQ3ZGViMWU3OGJm
ZGI0YWY5Y2E2OTk0M2Y3MmYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2hlZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApA
QCAtMjM2LDI0ICsyMzYsMjYgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdGFydExvYWRpbmdEeW5h
bWljU2hlZXQoKQogICAgICAgICBvd25lci0+c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9
CiAKLURvY3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpkb2N1bWVudCgpCitOb2RlKiBDU1NTdHlsZVNo
ZWV0OjpmaW5kT3duZXJOb2RlKCkgY29uc3QKIHsKLSAgICBTdHlsZUJhc2UqIHN0eWxlT2JqZWN0
ID0gdGhpczsKLSAgICB3aGlsZSAoc3R5bGVPYmplY3QpIHsKKyAgICBmb3IgKGNvbnN0IFN0eWxl
QmFzZSogc3R5bGVPYmplY3QgPSB0aGlzOyBzdHlsZU9iamVjdDsgc3R5bGVPYmplY3QgPSBzdHls
ZU9iamVjdC0+cGFyZW50KCkpIHsKICAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5pc0NTU1N0eWxl
U2hlZXQoKSkgewotICAgICAgICAgICAgTm9kZSogb3duZXJOb2RlID0gc3RhdGljX2Nhc3Q8Q1NT
U3R5bGVTaGVldCo+KHN0eWxlT2JqZWN0KS0+b3duZXJOb2RlKCk7CisgICAgICAgICAgICBOb2Rl
KiBvd25lck5vZGUgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmpl
Y3QpLT5vd25lck5vZGUoKTsKICAgICAgICAgICAgIGlmIChvd25lck5vZGUpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG93bmVyTm9kZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gb3duZXJOb2RlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzdHlsZU9iamVjdC0+aXNSdWxl
KCkpCi0gICAgICAgICAgICBzdHlsZU9iamVjdCA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHls
ZU9iamVjdCktPnBhcmVudFN0eWxlU2hlZXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+cGFyZW50KCk7CiAgICAgfQotCiAgICAgcmV0dXJu
IDA7CiB9CiAKK0RvY3VtZW50KiBDU1NTdHlsZVNoZWV0Ojpkb2N1bWVudCgpCit7CisgICAgTm9k
ZSogb3duZXJOb2RlID0gZmluZE93bmVyTm9kZSgpOworCisgICAgcmV0dXJuIG93bmVyTm9kZSA/
IG93bmVyTm9kZS0+ZG9jdW1lbnQoKSA6IDA7Cit9CisKKwogdm9pZCBDU1NTdHlsZVNoZWV0Ojpz
dHlsZVNoZWV0Q2hhbmdlZCgpCiB7CiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5oCmluZGV4IDM1YTQ1MTAyZDFlYjZiMmQ2OTJjZGIxNDE1NTNj
ZmM5MTFlN2I4N2MuLmU0YjVhMGJkNmU3OGMyY2NkOTgwZmQzYTZmOTY4YzE3MDRhMTNiODUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaApAQCAtODgsNiArODgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCB2b2lkIGNoZWNrTG9hZGVkKCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmdEeW5h
bWljU2hlZXQoKTsKIAorICAgIE5vZGUqIGZpbmRPd25lck5vZGUoKSBjb25zdDsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQoKTsKIAogICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhcnNldDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDJlZTdhODQ3N2Qx
Yzk0ZWFhMDgwYjIwY2ZkYWNiMWI4NmI1NjE2YzAuLjRjMWZkNzdhNzhlMWFjZGI1NDJmMDRjYzFk
NmViNTE1ODg1MjU3ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEzOTksNiArMTM5OSwy
MyBAQCB2b2lkIEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChib29sIGNoYW5nZWRCeVBhcnNlciwg
Tm9kZSogYmVmb3JlQ2hhbmdlLCBOb2RlKiBhZgogICAgICAgICBjaGVja0ZvclNpYmxpbmdTdHls
ZUNoYW5nZXModGhpcywgcmVuZGVyU3R5bGUoKSwgZmFsc2UsIGJlZm9yZUNoYW5nZSwgYWZ0ZXJD
aGFuZ2UsIGNoaWxkQ291bnREZWx0YSk7CiB9CiAKK3ZvaWQgRWxlbWVudDo6cmVnaXN0ZXJTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpCit7CisgICAgZW5zdXJlUmFyZURhdGEoKS0+cmVnaXN0ZXJTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCit2b2lkIEVsZW1lbnQ6OnVucmVnaXN0ZXJTY29wZWRI
VE1MU3R5bGVDaGlsZCgpCit7CisgICAgQVNTRVJUKGhhc1JhcmVEYXRhKCkpOworICAgIGlmICho
YXNSYXJlRGF0YSgpKQorICAgICAgICByYXJlRGF0YSgpLT51bnJlZ2lzdGVyU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKTsKK30KKworYm9vbCBFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc1JhcmVEYXRhKCkgJiYgcmFyZURhdGEoKS0+aGFzU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQoKTsKK30KKwogdm9pZCBFbGVtZW50OjpiZWdpblBhcnNpbmdDaGls
ZHJlbigpCiB7CiAgICAgY2xlYXJJc1BhcnNpbmdDaGlsZHJlbkZpbmlzaGVkKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAppbmRleCA4OWRjYzYwYTcxMWMwMGQ3YmVlMjMyNzEyMzk3ZTYzNTY2YzY3MGNjLi42
ZDc1MGZlNWYxNWJlMWY4YzUyMzgwNGYyMGI3OGZkNWNmM2I4ZDVmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKQEAgLTIzOCw2ICsyMzgsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgQXRvbWlj
U3RyaW5nJiBzaGFkb3dQc2V1ZG9JZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0U2hhZG93UHNldWRv
SWQoY29uc3QgQXRvbWljU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgdm9pZCByZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKTsKKyAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7
CisKICAgICBSZW5kZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKTsK
IAogICAgIHZvaWQgc2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50UmFyZURhdGEuaAppbmRleCA4MzAxNTA1YzNiNTJmY2MzMWNhZGRjYzNmMTY3ODQ4NGM2YWVi
ZTJjLi5mYjBhMjJjYjE3MjAwZTNkMGZlOTZmZGY3ZjliMTNkMjcwZjk2ZDYwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCkBAIC0zOSw2ICszOSwxMCBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHJlc2V0Q29tcHV0ZWRTdHlsZSgpOwogCisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KTsKKyAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7CisKICAgICB1c2lu
ZyBOb2RlUmFyZURhdGE6Om5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNo
OwogICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVT
b29uQWZ0ZXJBdHRhY2g7CiAKQEAgLTUwLDYgKzU0LDggQEAgcHVibGljOgogICAgIE93blB0cjxE
YXRhc2V0RE9NU3RyaW5nTWFwPiBtX2RhdGFzZXRET01TdHJpbmdNYXA7CiAgICAgT3duUHRyPENs
YXNzTGlzdD4gbV9jbGFzc0xpc3Q7CiAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mU2NvcGVkSFRN
TFN0eWxlQ2hpbGRyZW47CisKICAgICBib29sIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHk7CiAKICNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCkBAIC02NSw2ICs3MSw3IEBAIGlubGluZSBJbnRTaXpl
IGRlZmF1bHRNaW5pbXVtU2l6ZUZvclJlc2l6aW5nKCkKIGlubGluZSBFbGVtZW50UmFyZURhdGE6
OkVsZW1lbnRSYXJlRGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVs
dE1pbmltdW1TaXplRm9yUmVzaXppbmcoKSkKICAgICAsIG1fc2hhZG93Um9vdCgwKQorICAgICwg
bV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCiAgICAgLCBtX3N0eWxlQWZmZWN0
ZWRCeUVtcHR5KGZhbHNlKQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1fY29u
dGFpbnNGdWxsU2NyZWVuRWxlbWVudChmYWxzZSkKQEAgLTgyLDUgKzg5LDIxIEBAIGlubGluZSB2
b2lkIEVsZW1lbnRSYXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKCkKICAgICBtX2NvbXB1dGVk
U3R5bGUuY2xlYXIoKTsKIH0KIAoraW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZWdpc3Rl
clNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICArK21fbnVtYmVyT2ZTY29wZWRIVE1MU3R5
bGVDaGlsZHJlbjsKK30KKworaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjp1bnJlZ2lzdGVy
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFTU0VSVChtX251bWJlck9mU2NvcGVkSFRN
TFN0eWxlQ2hpbGRyZW4gPiAwKTsKKyAgICAtLW1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGls
ZHJlbjsKK30KKworaW5saW5lIGJvb2wgRWxlbWVudFJhcmVEYXRhOjpoYXNTY29wZWRIVE1MU3R5
bGVDaGlsZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVD
aGlsZHJlbjsKK30KKwogfQogI2VuZGlmIC8vIEVsZW1lbnRSYXJlRGF0YV9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IDE2NzllOTZhMDBhNGYzNDExYTlm
ZTBhYjc3ODFlYmE3NjQ3ZGIyNTIuLjQ4Zjk1MDVmNmZiNjZkOGE1YjBiMTY4MTY3YmMzMjk0MDEz
MjRmYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVz
LmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBAIC0y
NjUsNiArMjY1LDcgQEAgcnVsZXMKIHNhbmRib3gKIHNjaGVtZQogc2NvcGUKK3Njb3BlZAogc2Ny
b2xsYW1vdW50CiBzY3JvbGxkZWxheQogc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3R5bGVFbGVtZW50LmNwcAppbmRleCAwZjI1NmUxNWJiM2IyZGZmZGQwZjdmNGRmZmRmZjM4NTRj
YmY3MTU4Li40MWVmYjM1MzNlODNhZDVmY2RmOWZiOWQyZmQ5YmQ3NzdiMzE5OGE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIGlubGluZSBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5
bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVu
dCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1
bWVudCkKICAgICAsIFN0eWxlRWxlbWVudChkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKQorICAg
ICwgbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQoZmFsc2UpCiB7CiAgICAgQVNTRVJU
KGhhc1RhZ05hbWUoc3R5bGVUYWcpKTsKIH0KQEAgLTU3LDEyICs1OCw1MCBAQCB2b2lkIEhUTUxT
dHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQogICAgICAgICBtX3No
ZWV0LT5zZXRUaXRsZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gc2NvcGVkQXR0cikgeworICAgICAgICBFbGVtZW50KiBzY29wZSA9IHNjb3BpbmdFbGVtZW50
KCk7CisgICAgICAgIEFTU0VSVChzY29wZSB8fCAhbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0Vs
ZW1lbnQpOworICAgICAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgICAgIGlmIChzY29wZWQoKSkK
KyAgICAgICAgICAgICAgICByZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsK
KyAgICAgICAgICAgIHNjb3BlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGluRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGRvY3Vt
ZW50KCktPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9y
Q2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKyAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uYmVmb3JlcHJvY2Vzc0F0dHIpCiAgICAgICAgIHNldEF0dHJpYnV0ZUV2ZW50TGlz
dGVuZXIoZXZlbnROYW1lcygpLmJlZm9yZXByb2Nlc3NFdmVudCwgY3JlYXRlQXR0cmlidXRlRXZl
bnRMaXN0ZW5lcih0aGlzLCBhdHRyKSk7CiAgICAgZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6
cmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKQoreworICAgIEFTU0VSVCghbV9pc1JlZ2lzdGVy
ZWRXaXRoU2NvcGluZ0VsZW1lbnQpOworICAgIGlmICghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGlu
Z0VsZW1lbnQpIHsKKyAgICAgICAgRWxlbWVudCogc2NvcGUgPSBzY29waW5nRWxlbWVudCgpOwor
ICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNjb3Bl
LT5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTFN0eWxlRWxl
bWVudDo6dW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpCit7CisgICAgQVNTRVJUKG1faXNS
ZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50IHx8ICFzY29wZWQoKSk7CisgICAgaWYgKG1faXNS
ZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KSB7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0g
c2NvcGluZ0VsZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlKTsKKyAgICAgICAgaWYgKHNj
b3BlKQorICAgICAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgp
OworICAgICAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCA9IGZhbHNlOworICAg
IH0KK30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQog
ewogICAgIFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRoaXMpOwpAQCAtNzEs
MTAgKzExMCwxNyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJl
bigpCiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogewor
ICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KCk7CiAgICAgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVu
dChkb2N1bWVudCgpLCB0aGlzKTsKIH0KIAordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVt
b3ZlKCkKK3sKKyAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAgSFRNTEVs
ZW1lbnQ6OndpbGxSZW1vdmUoKTsKK30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgp
OwpAQCAtMTIwLDQgKzE2NiwyNCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldERpc2FibGVk
KGJvb2wgc2V0RGlzYWJsZWQpCiAgICAgICAgIHN0eWxlU2hlZXQtPnNldERpc2FibGVkKHNldERp
c2FibGVkKTsKIH0KIAorYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpOworfQorCitFbGVtZW50KiBI
VE1MU3R5bGVFbGVtZW50OjpzY29waW5nRWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lz
UmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCAmJiAhc2NvcGVkKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmVmaW5lZCBm
b3Igc2NvcGVkIHN0eWxlc2hlZXRzIHdpdGhpbiBzaGFkb3cgRE9NLgorICAgIC8vIEFzIHdyaXR0
ZW4sIHN1Y2ggYSBzdHlsZXNoZWV0IGNvdWxkIHN0eWxlIHRoZSBob3N0IGVsZW1lbnQsIGFzIHdl
bGwgYXMgY2hpbGRyZW4gb2YgdGhlIGhvc3QuCisgICAgLy8gT1RPSCwgdGhpcyBwYXZlcyB0aGUg
d2F5IGZvciBhIDpib3VuZC1lbGVtZW50IGltcGxlbWVudGF0aW9uLgorICAgIENvbnRhaW5lck5v
ZGUqIHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudE9y
SG9zdCB8fCAhcGFyZW50T3JIb3N0LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnRPckhvc3QpOworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCmluZGV4IGFmMjgwODVkYmJiZjQ1ZWQ3Y2RkNGJk
MjRmNGRmNGZkZGZmZTRlMWYuLjcyYWI4MjgzYjI1MjRiMWQyZGRlZGE5YTcxMDQ0OTE4NTI5NGQx
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBAIC00MiwxMiArNDIs
MTcgQEAgcHVibGljOgogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERp
c2FibGVkKGJvb2wpOwogCisgICAgYm9vbCBzY29wZWQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBz
Y29waW5nRWxlbWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7
IH0KKwogcHJpdmF0ZToKICAgICBIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIC8vIG92ZXJsb2FkIGZy
b20gSFRNTEVsZW1lbnQKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0
cmlidXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAg
dmlydHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21E
b2N1bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2Vk
QnlQYXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFu
Z2UgPSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKQEAgLTYxLDYgKzY2LDExIEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworCisgICAgdm9p
ZCByZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgIHZvaWQgdW5yZWdpc3RlcldpdGhT
Y29waW5nRWxlbWVudCgpOworCisgICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxl
bWVudDsKIH07CiAKIH0gLy9uYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106466</attachid>
            <date>2011-09-06 12:35:04 -0700</date>
            <delta_ts>2011-09-07 15:17:19 -0700</delta_ts>
            <desc>work-in-progress before break-up</desc>
            <filename>bug-49142-20110906123503.patch</filename>
            <type>text/plain</type>
            <size>79311</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ1ODAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0NDBjZjM3ZmY3ZjJhMDg4OWI1MzU0
MWI3ZWYyZGYxZmM0NmIzMWVlLi40ZWJmMTczMGQxOGM0YjUxMDFjN2MxNzRhY2M5MDNiNWNhMzIy
NjZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDktMDYgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNj
b3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgLSkg
YmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUg
PHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wOC0z
MCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBX
ZWIgSW5zcGVjdG9yOiBpbXBsZW1lbnQgc291cmNlIG1hcCB2MyBjb25zdW1lci4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWF0dGFjaC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNWZlMDY3MWZhYzZlMTZlMzNhNDJjNDI5YWZlZmVkZDFhMzVhZjhjZAotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2gt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgYXR0YWNoaW5nIGEgbmV3IDxzdHls
ZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1Rl
eHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAw
KQorUzI6IHJnYigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQor
UDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIEFUVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0K
K1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQor
UDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCist
LS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxl
LXNjb3BlZC1hdHRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1h
dHRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDNkZjU1ZGU0OWJmNmNmZTFmOGM2YWQ0MGIwZTY1MGNm
OGFlNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWF0dGFjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+
Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1
bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNn
ICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7
CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29t
cHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAg
ICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsK
KyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBy
dW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9u
ZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0n
KTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIg
QVRUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAgICAgICAgICAgdmFyIGRpdkVsZW0g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7CisgICAgICAgICAgICB2YXIgc3R5bGVF
bGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTsKKyAgICAgICAgICAgIHN0eWxl
RWxlbS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAgICAgICAgc3R5bGVFbGVt
LmlubmVySFRNTCA9ICdkaXYgeyBjb2xvcjogcmVkOyB9IHAgeyBjb2xvcjogZ3JlZW47IH0nOwor
ICAgICAgICAgICAgZGl2RWxlbS5pbnNlcnRCZWZvcmUoc3R5bGVFbGVtLCBkaXZFbGVtLmZpcnN0
Q2hpbGQpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAg
ICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7
CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAg
ICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAg
ICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwv
c3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0
IGF0dGFjaGluZyBhIG5ldyAmbHQ7c3R5bGUgc2NvcGVkJmd0OyBlbGVtZW50PC9wPgorICAgIDxk
aXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAx
Ij5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXYgaWQ9IkRJViI+CisgICAgICAgIDxzcGFu
IGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwv
ZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAg
ICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
c3Mvc3R5bGUtc2NvcGVkLWJhc2ljLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmVmZmQ3NmM4NDRh
OWE4Mjg5MzJjOWUzYTUwY2I4MzIxMDdmZmMzMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1iYXNpYy1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0
NCBAQAorVGVzdCA8c3R5bGUgc2NvcGVkPgorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKK1Rl
eHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitU
ZXh0CisKK1RleHQKK1RleHQKKy0tLSBDT01QVVRFRCBTVFlMRVMgLS0tCitTMTogcmdiKDAsIDAs
IDApCitQMTogcmdiKDAsIDAsIDApCitSMTogcmdiKDAsIDAsIDApCitFMTogcmdiKDAsIDAsIDAp
CisKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitSMjogcmdiKDAsIDAs
IDI1NSkKK0UyOiByZ2IoMjU1LCAwLCAwKQorCitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAs
IDAsIDApCitSMzogcmdiKDAsIDAsIDApCitFMzogcmdiKDAsIDAsIDApCisKK1M0OiByZ2IoMCwg
MCwgMCkKK1A0OiByZ2IoMCwgMCwgMCkKK1I0OiByZ2IoMCwgMCwgMCkKK0U0OiByZ2IoMCwgMCwg
MCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtYmFzaWMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYmMyM2FjZjdjZDA1ODAwNjE4YjQ1ZTk1ZWJjN2Q1
NTUzYmM5OTJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLWJhc2ljLmh0bWwKQEAgLTAsMCArMSw4NCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAg
ZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSht
c2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAg
ICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlk
KTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRD
b21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAg
ICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgICAgICAgICAgbG9nKCctLS0g
Q09NUFVURUQgU1RZTEVTIC0tLScpOworCisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAg
ICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1IxJyk7CisgICAgICAgICAgICB0
ZXN0KCdFMScpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUjInKTsKKyAgICAg
ICAgICAgIHRlc3QoJ0UyJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVz
dCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgICAgICB0ZXN0KCdSMycp
OworICAgICAgICAgICAgdGVzdCgnRTMnKTsKKyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAg
ICAgICB0ZXN0KCdTNCcpOworICAgICAgICAgICAgdGVzdCgnUDQnKTsKKyAgICAgICAgICAgIHRl
c3QoJ1I0Jyk7CisgICAgICAgICAgICB0ZXN0KCdFNCcpOworCisgICAgICAgICAgICBsb2coJy0t
LSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0
eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCAm
bHQ7c3R5bGUgc2NvcGVkJmd0OzwvcD4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8
c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAg
ICAgICAgPHByZSBpZCA9ICJSMSIgY2xhc3M9ImJhciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJl
IGlkPSJFMSIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xh
c3M9ImZvbyI+CisgICAgICAgIDxkaXY+CisgICAgICAgICAgICA8c3R5bGUgdHlwZT0idGV4dC9j
c3MiIHNjb3BlZD4KKyAgICAgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAg
ICAgICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICAgICAgICAgIGRpdiAuYmFyIHsg
Y29sb3I6IGJsdWU7IH0KKyAgICAgICAgICAgICAgICAuZm9vIC5iYXogeyBjb2xvcjogcHVycGxl
OyB9IC8qIHNob3VsZCBOT1QgYXBwbHkhICovCisgICAgICAgICAgICA8L3N0eWxlPgorICAgICAg
ICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0PC9zcGFuPgorICAgICAgICAgICAgPHAgaWQ9IlAyIj5U
ZXh0PC9wPgorICAgICAgICAgICAgPHByZSBpZD0iUjIiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4K
KyAgICAgICAgICAgIDxwcmUgaWQ9IkUyIiBjbGFzcz0iYmF6Ij5UZXh0PC9wcmU+CisgICAgICAg
IDwvZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlk
PSJQMyI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSMyIgY2xhc3M9ImJhciI+VGV4dDwv
cHJlPgorICAgICAgICA8cHJlIGlkPSJFMyIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgIDwv
ZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvbyI+CisgICAgICAgIDxzcGFuIGlkPSJTNCI+VGV4dDwv
c3Bhbj4KKyAgICAgICAgPHAgaWQ9IlA0Ij5UZXh0PC9wPgorICAgICAgICA8cHJlIGlkID0gIlI0
IiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgIDxwcmUgaWQ9IkU0IiBjbGFzcz0iYmF6
Ij5UZXh0PC9wcmU+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC1kZXRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ3ZWY2NTMxNzQwNzJiNzg4N2Y3
ZGYzZGFiZjkxYTlhNzM0MGUzZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitU
ZXN0IGRldGFjaGluZyBhIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitU
ZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAw
LCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEy
OCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBERVRB
Q0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAsIDAsIDApCitQMTogcmdiKDAsIDAs
IDApCitTMjogcmdiKDAsIDAsIDApCitQMjogcmdiKDAsIDAsIDApCitTMzogcmdiKDAsIDAsIDAp
CitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbCBiL0xheW91dFRlc3RzL2Zh
c3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzhiZjZhODY2MTI3
MGY4NjFjYjg1NThhYzMyN2ExODc3MWYzOWVkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFjaC5odG1sCkBAIC0wLDAgKzEsNzIgQEAKKzwh
RE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAgICAgICAgZnVu
Y3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1l
bnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZh
bHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQor
ICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAg
ICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0K
KworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBs
b2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAg
ICAgICAgbG9nKCctLS0gQUZURVIgREVUQUNISU5HIDxTVFlMRSBTQ09QRUQ+IC0tLScpOworICAg
ICAgICAgICAgdmFyIGRpdkVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnRElWJyk7Cisg
ICAgICAgICAgICB2YXIgc3R5bGVFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxF
Jyk7CisgICAgICAgICAgICBkaXZFbGVtLnJlbW92ZUNoaWxkKHN0eWxlRWxlbSk7CisgICAgICAg
ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRlc3RBbGwoKTsK
KyAgICAgICAgICAgICAgICBsb2coJy0tLSBGSU5JU0hFRCAtLS0nKTsKKyAgICAgICAgICAgICAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAg
ICAgICAgfQorICAgIDwvc2NyaXB0PgorICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgc2NvcGVk
PgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4K
Kzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgZGV0YWNoaW5nIGEgJmx0
O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBp
ZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4KKyAgICA8L2Rp
dj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0eXBlPSJ0
ZXh0L2NzcyIgc2NvcGVkPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAg
ICAgICAgcCB7IGNvbG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3Bh
biBpZD0iUzIiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8
L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAg
ICAgIDxwIGlkPSJQMyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xl
Ij48L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zYTIwNTg3ZGY1YWZmZjYyZGMyN2Y2MmFhZWM0NTBiMzM3NjVjYWM4Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjcgQEAKK1Rlc3QgcmVtb3ZpbmcgdGhlICdzY29wZWQn
IGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4gZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1Rl
eHQKKworVGV4dAorVGV4dAorCistLS0gT1JJR0lOQUwgLS0tCitTMTogcmdiKDAsIDAsIDApCitQ
MTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQor
UzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEFGVEVSIFVOLVNFVFRJTkcg
QFNDT1BFRCAtLS0KK1MxOiByZ2IoMjU1LCAwLCAwKQorUDE6IHJnYigwLCAxMjgsIDApCitTMjog
cmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUzM6IHJnYigyNTUsIDAsIDApCitQ
MzogcmdiKDAsIDEyOCwgMCkKKy0tLSBGSU5JU0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZWFhZjM3NzRjYWIyZmE3NGZkNzBjNjExYWUwMzJiYTExODQzZDdlZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwK
QEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxz
Y3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAgICAgZnVuY3Rpb24gbG9nKG1zZykK
KyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUn
KS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtc2cgKyAnXG4nKSk7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQorICAgICAgICB7CisgICAgICAgICAg
ICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKKyAgICAgICAgICAgIGxv
ZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsZW0s
IG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3QoJ1MxJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAgdGVzdCgnUzInKTsKKyAgICAgICAg
ICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdTMycpOworICAgICAgICAgICAgdGVz
dCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFMIC0tLScpOworICAgICAgICAgICAg
dGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09Q
RUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnU1RZTEUnKS5y
ZW1vdmVBdHRyaWJ1dGUoJ3Njb3BlZCcpOworICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlv
bigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAgICAgICAgbG9nKCct
LS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4K
KyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAgYm9keSB7IGNvbG9y
OiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9InJ1blRlc3Rz
KCk7Ij4KKyAgICA8cD5UZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSAm
bHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMx
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+Cisg
ICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNjb3Bl
ZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBjb2xv
cjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5UZXh0
PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRp
dj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMi
PlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8L2Jv
ZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEwYzc5NjNjOTdjNDc4
MDFlMDg0OTY3NTExMzcyMjJjNDY2NWQxYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDI3IEBACitUZXN0IHNldHRpbmcgdGhlICdzY29wZWQnIGF0dHJpYnV0ZSBvbiBhIDxzdHlsZT4g
ZWxlbWVudAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCistLS0g
T1JJR0lOQUwgLS0tCitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6
IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQor
UDM6IHJnYigwLCAxMjgsIDApCistLS0gQUZURVIgU0VUVElORyBAU0NPUEVEIC0tLQorUzE6IHJn
YigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdi
KDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBGSU5J
U0hFRCAtLS0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LXNldC1zY29wZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQt
c2NvcGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTkwM2JkNDFlMjk5ZDAzNTAxY2VmMTA1NDBmZTE5NTAw
YzRlODJlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC1zZXQtc2NvcGVkLmh0bWwKQEAgLTAsMCArMSw3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAgICAg
ICAgZnVuY3Rpb24gbG9nKG1zZykKKyAgICAgICAgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9k
ZShtc2cgKyAnXG4nKSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0KGlkKQor
ICAgICAgICB7CisgICAgICAgICAgICB2YXIgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGlkKTsKKyAgICAgICAgICAgIGxvZyhpZCArICc6ICcgKyBkb2N1bWVudC5kZWZhdWx0Vmlldy5n
ZXRDb21wdXRlZFN0eWxlKGVsZW0sIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2NvbG9yJykpOwor
ICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdEFsbCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRlc3QoJ1MxJyk7CisgICAgICAgICAgICB0ZXN0KCdQMScpOworICAgICAgICAgICAg
dGVzdCgnUzInKTsKKyAgICAgICAgICAgIHRlc3QoJ1AyJyk7CisgICAgICAgICAgICB0ZXN0KCdT
MycpOworICAgICAgICAgICAgdGVzdCgnUDMnKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0
aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50
aWxEb25lKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxvZygnLS0tIE9SSUdJTkFM
IC0tLScpOworICAgICAgICAgICAgdGVzdEFsbCgpOworCisgICAgICAgICAgICBsb2coJy0tLSBB
RlRFUiBTRVRUSU5HIEBTQ09QRUQgLS0tJyk7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnU1RZTEUnKS5zZXRBdHRyaWJ1dGUoJ3Njb3BlZCcsIHRydWUpOworICAgICAgICAg
ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7Cisg
ICAgICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAg
aWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAg
ICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4K
KyAgICAgICAgYm9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keSBvbmxvYWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IHNldHRpbmcgdGhlICdzY29w
ZWQnIGF0dHJpYnV0ZSBvbiBhICZsdDtzdHlsZSZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2Pgor
ICAgICAgICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4
dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2PgorICAgICAgICA8c3R5bGUgaWQ9IlNUWUxFIiB0
eXBlPSJ0ZXh0L2NzcyI+CisgICAgICAgICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAg
ICAgICBwIHsgY29sb3I6IGdyZWVuOyB9CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFu
IGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwv
ZGl2PgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAg
ICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUi
PjwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFhODcwZGE0NWZiZjI3YjFk
ZDRlZWNjMDE5MDg2OWY3ZjhiMGFjMzQuLjNlMjAyMjlmNjQ0NDljNmRjYTAyZmIwZTZhOWUxZDI5
ZTZkNDY0YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3NyBAQAorMjAxMS0wOS0wNiAgUm9sYW5k
IFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNDkxNDIgLSBJbXBsZW1lbnQgSFRN
TDUgc3R5bGUgc2NvcGVkIGF0dHJpYnV0ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDkxNDIKKworICAgICAgICBJbXBsZW1lbnRpbmcgc3VwcG9ydCBm
b3IgPHN0eWxlIHNjb3BlZD46CisgICAgICAgIENTU1N0eWxlU2VsZWN0b3IgaG9sZHMgZ2xvYmFs
IGFzIHdlbGwgYXMgc2NvcGVkIGF1dGhvciBzaGVldHMuCisgICAgICAgIFNjb3BlZCBhdXRob3Ig
c2hlZXRzIGFyZSBtYXBwZWQgYnkgdGhlaXIgc2NvcGluZyBlbGVtZW50ICh0aGUgcGFyZW50IGVs
ZW1lbnQgb2YgPHN0eWxlIHNjb3BlZD4pLgorICAgICAgICA8c3R5bGUgc2NvcGVkPiBlbGVtZW50
cyByZWdpc3RlciBhbmQgdW4tcmVnaXN0ZXIgd2l0aCB0aGVpciBzY29waW5nIHBhcmVudCBlbGVt
ZW50CisgICAgICAgIGluIGEga2luZCBvZiByZWYtY291bnRpbmcsIGluIG9yZGVyIHRvIGFsbG93
IHF1aWNrIGxvb2stdXAgb2Ygd2hldGhlciBhbiBlbGVtZW50IGhhcyBzY29wZWQgc3R5bGUgY2hp
bGRyZW4uCisgICAgICAgIEFsc28sIHByZXZlbnQgc3R5bGUgc2hhcmluZyBmcm9tIGNyb3NzaW5n
IGludG8vb3V0IG9mIHNjb3BlZCBzdHlsZSBib3VuZGFyaWVzLgorCisgICAgICAgIFRlc3RzOiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1iYXNpYy5odG1sCisgICAgICAgICAgICAgICBmYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtZGV0YWNoLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1z
ZXQtc2NvcGVkLmh0bWwKKworICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcDogYWRk
IHN1cHBvcnQgZm9yIHNjb3BlZCBhdXRob3Igc2hlZXRzCisgICAgICAgIChXZWJDb3JlOjpTY29w
ZWRSdWxlU2V0czo6U2NvcGVkUnVsZVNldHMpOiBjbGFzcyBmb3Igc2NvcGVkIGF1dGhvciBzaGVl
dHMKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpnZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6ZGV0ZXJtaW5lU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6Q1NTU3R5bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9y
OjpwdXNoUGFyZW50U3RhY2tGcmFtZSk6IGFkZCBzY29waW5nIGluZm9ybWF0aW9uIHRvIHBhcmVu
dCBzdGFjayBmcmFtZQorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hB
dXRob3JSdWxlcyk6IG1hdGNoIHNjb3BlZCBhdXRob3IgcnVsZXMKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlU2V0KToKKyAgICAgICAgKFdlYkNvcmU6Omxlc3NTcGVjaWZp
Yyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzb3J0QW5kVHJhbnNmZXJN
YXRjaGVkUnVsZXMpOiByZWZhY3RvcmluZyB0byBzaW1wbGlmeSBjb2RlCisgICAgICAgIChXZWJD
b3JlOjptYXRjaGVzSW5UcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlQ291c2luTGlzdCk6IGF2b2lkIGNyb3NzaW5nIHNjb3BlZCBzdHlsZSBib3Vu
ZGFyaWVzCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpjYW5TaGFyZVN0eWxl
V2l0aEVsZW1lbnQpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6
bG9jYXRlU2hhcmVkU3R5bGUpOiBkaXR0bworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rv
cjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNl
dDo6YWRkUnVsZXNGcm9tU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkU3R5
bGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjp+U2NvcGVkUnVsZVNl
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4aXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6UGFyZW50U3RhY2tGcmFtZTo6UGFyZW50U3RhY2tGcmFtZSk6CisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6Zmlu
ZE93bmVyTm9kZSk6IHJlZmFjdG9yaW5nIHRvIHNpbXBsaWZ5IGNvZGUKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1N0eWxlU2hlZXQ6OmRvY3VtZW50KTogZGl0dG8KKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiByZWdpc3RlciBhIDxzdHls
ZSBzY29wZWQ+IGNoaWxkCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1bnJlZ2lzdGVyU2Nv
cGVkSFRNTFN0eWxlQ2hpbGQpOiB1bi1yZWdpc3RlciBhIDxzdHlsZSBzY29wZWQ+IGNoaWxkCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6IHF1ZXJ5
IHdoZXRoZXIgYSA8c3R5bGUgc2NvcGVkPiBjaGlsZCBpcyBwcmVzZW50CisgICAgICAgICogZG9t
L0VsZW1lbnQuaDoKKyAgICAgICAgKiBkb20vRWxlbWVudFJhcmVEYXRhLmg6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJlRGF0YSk6IGhvbGRzIGluZm9ybWF0
aW9uIGFib3V0IDxzdHlsZSBzY29wZWQ+IGNoaWxkcmVuCisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50UmFyZURhdGE6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOiAKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hp
bGQpOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6IHVwZGF0ZSBzY29wZWQgc3RhdGUsIFt1bi1dcmVn
aXN0ZXIgd2l0aCBwYXJlbnQgYXMgbmVjZXNzYXJ5CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5
bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCk6IHJlZ2lzdGVyaW5nIHdpdGgg
cGFyZW50CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0
aFNjb3BpbmdFbGVtZW50KTogdW4tcmVnaXN0ZXJpbmcgd2l0aCBwYXJlbnQKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KTogcmVnaXN0ZXIg
d2l0aCBwYXJlbnQgaWYgbmVjZXNzYXJ5CisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVt
ZW50Ojp3aWxsUmVtb3ZlKTogdW4tcmVnaXN0ZXIgd2l0aCBwYXJlbnQgaWYgbmVjZXNzYXJ5Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQpOiBxdWVyeSBzY29wZWQg
c3RhdHVzCisgICAgICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpzY29waW5nRWxlbWVu
dCk6IGdldCBzY29waW5nIGVsZW1lbnQKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OmlzUmVnaXN0ZXJlZFdpdGhT
Y29waW5nRWxlbWVudCk6IHdoZXRoZXIgdGhlIDxzdHlsZT4gZWxlbWVudCBpcyByZWdpc3RlcmVk
IHdpdGggaXRzIHBhcmVudC4KKwogMjAxMS0wOS0wNiAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8
a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBEbyBub3QgYWxsb2NhdGUgbWVt
b3J5IGZvciBleHRyZW1lbHkgbGFyZ2Ugc3VyZmFjZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5
bGVTZWxlY3Rvci5jcHAKaW5kZXggY2FlY2ExN2EwODFkNDQzNzI0Y2NlMWQzODQ1MDUyZmI3ZmQw
MjJhOS4uNzBkMDM5Yjk0MmE0NDQ2MGQzNThmZTAzMzZiMjFkY2JhYTEwMjk0ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcApAQCAtNjQsOSArNjQsMTEgQEAKICNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxGcmFtZUVsZW1lbnRCYXNlLmgiCisjaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgpAQCAtMjI4LDE2
ICsyMzAsMTUgQEAgY2xhc3MgUnVsZVNldCB7CiBwdWJsaWM6CiAgICAgUnVsZVNldCgpOwogICAg
IH5SdWxlU2V0KCk7Ci0gICAgCisKICAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1w
bCosIFZlY3RvcjxSdWxlRGF0YT4qPiBBdG9tUnVsZU1hcDsKLSAgICAKLSAgICB2b2lkIGFkZFJ1
bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwg
Q1NTU3R5bGVTZWxlY3RvciogPSAwKTsKIAotICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0eWxl
UnVsZSogaXRlbSk7Ci0gICAgdm9pZCBhZGRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2Vs
ZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBhZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENT
U1NlbGVjdG9yKiBzZWwpOwotICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwq
IGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1
bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpOworICAgIHZvaWQgYWRkUnVsZXNGcm9tU2hlZXQo
Q1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NTdHlsZVNlbGVj
dG9yKiA9IDAsIGNvbnN0IEVsZW1lbnQqID0gMCk7CisKKyAgICB2b2lkIGFkZFN0eWxlUnVsZShD
U1NTdHlsZVJ1bGUqLCBjb25zdCBFbGVtZW50Kik7CisgICAgdm9pZCBhZGRSdWxlKENTU1N0eWxl
UnVsZSosIENTU1NlbGVjdG9yKik7CisgICAgdm9pZCBhZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUq
LCBDU1NTZWxlY3RvciopOworICAgIHZvaWQgYWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwq
LCBBdG9tUnVsZU1hcCYsIENTU1N0eWxlUnVsZSosIENTU1NlbGVjdG9yKik7CiAgICAgdm9pZCBz
aHJpbmtUb0ZpdCgpOwogICAgIHZvaWQgZGlzYWJsZUF1dG9TaHJpbmtUb0ZpdCgpIHsgbV9hdXRv
U2hyaW5rVG9GaXRFbmFibGVkID0gZmFsc2U7IH0KIApAQCAtMjYxLDYgKzI2MiwyMyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBtX2F1dG9TaHJpbmtUb0ZpdEVuYWJsZWQ7CiB9OwogCitjbGFzcyBTY29w
ZWRSdWxlU2V0cyB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2NvcGVkUnVsZVNldHMpOwor
cHVibGljOgorICAgIFNjb3BlZFJ1bGVTZXRzKCkgeyB9CisgICAgflNjb3BlZFJ1bGVTZXRzKCk7
CisKKyAgICBSdWxlU2V0KiBnZXQoY29uc3QgRWxlbWVudCogc2NvcGUpIHsgcmV0dXJuIG1fc2Nv
cGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOyB9CisgICAgUnVsZVNldCogZW5zdXJlRXhpc3RzKGNv
bnN0IEVsZW1lbnQqKTsKKworICAgIHZvaWQgY29sbGVjdEZlYXR1cmVzKENTU1N0eWxlU2VsZWN0
b3I6OkZlYXR1cmVzJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBIYXNoTWFwPGNv
bnN0IEVsZW1lbnQqLCBSdWxlU2V0Kj4gU2NvcGVkUnVsZVNldE1hcDsKKworICAgIFNjb3BlZFJ1
bGVTZXRNYXAgbV9zY29wZWRSdWxlU2V0TWFwOworfTsKKwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1
bHRTdHlsZTsKIHN0YXRpYyBSdWxlU2V0KiBkZWZhdWx0UXVpcmtzU3R5bGU7CiBzdGF0aWMgUnVs
ZVNldCogZGVmYXVsdFByaW50U3R5bGU7CkBAIC0zMzIsNiArMzUwLDMyIEBAIHN0YXRpYyBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogcmlnaHRUb0xlZnREZWNsYXJhdGlvbigpCiAgICAgcmV0
dXJuIHJpZ2h0VG9MZWZ0RGVjbC5nZXQoKTsKIH0KIAorLy8gRGV0ZXJtaW5lIHRoZSBzY29wZSBv
ZiBhIHN0eWxlIHNoZWV0IChpZiBhbnkpLiBSZXR1cm5zICdmYWxzZScgaWYgaXQncyBhIHNjb3Bl
ZCBzdHlsZSBzaGVldCBpbiBhbiBpbnZhbGlkIGxvY2F0aW9uLgorc3RhdGljIGJvb2wgZGV0ZXJt
aW5lU2NvcGUoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IEVsZW1lbnQqJiBzY29wZSkKK3sK
KyAgICBzY29wZSA9IDA7CisKKyAgICBpZiAoIXNoZWV0KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBOb2RlKiBvd25lck5vZGUgPSBzaGVldC0+ZmluZE93bmVyTm9kZSgpOworICAgIGlm
ICghb3duZXJOb2RlIHx8ICFvd25lck5vZGUtPmlzSFRNTEVsZW1lbnQoKSB8fCAhb3duZXJOb2Rl
LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6c3R5bGVUYWcpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIEhUTUxTdHlsZUVsZW1lbnQqIHN0eWxlRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxT
dHlsZUVsZW1lbnQqPihvd25lck5vZGUpOworICAgIGlmICghc3R5bGVFbGVtZW50LT5zY29wZWQo
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBzdHls
ZUVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc2NvcGUgPSBzdHlsZUVsZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKKyAg
ICBBU1NFUlQoc2NvcGUpOworCisgICAgcmV0dXJuIHNjb3BlOyAvLyBUaGVyZSBtdXN0IGJlIGEg
c2NvcGluZyBlbGVtZW50IC0gcmV0dXJuICdmYWxzZScgaWYgZm9yIHdoYXRldmVyIHJlYXNvbiB0
aGlzIGlzIG5vdCB0aGUgY2FzZS4KK30KKwogQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxl
Y3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cywgQ1NT
U3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LCBjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsIGJvb2wgbWF0Y2hBdXRo
b3JBbmRVc2VyU3R5bGVzKQpAQCAtMzczLDkgKzQxNywxMCBAQCBDU1NTdHlsZVNlbGVjdG9yOjpD
U1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxl
U2hlZQogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykKICAgICAgICAgbV9tZWRp
dW0gPSBhZG9wdFB0cihuZXcgTWVkaWFRdWVyeUV2YWx1YXRvcih2aWV3LT5tZWRpYVR5cGUoKSwg
dmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKSk7CiAKLSAgICBtX2F1dGhv
clN0eWxlID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVz
ID0gYWRvcHRQdHIobmV3IFJ1bGVTZXQpOworICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzID0gYWRv
cHRQdHIobmV3IFNjb3BlZFJ1bGVTZXRzKTsKICAgICAvLyBBZGRpbmcgcnVsZXMgZnJvbSBtdWx0
aXBsZSBzaGVldHMsIHNocmluayBhdCB0aGUgZW5kLgotICAgIG1fYXV0aG9yU3R5bGUtPmRpc2Fi
bGVBdXRvU2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+ZGlzYWJsZUF1
dG9TaHJpbmtUb0ZpdCgpOwogCiAgICAgLy8gRklYTUU6IFRoaXMgc3Vja3MhIFRoZSB1c2VyIHNo
ZWV0IGlzIHJlcGFyc2VkIGV2ZXJ5IHRpbWUhCiAgICAgT3duUHRyPFJ1bGVTZXQ+IHRlbXBVc2Vy
U3R5bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CkBAIC0zODcsNyArNDMyLDcgQEAgQ1NTU3R5
bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hl
ZXRMaXN0KiBzdHlsZVNoZWUKICAgICAgICAgICAgIGlmIChwYWdlR3JvdXBVc2VyU2hlZXRzLT5h
dChpKS0+aXNVc2VyU3R5bGVTaGVldCgpKQogICAgICAgICAgICAgICAgIHRlbXBVc2VyU3R5bGUt
PmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9t
ZWRpdW0sIHRoaXMpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fYXV0aG9y
U3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgp
LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICAgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVz
LT5hZGRSdWxlc0Zyb21TaGVldChwYWdlR3JvdXBVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1f
bWVkaXVtLCB0aGlzKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZG9jdW1lbnRVc2VyU2hl
ZXRzKSB7CkBAIC0zOTYsNyArNDQxLDcgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxl
Y3RvcihEb2N1bWVudCogZG9jdW1lbnQsIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWUKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudFVzZXJTaGVldHMtPmF0KGkpLT5pc1VzZXJTdHlsZVNoZWV0KCkp
CiAgICAgICAgICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoZG9jdW1l
bnRVc2VyU2hlZXRzLT5hdChpKS5nZXQoKSwgKm1fbWVkaXVtLCB0aGlzKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChk
b2N1bWVudFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxlc0Zyb21TaGVldChkb2N1bWVu
dFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC00MDQsMTUgKzQ0OSwyNiBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAg
ICAgICBtX3VzZXJTdHlsZSA9IHRlbXBVc2VyU3R5bGUucmVsZWFzZSgpOwogCiAgICAgLy8gQWRk
IHJ1bGVzIGZyb20gZWxlbWVudHMgbGlrZSBTVkcncyA8Zm9udC1mYWNlPgotICAgIGlmIChtYXBw
ZWRFbGVtZW50U2hlZXQpCi0gICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICBpZiAobWFwcGVkRWxl
bWVudFNoZWV0KSB7CisgICAgICAgIC8vIEZJWE1FOiBzZWUgaWYgc3R5bGUgc2NvcGVzIGNhbi9z
aG91bGQgYmUgYWRkZWQgaGVyZS4KKyAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1
bGVzRnJvbVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICB9
CiAKICAgICAvLyBhZGQgc3R5bGVzaGVldHMgZnJvbSBkb2N1bWVudAogICAgIHVuc2lnbmVkIGxl
bmd0aCA9IHN0eWxlU2hlZXRzLT5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBzdHlsZVNoZWV0
cy0+aXRlbShpKTsKLSAgICAgICAgaWYgKHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhc2hl
ZXQtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpLCAqbV9tZWRpdW0sIHRoaXMp
OworICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+ZGlzYWJs
ZWQoKSkgeworICAgICAgICAgICAgQ1NTU3R5bGVTaGVldCogY3NzU2hlZXQgPSBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVNoZWV0Kj4oc2hlZXQpOworICAgICAgICAgICAgY29uc3QgRWxlbWVudCogc2Nv
cGUgPSAwOworCisgICAgICAgICAgICBpZiAoIWRldGVybWluZVNjb3BlKGNzc1NoZWV0LCBzY29w
ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoc2NvcGUpCisg
ICAgICAgICAgICAgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmVuc3VyZUV4aXN0cyhzY29wZSkt
PmFkZFJ1bGVzRnJvbVNoZWV0KGNzc1NoZWV0LCAqbV9tZWRpdW0sIHRoaXMsIHNjb3BlKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRk
UnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgIH0KICAg
ICB9ICAgIAogICAgIC8vIENvbGxlY3QgYWxsIGlkcyBhbmQgcnVsZXMgdXNpbmcgc2libGluZyBz
ZWxlY3RvcnMgKDpmaXJzdC1jaGlsZCBhbmQgc2ltaWxhcikKICAgICAvLyBpbiB0aGUgY3VycmVu
dCBzZXQgb2Ygc3R5bGVzaGVldHMuIFN0eWxlIHNoYXJpbmcgY29kZSB1c2VzIHRoaXMgaW5mb3Jt
YXRpb24gdG8gcmVqZWN0CkBAIC00MjAsMTEgKzQ3NiwxMiBAQCBDU1NTdHlsZVNlbGVjdG9yOjpD
U1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxl
U2hlZQogICAgIC8vIFVzdWFsbHkgdGhlcmUgYXJlIG5vIHNpYmxpbmcgcnVsZXMgaW4gdGhlIGRl
ZmF1bHQgc3R5bGUgYnV0IHRoZSBNYXRoTUwgc2hlZXQgaGFzIHNvbWUuCiAgICAgaWYgKHNpYmxp
bmdSdWxlc0luRGVmYXVsdFN0eWxlKQogICAgICAgICBzaWJsaW5nUnVsZXNJbkRlZmF1bHRTdHls
ZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwotICAgIG1fYXV0aG9yU3R5bGUtPmNvbGxl
Y3RGZWF0dXJlcyhtX2ZlYXR1cmVzKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+Y29sbGVj
dEZlYXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5jb2xsZWN0
RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAgICAgaWYgKG1fdXNlclN0eWxlKQogICAgICAgICBtX3Vz
ZXJTdHlsZS0+Y29sbGVjdEZlYXR1cmVzKG1fZmVhdHVyZXMpOwogCi0gICAgbV9hdXRob3JTdHls
ZS0+c2hyaW5rVG9GaXQoKTsKKyAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+c2hyaW5rVG9GaXQo
KTsKICAgICBpZiAobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMpCiAgICAgICAgIG1fZmVhdHVyZXMu
c2libGluZ1J1bGVzLT5zaHJpbmtUb0ZpdCgpOwogCkBAIC01NDcsNiArNjA0LDExIEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6cHVzaFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogcGFyZW50KQog
ICAgIHNpemVfdCBjb3VudCA9IHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXMuc2l6ZSgpOwog
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKICAgICAgICAgbV9hbmNlc3Rv
cklkZW50aWZpZXJGaWx0ZXItPmFkZChwYXJlbnRGcmFtZS5pZGVudGlmaWVySGFzaGVzW2ldKTsK
KyAgICAvLyBQb2ludCB0byBmcmFtZSBjb250YWluaW5nIHRoZSBjbG9zZXN0IHN0eWxlIHNjb3Bl
IChvciBsZWF2ZSBhdCAwIGlmIG5vbmUpLgorICAgIGlmIChwYXJlbnQtPmhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkKCkpCisgICAgICAgIHBhcmVudEZyYW1lLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWUg
PSAmcGFyZW50RnJhbWU7CisgICAgZWxzZSBpZiAobV9wYXJlbnRTdGFjay5zaXplKCkgPj0gMikK
KyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSA9IG1fcGFyZW50U3Rh
Y2tbbV9wYXJlbnRTdGFjay5zaXplKCkgLSAyXS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lOwogfQog
CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnBvcFBhcmVudFN0YWNrRnJhbWUoKQpAQCAtNjA3LDQ5
ICs2NjksMTA4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9u
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQogICAgIG1fbWF0Y2hlZERlY2xzLmFw
cGVuZChkZWNsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzKFJ1bGVT
ZXQqIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wg
aW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoQXV0aG9yUnVs
ZXMoaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVF
bXB0eVJ1bGVzKQoreworICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CisKKyAgICAvLyBNYXRj
aCBnbG9iYWwgYXV0aG9yIHJ1bGVzLgorICAgIG1hdGNoUnVsZVNldChtX2dsb2JhbEF1dGhvclN0
eWxlcy5nZXQoKSwgMCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICAvLyBNYXRjaCBzY29wZWQgc3R5bGUgc2hlZXQncyBydWxlcy4KKyAgICBp
ZiAoIW1fcGFyZW50U3RhY2suaXNFbXB0eSgpICYmIG1fcGFyZW50U3RhY2subGFzdCgpLmVsZW1l
bnQgPT0gbV9wYXJlbnROb2RlKSB7CisgICAgICAgIC8vIEZhc3QgYnJhbmNoOiBhY2Nlc3MgZW5j
bG9zaW5nIHNjb3BlcyBkaXJlY3RseSBmcm9tIHBhcmVudCBzdGFjaworICAgICAgICAvLyAoYnV0
IHN0YXJ0IHdpdGggY3VycmVudCBlbGVtZW50KS4KKyAgICAgICAgaWYgKG1fZWxlbWVudC0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkgeworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9
IG1fc2NvcGVkQXV0aG9yU3R5bGVzLT5nZXQobV9lbGVtZW50KTsKKyAgICAgICAgICAgIGlmIChy
dWxlU2V0KQorICAgICAgICAgICAgICAgIG1hdGNoUnVsZVNldChydWxlU2V0LCBtX2VsZW1lbnQs
IGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAg
ICAgIH0KKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZSogc2NvcGVGcmFtZSA9IG1fcGFyZW50U3Rh
Y2subGFzdCgpLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CisgICAgICAgIHdoaWxlIChzY29wZUZy
YW1lKSB7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9IHNjb3BlRnJhbWUtPmVs
ZW1lbnQ7CisgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9zY29wZWRBdXRob3JTdHls
ZXMtPmdldChzY29wZSk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAg
ICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgICAgICBpZiAoc2NvcGVGcmFtZSA9PSAm
bV9wYXJlbnRTdGFjay5maXJzdCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLS1zY29wZUZyYW1lOworICAgICAgICAgICAgc2NvcGVGcmFtZSA9IHNjb3BlRnJhbWUtPmNs
b3Nlc3RTdHlsZVNjb3BlRnJhbWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAv
LyBTbG93IGJyYW5jaDogY2xpbWIgdHJlZSwgY2hlY2sgZm9yIHN0eWxlIHNjb3BlcyBhdCBldmVy
eSBlbGVtZW50LgorICAgICAgICBmb3IgKGNvbnN0IE5vZGUqIG5vZGUgPSBtX2VsZW1lbnQ7IG5v
ZGU7IG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmICghbm9kZS0+
aXNFbGVtZW50Tm9kZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
Y29uc3QgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKKyAgICAgICAgICAgIGlm
ICghZWxlbWVudC0+aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0
eWxlcy0+Z2V0KGVsZW1lbnQpOworICAgICAgICAgICAgaWYgKHJ1bGVTZXQpCisgICAgICAgICAg
ICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIGVsZW1lbnQsIGZpcnN0UnVsZUluZGV4LCBsYXN0
UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
b3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMobV9jaGVja2VyLm1fY29sbGVjdFJ1bGVzT25seSk7
Cit9CisKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0dsb2JhbGx5KFJ1bGVTZXQq
IHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5j
bHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKIAogICAgIGlm
ICghcnVsZXMgfHwgIW1fZWxlbWVudCkKICAgICAgICAgcmV0dXJuOworCisgICAgbWF0Y2hSdWxl
U2V0KHJ1bGVzLCAwLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhtX2NoZWNrZXIubV9jb2xs
ZWN0UnVsZXNPbmx5KTsKK30KICAgICAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxl
U2V0KFJ1bGVTZXQqIHJ1bGVzLCBjb25zdCBFbGVtZW50KiBzY29wZSwgaW50JiBmaXJzdFJ1bGVJ
bmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQorewogICAg
IC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFnLCBhbmQg
ZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0IHRoZSBi
dWZmZXIuCiAgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hSdWxlc0Zv
ckxpc3QocnVsZXMtPmdldElEUnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
LmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRJRFJ1bGVzKG1fZWxlbWVu
dC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgs
IGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBpZiAobV9lbGVtZW50LT5o
YXNDbGFzcygpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOwogICAgICAgICBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gbV9zdHlsZWRFbGVtZW50LT5jbGFz
c05hbWVzKCk7CiAgICAgICAgIHNpemVfdCBzaXplID0gY2xhc3NOYW1lcy5zaXplKCk7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAgbWF0Y2hS
dWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoY2xhc3NOYW1lc1tpXS5pbXBsKCkpLCBm
aXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgICAg
ICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoY2xhc3NOYW1lc1tp
XS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKICAgICB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9JZCA9IG1f
ZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1wdHkoKSkg
ewogICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgbWF0Y2hSdWxlc0Zv
ckxpc3QocnVsZXMtPmdldFBzZXVkb1J1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0UnVsZUlu
ZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIG1hdGNoUnVs
ZXNGb3JMaXN0KHJ1bGVzLT5nZXRQc2V1ZG9SdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBzY29wZSwg
Zmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9
Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKG1fZWxlbWVudC0+bG9j
YWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVF
bXB0eVJ1bGVzKTsKLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVyc2FsUnVs
ZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
LSAgICAKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMobV9lbGVtZW50
LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5k
ZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0
VW5pdmVyc2FsUnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBp
bmNsdWRlRW1wdHlSdWxlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsZXNzU3BlY2lmaWMo
Y29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCit7CisgICAgdW5zaWduZWQg
c3BlY2lmaWNpdHkxID0gcjEtPnNwZWNpZmljaXR5KCk7CisgICAgdW5zaWduZWQgc3BlY2lmaWNp
dHkyID0gcjItPnNwZWNpZmljaXR5KCk7CisgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEgPT0gc3Bl
Y2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVjaWZpY2l0
eTEgPCBzcGVjaWZpY2l0eTI7IAorfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRU
cmFuc2Zlck1hdGNoZWRSdWxlcyhib29sIGNvbGxlY3RSdWxlc09ubHkpCit7CiAgICAgLy8gSWYg
d2UgZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9uZS4KICAgICBpZiAobV9tYXRjaGVk
UnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBTb3J0IHRo
ZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0gICAgCisg
ICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgp
LCBsZXNzU3BlY2lmaWMpOworCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2YgbWF0Y2hl
ZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlmICghbV9jaGVja2VyLm1f
Y29sbGVjdFJ1bGVzT25seSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9t
YXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRp
b24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSk7Ci0gICAgfSBlbHNl
IHsKKyAgICBpZiAoY29sbGVjdFJ1bGVzT25seSkgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgIGlmICgh
bV9ydWxlTGlzdCkKICAgICAgICAgICAgICAgICBtX3J1bGVMaXN0ID0gQ1NTUnVsZUxpc3Q6OmNy
ZWF0ZSgpOwogICAgICAgICAgICAgbV9ydWxlTGlzdC0+YXBwZW5kKG1fbWF0Y2hlZFJ1bGVzW2ld
LT5ydWxlKCkpOwogICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fbWF0Y2hlZFJ1bGVzLnNpemUoKTsgaSsrKQorICAgICAgICAgICAgYWRk
TWF0Y2hlZERlY2xhcmF0aW9uKG1fbWF0Y2hlZFJ1bGVzW2ldLT5ydWxlKCktPmRlY2xhcmF0aW9u
KCkpOwogICAgIH0KIH0KIApAQCAtNjkzLDEyICs4MTQsMTUgQEAgaW5saW5lIGJvb2wgTWF0Y2hp
bmdVQVJ1bGVzU2NvcGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKIAogYm9vbCBNYXRjaGluZ1VBUnVs
ZXNTY29wZTo6bV9tYXRjaGluZ1VBUnVsZXMgPSBmYWxzZTsKIAotaW5saW5lIHN0YXRpYyBib29s
IG1hdGNoZXNJblRyZWVTY29wZShUcmVlU2NvcGUqIHRyZWVTY29wZSwgYm9vbCBydWxlUmVhY2hl
c0ludG9TaGFkb3dET00pCitpbmxpbmUgc3RhdGljIGJvb2wgbWF0Y2hlc0luVHJlZVNjb3BlKFRy
ZWVTY29wZSogdHJlZVNjb3BlLCBjb25zdCBFbGVtZW50KiBzdHlsZVNjb3BlLCBib29sIHJ1bGVS
ZWFjaGVzSW50b1NoYWRvd0RPTSkKIHsKLSAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2NvcGU6
OmlzTWF0Y2hpbmdVQVJ1bGVzKCkgfHwgdHJlZVNjb3BlLT5hcHBseUF1dGhvclNoZWV0cygpIHx8
IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTTsKKyAgICByZXR1cm4gTWF0Y2hpbmdVQVJ1bGVzU2Nv
cGU6OmlzTWF0Y2hpbmdVQVJ1bGVzKCkKKyAgICAgICAgfHwgdHJlZVNjb3BlLT5hcHBseUF1dGhv
clNoZWV0cygpCisgICAgICAgIHx8IChzdHlsZVNjb3BlICYmIHN0eWxlU2NvcGUtPnRyZWVTY29w
ZSgpID09IHRyZWVTY29wZSkKKyAgICAgICAgfHwgcnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NOwog
fQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3Rv
cjxSdWxlRGF0YT4qIHJ1bGVzLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5k
ZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNo
UnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qIHJ1bGVzLCBjb25zdCBFbGVtZW50
KiBzdHlsZVNjb3BlLCBpbnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJv
b2wgaW5jbHVkZUVtcHR5UnVsZXMpCiB7CiAgICAgaWYgKCFydWxlcykKICAgICAgICAgcmV0dXJu
OwpAQCAtNzExLDggKzgzNSw4IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zv
ckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyCiAgICAgICAgIGNv
bnN0IFJ1bGVEYXRhJiBydWxlRGF0YSA9IHJ1bGVzLT5hdChpKTsKICAgICAgICAgaWYgKGNhblVz
ZUZhc3RSZWplY3QgJiYgZmFzdFJlamVjdFNlbGVjdG9yKHJ1bGVEYXRhKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihydWxlRGF0YSkpIHsKLSAgICAg
ICAgICAgIGlmICghbWF0Y2hlc0luVHJlZVNjb3BlKG1fZWxlbWVudC0+dHJlZVNjb3BlKCksIG1f
Y2hlY2tlci5tX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cykpCisgICAgICAgIGlmIChjaGVja1Nl
bGVjdG9yKHJ1bGVEYXRhLCBzdHlsZVNjb3BlKSkgeworICAgICAgICAgICAgaWYgKCFtYXRjaGVz
SW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVlU2NvcGUoKSwgc3R5bGVTY29wZSwgbV9jaGVja2Vy
Lm1faGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgICAgIC8vIElmIHRoZSBydWxlIGhhcyBubyBwcm9wZXJ0aWVzIHRvIGFwcGx5LCB0
aGVuIGlnbm9yZSBpdCBpbiB0aGUgbm9uLWRlYnVnIG1vZGUuCiAgICAgICAgICAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUgPSBydWxlRGF0YS5ydWxlKCk7CkBAIC03NDEsMTggKzg2NSw2IEBAIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRh
PiogcnVsZXMsIGludCYgZmlyCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgY29tcGFy
ZVJ1bGVzKGNvbnN0IFJ1bGVEYXRhKiByMSwgY29uc3QgUnVsZURhdGEqIHIyKQotewotICAgIHVu
c2lnbmVkIHNwZWNpZmljaXR5MSA9IHIxLT5zcGVjaWZpY2l0eSgpOwotICAgIHVuc2lnbmVkIHNw
ZWNpZmljaXR5MiA9IHIyLT5zcGVjaWZpY2l0eSgpOwotICAgIHJldHVybiAoc3BlY2lmaWNpdHkx
ID09IHNwZWNpZmljaXR5MikgPyByMS0+cG9zaXRpb24oKSA8IHIyLT5wb3NpdGlvbigpIDogc3Bl
Y2lmaWNpdHkxIDwgc3BlY2lmaWNpdHkyOyAKLX0KLQotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpz
b3J0TWF0Y2hlZFJ1bGVzKCkKLXsKLSAgICBzdGQ6OnNvcnQobV9tYXRjaGVkUnVsZXMuYmVnaW4o
KSwgbV9tYXRjaGVkUnVsZXMuZW5kKCksIGNvbXBhcmVSdWxlcyk7Ci19Ci0KIGlubGluZSBFSW5z
aWRlTGluayBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmRldGVybWluZUxpbmtT
dGF0ZShFbGVtZW50KiBlbGVtZW50KSBjb25zdAogewogICAgIGlmICghZWxlbWVudCB8fCAhZWxl
bWVudC0+aXNMaW5rKCkpCkBAIC04ODcsOSArOTk5LDkgQEAgYm9vbCBDU1NTdHlsZVNlbGVjdG9y
OjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVu
dCoKICAgICAgICAgICAgIGlmICghKGVsZW1lbnQtPmhhc0lEKCkgJiYgZWxlbWVudC0+aWRGb3JT
dHlsZVJlc29sdXRpb24oKSA9PSBzZWwtPnZhbHVlKCkpKQogICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFzdENoZWNrU2VsZWN0b3Ioc2Vs
LCBlbGVtZW50KTsKKyAgICAgICAgcmV0dXJuIGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVu
dCwgMCk7CiAgICAgfQotICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCwgZHlu
YW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlKSA9PSBTZWxlY3Rvck1hdGNoZXM7CisgICAgcmV0dXJu
IGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCAwLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFs
c2UpID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNTdHls
ZVNlYXJjaFRocmVzaG9sZCA9IDEwOwpAQCAtOTAxLDYgKzEwMTMsOCBAQCBOb2RlKiBDU1NTdHls
ZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZp
c2l0ZWROb2RlQwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50
LT5pc1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudC0+
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgU3R5bGVk
RWxlbWVudCogcCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlm
IChwLT5pbmxpbmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC05MTYsOCArMTAz
MCwxMCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQq
IHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgIC8vIHdpbGwgbmV2ZXIgZ28gZGVl
cGVyIHRoYW4gY1N0eWxlU2VhcmNoTGV2ZWxUaHJlc2hvbGQgbGV2ZWxzIGludG8gcmVjdXJzaW9u
LgogICAgIHZpc2l0ZWROb2RlQ291bnQgKz0gY1N0eWxlU2VhcmNoVGhyZXNob2xkOwogICAgIHdo
aWxlICh0aGlzQ291c2luKSB7Ci0gICAgICAgIHdoaWxlIChjdXJyZW50Tm9kZSkgeworICAgICAg
ICBmb3IgKDsgY3VycmVudE5vZGU7IGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3Vz
U2libGluZygpKSB7CiAgICAgICAgICAgICArK3N1YmNvdW50OworICAgICAgICAgICAgaWYgKGN1
cnJlbnROb2RlLT5pc0VsZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KGN1cnJlbnROb2RlKS0+aGFz
U2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIGlmIChjdXJyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA9PSBwYXJlbnRTdHlsZSAmJiBj
dXJyZW50Tm9kZS0+bGFzdENoaWxkKCkpIHsKICAgICAgICAgICAgICAgICAvLyBBZGp1c3QgZm9y
IHVudXNlZCByZXNlcnZlZCB0cmllcy4KICAgICAgICAgICAgICAgICB2aXNpdGVkTm9kZUNvdW50
IC09IGNTdHlsZVNlYXJjaFRocmVzaG9sZCAtIHN1YmNvdW50OwpAQCAtOTI1LDcgKzEwNDEsNiBA
QCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVu
dCwgdW5zaWduZWQmIHZpc2l0ZWROb2RlQwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYg
KHN1YmNvdW50ID49IGNTdHlsZVNlYXJjaFRocmVzaG9sZCkKICAgICAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUtPnByZXZpb3VzU2li
bGluZygpOwogICAgICAgICB9CiAgICAgICAgIGN1cnJlbnROb2RlID0gbG9jYXRlQ291c2luTGlz
dCh0aGlzQ291c2luLT5wYXJlbnRFbGVtZW50KCksIHZpc2l0ZWROb2RlQ291bnQpOwogICAgICAg
ICB0aGlzQ291c2luID0gY3VycmVudE5vZGU7CkBAIC05MzcsNyArMTA1Miw3IEBAIE5vZGUqIENT
U1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25l
ZCYgdmlzaXRlZE5vZGVDCiBib29sIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJsaW5nUnVs
ZXMoKQogewogICAgIGludCBmaXJzdFNpYmxpbmdSdWxlID0gLTEsIGxhc3RTaWJsaW5nUnVsZSA9
IC0xOwotICAgIG1hdGNoUnVsZXMobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuZ2V0KCksIGZpcnN0
U2libGluZ1J1bGUsIGxhc3RTaWJsaW5nUnVsZSwgZmFsc2UpOworICAgIG1hdGNoUnVsZXNHbG9i
YWxseShtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFz
dFNpYmxpbmdSdWxlLCBmYWxzZSk7CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CkBAIC0x
MDQ5LDYgKzExNjQsOSBAQCBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRo
RWxlbWVudChOb2RlKiBub2RlKSBjb25zdAogICAgIGlmIChlbGVtZW50LT5oYXNJRCgpICYmIG1f
ZmVhdHVyZXMuaWRzSW5SdWxlcy5jb250YWlucyhlbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1dGlv
bigpLmltcGwoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlmIChlbGVtZW50LT5o
YXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKICAgICBi
b29sIGlzQ29udHJvbCA9IGVsZW1lbnQtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCk7CiAKICAgICBp
ZiAoaXNDb250cm9sICE9IG1fZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKQEAgLTEx
MTUsNiArMTIzMyw4IEBAIEFMV0FZU19JTkxJTkUgUmVuZGVyU3R5bGUqIENTU1N0eWxlU2VsZWN0
b3I6OmxvY2F0ZVNoYXJlZFN0eWxlKCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHBhcmVu
dFN0eWxlUHJldmVudHNTaGFyaW5nKG1fcGFyZW50U3R5bGUpKQogICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAobV9zdHlsZWRFbGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAg
ICAgICByZXR1cm4gMDsKIAogICAgIC8vIENoZWNrIHByZXZpb3VzIHNpYmxpbmdzIGFuZCB0aGVp
ciBjb3VzaW5zLgogICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKQEAgLTExNDgsMTcgKzEyNjgsMTcg
QEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwg
aW50JiBsYXN0VUFSdWxlKQogICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVz
ZXIgYWdlbnQgc2hlZXQuCiAgICAgUnVsZVNldCogdXNlckFnZW50U3R5bGVTaGVldCA9IG1fbWVk
aXVtLT5tZWRpYVR5cGVNYXRjaFNwZWNpZmljKCJwcmludCIpCiAgICAgICAgID8gZGVmYXVsdFBy
aW50U3R5bGUgOiBkZWZhdWx0U3R5bGU7Ci0gICAgbWF0Y2hSdWxlcyh1c2VyQWdlbnRTdHlsZVNo
ZWV0LCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2UpOworICAgIG1hdGNoUnVsZXNHbG9i
YWxseSh1c2VyQWdlbnRTdHlsZVNoZWV0LCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2Up
OwogCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJr
cyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykK
LSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0
VUFSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoUnVsZXNHbG9iYWxseShkZWZhdWx0UXVpcmtz
U3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgICAgIAogICAgIC8v
IElmIGRvY3VtZW50IHVzZXMgdmlldyBzb3VyY2Ugc3R5bGVzIChpbiB2aWV3IHNvdXJjZSBtb2Rl
IG9yIGluIHhtbCB2aWV3ZXIgbW9kZSksIHRoZW4gd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdmll
dyBzb3VyY2Ugc3R5bGUgc2hlZXQuCiAgICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5pc1Zp
ZXdTb3VyY2UoKSkgewogICAgICAgICBpZiAoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpCiAgICAg
ICAgICAgICBsb2FkVmlld1NvdXJjZVN0eWxlKCk7Ci0gICAgICAgIG1hdGNoUnVsZXMoZGVmYXVs
dFZpZXdTb3VyY2VTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKKyAgICAg
ICAgbWF0Y2hSdWxlc0dsb2JhbGx5KGRlZmF1bHRWaWV3U291cmNlU3R5bGUsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAgICAgfQogfQogCkBAIC0xMzYyLDcgKzE0ODIsNyBAQCBQ
YXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQo
RWxlbWVudCogZSwgUmVuZGVyU3R5bAogICAgIGlmICghcmVzb2x2ZUZvclJvb3REZWZhdWx0KSB7
CiAgICAgICAgIC8vIDQuIE5vdyB3ZSBjaGVjayB1c2VyIHNoZWV0IHJ1bGVzLgogICAgICAgICBp
ZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1f
dXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKKyAg
ICAgICAgICAgIG1hdGNoUnVsZXNHbG9iYWxseShtX3VzZXJTdHlsZS5nZXQoKSwgZmlyc3RVc2Vy
UnVsZSwgbGFzdFVzZXJSdWxlLCBmYWxzZSk7CiAKICAgICAgICAgLy8gNS4gTm93IGNoZWNrIGF1
dGhvciBydWxlcywgYmVnaW5uaW5nIGZpcnN0IHdpdGggcHJlc2VudGF0aW9uYWwgYXR0cmlidXRl
cwogICAgICAgICAvLyBtYXBwZWQgZnJvbSBIVE1MLgpAQCAtMTQwNyw3ICsxNTI3LDcgQEAgUGFz
c1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KEVs
ZW1lbnQqIGUsIFJlbmRlclN0eWwKICAgICAKICAgICAgICAgLy8gNi4gQ2hlY2sgdGhlIHJ1bGVz
IGluIGF1dGhvciBzaGVldHMgbmV4dC4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2Vy
U3R5bGVzKQotICAgICAgICAgICAgbWF0Y2hSdWxlcyhtX2F1dGhvclN0eWxlLmdldCgpLCBmaXJz
dEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxzZSk7CisgICAgICAgICAgICBtYXRjaEF1
dGhvclJ1bGVzKGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKIAogICAg
ICAgICAvLyA3LiBOb3cgY2hlY2sgb3VyIGlubGluZSBzdHlsZSBhdHRyaWJ1dGUuCiAgICAgICAg
IGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyAmJiBtX3N0eWxlZEVsZW1lbnQpIHsKQEAg
LTE2MjIsOCArMTc0Miw4IEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0
b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudChQc2V1ZG9JZCBwc2V1ZG8sCiAgICAgbWF0Y2hVQVJ1
bGVzKGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5k
VXNlclN0eWxlcykgewotICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBmaXJz
dFVzZXJSdWxlLCBsYXN0VXNlclJ1bGUsIGZhbHNlKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhtX2F1
dGhvclN0eWxlLmdldCgpLCBmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBmYWxzZSk7
CisgICAgICAgIG1hdGNoUnVsZXNHbG9iYWxseShtX3VzZXJTdHlsZS5nZXQoKSwgZmlyc3RVc2Vy
UnVsZSwgbGFzdFVzZXJSdWxlLCBmYWxzZSk7CisgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmly
c3RVc2VyUnVsZSwgbGFzdFVzZXJSdWxlLCBmYWxzZSk7CiAgICAgfQogCiAgICAgaWYgKG1fbWF0
Y2hlZERlY2xzLmlzRW1wdHkoKSAmJiAhdmlzaXRlZFN0eWxlKQpAQCAtMTY5MCw3ICsxODEwLDgg
QEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6c3R5bGVGb3JQYWdl
KGludCBwYWdlSW5kZXgpCiAgICAgY29uc3QgU3RyaW5nIHBhZ2UgPSBwYWdlTmFtZShwYWdlSW5k
ZXgpOwogICAgIG1hdGNoUGFnZVJ1bGVzKGRlZmF1bHRQcmludFN0eWxlLCBpc0xlZnQsIGlzRmly
c3QsIHBhZ2UpOwogICAgIG1hdGNoUGFnZVJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBpc0xlZnQs
IGlzRmlyc3QsIHBhZ2UpOwotICAgIG1hdGNoUGFnZVJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCks
IGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CisgICAgLy8gT25seSBjb25zaWRlciB0aGUgZ2xvYmFs
IFJ1bGVTZXQgZm9yIEBwYWdlIHJ1bGVzLCBhcyBwZXIgdGhlIEhUTUw1IHNwZWMuCisgICAgbWF0
Y2hQYWdlUnVsZXMobV9nbG9iYWxBdXRob3JTdHlsZXMuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwg
cGFnZSk7CiAgICAgbV9saW5lSGVpZ2h0VmFsdWUgPSAwOwogICAgIGFwcGx5RGVjbGFyYXRpb25z
PHRydWU+KGZhbHNlLCAwLCBtX21hdGNoZWREZWNscy5zaXplKCkgLSAxKTsKIApAQCAtMTk2Niw3
ICsyMDg3LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxlTGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNl
dWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVudCogZSwKICAgICAgICAgLy8gTm93IHdlIGNo
ZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0
eWxlcykgewogICAgICAgICAgICAgaW50IGZpcnN0VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxl
ID0gLTE7Ci0gICAgICAgICAgICBtYXRjaFJ1bGVzKG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVz
ZXJSdWxlLCBsYXN0VXNlclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7Cisg
ICAgICAgICAgICBtYXRjaFJ1bGVzR2xvYmFsbHkobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNl
clJ1bGUsIGxhc3RVc2VyUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTk3NSw3ICsyMDk2LDcgQEAgUGFzc1JlZlB0cjxDU1NSdWxl
TGlzdD4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoRWxlbWVu
dCogZSwKIAogICAgICAgICAvLyBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNoZWV0cy4KICAg
ICAgICAgaW50IGZpcnN0QXV0aG9yUnVsZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwotICAg
ICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFz
dEF1dGhvclJ1bGUsIHJ1bGVzVG9JbmNsdWRlICYgRW1wdHlDU1NSdWxlcyk7CisgICAgICAgIG1h
dGNoQXV0aG9yUnVsZXMoZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgcnVsZXNUb0lu
Y2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKIAogICAgICAgICBtX2NoZWNrZXIubV9zYW1lT3JpZ2lu
T25seSA9IGZhbHNlOwogICAgIH0KQEAgLTE5ODUsNyArMjEwNiw3IEBAIFBhc3NSZWZQdHI8Q1NT
UnVsZUxpc3Q+IENTU1N0eWxlU2VsZWN0b3I6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50KEVs
ZW1lbnQqIGUsCiAgICAgcmV0dXJuIG1fcnVsZUxpc3QucmVsZWFzZSgpOwogfQogCi1pbmxpbmUg
Ym9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxl
RGF0YSkKK2lubGluZSBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3IoY29uc3Qg
UnVsZURhdGEmIHJ1bGVEYXRhLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBtX2R5bmFt
aWNQc2V1ZG8gPSBOT1BTRVVETzsKICAgICBtX2NoZWNrZXIubV9oYXNVbmtub3duUHNldWRvRWxl
bWVudHMgPSBmYWxzZTsKQEAgLTE5OTksMTEgKzIxMjAsMTEgQEAgaW5saW5lIGJvb2wgQ1NTU3R5
bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCiAgICAg
ICAgIC8vIFRoaXMgaXMgbGltaXRlZCB0byBIVE1MIG9ubHkgc28gd2UgZG9uJ3QgbmVlZCB0byBj
aGVjayB0aGUgbmFtZXNwYWNlLgogICAgICAgICBpZiAocnVsZURhdGEuaGFzVG9wU2VsZWN0b3JN
YXRjaGluZ0hUTUxCYXNlZE9uUnVsZUhhc2goKSAmJiAhcnVsZURhdGEuaGFzTXVsdGlwYXJ0U2Vs
ZWN0b3IoKSAmJiBtX2VsZW1lbnQtPmlzSFRNTEVsZW1lbnQoKSkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICByZXR1cm4gU2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3Rv
cihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1lbnQpOworICAgICAgICByZXR1cm4gU2VsZWN0
b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBtX2VsZW1l
bnQsIHNjb3BlKTsKICAgICB9CiAKICAgICAvLyBTbG93IHBhdGguCi0gICAgU2VsZWN0b3JNYXRj
aCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1f
ZWxlbWVudCwgbV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50
Tm9kZSA/IG1fcGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVjdG9yTWF0
Y2ggbWF0Y2ggPSBtX2NoZWNrZXIuY2hlY2tTZWxlY3RvcihydWxlRGF0YS5zZWxlY3RvcigpLCBt
X2VsZW1lbnQsIHNjb3BlLCBtX2R5bmFtaWNQc2V1ZG8sIGZhbHNlLCBmYWxzZSwgc3R5bGUoKSwg
bV9wYXJlbnROb2RlID8gbV9wYXJlbnROb2RlLT5yZW5kZXJTdHlsZSgpIDogMCk7CiAgICAgaWYg
KG1hdGNoICE9IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlm
IChtX2NoZWNrZXIubV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX2NoZWNrZXIubV9wc2V1
ZG9TdHlsZSAhPSBtX2R5bmFtaWNQc2V1ZG8pCkBAIC0yMDI1LDEwICsyMTQ2LDEwIEBAIGlubGlu
ZSBib29sIHNlbGVjdG9yVGFnTWF0Y2hlcyhjb25zdCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBD
U1NTZWxlY3Rvciogc2VsZWN0CiB9CiAgICAgCiB0ZW1wbGF0ZSA8Ym9vbCBjaGVja1ZhbHVlKGNv
bnN0IEVsZW1lbnQqLCBBdG9taWNTdHJpbmdJbXBsKik+Ci1pbmxpbmUgYm9vbCBmYXN0Q2hlY2tT
aW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50
KiYgZWxlbWVudCwgY29uc3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNv
bnN0IEVsZW1lbnQqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCitpbmxpbmUg
Ym9vbCBmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciomIHNlbGVjdG9y
LCBjb25zdCBFbGVtZW50KiYgZWxlbWVudCwgY29uc3QgRWxlbWVudCogc2NvcGUsIGNvbnN0IENT
U1NlbGVjdG9yKiYgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiYgdG9wQ2hp
bGRPclN1YnNlbGVjdG9yTWF0Y2hFbGVtZW50KQogewogICAgIEF0b21pY1N0cmluZ0ltcGwqIHZh
bHVlID0gc2VsZWN0b3ItPnZhbHVlKCkuaW1wbCgpOwotICAgIGZvciAoOyBlbGVtZW50OyBlbGVt
ZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpKSB7CisgICAgZm9yICg7IGVsZW1lbnQ7IGVs
ZW1lbnQgPSAoZWxlbWVudCA9PSBzY29wZSkgPyAwIDogZWxlbWVudC0+cGFyZW50RWxlbWVudCgp
KSB7CiAgICAgICAgIGlmIChjaGVja1ZhbHVlKGVsZW1lbnQsIHZhbHVlKSAmJiBzZWxlY3RvclRh
Z01hdGNoZXMoZWxlbWVudCwgc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICBpZiAoc2VsZWN0b3It
PnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQpCiAgICAgICAgICAgICAgICAg
dG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKQEAgLTIwNzYsNyArMjE5Nyw3IEBAIGlubGluZSBi
b29sIGNoZWNrVGFnVmFsdWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqKQogCiB9
CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpmYXN0Q2hlY2tTZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQp
Citib29sIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0
b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVtZW50KiBlbGVtZW50LCBj
b25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBBU1NFUlQoaXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3Ioc2VsZWN0b3IpKTsKIApAQCAtMjA5OCwxNSArMjIxOSwxNSBAQCBib29sIENTU1N0eWxlU2Vs
ZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0
b3IqIHNlbAogICAgIHdoaWxlIChzZWxlY3RvcikgewogICAgICAgICBzd2l0Y2ggKHNlbGVjdG9y
LT5tX21hdGNoKSB7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNsYXNzOgotICAgICAgICAg
ICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9y
LCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNo
ZWNrQ2xhc3NWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OklkOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVj
a0lEVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENo
aWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVj
a1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZT4oc2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0gICAgICAgICAgICBpZiAoIWZhc3RDaGVja1Np
bmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9y
U3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAg
ICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9y
LCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRPclN1YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2Vs
ZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtMjEzMiw3ICsyMjUzLDE1IEBAIGJv
b2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjppc0Zhc3RDaGVja2FibGVTZWxl
Y3Rvcihjb25zdCBDU1NTZWxlY3RvCiAvLyAqIFNlbGVjdG9yTWF0Y2hlcyAgICAgICAgIC0gdGhl
IHNlbGVjdG9yIG1hdGNoZXMgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3RvckZhaWxzTG9jYWxs
eSAgICAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgdGhlIGVsZW1lbnQgZQogLy8gKiBTZWxlY3Rv
ckZhaWxzQ29tcGxldGVseSAtIHRoZSBzZWxlY3RvciBmYWlscyBmb3IgZSBhbmQgYW55IHNpYmxp
bmcgb3IgYW5jZXN0b3Igb2YgZQotQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JNYXRjaCBDU1NT
dHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
IHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxl
Y3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0CitDU1NTdHlsZVNlbGVjdG9yOjpT
ZWxlY3Rvck1hdGNoIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxl
Y3RvcigKKyAgICBDU1NTZWxlY3Rvciogc2VsLAorICAgIEVsZW1lbnQqIGUsCisgICAgY29uc3Qg
RWxlbWVudCogc2NvcGUsCisgICAgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sCisgICAgYm9vbCBp
c1N1YlNlbGVjdG9yLAorICAgIGJvb2wgZW5jb3VudGVyZWRMaW5rLAorICAgIFJlbmRlclN0eWxl
KiBlbGVtZW50U3R5bGUsCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29u
c3QKIHsKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIFNwZWM6IENTUzIgc2VsZWN0b3JzIGNhbm5v
dCBiZSBhcHBsaWVkIHRvIHRoZSAoY29uY2VwdHVhbGx5KSBjbG9uZWQgRE9NIHRyZWUKQEAgLTIx
NDIsNyArMjI3MSw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVT
ZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAjZW5kaWYKIAogICAgIC8v
IGZpcnN0IHNlbGVjdG9yIGhhcyB0byBtYXRjaAotICAgIGlmICghY2hlY2tPbmVTZWxlY3Rvcihz
ZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGlzU3ViU2VsZWN0b3IsIGVuY291bnRlcmVkTGluaywgZWxl
bWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorICAgIGlmICghY2hlY2tPbmVTZWxlY3Rv
cihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJl
ZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKICAgICAgICAgcmV0dXJu
IFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogCiAgICAgLy8gVGhlIHJlc3Qgb2YgdGhlIHNlbGVjdG9y
cyBoYXMgdG8gbWF0Y2gKQEAgLTIxNTMsMTAgKzIyODIsMTQgQEAgQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JNYXRjaCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Vs
ZWN0b3IKICAgICBpZiAoIXNlbCkKICAgICAgICAgcmV0dXJuIFNlbGVjdG9yTWF0Y2hlczsKIAot
ICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCisgICAgaWYgKHJl
bGF0aW9uICE9IENTU1NlbGVjdG9yOjpTdWJTZWxlY3RvcikgewogICAgICAgICAvLyBCYWlsLW91
dCBpZiB0aGlzIHNlbGVjdG9yIGlzIGlycmVsZXZhbnQgZm9yIHRoZSBwc2V1ZG9TdHlsZQogICAg
ICAgICBpZiAobV9wc2V1ZG9TdHlsZSAhPSBOT1BTRVVETyAmJiBtX3BzZXVkb1N0eWxlICE9IGR5
bmFtaWNQc2V1ZG8pCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHk7
CisgICAgICAgIC8vIERvbid0IGdvIHBhc3QgdGhlIHNjb3BpbmcgZWxlbWVudCAoaWYgYW55KS4K
KyAgICAgICAgaWYgKGUgPT0gc2NvcGUpCisgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHk7CisgICAgfQogCiAgICAgLy8gQ2hlY2sgZm9yIG5lc3RlZCBsaW5rcy4KICAg
ICBpZiAobV9tYXRjaFZpc2l0ZWRQc2V1ZG9DbGFzcyAmJiAhaXNTdWJTZWxlY3RvcikgewpAQCAt
MjE3MSwyNCArMjMwNCwyNSBAQCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0
eWxlU2VsZWN0b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcgogCiAgICAgc3dpdGNo
IChyZWxhdGlvbikgewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5kYW50OgotICAg
ICAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHdoaWxlIChlICE9IHNjb3BlKSB7
CiAgICAgICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKICAg
ICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4tPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAgICAgICAgICAgICAg
IGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JN
YXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwg
ZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0g
Y2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3Vu
dGVyZWRMaW5rKTsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xv
Y2FsbHkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDaGlsZDoKLSAg
ICAgICAgewotICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsK
LSAgICAgICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIGUgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3Rvcihz
ZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwotICAgICAgICB9
CisgICAgICAgICAgICBpZiAoZSAhPSBzY29wZSkgeworICAgICAgICAgICAgICAgIENvbnRhaW5l
ck5vZGUqIG4gPSBlLT5wYXJlbnROb2RlKCk7CisgICAgICAgICAgICAgICAgaWYgKCFuIHx8ICFu
LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKKyAgICAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG4pOworICAgICAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUs
IGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFj
ZW50OgogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIW1fY29sbGVjdFJ1bGVzT25seSAmJiBl
LT5wYXJlbnROb2RlKCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKQEAg
LTIyMDMsNyArMjMzNyw3IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5
bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKTsKICAgICAgICAgICAgIG1fbWF0Y2hWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1p
Y1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVy
ZWRMaW5rKTsKICAgICAgICAgfQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpJbmRpcmVjdEFk
amFjZW50OgogICAgICAgICAgICAgaWYgKCFtX2NvbGxlY3RSdWxlc09ubHkgJiYgZS0+cGFyZW50
Tm9kZSgpICYmIGUtPnBhcmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CkBAIC0yMjE5LDcg
KzIzNTMsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3Rvck1hdGNoIENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcgogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU2VsZWN0b3JGYWlsc0xvY2FsbHk7CiAgICAgICAgICAgICAgICAgZSA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihuKTsKICAgICAgICAgICAgICAgICBtX21hdGNoVmlzaXRlZFBzZXVkb0Ns
YXNzID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNr
U2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsK
KyAgICAgICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWws
IGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKICAgICAg
ICAgICAgICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBtYXRjaDsKICAgICAgICAgICAgIH07CkBAIC0yMjMxLDE0ICsyMzY1
LDE0IEBAIENTU1N0eWxlU2VsZWN0b3I6OlNlbGVjdG9yTWF0Y2ggQ1NTU3R5bGVTZWxlY3Rvcjo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yCiAgICAgICAgICAgICBpZiAoKGVsZW1lbnRT
dHlsZSB8fCBtX2NvbGxlY3RSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8g
JiYgZHluYW1pY1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKICAgICAgICAgICAgICAgICAhKChSZW5k
ZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8g
PT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpICYmIHNlbC0+
bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3MpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1Nl
bGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVt
ZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExp
bmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKTsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKICAgICAgICAgewogICAgICAgICAgICAgTm9kZSog
c2hhZG93SG9zdE5vZGUgPSBlLT5zaGFkb3dBbmNlc3Rvck5vZGUoKTsKICAgICAgICAgICAgIGlm
IChzaGFkb3dIb3N0Tm9kZSA9PSBlIHx8ICFzaGFkb3dIb3N0Tm9kZS0+aXNFbGVtZW50Tm9kZSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAg
ICAgICAgIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oc2hhZG93SG9zdE5vZGUpOwotICAgICAg
ICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwg
ZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwg
ZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwogICAgICAg
ICB9CiAgICAgfQogCkBAIC0yMzk3LDcgKzI1MzEsMTUgQEAgc3RhdGljIGJvb2wgYW55QXR0cmli
dXRlTWF0Y2hlcyhOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBt
YXQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0
b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUs
IFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3Vu
dGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLCBSZW5kZXJTdHlsZSogZWxlbWVu
dFBhcmVudFN0eWxlKSBjb25zdAorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lU2VsZWN0b3IoCisgICAgQ1NTU2VsZWN0b3IqIHNlbCwKKyAgICBFbGVtZW50
KiBlLAorICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlLAorICAgIFBzZXVkb0lkJiBkeW5hbWljUHNl
dWRvLAorICAgIGJvb2wgaXNTdWJTZWxlY3RvciwKKyAgICBib29sIGVuY291bnRlcmVkTGluaywK
KyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlLAorICAgIFJlbmRlclN0eWxlKiBlbGVtZW50
UGFyZW50U3R5bGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGUpOwogICAgIGlmICghZSkKQEAgLTI0
MzksNyArMjU4MSw3IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6U2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lCiAgICAgICAgICAgICAgICAg
Ly8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2ZXIgb2NjdXJzCiAgICAgICAgICAg
ICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgpICE9IENTU1NlbGVjdG9yOjpQc2V1ZG9O
b3QpOwogCi0gICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwg
ZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1l
bnRQYXJlbnRTdHlsZSkpCisgICAgICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1
YlNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxl
bWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRv
ICE9IE5PUFNFVURPICYmIChSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2
ZSgpIHx8IGR5bmFtaWNQc2V1ZG8gPT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRv
ID09IFJFU0laRVIpKSB7CkBAIC0yNzQ4LDcgKzI4OTAsNyBAQCBib29sIENTU1N0eWxlU2VsZWN0
b3I6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBF
bGVtZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6UHNldWRvQW55OgogICAgICAgICAgICAgICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
ID0gc2VsLT5zZWxlY3Rvckxpc3QoKS0+Zmlyc3QoKTsgc2VsZWN0b3I7IHNlbGVjdG9yID0gQ1NT
U2VsZWN0b3JMaXN0OjpuZXh0KHNlbGVjdG9yKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
Y2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgZHluYW1pY1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVy
ZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkgPT0gU2VsZWN0b3JNYXRj
aGVzKQorICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwg
c2NvcGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxl
LCBlbGVtZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTMxMTIsNyArMzI1NCw3IEBAIFJ1bGVTZXQ6On5SdWxlU2V0KCkKIAogCiB2
b2lkIFJ1bGVTZXQ6OmFkZFRvUnVsZVNldChBdG9taWNTdHJpbmdJbXBsKiBrZXksIEF0b21SdWxl
TWFwJiBtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHJ1
bGUsIENTU1NlbGVjdG9yKiBzZWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NTdHls
ZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBzZWwpCiB7CiAgICAgaWYgKCFrZXkpIHJldHVybjsK
ICAgICBWZWN0b3I8UnVsZURhdGE+KiBydWxlcyA9IG1hcC5nZXQoa2V5KTsKQEAgLTMxNTMsNyAr
MzI5NSw3IEBAIHZvaWQgUnVsZVNldDo6YWRkUGFnZVJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBD
U1NTZWxlY3Rvciogc2VsKQogICAgIG1fcGFnZVJ1bGVzLmFwcGVuZChSdWxlRGF0YShydWxlLCBz
ZWwsIG1fcGFnZVJ1bGVzLnNpemUoKSkpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJv
bVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBt
ZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit2b2lkIFJ1bGVTZXQ6OmFk
ZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBtZWRpdW0sIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IsIGNvbnN0IEVs
ZW1lbnQqIHNjb3BlKQogewogICAgIGlmICghc2hlZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTMx
NjgsMTEgKzMzMTAsMTEgQEAgdm9pZCBSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldChDU1NTdHls
ZVNoZWV0KiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgIFN0eWxlQmFzZSogaXRlbSA9IHNoZWV0LT5p
dGVtKGkpOwogICAgICAgICBpZiAoaXRlbS0+aXNTdHlsZVJ1bGUoKSkKLSAgICAgICAgICAgIGFk
ZFN0eWxlUnVsZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSk7CisgICAgICAgICAg
ICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaXRlbSksIHNjb3BlKTsK
ICAgICAgICAgZWxzZSBpZiAoaXRlbS0+aXNJbXBvcnRSdWxlKCkpIHsKICAgICAgICAgICAgIENT
U0ltcG9ydFJ1bGUqIGltcG9ydCA9IHN0YXRpY19jYXN0PENTU0ltcG9ydFJ1bGUqPihpdGVtKTsK
ICAgICAgICAgICAgIGlmICghaW1wb3J0LT5tZWRpYSgpIHx8IG1lZGl1bS5ldmFsKGltcG9ydC0+
bWVkaWEoKSwgc3R5bGVTZWxlY3RvcikpCi0gICAgICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hl
ZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgc3R5bGVTZWxlY3Rvcik7CisgICAgICAg
ICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoaW1wb3J0LT5zdHlsZVNoZWV0KCksIG1lZGl1bSwg
c3R5bGVTZWxlY3Rvciwgc2NvcGUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGl0ZW0t
PmlzTWVkaWFSdWxlKCkpIHsKICAgICAgICAgICAgIENTU01lZGlhUnVsZSogciA9IHN0YXRpY19j
YXN0PENTU01lZGlhUnVsZSo+KGl0ZW0pOwpAQCAtMzE4NCwzMyArMzMyNiw1NCBAQCB2b2lkIFJ1
bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yJgogICAgICAgICAgICAgICAgICAgICBDU1NSdWxlICpjaGlsZEl0ZW0g
PSBydWxlcy0+aXRlbShqKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkSXRlbS0+aXNT
dHlsZVJ1bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQgaXMgYSBTdHlsZVJ1
bGUsIHNvIGFwcGVuZCBpdCB0byBvdXIgbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgYWRk
U3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGNoaWxkSXRlbSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KGNoaWxkSXRlbSksIHNjb3BlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGls
ZEl0ZW0tPmlzRm9udEZhY2VSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRp
Y19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxkSXRlbSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHlsZVNlbGVjdG9yLT5mb250U2VsZWN0b3IoKS0+YWRkRm9udEZhY2VSdWxlKGZvbnRG
YWNlUnVsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGFkZCBAZm9udC1mYWNlIHJ1bGVzIG9mIHNjb3BlZCBz
dHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBG
aW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNjb3BlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgQ1NTRm9udEZhY2VSdWxlKiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFj
ZVJ1bGUqPihjaGlsZEl0ZW0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj
aGlsZEl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGlzIGtleWZyYW1lIHJ1bGUgdG8gb3VyIHNldC4KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3Rh
dGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGNoaWxkSXRlbSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBk
b24ndCBhZGQgQGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBt
b21lbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2Nv
cGVkIEBrZXlmcmFtZSBydWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2NvcGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVT
dHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9ICAgLy8gZm9yIHJ1bGVzCiAg
ICAgICAgICAgICB9ICAgLy8gaWYgcnVsZXMKICAgICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0Zv
bnRGYWNlUnVsZSgpICYmIHN0eWxlU2VsZWN0b3IpIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGlz
IGZvbnQgZmFjZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgY29uc3QgQ1NTRm9udEZhY2VSdWxl
KiBmb250RmFjZVJ1bGUgPSBzdGF0aWNfY2FzdDxDU1NGb250RmFjZVJ1bGUqPihpdGVtKTsKLSAg
ICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUo
Zm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhl
IG1vbWVudC4KKyAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8gaGF2ZSBzY29wZWQgQGZvbnQt
ZmFjZSBydWxlcy4KKyAgICAgICAgICAgIGlmICghc2NvcGUpIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRG
YWNlUnVsZSo+KGl0ZW0pOworICAgICAgICAgICAgICAgIHN0eWxlU2VsZWN0b3ItPmZvbnRTZWxl
Y3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmIChpdGVtLT5pc0tleWZyYW1lc1J1bGUoKSkKLSAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZSo+KGl0ZW0pKTsKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBGSVhNRTog
V2UgZG9uJ3QgYWRkIEBrZXlmcmFtZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0
aGUgbW9tZW50LgorICAgICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAa2V5
ZnJhbWUgcnVsZXMuCisgICAgICAgICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgICAgIHN0
eWxlU2VsZWN0b3ItPmFkZEtleWZyYW1lU3R5bGUoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZSo+KGl0ZW0pKTsKICAgICB9CiAgICAgaWYgKG1fYXV0b1Nocmlua1RvRml0RW5hYmxl
ZCkKICAgICAgICAgc2hyaW5rVG9GaXQoKTsKIH0KIAotdm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQordm9pZCBSdWxlU2V0OjphZGRTdHlsZVJ1bGUoQ1NTU3R5
bGVSdWxlKiBydWxlLCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBpZiAocnVsZS0+aXNQ
YWdlUnVsZSgpKSB7Ci0gICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0
PENTU1BhZ2VSdWxlKj4ocnVsZSk7Ci0gICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdl
UnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKSk7CisgICAgICAgIC8vIElnbm9yZSBAcGFnZSBy
dWxlcyBpZiB0aGUgc3R5bGUgc2hlZXQgaXMgc2NvcGVkCisgICAgICAgIGlmICghc2NvcGUpIHsK
KyAgICAgICAgICAgIENTU1BhZ2VSdWxlKiBwYWdlUnVsZSA9IHN0YXRpY19jYXN0PENTU1BhZ2VS
dWxlKj4ocnVsZSk7CisgICAgICAgICAgICBhZGRQYWdlUnVsZShwYWdlUnVsZSwgcGFnZVJ1bGUt
PnNlbGVjdG9yTGlzdCgpLmZpcnN0KCkpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgZm9yIChDU1NTZWxlY3RvciogcyA9IHJ1bGUtPnNlbGVjdG9yTGlzdCgpLmZpcnN0KCk7IHM7
IHMgPSBDU1NTZWxlY3Rvckxpc3Q6Om5leHQocykpCiAgICAgICAgICAgICBhZGRSdWxlKHJ1bGUs
IHMpOwpAQCAtMzMxMyw2ICszNDc2LDI3IEBAIHZvaWQgUnVsZVNldDo6c2hyaW5rVG9GaXQoKQog
ICAgIG1fcGFnZVJ1bGVzLnNocmlua1RvRml0KCk7CiB9CiAKK1Njb3BlZFJ1bGVTZXRzOjp+U2Nv
cGVkUnVsZVNldHMoKQoreworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3Njb3BlZFJ1bGVTZXRNYXAp
OworfQorCitSdWxlU2V0KiBTY29wZWRSdWxlU2V0czo6ZW5zdXJlRXhpc3RzKGNvbnN0IEVsZW1l
bnQqIHNjb3BlKQoreworICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZFJ1bGVTZXRNYXAu
Z2V0KHNjb3BlKTsKKyAgICBpZiAoIXJ1bGVTZXQpIHsKKyAgICAgICAgcnVsZVNldCA9IG5ldyBS
dWxlU2V0OworICAgICAgICBtX3Njb3BlZFJ1bGVTZXRNYXAuc2V0KHNjb3BlLCBydWxlU2V0KTsK
KyAgICB9CisgICAgcmV0dXJuIHJ1bGVTZXQ7Cit9CisKK3ZvaWQgU2NvcGVkUnVsZVNldHM6OmNv
bGxlY3RGZWF0dXJlcyhDU1NTdHlsZVNlbGVjdG9yOjpGZWF0dXJlcyYgZmVhdHVyZXMpIGNvbnN0
Cit7CisgICAgZm9yIChTY29wZWRSdWxlU2V0TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fc2Nv
cGVkUnVsZVNldE1hcC5iZWdpbigpLCBpdEVuZCA9IG1fc2NvcGVkUnVsZVNldE1hcC5lbmQoKTsg
aXQgIT0gaXRFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPmNvbGxlY3RGZWF0dXJlcyhm
ZWF0dXJlcyk7Cit9CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vIHRoaXMg
aXMgbW9zdGx5IGJvcmluZyBzdHVmZiBvbiBob3cgdG8gYXBwbHkgYSBjZXJ0YWluIHJ1bGUgdG8g
dGhlIHJlbmRlcnN0eWxlLi4uCiAKQEAgLTM0MDEsMTcgKzM1ODUsNyBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKFJ1bGVTZXQqIHJ1bGVzLCBib29sIGlzTGVmdFBhZ2Us
IGJvb2wgaXNGaQogICAgICAgICByZXR1cm47CiAKICAgICBtYXRjaFBhZ2VSdWxlc0Zvckxpc3Qo
cnVsZXMtPmdldFBhZ2VSdWxlcygpLCBpc0xlZnRQYWdlLCBpc0ZpcnN0UGFnZSwgcGFnZU5hbWUp
OwotCi0gICAgLy8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9uZS4KLSAg
ICBpZiAobV9tYXRjaGVkUnVsZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBTb3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7
Ci0KLSAgICAvLyBOb3cgdHJhbnNmZXIgdGhlIHNldCBvZiBtYXRjaGVkIHJ1bGVzIG92ZXIgdG8g
b3VyIGxpc3Qgb2YgZGVjbHMuCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF0Y2hl
ZFJ1bGVzLnNpemUoKTsgaSsrKQotICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRj
aGVkUnVsZXNbaV0tPnJ1bGUoKS0+ZGVjbGFyYXRpb24oKSk7CisgICAgc29ydEFuZFRyYW5zZmVy
TWF0Y2hlZFJ1bGVzKGZhbHNlKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFBh
Z2VSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGJvb2wgaXNMZWZ0
UGFnZSwgYm9vbCBpc0ZpcnN0UGFnZSwgY29uc3QgU3RyaW5nJiBwYWdlTmFtZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCmluZGV4IDdjZGE0MDY2YmQyYWFmZWM5NTY4YjM3Mzhh
NDRkZDZmMDQzNTQ5N2EuLmVlMDAwMzRiOWNjYzU5MDg0ZWFlZjA3NDNmNWNkOGMzOWI1NmUxMjcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaApAQCAtNjMsNiArNjMsNyBAQCBj
bGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yOwogY2xhc3MgTm9kZTsKIGNsYXNzIFJ1bGVEYXRhOwog
Y2xhc3MgUnVsZVNldDsKK2NsYXNzIFNjb3BlZFJ1bGVTZXRzOwogY2xhc3MgU2V0dGluZ3M7CiBj
bGFzcyBTdHlsZUltYWdlOwogY2xhc3MgU3R5bGVTaGVldDsKQEAgLTIyNSwxMiArMjI2LDE3IEBA
IHB1YmxpYzoKICAgICAgICAgdm9pZCBhZGRNYXRjaGVkUnVsZShjb25zdCBSdWxlRGF0YSogcnVs
ZSkgeyBtX21hdGNoZWRSdWxlcy5hcHBlbmQocnVsZSk7IH0KICAgICAgICAgdm9pZCBhZGRNYXRj
aGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpOwogCi0gICAg
ICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBs
YXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICAgICAgdm9pZCBtYXRj
aFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgaW50JiBmaXJzdFJ1bGVJbmRl
eCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAg
Ly8gbWF0Y2hBdXRob3JSdWxlczogTWF0Y2ggYWxsIGdsb2JhbCBhbmQgYXBwbGljYWJsZSBzY29w
ZWQgYXV0aG9yLWRlZmluZWQgcnVsZXMuCisgICAgICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpOworICAgICAgICAvLyBtYXRjaFJ1bGVzOiBtYXRjaGVzIHZzLiBhbGwgcnVsZXMgaW4g
dGhlIHBhc3NlZC1pbiBSdWxlU2V0LgorICAgICAgICB2b2lkIG1hdGNoUnVsZXNHbG9iYWxseShS
dWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgLy8gSW1wbGVtZW50YXRpb24gbWV0aG9kczoKKyAg
ICAgICAgdm9pZCBtYXRjaFJ1bGVTZXQoUnVsZVNldCosIGNvbnN0IEVsZW1lbnQqLCBpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgICAgICB2b2lkIG1hdGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4q
LCBjb25zdCBFbGVtZW50KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4
LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0
b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAgICAgICAgdm9pZCBzb3J0TWF0Y2hlZFJ1bGVz
KCk7CisgICAgICAgIHZvaWQgc29ydEFuZFRyYW5zZmVyTWF0Y2hlZFJ1bGVzKGJvb2wgY29sbGVj
dFJ1bGVzT25seSk7CiAgICAgICAgIAotICAgICAgICBib29sIGNoZWNrU2VsZWN0b3IoY29uc3Qg
UnVsZURhdGEmKTsKKyAgICAgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiwg
Y29uc3QgRWxlbWVudCopOwogCiAgICAgICAgIHRlbXBsYXRlIDxib29sIGZpcnN0UGFzcz4KICAg
ICAgICAgdm9pZCBhcHBseURlY2xhcmF0aW9ucyhib29sIGltcG9ydGFudCwgaW50IHN0YXJ0SW5k
ZXgsIGludCBlbmRJbmRleCk7CkBAIC0yNDEsMTcgKzI0NywxOSBAQCBwdWJsaWM6CiAgICAgICAg
IGJvb2wgaXNSaWdodFBhZ2UoaW50IHBhZ2VJbmRleCkgY29uc3QgeyByZXR1cm4gIWlzTGVmdFBh
Z2UocGFnZUluZGV4KTsgfQogICAgICAgICBib29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgp
IGNvbnN0OwogICAgICAgICBTdHJpbmcgcGFnZU5hbWUoaW50IHBhZ2VJbmRleCkgY29uc3Q7Ci0g
ICAgICAgIAotICAgICAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRob3JTdHlsZTsKKworICAgICAg
ICBPd25QdHI8UnVsZVNldD4gbV9nbG9iYWxBdXRob3JTdHlsZXM7CisgICAgICAgIE93blB0cjxT
Y29wZWRSdWxlU2V0cz4gbV9zY29wZWRBdXRob3JTdHlsZXM7CiAgICAgICAgIE93blB0cjxSdWxl
U2V0PiBtX3VzZXJTdHlsZTsKIAogICAgICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwogCiAgICAg
ICAgIHN0cnVjdCBQYXJlbnRTdGFja0ZyYW1lIHsKICAgICAgICAgICAgIFBhcmVudFN0YWNrRnJh
bWUoKSB7fQotICAgICAgICAgICAgUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBlbGVtZW50KSA6
IGVsZW1lbnQoZWxlbWVudCkge30KKyAgICAgICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVu
dCogZWxlbWVudCkgOiBlbGVtZW50KGVsZW1lbnQpLCBjbG9zZXN0U3R5bGVTY29wZUZyYW1lKDAp
IHsgfQogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudDsKICAgICAgICAgICAgIFZlY3Rvcjx1
bnNpZ25lZCwgND4gaWRlbnRpZmllckhhc2hlczsKKyAgICAgICAgICAgIFBhcmVudFN0YWNrRnJh
bWUqIGNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiAgICAgICAgIH07CiAgICAgICAgIFZlY3RvcjxQ
YXJlbnRTdGFja0ZyYW1lPiBtX3BhcmVudFN0YWNrOwogICAgICAgICAKQEAgLTI3NiwxMSArMjg0
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIFNlbGVjdG9yQ2hlY2tlcihEb2N1bWVudCosIGJv
b2wgc3RyaWN0UGFyc2luZyk7CiAKICAgICAgICAgICAgIGJvb2wgY2hlY2tTZWxlY3RvcihDU1NT
ZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yID0gZmFsc2Up
IGNvbnN0OwotICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9yKENTU1NlbGVj
dG9yKiwgRWxlbWVudCosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0
b3IsIGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSog
ZWxlbWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7Ci0gICAgICAgICAgICBib29sIGNoZWNrT25l
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8s
IGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiwg
UmVuZGVyU3R5bGUqIGVsZW1lbnRQYXJlbnRTdHlsZSkgY29uc3Q7CisgICAgICAgICAgICBTZWxl
Y3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxl
bWVudCogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3Is
IGJvb2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxl
bWVudFBhcmVudFN0eWxlID0gMCkgY29uc3Q7CisgICAgICAgICAgICBib29sIGNoZWNrT25lU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRM
aW5rLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0
OwogICAgICAgICAgICAgYm9vbCBjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9y
KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8pIGNvbnN0OwogICAgICAgICAgICAgc3RhdGljIGJv
b2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqKTsKLSAgICAgICAg
ICAgIHN0YXRpYyBib29sIGZhc3RDaGVja1NlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiwgY29u
c3QgRWxlbWVudCopOworICAgICAgICAgICAgc3RhdGljIGJvb2wgZmFzdENoZWNrU2VsZWN0b3Io
Y29uc3QgQ1NTU2VsZWN0b3IqLCBjb25zdCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUp
OwogCiAgICAgICAgICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCog
ZWxlbWVudCkgY29uc3Q7CiAgICAgICAgICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3Rh
dGVTbG93Q2FzZShFbGVtZW50KiBlbGVtZW50KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmNwcAppbmRleCAyN2MwMWUzNjEyZjViYmE2OWMxODc3MDhjZWY3ZmJmMTc2NzZlYTY1
Li5jY2E1YmFlNGRiNDdkZWIxZTc4YmZkYjRhZjljYTY5OTQzZjcyZjE5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0yMzYsMjQgKzIzNiwyNiBAQCB2b2lkIENTU1N0eWxl
U2hlZXQ6OnN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpCiAgICAgICAgIG93bmVyLT5zdGFydExv
YWRpbmdEeW5hbWljU2hlZXQoKTsKIH0KIAotRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6OmRvY3Vt
ZW50KCkKK05vZGUqIENTU1N0eWxlU2hlZXQ6OmZpbmRPd25lck5vZGUoKSBjb25zdAogewotICAg
IFN0eWxlQmFzZSogc3R5bGVPYmplY3QgPSB0aGlzOwotICAgIHdoaWxlIChzdHlsZU9iamVjdCkg
eworICAgIGZvciAoY29uc3QgU3R5bGVCYXNlKiBzdHlsZU9iamVjdCA9IHRoaXM7IHN0eWxlT2Jq
ZWN0OyBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQoKSkgewogICAgICAgICBpZiAo
c3R5bGVPYmplY3QtPmlzQ1NTU3R5bGVTaGVldCgpKSB7Ci0gICAgICAgICAgICBOb2RlKiBvd25l
ck5vZGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5v
ZGUoKTsKKyAgICAgICAgICAgIE5vZGUqIG93bmVyTm9kZSA9IHN0YXRpY19jYXN0PGNvbnN0IENT
U1N0eWxlU2hlZXQqPihzdHlsZU9iamVjdCktPm93bmVyTm9kZSgpOwogICAgICAgICAgICAgaWYg
KG93bmVyTm9kZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlLT5kb2N1bWVudCgp
OworICAgICAgICAgICAgICAgIHJldHVybiBvd25lck5vZGU7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKHN0eWxlT2JqZWN0LT5pc1J1bGUoKSkKLSAgICAgICAgICAgIHN0eWxlT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8Q1NTUnVsZSo+KHN0eWxlT2JqZWN0KS0+cGFyZW50U3R5bGVTaGVldCgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZU9iamVjdCA9IHN0eWxlT2JqZWN0LT5wYXJlbnQo
KTsKICAgICB9Ci0KICAgICByZXR1cm4gMDsKIH0KIAorRG9jdW1lbnQqIENTU1N0eWxlU2hlZXQ6
OmRvY3VtZW50KCkKK3sKKyAgICBOb2RlKiBvd25lck5vZGUgPSBmaW5kT3duZXJOb2RlKCk7CisK
KyAgICByZXR1cm4gb3duZXJOb2RlID8gb3duZXJOb2RlLT5kb2N1bWVudCgpIDogMDsKK30KKwor
CiB2b2lkIENTU1N0eWxlU2hlZXQ6OnN0eWxlU2hlZXRDaGFuZ2VkKCkKIHsKICAgICBTdHlsZUJh
c2UqIHJvb3QgPSB0aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
U2hlZXQuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKaW5kZXggMzVhNDUx
MDJkMWViNmIyZDY5MmNkYjE0MTU1M2NmYzkxMWU3Yjg3Yy4uZTRiNWEwYmQ2ZTc4YzJjY2Q5ODBm
ZDNhNmY5NjhjMTcwNGExM2I4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0
eWxlU2hlZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCkBAIC04
OCw2ICs4OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tMb2FkZWQoKTsKICAg
ICB2b2lkIHN0YXJ0TG9hZGluZ0R5bmFtaWNTaGVldCgpOwogCisgICAgTm9kZSogZmluZE93bmVy
Tm9kZSgpIGNvbnN0OwogICAgIERvY3VtZW50KiBkb2N1bWVudCgpOwogCiAgICAgY29uc3QgU3Ry
aW5nJiBjaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9jaGFyc2V0OyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5jcHAKaW5kZXggY2Q4MmQwNjM2ZTdiYTQ3Yjk4Zjk3MzJlNjlkMTU1ZWU1OTVlNmY3Mi4uNWJh
MTRiZmRkM2ZmZDNlMGRiM2Q5ZGM4MGQxZGQ2YWY2MDQ0YjBkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcApAQCAtMTM2OSw2ICsxMzY5LDIzIEBAIHZvaWQgRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2Vk
KGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUqIGFmCiAgICAg
ICAgIGNoZWNrRm9yU2libGluZ1N0eWxlQ2hhbmdlcyh0aGlzLCByZW5kZXJTdHlsZSgpLCBmYWxz
ZSwgYmVmb3JlQ2hhbmdlLCBhZnRlckNoYW5nZSwgY2hpbGRDb3VudERlbHRhKTsKIH0KIAordm9p
ZCBFbGVtZW50OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBlbnN1cmVS
YXJlRGF0YSgpLT5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK3ZvaWQgRWxl
bWVudDo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCkKK3sKKyAgICBBU1NFUlQoaGFz
UmFyZURhdGEoKSk7CisgICAgaWYgKGhhc1JhcmVEYXRhKCkpCisgICAgICAgIHJhcmVEYXRhKCkt
PnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCitib29sIEVsZW1lbnQ6Omhh
c1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzUmFyZURhdGEo
KSAmJiByYXJlRGF0YSgpLT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworfQorCiB2b2lkIEVs
ZW1lbnQ6OmJlZ2luUGFyc2luZ0NoaWxkcmVuKCkKIHsKICAgICBjbGVhcklzUGFyc2luZ0NoaWxk
cmVuRmluaXNoZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGE4NDYxZWExNjg1NzJiZTNlMzJl
Y2RjNTFjNmFmOWRlNmNkNTIzYmQuLjIyYjBiNWVkNzU2ZGU4NDFlYmU4ZWE0OWJiYjQyNDMzMTAw
ZjQ5NGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtMjM0LDYgKzIzNCwxMCBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHNoYWRvd1BzZXVkb0lkKCkgY29uc3Q7CiAg
ICAgdm9pZCBzZXRTaGFkb3dQc2V1ZG9JZChjb25zdCBBdG9taWNTdHJpbmcmLCBFeGNlcHRpb25D
b2RlJiA9IEFTU0VSVF9OT19FWENFUFRJT04pOwogCisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KTsKKyAgICBib29sIGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7CisKICAgICBSZW5k
ZXJTdHlsZSogY29tcHV0ZWRTdHlsZShQc2V1ZG9JZCA9IE5PUFNFVURPKTsKIAogICAgIHZvaWQg
c2V0U3R5bGVBZmZlY3RlZEJ5RW1wdHkoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50UmFyZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50UmFyZURhdGEu
aAppbmRleCAxY2FjY2Q0OTRmMTBmMmE2YzMwNmU2MGJlMTM0NGE3NTQ2NWUyOTZmLi4yMDQzZmUy
MDQwMTJjYmEzYjg3OGRlYjExZmY1ZmJmMmRkOWE0ODI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnRSYXJlRGF0YS5oCkBAIC0zOSw2ICszOSwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2V0
Q29tcHV0ZWRTdHlsZSgpOwogCisgICAgdm9pZCByZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxk
KCk7CisgICAgdm9pZCB1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICBib29s
IGhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3Q7CisKICAgICB1c2luZyBOb2RlUmFyZURh
dGE6Om5lZWRzRm9jdXNBcHBlYXJhbmNlVXBkYXRlU29vbkFmdGVyQXR0YWNoOwogICAgIHVzaW5n
IE5vZGVSYXJlRGF0YTo6c2V0TmVlZHNGb2N1c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRh
Y2g7CiAKQEAgLTUwLDYgKzU0LDggQEAgcHVibGljOgogICAgIE93blB0cjxEYXRhc2V0RE9NU3Ry
aW5nTWFwPiBtX2RhdGFzZXRET01TdHJpbmdNYXA7CiAgICAgT3duUHRyPENsYXNzTGlzdD4gbV9j
bGFzc0xpc3Q7CiAKKyAgICB1bnNpZ25lZCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRy
ZW47CisKICAgICBib29sIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHk7CiAKICNpZiBFTkFCTEUoRlVM
TFNDUkVFTl9BUEkpCkBAIC02NSw2ICs3MSw3IEBAIGlubGluZSBJbnRTaXplIGRlZmF1bHRNaW5p
bXVtU2l6ZUZvclJlc2l6aW5nKCkKIGlubGluZSBFbGVtZW50UmFyZURhdGE6OkVsZW1lbnRSYXJl
RGF0YSgpCiAgICAgOiBtX21pbmltdW1TaXplRm9yUmVzaXppbmcoZGVmYXVsdE1pbmltdW1TaXpl
Rm9yUmVzaXppbmcoKSkKICAgICAsIG1fc2hhZG93Um9vdCgwKQorICAgICwgbV9udW1iZXJPZlNj
b3BlZEhUTUxTdHlsZUNoaWxkcmVuKDApCiAgICAgLCBtX3N0eWxlQWZmZWN0ZWRCeUVtcHR5KGZh
bHNlKQogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKICAgICAsIG1fY29udGFpbnNGdWxsU2Ny
ZWVuRWxlbWVudChmYWxzZSkKQEAgLTgyLDUgKzg5LDIxIEBAIGlubGluZSB2b2lkIEVsZW1lbnRS
YXJlRGF0YTo6cmVzZXRDb21wdXRlZFN0eWxlKCkKICAgICBtX2NvbXB1dGVkU3R5bGUuY2xlYXIo
KTsKIH0KIAoraW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZWdpc3RlclNjb3BlZEhUTUxT
dHlsZUNoaWxkKCkKK3sKKyAgICArK21fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsK
K30KKworaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0
eWxlQ2hpbGQoKQoreworICAgIEFTU0VSVChtX251bWJlck9mU2NvcGVkSFRNTFN0eWxlQ2hpbGRy
ZW4gPiAwKTsKKyAgICAtLW1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30KKwor
aW5saW5lIGJvb2wgRWxlbWVudFJhcmVEYXRhOjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKK30K
KwogfQogI2VuZGlmIC8vIEVsZW1lbnRSYXJlRGF0YV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbiBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEF0dHJpYnV0ZU5hbWVzLmluCmluZGV4IDc5OTE2M2MyZmFmZDAzZGEwN2ZhZmQ1NmE2MjI2MGUw
ZjQxOTMwY2UuLjkxNmRlNDgyMDQyNGY3ODdjY2YyZmE0NzllZWJkZGM1MDlhMTI1ZDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCkBAIC0yNjYsNiArMjY2LDcg
QEAgcnVsZXMKIHNhbmRib3gKIHNjaGVtZQogc2NvcGUKK3Njb3BlZAogc2Nyb2xsYW1vdW50CiBz
Y3JvbGxkZWxheQogc2Nyb2xsaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50
LmNwcAppbmRleCA2NDhkMGJkNmU1NTljODFkZjQ4MDVjNzNjMGUyOWY4ZTVlMTZkMTNjLi40NWJm
NmE3MDMxNmExOWQ3ZTU2NGY3YjIyZjlmMWQwNTNkYWY1MGJiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAgdXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKIGlubGluZSBIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCwgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKICAgICAs
IFN0eWxlRWxlbWVudChkb2N1bWVudCwgY3JlYXRlZEJ5UGFyc2VyKQorICAgICwgbV9pc1JlZ2lz
dGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQoZmFsc2UpCiB7CiAgICAgQVNTRVJUKGhhc1RhZ05hbWUo
c3R5bGVUYWcpKTsKIH0KQEAgLTU2LDEwICs1Nyw0OCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IHRpdGxlQXR0ciAmJiBtX3NoZWV0KQogICAgICAgICBtX3NoZWV0LT5zZXRUaXRs
ZShhdHRyLT52YWx1ZSgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gc2NvcGVkQXR0
cikgeworICAgICAgICBFbGVtZW50KiBzY29wZSA9IHNjb3BpbmdFbGVtZW50KCk7CisgICAgICAg
IEFTU0VSVChzY29wZSB8fCAhbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQpOworICAg
ICAgICBpZiAoc2NvcGUpIHsKKyAgICAgICAgICAgIGlmIChzY29wZWQoKSkKKyAgICAgICAgICAg
ICAgICByZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKKyAgICAgICAgICAg
IHNjb3BlLT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlu
RG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+cGFyc2luZygpICYmIGRvY3VtZW50KCktPnJlbmRl
cmVyKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yQ2hhbmdlZChEZWZl
clJlY2FsY1N0eWxlKTsKKyAgICB9CiAgICAgZWxzZQogICAgICAgICBIVE1MRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CiAKK3ZvaWQgSFRNTFN0eWxlRWxlbWVudDo6cmVn
aXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKQoreworICAgIEFTU0VSVCghbV9pc1JlZ2lzdGVyZWRX
aXRoU2NvcGluZ0VsZW1lbnQpOworICAgIGlmICghbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0Vs
ZW1lbnQpIHsKKyAgICAgICAgRWxlbWVudCogc2NvcGUgPSBzY29waW5nRWxlbWVudCgpOworICAg
ICAgICBpZiAoIXNjb3BlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNjb3BlLT5y
ZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVkV2l0
aFNjb3BpbmdFbGVtZW50ID0gdHJ1ZTsKKyAgICB9Cit9CisKK3ZvaWQgSFRNTFN0eWxlRWxlbWVu
dDo6dW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpCit7CisgICAgQVNTRVJUKG1faXNSZWdp
c3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50IHx8ICFzY29wZWQoKSk7CisgICAgaWYgKG1faXNSZWdp
c3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KSB7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gc2Nv
cGluZ0VsZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlKTsKKyAgICAgICAgaWYgKHNjb3Bl
KQorICAgICAgICAgICAgc2NvcGUtPnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOwor
ICAgICAgICBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCA9IGZhbHNlOworICAgIH0K
K30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKQogewog
ICAgIFN0eWxlRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKHRoaXMpOwpAQCAtNjgsMTAg
KzEwNywxNyBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigp
CiAKIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKQogeworICAg
IHJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CiAgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVk
SW50b0RvY3VtZW50KCk7CiAgICAgU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudChk
b2N1bWVudCgpLCB0aGlzKTsKIH0KIAordm9pZCBIVE1MU3R5bGVFbGVtZW50Ojp3aWxsUmVtb3Zl
KCkKK3sKKyAgICB1bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAgSFRNTEVsZW1l
bnQ6OndpbGxSZW1vdmUoKTsKK30KKwogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpyZW1vdmVkRnJv
bURvY3VtZW50KCkKIHsKICAgICBIVE1MRWxlbWVudDo6cmVtb3ZlZEZyb21Eb2N1bWVudCgpOwpA
QCAtMTE3LDQgKzE2MywyNCBAQCB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OnNldERpc2FibGVkKGJv
b2wgc2V0RGlzYWJsZWQpCiAgICAgICAgIHN0eWxlU2hlZXQtPnNldERpc2FibGVkKHNldERpc2Fi
bGVkKTsKIH0KIAorYm9vbCBIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQoKSBjb25zdAoreworICAg
IHJldHVybiBmYXN0SGFzQXR0cmlidXRlKHNjb3BlZEF0dHIpOworfQorCitFbGVtZW50KiBIVE1M
U3R5bGVFbGVtZW50OjpzY29waW5nRWxlbWVudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2lzUmVn
aXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCAmJiAhc2NvcGVkKCkpCisgICAgICAgIHJldHVybiAw
OworCisgICAgLy8gRklYTUU6IFRoaXMgcHJvYmFibHkgbmVlZHMgdG8gYmUgcmVmaW5lZCBmb3Ig
c2NvcGVkIHN0eWxlc2hlZXRzIHdpdGhpbiBzaGFkb3cgRE9NLgorICAgIC8vIEFzIHdyaXR0ZW4s
IHN1Y2ggYSBzdHlsZXNoZWV0IGNvdWxkIHN0eWxlIHRoZSBob3N0IGVsZW1lbnQsIGFzIHdlbGwg
YXMgY2hpbGRyZW4gb2YgdGhlIGhvc3QuCisgICAgLy8gT1RPSCwgdGhpcyBwYXZlcyB0aGUgd2F5
IGZvciBhIDpib3VuZC1lbGVtZW50IGltcGxlbWVudGF0aW9uLgorICAgIENvbnRhaW5lck5vZGUq
IHBhcmVudE9ySG9zdCA9IHBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICBpZiAoIXBhcmVudE9ySG9z
dCB8fCAhcGFyZW50T3JIb3N0LT5pc0VsZW1lbnROb2RlKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHRvRWxlbWVudChwYXJlbnRPckhvc3QpOworfQorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCmluZGV4IGFmMjgwODVkYmJiZjQ1ZWQ3Y2RkNGJkMjRm
NGRmNGZkZGZmZTRlMWYuLjcyYWI4MjgzYjI1MjRiMWQyZGRlZGE5YTcxMDQ0OTE4NTI5NGQxNzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCkBAIC00MiwxMiArNDIsMTcg
QEAgcHVibGljOgogICAgIGJvb2wgZGlzYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIHNldERpc2Fi
bGVkKGJvb2wpOwogCisgICAgYm9vbCBzY29wZWQoKSBjb25zdDsKKyAgICBFbGVtZW50KiBzY29w
aW5nRWxlbWVudCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQ7IH0K
KwogcHJpdmF0ZToKICAgICBIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIC8vIG92ZXJsb2FkIGZyb20g
SFRNTEVsZW1lbnQKICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmli
dXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b0RvY3VtZW50KCk7CisgICAgdmly
dHVhbCB2b2lkIHdpbGxSZW1vdmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlZEZyb21Eb2N1
bWVudCgpOwogICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQ
YXJzZXIgPSBmYWxzZSwgTm9kZSogYmVmb3JlQ2hhbmdlID0gMCwgTm9kZSogYWZ0ZXJDaGFuZ2Ug
PSAwLCBpbnQgY2hpbGRDb3VudERlbHRhID0gMCk7CiAKQEAgLTYxLDYgKzY2LDExIEBAIHByaXZh
dGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWEoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OworCisgICAgdm9pZCBy
ZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpOworICAgIHZvaWQgdW5yZWdpc3RlcldpdGhTY29w
aW5nRWxlbWVudCgpOworCisgICAgYm9vbCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVu
dDsKIH07CiAKIH0gLy9uYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>106656</attachid>
            <date>2011-09-07 15:17:25 -0700</date>
            <delta_ts>2012-02-23 01:58:25 -0800</delta_ts>
            <desc>work-in-progress (fix conflicts)</desc>
            <filename>bug-49142-20110907151724.patch</filename>
            <type>text/plain</type>
            <size>116378</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ3MDYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBkYmFjMTIyYjM3YTYzOWViNDdkZDVk
YmU0OTg0NmJiZjE0MGI3MDRkLi4wMzAzMDBjMjY3Mzg2ZTZkNzczODM5YjBkYmZjMzg3OTA0Yjc0
ZDdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDktMDYgIFJvbGFuZCBTdGVpbmVyICA8
cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDQ5MTQyIC0gSW1wbGVtZW50IEhUTUw1IHN0eWxlIHNj
b3BlZCBhdHRyaWJ1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ5MTQyCisKKyAgICAgICAgVGVzdCA8c3R5bGUgc2NvcGVkPjoKKyAgICAgICAgLSkg
YmFzaWMgdGVzdAorICAgICAgICAtKSB0ZXN0IHNldHRpbmcvdW4tc2V0dGluZyB0aGUgJ3Njb3Bl
ZCcgYXR0cmlidXRlCisgICAgICAgIC0pIHRlc3QgaW5zZXJ0aW5nL3JlbW92aW5nIGEgd2hvbGUg
PHN0eWxlIHNjb3BlZD4gZWxlbWVudAorCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWF0dGFjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNj
b3BlZC1hdHRhY2guaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2NvcGVk
LWJhc2ljLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1k
ZXRhY2gtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtZGV0YWNoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1y
ZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mvc3R5
bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jc3Mv
c3R5bGUtc2NvcGVkLXNldC1zY29wZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1sOiBBZGRlZC4KKwogMjAxMS0wOS0w
NyAgQWxleGVpIFN2aXRraW5lICA8YXN2aXRraW5lQGNocm9taXVtLm9yZz4KIAogICAgICAgICBB
ZGQgdGVzdCBpbmZyYXN0cnVjdHVyZSB0byB0ZXN0IHJ1YmJlci1iYW5kaW5nIG92ZXJoYW5nIGRy
YXdpbmcgYWxvbmcgd2l0aCBsYXlvdXQgdGVzdHMgZm9yIGV4aXN0aW5nIENocm9taXVtIE1hYyBv
dmVyaGFuZyBkcmF3aW5nIGluIHRoZSBub24tZ3B1IHBhdGguCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjVmZTA2NzFmYWM2ZTE2ZTMzYTQyYzQyOWFmZWZlZGQxYTM1YWY4Y2QKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDI3IEBACitUZXN0IGF0dGFjaGluZyBhIG5ldyA8c3R5bGUgc2NvcGVkPiBl
bGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKKy0tLSBP
UklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2Io
MCwgMCwgMCkKK1AyOiByZ2IoMCwgMCwgMCkKK1MzOiByZ2IoMCwgMCwgMCkKK1AzOiByZ2IoMCwg
MCwgMCkKKy0tLSBBRlRFUiBBVFRBQ0hJTkcgPFNUWUxFIFNDT1BFRD4gLS0tCitTMTogcmdiKDAs
IDAsIDApCitQMTogcmdiKDAsIDAsIDApCitTMjogcmdiKDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwg
MTI4LCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorLS0tIEZJTklTSEVE
IC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0
YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtYXR0YWNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNjAzZGY1NWRlNDliZjZjZmUxZjhjNmFkNDBiMGU2NTBjZjhhZTZlNwotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRhY2gu
aHRtbApAQCAtMCwwICsxLDcwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cisg
ICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICBmdW5jdGlvbiBsb2co
bXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICdcbicpKTsK
KyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3QoaWQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOworICAgICAgICAg
ICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUo
ZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdCgnUzEn
KTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAg
ICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7CisgICAgICAgICAg
ICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gcnVuVGVzdHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7
CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
ICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJR0lOQUwgLS0tJyk7CisgICAgICAg
ICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIEFGVEVSIEFUVEFDSElORyA8
U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZhciBkaXZFbGVtID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAgdmFyIHN0eWxlRWxlbSA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7CisgICAgICAgICAgICBzdHlsZUVsZW0uc2V0QXR0
cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHN0eWxlRWxlbS5pbm5lckhUTUwg
PSAnZGl2IHsgY29sb3I6IHJlZDsgfSBwIHsgY29sb3I6IGdyZWVuOyB9JzsKKyAgICAgICAgICAg
IGRpdkVsZW0uaW5zZXJ0QmVmb3JlKHN0eWxlRWxlbSwgZGl2RWxlbS5maXJzdENoaWxkKTsKKyAg
ICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFs
bCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDAp
OworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBz
Y29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBhdHRhY2hpbmcg
YSBuZXcgJmx0O3N0eWxlIHNjb3BlZCZndDsgZWxlbWVudDwvcD4KKyAgICA8ZGl2PgorICAgICAg
ICA8c3BhbiBpZD0iUzEiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMSI+VGV4dDwvcD4K
KyAgICA8L2Rpdj4KKyAgICA8ZGl2IGlkPSJESVYiPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRl
eHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8
ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQ
MyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNj
b3BlZC1iYXNpYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29w
ZWQtYmFzaWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlZmZkNzZjODQ0YTlhODI4OTMyYzll
M2E1MGNiODMyMTA3ZmZjMzEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtYmFzaWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDQgQEAKK1Rlc3Qg
PHN0eWxlIHNjb3BlZD4KKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CitUZXh0CitUZXh0CisK
K1RleHQKK1RleHQKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAorVGV4dAorVGV4dAorCitUZXh0
CitUZXh0CistLS0gQ09NUFVURUQgU1RZTEVTIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJn
YigwLCAwLCAwKQorUjE6IHJnYigwLCAwLCAwKQorRTE6IHJnYigwLCAwLCAwKQorCitTMjogcmdi
KDI1NSwgMCwgMCkKK1AyOiByZ2IoMCwgMTI4LCAwKQorUjI6IHJnYigwLCAwLCAyNTUpCitFMjog
cmdiKDI1NSwgMCwgMCkKKworUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigwLCAwLCAwKQorUjM6
IHJnYigwLCAwLCAwKQorRTM6IHJnYigwLCAwLCAwKQorCitTNDogcmdiKDAsIDAsIDApCitQNDog
cmdiKDAsIDAsIDApCitSNDogcmdiKDAsIDAsIDApCitFNDogcmdiKDAsIDAsIDApCistLS0gRklO
SVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3Bl
ZC1iYXNpYy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMGJjMjNhY2Y3Y2QwNTgwMDYxOGI0NWU5NWViYzdkNTU1M2JjOTkyYQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1iYXNp
Yy5odG1sCkBAIC0wLDAgKzEsODQgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxv
Zyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdj
b25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykp
OworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAg
ICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHls
ZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZ1bmN0aW9uIHJ1blRlc3RzKCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29u
dHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAgICAgIGxvZygnLS0tIENPTVBVVEVEIFNU
WUxFUyAtLS0nKTsKKworICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3Qo
J1AxJyk7CisgICAgICAgICAgICB0ZXN0KCdSMScpOworICAgICAgICAgICAgdGVzdCgnRTEnKTsK
KyAgICAgICAgICAgIGxvZygnJyk7CisgICAgICAgICAgICB0ZXN0KCdTMicpOworICAgICAgICAg
ICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRlc3QoJ1IyJyk7CisgICAgICAgICAgICB0ZXN0
KCdFMicpOworICAgICAgICAgICAgbG9nKCcnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MzJyk7Cisg
ICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICAgICAgdGVzdCgnUjMnKTsKKyAgICAgICAg
ICAgIHRlc3QoJ0UzJyk7CisgICAgICAgICAgICBsb2coJycpOworICAgICAgICAgICAgdGVzdCgn
UzQnKTsKKyAgICAgICAgICAgIHRlc3QoJ1A0Jyk7CisgICAgICAgICAgICB0ZXN0KCdSNCcpOwor
ICAgICAgICAgICAgdGVzdCgnRTQnKTsKKworICAgICAgICAgICAgbG9nKCctLS0gRklOSVNIRUQg
LS0tJyk7CisgICAgICAgIH0KKyAgICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9j
c3MiPgorICAgICAgICBib2R5IHsgY29sb3I6IGJsYWNrOyB9CisgICAgPC9zdHlsZT4KKzwvaGVh
ZD4KKzxib2R5IG9ubG9hZD0icnVuVGVzdHMoKTsiPgorICAgIDxwPlRlc3QgJmx0O3N0eWxlIHNj
b3BlZCZndDs8L3A+CisgICAgPGRpdiBjbGFzcz0iZm9vIj4KKyAgICAgICAgPHNwYW4gaWQ9IlMx
Ij5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgICAgIDxwcmUg
aWQgPSAiUjEiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAgICAgPHByZSBpZD0iRTEiIGNs
YXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJmb28iPgor
ICAgICAgICA8ZGl2PgorICAgICAgICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+
CisgICAgICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgICAgIHAg
eyBjb2xvcjogZ3JlZW47IH0KKyAgICAgICAgICAgICAgICBkaXYgLmJhciB7IGNvbG9yOiBibHVl
OyB9CisgICAgICAgICAgICAgICAgLmZvbyAuYmF6IHsgY29sb3I6IHB1cnBsZTsgfSAvKiBzaG91
bGQgTk9UIGFwcGx5ISAqLworICAgICAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgICAgIDxzcGFu
IGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAgICAgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAg
ICAgICAgICAgIDxwcmUgaWQ9IlIyIiBjbGFzcz0iYmFyIj5UZXh0PC9wcmU+CisgICAgICAgICAg
ICA8cHJlIGlkPSJFMiIgY2xhc3M9ImJheiI+VGV4dDwvcHJlPgorICAgICAgICA8L2Rpdj4KKyAg
ICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDMiPlRleHQ8
L3A+CisgICAgICAgIDxwcmUgaWQgPSAiUjMiIGNsYXNzPSJiYXIiPlRleHQ8L3ByZT4KKyAgICAg
ICAgPHByZSBpZD0iRTMiIGNsYXNzPSJiYXoiPlRleHQ8L3ByZT4KKyAgICA8L2Rpdj4KKyAgICA8
ZGl2IGNsYXNzPSJmb28iPgorICAgICAgICA8c3BhbiBpZD0iUzQiPlRleHQ8L3NwYW4+CisgICAg
ICAgIDxwIGlkPSJQNCI+VGV4dDwvcD4KKyAgICAgICAgPHByZSBpZCA9ICJSNCIgY2xhc3M9ImJh
ciI+VGV4dDwvcHJlPgorICAgICAgICA8cHJlIGlkPSJFNCIgY2xhc3M9ImJheiI+VGV4dDwvcHJl
PgorICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWRldGFj
aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNo
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kN2VmNjUzMTc0MDcyYjc4ODdmN2RmM2RhYmY5MWE5
YTczNDBlM2U4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUt
c2NvcGVkLWRldGFjaC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVzdCBkZXRhY2hp
bmcgYSA8c3R5bGUgc2NvcGVkPiBlbGVtZW50CisKK1RleHQKK1RleHQKKworVGV4dAorVGV4dAor
CitUZXh0CitUZXh0CisKKy0tLSBPUklHSU5BTCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkKK1AxOiBy
Z2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzog
cmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gQUZURVIgREVUQUNISU5HIDxTVFlM
RSBTQ09QRUQ+IC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAwLCAwKQorUzI6IHJn
YigwLCAwLCAwKQorUDI6IHJnYigwLCAwLCAwKQorUzM6IHJnYigwLCAwLCAwKQorUDM6IHJnYigw
LCAwLCAwKQorLS0tIEZJTklTSEVEIC0tLQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2Nzcy9zdHlsZS1zY29wZWQtZGV0YWNoLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHls
ZS1zY29wZWQtZGV0YWNoLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGM4YmY2YTg2NjEyNzBmODYxY2I4NTU4
YWMzMjdhMTg3NzFmMzllZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY3Nz
L3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbApAQCAtMCwwICsxLDcyIEBACis8IURPQ1RZUEUgaHRt
bD4KKzxodG1sPgorPGhlYWQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgor
ICAgICAgICBmdW5jdGlvbiBsb2cobXNnKQorICAgICAgICB7CisgICAgICAgICAgICBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKG1zZyArICdcbicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRlc3Qo
aWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZhciBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaWQpOworICAgICAgICAgICAgbG9nKGlkICsgJzogJyArIGRvY3VtZW50LmRlZmF1bHRW
aWV3LmdldENvbXB1dGVkU3R5bGUoZWxlbSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3In
KSk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiB0ZXN0QWxsKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdGVzdCgnUzEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AxJyk7CisgICAgICAg
ICAgICB0ZXN0KCdTMicpOworICAgICAgICAgICAgdGVzdCgnUDInKTsKKyAgICAgICAgICAgIHRl
c3QoJ1MzJyk7CisgICAgICAgICAgICB0ZXN0KCdQMycpOworICAgICAgICB9CisKKyAgICAgICAg
ZnVuY3Rpb24gcnVuVGVzdHMoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndh
aXRVbnRpbERvbmUoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbG9nKCctLS0gT1JJ
R0lOQUwgLS0tJyk7CisgICAgICAgICAgICB0ZXN0QWxsKCk7CisKKyAgICAgICAgICAgIGxvZygn
LS0tIEFGVEVSIERFVEFDSElORyA8U1RZTEUgU0NPUEVEPiAtLS0nKTsKKyAgICAgICAgICAgIHZh
ciBkaXZFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ0RJVicpOworICAgICAgICAgICAg
dmFyIHN0eWxlRWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdTVFlMRScpOworICAgICAg
ICAgICAgZGl2RWxlbS5yZW1vdmVDaGlsZChzdHlsZUVsZW0pOworICAgICAgICAgICAgc2V0VGlt
ZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB0ZXN0QWxsKCk7CisgICAgICAgICAg
ICAgICAgbG9nKCctLS0gRklOSVNIRUQgLS0tJyk7CisgICAgICAgICAgICAgICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0KKyAg
ICA8L3NjcmlwdD4KKyAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIHNjb3BlZD4KKyAgICAgICAg
Ym9keSB7IGNvbG9yOiBibGFjazsgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keSBvbmxv
YWQ9InJ1blRlc3RzKCk7Ij4KKyAgICA8cD5UZXN0IGRldGFjaGluZyBhICZsdDtzdHlsZSBzY29w
ZWQmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMxIj5UZXh0
PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPGRp
diBpZD0iRElWIj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9jc3MiIHNj
b3BlZD4KKyAgICAgICAgICAgIGRpdiB7IGNvbG9yOiByZWQ7IH0KKyAgICAgICAgICAgIHAgeyBj
b2xvcjogZ3JlZW47IH0KKyAgICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNwYW4gaWQ9IlMyIj5U
ZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDIiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAg
PGRpdj4KKyAgICAgICAgPHNwYW4gaWQ9IlMzIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0i
UDMiPlRleHQ8L3A+CisgICAgPC9kaXY+CisgICAgPHByZSBpZD0iY29uc29sZSI+PC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1z
Y29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2EyMDU4
N2RmNWFmZmY2MmRjMjdmNjJhYWVjNDUwYjMzNzY1Y2FjOAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDI3IEBACitUZXN0IHJlbW92aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUg
b24gYSA8c3R5bGU+IGVsZW1lbnQKKworVGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQK
K1RleHQKKworLS0tIE9SSUdJTkFMIC0tLQorUzE6IHJnYigwLCAwLCAwKQorUDE6IHJnYigwLCAw
LCAwKQorUzI6IHJnYigyNTUsIDAsIDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMCwg
MCwgMCkKK1AzOiByZ2IoMCwgMCwgMCkKKy0tLSBBRlRFUiBVTi1TRVRUSU5HIEBTQ09QRUQgLS0t
CitTMTogcmdiKDI1NSwgMCwgMCkKK1AxOiByZ2IoMCwgMTI4LCAwKQorUzI6IHJnYigyNTUsIDAs
IDApCitQMjogcmdiKDAsIDEyOCwgMCkKK1MzOiByZ2IoMjU1LCAwLCAwKQorUDM6IHJnYigwLCAx
MjgsIDApCistLS0gRklOSVNIRUQgLS0tCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
Y3NzL3N0eWxlLXNjb3BlZC1yZW1vdmUtc2NvcGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nz
cy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYWYzNzc0Y2Fi
MmZhNzRmZDcwYzYxMWFlMDMyYmExMTg0M2Q3ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtcmVtb3ZlLXNjb3BlZC5odG1sCkBAIC0wLDAgKzEs
NzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKyAgICA8c2NyaXB0IHR5cGU9
InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9uIGxvZyhtc2cpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xuJykpOworICAgICAgICB9CisKKyAg
ICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmFyIGVsZW0g
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAgICAgICAgICBsb2coaWQgKyAnOiAn
ICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtLCBudWxsKS5nZXRQ
cm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHRl
c3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0KCdTMScpOworICAgICAgICAgICAg
dGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7CisgICAgICAgICAgICB0ZXN0KCdQ
MicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAgICAgICAgIHRlc3QoJ1AzJyk7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0cygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAgICAgICAgICAgIHRlc3RBbGwoKTsK
KworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgVU4tU0VUVElORyBAU0NPUEVEIC0tLScpOwor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NUWUxFJykucmVtb3ZlQXR0cmli
dXRlKCdzY29wZWQnKTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg
ICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAgICAgIGxvZygnLS0tIEZJTklTSEVE
IC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
CisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAgPC9zY3JpcHQ+CisgICAgPHN0eWxl
IHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJvZHkgeyBjb2xvcjogYmxhY2s7IH0K
KyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2FkPSJydW5UZXN0cygpOyI+CisgICAg
PHA+VGVzdCByZW1vdmluZyB0aGUgJ3Njb3BlZCcgYXR0cmlidXRlIG9uIGEgJmx0O3N0eWxlJmd0
OyBlbGVtZW50PC9wPgorICAgIDxkaXY+CisgICAgICAgIDxzcGFuIGlkPSJTMSI+VGV4dDwvc3Bh
bj4KKyAgICAgICAgPHAgaWQ9IlAxIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+Cisg
ICAgICAgIDxzdHlsZSBpZD0iU1RZTEUiIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAg
ICAgICBkaXYgeyBjb2xvcjogcmVkOyB9CisgICAgICAgICAgICBwIHsgY29sb3I6IGdyZWVuOyB9
CisgICAgICAgIDwvc3R5bGU+CisgICAgICAgIDxzcGFuIGlkPSJTMiI+VGV4dDwvc3Bhbj4KKyAg
ICAgICAgPHAgaWQ9IlAyIj5UZXh0PC9wPgorICAgIDwvZGl2PgorICAgIDxkaXY+CisgICAgICAg
IDxzcGFuIGlkPSJTMyI+VGV4dDwvc3Bhbj4KKyAgICAgICAgPHAgaWQ9IlAzIj5UZXh0PC9wPgor
ICAgIDwvZGl2PgorICAgIDxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29w
ZWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1z
Y29wZWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMGM3OTYzYzk3YzQ3ODAxZTA4NDk2NzUx
MTM3MjIyYzQ2NjVkMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9z
dHlsZS1zY29wZWQtc2V0LXNjb3BlZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwyNyBAQAorVGVz
dCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1dGUgb24gYSA8c3R5bGU+IGVsZW1lbnQKKwor
VGV4dAorVGV4dAorCitUZXh0CitUZXh0CisKK1RleHQKK1RleHQKKworLS0tIE9SSUdJTkFMIC0t
LQorUzE6IHJnYigyNTUsIDAsIDApCitQMTogcmdiKDAsIDEyOCwgMCkKK1MyOiByZ2IoMjU1LCAw
LCAwKQorUDI6IHJnYigwLCAxMjgsIDApCitTMzogcmdiKDI1NSwgMCwgMCkKK1AzOiByZ2IoMCwg
MTI4LCAwKQorLS0tIEFGVEVSIFNFVFRJTkcgQFNDT1BFRCAtLS0KK1MxOiByZ2IoMCwgMCwgMCkK
K1AxOiByZ2IoMCwgMCwgMCkKK1MyOiByZ2IoMjU1LCAwLCAwKQorUDI6IHJnYigwLCAxMjgsIDAp
CitTMzogcmdiKDAsIDAsIDApCitQMzogcmdiKDAsIDAsIDApCistLS0gRklOSVNIRUQgLS0tCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY3NzL3N0eWxlLXNjb3BlZC1zZXQtc2NvcGVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNjb3BlZC5odG1s
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk5MDNiZDQxZTI5OWQwMzUwMWNlZjEwNTQwZmUxOTUwMGM0ZTgyZWUKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nzcy9zdHlsZS1zY29wZWQtc2V0LXNj
b3BlZC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVh
ZD4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIGZ1bmN0aW9u
IGxvZyhtc2cpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobXNnICsgJ1xu
JykpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gdGVzdChpZCkKKyAgICAgICAgewor
ICAgICAgICAgICAgdmFyIGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7CisgICAg
ICAgICAgICBsb2coaWQgKyAnOiAnICsgZG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRT
dHlsZShlbGVtLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdjb2xvcicpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHRlc3RBbGwoKQorICAgICAgICB7CisgICAgICAgICAgICB0ZXN0
KCdTMScpOworICAgICAgICAgICAgdGVzdCgnUDEnKTsKKyAgICAgICAgICAgIHRlc3QoJ1MyJyk7
CisgICAgICAgICAgICB0ZXN0KCdQMicpOworICAgICAgICAgICAgdGVzdCgnUzMnKTsKKyAgICAg
ICAgICAgIHRlc3QoJ1AzJyk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBydW5UZXN0
cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsb2coJy0tLSBPUklHSU5BTCAtLS0nKTsKKyAg
ICAgICAgICAgIHRlc3RBbGwoKTsKKworICAgICAgICAgICAgbG9nKCctLS0gQUZURVIgU0VUVElO
RyBAU0NPUEVEIC0tLScpOworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ1NU
WUxFJykuc2V0QXR0cmlidXRlKCdzY29wZWQnLCB0cnVlKTsKKyAgICAgICAgICAgIHNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdGVzdEFsbCgpOworICAgICAgICAgICAg
ICAgIGxvZygnLS0tIEZJTklTSEVEIC0tLScpOworICAgICAgICAgICAgICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICB9CisgICAg
PC9zY3JpcHQ+CisgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIiBzY29wZWQ+CisgICAgICAgIGJv
ZHkgeyBjb2xvcjogYmxhY2s7IH0KKyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgb25sb2Fk
PSJydW5UZXN0cygpOyI+CisgICAgPHA+VGVzdCBzZXR0aW5nIHRoZSAnc2NvcGVkJyBhdHRyaWJ1
dGUgb24gYSAmbHQ7c3R5bGUmZ3Q7IGVsZW1lbnQ8L3A+CisgICAgPGRpdj4KKyAgICAgICAgPHNw
YW4gaWQ9IlMxIj5UZXh0PC9zcGFuPgorICAgICAgICA8cCBpZD0iUDEiPlRleHQ8L3A+CisgICAg
PC9kaXY+CisgICAgPGRpdj4KKyAgICAgICAgPHN0eWxlIGlkPSJTVFlMRSIgdHlwZT0idGV4dC9j
c3MiPgorICAgICAgICAgICAgZGl2IHsgY29sb3I6IHJlZDsgfQorICAgICAgICAgICAgcCB7IGNv
bG9yOiBncmVlbjsgfQorICAgICAgICA8L3N0eWxlPgorICAgICAgICA8c3BhbiBpZD0iUzIiPlRl
eHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQMiI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8
ZGl2PgorICAgICAgICA8c3BhbiBpZD0iUzMiPlRleHQ8L3NwYW4+CisgICAgICAgIDxwIGlkPSJQ
MyI+VGV4dDwvcD4KKyAgICA8L2Rpdj4KKyAgICA8cHJlIGlkPSJjb25zb2xlIj48L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxOWY4ODEwZWI2MGYwNWVjOGFjNzU5YzdiODJl
MDVhOTVlMzY3ZmFlLi5kNjY1YjYxZWQ3NjRjMjg1M2U0YmU2MTYwNjAyMzU1NzA5ZWNlMTY1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTA5LTA3ICBSb2xhbmQgU3RlaW5lciAg
PHJvbGFuZHN0ZWluZXJAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTE0MiAtIEltcGxlbWVudCBIVE1MNSBzdHlsZSBz
Y29wZWQgYXR0cmlidXRlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00OTE0MgorCisgICAgICAgIEltcGxlbWVudGluZyBzdXBwb3J0IGZvciA8c3R5bGUg
c2NvcGVkPjoKKyAgICAgICAgQ1NTU3R5bGVTZWxlY3RvciBob2xkcyBnbG9iYWwgYXMgd2VsbCBh
cyBzY29wZWQgYXV0aG9yIHNoZWV0cy4KKyAgICAgICAgU2NvcGVkIGF1dGhvciBzaGVldHMgYXJl
IG1hcHBlZCBieSB0aGVpciBzY29waW5nIGVsZW1lbnQgKHRoZSBwYXJlbnQgZWxlbWVudCBvZiA8
c3R5bGUgc2NvcGVkPikuCisgICAgICAgIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnRzIHJlZ2lzdGVy
IGFuZCB1bi1yZWdpc3RlciB3aXRoIHRoZWlyIHNjb3BpbmcgcGFyZW50IGVsZW1lbnQKKyAgICAg
ICAgaW4gYSBraW5kIG9mIHJlZi1jb3VudGluZywgaW4gb3JkZXIgdG8gYWxsb3cgcXVpY2sgbG9v
ay11cCBvZiB3aGV0aGVyIGFuIGVsZW1lbnQgaGFzIHNjb3BlZCBzdHlsZSBjaGlsZHJlbi4KKyAg
ICAgICAgQWxzbywgcHJldmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQg
b2Ygc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0
eWxlLXNjb3BlZC1hdHRhY2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2Nv
cGVkLWJhc2ljLmh0bWwKKyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRh
Y2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29w
ZWQuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQu
aHRtbAorCisgICAgICAgICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2NvcGVkUnVsZVNldHM6OlNjb3BlZFJ1bGVTZXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjb3BlZFJ1bGVTZXRzOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lU2NvcGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6Q1NTU3R5bGVTZWxlY3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFt
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNHbG9iYWxs
eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6bGVzc1NwZWNpZmljKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6CisgICAgICAgIChXZWJD
b3JlOjptYXRjaGVzSW5UcmVlU2NvcGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bG9jYXRlQ291c2luTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaGVzU2libGluZ1J1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
ZWxlY3Rvcjo6c3R5bGVGb3JFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2Vs
ZWN0b3I6OnBzZXVkb1N0eWxlRm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U3R5bGVTZWxlY3Rvcjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0
OjphZGRUb1J1bGVTZXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkUnVsZXNGcm9t
U2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRkU3R5bGVSdWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjp+U2NvcGVkUnVsZVNldHMpOgorICAgICAgICAo
V2ViQ29yZTo6U2NvcGVkUnVsZVNldHM6OmVuc3VyZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVT
ZWxlY3Rvci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6UGFyZW50U3Rh
Y2tGcmFtZTo6UGFyZW50U3RhY2tGcmFtZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlU2hlZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6ZmluZE93bmVyTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojpkb2N1bWVudCk6CisgICAgICAgICogY3Nz
L0NTU1N0eWxlU2hlZXQuaDoKKyAgICAgICAgKiBjc3MvU2VsZWN0b3JDaGVja2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmZhc3RDaGVja1NlbGVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmF0dHJpYnV0ZVF1YWxpZmllZE5hbWVNYXRjaGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OmF0dHJpYnV0ZVZhbHVlTWF0Y2hlcyk6CisgICAgICAgIChXZWJDb3JlOjphbnlBdHRy
aWJ1dGVNYXRjaGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tP
bmVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Ny
b2xsYmFyUHNldWRvQ2xhc3MpOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuaDoKKyAg
ICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZWdp
c3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVu
cmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp3
ZWJraXRNYXRjaGVzU2VsZWN0b3IpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAg
ICogZG9tL0VsZW1lbnRSYXJlRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVE
YXRhOjpFbGVtZW50UmFyZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRh
OjpyZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnRSYXJlRGF0YTo6dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAg
ICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yUXVl
cnk6OmV4ZWN1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluOgorICAg
ICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
U3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxT
dHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6d2lsbFJlbW92ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MU3R5bGVFbGVtZW50OjpzY29wZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFN0eWxlRWxlbWVudDo6c2NvcGluZ0VsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRN
TFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aXNS
ZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVs
ZW1lbnQuaWRsOgorCisyMDExLTA5LTA2ICBSb2xhbmQgU3RlaW5lciAgPHJvbGFuZHN0ZWluZXJA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyA0OTE0MiAtIEltcGxlbWVudCBIVE1MNSBzdHlsZSBzY29wZWQgYXR0cmlidXRl
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTE0Mgor
CisgICAgICAgIEltcGxlbWVudGluZyBzdXBwb3J0IGZvciA8c3R5bGUgc2NvcGVkPjoKKyAgICAg
ICAgQ1NTU3R5bGVTZWxlY3RvciBob2xkcyBnbG9iYWwgYXMgd2VsbCBhcyBzY29wZWQgYXV0aG9y
IHNoZWV0cy4KKyAgICAgICAgU2NvcGVkIGF1dGhvciBzaGVldHMgYXJlIG1hcHBlZCBieSB0aGVp
ciBzY29waW5nIGVsZW1lbnQgKHRoZSBwYXJlbnQgZWxlbWVudCBvZiA8c3R5bGUgc2NvcGVkPiku
CisgICAgICAgIDxzdHlsZSBzY29wZWQ+IGVsZW1lbnRzIHJlZ2lzdGVyIGFuZCB1bi1yZWdpc3Rl
ciB3aXRoIHRoZWlyIHNjb3BpbmcgcGFyZW50IGVsZW1lbnQKKyAgICAgICAgaW4gYSBraW5kIG9m
IHJlZi1jb3VudGluZywgaW4gb3JkZXIgdG8gYWxsb3cgcXVpY2sgbG9vay11cCBvZiB3aGV0aGVy
IGFuIGVsZW1lbnQgaGFzIHNjb3BlZCBzdHlsZSBjaGlsZHJlbi4KKyAgICAgICAgQWxzbywgcHJl
dmVudCBzdHlsZSBzaGFyaW5nIGZyb20gY3Jvc3NpbmcgaW50by9vdXQgb2Ygc2NvcGVkIHN0eWxl
IGJvdW5kYXJpZXMuCisKKyAgICAgICAgVGVzdHM6IGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1hdHRh
Y2guaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLWJhc2ljLmh0bWwK
KyAgICAgICAgICAgICAgIGZhc3QvY3NzL3N0eWxlLXNjb3BlZC1kZXRhY2guaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXJlbW92ZS1zY29wZWQuaHRtbAorICAgICAg
ICAgICAgICAgZmFzdC9jc3Mvc3R5bGUtc2NvcGVkLXNldC1zY29wZWQuaHRtbAorCisgICAgICAg
ICogY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwOiBhZGQgc3VwcG9ydCBmb3Igc2NvcGVkIGF1dGhv
ciBzaGVldHMKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1bGVTZXRzOjpTY29wZWRSdWxlU2V0
cyk6IGNsYXNzIGZvciBzY29wZWQgYXV0aG9yIHNoZWV0cworICAgICAgICAoV2ViQ29yZTo6U2Nv
cGVkUnVsZVNldHM6OmdldCk6CisgICAgICAgIChXZWJDb3JlOjpkZXRlcm1pbmVTY29wZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnB1c2hQYXJlbnRTdGFja0ZyYW1lKTog
YWRkIHNjb3BpbmcgaW5mb3JtYXRpb24gdG8gcGFyZW50IHN0YWNrIGZyYW1lCisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaEF1dGhvclJ1bGVzKTogbWF0Y2ggc2NvcGVk
IGF1dGhvciBydWxlcworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hS
dWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVTZXQp
OgorICAgICAgICAoV2ViQ29yZTo6bGVzc1NwZWNpZmljKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2VsZWN0b3I6OnNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyk6IHJlZmFjdG9yaW5n
IHRvIHNpbXBsaWZ5IGNvZGUKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNJblRyZWVTY29wZSk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVDb3VzaW5MaXN0KTog
YXZvaWQgY3Jvc3Npbmcgc2NvcGVkIHN0eWxlIGJvdW5kYXJpZXMKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlU2VsZWN0b3I6OmNhblNoYXJlU3R5bGVXaXRoRWxlbWVudCk6IGRpdHRvCisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGFyZWRTdHlsZSk6IGRpdHRv
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yUGFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRSdWxlc0Zyb21TaGVldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSdWxlU2V0OjphZGRTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U2NvcGVkUnVsZVNldHM6On5TY29wZWRSdWxlU2V0cyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRSdWxlU2V0czo6ZW5zdXJlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZFJ1
bGVTZXRzOjpjb2xsZWN0RmVhdHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hQYWdlUnVsZXMpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNlbGVjdG9yLmg6
CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjpQYXJlbnRTdGFja0ZyYW1lOjpQ
YXJlbnRTdGFja0ZyYW1lKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJOb2RlKTogcmVmYWN0b3Jpbmcg
dG8gc2ltcGxpZnkgY29kZQorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6ZG9jdW1l
bnQpOiBkaXR0bworICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAgICogZG9t
L0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVnaXN0ZXJTY29wZWRI
VE1MU3R5bGVDaGlsZCk6IHJlZ2lzdGVyIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCk6IHVuLXJl
Z2lzdGVyIGEgPHN0eWxlIHNjb3BlZD4gY2hpbGQKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKTogcXVlcnkgd2hldGhlciBhIDxzdHlsZSBzY29wZWQ+
IGNoaWxkIGlzIHByZXNlbnQKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGRv
bS9FbGVtZW50UmFyZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6
RWxlbWVudFJhcmVEYXRhKTogaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgPHN0eWxlIHNjb3BlZD4g
Y2hpbGRyZW4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnRSYXJlRGF0YTo6cmVnaXN0ZXJTY29w
ZWRIVE1MU3R5bGVDaGlsZCk6IAorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudFJhcmVEYXRhOjp1
bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dFJhcmVEYXRhOjpoYXNTY29wZWRIVE1MU3R5bGVDaGlsZCk6CisgICAgICAgICogaHRtbC9IVE1M
QXR0cmlidXRlTmFtZXMuaW46CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KTogdXBkYXRlIHNjb3BlZCBzdGF0ZSwgW3VuLV1yZWdpc3RlciB3aXRoIHBhcmVudCBhcyBuZWNl
c3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnJlZ2lzdGVyV2l0aFNj
b3BpbmdFbGVtZW50KTogcmVnaXN0ZXJpbmcgd2l0aCBwYXJlbnQKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OnVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQpOiB1bi1yZWdp
c3RlcmluZyB3aXRoIHBhcmVudAorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOiByZWdpc3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3NhcnkK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OndpbGxSZW1vdmUpOiB1bi1yZWdp
c3RlciB3aXRoIHBhcmVudCBpZiBuZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6OnNjb3BlZCk6IHF1ZXJ5IHNjb3BlZCBzdGF0dXMKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BpbmdFbGVtZW50KTogZ2V0IHNjb3BpbmcgZWxlbWVudAor
ICAgICAgICAqIGh0bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFN0eWxlRWxlbWVudDo6aXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50KTogd2hldGhlciB0
aGUgPHN0eWxlPiBlbGVtZW50IGlzIHJlZ2lzdGVyZWQgd2l0aCBpdHMgcGFyZW50LgorCiAyMDEx
LTA5LTAyICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgc3BsaXQg
b3ZlcnJpZGVTaXplIGludG8gb3ZlcnJpZGVIZWlnaHQgYW5kIG92ZXJyaWRlV2lkdGgKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAppbmRleCAyNWM1MjdiODgwMDk1NTcyYTE3
MzBhMTUyMjBiOTBjMmFmYmY3NzVkLi5iODY5OTUwZDJmZGVmMzMzYjZlYTFkZTMzMTc0YjNkYTA4
MzAwZWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCkBAIC02NSw2
ICs2NSw3IEBACiAjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
U3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRleHRBcmVhRWxlbWVudC5oIgogI2luY2x1
ZGUgIktleWZyYW1lTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkBAIC0yMTUsMTYgKzIx
NiwxNSBAQCBjbGFzcyBSdWxlU2V0IHsKIHB1YmxpYzoKICAgICBSdWxlU2V0KCk7CiAgICAgflJ1
bGVTZXQoKTsKLSAgICAKKwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwg
VmVjdG9yPFJ1bGVEYXRhPio+IEF0b21SdWxlTWFwOwotICAgIAotICAgIHZvaWQgYWRkUnVsZXNG
cm9tU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBDU1NT
dHlsZVNlbGVjdG9yKiA9IDApOwogCi0gICAgdm9pZCBhZGRTdHlsZVJ1bGUoQ1NTU3R5bGVSdWxl
KiBpdGVtKTsKLSAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlLCBDU1NTZWxlY3Rv
ciogc2VsKTsKLSAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2Vs
ZWN0b3IqIHNlbCk7Ci0gICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCoga2V5
LCBBdG9tUnVsZU1hcCYgbWFwLAotICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSog
cnVsZSwgQ1NTU2VsZWN0b3IqIHNlbCk7CisgICAgdm9pZCBhZGRSdWxlc0Zyb21TaGVldChDU1NT
dHlsZVNoZWV0KiwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYsIENTU1N0eWxlU2VsZWN0b3Iq
ID0gMCwgY29uc3QgRWxlbWVudCogPSAwKTsKKworICAgIHZvaWQgYWRkU3R5bGVSdWxlKENTU1N0
eWxlUnVsZSosIGNvbnN0IEVsZW1lbnQqKTsKKyAgICB2b2lkIGFkZFJ1bGUoQ1NTU3R5bGVSdWxl
KiwgQ1NTU2VsZWN0b3IqKTsKKyAgICB2b2lkIGFkZFBhZ2VSdWxlKENTU1N0eWxlUnVsZSosIENT
U1NlbGVjdG9yKik7CisgICAgdm9pZCBhZGRUb1J1bGVTZXQoQXRvbWljU3RyaW5nSW1wbCosIEF0
b21SdWxlTWFwJiwgQ1NTU3R5bGVSdWxlKiwgQ1NTU2VsZWN0b3IqKTsKICAgICB2b2lkIHNocmlu
a1RvRml0KCk7CiAgICAgdm9pZCBkaXNhYmxlQXV0b1Nocmlua1RvRml0KCkgeyBtX2F1dG9TaHJp
bmtUb0ZpdEVuYWJsZWQgPSBmYWxzZTsgfQogCkBAIC0yNDgsNiArMjQ4LDIzIEBAIHB1YmxpYzoK
ICAgICBib29sIG1fYXV0b1Nocmlua1RvRml0RW5hYmxlZDsKIH07CiAKK2NsYXNzIFNjb3BlZFJ1
bGVTZXRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTY29wZWRSdWxlU2V0cyk7CitwdWJs
aWM6CisgICAgU2NvcGVkUnVsZVNldHMoKSB7IH0KKyAgICB+U2NvcGVkUnVsZVNldHMoKTsKKwor
ICAgIFJ1bGVTZXQqIGdldChjb25zdCBFbGVtZW50KiBzY29wZSkgeyByZXR1cm4gbV9zY29wZWRS
dWxlU2V0TWFwLmdldChzY29wZSk7IH0KKyAgICBSdWxlU2V0KiBlbnN1cmVFeGlzdHMoY29uc3Qg
RWxlbWVudCopOworCisgICAgdm9pZCBjb2xsZWN0RmVhdHVyZXMoQ1NTU3R5bGVTZWxlY3Rvcjo6
RmVhdHVyZXMmKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
RWxlbWVudCosIFJ1bGVTZXQqPiBTY29wZWRSdWxlU2V0TWFwOworCisgICAgU2NvcGVkUnVsZVNl
dE1hcCBtX3Njb3BlZFJ1bGVTZXRNYXA7Cit9OworCiBzdGF0aWMgUnVsZVNldCogZGVmYXVsdFN0
eWxlOwogc3RhdGljIFJ1bGVTZXQqIGRlZmF1bHRRdWlya3NTdHlsZTsKIHN0YXRpYyBSdWxlU2V0
KiBkZWZhdWx0UHJpbnRTdHlsZTsKQEAgLTMxOSw2ICszMzYsMzIgQEAgc3RhdGljIENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiByaWdodFRvTGVmdERlY2xhcmF0aW9uKCkKICAgICByZXR1cm4g
cmlnaHRUb0xlZnREZWNsLmdldCgpOwogfQogCisvLyBEZXRlcm1pbmUgdGhlIHNjb3BlIG9mIGEg
c3R5bGUgc2hlZXQgKGlmIGFueSkuIFJldHVybnMgJ2ZhbHNlJyBpZiBpdCdzIGEgc2NvcGVkIHN0
eWxlIHNoZWV0IGluIGFuIGludmFsaWQgbG9jYXRpb24uCitzdGF0aWMgYm9vbCBkZXRlcm1pbmVT
Y29wZShDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgRWxlbWVudComIHNjb3BlKQoreworICAg
IHNjb3BlID0gMDsKKworICAgIGlmICghc2hlZXQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIE5vZGUqIG93bmVyTm9kZSA9IHNoZWV0LT5maW5kT3duZXJOb2RlKCk7CisgICAgaWYgKCFv
d25lck5vZGUgfHwgIW93bmVyTm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8ICFvd25lck5vZGUtPmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpzdHlsZVRhZykpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgSFRNTFN0eWxlRWxlbWVudCogc3R5bGVFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTFN0eWxl
RWxlbWVudCo+KG93bmVyTm9kZSk7CisgICAgaWYgKCFzdHlsZUVsZW1lbnQtPnNjb3BlZCgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHN0eWxlRWxl
bWVudC0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzY29wZSA9IHN0eWxlRWxlbWVudC0+cGFyZW50RWxlbWVudCgpOworICAgIEFT
U0VSVChzY29wZSk7CisKKyAgICByZXR1cm4gc2NvcGU7IC8vIFRoZXJlIG11c3QgYmUgYSBzY29w
aW5nIGVsZW1lbnQgLSByZXR1cm4gJ2ZhbHNlJyBpZiBmb3Igd2hhdGV2ZXIgcmVhc29uIHRoaXMg
aXMgbm90IHRoZSBjYXNlLgorfQorCiBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9y
KERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzLCBDU1NTdHls
ZVNoZWV0KiBtYXBwZWRFbGVtZW50U2hlZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1N0eWxlU2hlZXQqIHBhZ2VVc2VyU2hlZXQsIGNvbnN0IFZlY3RvcjxSZWZQdHI8
Q1NTU3R5bGVTaGVldD4gPiogcGFnZUdyb3VwVXNlclNoZWV0cywgY29uc3QgVmVjdG9yPFJlZlB0
cjxDU1NTdHlsZVNoZWV0PiA+KiBkb2N1bWVudFVzZXJTaGVldHMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFu
ZFVzZXJTdHlsZXMpCkBAIC0zNjEsOSArNDA0LDEwIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVl
CiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3KQogICAgICAgICBtX21lZGl1bSA9
IGFkb3B0UHRyKG5ldyBNZWRpYVF1ZXJ5RXZhbHVhdG9yKHZpZXctPm1lZGlhVHlwZSgpLCB2aWV3
LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkpKTsKIAotICAgIG1fYXV0aG9yU3R5
bGUgPSBhZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMgPSBh
ZG9wdFB0cihuZXcgUnVsZVNldCk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMgPSBhZG9wdFB0
cihuZXcgU2NvcGVkUnVsZVNldHMpOwogICAgIC8vIEFkZGluZyBydWxlcyBmcm9tIG11bHRpcGxl
IHNoZWV0cywgc2hyaW5rIGF0IHRoZSBlbmQuCi0gICAgbV9hdXRob3JTdHlsZS0+ZGlzYWJsZUF1
dG9TaHJpbmtUb0ZpdCgpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5kaXNhYmxlQXV0b1No
cmlua1RvRml0KCk7CiAKICAgICAvLyBGSVhNRTogVGhpcyBzdWNrcyEgVGhlIHVzZXIgc2hlZXQg
aXMgcmVwYXJzZWQgZXZlcnkgdGltZSEKICAgICBPd25QdHI8UnVsZVNldD4gdGVtcFVzZXJTdHls
ZSA9IGFkb3B0UHRyKG5ldyBSdWxlU2V0KTsKQEAgLTM3NSw3ICs0MTksNyBAQCBDU1NTdHlsZVNl
bGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9yKERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExp
c3QqIHN0eWxlU2hlZQogICAgICAgICAgICAgaWYgKHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkp
LT5pc1VzZXJTdHlsZVNoZWV0KCkpCiAgICAgICAgICAgICAgICAgdGVtcFVzZXJTdHlsZS0+YWRk
UnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1
bSwgdGhpcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9hdXRob3JTdHls
ZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFnZUdyb3VwVXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICpt
X21lZGl1bSwgdGhpcyk7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFk
ZFJ1bGVzRnJvbVNoZWV0KHBhZ2VHcm91cFVzZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRp
dW0sIHRoaXMpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkb2N1bWVudFVzZXJTaGVldHMp
IHsKQEAgLTM4NCw3ICs0MjgsNyBAQCBDU1NTdHlsZVNlbGVjdG9yOjpDU1NTdHlsZVNlbGVjdG9y
KERvY3VtZW50KiBkb2N1bWVudCwgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZQogICAgICAgICAg
ICAgaWYgKGRvY3VtZW50VXNlclNoZWV0cy0+YXQoaSktPmlzVXNlclN0eWxlU2hlZXQoKSkKICAg
ICAgICAgICAgICAgICB0ZW1wVXNlclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChkb2N1bWVudFVz
ZXJTaGVldHMtPmF0KGkpLmdldCgpLCAqbV9tZWRpdW0sIHRoaXMpOwogICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KGRvY3Vt
ZW50VXNlclNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgICAg
ICAgICAgbV9nbG9iYWxBdXRob3JTdHlsZXMtPmFkZFJ1bGVzRnJvbVNoZWV0KGRvY3VtZW50VXNl
clNoZWV0cy0+YXQoaSkuZ2V0KCksICptX21lZGl1bSwgdGhpcyk7CiAgICAgICAgIH0KICAgICB9
CiAKQEAgLTM5MiwxNSArNDM2LDI2IEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0eWxlU2VsZWN0
b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVlCiAgICAgICAg
IG1fdXNlclN0eWxlID0gdGVtcFVzZXJTdHlsZS5yZWxlYXNlKCk7CiAKICAgICAvLyBBZGQgcnVs
ZXMgZnJvbSBlbGVtZW50cyBsaWtlIFNWRydzIDxmb250LWZhY2U+Ci0gICAgaWYgKG1hcHBlZEVs
ZW1lbnRTaGVldCkKLSAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQobWFw
cGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGlmIChtYXBwZWRFbGVtZW50
U2hlZXQpIHsKKyAgICAgICAgLy8gRklYTUU6IHNlZSBpZiBzdHlsZSBzY29wZXMgY2FuL3Nob3Vs
ZCBiZSBhZGRlZCBoZXJlLgorICAgICAgICBtX2dsb2JhbEF1dGhvclN0eWxlcy0+YWRkUnVsZXNG
cm9tU2hlZXQobWFwcGVkRWxlbWVudFNoZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgIH0KIAog
ICAgIC8vIGFkZCBzdHlsZXNoZWV0cyBmcm9tIGRvY3VtZW50CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3R5bGVTaGVldHMtPmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBs
ZW5ndGg7IGkrKykgewogICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IHN0eWxlU2hlZXRzLT5p
dGVtKGkpOwotICAgICAgICBpZiAoc2hlZXQtPmlzQ1NTU3R5bGVTaGVldCgpICYmICFzaGVldC0+
ZGlzYWJsZWQoKSkKLSAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0
KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksICptX21lZGl1bSwgdGhpcyk7Cisg
ICAgICAgIGlmIChzaGVldC0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIXNoZWV0LT5kaXNhYmxlZCgp
KSB7CisgICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBjc3NTaGVldCA9IHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQqPihzaGVldCk7CisgICAgICAgICAgICBjb25zdCBFbGVtZW50KiBzY29wZSA9
IDA7CisKKyAgICAgICAgICAgIGlmICghZGV0ZXJtaW5lU2NvcGUoY3NzU2hlZXQsIHNjb3BlKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGlmIChzY29wZSkKKyAgICAg
ICAgICAgICAgICBtX3Njb3BlZEF1dGhvclN0eWxlcy0+ZW5zdXJlRXhpc3RzKHNjb3BlKS0+YWRk
UnVsZXNGcm9tU2hlZXQoY3NzU2hlZXQsICptX21lZGl1bSwgdGhpcywgc2NvcGUpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5hZGRSdWxl
c0Zyb21TaGVldChjc3NTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKKyAgICAgICAgfQogICAgIH0g
ICAgCiAgICAgLy8gQ29sbGVjdCBhbGwgaWRzIGFuZCBydWxlcyB1c2luZyBzaWJsaW5nIHNlbGVj
dG9ycyAoOmZpcnN0LWNoaWxkIGFuZCBzaW1pbGFyKQogICAgIC8vIGluIHRoZSBjdXJyZW50IHNl
dCBvZiBzdHlsZXNoZWV0cy4gU3R5bGUgc2hhcmluZyBjb2RlIHVzZXMgdGhpcyBpbmZvcm1hdGlv
biB0byByZWplY3QKQEAgLTQwOCwxMSArNDYzLDEyIEBAIENTU1N0eWxlU2VsZWN0b3I6OkNTU1N0
eWxlU2VsZWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50LCBTdHlsZVNoZWV0TGlzdCogc3R5bGVTaGVl
CiAgICAgLy8gVXN1YWxseSB0aGVyZSBhcmUgbm8gc2libGluZyBydWxlcyBpbiB0aGUgZGVmYXVs
dCBzdHlsZSBidXQgdGhlIE1hdGhNTCBzaGVldCBoYXMgc29tZS4KICAgICBpZiAoc2libGluZ1J1
bGVzSW5EZWZhdWx0U3R5bGUpCiAgICAgICAgIHNpYmxpbmdSdWxlc0luRGVmYXVsdFN0eWxlLT5j
b2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7Ci0gICAgbV9hdXRob3JTdHlsZS0+Y29sbGVjdEZl
YXR1cmVzKG1fZmVhdHVyZXMpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5jb2xsZWN0RmVh
dHVyZXMobV9mZWF0dXJlcyk7CisgICAgbV9zY29wZWRBdXRob3JTdHlsZXMtPmNvbGxlY3RGZWF0
dXJlcyhtX2ZlYXR1cmVzKTsKICAgICBpZiAobV91c2VyU3R5bGUpCiAgICAgICAgIG1fdXNlclN0
eWxlLT5jb2xsZWN0RmVhdHVyZXMobV9mZWF0dXJlcyk7CiAKLSAgICBtX2F1dGhvclN0eWxlLT5z
aHJpbmtUb0ZpdCgpOworICAgIG1fZ2xvYmFsQXV0aG9yU3R5bGVzLT5zaHJpbmtUb0ZpdCgpOwog
ICAgIGlmIChtX2ZlYXR1cmVzLnNpYmxpbmdSdWxlcykKICAgICAgICAgbV9mZWF0dXJlcy5zaWJs
aW5nUnVsZXMtPnNocmlua1RvRml0KCk7CiAKQEAgLTUzNSw2ICs1OTEsMTEgQEAgdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjpwdXNoUGFyZW50U3RhY2tGcmFtZShFbGVtZW50KiBwYXJlbnQpCiAgICAg
c2l6ZV90IGNvdW50ID0gcGFyZW50RnJhbWUuaWRlbnRpZmllckhhc2hlcy5zaXplKCk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKQogICAgICAgICBtX2FuY2VzdG9ySWRl
bnRpZmllckZpbHRlci0+YWRkKHBhcmVudEZyYW1lLmlkZW50aWZpZXJIYXNoZXNbaV0pOworICAg
IC8vIFBvaW50IHRvIGZyYW1lIGNvbnRhaW5pbmcgdGhlIGNsb3Nlc3Qgc3R5bGUgc2NvcGUgKG9y
IGxlYXZlIGF0IDAgaWYgbm9uZSkuCisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVkSFRNTFN0eWxl
Q2hpbGQoKSkKKyAgICAgICAgcGFyZW50RnJhbWUuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSA9ICZw
YXJlbnRGcmFtZTsKKyAgICBlbHNlIGlmIChtX3BhcmVudFN0YWNrLnNpemUoKSA+PSAyKQorICAg
ICAgICBwYXJlbnRGcmFtZS5jbG9zZXN0U3R5bGVTY29wZUZyYW1lID0gbV9wYXJlbnRTdGFja1tt
X3BhcmVudFN0YWNrLnNpemUoKSAtIDJdLmNsb3Nlc3RTdHlsZVNjb3BlRnJhbWU7CiB9CiAKIHZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6cG9wUGFyZW50U3RhY2tGcmFtZSgpCkBAIC01OTUsNDkgKzY1
NiwxMDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCiAgICAgbV9tYXRjaGVkRGVjbHMuYXBwZW5k
KGRlY2wpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXMoUnVsZVNldCog
cnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNs
dWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hBdXRob3JSdWxlcyhp
bnQmIGZpcnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5
UnVsZXMpCit7CisgICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKKworICAgIC8vIE1hdGNoIGds
b2JhbCBhdXRob3IgcnVsZXMuCisgICAgbWF0Y2hSdWxlU2V0KG1fZ2xvYmFsQXV0aG9yU3R5bGVz
LmdldCgpLCAwLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVs
ZXMpOworICAgIC8vIE1hdGNoIHNjb3BlZCBzdHlsZSBzaGVldCdzIHJ1bGVzLgorICAgIGlmICgh
bV9wYXJlbnRTdGFjay5pc0VtcHR5KCkgJiYgbV9wYXJlbnRTdGFjay5sYXN0KCkuZWxlbWVudCA9
PSBtX3BhcmVudE5vZGUpIHsKKyAgICAgICAgLy8gRmFzdCBicmFuY2g6IGFjY2VzcyBlbmNsb3Np
bmcgc2NvcGVzIGRpcmVjdGx5IGZyb20gcGFyZW50IHN0YWNrCisgICAgICAgIC8vIChidXQgc3Rh
cnQgd2l0aCBjdXJyZW50IGVsZW1lbnQpLgorICAgICAgICBpZiAobV9lbGVtZW50LT5oYXNTY29w
ZWRIVE1MU3R5bGVDaGlsZCgpKSB7CisgICAgICAgICAgICBSdWxlU2V0KiBydWxlU2V0ID0gbV9z
Y29wZWRBdXRob3JTdHlsZXMtPmdldChtX2VsZW1lbnQpOworICAgICAgICAgICAgaWYgKHJ1bGVT
ZXQpCisgICAgICAgICAgICAgICAgbWF0Y2hSdWxlU2V0KHJ1bGVTZXQsIG1fZWxlbWVudCwgZmly
c3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAg
fQorICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKiBzY29wZUZyYW1lID0gbV9wYXJlbnRTdGFjay5s
YXN0KCkuY2xvc2VzdFN0eWxlU2NvcGVGcmFtZTsKKyAgICAgICAgd2hpbGUgKHNjb3BlRnJhbWUp
IHsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnQqIHNjb3BlID0gc2NvcGVGcmFtZS0+ZWxlbWVu
dDsKKyAgICAgICAgICAgIFJ1bGVTZXQqIHJ1bGVTZXQgPSBtX3Njb3BlZEF1dGhvclN0eWxlcy0+
Z2V0KHNjb3BlKTsKKyAgICAgICAgICAgIGlmIChydWxlU2V0KQorICAgICAgICAgICAgICAgIG1h
dGNoUnVsZVNldChydWxlU2V0LCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgs
IGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgICAgIGlmIChzY29wZUZyYW1lID09ICZtX3Bh
cmVudFN0YWNrLmZpcnN0KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAt
LXNjb3BlRnJhbWU7CisgICAgICAgICAgICBzY29wZUZyYW1lID0gc2NvcGVGcmFtZS0+Y2xvc2Vz
dFN0eWxlU2NvcGVGcmFtZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8vIFNs
b3cgYnJhbmNoOiBjbGltYiB0cmVlLCBjaGVjayBmb3Igc3R5bGUgc2NvcGVzIGF0IGV2ZXJ5IGVs
ZW1lbnQuCisgICAgICAgIGZvciAoY29uc3QgTm9kZSogbm9kZSA9IG1fZWxlbWVudDsgbm9kZTsg
bm9kZSA9IG5vZGUtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKCFub2RlLT5pc0Vs
ZW1lbnROb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBjb25z
dCBFbGVtZW50KiBlbGVtZW50ID0gdG9FbGVtZW50KG5vZGUpOworICAgICAgICAgICAgaWYgKCFl
bGVtZW50LT5oYXNTY29wZWRIVE1MU3R5bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkQXV0aG9yU3R5bGVz
LT5nZXQoZWxlbWVudCk7CisgICAgICAgICAgICBpZiAocnVsZVNldCkKKyAgICAgICAgICAgICAg
ICBtYXRjaFJ1bGVTZXQocnVsZVNldCwgZWxlbWVudCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxl
SW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNvcnRB
bmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhtX2NoZWNrZXIuaXNDb2xsZWN0aW5nUnVsZXNPbmx5KCkp
OworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUnVsZXNHbG9iYWxseShSdWxlU2V0
KiBydWxlcywgaW50JiBmaXJzdFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGlu
Y2x1ZGVFbXB0eVJ1bGVzKQogewogICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAKICAgICBp
ZiAoIXJ1bGVzIHx8ICFtX2VsZW1lbnQpCiAgICAgICAgIHJldHVybjsKKworICAgIG1hdGNoUnVs
ZVNldChydWxlcywgMCwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0
eVJ1bGVzKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMobV9jaGVja2VyLmlzQ29s
bGVjdGluZ1J1bGVzT25seSgpKTsKK30KICAgICAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hSdWxlU2V0KFJ1bGVTZXQqIHJ1bGVzLCBjb25zdCBFbGVtZW50KiBzY29wZSwgaW50JiBmaXJz
dFJ1bGVJbmRleCwgaW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKQor
ewogICAgIC8vIFdlIG5lZWQgdG8gY29sbGVjdCB0aGUgcnVsZXMgZm9yIGlkLCBjbGFzcywgdGFn
LCBhbmQgZXZlcnl0aGluZyBlbHNlIGludG8gYSBidWZmZXIgYW5kCiAgICAgLy8gdGhlbiBzb3J0
IHRoZSBidWZmZXIuCiAgICAgaWYgKG1fZWxlbWVudC0+aGFzSUQoKSkKLSAgICAgICAgbWF0Y2hS
dWxlc0Zvckxpc3QocnVsZXMtPmdldElEUnVsZXMobV9lbGVtZW50LT5pZEZvclN0eWxlUmVzb2x1
dGlvbigpLmltcGwoKSksIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1w
dHlSdWxlcyk7CisgICAgICAgIG1hdGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRJRFJ1bGVzKG1f
ZWxlbWVudC0+aWRGb3JTdHlsZVJlc29sdXRpb24oKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxl
SW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKICAgICBpZiAobV9lbGVt
ZW50LT5oYXNDbGFzcygpKSB7CiAgICAgICAgIEFTU0VSVChtX3N0eWxlZEVsZW1lbnQpOwogICAg
ICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBjbGFzc05hbWVzID0gbV9zdHlsZWRFbGVtZW50
LT5jbGFzc05hbWVzKCk7CiAgICAgICAgIHNpemVfdCBzaXplID0gY2xhc3NOYW1lcy5zaXplKCk7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQotICAgICAgICAgICAg
bWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoY2xhc3NOYW1lc1tpXS5pbXBs
KCkpLCBmaXJzdFJ1bGVJbmRleCwgbGFzdFJ1bGVJbmRleCwgaW5jbHVkZUVtcHR5UnVsZXMpOwor
ICAgICAgICAgICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldENsYXNzUnVsZXMoY2xhc3NO
YW1lc1tpXS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKICAgICB9CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBwc2V1ZG9J
ZCA9IG1fZWxlbWVudC0+c2hhZG93UHNldWRvSWQoKTsKICAgICBpZiAoIXBzZXVkb0lkLmlzRW1w
dHkoKSkgewogICAgICAgICBBU1NFUlQobV9zdHlsZWRFbGVtZW50KTsKLSAgICAgICAgbWF0Y2hS
dWxlc0Zvckxpc3QocnVsZXMtPmdldFBzZXVkb1J1bGVzKHBzZXVkb0lkLmltcGwoKSksIGZpcnN0
UnVsZUluZGV4LCBsYXN0UnVsZUluZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgICAgIG1h
dGNoUnVsZXNGb3JMaXN0KHJ1bGVzLT5nZXRQc2V1ZG9SdWxlcyhwc2V1ZG9JZC5pbXBsKCkpLCBz
Y29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsK
ICAgICB9Ci0gICAgbWF0Y2hSdWxlc0Zvckxpc3QocnVsZXMtPmdldFRhZ1J1bGVzKG1fZWxlbWVu
dC0+bG9jYWxOYW1lKCkuaW1wbCgpKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGlu
Y2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VW5pdmVy
c2FsUnVsZXMoKSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RSdWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1
bGVzKTsKLSAgICAKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0VGFnUnVsZXMobV9l
bGVtZW50LT5sb2NhbE5hbWUoKS5pbXBsKCkpLCBzY29wZSwgZmlyc3RSdWxlSW5kZXgsIGxhc3RS
dWxlSW5kZXgsIGluY2x1ZGVFbXB0eVJ1bGVzKTsKKyAgICBtYXRjaFJ1bGVzRm9yTGlzdChydWxl
cy0+Z2V0VW5pdmVyc2FsUnVsZXMoKSwgc2NvcGUsIGZpcnN0UnVsZUluZGV4LCBsYXN0UnVsZUlu
ZGV4LCBpbmNsdWRlRW1wdHlSdWxlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBsZXNzU3Bl
Y2lmaWMoY29uc3QgUnVsZURhdGEqIHIxLCBjb25zdCBSdWxlRGF0YSogcjIpCit7CisgICAgdW5z
aWduZWQgc3BlY2lmaWNpdHkxID0gcjEtPnNwZWNpZmljaXR5KCk7CisgICAgdW5zaWduZWQgc3Bl
Y2lmaWNpdHkyID0gcjItPnNwZWNpZmljaXR5KCk7CisgICAgcmV0dXJuIChzcGVjaWZpY2l0eTEg
PT0gc3BlY2lmaWNpdHkyKSA/IHIxLT5wb3NpdGlvbigpIDwgcjItPnBvc2l0aW9uKCkgOiBzcGVj
aWZpY2l0eTEgPCBzcGVjaWZpY2l0eTI7IAorfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OnNv
cnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhib29sIGNvbGxlY3RSdWxlc09ubHkpCit7CiAgICAg
Ly8gSWYgd2UgZGlkbid0IG1hdGNoIGFueSBydWxlcywgd2UncmUgZG9uZS4KICAgICBpZiAobV9t
YXRjaGVkUnVsZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyBT
b3J0IHRoZSBzZXQgb2YgbWF0Y2hlZCBydWxlcy4KLSAgICBzb3J0TWF0Y2hlZFJ1bGVzKCk7Ci0g
ICAgCisgICAgc3RkOjpzb3J0KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVz
LmVuZCgpLCBsZXNzU3BlY2lmaWMpOworCiAgICAgLy8gTm93IHRyYW5zZmVyIHRoZSBzZXQgb2Yg
bWF0Y2hlZCBydWxlcyBvdmVyIHRvIG91ciBsaXN0IG9mIGRlY2xzLgotICAgIGlmICghbV9jaGVj
a2VyLmlzQ29sbGVjdGluZ1J1bGVzT25seSgpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykKLSAgICAgICAgICAgIGFkZE1hdGNo
ZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsK
LSAgICB9IGVsc2UgeworICAgIGlmIChjb2xsZWN0UnVsZXNPbmx5KSB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBtX21hdGNoZWRSdWxlcy5zaXplKCk7IGkrKykgewogICAgICAg
ICAgICAgaWYgKCFtX3J1bGVMaXN0KQogICAgICAgICAgICAgICAgIG1fcnVsZUxpc3QgPSBDU1NS
dWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgICAgICAgICBtX3J1bGVMaXN0LT5hcHBlbmQobV9tYXRj
aGVkUnVsZXNbaV0tPnJ1bGUoKSk7CiAgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgpOyBpKyspCisgICAg
ICAgICAgICBhZGRNYXRjaGVkRGVjbGFyYXRpb24obV9tYXRjaGVkUnVsZXNbaV0tPnJ1bGUoKS0+
ZGVjbGFyYXRpb24oKSk7CiAgICAgfQogfQogCkBAIC02ODEsMTIgKzgwMSwxNSBAQCBpbmxpbmUg
Ym9vbCBNYXRjaGluZ1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQogCiBib29sIE1h
dGNoaW5nVUFSdWxlc1Njb3BlOjptX21hdGNoaW5nVUFSdWxlcyA9IGZhbHNlOwogCi1pbmxpbmUg
c3RhdGljIGJvb2wgbWF0Y2hlc0luVHJlZVNjb3BlKFRyZWVTY29wZSogdHJlZVNjb3BlLCBib29s
IHJ1bGVSZWFjaGVzSW50b1NoYWRvd0RPTSkKK2lubGluZSBzdGF0aWMgYm9vbCBtYXRjaGVzSW5U
cmVlU2NvcGUoVHJlZVNjb3BlKiB0cmVlU2NvcGUsIGNvbnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUs
IGJvb2wgcnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NKQogewotICAgIHJldHVybiBNYXRjaGluZ1VB
UnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKSB8fCB0cmVlU2NvcGUtPmFwcGx5QXV0aG9y
U2hlZXRzKCkgfHwgcnVsZVJlYWNoZXNJbnRvU2hhZG93RE9NOworICAgIHJldHVybiBNYXRjaGlu
Z1VBUnVsZXNTY29wZTo6aXNNYXRjaGluZ1VBUnVsZXMoKQorICAgICAgICB8fCB0cmVlU2NvcGUt
PmFwcGx5QXV0aG9yU2hlZXRzKCkKKyAgICAgICAgfHwgKHN0eWxlU2NvcGUgJiYgc3R5bGVTY29w
ZS0+dHJlZVNjb3BlKCkgPT0gdHJlZVNjb3BlKQorICAgICAgICB8fCBydWxlUmVhY2hlc0ludG9T
aGFkb3dET007CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3Qo
Y29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYg
bGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKK3ZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6bWF0Y2hSdWxlc0Zvckxpc3QoY29uc3QgVmVjdG9yPFJ1bGVEYXRhPiogcnVsZXMsIGNv
bnN0IEVsZW1lbnQqIHN0eWxlU2NvcGUsIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1
bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcykKIHsKICAgICBpZiAoIXJ1bGVzKQogICAg
ICAgICByZXR1cm47CkBAIC02OTksOCArODIyLDggQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIK
ICAgICAgICAgY29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhID0gcnVsZXMtPmF0KGkpOwogICAgICAg
ICBpZiAoY2FuVXNlRmFzdFJlamVjdCAmJiBmYXN0UmVqZWN0U2VsZWN0b3IocnVsZURhdGEpKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChjaGVja1NlbGVjdG9yKHJ1bGVEYXRh
KSkgewotICAgICAgICAgICAgaWYgKCFtYXRjaGVzSW5UcmVlU2NvcGUobV9lbGVtZW50LT50cmVl
U2NvcGUoKSwgbV9jaGVja2VyLmhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpKSkKKyAgICAgICAg
aWYgKGNoZWNrU2VsZWN0b3IocnVsZURhdGEsIHN0eWxlU2NvcGUpKSB7CisgICAgICAgICAgICBp
ZiAoIW1hdGNoZXNJblRyZWVTY29wZShtX2VsZW1lbnQtPnRyZWVTY29wZSgpLCBzdHlsZVNjb3Bl
LCBtX2NoZWNrZXIuaGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCkpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgLy8gSWYgdGhlIHJ1bGUgaGFzIG5vIHByb3BlcnRpZXMg
dG8gYXBwbHksIHRoZW4gaWdub3JlIGl0IGluIHRoZSBub24tZGVidWcgbW9kZS4KICAgICAgICAg
ICAgIENTU1N0eWxlUnVsZSogcnVsZSA9IHJ1bGVEYXRhLnJ1bGUoKTsKQEAgLTcyOCwxOCArODUx
LDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFJ1bGVzRm9yTGlzdChjb25zdCBWZWN0
b3I8UnVsZURhdGE+KiBydWxlcywgaW50JiBmaXIKICAgICAgICAgfQogICAgIH0KIH0KLQotc3Rh
dGljIGlubGluZSBib29sIGNvbXBhcmVSdWxlcyhjb25zdCBSdWxlRGF0YSogcjEsIGNvbnN0IFJ1
bGVEYXRhKiByMikKLXsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTEgPSByMS0+c3BlY2lmaWNp
dHkoKTsKLSAgICB1bnNpZ25lZCBzcGVjaWZpY2l0eTIgPSByMi0+c3BlY2lmaWNpdHkoKTsKLSAg
ICByZXR1cm4gKHNwZWNpZmljaXR5MSA9PSBzcGVjaWZpY2l0eTIpID8gcjEtPnBvc2l0aW9uKCkg
PCByMi0+cG9zaXRpb24oKSA6IHNwZWNpZmljaXR5MSA8IHNwZWNpZmljaXR5MjsgCi19Ci0KLXZv
aWQgQ1NTU3R5bGVTZWxlY3Rvcjo6c29ydE1hdGNoZWRSdWxlcygpCi17Ci0gICAgc3RkOjpzb3J0
KG1fbWF0Y2hlZFJ1bGVzLmJlZ2luKCksIG1fbWF0Y2hlZFJ1bGVzLmVuZCgpLCBjb21wYXJlUnVs
ZXMpOwotfQogICAgIAogaW5saW5lIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEVsZW1lbnQo
RWxlbWVudCogZSkKIHsKQEAgLTc4OSw2ICs5MDAsOCBAQCBOb2RlKiBDU1NTdHlsZVNlbGVjdG9y
Ojpsb2NhdGVDb3VzaW5MaXN0KEVsZW1lbnQqIHBhcmVudCwgdW5zaWduZWQmIHZpc2l0ZWROb2Rl
QwogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LT5pc1N0eWxl
ZEVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKHBhcmVudC0+aGFzU2NvcGVk
SFRNTFN0eWxlQ2hpbGQoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgU3R5bGVkRWxlbWVudCog
cCA9IHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPihwYXJlbnQpOwogICAgIGlmIChwLT5pbmxp
bmVTdHlsZURlY2woKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC04MDQsOCArOTE3LDEwIEBAIE5v
ZGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1
bnNpZ25lZCYgdmlzaXRlZE5vZGVDCiAgICAgLy8gd2lsbCBuZXZlciBnbyBkZWVwZXIgdGhhbiBj
U3R5bGVTZWFyY2hMZXZlbFRocmVzaG9sZCBsZXZlbHMgaW50byByZWN1cnNpb24uCiAgICAgdmlz
aXRlZE5vZGVDb3VudCArPSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQ7CiAgICAgd2hpbGUgKHRoaXND
b3VzaW4pIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnROb2RlKSB7CisgICAgICAgIGZvciAoOyBj
dXJyZW50Tm9kZTsgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS0+cHJldmlvdXNTaWJsaW5nKCkp
IHsKICAgICAgICAgICAgICsrc3ViY291bnQ7CisgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUt
PmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQoY3VycmVudE5vZGUpLT5oYXNTY29wZWRIVE1M
U3R5bGVDaGlsZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYg
KGN1cnJlbnROb2RlLT5yZW5kZXJTdHlsZSgpID09IHBhcmVudFN0eWxlICYmIGN1cnJlbnROb2Rl
LT5sYXN0Q2hpbGQoKSkgewogICAgICAgICAgICAgICAgIC8vIEFkanVzdCBmb3IgdW51c2VkIHJl
c2VydmVkIHRyaWVzLgogICAgICAgICAgICAgICAgIHZpc2l0ZWROb2RlQ291bnQgLT0gY1N0eWxl
U2VhcmNoVGhyZXNob2xkIC0gc3ViY291bnQ7CkBAIC04MTMsNyArOTI4LDYgQEAgTm9kZSogQ1NT
U3R5bGVTZWxlY3Rvcjo6bG9jYXRlQ291c2luTGlzdChFbGVtZW50KiBwYXJlbnQsIHVuc2lnbmVk
JiB2aXNpdGVkTm9kZUMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChzdWJjb3VudCA+
PSBjU3R5bGVTZWFyY2hUaHJlc2hvbGQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
ICAgICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKICAg
ICAgICAgfQogICAgICAgICBjdXJyZW50Tm9kZSA9IGxvY2F0ZUNvdXNpbkxpc3QodGhpc0NvdXNp
bi0+cGFyZW50RWxlbWVudCgpLCB2aXNpdGVkTm9kZUNvdW50KTsKICAgICAgICAgdGhpc0NvdXNp
biA9IGN1cnJlbnROb2RlOwpAQCAtODI1LDcgKzkzOSw3IEBAIE5vZGUqIENTU1N0eWxlU2VsZWN0
b3I6OmxvY2F0ZUNvdXNpbkxpc3QoRWxlbWVudCogcGFyZW50LCB1bnNpZ25lZCYgdmlzaXRlZE5v
ZGVDCiBib29sIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoZXNTaWJsaW5nUnVsZXMoKQogewogICAg
IGludCBmaXJzdFNpYmxpbmdSdWxlID0gLTEsIGxhc3RTaWJsaW5nUnVsZSA9IC0xOwotICAgIG1h
dGNoUnVsZXMobV9mZWF0dXJlcy5zaWJsaW5nUnVsZXMuZ2V0KCksIGZpcnN0U2libGluZ1J1bGUs
IGxhc3RTaWJsaW5nUnVsZSwgZmFsc2UpOworICAgIG1hdGNoUnVsZXNHbG9iYWxseShtX2ZlYXR1
cmVzLnNpYmxpbmdSdWxlcy5nZXQoKSwgZmlyc3RTaWJsaW5nUnVsZSwgbGFzdFNpYmxpbmdSdWxl
LCBmYWxzZSk7CiAgICAgaWYgKG1fbWF0Y2hlZERlY2xzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CkBAIC05MzcsNiArMTA1MSw5
IEBAIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6Y2FuU2hhcmVTdHlsZVdpdGhFbGVtZW50KE5vZGUq
IG5vZGUpIGNvbnN0CiAgICAgaWYgKGVsZW1lbnQtPmhhc0lEKCkgJiYgbV9mZWF0dXJlcy5pZHNJ
blJ1bGVzLmNvbnRhaW5zKGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCkuaW1wbCgpKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgaWYgKGVsZW1lbnQtPmhhc1Njb3BlZEhUTUxT
dHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGJvb2wgaXNDb250cm9s
ID0gZWxlbWVudC0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKTsKIAogICAgIGlmIChpc0NvbnRyb2wg
IT0gbV9lbGVtZW50LT5pc0Zvcm1Db250cm9sRWxlbWVudCgpKQpAQCAtMTAwMyw2ICsxMTIwLDgg
QEAgQUxXQVlTX0lOTElORSBSZW5kZXJTdHlsZSogQ1NTU3R5bGVTZWxlY3Rvcjo6bG9jYXRlU2hh
cmVkU3R5bGUoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocGFyZW50U3R5bGVQcmV2ZW50
c1NoYXJpbmcobV9wYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX3N0
eWxlZEVsZW1lbnQtPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkpCisgICAgICAgIHJldHVybiAw
OwogCiAgICAgLy8gQ2hlY2sgcHJldmlvdXMgc2libGluZ3MgYW5kIHRoZWlyIGNvdXNpbnMuCiAg
ICAgdW5zaWduZWQgY291bnQgPSAwOwpAQCAtMTAzNiwxNyArMTE1NSwxNyBAQCB2b2lkIENTU1N0
eWxlU2VsZWN0b3I6Om1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1
bGUpCiAgICAgLy8gRmlyc3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVl
dC4KICAgICBSdWxlU2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlw
ZU1hdGNoU3BlY2lmaWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRl
ZmF1bHRTdHlsZTsKLSAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFS
dWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CisgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KHVzZXJBZ2Vu
dFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlLCBmYWxzZSk7CiAKICAgICAvLyBJ
biBxdWlya3MgbW9kZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQg
c2hlZXQuCiAgICAgaWYgKCFtX2NoZWNrZXIuc3RyaWN0UGFyc2luZygpKQotICAgICAgICBtYXRj
aFJ1bGVzKGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNl
KTsKKyAgICAgICAgbWF0Y2hSdWxlc0dsb2JhbGx5KGRlZmF1bHRRdWlya3NTdHlsZSwgZmlyc3RV
QVJ1bGUsIGxhc3RVQVJ1bGUsIGZhbHNlKTsKICAgICAgICAgCiAgICAgLy8gSWYgZG9jdW1lbnQg
dXNlcyB2aWV3IHNvdXJjZSBzdHlsZXMgKGluIHZpZXcgc291cmNlIG1vZGUgb3IgaW4geG1sIHZp
ZXdlciBtb2RlKSwgdGhlbiB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB2aWV3IHNvdXJjZSBzdHls
ZSBzaGVldC4KICAgICBpZiAobV9jaGVja2VyLmRvY3VtZW50KCktPmlzVmlld1NvdXJjZSgpKSB7
CiAgICAgICAgIGlmICghZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSkKICAgICAgICAgICAgIGxvYWRW
aWV3U291cmNlU3R5bGUoKTsKLSAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0Vmlld1NvdXJjZVN0
eWxlLCBmaXJzdFVBUnVsZSwgbGFzdFVBUnVsZSwgZmFsc2UpOworICAgICAgICBtYXRjaFJ1bGVz
R2xvYmFsbHkoZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUs
IGZhbHNlKTsKICAgICB9CiB9CiAKQEAgLTEyNTAsNyArMTM2OSw3IEBAIFBhc3NSZWZQdHI8UmVu
ZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3I6OnN0eWxlRm9yRWxlbWVudChFbGVtZW50KiBlLCBS
ZW5kZXJTdHlsCiAgICAgaWYgKCFyZXNvbHZlRm9yUm9vdERlZmF1bHQpIHsKICAgICAgICAgLy8g
NC4gTm93IHdlIGNoZWNrIHVzZXIgc2hlZXQgcnVsZXMuCiAgICAgICAgIGlmIChtX21hdGNoQXV0
aG9yQW5kVXNlclN0eWxlcykKLSAgICAgICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0
KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RVc2VyUnVsZSwgZmFsc2UpOworICAgICAgICAgICAgbWF0
Y2hSdWxlc0dsb2JhbGx5KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNl
clJ1bGUsIGZhbHNlKTsKIAogICAgICAgICAvLyA1LiBOb3cgY2hlY2sgYXV0aG9yIHJ1bGVzLCBi
ZWdpbm5pbmcgZmlyc3Qgd2l0aCBwcmVzZW50YXRpb25hbCBhdHRyaWJ1dGVzCiAgICAgICAgIC8v
IG1hcHBlZCBmcm9tIEhUTUwuCkBAIC0xMjk1LDcgKzE0MTQsNyBAQCBQYXNzUmVmUHRyPFJlbmRl
clN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvckVsZW1lbnQoRWxlbWVudCogZSwgUmVu
ZGVyU3R5bAogICAgIAogICAgICAgICAvLyA2LiBDaGVjayB0aGUgcnVsZXMgaW4gYXV0aG9yIHNo
ZWV0cyBuZXh0LgogICAgICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpCi0gICAg
ICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0KCksIGZpcnN0QXV0aG9yUnVsZSwg
bGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgICAgIG1hdGNoQXV0aG9yUnVsZXMoZmly
c3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwgZmFsc2UpOwogCiAgICAgICAgIC8vIDcuIE5v
dyBjaGVjayBvdXIgaW5saW5lIHN0eWxlIGF0dHJpYnV0ZS4KICAgICAgICAgaWYgKG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzICYmIG1fc3R5bGVkRWxlbWVudCkgewpAQCAtMTUxMCw4ICsxNjI5
LDggQEAgUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4gQ1NTU3R5bGVTZWxlY3Rvcjo6cHNldWRvU3R5
bGVGb3JFbGVtZW50KFBzZXVkb0lkIHBzZXVkbywKICAgICBtYXRjaFVBUnVsZXMoZmlyc3RVQVJ1
bGUsIGxhc3RVQVJ1bGUpOwogCiAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7
Ci0gICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxh
c3RVc2VyUnVsZSwgZmFsc2UpOwotICAgICAgICBtYXRjaFJ1bGVzKG1fYXV0aG9yU3R5bGUuZ2V0
KCksIGZpcnN0QXV0aG9yUnVsZSwgbGFzdEF1dGhvclJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0
Y2hSdWxlc0dsb2JhbGx5KG1fdXNlclN0eWxlLmdldCgpLCBmaXJzdFVzZXJSdWxlLCBsYXN0VXNl
clJ1bGUsIGZhbHNlKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxlcyhmaXJzdFVzZXJSdWxlLCBs
YXN0VXNlclJ1bGUsIGZhbHNlKTsKICAgICB9CiAKICAgICBpZiAobV9tYXRjaGVkRGVjbHMuaXNF
bXB0eSgpICYmICF2aXNpdGVkU3R5bGUpCkBAIC0xNTc4LDcgKzE2OTcsOCBAQCBQYXNzUmVmUHRy
PFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yOjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRl
eCkKICAgICBjb25zdCBTdHJpbmcgcGFnZSA9IHBhZ2VOYW1lKHBhZ2VJbmRleCk7CiAgICAgbWF0
Y2hQYWdlUnVsZXMoZGVmYXVsdFByaW50U3R5bGUsIGlzTGVmdCwgaXNGaXJzdCwgcGFnZSk7CiAg
ICAgbWF0Y2hQYWdlUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGlzTGVmdCwgaXNGaXJzdCwgcGFn
ZSk7Ci0gICAgbWF0Y2hQYWdlUnVsZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgaXNMZWZ0LCBpc0Zp
cnN0LCBwYWdlKTsKKyAgICAvLyBPbmx5IGNvbnNpZGVyIHRoZSBnbG9iYWwgUnVsZVNldCBmb3Ig
QHBhZ2UgcnVsZXMsIGFzIHBlciB0aGUgSFRNTDUgc3BlYy4KKyAgICBtYXRjaFBhZ2VSdWxlcyht
X2dsb2JhbEF1dGhvclN0eWxlcy5nZXQoKSwgaXNMZWZ0LCBpc0ZpcnN0LCBwYWdlKTsKICAgICBt
X2xpbmVIZWlnaHRWYWx1ZSA9IDA7CiAgICAgYXBwbHlEZWNsYXJhdGlvbnM8dHJ1ZT4oZmFsc2Us
IDAsIG1fbWF0Y2hlZERlY2xzLnNpemUoKSAtIDEpOwogCkBAIC0xODU0LDcgKzE5NzQsNyBAQCBQ
YXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVz
Rm9yRWxlbWVudChFbGVtZW50KiBlLAogICAgICAgICAvLyBOb3cgd2UgY2hlY2sgdXNlciBzaGVl
dCBydWxlcy4KICAgICAgICAgaWYgKG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CiAgICAg
ICAgICAgICBpbnQgZmlyc3RVc2VyUnVsZSA9IC0xLCBsYXN0VXNlclJ1bGUgPSAtMTsKLSAgICAg
ICAgICAgIG1hdGNoUnVsZXMobV91c2VyU3R5bGUuZ2V0KCksIGZpcnN0VXNlclJ1bGUsIGxhc3RV
c2VyUnVsZSwgcnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgICAgIG1h
dGNoUnVsZXNHbG9iYWxseShtX3VzZXJTdHlsZS5nZXQoKSwgZmlyc3RVc2VyUnVsZSwgbGFzdFVz
ZXJSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5Q1NTUnVsZXMpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xODYzLDcgKzE5ODMsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHls
ZVNlbGVjdG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogCiAgICAg
ICAgIC8vIENoZWNrIHRoZSBydWxlcyBpbiBhdXRob3Igc2hlZXRzLgogICAgICAgICBpbnQgZmly
c3RBdXRob3JSdWxlID0gLTEsIGxhc3RBdXRob3JSdWxlID0gLTE7Ci0gICAgICAgIG1hdGNoUnVs
ZXMobV9hdXRob3JTdHlsZS5nZXQoKSwgZmlyc3RBdXRob3JSdWxlLCBsYXN0QXV0aG9yUnVsZSwg
cnVsZXNUb0luY2x1ZGUgJiBFbXB0eUNTU1J1bGVzKTsKKyAgICAgICAgbWF0Y2hBdXRob3JSdWxl
cyhmaXJzdEF1dGhvclJ1bGUsIGxhc3RBdXRob3JSdWxlLCBydWxlc1RvSW5jbHVkZSAmIEVtcHR5
Q1NTUnVsZXMpOwogCiAgICAgICAgIG1fc2FtZU9yaWdpbk9ubHkgPSBmYWxzZTsKICAgICB9CkBA
IC0xODczLDcgKzE5OTMsNyBAQCBQYXNzUmVmUHRyPENTU1J1bGVMaXN0PiBDU1NTdHlsZVNlbGVj
dG9yOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChFbGVtZW50KiBlLAogICAgIHJldHVybiBt
X3J1bGVMaXN0LnJlbGVhc2UoKTsKIH0KIAotaW5saW5lIGJvb2wgQ1NTU3R5bGVTZWxlY3Rvcjo6
Y2hlY2tTZWxlY3Rvcihjb25zdCBSdWxlRGF0YSYgcnVsZURhdGEpCitpbmxpbmUgYm9vbCBDU1NT
dHlsZVNlbGVjdG9yOjpjaGVja1NlbGVjdG9yKGNvbnN0IFJ1bGVEYXRhJiBydWxlRGF0YSwgY29u
c3QgRWxlbWVudCogc2NvcGUpCiB7CiAgICAgbV9keW5hbWljUHNldWRvID0gTk9QU0VVRE87CiAg
ICAgbV9jaGVja2VyLmNsZWFySGFzVW5rbm93blBzZXVkb0VsZW1lbnRzKCk7CkBAIC0xODg3LDEx
ICsyMDA3LDExIEBAIGlubGluZSBib29sIENTU1N0eWxlU2VsZWN0b3I6OmNoZWNrU2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmIHJ1bGVEYXRhKQogICAgICAgICAvLyBUaGlzIGlzIGxpbWl0ZWQgdG8g
SFRNTCBvbmx5IHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIG5hbWVzcGFjZS4KICAgICAg
ICAgaWYgKHJ1bGVEYXRhLmhhc1RvcFNlbGVjdG9yTWF0Y2hpbmdIVE1MQmFzZWRPblJ1bGVIYXNo
KCkgJiYgIXJ1bGVEYXRhLmhhc011bHRpcGFydFNlbGVjdG9yKCkgJiYgbV9lbGVtZW50LT5pc0hU
TUxFbGVtZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIFNl
bGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9l
bGVtZW50KTsKKyAgICAgICAgcmV0dXJuIFNlbGVjdG9yQ2hlY2tlcjo6ZmFzdENoZWNrU2VsZWN0
b3IocnVsZURhdGEuc2VsZWN0b3IoKSwgbV9lbGVtZW50LCBzY29wZSk7CiAgICAgfQogCiAgICAg
Ly8gU2xvdyBwYXRoLgotICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JNYXRjaCBtYXRjaCA9
IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVjdG9yKCksIG1fZWxlbWVudCwg
bV9keW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2UsIHN0eWxlKCksIG1fcGFyZW50Tm9kZSA/IG1f
cGFyZW50Tm9kZS0+cmVuZGVyU3R5bGUoKSA6IDApOworICAgIFNlbGVjdG9yQ2hlY2tlcjo6U2Vs
ZWN0b3JNYXRjaCBtYXRjaCA9IG1fY2hlY2tlci5jaGVja1NlbGVjdG9yKHJ1bGVEYXRhLnNlbGVj
dG9yKCksIG1fZWxlbWVudCwgc2NvcGUsIG1fZHluYW1pY1BzZXVkbywgZmFsc2UsIGZhbHNlLCBz
dHlsZSgpLCBtX3BhcmVudE5vZGUgPyBtX3BhcmVudE5vZGUtPnJlbmRlclN0eWxlKCkgOiAwKTsK
ICAgICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoZXMpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gTk9Q
U0VVRE8gJiYgbV9jaGVja2VyLnBzZXVkb1N0eWxlKCkgIT0gbV9keW5hbWljUHNldWRvKQpAQCAt
MTk4NCw3ICsyMTA0LDcgQEAgUnVsZVNldDo6flJ1bGVTZXQoKQogCiAKIHZvaWQgUnVsZVNldDo6
YWRkVG9SdWxlU2V0KEF0b21pY1N0cmluZ0ltcGwqIGtleSwgQXRvbVJ1bGVNYXAmIG1hcCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwgQ1NTU2VsZWN0
b3IqIHNlbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcnVsZSwg
Q1NTU2VsZWN0b3IqIHNlbCkKIHsKICAgICBpZiAoIWtleSkgcmV0dXJuOwogICAgIFZlY3RvcjxS
dWxlRGF0YT4qIHJ1bGVzID0gbWFwLmdldChrZXkpOwpAQCAtMjAyNSw3ICsyMTQ1LDcgQEAgdm9p
ZCBSdWxlU2V0OjphZGRQYWdlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUsIENTU1NlbGVjdG9yKiBz
ZWwpCiAgICAgbV9wYWdlUnVsZXMuYXBwZW5kKFJ1bGVEYXRhKHJ1bGUsIHNlbCwgbV9wYWdlUnVs
ZXMuc2l6ZSgpKSk7CiB9CiAKLXZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoQ1NTU3R5
bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcikKK3ZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvciwgY29uc3QgRWxlbWVudCogc2NvcGUp
CiB7CiAgICAgaWYgKCFzaGVldCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjA0MCwxMSArMjE2MCwx
MSBAQCB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0
LCBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKICAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0ZW0oaSk7CiAgICAg
ICAgIGlmIChpdGVtLT5pc1N0eWxlUnVsZSgpKQotICAgICAgICAgICAgYWRkU3R5bGVSdWxlKHN0
YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGl0ZW0pKTsKKyAgICAgICAgICAgIGFkZFN0eWxlUnVs
ZShzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihpdGVtKSwgc2NvcGUpOwogICAgICAgICBlbHNl
IGlmIChpdGVtLT5pc0ltcG9ydFJ1bGUoKSkgewogICAgICAgICAgICAgQ1NTSW1wb3J0UnVsZSog
aW1wb3J0ID0gc3RhdGljX2Nhc3Q8Q1NTSW1wb3J0UnVsZSo+KGl0ZW0pOwogICAgICAgICAgICAg
aWYgKCFpbXBvcnQtPm1lZGlhKCkgfHwgbWVkaXVtLmV2YWwoaW1wb3J0LT5tZWRpYSgpLCBzdHls
ZVNlbGVjdG9yKSkKLSAgICAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldChpbXBvcnQtPnN0
eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9yKTsKKyAgICAgICAgICAgICAgICBhZGRS
dWxlc0Zyb21TaGVldChpbXBvcnQtPnN0eWxlU2hlZXQoKSwgbWVkaXVtLCBzdHlsZVNlbGVjdG9y
LCBzY29wZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoaXRlbS0+aXNNZWRpYVJ1bGUo
KSkgewogICAgICAgICAgICAgQ1NTTWVkaWFSdWxlKiByID0gc3RhdGljX2Nhc3Q8Q1NTTWVkaWFS
dWxlKj4oaXRlbSk7CkBAIC0yMDU2LDMzICsyMTc2LDU0IEBAIHZvaWQgUnVsZVNldDo6YWRkUnVs
ZXNGcm9tU2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0
b3ImCiAgICAgICAgICAgICAgICAgICAgIENTU1J1bGUgKmNoaWxkSXRlbSA9IHJ1bGVzLT5pdGVt
KGopOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGRJdGVtLT5pc1N0eWxlUnVsZSgpKSB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBhIFN0eWxlUnVsZSwgc28gYXBwZW5k
IGl0IHRvIG91ciBsaXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRTdHlsZVJ1bGUoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRJdGVtKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBhZGRTdHlsZVJ1bGUoc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY2hpbGRJdGVtKSwg
c2NvcGUpOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNGb250
RmFjZVJ1bGUoKSAmJiBzdHlsZVNlbGVjdG9yKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNldC4KLSAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IENTU0ZvbnRGYWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9u
dEZhY2VSdWxlKj4oY2hpbGRJdGVtKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlU2Vs
ZWN0b3ItPmZvbnRTZWxlY3RvcigpLT5hZGRGb250RmFjZVJ1bGUoZm9udEZhY2VSdWxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogV2UgZG9uJ3QgYWRkIEBmb250LWZhY2UgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBm
b3IgdGhlIG1vbWVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8g
aGF2ZSBzY29wZWQgQGZvbnQtZmFjZSBydWxlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2NvcGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDU1NGb250RmFj
ZVJ1bGUqIGZvbnRGYWNlUnVsZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGNoaWxk
SXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNl
bGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkSXRlbS0+aXNL
ZXlmcmFtZXNSdWxlKCkgJiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gQWRkIHRoaXMga2V5ZnJhbWUgcnVsZSB0byBvdXIgc2V0LgotICAgICAgICAgICAgICAg
ICAgICAgICAgc3R5bGVTZWxlY3Rvci0+YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlKj4oY2hpbGRJdGVtKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGFkZCBAa2V5
ZnJhbWUgcnVsZXMgb2Ygc2NvcGVkIHN0eWxlIHNoZWV0cyBmb3IgdGhlIG1vbWVudC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB3YXkgdG8gaGF2ZSBzY29wZWQgQGtleWZyYW1l
IHJ1bGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzY29wZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHlsZVNlbGVjdG9yLT5hZGRLZXlmcmFtZVN0eWxlKHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihjaGlsZEl0ZW0pKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0gICAvLyBmb3IgcnVsZXMKICAgICAgICAgICAgIH0g
ICAvLyBpZiBydWxlcwogICAgICAgICB9IGVsc2UgaWYgKGl0ZW0tPmlzRm9udEZhY2VSdWxlKCkg
JiYgc3R5bGVTZWxlY3RvcikgewogICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRv
IG91ciBzZXQuCi0gICAgICAgICAgICBjb25zdCBDU1NGb250RmFjZVJ1bGUqIGZvbnRGYWNlUnVs
ZSA9IHN0YXRpY19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGl0ZW0pOwotICAgICAgICAgICAgc3R5
bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZvbnRGYWNlUnVsZShmb250RmFjZVJ1bGUp
OworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBhZGQgQGZv
bnQtZmFjZSBydWxlcyBvZiBzY29wZWQgc3R5bGUgc2hlZXRzIGZvciB0aGUgbW9tZW50LgorICAg
ICAgICAgICAgLy8gRmluZCBhIHdheSB0byBoYXZlIHNjb3BlZCBAZm9udC1mYWNlIHJ1bGVzLgor
ICAgICAgICAgICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAgICAgIGNvbnN0IENTU0ZvbnRG
YWNlUnVsZSogZm9udEZhY2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oaXRl
bSk7CisgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+Zm9udFNlbGVjdG9yKCktPmFkZEZv
bnRGYWNlUnVsZShmb250RmFjZVJ1bGUpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
aWYgKGl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpKQotICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oaXRl
bSkpOworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBhZGQg
QGtleWZyYW1lIHJ1bGVzIG9mIHNjb3BlZCBzdHlsZSBzaGVldHMgZm9yIHRoZSBtb21lbnQuCisg
ICAgICAgICAgICAvLyBGaW5kIGEgd2F5IHRvIGhhdmUgc2NvcGVkIEBrZXlmcmFtZSBydWxlcy4K
KyAgICAgICAgICAgIGlmICghc2NvcGUpCisgICAgICAgICAgICAgICAgc3R5bGVTZWxlY3Rvci0+
YWRkS2V5ZnJhbWVTdHlsZShzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKj4oaXRl
bSkpOwogICAgIH0KICAgICBpZiAobV9hdXRvU2hyaW5rVG9GaXRFbmFibGVkKQogICAgICAgICBz
aHJpbmtUb0ZpdCgpOwogfQogCi12b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1
bGUqIHJ1bGUpCit2b2lkIFJ1bGVTZXQ6OmFkZFN0eWxlUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUs
IGNvbnN0IEVsZW1lbnQqIHNjb3BlKQogewogICAgIGlmIChydWxlLT5pc1BhZ2VSdWxlKCkpIHsK
LSAgICAgICAgQ1NTUGFnZVJ1bGUqIHBhZ2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUq
PihydWxlKTsKLSAgICAgICAgYWRkUGFnZVJ1bGUocGFnZVJ1bGUsIHBhZ2VSdWxlLT5zZWxlY3Rv
ckxpc3QoKS5maXJzdCgpKTsKKyAgICAgICAgLy8gSWdub3JlIEBwYWdlIHJ1bGVzIGlmIHRoZSBz
dHlsZSBzaGVldCBpcyBzY29wZWQKKyAgICAgICAgaWYgKCFzY29wZSkgeworICAgICAgICAgICAg
Q1NTUGFnZVJ1bGUqIHBhZ2VSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPihydWxlKTsK
KyAgICAgICAgICAgIGFkZFBhZ2VSdWxlKHBhZ2VSdWxlLCBwYWdlUnVsZS0+c2VsZWN0b3JMaXN0
KCkuZmlyc3QoKSk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKENTU1Nl
bGVjdG9yKiBzID0gcnVsZS0+c2VsZWN0b3JMaXN0KCkuZmlyc3QoKTsgczsgcyA9IENTU1NlbGVj
dG9yTGlzdDo6bmV4dChzKSkKICAgICAgICAgICAgIGFkZFJ1bGUocnVsZSwgcyk7CkBAIC0yMTg1
LDYgKzIzMjYsMjcgQEAgdm9pZCBSdWxlU2V0OjpzaHJpbmtUb0ZpdCgpCiAgICAgbV9wYWdlUnVs
ZXMuc2hyaW5rVG9GaXQoKTsKIH0KIAorU2NvcGVkUnVsZVNldHM6On5TY29wZWRSdWxlU2V0cygp
Cit7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc2NvcGVkUnVsZVNldE1hcCk7Cit9CisKK1J1bGVT
ZXQqIFNjb3BlZFJ1bGVTZXRzOjplbnN1cmVFeGlzdHMoY29uc3QgRWxlbWVudCogc2NvcGUpCit7
CisgICAgUnVsZVNldCogcnVsZVNldCA9IG1fc2NvcGVkUnVsZVNldE1hcC5nZXQoc2NvcGUpOwor
ICAgIGlmICghcnVsZVNldCkgeworICAgICAgICBydWxlU2V0ID0gbmV3IFJ1bGVTZXQ7CisgICAg
ICAgIG1fc2NvcGVkUnVsZVNldE1hcC5zZXQoc2NvcGUsIHJ1bGVTZXQpOworICAgIH0KKyAgICBy
ZXR1cm4gcnVsZVNldDsKK30KKwordm9pZCBTY29wZWRSdWxlU2V0czo6Y29sbGVjdEZlYXR1cmVz
KENTU1N0eWxlU2VsZWN0b3I6OkZlYXR1cmVzJiBmZWF0dXJlcykgY29uc3QKK3sKKyAgICBmb3Ig
KFNjb3BlZFJ1bGVTZXRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zY29wZWRSdWxlU2V0TWFw
LmJlZ2luKCksIGl0RW5kID0gbV9zY29wZWRSdWxlU2V0TWFwLmVuZCgpOyBpdCAhPSBpdEVuZDsg
KytpdCkKKyAgICAgICAgaXQtPnNlY29uZC0+Y29sbGVjdEZlYXR1cmVzKGZlYXR1cmVzKTsKK30K
KwogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gdGhpcyBpcyBtb3N0bHkgYm9y
aW5nIHN0dWZmIG9uIGhvdyB0byBhcHBseSBhIGNlcnRhaW4gcnVsZSB0byB0aGUgcmVuZGVyc3R5
bGUuLi4KIApAQCAtMjI3MywxNyArMjQzNSw3IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWF0
Y2hQYWdlUnVsZXMoUnVsZVNldCogcnVsZXMsIGJvb2wgaXNMZWZ0UGFnZSwgYm9vbCBpc0ZpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIG1hdGNoUGFnZVJ1bGVzRm9yTGlzdChydWxlcy0+Z2V0UGFn
ZVJ1bGVzKCksIGlzTGVmdFBhZ2UsIGlzRmlyc3RQYWdlLCBwYWdlTmFtZSk7Ci0KLSAgICAvLyBJ
ZiB3ZSBkaWRuJ3QgbWF0Y2ggYW55IHJ1bGVzLCB3ZSdyZSBkb25lLgotICAgIGlmIChtX21hdGNo
ZWRSdWxlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFNvcnQgdGhlIHNl
dCBvZiBtYXRjaGVkIHJ1bGVzLgotICAgIHNvcnRNYXRjaGVkUnVsZXMoKTsKLQotICAgIC8vIE5v
dyB0cmFuc2ZlciB0aGUgc2V0IG9mIG1hdGNoZWQgcnVsZXMgb3ZlciB0byBvdXIgbGlzdCBvZiBk
ZWNscy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXRjaGVkUnVsZXMuc2l6ZSgp
OyBpKyspCi0gICAgICAgIGFkZE1hdGNoZWREZWNsYXJhdGlvbihtX21hdGNoZWRSdWxlc1tpXS0+
cnVsZSgpLT5kZWNsYXJhdGlvbigpKTsKKyAgICBzb3J0QW5kVHJhbnNmZXJNYXRjaGVkUnVsZXMo
ZmFsc2UpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hdGNoUGFnZVJ1bGVzRm9yTGlz
dChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiBydWxlcywgYm9vbCBpc0xlZnRQYWdlLCBib29sIGlz
Rmlyc3RQYWdlLCBjb25zdCBTdHJpbmcmIHBhZ2VOYW1lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKaW5kZXggNGFjOWU3OGRiZTI2MGFiOWVjYzFmMDQxN2U0ZmJlYzE5NzlmZDQy
Yi4uNzJhMjNiMjE1ZDBlNjE1YzM4NzFlZjYxODQxNTViOWRiNzc0YjgwYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCkBAIC02NCw2ICs2NCw3IEBAIGNsYXNzIE1lZGlhUXVl
cnlFdmFsdWF0b3I7CiBjbGFzcyBOb2RlOwogY2xhc3MgUnVsZURhdGE7CiBjbGFzcyBSdWxlU2V0
OworY2xhc3MgU2NvcGVkUnVsZVNldHM7CiBjbGFzcyBTZXR0aW5nczsKIGNsYXNzIFN0eWxlSW1h
Z2U7CiBjbGFzcyBTdHlsZVNoZWV0OwpAQCAtODksMTYgKzkwLDIxIEBAIHB1YmxpYzoKIGNsYXNz
IENTU1N0eWxlU2VsZWN0b3IgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1N0eWxlU2Vs
ZWN0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBDU1NTdHlsZVNl
bGVjdG9yKERvY3VtZW50KiwgU3R5bGVTaGVldExpc3QqIGF1dGhvclNoZWV0cywgQ1NTU3R5bGVT
aGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAotICAgICAgICAgICAgICAgICAgICAgQ1NTU3R5bGVT
aGVldCogcGFnZVVzZXJTaGVldCwgY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+
KiBwYWdlR3JvdXBVc2VyU2hlZXRzLCBjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0eWxlU2hlZXQ+
ID4qIGRvY3VtZW50VXNlclNoZWV0cywKLSAgICAgICAgICAgICAgICAgICAgIGJvb2wgc3RyaWN0
UGFyc2luZywgYm9vbCBtYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpOworICAgIENTU1N0eWxlU2Vs
ZWN0b3IoCisgICAgICAgIERvY3VtZW50KiwKKyAgICAgICAgU3R5bGVTaGVldExpc3QqIGF1dGhv
clNoZWV0cywKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogbWFwcGVkRWxlbWVudFNoZWV0LAorICAg
ICAgICBDU1NTdHlsZVNoZWV0KiBwYWdlVXNlclNoZWV0LAorICAgICAgICBjb25zdCBWZWN0b3I8
UmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4qIHBhZ2VHcm91cFVzZXJTaGVldHMsCisgICAgICAgIGNv
bnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiogZG9jdW1lbnRVc2VyU2hlZXRzLAor
ICAgICAgICBib29sIHN0cmljdFBhcnNpbmcsCisgICAgICAgIGJvb2wgbWF0Y2hBdXRob3JBbmRV
c2VyU3R5bGVzKTsKICAgICB+Q1NTU3R5bGVTZWxlY3RvcigpOwogICAgIAogICAgIC8vIFVzaW5n
IHRoZXNlIGR1cmluZyB0cmVlIHdhbGsgd2lsbCBhbGxvdyBzdHlsZSBzZWxlY3RvciB0byBvcHRp
bWl6ZSBjaGlsZCBhbmQgZGVzY2VuZGFudCBzZWxlY3RvciBsb29rdXBzLgogICAgIHZvaWQgcHVz
aFBhcmVudChFbGVtZW50KiBwYXJlbnQpOwogICAgIHZvaWQgcG9wUGFyZW50KEVsZW1lbnQqIHBh
cmVudCk7CiAKLQogICAgIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IHN0eWxlRm9yRWxlbWVudChF
bGVtZW50KiwgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gMCwgYm9vbCBhbGxvd1NoYXJpbmcg
PSB0cnVlLCBib29sIHJlc29sdmVGb3JSb290RGVmYXVsdCA9IGZhbHNlLCBib29sIG1hdGNoVmlz
aXRlZFBzZXVkb0NsYXNzID0gZmFsc2UpOwogICAgIAogICAgIHZvaWQga2V5ZnJhbWVTdHlsZXNG
b3JBbmltYXRpb24oRWxlbWVudCosIGNvbnN0IFJlbmRlclN0eWxlKiwgS2V5ZnJhbWVMaXN0Jik7
CkBAIC0yMjMsMTIgKzIyOSwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgYWRkTWF0Y2hlZFJ1bGUo
Y29uc3QgUnVsZURhdGEqIHJ1bGUpIHsgbV9tYXRjaGVkUnVsZXMuYXBwZW5kKHJ1bGUpOyB9CiAg
ICAgdm9pZCBhZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
KTsKIAotICAgIHZvaWQgbWF0Y2hSdWxlcyhSdWxlU2V0KiwgaW50JiBmaXJzdFJ1bGVJbmRleCwg
aW50JiBsYXN0UnVsZUluZGV4LCBib29sIGluY2x1ZGVFbXB0eVJ1bGVzKTsKLSAgICB2b2lkIG1h
dGNoUnVsZXNGb3JMaXN0KGNvbnN0IFZlY3RvcjxSdWxlRGF0YT4qLCBpbnQmIGZpcnN0UnVsZUlu
ZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMpOworICAgIC8v
IG1hdGNoQXV0aG9yUnVsZXM6IE1hdGNoIGFsbCBnbG9iYWwgYW5kIGFwcGxpY2FibGUgc2NvcGVk
IGF1dGhvci1kZWZpbmVkIHJ1bGVzLgorICAgIHZvaWQgbWF0Y2hBdXRob3JSdWxlcyhpbnQmIGZp
cnN0UnVsZUluZGV4LCBpbnQmIGxhc3RSdWxlSW5kZXgsIGJvb2wgaW5jbHVkZUVtcHR5UnVsZXMp
OworICAgIC8vIG1hdGNoUnVsZXM6IG1hdGNoZXMgdnMuIGFsbCBydWxlcyBpbiB0aGUgcGFzc2Vk
LWluIFJ1bGVTZXQuCisgICAgdm9pZCBtYXRjaFJ1bGVzR2xvYmFsbHkoUnVsZVNldCosIGludCYg
Zmlyc3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxl
cyk7CisgICAgLy8gSW1wbGVtZW50YXRpb24gbWV0aG9kczoKKyAgICB2b2lkIG1hdGNoUnVsZVNl
dChSdWxlU2V0KiwgY29uc3QgRWxlbWVudCosIGludCYgZmlyc3RSdWxlSW5kZXgsIGludCYgbGFz
dFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7CisgICAgdm9pZCBtYXRjaFJ1bGVz
Rm9yTGlzdChjb25zdCBWZWN0b3I8UnVsZURhdGE+KiwgY29uc3QgRWxlbWVudCosIGludCYgZmly
c3RSdWxlSW5kZXgsIGludCYgbGFzdFJ1bGVJbmRleCwgYm9vbCBpbmNsdWRlRW1wdHlSdWxlcyk7
CiAgICAgYm9vbCBmYXN0UmVqZWN0U2VsZWN0b3IoY29uc3QgUnVsZURhdGEmKSBjb25zdDsKLSAg
ICB2b2lkIHNvcnRNYXRjaGVkUnVsZXMoKTsKLSAgICAKLSAgICBib29sIGNoZWNrU2VsZWN0b3Io
Y29uc3QgUnVsZURhdGEmKTsKKyAgICB2b2lkIHNvcnRBbmRUcmFuc2Zlck1hdGNoZWRSdWxlcyhi
b29sIGNvbGxlY3RSdWxlc09ubHkpOworCisgICAgYm9vbCBjaGVja1NlbGVjdG9yKGNvbnN0IFJ1
bGVEYXRhJiwgY29uc3QgRWxlbWVudCopOwogCiAgICAgdGVtcGxhdGUgPGJvb2wgZmlyc3RQYXNz
PgogICAgIHZvaWQgYXBwbHlEZWNsYXJhdGlvbnMoYm9vbCBpbXBvcnRhbnQsIGludCBzdGFydElu
ZGV4LCBpbnQgZW5kSW5kZXgpOwpAQCAtMjQwLDE1ICsyNTEsMTcgQEAgcHJpdmF0ZToKICAgICBi
b29sIGlzRmlyc3RQYWdlKGludCBwYWdlSW5kZXgpIGNvbnN0OwogICAgIFN0cmluZyBwYWdlTmFt
ZShpbnQgcGFnZUluZGV4KSBjb25zdDsKICAgICAKLSAgICBPd25QdHI8UnVsZVNldD4gbV9hdXRo
b3JTdHlsZTsKKyAgICBPd25QdHI8UnVsZVNldD4gbV9nbG9iYWxBdXRob3JTdHlsZXM7CisgICAg
T3duUHRyPFNjb3BlZFJ1bGVTZXRzPiBtX3Njb3BlZEF1dGhvclN0eWxlczsKICAgICBPd25QdHI8
UnVsZVNldD4gbV91c2VyU3R5bGU7CiAKICAgICBGZWF0dXJlcyBtX2ZlYXR1cmVzOwogCiAgICAg
c3RydWN0IFBhcmVudFN0YWNrRnJhbWUgewogICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKCkgeyB9
Ci0gICAgICAgIFBhcmVudFN0YWNrRnJhbWUoRWxlbWVudCogZWxlbWVudCkgOiBlbGVtZW50KGVs
ZW1lbnQpIHsgfQorICAgICAgICBQYXJlbnRTdGFja0ZyYW1lKEVsZW1lbnQqIGVsZW1lbnQpIDog
ZWxlbWVudChlbGVtZW50KSwgY2xvc2VzdFN0eWxlU2NvcGVGcmFtZSgwKSB7IH0KICAgICAgICAg
RWxlbWVudCogZWxlbWVudDsKKyAgICAgICAgUGFyZW50U3RhY2tGcmFtZSogY2xvc2VzdFN0eWxl
U2NvcGVGcmFtZTsKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkLCA0PiBpZGVudGlmaWVySGFzaGVz
OwogICAgIH07CiAgICAgVmVjdG9yPFBhcmVudFN0YWNrRnJhbWU+IG1fcGFyZW50U3RhY2s7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKaW5kZXggMjdjMDFlMzYxMmY1YmJhNjljMTg3
NzA4Y2VmN2ZiZjE3Njc2ZWE2NS4uY2NhNWJhZTRkYjQ3ZGViMWU3OGJmZGI0YWY5Y2E2OTk0M2Y3
MmYxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcApAQCAtMjM2LDI0ICsyMzYs
MjYgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKQogICAg
ICAgICBvd25lci0+c3RhcnRMb2FkaW5nRHluYW1pY1NoZWV0KCk7CiB9CiAKLURvY3VtZW50KiBD
U1NTdHlsZVNoZWV0Ojpkb2N1bWVudCgpCitOb2RlKiBDU1NTdHlsZVNoZWV0OjpmaW5kT3duZXJO
b2RlKCkgY29uc3QKIHsKLSAgICBTdHlsZUJhc2UqIHN0eWxlT2JqZWN0ID0gdGhpczsKLSAgICB3
aGlsZSAoc3R5bGVPYmplY3QpIHsKKyAgICBmb3IgKGNvbnN0IFN0eWxlQmFzZSogc3R5bGVPYmpl
Y3QgPSB0aGlzOyBzdHlsZU9iamVjdDsgc3R5bGVPYmplY3QgPSBzdHlsZU9iamVjdC0+cGFyZW50
KCkpIHsKICAgICAgICAgaWYgKHN0eWxlT2JqZWN0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAg
ICAgICAgICAgTm9kZSogb3duZXJOb2RlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KHN0
eWxlT2JqZWN0KS0+b3duZXJOb2RlKCk7CisgICAgICAgICAgICBOb2RlKiBvd25lck5vZGUgPSBz
dGF0aWNfY2FzdDxjb25zdCBDU1NTdHlsZVNoZWV0Kj4oc3R5bGVPYmplY3QpLT5vd25lck5vZGUo
KTsKICAgICAgICAgICAgIGlmIChvd25lck5vZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG93
bmVyTm9kZS0+ZG9jdW1lbnQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gb3duZXJOb2RlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChzdHlsZU9iamVjdC0+aXNSdWxlKCkpCi0gICAgICAgICAg
ICBzdHlsZU9iamVjdCA9IHN0YXRpY19jYXN0PENTU1J1bGUqPihzdHlsZU9iamVjdCktPnBhcmVu
dFN0eWxlU2hlZXQoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVPYmplY3QgPSBz
dHlsZU9iamVjdC0+cGFyZW50KCk7CiAgICAgfQotCiAgICAgcmV0dXJuIDA7CiB9CiAKK0RvY3Vt
ZW50KiBDU1NTdHlsZVNoZWV0Ojpkb2N1bWVudCgpCit7CisgICAgTm9kZSogb3duZXJOb2RlID0g
ZmluZE93bmVyTm9kZSgpOworCisgICAgcmV0dXJuIG93bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9j
dW1lbnQoKSA6IDA7Cit9CisKKwogdm9pZCBDU1NTdHlsZVNoZWV0OjpzdHlsZVNoZWV0Q2hhbmdl
ZCgpCiB7CiAgICAgU3R5bGVCYXNlKiByb290ID0gdGhpczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5oCmluZGV4IDM1YTQ1MTAyZDFlYjZiMmQ2OTJjZGIxNDE1NTNjZmM5MTFlN2I4N2MuLmU0
YjVhMGJkNmU3OGMyY2NkOTgwZmQzYTZmOTY4YzE3MDRhMTNiODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1N0eWxlU2hlZXQuaApAQCAtODgsNiArODgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGNoZWNrTG9hZGVkKCk7CiAgICAgdm9pZCBzdGFydExvYWRpbmdEeW5hbWljU2hlZXQoKTsKIAor
ICAgIE5vZGUqIGZpbmRPd25lck5vZGUoKSBjb25zdDsKICAgICBEb2N1bWVudCogZG9jdW1lbnQo
KTsKIAogICAgIGNvbnN0IFN0cmluZyYgY2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcnNl
dDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcAppbmRleCBjOWRlNjE4ZDk4
NmY1NGZkODcwOTk5MTVhNjRkZTdkZmZhOTc4Y2IxLi5lYTg4OGJmNjA1M2ZkZWNlYmQwM2M4YzZi
YWUzNmM3MzRlYmU1NTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JD
aGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVja2VyLmNwcApA
QCAtMTQ0LDcgKzE0NCw3IEBAIEVJbnNpZGVMaW5rIFNlbGVjdG9yQ2hlY2tlcjo6ZGV0ZXJtaW5l
TGlua1N0YXRlU2xvd0Nhc2UoRWxlbWVudCogZWxlbWVudCkgY29uc3QKICNlbmRpZgogfQogCi1i
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVt
ZW50KiBlbGVtZW50LCBib29sIGlzRmFzdENoZWNrYWJsZVNlbGVjdG9yKSBjb25zdAorYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgRWxlbWVudCogc2NvcGUsIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0
b3IpIGNvbnN0CiB7CiAgICAgUHNldWRvSWQgZHluYW1pY1BzZXVkbyA9IE5PUFNFVURPOwogICAg
IGlmIChpc0Zhc3RDaGVja2FibGVTZWxlY3RvciAmJiAhZWxlbWVudC0+aXNTVkdFbGVtZW50KCkp
IHsKQEAgLTE1NiwxMyArMTU2LDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGVsZW1lbnQsIGJvb2wgaXNGCiAgICAgICAg
ICAgICBpZiAoIShlbGVtZW50LT5oYXNJRCgpICYmIGVsZW1lbnQtPmlkRm9yU3R5bGVSZXNvbHV0
aW9uKCkgPT0gc2VsLT52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhc3RDaGVja1NlbGVjdG9yKHNlbCwgZWxlbWVudCk7
CisgICAgICAgIHJldHVybiBmYXN0Q2hlY2tTZWxlY3RvcihzZWwsIGVsZW1lbnQsIHNjb3BlKTsK
ICAgICB9Ci0gICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2VsLCBlbGVtZW50LCBkeW5hbWljUHNl
dWRvLCBmYWxzZSwgZmFsc2UpID09IFNlbGVjdG9yTWF0Y2hlczsKKyAgICByZXR1cm4gY2hlY2tT
ZWxlY3RvcihzZWwsIGVsZW1lbnQsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZmFsc2Up
ID09IFNlbGVjdG9yTWF0Y2hlczsKIH0KIAogbmFtZXNwYWNlIHsKLSAgICAKKwogaW5saW5lIGJv
b2wgc2VsZWN0b3JUYWdNYXRjaGVzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IENTU1Nl
bGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBpZiAoIXNlbGVjdG9yLT5oYXNUYWcoKSkKQEAgLTE3
MywxMiArMTczLDEyIEBAIGlubGluZSBib29sIHNlbGVjdG9yVGFnTWF0Y2hlcyhjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lc3BhY2VVUkkgPSBzZWxlY3Rvci0+dGFnKCkubmFtZXNwYWNlVVJJKCk7CiAg
ICAgcmV0dXJuIG5hbWVzcGFjZVVSSSA9PSBzdGFyQXRvbSB8fCBuYW1lc3BhY2VVUkkgPT0gZWxl
bWVudC0+bmFtZXNwYWNlVVJJKCk7CiB9Ci0KKyAgICAKIHRlbXBsYXRlIDxib29sIGNoZWNrVmFs
dWUoY29uc3QgRWxlbWVudCosIEF0b21pY1N0cmluZ0ltcGwqKT4KLWlubGluZSBib29sIGZhc3RD
aGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2VsZWN0b3IsIGNvbnN0IEVs
ZW1lbnQqJiBlbGVtZW50LCBjb25zdCBDU1NTZWxlY3RvciomIHRvcENoaWxkT3JTdWJzZWxlY3Rv
ciwgY29uc3QgRWxlbWVudComIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkKK2lu
bGluZSBib29sIGZhc3RDaGVja1NpbmdsZVNlbGVjdG9yKGNvbnN0IENTU1NlbGVjdG9yKiYgc2Vs
ZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiBlbGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSwgY29u
c3QgQ1NTU2VsZWN0b3IqJiB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIGNvbnN0IEVsZW1lbnQqJiB0
b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpCiB7CiAgICAgQXRvbWljU3RyaW5nSW1w
bCogdmFsdWUgPSBzZWxlY3Rvci0+dmFsdWUoKS5pbXBsKCk7Ci0gICAgZm9yICg7IGVsZW1lbnQ7
IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCkpIHsKKyAgICBmb3IgKDsgZWxlbWVu
dDsgZWxlbWVudCA9IChlbGVtZW50ID09IHNjb3BlKSA/IDAgOiBlbGVtZW50LT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgaWYgKGNoZWNrVmFsdWUoZWxlbWVudCwgdmFsdWUpICYmIHNlbGVj
dG9yVGFnTWF0Y2hlcyhlbGVtZW50LCBzZWxlY3RvcikpIHsKICAgICAgICAgICAgIGlmIChzZWxl
Y3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudCkKICAgICAgICAgICAg
ICAgICB0b3BDaGlsZE9yU3Vic2VsZWN0b3IgPSAwOwpAQCAtMjIzLDQwICsyMjMsNDAgQEAgaW5s
aW5lIGJvb2wgY2hlY2tUYWdWYWx1ZShjb25zdCBFbGVtZW50KiwgQXRvbWljU3RyaW5nSW1wbCop
CiB7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0gICAgCi19CiAKLWJvb2wgU2VsZWN0b3JDaGVja2Vy
OjpmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBDU1NTZWxlY3Rvciogc2VsZWN0b3IsIGNvbnN0IEVs
ZW1lbnQqIGVsZW1lbnQpCit9IC8vIG5hbWVzcGFjZQorCitib29sIFNlbGVjdG9yQ2hlY2tlcjo6
ZmFzdENoZWNrU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yLCBjb25zdCBFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSkKIHsKICAgICBBU1NFUlQoaXNGYXN0
Q2hlY2thYmxlU2VsZWN0b3Ioc2VsZWN0b3IpKTsKLSAgICAKKwogICAgIC8vIFRoZSB0b3Agc2Vs
ZWN0b3IgcmVxdWlyZXMgdGFnIGNoZWNrIG9ubHkgYXMgcnVsZSBoYXNoZXMgaGF2ZSBhbHJlYWR5
IGhhbmRsZWQgaWQgYW5kIGNsYXNzIG1hdGNoZXMuCiAgICAgaWYgKCFzZWxlY3RvclRhZ01hdGNo
ZXMoZWxlbWVudCwgc2VsZWN0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAg
ICBjb25zdCBDU1NTZWxlY3RvciogdG9wQ2hpbGRPclN1YnNlbGVjdG9yID0gMDsKICAgICBjb25z
dCBFbGVtZW50KiB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQgPSAwOwogICAgIGlm
IChzZWxlY3Rvci0+cmVsYXRpb24oKSA9PSBDU1NTZWxlY3Rvcjo6Q2hpbGQgfHwgc2VsZWN0b3It
PnJlbGF0aW9uKCkgPT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVjdG9yKQogICAgICAgICB0b3BDaGls
ZE9yU3Vic2VsZWN0b3IgPSBzZWxlY3RvcjsKLSAgICAKKwogICAgIGlmIChzZWxlY3Rvci0+cmVs
YXRpb24oKSAhPSBDU1NTZWxlY3Rvcjo6U3ViU2VsZWN0b3IpCiAgICAgICAgIGVsZW1lbnQgPSBl
bGVtZW50LT5wYXJlbnRFbGVtZW50KCk7Ci0gICAgCisKICAgICBzZWxlY3RvciA9IHNlbGVjdG9y
LT50YWdIaXN0b3J5KCk7Ci0gICAgCisKICAgICAvLyBXZSBrbm93IHRoaXMgY29tcG91bmQgc2Vs
ZWN0b3IgaGFzIGRlc2NlbmRhbnQsIGNoaWxkIGFuZCBzdWJzZWxlY3RvciBjb21iaW5hdG9ycyBv
bmx5IGFuZCBhbGwgY29tcG9uZW50cyBhcmUgc2ltcGxlLgogICAgIHdoaWxlIChzZWxlY3Rvcikg
ewogICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5tX21hdGNoKSB7CiAgICAgICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OkNsYXNzOgotICAgICAgICAgICAgaWYgKCFmYXN0Q2hlY2tTaW5nbGVTZWxlY3Rv
cjxjaGVja0NsYXNzVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0
b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAo
IWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrQ2xhc3NWYWx1ZT4oc2VsZWN0b3IsIGVsZW1l
bnQsIHNjb3BlLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1h
dGNoRWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OklkOgotICAgICAgICAgICAgaWYgKCFm
YXN0Q2hlY2tTaW5nbGVTZWxlY3RvcjxjaGVja0lEVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCB0
b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkp
CisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrSURWYWx1ZT4o
c2VsZWN0b3IsIGVsZW1lbnQsIHNjb3BlLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxk
T3JTdWJzZWxlY3Rvck1hdGNoRWxlbWVudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Ok5vbmU6Ci0g
ICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVjdG9yPGNoZWNrVGFnVmFsdWU+KHNl
bGVjdG9yLCBlbGVtZW50LCB0b3BDaGlsZE9yU3Vic2VsZWN0b3IsIHRvcENoaWxkT3JTdWJzZWxl
Y3Rvck1hdGNoRWxlbWVudCkpCisgICAgICAgICAgICBpZiAoIWZhc3RDaGVja1NpbmdsZVNlbGVj
dG9yPGNoZWNrVGFnVmFsdWU+KHNlbGVjdG9yLCBlbGVtZW50LCBzY29wZSwgdG9wQ2hpbGRPclN1
YnNlbGVjdG9yLCB0b3BDaGlsZE9yU3Vic2VsZWN0b3JNYXRjaEVsZW1lbnQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0
OgpAQCAtMjgyLDcgKzI4MiwxNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6aXNGYXN0Q2hlY2th
YmxlU2VsZWN0b3IoY29uc3QgQ1NTU2VsZWN0b3IqIHNlbGVjdG9yKQogLy8gKiBTZWxlY3Rvck1h
dGNoZXMgICAgICAgICAtIHRoZSBzZWxlY3RvciBtYXRjaGVzIHRoZSBlbGVtZW50IGUKIC8vICog
U2VsZWN0b3JGYWlsc0xvY2FsbHkgICAgLSB0aGUgc2VsZWN0b3IgZmFpbHMgZm9yIHRoZSBlbGVt
ZW50IGUKIC8vICogU2VsZWN0b3JGYWlsc0NvbXBsZXRlbHkgLSB0aGUgc2VsZWN0b3IgZmFpbHMg
Zm9yIGUgYW5kIGFueSBzaWJsaW5nIG9yIGFuY2VzdG9yIG9mIGUKLVNlbGVjdG9yQ2hlY2tlcjo6
U2VsZWN0b3JNYXRjaCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
IHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxl
Y3RvciwgYm9vbCBlbmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiBlbGVtZW50U3R5bGUsIFJl
bmRlclN0eWxlKiBlbGVtZW50UGFyZW50U3R5bGUpIGNvbnN0CitTZWxlY3RvckNoZWNrZXI6OlNl
bGVjdG9yTWF0Y2ggU2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKAorICAgIENTU1NlbGVj
dG9yKiBzZWwsCisgICAgRWxlbWVudCogZSwKKyAgICBjb25zdCBFbGVtZW50KiBzY29wZSwKKyAg
ICBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywKKyAgICBib29sIGlzU3ViU2VsZWN0b3IsCisgICAg
Ym9vbCBlbmNvdW50ZXJlZExpbmssCisgICAgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwKKyAg
ICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAogewogI2lmIEVOQUJMRShT
VkcpCiAgICAgLy8gU3BlYzogQ1NTMiBzZWxlY3RvcnMgY2Fubm90IGJlIGFwcGxpZWQgdG8gdGhl
IChjb25jZXB0dWFsbHkpIGNsb25lZCBET00gdHJlZQpAQCAtMjkwLDI0ICsyOTgsMjggQEAgU2Vs
ZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsLAogICAgIGlmIChlLT5pc1NWR1NoYWRvd1Jvb3QoKSkKICAgICAg
ICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogI2VuZGlmCi0gICAgCisKICAgICAv
LyBmaXJzdCBzZWxlY3RvciBoYXMgdG8gbWF0Y2gKLSAgICBpZiAoIWNoZWNrT25lU2VsZWN0b3Io
c2VsLCBlLCBkeW5hbWljUHNldWRvLCBpc1N1YlNlbGVjdG9yLCBlbmNvdW50ZXJlZExpbmssIGVs
ZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVudFN0eWxlKSkKKyAgICBpZiAoIWNoZWNrT25lU2VsZWN0
b3Ioc2VsLCBlLCBzY29wZSwgZHluYW1pY1BzZXVkbywgaXNTdWJTZWxlY3RvciwgZW5jb3VudGVy
ZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJlbnRTdHlsZSkpCiAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzTG9jYWxseTsKLSAgICAKKwogICAgIC8vIFRoZSByZXN0IG9mIHRoZSBz
ZWxlY3RvcnMgaGFzIHRvIG1hdGNoCiAgICAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uIHJlbGF0aW9u
ID0gc2VsLT5yZWxhdGlvbigpOwotICAgIAorCiAgICAgLy8gUHJlcGFyZSBuZXh0IHNlbAogICAg
IHNlbCA9IHNlbC0+dGFnSGlzdG9yeSgpOwogICAgIGlmICghc2VsKQogICAgICAgICByZXR1cm4g
U2VsZWN0b3JNYXRjaGVzOwotICAgIAotICAgIGlmIChyZWxhdGlvbiAhPSBDU1NTZWxlY3Rvcjo6
U3ViU2VsZWN0b3IpCisKKyAgICBpZiAocmVsYXRpb24gIT0gQ1NTU2VsZWN0b3I6OlN1YlNlbGVj
dG9yKSB7CiAgICAgICAgIC8vIEJhaWwtb3V0IGlmIHRoaXMgc2VsZWN0b3IgaXMgaXJyZWxldmFu
dCBmb3IgdGhlIHBzZXVkb1N0eWxlCiAgICAgICAgIGlmIChtX3BzZXVkb1N0eWxlICE9IE5PUFNF
VURPICYmIG1fcHNldWRvU3R5bGUgIT0gZHluYW1pY1BzZXVkbykKICAgICAgICAgICAgIHJldHVy
biBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKLSAgICAKKyAgICAgICAgLy8gRG9uJ3QgZ28gcGFz
dCB0aGUgc2NvcGluZyBlbGVtZW50IChpZiBhbnkpLgorICAgICAgICBpZiAoZSA9PSBzY29wZSkK
KyAgICAgICAgICAgIHJldHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKKyAgICB9CisKICAg
ICAvLyBDaGVjayBmb3IgbmVzdGVkIGxpbmtzLgogICAgIGlmIChtX2lzTWF0Y2hpbmdWaXNpdGVk
UHNldWRvQ2xhc3MgJiYgIWlzU3ViU2VsZWN0b3IpIHsKICAgICAgICAgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSA9IGVsZW1lbnRTdHlsZSA/IGVsZW1lbnRTdHlsZSA6IGUtPnJlbmRlclN0eWxl
KCk7CkBAIC0zMTgsMjkgKzMzMCwzMSBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2gg
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAg
ICAgICAgICAgZW5jb3VudGVyZWRMaW5rID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KLSAgICAK
KwogICAgIHN3aXRjaCAocmVsYXRpb24pIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpEZXNjZW5k
YW50OgotICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICB3aGlsZSAoZSAhPSBzY29wZSkg
ewogICAgICAgICAgICAgQ29udGFpbmVyTm9kZSogbiA9IGUtPnBhcmVudE5vZGUoKTsKICAgICAg
ICAgICAgIGlmICghbiB8fCAhbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzQ29tcGxldGVseTsKICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obik7Ci0gICAgICAgICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tT
ZWxlY3RvcihzZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNlLCBlbmNvdW50ZXJlZExpbmspOwor
ICAgICAgICAgICAgU2VsZWN0b3JNYXRjaCBtYXRjaCA9IGNoZWNrU2VsZWN0b3Ioc2VsLCBlLCBz
Y29wZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CiAgICAgICAgICAg
ICBpZiAobWF0Y2ggIT0gU2VsZWN0b3JGYWlsc0xvY2FsbHkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG1hdGNoOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OkNoaWxkOiAKLSAgICAgICAgeworCisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6Q2hpbGQ6Cisg
ICAgICAgIGlmIChlICE9IHNjb3BlKSB7CiAgICAgICAgICAgICBDb250YWluZXJOb2RlKiBuID0g
ZS0+cGFyZW50Tm9kZSgpOwogICAgICAgICAgICAgaWYgKCFuIHx8ICFuLT5pc0VsZW1lbnROb2Rl
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5OwogICAg
ICAgICAgICAgZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIHJldHVy
biBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVk
TGluayk7CisgICAgICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKICAgICAgICAgfQotICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OkRpcmVjdEFkamFjZW50OgotICAgICAgICB7CisgICAgICAgIGJyZWFr
OworCisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RGlyZWN0QWRqYWNlbnQ6IHsKICAgICAgICAgICAg
IGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkgJiYgZS0+cGFyZW50Tm9kZSgpICYmIGUtPnBh
cmVudE5vZGUoKS0+aXNFbGVtZW50Tm9kZSgpKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxlbWVudFBhcmVudFN0eWxlIDogZS0+
cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwogICAgICAgICAgICAgICAgIGlmIChwYXJlbnRT
dHlsZSkKQEAgLTM1Myw4ICszNjcsOSBAQCBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yTWF0Y2gg
U2VsZWN0b3JDaGVja2VyOjpjaGVja1NlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIFNlbGVjdG9yRmFpbHNMb2NhbGx5OwogICAgICAgICAgICAgZSA9IHN0
YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKICAgICAgICAgICAgIG1faXNNYXRjaGluZ1Zpc2l0ZWRQ
c2V1ZG9DbGFzcyA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIGNoZWNrU2VsZWN0b3Ioc2Vs
LCBlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKKyAgICAgICAgICAg
IHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgc2NvcGUsIGR5bmFtaWNQc2V1ZG8sIGZhbHNl
LCBlbmNvdW50ZXJlZExpbmspOwogICAgICAgICB9CisKICAgICBjYXNlIENTU1NlbGVjdG9yOjpJ
bmRpcmVjdEFkamFjZW50OgogICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5ICYm
IGUtPnBhcmVudE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewog
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFN0eWxlID0gZWxlbWVudFN0eWxlID8gZWxl
bWVudFBhcmVudFN0eWxlIDogZS0+cGFyZW50Tm9kZSgpLT5yZW5kZXJTdHlsZSgpOwpAQCAtMzY5
LDI5ICszODQsMzAgQEAgU2VsZWN0b3JDaGVja2VyOjpTZWxlY3Rvck1hdGNoIFNlbGVjdG9yQ2hl
Y2tlcjo6Y2hlY2tTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLAogICAgICAgICAgICAgICAgIHJl
dHVybiBTZWxlY3RvckZhaWxzTG9jYWxseTsKICAgICAgICAgICAgIGUgPSBzdGF0aWNfY2FzdDxF
bGVtZW50Kj4obik7CiAgICAgICAgICAgICBtX2lzTWF0Y2hpbmdWaXNpdGVkUHNldWRvQ2xhc3Mg
PSBmYWxzZTsKLSAgICAgICAgICAgIFNlbGVjdG9yTWF0Y2ggbWF0Y2ggPSBjaGVja1NlbGVjdG9y
KHNlbCwgZSwgZHluYW1pY1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAg
ICAgICBTZWxlY3Rvck1hdGNoIG1hdGNoID0gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBk
eW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVyZWRMaW5rKTsKICAgICAgICAgICAgIGlmICht
YXRjaCAhPSBTZWxlY3RvckZhaWxzTG9jYWxseSkKICAgICAgICAgICAgICAgICByZXR1cm4gbWF0
Y2g7CiAgICAgICAgIH07CiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
U3ViU2VsZWN0b3I6CiAgICAgICAgIC8vIGEgc2VsZWN0b3IgaXMgaW52YWxpZCBpZiBzb21ldGhp
bmcgZm9sbG93cyBhIHBzZXVkby1lbGVtZW50CiAgICAgICAgIC8vIFdlIG1ha2UgYW4gZXhjZXB0
aW9uIGZvciBzY3JvbGxiYXIgcHNldWRvIGVsZW1lbnRzIGFuZCBhbGxvdyBhIHNldCBvZiBwc2V1
ZG8gY2xhc3NlcyAoYnV0IG5vdGhpbmcgZWxzZSkKICAgICAgICAgLy8gdG8gZm9sbG93IHRoZSBw
c2V1ZG8gZWxlbWVudHMuCi0gICAgICAgIGlmICgoZWxlbWVudFN0eWxlIHx8IG1faXNDb2xsZWN0
aW5nUnVsZXNPbmx5KSAmJiBkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIGR5bmFtaWNQc2V1
ZG8gIT0gU0VMRUNUSU9OCi0gICAgICAgICAgICAgJiYgISgoUmVuZGVyU2Nyb2xsYmFyOjpzY3Jv
bGxiYXJGb3JTdHlsZVJlc29sdmUoKSB8fCBkeW5hbWljUHNldWRvID09IFNDUk9MTEJBUl9DT1JO
RVIgfHwgZHluYW1pY1BzZXVkbyA9PSBSRVNJWkVSKSAmJiBzZWwtPm1fbWF0Y2ggPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzKSkKKyAgICAgICAgaWYgKChlbGVtZW50U3R5bGUgfHwgbV9pc0Nv
bGxlY3RpbmdSdWxlc09ubHkpICYmIGR5bmFtaWNQc2V1ZG8gIT0gTk9QU0VVRE8gJiYgZHluYW1p
Y1BzZXVkbyAhPSBTRUxFQ1RJT04gJiYKKyAgICAgICAgICAgICEoKFJlbmRlclNjcm9sbGJhcjo6
c2Nyb2xsYmFyRm9yU3R5bGVSZXNvbHZlKCkgfHwgZHluYW1pY1BzZXVkbyA9PSBTQ1JPTExCQVJf
Q09STkVSIHx8IGR5bmFtaWNQc2V1ZG8gPT0gUkVTSVpFUikgJiYgc2VsLT5tX21hdGNoID09IENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzcykpCiAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWls
c0NvbXBsZXRlbHk7Ci0gICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1p
Y1BzZXVkbywgdHJ1ZSwgZW5jb3VudGVyZWRMaW5rLCBlbGVtZW50U3R5bGUsIGVsZW1lbnRQYXJl
bnRTdHlsZSk7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2hhZG93RGVzY2VuZGFudDoKLSAgICAg
ICAgeworICAgICAgICByZXR1cm4gY2hlY2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWlj
UHNldWRvLCB0cnVlLCBlbmNvdW50ZXJlZExpbmssIGVsZW1lbnRTdHlsZSwgZWxlbWVudFBhcmVu
dFN0eWxlKTsKKworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlNoYWRvd0Rlc2NlbmRhbnQ6IHsKICAg
ICAgICAgICAgIE5vZGUqIHNoYWRvd0hvc3ROb2RlID0gZS0+c2hhZG93QW5jZXN0b3JOb2RlKCk7
CiAgICAgICAgICAgICBpZiAoc2hhZG93SG9zdE5vZGUgPT0gZSB8fCAhc2hhZG93SG9zdE5vZGUt
PmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gU2VsZWN0b3JGYWlsc0Nv
bXBsZXRlbHk7CiAgICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KHNoYWRvd0hv
c3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBjaGVja1NlbGVjdG9yKHNlbCwgZSwgZHluYW1p
Y1BzZXVkbywgZmFsc2UsIGVuY291bnRlcmVkTGluayk7CisgICAgICAgICAgICByZXR1cm4gY2hl
Y2tTZWxlY3RvcihzZWwsIGUsIHNjb3BlLCBkeW5hbWljUHNldWRvLCBmYWxzZSwgZW5jb3VudGVy
ZWRMaW5rKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBTZWxlY3RvckZh
aWxzQ29tcGxldGVseTsKIH0KIApAQCAtNDA1LDcgKzQyMSw3IEBAIHN0YXRpYyBIYXNoU2V0PEF0
b21pY1N0cmluZ0ltcGwqPiogY3JlYXRlSHRtbENhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZXNTZXQo
KQogICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgYXR0cmlidXRlcyBpbiBIVE1MIDQuMDEgd2l0
aCB2YWx1ZXMgbWFya2VkIGFzICJbQ0ldIiBvciBjYXNlLWluc2Vuc2l0aXZlCiAgICAgLy8gTW96
aWxsYSB0cmVhdHMgYWxsIG90aGVyIHZhbHVlcyBhcyBjYXNlLXNlbnNpdGl2ZSwgdGh1cyBzbyBk
byB3ZS4KICAgICBIYXNoU2V0PEF0b21pY1N0cmluZ0ltcGwqPiogYXR0clNldCA9IG5ldyBIYXNo
U2V0PEF0b21pY1N0cmluZ0ltcGwqPjsKLSAgICAKKwogICAgIGFkZExvY2FsTmFtZVRvU2V0KGF0
dHJTZXQsIGFjY2VwdF9jaGFyc2V0QXR0cik7CiAgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNl
dCwgYWNjZXB0QXR0cik7CiAgICAgYWRkTG9jYWxOYW1lVG9TZXQoYXR0clNldCwgYWxpZ25BdHRy
KTsKQEAgLTQ1MSw3ICs0NjcsNyBAQCBzdGF0aWMgSGFzaFNldDxBdG9taWNTdHJpbmdJbXBsKj4q
IGNyZWF0ZUh0bWxDYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVzU2V0KCkKICAgICBhZGRMb2NhbE5h
bWVUb1NldChhdHRyU2V0LCB2YWxpZ25BdHRyKTsKICAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRy
U2V0LCB2YWx1ZXR5cGVBdHRyKTsKICAgICBhZGRMb2NhbE5hbWVUb1NldChhdHRyU2V0LCB2bGlu
a0F0dHIpOwotICAgIAorCiAgICAgcmV0dXJuIGF0dHJTZXQ7CiB9CiAKQEAgLTQ2Niw3ICs0ODIs
NyBAQCBzdGF0aWMgYm9vbCBhdHRyaWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hlcyhBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSwgY29uc3QgUXVhbGlmaWVkTgogewogICAgIGlmIChzZWxlY3RvckF0dHIubG9j
YWxOYW1lKCkgIT0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCiAgICAgcmV0dXJuIHNlbGVjdG9yQXR0ci5wcmVmaXgoKSA9PSBzdGFyQXRvbSB8
fCBzZWxlY3RvckF0dHIubmFtZXNwYWNlVVJJKCkgPT0gYXR0cmlidXRlLT5uYW1lc3BhY2VVUkko
KTsKIH0KIApAQCAtNDc1LDM0ICs0OTEsMzMgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVN
YXRjaGVzKEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0KICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0cmlidXRlSXRlbS0+dmFsdWUoKTsKICAg
ICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAg
IHN3aXRjaCAobWF0Y2gpIHsKICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKICAgICAgICAg
aWYgKGNhc2VTZW5zaXRpdmUgPyBzZWxlY3RvclZhbHVlICE9IHZhbHVlIDogIWVxdWFsSWdub3Jp
bmdDYXNlKHNlbGVjdG9yVmFsdWUsIHZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDoKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gSWdub3JlIGVtcHR5IHNlbGVjdG9ycyBvciBzZWxlY3RvcnMgY29udGFp
bmluZyBzcGFjZXMKLSAgICAgICAgICAgIGlmIChzZWxlY3RvclZhbHVlLmNvbnRhaW5zKCcgJykg
fHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDog
eworICAgICAgICAvLyBJZ25vcmUgZW1wdHkgc2VsZWN0b3JzIG9yIHNlbGVjdG9ycyBjb250YWlu
aW5nIHNwYWNlcworICAgICAgICBpZiAoc2VsZWN0b3JWYWx1ZS5jb250YWlucygnICcpIHx8IHNl
bGVjdG9yVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOworICAgICAgICB3aGlsZSAodHJ1ZSkgewor
ICAgICAgICAgICAgc2l6ZV90IGZvdW5kUG9zID0gdmFsdWUuZmluZChzZWxlY3RvclZhbHVlLCBz
dGFydFNlYXJjaEF0LCBjYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgICAgIGlmIChmb3VuZFBvcyA9
PSBub3RGb3VuZCkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0U2VhcmNoQXQgPSAwOwotICAgICAgICAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgZm91bmRQb3MgPSB2YWx1ZS5maW5k
KHNlbGVjdG9yVmFsdWUsIHN0YXJ0U2VhcmNoQXQsIGNhc2VTZW5zaXRpdmUpOwotICAgICAgICAg
ICAgICAgIGlmIChmb3VuZFBvcyA9PSBub3RGb3VuZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGlmICghZm91bmRQb3MgfHwgdmFsdWVbZm91bmRQ
b3MgLSAxXSA9PSAnICcpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZW5kU3RyID0g
Zm91bmRQb3MgKyBzZWxlY3RvclZhbHVlLmxlbmd0aCgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoZW5kU3RyID09IHZhbHVlLmxlbmd0aCgpIHx8IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQotICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCi0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIE5vIG1hdGNo
LiBLZWVwIGxvb2tpbmcuCi0gICAgICAgICAgICAgICAgc3RhcnRTZWFyY2hBdCA9IGZvdW5kUG9z
ICsgMTsKKyAgICAgICAgICAgIGlmICghZm91bmRQb3MgfHwgdmFsdWVbZm91bmRQb3MgLSAxXSA9
PSAnICcpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBlbmRTdHIgPSBmb3VuZFBvcyArIHNl
bGVjdG9yVmFsdWUubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKGVuZFN0ciA9PSB2YWx1
ZS5sZW5ndGgoKSB8fCB2YWx1ZVtlbmRTdHJdID09ICcgJykKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7IC8vIFdlIGZvdW5kIGEgbWF0Y2guCiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gTm8gbWF0Y2guIEtlZXAgbG9va2lu
Zy4KKyAgICAgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7CiAgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkNvbnRhaW46CiAg
ICAgICAgIGlmICghdmFsdWUuY29udGFpbnMoc2VsZWN0b3JWYWx1ZSwgY2FzZVNlbnNpdGl2ZSkg
fHwgc2VsZWN0b3JWYWx1ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC01MjksNyArNTQ0LDcgQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaGVzKEF0dHJp
YnV0ZSogYXR0cmlidXRlSXRlbSwgQ1NTU2VsZWN0b3I6Ok1hdGNoIG0KICAgICBkZWZhdWx0Ogog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
NTM3LDQ1ICs1NTIsNTMgQEAgc3RhdGljIGJvb2wgYW55QXR0cmlidXRlTWF0Y2hlcyhOYW1lZE5v
ZGVNYXAqIGF0dHJpYnV0ZXMsIENTU1NlbGVjdG9yOjpNYXRjaCBtYXQKIHsKICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGF0dHJpYnV0ZXMtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQXR0
cmlidXRlKiBhdHRyaWJ1dGVJdGVtID0gYXR0cmlidXRlcy0+YXR0cmlidXRlSXRlbShpKTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVRdWFsaWZpZWROYW1lTWF0Y2hlcyhhdHRy
aWJ1dGVJdGVtLCBzZWxlY3RvckF0dHIpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
IAorCiAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZU1hdGNoZXMoYXR0cmlidXRlSXRlbSwgbWF0
Y2gsIHNlbGVjdG9yVmFsdWUsIGNhc2VTZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFNlbGVjdG9y
Q2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQ
c2V1ZG9JZCYgZHluYW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRl
cmVkTGluaywgUmVuZGVyU3R5bGUqIGVsZW1lbnRTdHlsZSwgUmVuZGVyU3R5bGUqIGVsZW1lbnRQ
YXJlbnRTdHlsZSkgY29uc3QKK2Jvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9y
KAorICAgIENTU1NlbGVjdG9yKiBzZWwsCisgICAgRWxlbWVudCogZSwKKyAgICBjb25zdCBFbGVt
ZW50KiBzY29wZSwKKyAgICBQc2V1ZG9JZCYgZHluYW1pY1BzZXVkbywKKyAgICBib29sIGlzU3Vi
U2VsZWN0b3IsCisgICAgYm9vbCBlbmNvdW50ZXJlZExpbmssCisgICAgUmVuZGVyU3R5bGUqIGVs
ZW1lbnRTdHlsZSwKKyAgICBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdAog
ewogICAgIEFTU0VSVChlKTsKICAgICBpZiAoIWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKKwogICAgIGlmICghc2VsZWN0b3JUYWdNYXRjaGVzKGUsIHNlbCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAKKwogICAgIGlmIChzZWwtPmhhc0F0dHJpYnV0ZSgpKSB7CiAgICAgICAg
IGlmIChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OkNsYXNzKQogICAgICAgICAgICAgcmV0
dXJuIGUtPmhhc0NsYXNzKCkgJiYgc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5jbGFz
c05hbWVzKCkuY29udGFpbnMoc2VsLT52YWx1ZSgpKTsKLSAgICAgICAgCisKICAgICAgICAgaWYg
KHNlbC0+bV9tYXRjaCA9PSBDU1NTZWxlY3Rvcjo6SWQpCiAgICAgICAgICAgICByZXR1cm4gZS0+
aGFzSUQoKSAmJiBlLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpID09IHNlbC0+dmFsdWUoKTsKLSAg
ICAgICAgCisKICAgICAgICAgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ciA9IHNlbC0+YXR0cmli
dXRlKCk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIGNhc2Ugd2Vy
ZSBlbGVtZW50U3R5bGUgaXMgMC4KICAgICAgICAgaWYgKGVsZW1lbnRTdHlsZSAmJiAoIWUtPmlz
U3R5bGVkRWxlbWVudCgpIHx8ICghc3RhdGljX2Nhc3Q8U3R5bGVkRWxlbWVudCo+KGUpLT5pc01h
cHBlZEF0dHJpYnV0ZShhdHRyKSAmJiBhdHRyICE9IHR5cGVBdHRyICYmIGF0dHIgIT0gcmVhZG9u
bHlBdHRyKSkpCiAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlBdHRyaWJ1
dGVTZWxlY3RvcnMoKTsgLy8gU3BlY2lhbC1jYXNlIHRoZSAidHlwZSIgYW5kICJyZWFkb25seSIg
YXR0cmlidXRlcyBzbyBpbnB1dCBmb3JtIGNvbnRyb2xzIGNhbiBzaGFyZSBzdHlsZS4KLSAgICAg
ICAgCisKICAgICAgICAgTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVzID0gZS0+YXR0cmlidXRlcyh0
cnVlKTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGVzKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICAKKwogICAgICAgICBib29sIGNhc2VTZW5zaXRpdmUgPSAhbV9kb2N1bWVudElz
SFRNTCB8fCAhaHRtbEF0dHJpYnV0ZUhhc0Nhc2VJbnNlbnNpdGl2ZVZhbHVlKGF0dHIpOwotICAg
ICAgICAKKwogICAgICAgICBpZiAoIWFueUF0dHJpYnV0ZU1hdGNoZXMoYXR0cmlidXRlcywgc3Rh
dGljX2Nhc3Q8Q1NTU2VsZWN0b3I6Ok1hdGNoPihzZWwtPm1fbWF0Y2gpLCBhdHRyLCBzZWwtPnZh
bHVlKCksIGNhc2VTZW5zaXRpdmUpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTU4OSw4ICs2MTIsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3Rv
cihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAg
ICAgIC8vIHJlc3RyaWN0aW9uIGluIENTUzMsIGJ1dCBpdCBpcywgc28gbGV0J3MgaG9ub3IgaXQu
CiAgICAgICAgICAgICAgICAgLy8gdGhlIHBhcnNlciBlbmZvcmNlcyB0aGF0IHRoaXMgbmV2ZXIg
b2NjdXJzCiAgICAgICAgICAgICAgICAgQVNTRVJUKHN1YlNlbC0+cHNldWRvVHlwZSgpICE9IENT
U1NlbGVjdG9yOjpQc2V1ZG9Ob3QpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IGlmICghY2hlY2tPbmVTZWxlY3RvcihzdWJTZWwsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVu
Y291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpKQorCisgICAg
ICAgICAgICAgICAgaWYgKCFjaGVja09uZVNlbGVjdG9yKHN1YlNlbCwgZSwgc2NvcGUsIGR5bmFt
aWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFy
ZW50U3R5bGUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIGlmIChkeW5hbWljUHNldWRvICE9IE5PUFNFVURPICYmIChSZW5k
ZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZvclN0eWxlUmVzb2x2ZSgpIHx8IGR5bmFtaWNQc2V1ZG8g
PT0gU0NST0xMQkFSX0NPUk5FUiB8fCBkeW5hbWljUHNldWRvID09IFJFU0laRVIpKSB7CkBAIC02
MDEsMzcgKzYyNCwzNSBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgaWYg
KHNlbC0+cHNldWRvVHlwZSgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9XaW5kb3dJbmFjdGl2ZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gIW1fZG9jdW1lbnQtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPmlzQWN0aXZlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gTm9y
bWFsIGVsZW1lbnQgcHNldWRvIGNsYXNzIGNoZWNraW5nLgogICAgICAgICBzd2l0Y2ggKHNlbC0+
cHNldWRvVHlwZSgpKSB7Ci0gICAgICAgICAgICAvLyBQc2V1ZG8gY2xhc3NlczoKKyAgICAgICAg
Ly8gUHNldWRvIGNsYXNzZXM6CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vdDoK
ICAgICAgICAgICAgIGJyZWFrOyAvLyBBbHJlYWR5IGhhbmRsZWQgdXAgYWJvdmUuCi0gICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VtcHR5OgotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIG4g
PSBlLT5maXJzdENoaWxkKCk7IG47IG4gPSBuLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChuLT5pc0VsZW1lbnROb2RlKCkpIHsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRW1wdHk6IHsKKyAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGZvciAoTm9kZSogbiA9IGUtPmZpcnN0Q2hpbGQoKTsgbjsgbiA9IG4tPm5leHRT
aWJsaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG4tPmlzVGV4dE5vZGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBUZXh0KiB0ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXh0Tm9kZS0+ZGF0YSgpLmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBpZiAobi0+aXNUZXh0Tm9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBUZXh0KiB0
ZXh0Tm9kZSA9IHN0YXRpY19jYXN0PFRleHQqPihuKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghdGV4dE5vZGUtPmRhdGEoKS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNP
bmx5KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50U3R5bGUpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZS0+cmVuZGVyU3R5bGUoKSAmJiAoZS0+ZG9jdW1lbnQo
KS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGUtPnJlbmRlclN0eWxlKCktPnVuaXF1ZSgpKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGUtPnJlbmRlclN0eWxlKCktPnNldEVtcHR5U3RhdGUocmVz
dWx0KTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRmlyc3RDaGls
ZDoKKyAgICAgICAgICAgIGlmICghbV9pc0NvbGxlY3RpbmdSdWxlc09ubHkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoZWxlbWVudFN0eWxlKQorICAgICAgICAgICAgICAgICAgICBlbGVtZW50U3R5
bGUtPnNldEVtcHR5U3RhdGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChlLT5y
ZW5kZXJTdHlsZSgpICYmIChlLT5kb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZS0+
cmVuZGVyU3R5bGUoKS0+dW5pcXVlKCkpKQorICAgICAgICAgICAgICAgICAgICBlLT5yZW5kZXJT
dHlsZSgpLT5zZXRFbXB0eVN0YXRlKHJlc3VsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0ZpcnN0Q2hpbGQ6IHsKICAgICAgICAgICAgIC8vIGZpcnN0LWNoaWxkIG1hdGNoZXMgdGhl
IGZpcnN0IGNoaWxkIHRoYXQgaXMgYW4gZWxlbWVudAogICAgICAgICAgICAgaWYgKGUtPnBhcmVu
dE5vZGUoKSAmJiBlLT5wYXJlbnROb2RlKCktPmlzRWxlbWVudE5vZGUoKSkgewogICAgICAgICAg
ICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CkBAIC02NTEsNyArNjcyLDggQEAgYm9vbCBTZWxl
Y3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCog
ZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZpcnN0T2ZUeXBlOgorICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0ZpcnN0T2ZUeXBlOiB7CiAgICAgICAgICAgICAvLyBmaXJzdC1vZi10eXBlIG1hdGNoZXMgdGhl
IGZpcnN0IGVsZW1lbnQgb2YgaXRzIHR5cGUKICAgICAgICAgICAgIGlmIChlLT5wYXJlbnROb2Rl
KCkgJiYgZS0+cGFyZW50Tm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpIHsKICAgICAgICAgICAgICAg
ICBib29sIHJlc3VsdCA9IGZhbHNlOwpAQCAtNjcyLDcgKzY5NCw4IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBz
ZXVkb0lkJiBkCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYXN0
Q2hpbGQ6CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdENo
aWxkOiB7CiAgICAgICAgICAgICAvLyBsYXN0LWNoaWxkIG1hdGNoZXMgdGhlIGxhc3QgY2hpbGQg
dGhhdCBpcyBhbiBlbGVtZW50CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVu
dCA9IGUtPnBhcmVudEVsZW1lbnQoKSkgewogICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0g
ZmFsc2U7CkBAIC02OTQsNyArNzE3LDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25l
U2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAg
ICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0xhc3RPZlR5cGU6CisgICAgICAg
IH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFzdE9mVHlwZTogewogICAgICAg
ICAgICAgLy8gbGFzdC1vZi10eXBlIG1hdGNoZXMgdGhlIGxhc3QgZWxlbWVudCBvZiBpdHMgdHlw
ZQogICAgICAgICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIW1faXNDb2xsZWN0aW5nUnVsZXNPbmx5KSB7
CkBAIC03MTcsNyArNzQxLDggQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0
b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09ubHlDaGlsZDoKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Pbmx5Q2hpbGQ6IHsKICAgICAgICAgICAgIGlm
IChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0gZS0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAg
ICAgICAgICAgYm9vbCBmaXJzdENoaWxkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgYm9vbCBs
YXN0Q2hpbGQgPSBmYWxzZTsKQEAgLTc0OSw3ICs3NzQsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tl
cjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9J
ZCYgZAogICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkICYmIGxhc3RDaGlsZDsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9Pbmx5T2ZUeXBlOgorICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb09ubHlPZlR5cGU6IHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNlbGVjdG9y
IGlzIHZlcnkgc2xvdy4KICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZS0+cGFyZW50RWxlbWVudCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFtX2lzQ29sbGVjdGlu
Z1J1bGVzT25seSkgewpAQCAtNzg1LDcgKzgxMSw4IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpj
aGVja09uZVNlbGVjdG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBk
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgbGFzdENoaWxkOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb050aENoaWxkOgorICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b050aENoaWxkOiB7CiAgICAgICAgICAgICBpZiAoIXNlbC0+cGFyc2VOdGgoKSkKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChFbGVtZW50KiBwYXJlbnRFbGVtZW50ID0g
ZS0+cGFyZW50RWxlbWVudCgpKSB7CkBAIC04MTcsNyArODQ0LDggQEAgYm9vbCBTZWxlY3RvckNo
ZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNl
dWRvSWQmIGQKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTnRo
T2ZUeXBlOgorICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aE9m
VHlwZTogewogICAgICAgICAgICAgaWYgKCFzZWwtPnBhcnNlTnRoKCkpCiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoRWxlbWVudCogcGFyZW50RWxlbWVudCA9IGUtPnBh
cmVudEVsZW1lbnQoKSkgewpAQCAtODM1LDEyICs4NjMsMTMgQEAgYm9vbCBTZWxlY3RvckNoZWNr
ZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRv
SWQmIGQKICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmVudFN0eWxlKQogICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyZW50U3R5bGUtPnNldENoaWxkcmVuQWZmZWN0ZWRCeUZvcndhcmRQb3Np
dGlvbmFsUnVsZXMoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgICAgICBpZiAoc2VsLT5tYXRjaE50aChjb3VudCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RDaGlsZDoKKyAgICAgICAgfQorICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0Q2hpbGQ6IHsKICAgICAgICAgICAg
IGlmICghc2VsLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsKQEAg
LTg2Miw3ICs4OTEsOCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihD
U1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9OdGhMYXN0T2ZUeXBlOgorICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb050aExhc3RPZlR5cGU6IHsKICAgICAgICAg
ICAgIGlmICghc2VsLT5wYXJzZU50aCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgaWYgKEVsZW1lbnQqIHBhcmVudEVsZW1lbnQgPSBlLT5wYXJlbnRFbGVtZW50KCkpIHsK
QEAgLTg4NSwxMyArOTE1LDE0IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvVGFyZ2V0OgogICAg
ICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1lbnQoKS0+Y3NzVGFyZ2V0KCkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQW55OgogICAgICAgICAgICAgZm9yIChDU1NTZWxlY3Rvciogc2VsZWN0
b3IgPSBzZWwtPnNlbGVjdG9yTGlzdCgpLT5maXJzdCgpOyBzZWxlY3Rvcjsgc2VsZWN0b3IgPSBD
U1NTZWxlY3Rvckxpc3Q6Om5leHQoc2VsZWN0b3IpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNo
ZWNrU2VsZWN0b3Ioc2VsZWN0b3IsIGUsIGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVk
TGluaywgZWxlbWVudFN0eWxlLCBlbGVtZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hl
cykKKyAgICAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgZSwgc2NvcGUs
IGR5bmFtaWNQc2V1ZG8sIHRydWUsIGVuY291bnRlcmVkTGluaywgZWxlbWVudFN0eWxlLCBlbGVt
ZW50UGFyZW50U3R5bGUpID09IFNlbGVjdG9yTWF0Y2hlcykKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTg5OSwx
MiArOTMwLDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVjdG9yKENTU1Nl
bGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAgICBpZiAoZSAm
JiBlLT5pc0xpbmsoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BdXRvZmlsbDoKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQXV0b2ZpbGw6IHsKICAgICAgICAgICAgIGlmICgh
ZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lu
cHV0RWxlbWVudCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dEVsZW1lbnQtPmlzQXV0
b2ZpbGxlZCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvTGluazoKICAgICAgICAgICAgIGlmIChlICYmIGUtPmlzTGluaygp
KQogICAgICAgICAgICAgICAgIHJldHVybiAhbV9pc01hdGNoaW5nVmlzaXRlZFBzZXVkb0NsYXNz
OwpAQCAtOTEzLDcgKzk0NSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja09uZVNlbGVj
dG9yKENTU1NlbGVjdG9yKiBzZWwsIEVsZW1lbnQqIGUsIFBzZXVkb0lkJiBkCiAgICAgICAgICAg
ICBpZiAoZSAmJiBlLT5pc0xpbmsoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbV9pc01hdGNo
aW5nVmlzaXRlZFBzZXVkb0NsYXNzIHx8IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6Zm9yY2VQ
c2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvVmlzaXRlZCk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRHJhZzoKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvRHJhZzogewogICAgICAgICAgICAgaWYgKGVsZW1lbnRTdHls
ZSkKICAgICAgICAgICAgICAgICBlbGVtZW50U3R5bGUtPnNldEFmZmVjdGVkQnlEcmFnUnVsZXMo
dHJ1ZSk7CiAgICAgICAgICAgICBlbHNlIGlmIChlLT5yZW5kZXJTdHlsZSgpKQpAQCAtOTIxLDEx
ICs5NTMsMTIgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqIHNlbCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICAgICAgICAgIGlmIChlLT5y
ZW5kZXJlcigpICYmIGUtPnJlbmRlcmVyKCktPmlzRHJhZ2dpbmcoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ZvY3VzOgogICAgICAgICAgICAgaWYgKGUgJiYgKChlLT5m
b2N1c2VkKCkgJiYgZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBlLT5kb2N1bWVudCgpLT5mcmFt
ZSgpLT5zZWxlY3Rpb24oKS0+aXNGb2N1c2VkQW5kQWN0aXZlKCkpIHx8IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6Zm9yY2VQc2V1ZG9TdGF0ZShlLCBDU1NTZWxlY3Rvcjo6UHNldWRvRm9jdXMp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9Ib3ZlcjoKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGluIHF1aXJrcyBt
b2RlLCB0aGVuIGhvdmVyIHNob3VsZCBuZXZlciBtYXRjaCBhbmNob3JzIHdpdGggbm8KICAgICAg
ICAgICAgIC8vIGhyZWYgYW5kICo6aG92ZXIgc2hvdWxkIG5vdCBtYXRjaCBhbnl0aGluZy4gVGhp
cyBpcyBpbXBvcnRhbnQgZm9yIHNpdGVzIGxpa2Ugd3NqLmNvbS4KICAgICAgICAgICAgIGlmICht
X3N0cmljdFBhcnNpbmcgfHwgaXNTdWJTZWxlY3RvciB8fCAoc2VsLT5oYXNUYWcoKSAmJiAhZS0+
aGFzVGFnTmFtZShhVGFnKSkgfHwgZS0+aXNMaW5rKCkpIHsKQEAgLTkzNyw2ICs5NzAsNyBAQCBi
b29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBF
bGVtZW50KiBlLCBQc2V1ZG9JZCYgZAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKICAgICAgICAgICAgIC8vIElmIHdlJ3JlIGlu
IHF1aXJrcyBtb2RlLCB0aGVuIDphY3RpdmUgc2hvdWxkIG5ldmVyIG1hdGNoIGFuY2hvcnMgd2l0
aCBubwogICAgICAgICAgICAgLy8gaHJlZiBhbmQgKjphY3RpdmUgc2hvdWxkIG5vdCBtYXRjaCBh
bnl0aGluZy4gCkBAIC05NjIsNzEgKzk5Niw3MiBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hl
Y2tPbmVTZWxlY3RvcihDU1NTZWxlY3Rvciogc2VsLCBFbGVtZW50KiBlLCBQc2V1ZG9JZCYgZAog
ICAgICAgICAgICAgaWYgKGUgJiYgZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gIWUtPmlzRW5hYmxlZEZvcm1Db250cm9sKCk7CiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVhZE9ubHk6CisgICAgICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlYWRPbmx5OiB7CiAgICAgICAgICAgICBpZiAoIWUg
fHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgcmV0dXJuIGUtPmlzVGV4dEZvcm1Db250cm9sKCkgJiYgZS0+aXNS
ZWFkT25seUZvcm1Db250cm9sKCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Jl
YWRXcml0ZTogCisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvUmVh
ZFdyaXRlOiB7CiAgICAgICAgICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50
KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgcmV0dXJuIGUt
PmlzVGV4dEZvcm1Db250cm9sKCkgJiYgIWUtPmlzUmVhZE9ubHlGb3JtQ29udHJvbCgpOworICAg
ICAgICB9CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb09wdGlvbmFsOgogICAgICAg
ICAgICAgcmV0dXJuIGUgJiYgZS0+aXNPcHRpb25hbEZvcm1Db250cm9sKCk7CiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1JlcXVpcmVkOgogICAgICAgICAgICAgcmV0dXJuIGUgJiYg
ZS0+aXNSZXF1aXJlZEZvcm1Db250cm9sKCk7Ci0gICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb1ZhbGlkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9WYWxpZDogewogICAg
ICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIGUtPmRvY3VtZW50KCktPnNldENvbnRhaW5zVmFsaWRpdHlTdHlsZVJ1bGVzKCk7CiAgICAg
ICAgICAgICByZXR1cm4gZS0+d2lsbFZhbGlkYXRlKCkgJiYgZS0+aXNWYWxpZEZvcm1Db250cm9s
RWxlbWVudCgpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbnZhbGlkOgorICAg
ICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0ludmFsaWQ6IHsKICAgICAgICAgICAgIGlm
ICghZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBlLT5kb2N1
bWVudCgpLT5zZXRDb250YWluc1ZhbGlkaXR5U3R5bGVSdWxlcygpOwogICAgICAgICAgICAgcmV0
dXJuIChlLT53aWxsVmFsaWRhdGUoKSAmJiAhZS0+aXNWYWxpZEZvcm1Db250cm9sRWxlbWVudCgp
KSB8fCBlLT5oYXNVbmFjY2VwdGFibGVWYWx1ZSgpOwotICAgICAgICBjYXNlIENTU1NlbGVjdG9y
OjpQc2V1ZG9DaGVja2VkOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICghZSB8
fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNoZWNrZWQgYW5k
IGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3BlYyBzYXlzIHRo
YXQKLSAgICAgICAgICAgICAgICAvLyB5b3UgY2FuJ3QgYmUgYm90aCBjaGVja2VkIGFuZCBpbmRl
dGVybWluYXRlLiBXZSB3aWxsIGJlaGF2ZSBsaWtlIFdpbklFIGJlaGluZCB0aGUgc2NlbmVzIGFu
ZCBqdXN0Ci0gICAgICAgICAgICAgICAgLy8gb2JleSB0aGUgQ1NTIHNwZWMgaGVyZSBpbiB0aGUg
dGVzdCBmb3IgbWF0Y2hpbmcgdGhlIHBzZXVkby4KLSAgICAgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOwotICAgICAgICAgICAg
ICAgIGlmIChpbnB1dEVsZW1lbnQgJiYgaW5wdXRFbGVtZW50LT5zaG91bGRBcHBlYXJDaGVja2Vk
KCkgJiYgIWlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NoZWNr
ZWQ6IHsKKyAgICAgICAgICAgIGlmICghZSB8fCAhZS0+aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvSW5kZXRlcm1pbmF0ZToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWUgfHwgIWUtPmlzRm9ybUNvbnRyb2xFbGVtZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgLy8gRXZlbiB0aG91Z2ggV2luSUUgYWxsb3dzIGNo
ZWNrZWQgYW5kIGluZGV0ZXJtaW5hdGUgdG8gY28tZXhpc3QsIHRoZSBDU1Mgc2VsZWN0b3Igc3Bl
YyBzYXlzIHRoYXQKKyAgICAgICAgICAgIC8vIHlvdSBjYW4ndCBiZSBib3RoIGNoZWNrZWQgYW5k
IGluZGV0ZXJtaW5hdGUuIFdlIHdpbGwgYmVoYXZlIGxpa2UgV2luSUUgYmVoaW5kIHRoZSBzY2Vu
ZXMgYW5kIGp1c3QKKyAgICAgICAgICAgIC8vIG9iZXkgdGhlIENTUyBzcGVjIGhlcmUgaW4gdGhl
IHRlc3QgZm9yIG1hdGNoaW5nIHRoZSBwc2V1ZG8uCisgICAgICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50KiBpbnB1dEVsZW1lbnQgPSBlLT50b0lucHV0RWxlbWVudCgpOworICAgICAgICAgICAgaWYg
KGlucHV0RWxlbWVudCAmJiBpbnB1dEVsZW1lbnQtPnNob3VsZEFwcGVhckNoZWNrZWQoKSAmJiAh
aW5wdXRFbGVtZW50LT5pc0luZGV0ZXJtaW5hdGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0luZGV0ZXJtaW5hdGU6IHsKKyAgICAgICAgICAgIGlmICghZSB8fCAhZS0+
aXNGb3JtQ29udHJvbEVsZW1lbnQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIAogI2lmIEVOQUJMRShQUk9HUkVTU19UQUcpCi0gICAgICAgICAgICAgICAgaWYgKGUtPmhh
c1RhZ05hbWUocHJvZ3Jlc3NUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEhUTUxQcm9ncmVz
c0VsZW1lbnQqIHByb2dyZXNzID0gc3RhdGljX2Nhc3Q8SFRNTFByb2dyZXNzRWxlbWVudCo+KGUp
OwotICAgICAgICAgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgJiYgIXByb2dyZXNzLT5pc0RldGVy
bWluYXRlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXRFbGVtZW50ID0gZS0+dG9JbnB1dEVsZW1lbnQo
KTsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXRFbGVtZW50ICYmIGlucHV0RWxlbWVudC0+aXNJ
bmRldGVybWluYXRlKCkpCisgICAgICAgICAgICBpZiAoZS0+aGFzVGFnTmFtZShwcm9ncmVzc1Rh
ZykpIHsKKyAgICAgICAgICAgICAgICBIVE1MUHJvZ3Jlc3NFbGVtZW50KiBwcm9ncmVzcyA9IHN0
YXRpY19jYXN0PEhUTUxQcm9ncmVzc0VsZW1lbnQqPihlKTsKKyAgICAgICAgICAgICAgICBpZiAo
cHJvZ3Jlc3MgJiYgIXByb2dyZXNzLT5pc0RldGVybWluYXRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQor
I2VuZGlmCisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0
RWxlbWVudCA9IGUtPnRvSW5wdXRFbGVtZW50KCk7CisgICAgICAgICAgICBpZiAoaW5wdXRFbGVt
ZW50ICYmIGlucHV0RWxlbWVudC0+aXNJbmRldGVybWluYXRlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9Sb290OgogICAgICAgICAgICAgaWYgKGUgPT0gZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvTGFuZzoK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBlLT5j
b21wdXRlSW5oZXJpdGVkTGFuZ3VhZ2UoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGFyZ3VtZW50ID0gc2VsLT5hcmd1bWVudCgpOwotICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS5pc0VtcHR5KCkgfHwgIXZhbHVlLnN0YXJ0c1dpdGgoYXJndW1lbnQsIGZhbHNlKSkKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0
aCgpICE9IGFyZ3VtZW50Lmxlbmd0aCgpICYmIHZhbHVlW2FyZ3VtZW50Lmxlbmd0aCgpXSAhPSAn
LScpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9MYW5n
OiB7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgdmFsdWUgPSBlLT5jb21wdXRlSW5oZXJpdGVk
TGFuZ3VhZ2UoKTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJndW1lbnQgPSBz
ZWwtPmFyZ3VtZW50KCk7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNFbXB0eSgpIHx8ICF2YWx1
ZS5zdGFydHNXaXRoKGFyZ3VtZW50LCBmYWxzZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gYXJndW1lbnQubGVuZ3RoKCkgJiYgdmFs
dWVbYXJndW1lbnQubGVuZ3RoKCldICE9ICctJykKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CiAjaWYgRU5BQkxFKEZVTExTQ1JFRU5f
QVBJKQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9GdWxsU2NyZWVuOgogICAgICAg
ICAgICAgLy8gV2hpbGUgYSBEb2N1bWVudCBpcyBpbiB0aGUgZnVsbHNjcmVlbiBzdGF0ZSwgYW5k
IHRoZSBkb2N1bWVudCdzIGN1cnJlbnQgZnVsbHNjcmVlbiAKQEAgLTEwNzIsMTIgKzExMDcsMTIg
QEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqIHNl
bCwgRWxlbWVudCogZSwgUHNldWRvSWQmIGQKICAgICBpZiAoc2VsLT5tX21hdGNoID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9FbGVtZW50KSB7CiAgICAgICAgIGlmICghZWxlbWVudFN0eWxlICYmICFt
X2lzQ29sbGVjdGluZ1J1bGVzT25seSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgCisKICAgICAgICAgaWYgKHNlbC0+aXNVbmtub3duUHNldWRvRWxlbWVudCgpKSB7CiAgICAg
ICAgICAgICBtX2hhc1Vua25vd25Qc2V1ZG9FbGVtZW50cyA9IHRydWU7CiAgICAgICAgICAgICBy
ZXR1cm4gZS0+c2hhZG93UHNldWRvSWQoKSA9PSBzZWwtPnZhbHVlKCk7CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgUHNldWRvSWQgcHNldWRvSWQgPSBDU1NTZWxlY3Rvcjo6cHNldWRv
SWQoc2VsLT5wc2V1ZG9UeXBlKCkpOwogICAgICAgICBpZiAocHNldWRvSWQgPT0gRklSU1RfTEVU
VEVSKSB7CiAgICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZS0+ZG9jdW1lbnQo
KSkKQEAgLTEwOTQsNyArMTEyOSw3IEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9s
bGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uCiB7CiAgICAg
UmVuZGVyU2Nyb2xsYmFyKiBzY3JvbGxiYXIgPSBSZW5kZXJTY3JvbGxiYXI6OnNjcm9sbGJhckZv
clN0eWxlUmVzb2x2ZSgpOwogICAgIFNjcm9sbGJhclBhcnQgcGFydCA9IFJlbmRlclNjcm9sbGJh
cjo6cGFydEZvclN0eWxlUmVzb2x2ZSgpOwotICAgIAorCiAgICAgLy8gRklYTUU6IFRoaXMgaXMg
YSB0ZW1wb3JhcnkgaGFjayBmb3IgcmVzaXplcnMgYW5kIHNjcm9sbGJhciBjb3JuZXJzLiBFdmVu
dHVhbGx5IDp3aW5kb3ctaW5hY3RpdmUgc2hvdWxkIGJlY29tZSBhIHJlYWwKICAgICAvLyBwc2V1
ZG8gY2xhc3MgYW5kIGp1c3QgYXBwbHkgdG8gZXZlcnl0aGluZy4KICAgICBpZiAoc2VsLT5wc2V1
ZG9UeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb1dpbmRvd0luYWN0aXZlKQpAQCAtMTEwMiwx
NSArMTEzNywxNCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6Y2hlY2tTY3JvbGxiYXJQc2V1ZG9D
bGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNvbgogICAgIAogICAgIGlmICghc2Ny
b2xsYmFyKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisgICAgICAgIAogICAgIEFTU0VS
VChzZWwtPm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzKTsKICAgICBzd2l0Y2gg
KHNlbC0+cHNldWRvVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRW5hYmxl
ZDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+ZW5hYmxlZCgpOwotICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0Rpc2FibGVkOgotICAgICAgICByZXR1cm4gIXNjcm9sbGJhci0+ZW5hYmxl
ZCgpOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0hvdmVyOgotICAgICAgICB7CisgICAg
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VuYWJsZWQ6CisgICAgICAgICAgICByZXR1cm4g
c2Nyb2xsYmFyLT5lbmFibGVkKCk7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Rp
c2FibGVkOgorICAgICAgICAgICAgcmV0dXJuICFzY3JvbGxiYXItPmVuYWJsZWQoKTsKKyAgICAg
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG92ZXI6IHsKICAgICAgICAgICAgIFNjcm9sbGJh
clBhcnQgaG92ZXJlZFBhcnQgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCk7CiAgICAgICAgICAg
ICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhv
dmVyZWRQYXJ0ICE9IE5vUGFydDsKQEAgLTExMTgsOCArMTE1Miw3IEBAIGJvb2wgU2VsZWN0b3JD
aGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNzKENTU1NlbGVjdG9yKiBzZWwsIFBzZXVk
b0lkJikgY29uCiAgICAgICAgICAgICAgICAgcmV0dXJuIGhvdmVyZWRQYXJ0ID09IEJhY2tUcmFj
a1BhcnQgfHwgaG92ZXJlZFBhcnQgPT0gRm9yd2FyZFRyYWNrUGFydCB8fCBob3ZlcmVkUGFydCA9
PSBUaHVtYlBhcnQ7CiAgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBob3ZlcmVkUGFydDsKICAg
ICAgICAgfQotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0FjdGl2ZToKLSAgICAgICAgewor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9BY3RpdmU6IHsKICAgICAgICAgICAgIFNj
cm9sbGJhclBhcnQgcHJlc3NlZFBhcnQgPSBzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCk7CiAgICAg
ICAgICAgICBpZiAocGFydCA9PSBTY3JvbGxiYXJCR1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHByZXNzZWRQYXJ0ICE9IE5vUGFydDsKQEAgLTExMjcsMjAgKzExNjAsMTkgQEAgYm9vbCBT
ZWxlY3RvckNoZWNrZXI6OmNoZWNrU2Nyb2xsYmFyUHNldWRvQ2xhc3MoQ1NTU2VsZWN0b3IqIHNl
bCwgUHNldWRvSWQmKSBjb24KICAgICAgICAgICAgICAgICByZXR1cm4gcHJlc3NlZFBhcnQgPT0g
QmFja1RyYWNrUGFydCB8fCBwcmVzc2VkUGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0IHx8IHByZXNz
ZWRQYXJ0ID09IFRodW1iUGFydDsKICAgICAgICAgICAgIHJldHVybiBwYXJ0ID09IHByZXNzZWRQ
YXJ0OwogICAgICAgICB9Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9yaXpvbnRhbDoK
LSAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1ZlcnRpY2FsOgotICAgICAgICBy
ZXR1cm4gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyOwotICAg
IGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RlY3JlbWVudDoKLSAgICAgICAgcmV0dXJuIHBhcnQg
PT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBh
cnQgPT0gQmFja1RyYWNrUGFydDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbmNyZW1l
bnQ6Ci0gICAgICAgIHJldHVybiBwYXJ0ID09IEZvcndhcmRCdXR0b25TdGFydFBhcnQgfHwgcGFy
dCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRUcmFja1BhcnQ7Ci0g
ICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvU3RhcnQ6Ci0gICAgICAgIHJldHVybiBwYXJ0ID09
IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8
IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbmQ6
Ci0gICAgICAgIHJldHVybiBwYXJ0ID09IEJhY2tCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gRm9y
d2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0OwotICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjogCi0gICAgICAgIHsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvSG9yaXpvbnRhbDoKKyAgICAgICAgICAgIHJldHVybiBzY3Jv
bGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcjsKKyAgICAgICAgY2Fz
ZSBDU1NTZWxlY3Rvcjo6UHNldWRvVmVydGljYWw6CisgICAgICAgICAgICByZXR1cm4gc2Nyb2xs
YmFyLT5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsU2Nyb2xsYmFyOworICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9EZWNyZW1lbnQ6CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBC
YWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja0J1dHRvbkVuZFBhcnQgfHwgcGFydCA9
PSBCYWNrVHJhY2tQYXJ0OworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9JbmNyZW1l
bnQ6CisgICAgICAgICAgICByZXR1cm4gcGFydCA9PSBGb3J3YXJkQnV0dG9uU3RhcnRQYXJ0IHx8
IHBhcnQgPT0gRm9yd2FyZEJ1dHRvbkVuZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkVHJhY2tQYXJ0
OworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TdGFydDoKKyAgICAgICAgICAgIHJl
dHVybiBwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9u
U3RhcnRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydDsKKyAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRW5kOgorICAgICAgICAgICAgcmV0dXJuIHBhcnQgPT0gQmFja0J1dHRvbkVu
ZFBhcnQgfHwgcGFydCA9PSBGb3J3YXJkQnV0dG9uRW5kUGFydCB8fCBwYXJ0ID09IEZvcndhcmRU
cmFja1BhcnQ7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0RvdWJsZUJ1dHRvbjog
ewogICAgICAgICAgICAgU2Nyb2xsYmFyQnV0dG9uc1BsYWNlbWVudCBidXR0b25zUGxhY2VtZW50
ID0gc2Nyb2xsYmFyLT50aGVtZSgpLT5idXR0b25zUGxhY2VtZW50KCk7CiAgICAgICAgICAgICBp
ZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0IHx8IHBhcnQgPT0gRm9yd2FyZEJ1dHRvblN0
YXJ0UGFydCB8fCBwYXJ0ID09IEJhY2tUcmFja1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0YXJ0IHx8IGJ1dHRv
bnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUJvdGg7CkBAIC0xMTQ4LDE1ICsx
MTgwLDEzIEBAIGJvb2wgU2VsZWN0b3JDaGVja2VyOjpjaGVja1Njcm9sbGJhclBzZXVkb0NsYXNz
KENTU1NlbGVjdG9yKiBzZWwsIFBzZXVkb0lkJikgY29uCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZUVuZCB8fCBidXR0b25z
UGxhY2VtZW50ID09IFNjcm9sbGJhckJ1dHRvbnNEb3VibGVCb3RoOwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9IAotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb1Npbmds
ZUJ1dHRvbjoKLSAgICAgICAgeworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9TaW5n
bGVCdXR0b246IHsKICAgICAgICAgICAgIFNjcm9sbGJhckJ1dHRvbnNQbGFjZW1lbnQgYnV0dG9u
c1BsYWNlbWVudCA9IHNjcm9sbGJhci0+dGhlbWUoKS0+YnV0dG9uc1BsYWNlbWVudCgpOwogICAg
ICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCB8fCBwYXJ0ID09IEZvcndh
cmRCdXR0b25FbmRQYXJ0IHx8IHBhcnQgPT0gQmFja1RyYWNrUGFydCB8fCBwYXJ0ID09IEZvcndh
cmRUcmFja1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0g
U2Nyb2xsYmFyQnV0dG9uc1NpbmdsZTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgfQotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vQnV0dG9uOgotICAgICAgICB7Cisg
ICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb05vQnV0dG9uOiB7CiAgICAgICAgICAgICBT
Y3JvbGxiYXJCdXR0b25zUGxhY2VtZW50IGJ1dHRvbnNQbGFjZW1lbnQgPSBzY3JvbGxiYXItPnRo
ZW1lKCktPmJ1dHRvbnNQbGFjZW1lbnQoKTsKICAgICAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tU
cmFja1BhcnQpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Ny
b2xsYmFyQnV0dG9uc05vbmUgfHwgYnV0dG9uc1BsYWNlbWVudCA9PSBTY3JvbGxiYXJCdXR0b25z
RG91YmxlRW5kOwpAQCAtMTE2NCwxMCArMTE5NCwxMCBAQCBib29sIFNlbGVjdG9yQ2hlY2tlcjo6
Y2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NTZWxlY3Rvciogc2VsLCBQc2V1ZG9JZCYpIGNv
bgogICAgICAgICAgICAgICAgIHJldHVybiBidXR0b25zUGxhY2VtZW50ID09IFNjcm9sbGJhckJ1
dHRvbnNOb25lIHx8IGJ1dHRvbnNQbGFjZW1lbnQgPT0gU2Nyb2xsYmFyQnV0dG9uc0RvdWJsZVN0
YXJ0OwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9Ci0gICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ29ybmVyUHJlc2VudDoKLSAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+
c2Nyb2xsYWJsZUFyZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
b3JuZXJQcmVzZW50OgorICAgICAgICAgICAgcmV0dXJuIHNjcm9sbGJhci0+c2Nyb2xsYWJsZUFy
ZWEoKS0+aXNTY3JvbGxDb3JuZXJWaXNpYmxlKCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU2VsZWN0b3JDaGVja2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0b3JDaGVj
a2VyLmgKaW5kZXggMDZjMzM5YjdhYWQzYTYyMjcwOWJiMGMxZmVjM2Q3OTMyYWQyZTI3OC4uNGU1
ODM3YWJlYzEyMTc2Nzk2ZWU0YTVhODBiOWY5YjE1YWIxNmFiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
ZWxlY3RvckNoZWNrZXIuaApAQCAtNDcsMTAgKzQ3LDEwIEBAIHB1YmxpYzoKIAogICAgIGVudW0g
U2VsZWN0b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNl
bGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAKLSAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2Vs
ZWN0b3IqLCBFbGVtZW50KiwgYm9vbCBpc0Zhc3RDaGVja2FibGVTZWxlY3RvciA9IGZhbHNlKSBj
b25zdDsKLSAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVt
ZW50KiwgUHNldWRvSWQmIGR5bmFtaWNQc2V1ZG8sIGJvb2wgaXNTdWJTZWxlY3RvciwgYm9vbCBl
bmNvdW50ZXJlZExpbmssIFJlbmRlclN0eWxlKiA9IDAsIFJlbmRlclN0eWxlKiBlbGVtZW50UGFy
ZW50U3R5bGUgPSAwKSBjb25zdDsKKyAgICBib29sIGNoZWNrU2VsZWN0b3IoQ1NTU2VsZWN0b3Iq
LCBFbGVtZW50KiBlbGVtZW50LCBjb25zdCBFbGVtZW50KiBzY29wZSwgYm9vbCBpc0Zhc3RDaGVj
a2FibGVTZWxlY3RvciA9IGZhbHNlKSBjb25zdDsKKyAgICBTZWxlY3Rvck1hdGNoIGNoZWNrU2Vs
ZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVudCogc2NvcGUsIFBzZXVk
b0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJvb2wgZW5jb3VudGVyZWRM
aW5rLCBSZW5kZXJTdHlsZSogPSAwLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlID0g
MCkgY29uc3Q7CiAgICAgc3RhdGljIGJvb2wgaXNGYXN0Q2hlY2thYmxlU2VsZWN0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqKTsKLSAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2tTZWxlY3Rvcihjb25zdCBD
U1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqKTsKKyAgICBzdGF0aWMgYm9vbCBmYXN0Q2hlY2tT
ZWxlY3Rvcihjb25zdCBDU1NTZWxlY3RvciosIGNvbnN0IEVsZW1lbnQqLCBjb25zdCBFbGVtZW50
KiBzY29wZSk7CiAKICAgICBFSW5zaWRlTGluayBkZXRlcm1pbmVMaW5rU3RhdGUoRWxlbWVudCop
IGNvbnN0OwogICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwpAQCAtNzIsNyArNzIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhckhhc1Vua25vd25Qc2V1ZG9FbGVtZW50cygpIHsg
bV9oYXNVbmtub3duUHNldWRvRWxlbWVudHMgPSBmYWxzZTsgfQogCiBwcml2YXRlOgotICAgIGJv
b2wgY2hlY2tPbmVTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBQc2V1ZG9JZCYgZHlu
YW1pY1BzZXVkbywgYm9vbCBpc1N1YlNlbGVjdG9yLCBib29sIGVuY291bnRlcmVkTGluaywgUmVu
ZGVyU3R5bGUqLCBSZW5kZXJTdHlsZSogZWxlbWVudFBhcmVudFN0eWxlKSBjb25zdDsKKyAgICBi
b29sIGNoZWNrT25lU2VsZWN0b3IoQ1NTU2VsZWN0b3IqLCBFbGVtZW50KiwgY29uc3QgRWxlbWVu
dCogc2NvcGUsIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvLCBib29sIGlzU3ViU2VsZWN0b3IsIGJv
b2wgZW5jb3VudGVyZWRMaW5rLCBSZW5kZXJTdHlsZSosIFJlbmRlclN0eWxlKiBlbGVtZW50UGFy
ZW50U3R5bGUpIGNvbnN0OwogICAgIGJvb2wgY2hlY2tTY3JvbGxiYXJQc2V1ZG9DbGFzcyhDU1NT
ZWxlY3RvciosIFBzZXVkb0lkJiBkeW5hbWljUHNldWRvKSBjb25zdDsKIAogICAgIEVJbnNpZGVM
aW5rIGRldGVybWluZUxpbmtTdGF0ZVNsb3dDYXNlKEVsZW1lbnQqKSBjb25zdDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAppbmRleCAyZjJiNjIzYjdjMjExYjJmYzRlZmZhYTU3N2RiYjVlNTEyYjllZWVj
Li41M2UwM2I3Mjk1ZTlkZDM0M2IyZjFkNmFjNWIwYzc3YWFiYjQzMzcyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCkBAIC0xMzgyLDYgKzEzODIsMjMgQEAgdm9pZCBFbGVtZW50OjpjaGlsZHJlbkNo
YW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZSogYWYK
ICAgICAgICAgY2hlY2tGb3JTaWJsaW5nU3R5bGVDaGFuZ2VzKHRoaXMsIHJlbmRlclN0eWxlKCks
IGZhbHNlLCBiZWZvcmVDaGFuZ2UsIGFmdGVyQ2hhbmdlLCBjaGlsZENvdW50RGVsdGEpOwogfQog
Cit2b2lkIEVsZW1lbnQ6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIGVu
c3VyZVJhcmVEYXRhKCktPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKK30KKwordm9p
ZCBFbGVtZW50Ojp1bnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQoreworICAgIEFTU0VS
VChoYXNSYXJlRGF0YSgpKTsKKyAgICBpZiAoaGFzUmFyZURhdGEoKSkKKyAgICAgICAgcmFyZURh
dGEoKS0+dW5yZWdpc3RlclNjb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKK2Jvb2wgRWxlbWVu
dDo6aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNSYXJl
RGF0YSgpICYmIHJhcmVEYXRhKCktPmhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCk7Cit9CisKIHZv
aWQgRWxlbWVudDo6YmVnaW5QYXJzaW5nQ2hpbGRyZW4oKQogewogICAgIGNsZWFySXNQYXJzaW5n
Q2hpbGRyZW5GaW5pc2hlZCgpOwpAQCAtMTgzOCw3ICsxODU1LDcgQEAgYm9vbCBFbGVtZW50Ojp3
ZWJraXRNYXRjaGVzU2VsZWN0b3IoY29uc3QgU3RyaW5nJiBzZWxlY3RvciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiAKICAgICBTZWxlY3RvckNoZWNrZXIgc2VsZWN0b3JDaGVja2VyKGRvY3VtZW50KCks
IHN0cmljdFBhcnNpbmcpOwogICAgIGZvciAoQ1NTU2VsZWN0b3IqIHNlbGVjdG9yID0gc2VsZWN0
b3JMaXN0LmZpcnN0KCk7IHNlbGVjdG9yOyBzZWxlY3RvciA9IENTU1NlbGVjdG9yTGlzdDo6bmV4
dChzZWxlY3RvcikpIHsKLSAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVjdG9y
KHNlbGVjdG9yLCB0aGlzKSkKKyAgICAgICAgaWYgKHNlbGVjdG9yQ2hlY2tlci5jaGVja1NlbGVj
dG9yKHNlbGVjdG9yLCB0aGlzLCAwKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmgKaW5kZXggZDJhODc2ZmNjNzQxYzc3ZDcwYTQyZmIxNDY4NTFhNjNh
Njk4OTdiYi4uNzI2YzQ5NjllNTJhZTY5ZjhhM2VlOWE3NGFiMTI4YTFiYzhkNGZmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5oCkBAIC0yMzQsNiArMjM0LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNv
bnN0IEF0b21pY1N0cmluZyYgc2hhZG93UHNldWRvSWQoKSBjb25zdDsKICAgICB2b2lkIHNldFNo
YWRvd1BzZXVkb0lkKGNvbnN0IEF0b21pY1N0cmluZyYsIEV4Y2VwdGlvbkNvZGUmID0gQVNTRVJU
X05PX0VYQ0VQVElPTik7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQo
KTsKKyAgICB2b2lkIHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGJvb2wg
aGFzU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKSBjb25zdDsKKwogICAgIFJlbmRlclN0eWxlKiBjb21w
dXRlZFN0eWxlKFBzZXVkb0lkID0gTk9QU0VVRE8pOwogCiAgICAgdm9pZCBzZXRTdHlsZUFmZmVj
dGVkQnlFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJl
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRSYXJlRGF0YS5oCmluZGV4IDFjYWNj
ZDQ5NGYxMGYyYTZjMzA2ZTYwYmUxMzQ0YTc1NDY1ZTI5NmYuLjIwNDNmZTIwNDAxMmNiYTNiODc4
ZGViMTFmZjVmYmYyZGQ5YTQ4MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50UmFyZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudFJhcmVEYXRhLmgK
QEAgLTM5LDYgKzM5LDEwIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVzZXRDb21wdXRlZFN0eWxl
KCk7CiAKKyAgICB2b2lkIHJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICB2b2lk
IHVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpOworICAgIGJvb2wgaGFzU2NvcGVkSFRN
TFN0eWxlQ2hpbGQoKSBjb25zdDsKKwogICAgIHVzaW5nIE5vZGVSYXJlRGF0YTo6bmVlZHNGb2N1
c0FwcGVhcmFuY2VVcGRhdGVTb29uQWZ0ZXJBdHRhY2g7CiAgICAgdXNpbmcgTm9kZVJhcmVEYXRh
OjpzZXROZWVkc0ZvY3VzQXBwZWFyYW5jZVVwZGF0ZVNvb25BZnRlckF0dGFjaDsKIApAQCAtNTAs
NiArNTQsOCBAQCBwdWJsaWM6CiAgICAgT3duUHRyPERhdGFzZXRET01TdHJpbmdNYXA+IG1fZGF0
YXNldERPTVN0cmluZ01hcDsKICAgICBPd25QdHI8Q2xhc3NMaXN0PiBtX2NsYXNzTGlzdDsKIAor
ICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbjsKKwogICAgIGJv
b2wgbV9zdHlsZUFmZmVjdGVkQnlFbXB0eTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkK
QEAgLTY1LDYgKzcxLDcgQEAgaW5saW5lIEludFNpemUgZGVmYXVsdE1pbmltdW1TaXplRm9yUmVz
aXppbmcoKQogaW5saW5lIEVsZW1lbnRSYXJlRGF0YTo6RWxlbWVudFJhcmVEYXRhKCkKICAgICA6
IG1fbWluaW11bVNpemVGb3JSZXNpemluZyhkZWZhdWx0TWluaW11bVNpemVGb3JSZXNpemluZygp
KQogICAgICwgbV9zaGFkb3dSb290KDApCisgICAgLCBtX251bWJlck9mU2NvcGVkSFRNTFN0eWxl
Q2hpbGRyZW4oMCkKICAgICAsIG1fc3R5bGVBZmZlY3RlZEJ5RW1wdHkoZmFsc2UpCiAjaWYgRU5B
QkxFKEZVTExTQ1JFRU5fQVBJKQogICAgICwgbV9jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KGZh
bHNlKQpAQCAtODIsNSArODksMjEgQEAgaW5saW5lIHZvaWQgRWxlbWVudFJhcmVEYXRhOjpyZXNl
dENvbXB1dGVkU3R5bGUoKQogICAgIG1fY29tcHV0ZWRTdHlsZS5jbGVhcigpOwogfQogCitpbmxp
bmUgdm9pZCBFbGVtZW50UmFyZURhdGE6OnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKQor
eworICAgICsrbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCitpbmxpbmUg
dm9pZCBFbGVtZW50UmFyZURhdGE6OnVucmVnaXN0ZXJTY29wZWRIVE1MU3R5bGVDaGlsZCgpCit7
CisgICAgQVNTRVJUKG1fbnVtYmVyT2ZTY29wZWRIVE1MU3R5bGVDaGlsZHJlbiA+IDApOworICAg
IC0tbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCitpbmxpbmUgYm9vbCBF
bGVtZW50UmFyZURhdGE6Omhhc1Njb3BlZEhUTUxTdHlsZUNoaWxkKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9udW1iZXJPZlNjb3BlZEhUTUxTdHlsZUNoaWxkcmVuOworfQorCiB9CiAjZW5kaWYg
Ly8gRWxlbWVudFJhcmVEYXRhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRl
eCA1ZGZmMDNjYjczNjE1NDVlZjVlZWQ4Zjg3MTg4ZjBlZWUzZWQ0MmE4Li43NWYxM2VlM2FhYzE1
OGE5NzQyZDU5OTViZDc2ZTcwNDNlYjZkZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuY3BwCkBAIC04NSw3ICs4NSw3IEBAIHZvaWQgU2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZShWZWN0
b3I8UmVmUHRyPE5vZGU+ID4mIG1hdGNoZWRFbGVtZW50cykgY29uc3QKICAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IG1fcm9vdE5vZGUtPmRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHNlbGVj
dG9yLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKCFlbGVtZW50IHx8ICEobV9yb290Tm9kZS0+aXNE
b2N1bWVudE5vZGUoKSB8fCBlbGVtZW50LT5pc0Rlc2NlbmRhbnRPZihtX3Jvb3ROb2RlKSkpCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmIChtX3NlbGVjdG9yQ2hlY2tlci5jaGVja1Nl
bGVjdG9yKHNlbGVjdG9yLCBlbGVtZW50LCBtX3NlbGVjdG9yc1swXS5pc0Zhc3RDaGVja2FibGUp
KQorICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIuY2hlY2tTZWxlY3RvcihzZWxlY3Rvciwg
ZWxlbWVudCwgMCwgbV9zZWxlY3RvcnNbMF0uaXNGYXN0Q2hlY2thYmxlKSkKICAgICAgICAgICAg
IG1hdGNoZWRFbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgU2VsZWN0b3JRdWVyeTo6ZXhlY3V0ZShWZWN0b3I8UmVm
UHRyPE5vZGU+ID4mIG1hdGNoZWRFbGVtZW50cykgY29uc3QKICAgICAgICAgaWYgKG4tPmlzRWxl
bWVudE5vZGUoKSkgewogICAgICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PEVsZW1lbnQqPihuKTsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzZWxl
Y3RvckNvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9zZWxlY3RvckNoZWNrZXIu
Y2hlY2tTZWxlY3RvcihtX3NlbGVjdG9yc1tpXS5zZWxlY3RvciwgZWxlbWVudCwgbV9zZWxlY3Rv
cnNbaV0uaXNGYXN0Q2hlY2thYmxlKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3NlbGVjdG9y
Q2hlY2tlci5jaGVja1NlbGVjdG9yKG1fc2VsZWN0b3JzW2ldLnNlbGVjdG9yLCBlbGVtZW50LCAw
LCBtX3NlbGVjdG9yc1tpXS5pc0Zhc3RDaGVja2FibGUpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1hdGNoZWRFbGVtZW50cy5hcHBlbmQoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgICAgIGlm
IChmaXJzdE1hdGNoT25seSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4KaW5kZXggNzk5MTYzYzJmYWZkMDNk
YTA3ZmFmZDU2YTYyMjYwZTBmNDE5MzBjZS4uOTE2ZGU0ODIwNDI0Zjc4N2NjZjJmYTQ3OWVlYmRk
YzUwOWExMjVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRl
TmFtZXMuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4K
QEAgLTI2Niw2ICsyNjYsNyBAQCBydWxlcwogc2FuZGJveAogc2NoZW1lCiBzY29wZQorc2NvcGVk
CiBzY3JvbGxhbW91bnQKIHNjcm9sbGRlbGF5CiBzY3JvbGxpbmcKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuY3BwCmluZGV4IDY0OGQwYmQ2ZTU1OWM4MWRmNDgwNWM3M2MwZTI5
ZjhlNWUxNmQxM2MuLjQ1YmY2YTcwMzE2YTE5ZDdlNTY0ZjdiMjJmOWYxZDA1M2RhZjUwYmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcApAQCAtMzgsNiArMzgsNyBA
QCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogaW5saW5lIEhUTUxTdHlsZUVsZW1lbnQ6OkhU
TUxTdHlsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
Y3VtZW50LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUs
IGRvY3VtZW50KQogICAgICwgU3R5bGVFbGVtZW50KGRvY3VtZW50LCBjcmVhdGVkQnlQYXJzZXIp
CisgICAgLCBtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudChmYWxzZSkKIHsKICAgICBB
U1NFUlQoaGFzVGFnTmFtZShzdHlsZVRhZykpOwogfQpAQCAtNTYsMTAgKzU3LDQ4IEBAIHZvaWQg
SFRNTFN0eWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQog
ewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyICYmIG1fc2hlZXQpCiAgICAgICAg
IG1fc2hlZXQtPnNldFRpdGxlKGF0dHItPnZhbHVlKCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBzY29wZWRBdHRyKSB7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gc2NvcGluZ0Vs
ZW1lbnQoKTsKKyAgICAgICAgQVNTRVJUKHNjb3BlIHx8ICFtX2lzUmVnaXN0ZXJlZFdpdGhTY29w
aW5nRWxlbWVudCk7CisgICAgICAgIGlmIChzY29wZSkgeworICAgICAgICAgICAgaWYgKHNjb3Bl
ZCgpKQorICAgICAgICAgICAgICAgIHJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdW5yZWdpc3RlcldpdGhTY29waW5nRWxlbWVu
dCgpOworICAgICAgICAgICAgc2NvcGUtPnNldE5lZWRzU3R5bGVSZWNhbGMoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaW5Eb2N1bWVudCgpICYmICFkb2N1bWVudCgpLT5wYXJzaW5nKCkgJiYg
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3JDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOworICAgIH0KICAgICBlbHNlCiAgICAgICAg
IEhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAordm9pZCBIVE1M
U3R5bGVFbGVtZW50OjpyZWdpc3RlcldpdGhTY29waW5nRWxlbWVudCgpCit7CisgICAgQVNTRVJU
KCFtX2lzUmVnaXN0ZXJlZFdpdGhTY29waW5nRWxlbWVudCk7CisgICAgaWYgKCFtX2lzUmVnaXN0
ZXJlZFdpdGhTY29waW5nRWxlbWVudCkgeworICAgICAgICBFbGVtZW50KiBzY29wZSA9IHNjb3Bp
bmdFbGVtZW50KCk7CisgICAgICAgIGlmICghc2NvcGUpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgc2NvcGUtPnJlZ2lzdGVyU2NvcGVkSFRNTFN0eWxlQ2hpbGQoKTsKKyAgICAgICAg
bV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQgPSB0cnVlOworICAgIH0KK30KKwordm9p
ZCBIVE1MU3R5bGVFbGVtZW50Ojp1bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCkKK3sKKyAg
ICBBU1NFUlQobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQgfHwgIXNjb3BlZCgpKTsK
KyAgICBpZiAobV9pc1JlZ2lzdGVyZWRXaXRoU2NvcGluZ0VsZW1lbnQpIHsKKyAgICAgICAgRWxl
bWVudCogc2NvcGUgPSBzY29waW5nRWxlbWVudCgpOworICAgICAgICBBU1NFUlQoc2NvcGUpOwor
ICAgICAgICBpZiAoc2NvcGUpCisgICAgICAgICAgICBzY29wZS0+dW5yZWdpc3RlclNjb3BlZEhU
TUxTdHlsZUNoaWxkKCk7CisgICAgICAgIG1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50
ID0gZmFsc2U7CisgICAgfQorfQorCiB2b2lkIEhUTUxTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNp
bmdDaGlsZHJlbigpCiB7CiAgICAgU3R5bGVFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4o
dGhpcyk7CkBAIC02OCwxMCArMTA3LDE3IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVudDo6ZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkKIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpCiB7CisgICAgcmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQoKTsKICAgICBIVE1M
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKICAgICBTdHlsZUVsZW1lbnQ6Omluc2Vy
dGVkSW50b0RvY3VtZW50KGRvY3VtZW50KCksIHRoaXMpOwogfQogCit2b2lkIEhUTUxTdHlsZUVs
ZW1lbnQ6OndpbGxSZW1vdmUoKQoreworICAgIHVucmVnaXN0ZXJXaXRoU2NvcGluZ0VsZW1lbnQo
KTsKKyAgICBIVE1MRWxlbWVudDo6d2lsbFJlbW92ZSgpOworfQorCiB2b2lkIEhUTUxTdHlsZUVs
ZW1lbnQ6OnJlbW92ZWRGcm9tRG9jdW1lbnQoKQogewogICAgIEhUTUxFbGVtZW50OjpyZW1vdmVk
RnJvbURvY3VtZW50KCk7CkBAIC0xMTcsNCArMTYzLDI0IEBAIHZvaWQgSFRNTFN0eWxlRWxlbWVu
dDo6c2V0RGlzYWJsZWQoYm9vbCBzZXREaXNhYmxlZCkKICAgICAgICAgc3R5bGVTaGVldC0+c2V0
RGlzYWJsZWQoc2V0RGlzYWJsZWQpOwogfQogCitib29sIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3Bl
ZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoc2NvcGVkQXR0cik7Cit9
CisKK0VsZW1lbnQqIEhUTUxTdHlsZUVsZW1lbnQ6OnNjb3BpbmdFbGVtZW50KCkgY29uc3QKK3sK
KyAgICBpZiAoIW1faXNSZWdpc3RlcmVkV2l0aFNjb3BpbmdFbGVtZW50ICYmICFzY29wZWQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBuZWVkcyB0
byBiZSByZWZpbmVkIGZvciBzY29wZWQgc3R5bGVzaGVldHMgd2l0aGluIHNoYWRvdyBET00uCisg
ICAgLy8gQXMgd3JpdHRlbiwgc3VjaCBhIHN0eWxlc2hlZXQgY291bGQgc3R5bGUgdGhlIGhvc3Qg
ZWxlbWVudCwgYXMgd2VsbCBhcyBjaGlsZHJlbiBvZiB0aGUgaG9zdC4KKyAgICAvLyBPVE9ILCB0
aGlzIHBhdmVzIHRoZSB3YXkgZm9yIGEgOmJvdW5kLWVsZW1lbnQgaW1wbGVtZW50YXRpb24uCisg
ICAgQ29udGFpbmVyTm9kZSogcGFyZW50T3JIb3N0ID0gcGFyZW50T3JIb3N0Tm9kZSgpOworICAg
IGlmICghcGFyZW50T3JIb3N0IHx8ICFwYXJlbnRPckhvc3QtPmlzRWxlbWVudE5vZGUoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gdG9FbGVtZW50KHBhcmVudE9ySG9zdCk7Cit9
CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgKaW5kZXggYWYyODA4NWRi
YmJmNDVlZDdjZGQ0YmQyNGY0ZGY0ZmRkZmZlNGUxZi4uNzJhYjgyODNiMjUyNGIxZDJkZGVkYTlh
NzEwNDQ5MTg1Mjk0ZDE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5
bGVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmgK
QEAgLTQyLDEyICs0MiwxNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNhYmxlZCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0RGlzYWJsZWQoYm9vbCk7CiAKKyAgICBib29sIHNjb3BlZCgpIGNvbnN0Owor
ICAgIEVsZW1lbnQqIHNjb3BpbmdFbGVtZW50KCkgY29uc3Q7CisgICAgYm9vbCBpc1JlZ2lzdGVy
ZWRXaXRoU2NvcGluZ0VsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzUmVnaXN0ZXJlZFdpdGhT
Y29waW5nRWxlbWVudDsgfQorCiBwcml2YXRlOgogICAgIEhUTUxTdHlsZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogCiAgICAg
Ly8gb3ZlcmxvYWQgZnJvbSBIVE1MRWxlbWVudAogICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShBdHRyaWJ1dGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvRG9j
dW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFJlbW92ZSgpOwogICAgIHZpcnR1YWwgdm9p
ZCByZW1vdmVkRnJvbURvY3VtZW50KCk7CiAgICAgdmlydHVhbCB2b2lkIGNoaWxkcmVuQ2hhbmdl
ZChib29sIGNoYW5nZWRCeVBhcnNlciA9IGZhbHNlLCBOb2RlKiBiZWZvcmVDaGFuZ2UgPSAwLCBO
b2RlKiBhZnRlckNoYW5nZSA9IDAsIGludCBjaGlsZENvdW50RGVsdGEgPSAwKTsKIApAQCAtNjEs
NiArNjYsMTEgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiBt
ZWRpYSgpIGNvbnN0OwogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29u
c3Q7CisKKyAgICB2b2lkIHJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisgICAgdm9pZCB1
bnJlZ2lzdGVyV2l0aFNjb3BpbmdFbGVtZW50KCk7CisKKyAgICBib29sIG1faXNSZWdpc3RlcmVk
V2l0aFNjb3BpbmdFbGVtZW50OwogfTsKIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFN0eWxlRWxlbWVudC5pZGwKaW5kZXggYzk4NjI5YzYyNDYyZGIwMjQ0YTE2YTU3MDI4
OGY3YjYxMWRiZTQ2My4uNjQ5MGMzYTdiMmNjMzZmNWIwODRjNTAyODA1ZGY2OGY2YmY4ZDc1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaWRsCkBAIC0yNCw2ICsyNCw3
IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgYXR0cmlidXRlIGJvb2xlYW4gZGlzYWJsZWQ7CiAg
ICAgICAgIGF0dHJpYnV0ZSBbUmVmbGVjdF0gRE9NU3RyaW5nIG1lZGlhOwogICAgICAgICBhdHRy
aWJ1dGUgW1JlZmxlY3RdIERPTVN0cmluZyB0eXBlOworICAgICAgICBhdHRyaWJ1dGUgW1JlZmxl
Y3RdIGJvb2xlYW4gc2NvcGVkOwogCiAgICAgICAgIC8vIERPTSBMZXZlbCAyIFN0eWxlCiAgICAg
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTdHlsZVNoZWV0IHNoZWV0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>