<?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>209985</bug_id>
          
          <creation_ts>2020-04-03 13:57:44 -0700</creation_ts>
          <short_desc>Stop using live ranges in DocumentMarkerController</short_desc>
          <delta_ts>2020-04-06 12:07:04 -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>HTML Editing</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1637519</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-03 13:57:44 -0700</bug_when>
    <thetext>Stop using live ranges in DocumentMarkerController</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637582</commentid>
    <comment_count>1</comment_count>
      <attachid>395421</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-03 17:27:47 -0700</bug_when>
    <thetext>Created attachment 395421
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637787</commentid>
    <comment_count>2</comment_count>
      <attachid>395470</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-04 17:44:11 -0700</bug_when>
    <thetext>Created attachment 395470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637788</commentid>
    <comment_count>3</comment_count>
      <attachid>395471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-04 17:51:01 -0700</bug_when>
    <thetext>Created attachment 395471
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637797</commentid>
    <comment_count>4</comment_count>
      <attachid>395474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-04 20:35:25 -0700</bug_when>
    <thetext>Created attachment 395474
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637802</commentid>
    <comment_count>5</comment_count>
      <attachid>395474</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-04 21:25:31 -0700</bug_when>
    <thetext>Comment on attachment 395474
Patch

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

&gt; Source/WebCore/rendering/RenderObject.cpp:45
&gt; +#include &quot;NodeTraversal.h&quot;

Oh I don’t think I needed to add this.

&gt; Tools/DumpRenderTree/DumpRenderTree.xcodeproj/xcshareddata/xcschemes/DumpRenderTree.xcscheme:-1
&gt; -&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

Oops I should not include this in my patch.

&gt; Tools/WebKitTestRunner/WebKitTestRunner.xcodeproj/xcshareddata/xcschemes/WebKitTestRunner.xcscheme:-1
&gt; -&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

Also an error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1637907</commentid>
    <comment_count>6</comment_count>
      <attachid>395514</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-05 10:12:15 -0700</bug_when>
    <thetext>Created attachment 395514
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638003</commentid>
    <comment_count>7</comment_count>
      <attachid>395538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-05 17:43:08 -0700</bug_when>
    <thetext>Created attachment 395538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638009</commentid>
    <comment_count>8</comment_count>
      <attachid>395538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-05 19:48:49 -0700</bug_when>
    <thetext>Comment on attachment 395538
Patch

Ready for review now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638011</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-05 20:13:57 -0700</bug_when>
    <thetext>Adding Antti since he’s been reviewing this series.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638067</commentid>
    <comment_count>10</comment_count>
      <attachid>395538</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-06 04:55:30 -0700</bug_when>
    <thetext>Comment on attachment 395538
Patch

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

Wish the patch was more focused on what it says in the title, with unrelated refactoring done separately.

&gt; Source/WebCore/dom/DocumentMarker.h:105
&gt; +        , DictationData // DictationAlternatives
&gt; +#if PLATFORM(IOS_FAMILY)
&gt; +        , Vector&lt;String&gt; // DictationPhraseWithAlternatives
&gt; +        , RetainPtr&lt;id&gt; // DictationResult
&gt; +#endif
&gt; +        , RefPtr&lt;Node&gt; // DraggedContent

I&apos;m not sure removing the types and then having to comment here what the variants are is an improvement. Call sites end up confusing too.

&gt; Source/WebCore/dom/DocumentMarker.h:120
&gt; -    void clearData() { m_data = false; }
&gt; +    void clearData() { m_data = String { }; }

You might consider using WTF::Monostate for the empty Variant case. It can be cleaner to use a state that is separate from any actual values.

&gt; Source/WebCore/dom/DocumentMarkerController.cpp:629
&gt; +        if (auto renderer = node.renderer())
&gt; +            renderer-&gt;repaint();

I think we still usually mark plain pointers with auto*

&gt; Source/WebCore/dom/Node.h:206
&gt; -    virtual bool isCharacterDataNode() const { return false; }
&gt; +    bool isCharacterDataNode() const { return !isContainerNode() &amp;&amp; (isTextNode() || virtualIsCharacterData()); }

Nice ninja optimization.

&gt; Source/WebCore/dom/SimpleRange.h:59
&gt; +IntersectingNodeRange intersectingNodes(const SimpleRange&amp;);

This is nice.

&gt; Source/WebCore/rendering/RenderObject.h:156
&gt; -    // Convenience function for getting to the nearest enclosing box of a RenderObject.
&gt; +    // Nearest enclosing box.
&gt;      WEBCORE_EXPORT RenderBox&amp; enclosingBox() const;

Event the compressed comment doesn&apos;t really add anything (and if it did, the right action would be to rename the function).

&gt; Source/WebCore/rendering/RenderObject.h:172
&gt; +    // Forbid calls to setNeedsLayout() during its lifetime.
&gt; +    class SetLayoutNeededForbiddenScope;

&quot;Forbid&quot; is vague. Can the type be renamed to say &quot;assert&quot;? At least the comment should mention this just enables an assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638127</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-06 09:49:15 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #10)
&gt; Wish the patch was more focused on what it says in the title, with unrelated
&gt; refactoring done separately.

I’ll try for that more in the future. My next patch has many bits of refactoring in it, and I will break it into pieces rather than landing all at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638136</commentid>
    <comment_count>12</comment_count>
      <attachid>395538</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-06 10:00:25 -0700</bug_when>
    <thetext>Comment on attachment 395538
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentMarker.h:105
&gt;&gt; +        , RefPtr&lt;Node&gt; // DraggedContent
&gt; 
&gt; I&apos;m not sure removing the types and then having to comment here what the variants are is an improvement. Call sites end up confusing too.

Even with the structures, it wasn&apos;t clear which variant value was for which document marker type, except for the structures that happened to be named the same as the types. The real solution would be to get rid of the enum for the type and use structures only for the types. But this wouldn’t work in an OptionSet. There’s no great way to combine a Variant and an enum. I wish there was. The comments are to address that.

The structures were wrong, for example DictationAlternativesData had two data members, but only one each was used for two different marker types. I removed two of them because they were wrong.

I could bring back either structures or named types to make call sites a little easier to read.

The main thing that helped make the call sites easy to read before was all the convenience functions, which help to hide the ugliness of using a Variant. I could add those back, but I wouldn&apos;t put them in this header because then there’s a lot of conditional code.

Your comment is definitely valid!

However, I am tempted to leave this exactly as-is, for now at least.

&gt;&gt; Source/WebCore/dom/DocumentMarker.h:120
&gt;&gt; +    void clearData() { m_data = String { }; }
&gt; 
&gt; You might consider using WTF::Monostate for the empty Variant case. It can be cleaner to use a state that is separate from any actual values.

I did consider it.

But since the &quot;basic&quot; type here is String, null string works so well for this.

I agree Monostate is cleaner, but not enough better that it seemed worth it to me.

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.cpp:629
&gt;&gt; +            renderer-&gt;repaint();
&gt; 
&gt; I think we still usually mark plain pointers with auto*

I am willing to do that. But I have noticed as I have been refactoring to turn plain pointer return values in RefPtr and Ref (as requested by Ryosuke) that having the * will require touching many call sites that otherwise would not have be touched.

Maybe the real question is whether we will be doing that or not. If not, then the * can help remind people something is a raw pointer.

&gt;&gt; Source/WebCore/dom/Node.h:206
&gt;&gt; +    bool isCharacterDataNode() const { return !isContainerNode() &amp;&amp; (isTextNode() || virtualIsCharacterData()); }
&gt; 
&gt; Nice ninja optimization.

Should have just landed this separately. Had it sitting in the SimpleRange.cpp source file waiting to be moved up.

&gt;&gt; Source/WebCore/dom/SimpleRange.h:59
&gt;&gt; +IntersectingNodeRange intersectingNodes(const SimpleRange&amp;);
&gt; 
&gt; This is nice.

Thanks. I’m trying to make the idiom better since I have to touch the code that was using live ranges. A safer approach would be to replicate the old crufty way Range worked, but I think it’s worth the risk.

&gt;&gt; Source/WebCore/rendering/RenderObject.h:156
&gt;&gt;      WEBCORE_EXPORT RenderBox&amp; enclosingBox() const;
&gt; 
&gt; Event the compressed comment doesn&apos;t really add anything (and if it did, the right action would be to rename the function).

Will remove it.

&gt;&gt; Source/WebCore/rendering/RenderObject.h:172
&gt;&gt; +    class SetLayoutNeededForbiddenScope;
&gt; 
&gt; &quot;Forbid&quot; is vague. Can the type be renamed to say &quot;assert&quot;? At least the comment should mention this just enables an assert.

I will change the comment. Totally willing to rename too (not that I named these). Here are the current names:

    isSetNeedsLayoutForbidden
    setNeedsLayoutIsForbidden
    m_setNeedsLayoutForbidden
    SetLayoutNeededForbiddenScope
    SetLayoutNeededForbiddenScope::m_preexistingForbidden</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638151</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-06 10:21:08 -0700</bug_when>
    <thetext>Committed r259575: &lt;https://trac.webkit.org/changeset/259575&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638152</commentid>
    <comment_count>14</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-06 10:22:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/61347856&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638157</commentid>
    <comment_count>15</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-06 10:25:30 -0700</bug_when>
    <thetext>&gt; The main thing that helped make the call sites easy to read before was all
&gt; the convenience functions, which help to hide the ugliness of using a
&gt; Variant. I could add those back, but I wouldn&apos;t put them in this header
&gt; because then there’s a lot of conditional code.

Accessors seem to work well when not going all-in with WTF::switchOn etc.
&gt; Your comment is definitely valid!
&gt; 
&gt; However, I am tempted to leave this exactly as-is, for now at least.

That is ok too.

&gt; I will change the comment. Totally willing to rename too (not that I named
&gt; these). Here are the current names:

I know, but this patch removes the debug ifdefs, so it is no longer clear this is debug code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638223</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-06 12:07:04 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #15)
&gt; &gt; The main thing that helped make the call sites easy to read before was all
&gt; &gt; the convenience functions, which help to hide the ugliness of using a
&gt; &gt; Variant. I could add those back, but I wouldn&apos;t put them in this header
&gt; &gt; because then there’s a lot of conditional code.
&gt; 
&gt; Accessors seem to work well when not going all-in with WTF::switchOn etc.

I agree that since WTF::get is so ugly it’s easier to read code that wraps it in a function. The getters do that, but maybe I can find another place for the helper functions that avoid concentrating all the code in one place. It should be easy to add another document marker type without making the code hard to read.

Before my patch this was full of unused features, and I feel that the complexity of the header file made it hard to see that.

I also think that DocumentMarker would be better as a struct rather than a class.

&gt; &gt; I will change the comment. Totally willing to rename too (not that I named
&gt; &gt; these). Here are the current names:
&gt; 
&gt; I know, but this patch removes the debug ifdefs, so it is no longer clear
&gt; this is debug code.

Got it. Maybe you can help me come up with the new names. I will definitely change them if we can decide on good ones. How about these?

    isSetNeedsLayoutForbidden -&gt; shouldAssertOnSetNeedsLayout
    setNeedsLayoutIsForbidden -&gt; setAssertOnSetNeedsLayout
    m_setNeedsLayoutForbidden -&gt; m_shouldAssertOnSetNeedsLayout
    SetLayoutNeededForbiddenScope -&gt; SetAssertOnSetNeedsLayout
    SetLayoutNeededForbiddenScope::m_preexistingForbidden -&gt; m_oldValue</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395421</attachid>
            <date>2020-04-03 17:27:47 -0700</date>
            <delta_ts>2020-04-04 17:44:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200403172746.patch</filename>
            <type>text/plain</type>
            <size>134426</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NDAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVlOTNkZGI2OWJiMzkw
NWZjMjcxYTJmZWYxM2JkMDBmNGZmZTE0Mi4uZmVjMzQwYjZjNDZhNmUyZTgzZjViYTU1MzIxYzM1
MTRjODMzMzEwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5MiBAQAorMjAyMC0wNC0wMyAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJh
bmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gUmVtb3ZlZCB1c2VzIG9mIGxpdmUgcmFuZ2VzIGZy
b20gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLgorICAgICAgICAtIE1hZGUgYSByZXBsYWNlbWVu
dCBmb3IgUmFuZ2U6OmFic29sdXRlVGV4dFF1YWRzLCBpbiBSZW5kZXJPYmplY3QsCisgICAgICAg
ICAgYW5kIG1vdmVkIGFsbCBjYWxsZXJzIG92ZXIuCisgICAgICAgIC0gQWRkZWQgYSBmYXN0IHBh
dGggZm9yIE5vZGU6OmlzQ2hhcmFjdGVyRGF0YU5vZGUgdGhhdCBtYWtlcyBpdCB3b3JrCisgICAg
ICAgICAgd2l0aG91dCBhIHZpcnR1YWwgZnVuY3Rpb24gY2FsbCBmb3IgdGhlIGNvbW1vbiBub2Rl
IHR5cGVzLgorICAgICAgICAtIEFkZGVkIGEgTm9kZTo6bGVuZ3RoIGZ1bmN0aW9uIHRoYXQgbWF0
Y2hlcyB0aGUgRE9NIHNwZWNpZmljYXRpb24ncworICAgICAgICAgIGRlZmluaXRvbiBvZiBhIG5v
ZGUncyBsZW5ndGgsIHBhcnQgb2YgaG93IHJhbmdlcyBhcmUgZGVmaW5lZC4KKyAgICAgICAgLSBB
ZGRlZCBhIHN0cnVjdHVyZSBPZmZzZXRSYW5nZSB0byByZXByZXNlbnQgc3RhcnQvZW5kIG9mZnNl
dHMgd2l0aGluCisgICAgICAgICAgYSBzaW5nbGUgY2hhcmFjdGVyIGRhdGEgbm9kZS4gVGhpcyBp
cyBhIGNvbW1vbiBpZGlvbSB0byBoYW5kbGUgcG9zc2libGUKKyAgICAgICAgICBwYXJ0aWFsIHNl
bGVjdGlvbiBvZiB0ZXh0IG5vZGVzIGF0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSByYW5nZSB3
aGVuCisgICAgICAgICAgaXRlcmF0aW5nIHRleHQgd2l0aGluIGEgcmFuZ2UuCisgICAgICAgIC0g
Q2hhbmdlZCBEb2N1bWVudE1hcmtlciBmdW5jdGlvbnMgdG8gdXNlIE9mZnNldFJhbmdlLgorICAg
ICAgICAtIEFkZGVkIGhlbHBlciBmdW5jdGlvbnMgZm9yIHR1cm5pbmcgYSB2ZWN0b3Igb2YgcXVh
ZHMgaW50byBhIHZlY3RvcgorICAgICAgICAgIG9mIGJvdW5kaW5nIGJveCByZWN0YW5nbGVzLCBh
bmQgZm9yIGNvbXB1dGluZyBhIHVuaW9uIG9mIGFsbCB0aGUKKyAgICAgICAgICByZWN0YW5nbGVz
LCBzaW5jZSBib3RoIG9mIHRoZXNlIGFyZSBjb21tb24gY29kaW5nIHBhdHRlcm5zLgorICAgICAg
ICAtIEFkZGVkIGFuIGludGVyc2VjdGluZ05vZGVzIGZ1bmN0aW9uLCBwcm9kdWNpbmcgYSBmb3It
bG9vcC1jb21wYXRpYmxlCisgICAgICAgICAgcmFuZ2UgZm9yIGl0ZXJhdGluZyBhbGwgbm9kZXMg
Y292ZXJlZCBieSBhIERPTSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIFJlbmRlck9iamVjdDo6
U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgc28gaXQgY2FuIGJlIHVzZWQKKyAgICAgICAg
ICB3aXRob3V0IGFuICNpZiBhdCBlYWNoIGNhbGwgc2l0ZSwgZXhwYW5kcyB0byBub3RoaW5nIGlu
IHJlbGVhc2UgYnVpbGRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRl
ZCBzaW5jZSBpc0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1
YWwgZnVuY3Rpb24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnQ6OnRleHRSZW1vdmVkKTogUGFzcyBhbiBPZmZzZXRSYW5nZS4KKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlci5oOiBVc2UgT2Zmc2V0UmFuZ2UuCisKKyAgICAgICAg
KiBkb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcDogUmVtb3ZlZCBpbmNsdWRlIG9mICJS
YW5nZS5oIi4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29s
bGVjdFRleHRSYW5nZXMpOiBDaGFuZ2UgcmV0dXJuIHZhbHVlCisgICAgICAgIHRvIHJldHVybiBh
IHN0cnVjdHVyZSB3aXRoIGEgbm9kZSBhbmQgYW4gb2Zmc2V0IHJhbmdlIHJhdGhlciB0aGFuIHVz
aW5nIGEKKyAgICAgICAgU2ltcGxlUmFuZ2U7IGFkZHMgY2xhcml0eSB0byB0aGUgZmFjdCB0aGF0
IGl0J3MgZ3VyYW50ZWVkIHRvIGJlIG9ubHkgYQorICAgICAgICBzaW5nbGUgbm9kZS4gTWF5IGV2
ZW4gd2FudCB0byBjb25zaWRlciBzb21lIGRheSBtb3ZpbmcgVGV4dEl0ZXJhdG9yIG92ZXIKKyAg
ICAgICAgdG8gdGhpcywgYnV0IGl0J3MgZGVmaW5pdGVseSBiZXR0ZXIgaGVyZSBmb3Igbm93Lgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIpOiBV
cGRhdGVkIGZvciB0aGUgY2hhbmdlIHRvCisgICAgICAgIGNvbGxlY3RUZXh0UmFuZ2VzIGFuZCB0
byBEb2N1bWVudE1hcmtlciBjb25zdHJ1Y3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25SZXN1bHRNYXJrZXIpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJh
Z2dlZENvbnRlbnRNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vycyk6
IEp1c3QgaGF2ZSB0aGlzIGNhbGwKKyAgICAgICAgZmlsdGVyTWFya2VycyB3aXRoIG51bGwgZm9y
IHRoZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6ZmlsdGVyTWFya2Vycyk6IFVwZGF0ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29s
bGVjdFRleHRSYW5nZXMgYW5kIHRvIHBhc3MgYSBPZmZzZXRSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OnVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIpOiBVc2UgU2ltcGxlUmFuZ2UgaW5zdGVh
ZCBvZiBhIGxpdmUKKyAgICAgICAgcmFuZ2UuIFVzZSB0aGUgbmV3IFJlbmRlck9iamVjdDo6YWJz
b2x1dGVUZXh0UXVhZHMgYW5kIGJvdW5kaW5nQm94ZXMgZnVuY3Rpb25zCisgICAgICAgIHRvIG1h
a2UgdGhpcyBjbGVhcmVyIGFuZCBzaW1wbGVyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5zdGVh
ZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51c2Vk
ICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNzaW5n
IDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0aWxs
IGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OnJlcGFpbnRNYXJrZXJzKTogU2ltcGxpZmllZCBsb29wcy4KKyAgICAgICAgKFdlYkNvcmU6OkRv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZSk6IFVzZSB0aGUgbmV3Cisg
ICAgICAgIGluZXJzZWN0aW5nTm9kZXMgYW5kIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5j
dGlvbnMgdG8gZ3JlYXRseQorICAgICAgICBzaW1wbGlmeSB0aGlzIGZ1bmN0aW9uIGFuZCBtYWtl
IGl0IHdvcmsgd2l0aCBhIFNpbXBsZVJhbmdlIGluc3RlYWQKKyAgICAgICAgb2YgYSBsaXZlIHJh
bmdlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJr
ZXJzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmNsZWFyRGVzY3JpcHRpb25Pbk1hcmtlcnNJbnRlcnNlY3RpbmdSYW5nZSk6IERpdHRvLgorICAg
ICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3IgdGhlIGFi
b3ZlLgorCisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6Ym91bmRzSW5Sb290Vmlld1NwYWNlKTogVXNlIHVuaXRlZEJvdW5kaW5nQm94ZXMuCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphYnNvbHV0ZUV2ZW50Qm91bmRzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZGluZ0Fic29sdXRlUmVjdFdpdGhvdXRMYXlv
dXQpOiBEaXR0by4KKworICAgICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIGlubGluZSBmYXN0IHBh
dGggZm9yIGlzQ2hhcmFjdGVyRGF0YU5vZGUuCisgICAgICAgIE1vdmVkIHNvbWUgaW5saW5lIGZ1
bmN0aW9uIGJvZGllcyBvdXQgb2YgY2xhc3MgZGVmaW5pdGlvbiBzbyBpdCdzCisgICAgICAgIGVh
c2llciB0byByZWFkIGl0IGFuZCBnZXQgYW4gb3ZlcnZpZXcuCisKKyAgICAgICAgKiBkb20vUmFu
Z2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmFic29sdXRlUmVjdHNGb3JSYW5nZUlu
VGV4dCBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6
OmFic29sdXRlVGV4dFF1YWRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJh
bmdlOjpib3JkZXJBbmRUZXh0UmVjdHMgY29uc3QpOiBVc2UgYm91bmRpbmdCb3hlcy4KKworICAg
ICAgICAqIGRvbS9SYW5nZS5oOiBEZWxldGVkIGFic29sdXRlVGV4dFF1YWRzLgorCisgICAgICAg
ICogZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
cmVkRG9jdW1lbnRNYXJrZXI6OnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMpOiBUYWtlCisgICAg
ICAgIGFuIHJ2YWx1ZSByZWZlcmVuY2Ugc28gd2UgZG9uJ3QgaGF2ZSB0byBjb3B5IGEgdmVjdG9y
LgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RJc0NoYXJhY3RlckRhdGEpOiBEZWxldGVkLiBNb3ZlZCB0aGUgb3B0aW1pemF0aW9ucyBpbnRv
CisgICAgICAgIE5vZGU6OmlzQ2hhcmFjdGVyRGF0YU5vZGUgc28gbm93IGFsbCBjYWxsZXJzIGdl
dCB0aGVtLgorICAgICAgICAoV2ViQ29yZTo6bGVuZ3RoKTogRGVsZXRlZC4gTW92ZWQgdG8gTm9k
ZTo6bGVuZ3RoLgorICAgICAgICAoV2ViQ29yZTo6bWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVD
b250ZW50cyk6IFVzZSBOb2RlOjpsZW5ndGguCisgICAgICAgIChXZWJDb3JlOjpJbnRlcnNlY3Rp
bmdOb2RlUmFuZ2U6OmZpcnN0IGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRl
cnNlY3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVsIGNvbnN0KTogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6b3BlcmF0b3IrKyk6IEFkZGVkLgorCisgICAgICAg
ICogZG9tL1NpbXBsZVJhbmdlLmg6IEFkZGVkIGludGVyc2VjdGluZ05vZGVzIGZ1bmN0aW9uLCBh
bmQgdGhlCisgICAgICAgIEludGVyc2VjdGluZ05vZGVSYW5nZSBhbmQgSW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yIGNsYXNzZXMgdXNlZAorICAgICAgICB0byBtYWtlIGl0IHdvcmsuIEFkZGVkIHRo
ZSBPZmZzZXRSYW5nZSBzdHJ1Y3R1cmUgYW5kIHRoZQorICAgICAgICBjaGFyYWN0ZXJEYXRhT2Zm
c2V0UmFuZ2UgZnVuY3Rpb24sIGFsc28gdG8gaGVscCB3aXRoIGl0ZXJhdGlvbi4KKworICAgICAg
ICAqIGVkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpzaG93KTogUGFzcyByZWZlcmVuY2UgdG8g
cmFuZ2UKKyAgICAgICAgcmF0aGVyIHRoYW4gcG9pbnRlciB0byByb290Vmlld1JlY3RGb3JSYW5n
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmly
ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJvb3RWaWV3UmVjdEZvclJhbmdlIGNvbnN0KToKKyAgICAgICAgVGFrZSBhIFNpbXBsZVJhbmdl
IGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLiBBbHNvIHVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzIGFuZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorICAgICAgICAqIGVk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oOiBVcGRhdGVkIGZvciBhYm92ZS4KKwor
ICAgICAgICAqIGVkaXRpbmcvRWRpdGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IpOiBVc2UKKyAgICAgICAgU2lt
cGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRU
ZXh0UmVjdGFuZ2xlcyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyBjb25zdCk6CisgICAgICAg
IE1lcmdlZCB0aGUgbG9naWMgZnJvbSBnZXRUZXh0UmVjdGFuZ2xlcyBpbiBoZXJlLCBhbmQgY2hh
bmdlZCB0bworICAgICAgICB1c2UgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQg
Ym91bmRpbmdCb3hlcy4KKyAgICAgICAgKiBlZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmg6IFVwZGF0
ZWQgZm9yIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgdGhlIGNvcHlNYXJrZXJzIGZ1bmN0aW9uLgor
ICAgICAgICAoV2ViQ29yZTo6U3BsaXRUZXh0Tm9kZUNvbW1hbmQ6OmRvVW5hcHBseSk6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tOgorICAgICAgICAo
V2ViQ29yZTo6ZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UpOiBVc2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKwor
ICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmll
dzo6cGFpbnRDb250ZW50cyk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0bworICAgICAgICBTZXRMYXlv
dXROZWVkZWRGb3JiaWRkZW5TY29wZS4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0JvdW5kaW5n
UmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAgVXNlIFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMsCisgICAg
ICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3VuZGluZ1Jl
Y3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ym91bmRpbmdCb3hlcyk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6dW5pdGVkQm91bmRpbmdCb3hlcyk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0Zsb2F0UXVhZC5oOiBBIGNvdXBsZSB0d2Vha3MsIHBsdXMgZGVjbGFyZWQgdGhl
CisgICAgICAgIGZ1bmN0aW9ucyBhYm92ZS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGggY29uc3QpOiBVcGRhdGUgZm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCBjb25zdCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6
OnBhaW50SW50b0xheWVyKTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGU6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAg
Q2hhbmdlZCB0byB0YWtlIGEgY29uc3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91
dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6Om1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZv
cgorICAgICAgICBjaGFuZ2VzIHRvIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25z
dCk6IFVzZQorICAgICAgICB1bml0ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVj
dEZvclJhbmdlKTogVXNlCisgICAgICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRl
eHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAg
ICAgIFJhbmdlOjphYnNvbHV0ZVRleHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNp
dHkgYW5kIHJlbW92ZWQKKyAgICAgICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRv
IGltcGxlbWVudCwgZmVhdHVyZSB0aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIg
c29tZSBvciBhbGwgb2YgdGhlIHF1YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKwor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92
ZWQgbXVsdGktbGluZSBmdW5jdGlvbgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJP
YmplY3QgY2xhc3MgZGVmaW5pdGlvbiB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFk
LiBEZWNsYXJlZCBhIG5ldyBhYnNvbHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAg
ICBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4g
Y2FuIGJlIGNvbnN0LgorICAgICAgICBDb25kaXRpb25hbGl6ZWQgU2V0TGF5b3V0TmVlZGVkRm9y
YmlkZGVuU2NvcGUgc28gaXQgY2FuIGJlIHVzZWQgaW4KKyAgICAgICAgcHJvZHVjdGlvbiBidWls
ZHMgYnV0IGV4cGFuZCB0byBubyBjb2RlLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjpwYWludCk6IFVw
ZGF0ZSBmb3IgY2hhbmdlcyB0bworICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29w
ZS4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cyk6IERp
dHRvLgorCiAyMDIwLTA0LTAyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEF2b2lkIG51bGwgZGVyZWYgYWZ0ZXIgaW5zZXJ0aW5nIGEgdGV4dCBmaWVs
ZCB3aXRoIGEgbGlzdCBhdHRyaWJ1dGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNDZmMWI5NjI5NjIzN2VkZmZjZjQz
Njg0OTRhYzMyNDEyNmQ2MDIxNS4uYjliMWUyZGM4NGE2ZWU0ZjYwNGM2N2FlMTRjOTNkYjIyMjhl
NjRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMC0wNC0wMyAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdl
KTogVXNlCisgICAgICAgIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMuCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOiBVc2UK
KyAgICAgICAgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRp
bmdCb3hlcy4KKwogMjAyMC0wNC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9mIGxpdmUgcmFuZ2VzIGZyb20gVGV4dEl0ZXJhdG9y
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggYTE0MGI5NjI0Y2FlOGFlMGI3ZmIxNGRm
MjRkZmQ2MTM5ZTdiZGM5Mi4uNWIxMjQ0ZjM1ODUwYmM2Yzk3MjYwZWY2NDAzNWE3ZjFhZmM3ZTM1
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA0
LTAzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5n
IGxpdmUgcmFuZ2VzIGluIERvY3VtZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAo
LVtET01Ob2RlIGFic29sdXRlUXVhZEFuZEluc2lkZUZpeGVkUG9zaXRpb246XSk6IFVzZSB1bml0
ZWRCb3VuZGluZ0JveGVzLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5tbToKKyAgICAgICAgKFdlYkVkaXRvckNsaWVudDo6aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRl
cyk6IFVzZSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzLgorICAgICAgICAqIFdlYlZp
ZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViSW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOmluRnJhbWU6
d2l0aExvb2t1cE9wdGlvbnM6aW5kaWNhdG9yT3B0aW9uczp0cmFuc2l0aW9uOl0pOgorICAgICAg
ICBVc2UgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKwogMjAyMC0wNC0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGFsbCB1c2VzIG9m
IGxpdmUgcmFuZ2VzIGZyb20gVGV4dEl0ZXJhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vQ2hhcmFjdGVyRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEu
aAppbmRleCAxNTI3YzUxZDViNDZkNDJiZGJhYzQ5M2U5ZTRiYmExYjJlZGJkZTNjLi5lMjMxZDUz
NTc3Y2I1MDg1YWQzOGViZTZlMDMyZjQxZTc5MTVhM2Q1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0
ZXJEYXRhLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBTdHJp
bmcgbm9kZVZhbHVlKCkgY29uc3QgZmluYWw7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Tm9k
ZVZhbHVlKGNvbnN0IFN0cmluZyYpIGZpbmFsOwotICAgIGJvb2wgaXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIHZpcnR1YWxJc0NoYXJh
Y3RlckRhdGEoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAgICAgaW50IG1heENoYXJh
Y3Rlck9mZnNldCgpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQgc2V0RGF0YUFuZFVwZGF0ZShjb25z
dCBTdHJpbmcmLCB1bnNpZ25lZCBvZmZzZXRPZlJlcGxhY2VkRGF0YSwgdW5zaWduZWQgb2xkTGVu
Z3RoLCB1bnNpZ25lZCBuZXdMZW5ndGgpOwogICAgIHZvaWQgbm90aWZ5UGFyZW50QWZ0ZXJDaGFu
Z2UoQ29udGFpbmVyTm9kZTo6Q2hpbGRDaGFuZ2VTb3VyY2UpOwpAQCAtNzAsNiArNzAsMTMgQEAg
cHJpdmF0ZToKICAgICBTdHJpbmcgbV9kYXRhOwogfTsKIAoraW5saW5lIHVuc2lnbmVkIE5vZGU6
Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgaWYgKGlzPENoYXJhY3RlckRhdGE+KCp0aGlzKSkKKyAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENoYXJhY3RlckRhdGE+KCp0aGlzKS5sZW5ndGgoKTsKKyAg
ICByZXR1cm4gY291bnRDaGlsZE5vZGVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpDaGFyYWN0ZXJEYXRhKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNWY4ODI1MmM2OGY5YjYwNjczYjJiZWVkZDc2NjRi
Y2Q3MTYzM2ZiYy4uOTdiMmYwZGNmYzQ0YjlmOTQzMDE2YmYxMjY5NDRlY2Y3NGNmZTM2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC00NjUzLDcgKzQ2NTMsNyBAQCB2b2lkIERvY3VtZW50
Ojp0ZXh0UmVtb3ZlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkKICAgICB9CiAKICAgICAvLyBVcGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBn
cmFtbWFyIGNoZWNraW5nLgotICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0LCBvZmZz
ZXQsIGxlbmd0aCk7CisgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIHsgb2Zmc2V0
LCBvZmZzZXQgKyBsZW5ndGggfSk7CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwg
b2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuaAppbmRleCA2NTViZDM2OGJiZGI1OWIzOWNlNzVmZmNkNzIwNmIzMmNmMDhlOGQ3Li43
ZWZhMzNjNmNkNDY2YzQ3NmNkYWQ1NzRiYzJjODIwNGYxOGZhNmZkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTIwLDggKzIwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJOb2Rl
LmgiCi0KKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBA
IC0xMTUsMTYgKzExNCwxNiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICA+OwogCi0gICAgRG9jdW1l
bnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBp
c0FjdGl2ZU1hdGNoKTsKLSAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9u
ID0gU3RyaW5nKCkpOwotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEmJik7CisgICAgRG9jdW1lbnRNYXJr
ZXIoT2Zmc2V0UmFuZ2UsIGJvb2wgaXNBY3RpdmVNYXRjaCk7CisgICAgRG9jdW1lbnRNYXJrZXIo
TWFya2VyVHlwZSwgT2Zmc2V0UmFuZ2UsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24gPSBTdHJp
bmcoKSk7CisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgT2Zmc2V0UmFuZ2UsIERhdGEm
Jik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJU
eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJp
bmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVzLCBSZXRh
aW5QdHI8aWQ+IG1ldGFkYXRhKTsKKyAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCBPZmZz
ZXRSYW5nZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4m
IGFsdGVybmF0aXZlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSk7CiAjZW5kaWYKIAogICAgIE1h
cmtlclR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgIHVuc2lnbmVk
IGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9CisgICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLnN0YXJ0OyB9CisgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5lbmQ7IH0KIAogICAgIGNvbnN0
IFN0cmluZyYgZGVzY3JpcHRpb24oKSBjb25zdDsKIApAQCAtMTM2LDggKzEzNSw4IEBAIHB1Ymxp
YzoKIAogICAgIC8vIE9mZnNldCBtb2RpZmljYXRpb25zIGFyZSBkb25lIGJ5IERvY3VtZW50TWFy
a2VyQ29udHJvbGxlci4KICAgICAvLyBPdGhlciBjbGFzc2VzIHNob3VsZCBub3QgY2FsbCBmb2xs
b3dpbmcgc2V0dGVycy4KLSAgICB2b2lkIHNldFN0YXJ0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkg
eyBtX3N0YXJ0T2Zmc2V0ID0gb2Zmc2V0OyB9Ci0gICAgdm9pZCBzZXRFbmRPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KSB7IG1fZW5kT2Zmc2V0ID0gb2Zmc2V0OyB9CisgICAgdm9pZCBzZXRTdGFydE9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9yYW5nZS5zdGFydCA9IG9mZnNldDsgfQorICAgIHZv
aWQgc2V0RW5kT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX3JhbmdlLmVuZCA9IG9mZnNldDsg
fQogICAgIHZvaWQgc2hpZnRPZmZzZXRzKGludCBkZWx0YSk7CiAKICNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQpAQCAtMTUwLDggKzE0OSw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBNYXJr
ZXJUeXBlIG1fdHlwZTsKLSAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OwotICAgIHVuc2lnbmVk
IG1fZW5kT2Zmc2V0OworICAgIE9mZnNldFJhbmdlIG1fcmFuZ2U7CiAgICAgRGF0YSBtX2RhdGE7
CiB9OwogCkBAIC0xODMsMzQgKzE4MSwzMSBAQCBjb25zdGV4cHIgYXV0byBEb2N1bWVudE1hcmtl
cjo6YWxsTWFya2VycygpIC0+IE9wdGlvblNldDxNYXJrZXJUeXBlPgogICAgIH07CiB9CiAKLWlu
bGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQs
IHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBpc0FjdGl2ZU1hdGNoKQoraW5saW5lIERvY3VtZW50
TWFya2VyOjpEb2N1bWVudE1hcmtlcihPZmZzZXRSYW5nZSByYW5nZSwgYm9vbCBpc0FjdGl2ZU1h
dGNoKQogICAgIDogbV90eXBlKFRleHRNYXRjaCkKLSAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRP
ZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgLCBtX3JhbmdlKHJhbmdl
KQogICAgICwgbV9kYXRhKGlzQWN0aXZlTWF0Y2gpCiB7CiB9CiAKLWlubGluZSBEb2N1bWVudE1h
cmtlcjo6RG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQoraW5saW5l
IERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIE9mZnNldFJh
bmdlIHJhbmdlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQogICAgIDogbV90eXBlKHR5cGUp
Ci0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5k
T2Zmc2V0KQorICAgICwgbV9yYW5nZShyYW5nZSkKICAgICAsIG1fZGF0YShkZXNjcmlwdGlvbikK
IHsKIH0KIAotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEmJiBk
YXRhKQoraW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5
cGUsIE9mZnNldFJhbmdlIHJhbmdlLCBEYXRhJiYgZGF0YSkKICAgICA6IG1fdHlwZSh0eXBlKQot
ICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9m
ZnNldCkKKyAgICAsIG1fcmFuZ2UocmFuZ2UpCiAgICAgLCBtX2RhdGEoV1RGTW92ZShkYXRhKSkK
IHsKIH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQgZGVs
dGEpCiB7Ci0gICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKLSAgICBtX2VuZE9mZnNldCArPSBk
ZWx0YTsKKyAgICBtX3JhbmdlLnN0YXJ0ICs9IGRlbHRhOworICAgIG1fcmFuZ2UuZW5kICs9IGRl
bHRhOwogfQogCiBpbmxpbmUgY29uc3QgU3RyaW5nJiBEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRp
b24oKSBjb25zdApAQCAtMjMzLDEwICsyMjgsOSBAQCBpbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtl
cjo6c2V0QWN0aXZlTWF0Y2goYm9vbCBpc0FjdGl2ZU1hdGNoKQogCiAvLyBGSVhNRTogaU9TIHNo
b3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24gbWFyayBzeXN0ZW0gd2l0aCB0aGUgb3RoZXIg
cGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMxMjQ5Pi4KIAotaW5saW5lIERvY3VtZW50TWFy
a2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpCitpbmxpbmUgRG9jdW1lbnRN
YXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwgT2Zmc2V0UmFuZ2UgcmFuZ2Us
IGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMsIFJldGFp
blB0cjxpZD4gbWV0YWRhdGEpCiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RhcnRPZmZz
ZXQoc3RhcnRPZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgLCBtX3Jh
bmdlKHJhbmdlKQogICAgICwgbV9kYXRhKERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGEgeyBhbHRl
cm5hdGl2ZXMsIG1ldGFkYXRhIH0pCiB7CiAgICAgQVNTRVJUKGlzRGljdGF0aW9uKCkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBj
ZDkzZWU1OTY4MWFkMjZkODRjMTM1MDg0OWM5ZWRhMmM3Y2QxMGRiLi5kNWJmY2E5Zjc3Y2E0ODhk
ZWMzYmVlM2YzZDU2MjkwZDUzMzc1MWZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vKQogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKQEAgLTYwLDEzNCArNTksMTE1
IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpkZXRhY2goKQogICAgIG1fcG9zc2li
bHlFeGlzdGluZ01hcmtlclR5cGVzID0geyB9OwogfQogCi1WZWN0b3I8UmVmUHRyPFJhbmdlPj4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpCithdXRvIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29sbGVjdFRleHRS
YW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSAtPiBWZWN0b3I8VGV4dFJhbmdlPgogewot
ICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiB0ZXh0UmFuZ2U7Ci0gICAgZm9yIChUZXh0SXRlcmF0
b3IgdGV4dEl0ZXJhdG9yKHJhbmdlKTsgIXRleHRJdGVyYXRvci5hdEVuZCgpOyB0ZXh0SXRlcmF0
b3IuYWR2YW5jZSgpKQotICAgICAgICB0ZXh0UmFuZ2UuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSh0
ZXh0SXRlcmF0b3IucmFuZ2UoKSkpOwotICAgIHJldHVybiB0ZXh0UmFuZ2U7CisgICAgVmVjdG9y
PFRleHRSYW5nZT4gcmFuZ2VzOworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHJhbmdl
KTsgIWl0ZXJhdG9yLmF0RW5kKCk7IGl0ZXJhdG9yLmFkdmFuY2UoKSkgeworICAgICAgICBhdXRv
IGN1cnJlbnRSYW5nZSA9IGl0ZXJhdG9yLnJhbmdlKCk7CisgICAgICAgIHJhbmdlcy5hcHBlbmQo
eyBXVEZNb3ZlKGN1cnJlbnRSYW5nZS5zdGFydC5jb250YWluZXIpLCB7IGN1cnJlbnRSYW5nZS5z
dGFydC5vZmZzZXQsIGN1cnJlbnRSYW5nZS5lbmQub2Zmc2V0IH0gfSk7CisgICAgfQorICAgIHJl
dHVybiByYW5nZXM7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJr
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24pKTsKKyAgICBm
b3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKKyAgICAgICAg
YWRkTWFya2VyKHRleHRQaWVjZS5ub2RlLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2Uu
cmFuZ2UsIGRlc2NyaXB0aW9uKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZSB0eXBlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJh
bmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBp
ZWNlLT5lbmRPZmZzZXQoKSkpOworICAgIGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29sbGVjdFRl
eHRSYW5nZXMocmFuZ2UpKQorICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLm5vZGUsIERvY3Vt
ZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS5yYW5nZSkpOwogfQogCiB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkTWFya2VyVG9Ob2RlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUp
CiB7Ci0gICAgYWRkTWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0
LCBzdGFydE9mZnNldCArIGxlbmd0aCkpOworICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVudE1h
cmtlcih0eXBlLCB7IHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCB9KSk7CiB9CiAK
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9k
ZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQogewotICAgIGFk
ZE1hcmtlcihub2RlLCBEb2N1bWVudE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZz
ZXQgKyBsZW5ndGgsIFdURk1vdmUoZGF0YSkpKTsKKyAgICBhZGRNYXJrZXIobm9kZSwgRG9jdW1l
bnRNYXJrZXIodHlwZSwgeyBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGggfSwgV1RG
TW92ZShkYXRhKSkpOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkVGV4
dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBhY3RpdmVNYXRjaCkKK3ZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZU1hdGNoKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9m
ZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQsIGFjdGl2ZU1hdGNoKSk7Ci0gICAgfQorICAgIGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29s
bGVjdFRleHRSYW5nZXMocmFuZ2UpKQorICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLm5vZGUs
IERvY3VtZW50TWFya2VyKHRleHRQaWVjZS5yYW5nZSwgYWN0aXZlTWF0Y2gpKTsKIH0KIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjph
ZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBj
b25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0
YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjphZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBpZCBtZXRhZGF0YSkKIHsKLSAgICBm
b3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQotICAgICAgICBh
ZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBl
LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2Ny
aXB0aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1ldGFkYXRhKSk7CisgICAgZm9yIChhdXRvJiB0ZXh0
UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisgICAgICAgIGFkZE1hcmtlcih0ZXh0
UGllY2Uubm9kZSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLnJhbmdlLCBkZXNjcmlw
dGlvbiwgaW50ZXJwcmV0YXRpb25zLCBtZXRhZGF0YSkpOwogfQogCi12b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihS
YW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCit2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0
aXZlc01hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBpbnRlcnByZXRhdGlvbnMpCiB7CiAgICAgQVNTRVJUKGludGVycHJldGF0aW9ucy5zaXplKCkg
PiAxKTsKICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA8PSAxKQogICAgICAgICByZXR1
cm47CiAKICAgICBzaXplX3QgbnVtYmVyT2ZBbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnMu
c2l6ZSgpIC0gMTsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMo
cmFuZ2UpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlcihEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgp
LCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBlbXB0eVN0cmluZygpLCBWZWN0b3I8U3RyaW5nPihu
dW1iZXJPZkFsdGVybmF0aXZlcyksIFJldGFpblB0cjxpZD4oKSk7CisgICAgZm9yIChhdXRvJiB0
ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKKyAgICAgICAgRG9jdW1lbnRN
YXJrZXIgbWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzLCB0ZXh0UGllY2UucmFuZ2UsIGVtcHR5U3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KG51bWJl
ck9mQWx0ZXJuYXRpdmVzKSwgUmV0YWluUHRyPGlkPigpKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBudW1iZXJPZkFsdGVybmF0aXZlczsgKytpKQogICAgICAgICAgICAgbWFya2Vy
LnNldEFsdGVybmF0aXZlKGludGVycHJldGF0aW9uc1tpICsgMV0sIGkpOwotICAgICAgICBhZGRN
YXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBtYXJrZXIpOworICAgICAgICBhZGRN
YXJrZXIodGV4dFBpZWNlLm5vZGUsIG1hcmtlcik7CiAgICAgfQogfQogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgaWQgbWV0YWRhdGEpCiB7Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNv
bGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3Rh
cnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJl
c3VsdCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBT
dHJpbmcoKSwgVmVjdG9yPFN0cmluZz4oKSwgbWV0YWRhdGEpKTsKKyAgICBmb3IgKGF1dG8mIHRl
eHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKKyAgICAgICAgYWRkTWFya2VyKHRl
eHRQaWVjZS5ub2RlLCBEb2N1bWVudE1hcmtlcihEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVz
dWx0LCB0ZXh0UGllY2UucmFuZ2UsIFN0cmluZygpLCBWZWN0b3I8U3RyaW5nPigpLCBtZXRhZGF0
YSkpOwogfQogCiAjZW5kaWYKIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERy
YWdnZWRDb250ZW50TWFya2VyKFJhbmdlJiByYW5nZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjphZGREcmFnZ2VkQ29udGVudE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Up
CiB7Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkg
ewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250
ZW50RGF0YSB7IHRleHRQaWVjZS0+Zmlyc3ROb2RlKCkgfTsKLSAgICAgICAgYWRkTWFya2VyKHRl
eHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRl
bnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RG
TW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOworICAgIGZvciAoYXV0byYgdGV4dFBpZWNlIDog
Y29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7CisgICAgICAgIERvY3VtZW50TWFya2VyOjpEcmFn
Z2VkQ29udGVudERhdGEgZHJhZ2dlZENvbnRlbnREYXRhIHsgdGV4dFBpZWNlLm5vZGUucHRyKCkg
fTsKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS5ub2RlLCB7IERvY3VtZW50TWFya2VyOjpE
cmFnZ2VkQ29udGVudCwgdGV4dFBpZWNlLnJhbmdlLCBXVEZNb3ZlKGRyYWdnZWRDb250ZW50RGF0
YSkgfSk7CiAgICAgfQogfQogCiAjaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNL
SU5HKQorCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkUGxhdGZvcm1UZXh0Q2hl
Y2tpbmdNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGtleSwg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVj
dFRleHRSYW5nZXMocmFuZ2UpKSB7CisgICAgZm9yIChhdXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0
VGV4dFJhbmdlcyhyYW5nZSkpIHsKICAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4
dENoZWNraW5nRGF0YSB0ZXh0Q2hlY2tpbmdEYXRhIHsga2V5LCB2YWx1ZSB9OwotICAgICAgICBh
ZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpQ
bGF0Zm9ybVRleHRDaGVja2luZywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2Ut
PmVuZE9mZnNldCgpLCBXVEZNb3ZlKHRleHRDaGVja2luZ0RhdGEpIH0pOworICAgICAgICBhZGRN
YXJrZXIodGV4dFBpZWNlLm5vZGUsIHsgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNr
aW5nLCB0ZXh0UGllY2UucmFuZ2UsIFdURk1vdmUodGV4dENoZWNraW5nRGF0YSkgfSk7CiAgICAg
fQogfQorCiAjZW5kaWYKIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1h
cmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3Vs
ZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlck9yTm90IG92ZXJsYXBSdWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAgICAgaWYgKCFwb3NzaWJseUhh
c01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NF
UlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9
IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwg
bWFya2VyVHlwZXMsIG51bGxwdHIsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKTsKLSAgICB9CisgICAgZmlsdGVyTWFya2VycyhyYW5nZSwgbnVsbHB0ciwgdHlwZXMsIG92
ZXJsYXBSdWxlKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1h
cmtlcnMoUmFuZ2UmIHJhbmdlLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4g
ZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6ZmlsdGVyTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZ1bmN0
aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJrZXImKT4mIGZpbHRlciwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXJPck5vdCBvdmVybGFwUnVsZSkKIHsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29s
bGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7Ci0gICAgICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJz
KG1hcmtlclR5cGVzKSkKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFu
Z2VzKHJhbmdlKSkgeworICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7
Ci0KLSAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0
KCk7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCk7
Ci0gICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVzLCBmaWx0ZXJGdW5j
dGlvbiwgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgICAgICBy
ZW1vdmVNYXJrZXJzKHRleHRQaWVjZS5ub2RlLCB0ZXh0UGllY2UucmFuZ2UsIHR5cGVzLCBmaWx0
ZXIsIG92ZXJsYXBSdWxlKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmVk
UmVjdHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBOb2RlJiBub2Rl
KQogewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAhbm9kZS5kb2N1bWVu
dCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJl
ZmFjdG9yIHRoaXMgc28gdGhhdCB3ZSBkb24ndCB1c2UgUmFuZ2UgKGJlY2F1c2Ugd2Ugb25seSBo
YXZlIG9uZSBOb2RlKSwgYnV0IHN0aWxsIHNoYXJlIGNvZGUgd2l0aCBhYnNvbHV0ZVRleHRRdWFk
cygpLgotICAgIGF1dG8gbWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQo
KSwgJm5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCAmbm9kZSwgbWFya2VyLmVuZE9mZnNldCgp
KTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZU1hcmtlclF1YWRzOwotICAgIG1hcmtl
clJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhhYnNvbHV0ZU1hcmtlclF1YWRzLCB0cnVlKTsKLQot
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGFic29sdXRlTWFya2VyUmVjdHM7Ci0gICAgYWJzb2x1dGVN
YXJrZXJSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFic29sdXRlTWFya2VyUXVhZHMuc2l6
ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBhYnNvbHV0ZU1hcmtlclF1YWRzKQot
ICAgICAgICBhYnNvbHV0ZU1hcmtlclJlY3RzLnVuY2hlY2tlZEFwcGVuZChxdWFkLmJvdW5kaW5n
Qm94KCkpOwotCi0gICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoYWJzb2x1dGVN
YXJrZXJSZWN0cyk7CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBtYXJr
ZXIuc3RhcnRPZmZzZXQoKSB9LCB7IG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSB9IH07CisgICAg
bWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlLCB0cnVlKSkpOwogfQogCiB2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBAIC0xOTUs
OCArMTc1LDggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZWN0
c0ZvckFsbE1hcmtlcnMoKQogICAgIGlmICghaGFzTWFya2VycygpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBmb3IgKGF1dG8mIG1hcmtlcnMgOiBtX21hcmtlcnMudmFsdWVzKCkpIHsKLSAgICAg
ICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbWFya2VycykKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJr
ZXJzIDogbV9tYXJrZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDog
Km5vZGVNYXJrZXJzKQogICAgICAgICAgICAgbWFya2VyLmludmFsaWRhdGUoKTsKICAgICB9CiAK
QEAgLTIwOSw3ICsxODksNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxp
ZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghaGFzTWFya2Vy
cygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBNYXJrZXJMaXN0KiBtYXJrZXJzID0gbV9tYXJr
ZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBtYXJrZXJzID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7
CiAgICAgQVNTRVJUKG1hcmtlcnMpOwogCiAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbWFya2Vy
cykKQEAgLTIzNiwyNiArMjE2LDE4IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjp1
cGRhdGVSZWN0c0ZvckludmFsaWRhdGVkTWFya2Vyc09mVHlwZShEb2N1bWVudE1hCiB7CiAgICAg
aWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0
SWZBbnlSZWN0c0FyZURpcnR5ID0gdHJ1ZTsKLQotICAgIGZvciAoYXV0byYgbm9kZUFuZE1hcmtl
cnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9ICpub2RlQW5kTWFya2Vycy5r
ZXk7Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVBbmRNYXJrZXJzLnZhbHVlKSB7
Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSBtYXJrZXJUeXBlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAgICAgICAgIGlmIChtYXJrZXIuaXNWYWxpZCgpKQorICAgIGJvb2wgdXBkYXRlZExheW91dCA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChtYXJrZXIudHlwZSgpICE9IG1hcmtlclR5cGUgfHwgbWFya2VyLmlzVmFsaWQoKSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gV2UnbGwgZG8gdXAgdG8g
b25lIGxheW91dCBwZXIgY2FsbCBpZiB3ZSBoYXZlIGFueSBkaXJ0eSBtYXJrZXJzLgotICAgICAg
ICAgICAgaWYgKG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5KSB7CisgICAgICAgICAgICBp
ZiAoIXVwZGF0ZWRMYXlvdXQpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVNYWluRnJhbWVMYXlv
dXRJZk5lZWRlZChtX2RvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBuZWVkc0xheW91dElmQW55
UmVjdHNBcmVEaXJ0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHVwZGF0ZWRMYXlvdXQgPSB0
cnVlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9y
TWFya2VyKG1hcmtlciwgbm9kZSk7CisgICAgICAgICAgICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9y
TWFya2VyKG1hcmtlciwgKm5vZGVNYXJrZXJzLmtleSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0yNjYsNyArMjM4LDcgQEAgVmVjdG9yPEZsb2F0UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmsKIAogICAgIGlmICghcG9z
c2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAg
IEFTU0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5p
c0VtcHR5KCkpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUo
KTsKICAgICBpZiAoIWZyYW1lKQpAQCAtMjgyLDE5ICsyNTQsMTkgQEAgVmVjdG9yPEZsb2F0UmVj
dD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1
bWVudE1hcmsKICAgICBpZiAoaXNTdWJmcmFtZSkKICAgICAgICAgc3ViZnJhbWVDbGlwUmVjdCA9
IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZVZpZXctPndpbmRvd0NsaXBSZWN0KCkp
OwogCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAgICAg
ICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKKyAgICBmb3IgKGF1dG8mIG5vZGVN
YXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlTWFya2Vy
cy5rZXktPnJlbmRlcmVyKCk7CiAgICAgICAgIEZsb2F0UmVjdCBvdmVyZmxvd0NsaXBSZWN0Owot
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkKKyAg
ICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAgb3ZlcmZsb3dDbGlwUmVjdCA9IHJlbmRl
cmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgZm9yIChhdXRvJiBt
YXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJr
ZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKICAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSgp
ICE9IG1hcmtlclR5cGUpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAg
IGF1dG8gcmVuZGVyZWRSZWN0cyA9IG1hcmtlci51bmNsaXBwZWRBYnNvbHV0ZVJlY3RzKCk7CiAK
ICAgICAgICAgICAgIC8vIENsaXAgZG9jdW1lbnQgbWFya2VycyBieSB0aGVpciBvdmVyZmxvdyBj
bGlwLgotICAgICAgICAgICAgaWYgKG5vZGUucmVuZGVyZXIoKSkgeworICAgICAgICAgICAgaWYg
KHJlbmRlcmVyKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogcmVuZGVyZWRS
ZWN0cykKICAgICAgICAgICAgICAgICAgICAgcmVjdC5pbnRlcnNlY3Qob3ZlcmZsb3dDbGlwUmVj
dCk7CiAgICAgICAgICAgICB9CkBAIC0zNTMsMTAgKzMyNSwxMCBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2Vy
JiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuYWRkKG5ld01hcmtl
ci50eXBlKCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1hcmtlckxpc3Q+JiBsaXN0ID0gbV9t
YXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgIGF1dG8mIGxp
c3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CiAKICAg
ICBpZiAoIWxpc3QpIHsKLSAgICAgICAgbGlzdCA9IG1ha2VVbmlxdWU8TWFya2VyTGlzdD4oKTsK
KyAgICAgICAgbGlzdCA9IG1ha2VVbmlxdWU8VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+
PigpOwogICAgICAgICBsaXN0LT5hcHBlbmQoUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdNYXJr
ZXIpKTsKICAgICB9IGVsc2UgaWYgKHNob3VsZEluc2VydEFzU2VwYXJhdGVNYXJrZXIobmV3TWFy
a2VyKSkgewogICAgICAgICAvLyBXZSBkb24ndCBtZXJnZSBkaWN0YXRpb24gbWFya2Vycy4KQEAg
LTQxNCwxMDEgKzM4Niw5NyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFy
a2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgIGludmFsaWRh
dGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKLS8vIGNvcGllcyBtYXJrZXJzIGZy
b20gc3JjTm9kZSB0byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRh
IHRvIHRoZSBjb3BpZXMuICBUaGUgc2hpZnQgaXMKLS8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNh
bGxlciBoYXMgY3JlYXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcg
b2YgdGhlIHNyY05vZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtl
cnMoTm9kZSYgc3JjTm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUm
IGRzdE5vZGUsIGludCBkZWx0YSkKKy8vIENvcGllcyBtYXJrZXJzIGZyb20gc291cmNlIHRvIGRl
c3RpbmF0aW9uLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3Bp
ZXMuIFRoZSBzaGlmdCBpcworLy8gdXNlZnVsIGlmLCBlLmcuLCB0aGUgY2FsbGVyIGhhcyBjcmVh
dGVkIHRoZSBkZXN0aW5hdGlvbiBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNv
dXJjZS4KK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBz
b3VyY2UsIE9mZnNldFJhbmdlIHJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbikKIHsKLSAgICBpZiAo
bGVuZ3RoIDw9IDApCisgICAgaWYgKHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCi0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUp
OworICAgIGF1dG8gbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNvdXJjZSk7CiAgICAgaWYgKCFsaXN0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7Ci0gICAgdW5z
aWduZWQgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOworICAgIGJvb2wgbmVl
ZFJlcGFpbnQgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7CiAgICAg
ICAgIC8vIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAg
ICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQorICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCByYW5nZSBv
ciBpcyB0aGUgd3JvbmcgdHlwZQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgc3Rh
cnRPZmZzZXQpCisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCByYW5nZS5zdGFydCkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8vIHBpbiB0aGUgbWFya2VyIHRvIHRo
ZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIGFwcGx5IHRoZSBzaGlmdCBkZWx0YQotICAgICAgICBkb2NE
aXJ0eSA9IHRydWU7Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHN0YXJ0T2Zm
c2V0KQotICAgICAgICAgICAgbWFya2VyLnNldFN0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKLSAg
ICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkKLSAgICAgICAgICAgIG1h
cmtlci5zZXRFbmRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0
cyhkZWx0YSk7Ci0KLSAgICAgICAgYWRkTWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CisgICAgICAg
IGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHJhbmdlLnN0YXJ0KQorICAgICAgICAgICAgbWFy
a2VyLnNldFN0YXJ0T2Zmc2V0KHJhbmdlLnN0YXJ0KTsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRP
ZmZzZXQoKSA+PSByYW5nZS5lbmQpCisgICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KHJh
bmdlLmVuZCk7CisKKyAgICAgICAgYWRkTWFya2VyKGRlc3RpbmF0aW9uLCBtYXJrZXIpOworICAg
ICAgICBuZWVkUmVwYWludCA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIGRz
dE5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgZHN0Tm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7
CisgICAgaWYgKG5lZWRSZXBhaW50KSB7CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gZGVz
dGluYXRpb24ucmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7Cisg
ICAgfQogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhO
b2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgc3RkOjpmdW5jdGlvbjxib29s
KERvY3VtZW50TWFya2VyKik+IGZpbHRlckZ1bmN0aW9uLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQor
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwg
T2Zmc2V0UmFuZ2UgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4g
dHlwZXMsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJrZXImKT4mIGZpbHRl
ciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0
aWFsbHlPdmVybGFwcGluZ01hcmtlcikKIHsKLSAgICBpZiAobGVuZ3RoIDw9IDApCisgICAgaWYg
KHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFw
b3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJr
ZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVCghKG1fbWFya2Vycy5pc0Vt
cHR5KCkpKTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgTWFya2Vy
TGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOworICAgIGF1dG8gbGlzdCA9IG1fbWFy
a2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
Ym9vbCBkb2NEaXJ0eSA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0YXJ0T2Zm
c2V0ICsgbGVuZ3RoOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOykg
ewotICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChpKTsKKyAgICBib29s
IG5lZWRSZXBhaW50ID0gZmFsc2U7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5z
aXplKCk7ICkgeworICAgICAgICBhdXRvJiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKIAogICAgICAg
ICAvLyBtYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93
IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0
KCkgPj0gZW5kT2Zmc2V0KQorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gcmFu
Z2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhh
dCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQKLSAgICAgICAgaWYgKG1hcmtlci5lbmRP
ZmZzZXQoKSA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5
cGUoKSkpIHsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydCB8
fCAhdHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkpIHsKICAgICAgICAgICAgIGkrKzsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGZpbHRlckZ1bmN0
aW9uICYmICFmaWx0ZXJGdW5jdGlvbigmbWFya2VyKSkgeworICAgICAgICBpZiAoZmlsdGVyICYm
ICFmaWx0ZXIobWFya2VyKSkgewogICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBt
YXJrZXIgYW5kIHRhcmdldCBpbnRlcnNlY3QgaW4gc29tZSB3YXkKLSAgICAgICAgZG9jRGlydHkg
PSB0cnVlOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBtYXJrZXIgYW5k
IHRhcmdldCBpbnRlcnNlY3QgaW4gc29tZSB3YXkuCisgICAgICAgIG5lZWRSZXBhaW50ID0gdHJ1
ZTsKIAotICAgICAgICAvLyBwaXRjaCB0aGUgb2xkIG1hcmtlcgogICAgICAgICBsaXN0LT5yZW1v
dmUoaSk7Ci0KICAgICAgICAgaWYgKHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKQotICAgICAgICAgICAgLy8gU3RvcCBoZXJlLiBEb24ndCBhZGQgcmVzdWx0aW5nIHNsaWNl
cyBiYWNrLgogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgLy8gYWRkIGVpdGhlciBv
ZiB0aGUgcmVzdWx0aW5nIHNsaWNlcyB0aGF0IGFyZSBsZWZ0IGFmdGVyIHJlbW92aW5nIHRhcmdl
dAotICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPiBtYXJrZXIuc3RhcnRPZmZzZXQoKSkgeworICAg
ICAgICBpZiAocmFuZ2Uuc3RhcnQgPiBtYXJrZXIuc3RhcnRPZmZzZXQoKSkgewogICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXIgbmV3TGVmdCA9IG1hcmtlcjsKLSAgICAgICAgICAgIG5ld0xlZnQu
c2V0RW5kT2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKKyAgICAgICAgICAgIG5ld0xlZnQuc2V0RW5kT2Zm
c2V0KHJhbmdlLnN0YXJ0KTsKICAgICAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERv
Y3VtZW50TWFya2VyKG5ld0xlZnQpKTsKICAgICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0
aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwgYnV0IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQogICAg
ICAgICAgICAgaSsrOwogICAgICAgICB9Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkg
PiBlbmRPZmZzZXQpIHsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IHJhbmdlLmVu
ZCkgewogICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbmV3UmlnaHQgPSBtYXJrZXI7Ci0gICAg
ICAgICAgICBuZXdSaWdodC5zZXRTdGFydE9mZnNldChlbmRPZmZzZXQpOworICAgICAgICAgICAg
bmV3UmlnaHQuc2V0U3RhcnRPZmZzZXQocmFuZ2UuZW5kKTsKICAgICAgICAgICAgIGxpc3QtPmlu
c2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld1JpZ2h0KSk7CiAgICAgICAgICAgICAv
LyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2VydGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRv
IHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsKQEAgLTUyMSwxMTcgKzQ4OSwxMDQgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGkKICAgICAgICAgICAgIG1fcG9zc2libHlFeGlzdGluZ01h
cmtlclR5cGVzID0geyB9OwogICAgIH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBub2RlLnJlbmRl
cmVyKCkpCi0gICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChuZWVk
UmVwYWludCkgeworICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkK
KyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7CisgICAgfQogfQogCiBEb2N1bWVudE1h
cmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9pbnQoY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJU
eXBlKQogewogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7Cisg
ICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAogICAgIHVwZGF0ZVJlY3RzRm9ySW52
YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUpOwotCi0gICAgZm9yIChhdXRvJiBub2Rl
QW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpu
b2RlQW5kTWFya2Vycy52YWx1ZSkgewotICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlKCkgIT0g
bWFya2VyVHlwZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgaWYg
KG1hcmtlci5jb250YWlucyhwb2ludCkpCisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1f
bWFya2Vycy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFy
a2VycykgeworICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gbWFya2VyVHlwZSAmJiBt
YXJrZXIuY29udGFpbnMocG9pbnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAmbWFya2VyOwog
ICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5k
ZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9y
KE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2Vy
VHlwZXMpCitWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlJiBub2RlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtl
clR5cGVzKSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJl
dHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IHJlc3VsdDsK
LSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBs
aXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1
cm4gcmVzdWx0OwogCiAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICBp
ZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkpCisgICAgICAgIGlmICh0eXBl
cy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJm1h
cmtlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotVmVjdG9yPFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdl
KFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJr
ZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3Nz
aWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICByZXR1cm4gVmVjdG9yPFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIqPigpOwotCi0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBmb3VuZE1hcmtlcnM7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kQ29udGFp
bmVyKCk7CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQorICAgICAgICByZXR1
cm4geyB9OwogCi0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7
Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExh
c3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgQVNT
RVJUKG5vZGUpOwotICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUp
KSB7Ci0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgp
KSkKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnM7CisgICAgZm9y
IChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGZvciAo
YXV0byBtYXJrZXIgOiBtYXJrZXJzRm9yKG5vZGUpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVz
LmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5lciAmJiBtYXJrZXItPmVuZE9mZnNl
dCgpIDw9IHJhbmdlLnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICAgICBpZiAoJm5vZGUgPT0gcmFu
Z2Uuc3RhcnQuY29udGFpbmVyLnB0cigpICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uu
c3RhcnQub2Zmc2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2Uu
ZW5kT2Zmc2V0KCkpCisgICAgICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5l
ci5wdHIoKSAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kLm9mZnNldCkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGZvdW5kTWFya2Vycy5hcHBlbmQo
bWFya2VyKTsKKyAgICAgICAgICAgIG1hcmtlcnMuYXBwZW5kKG1hcmtlcik7CiAgICAgICAgIH0K
ICAgICB9Ci0gICAgcmV0dXJuIGZvdW5kTWFya2VyczsKKyAgICByZXR1cm4gbWFya2VyczsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3Zv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFw
b3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJr
ZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1w
dHkoKSk7CiAgICAgCiAgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKCZub2RlKTsK
ICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQotICAgICAgICByZW1vdmVNYXJr
ZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFya2Vy
c0Zyb21MaXN0KGl0ZXJhdG9yLCB0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFy
a2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAg
IGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBpZiAoIXBvc3NpYmx5
SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vy
cy5pc0VtcHR5KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9yKG1fbWFy
a2Vycy5rZXlzKCkpKSB7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlcnMuZmluZChu
b2RlKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAgICAg
ICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwotICAgIH0K
LQotICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLnJlbW92ZShtYXJrZXJUeXBlcyk7
CisgICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9yKG1fbWFya2Vycy5rZXlzKCkpKQor
ICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QobV9tYXJrZXJzLmZpbmQobm9kZSksIHR5cGVz
KTsKKyAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUodHlwZXMpOwogfQog
Ci12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1h
cmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVt
b3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7CiAgICAgYm9vbCBuZWVkc1Jl
cGFpbnRpbmcgPSBmYWxzZTsKICAgICBib29sIGxpc3RDYW5CZVJlbW92ZWQ7CiAKLSAgICBpZiAo
bWFya2VyVHlwZXMgPT0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkgeworICAgIGlmICh0
eXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSB7CiAgICAgICAgIG5lZWRzUmVw
YWludGluZyA9IHRydWU7CiAgICAgICAgIGxpc3RDYW5CZVJlbW92ZWQgPSB0cnVlOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpdGVyYXRvci0+dmFsdWUuZ2V0KCk7
CisgICAgICAgIGF1dG8gbGlzdCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICkgewogICAgICAgICAgICAgRG9j
dW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNraXAg
bm9kZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQotICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgaWYg
KCF0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAgICAgICsraTsK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY1NywzMSArNjEy
LDIwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxp
c3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvCiAgICAgfQogfQogCi12b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5
cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NF
UlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgLy8gb3V0ZXIgbG9vcDogcHJvY2VzcyBl
YWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3VtZW50Ci0gICAgZm9yIChhdXRvJiBtYXJrZXIg
OiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1hcmtlci5rZXkuZ2V0KCk7Ci0K
LSAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGUgY3VycmVu
dCBub2RlCi0gICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAgICBm
b3IgKGF1dG8mIGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkgewotICAgICAgICAgICAg
aWYgKG1hcmtlclR5cGVzLmNvbnRhaW5zKGRvY3VtZW50TWFya2VyLnR5cGUoKSkpIHsKLSAgICAg
ICAgICAgICAgICBub2RlTmVlZHNSZXBhaW50ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIG5vZGVN
YXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVN
YXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAodHlwZXMuY29udGFpbnMobWFya2VyLnR5
cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGVNYXJrZXJz
LmtleS0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotCi0g
ICAgICAgIGlmICghbm9kZU5lZWRzUmVwYWludCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgIC8vIGNhdXNlIHRoZSBub2RlIHRvIGJlIHJlZHJhd24KLSAgICAgICAgaWYgKGF1dG8g
cmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFp
bnQoKTsKICAgICB9CiB9CiAKQEAgLTY5MSw3ICs2MzUsNyBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCBpbgogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsK
IAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAgICBhdXRv
IGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJl
dHVybjsKIApAQCAtNzMwLDcyICs2NzQsNjAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KIAog
ICAgIGlmIChkaWRTaGlmdE1hcmtlcikgewogICAgICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJr
ZXJzSW5Ob2RlKG5vZGUpOwotCi0gICAgICAgIGlmIChub2RlLnJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVy
ZXIgPSBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwog
ICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3Rp
dmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzZXRNYXJrZXJzQWN0aXZlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBhY3Rp
dmUpCiB7CiAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSkpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5
KCkpOwogCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigp
OwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0gICAg
Tm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0KLSAgICBmb3IgKE5v
ZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUg
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9m
ZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRPZmZzZXQoKSA6IDA7
Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lciA/IHJh
bmdlLmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwot
ICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBh
Y3RpdmUpOwotICAgIH0KKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcyhy
YW5nZSkpCisgICAgICAgIHNldE1hcmtlcnNBY3RpdmUobm9kZSwgY2hhcmFjdGVyRGF0YU9mZnNl
dFJhbmdlKHJhbmdlLCBub2RlKSwgYWN0aXZlKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBhY3RpdmUpCit2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlJiBub2RlLCBPZmZzZXRSYW5nZSByYW5n
ZSwgYm9vbCBhY3RpdmUpCiB7Ci0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQo
Jm5vZGUpOworICAgIGF1dG8gbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICgh
bGlzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkaWRBY3RpdmF0ZU1hcmtlciA9IGZh
bHNlOworICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBmYWxzZTsKICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICpsaXN0KSB7CiAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBz
byBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgotICAgICAgICBp
ZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQorICAgICAgICBpZiAobWFya2Vy
LnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAg
ICAgLy8gU2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQuCi0g
ICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFydE9mZnNldCB8fCBtYXJrZXIudHlw
ZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCisgICAgICAgIGlmIChtYXJrZXIuZW5k
T2Zmc2V0KCkgPCByYW5nZS5zdGFydCB8fCBtYXJrZXIudHlwZSgpICE9IERvY3VtZW50TWFya2Vy
OjpUZXh0TWF0Y2gpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBtYXJrZXIuc2V0
QWN0aXZlTWF0Y2goYWN0aXZlKTsKLSAgICAgICAgZGlkQWN0aXZhdGVNYXJrZXIgPSB0cnVlOwor
ICAgICAgICBuZWVkUmVwYWludCA9IHRydWU7CiAgICAgfQogCi0gICAgaWYgKGRpZEFjdGl2YXRl
TWFya2VyICYmIG5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBh
aW50KCk7CisgICAgaWYgKG5lZWRSZXBhaW50KSB7CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVy
ID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKKyAg
ICB9CiB9CiAKLWJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdl
JiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBl
cykKK2Jvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBl
cykKIHsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCisgICAgaWYg
KCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
QVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE5vZGUmIHN0YXJ0Q29udGFpbmVy
ID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250YWluZXIgPSByYW5n
ZS5lbmRDb250YWluZXIoKTsKLQotICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RM
YXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0g
ICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJz
Rm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJr
ZXItPnR5cGUoKSkpCisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFu
Z2UpKSB7CisgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vyc0Zvcihub2RlKSkgewor
ICAgICAgICAgICAgaWYgKCF0eXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCiAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWlu
ZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uu
c3RhcnRPZmZzZXQoKSkpCisgICAgICAgICAgICBpZiAoJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29u
dGFpbmVyLnB0cigpICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uuc3RhcnQub2Zmc2V0
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVu
ZENvbnRhaW5lciAmJiBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPj0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJhbmdlLmVuZE9mZnNldCgpKSkKKyAgICAgICAgICAgIGlmICgmbm9kZSA9PSByYW5nZS5l
bmQuY29udGFpbmVyLnB0cigpICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSByYW5nZS5lbmQu
b2Zmc2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KQEAgLTgwMyw2MiArNzM1LDUwIEBAIGJvb2wgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1JhbmdlKFJhbmdlJiByYW5n
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3Zv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50
ZXJzZWN0aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQogewogICAgIGlmICghcG9zc2libHlI
YXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9t
YXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0
YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kQ29udGFp
bmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFzdE5vZGUoKTsK
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFz
dE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRP
ZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENv
bnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxp
c3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2Vj
dGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZu
b2RlKTsKICAgICAgICAgaWYgKCFsaXN0KQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotCi0gICAgICAgICAgICAv
LyBtYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBh
c3QgdGhlIHNwZWNpZmllZCByYW5nZQotICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCgpID49IGVuZE9mZnNldCkKKyAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDog
Kmxpc3QpIHsKKyAgICAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBz
byBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICAg
ICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IG9mZnNldFJhbmdlLmVuZCkKICAgICAgICAg
ICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9u
ZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQKLSAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0
KCkgPD0gc3RhcnRPZmZzZXQgfHwgIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkp
KSB7Ci0gICAgICAgICAgICAgICAgaSsrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBtYXJrZXIuY2xlYXJEYXRhKCk7CisgICAgICAgICAg
ICBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gb2Zmc2V0UmFuZ2Uuc3RhcnQgJiYgbWFya2VyVHlw
ZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkpCisgICAgICAgICAgICAgICAgbWFya2VyLmNsZWFy
RGF0YSgpOwogICAgICAgICB9CiAgICAgfQogfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5H
KQorCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdAog
ewogICAgIGZwcmludGYoc3RkZXJyLCAiJWQgbm9kZXMgaGF2ZSBtYXJrZXJzOlxuIiwgbV9tYXJr
ZXJzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXIgOiBtX21hcmtlcnMpIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IG1hcmtlci5rZXkuZ2V0KCk7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiJXAiLCBub2RlKTsKLSAgICAgICAgZm9yIChhdXRvJiBkb2N1bWVudE1hcmtlciA6ICptYXJr
ZXIudmFsdWUpCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiAlZDpbJWQ6JWRdKCVkKSIs
IGRvY3VtZW50TWFya2VyLnR5cGUoKSwgZG9jdW1lbnRNYXJrZXIuc3RhcnRPZmZzZXQoKSwgZG9j
dW1lbnRNYXJrZXIuZW5kT2Zmc2V0KCksIGRvY3VtZW50TWFya2VyLmlzQWN0aXZlTWF0Y2goKSk7
Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIGZvciAoYXV0byYgbm9kZU1h
cmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGVN
YXJrZXJzLmtleS5nZXQoKSk7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJr
ZXJzLnZhbHVlKQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCki
LCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgp
LCBtYXJrZXIuaXNBY3RpdmVNYXRjaCgpKTsKKyAgICAgICAgZnB1dGMoJ1xuJywgc3RkZXJyKTsK
ICAgICB9CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNpZiBFTkFC
TEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgc2hvd0RvY3VtZW50TWFya2Vycyhjb25zdCBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIGNvbnRyb2xsZXIpCiB7CiAgICAgaWYgKGNv
bnRyb2xsZXIpCiAgICAgICAgIGNvbnRyb2xsZXItPnNob3dNYXJrZXJzKCk7CiB9CisKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCmluZGV4
IDYzMDVhYTY2YzE2ZTY5Y2M2NzU2ZGUyODg1OTJiZWNmYzg4MDExMTAuLjM2MGUxNWIyZDY4M2E2
NzUzMTE3ODViM2I5NjNkNDFlN2Y1N2Q1MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMp
IDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMp
IDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAo
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJ
biBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM1LDkg
KzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIExh
eW91dFBvaW50OwotY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsK
IGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CiAKIHN0cnVjdCBTaW1wbGVSYW5nZTsKQEAg
LTQ1LDcgKzQzLDYgQEAgc3RydWN0IFNpbXBsZVJhbmdlOwogY2xhc3MgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLQogICAgIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcihEb2N1bWVudCYpOwogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIoKTsKIApAQCAtNTQsNDYgKzUxLDQyIEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKTsKICAgICB2b2lkIGFkZE1hcmtlclRvTm9k
ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUpOwogICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUmLCB1bnNp
Z25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBh
ZGRUZXh0TWF0Y2hNYXJrZXIoY29uc3QgUmFuZ2UmLCBib29sIGFjdGl2ZU1hdGNoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYs
IGJvb2wgYWN0aXZlTWF0Y2gpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBh
ZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5n
JiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9ucywgY29u
c3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRl
cnByZXRhdGlvbnMpOwotICAgIHZvaWQgYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOworICAgIHZvaWQgYWRk
TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRh
dGlvbnMsIGlkIG1ldGFkYXRhKTsKKyAgICB2b2lkIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXNNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW50ZXJwcmV0YXRpb25zKTsKKyAgICB2b2lkIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihjb25z
dCBTaW1wbGVSYW5nZSYsIGlkIG1ldGFkYXRhKTsKICNlbmRpZgotICAgIHZvaWQgYWRkRHJhZ2dl
ZENvbnRlbnRNYXJrZXIoUmFuZ2UmKTsKKyAgICB2b2lkIGFkZERyYWdnZWRDb250ZW50TWFya2Vy
KGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKICNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRf
Q0hFQ0tJTkcpCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRQbGF0Zm9ybVRleHRDaGVja2lu
Z01hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKTsKICNlbmRpZgogCi0gICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzcmNOb2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50IGRl
bHRhKTsKLSAgICBib29sIGhhc01hcmtlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmNv
bnRhaW5zQW55KERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKLSAgICAgICAgcmV0dXJu
ICFtX21hcmtlcnMuaXNFbXB0eSgpOwotICAgIH0KLSAgICBib29sIGhhc01hcmtlcnMoUmFuZ2Um
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6
OmFsbE1hcmtlcnMoKSk7CisgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNl
dFJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbik7CisgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29uc3Q7
CisgICAgYm9vbCBoYXNNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwog
CiAgICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5nZSwgaWYg
cmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBsZXRlbHkK
ICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3
aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAg
IC8vIHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCiAgICAgZW51bSBS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBzdGQ6OmZ1bmN0
aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24gPSBudWxscHRyLCBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
KyAgICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSYsIE9mZnNldFJhbmdlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwg
Y29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyRnVuY3Rp
b24gPSBudWxscHRyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9O
b3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICAvLyBSZXR1cm4gZmFs
c2UgZnJvbSBmaWx0ZXJGdW5jdGlvbiB0byByZW1vdmUgdGhlIG1hcmtlci4KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbHRlck1hcmtlcnMoUmFuZ2UmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9j
dW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWx0ZXJNYXJrZXJzKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYg
ZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZv
aWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1h
cmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFy
a2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFu
Z2UmLCBib29sKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOworICAgIHZvaWQgc2V0TWFya2Vy
c0FjdGl2ZShjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wpOworICAgIHZvaWQgc2V0TWFya2Vyc0Fj
dGl2ZShOb2RlJiwgT2Zmc2V0UmFuZ2UsIGJvb2wpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgVmVj
dG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBt
YXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4pOwotICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jhbmdl
KFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CisgICAgV0VC
Q09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5SYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4pOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jhbmdl
KGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
Pik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRN
YXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKIApAQCAtMTA5LDEwICsx
MDIsMTUgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBj
b25zdCBEb2N1bWVudE1hcmtlciYpOwotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBjb2xsZWN0
VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOwogCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcj4gTWFya2VyTGlzdDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVm
UHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8TWFya2VyTGlzdD4+IE1hcmtlck1hcDsKKyAgICBz
dHJ1Y3QgVGV4dFJhbmdlIHsKKyAgICAgICAgUmVmPE5vZGU+IG5vZGU7CisgICAgICAgIE9mZnNl
dFJhbmdlIHJhbmdlOworICAgIH07CisgICAgVmVjdG9yPFRleHRSYW5nZT4gY29sbGVjdFRleHRS
YW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKworICAgIHVzaW5nIE1hcmtlck1hcCA9IEhhc2hN
YXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXI+Pj47CisKICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICB2b2lkIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChN
YXJrZXJNYXA6Oml0ZXJhdG9yLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
KTsKIApAQCAtMTIyLDYgKzEyMCwxMiBAQCBwcml2YXRlOgogICAgIERvY3VtZW50JiBtX2RvY3Vt
ZW50OwogfTsKIAoraW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJr
ZXJzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3Nz
aWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSkpOworICAgIHJldHVybiAhbV9tYXJrZXJzLmlzRW1wdHkoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCmluZGV4IGM5ZGJkNWU1M2EzZTYyMjE0YWQ4ZTQ3ZTg4NGNiNjA3MzUzNTgzZmYu
LmIyODE0YjAwZWZmOGZhZWY3YTYxMWQ4YjNkN2FmZTdlMTVjMjk5NjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKQEAgLTEzODksMTUgKzEzODksNyBAQCBJbnRSZWN0IEVsZW1lbnQ6OmJvdW5kc0lu
Um9vdFZpZXdTcGFjZSgpCiAgICAgICAgICAgICByZW5kZXJCb3hNb2RlbE9iamVjdCgpLT5hYnNv
bHV0ZVF1YWRzKHF1YWRzKTsKICAgICB9CiAKLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1bHQgPSBxdWFkc1swXS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKLQotICAgIHJlc3VsdCA9IHZpZXctPmNvbnRlbnRzVG9Sb290VmlldyhyZXN1
bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290
VmlldyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKSk7CiB9CiAK
IHN0YXRpYyBib29sIGxheW91dE92ZXJmbG93UmVjdENvbnRhaW5zQWxsRGVzY2VuZGFudHMoY29u
c3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCkBAIC0xNDY0LDExICsxNDU2LDcgQEAgTGF5b3V0UmVj
dCBFbGVtZW50OjphYnNvbHV0ZUV2ZW50Qm91bmRzKGJvb2wmIGJvdW5kc0luY2x1ZGVBbGxEZXNj
ZW5kYW50RWxlbWVudHMKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsK
ICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIDAsIGJveC53aWR0aCgpLCBi
b3guaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudGVkRmxvdy0+YWJzb2x1
dGVRdWFkc0ZvckJveChxdWFkcywgJndhc0ZpeGVkLCAmYm94LCBsb2NhbFJlY3QueSgpLCBsb2Nh
bFJlY3QubWF4WSgpKSkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcXVhZEJvdW5k
cyA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBxdWFkQm91bmRzLnVuaXRlKHF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOwotICAgICAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5b3V0UmVjdChxdWFkQm91
bmRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5b3V0UmVjdCh1bml0ZWRCb3Vu
ZGluZ0JveGVzKHF1YWRzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVkQm91bmRzID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBQ
cm9iYWJseSBjb2x1bW5zLiBKdXN0IHJldHVybiB0aGUgYm91bmRzIG9mIHRoZSBtdWx0aWNvbCBi
bG9jayBmb3Igbm93LgpAQCAtMTYwMywxMSArMTU5MSw3IEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxS
ZW5kZXJPYmplY3QqLCBGbG9hdFJlY3Q+PiBFbGVtZW50Ojpib3VuZGluZ0Fic29sdXRlUmVjdFdp
dGhvCiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3Vs
dC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLQotICAgIHJldHVybiBzdGQ6Om1ha2Vf
cGFpcihyZW5kZXJlciwgcmVzdWx0KTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIocmVuZGVy
ZXIsIHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAogRmxvYXRSZWN0IEVsZW1lbnQ6
OmJvdW5kaW5nQ2xpZW50UmVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA2ZDk3NmU5ZGZiZGRkODhiNTdj
NzliMWUzMThiMjBhZjliZjBmM2YyLi5jMzUxNWRhMDg5NmI5MWUxYWIzMWYzMDRiMzI1MmVjMmQw
NTJkODljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIwNSw3ICsyMDUsNyBAQCBwdWJsaWM6CiAjZW5kaWYK
ICAgICBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNIVE1M
RmxhZykgfHwgZ2V0RmxhZyhJc1NWR0ZsYWcpIHx8IGdldEZsYWcoSXNNYXRoTUxGbGFnKTsgfQog
ICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiAh
aXNDb250YWluZXJOb2RlKCkgJiYgKGlzVGV4dE5vZGUoKSB8fCB2aXJ0dWFsSXNDaGFyYWN0ZXJE
YXRhKCkpOyB9CiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVPd25lckVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQpAQCAtMzEz
LDE5ICszMTMsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlbnRUYXJnZXREYXRhKCkgY29u
c3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNFdmVudFRhcmdldERhdGFGbGFnKTsgfQogICAgIHZvaWQg
c2V0SGFzRXZlbnRUYXJnZXREYXRhKGJvb2wgZmxhZykgeyBzZXRGbGFnKGZsYWcsIEhhc0V2ZW50
VGFyZ2V0RGF0YUZsYWcpOyB9CiAKLSAgICBlbnVtIFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgewot
ICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmlsaXR5LAotICAgICAgICBV
c2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQotICAgIH07CiAgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zcGVjdCgpOwogCisgICAgZW51
bSBVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHsKKyAgICAgICAgVXNlclNlbGVjdEFsbERvZXNOb3RB
ZmZlY3RFZGl0YWJpbGl0eSwKKyAgICAgICAgVXNlclNlbGVjdEFsbElzQWx3YXlzTm9uRWRpdGFi
bGUKKyAgICB9OwogICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZShVc2VyU2VsZWN0QWxsVHJlYXRt
ZW50IHRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRhYmxlKSBjb25zdAog
ICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVFZGl0YWJpbGl0eSh0cmVhdG1lbnQsIFNob3Vs
ZFVwZGF0ZVN0eWxlOjpEb05vdFVwZGF0ZSkgIT0gRWRpdGFiaWxpdHk6OlJlYWRPbmx5OwogICAg
IH0KKwogICAgIC8vIEZJWE1FOiBSZXBsYWNlIGV2ZXJ5IHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGJ5
IGhlbHBlcnMgaW4gRWRpdGluZy5oCiAgICAgYm9vbCBoYXNSaWNobHlFZGl0YWJsZVN0eWxlKCkg
Y29uc3QKICAgICB7CkBAIC0zNDUsMTIgKzM0Niw4IEBAIHB1YmxpYzoKICAgICAvLyBvZiBhIERv
Y3VtZW50IG5vZGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQqIG93bmVyRG9jdW1lbnQo
KSBjb25zdDsKIAotICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0
aGlzIG5vZGUuCi0gICAgLy8gQSBEb2N1bWVudCBub2RlIHJldHVybnMgaXRzZWxmLgotICAgIERv
Y3VtZW50JiBkb2N1bWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gdHJlZVNjb3Bl
KCkuZG9jdW1lbnRTY29wZSgpOwotICAgIH0KKyAgICAvLyBSZXR1cm5zIHRoZSBkb2N1bWVudCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLiBBIGRvY3VtZW50IG5vZGUgcmV0dXJucyBpdHNlbGYu
CisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJlZVNjb3BlKCkuZG9j
dW1lbnRTY29wZSgpOyB9CiAKICAgICBUcmVlU2NvcGUmIHRyZWVTY29wZSgpIGNvbnN0CiAgICAg
ewpAQCAtMzYyLDEwICszNTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRvY3VtZW50IGFuZCBpcyBpbiBpdHMgYXNz
b2NpYXRlZCBkb2N1bWVudCdzCiAgICAgLy8gbm9kZSB0cmVlLCBmYWxzZSBvdGhlcndpc2UgKGh0
dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29ubmVjdGVkKS4KLSAgICBib29sIGlzQ29ubmVj
dGVkKCkgY29uc3QKLSAgICB7IAotICAgICAgICByZXR1cm4gZ2V0RmxhZyhJc0Nvbm5lY3RlZEZs
YWcpOwotICAgIH0KKyAgICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QgeyByZXR1cm4gZ2V0Rmxh
ZyhJc0Nvbm5lY3RlZEZsYWcpOyB9CiAgICAgYm9vbCBpc0luVXNlckFnZW50U2hhZG93VHJlZSgp
IGNvbnN0OwogICAgIGJvb2wgaXNJblNoYWRvd1RyZWUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFn
KElzSW5TaGFkb3dUcmVlRmxhZyk7IH0KICAgICBib29sIGlzSW5UcmVlU2NvcGUoKSBjb25zdCB7
IHJldHVybiBnZXRGbGFnKHN0YXRpY19jYXN0PE5vZGVGbGFncz4oSXNDb25uZWN0ZWRGbGFnIHwg
SXNJblNoYWRvd1RyZWVGbGFnKSk7IH0KQEAgLTM3Myw2ICszNjcsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0RvY3VtZW50VHlwZU5vZGUoKSBjb25zdCB7IHJldHVybiBub2RlVHlwZSgpID09IERP
Q1VNRU5UX1RZUEVfTk9ERTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5cGVBbGxvd2VkKE5v
ZGVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHVuc2lnbmVkIGNvdW50Q2hpbGRO
b2RlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIE5vZGUqIHRy
YXZlcnNlVG9DaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKIAogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+
IGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCk7CkBAIC00MTcsNyArNDEy
LDYgQEAgcHVibGljOgogICAgICAgICBEb25lLAogICAgICAgICBOZWVkc1Bvc3RJbnNlcnRpb25D
YWxsYmFjaywKICAgICB9OwotCiAgICAgc3RydWN0IEluc2VydGlvblR5cGUgewogICAgICAgICBi
b29sIGNvbm5lY3RlZFRvRG9jdW1lbnQgeyBmYWxzZSB9OwogICAgICAgICBib29sIHRyZWVTY29w
ZUNoYW5nZWQgeyBmYWxzZSB9OwpAQCAtNjQ1LDYgKzYzOSw4IEBAIHByaXZhdGU6CiAgICAgICAg
IHJldHVybiBQc2V1ZG9JZDo6Tm9uZTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgdmlydHVh
bElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7CiAKICAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0
KCkgZmluYWw7CkBAIC02ODEsNiArNjc3LDcgQEAgcHJpdmF0ZToKIH07CiAKICNpZiBBU1NFUlRf
RU5BQkxFRAorCiBpbmxpbmUgdm9pZCBhZG9wdGVkKE5vZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFu
b2RlKQpAQCAtNjg5LDYgKzY4Niw3IEBAIGlubGluZSB2b2lkIGFkb3B0ZWQoTm9kZSogbm9kZSkK
ICAgICBBU1NFUlQoIW5vZGUtPm1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0aW9uKTsKICAgICBub2Rl
LT5tX2Fkb3B0aW9uSXNSZXF1aXJlZCA9IGZhbHNlOwogfQorCiAjZW5kaWYgLy8gQVNTRVJUX0VO
QUJMRUQKIAogQUxXQVlTX0lOTElORSB2b2lkIE5vZGU6OnJlZigpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAppbmRleCBiZTRlYjY5OTUxMDQwMTgzZGJjNDIwNmVkMDBkNDhiZDg4NDJmMDNmLi5hNzNj
NjllYWY1MDg3OGRlNmNjMzllMzU5M2VmZWJlNDdmZDAxMTYyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
QEAgLTExNzcsMTEgKzExNzcsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBSYW5nZTo6YWJzb2x1dGVS
ZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqIG5vZGUsIFJlbmRlclRleHQmIHJlbgogICAgICAgICBy
ZXR1cm4gY2xpcHBlZFJlY3RzOwogICAgIH0KIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGZsb2F0
UmVjdHM7Ci0gICAgZmxvYXRSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHRleHRRdWFkcy5z
aXplKCkpOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykKLSAgICAgICAgZmxvYXRS
ZWN0cy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gZmxv
YXRSZWN0czsKKyAgICByZXR1cm4gYm91bmRpbmdCb3hlcyh0ZXh0UXVhZHMpOwogfQogCiB2b2lk
IFJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGluRml4ZWQsIE9wdGlvblNl
dDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0CkBAIC0xMjEzLDMzICsx
MjA5LDYgQEAgdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIFIKICAgICAgICAgKmluRml4ZWQgPSBhbGxG
aXhlZCA/IEVudGlyZWx5Rml4ZWRQb3NpdGlvbiA6IChzb21lRml4ZWQgPyBQYXJ0aWFsbHlGaXhl
ZFBvc2l0aW9uIDogTm90Rml4ZWRQb3NpdGlvbik7CiB9CiAKLXZvaWQgUmFuZ2U6OmFic29sdXRl
VGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB1c2VTZWxlY3Rpb25IZWln
aHQsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBpbkZpeGVkKSBjb25zdAotewotICAgIGJvb2wgYWxs
Rml4ZWQgPSB0cnVlOwotICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7Ci0KLSAgICBOb2RlKiBz
dG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IGZpcnN0Tm9k
ZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkp
IHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0g
ICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYm9v
bCBpc0ZpeGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNCUigpKQotICAgICAg
ICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMocXVhZHMsICZpc0ZpeGVkKTsKLSAgICAgICAg
ZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lcigpID8gbV9zdGFydC5vZmZz
ZXQoKSA6IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRD
b250YWluZXIoKSA/IG1fZW5kLm9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRl
clRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKHN0YXJ0T2Zmc2V0LCBlbmRP
ZmZzZXQsIHVzZVNlbGVjdGlvbkhlaWdodCwgZmFsc2UgLyogaWdub3JlRW1wdHlUZXh0U2VsZWN0
aW9ucyAqLywgJmlzRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKLSAgICAgICAgc29tZUZpeGVkIHw9IGlz
Rml4ZWQ7Ci0gICAgfQotCi0gICAgaWYgKGluRml4ZWQpCi0gICAgICAgICppbkZpeGVkID0gYWxs
Rml4ZWQgPyBFbnRpcmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVkID8gUGFydGlhbGx5Rml4
ZWRQb3NpdGlvbiA6IE5vdEZpeGVkUG9zaXRpb24pOwotfQotCiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKIHN0YXRpYyBib29sIGludGVydmFsc1N1ZmZpY2llbnRseU92ZXJsYXAoaW50IHN0YXJ0
QSwgaW50IGVuZEEsIGludCBzdGFydEIsIGludCBlbmRCKQogewpAQCAtMTgzMiw4ICsxODAxLDcg
QEAgVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0cyhDb29yZGluYXRl
U3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3UKICAgICAgICAgICAgICAgICBpZiAoc3BhY2UgPT0g
Q29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpCiAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmRvY3Vt
ZW50KCkuY29udmVydEFic29sdXRlVG9DbGllbnRRdWFkcyhlbGVtZW50UXVhZHMsIHJlbmRlcmVy
LT5zdHlsZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcXVhZCA6IGVsZW1lbnRR
dWFkcykKLSAgICAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1YWQuYm91bmRpbmdCb3go
KSk7CisgICAgICAgICAgICAgICAgcmVjdHMgPSBib3VuZGluZ0JveGVzKGVsZW1lbnRRdWFkcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAg
ICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxUZXh0Pigqbm9kZSkucmVu
ZGVyZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA2OWNmMmI5NzJlZGE4ZWY2MjNjNzQ0ZGU5MDMz
Y2JhNDZmYTNkN2I2Li4wMmNhMTMwODRjOTgwZDEwODBhYWYyMDk0MDlhMGZlYWQ4OTQyMWZjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaApAQCAtMTI1LDcgKzEyNSw2IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VY
UE9SVCBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3goT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJl
aGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGFic29sdXRlVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jiwg
Ym9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qID0g
bnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IGFic29sdXRlQm91
bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0Owog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsZWN0
U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JikgY29uc3Q7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAppbmRleCA4OWU2NDkzYjc1YmRmMzMx
ZjcyYzI1MGM1ZDY0MDMxOTNiYmMzNWI0Li5kOTI0MDZjNWVmMjQ1NmZiMDQ0ZDlhY2IzYjZjNmMz
YjkwZTI0ZWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2Vy
LmgKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzKQorICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhWZWN0b3I8Rmxv
YXRSZWN0PiYmIHJlY3RzKQogICAgIHsKICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKLSAgICAg
ICAgbV9yZWN0cyA9IHJlY3RzOworICAgICAgICBtX3JlY3RzID0gV1RGTW92ZShyZWN0cyk7CiAg
ICAgfQogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdCwgMT4mIHVuY2xpcHBlZEFic29sdXRl
UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggOGVlYWQwNjFi
NjMwZGVkYTUyMzUwOWNlMTNlZTQ2ODdhYTA0ODllYS4uMDEwZGVmNzE2ODM5NmE2MGY3MDI1NzAz
YzhiNGIxYWM1ZTcwNjRjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCwy
OCArNTQsNDUgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBT
aW1wbGVSYW5nZSYgYikKICAgICByZXR1cm4gYS5zdGFydCA9PSBiLnN0YXJ0ICYmIGEuZW5kID09
IGIuZW5kOwogfQogCi0vLyBGSVhNRTogTm9kZTo6aXNDaGFyYWN0ZXJEYXRhIHNob3VsZCB1c2Ug
YW4gYWxnb3JpdGhtIGxpa2UgdGhpcywgc2luY2UgSSdtIGFzc3VtaW5nIGl0J3MgZmFzdGVyIHRo
YW4gdGhlIGlzQ2hhcmFjdGVyRGF0YU5vZGUgdmlydHVhbCBjYWxsIGluIG1vc3QgY2FzZXMuCi1z
dGF0aWMgYm9vbCBmYXN0SXNDaGFyYWN0ZXJEYXRhKGNvbnN0IE5vZGUmIG5vZGUpCitzdGF0aWMg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLmlzQ29udGFpbmVyTm9kZSgpICYmIChub2RlLmlzVGV4
dE5vZGUoKSB8fCBub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgcmV0dXJuIHsgbm9k
ZSwgbm9kZS5sZW5ndGgoKSB9OwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgTm9kZTo6
bGVuZ3RoIHNpbmNlIHRoZSBET00gc3BlY2lmaWNhdGlvbiBjYWxscyB0aGlzIGEgbm9kZSdzIGxl
bmd0aC4KLXN0YXRpYyB1bnNpZ25lZCBsZW5ndGgoY29uc3QgTm9kZSYgbm9kZSkKK1NpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewotICAgIGlm
IChmYXN0SXNDaGFyYWN0ZXJEYXRhKG5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hh
cmFjdGVyRGF0YT4obm9kZSkubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIG5vZGUuY291bnRDaGlsZE5v
ZGVzKCk7CisgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMo
bm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKIH0KIAot
c3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhO
b2RlJiBub2RlKQorUmVmUHRyPE5vZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmlyc3QoKSBj
b25zdAogewotICAgIHJldHVybiB7IG5vZGUsIGxlbmd0aChub2RlKSB9OworICAgIGlmIChtX3Jh
bmdlLmVuZC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2UuZW5kLmNvbnRhaW5l
cik7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLmVuZC5jb250YWluZXItPnRyYXZlcnNl
VG9DaGlsZEF0KG1fcmFuZ2UuZW5kLm9mZnNldCkpCisgICAgICAgIHJldHVybiBjaGlsZDsKKyAg
ICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4obV9yYW5nZS5lbmQu
Y29udGFpbmVyKTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKE5vZGUmIG5vZGUpCitSZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpzZW50
aW5lbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkg
fTsKKyAgICBpZiAobV9yYW5nZS5zdGFydC5jb250YWluZXItPmlzQ2hhcmFjdGVyRGF0YU5vZGUo
KSkKKyAgICAgICAgcmV0dXJuIG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpOworICAgIGlm
IChhdXRvIGNoaWxkID0gbV9yYW5nZS5zdGFydC5jb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0
KG1fcmFuZ2Uuc3RhcnQub2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuIGNoaWxkOworICAgIHJldHVy
biBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLnN0YXJ0LmNvbnRh
aW5lcik7Cit9CisKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5v
ZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDog
MCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVu
ZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKwor
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJh
dG9yKysoKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm1fbm9kZSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5oCmluZGV4IDk1ODJkZjhjMzMyNmM4OTg1NWJiOGRlYTExNDYzMzVjNDY3MTNh
ODEuLjFiMDViNTI3NjgxNTE2MmVlZWI1ZjE5NjUwNTMyZjFlNGYxN2E5MWIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCkBAIC01NSw2ICs1NSw2MSBAQCBXRUJDT1JFX0VYUE9SVCBTaW1wbGVS
YW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJh
dG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCitjbGFzcyBJ
bnRlcnNlY3RpbmdOb2RlUmFuZ2U7CitJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5n
Tm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKworc3RydWN0IE9mZnNldFJhbmdlIHsKKyAgICB1
bnNpZ25lZCBzdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBlbmQgeyAwIH07Cit9OworT2Zmc2V0
UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Tm9kZSYpOworCitjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjpp
dGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CitwdWJsaWM6CisgICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKworICAgIE5vZGUmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAg
Tm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiBtX25vZGUu
Z2V0KCk7IH0KKworICAgIGNvbnN0ZXhwciBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
bV9ub2RlOyB9CisgICAgY29uc3RleHByIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IW1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gb3RoZXIubV9ub2RlOyB9CisK
KyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworfTsKKworY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlIHsKK3B1YmxpYzoKKyAgICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKKworICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGZpcnN0KCk7IH0KKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gc2VudGluZWwoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBmaXJz
dCgpIGNvbnN0OworICAgIFJlZlB0cjxOb2RlPiBzZW50aW5lbCgpIGNvbnN0OworCisgICAgY29u
c3QgU2ltcGxlUmFuZ2UmIG1fcmFuZ2U7Cit9OworCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYgbm9kZSkKKyAg
ICA6IG1fbm9kZShXVEZNb3ZlKG5vZGUpKQoreworfQorCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9k
ZVJhbmdlOjpJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQor
ICAgIDogbV9yYW5nZShyYW5nZSkKK3sKK30KKworaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5n
ZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0
dXJuIHsgcmFuZ2UgfTsKK30KKwogaW5saW5lIFNpbXBsZVJhbmdlOjpTaW1wbGVSYW5nZShjb25z
dCBSZWY8UmFuZ2U+JiByYW5nZSkKICAgICA6IFNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggZjExMjhiOTI0N2U4OGJkOWIxMjA1MDE2MWIzNmVjNWE5YmVmZTI2Yi4uZTc2
OWY3MmEwMjBkNDNiZWMyMGUyNWMzYjgwZWQ2ZTcyZTYwYjkzZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0xNTQs
NyArMTU0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFy
a2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkKIAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCkKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RG
b3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOworICAgIGF1dG8gYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZSk7CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJh
bmdlVG9SZXBsYWNlKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1faXNB
Y3RpdmUgPSB0cnVlOwogICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dCgqbV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RW
aWV3UmVjdEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBh
dXRvIGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KCkpCiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZl
KG1fdHlwZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCByZXBsYWNlbWVudFN0cmluZywg
eyB9KTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnRpbWVyRmlyZWQoKQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25z
LmZpcnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9pc0Fj
dGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBhdXRvIGJv
dW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
CiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZlKG1fdHlw
ZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9u
cyk7CkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKCkKICAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IFdURjo6Z2V0
PEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4obV9kZXRhaWxzKTsKICAgICAgICAgaWYgKCFk
aWN0YXRpb25Db250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZl
LmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAg
LTMzOCwxNyArMzM4LDEyIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKICAgICByZXR1cm4gZWRpdG9yQ2xpZW50
KCkgJiYgZWRpdG9yQ2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZCgpOwogfQogCi1GbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
KyAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwot
ICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBi
b3VuZGluZ1JlY3Q7Ci0gICAgZm9yIChhdXRvJiB0ZXh0UXVhZCA6IHRleHRRdWFkcykKLSAgICAg
ICAgYm91bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVy
biB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRl
ZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsK
IH0gICAgICAgIAogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApp
bmRleCA5ODFkMjcwOTIwN2I2ZjM5NGRiMjFjYjFmZGE1NjY5ZWE4MGE5NzQ4Li45NDc3NGE3NmIy
MDdlZTg3MTAxZDgzYTIzYmQ5M2NmZGY2ZGU2NDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaApAQCAtMTI1LDcgKzEyNSw3IEBA
IHByaXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50KiBlZGl0b3JDbGllbnQoKTsKICAgICAKICAgICBU
ZXh0Q2hlY2tlckNsaWVudCogdGV4dENoZWNrZXIoKTsKLSAgICBGbG9hdFJlY3Qgcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKSBjb25zdDsKKyAgICBGbG9hdFJlY3Qgcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmKSBjb25zdDsKICAgICB2b2lkIG1hcmtQcmVj
ZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKEVkaXRD
b21tYW5kKik7CiAKICAgICBUaW1lciBtX3RpbWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggZTgxOGQxMmIyMzkxMjBhMWFhMmJmZjVlMGFjYjc5YTZkMjBkOWQwMS4uYjJmMjg2
YzBiNmVjMWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC0xMTI0LDE5ICsxMTI0LDE4IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSYgbm9kZSwgaW50IGlu
CiAgICAgaWYgKGluZGV4IDw9IDApCiAgICAgICAgIHJldHVybiB7IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZSgmbm9kZSksIERPV05TVFJFQU0gfTsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50
cyhub2RlKTsKLSAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7CisgICAgYXV0
byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBDaGFy
YWN0ZXJJdGVyYXRvciBpdChyYW5nZSk7CiAgICAgaXQuYWR2YW5jZShpbmRleCAtIDEpOwogCiAg
ICAgaWYgKCFpdC5hdEVuZCgpICYmIGl0LnRleHQoKS5sZW5ndGgoKSA9PSAxICYmIGl0LnRleHQo
KVswXSA9PSAnXG4nKSB7CiAgICAgICAgIC8vIEZJWE1FOiB3b3JrYXJvdW5kIGZvciBjb2xsYXBz
ZWQgcmFuZ2UgKHdoZXJlIG9ubHkgc3RhcnQgcG9zaXRpb24gaXMgY29ycmVjdCkgZW1pdHRlZCBm
b3Igc29tZSBlbWl0dGVkIG5ld2xpbmVzLgogICAgICAgICBpdC5hZHZhbmNlKDEpOwogICAgICAg
ICBpZiAoIWl0LmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CisgICAgICAgICAg
ICByZXR1cm4geyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5zdGFydCkg
fTsKICAgICB9CiAKLSAgICByZXR1cm4geyBpdC5hdEVuZCgpID8gcmFuZ2UtPmVuZFBvc2l0aW9u
KCkgOiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5lbmQpLCBVUFNUUkVB
TSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigoaXQuYXRFbmQo
KSA/IHJhbmdlIDogaXQucmFuZ2UoKSkuZW5kKSwgVVBTVFJFQU0gfTsKIH0KIAogLy8gRGV0ZXJt
aW5lcyB3aGV0aGVyIHR3byBwb3NpdGlvbnMgYXJlIHZpc2libHkgbmV4dCB0byBlYWNoIG90aGVy
IChmaXJzdCB0aGVuIHNlY29uZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGUwMzc4YWVi
N2E5MmI1MmFhNWRkOWM3YjllOTUwYTFmZTA0ZTVkNzMuLjJlYmMwNTVjOGNmOGJkYWRmM2QxNGM3
ZjdlOTU4NTU4MjNmMjc4NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtMzk5LDggKzM5
OSw4IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbmZpcm1NYXJrZWRUZXh0
KCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25z
dCBTdHJpbmcmLCBFbGVtZW50Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRUZXh0QWxp
Z25tZW50Rm9yQ2hhbmdlZEJhc2VXcml0aW5nRGlyZWN0aW9uKFdyaXRpbmdEaXJlY3Rpb24pOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVj
dG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxl
bWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25QaHJhc2VzLCBSZXRh
aW5QdHI8aWQ+IG1ldGFkYXRhLCBFbGVtZW50Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBp
bnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25Q
aHJhc2VzLCBSZXRhaW5QdHI8aWQ+JiYgbWV0YWRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgc2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEsIEVsZW1lbnQmKTsKICNl
bmRpZgogICAgIAogICAgIGVudW0gY2xhc3MgS2lsbFJpbmdJbnNlcnRpb25Nb2RlIHsgUHJlcGVu
ZFRleHQsIEFwcGVuZFRleHQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5jcHAKaW5kZXggMjZmYTc2MTFiMTkwYWVlYjNkYTdhNmJhOGYzMjgyNTcwMGVmZGFhNC4uNDUx
NmU1MDY1MDcyZmY1MWMzYzkwMWI3ODUyNDUzZmJmYTk3YjM1OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKQEAgLTIzMjUsMzMgKzIzMjUsMTkgQEAgRmxvYXRS
ZWN0IEZyYW1lU2VsZWN0aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQg
Y2xpcFRvVmlzaWJsZUNvbnQKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2li
bGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3Rh
bmdsZUhlaWdodCB0ZXh0UmVjdEhlaWdodCkgY29uc3QKIHsKLSAgICBSZW5kZXJWaWV3KiByb290
ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyb290KQorICAgIGlmICgh
bV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3Rv
cjxGbG9hdFJlY3Q+IHRleHRSZWN0czsKLSAgICBnZXRUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMs
IHRleHRSZWN0SGVpZ2h0KTsKLQotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBt
X2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5
SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB0
ZXh0UmVjdHMpIHsKLSAgICAgICAgRmxvYXRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNl
Y3Rpb24ocmVjdCwgdmlzaWJsZUNvbnRlbnRSZWN0KTsKLSAgICAgICAgaWYgKCFpbnRlcnNlY3Rp
b25SZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKGludGVyc2Vj
dGlvblJlY3QpOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0VGV4dFJlY3Rh
bmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQg
dGV4dFJlY3RIZWlnaHQpIGNvbnN0Ci17CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9y
bWFsaXplZFJhbmdlKCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
VmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1
YWRzLCB0ZXh0UmVjdEhlaWdodCA9PSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWln
aHQpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgIHJlY3Rh
bmdsZXMuYXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7CisgICAgYXV0byB2aXNpYmxlQ29udGVu
dFJlY3QgPSBtX2ZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJl
YTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNpYmxlUmVjdCk7CisgICAgZm9yIChhdXRvJiByZWN0IDog
Ym91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4
dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsK
KyAgICAgICAgYXV0byBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2li
bGVDb250ZW50UmVjdCk7CisgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKKyAgICB9
CiB9CiAKIC8vIFNjYW5zIGxvZ2ljYWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5n
IGFueSBjaGlsZCBmcmFtZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgK
aW5kZXggMjg1NTkxNzg0YTlmZTNhMjcxZTg0OGUxMTJjZjA1MjczNDcwNDgwMC4uZTZhNzA4YjA1
NGY1OWIzMGJmYjU3ZWZkZmUzMmNhZWQxNjVhMDUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uaApAQCAtMjc2LDcgKzI3Niw2IEBAIHB1YmxpYzoKIAogICAgIGVudW0g
Y2xhc3MgVGV4dFJlY3RhbmdsZUhlaWdodCB7IFRleHRIZWlnaHQsIFNlbGVjdGlvbkhlaWdodCB9
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xl
cyhWZWN0b3I8RmxvYXRSZWN0PiYsIFRleHRSZWN0YW5nbGVIZWlnaHQgPSBUZXh0UmVjdGFuZ2xl
SGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Z2V0VGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0
ID0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBjb25zdDsKIAogICAgIFdF
QkNPUkVfRVhQT1JUIEhUTUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5
Yjc3NjEwMmY5ZjE1YWM5NjY4OTkzODA5N2NiMjJlZWEyZmQwYmI5Li43M2Q2MDljYWM5OGUxZTUy
ODI3YmZjM2E3YTM3ZTJjODViMWRmZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9j
dW1lbnQoKSwgV1RGTW92ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAg
IGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIsIDAsIG1fb2Zmc2V0LCAq
bV90ZXh0MSwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0
MiwgeyAwLCBtX29mZnNldCB9LCAqbV90ZXh0MSk7CiAKICAgICBpbnNlcnRUZXh0MUFuZFRyaW1U
ZXh0MigpOwogfQpAQCAtNzgsNyArNzgsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpk
b1VuYXBwbHkoKQogCiAgICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0KTsKIAot
ICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKCptX3RleHQxLCAwLCBwcmVmaXhU
ZXh0Lmxlbmd0aCgpLCBtX3RleHQyLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5
TWFya2VycygqbV90ZXh0MSwgeyAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpIH0sIG1fdGV4dDIpOwog
ICAgIG1fdGV4dDEtPnJlbW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggNTU3YmZlY2FlYTAyMzI4NWFlYTA5MGQ0ZjA1NzFk
N2RhOGQzM2FiZS4uZjRmMDZmZmU3MTIyN2UyM2IxYTZlZGI5NWQ4YWQyM2RjNDcwZTg1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtMTA1
LDE3ICsxMDUsMTUgQEAgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIGlmICghbWFpblJlc3Vs
dCkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+
IGFjdGlvbkNvbnRleHQgPSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkg
aW5pdF0pOworICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRv
IGFjdGlvbkNvbnRleHQgPSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkg
aW5pdF0pOwogICAgIFthY3Rpb25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJpZGdlIGlk
KW1haW5SZXN1bHQgXV07CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0TWFpblJlc3VsdDptYWluUmVz
dWx0XTsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIG1haW5SZXN1bHRSYW5n
ZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwotICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
ID0gRmxvYXRSZWN0KCk7Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDog
cXVhZHMpCi0gICAgICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+
Y29udGVudHNUb1dpbmRvdyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpKTsKLQorICAgIGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJ
bnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFk
cygqbWFpblJlc3VsdFJhbmdlKSkpKTsKICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1
bHRSYW5nZTsKIAogICAgIHJldHVybiBhY3Rpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCA1YjQzY2EzM2U5
MGZhYTJlNmZlMTg0NWM5MjM3YjBhOWZlYTc0M2MwLi43YzQ4YmFkNWVkMDUyODdmOGE2NjY2OGI0
ZjUzZTY2ZTJjNTViNDgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9E
aWN0YXRpb25Db21tYW5kSU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9E
aWN0YXRpb25Db21tYW5kSU9TLmNwcApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIERpY3RhdGlvbkNv
bW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJlc3VsdFJh
bmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cygqcm9vdCksIHsgZW5kT2Zmc2V0IC0gcmVzdWx0TGVuZ3RoLCBlbmRPZmZzZXQgfSk7Ci0gICAg
ZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJhbmdl
LCBtX21ldGFkYXRhKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25SZXN1
bHRNYXJrZXIocmVzdWx0UmFuZ2UsIG1fbWV0YWRhdGEuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0
b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXgg
NDEyNmVkMTU3ZmRiMTFhMzRiY2UwZDE3NTk3M2Q1NTZmYWYyZmQ1Ni4uNjc1OGY3OGE1NjQ4OTgx
NzA5NDA4MzY2Njk2ZGJmYWJhYmZlYTBlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0Vk
aXRvcklPUy5tbQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0
ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAg
ICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFp
bnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0
QmxvY2txdW90ZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+IG1l
dGFkYXRhKQordm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4mJiBtZXRhZGF0YSkK
IHsKICAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMjUyLDcgKzI1Miw3IEBAIHZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2Vz
KFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSCiAgICAgRGljdGF0
aW9uQ29tbWFuZElPUzo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUoZGljdGF0aW9uUGhyYXNl
cyksIFdURk1vdmUobWV0YWRhdGEpKS0+YXBwbHkoKTsKIH0KIAotdm9pZCBFZGl0b3I6OnNldERp
Y3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5n
Pj4mIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEsIEVsZW1lbnQmIGVs
ZW1lbnQpCit2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQo
Y29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRh
dGEsIEVsZW1lbnQmIGVsZW1lbnQpCiB7CiAgICAgLy8gQ2xlYXIgdGhlIGNvbXBvc2l0aW9uLgog
ICAgIGNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNzlhNDFlOWE0YzVi
MGY2NmRjMTc2ZDVmNGRmOGQ3MWM5MTdiN2IyZi4uYTEyM2YzNGVlOGZhODQzZThhNjYyODBiZmNl
MDY2NzM2NGMzOTFjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDI2NSw5ICs0
MjY1LDcgQEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBj
b250ZXh0LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gbV9ub2RlVG9EcmF3ID8gbV9ub2RlVG9EcmF3LT5yZW5kZXJlcigpIDogbnVsbHB0cjsK
ICAgICBSZW5kZXJMYXllciogcm9vdExheWVyID0gcmVuZGVyVmlldy0+bGF5ZXIoKTsKIAotI2lm
bmRlZiBOREVCVUcKLSAgICBSZW5kZXJFbGVtZW50OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5T
Y29wZSBmb3JiaWRTZXROZWVkc0xheW91dCgmcm9vdExheWVyLT5yZW5kZXJlcigpKTsKLSNlbmRp
ZgorICAgIFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlk
U2V0TmVlZHNMYXlvdXQocm9vdExheWVyLT5yZW5kZXJlcigpKTsKIAogICAgIC8vIFRvIHdvcmsg
YXJvdW5kIGh0dHA6Ly93ZWJraXQub3JnL2IvMTM1MTA2LCBlbnN1cmUgdGhhdCB0aGUgcGFpbnQg
cm9vdCBpc24ndCBhbiBpbmxpbmUgd2l0aCBjdWxsZWQgbGluZSBib3hlcy4KICAgICAvLyBGSVhN
RTogVGhpcyBjYW4gY2F1c2UgYWRkaXRpb25hbCBjb250ZW50IHRvIGJlIGluY2x1ZGVkIGluIHRo
ZSBzbmFwc2hvdCwgc28gcmVtb3ZlIHRoaXMgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
CmluZGV4IDk4ZjVjNWViOTgwMTQwMTJkNzllMzVlMGJhMzY4NjkzYmJhZTRhYWMuLjAxMDRmZWUy
MTdkY2JlYTA3NzA1ODhjY2QwODhhZjMyMWFlMTQxYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtMTkwLDE2ICsx
OTAsNiBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6ZGlkRmlu
aXNoRmFkZU91dEFuaW1hdGlvbigpCiAgICAgbGF5ZXIoKS5yZW1vdmVGcm9tUGFyZW50KCk7CiB9
CiAKLXN0YXRpYyBJbnRSZWN0IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoUmFuZ2Um
IHJhbmdlKQotewotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS5h
YnNvbHV0ZVRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Q7
Ci0gICAgZm9yIChhdXRvJiBxdWFkIDogdGV4dFF1YWRzKQotICAgICAgICBib3VuZGluZ1JlY3Qu
dW5pdGUocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVjdChi
b3VuZGluZ1JlY3QpOwotfQotCiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyKFBhZ2UmIHBhZ2UpCiAgICAgOiBtX3BhZ2UocGFnZSkKICAgICAsIG1f
ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0VGltZXIoKnRoaXMsICZTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpkZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lckZpcmVkKQpAQCAtNTAxLDE3ICs0
OTEsMTcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25lTnVtYmVy
SGlnaGxpZ2h0cygpCiAgICAgRnJhbWVWaWV3JiBtYWluRnJhbWVWaWV3ID0gKm1haW5GcmFtZSgp
LnZpZXcoKTsKIAogICAgIGZvciAoYXV0byYgcmFuZ2UgOiBwaG9uZU51bWJlclJhbmdlcykgewot
ICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNob2tlIGlmIHRoZSByYW5nZSB3cmFwcyBhcm91
bmQgdGhlIGVkZ2Ugb2YgdGhlIHZpZXcuCi0gICAgICAgIC8vIFdoYXQgc2hvdWxkIHdlIGRvIGlu
IHRoYXQgY2FzZT8KLSAgICAgICAgSW50UmVjdCByZWN0ID0gdGV4dFF1YWRzVG9Cb3VuZGluZ1Jl
Y3RGb3JSYW5nZSgqcmFuZ2UpOworICAgICAgICAvLyBGSVhNRTogVGhpcyBtYWtlcyBhIGJpZyBy
ZWN0IGlmIHRoZSByYW5nZSBleHRlbmRzIGZyb20gdGhlIGVuZCBvZiBvbmUgbGluZSB0byB0aGUg
c3RhcnQgb2YgdGhlIG5leHQuIEhhbmRsZSB0aGF0IGNhc2UgYmV0dGVyPworICAgICAgICBhdXRv
IHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UpKSk7CiAKICAgICAgICAgLy8gQ29udmVydCB0byB0
aGUgbWFpbiBkb2N1bWVudCdzIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAgIC8vIEZJWE1FOiBJ
dCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwgY29udGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3aW5k
b3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdldCB0aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFjZS4K
ICAgICAgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVyIGFkZGluZyBjb252ZXJzaW9uIGZ1bmN0aW9u
cyB0byBTY3JvbGxWaWV3IGZvciBjb250ZW50c1RvRG9jdW1lbnQoKS4gUmlnaHQgbm93LCBjb250
ZW50c1RvUm9vdFZpZXcoKSBpcwogICAgICAgICAvLyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdl
IG5lZWQgd2hlbiB5b3UgaGF2ZSBhIHRvcENvbnRlbnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIu
Ci0gICAgICAgIEZyYW1lVmlldyogdmlld0ZvclJhbmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQo
KS52aWV3KCk7CisgICAgICAgIGF1dG8qIHZpZXdGb3JSYW5nZSA9IHJhbmdlLT5vd25lckRvY3Vt
ZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZpZXdGb3JSYW5nZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOworCiAgICAgICAgIHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dU
b0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkp
KSk7CiAKICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJlY3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAppbmRleCBjNTY4Nzc2N2M5ODk5Yjg2ODkz
YjNlMTVjOWQyNTYzN2FjZmM2M2FjLi4zNGVkM2U4ZWI4NDRjNjBhMzRhMDlkZjdlOGFkN2FmMGVj
NDBkMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5jcHAKQEAgLTIyNyw0ICsyMjcsMjQgQEAgYm9vbCBGbG9hdFF1YWQ6OmlzQ291bnRlcmNsb2Nr
d2lzZSgpIGNvbnN0CiAgICAgcmV0dXJuIGRldGVybWluYW50KG1fcDIgLSBtX3AxLCBtX3AzIC0g
bV9wMikgPCAwOwogfQogCitWZWN0b3I8RmxvYXRSZWN0PiBib3VuZGluZ0JveGVzKGNvbnN0IFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBib3hlczsK
KyAgICBib3hlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGJveGVzLnVuY2hlY2tlZEFwcGVu
ZChxdWFkLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVybiBib3hlczsKK30KKworRmxvYXRSZWN0
IHVuaXRlZEJvdW5kaW5nQm94ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQorewor
ICAgIGF1dG8gc2l6ZSA9IHF1YWRzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgYXV0byByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQudW5pdGVF
dmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGNhZjlkNzI2MmFhZGFlOTJjNTRiNDYzNjJiNTg1ZDg5
NDFkMDUxODYuLjE4MGNjZjEzMzZlZjJhZmE2M2YwZjQzZTg2YjQ4MzFiZmM5ZmVhZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC0yNiwxNSAr
MjYsMTYgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGbG9hdFF1YWRfaAotI2RlZmlu
ZSBGbG9hdFF1YWRfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFNlZW1zIGxp
a2UgdGhpcyB3b3VsZCBiZSBiZXR0ZXIgYXMgYSBzdHJ1Y3QuCisKIC8vIEEgRmxvYXRRdWFkIGlz
IGEgY29sbGVjdGlvbiBvZiA0IHBvaW50cywgb2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQg
b2YKIC8vIG1hcHBpbmcgYSByZWN0YW5nbGUgdGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRp
YWxpemVkIGZyb20gYSByZWN0LCB0aGUKIC8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVy
IGZyb20gdG9wIGxlZnQuCkBAIC0xNjUsMjIgKzE2NiwxNSBAQCBpbmxpbmUgRmxvYXRRdWFkJiBv
cGVyYXRvci09KEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQogewot
ICAgIHJldHVybiBhLnAxKCkgPT0gYi5wMSgpICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAy
KCkgJiYgCi0gICAgICAgICAgIGEucDMoKSA9PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgp
ID09IGIucDQoKTsKKyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJiBhLnAyKCkgPT0gYi5w
MigpICYmIGEucDMoKSA9PSBiLnAzKCkgJiYgYS5wNCgpID09IGIucDQoKTsKIH0KIAogaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikK
IHsKLSAgICByZXR1cm4gYS5wMSgpICE9IGIucDEoKSB8fAotICAgICAgICAgICBhLnAyKCkgIT0g
Yi5wMigpIHx8IAotICAgICAgICAgICBhLnAzKCkgIT0gYi5wMygpIHx8Ci0gICAgICAgICAgIGEu
cDQoKSAhPSBiLnA0KCk7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotfSAgIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLQotI2VuZGlmIC8vIEZsb2F0UXVhZF9oCitWZWN0b3I8RmxvYXRSZWN0
PiBib3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CitXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3QgdW5pdGVkQm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYp
OwogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guY3BwCmluZGV4IDQwYmExYWUyMTc2MDI1ODI0NzhmMjY1MDc4YWFkZjIzNTk3YTc1MDkuLjRm
Mzc4ZDczNWY4ZmIyYWQ2Y2Y5ODZmNmUyYWQ5OTYyYThhYmRkNjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCkBAIC0xMDM3LDI0ICsxMDM3LDE4IEBAIHZvaWQgUmVuZGVy
Qm94Ojpjb21wdXRlSW50cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2Fs
V2lkdGgsIExheW91CiBMYXlvdXRVbml0IFJlbmRlckJveDo6bWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgY29uc3QKIHsKICAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpIHsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxh
eW91dEZvcmJpZGRlblNjb3BlKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykpOwotI2VuZGlm
Ci0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzKCk7CisgICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxh
eW91dEZvcmJpZGRlblNjb3BlKCp0aGlzKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gm
PigqdGhpcykuY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB9Ci0gICAgICAg
IAogICAgIHJldHVybiBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIAogTGF5b3V0VW5p
dCBSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7CiAgICAgaWYg
KHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAg
ICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZShjb25z
dF9jYXN0PFJlbmRlckJveCo+KHRoaXMpKTsKLSNlbmRpZgotICAgICAgICBjb25zdF9jYXN0PFJl
bmRlckJveCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOworICAgICAg
ICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSgqdGhp
cyk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpLmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgfQotICAgICAgICAKICAgICByZXR1cm4gbV9tYXhQcmVm
ZXJyZWRMb2dpY2FsV2lkdGg7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJDb3VudGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmNwcAppbmRleCBkM2ViNDYzYWNiOGJkYmU3ZmI1ZDBmNzFkZmVmODg2NDdiNTdlOWZm
Li5lYWQ5ZDc2NDBjZTQ2NGQ2Mjk4N2I1YmE3N2UyOTAwNWUzMzZmNTYzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCkBAIC00MzYsMTQgKzQzNiwxMiBAQCB2
b2lkIFJlbmRlckNvdW50ZXI6OnVwZGF0ZUNvdW50ZXIoKQogCiB2b2lkIFJlbmRlckNvdW50ZXI6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKGZsb2F0IGxlYWQpCiB7Ci0jaWZuZGVmIE5E
RUJVRwogICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgbW9kaWZ5aW5nIHRoZSB0cmVlIGlu
IGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzLgogICAgIC8vIEluc3RlYWQsIHdlIHNob3Vs
ZCBwcm9wZXJseSBob29rIHRoZSBhcHByb3ByaWF0ZSBjaGFuZ2VzIGluIHRoZSBET00gYW5kIG1v
ZGlmeQogICAgIC8vIHRoZSByZW5kZXIgdHJlZSB0aGVuLiBXaGVuIHRoYXQncyBkb25lLCB3ZSBh
bHNvIHdvbid0IG5lZWQgdG8gb3ZlcnJpZGUKICAgICAvLyBjb21wdXRlUHJlZmVycmVkTG9naWNh
bFdpZHRocyBhdCBhbGwuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwNDgyOQotICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZv
cmJpZGRlblNjb3BlKHRoaXMsIGZhbHNlKTsKLSNlbmRpZgorICAgIFNldExheW91dE5lZWRlZEZv
cmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKCp0aGlzLCBmYWxzZSk7CiAKICAgICBz
ZXRSZW5kZXJlZFRleHQob3JpZ2luYWxUZXh0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDA4MWQ0Yzc2NDAzYThlYmJlMDA3
OWRhMjEyNTNjYTJmZTBiYWNiZDIuLjRiYmUzZTA5NmZhMjIzM2NiZmU2YWMzMDZiZmExZjdiMWIw
MzNiZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCkBAIC0yODkwLDkgKzI4OTAsNyBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6cGFp
bnRJbnRvTGF5ZXIoY29uc3QgR3JhcGhpY3NMYXllciogZ3JhcGhpY3NMYXllciwgR3JhcAogICAg
IGlmIChldmVudFJlZ2lvbkNvbnRleHQpCiAgICAgICAgIHBhaW50RmxhZ3MuYWRkKFJlbmRlckxh
eWVyOjpQYWludExheWVyQ29sbGVjdGluZ0V2ZW50UmVnaW9uKTsKIAotI2lmbmRlZiBOREVCVUcK
LSAgICBSZW5kZXJFbGVtZW50OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBmb3JiaWRT
ZXROZWVkc0xheW91dCgmcmVuZGVyZXIoKSk7Ci0jZW5kaWYKKyAgICBSZW5kZXJPYmplY3Q6OlNl
dExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KHJlbmRlcmVy
KCkpOwogCiAgICAgYXV0byBwYWludE9uZUxheWVyID0gWyZdKFJlbmRlckxheWVyJiBsYXllciwg
T3B0aW9uU2V0PFJlbmRlckxheWVyOjpQYWludExheWVyRmxhZz4gcGFpbnRGbGFncykgewogICAg
ICAgICBGcmFtZVZpZXc6OlBhaW50aW5nU3RhdGUgcGFpbnRpbmdTdGF0ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXggZDU2MDI4NzUyNmQxYjdkYjViOWI0
OTYyZTE1NmJiMDZkNTgzNmUxOS4uMGUzZjZhMjQ1MzlhNTdjZDEwMTQxM2UwNjRhMWMzOGYwNzQ2
NGRjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKQEAgLTMs
NyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDQgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVA
Y2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAy
MDA4LCAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuICho
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8pCiAgKgpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcy5oIgorI2luY2x1ZGUgIk5vZGVUcmF2
ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgog
I2luY2x1ZGUgIlJlbmRlckNoaWxkSXRlcmF0b3IuaCIKQEAgLTg1LDE5ICs4NiwyMCBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoUmVu
ZGVyT2JqZWN0KTsKIAotI2lmbmRlZiBOREVCVUcKKyNpZiBBU1NFUlRfRU5BQkxFRAogCi1SZW5k
ZXJPYmplY3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRG
b3JiaWRkZW5TY29wZShSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCwgYm9vbCBpc0ZvcmJpZGRl
bikKK1JlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExheW91
dE5lZWRlZEZvcmJpZGRlblNjb3BlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBi
b29sIGlzRm9yYmlkZGVuKQogICAgIDogbV9yZW5kZXJPYmplY3QocmVuZGVyT2JqZWN0KQotICAg
ICwgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbihtX3JlbmRlck9iamVjdC0+aXNTZXROZWVkc0xheW91
dEZvcmJpZGRlbigpKQorICAgICwgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbihtX3JlbmRlck9iamVj
dC5pc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpCiB7Ci0gICAgbV9yZW5kZXJPYmplY3QtPnNl
dE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oaXNGb3JiaWRkZW4pOworICAgIG1fcmVuZGVyT2JqZWN0
LnNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oaXNGb3JiaWRkZW4pOwogfQogCiBSZW5kZXJPYmpl
Y3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjp+U2V0TGF5b3V0TmVlZGVkRm9yYmlk
ZGVuU2NvcGUoKQogewotICAgIG1fcmVuZGVyT2JqZWN0LT5zZXROZWVkc0xheW91dElzRm9yYmlk
ZGVuKG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4pOworICAgIG1fcmVuZGVyT2JqZWN0LnNldE5lZWRz
TGF5b3V0SXNGb3JiaWRkZW4obV9wcmVleGlzdGluZ0ZvcmJpZGRlbik7CiB9CisKICNlbmRpZgog
CiBzdHJ1Y3QgU2FtZVNpemVBc1JlbmRlck9iamVjdCB7CkBAIC01MjEsMTEgKzUyMyw5IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjptYXJrQ29udGFpbmluZ0Jsb2Nrc0ZvckxheW91dChTY2hlZHVsZVJl
bGF5b3V0IHNjaGVkdWxlUmVsYXlvCiAgICAgYm9vbCBoYXNPdXRPZkZsb3dQb3NpdGlvbiA9ICFp
c1RleHQoKSAmJiBzdHlsZSgpLmhhc091dE9mRmxvd1Bvc2l0aW9uKCk7CiAKICAgICB3aGlsZSAo
YW5jZXN0b3IpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhp
cyBvbmNlIHdlIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlcyBmb3IgY291bnRlcnMsIHF1b3RlcyBh
bmQgbWF0aG1sCi0gICAgICAgIC8vIGNhbGxpbmcgc2V0TmVlZHNMYXlvdXQgZHVyaW5nIHByZWZl
cnJlZCB3aWR0aCBjb21wdXRhdGlvbi4KLSAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoYW5jZXN0b3IsIGlzU2V0TmVlZHNMYXlvdXRGb3Ji
aWRkZW4oKSk7Ci0jZW5kaWYKKyAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIG9uY2Ugd2Ug
cmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2VzIGZvciBjb3VudGVycywgcXVvdGVzIGFuZCBtYXRobWwg
Y2FsbGluZyBzZXROZWVkc0xheW91dCBkdXJpbmcgcHJlZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9u
LgorICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5T
Y29wZSgqYW5jZXN0b3IsIGlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSk7CisKICAgICAgICAg
Ly8gRG9uJ3QgbWFyayB0aGUgb3V0ZXJtb3N0IG9iamVjdCBvZiBhbiB1bnJvb3RlZCBzdWJ0cmVl
LiBUaGF0IG9iamVjdCB3aWxsIGJlCiAgICAgICAgIC8vIG1hcmtlZCB3aGVuIHRoZSBzdWJ0cmVl
IGlzIGFkZGVkIHRvIHRoZSBkb2N1bWVudC4KICAgICAgICAgYXV0byBjb250YWluZXIgPSBhbmNl
c3Rvci0+Y29udGFpbmVyKCk7CkBAIC03MTMsMTUgKzcxMyw3IEBAIEludFJlY3QgUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9ybXMsIGJvb2wqIHdh
c0ZpeGVkCiAgICAgaWYgKHVzZVRyYW5zZm9ybXMpIHsKICAgICAgICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7CiAgICAgICAgIGFic29sdXRlUXVhZHMocXVhZHMsIHdhc0ZpeGVkKTsKLQotICAg
ICAgICBzaXplX3QgbiA9IHF1YWRzLnNpemUoKTsKLSAgICAgICAgaWYgKCFuKQotICAgICAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICAKLSAgICAgICAgSW50UmVjdCByZXN1bHQgPSBxdWFk
c1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IG47ICsraSkKLSAgICAgICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5lbmNsb3NpbmdC
b3VuZGluZ0JveCgpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIGVu
Y2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhxdWFkcykpOwogICAgIH0KIAogICAg
IEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSwgMCAvKiBp
Z25vcmUgdHJhbnNmb3JtcyAqLywgd2FzRml4ZWQpOwpAQCAtNzU3LDIxICs3NDksOSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMpCiBGbG9hdFJlY3QgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZv
clJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkKIHsKICAgICBpZiAoIXJhbmdlKQotICAgICAgICBy
ZXR1cm4gRmxvYXRSZWN0KCk7Ci0KKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICByYW5nZS0+b3du
ZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVh
ZHM7Ci0gICAgcmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLQotICAgIGlmIChxdWFk
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKLQotICAgIEZsb2F0UmVj
dCByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZUV2ZW5JZkVtcHR5
KHF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gdW5pdGVkQm91bmRpbmdCb3hlcyhhYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UpKTsKIH0KIAog
dm9pZCBSZW5kZXJPYmplY3Q6OmFkZEFic29sdXRlUmVjdEZvckxheWVyKExheW91dFJlY3QmIHJl
c3VsdCkKQEAgLTE5MDcsNiArMTg4NywyMSBAQCBib29sIFJlbmRlck9iamVjdDo6aGFzTm9uRW1w
dHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAorVmVjdG9yPEZsb2F0UXVhZD4gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRR
dWFkcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0KQor
eworICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOworICAgIGZvciAoYXV0byYgbm9kZSA6IGlu
dGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5y
ZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQlIoKSkKKyAg
ICAgICAgICAgIHJlbmRlcmVyLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKKyAgICAgICAgZWxzZSBp
ZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKSB7CisgICAgICAgICAgICBhdXRvIG9mZnNldFJh
bmdlID0gY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKHJhbmdlLCBkb3duY2FzdDxDaGFyYWN0ZXJE
YXRhPihub2RlKSk7CisgICAgICAgICAgICBxdWFkcy5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8UmVu
ZGVyVGV4dD4oKnJlbmRlcmVyKS5hYnNvbHV0ZVF1YWRzRm9yUmFuZ2Uob2Zmc2V0UmFuZ2Uuc3Rh
cnQsIG9mZnNldFJhbmdlLmVuZCwgdXNlU2VsZWN0aW9uSGVpZ2h0KSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHF1YWRzOworfQorCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQog
CiB2b2lkIHByaW50UmVuZGVyVHJlZUZvckxpdmVEb2N1bWVudHMoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDI2NGYxZDE2ZWI2OTMxMTM2OTEyYzJhZDI3NDFm
NzVlMTU3ZjBkYWUuLjBiNmRmYjlhMjI5Y2M5YjRhN2NjYzc4MjczZmE0YTU0ZWRlNjJkYjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTMsNyArMyw3IEBACiAg
KiAgICAgICAgICAgKEMpIDIwMDAgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDQgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29t
KQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
QEAgLTczLDYgKzczLDcgQEAgY2xhc3MgU2VsZWN0aW9uUmVjdDsKICNlbmRpZgogCiBzdHJ1Y3Qg
UGFpbnRJbmZvOworc3RydWN0IFNpbXBsZVJhbmdlOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKIGNvbnN0IGludCBjYXJldFdpZHRoID0gMjsgLy8gVGhpcyB2YWx1ZSBzaG91bGQgYmUga2Vw
dCBpbiBzeW5jIHdpdGggVUlLaXQuIFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1ODA2MDE+LgpAQCAt
MTQ3LDIwICsxNDgsMTMgQEAgcHVibGljOgogICAgIC8vIFNjcm9sbGluZyBpcyBhIFJlbmRlckJv
eCBjb25jZXB0LCBob3dldmVyIHNvbWUgY29kZSBqdXN0IGNhcmVzIGFib3V0IHJlY3Vyc2l2ZWx5
IHNjcm9sbGluZyBvdXIgZW5jbG9zaW5nIFNjcm9sbGFibGVBcmVhKHMpLgogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgc2Nyb2xsUmVjdFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0
ZVJlY3QsIGJvb2wgaW5zaWRlRml4ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25z
Jik7CiAKLSAgICAvLyBDb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0byB0aGUgbmVh
cmVzdCBlbmNsb3NpbmcgYm94IG9mIGEgUmVuZGVyT2JqZWN0LgorICAgIC8vIE5lYXJlc3QgZW5j
bG9zaW5nIGJveC4KICAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJCb3gmIGVuY2xvc2luZ0JveCgp
IGNvbnN0OwogICAgIFJlbmRlckJveE1vZGVsT2JqZWN0JiBlbmNsb3NpbmdCb3hNb2RlbE9iamVj
dCgpIGNvbnN0OwogICAgIGNvbnN0IFJlbmRlckJveCogZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRh
aW5lckZvclNuYXBwaW5nKCkgY29uc3Q7CiAKLSAgICAvLyBGdW5jdGlvbiB0byByZXR1cm4gb3Vy
IGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuIFRo
aXMKLSAgICAvLyBmdW5jdGlvbiBmb2xsb3dzIHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluLgot
ICAgIFJlbmRlckZyYWdtZW50ZWRGbG93KiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoZnJhZ21lbnRlZEZsb3dTdGF0ZSgpID09IE5vdEluc2lkZUZy
YWdtZW50ZWRGbG93KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcmV0
dXJuIGxvY2F0ZUVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCk7Ci0gICAgfQorICAgIC8vIFJldHVy
biBvdXIgZW5jbG9zaW5nIGZsb3cgdGhyZWFkIGlmIHdlIGFyZSBjb250YWluZWQgaW5zaWRlIG9u
ZS4gRm9sbG93cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbi4KKyAgICBSZW5kZXJGcmFnbWVu
dGVkRmxvdyogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdDsKIAogICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgdXNlRGFya0FwcGVhcmFuY2UoKSBjb25zdDsKICAgICBPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4gc3R5bGVDb2xvck9wdGlvbnMoKSBjb25zdDsKQEAgLTE2OCwyMCAr
MTYyLDEyIEBAIHB1YmxpYzoKICNpZiBBU1NFUlRfRU5BQkxFRAogICAgIHZvaWQgc2V0SGFzQVhP
YmplY3QoYm9vbCBmbGFnKSB7IG1faGFzQVhPYmplY3QgPSBmbGFnOyB9CiAgICAgYm9vbCBoYXNB
WE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQVhPYmplY3Q7IH0KKyNlbmRpZgogCi0gICAg
Ly8gSGVscGVyIGNsYXNzIGZvcmJpZGRpbmcgY2FsbHMgdG8gc2V0TmVlZHNMYXlvdXQoKSBkdXJp
bmcgaXRzIGxpZmV0aW1lLgotICAgIGNsYXNzIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFNldExheW91dE5lZWRlZEZvcmJpZGRl
blNjb3BlKFJlbmRlck9iamVjdCosIGJvb2wgaXNGb3JiaWRkZW4gPSB0cnVlKTsKLSAgICAgICAg
flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAg
UmVuZGVyT2JqZWN0KiBtX3JlbmRlck9iamVjdDsKLSAgICAgICAgYm9vbCBtX3ByZWV4aXN0aW5n
Rm9yYmlkZGVuOwotICAgIH07Ci0jZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICAvLyBGb3Ji
aWQgY2FsbHMgdG8gc2V0TmVlZHNMYXlvdXQoKSBkdXJpbmcgaXRzIGxpZmV0aW1lLgorICAgIGNs
YXNzIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOwogCi0gICAgLy8gT2J0YWlucyB0aGUg
bmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGluZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRy
aWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIgaW5saW5lCi0gICAgLy8gY2hpbGRyZW4u
CisgICAgLy8gT2J0YWlucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGluZyB0
aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIgaW5s
aW5lIGNoaWxkcmVuLgogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkg
Y29uc3Q7CiAgICAgCiAgICAgLy8gUmVuZGVyT2JqZWN0IHRyZWUgbWFuaXB1bGF0aW9uCkBAIC0z
ODksMjIgKzM3NSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzQXNwZWN0UmF0aW8oKSBjb25z
dCB7IHJldHVybiBpc1JlcGxhY2VkKCkgJiYgKGlzSW1hZ2UoKSB8fCBpc1ZpZGVvKCkgfHwgaXND
YW52YXMoKSk7IH0KICAgICBib29sIGlzQW5vbnltb3VzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRm
aWVsZHMuaXNBbm9ueW1vdXMoKTsgfQotICAgIGJvb2wgaXNBbm9ueW1vdXNCbG9jaygpIGNvbnN0
Ci0gICAgewotICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGtlcHQgaW4gc3luYyB3aXRoIGFu
b255bW91cyBibG9jayBjcmVhdGlvbiBjb25kaXRpb25zIGluCi0gICAgICAgIC8vIFJlbmRlckJs
b2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9jaygpLiBUaGlzIGluY2x1ZGVzIGNyZWF0aW5nIGFuIGFu
b255bW91cwotICAgICAgICAvLyBSZW5kZXJCbG9jayBoYXZpbmcgYSBEaXNwbGF5VHlwZTo6Qmxv
Y2sgb3IgRGlzcGxheVR5cGU6OkJveCBkaXNwbGF5LiBPdGhlciBjbGFzc2VzIHN1Y2ggYXMgUmVu
ZGVyVGV4dEZyYWdtZW50Ci0gICAgICAgIC8vIGFyZSBub3QgUmVuZGVyQmxvY2tzIGFuZCB3aWxs
IHJldHVybiBmYWxzZS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01NjcwOS4gCi0gICAgICAgIHJldHVybiBpc0Fub255bW91cygpICYmIChzdHlsZSgpLmRpc3Bs
YXkoKSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxh
eVR5cGU6OkJveCkgJiYgc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSAmJiBp
c1JlbmRlckJsb2NrKCkgJiYgIWlzTGlzdE1hcmtlcigpICYmICFpc1JlbmRlckZyYWdtZW50ZWRG
bG93KCkgJiYgIWlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSAmJiAhaXNSZW5kZXJWaWV3KCkKLSNp
ZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCi0gICAgICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2Ny
ZWVuKCkKLSAgICAgICAgICAgICYmICFpc1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCi0j
ZW5kaWYKLSNpZiBFTkFCTEUoTUFUSE1MKQotICAgICAgICAgICAgJiYgIWlzUmVuZGVyTWF0aE1M
QmxvY2soKQotI2VuZGlmCi0gICAgICAgICAgICA7Ci0gICAgfQorICAgIGJvb2wgaXNBbm9ueW1v
dXNCbG9jaygpIGNvbnN0OwogCiAgICAgYm9vbCBpc0Zsb2F0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9iaXRmaWVsZHMuZmxvYXRpbmcoKTsgfQogCkBAIC00NDYsMTkgKzQxNywxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNWaXNpYmxlQm94RGVjb3JhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2Jp
dGZpZWxkcy5ib3hEZWNvcmF0aW9uU3RhdGUoKSAhPSBOb0JveERlY29yYXRpb25zOyB9CiAgICAg
Ym9vbCBiYWNrZ3JvdW5kSXNLbm93blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpOwogCi0gICAgYm9vbCBuZWVkc0xheW91dCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKSB8fCBtX2JpdGZpZWxkcy5ub3JtYWxD
aGlsZE5lZWRzTGF5b3V0KCkgfHwgbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCi0g
ICAgICAgICAgICB8fCBtX2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0
KCkgfHwgbV9iaXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKLSAgICB9
Ci0KKyAgICBib29sIG5lZWRzTGF5b3V0KCkgY29uc3Q7CiAgICAgYm9vbCBzZWxmTmVlZHNMYXlv
dXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc0xheW91dCgpOyB9CiAgICAgYm9v
bCBuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0Zmll
bGRzLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7IH0KLSAgICBib29sIG5lZWRzUG9z
aXRpb25lZE1vdmVtZW50TGF5b3V0T25seSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9iaXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKSAmJiAhbV9iaXRmaWVs
ZHMubmVlZHNMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgp
Ci0gICAgICAgICAgICAmJiAhbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFt
X2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Ci0gICAgfQorICAg
IGJvb2wgbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkgY29uc3Q7CiAKICAgICBi
b29sIHBvc0NoaWxkTmVlZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5wb3ND
aGlsZE5lZWRzTGF5b3V0KCk7IH0KICAgICBib29sIG5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dM
YXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxG
bG93TGF5b3V0KCk7IH0KQEAgLTUwOCwxNyArNDcwLDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGJvb2wsIE1hcmtpbmdCZWhhdmlvciA9IE1hcmtD
b250YWluaW5nQmxvY2tDaGFpbik7CiAgICAgdm9pZCBpbnZhbGlkYXRlQ29udGFpbmVyUHJlZmVy
cmVkTG9naWNhbFdpZHRocygpOwogICAgIAotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCkKLSAgICB7Ci0gICAgICAgIHNldE5lZWRzTGF5b3V0KCk7Ci0gICAgICAg
IHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlKTsKLSAgICB9CisgICAgdm9pZCBz
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIAotICAgIHZvaWQgc2V0UG9zaXRp
b25TdGF0ZShQb3NpdGlvblR5cGUgcG9zaXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQoKHBv
c2l0aW9uICE9IFBvc2l0aW9uVHlwZTo6QWJzb2x1dGUgJiYgcG9zaXRpb24gIT0gUG9zaXRpb25U
eXBlOjpGaXhlZCkgfHwgaXNCb3goKSk7Ci0gICAgICAgIG1fYml0ZmllbGRzLnNldFBvc2l0aW9u
ZWRTdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKSk7Ci0gICAgfQorICAgIHZvaWQgc2V0
UG9zaXRpb25TdGF0ZShQb3NpdGlvblR5cGUpOwogICAgIHZvaWQgY2xlYXJQb3NpdGlvbmVkU3Rh
dGUoKSB7IG1fYml0ZmllbGRzLmNsZWFyUG9zaXRpb25lZFN0YXRlKCk7IH0KIAogICAgIHZvaWQg
c2V0RmxvYXRpbmcoYm9vbCBiID0gdHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRGbG9hdGluZyhiKTsg
fQpAQCAtNTYzLDcgKzUxNyw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb24gY3JlYXRl
VmlzaWJsZVBvc2l0aW9uKGludCBvZmZzZXQsIEVBZmZpbml0eSkgY29uc3Q7CiAgICAgVmlzaWJs
ZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0Owog
Ci0gICAgLy8gcmV0dXJucyB0aGUgY29udGFpbmluZyBibG9jayBsZXZlbCBlbGVtZW50IGZvciB0
aGlzIGVsZW1lbnQuCisgICAgLy8gUmV0dXJucyB0aGUgY29udGFpbmluZyBibG9jayBsZXZlbCBl
bGVtZW50IGZvciB0aGlzIGVsZW1lbnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jaygpIGNvbnN0OwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxv
Y2tGb3JPYmplY3RJbkZsb3coKSBjb25zdDsKIApAQCAtNTcyLDEyICs1MjYsOSBAQCBwdWJsaWM6
CiAgICAgRmxvYXRQb2ludCBhYnNvbHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYsIE1hcENv
b3JkaW5hdGVzRmxhZ3MgPSAwKSBjb25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFk
IHRvIGFic29sdXRlIGNvb3JkaW5hdGVzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQu
Ci0gICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFk
LCBNYXBDb29yZGluYXRlc0ZsYWdzIG1vZGUgPSBVc2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhl
ZCA9IG51bGxwdHIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRhaW5l
clF1YWQocXVhZCwgbnVsbHB0ciwgbW9kZSwgd2FzRml4ZWQpOwotICAgIH0KKyAgICBGbG9hdFF1
YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmLCBNYXBDb29yZGluYXRlc0Zs
YWdzID0gVXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdDsKICAg
ICAvLyBDb252ZXJ0IGFuIGFic29sdXRlIHF1YWQgdG8gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAg
RmxvYXRRdWFkIGFic29sdXRlVG9Mb2NhbFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRp
bmF0ZXNGbGFncyBtb2RlID0gVXNlVHJhbnNmb3JtcykgY29uc3Q7CisgICAgRmxvYXRRdWFkIGFi
c29sdXRlVG9Mb2NhbFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9
IFVzZVRyYW5zZm9ybXMpIGNvbnN0OwogCiAgICAgLy8gQ29udmVydCBhIGxvY2FsIHF1YWQgaW50
byB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgY29udGFpbmVyLCB0YWtpbmcgdHJhbnNmb3JtcyBp
bnRvIGFjY291bnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRRdWFkIGxvY2FsVG9Db250YWlu
ZXJRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIsIE1hcENvb3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zLCBib29s
KiB3YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0OwpAQCAtNTk2LDE1ICs1NDcsMTQgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdCB7IH0KIAotICAgIC8vIEZJWE1FOiB1c2VUcmFuc2Zvcm1z
IHNob3VsZCBnbyBhd2F5IGV2ZW50dWFsbHkKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGFi
c29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtID0gdHJ1ZSwgYm9vbCogd2Fz
Rml4ZWQgPSBudWxscHRyKSBjb25zdDsKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hS
ZWN0SWdub3JpbmdUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gYWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3QoZmFsc2UpOyB9CiAKICAgICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNv
bHV0ZSBjb29yZHMgZm9yIGxpbmUgYm94ZXMKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFk
cyhWZWN0b3I8RmxvYXRRdWFkPiYsIGJvb2wqIC8qd2FzRml4ZWQqLyA9IG51bGxwdHIpIGNvbnN0
IHsgfQotCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZs
b2F0UXVhZD4mKTsKIAorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8RmxvYXRRdWFk
PiBhYnNvbHV0ZVRleHRRdWFkcyhjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgdXNlU2VsZWN0aW9u
SGVpZ2h0ID0gZmFsc2UpOwogICAgIHN0YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopOwogCiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxs
IGJlIHBhaW50ZWQgaWYgdGhpcyBvYmplY3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QK
QEAgLTYyMyw4ICs1NzMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBDdXJzb3JEaXJlY3RpdmUg
Z2V0Q3Vyc29yKGNvbnN0IExheW91dFBvaW50JiwgQ3Vyc29yJikgY29uc3Q7CiAKICAgICAvLyBS
ZXR1cm4gdGhlIFJlbmRlckxheWVyTW9kZWxPYmplY3QgaW4gdGhlIGNvbnRhaW5lciBjaGFpbiB3
aGljaCBpcyByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgdGhpcyBvYmplY3QsIG9yIG51bGxwdHIK
LSAgICAvLyBpZiBwYWludGluZyBpcyByb290LXJlbGF0aXZlLiBUaGlzIGlzIHRoZSBjb250YWlu
ZXIgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSAnZm9yUmVwYWludCcKLSAgICAvLyBtZXRo
b2RzLgorICAgIC8vIGlmIHBhaW50aW5nIGlzIHJvb3QtcmVsYXRpdmUuIFRoaXMgaXMgdGhlIGNv
bnRhaW5lciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlICdmb3JSZXBhaW50JyBmdW5jdGlv
bnMuCiAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogY29udGFpbmVyRm9yUmVwYWludCgpIGNv
bnN0OwogICAgIC8vIEFjdHVhbGx5IGRvIHRoZSByZXBhaW50IG9mIHJlY3QgciBmb3IgdGhpcyBv
YmplY3Qgd2hpY2ggaGFzIGJlZW4gY29tcHV0ZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKICAg
ICAvLyBvZiByZXBhaW50Q29udGFpbmVyLiBJZiByZXBhaW50Q29udGFpbmVyIGlzIG51bGxwdHIs
IHJlcGFpbnQgdmlhIHRoZSB2aWV3LgpAQCAtNjQyLDEwICs1OTEsNyBAQCBwdWJsaWM6CiAKICAg
ICAvLyBSZXR1cm5zIHRoZSByZWN0IHRoYXQgc2hvdWxkIGJlIHJlcGFpbnRlZCB3aGVuZXZlciB0
aGlzIG9iamVjdCBjaGFuZ2VzLiAgVGhlIHJlY3QgaXMgaW4gdGhlIHZpZXcncwogICAgIC8vIGNv
b3JkaW5hdGUgc3BhY2UuICBUaGlzIG1ldGhvZCBkZWFscyB3aXRoIG91dGxpbmVzIGFuZCBvdmVy
Zmxvdy4KLSAgICBMYXlvdXRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQobnVs
bHB0cik7Ci0gICAgfQorICAgIExheW91dFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KCkgY29uc3QgeyByZXR1cm4gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQobnVsbHB0cik7
IH0KICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IHBpeGVsU25hcHBlZEFic29sdXRlQ2xpcHBl
ZE92ZXJmbG93UmVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3Zl
cmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50
Q29udGFpbmVyKSBjb25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgcmVjdFdpdGhPdXRsaW5l
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCkgY29uc3Q7CkBAIC02NTMsMTAgKzU5OSw3IEBAIHB1
YmxpYzoKIAogICAgIC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBz
cGFjZSwgY29tcHV0ZSBhIHJlY3Qgc3VpdGFibGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0
IHJlY3QgaW4gdmlldyBjb29yZGluYXRlcy4KLSAgICBMYXlvdXRSZWN0IGNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHIpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gY29tcHV0ZVJlY3RGb3JSZXBhaW50KHIsIG51bGxwdHIpOwotICAgIH0KKyAgICBMYXlv
dXRSZWN0IGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3Qp
IGNvbnN0IHsgcmV0dXJuIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyZWN0LCBudWxscHRyKTsgfQog
ICAgIC8vIEdpdmVuIGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwgY29t
cHV0ZSBhIHJlY3Qgc3VpdGFibGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0IHJlY3QgaW4g
dGhlIGNvb3JkaW5hdGUgc3BhY2Ugb2YgcmVwYWludENvbnRhaW5lci4KICAgICBMYXlvdXRSZWN0
IGNvbXB1dGVSZWN0Rm9yUmVwYWludChjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CkBAIC02ODcsNyArNjMwLDcg
QEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBoYXNOb25FbXB0eVZpc2libGVS
ZWN0UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25l
ZCBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gMTsgfQogCiAgICAgYm9vbCBpc0Zsb2F0aW5nT3JPdXRP
ZkZsb3dQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1cm4gKGlzRmxvYXRpbmcoKSB8fCBpc091dE9m
Rmxvd1Bvc2l0aW9uZWQoKSk7IH0KIApAQCAtNzMxLDE0ICs2NzQsOSBAQCBwdWJsaWM6CiAKICAg
ICAvLyBWaXJ0dWFsIGZ1bmN0aW9uIGhlbHBlcnMgZm9yIHRoZSBkZXByZWNhdGVkIEZsZXhpYmxl
IEJveCBMYXlvdXQgKGRpc3BsYXk6IC13ZWJraXQtYm94KS4KICAgICB2aXJ0dWFsIGJvb2wgaXNE
ZXByZWNhdGVkRmxleGlibGVCb3goKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8g
VmlydHVhbCBmdW5jdGlvbiBoZWxwZXIgZm9yIHRoZSBuZXcgRmxleGlibGVCb3ggTGF5b3V0IChk
aXNwbGF5OiAtd2Via2l0LWZsZXgpLgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsZXhpYmxlQm94KCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGJvb2wgaXNGbGV4aWJsZUJveEluY2x1ZGlu
Z0RlcHJlY2F0ZWQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRmxleGlibGVCb3go
KSB8fCBpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpOwotICAgIH0KKyAgICBib29sIGlzRmxleGli
bGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkgY29uc3QgeyByZXR1cm4gaXNGbGV4aWJsZUJveCgp
IHx8IGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bWJpbmVUZXh0KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIApAQCAtNzY5LDEwICs3MDcsNyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxMYXlvdXRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JiAvKiBhZGRpdGlvbmFsT2Zmc2V0ICov
LCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiAvKiBwYWludENvbnRhaW5lciAqLyA9IG51
bGxwdHIpIHsgfTsKIAotICAgIExheW91dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBvdXRsaW5lQm91bmRzRm9yUmVwYWludChudWxscHRy
KTsKLSAgICB9CisgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdCB7
IHJldHVybiBvdXRsaW5lQm91bmRzRm9yUmVwYWludChudWxscHRyKTsgfQogCiAgICAgdmlydHVh
bCB2b2lkIHdpbGxCZVJlbW92ZWRGcm9tVHJlZSgpOwogICAgIHZvaWQgcmVzZXRGcmFnbWVudGVk
Rmxvd1N0YXRlT25SZW1vdmFsKCk7CkBAIC04MDUsMTcgKzc0MCwxMyBAQCBwcm90ZWN0ZWQ6CiAK
ICAgICBzdGF0aWMgYm9vbCBzaG91bGRBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzRm9y
UmVwYWludCgpOwogCi0gICAgc3RhdGljIFZpc2libGVSZWN0Q29udGV4dCB2aXNpYmxlUmVjdENv
bnRleHRGb3JSZXBhaW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBWaXNpYmxlUmVjdENvbnRl
eHQoZmFsc2UsIGZhbHNlLCB7IFZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb250YWlu
ZXJDbGlwLCBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29tcG9zaXRlZENvbnRhaW5l
clNjcm9sbHMgfSk7Ci0gICAgfQorICAgIHN0YXRpYyBWaXNpYmxlUmVjdENvbnRleHQgdmlzaWJs
ZVJlY3RDb250ZXh0Rm9yUmVwYWludCgpOwogCi1wcml2YXRlOgogI2lmIEFTU0VSVF9FTkFCTEVE
CiAgICAgYm9vbCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXROZWVkc0xheW91dEZvcmJpZGRlbjsgfQotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRJc0ZvcmJp
ZGRlbihib29sIGZsYWcpIHsgbV9zZXROZWVkc0xheW91dEZvcmJpZGRlbiA9IGZsYWc7IH0KICNl
bmRpZgogCitwcml2YXRlOgogICAgIHZvaWQgYWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIoTGF5b3V0
UmVjdCYgcmVzdWx0KTsKICAgICB2b2lkIHNldExheWVyTmVlZHNGdWxsUmVwYWludCgpOwogICAg
IHZvaWQgc2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9yUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
KCk7CkBAIC04MzIsNiArNzYzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldEhhc1JhcmVEYXRh
KGJvb2wgYikgeyBtX2JpdGZpZWxkcy5zZXRIYXNSYXJlRGF0YShiKTsgfQogCiAjaWYgQVNTRVJU
X0VOQUJMRUQKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSBj
b25zdCB7IG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4gPSBmbGFnOyB9CiAgICAgdm9pZCBjaGVj
a0Jsb2NrUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0KCk7CiAjZW5kaWYKIApAQCAtODQyLDgg
Kzc3NCw4IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2JqZWN0KiBtX25leHQ7CiAKICNpZiBBU1NF
UlRfRU5BQkxFRAotICAgIGJvb2wgbV9oYXNBWE9iamVjdCAgICAgICAgICAgICA6IDE7Ci0gICAg
Ym9vbCBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuIDogMTsKKyAgICBib29sIG1faGFzQVhPYmpl
Y3QgOiAxOworICAgIG11dGFibGUgYm9vbCBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuIDogMTsK
ICNlbmRpZgogCiAjZGVmaW5lIEFERF9CT09MRUFOX0JJVEZJRUxEKG5hbWUsIE5hbWUpIFwKQEAg
LTk5MCw2ICs5MjIsMTcgQEAgcHJpdmF0ZToKICN1bmRlZiBBRERfQk9PTEVBTl9CSVRGSUVMRAog
fTsKIAorY2xhc3MgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoY29u
c3QgUmVuZGVyT2JqZWN0JiwgYm9vbCBpc0ZvcmJpZGRlbiA9IHRydWUpOworI2lmIEFTU0VSVF9F
TkFCTEVECisgICAgflNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCk7Citwcml2YXRlOgor
ICAgIGNvbnN0IFJlbmRlck9iamVjdCYgbV9yZW5kZXJPYmplY3Q7CisgICAgYm9vbCBtX3ByZWV4
aXN0aW5nRm9yYmlkZGVuOworI2VuZGlmCit9OworCiBpbmxpbmUgRnJhbWUmIFJlbmRlck9iamVj
dDo6ZnJhbWUoKSBjb25zdAogewogICAgIHJldHVybiAqZG9jdW1lbnQoKS5mcmFtZSgpOwpAQCAt
MTEwNCw3ICsxMDQ3LDg4IEBAIGlubGluZSBib29sIFJlbmRlck9iamVjdDo6bmVlZHNTaW1wbGlm
aWVkTm9ybWFsRmxvd0xheW91dE9ubHkoKSBjb25zdAogICAgICAgICAmJiAhbV9iaXRmaWVsZHMu
cG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3Zl
bWVudExheW91dCgpOwogfQogCi1pbmxpbmUgdm9pZCBOb2RlOjpzZXRSZW5kZXJlcihSZW5kZXJP
YmplY3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyZXJXaXRoU3R5bGVGbGFncy5zZXRQb2ludGVyKHJl
bmRlcmVyKTsgfQoraW5saW5lIFJlbmRlckZyYWdtZW50ZWRGbG93KiBSZW5kZXJPYmplY3Q6OmVu
Y2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkgY29uc3QKK3sKKyAgICBpZiAoZnJhZ21lbnRlZEZsb3dT
dGF0ZSgpID09IE5vdEluc2lkZUZyYWdtZW50ZWRGbG93KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHJldHVybiBsb2NhdGVFbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOworfQorCitp
bmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OmlzQW5vbnltb3VzQmxvY2soKSBjb25zdAoreworICAg
IC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBrZXB0IGluIHN5bmMgd2l0aCBhbm9ueW1vdXMgYmxv
Y2sgY3JlYXRpb24gY29uZGl0aW9ucyBpbiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxv
Y2soKS4KKyAgICAvLyBGSVhNRTogVGhhdCBzZWVtcyBkaWZmaWN1bHQuIENhbiB3ZSBjb21lIHVw
IHdpdGggYSBzaW1wbGVyIHdheSB0byBtYWtlIGJlaGF2aW9yIGNvcnJlY3Q/CisgICAgLy8gRklY
TUU6IERvZXMgdGhpcyByZWxhdGl2ZWx5IGxvbmcgZnVuY3Rpb24gYmVuZWZpdCBmcm9tIGJlaW5n
IGlubGluZWQ/CisgICAgcmV0dXJuIGlzQW5vbnltb3VzKCkKKyAgICAgICAgJiYgKHN0eWxlKCku
ZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpCbG9jayB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBE
aXNwbGF5VHlwZTo6Qm94KQorICAgICAgICAmJiBzdHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVk
b0lkOjpOb25lCisgICAgICAgICYmIGlzUmVuZGVyQmxvY2soKQorI2lmIEVOQUJMRShGVUxMU0NS
RUVOX0FQSSkKKyAgICAgICAgJiYgIWlzUmVuZGVyRnVsbFNjcmVlbigpCisgICAgICAgICYmICFp
c1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCisjZW5kaWYKKyNpZiBFTkFCTEUoTUFUSE1M
KQorICAgICAgICAmJiAhaXNSZW5kZXJNYXRoTUxCbG9jaygpCisjZW5kaWYKKyAgICAgICAgJiYg
IWlzTGlzdE1hcmtlcigpCisgICAgICAgICYmICFpc1JlbmRlckZyYWdtZW50ZWRGbG93KCkKKyAg
ICAgICAgJiYgIWlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKQorICAgICAgICAmJiAhaXNSZW5kZXJW
aWV3KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlck9iamVjdDo6bmVlZHNMYXlvdXQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc0xheW91dCgpCisgICAgICAgIHx8IG1f
Yml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQorICAgICAgICB8fCBtX2JpdGZpZWxk
cy5wb3NDaGlsZE5lZWRzTGF5b3V0KCkKKyAgICAgICAgfHwgbV9iaXRmaWVsZHMubmVlZHNTaW1w
bGlmaWVkTm9ybWFsRmxvd0xheW91dCgpCisgICAgICAgIHx8IG1fYml0ZmllbGRzLm5lZWRzUG9z
aXRpb25lZE1vdmVtZW50TGF5b3V0KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlck9iamVjdDo6
bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9iaXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKQorICAgICAgICAmJiAh
bV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKQorICAgICAgICAmJiAhbV9iaXRmaWVsZHMubm9ybWFs
Q2hpbGROZWVkc0xheW91dCgpCisgICAgICAgICYmICFtX2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRz
TGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1hbEZs
b3dMYXlvdXQoKTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKQoreworICAgIHNldE5lZWRzTGF5b3V0KCk7CisgICAgc2V0
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUpOworfQorCitpbmxpbmUgdm9pZCBSZW5k
ZXJPYmplY3Q6OnNldFBvc2l0aW9uU3RhdGUoUG9zaXRpb25UeXBlIHBvc2l0aW9uKQoreworICAg
IEFTU0VSVCgocG9zaXRpb24gIT0gUG9zaXRpb25UeXBlOjpBYnNvbHV0ZSAmJiBwb3NpdGlvbiAh
PSBQb3NpdGlvblR5cGU6OkZpeGVkKSB8fCBpc0JveCgpKTsKKyAgICBtX2JpdGZpZWxkcy5zZXRQ
b3NpdGlvbmVkU3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbikpOworfQorCitpbmxpbmUg
RmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1
YWQmIHF1YWQsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQsIG51bGxwdHIsIG1vZGUs
IHdhc0ZpeGVkKTsKK30KKworaW5saW5lIGF1dG8gUmVuZGVyT2JqZWN0Ojp2aXNpYmxlUmVjdENv
bnRleHRGb3JSZXBhaW50KCkgLT4gVmlzaWJsZVJlY3RDb250ZXh0Cit7CisgICAgcmV0dXJuIHsg
ZmFsc2UsIGZhbHNlLCB7IFZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb250YWluZXJD
bGlwLCBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29tcG9zaXRlZENvbnRhaW5lclNj
cm9sbHMgfSB9OworfQorCisjaWYgIUFTU0VSVF9FTkFCTEVECisKK2lubGluZSBSZW5kZXJPYmpl
Y3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRGb3JiaWRk
ZW5TY29wZShjb25zdCBSZW5kZXJPYmplY3QmLCBib29sKQoreworfQorCisjZW5kaWYKKworaW5s
aW5lIHZvaWQgTm9kZTo6c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAg
ICBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3Muc2V0UG9pbnRlcihyZW5kZXJlcik7Cit9CiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiB2b2lkIHByaW50UmVuZGVyVHJlZUZvckxpdmVEb2N1
bWVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBs
YWNlZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmlu
ZGV4IGFlMDVhMTQzMjFmY2E4NmU3N2FjNDlkNzFlNzgwYTJlZWI3MzQ0YTEuLjM0YjIyOTIxZjhk
ODcyOTFiNzUzMTY5YWIzMjI1ZmIwY2MwMWZhNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclJlcGxhY2VkLmNwcApAQCAtMTY5LDkgKzE2OSw3IEBAIHZvaWQgUmVuZGVyUmVw
bGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAg
U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgc2NvcGUodGhpcyk7Ci0jZW5kaWYKKyAgICBT
ZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzY29wZSgqdGhpcyk7CiAKICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVkR3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5jb250ZXh0
KCksIGZhbHNlKTsKICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cGFyZW50T3JTaGFk
b3dIb3N0RWxlbWVudCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCmluZGV4IGJiYzlkMGYzNjA1MDg3YmI3NDhlMmJhMGUzYWVmYmMxNGM5
NmI0OTYuLjU1NjhhN2U2ZGRkOWEwNDJiZDVlY2ZkYzY4YmVlMDdkZDVkMGE4YWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yMjIs
OSArMjIyLDcgQEAgc3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUxvZ2ljYWxIZWlnaHRGb3JSb3co
Y29uc3QgTGVuZ3RoJiByb3dMb2dpY2FsSGVpZ2h0KQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxl
U2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQogewotI2lmbmRlZiBOREVCVUcKLSAgICBT
ZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSh0aGlzKTsK
LSNlbmRpZgorICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRl
blNjb3BlKCp0aGlzKTsKIAogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAKQEAgLTUzOCw5
ICs1MzYsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVsYXlvdXRDZWxsSWZGbGV4ZWQo
UmVuZGVyVGFibGVDZWxsJiBjZWxsLCBpbnQgcm93SW5kZQogCiB2b2lkIFJlbmRlclRhYmxlU2Vj
dGlvbjo6bGF5b3V0Um93cygpCiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFNldExheW91dE5lZWRl
ZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKHRoaXMpOwotI2VuZGlmCisgICAg
U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMp
OwogCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5n
Q29udHJvbGxlclByb3h5Lm1tCmluZGV4IGU0NDliZmQwMDAwZGYwMTM5ODgwNDg5ZDBlZDMwOWYx
YmExOWY2NzYuLmI2YzFkMTJlMTlmYjMzZDQ2YTQ4MGNkNDI5ZjE0NzVmYjRiMDAwODkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTE1Niw3ICsxNTYsNiBA
QCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxl
Y3Rpb24oY29uc3QgQXR0cmlidXRlZFN0cgogCiB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQ
cm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBh
bm5vdGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoKQogewot
ICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlQW5kT2Zmc2V0ID0gcmFuZ2VBbmRP
ZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbk9mZnNldCwgbGVuZ3RoKTsKICAgICBp
ZiAoIXJhbmdlQW5kT2Zmc2V0KQogICAgICAgICByZXR1cm47CkBAIC0xNjQsMTIgKzE2MywxMyBA
QCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0
aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGF1dG8mIG1hcmtlcnMgPSBtX3BhZ2UuY29yZVBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZG9jdW1lbnQoKS0+bWFya2VycygpOworCiAgICAg
Ym9vbCByZW1vdmVDb3JlU3BlbGxpbmdNYXJrZXJzID0gYW5ub3RhdGlvbiA9PSAiTlNTcGVsbGlu
Z1N0YXRlIjsKLSAgICBmcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuZmlsdGVyTWFya2Vycygq
cmFuZ2UsIFsmXSAoRG9jdW1lbnRNYXJrZXIqIG1hcmtlcikgewotICAgICAgICBpZiAoIVdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0
YT4obWFya2VyLT5kYXRhKCkpKQorICAgIG1hcmtlci5maWx0ZXJNYXJrZXJzKCpyYW5nZSwgWyZd
IChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIGlmICghV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPiht
YXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYg
dGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRleHRDaGVja2lu
Z0RhdGEua2V5ICE9IGFubm90YXRpb247CisgICAgICAgIHJldHVybiBXVEY6OmdldDxEb2N1bWVu
dE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKS5rZXkgIT0g
YW5ub3RhdGlvbjsKICAgICB9LCByZW1vdmVDb3JlU3BlbGxpbmdNYXJrZXJzID8gcmVsZXZhbnRN
YXJrZXJUeXBlcygpIDogRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2Vi
UGFnZUNvY29hLm1tCmluZGV4IDMzZWNkN2JlMjQ1Y2RiNTk4N2FiZTAxMDk1NzBmYWVlMmFiOWQ2
MWQuLmUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdhODMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2Eu
bW0KQEAgLTEzMiw4ICsxMzIsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rp
b25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYQogICAgICAgICBy
ZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7CisgICAgYXV0byBx
dWFkcyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwogICAgIGlmIChx
dWFkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQ
b3B1cEluZm8oZmFsc2UpOwogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
aW5kZXggZGExMTMyYzJjOWJkOTE0OGM4MzNjODc1MzdmM2U4MjY2MzhmY2UzNy4uNDZhY2VlODI2
NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE2MSwxMyArMTYxLDEx
IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVk
aXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgcG9zdExheW91dERhdGEucGFyYWdyYXBoQ29u
dGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0
ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KSA6IFN0cmluZygp
OwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS5l
ZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKLSAgICBJbnRSZWN0IHJlY3RG
b3JTZWxlY3Rpb25DYW5kaWRhdGVzOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAg
IHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBhdXRvIHF1YWRz
ID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqc2VsZWN0ZWRSYW5nZSk7CiAgICAg
aWYgKCFxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmZvY3VzZWRFbGVt
ZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gUmFuZ2U6OmFic29sdXRl
VGV4dFF1YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGguCisg
ICAgICAgIC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBo
LgogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgICAgIHBvc3RMYXlv
dXREYXRhLmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRv
dyhmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAgIH0KQEAgLTg3
Miw4ICs4NzAsOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0
QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgIH0KIAogICAgIGJvb2wg
cGFnZU92ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRlY3RvcnMgPSBmYWxzZTsKLSAgICBmb3IgKGNv
bnN0IGF1dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5w
YWdlT3ZlcmxheXMoKSkgewotICAgICAgICBXZWJQYWdlT3ZlcmxheSogd2ViT3ZlcmxheSA9IFdl
YlBhZ2VPdmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOworICAgIGZvciAoYXV0byYg
b3ZlcmxheSA6IGNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnBhZ2VPdmVybGF5
cygpKSB7CisgICAgICAgIGF1dG8gd2ViT3ZlcmxheSA9IFdlYlBhZ2VPdmVybGF5Ojpmcm9tQ29y
ZU92ZXJsYXkoKm92ZXJsYXkpOwogICAgICAgICBpZiAoIXdlYk92ZXJsYXkpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApAQCAtODgyLDIwICs4ODAsMTUgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2Nh
dGkKICAgICAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFtYWluUmVzdWx0UmFuZ2UpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCiAgICAgICAgIHBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVEYXRhRGV0ZWN0b3Jz
ID0gdHJ1ZTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUFjdGlv
bkNvbnRleHQgPSBhY3Rpb25Db250ZXh0OwotCi0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1
YWRzOwotICAgICAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsK
LSAgICAgICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBGcmFt
ZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXco
KTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgICAgICBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3co
cXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KLSAgICAgICAgaW1tZWRpYXRlQWN0aW9u
UmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7
CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9
IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0Jv
eGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7
CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9y
ID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIFRleHRJ
bmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4
UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKICAg
ICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92
ZXJsYXkgPSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7Ci0KICAgICAgICAgYnJlYWs7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCA3ZWY5M2RiNjEyMzMzMGRhZGVi
YzliYjQwOGRlNGMxZDU5ZGZlZjcyLi44YjdiYTVjYWJjODFkNzhiNjhhYTI0YmQ1ZWZmMjVhZDI3
OGIyYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTM1OCwxNCArMzU4LDkg
QEAgLSAoV0tRdWFkKWFic29sdXRlUXVhZEFuZEluc2lkZUZpeGVkUG9zaXRpb246KEJPT0wgKilp
bnNpZGVGaXhlZAogCiAgICAgaWYgKHF1YWRzLnNpemUoKSA9PSAwKQogICAgICAgICByZXR1cm4g
emVyb1F1YWQoKTsKLQogICAgIGlmIChxdWFkcy5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJu
IHdrUXVhZEZyb21GbG9hdFF1YWQocXVhZHNbMF0pOwotCi0gICAgYXV0byBib3VuZGluZ1JlY3Qg
PSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVh
ZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZShxdWFkc1tpXS5ib3Vu
ZGluZ0JveCgpKTsKLSAgICByZXR1cm4gd2tRdWFkRnJvbUZsb2F0UXVhZChib3VuZGluZ1JlY3Qp
OworICAgIHJldHVybiB3a1F1YWRGcm9tRmxvYXRRdWFkKHVuaXRlZEJvdW5kaW5nQm94ZXMocXVh
ZHMpKTsKIH0KIAogLy8gdGhpcyBtZXRob2QgaXMgbGlrZSAtIChDR1JlY3QpYm91bmRpbmdCb3gs
IGJ1dCBpdCBhY2NvdW50cyBmb3IgZm9yIHRyYW5zZm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRl
eCAzYzMwZDU3ZTY4Y2NhNGI2MmU2YjhmMGRhZGI0MjgyNjA3MTA0YWVlLi45YWQ0NmM2MDQ3MDEy
ZWIzZTQyMzgwNGQ0MDcyMDcwMjU3ZGM1ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTU3
LDEyICsxMTU3LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5k
aWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgICAgIHJldHVybjsK
IAogICAgIEludFJlY3QgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXM7Ci0gICAgVmVjdG9yPEZs
b2F0UXVhZD4gcXVhZHM7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVh
ZHMpOworICAgIGF1dG8gcXVhZHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpz
ZWxlY3RlZFJhbmdlKTsKICAgICBpZiAoIXF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmVjdEZv
clNlbGVjdGlvbkNhbmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1
YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogICAgIGVsc2UgewotICAgICAgICAvLyBS
YW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMoKSB3aWxsIGJlIGVtcHR5IGF0IHRoZSBzdGFydCBvZiBh
IHBhcmFncmFwaC4KKyAgICAgICAgLy8gUXVhZHMgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQg
b2YgYSBwYXJhZ3JhcGguCiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAg
ICAgICAgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50
c1RvV2luZG93KGZyYW1lLT5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRp
YXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCAyZWZjN2Y0OTQwNzg3NzY3ZmUw
ZTYyYTFlYTYyNDRkNGNlMDg2NjFkLi5hYTUxYjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFl
MTZmZjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYklt
bWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00OTUsNyArNDk1LDcg
QEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlv
bkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVw
SW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2Ug
aW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rp
b25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRp
Y2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgogewot
ICAgIFdlYkNvcmU6OkVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGF1dG8m
IGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlv
bmFyeVBvcHVwSW5mbyh0cnVlKTsKIAogICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0
IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJl
YWwgdGV4dCwKQEAgLTUwNiwxNyArNTA2LDE2IEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1
cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAg
ICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgY29uc3QgV2ViQ29yZTo6UmVu
ZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwor
ICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CiAg
ICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVz
Y2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkgOiAwOwogCi0gICAgVmVj
dG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVh
ZHMocXVhZHMpOworICAgIGF1dG8gcXVhZHMgPSBXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFF1YWRzKHJhbmdlKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CiAgICAgICAg
IGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAgICAg
cmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJhbmdlUmVj
dCA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKSk7CisgICAgYXV0byByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250ZW50
c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCiAgICAgcG9wdXBJ
bmZvLm9yaWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBz
Y2FsZWREZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxvb2t1cE9wdGlvbnM7CmRp
ZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5j
cHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKaW5k
ZXggMDY4MWNhYjQzNjdjNTIzNmE5YjU2NDI4YWQ2ZjEwNzQ1YmE5MTc4MS4uNmE4ZTU3MjkxYmY1
ZDAxNjc2OGQ4ZTI5MmUyYjhjNjdhYzAwODVmYiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0LmNwcApAQCAtOTAsNyArOTAsNyBAQCBURVNUKE1h
cmtlZFRleHQsIFN1YmRpdmlkZVNpbXBsZSkKIAogVEVTVChNYXJrZWRUZXh0LCBTdWJkaXZpZGVT
cGVsbGluZ0FuZEdyYW1tYXJTaW1wbGUpCiB7Ci0gICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciBn
cmFtbWFyRXJyb3JNYXJrZXIgeyBEb2N1bWVudE1hcmtlciB7IERvY3VtZW50TWFya2VyOjpHcmFt
bWFyLCA3LCA4IH0gfTsKKyAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyIGdyYW1tYXJFcnJvck1h
cmtlciB7IERvY3VtZW50TWFya2VyIHsgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIHsgNywgOCB9
IH0gfTsKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gZXhwZWN0ZWRNYXJrZWRUZXh0cyB7CiAgICAg
ICAgIE1hcmtlZFRleHQgeyBncmFtbWFyRXJyb3JNYXJrZXIuc3RhcnRPZmZzZXQoKSwgZ3JhbW1h
ckVycm9yTWFya2VyLmVuZE9mZnNldCgpLCBNYXJrZWRUZXh0OjpHcmFtbWFyRXJyb3IsICZncmFt
bWFyRXJyb3JNYXJrZXIgfSwKICAgICAgICAgTWFya2VkVGV4dCB7IDIyLCAzMiwgTWFya2VkVGV4
dDo6U3BlbGxpbmdFcnJvciB9LAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395470</attachid>
            <date>2020-04-04 17:44:11 -0700</date>
            <delta_ts>2020-04-04 17:50:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200404174410.patch</filename>
            <type>text/plain</type>
            <size>205887</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4YTBiY2Y2ODA3MzAxZTM5ZmU2NDE4
NDkxM2VlYzllZTMyMGRlMDEuLjVkMTJkMjMzYjUwNDFjMjU1YTE1NDA0YjdjOGQyOWJlN2RkOWY3
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRGVmaW5lICJpZCIgaGVyZSB3aGVuIGNvbXBpbGlu
ZyBub24tT2JqQyBzbyBpdCdzIGVhc2llciB0byB1c2UKKyAgICAgICAgUmV0YWluUHRyPGlkPiBp
biBhbnkgaGVhZGVyIGZpbGUuIExldHMgdXMgc3RvcCBkb2luZyB0aGlzIG1hbnkgb3RoZXIgcGxh
Y2VzLgorICAgICAgICBIYXJtbGVzcyB3aGVuIG5vdCBuZWVkZWQuCisKIDIwMjAtMDQtMDQgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NsYW5n
IDEwXSBGaXggLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiBjb21waWxhdGlvbiB3YXJu
aW5ncyBpbiBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYWU5ZjYwMTQ0Y2QyMGM2ODEwZmQ1ZTcxMDJhMjcw
NjY1MWRhZjdiLi41NzhhYWVjNzJlNjc1ZjU5ODM3MGVlMTcyY2RmOTEwZjdiNGVmNzZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjgxIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW1vdmVkIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuCisgICAgICAgIC0gUmVtb3ZlZCAiYWN0aXZlL2luYWN0aXZlIHRleHQgbWF0
Y2ggbWFya2VyIiwgd2hpY2ggd2FzIG9ubHkgZXZlciB1c2VkCisgICAgICAgICAgYnkgQ2hyb21p
dW0sIGFuZCBoYXMgYmVlbiBkZWFkIGNvZGUgaW4gV2ViS2l0IGZvciB3aGlsZSBub3cuCisgICAg
ICAgIC0gTWFkZSBhIHJlcGxhY2VtZW50IGZvciBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMsIGlu
IFJlbmRlck9iamVjdCwKKyAgICAgICAgICBhbmQgbW92ZWQgYWxsIGNhbGxlcnMgb3Zlci4KKyAg
ICAgICAgLSBBZGRlZCBhIGZhc3QgcGF0aCBmb3IgTm9kZTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSB0
aGF0IG1ha2VzIGl0IHdvcmsKKyAgICAgICAgICB3aXRob3V0IGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsIGZvciB0aGUgY29tbW9uIG5vZGUgdHlwZXMuCisgICAgICAgIC0gQWRkZWQgYSBOb2RlOjps
ZW5ndGggZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbidzCisgICAg
ICAgICAgZGVmaW5pdG9uIG9mIGEgbm9kZSdzIGxlbmd0aCwgcGFydCBvZiBob3cgcmFuZ2VzIGFy
ZSBkZWZpbmVkLgorICAgICAgICAtIEFkZGVkIGEgc3RydWN0dXJlIE9mZnNldFJhbmdlIHRvIHJl
cHJlc2VudCBzdGFydC9lbmQgb2Zmc2V0cyB3aXRoaW4KKyAgICAgICAgICBhIHNpbmdsZSBjaGFy
YWN0ZXIgZGF0YSBub2RlLiBUaGlzIGlzIGEgY29tbW9uIGlkaW9tIHRvIGhhbmRsZSBwb3NzaWJs
ZQorICAgICAgICAgIHBhcnRpYWwgc2VsZWN0aW9uIG9mIHRleHQgbm9kZXMgYXQgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHdoZW4KKyAgICAgICAgICBpdGVyYXRpbmcgdGV4dCB3aXRo
aW4gYSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIERvY3VtZW50TWFya2VyIGZ1bmN0aW9ucyB0
byB1c2UgT2Zmc2V0UmFuZ2UuCisgICAgICAgIC0gQWRkZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig
dHVybmluZyBhIHZlY3RvciBvZiBxdWFkcyBpbnRvIGEgdmVjdG9yCisgICAgICAgICAgb2YgYm91
bmRpbmcgYm94IHJlY3RhbmdsZXMsIGFuZCBmb3IgY29tcHV0aW5nIGEgdW5pb24gb2YgYWxsIHRo
ZQorICAgICAgICAgIHJlY3RhbmdsZXMsIHNpbmNlIGJvdGggb2YgdGhlc2UgYXJlIGNvbW1vbiBj
b2RpbmcgcGF0dGVybnMuCisgICAgICAgIC0gQWRkZWQgYW4gaW50ZXJzZWN0aW5nTm9kZXMgZnVu
Y3Rpb24sIHByb2R1Y2luZyBhIGZvci1sb29wLWNvbXBhdGlibGUKKyAgICAgICAgICByYW5nZSBm
b3IgaXRlcmF0aW5nIGFsbCBub2RlcyBjb3ZlcmVkIGJ5IGEgRE9NIHJhbmdlLgorICAgICAgICAt
IENoYW5nZWQgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzbyBp
dCBjYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGhvdXQgYW4gI2lmIGF0IGVhY2ggY2FsbCBzaXRl
LCBleHBhbmRzIHRvIG5vdGhpbmcgaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIC0gRWxpbWlu
YXRlZCB1c2VzIG9mIFJldGFpblB0cjxpZD4gaW5zdGVhZCBvZiBqdXN0IGlkIHRvIHBhc3MgYXJn
dW1lbnRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRlZCBzaW5jZSBp
c0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1YWwgZnVuY3Rp
b24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRJbnNlcnRlZCk6IFBhc3MgYW4gT2Zmc2V0UmFuZ2UgdG8gcmVtb3ZlTWFya2Vy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0UmVtb3ZlZCk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6IFJlbW92ZWQgbW9zdCBwbGF0Zm9ybS1zcGVj
aWZpYyBmdW5jdGlvbnMuCisgICAgICAgIFJlbW92ZWQgdGhlIGFjdGl2ZSBtYXRjaCBib29sZWFu
LCB3aGljaCB3YXMgb25seSBldmVyIHVzZWQgZm9yIENocm9taXVtLgorICAgICAgICBVc2UgT2Zm
c2V0UmFuZ2UuIFVwZGF0ZWQgc29tZSBvYnNvbGV0ZSBjb21tZW50cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0
VGV4dFJhbmdlcyk6IENoYW5nZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gcmV0dXJuIGEgc3Ry
dWN0dXJlIHdpdGggYSBub2RlIGFuZCBhbiBvZmZzZXQgcmFuZ2UgcmF0aGVyIHRoYW4gdXNpbmcg
YQorICAgICAgICBTaW1wbGVSYW5nZTsgYWRkcyBjbGFyaXR5IHRvIHRoZSBmYWN0IHRoYXQgaXQn
cyBndXJhbnRlZWQgdG8gYmUgb25seSBhCisgICAgICAgIHNpbmdsZSBub2RlLiBNYXkgZXZlbiB3
YW50IHRvIGNvbnNpZGVyIHNvbWUgZGF5IG1vdmluZyBUZXh0SXRlcmF0b3Igb3ZlcgorICAgICAg
ICB0byB0aGlzLCBidXQgaXQncyBkZWZpbml0ZWx5IGJldHRlciBoZXJlIGZvciBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6IFVwZGF0
ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29sbGVjdFRleHRSYW5nZXMgYW5kIHRvIERv
Y3VtZW50TWFya2VyIGNvbnN0cnVjdGlvbiwgYW5kIHRvIHVzZSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgc3ludGF4IHRoYXQgZG9lc24ndCByZXBlYXQgdGhlIERvY3VtZW50TWFya2VyIGNsYXNzIG5h
bWUuIERlbGV0ZWQgb3ZlcmxvYWRzCisgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRv
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKTogVXBkYXRl
ZCBhcyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IEZpeCBhIG1pc3Rha2Ug
d2hlcmUgY29weWluZworICAgICAgICBtYXJrZXJzIHdvdWxkIGhhdmUgYSBzaWRlIGVmZmVjdCBv
ZiBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKTogSnVzdCBoYXZlIHRoaXMgY2FsbAorICAgICAg
ICBmaWx0ZXJNYXJrZXJzIHdpdGggbnVsbCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogVXBkYXRlZCBm
b3IgdGhlIGNoYW5nZSB0bworICAgICAgICBjb2xsZWN0VGV4dFJhbmdlcyBhbmQgdG8gcGFzcyBh
IE9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1h
cmtlcik6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZQorICAgICAgICByYW5nZS4g
VXNlIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgYm91bmRpbmdC
b3hlcyBmdW5jdGlvbnMKKyAgICAgICAgdG8gbWFrZSB0aGlzIGNsZWFyZXIgYW5kIHNpbXBsZXIu
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKTogVXBkYXRl
IGZvciBjaGFuZ2VzIHRvIERvY3VtZW50TWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5z
dGVhZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51
c2VkICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNz
aW5nIDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0
aWxsIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmZvckVhY2gpOiBBZGRlZC4gU2hhcmVkIGxvZ2ljIGZvciB0aGUgbXVsdGlwbGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgaXRlcmF0ZSB0aGUgbWFya2VycyBjb3ZlcmVkIGJ5IGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6IFNpbXBsaWZpZWQgbG9vcHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOiBE
ZWxldGVkLiBXYXMgb25seQorICAgICAgICB1c2VkIGZvciBDaHJvbWl1bSBhbmQgaGFzIGJlZW4g
ZGVhZCBjb2RlIHNpbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UpOgorICAgICAgICBDYWxsIGZvckVhY2guCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZHNJblJvb3RWaWV3
U3BhY2UpOiBVc2UgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmFic29sdXRlRXZlbnRCb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG91dExheW91dCk6IERpdHRvLgorCisgICAgICAg
ICogZG9tL05vZGUuaDogQWRkZWQgaW5saW5lIGZhc3QgcGF0aCBmb3IgaXNDaGFyYWN0ZXJEYXRh
Tm9kZS4KKyAgICAgICAgTW92ZWQgc29tZSBpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG91dCBvZiBj
bGFzcyBkZWZpbml0aW9uIHNvIGl0J3MKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQgaXQgYW5kIGdl
dCBhbiBvdmVydmlldy4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogVXNlIGJvdW5k
aW5nQm94ZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmg6IERl
bGV0ZWQgYWJzb2x1dGVUZXh0UXVhZHMuCisKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oOiBVc2UgcnZhbHVlIHJlZmVyZW5jZXMgYW5kIG1vdmUuCisKKyAgICAgICAgKiBk
b20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdElzQ2hhcmFjdGVyRGF0
YSk6IERlbGV0ZWQuIE1vdmVkIHRoZSBvcHRpbWl6YXRpb25zIGludG8KKyAgICAgICAgTm9kZTo6
aXNDaGFyYWN0ZXJEYXRhTm9kZSBzbyBub3cgYWxsIGNhbGxlcnMgZ2V0IHRoZW0uCisgICAgICAg
IChXZWJDb3JlOjpsZW5ndGgpOiBEZWxldGVkLiBNb3ZlZCB0byBOb2RlOjpsZW5ndGguCisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogVXNlIE5v
ZGU6Omxlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmly
c3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5n
ZTo6c2VudGluZWwgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yOjpvcGVyYXRvcisrKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuaDogQWRkZWQgaW50ZXJzZWN0aW5nTm9kZXMgZnVuY3Rpb24sIGFuZCB0aGUKKyAgICAgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlIGFuZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgY2xhc3Nl
cyB1c2VkCisgICAgICAgIHRvIG1ha2UgaXQgd29yay4gQWRkZWQgdGhlIE9mZnNldFJhbmdlIHN0
cnVjdHVyZSBhbmQgdGhlCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5jdGlv
biwgYWxzbyB0byBoZWxwIHdpdGggaXRlcmF0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgVGFr
ZSBvdXQgdW5uZWVkZWQgaG9sZHNfYWx0ZXJuYXRpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRl
cm5hdGl2ZSk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGVzLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6IFBhc3MgcmVm
ZXJlbmNlIHRvIHJhbmdlCisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8gcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgIFRha2UgYSBT
aW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4gQWxzbyB1c2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAg
ICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVBy
ZXNlcnZpbmdNYXJrZXJzKToKKyAgICAgICAgUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIHNpbmNl
IHdlIGNhbiBjb3B5IG1hcmtlciBkYXRhIHdpdGhvdXQKKyAgICAgICAgc2VwYXJhdGUgY29kZSBm
b3IgZWFjaCB0eXBlLiBBbHNvIHVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5n
ZS4KKworICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHA6IENhbGwgYWRkTWFy
a2VyIGluc3RlYWQgb2YKKyAgICAgICAgYWRkTWFya2VyVG9Ob2RlLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0
ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICBSZW1vdmVkIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOiBSZW1vdmUgdXNlIG9mIFJldGFpblB0cjxpZD4gZm9yIGFyZ3VtZW50
cy4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgTWVyZ2VkIHRoZSBsb2dpYyBmcm9tIGdldFRleHRS
ZWN0YW5nbGVzIGluIGhlcmUsIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCBib3VuZGluZ0JveGVzLgorICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICB0
aGUgY29weU1hcmtlcnMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFu
ZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpE
aWN0YXRpb25Db21tYW5kSU9TKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBSZXRhaW5QdHI8aWQ+
IGZvciBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpj
cmVhdGUpOiBNb3ZlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZElPUzo6ZG9BcHBseSk6IFVwZGF0ZWQgdG8gZG8gdGhlIHdvcmsgaGVyZQorICAgICAgICBz
aW5jZSB3ZSBkb24ndCBoYXZlIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIgYW55IG1vcmUuCisgICAgICAgIFNwZWNpZmljYWxseSwgcmVtb3ZlIHRoZSBmaXJzdCBpbnRl
cnByZXRhdGlvbiwgd2hpY2ggbGVhdmVzIGJlaGluZCBhCisgICAgICAgIHZlY3RvciBvZiBhbHRl
cm5hdGl2ZXMuIFNhbWUgZm9yIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlci4KKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyk6IFRha2UgaWQgaW5zdGVhZCBvZgorICAg
ICAgICBSZXRhaW5QdHI8aWQ+LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IENoYW5nZWQKKyAgICAgICAgYXJvdW5kIHNpbmNl
IHdlIGRvbid0IGhhdmUgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcgor
ICAgICAgICBvciBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIgYW55IG1vcmUuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMpOiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6
CisgICAgICAgIEdldCBhbHRlcm5hdGl2ZXMgZGlyZWN0bHkgZnJvbSBEb2N1bWVudE1hcmtlcjo6
ZGF0YSwgbm93IHRoYXQKKyAgICAgICAgdGhlcmUgaXMgbm90IGEgc2VwYXJhdGUgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcyBmdW5jdGlvbi4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAg
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMs
CisgICAgICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKKyAgICAgICAgaWQgc2lu
Y2UgdGhhdCdzIG5vdyBkb25lIGluIFJldGFpblB0ci5oLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXRlZEJvdW5kaW5nQm94ZXMpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDogQSBjb3VwbGUgdHdlYWtz
LCBwbHVzIGRlY2xhcmVkIHRoZQorICAgICAgICBmdW5jdGlvbnMgYWJvdmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZSBkZWZpbml0aW9uIG9m
CisgICAgICAgIGlkIHNpbmNlIHRoYXQncyBub3cgZG9uZSBpbiBSZXRhaW5QdHIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IFRha2Ugb3V0
CisgICAgICAgIGlzQWN0aXZlTWF0Y2ggbG9naWMgdGhhdCB3YXMgdXNlZCBmb3IgQ2hyb21pdW0g
b25seS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggY29uc3QpOiBVcGRhdGUg
Zm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgY29u
c3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1hcmtD
b250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZvcgorICAgICAgICBjaGFuZ2VzIHRv
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25zdCk6IFVzZQorICAgICAgICB1bml0
ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKTogVXNlCisgICAg
ICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91
bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIFJhbmdlOjphYnNvbHV0ZVRl
eHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNpdHkgYW5kIHJlbW92ZWQKKyAgICAg
ICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRvIGltcGxlbWVudCwgZmVhdHVyZSB0
aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgc29tZSBvciBhbGwgb2YgdGhlIHF1
YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92ZWQgbXVsdGktbGluZSBmdW5jdGlv
bgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJPYmplY3QgY2xhc3MgZGVmaW5pdGlv
biB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFkLiBEZWNsYXJlZCBhIG5ldyBhYnNv
bHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAgICBtX3NldE5lZWRzTGF5b3V0Rm9y
YmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4gY2FuIGJlIGNvbnN0LgorICAgICAg
ICBDb25kaXRpb25hbGl6ZWQgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbiBhbmQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUKKyAgICAgICAgc28gYm90aCBjYW4gYmUgdXNlZCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcyBidXQgZXhwYW5kIHRvIG5vIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ2dlZENvbnRlbnRD
b250YWluc1JlcGxhY2VkRWxlbWVudCk6IFNpbXBsaWZpZWQgYW5kIHVwZGF0ZWQKKyAgICAgICAg
bm93IHRoYXQgdGhlIGRyYWdnZWQgY29udGVudCBkYXRhIG5vIGxvbmdlciBoYXMgaXRzIG93biBu
YW1lZCBzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQp
OiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mp
OiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTog
UmVtb3ZlZCB0aGUgQ2hyb21pdW0tb25seQorICAgICAgICBjb25jZXB0IG9mIGFjdGl2ZSB2cy4g
aW5hY3RpdmUgdGV4dCBzZWFyY2ggaGlnaGxpZ2h0IGNvbG9ycy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKTogRGVsZXRlZC4gV2FzIG9ubHkgdXNlZCBmb3Ig
YSB0ZXN0CisgICAgICAgIG9mIENocm9taXVtLXNwZWNpZmljIHNjcm9sbCB0aWNrIG1hcmtzLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6IERlbGV0ZWQgYWRkVGV4dE1hdGNoTWFya2Vy
LgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogRGl0dG8uCisKIDIwMjAtMDQtMDQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
Zm91cnRoIHJvdW5kIG9mIGxvZ2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIw
OTY4NT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMTdiOTIxZjRkZDc4NjcwZjYyNDFiZjdlZGIyYmViMzFiMDNiYzg0
Zi4uYjczYzdiN2IyMDJkNzQwMzEzMzMxNzY5ZTgwN2FjZTAwYTFhMjBmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNyBAQAorMjAyMC0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmg6IFJlbW92ZWQgdW51c2VkICJDb2NvYSB3aXRo
b3V0IElPU3VyZmFjZSIgY29kZSBwYXRocy4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdT
bmFwc2hvdFN0b3JlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnNldFN1cmZhY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpoYXNJbWFnZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzSW1hZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KTogRGVs
ZXRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24pOiBVcGRhdGVkIHNpbmNlCisgICAg
ICAgIGFkZFBsYXRmb3JtVGV4dENoZWNraW5nTWFya2VyIG5vIGxvbmdlciBleGlzdHMuCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlv
blJlbGF0aXZlVG9TZWxlY3Rpb24pOgorICAgICAgICBVcGRhdGVkIHNpbmNlIGZpbHRlck1hcmtl
cnMgcGFzc2VzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIG5vdy4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdC
ZXR3ZWVuUG9zaXRpb25zKToKKyAgICAgICAgU2ltcGxpZmllZCBjb2RlIGEgYml0IGJ5IHJlbW92
aW5nIGxvY2FsIHZhcmlhYmxlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RB
dExvY2F0aW9uKTogVXNlCisgICAgICAgIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMg
YW5kIHVuaXRlZEJvdW5kaW5nQm94ZXMuCisKIDIwMjAtMDQtMDQgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgZm91cnRoIHJvdW5kIG9mIGxv
Z2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIwOTY4NT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZwppbmRleCAwNmRiNjNmMzVlYjlmODE0NTlmNDdjODI4YWEyNjdiZTgyMTMx
Mzk0Li4xYWVmZTdhMmZiZDU2OWQ4YzFhOWJiNDMyNjRhNGRjZTJjYjEyNjZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMg
aW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRh
cnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIFVwZGF0ZSBzaW5jZSBEb2N1bWVudE1hcmtlcjo6
bWV0YWRhdGEgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKC1bV2ViRnJhbWUgbmV4dFVucGVy
dHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIERp
dHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgor
ICAgICAgICAoLVtXZWJWaXNpYmxlUG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9u
UGhyYXNlQWx0ZXJuYXRpdmVzOl0pOgorICAgICAgICBVcGRhdGUgc2luY2UgRG9jdW1lbnRNYXJr
ZXI6OmFsdGVybmF0aXZlcyBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoLVtXZWJWaXNpYmxl
UG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcl0pOgorICAgICAg
ICBEaXR0by4KKwogMjAyMC0wMy0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICByZGFyOi8vcHJvYmxlbS82MDM1OTIzMCBNYXJrIGxvY2F0aW9uTWFuYWdl
cjpkaWRDaGFuZ2VBdXRob3JpemF0aW9uU3RhdHVzOiBhcyBkZXByZWNhdGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCmluZGV4IGNjYTVmZDcyNGI3ZTczMzNhYjAxZGFjYTU3YTBiYmI4YTM4
Mjg2NGIuLjgwMTE5MTc5MTNiZjVhNTcyMTQxMGQwMTk1ZmIxYTEwODQ2MWZkY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMC0wNC0wNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBh
YnNvbHV0ZVF1YWRBbmRJbnNpZGVGaXhlZFBvc2l0aW9uOl0pOiBVc2UgdW5pdGVkQm91bmRpbmdC
b3hlcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMpOiBVc2UgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6YW5kTWV0
YWRhdGFzOl0pOiBVcGRhdGVkIHNpbmNlIERvY3VtZW50TWFya2VyIG5vCisgICAgICAgIGxvbmdl
ciBoYXMgYSBkZWRpY2F0ZWQgbWV0YWRhdGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoLVtX
ZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOmluRnJh
bWU6d2l0aExvb2t1cE9wdGlvbnM6aW5kaWNhdG9yT3B0aW9uczp0cmFuc2l0aW9uOl0pOgorICAg
ICAgICBVc2UgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKwogMjAyMC0wNC0wNCAg
UGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIy
NTkwOTUpOiBBU1NFUlRJT04gRkFJTEVEOiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGUgIT0gVmlkZW9G
dWxsc2NyZWVuTW9kZU5vbmUgc2VlbiB3aXRoIFRlc3RXZWJLaXRBUEkuV2ViS2l0TGVnYWN5LkF1
ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5Q
dHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCmluZGV4IDYxZjEwOWJjYWZlNjA1MTZh
NzMyZWU0ZWQ4MzlhZDEzYjM0YjU3MWEuLjAxMmEwMWQ3OTQ0ZWE2YWRhNjVmYzllNTk3ZGE0ZmNi
MzFiZWZmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCkBAIC00OCw2ICs0OCwxMCBAQAogI2RlZmluZSBOU19S
RUxFQVNFU19BUkdVTUVOVAogI2VuZGlmCiAKKyNpZm5kZWYgX19PQkpDX18KK3R5cGVkZWYgc3Ry
dWN0IG9iamNfb2JqZWN0ICppZDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVW5s
aWtlIG1vc3QgbW9zdCBvZiBvdXIgc21hcnQgcG9pbnRlcnMsIFJldGFpblB0ciBjYW4gdGFrZSBl
aXRoZXIgdGhlIHBvaW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggMTUyN2M1MWQ1YjQ2ZDQyYmRiYWM0OTNlOWU0YmJhMWIy
ZWRiZGUzYy4uZTIzMWQ1MzU3N2NiNTA4NWFkMzhlYmU2ZTAzMmY0MWU3OTE1YTNkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC02Miw3ICs2Miw3IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0IGZpbmFsOwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9v
bCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldERh
dGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIG5vdGlm
eVBhcmVudEFmdGVyQ2hhbmdlKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlU291cmNlKTsKQEAg
LTcwLDYgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YTsKIH07CiAKK2lubGlu
ZSB1bnNpZ25lZCBOb2RlOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmIChpczxDaGFyYWN0ZXJE
YXRhPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhp
cykubGVuZ3RoKCk7CisgICAgcmV0dXJuIGNvdW50Q2hpbGROb2RlcygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNlZjk0NTkwMGJhOGYy
NGUwMmY1ZWNmMjBkZWNmYzcwOGJmZDgyYTAuLjJjYWNjNWQyZTJkNjRiODRkMTYyYzdmMDczZjM5
Y2YzMTc1NTYzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDY0MSw3ICs0NjQxLDcg
QEAgdm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogCiAjaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NI
RUNLSU5HKQogICAgIC8vIEZyZXNobHkgaW5zZXJ0ZWQgdGV4dCBpcyBleHBlY3RlZCB0byBub3Qg
aW5oZXJpdCBQbGF0Zm9ybVRleHRDaGVja2luZyBtYXJrZXJzLgotICAgIG1fbWFya2Vycy0+cmVt
b3ZlTWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3Jt
VGV4dENoZWNraW5nKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZz
ZXQsIG9mZnNldCArIGxlbmd0aCB9LCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmcpOwogI2VuZGlmCiB9CiAKQEAgLTQ2NTMsNyArNDY1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRl
eHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ICAgIH0KIAogICAgIC8vIFVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1t
YXIgY2hlY2tpbmcuCi0gICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZzZXQsIG9m
ZnNldCArIGxlbmd0aCB9KTsKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZz
ZXQgKyBsZW5ndGgsIDAgLSBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCmluZGV4IDY1NWJkMzY4YmJkYjU5YjM5Y2U3NWZmY2Q3MjA2YjMyY2YwOGU4ZDcuLmRmNWNj
OGY3YjVhYWU4NjRmYjAwYWRmMGU2NzgxZTk1MDI2NTU1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjAsOCArMjAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIk5vZGUuaCIK
LQorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAgLTI5
LDE1ICsyOCwxMiBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLXR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEEgcmFuZ2Ugb2YgYSBub2RlIHdpdGhpbiBhIGRvY3Vt
ZW50IHRoYXQgaXMgIm1hcmtlZCIsIHN1Y2ggYXMgdGhlIHJhbmdlIG9mIGEgbWlzc3BlbGxlZCB3
b3JkLgogLy8gSXQgb3B0aW9uYWxseSBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIHRoYXQgY291bGQg
YmUgZGlzcGxheWVkIGluIHRoZSB1c2VyIGludGVyZmFjZS4KLS8vIEl0IGFsc28gb3B0aW9uYWxs
eSBpbmNsdWRlcyBhIGZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBtYXRjaCBpcyBhY3RpdmUs
IHdoaWNoIGlzIGlnbm9yZWQKLS8vIGZvciBhbGwgdHlwZXMgb3RoZXIgdGhhbiB0eXBlIFRleHRN
YXRjaC4KIGNsYXNzIERvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIE1hcmtlclR5
cGUgewpAQCAtNzIsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRlbGVwaG9uZU51bWJlciA9
IDEgPDwgMTAsCiAjZW5kaWYKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBG
SVhNRTogaU9TIHNob3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24gbWFyayBzeXN0ZW0gd2l0
aCB0aGUgb3RoZXIgcGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMxMjQ5Pi4KKyAgICAgICAg
Ly8gRklYTUU6IGlPUyBzaG91bGQgc2hhcmUgdGhlIHNhbWUgZGljdGF0aW9uIG1hcmsgc3lzdGVt
IHdpdGggdGhlIG90aGVyIHBsYXRmb3Jtcy4KICAgICAgICAgRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcyA9IDEgPDwgMTEsCiAgICAgICAgIERpY3RhdGlvblJlc3VsdCA9IDEgPDwgMTIs
CiAjZW5kaWYKQEAgLTg4LDcwICs4NCw1MCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIE9wdGlvblNldDxNYXJrZXJUeXBlPiBhbGxNYXJrZXJzKCk7CiAKLSAgICB1c2luZyBJc0Fj
dGl2ZU1hdGNoRGF0YSA9IGJvb2w7Ci0gICAgdXNpbmcgRGVzY3JpcHRpb25EYXRhID0gU3RyaW5n
OwogICAgIHN0cnVjdCBEaWN0YXRpb25EYXRhIHsKICAgICAgICAgdWludDY0X3QgY29udGV4dDsK
ICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dDsKICAgICB9OwotICAgIHN0cnVjdCBEaWN0YXRp
b25BbHRlcm5hdGl2ZXNEYXRhIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZXM7Ci0gICAgICAgIFJldGFpblB0cjxpZD4gbWV0YWRh
dGE7Ci0jZW5kaWYKLSAgICB9OwotICAgIHN0cnVjdCBEcmFnZ2VkQ29udGVudERhdGEgewotICAg
ICAgICBSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZTsKLSAgICB9OwogI2lmIEVOQUJMRShQTEFURk9S
TV9EUklWRU5fVEVYVF9DSEVDS0lORykKICAgICBzdHJ1Y3QgUGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhIHsKICAgICAgICAgU3RyaW5nIGtleTsKICAgICAgICAgU3RyaW5nIHZhbHVlOwogICAgIH07
CiAjZW5kaWYKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVz
Y3JpcHRpb25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBE
cmFnZ2VkQ29udGVudERhdGEKKworICAgIHVzaW5nIERhdGEgPSBWYXJpYW50PAorICAgICAgICBT
dHJpbmcKKyAgICAgICAgLCBEaWN0YXRpb25EYXRhIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlcwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgVmVjdG9yPFN0cmluZz4gLy8gRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcworICAgICAgICAsIFJldGFpblB0cjxpZD4gLy8g
RGljdGF0aW9uUmVzdWx0CisjZW5kaWYKKyAgICAgICAgLCBSZWZQdHI8Tm9kZT4gLy8gRHJhZ2dl
ZENvbnRlbnQKICNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCi0gICAg
LCBQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGEKKyAgICAgICAgLCBQbGF0Zm9ybVRleHRDaGVja2lu
Z0RhdGEgLy8gUGxhdGZvcm1UZXh0Q2hlY2tpbmcKICNlbmRpZgogICAgID47CiAKLSAgICBEb2N1
bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29s
IGlzQWN0aXZlTWF0Y2gpOwotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24gPSBTdHJpbmcoKSk7Ci0gICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgRGF0YSYmKTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEp
OwotI2VuZGlmCisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgT2Zmc2V0UmFuZ2UsIERh
dGEmJiA9IHsgfSk7CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRP
ZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
ZnNldDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZS5zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFu
Z2UuZW5kOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKLSAg
ICBib29sIGlzQWN0aXZlTWF0Y2goKSBjb25zdDsKLSAgICB2b2lkIHNldEFjdGl2ZU1hdGNoKGJv
b2wpOwotCiAgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
ICAgIHZvaWQgY2xlYXJEYXRhKCkgeyBtX2RhdGEgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJE
YXRhKCkgeyBtX2RhdGEgPSBTdHJpbmcgeyB9OyB9CiAKICAgICAvLyBPZmZzZXQgbW9kaWZpY2F0
aW9ucyBhcmUgZG9uZSBieSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuCiAgICAgLy8gT3RoZXIg
Y2xhc3NlcyBzaG91bGQgbm90IGNhbGwgZm9sbG93aW5nIHNldHRlcnMuCi0gICAgdm9pZCBzZXRT
dGFydE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9zdGFydE9mZnNldCA9IG9mZnNldDsgfQot
ICAgIHZvaWQgc2V0RW5kT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX2VuZE9mZnNldCA9IG9m
ZnNldDsgfQorICAgIHZvaWQgc2V0U3RhcnRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmFu
Z2Uuc3RhcnQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVuZE9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpIHsgbV9yYW5nZS5lbmQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNoaWZ0T2Zmc2V0cyhpbnQg
ZGVsdGEpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGlzRGljdGF0aW9u
KCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGluZGV4KTsK
LSAgICBpZCBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWV0YWRhdGEoaWQpOwotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgTWFya2VyVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9z
dGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKKyAgICBPZmZzZXRSYW5nZSBt
X3JhbmdlOwogICAgIERhdGEgbV9kYXRhOwogfTsKIApAQCAtMTgzLDM0ICsxNTksMTcgQEAgY29u
c3RleHByIGF1dG8gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSAtPiBPcHRpb25TZXQ8TWFy
a2VyVHlwZT4KICAgICB9OwogfQogCi1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFy
a2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3Rp
dmVNYXRjaCkKLSAgICA6IG1fdHlwZShUZXh0TWF0Y2gpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0
YXJ0T2Zmc2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICwgbV9kYXRhKGlz
QWN0aXZlTWF0Y2gpCi17Ci19Ci0KLWlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJr
ZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQoraW5saW5lIERvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIE9mZnNldFJhbmdlIHJhbmdlLCBEYXRhJiYg
ZGF0YSkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNl
dCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShkZXNjcmlwdGlv
bikKLXsKLX0KLQotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJU
eXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEm
JiBkYXRhKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9yYW5nZShyYW5nZSkK
ICAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2hpZnRPZmZzZXRzKGludCBkZWx0YSkKIHsKLSAgICBtX3N0YXJ0T2Zmc2V0ICs9
IGRlbHRhOwotICAgIG1fZW5kT2Zmc2V0ICs9IGRlbHRhOworICAgIG1fcmFuZ2Uuc3RhcnQgKz0g
ZGVsdGE7CisgICAgbV9yYW5nZS5lbmQgKz0gZGVsdGE7CiB9CiAKIGlubGluZSBjb25zdCBTdHJp
bmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0yMTgsNTUgKzE3Nyw0
IEBAIGlubGluZSBjb25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8g
V1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAotaW5saW5lIGJv
b2wgRG9jdW1lbnRNYXJrZXI6OmlzQWN0aXZlTWF0Y2goKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgV1RGOjpnZXQ8Ym9vbD4obV9k
YXRhKTsKLX0KLQotaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJv
b2wgaXNBY3RpdmVNYXRjaCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFRleHRNYXRjaCk7Ci0g
ICAgbV9kYXRhID0gaXNBY3RpdmVNYXRjaDsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLS8vIEZJWE1FOiBpT1Mgc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGRpY3RhdGlvbiBtYXJrIHN5
c3RlbSB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybXMgPHJkYXI6Ly9wcm9ibGVtLzk0MzEyNDk+Lgot
Ci1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0
YSkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkK
LSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShEaWN0YXRpb25BbHRl
cm5hdGl2ZXNEYXRhIHsgYWx0ZXJuYXRpdmVzLCBtZXRhZGF0YSB9KQotewotICAgIEFTU0VSVChp
c0RpY3RhdGlvbigpKTsKLX0KLQotaW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXI6OmlzRGljdGF0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90eXBlID09IERpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMgfHwgbV90eXBlID09IERpY3RhdGlvblJlc3VsdDsKLX0KLQotaW5saW5lIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRh
KS5hbHRlcm5hdGl2ZXM7Ci19Ci0KLWlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBbHRl
cm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBzaXplX3QgaW5kZXgpCi17Ci0gICAg
V1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNb
aW5kZXhdID0gYWx0ZXJuYXRpdmU7Ci19Ci0KLWlubGluZSBpZCBEb2N1bWVudE1hcmtlcjo6bWV0
YWRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2
ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2V0TWV0YWRhdGEoaWQgbWV0YWRhdGEpCi17Ci0gICAgV1RGOjpnZXQ8RGljdGF0
aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOwotfQotCi0j
ZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBjZDkzZWU1OTY4MWFkMjZkODRjMTM1
MDg0OWM5ZWRhMmM3Y2QxMGRiLi5mYzY0ZTMwNmY1NWYwNjhkNjZhMGFjYTEwNDA5OGY4M2NmNDUz
ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKQEAgLTYwLDEzNCArNTksNTQgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmRldGFjaCgpCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMg
PSB7IH07CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvbGxlY3RUZXh0UmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK2F1dG8gRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpIC0+IFZlY3RvcjxUZXh0UmFuZ2U+CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHRleHRSYW5nZTsKLSAgICBmb3IgKFRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IocmFuZ2Up
OyAhdGV4dEl0ZXJhdG9yLmF0RW5kKCk7IHRleHRJdGVyYXRvci5hZHZhbmNlKCkpCi0gICAgICAg
IHRleHRSYW5nZS5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKSk7
Ci0gICAgcmV0dXJuIHRleHRSYW5nZTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCi17Ci0gICAgZm9yIChh
dXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4
dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlv
bikpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKLXsK
LSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQotICAg
ICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtl
cih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkp
KTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShO
b2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQotewotICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgpKTsKLX0KLQot
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCi17Ci0gICAgYWRk
TWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBhY3Rp
dmVNYXRjaCkKLXsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMo
cmFuZ2UpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFy
dE9mZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9m
ZnNldCgpOwotICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBE
b2N1bWVudE1hcmtlcihzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAg
IFZlY3RvcjxUZXh0UmFuZ2U+IHJhbmdlczsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdGVyYXRv
cihyYW5nZSk7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAg
ICAgYXV0byBjdXJyZW50UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICByYW5nZXMu
YXBwZW5kKHsgV1RGTW92ZShjdXJyZW50UmFuZ2Uuc3RhcnQuY29udGFpbmVyKSwgeyBjdXJyZW50
UmFuZ2Uuc3RhcnQub2Zmc2V0LCBjdXJyZW50UmFuZ2UuZW5kLm9mZnNldCB9IH0pOwogICAgIH0K
KyAgICByZXR1cm4gcmFuZ2VzOwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4m
IG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNv
bnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJl
dGF0aW9ucywgbWV0YWRhdGEpKTsKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RU
ZXh0UmFuZ2VzKHJhbmdlKSkKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS5ub2RlLCB7IHR5
cGUsIHRleHRQaWVjZS5yYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEgeyBkYXRhIH0gfSk7CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
dGVycHJldGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIo
VGV4dCYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQog
ewotICAgIEFTU0VSVChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSk7Ci0gICAgaWYgKGludGVy
cHJldGF0aW9ucy5zaXplKCkgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG51
bWJlck9mQWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25zLnNpemUoKSAtIDE7Ci0gICAgZm9y
IChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBE
b2N1bWVudE1hcmtlciBtYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgZW1wdHlTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4obnVtYmVyT2ZBbHRlcm5hdGl2ZXMp
LCBSZXRhaW5QdHI8aWQ+KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mQWx0ZXJuYXRpdmVzOyArK2kpCi0gICAgICAgICAgICBtYXJrZXIuc2V0QWx0ZXJuYXRpdmUo
aW50ZXJwcmV0YXRpb25zW2kgKyAxXSwgaSk7Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIG1hcmtlcik7Ci0gICAgfQorICAgIGFkZE1hcmtlcihub2RlLCB7
IHR5cGUsIHsgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIH0sIFdURk1vdmUoZGF0
YSkgfSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25S
ZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+
JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChhdXRvIHRl
eHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFya2VyKHRl
eHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVu
ZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4oKSwgbWV0YWRhdGEpKTsKKyAgICAv
LyBGSVhNRTogU2luY2UgdGhlIG1hcmtlciBpcyBhbHJlYWR5IHN0b3JlZCBpbiBhIG1hcCBrZXll
ZCBieSBub2RlLCB3ZSBjYW4gcHJvYmFibHkgY2hhbmdlIHRoaW5ncyBhcm91bmQgc28gd2UgZG9u
J3QgaGF2ZSB0byBhbHNvIHN0b3JlIHRoZSBub2RlIGluIHRoZSBtYXJrZXIuCisgICAgZm9yIChh
dXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisgICAgICAgIGFkZE1h
cmtlcih0ZXh0UGllY2Uubm9kZSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRl
eHRQaWVjZS5yYW5nZSwgUmVmUHRyPE5vZGU+IHsgdGV4dFBpZWNlLm5vZGUucHRyKCkgfSB9KTsK
IH0KIAotI2VuZGlmCi0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2Vk
Q29udGVudE1hcmtlcihSYW5nZSYgcmFuZ2UpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6
IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJh
Z2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250ZW50RGF0YSB7IHRleHRQaWVjZS0+Zmlyc3ROb2Rl
KCkgfTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBE
b2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwg
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwot
ICAgIH0KLX0KLQotI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtl
cihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJs
YXBSdWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhy
YW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0
YSB0ZXh0Q2hlY2tpbmdEYXRhIHsga2V5LCB2YWx1ZSB9OwotICAgICAgICBhZGRNYXJrZXIodGV4
dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgp
LCBXVEZNb3ZlKHRleHRDaGVja2luZ0RhdGEpIH0pOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFu
Z2VzKHJhbmdlKSkgewotICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBl
cykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9m
ZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNl
dCgpOwotICAgICAgICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgbnVsbHB0
ciwgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIH0KKyAgICBm
aWx0ZXJNYXJrZXJzKHJhbmdlLCBudWxscHRyLCB0eXBlcywgb3ZlcmxhcFJ1bGUpOwogfQogCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2VycyhSYW5nZSYgcmFuZ2Us
IHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1
bWVudE1hcmtlciYpPiYgZmlsdGVyLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJsYXBS
dWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5n
ZSkpIHsKLSAgICAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAg
IGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7CisgICAg
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKLQotICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFy
a2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQg
LSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIGZpbHRlckZ1bmN0aW9uLCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBp
ZWNlLm5vZGUsIHRleHRQaWVjZS5yYW5nZSwgdHlwZXMsIGZpbHRlciwgb3ZlcmxhcFJ1bGUpOwog
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcihSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFu
b2RlLmRvY3VtZW50KCkudmlldygpIHx8ICFub2RlLmRvY3VtZW50KCkudmlldygpLT5uZWVkc0xh
eW91dCgpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0
IHdlIGRvbid0IHVzZSBSYW5nZSAoYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lIE5vZGUpLCBidXQg
c3RpbGwgc2hhcmUgY29kZSB3aXRoIGFic29sdXRlVGV4dFF1YWRzKCkuCi0gICAgYXV0byBtYXJr
ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpLCAmbm9kZSwgbWFya2VyLnN0
YXJ0T2Zmc2V0KCksICZub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGFic29sdXRlTWFya2VyUXVhZHM7Ci0gICAgbWFya2VyUmFuZ2UtPmFic29sdXRlVGV4
dFF1YWRzKGFic29sdXRlTWFya2VyUXVhZHMsIHRydWUpOwotCi0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYWJzb2x1dGVNYXJrZXJSZWN0czsKLSAgICBhYnNvbHV0ZU1hcmtlclJlY3RzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYWJzb2x1dGVNYXJrZXJRdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgcXVhZCA6IGFic29sdXRlTWFya2VyUXVhZHMpCi0gICAgICAgIGFic29sdXRlTWFy
a2VyUmVjdHMudW5jaGVja2VkQXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7Ci0KLSAgICBtYXJr
ZXIuc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhhYnNvbHV0ZU1hcmtlclJlY3RzKTsKKyAgICBh
dXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpIH0s
IHsgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKKyAgICBtYXJrZXIuc2V0VW5jbGlwcGVk
QWJzb2x1dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVh
ZHMocmFuZ2UsIHRydWUpKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCkKQEAgLTE5NSw4ICsxMTQsOCBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCiAg
ICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYg
bWFya2VycyA6IG1fbWFya2Vycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICptYXJrZXJzKQorICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMudmFs
dWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMpCiAgICAg
ICAgICAgICBtYXJrZXIuaW52YWxpZGF0ZSgpOwogICAgIH0KIApAQCAtMjA5LDcgKzEyOCw3IEBA
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJz
SW5Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE1hcmtlckxpc3QqIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAg
ICBhdXRvIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBBU1NFUlQobWFya2Vy
cyk7CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICptYXJrZXJzKQpAQCAtMjMyLDQxICsxNTEs
MzMgQEAgc3RhdGljIHZvaWQgdXBkYXRlTWFpbkZyYW1lTGF5b3V0SWZOZWVkZWQoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIG1haW5GcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnVwZGF0
ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlIG1hcmtlclR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6dXBkYXRlUmVj
dHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
dHlwZSkKIHsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlKSkKKyAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKLQotICAgIGJvb2wgbmVlZHNMYXlvdXRJZkFueVJl
Y3RzQXJlRGlydHkgPSB0cnVlOwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1f
bWFya2VycykgewotICAgICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKLSAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAg
ICAgICAgIGlmIChtYXJrZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICAg
ICAgaWYgKG1hcmtlci5pc1ZhbGlkKCkpCisgICAgYm9vbCB1cGRhdGVkTGF5b3V0ID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBmb3Ig
KGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkgeworICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlKCkgIT0gdHlwZSB8fCBtYXJrZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBXZSdsbCBkbyB1cCB0byBvbmUgbGF5b3V0IHBl
ciBjYWxsIGlmIHdlIGhhdmUgYW55IGRpcnR5IG1hcmtlcnMuCi0gICAgICAgICAgICBpZiAobmVl
ZHNMYXlvdXRJZkFueVJlY3RzQXJlRGlydHkpIHsKKyAgICAgICAgICAgIGlmICghdXBkYXRlZExh
eW91dCkgewogICAgICAgICAgICAgICAgIHVwZGF0ZU1haW5GcmFtZUxheW91dElmTmVlZGVkKG1f
ZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdXBkYXRlZExheW91dCA9IHRydWU7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCBub2RlKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCAqbm9kZU1hcmtlcnMua2V5KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotVmVjdG9yPEZsb2F0
UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQorVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlc3Vs
dDsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQorICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKHR5cGUpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIEFT
U0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQpAQCAtMjc1LDI2ICsxODYsMjYgQEAgVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUpOworICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKHR5cGUpOwogCiAgICAgYm9v
bCBpc1N1YmZyYW1lID0gIWZyYW1lLT5pc01haW5GcmFtZSgpOwogICAgIEludFJlY3Qgc3ViZnJh
bWVDbGlwUmVjdDsKICAgICBpZiAoaXNTdWJmcmFtZSkKICAgICAgICAgc3ViZnJhbWVDbGlwUmVj
dCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZVZpZXctPndpbmRvd0NsaXBSZWN0
KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAg
ICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKKyAgICBmb3IgKGF1dG8mIG5v
ZGVNYXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlTWFy
a2Vycy5rZXktPnJlbmRlcmVyKCk7CiAgICAgICAgIEZsb2F0UmVjdCBvdmVyZmxvd0NsaXBSZWN0
OwotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkK
KyAgICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAgb3ZlcmZsb3dDbGlwUmVjdCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5v
ZGVNYXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSB0eXBl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBhdXRvIHJlbmRlcmVk
UmVjdHMgPSBtYXJrZXIudW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpOwogCiAgICAgICAgICAgICAv
LyBDbGlwIGRvY3VtZW50IG1hcmtlcnMgYnkgdGhlaXIgb3ZlcmZsb3cgY2xpcC4KLSAgICAgICAg
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHJlbmRlcmVkUmVjdHMpCiAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KG92ZXJmbG93Q2xpcFJlY3QpOwogICAgICAgICAg
ICAgfQpAQCAtMzE1LDIxICsyMjYsMjAgQEAgVmVjdG9yPEZsb2F0UmVjdD4gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCitzdGF0aWMgYm9vbCBzaG91bGRJ
bnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAj
aWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAgIGlmIChuZXdNYXJr
ZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZykKKyAgICBp
ZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcp
CiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzIHx8IG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvblJlc3VsdCkKKyAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyB8fCBtYXJrZXIudHlwZSgpID09
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCi0gICAgaWYgKG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBXVEY6OmdldDxEb2N1
bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXRO
b2RlKQotICAgICAgICAgICAgcmV0dXJuIHRhcmdldE5vZGUtPnJlbmRlcmVyKCkgJiYgdGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJSZXBsYWNlZCgpOwotICAgIH0KKworICAgIGlmICht
YXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkKKyAgICAgICAg
cmV0dXJuIGlzPFJlbmRlclJlcGxhY2VkPihXVEY6OmdldDxSZWZQdHI8Tm9kZT4+KG1hcmtlci5k
YXRhKCkpLT5yZW5kZXJlcigpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMzNyw3ICsy
NDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERv
Y3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiAvLyBNYXJrZXJzIGFyZSBzdG9yZWQgaW4gb3JkZXIg
c29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNldC4KIC8vIE1hcmtlcnMgb2YgdGhlIHNhbWUgdHlw
ZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVyLgogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJr
ZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IERvY3VtZW50TWFya2VyJiYgbmV3TWFya2VyKQogewogICAgIEFTU0VSVChuZXdNYXJrZXIuZW5k
T2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwogICAgIGlmIChuZXdNYXJrZXIu
ZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCkBAIC0zNTMsMTEgKzI2Mywx
MSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMuYWRkKG5ld01hcmtlci50eXBlKCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOworICAgIGF1dG8mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKLSAgICAgICAgbGlzdCA9IG1ha2VV
bmlxdWU8TWFya2VyTGlzdD4oKTsKLSAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIobmV3TWFya2VyKSk7CisgICAgICAgIGxpc3QgPSBtYWtlVW5pcXVlPFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyPj4oKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIGlmIChzaG91
bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKG5ld01hcmtlcikpIHsKICAgICAgICAgLy8gV2UgZG9u
J3QgbWVyZ2UgZGljdGF0aW9uIG1hcmtlcnMuCiAgICAgICAgIHNpemVfdCBpOwpAQCAtMzY3LDkg
KzI3Nyw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYg
bm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAgICAgICBpZiAobWFya2Vy
LnN0YXJ0T2Zmc2V0KCkgPiBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1
bWVudE1hcmtlcihuZXdNYXJrZXIpKTsKKyAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChuZXdNYXJrZXIpOworICAgICAgICBS
ZW5kZXJlZERvY3VtZW50TWFya2VyIHRvSW5zZXJ0KFdURk1vdmUobmV3TWFya2VyKSk7CiAgICAg
ICAgIHNpemVfdCBudW1NYXJrZXJzID0gbGlzdC0+c2l6ZSgpOwogICAgICAgICBzaXplX3QgaTsK
ICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBtYXJrZXJzIHdob3NlIHN0YXJ0IG9mZnNldCBp
cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG5ldyBtYXJrZXIncy4KQEAgLTQxNCwxMDIgKzMy
NCw5OSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5v
ZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgIGludmFsaWRhdGVSZWN0c0Zvck1h
cmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKLS8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9kZSB0
byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3Bp
ZXMuICBUaGUgc2hpZnQgaXMKLS8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3Jl
YXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNyY05v
ZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc3Jj
Tm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGlu
dCBkZWx0YSkKKy8vIENvcGllcyBtYXJrZXJzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBh
cHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3BpZXMuIFRoZSBzaGlm
dCBpcworLy8gdXNlZnVsIGlmLCBlLmcuLCB0aGUgY2FsbGVyIGhhcyBjcmVhdGVkIHRoZSBkZXN0
aW5hdGlvbiBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNvdXJjZS4KK3ZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNl
dFJhbmdlIHJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbikKIHsKLSAgICBpZiAobGVuZ3RoIDw9IDAp
CisgICAgaWYgKHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0g
ICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUpOworICAgIGF1dG8g
bGlzdCA9IG1fbWFya2Vycy5nZXQoJnNvdXJjZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOworICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBm
YWxzZTsKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIC8vIHN0b3Ag
aWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAgICAgaWYgKG1hcmtl
ci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQorICAgICAgICAvLyBTdG9wIGlmIHdlIGFyZSBu
b3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zm
c2V0KCkgPj0gcmFuZ2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8gc2tp
cCBtYXJrZXIgdGhhdCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCByYW5nZSBvciBpcyB0aGUgd3Jv
bmcgdHlwZQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQpCisg
ICAgICAgIC8vIFNraXAgbWFya2VyIHRoYXQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgcmFuZ2Uu
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCByYW5nZS5zdGFydCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIHBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZp
ZWQgcmFuZ2UgYW5kIGFwcGx5IHRoZSBzaGlmdCBkZWx0YQotICAgICAgICBkb2NEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgbWFya2VyLnNldFN0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkKLSAgICAgICAgICAgIG1hcmtlci5zZXRF
bmRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7
CisgICAgICAgIC8vIFBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIGFw
cGx5IHRoZSBzaGlmdCBkZWx0YS4KKyAgICAgICAgYXV0byBjb3BpZWRNYXJrZXIgPSBtYXJrZXI7
CisgICAgICAgIGlmIChjb3BpZWRNYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHJhbmdlLnN0YXJ0KQor
ICAgICAgICAgICAgY29waWVkTWFya2VyLnNldFN0YXJ0T2Zmc2V0KHJhbmdlLnN0YXJ0KTsKKyAg
ICAgICAgaWYgKGNvcGllZE1hcmtlci5lbmRPZmZzZXQoKSA+PSByYW5nZS5lbmQpCisgICAgICAg
ICAgICBjb3BpZWRNYXJrZXIuc2V0RW5kT2Zmc2V0KHJhbmdlLmVuZCk7CiAKLSAgICAgICAgYWRk
TWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtlcihkZXN0aW5hdGlvbiwg
V1RGTW92ZShjb3BpZWRNYXJrZXIpKTsKKyAgICAgICAgbmVlZFJlcGFpbnQgPSB0cnVlOwogICAg
IH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIGRz
dE5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChuZWVkUmVwYWludCkgeworICAg
ICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRlc3RpbmF0aW9uLnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXMsIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIE9mZnNldFJhbmdlIHJhbmdlLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7Ci0g
ICAgaWYgKGxlbmd0aCA8PSAwKQorICAgIGlmIChyYW5nZS5zdGFydCA+PSByYW5nZS5lbmQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7CisgICAgQVNTRVJUKCFtX21hcmtl
cnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZu
b2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxp
c3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTspIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CisgICAgYm9vbCBuZWVkUmVwYWludCA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyApIHsKKyAgICAgICAgYXV0byYgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgLy8gbWFya2VycyBhcmUgcmV0dXJuZWQgaW4g
b3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKKyAgICAgICAgaWYg
KG1hcmtlci5zdGFydE9mZnNldCgpID49IHJhbmdlLmVuZCkKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFy
Z2V0Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgfHwgIW1h
cmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7CisgICAgICAgIGlmIChtYXJrZXIu
ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uuc3RhcnQgfHwgIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBl
KCkpKSB7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbiAmJiAhZmlsdGVyRnVuY3Rpb24oJm1hcmtl
cikpIHsKKyAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKG1hcmtlcikpIHsKICAgICAgICAg
ICAgIGkrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
YXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGlu
IHNvbWUgd2F5Ci0gICAgICAgIGRvY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGluIHNvbWUgd2F5
LgorICAgICAgICBuZWVkUmVwYWludCA9IHRydWU7CiAKLSAgICAgICAgLy8gcGl0Y2ggdGhlIG9s
ZCBtYXJrZXIKICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwotCiAgICAgICAgIGlmIChzaG91bGRS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKLSAgICAgICAgICAgIC8vIFN0b3AgaGVy
ZS4gRG9uJ3QgYWRkIHJlc3VsdGluZyBzbGljZXMgYmFjay4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIC8vIGFkZCBlaXRoZXIgb2YgdGhlIHJlc3VsdGluZyBzbGljZXMgdGhhdCBh
cmUgbGVmdCBhZnRlciByZW1vdmluZyB0YXJnZXQKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4g
bWFya2VyLnN0YXJ0T2Zmc2V0KCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ID4gbWFya2Vy
LnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQgPSBt
YXJrZXI7Ci0gICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChzdGFydE9mZnNldCk7Ci0g
ICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdMZWZ0
KSk7CisgICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChyYW5nZS5zdGFydCk7CisgICAg
ICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihXVEZNb3ZlKG5l
d0xlZnQpKSk7CiAgICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2Vy
dGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsK
ICAgICAgICAgfQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gZW5kT2Zmc2V0KSB7
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiByYW5nZS5lbmQpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyIG5ld1JpZ2h0ID0gbWFya2VyOwotICAgICAgICAgICAgbmV3Umln
aHQuc2V0U3RhcnRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIGxpc3QtPmluc2VydChp
LCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld1JpZ2h0KSk7CisgICAgICAgICAgICBuZXdSaWdo
dC5zZXRTdGFydE9mZnNldChyYW5nZS5lbmQpOworICAgICAgICAgICAgbGlzdC0+aW5zZXJ0KGks
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdSaWdodCkpKTsKICAgICAgICAgICAg
IC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwgYnV0IHdlIHdhbnQg
dG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CkBAIC01MjEsMTE3
ICs0MjgsMTE3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpCiAgICAgICAgICAgICBtX3Bvc3Np
Ymx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkg
JiYgbm9kZS5yZW5kZXJlcigpKQotICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
KyAgICBpZiAobmVlZFJlcGFpbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBub2Rl
LnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0K
IAotRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSkKK0RvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtl
cnMobWFya2VyVHlwZSkpCisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsK
LQotICAgIHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUp
OwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAgICAg
ICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlQW5kTWFya2Vycy52YWx1ZSkgewotICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlKCkgIT0gbWFya2VyVHlwZSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBp
ZiAobWFya2VyLmNvbnRhaW5zKHBvaW50KSkKKyAgICB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVk
TWFya2Vyc09mVHlwZSh0eXBlKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9tYXJr
ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJrZXJz
KSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSA9PSB0eXBlICYmIG1hcmtlci5jb250
YWlucyhwb2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZtYXJrZXI7CiAgICAgICAgIH0K
ICAgICB9Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSYgbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK1Zl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpt
YXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQor
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gcmVzdWx0OwotICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIGlmIChtYXJrZXJU
eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KG1hcmtlci50eXBlKCkpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgmbWFya2VyKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmIHJh
bmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQor
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZvckVhY2goY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBGdW5j
dGlvbjxib29sKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImKT4gZnVuY3Rpb24pCiB7Ci0gICAgaWYg
KCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICByZXR1cm4gVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPigpOwotCi0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5k
Q29udGFpbmVyKCk7CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1hcmtlcik7CisgICAg
Zm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlm
IChhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKSkgeworICAgICAgICAgICAgYXV0byBv
ZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7CisgICAgICAgICAgICAgICAgLy8g
TWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0
aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZz
ZXQoKSA+PSBvZmZzZXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBvZmZzZXRSYW5nZS5zdGFydCAm
JiB0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZnVuY3Rpb24obWFya2VyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGZvdW5kTWFya2VyczsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAg
aWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIC8vIEZJWE1FOiBDb25z
aWRlciBtYWtpbmcgZm9yRWFjaCBwdWJsaWMgYW5kIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRo
YXQgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGlzIG9uZS4KKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnM7CisgICAgZm9yRWFjaChyYW5nZSwgdHlwZXMsIFsmXSAoUmVu
ZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIG1hcmtlcnMuYXBwZW5kKCZt
YXJrZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIG1hcmtl
cnM7Cit9CisKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5v
ZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCit7
CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKICAgICAKICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9tYXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMu
ZW5kKCkpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlw
ZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIHR5cGVzKTsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2Vy
VHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBmb3IgKGF1dG8m
IG5vZGUgOiBjb3B5VG9WZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpIHsKLSAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
bV9tYXJrZXJzLmVuZCgpKQotICAgICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0ZXJh
dG9yLCBtYXJrZXJUeXBlcyk7Ci0gICAgfQotCi0gICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2Vy
VHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb3B5VG9W
ZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpCisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdCht
X21hcmtlcnMuZmluZChub2RlKSwgdHlwZXMpOworICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtl
clR5cGVzLnJlbW92ZSh0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjpp
dGVyYXRvciBpdGVyYXRvciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0
eXBlcykKIHsKICAgICBib29sIG5lZWRzUmVwYWludGluZyA9IGZhbHNlOwogICAgIGJvb2wgbGlz
dENhbkJlUmVtb3ZlZDsKIAotICAgIGlmIChtYXJrZXJUeXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6
YWxsTWFya2VycygpKSB7CisgICAgaWYgKHR5cGVzID09IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCkpIHsKICAgICAgICAgbmVlZHNSZXBhaW50aW5nID0gdHJ1ZTsKICAgICAgICAgbGlzdENh
bkJlUmVtb3ZlZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFya2VyTGlzdCogbGlz
dCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgYXV0byBsaXN0ID0gaXRlcmF0b3It
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNp
emUoKTsgKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChp
KTsKIAogICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCi0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50
eXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkp
KSB7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQpAQCAtNjU3LDMxICs1NjQsMjAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG8K
ICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vy
cyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01h
cmtlcnMobWFya2VyVHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1l
bnQKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1fbWFya2VycykgewotICAgICAgICBOb2RlKiBu
b2RlID0gbWFya2VyLmtleS5nZXQoKTsKLQotICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNz
IGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgYm9vbCBub2RlTmVlZHNS
ZXBhaW50ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFy
a2VyLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMoZG9jdW1l
bnRNYXJrZXIudHlwZSgpKSkgewotICAgICAgICAgICAgICAgIG5vZGVOZWVkc1JlcGFpbnQgPSB0
cnVlOworICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICh0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZU1hcmtlcnMua2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAg
ICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlTmVlZHNSZXBhaW50KQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gY2F1c2UgdGhlIG5vZGUgdG8gYmUg
cmVkcmF3bgotICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgIH0KIH0KIApAQCAtNjkxLDE1ICs1
ODcsMTYgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2Rl
JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9t
YXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7
CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGRpZFNoaWZ0TWFy
a2VyID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyAp
IHsKLSAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7
Ci0gICAgICAgIC8vIEZJWE1FOiBIb3cgY2FuIHRoaXMgcG9zc2libHkgYmUgaU9TLXNwZWNpZmlj
IGNvZGU/CisgICAgICAgIGF1dG8mIG1hcmtlciA9IGxpc3QtPmF0KGkpOworCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29uIHRoaXMg
c2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2ludC4KICAg
ICAgICAgaW50IHRhcmdldFN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0
YTsKICAgICAgICAgaW50IHRhcmdldEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKSArIGRl
bHRhOwogICAgICAgICBpZiAodGFyZ2V0U3RhcnRPZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgewpAQCAtNzA3LDE2ICs2MDQsMTUgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKKwogICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gc3RhcnRPZmZz
ZXQpIHsKICAgICAgICAgICAgIEFTU0VSVCgoaW50KW1hcmtlci5zdGFydE9mZnNldCgpICsgZGVs
dGEgPj0gMCk7CiAgICAgICAgICAgICBtYXJrZXIuc2hpZnRPZmZzZXRzKGRlbHRhKTsKICAgICAg
ICAgICAgIGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IEluc2VydGluZyB0ZXh0IGluc2lk
ZSBhIERvY3VtZW50TWFya2VyIGRvZXMgbm90IGdyb3cgdGhlIG1hcmtlci4KLSAgICAgICAgLy8g
U2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1MDQ+LgotICAg
ICAgICB9IGVsc2UgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IHN0YXJ0T2Zmc2V0KSB7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29u
IHRoaXMgc2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2lu
dC4KKyAgICAgICAgZWxzZSBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gc3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YSA8PSBtYXJrZXIuc3Rh
cnRPZmZzZXQoKSkgewogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTcyNSwxNDAgKzYyMSw1OCBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbgogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9CiAj
ZW5kaWYKKwogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7
CiAgICAgICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7Ci0KLSAgICAg
ICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVw
YWludCgpOwotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1h
cmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFy
dENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFp
bmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSBy
YW5nZS5wYXN0TGFzdE5vZGUoKTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0
Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRD
b250YWluZXIgPyByYW5nZS5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5k
T2Zmc2V0ID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIHNldE1hcmtlcnNBY3Rp
dmUoKm5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGJvb2wgYWN0aXZlKQorYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhh
c01hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KCZub2RlKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgZGlkQWN0aXZhdGVNYXJrZXIgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICps
aXN0KSB7Ci0gICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9w
IGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgotICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gU2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQu
Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFydE9mZnNldCB8fCBtYXJrZXIu
dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBtYXJrZXIuc2V0QWN0aXZlTWF0Y2goYWN0aXZlKTsKLSAgICAgICAgZGlk
QWN0aXZhdGVNYXJrZXIgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtl
ciAmJiBub2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgp
OworICAgIGJvb2wgZm91bmRNYXJrZXIgPSBmYWxzZTsKKyAgICBmb3JFYWNoKHJhbmdlLCB0eXBl
cywgWyZdIChSZW5kZXJlZERvY3VtZW50TWFya2VyJikgeworICAgICAgICBmb3VuZE1hcmtlciA9
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIHJldHVybiBmb3VuZE1h
cmtlcjsKIH0KIAotYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFu
Z2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1h
cmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJs
eUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIGZvckVhY2gocmFuZ2UsIHR5cGVzLCBbJl0g
KFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlcikgeworICAgICAgICBtYXJrZXIuY2xlYXJE
YXRhKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0g
ICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUpOwot
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5l
ciAmJiBtYXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5z
dGFydE9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
IChub2RlID09ICZlbmRDb250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRl
c2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQotewotICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2Uu
ZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFz
dE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAg
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUg
PT0gJmVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQo
KSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoIWxpc3QpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciYgbWFya2VyID0g
bGlzdC0+YXQoaSk7Ci0KLSAgICAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9y
ZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAg
ICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25n
IHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAgICAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQo
KSA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hcmtlci5jbGVhckRhdGEoKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKKwogdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKIHsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhhdmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgbWFya2VyIDogbV9tYXJrZXJzKSB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSBtYXJrZXIua2V5LmdldCgpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9k
ZSk7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFya2VyLnZhbHVlKQot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBkb2N1bWVudE1h
cmtlci50eXBlKCksIGRvY3VtZW50TWFya2VyLnN0YXJ0T2Zmc2V0KCksIGRvY3VtZW50TWFya2Vy
LmVuZE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5pc0FjdGl2ZU1hdGNoKCkpOwotCi0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9t
YXJrZXJzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2RlTWFya2Vycy5rZXku
Z2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0iLCBtYXJrZXIudHlwZSgp
LCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICAgICAgZnB1
dGMoJ1xuJywgc3RkZXJyKTsKICAgICB9CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgc2hvd0RvY3VtZW50
TWFya2Vycyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCiB7CiAgICAgaWYgKGNvbnRyb2xsZXIpCiAgICAgICAgIGNvbnRyb2xsZXItPnNob3dNYXJr
ZXJzKCk7CiB9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oCmluZGV4IDYzMDVhYTY2YzE2ZTY5Y2M2NzU2ZGUyODg1OTJiZWNmYzg4MDEx
MTAuLjg2ZWIwZmRjZjZiY2U1MDZkMWYzZmE1M2Y5Zjg2NzRmYzVmZTIzYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyArMyw3IEBA
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKQEAgLTM1LDY1ICszNSw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgTGF5b3V0UG9pbnQ7Ci1jbGFzcyBMYXlvdXRSZWN0OwogY2xhc3Mg
Tm9kZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyZWREb2N1bWVudE1hcmtlcjsKK2NsYXNz
IFRleHQ7CiAKIHN0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLQogICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcihEb2N1bWVudCYpOwogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJr
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Ci0gICAgdm9p
ZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlclRv
Tm9kZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBhY3Rp
dmVNYXRjaCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIGFkZE1hcmtlcihS
YW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5Q
dHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKFJhbmdlJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9u
cyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0jZW5kaWYKLSAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKFJhbmdlJik7CiAKLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVO
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRQbGF0Zm9ybVRleHRD
aGVja2luZ01hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWFy
a2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0
IERvY3VtZW50TWFya2VyOjpEYXRhJiA9IHsgfSk7CisgICAgdm9pZCBhZGRNYXJrZXIoVGV4dCYs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKKyAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICB2b2lkIGNvcHlN
YXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBO
b2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpOwotICAgIGJvb2wgaGFzTWFya2VycygpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4
aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSkpOwotICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIGJv
b2wgaGFzTWFya2VycyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIGNvcHlNYXJrZXJz
KE5vZGUmIHNvdXJjZSwgT2Zmc2V0UmFuZ2UsIE5vZGUmIGRlc3RpbmF0aW9uKTsKKyAgICBib29s
IGhhc01hcmtlcnMoKSBjb25zdDsKKyAgICBib29sIGhhc01hcmtlcnMoY29uc3QgU2ltcGxlUmFu
Z2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJr
ZXI6OmFsbE1hcmtlcnMoKSk7CiAKICAgICAvLyBXaGVuIGEgbWFya2VyIHBhcnRpYWxseSBvdmVy
bGFwcyB3aXRoIHJhbmdlLCBpZiByZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcnMgaXMg
dHJ1ZSwgd2UgY29tcGxldGVseQogICAgIC8vIHJlbW92ZSB0aGUgbWFya2VyLiBJZiB0aGUgYXJn
dW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBzcGFuIG9mIHRoZSBtYXJrZXIgc28g
dGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24gdGhhdCBpcyBvdXRzaWRlIG9mIHRo
ZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qg
eyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyLCBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlciB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2Vy
cyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVu
dE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9y
Tm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgdm9pZCBy
ZW1vdmVNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCksIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBE
b05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT2Zmc2V0
UmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERvY3VtZW50TWFy
a2VyJik+JiBmaWx0ZXJGdW5jdGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IAogICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGZpbHRlckZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUg
bWFya2VyLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsdGVyTWFya2VycyhSYW5nZSYsIHN0
ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bHRlck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0
IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSk7CiAgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7
CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CiAgICAgdm9pZCBzaGlmdE1h
cmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpOwotICAgIHZvaWQg
c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJvb2wpOwotICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2
ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1h
cmtlcnNGb3IoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CisgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUpOwogCkBAIC0xMDgsMTEgKzg5LDE4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwot
ICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVS
YW5nZSYpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBEb2N1bWVudE1hcmtlciYmKTsKKwor
ICAgIHN0cnVjdCBUZXh0UmFuZ2UgeworICAgICAgICBSZWY8Tm9kZT4gbm9kZTsKKyAgICAgICAg
T2Zmc2V0UmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBWZWN0b3I8VGV4dFJhbmdlPiBjb2xsZWN0
VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOworCisgICAgdm9pZCBmb3JFYWNoKGNvbnN0
IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgY29u
c3QgRnVuY3Rpb248Ym9vbChSZW5kZXJlZERvY3VtZW50TWFya2VyJik+KTsKKworICAgIHVzaW5n
IE1hcmtlck1hcCA9IEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+Pj47CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4gTWFya2VyTWFwOwogICAgIGJvb2wg
cG9zc2libHlIYXNNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4p
OwogICAgIHZvaWQgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCkBAIC0xMjIsNiArMTEwLDEy
IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCitpbmxpbmUgYm9v
bCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoKSBjb25zdAoreworICAgIEFT
U0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBl
cy5jb250YWluc0FueShEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CisgICAgcmV0dXJu
ICFtX21hcmtlcnMuaXNFbXB0eSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzlkYmQ1
ZTUzYTNlNjIyMTRhZDhlNDdlODg0Y2I2MDczNTM1ODNmZi4uYjI4MTRiMDBlZmY4ZmFlZjdhNjEx
ZDhiM2Q3YWZlN2UxNWMyOTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM4OSwxNSAr
MTM4OSw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5Sb290Vmlld1NwYWNlKCkKICAgICAg
ICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmFic29sdXRlUXVhZHMocXVhZHMpOwogICAg
IH0KIAotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0KLSAgICBJbnRSZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVzdWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAgcmVz
dWx0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3Qo
dW5pdGVkQm91bmRpbmdCb3hlcyhxdWFkcykpKTsKIH0KIAogc3RhdGljIGJvb2wgbGF5b3V0T3Zl
cmZsb3dSZWN0Q29udGFpbnNBbGxEZXNjZW5kYW50cyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJv
eCkKQEAgLTE0NjQsMTEgKzE0NTYsNyBAQCBMYXlvdXRSZWN0IEVsZW1lbnQ6OmFic29sdXRlRXZl
bnRCb3VuZHMoYm9vbCYgYm91bmRzSW5jbHVkZUFsbERlc2NlbmRhbnRFbGVtZW50cwogICAgICAg
ICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCBsb2NhbFJlY3QoMCwgMCwgYm94LndpZHRoKCksIGJveC5oZWlnaHQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZyYWdtZW50ZWRGbG93LT5hYnNvbHV0ZVF1YWRzRm9yQm94KHF1YWRzLCAm
d2FzRml4ZWQsICZib3gsIGxvY2FsUmVjdC55KCksIGxvY2FsUmVjdC5tYXhZKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBxdWFkQm91bmRzID0gcXVhZHNbMF0uYm91bmRpbmdC
b3goKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRCb3VuZHMudW5pdGUocXVh
ZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHF1YWRCb3VuZHMpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKICAg
ICAgICAgICAgICAgICAgICAgY29tcHV0ZWRCb3VuZHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IGNvbHVtbnMuIEp1c3Qg
cmV0dXJuIHRoZSBib3VuZHMgb2YgdGhlIG11bHRpY29sIGJsb2NrIGZvciBub3cuCkBAIC0xNjAz
LDExICsxNTkxLDcgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPFJlbmRlck9iamVjdCosIEZsb2F0UmVj
dD4+IEVsZW1lbnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG8KICAgICBpZiAocXVhZHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRmxvYXRSZWN0IHJl
c3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHF1YWRzW2ldLmJvdW5k
aW5nQm94KCkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlbmRlcmVyLCByZXN1bHQp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZW5kZXJlciwgdW5pdGVkQm91bmRpbmdCb3hl
cyhxdWFkcykpOwogfQogCiBGbG9hdFJlY3QgRWxlbWVudDo6Ym91bmRpbmdDbGllbnRSZWN0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCmluZGV4IGQyMDhjNzE3OTY5MTcyYWM0MTEzNzgwMjJkNDhjYTg3ZWFjMGVmMzcu
LjllNjBhNDA4Zjk3MzIxYjNiOTc5ZTJmM2Q5Mjk1ZWJhNzU0YjNjNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApA
QCAtMjAzLDcgKzIwMyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIGJvb2wgaXNTdHlsZWRFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0hUTUxGbGFnKSB8fCBnZXRGbGFnKElzU1ZH
RmxhZykgfHwgZ2V0RmxhZyhJc01hdGhNTEZsYWcpOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXR0
cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXND
aGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFpc0NvbnRhaW5lck5vZGUoKSAmJiAo
aXNUZXh0Tm9kZSgpIHx8IHZpcnR1YWxJc0NoYXJhY3RlckRhdGEoKSk7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZU93bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzUGx1Z2luRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCkBAIC0zMTEsMTkgKzMxMSwyMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNFdmVudFRhcmdldERhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhh
c0V2ZW50VGFyZ2V0RGF0YUZsYWcpOyB9CiAgICAgdm9pZCBzZXRIYXNFdmVudFRhcmdldERhdGEo
Ym9vbCBmbGFnKSB7IHNldEZsYWcoZmxhZywgSGFzRXZlbnRUYXJnZXREYXRhRmxhZyk7IH0KIAot
ICAgIGVudW0gVXNlclNlbGVjdEFsbFRyZWF0bWVudCB7Ci0gICAgICAgIFVzZXJTZWxlY3RBbGxE
b2VzTm90QWZmZWN0RWRpdGFiaWxpdHksCi0gICAgICAgIFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05v
bkVkaXRhYmxlCi0gICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRh
YmxlKCk7CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBpbnNwZWN0KCk7CiAKKyAgICBlbnVtIFVzZXJTZWxlY3RBbGxUcmVhdG1l
bnQgeworICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmlsaXR5LAorICAg
ICAgICBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQorICAgIH07CiAgICAgYm9vbCBo
YXNFZGl0YWJsZVN0eWxlKFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJlYXRtZW50ID0gVXNlclNl
bGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
Y29tcHV0ZUVkaXRhYmlsaXR5KHRyZWF0bWVudCwgU2hvdWxkVXBkYXRlU3R5bGU6OkRvTm90VXBk
YXRlKSAhPSBFZGl0YWJpbGl0eTo6UmVhZE9ubHk7CiAgICAgfQorCiAgICAgLy8gRklYTUU6IFJl
cGxhY2UgZXZlcnkgdXNlIG9mIHRoaXMgZnVuY3Rpb24gYnkgaGVscGVycyBpbiBFZGl0aW5nLmgK
ICAgICBib29sIGhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSBjb25zdAogICAgIHsKQEAgLTM0Mywx
MiArMzQ0LDggQEAgcHVibGljOgogICAgIC8vIG9mIGEgRG9jdW1lbnQgbm9kZS4KICAgICBXRUJD
T1JFX0VYUE9SVCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogCi0gICAgLy8gUmV0
dXJucyB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgICAvLyBBIERv
Y3VtZW50IG5vZGUgcmV0dXJucyBpdHNlbGYuCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7Ci0g
ICAgfQorICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5v
ZGUuIEEgZG9jdW1lbnQgbm9kZSByZXR1cm5zIGl0c2VsZi4KKyAgICBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7IH0KIAogICAg
IFRyZWVTY29wZSYgdHJlZVNjb3BlKCkgY29uc3QKICAgICB7CkBAIC0zNjAsMTAgKzM1Nyw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgZG9jdW1lbnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKICAg
ICAvLyBub2RlIHRyZWUsIGZhbHNlIG90aGVyd2lzZSAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cu
b3JnLyNjb25uZWN0ZWQpLgotICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdAotICAgIHsgCi0g
ICAgICAgIHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7Ci0gICAgfQorICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7IH0K
ICAgICBib29sIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lu
U2hhZG93VHJlZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNJblNoYWRvd1RyZWVGbGFnKTsg
fQogICAgIGJvb2wgaXNJblRyZWVTY29wZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoc3RhdGlj
X2Nhc3Q8Tm9kZUZsYWdzPihJc0Nvbm5lY3RlZEZsYWcgfCBJc0luU2hhZG93VHJlZUZsYWcpKTsg
fQpAQCAtMzcxLDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRG9jdW1lbnRUeXBlTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfVFlQRV9OT0RFOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdW5zaWduZWQgY291bnRDaGlsZE5vZGVzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VUb0NoaWxkQXQodW5zaWdu
ZWQpIGNvbnN0OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tTZXRQcmVmaXgoY29uc3Qg
QXRvbVN0cmluZyYgcHJlZml4KTsKQEAgLTQxNSw3ICs0MTAsNiBAQCBwdWJsaWM6CiAgICAgICAg
IERvbmUsCiAgICAgICAgIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrLAogICAgIH07Ci0KICAg
ICBzdHJ1Y3QgSW5zZXJ0aW9uVHlwZSB7CiAgICAgICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVu
dCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CkBA
IC02NDMsNiArNjM3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFBzZXVkb0lkOjpOb25l
OwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlZExh
c3RSZWYoKTsKIAogICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbDsKQEAgLTY3OSw2ICs2
NzUsNyBAQCBwcml2YXRlOgogfTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECisKIGlubGluZSB2b2lk
IGFkb3B0ZWQoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC02ODcsNiArNjg0LDcg
QEAgaW5saW5lIHZvaWQgYWRvcHRlZChOb2RlKiBub2RlKQogICAgIEFTU0VSVCghbm9kZS0+bV9p
blJlbW92ZWRMYXN0UmVmRnVuY3Rpb24pOwogICAgIG5vZGUtPm1fYWRvcHRpb25Jc1JlcXVpcmVk
ID0gZmFsc2U7CiB9CisKICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgTm9kZTo6cmVmKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGJlNGViNjk5NTEw
NDAxODNkYmM0MjA2ZWQwMGQ0OGJkODg0MmYwM2YuLmE3M2M2OWVhZjUwODc4ZGU2Y2MzOWUzNTkz
ZWZlYmU0N2ZkMDExNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE3NywxMSArMTE3Nyw3IEBA
IFZlY3RvcjxGbG9hdFJlY3Q+IFJhbmdlOjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQoTm9k
ZSogbm9kZSwgUmVuZGVyVGV4dCYgcmVuCiAgICAgICAgIHJldHVybiBjbGlwcGVkUmVjdHM7CiAg
ICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gZmxvYXRSZWN0czsKLSAgICBmbG9hdFJlY3Rz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBxdWFkIDogdGV4dFF1YWRzKQotICAgICAgICBmbG9hdFJlY3RzLnVuY2hlY2tlZEFwcGVuZChx
dWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBmbG9hdFJlY3RzOworICAgIHJldHVybiBi
b3VuZGluZ0JveGVzKHRleHRRdWFkcyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5n
ZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PiByZWN0T3B0aW9ucykgY29uc3QKQEAgLTEyMTMsMzMgKzEyMDksNiBAQCB2b2lkIFJhbmdlOjph
YnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCwgUgogICAgICAgICAqaW5GaXhlZCA9IGFsbEZpeGVkID8gRW50aXJlbHlGaXhlZFBv
c2l0aW9uIDogKHNvbWVGaXhlZCA/IFBhcnRpYWxseUZpeGVkUG9zaXRpb24gOiBOb3RGaXhlZFBv
c2l0aW9uKTsKIH0KIAotdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRp
b24qIGluRml4ZWQpIGNvbnN0Ci17Ci0gICAgYm9vbCBhbGxGaXhlZCA9IHRydWU7Ci0gICAgYm9v
bCBzb21lRml4ZWQgPSBmYWxzZTsKLQotICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1
dGVRdWFkcyhxdWFkcywgJmlzRml4ZWQpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUg
PT0gJnN0YXJ0Q29udGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigpID8gbV9lbmQub2Zm
c2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgICAg
ICBxdWFkcy5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5hYnNv
bHV0ZVF1YWRzRm9yUmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgdXNlU2VsZWN0aW9uSGVp
Z2h0LCBmYWxzZSAvKiBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zICovLCAmaXNGaXhlZCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhbGxGaXhlZCAm
PSBpc0ZpeGVkOwotICAgICAgICBzb21lRml4ZWQgfD0gaXNGaXhlZDsKLSAgICB9Ci0KLSAgICBp
ZiAoaW5GaXhlZCkKLSAgICAgICAgKmluRml4ZWQgPSBhbGxGaXhlZCA/IEVudGlyZWx5Rml4ZWRQ
b3NpdGlvbiA6IChzb21lRml4ZWQgPyBQYXJ0aWFsbHlGaXhlZFBvc2l0aW9uIDogTm90Rml4ZWRQ
b3NpdGlvbik7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogc3RhdGljIGJvb2wgaW50
ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcChpbnQgc3RhcnRBLCBpbnQgZW5kQSwgaW50IHN0YXJ0
QiwgaW50IGVuZEIpCiB7CkBAIC0xODMyLDggKzE4MDEsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBS
YW5nZTo6Ym9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSBzcGFjZSwgT3B0aW9uU2V0
PEJvdQogICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVu
dCkKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVU
b0NsaWVudFF1YWRzKGVsZW1lbnRRdWFkcywgcmVuZGVyZXItPnN0eWxlKCkpOwogCi0gICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBxdWFkIDogZWxlbWVudFF1YWRzKQotICAgICAgICAgICAgICAg
ICAgICByZWN0cy5hcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgICAgICBy
ZWN0cyA9IGJvdW5kaW5nQm94ZXMoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5yZW5kZXJlcigpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CmluZGV4IDY5Y2YyYjk3MmVkYThlZjYyM2M3NDRkZTkwMzNjYmE0NmZhM2Q3YjYuLjAyY2ExMzA4
NGM5ODBkMTA4MGFhZjIwOTQwOWEwZmVhZDg5NDIxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMjUs
NyArMTI1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVC
b3VuZGluZ0JveChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+ID0geyB9KSBjb25zdDsK
IAogICAgIC8vIFRyYW5zZm9ybS1mcmllbmRseQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWJz
b2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlLCBSYW5nZUluRml4ZWRQb3NpdGlvbiogPSBudWxscHRyKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJv
dW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
ZW5kZXJlZERvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oCmluZGV4IDg5ZTY0OTNiNzViZGYzMzFmNzJjMjUwYzVkNjQwMzE5M2JiYzM1
YjQuLmVmZWIwNDFkYzQwMTAyYmM1YWVmZGM3ZWVkMTVlNDBhOGEwZjEyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaApAQCAtMzMsOCArMzMsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgOiBwdWJs
aWMgRG9jdW1lbnRNYXJrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKLSAgICAgICAgOiBEb2N1bWVu
dE1hcmtlcihtYXJrZXIpCisgICAgZXhwbGljaXQgUmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1
bWVudE1hcmtlciYmIG1hcmtlcikKKyAgICAgICAgOiBEb2N1bWVudE1hcmtlcihXVEZNb3ZlKG1h
cmtlcikpCiAgICAgewogICAgIH0KIApAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVS
ZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCisgICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNv
bHV0ZVJlY3RzKFZlY3RvcjxGbG9hdFJlY3Q+JiYgcmVjdHMpCiAgICAgewogICAgICAgICBtX2lz
VmFsaWQgPSB0cnVlOwotICAgICAgICBtX3JlY3RzID0gcmVjdHM7CisgICAgICAgIG1fcmVjdHMg
PSBXVEZNb3ZlKHJlY3RzKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0LCAx
PiYgdW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcAppbmRleCA4ZWVhZDA2MWI2MzBkZWRhNTIzNTA5Y2UxM2VlNDY4N2FhMDQ4OWVhLi4wMTBk
ZWY3MTY4Mzk2YTYwZjcwMjU3MDNjOGI0YjFhYzVlNzA2NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5jcHAKQEAgLTU0LDI4ICs1NCw0NSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lt
cGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09
IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKLS8vIEZJWE1FOiBOb2RlOjppc0NoYXJh
Y3RlckRhdGEgc2hvdWxkIHVzZSBhbiBhbGdvcml0aG0gbGlrZSB0aGlzLCBzaW5jZSBJJ20gYXNz
dW1pbmcgaXQncyBmYXN0ZXIgdGhhbiB0aGUgaXNDaGFyYWN0ZXJEYXRhTm9kZSB2aXJ0dWFsIGNh
bGwgaW4gbW9zdCBjYXNlcy4KLXN0YXRpYyBib29sIGZhc3RJc0NoYXJhY3RlckRhdGEoY29uc3Qg
Tm9kZSYgbm9kZSkKK3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gIW5vZGUuaXNDb250YWluZXJO
b2RlKCkgJiYgKG5vZGUuaXNUZXh0Tm9kZSgpIHx8IG5vZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KTsKKyAgICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgpIH07CiB9CiAKLS8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBOb2RlOjpsZW5ndGggc2luY2UgdGhlIERPTSBzcGVjaWZpY2F0aW9uIGNh
bGxzIHRoaXMgYSBub2RlJ3MgbGVuZ3RoLgotc3RhdGljIHVuc2lnbmVkIGxlbmd0aChjb25zdCBO
b2RlJiBub2RlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5v
ZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGZhc3RJc0NoYXJhY3RlckRhdGEobm9kZSkpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPihub2RlKS5sZW5ndGgoKTsKLSAgICByZXR1
cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cyhub2RlKSB9OwogfQogCi1zdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCitSZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbm9kZSwgbGVuZ3RoKG5v
ZGUpIH07CisgICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
bV9yYW5nZS5lbmQuY29udGFpbmVyKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5k
LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGNoaWxkOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwogfQogCi1TaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK1JlZlB0cjxOb2RlPiBJbnRlcnNl
Y3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cyhub2RlKSB9OworICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250
YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAgICAgICByZXR1
cm4gY2hpbGQ7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKK30KKworT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0
YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkK
K3sKKyAgICByZXR1cm4geyAmbm9kZSA9PSByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPyBy
YW5nZS5zdGFydC5vZmZzZXQgOiAwLAorICAgICAgICAmbm9kZSA9PSByYW5nZS5lbmQuY29udGFp
bmVyLnB0cigpID8gcmFuZ2UuZW5kLm9mZnNldCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSB9OworfQorCitJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIEludGVyc2VjdGlu
Z05vZGVJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAg
bV9ub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbV9ub2RlKTsKKyAgICByZXR1cm4gKnRoaXM7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggOTU4MmRmOGMzMzI2Yzg5ODU1
YmI4ZGVhMTE0NjMzNWM0NjcxM2E4MS4uNmNmM2Y5YjFkNmFkOTk2NDIyNGFmZTkzOTY4ODZiZWVm
YzVmMzYyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTU1LDYgKzU1LDYxIEBAIFdF
QkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhO
b2RlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBs
ZVJhbmdlJik7CiAKK2NsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZTsKK0ludGVyc2VjdGluZ05v
ZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYpOworCitzdHJ1Y3Qg
T2Zmc2V0UmFuZ2UgeworICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIGVu
ZCB7IDAgfTsKK307CitPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKK2NsYXNzIEludGVyc2VjdGluZ05vZGVJdGVy
YXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIE5v
ZGU+IHsKK3B1YmxpYzoKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+
JiYpOworCisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0
dXJuICptX25vZGU7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9u
b2RlKTsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IW1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25vZGUgPT0gb3RoZXIubV9ub2RlOyB9CisK
KyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworfTsKKworY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlIHsKK3B1YmxpYzoKKyAgICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKKworICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGZpcnN0KCk7IH0KKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gc2VudGluZWwoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBmaXJz
dCgpIGNvbnN0OworICAgIFJlZlB0cjxOb2RlPiBzZW50aW5lbCgpIGNvbnN0OworCisgICAgY29u
c3QgU2ltcGxlUmFuZ2UmIG1fcmFuZ2U7Cit9OworCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYgbm9kZSkKKyAg
ICA6IG1fbm9kZShXVEZNb3ZlKG5vZGUpKQoreworfQorCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9k
ZVJhbmdlOjpJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQor
ICAgIDogbV9yYW5nZShyYW5nZSkKK3sKK30KKworaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5n
ZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0
dXJuIHsgcmFuZ2UgfTsKK30KKwogaW5saW5lIFNpbXBsZVJhbmdlOjpTaW1wbGVSYW5nZShjb25z
dCBSZWY8UmFuZ2U+JiByYW5nZSkKICAgICA6IFNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggZjExMjhiOTI0N2U4OGJkOWIxMjA1MDE2MWIzNmVjNWE5YmVmZTI2Yi4uM2Y0
ZmNiM2FhNjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0xNTQs
NyArMTU0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFy
a2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkKIAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCkKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RG
b3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOworICAgIGF1dG8gYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZSk7CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJh
bmdlVG9SZXBsYWNlKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1faXNB
Y3RpdmUgPSB0cnVlOwogICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dCgqbV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RW
aWV3UmVjdEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBh
dXRvIGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KCkpCiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZl
KG1fdHlwZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCByZXBsYWNlbWVudFN0cmluZywg
eyB9KTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnRpbWVyRmlyZWQoKQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25z
LmZpcnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9pc0Fj
dGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBhdXRvIGJv
dW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
CiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZlKG1fdHlw
ZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9u
cyk7CkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKCkKICAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IFdURjo6Z2V0
PEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4obV9kZXRhaWxzKTsKICAgICAgICAgaWYgKCFk
aWN0YXRpb25Db250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZl
LmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAg
LTMzOCwxNyArMzM4LDEyIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKICAgICByZXR1cm4gZWRpdG9yQ2xpZW50
KCkgJiYgZWRpdG9yQ2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZCgpOwogfQogCi1GbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
KyAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwot
ICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBi
b3VuZGluZ1JlY3Q7Ci0gICAgZm9yIChhdXRvJiB0ZXh0UXVhZCA6IHRleHRRdWFkcykKLSAgICAg
ICAgYm91bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVy
biB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRl
ZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsK
IH0gICAgICAgIAogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpAQCAt
NTQyLDggKzUzNyw2IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
TWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVz
OiB7Ci0gICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGF1dG8mIG1hcmtlckRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSk7CiAgICAgICAgIGlmIChjdXJyZW50V29yZCAhPSBt
YXJrZXJEYXRhLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYz
OCw3ICs2MzEsNiBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3Rh
dGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlcikKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRl
cm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5k
YXRhKCkpLmNvbnRleHQpOwogI2Vsc2UKQEAgLTY0OSw3ICs2NDEsNiBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihj
b25zdCBEb2N1bQogVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIp
CiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKG1hcmtlci50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgaWYg
KGF1dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICByZXR1cm4g
Y2xpZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOwogICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOwpAQCAtNjYyLDE1ICs2NTMsMTIgQEAgVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IEQK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2
ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nKQogewogI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQotICAgIEVkaXRvciYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7CisgICAg
YXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGVk
aXRvci5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91
bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciYgbWFya2VycyA9IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGRpY3Rh
dGlvbkFsdGVybmF0aXZlc01hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rp
b24sIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwotICAgIGZvciAoYXV0
byogbWFya2VyIDogZGljdGF0aW9uQWx0ZXJuYXRpdmVzTWFya2VycykKKyAgICBmb3IgKGF1dG8q
IG1hcmtlciA6IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0
ZXJuYXRpdmVzKSkKICAgICAgICAgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KCptYXJrZXIpOwotCiAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpzZWxlY3Rpb24s
IGFsdGVybmF0aXZlU3RyaW5nLCBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGFsdGVybmF0aXZlU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTgxZDI3MDky
MDdiNmYzOTRkYjIxY2IxZmRhNTY2OWVhODBhOTc0OC4uOTQ3NzRhNzZiMjA3ZWU4NzEwMWQ4M2Ey
M2JkOTNjZmRmNmRlNjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAg
IEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCk7CiAgICAgCiAgICAgVGV4dENoZWNrZXJDbGll
bnQqIHRleHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFJhbmdlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwogCiAg
ICAgVGltZXIgbV90aW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggNjNiZTkxZTkwNGM4OTM1ZGZmOTU2MTRjODcwYzkyNGFmMzRk
YmE3OS4uNGJmZDkyNDA1ZTQ2YjY0N2NkN2YwMTk1MzQ5MTk3ZDAyM2I5ODk5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc2OSwz
MiArNzY5LDEyIEBAIHN0YXRpYyBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1h
cmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNCiAKIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFRleHQpCiB7Ci0gICAgUmVmPFRleHQ+IHByb3RlY3RlZE5vZGUobm9kZSk7Ci0gICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJz
KCk7Ci0gICAgYXV0byBtYXJrZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJr
ZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2Rl
LCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKKyAgICBh
dXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG9mZnNldCB9LCB7IG5vZGUsIG9mZnNl
dCArIGNvdW50IH0gfTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2Vycyhkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSkpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwgY291bnQsIHJlcGxh
Y2VtZW50VGV4dCk7Ci0gICAgYXV0byBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQo
KSwgJm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgo
KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJzKSB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKG1hcmtlci5pc0RpY3RhdGlvbigpKSB7Ci0gICAg
ICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUo
KSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1l
dGFkYXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lm
IEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLSAgICAgICAgaWYgKG1hcmtl
ci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKSB7Ci0gICAg
ICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRm
b3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLmRhdGEoKSkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERv
Y3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpOwot
ICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtl
cihuZXdSYW5nZSwgdGV4dENoZWNraW5nRGF0YS5rZXksIHRleHRDaGVja2luZ0RhdGEudmFsdWUp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRl
c2NyaXB0aW9uKCkpOwotICAgIH0KKyAgICByYW5nZS5lbmQub2Zmc2V0ID0gcmFuZ2Uuc3RhcnQu
b2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpOworICAgIGZvciAoYXV0byYgbWFya2Vy
IDogbWFya2VycykKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdl
LCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGF0YSgpKTsKIH0KIAogUG9zaXRpb24gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKaW5kZXgg
YWRmNzQ0ZmM1YzMxMWZjZjY1YzZmZDdhMzUxZWY2MzAwMDgxYjk3MS4uODRjMmFkZTFhOTQ5N2Y4
YjY2YTNjMTE2MzZkMTY0MGU1MjlkYWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0YXRpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rp
Y3RhdGlvbkNvbW1hbmQuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byYgbWFya2VyQ29udHJvbGxlciA9IHRleHROb2RlLmRvY3VtZW50KCkubWFya2VycygpOwogICAg
ICAgICBmb3IgKGF1dG8mIGFsdGVybmF0aXZlIDogbV9hbHRlcm5hdGl2ZXMpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhIGRhdGEgeyBhbHRlcm5hdGl2ZS5kaWN0
YXRpb25Db250ZXh0LCB0ZXh0VG9CZUluc2VydGVkLnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5n
ZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCkgfTsKLSAgICAgICAgICAgIG1hcmtlckNv
bnRyb2xsZXIuYWRkTWFya2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0
ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAg
IG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5y
YW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLmFkZE1hcmtlcih0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCAr
IG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShkYXRhKSk7CisgICAgICAgICAgICBt
YXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcih0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFy
dCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBlODE4ZDEyYjIzOTEyMGExYWEyYmZmNWUwYWNi
NzlhNmQyMGQ5ZDAxLi5iMmYyODZjMGI2ZWMxZjQ2Njk3MDhjNjIxOGRhNGJmMmNhMzVjNDcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExMjQsMTkgKzExMjQsMTggQEAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRv
cihOb2RlJiBub2RlLCBpbnQgaW4KICAgICBpZiAoaW5kZXggPD0gMCkKICAgICAgICAgcmV0dXJu
IHsgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKCZub2RlKSwgRE9XTlNUUkVBTSB9OwogCi0g
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKLSAgICByYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOwotICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKG5vZGUpOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlKTsKICAgICBpdC5hZHZh
bmNlKGluZGV4IC0gMSk7CiAKICAgICBpZiAoIWl0LmF0RW5kKCkgJiYgaXQudGV4dCgpLmxlbmd0
aCgpID09IDEgJiYgaXQudGV4dCgpWzBdID09ICdcbicpIHsKICAgICAgICAgLy8gRklYTUU6IHdv
cmthcm91bmQgZm9yIGNvbGxhcHNlZCByYW5nZSAod2hlcmUgb25seSBzdGFydCBwb3NpdGlvbiBp
cyBjb3JyZWN0KSBlbWl0dGVkIGZvciBzb21lIGVtaXR0ZWQgbmV3bGluZXMuCiAgICAgICAgIGl0
LmFkdmFuY2UoMSk7CiAgICAgICAgIGlmICghaXQuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGl0LnJhbmdlKCku
c3RhcnQpKTsKKyAgICAgICAgICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihpdC5yYW5nZSgpLnN0YXJ0KSB9OwogICAgIH0KIAotICAgIHJldHVybiB7IGl0LmF0RW5kKCkg
PyByYW5nZS0+ZW5kUG9zaXRpb24oKSA6IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5y
YW5nZSgpLmVuZCksIFVQU1RSRUFNIH07CisgICAgcmV0dXJuIHsgY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKChpdC5hdEVuZCgpID8gcmFuZ2UgOiBpdC5yYW5nZSgpKS5lbmQpLCBVUFNUUkVB
TSB9OwogfQogCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUgdmlzaWJs
eSBuZXh0IHRvIGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IGE0ZTA2MDIzOTVlMjc5Nzk5YmYzODkyMzJiM2VkNjgyYjdlZTRmYTQu
LmY4YzkzMzgyNjhlZGZlMzQ5ZGJlY2RjMDNiMWZhN2IxOGM0MWU4ODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKQEAgLTMwNzYsOCArMzA3Niw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rp
b25BCiAgICAgLy8gb2YgbWFya2VyIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgaW4gcXVlc3Rpb24s
IGFuZCByZW1vdmUgbWFya2VyIG9uIHRoYXQgd2hvbGUgcmFuZ2UuCiAgICAgYXV0byB3b3JkUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2
YWxlbnQoKSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1h
cmtlcnNJblJhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKQorICAgIGZvciAoYXV0byog
bWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKSkKICAgICAgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIo
Km1hcmtlcik7CiAKICAgICBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1h
cmtlclR5cGVzVG9SZW1vdmUgewpAQCAtMzYyNiw3ICszNjI1LDcgQEAgdW5zaWduZWQgRWRpdG9y
Ojpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2Us
IEZpbmRPcHQKICAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UocmVz
dWx0UmFuZ2UpKTsKIAogICAgICAgICBpZiAobWFya01hdGNoZXMpCi0gICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSwg
RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIocmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwog
CiAgICAgICAgIC8vIFN0b3AgbG9va2luZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmllZCBsaW1pdC4g
QSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1h
dGNoQ291bnQgPj0gbGltaXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBlMDM3OGFlYjdh
OTJiNTJhYTVkZDljN2I5ZTk1MGExZmUwNGU1ZDczLi5mYmU3MTJhOThkZGQwNjg5ZmNkYWI5YWNj
ODg1OGUxYzIxMjE3NzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTM5OSw4ICszOTks
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtTWFya2VkVGV4dCgp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3Qg
U3RyaW5nJiwgRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dEFsaWdu
bWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWlu
UHRyPGlkPiBtZXRhZGF0YSwgRWxlbWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5z
ZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgaWQgbWV0YWRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGljdGF0aW9u
UGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGlj
dGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEsIEVsZW1lbnQmKTsKICNlbmRpZgogICAgIAogICAg
IGVudW0gY2xhc3MgS2lsbFJpbmdJbnNlcnRpb25Nb2RlIHsgUHJlcGVuZFRleHQsIEFwcGVuZFRl
eHQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMjZm
YTc2MTFiMTkwYWVlYjNkYTdhNmJhOGYzMjgyNTcwMGVmZGFhNC4uNDUxNmU1MDY1MDcyZmY1MWMz
YzkwMWI3ODUyNDUzZmJmYTk3YjM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTIzMjUsMzMgKzIzMjUsMTkgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0
aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNv
bnQKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xl
cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0
UmVjdEhlaWdodCkgY29uc3QKIHsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyb290KQorICAgIGlmICghbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRl
eHRSZWN0czsKLSAgICBnZXRUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMsIHRleHRSZWN0SGVpZ2h0
KTsKLQotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCkt
PnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNp
YmxlUmVjdCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB0ZXh0UmVjdHMpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlz
aWJsZUNvbnRlbnRSZWN0KTsKLSAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKGludGVyc2VjdGlvblJlY3QpOwotICAg
IH0KLX0KLQotdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0VGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0Ci17CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7Ci0gICAgcmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzLCB0ZXh0UmVjdEhl
aWdodCA9PSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKHF1
YWQuYm91bmRpbmdCb3goKSk7CisgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1l
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCk7CisgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0g
VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKKyAgICAgICAgYXV0byBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7
CisgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKKyAgICB9CiB9CiAKIC8vIFNjYW5z
IGxvZ2ljYWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFt
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggMjg1NTkxNzg0
YTlmZTNhMjcxZTg0OGUxMTJjZjA1MjczNDcwNDgwMC4uZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZk
ZmUzMmNhZWQxNjVhMDUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aApAQCAtMjc2LDcgKzI3Niw2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgVGV4dFJlY3Rh
bmdsZUhlaWdodCB7IFRleHRIZWlnaHQsIFNlbGVjdGlvbkhlaWdodCB9OwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRS
ZWN0PiYsIFRleHRSZWN0YW5nbGVIZWlnaHQgPSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rp
b25IZWlnaHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0VGV4dFJlY3Rhbmds
ZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0ID0gVGV4dFJlY3Rhbmds
ZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEhU
TUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5Yjc3NjEwMmY5ZjE1YWM5
NjY4OTkzODA5N2NiMjJlZWEyZmQwYmI5Li43M2Q2MDljYWM5OGUxZTUyODI3YmZjM2E3YTM3ZTJj
ODViMWRmZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpk
b0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92
ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIsIDAsIG1fb2Zmc2V0LCAqbV90ZXh0MSwgMCk7Cisg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0MiwgeyAwLCBtX29mZnNl
dCB9LCAqbV90ZXh0MSk7CiAKICAgICBpbnNlcnRUZXh0MUFuZFRyaW1UZXh0MigpOwogfQpAQCAt
NzgsNyArNzgsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogCiAg
ICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0KTsKIAotICAgIGRvY3VtZW50KCku
bWFya2VycygpLmNvcHlNYXJrZXJzKCptX3RleHQxLCAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpLCBt
X3RleHQyLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycygqbV90ZXh0
MSwgeyAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpIH0sIG1fdGV4dDIpOwogICAgIG1fdGV4dDEtPnJl
bW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW0KaW5kZXggNTU3YmZlY2FlYTAyMzI4NWFlYTA5MGQ0ZjA1NzFkN2RhOGQzM2FiZS4uZjRm
MDZmZmU3MTIyN2UyM2IxYTZlZGI5NWQ4YWQyM2RjNDcwZTg1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtMTA1LDE3ICsxMDUsMTUgQEAg
c3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0
aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIGlmICghbWFpblJlc3VsdCkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIGF1
dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGFjdGlvbkNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIFth
Y3Rpb25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJpZGdlIGlkKW1haW5SZXN1bHQgXV07
CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKIAotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0
UXVhZHMocXVhZHMpOwotICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS52aWV3KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAg
IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRv
dyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpKTsKLQorICAgIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJv
dW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqbWFpblJlc3VsdFJh
bmdlKSkpKTsKICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5nZTsKIAogICAg
IHJldHVybiBhY3Rpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCA1YjQzY2EzM2U5MGZhYTJlNmZlMTg0NWM5
MjM3YjBhOWZlYTc0M2MwLi44YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYxNjAxMjZlNDM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcApAQCAtMzksMTMgKzM5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGlj
dGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9uQ29tbWFuZElPUyhEb2N1bWVudCYgZG9jdW1lbnQs
IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+
IG1ldGFkYXRhKQorRGljdGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9uQ29tbWFuZElPUyhEb2N1
bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2Vz
LCBpZCBtZXRhZGF0YSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50LCBFZGl0
QWN0aW9uOjpEaWN0YXRpb24pCiAgICAgLCBtX2RpY3RhdGlvblBocmFzZXMoV1RGTW92ZShkaWN0
YXRpb25QaHJhc2VzKSkKLSAgICAsIG1fbWV0YWRhdGEoV1RGTW92ZShtZXRhZGF0YSkpCisgICAg
LCBtX21ldGFkYXRhKG1ldGFkYXRhKQogewogfQogCitSZWY8RGljdGF0aW9uQ29tbWFuZElPUz4g
RGljdGF0aW9uQ29tbWFuZElPUzo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERpY3RhdGlvbkNvbW1hbmRJT1MoZG9jdW1lbnQsIFdURk1vdmUo
ZGljdGF0aW9uUGhyYXNlcyksIG1ldGFkYXRhKSk7Cit9CisKIHZvaWQgRGljdGF0aW9uQ29tbWFu
ZElPUzo6ZG9BcHBseSgpCiB7CiAgICAgdWludDY0X3QgcmVzdWx0TGVuZ3RoID0gMDsKQEAgLTU0
LDggKzU5LDExIEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAgICAg
IHJlc3VsdExlbmd0aCArPSBmaXJzdEludGVycHJldGF0aW9uLmxlbmd0aCgpOwogICAgICAgICBp
bnB1dFRleHQoZmlyc3RJbnRlcnByZXRhdGlvbiwgdHJ1ZSk7CiAKLSAgICAgICAgaWYgKGludGVy
cHJldGF0aW9ucy5zaXplKCkgPiAxKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcigqZW5kaW5nU2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgaWYgKGlu
dGVycHJldGF0aW9ucy5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBhdXRvIGFsdGVybmF0aXZl
cyA9IGludGVycHJldGF0aW9uczsKKyAgICAgICAgICAgIGFsdGVybmF0aXZlcy5yZW1vdmUoMCk7
CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmVuZGluZ1NlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzLCBXVEZNb3ZlKGFsdGVybmF0aXZlcykpOworICAgICAgICB9CiAK
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0
aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAgfQpAQCAtNzMsNyArODEsNyBAQCB2b2lkIERpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJl
c3VsdFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cygqcm9vdCksIHsgZW5kT2Zmc2V0IC0gcmVzdWx0TGVuZ3RoLCBlbmRPZmZzZXQgfSk7
Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3Vs
dFJhbmdlLCBtX21ldGFkYXRhKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
cmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIG1fbWV0YWRhdGEp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmgKaW5kZXggZjYzMDA2MDAxMzc1M2U4ZDJlOGEy
MDEzY2ExNzE1NWY2ZDg2YTE0Mi4uZDMzYzE1MWI4ZjIzOTQwOTZlNTMwMWQxNDEwMjA2ZTQwOGRl
MTMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1h
bmRJT1MuaApAQCAtMzAsMjEgKzMwLDE2IEBACiAjaW1wb3J0ICJDb21wb3NpdGVFZGl0Q29tbWFu
ZC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi10eXBlZGVmIHN0cnVjdCBvYmpjX29i
amVjdCAqaWQ7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGljdGF0aW9uQ29tbWFu
ZElPUyA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CitjbGFzcyBEaWN0YXRpb25Db21t
YW5kSU9TIGZpbmFsIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERpY3RhdGlvbkNvbW1hbmRJT1M+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8
aWQ+IG1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGljdGF0
aW9uQ29tbWFuZElPUyhkb2N1bWVudCwgV1RGTW92ZShkaWN0YXRpb25QaHJhc2VzKSwgV1RGTW92
ZShtZXRhZGF0YSkpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxEaWN0YXRpb25Db21tYW5kSU9T
PiBjcmVhdGUoRG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgaWQgbWV0YWRhdGEpOwogCiBwcml2YXRlOgotICAgIERpY3RhdGlvbkNvbW1hbmRJT1Mo
RG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0
YWluUHRyPGlkPiBtZXRhZGF0YSk7CisgICAgRGljdGF0aW9uQ29tbWFuZElPUyhEb2N1bWVudCYs
IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSk7
CiAKLSAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvQXBwbHkoKSBmaW5h
bDsKIAogICAgIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4gbV9kaWN0YXRpb25QaHJhc2VzOwogICAg
IFJldGFpblB0cjxpZD4gbV9tZXRhZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbQppbmRleCA0MTI2ZWQxNTdmZGIxMWEzNGJjZTBkMTc1OTczZDU1NmZhZjJmZDU2Li5m
MmEyZDUyYWM1YWJmNGU0ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPgogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51
bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFp
bEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIAotdm9pZCBFZGl0b3I6Omluc2VydERpY3Rh
dGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJl
dGFpblB0cjxpZD4gbWV0YWRhdGEpCit2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNl
cyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEp
CiB7CiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0OSwxMCArMjQ5LDEwIEBAIHZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJh
c2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSCiAgICAgaWYg
KGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEaWN0
YXRpb25Db21tYW5kSU9TOjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShkaWN0YXRpb25QaHJh
c2VzKSwgV1RGTW92ZShtZXRhZGF0YSkpLT5hcHBseSgpOworICAgIERpY3RhdGlvbkNvbW1hbmRJ
T1M6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGRpY3RhdGlvblBocmFzZXMpLCBtZXRhZGF0
YSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGls
ZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25QaHJhc2Vz
LCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhLCBFbGVtZW50JiBlbGVtZW50KQordm9pZCBFZGl0b3I6
OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8
U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhLCBFbGVtZW50JiBlbGVtZW50
KQogewogICAgIC8vIENsZWFyIHRoZSBjb21wb3NpdGlvbi4KICAgICBjbGVhcigpOwpAQCAtMjkz
LDIwICsyOTMsMTkgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZF
bGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmVsZW1lbnQuZmly
c3RDaGlsZCgpKTsKLSAgICBpbnQgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCA9IDA7Cisg
ICAgYXV0byYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqZWxlbWVudC5maXJzdENoaWxkKCkp
OworICAgIHVuc2lnbmVkIHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSAwOwogICAgIGZv
ciAoYXV0byYgaW50ZXJwcmV0YXRpb25zIDogZGljdGF0aW9uUGhyYXNlcykgewotICAgICAgICBp
bnQgZGljdGF0aW9uUGhyYXNlTGVuZ3RoID0gaW50ZXJwcmV0YXRpb25zWzBdLmxlbmd0aCgpOwot
ICAgICAgICBpbnQgZGljdGF0aW9uUGhyYXNlRW5kID0gcHJldmlvdXNEaWN0YXRpb25QaHJhc2VT
dGFydCArIGRpY3RhdGlvblBocmFzZUxlbmd0aDsKKyAgICAgICAgYXV0byBkaWN0YXRpb25QaHJh
c2VMZW5ndGggPSBpbnRlcnByZXRhdGlvbnNbMF0ubGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnRl
cnByZXRhdGlvbnMuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgYXV0byBkaWN0YXRpb25QaHJh
c2VSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJnRleHROb2RlLCBwcmV2aW91c0Rp
Y3RhdGlvblBocmFzZVN0YXJ0LCAmdGV4dE5vZGUsIGRpY3RhdGlvblBocmFzZUVuZCk7Ci0gICAg
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKGRpY3RhdGlvblBocmFzZVJhbmdlLCBpbnRlcnByZXRhdGlvbnMpOworICAg
ICAgICAgICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7CisgICAgICAgICAg
ICBhbHRlcm5hdGl2ZXMucmVtb3ZlKDApOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKHRleHROb2RlLCBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0LCBkaWN0
YXRpb25QaHJhc2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzLCBXVEZNb3ZlKGFsdGVybmF0aXZlcykpOwogICAgICAgICB9Ci0gICAgICAgIHBy
ZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSBkaWN0YXRpb25QaHJhc2VFbmQ7CisgICAgICAg
IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgKz0gZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwog
ICAgIH0KIAotICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
ICZ0ZXh0Tm9kZSwgMCwgJnRleHROb2RlLCB0ZXh0Tm9kZS5sZW5ndGgoKSk7Ci0gICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJhbmdlLCBtZXRh
ZGF0YSk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHRleHROb2RlLCAwLCB0
ZXh0Tm9kZS5sZW5ndGgoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgcmV0YWlu
UHRyKG1ldGFkYXRhKSk7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYzY4ZjVkMzhjNmU1MWUwNDg4
ODcwOTRjNTdlYmZmMDdhYWYwMWNlYi4uMDE3NzZmY2QwMTRlMmQ4YzRhN2Y3YWM3ZDUxMTNjYWNi
NGUzNTdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDI3OSw5ICs0Mjc5LDcg
QEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bV9ub2RlVG9EcmF3ID8gbV9ub2RlVG9EcmF3LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKICAgICBS
ZW5kZXJMYXllciogcm9vdExheWVyID0gcmVuZGVyVmlldy0+bGF5ZXIoKTsKIAotI2lmbmRlZiBO
REVCVUcKLSAgICBSZW5kZXJFbGVtZW50OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBm
b3JiaWRTZXROZWVkc0xheW91dCgmcm9vdExheWVyLT5yZW5kZXJlcigpKTsKLSNlbmRpZgorICAg
IFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVl
ZHNMYXlvdXQocm9vdExheWVyLT5yZW5kZXJlcigpKTsKIAogICAgIC8vIFRvIHdvcmsgYXJvdW5k
IGh0dHA6Ly93ZWJraXQub3JnL2IvMTM1MTA2LCBlbnN1cmUgdGhhdCB0aGUgcGFpbnQgcm9vdCBp
c24ndCBhbiBpbmxpbmUgd2l0aCBjdWxsZWQgbGluZSBib3hlcy4KICAgICAvLyBGSVhNRTogVGhp
cyBjYW4gY2F1c2UgYWRkaXRpb25hbCBjb250ZW50IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzbmFw
c2hvdCwgc28gcmVtb3ZlIHRoaXMgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMDYyODVhNTE4NGU1YTRjMDBhMzFiYTYzMzQyM2RiNWRi
Yzk4ODA5OC4uMGFmZWNhZmQxOWRlMDE0ZTcyM2VlNWRjNWU0ZTIyZDY4NzkxZDE2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTczNiw3ICs3MzYsNyBAQCBOU0FycmF5ICpG
cmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogICAgIHNpemVfdCBp
bnRlcnByZXRhdGlvbnNDb3VudCA9IDE7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtl
cnNJblJvb3QpCi0gICAgICAgIGludGVycHJldGF0aW9uc0NvdW50ICo9IG1hcmtlci0+YWx0ZXJu
YXRpdmVzKCkuc2l6ZSgpICsgMTsKKyAgICAgICAgaW50ZXJwcmV0YXRpb25zQ291bnQgKj0gV1RG
OjpnZXQ8VmVjdG9yPFN0cmluZz4+KG1hcmtlci0+ZGF0YSgpKS5zaXplKCkgKyAxOwogCiAgICAg
VmVjdG9yPFZlY3RvcjxVQ2hhcj4+IGludGVycHJldGF0aW9uczsKICAgICBpbnRlcnByZXRhdGlv
bnMuZ3JvdyhpbnRlcnByZXRhdGlvbnNDb3VudCk7CkBAIC03NDksNiArNzQ5LDggQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByYW5nZU9mUm9vdENvbnRlbnRzLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBw
YXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAg
ICBBU1NFUlQobm9kZSk7CiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS0+
bWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzKSkgeworICAgICAgICAgICAgYXV0byYgYWx0ZXJuYXRpdmVzID0g
V1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KG1hcmtlci0+ZGF0YSgpKTsKKwogICAgICAgICAgICAg
Ly8gRmlyc3QsIGFkZCB0ZXh0IHRoYXQgcHJlY2VkZSB0aGUgbWFya2VyLgogICAgICAgICAgICAg
aWYgKHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uICE9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRp
bmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1h
cmtlci0+c3RhcnRPZmZzZXQoKSkpOwpAQCAtNzYxLDcgKzc2Myw3IEBAIE5TQXJyYXkgKkZyYW1l
OjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAKICAgICAgICAgICAgIGF1
dG8gcmFuZ2VGb3JNYXJrZXIgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpKTsKICAgICAgICAg
ICAgIFN0cmluZyB2aXNpYmxlVGV4dEZvck1hcmtlciA9IHBsYWluVGV4dChyYW5nZUZvck1hcmtl
cik7Ci0gICAgICAgICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFy
a2VyID0gbWFya2VyLT5hbHRlcm5hdGl2ZXMoKS5zaXplKCkgKyAxOworICAgICAgICAgICAgc2l6
ZV90IGludGVycHJldGF0aW9uc0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IGFsdGVybmF0aXZlcy5z
aXplKCkgKyAxOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnByZXRh
dGlvbnNDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRleHQgZm9y
IHRoZSBpdGggaW50ZXJwcmV0YXRpb24uIEl0IHdpbGwgZWl0aGVyIGJlIHRoZSB2aXNpYmxlIHRl
eHQsIG9yIG9uZSBvZiBpdHMKICAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgc3RvcmVk
IGluIHRoZSBtYXJrZXIuCkBAIC03NzAsNyArNzcyLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVy
cHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4T2ZJbnRlcnByZXRhdGlvbkZvckN1cnJlbnRNYXJrZXIpCiAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChpbnRlcnByZXRhdGlvbnNbaV0sIHZpc2libGVUZXh0Rm9yTWFya2VyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlv
bnNbaV0sIG1hcmtlci0+YWx0ZXJuYXRpdmVzKCkuYXQoaSAlIG1hcmtlci0+YWx0ZXJuYXRpdmVz
KCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbnNb
aV0sIGFsdGVybmF0aXZlc1tpICUgYWx0ZXJuYXRpdmVzLnNpemUoKV0pOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBjb21iaW5hdGlvbnNTb0ZhciAqPSBpbnRlcnByZXRhdGlvbnNDb3Vu
dEZvckN1cnJlbnRNYXJrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA5OGY1YzVlYjk4MDE0MDEyZDc5ZTM1ZTBi
YTM2ODY5M2JiYWU0YWFjLi4wMTA0ZmVlMjE3ZGNiZWEwNzcwNTg4Y2NkMDg4YWYzMjFhZTE0MWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KQEAgLTE5MCwxNiArMTkwLDYgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpIaWdobGlnaHQ6OmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24oKQogICAgIGxheWVy
KCkucmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCi1zdGF0aWMgSW50UmVjdCB0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKFJhbmdlJiByYW5nZSkKLXsKLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiB0ZXh0UXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHModGV4dFF1YWRzKTsKLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFk
cykKLSAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHF1YWQuYm91bmRpbmdCb3goKSk7Ci0gICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdSZWN0KTsKLX0KLQogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQogICAg
IDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyKCp0
aGlzLCAmU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0
VGltZXJGaXJlZCkKQEAgLTUwMSwxNyArNDkxLDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKQogICAgIEZyYW1lVmlldyYgbWFp
bkZyYW1lVmlldyA9ICptYWluRnJhbWUoKS52aWV3KCk7CiAKICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogcGhvbmVOdW1iZXJSYW5nZXMpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaG9r
ZSBpZiB0aGUgcmFuZ2Ugd3JhcHMgYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSB2aWV3LgotICAgICAg
ICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNhc2U/Ci0gICAgICAgIEludFJlY3QgcmVj
dCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgbWFrZXMgYSBiaWcgcmVjdCBpZiB0aGUgcmFuZ2UgZXh0ZW5kcyBmcm9tIHRo
ZSBlbmQgb2Ygb25lIGxpbmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LiBIYW5kbGUgdGhhdCBj
YXNlIGJldHRlcj8KKyAgICAgICAgYXV0byByZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRC
b3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOwog
CiAgICAgICAgIC8vIENvbnZlcnQgdG8gdGhlIG1haW4gZG9jdW1lbnQncyBjb29yZGluYXRlIHNw
YWNlLgogICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRl
bnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhl
IHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBh
ZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0Rv
Y3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKICAgICAgICAgLy8g
bm90IGVxdWl2YWxlbnQgdG8gd2hhdCB3ZSBuZWVkIHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50
SW5zZXQgb3IgYSBoZWFkZXIgYmFubmVyLgotICAgICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5n
ZSA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICBhdXRvKiB2aWV3Rm9y
UmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3
Rm9yUmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICByZWN0LnNldExvY2F0
aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRz
VG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOwogCiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBy
ZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRm
b3JtRGF0YUN1ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaAppbmRleCA0YmM2MzM0YWJlMmIzNGM5ZjRhZWIyYTNmZmNiYmZj
NzkxYzBhZGYwLi41MzUzMWM3OGQ4ZmU2NDI3ZjJiNGVkNGZhNzVkOTJiNDU5YTJmMDg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3Vl
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxhdGZvcm1E
YXRhQ3VlVmFsdWUuaApAQCAtMzAsMTAgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgIWRlZmluZWQoX19PQkpDX18p
Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JN
KENPQ09BKQogdXNpbmcgUGxhdGZvcm1OYXRpdmVWYWx1ZSA9IGlkOwogI2Vsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCmluZGV4IGM1Njg3NzY3
Yzk4OTliODY4OTNiM2UxNWM5ZDI1NjM3YWNmYzYzYWMuLjM0ZWQzZThlYjg0NGM2MGEzNGEwOWRm
N2U4YWQ3YWYwZWM0MGQyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcApAQCAtMjI3LDQgKzIyNywyNCBAQCBib29sIEZsb2F0UXVhZDo6aXND
b3VudGVyY2xvY2t3aXNlKCkgY29uc3QKICAgICByZXR1cm4gZGV0ZXJtaW5hbnQobV9wMiAtIG1f
cDEsIG1fcDMgLSBtX3AyKSA8IDA7CiB9CiAKK1ZlY3RvcjxGbG9hdFJlY3Q+IGJvdW5kaW5nQm94
ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IGJveGVzOworICAgIGJveGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocXVhZHMuc2l6ZSgp
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgYm94ZXMudW5j
aGVja2VkQXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIGJveGVzOworfQor
CitGbG9hdFJlY3QgdW5pdGVkQm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMpCit7CisgICAgYXV0byBzaXplID0gcXVhZHMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJlc3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5n
Qm94KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJl
c3VsdC51bml0ZUV2ZW5JZkVtcHR5KHF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKaW5kZXggY2FmOWQ3MjYyYWFkYWU5MmM1NGI0
NjM2MmI1ODVkODk0MWQwNTE4Ni4uMTgwY2NmMTMzNmVmMmFmYTYzZjBmNDNlODZiNDgzMWJmYzlm
ZWFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgK
QEAgLTI2LDE1ICsyNiwxNiBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZsb2F0UXVh
ZF9oCi0jZGVmaW5lIEZsb2F0UXVhZF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhN
RTogU2VlbXMgbGlrZSB0aGlzIHdvdWxkIGJlIGJldHRlciBhcyBhIHN0cnVjdC4KKwogLy8gQSBG
bG9hdFF1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNlbnRpbmcg
dGhlIHJlc3VsdCBvZgogLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5zZm9ybXMu
IFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQogLy8gcG9pbnRzIGFyZSBpbiBjbG9j
a3dpc2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KQEAgLTE2NSwyMiArMTY2LDE1IEBAIGlubGluZSBG
bG9hdFF1YWQmIG9wZXJhdG9yLT0oRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCiAK
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFF1
YWQmIGIpCiB7Ci0gICAgcmV0dXJuIGEucDEoKSA9PSBiLnAxKCkgJiYKLSAgICAgICAgICAgYS5w
MigpID09IGIucDIoKSAmJiAKLSAgICAgICAgICAgYS5wMygpID09IGIucDMoKSAmJgotICAgICAg
ICAgICBhLnA0KCkgPT0gYi5wNCgpOworICAgIHJldHVybiBhLnAxKCkgPT0gYi5wMSgpICYmIGEu
cDIoKSA9PSBiLnAyKCkgJiYgYS5wMygpID09IGIucDMoKSAmJiBhLnA0KCkgPT0gYi5wNCgpOwog
fQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxv
YXRRdWFkJiBiKQogewotICAgIHJldHVybiBhLnAxKCkgIT0gYi5wMSgpIHx8Ci0gICAgICAgICAg
IGEucDIoKSAhPSBiLnAyKCkgfHwgCi0gICAgICAgICAgIGEucDMoKSAhPSBiLnAzKCkgfHwKLSAg
ICAgICAgICAgYS5wNCgpICE9IGIucDQoKTsKKyAgICByZXR1cm4gIShhID09IGIpOwogfQogCi19
ICAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gRmxvYXRRdWFkX2gKK1ZlY3Rv
cjxGbG9hdFJlY3Q+IGJvdW5kaW5nQm94ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mKTsKK1dF
QkNPUkVfRVhQT1JUIEZsb2F0UmVjdCB1bml0ZWRCb3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxG
bG9hdFF1YWQ+Jik7CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAxOWUxYTZiN2ZiYzE5
MTRmNzE2NzM5ZjU3ZjhiNmI2OGRmYTc1NjcwLi5hMzQ1MjQ3NjhmNGIyOGIzMWI2NzdkZTMwYTlm
NzBhNGM3MmExZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCkBAIC01Miw5ICs1Miw2IEBAIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5
OwogT0JKQ19DTEFTUyBOU0Vycm9yOwogT0JKQ19DTEFTUyBOU1VSTENvbm5lY3Rpb247CiBPQkpD
X0NMQVNTIE5TVVJMUmVxdWVzdDsKLSNpZm5kZWYgX19PQkpDX18KLXR5cGVkZWYgc3RydWN0IG9i
amNfb2JqZWN0ICppZDsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4IDNmNjQ4ZTA2MDQwYjUzYWI3OGY2ZWFhZGEw
MjM1NGFmY2Y5OGM0NzAuLmI0Y2E3OWMzNWZkODAwYTc3YzFlNjExNDU0N2JjZTkwOThjMDk4NDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKQEAgLTMwLDE3ICszMCw5IEBACiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKLQogdHlwZWRlZiBzdHJ1
Y3QgX0NGVVJMQXV0aENoYWxsZW5nZSogQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmOwotCiAjZWxzZQot
Ci0jaWZuZGVmIF9fT0JKQ19fCi10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5k
aWYKLQogT0JKQ19DTEFTUyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNiArNDEsNyBAQCBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSA6IHB1YmxpYyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UgewogcHVi
bGljOgogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkge30KICAgICBXRUJDT1JFX0VYUE9S
VCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBjb25zdCBD
cmVkZW50aWFsJiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVyZUNv
dW50LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworCiAj
aWYgVVNFKENGVVJMQ09OTkVDVElPTikKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDRlVS
TEF1dGhDaGFsbGVuZ2VSZWYsIEF1dGhlbnRpY2F0aW9uQ2xpZW50Kik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA4YTAyYmU0ZWJlN2VlOTBjZGVh
MjQwZGZiZjE4ZWUzNWU4NzIyNzY2Li5jMTRiMGZjN2JkZDc5YmM4OGVlZjExZWJhNWQ0YjZmNWIx
NDQ1N2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBA
IC04NjMsNyArODYzLDcgQEAgYXV0byBJbmxpbmVUZXh0Qm94OjpyZXNvbHZlU3R5bGVGb3JNYXJr
ZWRUZXh0KGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnMKICNpZiBQTEFURk9STShN
QUMpCiAgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9yID0gcmVuZGVyZXIoKS50aGVt
ZSgpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQXBwbGVTeXN0ZW1MYWJlbCwgc3R5bGVDb2xvck9wdGlv
bnMpOwogI2VuZGlmCi0gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IG1hcmtlZFRleHQu
bWFya2VyLT5pc0FjdGl2ZU1hdGNoKCkgPyByZW5kZXJlcigpLnRoZW1lKCkuYWN0aXZlVGV4dFNl
YXJjaEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKSA6IHJlbmRlcmVyKCkudGhlbWUo
KS5pbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7Cisg
ICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS50ZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlvbnMpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA0MGJh
MWFlMjE3NjAyNTgyNDc4ZjI2NTA3OGFhZGYyMzU5N2E3NTA5Li40ZjM3OGQ3MzVmOGZiMmFkNmNm
OTg2ZjZlMmFkOTk2MmE4YWJkZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtMTAzNywyNCArMTAzNywxOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUludHJp
bnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdQogTGF5
b3V0VW5pdCBSZW5kZXJCb3g6Om1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKSB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29w
ZShjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpKTsKLSNlbmRpZgotICAgICAgICBjb25zdF9j
YXN0PFJlbmRlckJveCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwor
ICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29w
ZSgqdGhpcyk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpLmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgfQotICAgICAgICAKICAgICByZXR1cm4gbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQm94OjptYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoY29uc3RfY2FzdDxSZW5kZXJCb3gq
Pih0aGlzKSk7Ci0jZW5kaWYKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKS5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
OwogICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXgg
ZDNlYjQ2M2FjYjhiZGJlN2ZiNWQwZjcxZGZlZjg4NjQ3YjU3ZTlmZi4uZWFkOWQ3NjQwY2U0NjRk
NjI5ODdiNWJhNzdlMjkwMDVlMzM2ZjU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb3VudGVyLmNwcApAQCAtNDM2LDE0ICs0MzYsMTIgQEAgdm9pZCBSZW5kZXJDb3VudGVy
Ojp1cGRhdGVDb3VudGVyKCkKIAogdm9pZCBSZW5kZXJDb3VudGVyOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQogewotI2lmbmRlZiBOREVCVUcKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGJlIG1vZGlmeWluZyB0aGUgdHJlZSBpbiBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocy4KICAgICAvLyBJbnN0ZWFkLCB3ZSBzaG91bGQgcHJvcGVybHkgaG9vayB0
aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBpbiB0aGUgRE9NIGFuZCBtb2RpZnkKICAgICAvLyB0aGUg
cmVuZGVyIHRyZWUgdGhlbi4gV2hlbiB0aGF0J3MgZG9uZSwgd2UgYWxzbyB3b24ndCBuZWVkIHRv
IG92ZXJyaWRlCiAgICAgLy8gY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMgYXQgYWxsLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ4MjkKLSAg
ICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSh0aGlz
LCBmYWxzZSk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlv
dXRGb3JiaWRkZW5TY29wZSgqdGhpcywgZmFsc2UpOwogCiAgICAgc2V0UmVuZGVyZWRUZXh0KG9y
aWdpbmFsVGV4dCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAppbmRleCAwODFkNGM3NjQwM2E4ZWJiZTAwNzlkYTIxMjUzY2EyZmUwYmFj
YmQyLi40YmJlM2UwOTZmYTIyMzNjYmZlNmFjMzA2YmZhMWY3YjFiMDMzYmVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjg5MCw5
ICsyODkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICBpZiAoZXZlbnRSZWdpb25D
b250ZXh0KQogICAgICAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRMYXllckNv
bGxlY3RpbmdFdmVudFJlZ2lvbik7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgUmVuZGVyRWxlbWVu
dDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVlZHNMYXlvdXQoJnJl
bmRlcmVyKCkpOwotI2VuZGlmCisgICAgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3Ji
aWRkZW5TY29wZSBmb3JiaWRTZXROZWVkc0xheW91dChyZW5kZXJlcigpKTsKIAogICAgIGF1dG8g
cGFpbnRPbmVMYXllciA9IFsmXShSZW5kZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MpIHsKICAgICAgICAgRnJhbWVWaWV3OjpQ
YWludGluZ1N0YXRlIHBhaW50aW5nU3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IGQ1NjAyODc1MjZkMWI3ZGI1YjliNDk2MmUxNTZiYjA2ZDU4MzZl
MTkuLjBlM2Y2YTI0NTM5YTU3Y2QxMDE0MTNlMDY0YTFjMzhmMDc0NjRkYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0zLDcgKzMsNyBAQAogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICoKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvZ2ljYWxTZWxl
Y3Rpb25PZmZzZXRDYWNoZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJD
aGlsZEl0ZXJhdG9yLmgiCkBAIC04NSwxOSArODYsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck9iamVjdCk7CiAKLSNp
Zm5kZWYgTkRFQlVHCisjaWYgQVNTRVJUX0VOQUJMRUQKIAotUmVuZGVyT2JqZWN0OjpTZXRMYXlv
dXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGJvb2wgaXNGb3JiaWRkZW4pCitSZW5kZXJPYmplY3Q6
OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5T
Y29wZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgYm9vbCBpc0ZvcmJpZGRlbikK
ICAgICA6IG1fcmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCkKLSAgICAsIG1fcHJlZXhpc3RpbmdG
b3JiaWRkZW4obV9yZW5kZXJPYmplY3QtPmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSkKKyAg
ICAsIG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4obV9yZW5kZXJPYmplY3QuaXNTZXROZWVkc0xheW91
dEZvcmJpZGRlbigpKQogewotICAgIG1fcmVuZGVyT2JqZWN0LT5zZXROZWVkc0xheW91dElzRm9y
YmlkZGVuKGlzRm9yYmlkZGVuKTsKKyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElz
Rm9yYmlkZGVuKGlzRm9yYmlkZGVuKTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCkKIHsKLSAg
ICBtX3JlbmRlck9iamVjdC0+c2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihtX3ByZWV4aXN0aW5n
Rm9yYmlkZGVuKTsKKyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVu
KG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4pOwogfQorCiAjZW5kaWYKIAogc3RydWN0IFNhbWVTaXpl
QXNSZW5kZXJPYmplY3QgewpAQCAtNTIxLDExICs1MjMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
bWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dCBzY2hlZHVsZVJl
bGF5bwogICAgIGJvb2wgaGFzT3V0T2ZGbG93UG9zaXRpb24gPSAhaXNUZXh0KCkgJiYgc3R5bGUo
KS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpOwogCiAgICAgd2hpbGUgKGFuY2VzdG9yKSB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSByZW1vdmUg
dGhlIHNwZWNpYWwgY2FzZXMgZm9yIGNvdW50ZXJzLCBxdW90ZXMgYW5kIG1hdGhtbAotICAgICAg
ICAvLyBjYWxsaW5nIHNldE5lZWRzTGF5b3V0IGR1cmluZyBwcmVmZXJyZWQgd2lkdGggY29tcHV0
YXRpb24uCi0gICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJp
ZGRlblNjb3BlKGFuY2VzdG9yLCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOwotI2VuZGlm
CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgc3BlY2lh
bCBjYXNlcyBmb3IgY291bnRlcnMsIHF1b3RlcyBhbmQgbWF0aG1sIGNhbGxpbmcgc2V0TmVlZHNM
YXlvdXQgZHVyaW5nIHByZWZlcnJlZCB3aWR0aCBjb21wdXRhdGlvbi4KKyAgICAgICAgU2V0TGF5
b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKmFuY2VzdG9yLCBp
c1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOworCiAgICAgICAgIC8vIERvbid0IG1hcmsgdGhl
IG91dGVybW9zdCBvYmplY3Qgb2YgYW4gdW5yb290ZWQgc3VidHJlZS4gVGhhdCBvYmplY3Qgd2ls
bCBiZQogICAgICAgICAvLyBtYXJrZWQgd2hlbiB0aGUgc3VidHJlZSBpcyBhZGRlZCB0byB0aGUg
ZG9jdW1lbnQuCiAgICAgICAgIGF1dG8gY29udGFpbmVyID0gYW5jZXN0b3ItPmNvbnRhaW5lcigp
OwpAQCAtNzEzLDE1ICs3MTMsNyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZAogICAgIGlmICh1
c2VUcmFuc2Zvcm1zKSB7CiAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAg
ICBhYnNvbHV0ZVF1YWRzKHF1YWRzLCB3YXNGaXhlZCk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBx
dWFkcy5zaXplKCk7Ci0gICAgICAgIGlmICghbikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgCi0gICAgICAgIEludFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAg
ICAgICAgICByZXN1bHQudW5pdGUocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVu
aXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIDAgLyogaWdub3JlIHRyYW5zZm9ybXMg
Ki8sIHdhc0ZpeGVkKTsKQEAgLTc1NywyMSArNzQ5LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFi
c29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogRmxvYXRSZWN0
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwotCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0KLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNb
MF0uYm91bmRpbmdCb3goKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUo
KTsgKytpKQotICAgICAgICByZXN1bHQudW5pdGVFdmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGlu
Z0JveCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHVuaXRlZEJvdW5kaW5n
Qm94ZXMoYWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0
OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihMYXlvdXRSZWN0JiByZXN1bHQpCkBAIC0xOTA3LDYg
KzE4ODcsMjEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Omhhc05vbkVtcHR5VmlzaWJsZVJlY3RSZXNw
ZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1ZlY3Rv
cjxGbG9hdFF1YWQ+IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3sKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcyhy
YW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCisgICAgICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+
KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZShyYW5nZSwgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkpOworICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJl
cikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5l
bmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBx
dWFkczsKK30KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIAogdm9pZCBwcmludFJlbmRl
clRyZWVGb3JMaXZlRG9jdW1lbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAppbmRleCAyNjRmMWQxNmViNjkzMTEzNjkxMmMyYWQyNzQxZjc1ZTE1N2YwZGFlLi4wOTky
NGFmZmM3M2EzOGUzNGJmNTMzNjczNjE4NmIzYWI2MmExYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAy
MDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA0
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Myw2ICs3Myw3IEBA
IGNsYXNzIFNlbGVjdGlvblJlY3Q7CiAjZW5kaWYKIAogc3RydWN0IFBhaW50SW5mbzsKK3N0cnVj
dCBTaW1wbGVSYW5nZTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiBjb25zdCBpbnQgY2Fy
ZXRXaWR0aCA9IDI7IC8vIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIFVJ
S2l0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTgwNjAxPi4KQEAgLTE0NywyMCArMTQ4LDEzIEBA
IHB1YmxpYzoKICAgICAvLyBTY3JvbGxpbmcgaXMgYSBSZW5kZXJCb3ggY29uY2VwdCwgaG93ZXZl
ciBzb21lIGNvZGUganVzdCBjYXJlcyBhYm91dCByZWN1cnNpdmVseSBzY3JvbGxpbmcgb3VyIGVu
Y2xvc2luZyBTY3JvbGxhYmxlQXJlYShzKS4KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9s
bFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lk
ZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgLy8gQ29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIGdldHRpbmcgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJv
eCBvZiBhIFJlbmRlck9iamVjdC4KKyAgICAvLyBOZWFyZXN0IGVuY2xvc2luZyBib3guCiAgICAg
V0VCQ09SRV9FWFBPUlQgUmVuZGVyQm94JiBlbmNsb3NpbmdCb3goKSBjb25zdDsKICAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCYgZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAgICBj
b25zdCBSZW5kZXJCb3gqIGVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygp
IGNvbnN0OwogCi0gICAgLy8gRnVuY3Rpb24gdG8gcmV0dXJuIG91ciBlbmNsb3NpbmcgZmxvdyB0
aHJlYWQgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgb25lLiBUaGlzCi0gICAgLy8gZnVuY3Rp
b24gZm9sbG93cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbi4KLSAgICBSZW5kZXJGcmFnbWVu
dGVkRmxvdyogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGZyYWdtZW50ZWRGbG93U3RhdGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBsb2NhdGVFbmNsb3Np
bmdGcmFnbWVudGVkRmxvdygpOwotICAgIH0KKyAgICAvLyBSZXR1cm4gb3VyIGVuY2xvc2luZyBm
bG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuIEZvbGxvd3MgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgY2hhaW4uCisgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGVuY2xvc2lu
Z0ZyYWdtZW50ZWRGbG93KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3Q7CiAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
IHN0eWxlQ29sb3JPcHRpb25zKCkgY29uc3Q7CkBAIC0xNjgsMjAgKzE2MiwxMiBAQCBwdWJsaWM6
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB2b2lkIHNldEhhc0FYT2JqZWN0KGJvb2wgZmxhZykg
eyBtX2hhc0FYT2JqZWN0ID0gZmxhZzsgfQogICAgIGJvb2wgaGFzQVhPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FYT2JqZWN0OyB9CisjZW5kaWYKIAotICAgIC8vIEhlbHBlciBjbGFzcyBm
b3JiaWRkaW5nIGNhbGxzIHRvIHNldE5lZWRzTGF5b3V0KCkgZHVyaW5nIGl0cyBsaWZldGltZS4K
LSAgICBjbGFzcyBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBleHBsaWNpdCBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShSZW5kZXJPYmpl
Y3QqLCBib29sIGlzRm9yYmlkZGVuID0gdHJ1ZSk7Ci0gICAgICAgIH5TZXRMYXlvdXROZWVkZWRG
b3JiaWRkZW5TY29wZSgpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJPYmplY3Q7Ci0gICAgICAgIGJvb2wgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKLSAgICB9
OwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisgICAgLy8gRm9yYmlkIGNhbGxzIHRvIHNldE5l
ZWRzTGF5b3V0KCkgZHVyaW5nIGl0cyBsaWZldGltZS4KKyAgICBjbGFzcyBTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZTsKIAotICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5n
IGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxp
bmUgc3R5bGUgdG8gb3VyIGlubGluZQotICAgIC8vIGNoaWxkcmVuLgorICAgIC8vIE9idGFpbnMg
dGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBj
b250cmlidXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZSBjaGlsZHJlbi4KICAg
ICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogICAgIAogICAg
IC8vIFJlbmRlck9iamVjdCB0cmVlIG1hbmlwdWxhdGlvbgpAQCAtMzg5LDIyICszNzUsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0FzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gaXNSZXBs
YWNlZCgpICYmIChpc0ltYWdlKCkgfHwgaXNWaWRlbygpIHx8IGlzQ2FudmFzKCkpOyB9CiAgICAg
Ym9vbCBpc0Fub255bW91cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzQW5vbnltb3Vz
KCk7IH0KLSAgICBib29sIGlzQW5vbnltb3VzQmxvY2soKSBjb25zdAotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpcyBrZXB0IGluIHN5bmMgd2l0aCBhbm9ueW1vdXMgYmxvY2sgY3Jl
YXRpb24gY29uZGl0aW9ucyBpbgotICAgICAgICAvLyBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnlt
b3VzQmxvY2soKS4gVGhpcyBpbmNsdWRlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMKLSAgICAgICAg
Ly8gUmVuZGVyQmxvY2sgaGF2aW5nIGEgRGlzcGxheVR5cGU6OkJsb2NrIG9yIERpc3BsYXlUeXBl
OjpCb3ggZGlzcGxheS4gT3RoZXIgY2xhc3NlcyBzdWNoIGFzIFJlbmRlclRleHRGcmFnbWVudAot
ICAgICAgICAvLyBhcmUgbm90IFJlbmRlckJsb2NrcyBhbmQgd2lsbCByZXR1cm4gZmFsc2UuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3MDkuIAotICAgICAg
ICByZXR1cm4gaXNBbm9ueW1vdXMoKSAmJiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5
cGU6OkJsb2NrIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpCb3gpICYmIHN0
eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUgJiYgaXNSZW5kZXJCbG9jaygpICYm
ICFpc0xpc3RNYXJrZXIoKSAmJiAhaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpICYmICFpc1JlbmRl
ck11bHRpQ29sdW1uU2V0KCkgJiYgIWlzUmVuZGVyVmlldygpCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgICAgICAgICAgJiYgIWlzUmVuZGVyRnVsbFNjcmVlbigpCi0gICAgICAgICAg
ICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKQotI2VuZGlmCi0jaWYgRU5BQkxF
KE1BVEhNTCkKLSAgICAgICAgICAgICYmICFpc1JlbmRlck1hdGhNTEJsb2NrKCkKLSNlbmRpZgot
ICAgICAgICAgICAgOwotICAgIH0KKyAgICBib29sIGlzQW5vbnltb3VzQmxvY2soKSBjb25zdDsK
IAogICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmZsb2F0
aW5nKCk7IH0KIApAQCAtNDQ2LDE5ICs0MTcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuYm94RGVjb3Jh
dGlvblN0YXRlKCkgIT0gTm9Cb3hEZWNvcmF0aW9uczsgfQogICAgIGJvb2wgYmFja2dyb3VuZElz
S25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAotICAg
IGJvb2wgbmVlZHNMYXlvdXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0Zmll
bGRzLm5lZWRzTGF5b3V0KCkgfHwgbV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgp
IHx8IG1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgfHwgbV9i
aXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpIHx8IG1fYml0ZmllbGRz
Lm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7Ci0gICAgfQotCisgICAgYm9vbCBuZWVk
c0xheW91dCgpIGNvbnN0OwogICAgIGJvb2wgc2VsZk5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1
cm4gbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKTsgfQogICAgIGJvb2wgbmVlZHNQb3NpdGlvbmVk
TW92ZW1lbnRMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCgpOyB9Ci0gICAgYm9vbCBuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExh
eW91dE9ubHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRz
UG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkg
JiYgIW1fYml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgJiYg
IW1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubmVlZHNT
aW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwotICAgIH0KKyAgICBib29sIG5lZWRzUG9zaXRp
b25lZE1vdmVtZW50TGF5b3V0T25seSgpIGNvbnN0OwogCiAgICAgYm9vbCBwb3NDaGlsZE5lZWRz
TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgp
OyB9CiAgICAgYm9vbCBuZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOyB9CkBA
IC01MDgsMTcgKzQ3MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eShib29sLCBNYXJraW5nQmVoYXZpb3IgPSBNYXJrQ29udGFpbmluZ0Jsb2NrQ2hh
aW4pOwogICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRhaW5lclByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KTsKICAgICAKLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpCi0g
ICAgewotICAgICAgICBzZXROZWVkc0xheW91dCgpOwotICAgICAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkodHJ1ZSk7Ci0gICAgfQorICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9zaXRpb25U
eXBlIHBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUKChwb3NpdGlvbiAhPSBQb3NpdGlv
blR5cGU6OkFic29sdXRlICYmIHBvc2l0aW9uICE9IFBvc2l0aW9uVHlwZTo6Rml4ZWQpIHx8IGlz
Qm94KCkpOwotICAgICAgICBtX2JpdGZpZWxkcy5zZXRQb3NpdGlvbmVkU3RhdGUoc3RhdGljX2Nh
c3Q8aW50Pihwb3NpdGlvbikpOwotICAgIH0KKyAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9z
aXRpb25UeXBlKTsKICAgICB2b2lkIGNsZWFyUG9zaXRpb25lZFN0YXRlKCkgeyBtX2JpdGZpZWxk
cy5jbGVhclBvc2l0aW9uZWRTdGF0ZSgpOyB9CiAKICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wg
YiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0RmxvYXRpbmcoYik7IH0KQEAgLTU2Myw3ICs1MTcs
NyBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihp
bnQgb2Zmc2V0LCBFQWZmaW5pdHkpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVW
aXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAotICAgIC8vIHJldHVybnMg
dGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBlbGVtZW50LgorICAg
IC8vIFJldHVybnMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBl
bGVtZW50LgogICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2so
KSBjb25zdDsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93
KCkgY29uc3Q7CiAKQEAgLTU3MiwxMiArNTI2LDkgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVUb0xvY2FsKGNvbnN0IEZsb2F0UG9pbnQmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0g
MCkgY29uc3Q7CiAKICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgotICAgIEZsb2F0UXVhZCBs
b2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgTWFwQ29vcmRpbmF0ZXNG
bGFncyBtb2RlID0gVXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQsIG51bGxw
dHIsIG1vZGUsIHdhc0ZpeGVkKTsKLSAgICB9CisgICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0
ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IFVzZVRyYW5zZm9y
bXMsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikgY29uc3Q7CiAgICAgLy8gQ29udmVydCBhbiBh
YnNvbHV0ZSBxdWFkIHRvIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UXVhZCBhYnNvbHV0
ZVRvTG9jYWxRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSA9
IFVzZVRyYW5zZm9ybXMpIGNvbnN0OworICAgIEZsb2F0UXVhZCBhYnNvbHV0ZVRvTG9jYWxRdWFk
KGNvbnN0IEZsb2F0UXVhZCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zKSBj
b25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIGludG8gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIGNvbnRhaW5lciwgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgogICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0UXVhZCBsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9h
dFF1YWQmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBN
YXBDb29yZGluYXRlc0ZsYWdzID0gVXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxs
cHRyKSBjb25zdDsKQEAgLTU5NiwxNSArNTQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jikg
Y29uc3QgeyB9CiAKLSAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBl
dmVudHVhbGx5CiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdChib29sIHVzZVRyYW5zZm9ybSA9IHRydWUsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikg
Y29uc3Q7CiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGZhbHNlKTsgfQog
CiAgICAgLy8gQnVpbGQgYW4gYXJyYXkgb2YgcXVhZHMgaW4gYWJzb2x1dGUgY29vcmRzIGZvciBs
aW5lIGJveGVzCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mLCBib29sKiAvKndhc0ZpeGVkKi8gPSBudWxscHRyKSBjb25zdCB7IH0KLQogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVUZXh0UXVh
ZHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0Rm9yUmFuZ2UoY29u
c3QgUmFuZ2UqKTsKIAogICAgIC8vIHRoZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRo
aXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290CkBAIC02MjMsOCArNTczLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgQ3Vyc29yRGlyZWN0aXZlIGdldEN1cnNvcihjb25zdCBM
YXlvdXRQb2ludCYsIEN1cnNvciYpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIHRoZSBSZW5kZXJM
YXllck1vZGVsT2JqZWN0IGluIHRoZSBjb250YWluZXIgY2hhaW4gd2hpY2ggaXMgcmVzcG9uc2li
bGUgZm9yIHBhaW50aW5nIHRoaXMgb2JqZWN0LCBvciBudWxscHRyCi0gICAgLy8gaWYgcGFpbnRp
bmcgaXMgcm9vdC1yZWxhdGl2ZS4gVGhpcyBpcyB0aGUgY29udGFpbmVyIHRoYXQgc2hvdWxkIGJl
IHBhc3NlZCB0byB0aGUgJ2ZvclJlcGFpbnQnCi0gICAgLy8gbWV0aG9kcy4KKyAgICAvLyBpZiBw
YWludGluZyBpcyByb290LXJlbGF0aXZlLiBUaGlzIGlzIHRoZSBjb250YWluZXIgdGhhdCBzaG91
bGQgYmUgcGFzc2VkIHRvIHRoZSAnZm9yUmVwYWludCcgZnVuY3Rpb25zLgogICAgIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lckZvclJlcGFpbnQoKSBjb25zdDsKICAgICAvLyBBY3R1
YWxseSBkbyB0aGUgcmVwYWludCBvZiByZWN0IHIgZm9yIHRoaXMgb2JqZWN0IHdoaWNoIGhhcyBi
ZWVuIGNvbXB1dGVkIGluIHRoZSBjb29yZGluYXRlIHNwYWNlCiAgICAgLy8gb2YgcmVwYWludENv
bnRhaW5lci4gSWYgcmVwYWludENvbnRhaW5lciBpcyBudWxscHRyLCByZXBhaW50IHZpYSB0aGUg
dmlldy4KQEAgLTY0MiwxMCArNTkxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUg
cmVjdCB0aGF0IHNob3VsZCBiZSByZXBhaW50ZWQgd2hlbmV2ZXIgdGhpcyBvYmplY3QgY2hhbmdl
cy4gIFRoZSByZWN0IGlzIGluIHRoZSB2aWV3J3MKICAgICAvLyBjb29yZGluYXRlIHNwYWNlLiAg
VGhpcyBtZXRob2QgZGVhbHMgd2l0aCBvdXRsaW5lcyBhbmQgb3ZlcmZsb3cuCi0gICAgTGF5b3V0
UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KG51bGxwdHIpOwotICAgIH0KKyAg
ICBMYXlvdXRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KG51bGxwdHIpOyB9CiAgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBwaXhlbFNuYXBwZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSBj
b25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7
CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0VW5pdCBvdXRs
aW5lV2lkdGgpIGNvbnN0OwpAQCAtNjUzLDEwICs1OTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBH
aXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSBy
ZWN0IHN1aXRhYmxlIGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHZpZXcgY29v
cmRpbmF0ZXMuCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChjb25z
dCBMYXlvdXRSZWN0JiByKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0
Rm9yUmVwYWludChyLCBudWxscHRyKTsKLSAgICB9CisgICAgTGF5b3V0UmVjdCBjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBj
b21wdXRlUmVjdEZvclJlcGFpbnQocmVjdCwgbnVsbHB0cik7IH0KICAgICAvLyBHaXZlbiBhIHJl
Y3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRh
YmxlIGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHRoZSBjb29yZGluYXRlIHNw
YWNlIG9mIHJlcGFpbnRDb250YWluZXIuCiAgICAgTGF5b3V0UmVjdCBjb21wdXRlUmVjdEZvclJl
cGFpbnQoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIpIGNvbnN0OwpAQCAtNjg3LDcgKzYzMCw3IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzTm9uRW1wdHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQYXJl
bnRGcmFtZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KIAogICAgIGJvb2wgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgp
IGNvbnN0IHsgcmV0dXJuIChpc0Zsb2F0aW5nKCkgfHwgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
OyB9CiAKQEAgLTczMSwxNCArNjc0LDkgQEAgcHVibGljOgogCiAgICAgLy8gVmlydHVhbCBmdW5j
dGlvbiBoZWxwZXJzIGZvciB0aGUgZGVwcmVjYXRlZCBGbGV4aWJsZSBCb3ggTGF5b3V0IChkaXNw
bGF5OiAtd2Via2l0LWJveCkuCiAgICAgdmlydHVhbCBib29sIGlzRGVwcmVjYXRlZEZsZXhpYmxl
Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIC8vIFZpcnR1YWwgZnVuY3Rpb24g
aGVscGVyIGZvciB0aGUgbmV3IEZsZXhpYmxlQm94IExheW91dCAoZGlzcGxheTogLXdlYmtpdC1m
bGV4KS4KICAgICB2aXJ0dWFsIGJvb2wgaXNGbGV4aWJsZUJveCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBib29sIGlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0ZsZXhpYmxlQm94KCkgfHwgaXNEZXByZWNhdGVk
RmxleGlibGVCb3goKTsKLSAgICB9CisgICAgYm9vbCBpc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVw
cmVjYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGlzRmxleGlibGVCb3goKSB8fCBpc0RlcHJlY2F0ZWRG
bGV4aWJsZUJveCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTc2OSwxMCArNzA3LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYgLyogYWRkaXRpb25hbE9mZnNldCAqLywgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogLyogcGFpbnRDb250YWluZXIgKi8gPSBudWxscHRyKSB7IH07CiAKLSAg
ICBMYXlvdXRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQobnVsbHB0cik7Ci0gICAgfQorICAgIExh
eW91dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QgeyByZXR1cm4gb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQobnVsbHB0cik7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1v
dmVkRnJvbVRyZWUoKTsKICAgICB2b2lkIHJlc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZU9uUmVtb3Zh
bCgpOwpAQCAtODA1LDE3ICs3NDAsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wg
c2hvdWxkQXBwbHlDb21wb3NpdGVkQ29udGFpbmVyU2Nyb2xsc0ZvclJlcGFpbnQoKTsKIAotICAg
IHN0YXRpYyBWaXNpYmxlUmVjdENvbnRleHQgdmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWludCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gVmlzaWJsZVJlY3RDb250ZXh0KGZhbHNlLCBmYWxzZSwg
eyBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29udGFpbmVyQ2xpcCwgVmlzaWJsZVJl
Y3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzIH0pOwotICAg
IH0KKyAgICBzdGF0aWMgVmlzaWJsZVJlY3RDb250ZXh0IHZpc2libGVSZWN0Q29udGV4dEZvclJl
cGFpbnQoKTsKIAotcHJpdmF0ZToKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgaXNTZXRO
ZWVkc0xheW91dEZvcmJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0TmVlZHNMYXlvdXRGb3Ji
aWRkZW47IH0KLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSB7
IG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4gPSBmbGFnOyB9Ci0jZW5kaWYKKyAgICBib29sIGlz
U2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICB2b2lkIGFk
ZEFic29sdXRlUmVjdEZvckxheWVyKExheW91dFJlY3QmIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICB2b2lkIHNldExheWVyTmVlZHNGdWxsUmVwYWlu
dEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwpAQCAtODMyLDYgKzc2MSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0SGFz
UmFyZURhdGEoYik7IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBzZXROZWVkc0xh
eW91dElzRm9yYmlkZGVuKGJvb2wgZmxhZykgY29uc3QgeyBtX3NldE5lZWRzTGF5b3V0Rm9yYmlk
ZGVuID0gZmxhZzsgfQogICAgIHZvaWQgY2hlY2tCbG9ja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExh
eW91dCgpOwogI2VuZGlmCiAKQEAgLTg0Miw4ICs3NzIsOCBAQCBwcml2YXRlOgogICAgIFJlbmRl
ck9iamVjdCogbV9uZXh0OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzQVhP
YmplY3QgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9zZXROZWVkc0xheW91dEZvcmJpZGRl
biA6IDE7CisgICAgYm9vbCBtX2hhc0FYT2JqZWN0IDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9z
ZXROZWVkc0xheW91dEZvcmJpZGRlbiA6IDE7CiAjZW5kaWYKIAogI2RlZmluZSBBRERfQk9PTEVB
Tl9CSVRGSUVMRChuYW1lLCBOYW1lKSBcCkBAIC05OTAsNiArOTIwLDE3IEBAIHByaXZhdGU6CiAj
dW5kZWYgQUREX0JPT0xFQU5fQklURklFTEQKIH07CiAKK2NsYXNzIFJlbmRlck9iamVjdDo6U2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKGNvbnN0IFJlbmRlck9iamVjdCYsIGJvb2wgaXNGb3Ji
aWRkZW4gPSB0cnVlKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIH5TZXRMYXlvdXROZWVkZWRG
b3JiaWRkZW5TY29wZSgpOworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIG1fcmVu
ZGVyT2JqZWN0OworICAgIGJvb2wgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKKyNlbmRpZgorfTsK
KwogaW5saW5lIEZyYW1lJiBSZW5kZXJPYmplY3Q6OmZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKQEAgLTExMDQsNyArMTA0NSw5NyBAQCBpbmxpbmUgYm9v
bCBSZW5kZXJPYmplY3Q6Om5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXRPbmx5KCkgY29u
c3QKICAgICAgICAgJiYgIW1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbV9i
aXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKIH0KIAotaW5saW5lIHZv
aWQgTm9kZTo6c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVy
V2l0aFN0eWxlRmxhZ3Muc2V0UG9pbnRlcihyZW5kZXJlcik7IH0KK2lubGluZSBSZW5kZXJGcmFn
bWVudGVkRmxvdyogUmVuZGVyT2JqZWN0OjplbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0
Cit7CisgICAgaWYgKGZyYWdtZW50ZWRGbG93U3RhdGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVk
RmxvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gbG9jYXRlRW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0Fu
b255bW91c0Jsb2NrKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUga2Vw
dCBpbiBzeW5jIHdpdGggYW5vbnltb3VzIGJsb2NrIGNyZWF0aW9uIGNvbmRpdGlvbnMgaW4gUmVu
ZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKCkuCisgICAgLy8gRklYTUU6IFRoYXQgc2Vl
bXMgZGlmZmljdWx0LiBDYW4gd2UgY29tZSB1cCB3aXRoIGEgc2ltcGxlciB3YXkgdG8gbWFrZSBi
ZWhhdmlvciBjb3JyZWN0PworICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVsYXRpdmVseSBsb25n
IGZ1bmN0aW9uIGJlbmVmaXQgZnJvbSBiZWluZyBpbmxpbmVkPworICAgIHJldHVybiBpc0Fub255
bW91cygpCisgICAgICAgICYmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qmxv
Y2sgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCkKKyAgICAgICAgJiYg
c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZQorICAgICAgICAmJiBpc1JlbmRl
ckJsb2NrKCkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICYmICFpc1JlbmRl
ckZ1bGxTY3JlZW4oKQorICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIo
KQorI2VuZGlmCisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICAgICAgJiYgIWlzUmVuZGVyTWF0aE1M
QmxvY2soKQorI2VuZGlmCisgICAgICAgICYmICFpc0xpc3RNYXJrZXIoKQorICAgICAgICAmJiAh
aXNSZW5kZXJGcmFnbWVudGVkRmxvdygpCisgICAgICAgICYmICFpc1JlbmRlck11bHRpQ29sdW1u
U2V0KCkKKyAgICAgICAgJiYgIWlzUmVuZGVyVmlldygpOworfQorCitpbmxpbmUgYm9vbCBSZW5k
ZXJPYmplY3Q6Om5lZWRzTGF5b3V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRmaWVsZHMu
bmVlZHNMYXlvdXQoKQorICAgICAgICB8fCBtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRzTGF5
b3V0KCkKKyAgICAgICAgfHwgbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCisgICAg
ICAgIHx8IG1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKQorICAg
ICAgICB8fCBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOworfQor
CitpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Om5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
T25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkKKyAg
ICAgICAgJiYgIW1fYml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQorICAgICAgICAm
JiAhbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCisgICAgICAgICYmICFtX2JpdGZp
ZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Cit9CisKK2lubGluZSB2b2lk
IFJlbmRlck9iamVjdDo6c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCkKK3sKKyAg
ICBzZXROZWVkc0xheW91dCgpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0
cnVlKTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQb3NpdGlvblN0YXRlKFBv
c2l0aW9uVHlwZSBwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoKHBvc2l0aW9uICE9IFBvc2l0aW9u
VHlwZTo6QWJzb2x1dGUgJiYgcG9zaXRpb24gIT0gUG9zaXRpb25UeXBlOjpGaXhlZCkgfHwgaXNC
b3goKSk7CisgICAgbV9iaXRmaWVsZHMuc2V0UG9zaXRpb25lZFN0YXRlKHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb24pKTsKK30KKworaW5saW5lIEZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBNYXBDb29yZGluYXRlc0ZsYWdz
IG1vZGUsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBsb2NhbFRvQ29udGFp
bmVyUXVhZChxdWFkLCBudWxscHRyLCBtb2RlLCB3YXNGaXhlZCk7Cit9CisKK2lubGluZSBhdXRv
IFJlbmRlck9iamVjdDo6dmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWludCgpIC0+IFZpc2libGVS
ZWN0Q29udGV4dAoreworICAgIHJldHVybiB7IGZhbHNlLCBmYWxzZSwgeyBWaXNpYmxlUmVjdENv
bnRleHRPcHRpb246OkFwcGx5Q29udGFpbmVyQ2xpcCwgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9u
OjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzIH0gfTsKK30KKworaW5saW5lIGJvb2wg
UmVuZGVyT2JqZWN0Ojppc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkgY29uc3QKK3sKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIHJldHVybiBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2lmICFBU1NFUlRfRU5BQkxFRAor
CitpbmxpbmUgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgYm9vbCkKK3sK
K30KKworI2VuZGlmCisKK2lubGluZSB2b2lkIE5vZGU6OnNldFJlbmRlcmVyKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCit7CisgICAgbV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnNldFBvaW50ZXIo
cmVuZGVyZXIpOworfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogdm9pZCBwcmludFJl
bmRlclRyZWVGb3JMaXZlRG9jdW1lbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAppbmRleCBhZTA1YTE0MzIxZmNhODZlNzdhYzQ5ZDcxZTc4MGEyZWVi
NzM0NGExLi4wMGI2MWY3ZjAwYzgzYWQ1MzJhYzU3YTJkYmU4MGI2MmJhNDhmMTdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE0MSwxNSArMTQx
LDEwIEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZERyYXdTZWxlY3Rpb25UaW50KCkgY29u
c3QKIAogaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVs
ZW1lbnQoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycywgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vycykgewot
ICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVudERhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtl
cjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJrZXItPmRhdGEoKSk7Ci0gICAgICAgIGlmIChkcmFn
Z2VkQ29udGVudERhdGEudGFyZ2V0Tm9kZSA9PSAmZWxlbWVudCkKKyAgICAgICAgaWYgKFdURjo6
Z2V0PFJlZlB0cjxOb2RlPj4obWFya2VyLT5kYXRhKCkpID09ICZlbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjks
OSArMTY0LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmbmRlZiBOREVCVUcKLSAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBz
Y29wZSh0aGlzKTsKLSNlbmRpZgorICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIHNj
b3BlKCp0aGlzKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZWRHcmFwaGlj
c0NvbnRleHQocGFpbnRJbmZvLmNvbnRleHQoKSwgZmFsc2UpOwogICAgIGlmIChlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYmJjOWQwZjM2
MDUwODdiYjc0OGUyYmEwZTNhZWZiYzE0Yzk2YjQ5Ni4uNTU2OGE3ZTZkZGQ5YTA0MmJkNWVjZmRj
NjhiZWUwN2RkNWQwYThhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKQEAgLTIyMiw5ICsyMjIsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBy
ZXNvbHZlTG9naWNhbEhlaWdodEZvclJvdyhjb25zdCBMZW5ndGgmIHJvd0xvZ2ljYWxIZWlnaHQp
CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCgp
CiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxh
eW91dEZvcmJpZGRlblNjb3BlKHRoaXMpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVkRm9y
YmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOwogCiAgICAgQVNTRVJUKCFu
ZWVkc0xheW91dCgpKTsKIApAQCAtNTM4LDkgKzUzNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpyZWxheW91dENlbGxJZkZsZXhlZChSZW5kZXJUYWJsZUNlbGwmIGNlbGwsIGludCByb3dJ
bmRlCiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKCkKIHsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVu
U2NvcGUodGhpcyk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBs
YXlvdXRGb3JiaWRkZW5TY29wZSgqdGhpcyk7CiAKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBlOWRkMTQ5
NDU4NjRiYTliZDhlODVhNDUwODQ3ZTJlNjI1MmQxNjQ2Li45ODk1YWRiZGM5MjZiYjE4YTdjZGU3
NDhlYWVlMDNiYzYwYWZkZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAKQEAgLTEzNDcsMjggKzEzNDcsMTUgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnN5c3RlbUNv
bG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGkKICAg
ICB9CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lOjphY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CitDb2xvciBS
ZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8mIGNhY2hlID0gY29sb3JDYWNo
ZShvcHRpb25zKTsKLSAgICBpZiAoIWNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIGNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
ciA9IHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKG9wdGlvbnMpOwotICAg
IHJldHVybiBjYWNoZS5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3I7CisgICAgaWYgKCFj
YWNoZS50ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICBjYWNoZS50
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgPSBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cihvcHRpb25zKTsKKyAgICByZXR1cm4gY2FjaGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwog
fQogCi1Db2xvciBSZW5kZXJUaGVtZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgYXV0
byYgY2FjaGUgPSBjb2xvckNhY2hlKG9wdGlvbnMpOwotICAgIGlmICghY2FjaGUuaW5hY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICBjYWNoZS5pbmFjdGl2
ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciA9IHBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3Iob3B0aW9ucyk7Ci0gICAgcmV0dXJuIGNhY2hlLmluYWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1BY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdAotewotICAgIHJldHVybiBDb2xvcigyNTUsIDE1MCwgNTApOyAvLyBPcmFuZ2UuCi19Ci0K
LUNvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRo
ZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8g
WWVsbG93LgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAppbmRleCA0MDE5
ZDRmMmIxOTcxZGY0MmVjNGE3OThjM2Y5MzhiNzQyMzM5ZWY0Li5iMzU1Mzc4YWRlNjliODAwNmFm
NjVlMjRiMmMyMmFhOTViM2MzYjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuaApAQCAtMTU0LDkgKzE1NCw4IEBAIHB1YmxpYzoKICAgICBDb2xvciBpbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdDsKICAgICBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAotICAgIC8vIEhpZ2hs
aWdodGluZyBjb2xvcnMgZm9yIHNlYXJjaCBtYXRjaGVzLgotICAgIENvbG9yIGFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0
OwotICAgIENvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CisgICAgLy8gSGlnaGxpZ2h0aW5nIGNvbG9yIGZv
ciBzZWFyY2ggbWF0Y2hlcy4KKyAgICBDb2xvciB0ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0
aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1YWwgQ29sb3Ig
ZGlzYWJsZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAgLTI3NSw5ICsyNzQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKICAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAKLSAgICAvLyBUaGUgcGxhdGZv
cm0gaGlnaGxpZ2h0aW5nIGNvbG9ycyBmb3Igc2VhcmNoIG1hdGNoZXMuCi0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9u
cz4pIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC00MzMsOCArNDMwLDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yOwogICAgICAgICBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3I7CiAKLSAgICAgICAgQ29sb3IgYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
OwotICAgICAgICBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKKyAgICAg
ICAgQ29sb3IgdGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwogICAgIH07CiAKICAgICB2aXJ0dWFs
IENvbG9yQ2FjaGUmIGNvbG9yQ2FjaGUoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMDdm
MjZlNTExM2Q2ZDk1NGFkNDI3ZjM1ZDQ3ZTM1ZTE1MjQxZDRjOC4uZTA0ODQ1MmM2YzkyN2ZiN2Q2
ZmU3MjRiNjQwZjZjM2JmNzhkNTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmgKQEAgLTYzLDggKzYzLDcgQEAgcHVibGljOgogICAgIENvbG9yIHBsYXRmb3Jt
SW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CiAgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdCBmaW5hbDsKICAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgcGxhdGZv
cm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9w
dGlvbnM+KSBjb25zdCBmaW5hbDsKLSAgICBDb2xvciBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmlu
YWw7CisgICAgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0
PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBmaW5hbDsKIAogICAgIFNjcm9sbGJhckNvbnRy
b2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgZmluYWwgeyBy
ZXR1cm4gU21hbGxTY3JvbGxiYXI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDBlMzcxODg2MjI4YzFiMTZiMjYyZThkNmEwNjI5NDJjYjgyYzU5
YzYuLmNiYTE2MWU3NDk2MDRlNmI0ZGQ2OGYwNDQ1YTAwMWY4ODY0MTlkOWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTQ3MSwxOSArNDcxLDEyIEBA
IENvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpCiAgICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxw
aGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3Jd
KS5yZ2IoKSwgMSk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0
aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QK
IHsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRp
b25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAg
ICAgcmV0dXJuIGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgZmluZEhpZ2hsaWdodENvbG9yXSk7
CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25z
dAotewotICAgIC8vIFRoZSBpbmFjdGl2ZSBjb2xvciBpcyBub3JtYWxseSB1c2VkLCBzaW5jZSBu
byBsZWdhY3kgV2ViS2l0IGNsaWVudCBtYXJrcyBhIHRleHQgbWF0Y2ggYXMgYWN0aXZlLgotICAg
IC8vIFNvIGp1c3QgcmV0dXJuIHRoZSBzYW1lIGNvbG9yIGZvciBib3RoIHN0YXRlcy4KLSAgICBy
ZXR1cm4gcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Iob3B0aW9ucyk7Ci19
Ci0KIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBL
aXRGb250V2VpZ2h0KQogewogICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBL
aXRGb250V2VpZ2h0IDwgMTUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDUxZTdkMWJlOTMyYTE3NzNjNjY1MDBjODYwZGRkNGVjZTEzMWI1MmMuLjAxZDgxYzUwYWIxNDc5
OTk3ODc0M2M3NDVlM2E5Zjg2NTZlYTcwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTE3NTUsMTIgKzE3NTUsNiBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFs
czo6ZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykKICAgICBy
ZXR1cm4gcmVjdFN0cmluZy50b1N0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6YWRkVGV4
dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKLXsKLSAgICBy
YW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJr
ZXIocmFuZ2UsIGlzQWN0aXZlKTsKLX0KLQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpz
ZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCmluZGV4IDc5ZjQyNGMzZDgzYTBkNmUzYWQzMmFkNWFhODRlNmMwNTY5NzJmNTguLmNi
NmUxNDdjZDY2ZmVkZjEyY2ExNWRiYzgyZjVkMTZhYzZkOGE2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaApAQCAtMjU5LDcgKzI1OSw2IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25P
cjxSZWZQdHI8UmFuZ2U+PiBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYg
bWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgpOwogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gbWFy
a2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVu
c2lnbmVkIGluZGV4KTsKICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IGR1bXBNYXJrZXJSZWN0cyhj
b25zdCBTdHJpbmcmIG1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNv
bnN0IFJhbmdlJiwgYm9vbCBpc0FjdGl2ZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIAogICAgIHZvaWQgaW52YWxpZGF0
ZUZvbnRDYWNoZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU1YzU4
ZjYyYjQxYmM5NTc4OWZmMTc0MTkzNWVmNjkwMTcyZjgzOWYuLjIwM2RhODA1MDliOWViNTE3ZjZj
MDJmNWFiNGY1N2NjMWRlNDdjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
QEAgLTI3OCw3ICsyNzgsNiBAQCBlbnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIFJhbmdlPyBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSBub2RlLCBET01TdHJp
bmcgbWFya2VyVHlwZSwgdW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgW01heVRocm93RXhjZXB0
aW9uXSBET01TdHJpbmcgbWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUgbm9kZSwgRE9NU3Ry
aW5nIG1hcmtlclR5cGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gRE9NU3RyaW5nIGR1bXBNYXJrZXJSZWN0cyhET01TdHJpbmcgbWFya2VyVHlwZSk7Ci0g
ICAgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoUmFuZ2UgcmFuZ2UsIGJvb2xlYW4gaXNBY3RpdmUp
OwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkKGJvb2xlYW4gZmxhZyk7CiAKICAgICB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5oCmluZGV4IDIw
MDI0YTU4N2FlM2Q0ZWQxMTExZWZhZmUyOWEwMTQxNWMzOGM1ZTguLmFiMTQ3YmU0YTlhN2FhMzg5
NzhmMzJjMjlmZTFkYzRjMzFmMTRiNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmll
d1NuYXBzaG90U3RvcmUuaApAQCAtMjcsMTMgKzI3LDExIEBACiAKICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBIQVZFKElP
U1VSRkFDRSkKICNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKQEAgLTQx
LDM1ICszOSwxNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaWYgIWRlZmluZWQoX19PQkpDX18pCi10eXBlZGVmIHN0
cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLQotT0JKQ19DTEFTUyBDQUNvbnRleHQ7Ci0K
LSNpZiBIQVZFKElPU1VSRkFDRSkKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElPU3VyZmFj
ZTsKLX0KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBWaWV3
U25hcHNob3RTdG9yZTsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CiAKIGNsYXNzIFZpZXdTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZXdT
bmFwc2hvdD4gewogcHVibGljOgotI2lmIFBMQVRGT1JNKENPQ09BKQogI2lmIEhBVkUoSU9TVVJG
QUNFKQogICAgIHN0YXRpYyBSZWY8Vmlld1NuYXBzaG90PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OklPU3VyZmFjZT4pOwotI2Vsc2UKLSAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hv
dD4gY3JlYXRlKHVpbnQzMl90IHNsb3RJRCwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdl
U2l6ZUluQnl0ZXMpOwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0o
R1RLKQogICAgIHN0YXRpYyBSZWY8Vmlld1NuYXBzaG90PiBjcmVhdGUoUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJik7CiAjZW5kaWYKIApAQCAtNzcsNyArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFySW1hZ2UoKTsKICAgICBib29sIGhhc0ltYWdlKCkgY29uc3Q7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBpZCBhc0xheWVyQ29udGVudHMo
KTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gYXNJbWFnZUZvclRlc3RpbmcoKTsKICNlbmRp
ZgpAQCAtODUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZW5kZXJUcmVlU2l6ZSh1
aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRyZWVTaXplID0gcmVuZGVyVHJlZVNp
emU7IH0KICAgICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyVHJlZVNpemU7IH0KIAotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNv
bG9yIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvcjsgfQogICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKICAgICB2b2lkIHNldFZpZXdTY3Jv
bGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbikgeyBtX3ZpZXdTY3Jv
bGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CkBAIC05NCw3ICs3NSw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSB7
IG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsgfQogICAgIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgV2ViQ29yZTo6
SU9TdXJmYWNlKiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAK
QEAgLTEwNCwxMSArODQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdXJmYWNlKHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+KTsKIAogICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6
U3VyZmFjZVN0YXRlIHNldFZvbGF0aWxlKGJvb2wpOwotI2Vsc2UKLSAgICBXZWJDb3JlOjpJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTaXplSW5CeXRlczsgfQogI2VuZGlmCi0j
ZWxpZiBQTEFURk9STShHVEspCisKKyNpZiBQTEFURk9STShHVEspCiAgICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAKICAgICBz
aXplX3QgaW1hZ2VTaXplSW5CeXRlcygpIGNvbnN0OwpAQCAtMTE2LDIyICs5NCwxNiBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSNpZiBQTEFURk9STShDT0NPQSkKICNpZiBIQVZFKElP
U1VSRkFDRSkKICAgICBleHBsaWNpdCBWaWV3U25hcHNob3Qoc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OklPU3VyZmFjZT4pOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFj
ZT4gbV9zdXJmYWNlOwotI2Vsc2UKLSAgICBleHBsaWNpdCBWaWV3U25hcHNob3QodWludDMyX3Qg
c2xvdElELCBXZWJDb3JlOjpJbnRTaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyk7Ci0KLSAg
ICB1aW50MzJfdCBtX3Nsb3RJRDsKLSAgICBzaXplX3QgbV9pbWFnZVNpemVJbkJ5dGVzOwotICAg
IFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisK
KyNpZiBQTEFURk9STShHVEspCiAgICAgZXhwbGljaXQgVmlld1NuYXBzaG90KFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYpOwogCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNl
IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKICNl
bmRpZgogCiAgICAgdWludDY0X3QgbV9yZW5kZXJUcmVlU2l6ZTsKQEAgLTE1NiwxMCArMTI4LDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0RGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3Rp
bmcoYm9vbCBkaXNhYmxlKSB7IG1fZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eSA9IGRpc2FibGU7
IH0KICAgICBib29sIGRpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5OyB9CiAKLSNpZiAhSEFWRShJT1NV
UkZBQ0UpICYmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKLSAgICBzdGF0aWMg
Q0FDb250ZXh0ICpzbmFwc2hvdHRpbmdDb250ZXh0KCk7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAg
ICB2b2lkIGRpZEFkZEltYWdlVG9TbmFwc2hvdChWaWV3U25hcHNob3QmKTsKICAgICB2b2lkIHdp
bGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdChWaWV3U25hcHNob3QmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbQppbmRleCAzNWJj
N2MyZWI5OTBlOGY0MWU4N2NjMzRkMTFjMzFmOGI2ZDkzZDVlLi5jNDNiZDM3ZGY5YzYwNTliMjY2
NjE4OTY4OWUyOWE2OGIwYjFjMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvVmlld1NuYXBzaG90U3RvcmVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlTWFjLm1tCkBAIC0zNCw1MyArMzQsMTkgQEAKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jaWYg
IUhBVkUoSU9TVVJGQUNFKSAmJiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIpCi1D
QUNvbnRleHQgKlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkKLXsKLSAg
ICBzdGF0aWMgQ0FDb250ZXh0ICpjb250ZXh0OwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qg
b25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zID0gQHsKLSAgICAgICAgICAgIGtDQUNvbnRleHREaXNwbGF5TmFt
ZTogQCJXZWJLaXRTbmFwc2hvdHRpbmciLAotICAgICAgICAgICAga0NBQ29udGV4dElnbm9yZXNI
aXRUZXN0OiBAWUVTLAotICAgICAgICAgICAga0NBQ29udGV4dERpc3BsYXlJZCA6IEAyMDAwMAot
ICAgICAgICB9OwotICAgICAgICBjb250ZXh0ID0gW1tDQUNvbnRleHQgcmVtb3RlQ29udGV4dFdp
dGhPcHRpb25zOm9wdGlvbnNdIHJldGFpbl07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gY29udGV4
dDsKLX0KLSNlbmRpZgotCi0jaWYgSEFWRShJT1NVUkZBQ0UpCiBSZWY8Vmlld1NuYXBzaG90PiBW
aWV3U25hcHNob3Q6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBz
dXJmYWNlKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChXVEZNb3Zl
KHN1cmZhY2UpKSk7CiB9Ci0jZWxzZQotUmVmPFZpZXdTbmFwc2hvdD4gVmlld1NuYXBzaG90Ojpj
cmVhdGUodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5
dGVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChzbG90SUQsIHNp
emUsIGltYWdlU2l6ZUluQnl0ZXMpKTsKLX0KLSNlbmRpZgogCi0jaWYgSEFWRShJT1NVUkZBQ0Up
CiBWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9T
dXJmYWNlPiBzdXJmYWNlKQogICAgIDogbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCi0jZWxz
ZQotVmlld1NuYXBzaG90OjpWaWV3U25hcHNob3QodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNp
emUsIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKQotICAgIDogbV9zbG90SUQoc2xvdElEKQotICAg
ICwgbV9pbWFnZVNpemVJbkJ5dGVzKGltYWdlU2l6ZUluQnl0ZXMpCi0gICAgLCBtX3NpemUoc2l6
ZSkKLSNlbmRpZgogewogICAgIGlmIChoYXNJbWFnZSgpKQogICAgICAgICBWaWV3U25hcHNob3RT
dG9yZTo6c2luZ2xldG9uKCkuZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KIAotI2lm
IEhBVkUoSU9TVVJGQUNFKQogdm9pZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKIHsKICAgICBBU1NFUlQoIW1fc3Vy
ZmFjZSk7CkBAIC05MiwxNSArNTgsMTAgQEAgdm9pZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uo
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKICAgICBtX3N1cmZh
Y2UgPSBXVEZNb3ZlKHN1cmZhY2UpOwogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24o
KS5kaWRBZGRJbWFnZVRvU25hcHNob3QoKnRoaXMpOwogfQotI2VuZGlmCiAKIGJvb2wgVmlld1Nu
YXBzaG90OjpoYXNJbWFnZSgpIGNvbnN0CiB7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgcmV0
dXJuICEhbV9zdXJmYWNlOwotI2Vsc2UKLSAgICByZXR1cm4gbV9zbG90SUQ7Ci0jZW5kaWYKIH0K
IAogdm9pZCBWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UoKQpAQCAtMTEwLDE4ICs3MSw5IEBAIHZv
aWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKIAogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpz
aW5nbGV0b24oKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOwogCi0jaWYgSEFW
RShJT1NVUkZBQ0UpCiAgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKLSNlbHNlCi0jaWYgSEFWRShD
T1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKQotICAgIFtWaWV3U25hcHNob3RTdG9yZTo6c25h
cHNob3R0aW5nQ29udGV4dCgpIGRlbGV0ZVNsb3Q6bV9zbG90SURdOwotI2VuZGlmCi0gICAgbV9z
bG90SUQgPSAwOwotICAgIG1faW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0jZW5kaWYKIH0KIAotI2lm
IEhBVkUoSU9TVVJGQUNFKQogV2ViQ29yZTo6SU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgVmlld1Nu
YXBzaG90OjpzZXRWb2xhdGlsZShib29sIGJlY29tZVZvbGF0aWxlKQogewogICAgIGlmIChWaWV3
U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRl
c3RpbmcoKSkKQEAgLTEzMiwxMSArODQsOSBAQCBXZWJDb3JlOjpJT1N1cmZhY2U6OlN1cmZhY2VT
dGF0ZSBWaWV3U25hcHNob3Q6OnNldFZvbGF0aWxlKGJvb2wgYmVjb21lVm9sYXRpbGUpCiAKICAg
ICByZXR1cm4gbV9zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGJlY29tZVZvbGF0aWxlKTsKIH0KLSNl
bmRpZgogCiBpZCBWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cygpCiB7Ci0jaWYgSEFWRShJ
T1NVUkZBQ0UpCiAgICAgaWYgKCFtX3N1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xNDYsMjMgKzk2LDE1IEBAIGlkIFZpZXdTbmFwc2hvdDo6YXNMYXllckNvbnRlbnRzKCkK
ICAgICB9CiAKICAgICByZXR1cm4gbV9zdXJmYWNlLT5hc0xheWVyQ29udGVudHMoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIFtDQUNvbnRleHQgb2JqZWN0Rm9yU2xvdDptX3Nsb3RJRF07Ci0jZW5kaWYK
IH0KIAogUmV0YWluUHRyPENHSW1hZ2VSZWY+IFZpZXdTbmFwc2hvdDo6YXNJbWFnZUZvclRlc3Rp
bmcoKQogewotI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIGlmICghbV9zdXJmYWNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVChWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xl
dG9uKCkuZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcoKSk7CiAgICAgcmV0dXJu
IG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIGluIHRoZSBzbG90IGNhc2UuCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHkubW0KaW5kZXggZTQ0OWJmZDAwMDBkZjAxMzk4ODA0ODlkMGVkMzA5ZjFiYTE5ZjY3Ni4u
YTVlZTdlMzg5NWQ1MDhmYmM5OGVkMzhlODE4NzI5NGVjMjZjN2RhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1Rl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAtMTM4LDcgKzEzOCw4IEBAIHZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25z
dCBBdHRyaWJ1dGVkU3RyCiAgICAgICAgIFthdHRycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1Vz
aW5nQmxvY2s6XihOU0F0dHJpYnV0ZWRTdHJpbmdLZXkga2V5LCBpZCB2YWx1ZSwgQk9PTCAqc3Rv
cCkgewogICAgICAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtYXJrZXJzLmFkZFBs
YXRmb3JtVGV4dENoZWNraW5nTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwga2V5LCAoTlNTdHJp
bmcgKil2YWx1ZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3Jl
UmFuZ2UsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZywKKyAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmdEYXRhIHsga2V5LCAoTlNTdHJpbmcgKil2YWx1ZSB9KTsKIAogICAgICAgICAgICAgLy8gRklY
TUU6IFN3aXRjaCB0byBjb25zdGFudHMgYWZ0ZXIgcmRhcjovL3Byb2JsZW0vNDg5MTQxNTMgaXMg
cmVzb2x2ZWQuCiAgICAgICAgICAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJOU1NwZWxs
aW5nU3RhdGUiXSkgewpAQCAtMTQ3LDcgKzE0OCw3IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3Ry
CiAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgICAgICAgICBpZiAoc3BlbGxp
bmdTdGF0ZSAmIE5TU3BlbGxpbmdTdGF0ZUdyYW1tYXJGbGFnKSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5TU3RyaW5nICp1c2VyRGVzY3JpcHRpb24gPSBbYXR0cnMgb2JqZWN0Rm9yS2V5OkAiTlNH
cmFtbWFyVXNlckRlc2NyaXB0aW9uIl07Ci0gICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRk
TWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIHVzZXJE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJp
YnV0ZUNvcmVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIFN0cmluZyB7IHVzZXJEZXNj
cmlwdGlvbiB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH1d
OwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyCiAKIHZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVj
dGlvbihjb25zdCBTdHJpbmcmIGFubm90YXRpb24sIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1
aW50NjRfdCBsZW5ndGgpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2VB
bmRPZmZzZXQgPSByYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zm
c2V0LCBsZW5ndGgpOwogICAgIGlmICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE2NCwxMyArMTY0LDEzIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBTdHJpCiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCByZW1vdmVDb3JlU3BlbGxpbmdNYXJr
ZXJzID0gYW5ub3RhdGlvbiA9PSAiTlNTcGVsbGluZ1N0YXRlIjsKLSAgICBmcmFtZS5kb2N1bWVu
dCgpLT5tYXJrZXJzKCkuZmlsdGVyTWFya2VycygqcmFuZ2UsIFsmXSAoRG9jdW1lbnRNYXJrZXIq
IG1hcmtlcikgewotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRN
YXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQorICAgIGF1
dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0gIk5TU3BlbGxpbmdT
dGF0ZSI7CisgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPyByZWxl
dmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0
Q2hlY2tpbmc7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKCpyYW5n
ZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0
Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuIHRleHRDaGVja2luZ0RhdGEua2V5ICE9IGFubm90YXRpb247Ci0gICAgfSwgcmVtb3ZlQ29y
ZVNwZWxsaW5nTWFya2VycyA/IHJlbGV2YW50TWFya2VyVHlwZXMoKSA6IERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgp
KS5rZXkgIT0gYW5ub3RhdGlvbjsKKyAgICB9LCB0eXBlcyk7CiB9CiAKIEF0dHJpYnV0ZWRTdHJp
bmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVu
UG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbiYgZW5kKQpAQCAtMTg4LDEwICsxODgsNyBAQCBBdHRyaWJ1
dGVkU3RyaW5nIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5n
QmV0d2VlblBvc2l0aW9ucwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFtzdHJpbmcg
YXBwZW5kQXR0cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygp
LmdldCgpXSkuZ2V0KCldOwogICAgICAgICBhdXRvIHJhbmdlID0gaXQucmFuZ2UoKTsKLSAgICAg
ICAgYXV0byBtYXJrZXJzID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3Jt
VGV4dENoZWNraW5nKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJz
KSB7Ci0gICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJr
ZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcpKSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RG
OjpnZXQ8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5k
YXRhKCkpOwogICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5n
ZShyYW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCkgfSk7CiAgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0
ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJh
bmdlLCBzdWJyYW5nZSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDMzZWNkN2JlMjQ1Y2RiNTk4N2FiZTAx
MDk1NzBmYWVlMmFiOWQ2MWQuLmUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdh
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0KQEAgLTEzMiw4ICsxMzIsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZv
IFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdl
JiByYQogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBW
ZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFk
cyk7CisgICAgYXV0byBxdWFkcyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFu
Z2UpOwogICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwogICAgICAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KaW5kZXggZGExMTMyYzJjOWJkOTE0OGM4MzNjODc1MzdmM2U4MjY2Mzhm
Y2UzNy4uNDZhY2VlODI2NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAg
LTE2MSwxMyArMTYxLDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShG
cmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgcG9zdExheW91dERh
dGEucGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JD
YW5kaWRhdGVSZXF1ZXN0ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KSA6IFN0cmluZygpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKLSAg
ICBJbnRSZWN0IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwotICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOwotICAgIHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsK
KyAgICBhdXRvIHF1YWRzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqc2VsZWN0
ZWRSYW5nZSk7CiAgICAgaWYgKCFxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHBvc3RMYXlvdXRE
YXRhLmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhx
dWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8g
UmFuZ2U6OmFic29sdXRlVGV4dFF1YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2Yg
YSBwYXJhZ3JhcGguCisgICAgICAgIC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0
IG9mIGEgcGFyYWdyYXBoLgogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkp
OwogICAgIH0KQEAgLTg3Miw4ICs4NzAsOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlh
dGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAg
IH0KIAogICAgIGJvb2wgcGFnZU92ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRlY3RvcnMgPSBmYWxz
ZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5wYWdlT3ZlcmxheXMoKSkgewotICAgICAgICBXZWJQYWdlT3ZlcmxheSog
d2ViT3ZlcmxheSA9IFdlYlBhZ2VPdmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOwor
ICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IGNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLnBhZ2VPdmVybGF5cygpKSB7CisgICAgICAgIGF1dG8gd2ViT3ZlcmxheSA9IFdlYlBhZ2VP
dmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOwogICAgICAgICBpZiAoIXdlYk92ZXJs
YXkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtODgyLDIwICs4ODAsMTUgQEAgdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6
RmxvYXRQb2ludCBsb2NhdGkKICAgICAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFtYWluUmVz
dWx0UmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBhdXRvIHZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmICghdmll
dykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIHBhZ2VPdmVybGF5RGlkT3ZlcnJp
ZGVEYXRhRGV0ZWN0b3JzID0gdHJ1ZTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0OwotCi0gICAgICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgICAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4
dFF1YWRzKHF1YWRzKTsKLSAgICAgICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
OwotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJE
b2N1bWVudCgpLnZpZXcoKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMp
Ci0gICAgICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KLSAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWRE
YXRhQm91bmRpbmdCb3g7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERh
dGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1
bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5S
ZXN1bHRSYW5nZSkpKSk7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVz
dWx0UmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENv
bnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6RmFkZUluKTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YU9y
aWdpbmF0aW5nUGFnZU92ZXJsYXkgPSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7Ci0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IDU4N2MzNGVjY2YwYmY4YmRjNzRjN2Iw
ZGMwNGYwMDA5NDAxY2QwOTkuLjVkNjk0ZTRlMjViMmJmOTdjMjk4ZmQxZmMyOGU2MzUxZmRkNjFj
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lSU9TLm1tCkBAIC04NDMsMTEgKzg0Myw4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlv
biAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlv
bjooCiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlv
biA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2li
bGVQb3NpdGlvbl07CiAgICAgICAgIAogICAgICAgICBhdXRvKiBjdXJyZW50Tm9kZSA9IGN1cnJl
bnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgICAg
IGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcoKmN1cnJlbnROb2RlKTsKLSAg
ICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7Ci0gICAgICAgIGlmIChsYXN0T2Zmc2V0IDwg
MCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpj
dXJyZW50Tm9kZSk7CisKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBv
c2l0aW9uID0gY3VycmVudFZpc2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgICAgICBpZiAo
cHJldmlvdXNWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudFdlYlZpc2libGVQb3NpdGlvbjsKQEAgLTg2MywxOCArODYwLDE4IEBAIC0gKFdlYlZpc2li
bGVQb3NpdGlvbiAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZy
b21Qb3NpdGlvbjooCiAgICAgICAgIC8vIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSAxKTsKICAg
ICAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpID4gMSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50
V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiByZXN1
bHRNYXJrZXIgPSBtYXJrZXJzLmF0KDApOworCisgICAgICAgIGF1dG8mIG1hcmtlciA9ICptYXJr
ZXJzWzBdOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdh
eXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3Vs
dE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKLSAgICAgICAgLy8gdGhpcyBub2RlLCBi
ZWNhdXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgotICAgICAgICBpZiAocmVzdWx0TWFya2Vy
LT5lbmRPZmZzZXQoKSA+ICh1bnNpZ25lZClsYXN0T2Zmc2V0KQorICAgICAgICAvLyBGSVhNRTog
V2ViQ29yZSBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgbWFya2VycyBjb3JyZWN0bHkgZHVyaW5nIGVk
aXRpbmcuIEJhaWwgaWYgcmVzdWx0TWFya2VyIGV4dGVuZHMgb2ZmIHRoZSBlZGdlIG9mIHRoaXMg
bm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KKyAgICAgICAgaWYgKG1hcmtl
ci5lbmRPZmZzZXQoKSA+IGxhc3RPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdl
YlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIGlmICghW3Vpa2l0RGVsZWdhdGUg
aXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjpyZXN1bHRNYXJrZXItPm1ldGFkYXRh
KCldKQorICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25S
ZXN1bHRNYXJrZXI6V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2VyLmRhdGEoKSkuZ2V0KCld
KQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAg
IAotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5zdGFydE9mZnNldCgpID4gMCkKLSAgICAgICAg
ICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2li
bGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIHJlc3Vs
dE1hcmtlci0+c3RhcnRPZmZzZXQoKSkpXTsKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCgpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlz
aWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Y3VycmVudE5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpKSldOwogICAgICAgICAKICAgICAgICAg
Y3VycmVudFZpc2libGVQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIDApKTsKICAgICB9CkBAIC04OTksMTEgKzg5Niw4IEBA
IC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJv
dW5kYXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3Vy
cmVudFdlYlZpc2libGVQb3NpdGlvbiA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxl
UG9zaXRpb246Y3VycmVudFZpc2libGVQb3NpdGlvbl07CiAgICAgICAgIAogICAgICAgICBhdXRv
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5h
bmNob3JOb2RlKCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRp
bmcoKmN1cnJlbnROb2RlKTsKLSAgICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIGlmIChsYXN0T2Zmc2V0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlz
aWJsZVBvc2l0aW9uOwotICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7CisKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5leHRWaXNpYmxlUG9zaXRpb24gPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLm5leHQoKTsK
ICAgICAgICAgaWYgKG5leHRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKQEAgLTkxOSwxOCArOTEzLDE4IEBAIC0g
KFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5k
YXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIC8vQVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09
IDEpOwogICAgICAgICBpZiAobWFya2Vycy5zaXplKCkgPiAxKQogICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247Ci0gICAgICAgIERvY3VtZW50TWFya2VyKiByZXN1
bHRNYXJrZXIgPSBtYXJrZXJzLmF0KDApOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdl
YkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0
aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKLSAgICAg
ICAgLy8gdGhpcyBub2RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgotICAgICAg
ICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihs
YXN0T2Zmc2V0KSkKKworICAgICAgICBhdXRvJiBtYXJrZXIgPSAqbWFya2Vyc1swXTsKKworICAg
ICAgICAvLyBGSVhNRTogV2ViQ29yZSBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgbWFya2VycyBjb3Jy
ZWN0bHkgZHVyaW5nIGVkaXRpbmcuIEJhaWwgaWYgcmVzdWx0TWFya2VyIGV4dGVuZHMgb2ZmIHRo
ZSBlZGdlIG9mIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KKyAg
ICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IGxhc3RPZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIGlmICgh
W3Vpa2l0RGVsZWdhdGUgaXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjpyZXN1bHRN
YXJrZXItPm1ldGFkYXRhKCldKQorICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0
dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2Vy
LmRhdGEoKSkuZ2V0KCldKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9z
aXRpb247CiAgICAgICAgIAotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA8
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdE9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
W1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZXN1bHRNYXJrZXItPmVu
ZE9mZnNldCgpKSldOworICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsYXN0T2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJs
ZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSkpXTsKICAg
ICAgICAgCiAgICAgICAgIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCBsYXN0T2Zmc2V0KSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDY4MjhhYTY3ZjFiMDAxOTk2NjM1N2Jl
NjM5NTg2NzBhOGRlMmU0YmYuLjY5MWY4NTE5MzhmODM1N2Q3NzBkOGM0Zjg0ZTVkMmU2YzNlZjk4
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQwNCw2OSArNDA0LDQ0IEBAIC0gKERP
TVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihO
U0FycmF5ICoqKWFsdGVybmF0CiAgICAgQVNTRVJUKGFsdGVybmF0aXZlcyk7CiAgICAgaWYgKCFh
bHRlcm5hdGl2ZXMpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAorCiAgICAgLy8gKmFs
dGVybmF0aXZlcyBzaG91bGQgbm90IGFscmVhZHkgcG9pbnQgdG8gYW4gYXJyYXkuCi0gICAgQVNT
RVJUKCEoKmFsdGVybmF0aXZlcykpOworICAgIEFTU0VSVCghKmFsdGVybmF0aXZlcyk7CiAgICAg
KmFsdGVybmF0aXZlcyA9IG5pbDsKLSAgICAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBpZiAocC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgCi0gICAgaW50IG8gPSBwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBpZiAobyA8IDApCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gbzsKLSAgICAKLSAgICBOb2RlKiBub2RlID0gcC5kZWVw
RXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2Rl
LT5kb2N1bWVudCgpOwotICAgIAotICAgIGNvbnN0IGF1dG8mIG1hcmtlcnMgPSBkb2N1bWVudC5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpOwotICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKKworICAgIGF1
dG8gcG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRvKiBub2RlID0g
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hcmtlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciA9IG1hcmtlcnNbaV07CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgYXV0byYgZG9jdW1l
bnQgPSBub2RlLT5kb2N1bWVudCgpOworICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
PD0gb2Zmc2V0ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7Ci0gICAgICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWFya2VyQWx0ZXJuYXRpdmVzID0gbWFya2VyLT5hbHRl
cm5hdGl2ZXMoKTsKLSAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6bWFya2VyQWx0ZXJuYXRpdmVzLnNpemUoKV07Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1hcmtlckFsdGVybmF0aXZlcy5zaXplKCk7IGorKykK
LSAgICAgICAgICAgICAgICBbKE5TTXV0YWJsZUFycmF5ICopKmFsdGVybmF0aXZlcyBhZGRPYmpl
Y3Q6KE5TU3RyaW5nICopKG1hcmtlckFsdGVybmF0aXZlc1tqXSldOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUs
IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4ga2l0KHJhbmdlLnB0cigpKTsKKyAgICAgICAgICAgIGF1dG8mIG1hcmtl
ckFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSk7
CisgICAgICAgICAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5Om1hcmtlckFsdGVybmF0aXZlcy5zaXplKCldOworICAgICAgICAgICAgZm9yIChhdXRvJiBh
bHRlcm5hdGl2ZSA6IG1hcmtlckFsdGVybmF0aXZlcykKKyAgICAgICAgICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmFsdGVybmF0aXZlXTsKKyAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBhcnJh
eTsKKyAgICAgICAgICAgIHJldHVybiBraXQoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKS5wdHIoKSk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKERP
TVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcgogewotICAgIFZp
c2libGVQb3NpdGlvbiBwID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHAuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaW50IG8gPSBwLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBpZiAobyA8IDApCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gbzsKLSAgICAKLSAgICBOb2Rl
KiBub2RlID0gcC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKLSAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIAotICAgIGNvbnN0IGF1dG8mIG1hcmtl
cnMgPSBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCisgICAgYXV0byBwb3NpdGlv
biA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOworICAgIGF1dG8qIG5vZGUgPSBwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJz
W2ldOwotICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJr
ZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlLnB0cigp
KTsKLSAgICAgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0g
bm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBmb3IgKGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFya2Vy
cygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZykpIHsKKyAgICAg
ICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZz
ZXQoKSA+PSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZz
ZXQoKSkucHRyKCkpOwogICAgIH0KLSAgICAKICAgICByZXR1cm4gbmlsOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCA3ZWY5M2RiNjEyMzMzMGRhZGViYzliYjQwOGRlNGMx
ZDU5ZGZlZjcyLi44YjdiYTVjYWJjODFkNzhiNjhhYTI0YmQ1ZWZmMjVhZDI3OGIyYmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTM1OCwxNCArMzU4LDkgQEAgLSAoV0tRdWFk
KWFic29sdXRlUXVhZEFuZEluc2lkZUZpeGVkUG9zaXRpb246KEJPT0wgKilpbnNpZGVGaXhlZAog
CiAgICAgaWYgKHF1YWRzLnNpemUoKSA9PSAwKQogICAgICAgICByZXR1cm4gemVyb1F1YWQoKTsK
LQogICAgIGlmIChxdWFkcy5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHdrUXVhZEZyb21G
bG9hdFF1YWQocXVhZHNbMF0pOwotCi0gICAgYXV0byBib3VuZGluZ1JlY3QgPSBxdWFkc1swXS5i
b3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsK
LSAgICByZXR1cm4gd2tRdWFkRnJvbUZsb2F0UXVhZChib3VuZGluZ1JlY3QpOworICAgIHJldHVy
biB3a1F1YWRGcm9tRmxvYXRRdWFkKHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAog
Ly8gdGhpcyBtZXRob2QgaXMgbGlrZSAtIChDR1JlY3QpYm91bmRpbmdCb3gsIGJ1dCBpdCBhY2Nv
dW50cyBmb3IgZm9yIHRyYW5zZm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCAzYzMwZDU3ZTY4
Y2NhNGI2MmU2YjhmMGRhZGI0MjgyNjA3MTA0YWVlLi45YWQ0NmM2MDQ3MDEyZWIzZTQyMzgwNGQ0
MDcyMDcwMjU3ZGM1ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTU3LDEyICsxMTU3LDEx
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50
ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXM7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVh
ZHM7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1
dG8gcXVhZHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpzZWxlY3RlZFJhbmdl
KTsKICAgICBpZiAoIXF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmVjdEZvclNlbGVjdGlvbkNh
bmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpOwogICAgIGVsc2UgewotICAgICAgICAvLyBSYW5nZTo6YWJzb2x1
dGVUZXh0UXVhZHMoKSB3aWxsIGJlIGVtcHR5IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaC4K
KyAgICAgICAgLy8gUXVhZHMgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3Jh
cGguCiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICAgICAgcmVjdEZv
clNlbGVjdGlvbkNhbmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGZy
YW1lLT5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGU1NWMzMDkxMDU3NTRi
YmNjODA0N2I3NTgwZDk3NDBlMjFkMzNhYzMuLmJkOWE2NzgxYmJlYTA2MTFlMmU0ZDcwNDk2MDg2
Y2VmZDU4YjExNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtMTc1NywxMiArMTc1NywxMSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJh
bmdlczooTlNBcnJheSAqKilvdXRSYW5nZXMgYW5kTWV0YWRhdGFzOihOU0FycmF5ICoqKQogICAg
IGZvciAoV2ViQ29yZTo6Tm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBXZWJDb3JlOjpO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1
bWVudC0+bWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIG1h
cmtlciA6IG1hcmtlcnMpIHsKLQogICAgICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlkIG1ldGFkYXRhID0gbWFya2Vy
LT5tZXRhZGF0YSgpOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlkIG1ldGFkYXRhID0g
V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2VyLT5kYXRhKCkpLmdldCgpOworCiAgICAgICAg
ICAgICAvLyBBbGwgcmVzdWx0IG1hcmtlcnMgc2hvdWxkIGhhdmUgbWV0YWRhdGEuCiAgICAgICAg
ICAgICBBU1NFUlQobWV0YWRhdGEpOwogICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkKQEAgLTE4
MDEsMTUgKzE4MDAsMTUgQEAgLSAoaWQpZGljdGF0aW9uUmVzdWx0TWV0YWRhdGFGb3JSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCisKICAgICBhdXRvIG1hcmtlcnMgPSBjb3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2UoKmNvcmUocmFuZ2UpLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uUmVzdWx0KTsKLSAgICAKKwogICAgIC8vIFVJS2l0IHNob3VsZCBvbmx5IGV2
ZXIgZ2l2ZSB1cyBhIERPTVJhbmdlIGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcywgd2hp
Y2ggc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0LgogICAgIEFTU0VS
VChtYXJrZXJzLnNpemUoKSA8PSAxKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPT0gMCkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gbWFya2Vyc1swXS0+bWV0YWRhdGEo
KTsKKworICAgIHJldHVybiBXVEY6OmdldDxSZXRhaW5QdHI8aWQ+PihtYXJrZXJzWzBdLT5kYXRh
KCkpLmdldCgpOwogfQogCiAtICh2b2lkKXJlY3Vyc2l2ZVNldFVwZGF0ZUFwcGVhcmFuY2VFbmFi
bGVkOihCT09MKWVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCAyZWZj
N2Y0OTQwNzg3NzY3ZmUwZTYyYTFlYTYyNDRkNGNlMDg2NjFkLi5hYTUxYjYzOTQ4ODhhNzBiN2Yw
ZDlkYmEwNTFmZTI1YjFlMTZmZjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBA
IC00OTUsNyArNDk1LDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogKyAoV2ViQ29yZTo6
RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3Jl
OjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBP
cHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdl
YkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjoo
V2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9u
VHJhbnNpdGlvbgogewotICAgIFdlYkNvcmU6OkVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRv
cigpOworICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKIAogICAgIC8vIERpY3Rpb25hcnkg
QVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBh
cyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKQEAgLTUwNiwxNyArNTA2LDE2IEBAICsgKFdlYkNvcmU6
OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29y
ZTo6UmFuZ2UmKXJhCiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgY29u
c3QgV2ViQ29yZTo6UmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJl
bmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkg
OiAwOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2Uu
YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1dG8gcXVhZHMgPSBXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKTsKICAgICBpZiAocXVhZHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNb
MF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgYXV0byByYW5nZVJlY3QgPSBmcmFtZS0+
dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkp
OwogCiAgICAgcG9wdXBJbmZvLm9yaWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJh
bmdlUmVjdC55KCkgKyBzY2FsZWREZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxv
b2t1cE9wdGlvbnM7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNTZkNWFkNzJkMDY3YmVhYzEwZTdhMTJlOTQ0NmZhMjcxYzY3MzRiOS4uZTJlODJm
MTdiZjg5ZWYxNjBmMjcyNTM0ZTFkM2RmNDAzNWQ3MTkwZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTA0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxp
dmUgcmFuZ2VzIGluIERvY3VtZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvTWFya2VkVGV4dC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogVXBkYXRl
IGZvciBjaGFuZ2UgdG8gRG9jdW1lbnRNYXJrZXIgY29uc3RydWN0b3IuCisKIDIwMjAtMDQtMDQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
Zm91cnRoIHJvdW5kIG9mIGxvZ2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIw
OTY4NT4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJr
ZWRUZXh0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0
LmNwcAppbmRleCAwNjgxY2FiNDM2N2M1MjM2YTliNTY0MjhhZDZmMTA3NDViYTkxNzgxLi42YThl
NTcyOTFiZjVkMDE2NzY4ZDhlMjkyZTJiOGM2N2FjMDA4NWZiIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCkBAIC05MCw3ICs5MCw3IEBA
IFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlU2ltcGxlKQogCiBURVNUKE1hcmtlZFRleHQsIFN1
YmRpdmlkZVNwZWxsaW5nQW5kR3JhbW1hclNpbXBsZSkKIHsKLSAgICBSZW5kZXJlZERvY3VtZW50
TWFya2VyIGdyYW1tYXJFcnJvck1hcmtlciB7IERvY3VtZW50TWFya2VyIHsgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIDcsIDggfSB9OworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgZ3JhbW1h
ckVycm9yTWFya2VyIHsgRG9jdW1lbnRNYXJrZXIgeyBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwg
eyA3LCA4IH0gfSB9OwogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBleHBlY3RlZE1hcmtlZFRleHRz
IHsKICAgICAgICAgTWFya2VkVGV4dCB7IGdyYW1tYXJFcnJvck1hcmtlci5zdGFydE9mZnNldCgp
LCBncmFtbWFyRXJyb3JNYXJrZXIuZW5kT2Zmc2V0KCksIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJv
ciwgJmdyYW1tYXJFcnJvck1hcmtlciB9LAogICAgICAgICBNYXJrZWRUZXh0IHsgMjIsIDMyLCBN
YXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjZhZjQ2ZDM1Y2JmNmUzNDk0YjRi
MzMyYTU0Y2E2ZmE2NTFkMzRiNy4uYTllMmUyNGZhYzZlYTQwNzNhMWU0Y2JiZTFkNWVhZmI5YmYx
NzI5MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3Qt
ZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJh
ci10aWNrbWFya3MtaGl0dGVzdC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xs
aW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC5odG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXIt
dGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC5wbmc6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnM6IFJlbW92ZWQgZXhwZWN0YXRpb24gZm9yIHNjcm9sbGJh
ci10aWNrbWFya3MuCisgICAgICAgIFRoZXNlIHdlcmUgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdHMu
CisKIDIwMjAtMDQtMDQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgog
CiAgICAgICAgICdcdScgc2hvdWxkIHRocm93IGFuIGVhcmx5IFN5bnRheEVycm9yIGV4Y2VwdGlv
biwgYnV0IGluc3RlYWQgZXZhbHVhdGVzIHRvICd1JwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTI5OTViZmNmMjNj
OTc3NzRhYmQ2ZDFlMTM0NjY1MjAzZmI1NDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRp
Y2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAg
QEAKLUNoZWNrcyB0aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3aGVuIHRpY2ttYXJr
cyBhcmUgYWRkZWQuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIGRpZCBz
Y3JvbGwKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
wqAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNr
bWFya3MtaGl0dGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFy
LXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVj
NDEzMWMxOWIwODA5MTIyOGMwYmQ5M2M4YjM4NTZjZDA1ZjQ0YmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSAr
MCwwIEBACi08aHRtbD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgotPGJvZHkgc3R5bGU9Im1pbi1oZWlnaHQ6IDUwMDBweCI+IAotPHNwYW4g
aWQ9ImVsdCI+Jm5ic3A7PC9zcGFuPgotCi08c2NyaXB0PgotZGVzY3JpcHRpb24oJ0NoZWNrcyB0
aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3aGVuIHRpY2ttYXJrcyBhcmUgYWRkZWQu
Jyk7Ci1vbmxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB2YXIgcmFuZ2UgPSBkb2N1bWVu
dC5jcmVhdGVSYW5nZSgpOwotICAgIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZWx0Jyk7Ci0gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsdCk7Ci0gICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpIHsKLSAgICAgICAgd2luZG93LmludGVybmFscy5hZGRUZXh0TWF0Y2hNYXJr
ZXIocmFuZ2UsIHRydWUpOwotICAgIH0KLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgIHRlc3RSdW5uZXIuZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKTsKLSAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7Ci0gICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHdpbmRvdy5p
bm5lcldpZHRoIC0gMSwgd2luZG93LmlubmVySGVpZ2h0IC0gMSk7Ci0gICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOwotICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0gICAgfQot
fQotCi1vbnNjcm9sbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0ZXN0UGFzc2VkKCdkaWQgc2Nyb2xs
Jyk7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19Ci0KLXZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
LTwvc2NyaXB0PgotCi08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhZjIyYTJlMTg4Mjcx
NDM4MmIxYjQyYzIzOTRkNDZjNDgyODE1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlj
a21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi3C
oApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2tt
YXJrcy1zdHlsZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10
aWNrbWFya3Mtc3R5bGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjNm
ZTMyZTI0YmQ1NjI3NWE5MWNmNmU4YmJiYTMwNWE3OGMxMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Ny
b2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGhlYWQ+Ci08c3R5bGU+Ci1odG1sIHsKLSAgICBmb250OiBB
aGVtIDEwcHg7Ci0gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogbm9uZTsKLX0KLTo6LXdlYmtp
dC1zY3JvbGxiYXIgewotICAgIHdpZHRoOiAxM3B4OwotICAgIGhlaWdodDogMTNweDsKLX0KLTo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewotICAgIGJhY2tncm91bmQtY29sb3I6Z3JlZW47Ci19
Ci06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEo
MTI4LCAxMjgsIDEyOCwgMC44KTsgIC8qIExldCB0aWNrbWFyayBzaGluZSB0aHJvdWdoICovCi19
Ci08L3N0eWxlPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGhpZ2hsaWdodCgpCi17Ci0gICAgdmFyIHJh
bmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2VsdCcpOwotICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbHQpOwot
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYWRk
VGV4dE1hdGNoTWFya2VyKHJhbmdlLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQodHJ1ZSk7Ci19Ci08L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0iaGlnaGxpZ2h0KCk7Ij4KLQotPGRpdiBzdHlsZT0i
aGVpZ2h0OjYwMHB4Ij48L2Rpdj4KLTxzcGFuIGlkPSJlbHQiIHN0eWxlPSJwb3NpdGlvbjphYnNv
bHV0ZTsgdG9wOjMwMHB4Ij4mbmJzcDs8L3NwYW4+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXIt
dGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQtZXhwZWN0ZWQucG5nCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGE4YTNhMTMzNmQ4ZDUxMzI4NmVjYTA1NWRk
ODc3NjIxNTQxYjBlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDI4NzgKemNtZUFT
QE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1Ru
MGxFCnpHWWNjYlJBVTIrQiU/JnJ2XjB4VSEhKUNtd0IlJi1SST88KnF+d247ekNRdEtWb1VPTmNW
WU1zZighTzhwVWw5KAp6d2E/U1ZGe0VQNytaIThzVE8wJmY5USNyX25AQFpYd3BjOWE2cmI5XkYp
alEwODVzdEtvRWA3Nyk2NDg/KiU9UCgKejdtUSRGRmw9T0g1RCo/XmowVkRKTipLKXJxcSQlLTdt
VmhEKE9mV14zcjJHUi1kcXJFe1BgTyUxSD02ZEAzdEMkCm5LRkd3LSFLdVUwRnlqRShqSzIpNioq
dyplMmJ4b1daQ2VJVVMzajNeUDY8cl9pZD9XWQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggMGYwNDU5YzNiNWM3MTRkN2JkN2NiNzFjZDdhYzQ4NTVmY2Mx
NGZlNS4uMTY0OGU5NmRjNzFkZjgzM2Q5NWJmNDJjNGExZGZkNmMxYWQ4Nzc2MyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY4Nyw3ICs2ODcsNiBAQCBm
YXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itb3ZlcmxheS1zY3JvbGxiYXJzLWhvdmVyZWQu
aHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLXNlbGVjdC1saXN0
LWV2ZW50cy5odG1sIFsgU2tpcCBdCiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItbW91c2Vkb3du
LW1vdXNldXAuaHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLW1vdXNlZG93
bi1tb3ZlLW1vdXNldXAuaHRtbCBbIFNraXAgXQotZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRp
Y2ttYXJrcy1oaXR0ZXN0Lmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2VsZWN0b3JzL2FjdGl2ZS1ob3Zl
ci1xdWlya3MuaHRtbCBbIFNraXAgXQogZmFzdC9zZWxlY3RvcnMvYWN0aXZlLWhvdmVyLXN0cmlj
dC5odG1sIFsgU2tpcCBdCiBmYXN0L3NlbGVjdG9ycy9hY3RpdmUtcXVpcmtzLmh0bWwgWyBTa2lw
IF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395471</attachid>
            <date>2020-04-04 17:51:01 -0700</date>
            <delta_ts>2020-04-04 20:35:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200404175100.patch</filename>
            <type>text/plain</type>
            <size>205887</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4YTBiY2Y2ODA3MzAxZTM5ZmU2NDE4
NDkxM2VlYzllZTMyMGRlMDEuLjVkMTJkMjMzYjUwNDFjMjU1YTE1NDA0YjdjOGQyOWJlN2RkOWY3
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRGVmaW5lICJpZCIgaGVyZSB3aGVuIGNvbXBpbGlu
ZyBub24tT2JqQyBzbyBpdCdzIGVhc2llciB0byB1c2UKKyAgICAgICAgUmV0YWluUHRyPGlkPiBp
biBhbnkgaGVhZGVyIGZpbGUuIExldHMgdXMgc3RvcCBkb2luZyB0aGlzIG1hbnkgb3RoZXIgcGxh
Y2VzLgorICAgICAgICBIYXJtbGVzcyB3aGVuIG5vdCBuZWVkZWQuCisKIDIwMjAtMDQtMDQgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NsYW5n
IDEwXSBGaXggLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiBjb21waWxhdGlvbiB3YXJu
aW5ncyBpbiBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYWU5ZjYwMTQ0Y2QyMGM2ODEwZmQ1ZTcxMDJhMjcw
NjY1MWRhZjdiLi41NzhhYWVjNzJlNjc1ZjU5ODM3MGVlMTcyY2RmOTEwZjdiNGVmNzZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjgxIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW1vdmVkIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuCisgICAgICAgIC0gUmVtb3ZlZCAiYWN0aXZlL2luYWN0aXZlIHRleHQgbWF0
Y2ggbWFya2VyIiwgd2hpY2ggd2FzIG9ubHkgZXZlciB1c2VkCisgICAgICAgICAgYnkgQ2hyb21p
dW0sIGFuZCBoYXMgYmVlbiBkZWFkIGNvZGUgaW4gV2ViS2l0IGZvciB3aGlsZSBub3cuCisgICAg
ICAgIC0gTWFkZSBhIHJlcGxhY2VtZW50IGZvciBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMsIGlu
IFJlbmRlck9iamVjdCwKKyAgICAgICAgICBhbmQgbW92ZWQgYWxsIGNhbGxlcnMgb3Zlci4KKyAg
ICAgICAgLSBBZGRlZCBhIGZhc3QgcGF0aCBmb3IgTm9kZTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSB0
aGF0IG1ha2VzIGl0IHdvcmsKKyAgICAgICAgICB3aXRob3V0IGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsIGZvciB0aGUgY29tbW9uIG5vZGUgdHlwZXMuCisgICAgICAgIC0gQWRkZWQgYSBOb2RlOjps
ZW5ndGggZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbidzCisgICAg
ICAgICAgZGVmaW5pdG9uIG9mIGEgbm9kZSdzIGxlbmd0aCwgcGFydCBvZiBob3cgcmFuZ2VzIGFy
ZSBkZWZpbmVkLgorICAgICAgICAtIEFkZGVkIGEgc3RydWN0dXJlIE9mZnNldFJhbmdlIHRvIHJl
cHJlc2VudCBzdGFydC9lbmQgb2Zmc2V0cyB3aXRoaW4KKyAgICAgICAgICBhIHNpbmdsZSBjaGFy
YWN0ZXIgZGF0YSBub2RlLiBUaGlzIGlzIGEgY29tbW9uIGlkaW9tIHRvIGhhbmRsZSBwb3NzaWJs
ZQorICAgICAgICAgIHBhcnRpYWwgc2VsZWN0aW9uIG9mIHRleHQgbm9kZXMgYXQgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHdoZW4KKyAgICAgICAgICBpdGVyYXRpbmcgdGV4dCB3aXRo
aW4gYSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIERvY3VtZW50TWFya2VyIGZ1bmN0aW9ucyB0
byB1c2UgT2Zmc2V0UmFuZ2UuCisgICAgICAgIC0gQWRkZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig
dHVybmluZyBhIHZlY3RvciBvZiBxdWFkcyBpbnRvIGEgdmVjdG9yCisgICAgICAgICAgb2YgYm91
bmRpbmcgYm94IHJlY3RhbmdsZXMsIGFuZCBmb3IgY29tcHV0aW5nIGEgdW5pb24gb2YgYWxsIHRo
ZQorICAgICAgICAgIHJlY3RhbmdsZXMsIHNpbmNlIGJvdGggb2YgdGhlc2UgYXJlIGNvbW1vbiBj
b2RpbmcgcGF0dGVybnMuCisgICAgICAgIC0gQWRkZWQgYW4gaW50ZXJzZWN0aW5nTm9kZXMgZnVu
Y3Rpb24sIHByb2R1Y2luZyBhIGZvci1sb29wLWNvbXBhdGlibGUKKyAgICAgICAgICByYW5nZSBm
b3IgaXRlcmF0aW5nIGFsbCBub2RlcyBjb3ZlcmVkIGJ5IGEgRE9NIHJhbmdlLgorICAgICAgICAt
IENoYW5nZWQgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzbyBp
dCBjYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGhvdXQgYW4gI2lmIGF0IGVhY2ggY2FsbCBzaXRl
LCBleHBhbmRzIHRvIG5vdGhpbmcgaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIC0gRWxpbWlu
YXRlZCB1c2VzIG9mIFJldGFpblB0cjxpZD4gaW5zdGVhZCBvZiBqdXN0IGlkIHRvIHBhc3MgYXJn
dW1lbnRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRlZCBzaW5jZSBp
c0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1YWwgZnVuY3Rp
b24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRJbnNlcnRlZCk6IFBhc3MgYW4gT2Zmc2V0UmFuZ2UgdG8gcmVtb3ZlTWFya2Vy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0UmVtb3ZlZCk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6IFJlbW92ZWQgbW9zdCBwbGF0Zm9ybS1zcGVj
aWZpYyBmdW5jdGlvbnMuCisgICAgICAgIFJlbW92ZWQgdGhlIGFjdGl2ZSBtYXRjaCBib29sZWFu
LCB3aGljaCB3YXMgb25seSBldmVyIHVzZWQgZm9yIENocm9taXVtLgorICAgICAgICBVc2UgT2Zm
c2V0UmFuZ2UuIFVwZGF0ZWQgc29tZSBvYnNvbGV0ZSBjb21tZW50cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0
VGV4dFJhbmdlcyk6IENoYW5nZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gcmV0dXJuIGEgc3Ry
dWN0dXJlIHdpdGggYSBub2RlIGFuZCBhbiBvZmZzZXQgcmFuZ2UgcmF0aGVyIHRoYW4gdXNpbmcg
YQorICAgICAgICBTaW1wbGVSYW5nZTsgYWRkcyBjbGFyaXR5IHRvIHRoZSBmYWN0IHRoYXQgaXQn
cyBndXJhbnRlZWQgdG8gYmUgb25seSBhCisgICAgICAgIHNpbmdsZSBub2RlLiBNYXkgZXZlbiB3
YW50IHRvIGNvbnNpZGVyIHNvbWUgZGF5IG1vdmluZyBUZXh0SXRlcmF0b3Igb3ZlcgorICAgICAg
ICB0byB0aGlzLCBidXQgaXQncyBkZWZpbml0ZWx5IGJldHRlciBoZXJlIGZvciBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6IFVwZGF0
ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29sbGVjdFRleHRSYW5nZXMgYW5kIHRvIERv
Y3VtZW50TWFya2VyIGNvbnN0cnVjdGlvbiwgYW5kIHRvIHVzZSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgc3ludGF4IHRoYXQgZG9lc24ndCByZXBlYXQgdGhlIERvY3VtZW50TWFya2VyIGNsYXNzIG5h
bWUuIERlbGV0ZWQgb3ZlcmxvYWRzCisgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRv
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKTogVXBkYXRl
ZCBhcyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IEZpeCBhIG1pc3Rha2Ug
d2hlcmUgY29weWluZworICAgICAgICBtYXJrZXJzIHdvdWxkIGhhdmUgYSBzaWRlIGVmZmVjdCBv
ZiBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKTogSnVzdCBoYXZlIHRoaXMgY2FsbAorICAgICAg
ICBmaWx0ZXJNYXJrZXJzIHdpdGggbnVsbCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogVXBkYXRlZCBm
b3IgdGhlIGNoYW5nZSB0bworICAgICAgICBjb2xsZWN0VGV4dFJhbmdlcyBhbmQgdG8gcGFzcyBh
IE9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1h
cmtlcik6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZQorICAgICAgICByYW5nZS4g
VXNlIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgYm91bmRpbmdC
b3hlcyBmdW5jdGlvbnMKKyAgICAgICAgdG8gbWFrZSB0aGlzIGNsZWFyZXIgYW5kIHNpbXBsZXIu
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKTogVXBkYXRl
IGZvciBjaGFuZ2VzIHRvIERvY3VtZW50TWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5z
dGVhZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51
c2VkICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNz
aW5nIDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0
aWxsIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmZvckVhY2gpOiBBZGRlZC4gU2hhcmVkIGxvZ2ljIGZvciB0aGUgbXVsdGlwbGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgaXRlcmF0ZSB0aGUgbWFya2VycyBjb3ZlcmVkIGJ5IGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6IFNpbXBsaWZpZWQgbG9vcHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOiBE
ZWxldGVkLiBXYXMgb25seQorICAgICAgICB1c2VkIGZvciBDaHJvbWl1bSBhbmQgaGFzIGJlZW4g
ZGVhZCBjb2RlIHNpbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UpOgorICAgICAgICBDYWxsIGZvckVhY2guCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZHNJblJvb3RWaWV3
U3BhY2UpOiBVc2UgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmFic29sdXRlRXZlbnRCb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG91dExheW91dCk6IERpdHRvLgorCisgICAgICAg
ICogZG9tL05vZGUuaDogQWRkZWQgaW5saW5lIGZhc3QgcGF0aCBmb3IgaXNDaGFyYWN0ZXJEYXRh
Tm9kZS4KKyAgICAgICAgTW92ZWQgc29tZSBpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG91dCBvZiBj
bGFzcyBkZWZpbml0aW9uIHNvIGl0J3MKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQgaXQgYW5kIGdl
dCBhbiBvdmVydmlldy4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogVXNlIGJvdW5k
aW5nQm94ZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmg6IERl
bGV0ZWQgYWJzb2x1dGVUZXh0UXVhZHMuCisKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oOiBVc2UgcnZhbHVlIHJlZmVyZW5jZXMgYW5kIG1vdmUuCisKKyAgICAgICAgKiBk
b20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdElzQ2hhcmFjdGVyRGF0
YSk6IERlbGV0ZWQuIE1vdmVkIHRoZSBvcHRpbWl6YXRpb25zIGludG8KKyAgICAgICAgTm9kZTo6
aXNDaGFyYWN0ZXJEYXRhTm9kZSBzbyBub3cgYWxsIGNhbGxlcnMgZ2V0IHRoZW0uCisgICAgICAg
IChXZWJDb3JlOjpsZW5ndGgpOiBEZWxldGVkLiBNb3ZlZCB0byBOb2RlOjpsZW5ndGguCisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogVXNlIE5v
ZGU6Omxlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmly
c3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5n
ZTo6c2VudGluZWwgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yOjpvcGVyYXRvcisrKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuaDogQWRkZWQgaW50ZXJzZWN0aW5nTm9kZXMgZnVuY3Rpb24sIGFuZCB0aGUKKyAgICAgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlIGFuZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgY2xhc3Nl
cyB1c2VkCisgICAgICAgIHRvIG1ha2UgaXQgd29yay4gQWRkZWQgdGhlIE9mZnNldFJhbmdlIHN0
cnVjdHVyZSBhbmQgdGhlCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5jdGlv
biwgYWxzbyB0byBoZWxwIHdpdGggaXRlcmF0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgVGFr
ZSBvdXQgdW5uZWVkZWQgaG9sZHNfYWx0ZXJuYXRpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRl
cm5hdGl2ZSk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGVzLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6IFBhc3MgcmVm
ZXJlbmNlIHRvIHJhbmdlCisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8gcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgIFRha2UgYSBT
aW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4gQWxzbyB1c2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAg
ICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVBy
ZXNlcnZpbmdNYXJrZXJzKToKKyAgICAgICAgUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIHNpbmNl
IHdlIGNhbiBjb3B5IG1hcmtlciBkYXRhIHdpdGhvdXQKKyAgICAgICAgc2VwYXJhdGUgY29kZSBm
b3IgZWFjaCB0eXBlLiBBbHNvIHVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5n
ZS4KKworICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHA6IENhbGwgYWRkTWFy
a2VyIGluc3RlYWQgb2YKKyAgICAgICAgYWRkTWFya2VyVG9Ob2RlLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0
ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICBSZW1vdmVkIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOiBSZW1vdmUgdXNlIG9mIFJldGFpblB0cjxpZD4gZm9yIGFyZ3VtZW50
cy4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgTWVyZ2VkIHRoZSBsb2dpYyBmcm9tIGdldFRleHRS
ZWN0YW5nbGVzIGluIGhlcmUsIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCBib3VuZGluZ0JveGVzLgorICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICB0
aGUgY29weU1hcmtlcnMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFu
ZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpE
aWN0YXRpb25Db21tYW5kSU9TKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBSZXRhaW5QdHI8aWQ+
IGZvciBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpj
cmVhdGUpOiBNb3ZlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZElPUzo6ZG9BcHBseSk6IFVwZGF0ZWQgdG8gZG8gdGhlIHdvcmsgaGVyZQorICAgICAgICBz
aW5jZSB3ZSBkb24ndCBoYXZlIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIgYW55IG1vcmUuCisgICAgICAgIFNwZWNpZmljYWxseSwgcmVtb3ZlIHRoZSBmaXJzdCBpbnRl
cnByZXRhdGlvbiwgd2hpY2ggbGVhdmVzIGJlaGluZCBhCisgICAgICAgIHZlY3RvciBvZiBhbHRl
cm5hdGl2ZXMuIFNhbWUgZm9yIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlci4KKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyk6IFRha2UgaWQgaW5zdGVhZCBvZgorICAg
ICAgICBSZXRhaW5QdHI8aWQ+LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IENoYW5nZWQKKyAgICAgICAgYXJvdW5kIHNpbmNl
IHdlIGRvbid0IGhhdmUgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcgor
ICAgICAgICBvciBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIgYW55IG1vcmUuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMpOiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6
CisgICAgICAgIEdldCBhbHRlcm5hdGl2ZXMgZGlyZWN0bHkgZnJvbSBEb2N1bWVudE1hcmtlcjo6
ZGF0YSwgbm93IHRoYXQKKyAgICAgICAgdGhlcmUgaXMgbm90IGEgc2VwYXJhdGUgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcyBmdW5jdGlvbi4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAg
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMs
CisgICAgICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKKyAgICAgICAgaWQgc2lu
Y2UgdGhhdCdzIG5vdyBkb25lIGluIFJldGFpblB0ci5oLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXRlZEJvdW5kaW5nQm94ZXMpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDogQSBjb3VwbGUgdHdlYWtz
LCBwbHVzIGRlY2xhcmVkIHRoZQorICAgICAgICBmdW5jdGlvbnMgYWJvdmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZSBkZWZpbml0aW9uIG9m
CisgICAgICAgIGlkIHNpbmNlIHRoYXQncyBub3cgZG9uZSBpbiBSZXRhaW5QdHIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IFRha2Ugb3V0
CisgICAgICAgIGlzQWN0aXZlTWF0Y2ggbG9naWMgdGhhdCB3YXMgdXNlZCBmb3IgQ2hyb21pdW0g
b25seS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggY29uc3QpOiBVcGRhdGUg
Zm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgY29u
c3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1hcmtD
b250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZvcgorICAgICAgICBjaGFuZ2VzIHRv
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25zdCk6IFVzZQorICAgICAgICB1bml0
ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKTogVXNlCisgICAg
ICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91
bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIFJhbmdlOjphYnNvbHV0ZVRl
eHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNpdHkgYW5kIHJlbW92ZWQKKyAgICAg
ICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRvIGltcGxlbWVudCwgZmVhdHVyZSB0
aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgc29tZSBvciBhbGwgb2YgdGhlIHF1
YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92ZWQgbXVsdGktbGluZSBmdW5jdGlv
bgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJPYmplY3QgY2xhc3MgZGVmaW5pdGlv
biB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFkLiBEZWNsYXJlZCBhIG5ldyBhYnNv
bHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAgICBtX3NldE5lZWRzTGF5b3V0Rm9y
YmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4gY2FuIGJlIGNvbnN0LgorICAgICAg
ICBDb25kaXRpb25hbGl6ZWQgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbiBhbmQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUKKyAgICAgICAgc28gYm90aCBjYW4gYmUgdXNlZCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcyBidXQgZXhwYW5kIHRvIG5vIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ2dlZENvbnRlbnRD
b250YWluc1JlcGxhY2VkRWxlbWVudCk6IFNpbXBsaWZpZWQgYW5kIHVwZGF0ZWQKKyAgICAgICAg
bm93IHRoYXQgdGhlIGRyYWdnZWQgY29udGVudCBkYXRhIG5vIGxvbmdlciBoYXMgaXRzIG93biBu
YW1lZCBzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQp
OiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mp
OiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTog
UmVtb3ZlZCB0aGUgQ2hyb21pdW0tb25seQorICAgICAgICBjb25jZXB0IG9mIGFjdGl2ZSB2cy4g
aW5hY3RpdmUgdGV4dCBzZWFyY2ggaGlnaGxpZ2h0IGNvbG9ycy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKTogRGVsZXRlZC4gV2FzIG9ubHkgdXNlZCBmb3Ig
YSB0ZXN0CisgICAgICAgIG9mIENocm9taXVtLXNwZWNpZmljIHNjcm9sbCB0aWNrIG1hcmtzLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6IERlbGV0ZWQgYWRkVGV4dE1hdGNoTWFya2Vy
LgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogRGl0dG8uCisKIDIwMjAtMDQtMDQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
Zm91cnRoIHJvdW5kIG9mIGxvZ2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIw
OTY4NT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMTdiOTIxZjRkZDc4NjcwZjYyNDFiZjdlZGIyYmViMzFiMDNiYzg0
Zi4uYjczYzdiN2IyMDJkNzQwMzEzMzMxNzY5ZTgwN2FjZTAwYTFhMjBmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNyBAQAorMjAyMC0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmg6IFJlbW92ZWQgdW51c2VkICJDb2NvYSB3aXRo
b3V0IElPU3VyZmFjZSIgY29kZSBwYXRocy4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdT
bmFwc2hvdFN0b3JlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnNldFN1cmZhY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpoYXNJbWFnZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzSW1hZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KTogRGVs
ZXRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24pOiBVcGRhdGVkIHNpbmNlCisgICAg
ICAgIGFkZFBsYXRmb3JtVGV4dENoZWNraW5nTWFya2VyIG5vIGxvbmdlciBleGlzdHMuCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlv
blJlbGF0aXZlVG9TZWxlY3Rpb24pOgorICAgICAgICBVcGRhdGVkIHNpbmNlIGZpbHRlck1hcmtl
cnMgcGFzc2VzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIG5vdy4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdC
ZXR3ZWVuUG9zaXRpb25zKToKKyAgICAgICAgU2ltcGxpZmllZCBjb2RlIGEgYml0IGJ5IHJlbW92
aW5nIGxvY2FsIHZhcmlhYmxlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RB
dExvY2F0aW9uKTogVXNlCisgICAgICAgIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMg
YW5kIHVuaXRlZEJvdW5kaW5nQm94ZXMuCisKIDIwMjAtMDQtMDQgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgZm91cnRoIHJvdW5kIG9mIGxv
Z2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIwOTY4NT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZwppbmRleCAwNmRiNjNmMzVlYjlmODE0NTlmNDdjODI4YWEyNjdiZTgyMTMx
Mzk0Li4xYWVmZTdhMmZiZDU2OWQ4YzFhOWJiNDMyNjRhNGRjZTJjYjEyNjZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMg
aW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRh
cnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIFVwZGF0ZSBzaW5jZSBEb2N1bWVudE1hcmtlcjo6
bWV0YWRhdGEgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKC1bV2ViRnJhbWUgbmV4dFVucGVy
dHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIERp
dHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgor
ICAgICAgICAoLVtXZWJWaXNpYmxlUG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9u
UGhyYXNlQWx0ZXJuYXRpdmVzOl0pOgorICAgICAgICBVcGRhdGUgc2luY2UgRG9jdW1lbnRNYXJr
ZXI6OmFsdGVybmF0aXZlcyBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoLVtXZWJWaXNpYmxl
UG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcl0pOgorICAgICAg
ICBEaXR0by4KKwogMjAyMC0wMy0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICByZGFyOi8vcHJvYmxlbS82MDM1OTIzMCBNYXJrIGxvY2F0aW9uTWFuYWdl
cjpkaWRDaGFuZ2VBdXRob3JpemF0aW9uU3RhdHVzOiBhcyBkZXByZWNhdGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCmluZGV4IGNjYTVmZDcyNGI3ZTczMzNhYjAxZGFjYTU3YTBiYmI4YTM4
Mjg2NGIuLjgwMTE5MTc5MTNiZjVhNTcyMTQxMGQwMTk1ZmIxYTEwODQ2MWZkY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMC0wNC0wNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBh
YnNvbHV0ZVF1YWRBbmRJbnNpZGVGaXhlZFBvc2l0aW9uOl0pOiBVc2UgdW5pdGVkQm91bmRpbmdC
b3hlcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMpOiBVc2UgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6YW5kTWV0
YWRhdGFzOl0pOiBVcGRhdGVkIHNpbmNlIERvY3VtZW50TWFya2VyIG5vCisgICAgICAgIGxvbmdl
ciBoYXMgYSBkZWRpY2F0ZWQgbWV0YWRhdGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoLVtX
ZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOmluRnJh
bWU6d2l0aExvb2t1cE9wdGlvbnM6aW5kaWNhdG9yT3B0aW9uczp0cmFuc2l0aW9uOl0pOgorICAg
ICAgICBVc2UgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKwogMjAyMC0wNC0wNCAg
UGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIy
NTkwOTUpOiBBU1NFUlRJT04gRkFJTEVEOiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGUgIT0gVmlkZW9G
dWxsc2NyZWVuTW9kZU5vbmUgc2VlbiB3aXRoIFRlc3RXZWJLaXRBUEkuV2ViS2l0TGVnYWN5LkF1
ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5Q
dHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCmluZGV4IDYxZjEwOWJjYWZlNjA1MTZh
NzMyZWU0ZWQ4MzlhZDEzYjM0YjU3MWEuLjAxMmEwMWQ3OTQ0ZWE2YWRhNjVmYzllNTk3ZGE0ZmNi
MzFiZWZmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCkBAIC00OCw2ICs0OCwxMCBAQAogI2RlZmluZSBOU19S
RUxFQVNFU19BUkdVTUVOVAogI2VuZGlmCiAKKyNpZm5kZWYgX19PQkpDX18KK3R5cGVkZWYgc3Ry
dWN0IG9iamNfb2JqZWN0ICppZDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVW5s
aWtlIG1vc3QgbW9zdCBvZiBvdXIgc21hcnQgcG9pbnRlcnMsIFJldGFpblB0ciBjYW4gdGFrZSBl
aXRoZXIgdGhlIHBvaW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggMTUyN2M1MWQ1YjQ2ZDQyYmRiYWM0OTNlOWU0YmJhMWIy
ZWRiZGUzYy4uZTIzMWQ1MzU3N2NiNTA4NWFkMzhlYmU2ZTAzMmY0MWU3OTE1YTNkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC02Miw3ICs2Miw3IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0IGZpbmFsOwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9v
bCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldERh
dGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIG5vdGlm
eVBhcmVudEFmdGVyQ2hhbmdlKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlU291cmNlKTsKQEAg
LTcwLDYgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YTsKIH07CiAKK2lubGlu
ZSB1bnNpZ25lZCBOb2RlOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmIChpczxDaGFyYWN0ZXJE
YXRhPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhp
cykubGVuZ3RoKCk7CisgICAgcmV0dXJuIGNvdW50Q2hpbGROb2RlcygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNlZjk0NTkwMGJhOGYy
NGUwMmY1ZWNmMjBkZWNmYzcwOGJmZDgyYTAuLjJjYWNjNWQyZTJkNjRiODRkMTYyYzdmMDczZjM5
Y2YzMTc1NTYzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDY0MSw3ICs0NjQxLDcg
QEAgdm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogCiAjaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NI
RUNLSU5HKQogICAgIC8vIEZyZXNobHkgaW5zZXJ0ZWQgdGV4dCBpcyBleHBlY3RlZCB0byBub3Qg
aW5oZXJpdCBQbGF0Zm9ybVRleHRDaGVja2luZyBtYXJrZXJzLgotICAgIG1fbWFya2Vycy0+cmVt
b3ZlTWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3Jt
VGV4dENoZWNraW5nKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZz
ZXQsIG9mZnNldCArIGxlbmd0aCB9LCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmcpOwogI2VuZGlmCiB9CiAKQEAgLTQ2NTMsNyArNDY1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRl
eHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ICAgIH0KIAogICAgIC8vIFVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1t
YXIgY2hlY2tpbmcuCi0gICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZzZXQsIG9m
ZnNldCArIGxlbmd0aCB9KTsKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZz
ZXQgKyBsZW5ndGgsIDAgLSBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCmluZGV4IDY1NWJkMzY4YmJkYjU5YjM5Y2U3NWZmY2Q3MjA2YjMyY2YwOGU4ZDcuLmRmNWNj
OGY3YjVhYWU4NjRmYjAwYWRmMGU2NzgxZTk1MDI2NTU1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjAsOCArMjAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIk5vZGUuaCIK
LQorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAgLTI5
LDE1ICsyOCwxMiBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLXR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEEgcmFuZ2Ugb2YgYSBub2RlIHdpdGhpbiBhIGRvY3Vt
ZW50IHRoYXQgaXMgIm1hcmtlZCIsIHN1Y2ggYXMgdGhlIHJhbmdlIG9mIGEgbWlzc3BlbGxlZCB3
b3JkLgogLy8gSXQgb3B0aW9uYWxseSBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIHRoYXQgY291bGQg
YmUgZGlzcGxheWVkIGluIHRoZSB1c2VyIGludGVyZmFjZS4KLS8vIEl0IGFsc28gb3B0aW9uYWxs
eSBpbmNsdWRlcyBhIGZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBtYXRjaCBpcyBhY3RpdmUs
IHdoaWNoIGlzIGlnbm9yZWQKLS8vIGZvciBhbGwgdHlwZXMgb3RoZXIgdGhhbiB0eXBlIFRleHRN
YXRjaC4KIGNsYXNzIERvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIE1hcmtlclR5
cGUgewpAQCAtNzIsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRlbGVwaG9uZU51bWJlciA9
IDEgPDwgMTAsCiAjZW5kaWYKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBG
SVhNRTogaU9TIHNob3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24gbWFyayBzeXN0ZW0gd2l0
aCB0aGUgb3RoZXIgcGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMxMjQ5Pi4KKyAgICAgICAg
Ly8gRklYTUU6IGlPUyBzaG91bGQgc2hhcmUgdGhlIHNhbWUgZGljdGF0aW9uIG1hcmsgc3lzdGVt
IHdpdGggdGhlIG90aGVyIHBsYXRmb3Jtcy4KICAgICAgICAgRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcyA9IDEgPDwgMTEsCiAgICAgICAgIERpY3RhdGlvblJlc3VsdCA9IDEgPDwgMTIs
CiAjZW5kaWYKQEAgLTg4LDcwICs4NCw1MCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIE9wdGlvblNldDxNYXJrZXJUeXBlPiBhbGxNYXJrZXJzKCk7CiAKLSAgICB1c2luZyBJc0Fj
dGl2ZU1hdGNoRGF0YSA9IGJvb2w7Ci0gICAgdXNpbmcgRGVzY3JpcHRpb25EYXRhID0gU3RyaW5n
OwogICAgIHN0cnVjdCBEaWN0YXRpb25EYXRhIHsKICAgICAgICAgdWludDY0X3QgY29udGV4dDsK
ICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dDsKICAgICB9OwotICAgIHN0cnVjdCBEaWN0YXRp
b25BbHRlcm5hdGl2ZXNEYXRhIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZXM7Ci0gICAgICAgIFJldGFpblB0cjxpZD4gbWV0YWRh
dGE7Ci0jZW5kaWYKLSAgICB9OwotICAgIHN0cnVjdCBEcmFnZ2VkQ29udGVudERhdGEgewotICAg
ICAgICBSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZTsKLSAgICB9OwogI2lmIEVOQUJMRShQTEFURk9S
TV9EUklWRU5fVEVYVF9DSEVDS0lORykKICAgICBzdHJ1Y3QgUGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhIHsKICAgICAgICAgU3RyaW5nIGtleTsKICAgICAgICAgU3RyaW5nIHZhbHVlOwogICAgIH07
CiAjZW5kaWYKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVz
Y3JpcHRpb25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBE
cmFnZ2VkQ29udGVudERhdGEKKworICAgIHVzaW5nIERhdGEgPSBWYXJpYW50PAorICAgICAgICBT
dHJpbmcKKyAgICAgICAgLCBEaWN0YXRpb25EYXRhIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlcwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgVmVjdG9yPFN0cmluZz4gLy8gRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcworICAgICAgICAsIFJldGFpblB0cjxpZD4gLy8g
RGljdGF0aW9uUmVzdWx0CisjZW5kaWYKKyAgICAgICAgLCBSZWZQdHI8Tm9kZT4gLy8gRHJhZ2dl
ZENvbnRlbnQKICNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCi0gICAg
LCBQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGEKKyAgICAgICAgLCBQbGF0Zm9ybVRleHRDaGVja2lu
Z0RhdGEgLy8gUGxhdGZvcm1UZXh0Q2hlY2tpbmcKICNlbmRpZgogICAgID47CiAKLSAgICBEb2N1
bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29s
IGlzQWN0aXZlTWF0Y2gpOwotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24gPSBTdHJpbmcoKSk7Ci0gICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgRGF0YSYmKTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEp
OwotI2VuZGlmCisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgT2Zmc2V0UmFuZ2UsIERh
dGEmJiA9IHsgfSk7CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRP
ZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
ZnNldDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZS5zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFu
Z2UuZW5kOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKLSAg
ICBib29sIGlzQWN0aXZlTWF0Y2goKSBjb25zdDsKLSAgICB2b2lkIHNldEFjdGl2ZU1hdGNoKGJv
b2wpOwotCiAgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
ICAgIHZvaWQgY2xlYXJEYXRhKCkgeyBtX2RhdGEgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJE
YXRhKCkgeyBtX2RhdGEgPSBTdHJpbmcgeyB9OyB9CiAKICAgICAvLyBPZmZzZXQgbW9kaWZpY2F0
aW9ucyBhcmUgZG9uZSBieSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuCiAgICAgLy8gT3RoZXIg
Y2xhc3NlcyBzaG91bGQgbm90IGNhbGwgZm9sbG93aW5nIHNldHRlcnMuCi0gICAgdm9pZCBzZXRT
dGFydE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9zdGFydE9mZnNldCA9IG9mZnNldDsgfQot
ICAgIHZvaWQgc2V0RW5kT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX2VuZE9mZnNldCA9IG9m
ZnNldDsgfQorICAgIHZvaWQgc2V0U3RhcnRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmFu
Z2Uuc3RhcnQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVuZE9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpIHsgbV9yYW5nZS5lbmQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNoaWZ0T2Zmc2V0cyhpbnQg
ZGVsdGEpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGlzRGljdGF0aW9u
KCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGluZGV4KTsK
LSAgICBpZCBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWV0YWRhdGEoaWQpOwotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgTWFya2VyVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9z
dGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKKyAgICBPZmZzZXRSYW5nZSBt
X3JhbmdlOwogICAgIERhdGEgbV9kYXRhOwogfTsKIApAQCAtMTgzLDM0ICsxNTksMTcgQEAgY29u
c3RleHByIGF1dG8gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSAtPiBPcHRpb25TZXQ8TWFy
a2VyVHlwZT4KICAgICB9OwogfQogCi1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFy
a2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3Rp
dmVNYXRjaCkKLSAgICA6IG1fdHlwZShUZXh0TWF0Y2gpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0
YXJ0T2Zmc2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICwgbV9kYXRhKGlz
QWN0aXZlTWF0Y2gpCi17Ci19Ci0KLWlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJr
ZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQoraW5saW5lIERvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIE9mZnNldFJhbmdlIHJhbmdlLCBEYXRhJiYg
ZGF0YSkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNl
dCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShkZXNjcmlwdGlv
bikKLXsKLX0KLQotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJU
eXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEm
JiBkYXRhKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9yYW5nZShyYW5nZSkK
ICAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2hpZnRPZmZzZXRzKGludCBkZWx0YSkKIHsKLSAgICBtX3N0YXJ0T2Zmc2V0ICs9
IGRlbHRhOwotICAgIG1fZW5kT2Zmc2V0ICs9IGRlbHRhOworICAgIG1fcmFuZ2Uuc3RhcnQgKz0g
ZGVsdGE7CisgICAgbV9yYW5nZS5lbmQgKz0gZGVsdGE7CiB9CiAKIGlubGluZSBjb25zdCBTdHJp
bmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0yMTgsNTUgKzE3Nyw0
IEBAIGlubGluZSBjb25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8g
V1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAotaW5saW5lIGJv
b2wgRG9jdW1lbnRNYXJrZXI6OmlzQWN0aXZlTWF0Y2goKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgV1RGOjpnZXQ8Ym9vbD4obV9k
YXRhKTsKLX0KLQotaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJv
b2wgaXNBY3RpdmVNYXRjaCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFRleHRNYXRjaCk7Ci0g
ICAgbV9kYXRhID0gaXNBY3RpdmVNYXRjaDsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLS8vIEZJWE1FOiBpT1Mgc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGRpY3RhdGlvbiBtYXJrIHN5
c3RlbSB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybXMgPHJkYXI6Ly9wcm9ibGVtLzk0MzEyNDk+Lgot
Ci1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0
YSkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkK
LSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShEaWN0YXRpb25BbHRl
cm5hdGl2ZXNEYXRhIHsgYWx0ZXJuYXRpdmVzLCBtZXRhZGF0YSB9KQotewotICAgIEFTU0VSVChp
c0RpY3RhdGlvbigpKTsKLX0KLQotaW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXI6OmlzRGljdGF0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90eXBlID09IERpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMgfHwgbV90eXBlID09IERpY3RhdGlvblJlc3VsdDsKLX0KLQotaW5saW5lIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRh
KS5hbHRlcm5hdGl2ZXM7Ci19Ci0KLWlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBbHRl
cm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBzaXplX3QgaW5kZXgpCi17Ci0gICAg
V1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNb
aW5kZXhdID0gYWx0ZXJuYXRpdmU7Ci19Ci0KLWlubGluZSBpZCBEb2N1bWVudE1hcmtlcjo6bWV0
YWRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2
ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2V0TWV0YWRhdGEoaWQgbWV0YWRhdGEpCi17Ci0gICAgV1RGOjpnZXQ8RGljdGF0
aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOwotfQotCi0j
ZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBjZDkzZWU1OTY4MWFkMjZkODRjMTM1
MDg0OWM5ZWRhMmM3Y2QxMGRiLi5mYzY0ZTMwNmY1NWYwNjhkNjZhMGFjYTEwNDA5OGY4M2NmNDUz
ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKQEAgLTYwLDEzNCArNTksNTQgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmRldGFjaCgpCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMg
PSB7IH07CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvbGxlY3RUZXh0UmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK2F1dG8gRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpIC0+IFZlY3RvcjxUZXh0UmFuZ2U+CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHRleHRSYW5nZTsKLSAgICBmb3IgKFRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IocmFuZ2Up
OyAhdGV4dEl0ZXJhdG9yLmF0RW5kKCk7IHRleHRJdGVyYXRvci5hZHZhbmNlKCkpCi0gICAgICAg
IHRleHRSYW5nZS5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKSk7
Ci0gICAgcmV0dXJuIHRleHRSYW5nZTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCi17Ci0gICAgZm9yIChh
dXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4
dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlv
bikpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKLXsK
LSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQotICAg
ICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtl
cih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkp
KTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShO
b2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQotewotICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgpKTsKLX0KLQot
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCi17Ci0gICAgYWRk
TWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBhY3Rp
dmVNYXRjaCkKLXsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMo
cmFuZ2UpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFy
dE9mZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9m
ZnNldCgpOwotICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBE
b2N1bWVudE1hcmtlcihzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAg
IFZlY3RvcjxUZXh0UmFuZ2U+IHJhbmdlczsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdGVyYXRv
cihyYW5nZSk7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAg
ICAgYXV0byBjdXJyZW50UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICByYW5nZXMu
YXBwZW5kKHsgV1RGTW92ZShjdXJyZW50UmFuZ2Uuc3RhcnQuY29udGFpbmVyKSwgeyBjdXJyZW50
UmFuZ2Uuc3RhcnQub2Zmc2V0LCBjdXJyZW50UmFuZ2UuZW5kLm9mZnNldCB9IH0pOwogICAgIH0K
KyAgICByZXR1cm4gcmFuZ2VzOwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4m
IG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNv
bnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJl
dGF0aW9ucywgbWV0YWRhdGEpKTsKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RU
ZXh0UmFuZ2VzKHJhbmdlKSkKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS5ub2RlLCB7IHR5
cGUsIHRleHRQaWVjZS5yYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEgeyBkYXRhIH0gfSk7CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
dGVycHJldGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIo
VGV4dCYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQog
ewotICAgIEFTU0VSVChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSk7Ci0gICAgaWYgKGludGVy
cHJldGF0aW9ucy5zaXplKCkgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG51
bWJlck9mQWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25zLnNpemUoKSAtIDE7Ci0gICAgZm9y
IChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBE
b2N1bWVudE1hcmtlciBtYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgZW1wdHlTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4obnVtYmVyT2ZBbHRlcm5hdGl2ZXMp
LCBSZXRhaW5QdHI8aWQ+KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mQWx0ZXJuYXRpdmVzOyArK2kpCi0gICAgICAgICAgICBtYXJrZXIuc2V0QWx0ZXJuYXRpdmUo
aW50ZXJwcmV0YXRpb25zW2kgKyAxXSwgaSk7Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIG1hcmtlcik7Ci0gICAgfQorICAgIGFkZE1hcmtlcihub2RlLCB7
IHR5cGUsIHsgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIH0sIFdURk1vdmUoZGF0
YSkgfSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25S
ZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+
JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChhdXRvIHRl
eHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFya2VyKHRl
eHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVu
ZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4oKSwgbWV0YWRhdGEpKTsKKyAgICAv
LyBGSVhNRTogU2luY2UgdGhlIG1hcmtlciBpcyBhbHJlYWR5IHN0b3JlZCBpbiBhIG1hcCBrZXll
ZCBieSBub2RlLCB3ZSBjYW4gcHJvYmFibHkgY2hhbmdlIHRoaW5ncyBhcm91bmQgc28gd2UgZG9u
J3QgaGF2ZSB0byBhbHNvIHN0b3JlIHRoZSBub2RlIGluIHRoZSBtYXJrZXIuCisgICAgZm9yIChh
dXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisgICAgICAgIGFkZE1h
cmtlcih0ZXh0UGllY2Uubm9kZSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRl
eHRQaWVjZS5yYW5nZSwgUmVmUHRyPE5vZGU+IHsgdGV4dFBpZWNlLm5vZGUucHRyKCkgfSB9KTsK
IH0KIAotI2VuZGlmCi0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2Vk
Q29udGVudE1hcmtlcihSYW5nZSYgcmFuZ2UpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6
IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJh
Z2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250ZW50RGF0YSB7IHRleHRQaWVjZS0+Zmlyc3ROb2Rl
KCkgfTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBE
b2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwg
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwot
ICAgIH0KLX0KLQotI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtl
cihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJs
YXBSdWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhy
YW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0
YSB0ZXh0Q2hlY2tpbmdEYXRhIHsga2V5LCB2YWx1ZSB9OwotICAgICAgICBhZGRNYXJrZXIodGV4
dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgp
LCBXVEZNb3ZlKHRleHRDaGVja2luZ0RhdGEpIH0pOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFu
Z2VzKHJhbmdlKSkgewotICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBl
cykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9m
ZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNl
dCgpOwotICAgICAgICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgbnVsbHB0
ciwgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIH0KKyAgICBm
aWx0ZXJNYXJrZXJzKHJhbmdlLCBudWxscHRyLCB0eXBlcywgb3ZlcmxhcFJ1bGUpOwogfQogCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2VycyhSYW5nZSYgcmFuZ2Us
IHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1
bWVudE1hcmtlciYpPiYgZmlsdGVyLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJsYXBS
dWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5n
ZSkpIHsKLSAgICAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAg
IGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7CisgICAg
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKLQotICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFy
a2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQg
LSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIGZpbHRlckZ1bmN0aW9uLCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBp
ZWNlLm5vZGUsIHRleHRQaWVjZS5yYW5nZSwgdHlwZXMsIGZpbHRlciwgb3ZlcmxhcFJ1bGUpOwog
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcihSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFu
b2RlLmRvY3VtZW50KCkudmlldygpIHx8ICFub2RlLmRvY3VtZW50KCkudmlldygpLT5uZWVkc0xh
eW91dCgpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0
IHdlIGRvbid0IHVzZSBSYW5nZSAoYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lIE5vZGUpLCBidXQg
c3RpbGwgc2hhcmUgY29kZSB3aXRoIGFic29sdXRlVGV4dFF1YWRzKCkuCi0gICAgYXV0byBtYXJr
ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpLCAmbm9kZSwgbWFya2VyLnN0
YXJ0T2Zmc2V0KCksICZub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGFic29sdXRlTWFya2VyUXVhZHM7Ci0gICAgbWFya2VyUmFuZ2UtPmFic29sdXRlVGV4
dFF1YWRzKGFic29sdXRlTWFya2VyUXVhZHMsIHRydWUpOwotCi0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYWJzb2x1dGVNYXJrZXJSZWN0czsKLSAgICBhYnNvbHV0ZU1hcmtlclJlY3RzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYWJzb2x1dGVNYXJrZXJRdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgcXVhZCA6IGFic29sdXRlTWFya2VyUXVhZHMpCi0gICAgICAgIGFic29sdXRlTWFy
a2VyUmVjdHMudW5jaGVja2VkQXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7Ci0KLSAgICBtYXJr
ZXIuc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhhYnNvbHV0ZU1hcmtlclJlY3RzKTsKKyAgICBh
dXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpIH0s
IHsgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKKyAgICBtYXJrZXIuc2V0VW5jbGlwcGVk
QWJzb2x1dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVh
ZHMocmFuZ2UsIHRydWUpKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCkKQEAgLTE5NSw4ICsxMTQsOCBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCiAg
ICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYg
bWFya2VycyA6IG1fbWFya2Vycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICptYXJrZXJzKQorICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMudmFs
dWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMpCiAgICAg
ICAgICAgICBtYXJrZXIuaW52YWxpZGF0ZSgpOwogICAgIH0KIApAQCAtMjA5LDcgKzEyOCw3IEBA
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJz
SW5Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE1hcmtlckxpc3QqIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAg
ICBhdXRvIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBBU1NFUlQobWFya2Vy
cyk7CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICptYXJrZXJzKQpAQCAtMjMyLDQxICsxNTEs
MzMgQEAgc3RhdGljIHZvaWQgdXBkYXRlTWFpbkZyYW1lTGF5b3V0SWZOZWVkZWQoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIG1haW5GcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnVwZGF0
ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlIG1hcmtlclR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6dXBkYXRlUmVj
dHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
dHlwZSkKIHsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlKSkKKyAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKLQotICAgIGJvb2wgbmVlZHNMYXlvdXRJZkFueVJl
Y3RzQXJlRGlydHkgPSB0cnVlOwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1f
bWFya2VycykgewotICAgICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKLSAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAg
ICAgICAgIGlmIChtYXJrZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICAg
ICAgaWYgKG1hcmtlci5pc1ZhbGlkKCkpCisgICAgYm9vbCB1cGRhdGVkTGF5b3V0ID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBmb3Ig
KGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkgeworICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlKCkgIT0gdHlwZSB8fCBtYXJrZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBXZSdsbCBkbyB1cCB0byBvbmUgbGF5b3V0IHBl
ciBjYWxsIGlmIHdlIGhhdmUgYW55IGRpcnR5IG1hcmtlcnMuCi0gICAgICAgICAgICBpZiAobmVl
ZHNMYXlvdXRJZkFueVJlY3RzQXJlRGlydHkpIHsKKyAgICAgICAgICAgIGlmICghdXBkYXRlZExh
eW91dCkgewogICAgICAgICAgICAgICAgIHVwZGF0ZU1haW5GcmFtZUxheW91dElmTmVlZGVkKG1f
ZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdXBkYXRlZExheW91dCA9IHRydWU7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCBub2RlKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCAqbm9kZU1hcmtlcnMua2V5KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotVmVjdG9yPEZsb2F0
UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQorVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlc3Vs
dDsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQorICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKHR5cGUpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIEFT
U0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQpAQCAtMjc1LDI2ICsxODYsMjYgQEAgVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUpOworICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKHR5cGUpOwogCiAgICAgYm9v
bCBpc1N1YmZyYW1lID0gIWZyYW1lLT5pc01haW5GcmFtZSgpOwogICAgIEludFJlY3Qgc3ViZnJh
bWVDbGlwUmVjdDsKICAgICBpZiAoaXNTdWJmcmFtZSkKICAgICAgICAgc3ViZnJhbWVDbGlwUmVj
dCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZVZpZXctPndpbmRvd0NsaXBSZWN0
KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAg
ICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKKyAgICBmb3IgKGF1dG8mIG5v
ZGVNYXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlTWFy
a2Vycy5rZXktPnJlbmRlcmVyKCk7CiAgICAgICAgIEZsb2F0UmVjdCBvdmVyZmxvd0NsaXBSZWN0
OwotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkK
KyAgICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAgb3ZlcmZsb3dDbGlwUmVjdCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5v
ZGVNYXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSB0eXBl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBhdXRvIHJlbmRlcmVk
UmVjdHMgPSBtYXJrZXIudW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpOwogCiAgICAgICAgICAgICAv
LyBDbGlwIGRvY3VtZW50IG1hcmtlcnMgYnkgdGhlaXIgb3ZlcmZsb3cgY2xpcC4KLSAgICAgICAg
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHJlbmRlcmVkUmVjdHMpCiAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KG92ZXJmbG93Q2xpcFJlY3QpOwogICAgICAgICAg
ICAgfQpAQCAtMzE1LDIxICsyMjYsMjAgQEAgVmVjdG9yPEZsb2F0UmVjdD4gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCitzdGF0aWMgYm9vbCBzaG91bGRJ
bnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAj
aWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAgIGlmIChuZXdNYXJr
ZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZykKKyAgICBp
ZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcp
CiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzIHx8IG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvblJlc3VsdCkKKyAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyB8fCBtYXJrZXIudHlwZSgpID09
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCi0gICAgaWYgKG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBXVEY6OmdldDxEb2N1
bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXRO
b2RlKQotICAgICAgICAgICAgcmV0dXJuIHRhcmdldE5vZGUtPnJlbmRlcmVyKCkgJiYgdGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJSZXBsYWNlZCgpOwotICAgIH0KKworICAgIGlmICht
YXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkKKyAgICAgICAg
cmV0dXJuIGlzPFJlbmRlclJlcGxhY2VkPihXVEY6OmdldDxSZWZQdHI8Tm9kZT4+KG1hcmtlci5k
YXRhKCkpLT5yZW5kZXJlcigpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMzNyw3ICsy
NDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERv
Y3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiAvLyBNYXJrZXJzIGFyZSBzdG9yZWQgaW4gb3JkZXIg
c29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNldC4KIC8vIE1hcmtlcnMgb2YgdGhlIHNhbWUgdHlw
ZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVyLgogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJr
ZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IERvY3VtZW50TWFya2VyJiYgbmV3TWFya2VyKQogewogICAgIEFTU0VSVChuZXdNYXJrZXIuZW5k
T2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwogICAgIGlmIChuZXdNYXJrZXIu
ZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCkBAIC0zNTMsMTEgKzI2Mywx
MSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMuYWRkKG5ld01hcmtlci50eXBlKCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOworICAgIGF1dG8mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKLSAgICAgICAgbGlzdCA9IG1ha2VV
bmlxdWU8TWFya2VyTGlzdD4oKTsKLSAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIobmV3TWFya2VyKSk7CisgICAgICAgIGxpc3QgPSBtYWtlVW5pcXVlPFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyPj4oKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIGlmIChzaG91
bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKG5ld01hcmtlcikpIHsKICAgICAgICAgLy8gV2UgZG9u
J3QgbWVyZ2UgZGljdGF0aW9uIG1hcmtlcnMuCiAgICAgICAgIHNpemVfdCBpOwpAQCAtMzY3LDkg
KzI3Nyw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYg
bm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAgICAgICBpZiAobWFya2Vy
LnN0YXJ0T2Zmc2V0KCkgPiBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1
bWVudE1hcmtlcihuZXdNYXJrZXIpKTsKKyAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChuZXdNYXJrZXIpOworICAgICAgICBS
ZW5kZXJlZERvY3VtZW50TWFya2VyIHRvSW5zZXJ0KFdURk1vdmUobmV3TWFya2VyKSk7CiAgICAg
ICAgIHNpemVfdCBudW1NYXJrZXJzID0gbGlzdC0+c2l6ZSgpOwogICAgICAgICBzaXplX3QgaTsK
ICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBtYXJrZXJzIHdob3NlIHN0YXJ0IG9mZnNldCBp
cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG5ldyBtYXJrZXIncy4KQEAgLTQxNCwxMDIgKzMy
NCw5OSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5v
ZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgIGludmFsaWRhdGVSZWN0c0Zvck1h
cmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKLS8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9kZSB0
byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3Bp
ZXMuICBUaGUgc2hpZnQgaXMKLS8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3Jl
YXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNyY05v
ZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc3Jj
Tm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGlu
dCBkZWx0YSkKKy8vIENvcGllcyBtYXJrZXJzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBh
cHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3BpZXMuIFRoZSBzaGlm
dCBpcworLy8gdXNlZnVsIGlmLCBlLmcuLCB0aGUgY2FsbGVyIGhhcyBjcmVhdGVkIHRoZSBkZXN0
aW5hdGlvbiBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNvdXJjZS4KK3ZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNl
dFJhbmdlIHJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbikKIHsKLSAgICBpZiAobGVuZ3RoIDw9IDAp
CisgICAgaWYgKHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0g
ICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUpOworICAgIGF1dG8g
bGlzdCA9IG1fbWFya2Vycy5nZXQoJnNvdXJjZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOworICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBm
YWxzZTsKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIC8vIHN0b3Ag
aWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAgICAgaWYgKG1hcmtl
ci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQorICAgICAgICAvLyBTdG9wIGlmIHdlIGFyZSBu
b3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zm
c2V0KCkgPj0gcmFuZ2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8gc2tp
cCBtYXJrZXIgdGhhdCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCByYW5nZSBvciBpcyB0aGUgd3Jv
bmcgdHlwZQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQpCisg
ICAgICAgIC8vIFNraXAgbWFya2VyIHRoYXQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgcmFuZ2Uu
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCByYW5nZS5zdGFydCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIHBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZp
ZWQgcmFuZ2UgYW5kIGFwcGx5IHRoZSBzaGlmdCBkZWx0YQotICAgICAgICBkb2NEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgbWFya2VyLnNldFN0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkKLSAgICAgICAgICAgIG1hcmtlci5zZXRF
bmRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7
CisgICAgICAgIC8vIFBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIGFw
cGx5IHRoZSBzaGlmdCBkZWx0YS4KKyAgICAgICAgYXV0byBjb3BpZWRNYXJrZXIgPSBtYXJrZXI7
CisgICAgICAgIGlmIChjb3BpZWRNYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHJhbmdlLnN0YXJ0KQor
ICAgICAgICAgICAgY29waWVkTWFya2VyLnNldFN0YXJ0T2Zmc2V0KHJhbmdlLnN0YXJ0KTsKKyAg
ICAgICAgaWYgKGNvcGllZE1hcmtlci5lbmRPZmZzZXQoKSA+PSByYW5nZS5lbmQpCisgICAgICAg
ICAgICBjb3BpZWRNYXJrZXIuc2V0RW5kT2Zmc2V0KHJhbmdlLmVuZCk7CiAKLSAgICAgICAgYWRk
TWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtlcihkZXN0aW5hdGlvbiwg
V1RGTW92ZShjb3BpZWRNYXJrZXIpKTsKKyAgICAgICAgbmVlZFJlcGFpbnQgPSB0cnVlOwogICAg
IH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIGRz
dE5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChuZWVkUmVwYWludCkgeworICAg
ICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRlc3RpbmF0aW9uLnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXMsIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIE9mZnNldFJhbmdlIHJhbmdlLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7Ci0g
ICAgaWYgKGxlbmd0aCA8PSAwKQorICAgIGlmIChyYW5nZS5zdGFydCA+PSByYW5nZS5lbmQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7CisgICAgQVNTRVJUKCFtX21hcmtl
cnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZu
b2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxp
c3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTspIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CisgICAgYm9vbCBuZWVkUmVwYWludCA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyApIHsKKyAgICAgICAgYXV0byYgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgLy8gbWFya2VycyBhcmUgcmV0dXJuZWQgaW4g
b3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKKyAgICAgICAgaWYg
KG1hcmtlci5zdGFydE9mZnNldCgpID49IHJhbmdlLmVuZCkKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFy
Z2V0Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgfHwgIW1h
cmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7CisgICAgICAgIGlmIChtYXJrZXIu
ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uuc3RhcnQgfHwgIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBl
KCkpKSB7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbiAmJiAhZmlsdGVyRnVuY3Rpb24oJm1hcmtl
cikpIHsKKyAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKG1hcmtlcikpIHsKICAgICAgICAg
ICAgIGkrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
YXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGlu
IHNvbWUgd2F5Ci0gICAgICAgIGRvY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGluIHNvbWUgd2F5
LgorICAgICAgICBuZWVkUmVwYWludCA9IHRydWU7CiAKLSAgICAgICAgLy8gcGl0Y2ggdGhlIG9s
ZCBtYXJrZXIKICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwotCiAgICAgICAgIGlmIChzaG91bGRS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKLSAgICAgICAgICAgIC8vIFN0b3AgaGVy
ZS4gRG9uJ3QgYWRkIHJlc3VsdGluZyBzbGljZXMgYmFjay4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIC8vIGFkZCBlaXRoZXIgb2YgdGhlIHJlc3VsdGluZyBzbGljZXMgdGhhdCBh
cmUgbGVmdCBhZnRlciByZW1vdmluZyB0YXJnZXQKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4g
bWFya2VyLnN0YXJ0T2Zmc2V0KCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ID4gbWFya2Vy
LnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQgPSBt
YXJrZXI7Ci0gICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChzdGFydE9mZnNldCk7Ci0g
ICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdMZWZ0
KSk7CisgICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChyYW5nZS5zdGFydCk7CisgICAg
ICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihXVEZNb3ZlKG5l
d0xlZnQpKSk7CiAgICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2Vy
dGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsK
ICAgICAgICAgfQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gZW5kT2Zmc2V0KSB7
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiByYW5nZS5lbmQpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyIG5ld1JpZ2h0ID0gbWFya2VyOwotICAgICAgICAgICAgbmV3Umln
aHQuc2V0U3RhcnRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIGxpc3QtPmluc2VydChp
LCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld1JpZ2h0KSk7CisgICAgICAgICAgICBuZXdSaWdo
dC5zZXRTdGFydE9mZnNldChyYW5nZS5lbmQpOworICAgICAgICAgICAgbGlzdC0+aW5zZXJ0KGks
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdSaWdodCkpKTsKICAgICAgICAgICAg
IC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwgYnV0IHdlIHdhbnQg
dG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CkBAIC01MjEsMTE3
ICs0MjgsMTE3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpCiAgICAgICAgICAgICBtX3Bvc3Np
Ymx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkg
JiYgbm9kZS5yZW5kZXJlcigpKQotICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
KyAgICBpZiAobmVlZFJlcGFpbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBub2Rl
LnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0K
IAotRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSkKK0RvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtl
cnMobWFya2VyVHlwZSkpCisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsK
LQotICAgIHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUp
OwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAgICAg
ICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlQW5kTWFya2Vycy52YWx1ZSkgewotICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlKCkgIT0gbWFya2VyVHlwZSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBp
ZiAobWFya2VyLmNvbnRhaW5zKHBvaW50KSkKKyAgICB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVk
TWFya2Vyc09mVHlwZSh0eXBlKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9tYXJr
ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJrZXJz
KSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSA9PSB0eXBlICYmIG1hcmtlci5jb250
YWlucyhwb2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZtYXJrZXI7CiAgICAgICAgIH0K
ICAgICB9Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSYgbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK1Zl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpt
YXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQor
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gcmVzdWx0OwotICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIGlmIChtYXJrZXJU
eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KG1hcmtlci50eXBlKCkpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgmbWFya2VyKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmIHJh
bmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQor
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZvckVhY2goY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBGdW5j
dGlvbjxib29sKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImKT4gZnVuY3Rpb24pCiB7Ci0gICAgaWYg
KCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICByZXR1cm4gVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPigpOwotCi0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5k
Q29udGFpbmVyKCk7CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1hcmtlcik7CisgICAg
Zm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlm
IChhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKSkgeworICAgICAgICAgICAgYXV0byBv
ZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7CisgICAgICAgICAgICAgICAgLy8g
TWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0
aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZz
ZXQoKSA+PSBvZmZzZXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBvZmZzZXRSYW5nZS5zdGFydCAm
JiB0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZnVuY3Rpb24obWFya2VyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGZvdW5kTWFya2VyczsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAg
aWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIC8vIEZJWE1FOiBDb25z
aWRlciBtYWtpbmcgZm9yRWFjaCBwdWJsaWMgYW5kIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRo
YXQgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGlzIG9uZS4KKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnM7CisgICAgZm9yRWFjaChyYW5nZSwgdHlwZXMsIFsmXSAoUmVu
ZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIG1hcmtlcnMuYXBwZW5kKCZt
YXJrZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIG1hcmtl
cnM7Cit9CisKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5v
ZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCit7
CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKICAgICAKICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9tYXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMu
ZW5kKCkpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlw
ZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIHR5cGVzKTsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2Vy
VHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBmb3IgKGF1dG8m
IG5vZGUgOiBjb3B5VG9WZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpIHsKLSAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
bV9tYXJrZXJzLmVuZCgpKQotICAgICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0ZXJh
dG9yLCBtYXJrZXJUeXBlcyk7Ci0gICAgfQotCi0gICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2Vy
VHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb3B5VG9W
ZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpCisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdCht
X21hcmtlcnMuZmluZChub2RlKSwgdHlwZXMpOworICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtl
clR5cGVzLnJlbW92ZSh0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjpp
dGVyYXRvciBpdGVyYXRvciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0
eXBlcykKIHsKICAgICBib29sIG5lZWRzUmVwYWludGluZyA9IGZhbHNlOwogICAgIGJvb2wgbGlz
dENhbkJlUmVtb3ZlZDsKIAotICAgIGlmIChtYXJrZXJUeXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6
YWxsTWFya2VycygpKSB7CisgICAgaWYgKHR5cGVzID09IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCkpIHsKICAgICAgICAgbmVlZHNSZXBhaW50aW5nID0gdHJ1ZTsKICAgICAgICAgbGlzdENh
bkJlUmVtb3ZlZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFya2VyTGlzdCogbGlz
dCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgYXV0byBsaXN0ID0gaXRlcmF0b3It
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNp
emUoKTsgKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChp
KTsKIAogICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCi0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50
eXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkp
KSB7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQpAQCAtNjU3LDMxICs1NjQsMjAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG8K
ICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vy
cyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01h
cmtlcnMobWFya2VyVHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1l
bnQKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1fbWFya2VycykgewotICAgICAgICBOb2RlKiBu
b2RlID0gbWFya2VyLmtleS5nZXQoKTsKLQotICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNz
IGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgYm9vbCBub2RlTmVlZHNS
ZXBhaW50ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFy
a2VyLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMoZG9jdW1l
bnRNYXJrZXIudHlwZSgpKSkgewotICAgICAgICAgICAgICAgIG5vZGVOZWVkc1JlcGFpbnQgPSB0
cnVlOworICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICh0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZU1hcmtlcnMua2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAg
ICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlTmVlZHNSZXBhaW50KQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gY2F1c2UgdGhlIG5vZGUgdG8gYmUg
cmVkcmF3bgotICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgIH0KIH0KIApAQCAtNjkxLDE1ICs1
ODcsMTYgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2Rl
JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9t
YXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7
CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGRpZFNoaWZ0TWFy
a2VyID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyAp
IHsKLSAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7
Ci0gICAgICAgIC8vIEZJWE1FOiBIb3cgY2FuIHRoaXMgcG9zc2libHkgYmUgaU9TLXNwZWNpZmlj
IGNvZGU/CisgICAgICAgIGF1dG8mIG1hcmtlciA9IGxpc3QtPmF0KGkpOworCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29uIHRoaXMg
c2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2ludC4KICAg
ICAgICAgaW50IHRhcmdldFN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0
YTsKICAgICAgICAgaW50IHRhcmdldEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKSArIGRl
bHRhOwogICAgICAgICBpZiAodGFyZ2V0U3RhcnRPZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgewpAQCAtNzA3LDE2ICs2MDQsMTUgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKKwogICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gc3RhcnRPZmZz
ZXQpIHsKICAgICAgICAgICAgIEFTU0VSVCgoaW50KW1hcmtlci5zdGFydE9mZnNldCgpICsgZGVs
dGEgPj0gMCk7CiAgICAgICAgICAgICBtYXJrZXIuc2hpZnRPZmZzZXRzKGRlbHRhKTsKICAgICAg
ICAgICAgIGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IEluc2VydGluZyB0ZXh0IGluc2lk
ZSBhIERvY3VtZW50TWFya2VyIGRvZXMgbm90IGdyb3cgdGhlIG1hcmtlci4KLSAgICAgICAgLy8g
U2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1MDQ+LgotICAg
ICAgICB9IGVsc2UgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IHN0YXJ0T2Zmc2V0KSB7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29u
IHRoaXMgc2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2lu
dC4KKyAgICAgICAgZWxzZSBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gc3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YSA8PSBtYXJrZXIuc3Rh
cnRPZmZzZXQoKSkgewogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTcyNSwxNDAgKzYyMSw1OCBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbgogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9CiAj
ZW5kaWYKKwogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7
CiAgICAgICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7Ci0KLSAgICAg
ICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVw
YWludCgpOwotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1h
cmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFy
dENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFp
bmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSBy
YW5nZS5wYXN0TGFzdE5vZGUoKTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0
Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRD
b250YWluZXIgPyByYW5nZS5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5k
T2Zmc2V0ID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIHNldE1hcmtlcnNBY3Rp
dmUoKm5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGJvb2wgYWN0aXZlKQorYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhh
c01hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KCZub2RlKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgZGlkQWN0aXZhdGVNYXJrZXIgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICps
aXN0KSB7Ci0gICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9w
IGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgotICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gU2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQu
Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFydE9mZnNldCB8fCBtYXJrZXIu
dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBtYXJrZXIuc2V0QWN0aXZlTWF0Y2goYWN0aXZlKTsKLSAgICAgICAgZGlk
QWN0aXZhdGVNYXJrZXIgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtl
ciAmJiBub2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgp
OworICAgIGJvb2wgZm91bmRNYXJrZXIgPSBmYWxzZTsKKyAgICBmb3JFYWNoKHJhbmdlLCB0eXBl
cywgWyZdIChSZW5kZXJlZERvY3VtZW50TWFya2VyJikgeworICAgICAgICBmb3VuZE1hcmtlciA9
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIHJldHVybiBmb3VuZE1h
cmtlcjsKIH0KIAotYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFu
Z2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1h
cmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJs
eUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIGZvckVhY2gocmFuZ2UsIHR5cGVzLCBbJl0g
KFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlcikgeworICAgICAgICBtYXJrZXIuY2xlYXJE
YXRhKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0g
ICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUpOwot
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5l
ciAmJiBtYXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5z
dGFydE9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
IChub2RlID09ICZlbmRDb250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRl
c2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQotewotICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2Uu
ZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFz
dE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAg
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUg
PT0gJmVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQo
KSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoIWxpc3QpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciYgbWFya2VyID0g
bGlzdC0+YXQoaSk7Ci0KLSAgICAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9y
ZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAg
ICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25n
IHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAgICAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQo
KSA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hcmtlci5jbGVhckRhdGEoKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKKwogdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKIHsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhhdmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgbWFya2VyIDogbV9tYXJrZXJzKSB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSBtYXJrZXIua2V5LmdldCgpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9k
ZSk7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFya2VyLnZhbHVlKQot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBkb2N1bWVudE1h
cmtlci50eXBlKCksIGRvY3VtZW50TWFya2VyLnN0YXJ0T2Zmc2V0KCksIGRvY3VtZW50TWFya2Vy
LmVuZE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5pc0FjdGl2ZU1hdGNoKCkpOwotCi0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9t
YXJrZXJzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2RlTWFya2Vycy5rZXku
Z2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0iLCBtYXJrZXIudHlwZSgp
LCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICAgICAgZnB1
dGMoJ1xuJywgc3RkZXJyKTsKICAgICB9CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgc2hvd0RvY3VtZW50
TWFya2Vycyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCiB7CiAgICAgaWYgKGNvbnRyb2xsZXIpCiAgICAgICAgIGNvbnRyb2xsZXItPnNob3dNYXJr
ZXJzKCk7CiB9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oCmluZGV4IDYzMDVhYTY2YzE2ZTY5Y2M2NzU2ZGUyODg1OTJiZWNmYzg4MDEx
MTAuLjg2ZWIwZmRjZjZiY2U1MDZkMWYzZmE1M2Y5Zjg2NzRmYzVmZTIzYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyArMyw3IEBA
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKQEAgLTM1LDY1ICszNSw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgTGF5b3V0UG9pbnQ7Ci1jbGFzcyBMYXlvdXRSZWN0OwogY2xhc3Mg
Tm9kZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyZWREb2N1bWVudE1hcmtlcjsKK2NsYXNz
IFRleHQ7CiAKIHN0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLQogICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcihEb2N1bWVudCYpOwogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJr
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Ci0gICAgdm9p
ZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlclRv
Tm9kZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBhY3Rp
dmVNYXRjaCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIGFkZE1hcmtlcihS
YW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5Q
dHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKFJhbmdlJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9u
cyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0jZW5kaWYKLSAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKFJhbmdlJik7CiAKLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVO
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRQbGF0Zm9ybVRleHRD
aGVja2luZ01hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWFy
a2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0
IERvY3VtZW50TWFya2VyOjpEYXRhJiA9IHsgfSk7CisgICAgdm9pZCBhZGRNYXJrZXIoVGV4dCYs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKKyAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICB2b2lkIGNvcHlN
YXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBO
b2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpOwotICAgIGJvb2wgaGFzTWFya2VycygpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4
aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSkpOwotICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIGJv
b2wgaGFzTWFya2VycyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIGNvcHlNYXJrZXJz
KE5vZGUmIHNvdXJjZSwgT2Zmc2V0UmFuZ2UsIE5vZGUmIGRlc3RpbmF0aW9uKTsKKyAgICBib29s
IGhhc01hcmtlcnMoKSBjb25zdDsKKyAgICBib29sIGhhc01hcmtlcnMoY29uc3QgU2ltcGxlUmFu
Z2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJr
ZXI6OmFsbE1hcmtlcnMoKSk7CiAKICAgICAvLyBXaGVuIGEgbWFya2VyIHBhcnRpYWxseSBvdmVy
bGFwcyB3aXRoIHJhbmdlLCBpZiByZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcnMgaXMg
dHJ1ZSwgd2UgY29tcGxldGVseQogICAgIC8vIHJlbW92ZSB0aGUgbWFya2VyLiBJZiB0aGUgYXJn
dW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBzcGFuIG9mIHRoZSBtYXJrZXIgc28g
dGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24gdGhhdCBpcyBvdXRzaWRlIG9mIHRo
ZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qg
eyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyLCBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlciB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2Vy
cyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVu
dE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9y
Tm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgdm9pZCBy
ZW1vdmVNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCksIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBE
b05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT2Zmc2V0
UmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERvY3VtZW50TWFy
a2VyJik+JiBmaWx0ZXJGdW5jdGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IAogICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGZpbHRlckZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUg
bWFya2VyLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsdGVyTWFya2VycyhSYW5nZSYsIHN0
ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bHRlck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0
IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSk7CiAgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7
CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CiAgICAgdm9pZCBzaGlmdE1h
cmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpOwotICAgIHZvaWQg
c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJvb2wpOwotICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2
ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1h
cmtlcnNGb3IoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CisgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUpOwogCkBAIC0xMDgsMTEgKzg5LDE4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwot
ICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVS
YW5nZSYpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBEb2N1bWVudE1hcmtlciYmKTsKKwor
ICAgIHN0cnVjdCBUZXh0UmFuZ2UgeworICAgICAgICBSZWY8Tm9kZT4gbm9kZTsKKyAgICAgICAg
T2Zmc2V0UmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBWZWN0b3I8VGV4dFJhbmdlPiBjb2xsZWN0
VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOworCisgICAgdm9pZCBmb3JFYWNoKGNvbnN0
IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgY29u
c3QgRnVuY3Rpb248Ym9vbChSZW5kZXJlZERvY3VtZW50TWFya2VyJik+KTsKKworICAgIHVzaW5n
IE1hcmtlck1hcCA9IEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+Pj47CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4gTWFya2VyTWFwOwogICAgIGJvb2wg
cG9zc2libHlIYXNNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4p
OwogICAgIHZvaWQgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCkBAIC0xMjIsNiArMTEwLDEy
IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCitpbmxpbmUgYm9v
bCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoKSBjb25zdAoreworICAgIEFT
U0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBl
cy5jb250YWluc0FueShEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CisgICAgcmV0dXJu
ICFtX21hcmtlcnMuaXNFbXB0eSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzlkYmQ1
ZTUzYTNlNjIyMTRhZDhlNDdlODg0Y2I2MDczNTM1ODNmZi4uYjI4MTRiMDBlZmY4ZmFlZjdhNjEx
ZDhiM2Q3YWZlN2UxNWMyOTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM4OSwxNSAr
MTM4OSw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5Sb290Vmlld1NwYWNlKCkKICAgICAg
ICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmFic29sdXRlUXVhZHMocXVhZHMpOwogICAg
IH0KIAotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0KLSAgICBJbnRSZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVzdWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAgcmVz
dWx0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3Qo
dW5pdGVkQm91bmRpbmdCb3hlcyhxdWFkcykpKTsKIH0KIAogc3RhdGljIGJvb2wgbGF5b3V0T3Zl
cmZsb3dSZWN0Q29udGFpbnNBbGxEZXNjZW5kYW50cyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJv
eCkKQEAgLTE0NjQsMTEgKzE0NTYsNyBAQCBMYXlvdXRSZWN0IEVsZW1lbnQ6OmFic29sdXRlRXZl
bnRCb3VuZHMoYm9vbCYgYm91bmRzSW5jbHVkZUFsbERlc2NlbmRhbnRFbGVtZW50cwogICAgICAg
ICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCBsb2NhbFJlY3QoMCwgMCwgYm94LndpZHRoKCksIGJveC5oZWlnaHQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZyYWdtZW50ZWRGbG93LT5hYnNvbHV0ZVF1YWRzRm9yQm94KHF1YWRzLCAm
d2FzRml4ZWQsICZib3gsIGxvY2FsUmVjdC55KCksIGxvY2FsUmVjdC5tYXhZKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBxdWFkQm91bmRzID0gcXVhZHNbMF0uYm91bmRpbmdC
b3goKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRCb3VuZHMudW5pdGUocXVh
ZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHF1YWRCb3VuZHMpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKICAg
ICAgICAgICAgICAgICAgICAgY29tcHV0ZWRCb3VuZHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IGNvbHVtbnMuIEp1c3Qg
cmV0dXJuIHRoZSBib3VuZHMgb2YgdGhlIG11bHRpY29sIGJsb2NrIGZvciBub3cuCkBAIC0xNjAz
LDExICsxNTkxLDcgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPFJlbmRlck9iamVjdCosIEZsb2F0UmVj
dD4+IEVsZW1lbnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG8KICAgICBpZiAocXVhZHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRmxvYXRSZWN0IHJl
c3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHF1YWRzW2ldLmJvdW5k
aW5nQm94KCkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlbmRlcmVyLCByZXN1bHQp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZW5kZXJlciwgdW5pdGVkQm91bmRpbmdCb3hl
cyhxdWFkcykpOwogfQogCiBGbG9hdFJlY3QgRWxlbWVudDo6Ym91bmRpbmdDbGllbnRSZWN0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCmluZGV4IGQyMDhjNzE3OTY5MTcyYWM0MTEzNzgwMjJkNDhjYTg3ZWFjMGVmMzcu
LjllNjBhNDA4Zjk3MzIxYjNiOTc5ZTJmM2Q5Mjk1ZWJhNzU0YjNjNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApA
QCAtMjAzLDcgKzIwMyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIGJvb2wgaXNTdHlsZWRFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0hUTUxGbGFnKSB8fCBnZXRGbGFnKElzU1ZH
RmxhZykgfHwgZ2V0RmxhZyhJc01hdGhNTEZsYWcpOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXR0
cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXND
aGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFpc0NvbnRhaW5lck5vZGUoKSAmJiAo
aXNUZXh0Tm9kZSgpIHx8IHZpcnR1YWxJc0NoYXJhY3RlckRhdGEoKSk7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZU93bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzUGx1Z2luRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCkBAIC0zMTEsMTkgKzMxMSwyMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNFdmVudFRhcmdldERhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhh
c0V2ZW50VGFyZ2V0RGF0YUZsYWcpOyB9CiAgICAgdm9pZCBzZXRIYXNFdmVudFRhcmdldERhdGEo
Ym9vbCBmbGFnKSB7IHNldEZsYWcoZmxhZywgSGFzRXZlbnRUYXJnZXREYXRhRmxhZyk7IH0KIAot
ICAgIGVudW0gVXNlclNlbGVjdEFsbFRyZWF0bWVudCB7Ci0gICAgICAgIFVzZXJTZWxlY3RBbGxE
b2VzTm90QWZmZWN0RWRpdGFiaWxpdHksCi0gICAgICAgIFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05v
bkVkaXRhYmxlCi0gICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRh
YmxlKCk7CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBpbnNwZWN0KCk7CiAKKyAgICBlbnVtIFVzZXJTZWxlY3RBbGxUcmVhdG1l
bnQgeworICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmlsaXR5LAorICAg
ICAgICBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQorICAgIH07CiAgICAgYm9vbCBo
YXNFZGl0YWJsZVN0eWxlKFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJlYXRtZW50ID0gVXNlclNl
bGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
Y29tcHV0ZUVkaXRhYmlsaXR5KHRyZWF0bWVudCwgU2hvdWxkVXBkYXRlU3R5bGU6OkRvTm90VXBk
YXRlKSAhPSBFZGl0YWJpbGl0eTo6UmVhZE9ubHk7CiAgICAgfQorCiAgICAgLy8gRklYTUU6IFJl
cGxhY2UgZXZlcnkgdXNlIG9mIHRoaXMgZnVuY3Rpb24gYnkgaGVscGVycyBpbiBFZGl0aW5nLmgK
ICAgICBib29sIGhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSBjb25zdAogICAgIHsKQEAgLTM0Mywx
MiArMzQ0LDggQEAgcHVibGljOgogICAgIC8vIG9mIGEgRG9jdW1lbnQgbm9kZS4KICAgICBXRUJD
T1JFX0VYUE9SVCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogCi0gICAgLy8gUmV0
dXJucyB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgICAvLyBBIERv
Y3VtZW50IG5vZGUgcmV0dXJucyBpdHNlbGYuCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7Ci0g
ICAgfQorICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5v
ZGUuIEEgZG9jdW1lbnQgbm9kZSByZXR1cm5zIGl0c2VsZi4KKyAgICBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7IH0KIAogICAg
IFRyZWVTY29wZSYgdHJlZVNjb3BlKCkgY29uc3QKICAgICB7CkBAIC0zNjAsMTAgKzM1Nyw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgZG9jdW1lbnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKICAg
ICAvLyBub2RlIHRyZWUsIGZhbHNlIG90aGVyd2lzZSAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cu
b3JnLyNjb25uZWN0ZWQpLgotICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdAotICAgIHsgCi0g
ICAgICAgIHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7Ci0gICAgfQorICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7IH0K
ICAgICBib29sIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lu
U2hhZG93VHJlZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNJblNoYWRvd1RyZWVGbGFnKTsg
fQogICAgIGJvb2wgaXNJblRyZWVTY29wZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoc3RhdGlj
X2Nhc3Q8Tm9kZUZsYWdzPihJc0Nvbm5lY3RlZEZsYWcgfCBJc0luU2hhZG93VHJlZUZsYWcpKTsg
fQpAQCAtMzcxLDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRG9jdW1lbnRUeXBlTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfVFlQRV9OT0RFOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdW5zaWduZWQgY291bnRDaGlsZE5vZGVzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VUb0NoaWxkQXQodW5zaWdu
ZWQpIGNvbnN0OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tTZXRQcmVmaXgoY29uc3Qg
QXRvbVN0cmluZyYgcHJlZml4KTsKQEAgLTQxNSw3ICs0MTAsNiBAQCBwdWJsaWM6CiAgICAgICAg
IERvbmUsCiAgICAgICAgIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrLAogICAgIH07Ci0KICAg
ICBzdHJ1Y3QgSW5zZXJ0aW9uVHlwZSB7CiAgICAgICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVu
dCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CkBA
IC02NDMsNiArNjM3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFBzZXVkb0lkOjpOb25l
OwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlZExh
c3RSZWYoKTsKIAogICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbDsKQEAgLTY3OSw2ICs2
NzUsNyBAQCBwcml2YXRlOgogfTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECisKIGlubGluZSB2b2lk
IGFkb3B0ZWQoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC02ODcsNiArNjg0LDcg
QEAgaW5saW5lIHZvaWQgYWRvcHRlZChOb2RlKiBub2RlKQogICAgIEFTU0VSVCghbm9kZS0+bV9p
blJlbW92ZWRMYXN0UmVmRnVuY3Rpb24pOwogICAgIG5vZGUtPm1fYWRvcHRpb25Jc1JlcXVpcmVk
ID0gZmFsc2U7CiB9CisKICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgTm9kZTo6cmVmKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGJlNGViNjk5NTEw
NDAxODNkYmM0MjA2ZWQwMGQ0OGJkODg0MmYwM2YuLmE3M2M2OWVhZjUwODc4ZGU2Y2MzOWUzNTkz
ZWZlYmU0N2ZkMDExNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE3NywxMSArMTE3Nyw3IEBA
IFZlY3RvcjxGbG9hdFJlY3Q+IFJhbmdlOjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQoTm9k
ZSogbm9kZSwgUmVuZGVyVGV4dCYgcmVuCiAgICAgICAgIHJldHVybiBjbGlwcGVkUmVjdHM7CiAg
ICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gZmxvYXRSZWN0czsKLSAgICBmbG9hdFJlY3Rz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBxdWFkIDogdGV4dFF1YWRzKQotICAgICAgICBmbG9hdFJlY3RzLnVuY2hlY2tlZEFwcGVuZChx
dWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBmbG9hdFJlY3RzOworICAgIHJldHVybiBi
b3VuZGluZ0JveGVzKHRleHRRdWFkcyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5n
ZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PiByZWN0T3B0aW9ucykgY29uc3QKQEAgLTEyMTMsMzMgKzEyMDksNiBAQCB2b2lkIFJhbmdlOjph
YnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCwgUgogICAgICAgICAqaW5GaXhlZCA9IGFsbEZpeGVkID8gRW50aXJlbHlGaXhlZFBv
c2l0aW9uIDogKHNvbWVGaXhlZCA/IFBhcnRpYWxseUZpeGVkUG9zaXRpb24gOiBOb3RGaXhlZFBv
c2l0aW9uKTsKIH0KIAotdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRp
b24qIGluRml4ZWQpIGNvbnN0Ci17Ci0gICAgYm9vbCBhbGxGaXhlZCA9IHRydWU7Ci0gICAgYm9v
bCBzb21lRml4ZWQgPSBmYWxzZTsKLQotICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1
dGVRdWFkcyhxdWFkcywgJmlzRml4ZWQpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUg
PT0gJnN0YXJ0Q29udGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigpID8gbV9lbmQub2Zm
c2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgICAg
ICBxdWFkcy5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5hYnNv
bHV0ZVF1YWRzRm9yUmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgdXNlU2VsZWN0aW9uSGVp
Z2h0LCBmYWxzZSAvKiBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zICovLCAmaXNGaXhlZCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhbGxGaXhlZCAm
PSBpc0ZpeGVkOwotICAgICAgICBzb21lRml4ZWQgfD0gaXNGaXhlZDsKLSAgICB9Ci0KLSAgICBp
ZiAoaW5GaXhlZCkKLSAgICAgICAgKmluRml4ZWQgPSBhbGxGaXhlZCA/IEVudGlyZWx5Rml4ZWRQ
b3NpdGlvbiA6IChzb21lRml4ZWQgPyBQYXJ0aWFsbHlGaXhlZFBvc2l0aW9uIDogTm90Rml4ZWRQ
b3NpdGlvbik7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogc3RhdGljIGJvb2wgaW50
ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcChpbnQgc3RhcnRBLCBpbnQgZW5kQSwgaW50IHN0YXJ0
QiwgaW50IGVuZEIpCiB7CkBAIC0xODMyLDggKzE4MDEsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBS
YW5nZTo6Ym9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSBzcGFjZSwgT3B0aW9uU2V0
PEJvdQogICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVu
dCkKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVU
b0NsaWVudFF1YWRzKGVsZW1lbnRRdWFkcywgcmVuZGVyZXItPnN0eWxlKCkpOwogCi0gICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBxdWFkIDogZWxlbWVudFF1YWRzKQotICAgICAgICAgICAgICAg
ICAgICByZWN0cy5hcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgICAgICBy
ZWN0cyA9IGJvdW5kaW5nQm94ZXMoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5yZW5kZXJlcigpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CmluZGV4IDY5Y2YyYjk3MmVkYThlZjYyM2M3NDRkZTkwMzNjYmE0NmZhM2Q3YjYuLjAyY2ExMzA4
NGM5ODBkMTA4MGFhZjIwOTQwOWEwZmVhZDg5NDIxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMjUs
NyArMTI1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVC
b3VuZGluZ0JveChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+ID0geyB9KSBjb25zdDsK
IAogICAgIC8vIFRyYW5zZm9ybS1mcmllbmRseQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWJz
b2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlLCBSYW5nZUluRml4ZWRQb3NpdGlvbiogPSBudWxscHRyKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJv
dW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
ZW5kZXJlZERvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oCmluZGV4IDg5ZTY0OTNiNzViZGYzMzFmNzJjMjUwYzVkNjQwMzE5M2JiYzM1
YjQuLmVmZWIwNDFkYzQwMTAyYmM1YWVmZGM3ZWVkMTVlNDBhOGEwZjEyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaApAQCAtMzMsOCArMzMsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgOiBwdWJs
aWMgRG9jdW1lbnRNYXJrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKLSAgICAgICAgOiBEb2N1bWVu
dE1hcmtlcihtYXJrZXIpCisgICAgZXhwbGljaXQgUmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1
bWVudE1hcmtlciYmIG1hcmtlcikKKyAgICAgICAgOiBEb2N1bWVudE1hcmtlcihXVEZNb3ZlKG1h
cmtlcikpCiAgICAgewogICAgIH0KIApAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVS
ZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCisgICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNv
bHV0ZVJlY3RzKFZlY3RvcjxGbG9hdFJlY3Q+JiYgcmVjdHMpCiAgICAgewogICAgICAgICBtX2lz
VmFsaWQgPSB0cnVlOwotICAgICAgICBtX3JlY3RzID0gcmVjdHM7CisgICAgICAgIG1fcmVjdHMg
PSBXVEZNb3ZlKHJlY3RzKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0LCAx
PiYgdW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcAppbmRleCA4ZWVhZDA2MWI2MzBkZWRhNTIzNTA5Y2UxM2VlNDY4N2FhMDQ4OWVhLi4wMTBk
ZWY3MTY4Mzk2YTYwZjcwMjU3MDNjOGI0YjFhYzVlNzA2NGNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5jcHAKQEAgLTU0LDI4ICs1NCw0NSBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lt
cGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09
IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKLS8vIEZJWE1FOiBOb2RlOjppc0NoYXJh
Y3RlckRhdGEgc2hvdWxkIHVzZSBhbiBhbGdvcml0aG0gbGlrZSB0aGlzLCBzaW5jZSBJJ20gYXNz
dW1pbmcgaXQncyBmYXN0ZXIgdGhhbiB0aGUgaXNDaGFyYWN0ZXJEYXRhTm9kZSB2aXJ0dWFsIGNh
bGwgaW4gbW9zdCBjYXNlcy4KLXN0YXRpYyBib29sIGZhc3RJc0NoYXJhY3RlckRhdGEoY29uc3Qg
Tm9kZSYgbm9kZSkKK3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gIW5vZGUuaXNDb250YWluZXJO
b2RlKCkgJiYgKG5vZGUuaXNUZXh0Tm9kZSgpIHx8IG5vZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KTsKKyAgICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgpIH07CiB9CiAKLS8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBOb2RlOjpsZW5ndGggc2luY2UgdGhlIERPTSBzcGVjaWZpY2F0aW9uIGNh
bGxzIHRoaXMgYSBub2RlJ3MgbGVuZ3RoLgotc3RhdGljIHVuc2lnbmVkIGxlbmd0aChjb25zdCBO
b2RlJiBub2RlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5v
ZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGZhc3RJc0NoYXJhY3RlckRhdGEobm9kZSkpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPihub2RlKS5sZW5ndGgoKTsKLSAgICByZXR1
cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cyhub2RlKSB9OwogfQogCi1zdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCitSZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5n
Tm9kZVJhbmdlOjpmaXJzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbm9kZSwgbGVuZ3RoKG5v
ZGUpIH07CisgICAgaWYgKG1fcmFuZ2UuZW5kLmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9k
ZSgpKQorICAgICAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4dFNraXBwaW5nQ2hpbGRyZW4o
bV9yYW5nZS5lbmQuY29udGFpbmVyKTsKKyAgICBpZiAoYXV0byBjaGlsZCA9IG1fcmFuZ2UuZW5k
LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5lbmQub2Zmc2V0KSkKKyAgICAg
ICAgcmV0dXJuIGNoaWxkOworICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdD
aGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwogfQogCi1TaW1wbGVSYW5nZSBtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK1JlZlB0cjxOb2RlPiBJbnRlcnNl
Y3RpbmdOb2RlUmFuZ2U6OnNlbnRpbmVsKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyBtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRl
ck5vZGVDb250ZW50cyhub2RlKSB9OworICAgIGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+
aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250
YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5l
ci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5vZmZzZXQpKQorICAgICAgICByZXR1
cm4gY2hpbGQ7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVu
KG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKK30KKworT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0
YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgTm9kZSYgbm9kZSkK
K3sKKyAgICByZXR1cm4geyAmbm9kZSA9PSByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCkgPyBy
YW5nZS5zdGFydC5vZmZzZXQgOiAwLAorICAgICAgICAmbm9kZSA9PSByYW5nZS5lbmQuY29udGFp
bmVyLnB0cigpID8gcmFuZ2UuZW5kLm9mZnNldCA6IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSB9OworfQorCitJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIEludGVyc2VjdGlu
Z05vZGVJdGVyYXRvcjo6b3BlcmF0b3IrKygpCit7CisgICAgQVNTRVJUKG1fbm9kZSk7CisgICAg
bV9ub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbV9ub2RlKTsKKyAgICByZXR1cm4gKnRoaXM7
CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggOTU4MmRmOGMzMzI2Yzg5ODU1
YmI4ZGVhMTE0NjMzNWM0NjcxM2E4MS4uNTdmNDEzYjViZTE2M2U3ZmNlMWUzOTY3N2JjYzMzZWE1
ODhiZWNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTU1LDYgKzU1LDYxIEBAIFdF
QkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhO
b2RlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBs
ZVJhbmdlJik7CiAKK2NsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZTsKK0ludGVyc2VjdGluZ05v
ZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYpOworCitzdHJ1Y3Qg
T2Zmc2V0UmFuZ2UgeworICAgIHVuc2lnbmVkIHN0YXJ0IHsgMCB9OworICAgIHVuc2lnbmVkIGVu
ZCB7IDAgfTsKK307CitPZmZzZXRSYW5nZSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBjb25zdCBOb2RlJik7CisKK2NsYXNzIEludGVyc2VjdGluZ05vZGVJdGVy
YXRvciA6IHB1YmxpYyBzdGQ6Oml0ZXJhdG9yPHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWcsIE5v
ZGU+IHsKK3B1YmxpYzoKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+
JiYpOworCisgICAgTm9kZSYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9ub2RlKTsgcmV0
dXJuICptX25vZGU7IH0KKyAgICBOb2RlKiBvcGVyYXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9u
b2RlKTsgcmV0dXJuIG1fbm9kZS5nZXQoKTsgfQorCisgICAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IW1fbm9kZTsgfQorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRlcnNlY3RpbmdOb2RlSXRl
cmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBtX25vZGUgIT0gb3RoZXIubV9ub2RlOyB9CisK
KyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKworcHJpdmF0ZToK
KyAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOworfTsKKworY2xhc3MgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlIHsKK3B1YmxpYzoKKyAgICBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmKTsKKworICAgIEludGVyc2VjdGluZ05vZGVJdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGZpcnN0KCk7IH0KKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gc2VudGluZWwoKTsgfQorCitwcml2YXRlOgorICAgIFJlZlB0cjxOb2RlPiBmaXJz
dCgpIGNvbnN0OworICAgIFJlZlB0cjxOb2RlPiBzZW50aW5lbCgpIGNvbnN0OworCisgICAgY29u
c3QgU2ltcGxlUmFuZ2UmIG1fcmFuZ2U7Cit9OworCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yOjpJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IoUmVmUHRyPE5vZGU+JiYgbm9kZSkKKyAg
ICA6IG1fbm9kZShXVEZNb3ZlKG5vZGUpKQoreworfQorCitpbmxpbmUgSW50ZXJzZWN0aW5nTm9k
ZVJhbmdlOjpJbnRlcnNlY3RpbmdOb2RlUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQor
ICAgIDogbV9yYW5nZShyYW5nZSkKK3sKK30KKworaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5n
ZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgcmV0
dXJuIHsgcmFuZ2UgfTsKK30KKwogaW5saW5lIFNpbXBsZVJhbmdlOjpTaW1wbGVSYW5nZShjb25z
dCBSZWY8UmFuZ2U+JiByYW5nZSkKICAgICA6IFNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9s
bGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5jcHAKaW5kZXggZjExMjhiOTI0N2U4OGJkOWIxMjA1MDE2MWIzNmVjNWE5YmVmZTI2Yi4uM2Y0
ZmNiM2FhNjlmY2I1YWM4MTFiNGU4Yzc5MWE4MTQ3YjM0ZmQ2OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0xNTQs
NyArMTU0LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppc1NwZWxsaW5nTWFy
a2VyQWxsb3dlZChSYW5nZSYgbWlzc3BlbGxpbmdSYW5nZSkKIAogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpzaG93KFJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiBy
ZXBsYWNlbWVudCkKIHsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RG
b3JSYW5nZSgmcmFuZ2VUb1JlcGxhY2UpOworICAgIGF1dG8gYm91bmRpbmdCb3ggPSByb290Vmll
d1JlY3RGb3JSYW5nZShyYW5nZVRvUmVwbGFjZSk7CiAgICAgaWYgKGJvdW5kaW5nQm94LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIG1fb3JpZ2luYWxUZXh0ID0gcGxhaW5UZXh0KHJh
bmdlVG9SZXBsYWNlKTsKQEAgLTI1Miw3ICsyNTIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG1faXNB
Y3RpdmUgPSB0cnVlOwogICAgICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dCgqbV9yYW5n
ZVdpdGhBbHRlcm5hdGl2ZSk7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RW
aWV3UmVjdEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBh
dXRvIGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xp
ZW50KCkpCiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZl
KG1fdHlwZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCByZXBsYWNlbWVudFN0cmluZywg
eyB9KTsKQEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnRpbWVyRmlyZWQoKQogICAgICAgICBTdHJpbmcgdG9wU3VnZ2VzdGlvbiA9IHN1Z2dlc3Rpb25z
LmZpcnN0KCk7CiAgICAgICAgIHN1Z2dlc3Rpb25zLnJlbW92ZSgwKTsKICAgICAgICAgbV9pc0Fj
dGl2ZSA9IHRydWU7Ci0gICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVj
dEZvclJhbmdlKG1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuZ2V0KCkpOworICAgICAgICBhdXRvIGJv
dW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUp
OwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYg
KEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
CiAgICAgICAgICAgICAgICAgY2xpZW50LT5zaG93Q29ycmVjdGlvbkFsdGVybmF0aXZlKG1fdHlw
ZSwgYm91bmRpbmdCb3gsIG1fb3JpZ2luYWxUZXh0LCB0b3BTdWdnZXN0aW9uLCBzdWdnZXN0aW9u
cyk7CkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKCkKICAgICAgICAgdWludDY0X3QgZGljdGF0aW9uQ29udGV4dCA9IFdURjo6Z2V0
PEFsdGVybmF0aXZlRGljdGF0aW9uQ29udGV4dD4obV9kZXRhaWxzKTsKICAgICAgICAgaWYgKCFk
aWN0YXRpb25Db250ZXh0KQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZl
LmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CiAg
ICAgICAgIGlmICghYm91bmRpbmdCb3guaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBpZiAoQWx0
ZXJuYXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKQEAg
LTMzOCwxNyArMzM4LDEyIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNBdXRv
bWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkKICAgICByZXR1cm4gZWRpdG9yQ2xpZW50
KCkgJiYgZWRpdG9yQ2xpZW50KCktPmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxl
ZCgpOwogfQogCi1GbG9hdFJlY3QgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKSBjb25zdAorRmxvYXRSZWN0IEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkgY29uc3QKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLnZpZXcoKTsK
KyAgICBhdXRvKiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAg
ICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwot
ICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyh0ZXh0UXVhZHMpOwotICAgIEZsb2F0UmVjdCBi
b3VuZGluZ1JlY3Q7Ci0gICAgZm9yIChhdXRvJiB0ZXh0UXVhZCA6IHRleHRRdWFkcykKLSAgICAg
ICAgYm91bmRpbmdSZWN0LnVuaXRlKHRleHRRdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVy
biB2aWV3LT5jb250ZW50c1RvUm9vdFZpZXcoSW50UmVjdChib3VuZGluZ1JlY3QpKTsKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHVuaXRl
ZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsK
IH0gICAgICAgIAogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb0No
YW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgb2xkU2VsZWN0aW9uKQpAQCAt
NTQyLDggKzUzNyw2IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
TWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgICAgIHN0YXJ0QWx0
ZXJuYXRpdmVUZXh0VUlUaW1lcihBbHRlcm5hdGl2ZVRleHRUeXBlUmV2ZXJzaW9uKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVz
OiB7Ci0gICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIGF1dG8mIG1hcmtlckRhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSk7CiAgICAgICAgIGlmIChjdXJyZW50V29yZCAhPSBt
YXJrZXJEYXRhLm9yaWdpbmFsVGV4dCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTYz
OCw3ICs2MzEsNiBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Omluc2VydERpY3Rh
dGVkVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IFZlYwogdm9pZCBBbHRlcm5hdGl2ZVRl
eHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlcikKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKLSAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uRGF0YT4obWFya2VyLmRhdGEoKSkpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRl
cm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgY2xpZW50LT5yZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5k
YXRhKCkpLmNvbnRleHQpOwogI2Vsc2UKQEAgLTY0OSw3ICs2NDEsNiBAQCB2b2lkIEFsdGVybmF0
aXZlVGV4dENvbnRyb2xsZXI6OnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihj
b25zdCBEb2N1bQogVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIp
CiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKG1hcmtlci50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcyk7CiAgICAgaWYg
KGF1dG8qIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICByZXR1cm4g
Y2xpZW50LT5kaWN0YXRpb25BbHRlcm5hdGl2ZXMoV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpLmNvbnRleHQpOwogICAgIHJldHVybiBWZWN0b3I8
U3RyaW5nPigpOwpAQCAtNjYyLDE1ICs2NTMsMTIgQEAgVmVjdG9yPFN0cmluZz4gQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6ZGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IEQK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRlcm5hdGl2
ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlU3RyaW5nKQogewogI2lmIFVTRShESUNUQVRJT05f
QUxURVJOQVRJVkVTKQotICAgIEVkaXRvciYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKLSAg
ICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvbiA9IGVkaXRvci5zZWxlY3RlZFJhbmdlKCk7CisgICAg
YXV0byYgZWRpdG9yID0gbV9mcmFtZS5lZGl0b3IoKTsKKyAgICBhdXRvIHNlbGVjdGlvbiA9IGVk
aXRvci5zZWxlY3RlZFJhbmdlKCk7CiAgICAgaWYgKCFzZWxlY3Rpb24gfHwgIWVkaXRvci5zaG91
bGRJbnNlcnRUZXh0KGFsdGVybmF0aXZlU3RyaW5nLCBzZWxlY3Rpb24uZ2V0KCksIEVkaXRvcklu
c2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgcmV0dXJuOwotICAgIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlciYgbWFya2VycyA9IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IGRpY3Rh
dGlvbkFsdGVybmF0aXZlc01hcmtlcnMgPSBtYXJrZXJzLm1hcmtlcnNJblJhbmdlKCpzZWxlY3Rp
b24sIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwotICAgIGZvciAoYXV0
byogbWFya2VyIDogZGljdGF0aW9uQWx0ZXJuYXRpdmVzTWFya2VycykKKyAgICBmb3IgKGF1dG8q
IG1hcmtlciA6IHNlbGVjdGlvbi0+c3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLm1hcmtlcnMo
KS5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0
ZXJuYXRpdmVzKSkKICAgICAgICAgcmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2Vy
KCptYXJrZXIpOwotCiAgICAgYXBwbHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKCpzZWxlY3Rpb24s
IGFsdGVybmF0aXZlU3RyaW5nLCBBbHRlcm5hdGl2ZVRleHRUeXBlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzLCBtYXJrZXJUeXBlc0ZvckFwcGxpZWREaWN0YXRpb25BbHRlcm5hdGl2ZSgpKTsKICNlbHNl
CiAgICAgVU5VU0VEX1BBUkFNKGFsdGVybmF0aXZlU3RyaW5nKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmgKaW5kZXggOTgxZDI3MDky
MDdiNmYzOTRkYjIxY2IxZmRhNTY2OWVhODBhOTc0OC4uOTQ3NzRhNzZiMjA3ZWU4NzEwMWQ4M2Ey
M2JkOTNjZmRmNmRlNjQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAg
IEVkaXRvckNsaWVudCogZWRpdG9yQ2xpZW50KCk7CiAgICAgCiAgICAgVGV4dENoZWNrZXJDbGll
bnQqIHRleHRDaGVja2VyKCk7Ci0gICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFJhbmdlKikgY29uc3Q7CisgICAgRmxvYXRSZWN0IHJvb3RWaWV3UmVjdEZvclJhbmdlKGNv
bnN0IFNpbXBsZVJhbmdlJikgY29uc3Q7CiAgICAgdm9pZCBtYXJrUHJlY2VkaW5nV2hpdGVzcGFj
ZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZChFZGl0Q29tbWFuZCopOwogCiAg
ICAgVGltZXIgbV90aW1lcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29t
cG9zaXRlRWRpdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVF
ZGl0Q29tbWFuZC5jcHAKaW5kZXggNjNiZTkxZTkwNGM4OTM1ZGZmOTU2MTRjODcwYzkyNGFmMzRk
YmE3OS4uNGJmZDkyNDA1ZTQ2YjY0N2NkN2YwMTk1MzQ5MTk3ZDAyM2I5ODk5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKQEAgLTc2OSwz
MiArNzY5LDEyIEBAIHN0YXRpYyBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gY29weU1h
cmtlcnMoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNCiAKIHZvaWQgQ29tcG9zaXRlRWRp
dENvbW1hbmQ6OnJlcGxhY2VUZXh0SW5Ob2RlUHJlc2VydmluZ01hcmtlcnMoVGV4dCYgbm9kZSwg
dW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBjb3VudCwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFRleHQpCiB7Ci0gICAgUmVmPFRleHQ+IHByb3RlY3RlZE5vZGUobm9kZSk7Ci0gICAgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gZG9jdW1lbnQoKS5tYXJrZXJz
KCk7Ci0gICAgYXV0byBtYXJrZXJzID0gY29weU1hcmtlcnMobWFya2VyQ29udHJvbGxlci5tYXJr
ZXJzSW5SYW5nZShSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2Rl
LCBvZmZzZXQgKyBjb3VudCksIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKKyAgICBh
dXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG9mZnNldCB9LCB7IG5vZGUsIG9mZnNl
dCArIGNvdW50IH0gfTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3B5TWFya2Vycyhkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSkpOwogICAgIHJlcGxhY2VUZXh0SW5Ob2RlKG5vZGUsIG9mZnNldCwgY291bnQsIHJlcGxh
Y2VtZW50VGV4dCk7Ci0gICAgYXV0byBuZXdSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQo
KSwgJm5vZGUsIG9mZnNldCwgJm5vZGUsIG9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgo
KSk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBtYXJrZXIgOiBtYXJrZXJzKSB7Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgaWYgKG1hcmtlci5pc0RpY3RhdGlvbigpKSB7Ci0gICAg
ICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUo
KSwgbWFya2VyLmRlc2NyaXB0aW9uKCksIG1hcmtlci5hbHRlcm5hdGl2ZXMoKSwgbWFya2VyLm1l
dGFkYXRhKCkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotI2lm
IEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLSAgICAgICAgaWYgKG1hcmtl
ci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKSB7Ci0gICAg
ICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRm
b3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLmRhdGEoKSkpIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERv
Y3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpOwot
ICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtl
cihuZXdSYW5nZSwgdGV4dENoZWNraW5nRGF0YS5rZXksIHRleHRDaGVja2luZ0RhdGEudmFsdWUp
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLmFkZE1hcmtlcihuZXdSYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRl
c2NyaXB0aW9uKCkpOwotICAgIH0KKyAgICByYW5nZS5lbmQub2Zmc2V0ID0gcmFuZ2Uuc3RhcnQu
b2Zmc2V0ICsgcmVwbGFjZW1lbnRUZXh0Lmxlbmd0aCgpOworICAgIGZvciAoYXV0byYgbWFya2Vy
IDogbWFya2VycykKKyAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdl
LCBtYXJrZXIudHlwZSgpLCBtYXJrZXIuZGF0YSgpKTsKIH0KIAogUG9zaXRpb24gQ29tcG9zaXRl
RWRpdENvbW1hbmQ6OnBvc2l0aW9uT3V0c2lkZVRhYlNwYW4oY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKaW5kZXgg
YWRmNzQ0ZmM1YzMxMWZjZjY1YzZmZDdhMzUxZWY2MzAwMDgxYjk3MS4uODRjMmFkZTFhOTQ5N2Y4
YjY2YTNjMTE2MzZkMTY0MGU1MjlkYWEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9EaWN0YXRpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Rp
Y3RhdGlvbkNvbW1hbmQuY3BwCkBAIC02Niw4ICs2Niw4IEBAIHB1YmxpYzoKICAgICAgICAgYXV0
byYgbWFya2VyQ29udHJvbGxlciA9IHRleHROb2RlLmRvY3VtZW50KCkubWFya2VycygpOwogICAg
ICAgICBmb3IgKGF1dG8mIGFsdGVybmF0aXZlIDogbV9hbHRlcm5hdGl2ZXMpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhIGRhdGEgeyBhbHRlcm5hdGl2ZS5kaWN0
YXRpb25Db250ZXh0LCB0ZXh0VG9CZUluc2VydGVkLnN1YnN0cmluZyhhbHRlcm5hdGl2ZS5yYW5n
ZVN0YXJ0LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCkgfTsKLSAgICAgICAgICAgIG1hcmtlckNv
bnRyb2xsZXIuYWRkTWFya2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5yYW5nZVN0YXJ0
ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzLCBXVEZNb3ZlKGRhdGEpKTsKLSAgICAgICAgICAg
IG1hcmtlckNvbnRyb2xsZXIuYWRkTWFya2VyVG9Ob2RlKHRleHROb2RlLCBhbHRlcm5hdGl2ZS5y
YW5nZVN0YXJ0ICsgb2Zmc2V0T2ZJbnNlcnRpb24sIGFsdGVybmF0aXZlLnJhbmdlTGVuZ3RoLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgICAgICAgICBtYXJr
ZXJDb250cm9sbGVyLmFkZE1hcmtlcih0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCAr
IG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShkYXRhKSk7CisgICAgICAgICAgICBt
YXJrZXJDb250cm9sbGVyLmFkZE1hcmtlcih0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFy
dCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogICAgICAgICB9CiAgICAgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCBlODE4ZDEyYjIzOTEyMGExYWEyYmZmNWUwYWNi
NzlhNmQyMGQ5ZDAxLi5iMmYyODZjMGI2ZWMxZjQ2Njk3MDhjNjIxOGRhNGJmMmNhMzVjNDcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKQEAgLTExMjQsMTkgKzExMjQsMTggQEAgVmlz
aWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvckluZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRv
cihOb2RlJiBub2RlLCBpbnQgaW4KICAgICBpZiAoaW5kZXggPD0gMCkKICAgICAgICAgcmV0dXJu
IHsgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKCZub2RlKSwgRE9XTlNUUkVBTSB9OwogCi0g
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKLSAgICByYW5n
ZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOwotICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJh
bmdlLmdldCgpKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKG5vZGUpOworICAgIENoYXJhY3Rlckl0ZXJhdG9yIGl0KHJhbmdlKTsKICAgICBpdC5hZHZh
bmNlKGluZGV4IC0gMSk7CiAKICAgICBpZiAoIWl0LmF0RW5kKCkgJiYgaXQudGV4dCgpLmxlbmd0
aCgpID09IDEgJiYgaXQudGV4dCgpWzBdID09ICdcbicpIHsKICAgICAgICAgLy8gRklYTUU6IHdv
cmthcm91bmQgZm9yIGNvbGxhcHNlZCByYW5nZSAod2hlcmUgb25seSBzdGFydCBwb3NpdGlvbiBp
cyBjb3JyZWN0KSBlbWl0dGVkIGZvciBzb21lIGVtaXR0ZWQgbmV3bGluZXMuCiAgICAgICAgIGl0
LmFkdmFuY2UoMSk7CiAgICAgICAgIGlmICghaXQuYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGl0LnJhbmdlKCku
c3RhcnQpKTsKKyAgICAgICAgICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihpdC5yYW5nZSgpLnN0YXJ0KSB9OwogICAgIH0KIAotICAgIHJldHVybiB7IGl0LmF0RW5kKCkg
PyByYW5nZS0+ZW5kUG9zaXRpb24oKSA6IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5y
YW5nZSgpLmVuZCksIFVQU1RSRUFNIH07CisgICAgcmV0dXJuIHsgY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKChpdC5hdEVuZCgpID8gcmFuZ2UgOiBpdC5yYW5nZSgpKS5lbmQpLCBVUFNUUkVB
TSB9OwogfQogCiAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdHdvIHBvc2l0aW9ucyBhcmUgdmlzaWJs
eSBuZXh0IHRvIGVhY2ggb3RoZXIgKGZpcnN0IHRoZW4gc2Vjb25kKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCmluZGV4IGE0ZTA2MDIzOTVlMjc5Nzk5YmYzODkyMzJiM2VkNjgyYjdlZTRmYTQu
LmY4YzkzMzgyNjhlZGZlMzQ5ZGJlY2RjMDNiMWZhN2IxOGM0MWU4ODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKQEAgLTMwNzYsOCArMzA3Niw3IEBAIHZvaWQgRWRpdG9yOjp1cGRhdGVN
YXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhib29sIGRvTm90UmVtb3ZlSWZTZWxlY3Rp
b25BCiAgICAgLy8gb2YgbWFya2VyIHRoYXQgY29udGFpbnMgdGhlIHdvcmQgaW4gcXVlc3Rpb24s
IGFuZCByZW1vdmUgbWFya2VyIG9uIHRoYXQgd2hvbGUgcmFuZ2UuCiAgICAgYXV0byB3b3JkUmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0YXJ0T2ZGaXJzdFdvcmQuZGVlcEVxdWl2
YWxlbnQoKSwgZW5kT2ZMYXN0V29yZC5kZWVwRXF1aXZhbGVudCgpKTsKIAotICAgIFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyKj4gbWFya2VycyA9IGRvY3VtZW50KCkubWFya2VycygpLm1h
cmtlcnNJblJhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlcyk7Ci0gICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKQorICAgIGZvciAoYXV0byog
bWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKSkKICAgICAgICAgbV9hbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIo
Km1hcmtlcik7CiAKICAgICBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1h
cmtlclR5cGVzVG9SZW1vdmUgewpAQCAtMzYyNiw3ICszNjI1LDcgQEAgdW5zaWduZWQgRWRpdG9y
Ojpjb3VudE1hdGNoZXNGb3JUZXh0KGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBSYW5nZSogcmFuZ2Us
IEZpbmRPcHQKICAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UocmVz
dWx0UmFuZ2UpKTsKIAogICAgICAgICBpZiAobWFya01hdGNoZXMpCi0gICAgICAgICAgICBkb2N1
bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSwg
RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtl
cnMoKS5hZGRNYXJrZXIocmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwog
CiAgICAgICAgIC8vIFN0b3AgbG9va2luZyBpZiB3ZSBoaXQgdGhlIHNwZWNpZmllZCBsaW1pdC4g
QSBsaW1pdCBvZiAwIG1lYW5zIG5vIGxpbWl0LgogICAgICAgICBpZiAobGltaXQgPiAwICYmIG1h
dGNoQ291bnQgPj0gbGltaXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBlMDM3OGFlYjdh
OTJiNTJhYTVkZDljN2I5ZTk1MGExZmUwNGU1ZDczLi5mYmU3MTJhOThkZGQwNjg5ZmNkYWI5YWNj
ODg1OGUxYzIxMjE3NzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTM5OSw4ICszOTks
OCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb25maXJtTWFya2VkVGV4dCgp
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3Qg
U3RyaW5nJiwgRWxlbWVudCYpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0VGV4dEFsaWdu
bWVudEZvckNoYW5nZWRCYXNlV3JpdGluZ0RpcmVjdGlvbihXcml0aW5nRGlyZWN0aW9uKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3Rv
cjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1l
bnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWlu
UHRyPGlkPiBtZXRhZGF0YSwgRWxlbWVudCYpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5z
ZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgaWQgbWV0YWRhdGEpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0RGljdGF0aW9u
UGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGlj
dGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEsIEVsZW1lbnQmKTsKICNlbmRpZgogICAgIAogICAg
IGVudW0gY2xhc3MgS2lsbFJpbmdJbnNlcnRpb25Nb2RlIHsgUHJlcGVuZFRleHQsIEFwcGVuZFRl
eHQgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXggMjZm
YTc2MTFiMTkwYWVlYjNkYTdhNmJhOGYzMjgyNTcwMGVmZGFhNC4uNDUxNmU1MDY1MDcyZmY1MWMz
YzkwMWI3ODUyNDUzZmJmYTk3YjM1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNl
bGVjdGlvbi5jcHAKQEAgLTIzMjUsMzMgKzIzMjUsMTkgQEAgRmxvYXRSZWN0IEZyYW1lU2VsZWN0
aW9uOjpzZWxlY3Rpb25Cb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJsZUNv
bnQKIAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xl
cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdGFuZ2xlcywgVGV4dFJlY3RhbmdsZUhlaWdodCB0ZXh0
UmVjdEhlaWdodCkgY29uc3QKIHsKLSAgICBSZW5kZXJWaWV3KiByb290ID0gbV9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyb290KQorICAgIGlmICghbV9mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRl
eHRSZWN0czsKLSAgICBnZXRUZXh0UmVjdGFuZ2xlcyh0ZXh0UmVjdHMsIHRleHRSZWN0SGVpZ2h0
KTsKLQotICAgIEZsb2F0UmVjdCB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1lLT52aWV3KCkt
PnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9jdW1lbnRWaXNp
YmxlUmVjdCk7Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIHJlY3QgOiB0ZXh0UmVjdHMpIHsKLSAg
ICAgICAgRmxvYXRSZWN0IGludGVyc2VjdGlvblJlY3QgPSBpbnRlcnNlY3Rpb24ocmVjdCwgdmlz
aWJsZUNvbnRlbnRSZWN0KTsKLSAgICAgICAgaWYgKCFpbnRlcnNlY3Rpb25SZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKGludGVyc2VjdGlvblJlY3QpOwotICAg
IH0KLX0KLQotdm9pZCBGcmFtZVNlbGVjdGlvbjo6Z2V0VGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0Ci17CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHRvTm9ybWFsaXplZFJhbmdlKCk7
CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZsb2F0UXVh
ZD4gcXVhZHM7Ci0gICAgcmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzLCB0ZXh0UmVjdEhl
aWdodCA9PSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgIHJlY3RhbmdsZXMuYXBwZW5kKHF1
YWQuYm91bmRpbmdCb3goKSk7CisgICAgYXV0byB2aXNpYmxlQ29udGVudFJlY3QgPSBtX2ZyYW1l
LT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChTY3JvbGxhYmxlQXJlYTo6TGVnYWN5SU9TRG9j
dW1lbnRWaXNpYmxlUmVjdCk7CisgICAgZm9yIChhdXRvJiByZWN0IDogYm91bmRpbmdCb3hlcyhS
ZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSwgdGV4dFJlY3RIZWlnaHQgPT0g
VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSkpIHsKKyAgICAgICAgYXV0byBp
bnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7
CisgICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCisgICAgICAgICAgICBy
ZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKKyAgICB9CiB9CiAKIC8vIFNjYW5z
IGxvZ2ljYWxseSBmb3J3YXJkIGZyb20gInN0YXJ0IiwgaW5jbHVkaW5nIGFueSBjaGlsZCBmcmFt
ZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKaW5kZXggMjg1NTkxNzg0
YTlmZTNhMjcxZTg0OGUxMTJjZjA1MjczNDcwNDgwMC4uZTZhNzA4YjA1NGY1OWIzMGJmYjU3ZWZk
ZmUzMmNhZWQxNjVhMDUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aApAQCAtMjc2LDcgKzI3Niw2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gY2xhc3MgVGV4dFJlY3Rh
bmdsZUhlaWdodCB7IFRleHRIZWlnaHQsIFNlbGVjdGlvbkhlaWdodCB9OwogICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgZ2V0Q2xpcHBlZFZpc2libGVUZXh0UmVjdGFuZ2xlcyhWZWN0b3I8RmxvYXRS
ZWN0PiYsIFRleHRSZWN0YW5nbGVIZWlnaHQgPSBUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rp
b25IZWlnaHQpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZ2V0VGV4dFJlY3Rhbmds
ZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0ID0gVGV4dFJlY3Rhbmds
ZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIEhU
TUxGb3JtRWxlbWVudCogY3VycmVudEZvcm0oKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAppbmRleCA5Yjc3NjEwMmY5ZjE1YWM5
NjY4OTkzODA5N2NiMjJlZWEyZmQwYmI5Li43M2Q2MDljYWM5OGUxZTUyODI3YmZjM2E3YTM3ZTJj
ODViMWRmZTFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0VGV4dE5vZGVD
b21tYW5kLmNwcApAQCAtNjIsNyArNjIsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpk
b0FwcGx5KCkKIAogICAgIG1fdGV4dDEgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92
ZShwcmVmaXhUZXh0KSk7CiAgICAgQVNTRVJUKG1fdGV4dDEpOwotICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIsIDAsIG1fb2Zmc2V0LCAqbV90ZXh0MSwgMCk7Cisg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMobV90ZXh0MiwgeyAwLCBtX29mZnNl
dCB9LCAqbV90ZXh0MSk7CiAKICAgICBpbnNlcnRUZXh0MUFuZFRyaW1UZXh0MigpOwogfQpAQCAt
NzgsNyArNzgsNyBAQCB2b2lkIFNwbGl0VGV4dE5vZGVDb21tYW5kOjpkb1VuYXBwbHkoKQogCiAg
ICAgbV90ZXh0Mi0+aW5zZXJ0RGF0YSgwLCBwcmVmaXhUZXh0KTsKIAotICAgIGRvY3VtZW50KCku
bWFya2VycygpLmNvcHlNYXJrZXJzKCptX3RleHQxLCAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpLCBt
X3RleHQyLCAwKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycygqbV90ZXh0
MSwgeyAwLCBwcmVmaXhUZXh0Lmxlbmd0aCgpIH0sIG1fdGV4dDIpOwogICAgIG1fdGV4dDEtPnJl
bW92ZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24ubW0KaW5kZXggNTU3YmZlY2FlYTAyMzI4NWFlYTA5MGQ0ZjA1NzFkN2RhOGQzM2FiZS4uZjRm
MDZmZmU3MTIyN2UyM2IxYTZlZGI5NWQ4YWQyM2RjNDcwZTg1YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQpAQCAtMTA1LDE3ICsxMDUsMTUgQEAg
c3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0
aFJhbmdlKFZpc2libGVQb3NpdGlvbgogICAgIGlmICghbWFpblJlc3VsdCkKICAgICAgICAgcmV0
dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOworICAgIGF1
dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICBp
ZiAoIXZpZXcpCisgICAgICAgIHJldHVybiBuaWw7CisKKyAgICBhdXRvIGFjdGlvbkNvbnRleHQg
PSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3RhbmNlKCkgaW5pdF0pOwogICAgIFth
Y3Rpb25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJpZGdlIGlkKW1haW5SZXN1bHQgXV07
CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0TWFpblJlc3VsdDptYWluUmVzdWx0XTsKIAotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIG1haW5SZXN1bHRSYW5nZS0+YWJzb2x1dGVUZXh0
UXVhZHMocXVhZHMpOwotICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gRmxvYXRSZWN0KCk7
Ci0gICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS52aWV3KCk7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAg
IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LnVuaXRlKGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRv
dyhxdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpKTsKLQorICAgIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJv
dW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqbWFpblJlc3VsdFJh
bmdlKSkpKTsKICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5nZTsKIAogICAg
IHJldHVybiBhY3Rpb25Db250ZXh0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9EaWN0YXRpb25Db21tYW5kSU9TLmNwcAppbmRleCA1YjQzY2EzM2U5MGZhYTJlNmZlMTg0NWM5
MjM3YjBhOWZlYTc0M2MwLi44YWM3Njk0MDIwOTM1MGZmNDNhZWMxNDRkMzNhZDYxNjAxMjZlNDM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5k
SU9TLmNwcApAQCAtMzksMTMgKzM5LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRGlj
dGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9uQ29tbWFuZElPUyhEb2N1bWVudCYgZG9jdW1lbnQs
IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+
IG1ldGFkYXRhKQorRGljdGF0aW9uQ29tbWFuZElPUzo6RGljdGF0aW9uQ29tbWFuZElPUyhEb2N1
bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2Vz
LCBpZCBtZXRhZGF0YSkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKGRvY3VtZW50LCBFZGl0
QWN0aW9uOjpEaWN0YXRpb24pCiAgICAgLCBtX2RpY3RhdGlvblBocmFzZXMoV1RGTW92ZShkaWN0
YXRpb25QaHJhc2VzKSkKLSAgICAsIG1fbWV0YWRhdGEoV1RGTW92ZShtZXRhZGF0YSkpCisgICAg
LCBtX21ldGFkYXRhKG1ldGFkYXRhKQogewogfQogCitSZWY8RGljdGF0aW9uQ29tbWFuZElPUz4g
RGljdGF0aW9uQ29tbWFuZElPUzo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgVmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IERpY3RhdGlvbkNvbW1hbmRJT1MoZG9jdW1lbnQsIFdURk1vdmUo
ZGljdGF0aW9uUGhyYXNlcyksIG1ldGFkYXRhKSk7Cit9CisKIHZvaWQgRGljdGF0aW9uQ29tbWFu
ZElPUzo6ZG9BcHBseSgpCiB7CiAgICAgdWludDY0X3QgcmVzdWx0TGVuZ3RoID0gMDsKQEAgLTU0
LDggKzU5LDExIEBAIHZvaWQgRGljdGF0aW9uQ29tbWFuZElPUzo6ZG9BcHBseSgpCiAgICAgICAg
IHJlc3VsdExlbmd0aCArPSBmaXJzdEludGVycHJldGF0aW9uLmxlbmd0aCgpOwogICAgICAgICBp
bnB1dFRleHQoZmlyc3RJbnRlcnByZXRhdGlvbiwgdHJ1ZSk7CiAKLSAgICAgICAgaWYgKGludGVy
cHJldGF0aW9ucy5zaXplKCkgPiAxKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcigqZW5kaW5nU2VsZWN0aW9u
KCkudG9Ob3JtYWxpemVkUmFuZ2UoKSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgaWYgKGlu
dGVycHJldGF0aW9ucy5zaXplKCkgPiAxKSB7CisgICAgICAgICAgICBhdXRvIGFsdGVybmF0aXZl
cyA9IGludGVycHJldGF0aW9uczsKKyAgICAgICAgICAgIGFsdGVybmF0aXZlcy5yZW1vdmUoMCk7
CisgICAgICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoKmVuZGluZ1NlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzLCBXVEZNb3ZlKGFsdGVybmF0aXZlcykpOworICAgICAgICB9CiAK
ICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oZW5kaW5nU2VsZWN0
aW9uKCkudmlzaWJsZUVuZCgpKSk7CiAgICAgfQpAQCAtNzMsNyArODEsNyBAQCB2b2lkIERpY3Rh
dGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHJl
c3VsdFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cygqcm9vdCksIHsgZW5kT2Zmc2V0IC0gcmVzdWx0TGVuZ3RoLCBlbmRPZmZzZXQgfSk7
Ci0gICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3Vs
dFJhbmdlLCBtX21ldGFkYXRhKTsKKyAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIo
cmVzdWx0UmFuZ2UsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIG1fbWV0YWRhdGEp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmgKaW5kZXggZjYzMDA2MDAxMzc1M2U4ZDJlOGEy
MDEzY2ExNzE1NWY2ZDg2YTE0Mi4uZDMzYzE1MWI4ZjIzOTQwOTZlNTMwMWQxNDEwMjA2ZTQwOGRl
MTMyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1h
bmRJT1MuaApAQCAtMzAsMjEgKzMwLDE2IEBACiAjaW1wb3J0ICJDb21wb3NpdGVFZGl0Q29tbWFu
ZC5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgogCi10eXBlZGVmIHN0cnVjdCBvYmpjX29i
amVjdCAqaWQ7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRGljdGF0aW9uQ29tbWFu
ZElPUyA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CitjbGFzcyBEaWN0YXRpb25Db21t
YW5kSU9TIGZpbmFsIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPERpY3RhdGlvbkNvbW1hbmRJT1M+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1l
bnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8
aWQ+IG1ldGFkYXRhKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRGljdGF0
aW9uQ29tbWFuZElPUyhkb2N1bWVudCwgV1RGTW92ZShkaWN0YXRpb25QaHJhc2VzKSwgV1RGTW92
ZShtZXRhZGF0YSkpKTsKLSAgICB9CisgICAgc3RhdGljIFJlZjxEaWN0YXRpb25Db21tYW5kSU9T
PiBjcmVhdGUoRG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgaWQgbWV0YWRhdGEpOwogCiBwcml2YXRlOgotICAgIERpY3RhdGlvbkNvbW1hbmRJT1Mo
RG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0
YWluUHRyPGlkPiBtZXRhZGF0YSk7CisgICAgRGljdGF0aW9uQ29tbWFuZElPUyhEb2N1bWVudCYs
IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSk7
CiAKLSAgICB2b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRvQXBwbHkoKSBmaW5h
bDsKIAogICAgIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4gbV9kaWN0YXRpb25QaHJhc2VzOwogICAg
IFJldGFpblB0cjxpZD4gbV9tZXRhZGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRv
cklPUy5tbQppbmRleCA0MTI2ZWQxNTdmZGIxMWEzNGJjZTBkMTc1OTczZDU1NmZhZjJmZDU2Li5m
MmEyZDUyYWM1YWJmNGU0ZjEzMTEzY2EyNWQxYjIwYTE3MzhmYTY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBFZGl0b3I6
OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwgT3B0aW9uU2V0PFBh
c3RlT3B0aW9uPgogICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51
bGwoKSwgY2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQoKnBhc3RlYm9hcmQpLCBmYWxzZSwg
b3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6SWdub3JlTWFpbEJsb2NrcXVvdGUpID8gTWFp
bEJsb2NrcXVvdGVIYW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSA6IE1haWxCbG9ja3F1b3RlSGFu
ZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsKIH0KIAotdm9pZCBFZGl0b3I6Omluc2VydERpY3Rh
dGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJl
dGFpblB0cjxpZD4gbWV0YWRhdGEpCit2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNl
cyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEp
CiB7CiAgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCkpCiAgICAgICAgIHJldHVy
bjsKQEAgLTI0OSwxMCArMjQ5LDEwIEBAIHZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJh
c2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSCiAgICAgaWYg
KGRpY3RhdGlvblBocmFzZXMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBEaWN0
YXRpb25Db21tYW5kSU9TOjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShkaWN0YXRpb25QaHJh
c2VzKSwgV1RGTW92ZShtZXRhZGF0YSkpLT5hcHBseSgpOworICAgIERpY3RhdGlvbkNvbW1hbmRJ
T1M6OmNyZWF0ZShkb2N1bWVudCgpLCBXVEZNb3ZlKGRpY3RhdGlvblBocmFzZXMpLCBtZXRhZGF0
YSktPmFwcGx5KCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGls
ZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25QaHJhc2Vz
LCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhLCBFbGVtZW50JiBlbGVtZW50KQordm9pZCBFZGl0b3I6
OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8
U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhLCBFbGVtZW50JiBlbGVtZW50
KQogewogICAgIC8vIENsZWFyIHRoZSBjb21wb3NpdGlvbi4KICAgICBjbGVhcigpOwpAQCAtMjkz
LDIwICsyOTMsMTkgQEAgdm9pZCBFZGl0b3I6OnNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZF
bGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGQKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIFRleHQmIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmVsZW1lbnQuZmly
c3RDaGlsZCgpKTsKLSAgICBpbnQgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCA9IDA7Cisg
ICAgYXV0byYgdGV4dE5vZGUgPSBkb3duY2FzdDxUZXh0PigqZWxlbWVudC5maXJzdENoaWxkKCkp
OworICAgIHVuc2lnbmVkIHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSAwOwogICAgIGZv
ciAoYXV0byYgaW50ZXJwcmV0YXRpb25zIDogZGljdGF0aW9uUGhyYXNlcykgewotICAgICAgICBp
bnQgZGljdGF0aW9uUGhyYXNlTGVuZ3RoID0gaW50ZXJwcmV0YXRpb25zWzBdLmxlbmd0aCgpOwot
ICAgICAgICBpbnQgZGljdGF0aW9uUGhyYXNlRW5kID0gcHJldmlvdXNEaWN0YXRpb25QaHJhc2VT
dGFydCArIGRpY3RhdGlvblBocmFzZUxlbmd0aDsKKyAgICAgICAgYXV0byBkaWN0YXRpb25QaHJh
c2VMZW5ndGggPSBpbnRlcnByZXRhdGlvbnNbMF0ubGVuZ3RoKCk7CiAgICAgICAgIGlmIChpbnRl
cnByZXRhdGlvbnMuc2l6ZSgpID4gMSkgewotICAgICAgICAgICAgYXV0byBkaWN0YXRpb25QaHJh
c2VSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgJnRleHROb2RlLCBwcmV2aW91c0Rp
Y3RhdGlvblBocmFzZVN0YXJ0LCAmdGV4dE5vZGUsIGRpY3RhdGlvblBocmFzZUVuZCk7Ci0gICAg
ICAgICAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5hZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKGRpY3RhdGlvblBocmFzZVJhbmdlLCBpbnRlcnByZXRhdGlvbnMpOworICAg
ICAgICAgICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7CisgICAgICAgICAg
ICBhbHRlcm5hdGl2ZXMucmVtb3ZlKDApOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkTWFya2VyKHRleHROb2RlLCBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0LCBkaWN0
YXRpb25QaHJhc2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0
ZXJuYXRpdmVzLCBXVEZNb3ZlKGFsdGVybmF0aXZlcykpOwogICAgICAgICB9Ci0gICAgICAgIHBy
ZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSBkaWN0YXRpb25QaHJhc2VFbmQ7CisgICAgICAg
IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgKz0gZGljdGF0aW9uUGhyYXNlTGVuZ3RoOwog
ICAgIH0KIAotICAgIGF1dG8gcmVzdWx0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCks
ICZ0ZXh0Tm9kZSwgMCwgJnRleHROb2RlLCB0ZXh0Tm9kZS5sZW5ndGgoKSk7Ci0gICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKHJlc3VsdFJhbmdlLCBtZXRh
ZGF0YSk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHRleHROb2RlLCAwLCB0
ZXh0Tm9kZS5sZW5ndGgoKSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCwgcmV0YWlu
UHRyKG1ldGFkYXRhKSk7CiAKICAgICBjbGllbnQoKS0+cmVzcG9uZFRvQ2hhbmdlZENvbnRlbnRz
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggYzY4ZjVkMzhjNmU1MWUwNDg4
ODcwOTRjNTdlYmZmMDdhYWYwMWNlYi4uMDE3NzZmY2QwMTRlMmQ4YzRhN2Y3YWM3ZDUxMTNjYWNi
NGUzNTdjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtNDI3OSw5ICs0Mjc5LDcg
QEAgdm9pZCBGcmFtZVZpZXc6OnBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0g
bV9ub2RlVG9EcmF3ID8gbV9ub2RlVG9EcmF3LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKICAgICBS
ZW5kZXJMYXllciogcm9vdExheWVyID0gcmVuZGVyVmlldy0+bGF5ZXIoKTsKIAotI2lmbmRlZiBO
REVCVUcKLSAgICBSZW5kZXJFbGVtZW50OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBm
b3JiaWRTZXROZWVkc0xheW91dCgmcm9vdExheWVyLT5yZW5kZXJlcigpKTsKLSNlbmRpZgorICAg
IFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVl
ZHNMYXlvdXQocm9vdExheWVyLT5yZW5kZXJlcigpKTsKIAogICAgIC8vIFRvIHdvcmsgYXJvdW5k
IGh0dHA6Ly93ZWJraXQub3JnL2IvMTM1MTA2LCBlbnN1cmUgdGhhdCB0aGUgcGFpbnQgcm9vdCBp
c24ndCBhbiBpbmxpbmUgd2l0aCBjdWxsZWQgbGluZSBib3hlcy4KICAgICAvLyBGSVhNRTogVGhp
cyBjYW4gY2F1c2UgYWRkaXRpb25hbCBjb250ZW50IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBzbmFw
c2hvdCwgc28gcmVtb3ZlIHRoaXMgb25jZSB0aGF0IGJ1ZyBpcyBmaXhlZC4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggMDYyODVhNTE4NGU1YTRjMDBhMzFiYTYzMzQyM2RiNWRi
Yzk4ODA5OC4uMGFmZWNhZmQxOWRlMDE0ZTcyM2VlNWRjNWU0ZTIyZDY4NzkxZDE2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTczNiw3ICs3MzYsNyBAQCBOU0FycmF5ICpG
cmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogICAgIHNpemVfdCBp
bnRlcnByZXRhdGlvbnNDb3VudCA9IDE7CiAKICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtl
cnNJblJvb3QpCi0gICAgICAgIGludGVycHJldGF0aW9uc0NvdW50ICo9IG1hcmtlci0+YWx0ZXJu
YXRpdmVzKCkuc2l6ZSgpICsgMTsKKyAgICAgICAgaW50ZXJwcmV0YXRpb25zQ291bnQgKj0gV1RG
OjpnZXQ8VmVjdG9yPFN0cmluZz4+KG1hcmtlci0+ZGF0YSgpKS5zaXplKCkgKyAxOwogCiAgICAg
VmVjdG9yPFZlY3RvcjxVQ2hhcj4+IGludGVycHJldGF0aW9uczsKICAgICBpbnRlcnByZXRhdGlv
bnMuZ3JvdyhpbnRlcnByZXRhdGlvbnNDb3VudCk7CkBAIC03NDksNiArNzQ5LDggQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICBmb3Ig
KE5vZGUqIG5vZGUgPSByYW5nZU9mUm9vdENvbnRlbnRzLT5maXJzdE5vZGUoKTsgbm9kZSAhPSBw
YXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAg
ICBBU1NFUlQobm9kZSk7CiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS0+
bWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzKSkgeworICAgICAgICAgICAgYXV0byYgYWx0ZXJuYXRpdmVzID0g
V1RGOjpnZXQ8VmVjdG9yPFN0cmluZz4+KG1hcmtlci0+ZGF0YSgpKTsKKwogICAgICAgICAgICAg
Ly8gRmlyc3QsIGFkZCB0ZXh0IHRoYXQgcHJlY2VkZSB0aGUgbWFya2VyLgogICAgICAgICAgICAg
aWYgKHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uICE9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKSB7CiAgICAgICAgICAgICAgICAgYXV0
byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRp
bmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1h
cmtlci0+c3RhcnRPZmZzZXQoKSkpOwpAQCAtNzYxLDcgKzc2Myw3IEBAIE5TQXJyYXkgKkZyYW1l
OjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAKICAgICAgICAgICAgIGF1
dG8gcmFuZ2VGb3JNYXJrZXIgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpKTsKICAgICAgICAg
ICAgIFN0cmluZyB2aXNpYmxlVGV4dEZvck1hcmtlciA9IHBsYWluVGV4dChyYW5nZUZvck1hcmtl
cik7Ci0gICAgICAgICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFy
a2VyID0gbWFya2VyLT5hbHRlcm5hdGl2ZXMoKS5zaXplKCkgKyAxOworICAgICAgICAgICAgc2l6
ZV90IGludGVycHJldGF0aW9uc0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IGFsdGVybmF0aXZlcy5z
aXplKCkgKyAxOwogICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnByZXRh
dGlvbnNDb3VudDsgKytpKSB7CiAgICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRleHQgZm9y
IHRoZSBpdGggaW50ZXJwcmV0YXRpb24uIEl0IHdpbGwgZWl0aGVyIGJlIHRoZSB2aXNpYmxlIHRl
eHQsIG9yIG9uZSBvZiBpdHMKICAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgc3RvcmVk
IGluIHRoZSBtYXJrZXIuCkBAIC03NzAsNyArNzcyLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVy
cHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAgICAgICAgICBpZiAoIWlu
ZGV4T2ZJbnRlcnByZXRhdGlvbkZvckN1cnJlbnRNYXJrZXIpCiAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZChpbnRlcnByZXRhdGlvbnNbaV0sIHZpc2libGVUZXh0Rm9yTWFya2VyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlv
bnNbaV0sIG1hcmtlci0+YWx0ZXJuYXRpdmVzKCkuYXQoaSAlIG1hcmtlci0+YWx0ZXJuYXRpdmVz
KCkuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbnNb
aV0sIGFsdGVybmF0aXZlc1tpICUgYWx0ZXJuYXRpdmVzLnNpemUoKV0pOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBjb21iaW5hdGlvbnNTb0ZhciAqPSBpbnRlcnByZXRhdGlvbnNDb3Vu
dEZvckN1cnJlbnRNYXJrZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9T
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vy
dmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCA5OGY1YzVlYjk4MDE0MDEyZDc5ZTM1ZTBi
YTM2ODY5M2JiYWU0YWFjLi4wMTA0ZmVlMjE3ZGNiZWEwNzcwNTg4Y2NkMDg4YWYzMjFhZTE0MWJi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW0KQEAgLTE5MCwxNiArMTkwLDYgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpIaWdobGlnaHQ6OmRpZEZpbmlzaEZhZGVPdXRBbmltYXRpb24oKQogICAgIGxheWVy
KCkucmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCi1zdGF0aWMgSW50UmVjdCB0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKFJhbmdlJiByYW5nZSkKLXsKLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiB0ZXh0UXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHModGV4dFF1YWRzKTsKLSAg
ICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFk
cykKLSAgICAgICAgYm91bmRpbmdSZWN0LnVuaXRlKHF1YWQuYm91bmRpbmdCb3goKSk7Ci0gICAg
cmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoYm91bmRpbmdSZWN0KTsKLX0KLQogU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcihQYWdlJiBwYWdlKQogICAg
IDogbV9wYWdlKHBhZ2UpCiAgICAgLCBtX2RldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyKCp0
aGlzLCAmU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZGV0ZXJtaW5lQWN0aXZlSGlnaGxpZ2h0
VGltZXJGaXJlZCkKQEAgLTUwMSwxNyArNDkxLDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMoKQogICAgIEZyYW1lVmlldyYgbWFp
bkZyYW1lVmlldyA9ICptYWluRnJhbWUoKS52aWV3KCk7CiAKICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogcGhvbmVOdW1iZXJSYW5nZXMpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaG9r
ZSBpZiB0aGUgcmFuZ2Ugd3JhcHMgYXJvdW5kIHRoZSBlZGdlIG9mIHRoZSB2aWV3LgotICAgICAg
ICAvLyBXaGF0IHNob3VsZCB3ZSBkbyBpbiB0aGF0IGNhc2U/Ci0gICAgICAgIEludFJlY3QgcmVj
dCA9IHRleHRRdWFkc1RvQm91bmRpbmdSZWN0Rm9yUmFuZ2UoKnJhbmdlKTsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgbWFrZXMgYSBiaWcgcmVjdCBpZiB0aGUgcmFuZ2UgZXh0ZW5kcyBmcm9tIHRo
ZSBlbmQgb2Ygb25lIGxpbmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LiBIYW5kbGUgdGhhdCBj
YXNlIGJldHRlcj8KKyAgICAgICAgYXV0byByZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRC
b3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOwog
CiAgICAgICAgIC8vIENvbnZlcnQgdG8gdGhlIG1haW4gZG9jdW1lbnQncyBjb29yZGluYXRlIHNw
YWNlLgogICAgICAgICAvLyBGSVhNRTogSXQncyBhIGxpdHRsZSBjcmF6eSB0byBjYWxsIGNvbnRl
bnRzVG9XaW5kb3cgYW5kIHRoZW4gd2luZG93VG9Db250ZW50cyBpbiBvcmRlciB0byBnZXQgdGhl
IHJpZ2h0IGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAgIC8vIFdlIHNob3VsZCBjb25zaWRlciBh
ZGRpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8gU2Nyb2xsVmlldyBmb3IgY29udGVudHNUb0Rv
Y3VtZW50KCkuIFJpZ2h0IG5vdywgY29udGVudHNUb1Jvb3RWaWV3KCkgaXMKICAgICAgICAgLy8g
bm90IGVxdWl2YWxlbnQgdG8gd2hhdCB3ZSBuZWVkIHdoZW4geW91IGhhdmUgYSB0b3BDb250ZW50
SW5zZXQgb3IgYSBoZWFkZXIgYmFubmVyLgotICAgICAgICBGcmFtZVZpZXcqIHZpZXdGb3JSYW5n
ZSA9IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICBhdXRvKiB2aWV3Rm9y
UmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3
Rm9yUmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICByZWN0LnNldExvY2F0
aW9uKG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRz
VG9XaW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOwogCiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSBy
ZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRm
b3JtRGF0YUN1ZVZhbHVlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaAppbmRleCA0YmM2MzM0YWJlMmIzNGM5ZjRhZWIyYTNmZmNiYmZj
NzkxYzBhZGYwLi41MzUzMWM3OGQ4ZmU2NDI3ZjJiNGVkNGZhNzVkOTJiNDU5YTJmMDg5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxhdGZvcm1EYXRhQ3Vl
VmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TZXJpYWxpemVkUGxhdGZvcm1E
YXRhQ3VlVmFsdWUuaApAQCAtMzAsMTAgKzMwLDYgQEAKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9j
Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi0jaWYgIWRlZmluZWQoX19PQkpDX18p
Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JN
KENPQ09BKQogdXNpbmcgUGxhdGZvcm1OYXRpdmVWYWx1ZSA9IGlkOwogI2Vsc2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCmluZGV4IGM1Njg3NzY3
Yzk4OTliODY4OTNiM2UxNWM5ZDI1NjM3YWNmYzYzYWMuLjM0ZWQzZThlYjg0NGM2MGEzNGEwOWRm
N2U4YWQ3YWYwZWM0MGQyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcApAQCAtMjI3LDQgKzIyNywyNCBAQCBib29sIEZsb2F0UXVhZDo6aXND
b3VudGVyY2xvY2t3aXNlKCkgY29uc3QKICAgICByZXR1cm4gZGV0ZXJtaW5hbnQobV9wMiAtIG1f
cDEsIG1fcDMgLSBtX3AyKSA8IDA7CiB9CiAKK1ZlY3RvcjxGbG9hdFJlY3Q+IGJvdW5kaW5nQm94
ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IGJveGVzOworICAgIGJveGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocXVhZHMuc2l6ZSgp
KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBxdWFkcykKKyAgICAgICAgYm94ZXMudW5j
aGVja2VkQXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7CisgICAgcmV0dXJuIGJveGVzOworfQor
CitGbG9hdFJlY3QgdW5pdGVkQm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYg
cXVhZHMpCit7CisgICAgYXV0byBzaXplID0gcXVhZHMuc2l6ZSgpOworICAgIGlmICghc2l6ZSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHJlc3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5n
Qm94KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHJl
c3VsdC51bml0ZUV2ZW5JZkVtcHR5KHF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgKaW5kZXggY2FmOWQ3MjYyYWFkYWU5MmM1NGI0
NjM2MmI1ODVkODk0MWQwNTE4Ni4uMTgwY2NmMTMzNmVmMmFmYTYzZjBmNDNlODZiNDgzMWJmYzlm
ZWFkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRR
dWFkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgK
QEAgLTI2LDE1ICsyNiwxNiBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEZsb2F0UXVh
ZF9oCi0jZGVmaW5lIEZsb2F0UXVhZF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkZsb2F0
UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisvLyBGSVhN
RTogU2VlbXMgbGlrZSB0aGlzIHdvdWxkIGJlIGJldHRlciBhcyBhIHN0cnVjdC4KKwogLy8gQSBG
bG9hdFF1YWQgaXMgYSBjb2xsZWN0aW9uIG9mIDQgcG9pbnRzLCBvZnRlbiByZXByZXNlbnRpbmcg
dGhlIHJlc3VsdCBvZgogLy8gbWFwcGluZyBhIHJlY3RhbmdsZSB0aHJvdWdoIHRyYW5zZm9ybXMu
IFdoZW4gaW5pdGlhbGl6ZWQgZnJvbSBhIHJlY3QsIHRoZQogLy8gcG9pbnRzIGFyZSBpbiBjbG9j
a3dpc2Ugb3JkZXIgZnJvbSB0b3AgbGVmdC4KQEAgLTE2NSwyMiArMTY2LDE1IEBAIGlubGluZSBG
bG9hdFF1YWQmIG9wZXJhdG9yLT0oRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFNpemUmIGIpCiAK
IGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgRmxvYXRRdWFkJiBhLCBjb25zdCBGbG9hdFF1
YWQmIGIpCiB7Ci0gICAgcmV0dXJuIGEucDEoKSA9PSBiLnAxKCkgJiYKLSAgICAgICAgICAgYS5w
MigpID09IGIucDIoKSAmJiAKLSAgICAgICAgICAgYS5wMygpID09IGIucDMoKSAmJgotICAgICAg
ICAgICBhLnA0KCkgPT0gYi5wNCgpOworICAgIHJldHVybiBhLnAxKCkgPT0gYi5wMSgpICYmIGEu
cDIoKSA9PSBiLnAyKCkgJiYgYS5wMygpID09IGIucDMoKSAmJiBhLnA0KCkgPT0gYi5wNCgpOwog
fQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxv
YXRRdWFkJiBiKQogewotICAgIHJldHVybiBhLnAxKCkgIT0gYi5wMSgpIHx8Ci0gICAgICAgICAg
IGEucDIoKSAhPSBiLnAyKCkgfHwgCi0gICAgICAgICAgIGEucDMoKSAhPSBiLnAzKCkgfHwKLSAg
ICAgICAgICAgYS5wNCgpICE9IGIucDQoKTsKKyAgICByZXR1cm4gIShhID09IGIpOwogfQogCi19
ICAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotCi0jZW5kaWYgLy8gRmxvYXRRdWFkX2gKK1ZlY3Rv
cjxGbG9hdFJlY3Q+IGJvdW5kaW5nQm94ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mKTsKK1dF
QkNPUkVfRVhQT1JUIEZsb2F0UmVjdCB1bml0ZWRCb3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxG
bG9hdFF1YWQ+Jik7CiAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaAppbmRleCAxOWUxYTZiN2ZiYzE5
MTRmNzE2NzM5ZjU3ZjhiNmI2OGRmYTc1NjcwLi5hMzQ1MjQ3NjhmNGIyOGIzMWI2NzdkZTMwYTlm
NzBhNGM3MmExZmFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9S
ZXNvdXJjZUhhbmRsZS5oCkBAIC01Miw5ICs1Miw2IEBAIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5
OwogT0JKQ19DTEFTUyBOU0Vycm9yOwogT0JKQ19DTEFTUyBOU1VSTENvbm5lY3Rpb247CiBPQkpD
X0NMQVNTIE5TVVJMUmVxdWVzdDsKLSNpZm5kZWYgX19PQkpDX18KLXR5cGVkZWYgc3RydWN0IG9i
amNfb2JqZWN0ICppZDsKLSNlbmRpZgogI2VuZGlmCiAKICNpZiBVU0UoQ0ZVUkxDT05ORUNUSU9O
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50
aWNhdGlvbkNoYWxsZW5nZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9B
dXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCmluZGV4IDNmNjQ4ZTA2MDQwYjUzYWI3OGY2ZWFhZGEw
MjM1NGFmY2Y5OGM0NzAuLmI0Y2E3OWMzNWZkODAwYTc3YzFlNjExNDU0N2JjZTkwOThjMDk4NDYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nm
L0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKQEAgLTMwLDE3ICszMCw5IEBACiAjaW5jbHVkZSA8
d3RmL1JlZlB0ci5oPgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKLQogdHlwZWRlZiBzdHJ1
Y3QgX0NGVVJMQXV0aENoYWxsZW5nZSogQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmOwotCiAjZWxzZQot
Ci0jaWZuZGVmIF9fT0JKQ19fCi10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5k
aWYKLQogT0JKQ19DTEFTUyBOU1VSTEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwotCiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDksNiArNDEsNyBAQCBjbGFzcyBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSA6IHB1YmxpYyBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZUJhc2UgewogcHVi
bGljOgogICAgIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKCkge30KICAgICBXRUJDT1JFX0VYUE9S
VCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShjb25zdCBQcm90ZWN0aW9uU3BhY2UmLCBjb25zdCBD
cmVkZW50aWFsJiBwcm9wb3NlZENyZWRlbnRpYWwsIHVuc2lnbmVkIHByZXZpb3VzRmFpbHVyZUNv
dW50LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgY29uc3QgUmVzb3VyY2VFcnJvciYpOworCiAj
aWYgVVNFKENGVVJMQ09OTkVDVElPTikKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShDRlVS
TEF1dGhDaGFsbGVuZ2VSZWYsIEF1dGhlbnRpY2F0aW9uQ2xpZW50Kik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA4YTAyYmU0ZWJlN2VlOTBjZGVh
MjQwZGZiZjE4ZWUzNWU4NzIyNzY2Li5jMTRiMGZjN2JkZDc5YmM4OGVlZjExZWJhNWQ0YjZmNWIx
NDQ1N2UxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBA
IC04NjMsNyArODYzLDcgQEAgYXV0byBJbmxpbmVUZXh0Qm94OjpyZXNvbHZlU3R5bGVGb3JNYXJr
ZWRUZXh0KGNvbnN0IE1hcmtlZFRleHQmIG1hcmtlZFRleHQsIGNvbnMKICNpZiBQTEFURk9STShN
QUMpCiAgICAgICAgIHN0eWxlLnRleHRTdHlsZXMuZmlsbENvbG9yID0gcmVuZGVyZXIoKS50aGVt
ZSgpLnN5c3RlbUNvbG9yKENTU1ZhbHVlQXBwbGVTeXN0ZW1MYWJlbCwgc3R5bGVDb2xvck9wdGlv
bnMpOwogI2VuZGlmCi0gICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IG1hcmtlZFRleHQu
bWFya2VyLT5pc0FjdGl2ZU1hdGNoKCkgPyByZW5kZXJlcigpLnRoZW1lKCkuYWN0aXZlVGV4dFNl
YXJjaEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKSA6IHJlbmRlcmVyKCkudGhlbWUo
KS5pbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucyk7Cisg
ICAgICAgIHN0eWxlLmJhY2tncm91bmRDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS50ZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlvbnMpOwogICAgICAgICBicmVhazsKICAg
ICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAppbmRleCA0MGJh
MWFlMjE3NjAyNTgyNDc4ZjI2NTA3OGFhZGYyMzU5N2E3NTA5Li40ZjM3OGQ3MzVmOGZiMmFkNmNm
OTg2ZjZlMmFkOTk2MmE4YWJkZDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmNwcApAQCAtMTAzNywyNCArMTAzNywxOCBAQCB2b2lkIFJlbmRlckJveDo6Y29tcHV0ZUludHJp
bnNpY0xvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdQogTGF5
b3V0VW5pdCBSZW5kZXJCb3g6Om1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIGNvbnN0CiB7CiAg
ICAgaWYgKHByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSgpKSB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29w
ZShjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpKTsKLSNlbmRpZgotICAgICAgICBjb25zdF9j
YXN0PFJlbmRlckJveCo+KHRoaXMpLT5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwor
ICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29w
ZSgqdGhpcyk7CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Jj4oKnRoaXMpLmNvbXB1dGVQ
cmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgfQotICAgICAgICAKICAgICByZXR1cm4gbV9t
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQm94OjptYXhQ
cmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzRGlydHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoY29uc3RfY2FzdDxSZW5kZXJCb3gq
Pih0aGlzKSk7Ci0jZW5kaWYKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+
Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOworICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKS5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygp
OwogICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKaW5kZXgg
ZDNlYjQ2M2FjYjhiZGJlN2ZiNWQwZjcxZGZlZjg4NjQ3YjU3ZTlmZi4uZWFkOWQ3NjQwY2U0NjRk
NjI5ODdiNWJhNzdlMjkwMDVlMzM2ZjU2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb3VudGVyLmNwcApAQCAtNDM2LDE0ICs0MzYsMTIgQEAgdm9pZCBSZW5kZXJDb3VudGVy
Ojp1cGRhdGVDb3VudGVyKCkKIAogdm9pZCBSZW5kZXJDb3VudGVyOjpjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocyhmbG9hdCBsZWFkKQogewotI2lmbmRlZiBOREVCVUcKICAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkbid0IGJlIG1vZGlmeWluZyB0aGUgdHJlZSBpbiBjb21wdXRlUHJlZmVycmVk
TG9naWNhbFdpZHRocy4KICAgICAvLyBJbnN0ZWFkLCB3ZSBzaG91bGQgcHJvcGVybHkgaG9vayB0
aGUgYXBwcm9wcmlhdGUgY2hhbmdlcyBpbiB0aGUgRE9NIGFuZCBtb2RpZnkKICAgICAvLyB0aGUg
cmVuZGVyIHRyZWUgdGhlbi4gV2hlbiB0aGF0J3MgZG9uZSwgd2UgYWxzbyB3b24ndCBuZWVkIHRv
IG92ZXJyaWRlCiAgICAgLy8gY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMgYXQgYWxsLgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDQ4MjkKLSAg
ICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSh0aGlz
LCBmYWxzZSk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlv
dXRGb3JiaWRkZW5TY29wZSgqdGhpcywgZmFsc2UpOwogCiAgICAgc2V0UmVuZGVyZWRUZXh0KG9y
aWdpbmFsVGV4dCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAppbmRleCAwODFkNGM3NjQwM2E4ZWJiZTAwNzlkYTIxMjUzY2EyZmUwYmFj
YmQyLi40YmJlM2UwOTZmYTIyMzNjYmZlNmFjMzA2YmZhMWY3YjFiMDMzYmVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjg5MCw5
ICsyODkwLDcgQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqIGdyYXBoaWNzTGF5ZXIsIEdyYXAKICAgICBpZiAoZXZlbnRSZWdpb25D
b250ZXh0KQogICAgICAgICBwYWludEZsYWdzLmFkZChSZW5kZXJMYXllcjo6UGFpbnRMYXllckNv
bGxlY3RpbmdFdmVudFJlZ2lvbik7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgUmVuZGVyRWxlbWVu
dDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVlZHNMYXlvdXQoJnJl
bmRlcmVyKCkpOwotI2VuZGlmCisgICAgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3Ji
aWRkZW5TY29wZSBmb3JiaWRTZXROZWVkc0xheW91dChyZW5kZXJlcigpKTsKIAogICAgIGF1dG8g
cGFpbnRPbmVMYXllciA9IFsmXShSZW5kZXJMYXllciYgbGF5ZXIsIE9wdGlvblNldDxSZW5kZXJM
YXllcjo6UGFpbnRMYXllckZsYWc+IHBhaW50RmxhZ3MpIHsKICAgICAgICAgRnJhbWVWaWV3OjpQ
YWludGluZ1N0YXRlIHBhaW50aW5nU3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IGQ1NjAyODc1MjZkMWI3ZGI1YjliNDk2MmUxNTZiYjA2ZDU4MzZl
MTkuLjBlM2Y2YTI0NTM5YTU3Y2QxMDE0MTNlMDY0YTFjMzhmMDc0NjRkYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0zLDcgKzMsNyBAQAogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAg
ICAgIChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAxMSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAy
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vKQogICoKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJIVE1MVGFibGVFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkxvZ2ljYWxTZWxl
Y3Rpb25PZmZzZXRDYWNoZXMuaCIKKyNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJD
aGlsZEl0ZXJhdG9yLmgiCkBAIC04NSwxOSArODYsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIAogV1RGX01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck9iamVjdCk7CiAKLSNp
Zm5kZWYgTkRFQlVHCisjaWYgQVNTRVJUX0VOQUJMRUQKIAotUmVuZGVyT2JqZWN0OjpTZXRMYXlv
dXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QsIGJvb2wgaXNGb3JiaWRkZW4pCitSZW5kZXJPYmplY3Q6
OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5T
Y29wZShjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgYm9vbCBpc0ZvcmJpZGRlbikK
ICAgICA6IG1fcmVuZGVyT2JqZWN0KHJlbmRlck9iamVjdCkKLSAgICAsIG1fcHJlZXhpc3RpbmdG
b3JiaWRkZW4obV9yZW5kZXJPYmplY3QtPmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSkKKyAg
ICAsIG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4obV9yZW5kZXJPYmplY3QuaXNTZXROZWVkc0xheW91
dEZvcmJpZGRlbigpKQogewotICAgIG1fcmVuZGVyT2JqZWN0LT5zZXROZWVkc0xheW91dElzRm9y
YmlkZGVuKGlzRm9yYmlkZGVuKTsKKyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElz
Rm9yYmlkZGVuKGlzRm9yYmlkZGVuKTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCkKIHsKLSAg
ICBtX3JlbmRlck9iamVjdC0+c2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihtX3ByZWV4aXN0aW5n
Rm9yYmlkZGVuKTsKKyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVu
KG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4pOwogfQorCiAjZW5kaWYKIAogc3RydWN0IFNhbWVTaXpl
QXNSZW5kZXJPYmplY3QgewpAQCAtNTIxLDExICs1MjMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
bWFya0NvbnRhaW5pbmdCbG9ja3NGb3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dCBzY2hlZHVsZVJl
bGF5bwogICAgIGJvb2wgaGFzT3V0T2ZGbG93UG9zaXRpb24gPSAhaXNUZXh0KCkgJiYgc3R5bGUo
KS5oYXNPdXRPZkZsb3dQb3NpdGlvbigpOwogCiAgICAgd2hpbGUgKGFuY2VzdG9yKSB7Ci0jaWZu
ZGVmIE5ERUJVRwotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSByZW1vdmUg
dGhlIHNwZWNpYWwgY2FzZXMgZm9yIGNvdW50ZXJzLCBxdW90ZXMgYW5kIG1hdGhtbAotICAgICAg
ICAvLyBjYWxsaW5nIHNldE5lZWRzTGF5b3V0IGR1cmluZyBwcmVmZXJyZWQgd2lkdGggY29tcHV0
YXRpb24uCi0gICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJp
ZGRlblNjb3BlKGFuY2VzdG9yLCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOwotI2VuZGlm
CisgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgc3BlY2lh
bCBjYXNlcyBmb3IgY291bnRlcnMsIHF1b3RlcyBhbmQgbWF0aG1sIGNhbGxpbmcgc2V0TmVlZHNM
YXlvdXQgZHVyaW5nIHByZWZlcnJlZCB3aWR0aCBjb21wdXRhdGlvbi4KKyAgICAgICAgU2V0TGF5
b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKmFuY2VzdG9yLCBp
c1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOworCiAgICAgICAgIC8vIERvbid0IG1hcmsgdGhl
IG91dGVybW9zdCBvYmplY3Qgb2YgYW4gdW5yb290ZWQgc3VidHJlZS4gVGhhdCBvYmplY3Qgd2ls
bCBiZQogICAgICAgICAvLyBtYXJrZWQgd2hlbiB0aGUgc3VidHJlZSBpcyBhZGRlZCB0byB0aGUg
ZG9jdW1lbnQuCiAgICAgICAgIGF1dG8gY29udGFpbmVyID0gYW5jZXN0b3ItPmNvbnRhaW5lcigp
OwpAQCAtNzEzLDE1ICs3MTMsNyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZAogICAgIGlmICh1
c2VUcmFuc2Zvcm1zKSB7CiAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAg
ICBhYnNvbHV0ZVF1YWRzKHF1YWRzLCB3YXNGaXhlZCk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBx
dWFkcy5zaXplKCk7Ci0gICAgICAgIGlmICghbikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgCi0gICAgICAgIEludFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91
bmRpbmdCb3goKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAg
ICAgICAgICByZXN1bHQudW5pdGUocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVu
aXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IGFic1Bv
cyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCksIDAgLyogaWdub3JlIHRyYW5zZm9ybXMg
Ki8sIHdhc0ZpeGVkKTsKQEAgLTc1NywyMSArNzQ5LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFi
c29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogRmxvYXRSZWN0
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSogcmFuZ2UpCiB7CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwotCisgICAgICAgIHJldHVybiB7IH07CiAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRh
dGVMYXlvdXQoKTsKLQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLT5h
YnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0KLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gRmxvYXRSZWN0KCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNb
MF0uYm91bmRpbmdCb3goKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUo
KTsgKytpKQotICAgICAgICByZXN1bHQudW5pdGVFdmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGlu
Z0JveCgpKTsKLQotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHVuaXRlZEJvdW5kaW5n
Qm94ZXMoYWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0
OjphZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihMYXlvdXRSZWN0JiByZXN1bHQpCkBAIC0xOTA3LDYg
KzE4ODcsMjEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Omhhc05vbkVtcHR5VmlzaWJsZVJlY3RSZXNw
ZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1ZlY3Rv
cjxGbG9hdFF1YWQ+IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3sKKyAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcyhy
YW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAg
ICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCisgICAgICAgICAgICByZW5kZXJl
ci0+YWJzb2x1dGVRdWFkcyhxdWFkcyk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+
KHJlbmRlcmVyKSkgeworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZShyYW5nZSwgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkpOworICAg
ICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJl
cikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5l
bmQsIHVzZVNlbGVjdGlvbkhlaWdodCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBx
dWFkczsKK30KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIAogdm9pZCBwcmludFJlbmRl
clRyZWVGb3JMaXZlRG9jdW1lbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaAppbmRleCAyNjRmMWQxNmViNjkzMTEzNjkxMmMyYWQyNzQxZjc1ZTE1N2YwZGFlLi4wOTky
NGFmZmM3M2EzOGUzNGJmNTMzNjczNjE4NmIzYWI2MmExYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAy
MDAwIEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA0
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Myw2ICs3Myw3IEBA
IGNsYXNzIFNlbGVjdGlvblJlY3Q7CiAjZW5kaWYKIAogc3RydWN0IFBhaW50SW5mbzsKK3N0cnVj
dCBTaW1wbGVSYW5nZTsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiBjb25zdCBpbnQgY2Fy
ZXRXaWR0aCA9IDI7IC8vIFRoaXMgdmFsdWUgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIFVJ
S2l0LiBTZWUgPHJkYXI6Ly9wcm9ibGVtLzE1NTgwNjAxPi4KQEAgLTE0NywyMCArMTQ4LDEzIEBA
IHB1YmxpYzoKICAgICAvLyBTY3JvbGxpbmcgaXMgYSBSZW5kZXJCb3ggY29uY2VwdCwgaG93ZXZl
ciBzb21lIGNvZGUganVzdCBjYXJlcyBhYm91dCByZWN1cnNpdmVseSBzY3JvbGxpbmcgb3VyIGVu
Y2xvc2luZyBTY3JvbGxhYmxlQXJlYShzKS4KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9s
bFJlY3RUb1Zpc2libGUoY29uc3QgTGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lk
ZUZpeGVkLCBjb25zdCBTY3JvbGxSZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgLy8gQ29u
dmVuaWVuY2UgZnVuY3Rpb24gZm9yIGdldHRpbmcgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJv
eCBvZiBhIFJlbmRlck9iamVjdC4KKyAgICAvLyBOZWFyZXN0IGVuY2xvc2luZyBib3guCiAgICAg
V0VCQ09SRV9FWFBPUlQgUmVuZGVyQm94JiBlbmNsb3NpbmdCb3goKSBjb25zdDsKICAgICBSZW5k
ZXJCb3hNb2RlbE9iamVjdCYgZW5jbG9zaW5nQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAgICBj
b25zdCBSZW5kZXJCb3gqIGVuY2xvc2luZ1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygp
IGNvbnN0OwogCi0gICAgLy8gRnVuY3Rpb24gdG8gcmV0dXJuIG91ciBlbmNsb3NpbmcgZmxvdyB0
aHJlYWQgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgb25lLiBUaGlzCi0gICAgLy8gZnVuY3Rp
b24gZm9sbG93cyB0aGUgY29udGFpbmluZyBibG9jayBjaGFpbi4KLSAgICBSZW5kZXJGcmFnbWVu
dGVkRmxvdyogZW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKSBjb25zdAotICAgIHsKLSAgICAgICAg
aWYgKGZyYWdtZW50ZWRGbG93U3RhdGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBsb2NhdGVFbmNsb3Np
bmdGcmFnbWVudGVkRmxvdygpOwotICAgIH0KKyAgICAvLyBSZXR1cm4gb3VyIGVuY2xvc2luZyBm
bG93IHRocmVhZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuIEZvbGxvd3MgdGhlIGNv
bnRhaW5pbmcgYmxvY2sgY2hhaW4uCisgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGVuY2xvc2lu
Z0ZyYWdtZW50ZWRGbG93KCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHVzZURh
cmtBcHBlYXJhbmNlKCkgY29uc3Q7CiAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
IHN0eWxlQ29sb3JPcHRpb25zKCkgY29uc3Q7CkBAIC0xNjgsMjAgKzE2MiwxMiBAQCBwdWJsaWM6
CiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICB2b2lkIHNldEhhc0FYT2JqZWN0KGJvb2wgZmxhZykg
eyBtX2hhc0FYT2JqZWN0ID0gZmxhZzsgfQogICAgIGJvb2wgaGFzQVhPYmplY3QoKSBjb25zdCB7
IHJldHVybiBtX2hhc0FYT2JqZWN0OyB9CisjZW5kaWYKIAotICAgIC8vIEhlbHBlciBjbGFzcyBm
b3JiaWRkaW5nIGNhbGxzIHRvIHNldE5lZWRzTGF5b3V0KCkgZHVyaW5nIGl0cyBsaWZldGltZS4K
LSAgICBjbGFzcyBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICBleHBsaWNpdCBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShSZW5kZXJPYmpl
Y3QqLCBib29sIGlzRm9yYmlkZGVuID0gdHJ1ZSk7Ci0gICAgICAgIH5TZXRMYXlvdXROZWVkZWRG
b3JiaWRkZW5TY29wZSgpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9y
ZW5kZXJPYmplY3Q7Ci0gICAgICAgIGJvb2wgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKLSAgICB9
OwotI2VuZGlmIC8vIEFTU0VSVF9FTkFCTEVECisgICAgLy8gRm9yYmlkIGNhbGxzIHRvIHNldE5l
ZWRzTGF5b3V0KCkgZHVyaW5nIGl0cyBsaWZldGltZS4KKyAgICBjbGFzcyBTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZTsKIAotICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5n
IGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxp
bmUgc3R5bGUgdG8gb3VyIGlubGluZQotICAgIC8vIGNoaWxkcmVuLgorICAgIC8vIE9idGFpbnMg
dGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBj
b250cmlidXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZSBjaGlsZHJlbi4KICAg
ICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogICAgIAogICAg
IC8vIFJlbmRlck9iamVjdCB0cmVlIG1hbmlwdWxhdGlvbgpAQCAtMzg5LDIyICszNzUsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc0FzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gaXNSZXBs
YWNlZCgpICYmIChpc0ltYWdlKCkgfHwgaXNWaWRlbygpIHx8IGlzQ2FudmFzKCkpOyB9CiAgICAg
Ym9vbCBpc0Fub255bW91cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzQW5vbnltb3Vz
KCk7IH0KLSAgICBib29sIGlzQW5vbnltb3VzQmxvY2soKSBjb25zdAotICAgIHsKLSAgICAgICAg
Ly8gVGhpcyBmdW5jdGlvbiBpcyBrZXB0IGluIHN5bmMgd2l0aCBhbm9ueW1vdXMgYmxvY2sgY3Jl
YXRpb24gY29uZGl0aW9ucyBpbgotICAgICAgICAvLyBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnlt
b3VzQmxvY2soKS4gVGhpcyBpbmNsdWRlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMKLSAgICAgICAg
Ly8gUmVuZGVyQmxvY2sgaGF2aW5nIGEgRGlzcGxheVR5cGU6OkJsb2NrIG9yIERpc3BsYXlUeXBl
OjpCb3ggZGlzcGxheS4gT3RoZXIgY2xhc3NlcyBzdWNoIGFzIFJlbmRlclRleHRGcmFnbWVudAot
ICAgICAgICAvLyBhcmUgbm90IFJlbmRlckJsb2NrcyBhbmQgd2lsbCByZXR1cm4gZmFsc2UuIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3MDkuIAotICAgICAg
ICByZXR1cm4gaXNBbm9ueW1vdXMoKSAmJiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5
cGU6OkJsb2NrIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpCb3gpICYmIHN0
eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUgJiYgaXNSZW5kZXJCbG9jaygpICYm
ICFpc0xpc3RNYXJrZXIoKSAmJiAhaXNSZW5kZXJGcmFnbWVudGVkRmxvdygpICYmICFpc1JlbmRl
ck11bHRpQ29sdW1uU2V0KCkgJiYgIWlzUmVuZGVyVmlldygpCi0jaWYgRU5BQkxFKEZVTExTQ1JF
RU5fQVBJKQotICAgICAgICAgICAgJiYgIWlzUmVuZGVyRnVsbFNjcmVlbigpCi0gICAgICAgICAg
ICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKQotI2VuZGlmCi0jaWYgRU5BQkxF
KE1BVEhNTCkKLSAgICAgICAgICAgICYmICFpc1JlbmRlck1hdGhNTEJsb2NrKCkKLSNlbmRpZgot
ICAgICAgICAgICAgOwotICAgIH0KKyAgICBib29sIGlzQW5vbnltb3VzQmxvY2soKSBjb25zdDsK
IAogICAgIGJvb2wgaXNGbG9hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmZsb2F0
aW5nKCk7IH0KIApAQCAtNDQ2LDE5ICs0MTcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVmlz
aWJsZUJveERlY29yYXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuYm94RGVjb3Jh
dGlvblN0YXRlKCkgIT0gTm9Cb3hEZWNvcmF0aW9uczsgfQogICAgIGJvb2wgYmFja2dyb3VuZElz
S25vd25Ub0JlT2JzY3VyZWQoY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAotICAg
IGJvb2wgbmVlZHNMYXlvdXQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0Zmll
bGRzLm5lZWRzTGF5b3V0KCkgfHwgbV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgp
IHx8IG1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgfHwgbV9i
aXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpIHx8IG1fYml0ZmllbGRz
Lm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7Ci0gICAgfQotCisgICAgYm9vbCBuZWVk
c0xheW91dCgpIGNvbnN0OwogICAgIGJvb2wgc2VsZk5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1
cm4gbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKTsgfQogICAgIGJvb2wgbmVlZHNQb3NpdGlvbmVk
TW92ZW1lbnRMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9u
ZWRNb3ZlbWVudExheW91dCgpOyB9Ci0gICAgYm9vbCBuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExh
eW91dE9ubHkoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRz
UG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkg
JiYgIW1fYml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgJiYg
IW1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubmVlZHNT
aW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwotICAgIH0KKyAgICBib29sIG5lZWRzUG9zaXRp
b25lZE1vdmVtZW50TGF5b3V0T25seSgpIGNvbnN0OwogCiAgICAgYm9vbCBwb3NDaGlsZE5lZWRz
TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgp
OyB9CiAgICAgYm9vbCBuZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOyB9CkBA
IC01MDgsMTcgKzQ3MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eShib29sLCBNYXJraW5nQmVoYXZpb3IgPSBNYXJrQ29udGFpbmluZ0Jsb2NrQ2hh
aW4pOwogICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRhaW5lclByZWZlcnJlZExvZ2ljYWxXaWR0aHMo
KTsKICAgICAKLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpCi0g
ICAgewotICAgICAgICBzZXROZWVkc0xheW91dCgpOwotICAgICAgICBzZXRQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkodHJ1ZSk7Ci0gICAgfQorICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAKLSAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9zaXRpb25U
eXBlIHBvc2l0aW9uKQotICAgIHsKLSAgICAgICAgQVNTRVJUKChwb3NpdGlvbiAhPSBQb3NpdGlv
blR5cGU6OkFic29sdXRlICYmIHBvc2l0aW9uICE9IFBvc2l0aW9uVHlwZTo6Rml4ZWQpIHx8IGlz
Qm94KCkpOwotICAgICAgICBtX2JpdGZpZWxkcy5zZXRQb3NpdGlvbmVkU3RhdGUoc3RhdGljX2Nh
c3Q8aW50Pihwb3NpdGlvbikpOwotICAgIH0KKyAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9z
aXRpb25UeXBlKTsKICAgICB2b2lkIGNsZWFyUG9zaXRpb25lZFN0YXRlKCkgeyBtX2JpdGZpZWxk
cy5jbGVhclBvc2l0aW9uZWRTdGF0ZSgpOyB9CiAKICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wg
YiA9IHRydWUpIHsgbV9iaXRmaWVsZHMuc2V0RmxvYXRpbmcoYik7IH0KQEAgLTU2Myw3ICs1MTcs
NyBAQCBwdWJsaWM6CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihp
bnQgb2Zmc2V0LCBFQWZmaW5pdHkpIGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVW
aXNpYmxlUG9zaXRpb24oY29uc3QgUG9zaXRpb24mKSBjb25zdDsKIAotICAgIC8vIHJldHVybnMg
dGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBlbGVtZW50LgorICAg
IC8vIFJldHVybnMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBl
bGVtZW50LgogICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2so
KSBjb25zdDsKICAgICBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93
KCkgY29uc3Q7CiAKQEAgLTU3MiwxMiArNTI2LDkgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQg
YWJzb2x1dGVUb0xvY2FsKGNvbnN0IEZsb2F0UG9pbnQmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0g
MCkgY29uc3Q7CiAKICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCB0byBhYnNvbHV0ZSBjb29y
ZGluYXRlcywgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgotICAgIEZsb2F0UXVhZCBs
b2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgTWFwQ29vcmRpbmF0ZXNG
bGFncyBtb2RlID0gVXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQsIG51bGxw
dHIsIG1vZGUsIHdhc0ZpeGVkKTsKLSAgICB9CisgICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0
ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IFVzZVRyYW5zZm9y
bXMsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikgY29uc3Q7CiAgICAgLy8gQ29udmVydCBhbiBh
YnNvbHV0ZSBxdWFkIHRvIGxvY2FsIGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UXVhZCBhYnNvbHV0
ZVRvTG9jYWxRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSA9
IFVzZVRyYW5zZm9ybXMpIGNvbnN0OworICAgIEZsb2F0UXVhZCBhYnNvbHV0ZVRvTG9jYWxRdWFk
KGNvbnN0IEZsb2F0UXVhZCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zKSBj
b25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIGludG8gdGhlIGNvb3JkaW5hdGUg
c3lzdGVtIG9mIGNvbnRhaW5lciwgdGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgogICAg
IFdFQkNPUkVfRVhQT1JUIEZsb2F0UXVhZCBsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9h
dFF1YWQmLCBjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBN
YXBDb29yZGluYXRlc0ZsYWdzID0gVXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxs
cHRyKSBjb25zdDsKQEAgLTU5NiwxNSArNTQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50Jikg
Y29uc3QgeyB9CiAKLSAgICAvLyBGSVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBl
dmVudHVhbGx5CiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94
UmVjdChib29sIHVzZVRyYW5zZm9ybSA9IHRydWUsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikg
Y29uc3Q7CiAgICAgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNm
b3JtcygpIGNvbnN0IHsgcmV0dXJuIGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGZhbHNlKTsgfQog
CiAgICAgLy8gQnVpbGQgYW4gYXJyYXkgb2YgcXVhZHMgaW4gYWJzb2x1dGUgY29vcmRzIGZvciBs
aW5lIGJveGVzCiAgICAgdmlydHVhbCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVh
ZD4mLCBib29sKiAvKndhc0ZpeGVkKi8gPSBudWxscHRyKSBjb25zdCB7IH0KLQogICAgIHZpcnR1
YWwgdm9pZCBhYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKKyAg
ICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVUZXh0UXVh
ZHMoY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsK
ICAgICBzdGF0aWMgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0Rm9yUmFuZ2UoY29u
c3QgUmFuZ2UqKTsKIAogICAgIC8vIHRoZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRo
aXMgb2JqZWN0IGlzIHBhc3NlZCBhcyB0aGUgcGFpbnRpbmdSb290CkBAIC02MjMsOCArNTczLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgQ3Vyc29yRGlyZWN0aXZlIGdldEN1cnNvcihjb25zdCBM
YXlvdXRQb2ludCYsIEN1cnNvciYpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIHRoZSBSZW5kZXJM
YXllck1vZGVsT2JqZWN0IGluIHRoZSBjb250YWluZXIgY2hhaW4gd2hpY2ggaXMgcmVzcG9uc2li
bGUgZm9yIHBhaW50aW5nIHRoaXMgb2JqZWN0LCBvciBudWxscHRyCi0gICAgLy8gaWYgcGFpbnRp
bmcgaXMgcm9vdC1yZWxhdGl2ZS4gVGhpcyBpcyB0aGUgY29udGFpbmVyIHRoYXQgc2hvdWxkIGJl
IHBhc3NlZCB0byB0aGUgJ2ZvclJlcGFpbnQnCi0gICAgLy8gbWV0aG9kcy4KKyAgICAvLyBpZiBw
YWludGluZyBpcyByb290LXJlbGF0aXZlLiBUaGlzIGlzIHRoZSBjb250YWluZXIgdGhhdCBzaG91
bGQgYmUgcGFzc2VkIHRvIHRoZSAnZm9yUmVwYWludCcgZnVuY3Rpb25zLgogICAgIFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIGNvbnRhaW5lckZvclJlcGFpbnQoKSBjb25zdDsKICAgICAvLyBBY3R1
YWxseSBkbyB0aGUgcmVwYWludCBvZiByZWN0IHIgZm9yIHRoaXMgb2JqZWN0IHdoaWNoIGhhcyBi
ZWVuIGNvbXB1dGVkIGluIHRoZSBjb29yZGluYXRlIHNwYWNlCiAgICAgLy8gb2YgcmVwYWludENv
bnRhaW5lci4gSWYgcmVwYWludENvbnRhaW5lciBpcyBudWxscHRyLCByZXBhaW50IHZpYSB0aGUg
dmlldy4KQEAgLTY0MiwxMCArNTkxLDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUg
cmVjdCB0aGF0IHNob3VsZCBiZSByZXBhaW50ZWQgd2hlbmV2ZXIgdGhpcyBvYmplY3QgY2hhbmdl
cy4gIFRoZSByZWN0IGlzIGluIHRoZSB2aWV3J3MKICAgICAvLyBjb29yZGluYXRlIHNwYWNlLiAg
VGhpcyBtZXRob2QgZGVhbHMgd2l0aCBvdXRsaW5lcyBhbmQgb3ZlcmZsb3cuCi0gICAgTGF5b3V0
UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KG51bGxwdHIpOwotICAgIH0KKyAg
ICBMYXlvdXRSZWN0IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJu
IGNsaXBwZWRPdmVyZmxvd1JlY3RGb3JSZXBhaW50KG51bGxwdHIpOyB9CiAgICAgV0VCQ09SRV9F
WFBPUlQgSW50UmVjdCBwaXhlbFNuYXBwZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSBj
b25zdDsKICAgICB2aXJ0dWFsIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFp
bnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7
CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0VW5pdCBvdXRs
aW5lV2lkdGgpIGNvbnN0OwpAQCAtNjUzLDEwICs1OTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBH
aXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSBy
ZWN0IHN1aXRhYmxlIGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHZpZXcgY29v
cmRpbmF0ZXMuCi0gICAgTGF5b3V0UmVjdCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChjb25z
dCBMYXlvdXRSZWN0JiByKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0
Rm9yUmVwYWludChyLCBudWxscHRyKTsKLSAgICB9CisgICAgTGF5b3V0UmVjdCBjb21wdXRlQWJz
b2x1dGVSZXBhaW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBj
b21wdXRlUmVjdEZvclJlcGFpbnQocmVjdCwgbnVsbHB0cik7IH0KICAgICAvLyBHaXZlbiBhIHJl
Y3QgaW4gdGhlIG9iamVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRh
YmxlIGZvciByZXBhaW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHRoZSBjb29yZGluYXRlIHNw
YWNlIG9mIHJlcGFpbnRDb250YWluZXIuCiAgICAgTGF5b3V0UmVjdCBjb21wdXRlUmVjdEZvclJl
cGFpbnQoY29uc3QgTGF5b3V0UmVjdCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJl
cGFpbnRDb250YWluZXIpIGNvbnN0OwpAQCAtNjg3LDcgKzYzMCw3IEBAIHB1YmxpYzoKIAogICAg
IFdFQkNPUkVfRVhQT1JUIGJvb2wgaGFzTm9uRW1wdHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQYXJl
bnRGcmFtZXMoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIDE7IH0KKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIDE7IH0KIAogICAgIGJvb2wgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgp
IGNvbnN0IHsgcmV0dXJuIChpc0Zsb2F0aW5nKCkgfHwgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkp
OyB9CiAKQEAgLTczMSwxNCArNjc0LDkgQEAgcHVibGljOgogCiAgICAgLy8gVmlydHVhbCBmdW5j
dGlvbiBoZWxwZXJzIGZvciB0aGUgZGVwcmVjYXRlZCBGbGV4aWJsZSBCb3ggTGF5b3V0IChkaXNw
bGF5OiAtd2Via2l0LWJveCkuCiAgICAgdmlydHVhbCBib29sIGlzRGVwcmVjYXRlZEZsZXhpYmxl
Qm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQogICAgIC8vIFZpcnR1YWwgZnVuY3Rpb24g
aGVscGVyIGZvciB0aGUgbmV3IEZsZXhpYmxlQm94IExheW91dCAoZGlzcGxheTogLXdlYmtpdC1m
bGV4KS4KICAgICB2aXJ0dWFsIGJvb2wgaXNGbGV4aWJsZUJveCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBib29sIGlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBpc0ZsZXhpYmxlQm94KCkgfHwgaXNEZXByZWNhdGVk
RmxleGlibGVCb3goKTsKLSAgICB9CisgICAgYm9vbCBpc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVw
cmVjYXRlZCgpIGNvbnN0IHsgcmV0dXJuIGlzRmxleGlibGVCb3goKSB8fCBpc0RlcHJlY2F0ZWRG
bGV4aWJsZUJveCgpOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiAKQEAgLTc2OSwxMCArNzA3LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYgLyogYWRkaXRpb25hbE9mZnNldCAqLywgY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogLyogcGFpbnRDb250YWluZXIgKi8gPSBudWxscHRyKSB7IH07CiAKLSAg
ICBMYXlvdXRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0Ci0gICAgewotICAgICAg
ICByZXR1cm4gb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQobnVsbHB0cik7Ci0gICAgfQorICAgIExh
eW91dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QgeyByZXR1cm4gb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQobnVsbHB0cik7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1v
dmVkRnJvbVRyZWUoKTsKICAgICB2b2lkIHJlc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZU9uUmVtb3Zh
bCgpOwpAQCAtODA1LDE3ICs3NDAsMTEgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wg
c2hvdWxkQXBwbHlDb21wb3NpdGVkQ29udGFpbmVyU2Nyb2xsc0ZvclJlcGFpbnQoKTsKIAotICAg
IHN0YXRpYyBWaXNpYmxlUmVjdENvbnRleHQgdmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWludCgp
Ci0gICAgewotICAgICAgICByZXR1cm4gVmlzaWJsZVJlY3RDb250ZXh0KGZhbHNlLCBmYWxzZSwg
eyBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29udGFpbmVyQ2xpcCwgVmlzaWJsZVJl
Y3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzIH0pOwotICAg
IH0KKyAgICBzdGF0aWMgVmlzaWJsZVJlY3RDb250ZXh0IHZpc2libGVSZWN0Q29udGV4dEZvclJl
cGFpbnQoKTsKIAotcHJpdmF0ZToKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgaXNTZXRO
ZWVkc0xheW91dEZvcmJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2V0TmVlZHNMYXlvdXRGb3Ji
aWRkZW47IH0KLSAgICB2b2lkIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSB7
IG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4gPSBmbGFnOyB9Ci0jZW5kaWYKKyAgICBib29sIGlz
U2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICB2b2lkIGFk
ZEFic29sdXRlUmVjdEZvckxheWVyKExheW91dFJlY3QmIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICB2b2lkIHNldExheWVyTmVlZHNGdWxsUmVwYWlu
dEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwpAQCAtODMyLDYgKzc2MSw3IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRIYXNSYXJlRGF0YShib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0SGFz
UmFyZURhdGEoYik7IH0KIAogI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBzZXROZWVkc0xh
eW91dElzRm9yYmlkZGVuKGJvb2wgZmxhZykgY29uc3QgeyBtX3NldE5lZWRzTGF5b3V0Rm9yYmlk
ZGVuID0gZmxhZzsgfQogICAgIHZvaWQgY2hlY2tCbG9ja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExh
eW91dCgpOwogI2VuZGlmCiAKQEAgLTg0Miw4ICs3NzIsOCBAQCBwcml2YXRlOgogICAgIFJlbmRl
ck9iamVjdCogbV9uZXh0OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzQVhP
YmplY3QgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9zZXROZWVkc0xheW91dEZvcmJpZGRl
biA6IDE7CisgICAgYm9vbCBtX2hhc0FYT2JqZWN0IDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9z
ZXROZWVkc0xheW91dEZvcmJpZGRlbiA6IDE7CiAjZW5kaWYKIAogI2RlZmluZSBBRERfQk9PTEVB
Tl9CSVRGSUVMRChuYW1lLCBOYW1lKSBcCkBAIC05OTAsNiArOTIwLDE3IEBAIHByaXZhdGU6CiAj
dW5kZWYgQUREX0JPT0xFQU5fQklURklFTEQKIH07CiAKK2NsYXNzIFJlbmRlck9iamVjdDo6U2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKGNvbnN0IFJlbmRlck9iamVjdCYsIGJvb2wgaXNGb3Ji
aWRkZW4gPSB0cnVlKTsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIH5TZXRMYXlvdXROZWVkZWRG
b3JiaWRkZW5TY29wZSgpOworcHJpdmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIG1fcmVu
ZGVyT2JqZWN0OworICAgIGJvb2wgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKKyNlbmRpZgorfTsK
KwogaW5saW5lIEZyYW1lJiBSZW5kZXJPYmplY3Q6OmZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gKmRvY3VtZW50KCkuZnJhbWUoKTsKQEAgLTExMDQsNyArMTA0NSw5NyBAQCBpbmxpbmUgYm9v
bCBSZW5kZXJPYmplY3Q6Om5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXRPbmx5KCkgY29u
c3QKICAgICAgICAgJiYgIW1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbV9i
aXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKIH0KIAotaW5saW5lIHZv
aWQgTm9kZTo6c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVy
V2l0aFN0eWxlRmxhZ3Muc2V0UG9pbnRlcihyZW5kZXJlcik7IH0KK2lubGluZSBSZW5kZXJGcmFn
bWVudGVkRmxvdyogUmVuZGVyT2JqZWN0OjplbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0
Cit7CisgICAgaWYgKGZyYWdtZW50ZWRGbG93U3RhdGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVk
RmxvdykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gbG9jYXRlRW5jbG9z
aW5nRnJhZ21lbnRlZEZsb3coKTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0Fu
b255bW91c0Jsb2NrKCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUga2Vw
dCBpbiBzeW5jIHdpdGggYW5vbnltb3VzIGJsb2NrIGNyZWF0aW9uIGNvbmRpdGlvbnMgaW4gUmVu
ZGVyQmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKCkuCisgICAgLy8gRklYTUU6IFRoYXQgc2Vl
bXMgZGlmZmljdWx0LiBDYW4gd2UgY29tZSB1cCB3aXRoIGEgc2ltcGxlciB3YXkgdG8gbWFrZSBi
ZWhhdmlvciBjb3JyZWN0PworICAgIC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVsYXRpdmVseSBsb25n
IGZ1bmN0aW9uIGJlbmVmaXQgZnJvbSBiZWluZyBpbmxpbmVkPworICAgIHJldHVybiBpc0Fub255
bW91cygpCisgICAgICAgICYmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qmxv
Y2sgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCkKKyAgICAgICAgJiYg
c3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZQorICAgICAgICAmJiBpc1JlbmRl
ckJsb2NrKCkKKyNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCisgICAgICAgICYmICFpc1JlbmRl
ckZ1bGxTY3JlZW4oKQorICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIo
KQorI2VuZGlmCisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICAgICAgJiYgIWlzUmVuZGVyTWF0aE1M
QmxvY2soKQorI2VuZGlmCisgICAgICAgICYmICFpc0xpc3RNYXJrZXIoKQorICAgICAgICAmJiAh
aXNSZW5kZXJGcmFnbWVudGVkRmxvdygpCisgICAgICAgICYmICFpc1JlbmRlck11bHRpQ29sdW1u
U2V0KCkKKyAgICAgICAgJiYgIWlzUmVuZGVyVmlldygpOworfQorCitpbmxpbmUgYm9vbCBSZW5k
ZXJPYmplY3Q6Om5lZWRzTGF5b3V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRmaWVsZHMu
bmVlZHNMYXlvdXQoKQorICAgICAgICB8fCBtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRzTGF5
b3V0KCkKKyAgICAgICAgfHwgbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCisgICAg
ICAgIHx8IG1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKQorICAg
ICAgICB8fCBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOworfQor
CitpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Om5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
T25seSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkKKyAg
ICAgICAgJiYgIW1fYml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQorICAgICAgICAm
JiAhbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCisgICAgICAgICYmICFtX2JpdGZp
ZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Cit9CisKK2lubGluZSB2b2lk
IFJlbmRlck9iamVjdDo6c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCkKK3sKKyAg
ICBzZXROZWVkc0xheW91dCgpOworICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0
cnVlKTsKK30KKworaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQb3NpdGlvblN0YXRlKFBv
c2l0aW9uVHlwZSBwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoKHBvc2l0aW9uICE9IFBvc2l0aW9u
VHlwZTo6QWJzb2x1dGUgJiYgcG9zaXRpb24gIT0gUG9zaXRpb25UeXBlOjpGaXhlZCkgfHwgaXNC
b3goKSk7CisgICAgbV9iaXRmaWVsZHMuc2V0UG9zaXRpb25lZFN0YXRlKHN0YXRpY19jYXN0PGlu
dD4ocG9zaXRpb24pKTsKK30KKworaW5saW5lIEZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2Fs
VG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBNYXBDb29yZGluYXRlc0ZsYWdz
IG1vZGUsIGJvb2wqIHdhc0ZpeGVkKSBjb25zdAoreworICAgIHJldHVybiBsb2NhbFRvQ29udGFp
bmVyUXVhZChxdWFkLCBudWxscHRyLCBtb2RlLCB3YXNGaXhlZCk7Cit9CisKK2lubGluZSBhdXRv
IFJlbmRlck9iamVjdDo6dmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWludCgpIC0+IFZpc2libGVS
ZWN0Q29udGV4dAoreworICAgIHJldHVybiB7IGZhbHNlLCBmYWxzZSwgeyBWaXNpYmxlUmVjdENv
bnRleHRPcHRpb246OkFwcGx5Q29udGFpbmVyQ2xpcCwgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9u
OjpBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzIH0gfTsKK30KKworaW5saW5lIGJvb2wg
UmVuZGVyT2JqZWN0Ojppc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkgY29uc3QKK3sKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIHJldHVybiBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuOworI2Vs
c2UKKyAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKworI2lmICFBU1NFUlRfRU5BQkxFRAor
CitpbmxpbmUgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgYm9vbCkKK3sK
K30KKworI2VuZGlmCisKK2lubGluZSB2b2lkIE5vZGU6OnNldFJlbmRlcmVyKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCit7CisgICAgbV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnNldFBvaW50ZXIo
cmVuZGVyZXIpOworfQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogdm9pZCBwcmludFJl
bmRlclRyZWVGb3JMaXZlRG9jdW1lbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmNwcAppbmRleCBhZTA1YTE0MzIxZmNhODZlNzdhYzQ5ZDcxZTc4MGEyZWVi
NzM0NGExLi4wMGI2MWY3ZjAwYzgzYWQ1MzJhYzU3YTJkYmU4MGI2MmJhNDhmMTdkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE0MSwxNSArMTQx
LDEwIEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZERyYXdTZWxlY3Rpb25UaW50KCkgY29u
c3QKIAogaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVs
ZW1lbnQoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycywgY29u
c3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQogICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vycykgewot
ICAgICAgICBhdXRvJiBkcmFnZ2VkQ29udGVudERhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtl
cjo6RHJhZ2dlZENvbnRlbnREYXRhPihtYXJrZXItPmRhdGEoKSk7Ci0gICAgICAgIGlmIChkcmFn
Z2VkQ29udGVudERhdGEudGFyZ2V0Tm9kZSA9PSAmZWxlbWVudCkKKyAgICAgICAgaWYgKFdURjo6
Z2V0PFJlZlB0cjxOb2RlPj4obWFya2VyLT5kYXRhKCkpID09ICZlbGVtZW50KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjks
OSArMTY0LDcgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotI2lmbmRlZiBOREVCVUcKLSAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBz
Y29wZSh0aGlzKTsKLSNlbmRpZgorICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIHNj
b3BlKCp0aGlzKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZWRHcmFwaGlj
c0NvbnRleHQocGFpbnRJbmZvLmNvbnRleHQoKSwgZmFsc2UpOwogICAgIGlmIChlbGVtZW50KCkg
JiYgZWxlbWVudCgpLT5wYXJlbnRPclNoYWRvd0hvc3RFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYmJjOWQwZjM2
MDUwODdiYjc0OGUyYmEwZTNhZWZiYzE0Yzk2YjQ5Ni4uNTU2OGE3ZTZkZGQ5YTA0MmJkNWVjZmRj
NjhiZWUwN2RkNWQwYThhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlU2VjdGlvbi5jcHAKQEAgLTIyMiw5ICsyMjIsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCBy
ZXNvbHZlTG9naWNhbEhlaWdodEZvclJvdyhjb25zdCBMZW5ndGgmIHJvd0xvZ2ljYWxIZWlnaHQp
CiAKIExheW91dFVuaXQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCgp
CiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxh
eW91dEZvcmJpZGRlblNjb3BlKHRoaXMpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVkRm9y
YmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOwogCiAgICAgQVNTRVJUKCFu
ZWVkc0xheW91dCgpKTsKIApAQCAtNTM4LDkgKzUzNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0
aW9uOjpyZWxheW91dENlbGxJZkZsZXhlZChSZW5kZXJUYWJsZUNlbGwmIGNlbGwsIGludCByb3dJ
bmRlCiAKIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKCkKIHsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVu
U2NvcGUodGhpcyk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBs
YXlvdXRGb3JiaWRkZW5TY29wZSgqdGhpcyk7CiAKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBlOWRkMTQ5
NDU4NjRiYTliZDhlODVhNDUwODQ3ZTJlNjI1MmQxNjQ2Li45ODk1YWRiZGM5MjZiYjE4YTdjZGU3
NDhlYWVlMDNiYzYwYWZkZTM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAKQEAgLTEzNDcsMjggKzEzNDcsMTUgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnN5c3RlbUNv
bG9yKENTU1ZhbHVlSUQgY3NzVmFsdWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGkKICAg
ICB9CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lOjphY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CitDb2xvciBS
ZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9y
OjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAogewogICAgIGF1dG8mIGNhY2hlID0gY29sb3JDYWNo
ZShvcHRpb25zKTsKLSAgICBpZiAoIWNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
ci5pc1ZhbGlkKCkpCi0gICAgICAgIGNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
ciA9IHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKG9wdGlvbnMpOwotICAg
IHJldHVybiBjYWNoZS5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3I7CisgICAgaWYgKCFj
YWNoZS50ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICBjYWNoZS50
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgPSBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cihvcHRpb25zKTsKKyAgICByZXR1cm4gY2FjaGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwog
fQogCi1Db2xvciBSZW5kZXJUaGVtZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgYXV0
byYgY2FjaGUgPSBjb2xvckNhY2hlKG9wdGlvbnMpOwotICAgIGlmICghY2FjaGUuaW5hY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICBjYWNoZS5pbmFjdGl2
ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciA9IHBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3Iob3B0aW9ucyk7Ci0gICAgcmV0dXJuIGNhY2hlLmluYWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yOwotfQotCi1Db2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1BY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdAotewotICAgIHJldHVybiBDb2xvcigyNTUsIDE1MCwgNTApOyAvLyBPcmFuZ2UuCi19Ci0K
LUNvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRo
ZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0CiB7CiAgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8g
WWVsbG93LgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAppbmRleCA0MDE5
ZDRmMmIxOTcxZGY0MmVjNGE3OThjM2Y5MzhiNzQyMzM5ZWY0Li5iMzU1Mzc4YWRlNjliODAwNmFm
NjVlMjRiMmMyMmFhOTViM2MzYjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGhlbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWUuaApAQCAtMTU0LDkgKzE1NCw4IEBAIHB1YmxpYzoKICAgICBDb2xvciBpbmFjdGl2ZUxpc3RC
b3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdDsKICAgICBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAotICAgIC8vIEhpZ2hs
aWdodGluZyBjb2xvcnMgZm9yIHNlYXJjaCBtYXRjaGVzLgotICAgIENvbG9yIGFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0
OwotICAgIENvbG9yIGluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CisgICAgLy8gSGlnaGxpZ2h0aW5nIGNvbG9yIGZv
ciBzZWFyY2ggbWF0Y2hlcy4KKyAgICBDb2xvciB0ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0
aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1YWwgQ29sb3Ig
ZGlzYWJsZWRUZXh0Q29sb3IoY29uc3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJh
Y2tncm91bmRDb2xvcikgY29uc3Q7CiAKQEAgLTI3NSw5ICsyNzQsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKICAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAKLSAgICAvLyBUaGUgcGxhdGZv
cm0gaGlnaGxpZ2h0aW5nIGNvbG9ycyBmb3Igc2VhcmNoIG1hdGNoZXMuCi0gICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9u
cz4pIGNvbnN0OworICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBzdXBwb3J0c1NlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29s
IHN1cHBvcnRzTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkBAIC00MzMsOCArNDMwLDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdy
b3VuZENvbG9yOwogICAgICAgICBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3I7CiAKLSAgICAgICAgQ29sb3IgYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
OwotICAgICAgICBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKKyAgICAg
ICAgQ29sb3IgdGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwogICAgIH07CiAKICAgICB2aXJ0dWFs
IENvbG9yQ2FjaGUmIGNvbG9yQ2FjaGUoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBj
b25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1h
Yy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMDdm
MjZlNTExM2Q2ZDk1NGFkNDI3ZjM1ZDQ3ZTM1ZTE1MjQxZDRjOC4uZTA0ODQ1MmM2YzkyN2ZiN2Q2
ZmU3MjRiNjQwZjZjM2JmNzhkNTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLmgKQEAgLTYzLDggKzYzLDcgQEAgcHVibGljOgogICAgIENvbG9yIHBsYXRmb3Jt
SW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CiAgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxp
c3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+KSBjb25zdCBmaW5hbDsKICAgICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgcGxhdGZv
cm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9w
dGlvbnM+KSBjb25zdCBmaW5hbDsKLSAgICBDb2xvciBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmlu
YWw7CisgICAgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0
PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBmaW5hbDsKIAogICAgIFNjcm9sbGJhckNvbnRy
b2xTaXplIHNjcm9sbGJhckNvbnRyb2xTaXplRm9yUGFydChDb250cm9sUGFydCkgZmluYWwgeyBy
ZXR1cm4gU21hbGxTY3JvbGxiYXI7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lTWFjLm1tCmluZGV4IDBlMzcxODg2MjI4YzFiMTZiMjYyZThkNmEwNjI5NDJjYjgyYzU5
YzYuLmNiYTE2MWU3NDk2MDRlNmI0ZGQ2OGYwNDQ1YTAwMWY4ODY0MTlkOWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTQ3MSwxOSArNDcxLDEyIEBA
IENvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpCiAgICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxw
aGEoY29sb3JGcm9tTlNDb2xvcihbTlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3Jd
KS5yZ2IoKSwgMSk7CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0
aW9ucykgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QK
IHsKICAgICBMb2NhbERlZmF1bHRTeXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRp
b25zLmNvbnRhaW5zKFN0eWxlQ29sb3I6Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAg
ICAgcmV0dXJuIGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3IgZmluZEhpZ2hsaWdodENvbG9yXSk7
CiB9CiAKLUNvbG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25z
dAotewotICAgIC8vIFRoZSBpbmFjdGl2ZSBjb2xvciBpcyBub3JtYWxseSB1c2VkLCBzaW5jZSBu
byBsZWdhY3kgV2ViS2l0IGNsaWVudCBtYXJrcyBhIHRleHQgbWF0Y2ggYXMgYWN0aXZlLgotICAg
IC8vIFNvIGp1c3QgcmV0dXJuIHRoZSBzYW1lIGNvbG9yIGZvciBib3RoIHN0YXRlcy4KLSAgICBy
ZXR1cm4gcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Iob3B0aW9ucyk7Ci19
Ci0KIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBL
aXRGb250V2VpZ2h0KQogewogICAgIEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBL
aXRGb250V2VpZ2h0IDwgMTUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4
IDUxZTdkMWJlOTMyYTE3NzNjNjY1MDBjODYwZGRkNGVjZTEzMWI1MmMuLjAxZDgxYzUwYWIxNDc5
OTk3ODc0M2M3NDVlM2E5Zjg2NTZlYTcwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKQEAgLTE3NTUsMTIgKzE3NTUsNiBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFs
czo6ZHVtcE1hcmtlclJlY3RzKGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykKICAgICBy
ZXR1cm4gcmVjdFN0cmluZy50b1N0cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6YWRkVGV4
dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKLXsKLSAgICBy
YW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJr
ZXIocmFuZ2UsIGlzQWN0aXZlKTsKLX0KLQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpz
ZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAgICBEb2N1
bWVudCogZG9jdW1lbnQgPSBjb250ZXh0RG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCmluZGV4IDc5ZjQyNGMzZDgzYTBkNmUzYWQzMmFkNWFhODRlNmMwNTY5NzJmNTguLmNi
NmUxNDdjZDY2ZmVkZjEyY2ExNWRiYzgyZjVkMTZhYzZkOGE2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaApAQCAtMjU5LDcgKzI1OSw2IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25P
cjxSZWZQdHI8UmFuZ2U+PiBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYg
bWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgpOwogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gbWFy
a2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVu
c2lnbmVkIGluZGV4KTsKICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IGR1bXBNYXJrZXJSZWN0cyhj
b25zdCBTdHJpbmcmIG1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNv
bnN0IFJhbmdlJiwgYm9vbCBpc0FjdGl2ZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sKTsKIAogICAgIHZvaWQgaW52YWxpZGF0
ZUZvbnRDYWNoZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU1YzU4
ZjYyYjQxYmM5NTc4OWZmMTc0MTkzNWVmNjkwMTcyZjgzOWYuLjIwM2RhODA1MDliOWViNTE3ZjZj
MDJmNWFiNGY1N2NjMWRlNDdjNzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwK
QEAgLTI3OCw3ICsyNzgsNiBAQCBlbnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICBbTWF5VGhy
b3dFeGNlcHRpb25dIFJhbmdlPyBtYXJrZXJSYW5nZUZvck5vZGUoTm9kZSBub2RlLCBET01TdHJp
bmcgbWFya2VyVHlwZSwgdW5zaWduZWQgbG9uZyBpbmRleCk7CiAgICAgW01heVRocm93RXhjZXB0
aW9uXSBET01TdHJpbmcgbWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUgbm9kZSwgRE9NU3Ry
aW5nIG1hcmtlclR5cGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gRE9NU3RyaW5nIGR1bXBNYXJrZXJSZWN0cyhET01TdHJpbmcgbWFya2VyVHlwZSk7Ci0g
ICAgdm9pZCBhZGRUZXh0TWF0Y2hNYXJrZXIoUmFuZ2UgcmFuZ2UsIGJvb2xlYW4gaXNBY3RpdmUp
OwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhp
Z2hsaWdodGVkKGJvb2xlYW4gZmxhZyk7CiAKICAgICB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3Jl
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5oCmluZGV4IDIw
MDI0YTU4N2FlM2Q0ZWQxMTExZWZhZmUyOWEwMTQxNWMzOGM1ZTguLmFiMTQ3YmU0YTlhN2FhMzg5
NzhmMzJjMjlmZTFkYzRjMzFmMTRiNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmll
d1NuYXBzaG90U3RvcmUuaApAQCAtMjcsMTMgKzI3LDExIEBACiAKICNpbmNsdWRlIDxXZWJDb3Jl
L0NvbG9yLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNv
cmUvSW50U2l6ZS5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBIQVZFKElP
U1VSRkFDRSkKICNpbmNsdWRlIDxXZWJDb3JlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKQEAgLTQx
LDM1ICszOSwxNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaWYgIWRlZmluZWQoX19PQkpDX18pCi10eXBlZGVmIHN0
cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKLQotT0JKQ19DTEFTUyBDQUNvbnRleHQ7Ci0K
LSNpZiBIQVZFKElPU1VSRkFDRSkKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElPU3VyZmFj
ZTsKLX0KLSNlbmRpZgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBWaWV3
U25hcHNob3RTdG9yZTsKIGNsYXNzIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJQ
YWdlUHJveHk7CiAKIGNsYXNzIFZpZXdTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZXdT
bmFwc2hvdD4gewogcHVibGljOgotI2lmIFBMQVRGT1JNKENPQ09BKQogI2lmIEhBVkUoSU9TVVJG
QUNFKQogICAgIHN0YXRpYyBSZWY8Vmlld1NuYXBzaG90PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRy
PFdlYkNvcmU6OklPU3VyZmFjZT4pOwotI2Vsc2UKLSAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hv
dD4gY3JlYXRlKHVpbnQzMl90IHNsb3RJRCwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdl
U2l6ZUluQnl0ZXMpOwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0o
R1RLKQogICAgIHN0YXRpYyBSZWY8Vmlld1NuYXBzaG90PiBjcmVhdGUoUmVmUHRyPGNhaXJvX3N1
cmZhY2VfdD4mJik7CiAjZW5kaWYKIApAQCAtNzcsNyArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIGNsZWFySW1hZ2UoKTsKICAgICBib29sIGhhc0ltYWdlKCkgY29uc3Q7Ci0jaWYgUExBVEZP
Uk0oQ09DT0EpCisKKyNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBpZCBhc0xheWVyQ29udGVudHMo
KTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gYXNJbWFnZUZvclRlc3RpbmcoKTsKICNlbmRp
ZgpAQCAtODUsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZW5kZXJUcmVlU2l6ZSh1
aW50NjRfdCByZW5kZXJUcmVlU2l6ZSkgeyBtX3JlbmRlclRyZWVTaXplID0gcmVuZGVyVHJlZVNp
emU7IH0KICAgICB1aW50NjRfdCByZW5kZXJUcmVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVu
ZGVyVHJlZVNpemU7IH0KIAotICAgIHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNv
bG9yIGNvbG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldEJh
Y2tncm91bmRDb2xvcihjb25zdCBXZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5k
Q29sb3IgPSBjb2xvcjsgfQogICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNv
bnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKICAgICB2b2lkIHNldFZpZXdTY3Jv
bGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCBzY3JvbGxQb3NpdGlvbikgeyBtX3ZpZXdTY3Jv
bGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CkBAIC05NCw3ICs3NSw2IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldERldmljZVNjYWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSB7
IG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsgfQogICAgIGZsb2F0IGRl
dmljZVNjYWxlRmFjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgV2ViQ29yZTo6
SU9TdXJmYWNlKiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAK
QEAgLTEwNCwxMSArODQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdXJmYWNlKHN0ZDo6dW5p
cXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+KTsKIAogICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6
U3VyZmFjZVN0YXRlIHNldFZvbGF0aWxlKGJvb2wpOwotI2Vsc2UKLSAgICBXZWJDb3JlOjpJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KLSAgICBzaXplX3QgaW1hZ2VTaXpl
SW5CeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VTaXplSW5CeXRlczsgfQogI2VuZGlmCi0j
ZWxpZiBQTEFURk9STShHVEspCisKKyNpZiBQTEFURk9STShHVEspCiAgICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAKICAgICBz
aXplX3QgaW1hZ2VTaXplSW5CeXRlcygpIGNvbnN0OwpAQCAtMTE2LDIyICs5NCwxNiBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSNpZiBQTEFURk9STShDT0NPQSkKICNpZiBIQVZFKElP
U1VSRkFDRSkKICAgICBleHBsaWNpdCBWaWV3U25hcHNob3Qoc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OklPU3VyZmFjZT4pOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFj
ZT4gbV9zdXJmYWNlOwotI2Vsc2UKLSAgICBleHBsaWNpdCBWaWV3U25hcHNob3QodWludDMyX3Qg
c2xvdElELCBXZWJDb3JlOjpJbnRTaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyk7Ci0KLSAg
ICB1aW50MzJfdCBtX3Nsb3RJRDsKLSAgICBzaXplX3QgbV9pbWFnZVNpemVJbkJ5dGVzOwotICAg
IFdlYkNvcmU6OkludFNpemUgbV9zaXplOwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisK
KyNpZiBQTEFURk9STShHVEspCiAgICAgZXhwbGljaXQgVmlld1NuYXBzaG90KFJlZlB0cjxjYWly
b19zdXJmYWNlX3Q+JiYpOwogCi0gICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNl
IHsgbnVsbHB0ciB9OworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKICNl
bmRpZgogCiAgICAgdWludDY0X3QgbV9yZW5kZXJUcmVlU2l6ZTsKQEAgLTE1NiwxMCArMTI4LDYg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0RGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3Rp
bmcoYm9vbCBkaXNhYmxlKSB7IG1fZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eSA9IGRpc2FibGU7
IH0KICAgICBib29sIGRpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9kaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5OyB9CiAKLSNpZiAhSEFWRShJT1NV
UkZBQ0UpICYmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKLSAgICBzdGF0aWMg
Q0FDb250ZXh0ICpzbmFwc2hvdHRpbmdDb250ZXh0KCk7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAg
ICB2b2lkIGRpZEFkZEltYWdlVG9TbmFwc2hvdChWaWV3U25hcHNob3QmKTsKICAgICB2b2lkIHdp
bGxSZW1vdmVJbWFnZUZyb21TbmFwc2hvdChWaWV3U25hcHNob3QmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbSBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbQppbmRleCAzNWJj
N2MyZWI5OTBlOGY0MWU4N2NjMzRkMTFjMzFmOGI2ZDkzZDVlLi5jNDNiZDM3ZGY5YzYwNTliMjY2
NjE4OTY4OWUyOWE2OGIwYjFjMDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvVmlld1NuYXBzaG90U3RvcmVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlTWFjLm1tCkBAIC0zNCw1MyArMzQsMTkgQEAKICNlbmRp
ZgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jaWYg
IUhBVkUoSU9TVVJGQUNFKSAmJiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIpCi1D
QUNvbnRleHQgKlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkKLXsKLSAg
ICBzdGF0aWMgQ0FDb250ZXh0ICpjb250ZXh0OwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qg
b25jZVRva2VuOwotICAgIGRpc3BhdGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAgTlNE
aWN0aW9uYXJ5ICpvcHRpb25zID0gQHsKLSAgICAgICAgICAgIGtDQUNvbnRleHREaXNwbGF5TmFt
ZTogQCJXZWJLaXRTbmFwc2hvdHRpbmciLAotICAgICAgICAgICAga0NBQ29udGV4dElnbm9yZXNI
aXRUZXN0OiBAWUVTLAotICAgICAgICAgICAga0NBQ29udGV4dERpc3BsYXlJZCA6IEAyMDAwMAot
ICAgICAgICB9OwotICAgICAgICBjb250ZXh0ID0gW1tDQUNvbnRleHQgcmVtb3RlQ29udGV4dFdp
dGhPcHRpb25zOm9wdGlvbnNdIHJldGFpbl07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gY29udGV4
dDsKLX0KLSNlbmRpZgotCi0jaWYgSEFWRShJT1NVUkZBQ0UpCiBSZWY8Vmlld1NuYXBzaG90PiBW
aWV3U25hcHNob3Q6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBz
dXJmYWNlKQogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChXVEZNb3Zl
KHN1cmZhY2UpKSk7CiB9Ci0jZWxzZQotUmVmPFZpZXdTbmFwc2hvdD4gVmlld1NuYXBzaG90Ojpj
cmVhdGUodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5
dGVzKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChzbG90SUQsIHNp
emUsIGltYWdlU2l6ZUluQnl0ZXMpKTsKLX0KLSNlbmRpZgogCi0jaWYgSEFWRShJT1NVUkZBQ0Up
CiBWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9T
dXJmYWNlPiBzdXJmYWNlKQogICAgIDogbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCi0jZWxz
ZQotVmlld1NuYXBzaG90OjpWaWV3U25hcHNob3QodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNp
emUsIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKQotICAgIDogbV9zbG90SUQoc2xvdElEKQotICAg
ICwgbV9pbWFnZVNpemVJbkJ5dGVzKGltYWdlU2l6ZUluQnl0ZXMpCi0gICAgLCBtX3NpemUoc2l6
ZSkKLSNlbmRpZgogewogICAgIGlmIChoYXNJbWFnZSgpKQogICAgICAgICBWaWV3U25hcHNob3RT
dG9yZTo6c2luZ2xldG9uKCkuZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KIAotI2lm
IEhBVkUoSU9TVVJGQUNFKQogdm9pZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKIHsKICAgICBBU1NFUlQoIW1fc3Vy
ZmFjZSk7CkBAIC05MiwxNSArNTgsMTAgQEAgdm9pZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uo
c3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKICAgICBtX3N1cmZh
Y2UgPSBXVEZNb3ZlKHN1cmZhY2UpOwogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24o
KS5kaWRBZGRJbWFnZVRvU25hcHNob3QoKnRoaXMpOwogfQotI2VuZGlmCiAKIGJvb2wgVmlld1Nu
YXBzaG90OjpoYXNJbWFnZSgpIGNvbnN0CiB7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgcmV0
dXJuICEhbV9zdXJmYWNlOwotI2Vsc2UKLSAgICByZXR1cm4gbV9zbG90SUQ7Ci0jZW5kaWYKIH0K
IAogdm9pZCBWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UoKQpAQCAtMTEwLDE4ICs3MSw5IEBAIHZv
aWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKIAogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpz
aW5nbGV0b24oKS53aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOwogCi0jaWYgSEFW
RShJT1NVUkZBQ0UpCiAgICAgbV9zdXJmYWNlID0gbnVsbHB0cjsKLSNlbHNlCi0jaWYgSEFWRShD
T1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKQotICAgIFtWaWV3U25hcHNob3RTdG9yZTo6c25h
cHNob3R0aW5nQ29udGV4dCgpIGRlbGV0ZVNsb3Q6bV9zbG90SURdOwotI2VuZGlmCi0gICAgbV9z
bG90SUQgPSAwOwotICAgIG1faW1hZ2VTaXplSW5CeXRlcyA9IDA7Ci0jZW5kaWYKIH0KIAotI2lm
IEhBVkUoSU9TVVJGQUNFKQogV2ViQ29yZTo6SU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgVmlld1Nu
YXBzaG90OjpzZXRWb2xhdGlsZShib29sIGJlY29tZVZvbGF0aWxlKQogewogICAgIGlmIChWaWV3
U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRl
c3RpbmcoKSkKQEAgLTEzMiwxMSArODQsOSBAQCBXZWJDb3JlOjpJT1N1cmZhY2U6OlN1cmZhY2VT
dGF0ZSBWaWV3U25hcHNob3Q6OnNldFZvbGF0aWxlKGJvb2wgYmVjb21lVm9sYXRpbGUpCiAKICAg
ICByZXR1cm4gbV9zdXJmYWNlLT5zZXRJc1ZvbGF0aWxlKGJlY29tZVZvbGF0aWxlKTsKIH0KLSNl
bmRpZgogCiBpZCBWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cygpCiB7Ci0jaWYgSEFWRShJ
T1NVUkZBQ0UpCiAgICAgaWYgKCFtX3N1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CkBAIC0xNDYsMjMgKzk2LDE1IEBAIGlkIFZpZXdTbmFwc2hvdDo6YXNMYXllckNvbnRlbnRzKCkK
ICAgICB9CiAKICAgICByZXR1cm4gbV9zdXJmYWNlLT5hc0xheWVyQ29udGVudHMoKTsKLSNlbHNl
Ci0gICAgcmV0dXJuIFtDQUNvbnRleHQgb2JqZWN0Rm9yU2xvdDptX3Nsb3RJRF07Ci0jZW5kaWYK
IH0KIAogUmV0YWluUHRyPENHSW1hZ2VSZWY+IFZpZXdTbmFwc2hvdDo6YXNJbWFnZUZvclRlc3Rp
bmcoKQogewotI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIGlmICghbV9zdXJmYWNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIEFTU0VSVChWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xl
dG9uKCkuZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcoKSk7CiAgICAgcmV0dXJu
IG1fc3VyZmFjZS0+Y3JlYXRlSW1hZ2UoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzIGluIHRoZSBzbG90IGNhc2UuCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHkubW0KaW5kZXggZTQ0OWJmZDAwMDBkZjAxMzk4ODA0ODlkMGVkMzA5ZjFiYTE5ZjY3Ni4u
YTVlZTdlMzg5NWQ1MDhmYmM5OGVkMzhlODE4NzI5NGVjMjZjN2RhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1Rl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAtMTM4LDcgKzEzOCw4IEBAIHZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25z
dCBBdHRyaWJ1dGVkU3RyCiAgICAgICAgIFthdHRycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1Vz
aW5nQmxvY2s6XihOU0F0dHJpYnV0ZWRTdHJpbmdLZXkga2V5LCBpZCB2YWx1ZSwgQk9PTCAqc3Rv
cCkgewogICAgICAgICAgICAgaWYgKCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xh
c3NdXSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtYXJrZXJzLmFkZFBs
YXRmb3JtVGV4dENoZWNraW5nTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwga2V5LCAoTlNTdHJp
bmcgKil2YWx1ZSk7CisgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3Jl
UmFuZ2UsIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZywKKyAg
ICAgICAgICAgICAgICBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmdEYXRhIHsga2V5LCAoTlNTdHJpbmcgKil2YWx1ZSB9KTsKIAogICAgICAgICAgICAgLy8gRklY
TUU6IFN3aXRjaCB0byBjb25zdGFudHMgYWZ0ZXIgcmRhcjovL3Byb2JsZW0vNDg5MTQxNTMgaXMg
cmVzb2x2ZWQuCiAgICAgICAgICAgICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJOU1NwZWxs
aW5nU3RhdGUiXSkgewpAQCAtMTQ3LDcgKzE0OCw3IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3Ry
CiAgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKICAgICAgICAgICAgICAgICBpZiAoc3BlbGxp
bmdTdGF0ZSAmIE5TU3BlbGxpbmdTdGF0ZUdyYW1tYXJGbGFnKSB7CiAgICAgICAgICAgICAgICAg
ICAgIE5TU3RyaW5nICp1c2VyRGVzY3JpcHRpb24gPSBbYXR0cnMgb2JqZWN0Rm9yS2V5OkAiTlNH
cmFtbWFyVXNlckRlc2NyaXB0aW9uIl07Ci0gICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRk
TWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIHVzZXJE
ZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJp
YnV0ZUNvcmVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIFN0cmluZyB7IHVzZXJEZXNj
cmlwdGlvbiB9KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH1d
OwpAQCAtMTU2LDcgKzE1Nyw2IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyCiAKIHZvaWQgVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVj
dGlvbihjb25zdCBTdHJpbmcmIGFubm90YXRpb24sIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1
aW50NjRfdCBsZW5ndGgpCiB7Ci0gICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQYWdlKCkt
PmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2VB
bmRPZmZzZXQgPSByYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zm
c2V0LCBsZW5ndGgpOwogICAgIGlmICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsK
QEAgLTE2NCwxMyArMTY0LDEzIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBTdHJpCiAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCByZW1vdmVDb3JlU3BlbGxpbmdNYXJr
ZXJzID0gYW5ub3RhdGlvbiA9PSAiTlNTcGVsbGluZ1N0YXRlIjsKLSAgICBmcmFtZS5kb2N1bWVu
dCgpLT5tYXJrZXJzKCkuZmlsdGVyTWFya2VycygqcmFuZ2UsIFsmXSAoRG9jdW1lbnRNYXJrZXIq
IG1hcmtlcikgewotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRN
YXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQorICAgIGF1
dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0gIk5TU3BlbGxpbmdT
dGF0ZSI7CisgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPyByZWxl
dmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0
Q2hlY2tpbmc7CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3Vz
ZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKCpyYW5n
ZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0
Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgYXV0byYgdGV4dENoZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAgICAgcmV0
dXJuIHRleHRDaGVja2luZ0RhdGEua2V5ICE9IGFubm90YXRpb247Ci0gICAgfSwgcmVtb3ZlQ29y
ZVNwZWxsaW5nTWFya2VycyA/IHJlbGV2YW50TWFya2VyVHlwZXMoKSA6IERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgp
KS5rZXkgIT0gYW5ub3RhdGlvbjsKKyAgICB9LCB0eXBlcyk7CiB9CiAKIEF0dHJpYnV0ZWRTdHJp
bmcgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVu
UG9zaXRpb25zKGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFdl
YkNvcmU6OlZpc2libGVQb3NpdGlvbiYgZW5kKQpAQCAtMTg4LDEwICsxODgsNyBAQCBBdHRyaWJ1
dGVkU3RyaW5nIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5n
QmV0d2VlblBvc2l0aW9ucwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFtzdHJpbmcg
YXBwZW5kQXR0cmlidXRlZFN0cmluZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzppdC50ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygp
LmdldCgpXSkuZ2V0KCldOwogICAgICAgICBhdXRvIHJhbmdlID0gaXQucmFuZ2UoKTsKLSAgICAg
ICAgYXV0byBtYXJrZXJzID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vy
c0luUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3Jt
VGV4dENoZWNraW5nKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJz
KSB7Ci0gICAgICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJr
ZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtl
cjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcpKSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RG
OjpnZXQ8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5k
YXRhKCkpOwogICAgICAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5n
ZShyYW5nZSwgeyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCkgfSk7CiAgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0
ZTpkYXRhLmtleSB2YWx1ZTpkYXRhLnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJh
bmdlLCBzdWJyYW5nZSldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDMzZWNkN2JlMjQ1Y2RiNTk4N2FiZTAx
MDk1NzBmYWVlMmFiOWQ2MWQuLmUzNjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdh
ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dl
YlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW0KQEAgLTEzMiw4ICsxMzIsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZv
IFdlYlBhZ2U6OmRpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdl
JiByYQogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBW
ZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFk
cyk7CisgICAgYXV0byBxdWFkcyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFu
Z2UpOwogICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0
dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oZmFsc2UpOwogICAgICAgICByZXR1cm4gZGljdGlvbmFy
eVBvcHVwSW5mbzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0KaW5kZXggZGExMTMyYzJjOWJkOTE0OGM4MzNjODc1MzdmM2U4MjY2Mzhm
Y2UzNy4uNDZhY2VlODI2NWVjODU2NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAg
LTE2MSwxMyArMTYxLDExIEBAIHZvaWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShG
cmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgcG9zdExheW91dERh
dGEucGFyYWdyYXBoQ29udGV4dEZvckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JD
YW5kaWRhdGVSZXF1ZXN0ID8gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1
ZXN0KSA6IFN0cmluZygpOwogICAgIHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJl
cXVlc3QgPSBmcmFtZS5lZGl0b3IoKS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKLSAg
ICBJbnRSZWN0IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwotICAgIFZlY3RvcjxGbG9hdFF1
YWQ+IHF1YWRzOwotICAgIHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsK
KyAgICBhdXRvIHF1YWRzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqc2VsZWN0
ZWRSYW5nZSk7CiAgICAgaWYgKCFxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHBvc3RMYXlvdXRE
YXRhLmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhx
dWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8g
UmFuZ2U6OmFic29sdXRlVGV4dFF1YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2Yg
YSBwYXJhZ3JhcGguCisgICAgICAgIC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0
IG9mIGEgcGFyYWdyYXBoLgogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkp
OwogICAgIH0KQEAgLTg3Miw4ICs4NzAsOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlh
dGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAg
IH0KIAogICAgIGJvb2wgcGFnZU92ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRlY3RvcnMgPSBmYWxz
ZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5wYWdlT3Zlcmxh
eUNvbnRyb2xsZXIoKS5wYWdlT3ZlcmxheXMoKSkgewotICAgICAgICBXZWJQYWdlT3ZlcmxheSog
d2ViT3ZlcmxheSA9IFdlYlBhZ2VPdmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOwor
ICAgIGZvciAoYXV0byYgb3ZlcmxheSA6IGNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxl
cigpLnBhZ2VPdmVybGF5cygpKSB7CisgICAgICAgIGF1dG8gd2ViT3ZlcmxheSA9IFdlYlBhZ2VP
dmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOwogICAgICAgICBpZiAoIXdlYk92ZXJs
YXkpCiAgICAgICAgICAgICBjb250aW51ZTsKIApAQCAtODgyLDIwICs4ODAsMTUgQEAgdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6
RmxvYXRQb2ludCBsb2NhdGkKICAgICAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFtYWluUmVz
dWx0UmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICBhdXRvIHZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmICghdmll
dykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgIHBhZ2VPdmVybGF5RGlkT3ZlcnJp
ZGVEYXRhRGV0ZWN0b3JzID0gdHJ1ZTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0OwotCi0gICAgICAgIFZlY3Rv
cjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgICAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4
dFF1YWRzKHF1YWRzKTsKLSAgICAgICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
OwotICAgICAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJE
b2N1bWVudCgpLnZpZXcoKTsKLSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMp
Ci0gICAgICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNv
bnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KLSAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWRE
YXRhQm91bmRpbmdCb3g7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERh
dGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1
bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5S
ZXN1bHRSYW5nZSkpKSk7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVz
dWx0UmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENv
bnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlv
bjo6RmFkZUluKTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YU9y
aWdpbmF0aW5nUGFnZU92ZXJsYXkgPSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7Ci0KICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IDU4N2MzNGVjY2YwYmY4YmRjNzRjN2Iw
ZGMwNGYwMDA5NDAxY2QwOTkuLjVkNjk0ZTRlMjViMmJmOTdjMjk4ZmQxZmMyOGU2MzUxZmRkNjFj
MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lSU9TLm1tCkBAIC04NDMsMTEgKzg0Myw4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlv
biAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlv
bjooCiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlv
biA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2li
bGVQb3NpdGlvbl07CiAgICAgICAgIAogICAgICAgICBhdXRvKiBjdXJyZW50Tm9kZSA9IGN1cnJl
bnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgICAg
IGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcoKmN1cnJlbnROb2RlKTsKLSAg
ICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7Ci0gICAgICAgIGlmIChsYXN0T2Zmc2V0IDwg
MCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpj
dXJyZW50Tm9kZSk7CisKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBv
c2l0aW9uID0gY3VycmVudFZpc2libGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgICAgICBpZiAo
cHJldmlvdXNWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3Vy
cmVudFdlYlZpc2libGVQb3NpdGlvbjsKQEAgLTg2MywxOCArODYwLDE4IEBAIC0gKFdlYlZpc2li
bGVQb3NpdGlvbiAqKXByZXZpb3VzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZy
b21Qb3NpdGlvbjooCiAgICAgICAgIC8vIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSAxKTsKICAg
ICAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpID4gMSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50
V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiByZXN1
bHRNYXJrZXIgPSBtYXJrZXJzLmF0KDApOworCisgICAgICAgIGF1dG8mIG1hcmtlciA9ICptYXJr
ZXJzWzBdOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdh
eXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3Vs
dE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKLSAgICAgICAgLy8gdGhpcyBub2RlLCBi
ZWNhdXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgotICAgICAgICBpZiAocmVzdWx0TWFya2Vy
LT5lbmRPZmZzZXQoKSA+ICh1bnNpZ25lZClsYXN0T2Zmc2V0KQorICAgICAgICAvLyBGSVhNRTog
V2ViQ29yZSBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgbWFya2VycyBjb3JyZWN0bHkgZHVyaW5nIGVk
aXRpbmcuIEJhaWwgaWYgcmVzdWx0TWFya2VyIGV4dGVuZHMgb2ZmIHRoZSBlZGdlIG9mIHRoaXMg
bm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KKyAgICAgICAgaWYgKG1hcmtl
ci5lbmRPZmZzZXQoKSA+IGxhc3RPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdl
YlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIGlmICghW3Vpa2l0RGVsZWdhdGUg
aXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjpyZXN1bHRNYXJrZXItPm1ldGFkYXRh
KCldKQorICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25S
ZXN1bHRNYXJrZXI6V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2VyLmRhdGEoKSkuZ2V0KCld
KQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAg
IAotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5zdGFydE9mZnNldCgpID4gMCkKLSAgICAgICAg
ICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2li
bGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIHJlc3Vs
dE1hcmtlci0+c3RhcnRPZmZzZXQoKSkpXTsKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNl
dCgpID4gMCkKKyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlz
aWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Y3VycmVudE5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpKSldOwogICAgICAgICAKICAgICAgICAg
Y3VycmVudFZpc2libGVQb3NpdGlvbiA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0
aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIDApKTsKICAgICB9CkBAIC04OTksMTEgKzg5Niw4IEBA
IC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJv
dW5kYXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3Vy
cmVudFdlYlZpc2libGVQb3NpdGlvbiA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxl
UG9zaXRpb246Y3VycmVudFZpc2libGVQb3NpdGlvbl07CiAgICAgICAgIAogICAgICAgICBhdXRv
KiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5h
bmNob3JOb2RlKCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRp
bmcoKmN1cnJlbnROb2RlKTsKLSAgICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7Ci0gICAg
ICAgIGlmIChsYXN0T2Zmc2V0IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlz
aWJsZVBvc2l0aW9uOwotICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxh
c3RPZmZzZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7CisKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIG5leHRWaXNpYmxlUG9zaXRpb24gPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLm5leHQoKTsK
ICAgICAgICAgaWYgKG5leHRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKQEAgLTkxOSwxOCArOTEzLDE4IEBAIC0g
KFdlYlZpc2libGVQb3NpdGlvbiAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5k
YXJ5RnJvbVBvc2l0aW9uOihXZWJWCiAgICAgICAgIC8vQVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09
IDEpOwogICAgICAgICBpZiAobWFya2Vycy5zaXplKCkgPiAxKQogICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247Ci0gICAgICAgIERvY3VtZW50TWFya2VyKiByZXN1
bHRNYXJrZXIgPSBtYXJrZXJzLmF0KDApOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdl
YkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0
aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKLSAgICAg
ICAgLy8gdGhpcyBub2RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgotICAgICAg
ICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihs
YXN0T2Zmc2V0KSkKKworICAgICAgICBhdXRvJiBtYXJrZXIgPSAqbWFya2Vyc1swXTsKKworICAg
ICAgICAvLyBGSVhNRTogV2ViQ29yZSBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgbWFya2VycyBjb3Jy
ZWN0bHkgZHVyaW5nIGVkaXRpbmcuIEJhaWwgaWYgcmVzdWx0TWFya2VyIGV4dGVuZHMgb2ZmIHRo
ZSBlZGdlIG9mIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KKyAg
ICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IGxhc3RPZmZzZXQpCiAgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIGlmICgh
W3Vpa2l0RGVsZWdhdGUgaXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjpyZXN1bHRN
YXJrZXItPm1ldGFkYXRhKCldKQorICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0
dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2Vy
LmRhdGEoKSkuZ2V0KCldKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9z
aXRpb247CiAgICAgICAgIAotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA8
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdE9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4g
W1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZXN1bHRNYXJrZXItPmVu
ZE9mZnNldCgpKSldOworICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsYXN0T2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJs
ZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSkpXTsKICAg
ICAgICAgCiAgICAgICAgIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24o
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCBsYXN0T2Zmc2V0KSk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDY4MjhhYTY3ZjFiMDAxOTk2NjM1N2Jl
NjM5NTg2NzBhOGRlMmU0YmYuLjY5MWY4NTE5MzhmODM1N2Q3NzBkOGM0Zjg0ZTVkMmU2YzNlZjk4
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQwNCw2OSArNDA0LDQ0IEBAIC0gKERP
TVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihO
U0FycmF5ICoqKWFsdGVybmF0CiAgICAgQVNTRVJUKGFsdGVybmF0aXZlcyk7CiAgICAgaWYgKCFh
bHRlcm5hdGl2ZXMpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAorCiAgICAgLy8gKmFs
dGVybmF0aXZlcyBzaG91bGQgbm90IGFscmVhZHkgcG9pbnQgdG8gYW4gYXJyYXkuCi0gICAgQVNT
RVJUKCEoKmFsdGVybmF0aXZlcykpOworICAgIEFTU0VSVCghKmFsdGVybmF0aXZlcyk7CiAgICAg
KmFsdGVybmF0aXZlcyA9IG5pbDsKLSAgICAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBb
c2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBpZiAocC5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAgICAgCi0gICAgaW50IG8gPSBwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVj
YXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBpZiAobyA8IDApCi0gICAgICAgIHJldHVybiBuaWw7
Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gbzsKLSAgICAKLSAgICBOb2RlKiBub2RlID0gcC5kZWVw
RXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2Rl
LT5kb2N1bWVudCgpOwotICAgIAotICAgIGNvbnN0IGF1dG8mIG1hcmtlcnMgPSBkb2N1bWVudC5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpOwotICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKKworICAgIGF1
dG8gcG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRvKiBub2RlID0g
cG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFub2RlKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1hcmtlcnMuc2l6ZSgpOyBpKyspIHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciA9IG1hcmtlcnNbaV07CisKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwb3NpdGlvbi5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgYXV0byYgZG9jdW1l
bnQgPSBub2RlLT5kb2N1bWVudCgpOworICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
PD0gb2Zmc2V0ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7Ci0gICAgICAgICAg
ICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbWFya2VyQWx0ZXJuYXRpdmVzID0gbWFya2VyLT5hbHRl
cm5hdGl2ZXMoKTsKLSAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBbTlNNdXRhYmxlQXJyYXkg
YXJyYXlXaXRoQ2FwYWNpdHk6bWFya2VyQWx0ZXJuYXRpdmVzLnNpemUoKV07Ci0gICAgICAgICAg
ICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG1hcmtlckFsdGVybmF0aXZlcy5zaXplKCk7IGorKykK
LSAgICAgICAgICAgICAgICBbKE5TTXV0YWJsZUFycmF5ICopKmFsdGVybmF0aXZlcyBhZGRPYmpl
Y3Q6KE5TU3RyaW5nICopKG1hcmtlckFsdGVybmF0aXZlc1tqXSldOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUs
IG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAg
ICAgICAgICByZXR1cm4ga2l0KHJhbmdlLnB0cigpKTsKKyAgICAgICAgICAgIGF1dG8mIG1hcmtl
ckFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSk7
CisgICAgICAgICAgICBhdXRvIGFycmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFj
aXR5Om1hcmtlckFsdGVybmF0aXZlcy5zaXplKCldOworICAgICAgICAgICAgZm9yIChhdXRvJiBh
bHRlcm5hdGl2ZSA6IG1hcmtlckFsdGVybmF0aXZlcykKKyAgICAgICAgICAgICAgICBbYXJyYXkg
YWRkT2JqZWN0OmFsdGVybmF0aXZlXTsKKyAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBhcnJh
eTsKKyAgICAgICAgICAgIHJldHVybiBraXQoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKS5wdHIoKSk7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgICAgIAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKERP
TVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcgogewotICAgIFZp
c2libGVQb3NpdGlvbiBwID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHAuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgaW50IG8gPSBwLmRlZXBFcXVp
dmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBpZiAobyA8IDApCi0gICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgdW5zaWduZWQgb2Zmc2V0ID0gbzsKLSAgICAKLSAgICBOb2Rl
KiBub2RlID0gcC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKLSAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIAotICAgIGNvbnN0IGF1dG8mIG1hcmtl
cnMgPSBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKTsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCisgICAgYXV0byBwb3NpdGlv
biA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOworICAgIGF1dG8qIG5vZGUgPSBwb3NpdGlvbi5k
ZWVwRXF1aXZhbGVudCgpLmFuY2hvck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUo
KTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJz
W2ldOwotICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJr
ZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlLnB0cigp
KTsKLSAgICAgICAgfQorCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRpb24uZGVlcEVxdWl2
YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0g
bm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBmb3IgKGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFya2Vy
cygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZykpIHsKKyAgICAg
ICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZz
ZXQoKSA+PSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZz
ZXQoKSkucHRyKCkpOwogICAgIH0KLSAgICAKICAgICByZXR1cm4gbmlsOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCA3ZWY5M2RiNjEyMzMzMGRhZGViYzliYjQwOGRlNGMx
ZDU5ZGZlZjcyLi44YjdiYTVjYWJjODFkNzhiNjhhYTI0YmQ1ZWZmMjVhZDI3OGIyYmE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTM1OCwxNCArMzU4LDkgQEAgLSAoV0tRdWFk
KWFic29sdXRlUXVhZEFuZEluc2lkZUZpeGVkUG9zaXRpb246KEJPT0wgKilpbnNpZGVGaXhlZAog
CiAgICAgaWYgKHF1YWRzLnNpemUoKSA9PSAwKQogICAgICAgICByZXR1cm4gemVyb1F1YWQoKTsK
LQogICAgIGlmIChxdWFkcy5zaXplKCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHdrUXVhZEZyb21G
bG9hdFF1YWQocXVhZHNbMF0pOwotCi0gICAgYXV0byBib3VuZGluZ1JlY3QgPSBxdWFkc1swXS5i
b3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyAr
K2kpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsK
LSAgICByZXR1cm4gd2tRdWFkRnJvbUZsb2F0UXVhZChib3VuZGluZ1JlY3QpOworICAgIHJldHVy
biB3a1F1YWRGcm9tRmxvYXRRdWFkKHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAog
Ly8gdGhpcyBtZXRob2QgaXMgbGlrZSAtIChDR1JlY3QpYm91bmRpbmdCb3gsIGJ1dCBpdCBhY2Nv
dW50cyBmb3IgZm9yIHRyYW5zZm9ybXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCAzYzMwZDU3ZTY4
Y2NhNGI2MmU2YjhmMGRhZGI0MjgyNjA3MTA0YWVlLi45YWQ0NmM2MDQ3MDEyZWIzZTQyMzgwNGQ0
MDcyMDcwMjU3ZGM1ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTU3LDEyICsxMTU3LDEx
IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50
ZWdlciBzZXF1ZW5jZU51bWJlciwgTlNBcnJhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJl
Y3QgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXM7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVh
ZHM7Ci0gICAgc2VsZWN0ZWRSYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1
dG8gcXVhZHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpzZWxlY3RlZFJhbmdl
KTsKICAgICBpZiAoIXF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmVjdEZvclNlbGVjdGlvbkNh
bmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xv
c2luZ0JvdW5kaW5nQm94KCkpOwogICAgIGVsc2UgewotICAgICAgICAvLyBSYW5nZTo6YWJzb2x1
dGVUZXh0UXVhZHMoKSB3aWxsIGJlIGVtcHR5IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaC4K
KyAgICAgICAgLy8gUXVhZHMgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3Jh
cGguCiAgICAgICAgIGlmIChzZWxlY3Rpb24uaXNDYXJldCgpKQogICAgICAgICAgICAgcmVjdEZv
clNlbGVjdGlvbkNhbmRpZGF0ZXMgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGZy
YW1lLT5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCmluZGV4IGU1NWMzMDkxMDU3NTRi
YmNjODA0N2I3NTgwZDk3NDBlMjFkMzNhYzMuLmJkOWE2NzgxYmJlYTA2MTFlMmU0ZDcwNDk2MDg2
Y2VmZDU4YjExNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQpAQCAtMTc1NywxMiArMTc1NywxMSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJh
bmdlczooTlNBcnJheSAqKilvdXRSYW5nZXMgYW5kTWV0YWRhdGFzOihOU0FycmF5ICoqKQogICAg
IGZvciAoV2ViQ29yZTo6Tm9kZSogbm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBXZWJDb3JlOjpO
b2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewogICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1
bWVudC0+bWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIG1h
cmtlciA6IG1hcmtlcnMpIHsKLQogICAgICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlkIG1ldGFkYXRhID0gbWFya2Vy
LT5tZXRhZGF0YSgpOwotICAgICAgICAgICAgCisKKyAgICAgICAgICAgIGlkIG1ldGFkYXRhID0g
V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2VyLT5kYXRhKCkpLmdldCgpOworCiAgICAgICAg
ICAgICAvLyBBbGwgcmVzdWx0IG1hcmtlcnMgc2hvdWxkIGhhdmUgbWV0YWRhdGEuCiAgICAgICAg
ICAgICBBU1NFUlQobWV0YWRhdGEpOwogICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkKQEAgLTE4
MDEsMTUgKzE4MDAsMTUgQEAgLSAoaWQpZGljdGF0aW9uUmVzdWx0TWV0YWRhdGFGb3JSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7
Ci0gICAgCisKICAgICBhdXRvIG1hcmtlcnMgPSBjb3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2UoKmNvcmUocmFuZ2UpLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6RGljdGF0aW9uUmVzdWx0KTsKLSAgICAKKwogICAgIC8vIFVJS2l0IHNob3VsZCBvbmx5IGV2
ZXIgZ2l2ZSB1cyBhIERPTVJhbmdlIGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcywgd2hp
Y2ggc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0LgogICAgIEFTU0VS
VChtYXJrZXJzLnNpemUoKSA8PSAxKTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPT0gMCkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICByZXR1cm4gbWFya2Vyc1swXS0+bWV0YWRhdGEo
KTsKKworICAgIHJldHVybiBXVEY6OmdldDxSZXRhaW5QdHI8aWQ+PihtYXJrZXJzWzBdLT5kYXRh
KCkpLmdldCgpOwogfQogCiAtICh2b2lkKXJlY3Vyc2l2ZVNldFVwZGF0ZUFwcGVhcmFuY2VFbmFi
bGVkOihCT09MKWVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCAyZWZj
N2Y0OTQwNzg3NzY3ZmUwZTYyYTFlYTYyNDRkNGNlMDg2NjFkLi5hYTUxYjYzOTQ4ODhhNzBiN2Yw
ZDlkYmEwNTFmZTI1YjFlMTZmZjk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBA
IC00OTUsNyArNDk1LDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJv
bGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogKyAoV2ViQ29yZTo6
RGljdGlvbmFyeVBvcHVwSW5mbylfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3Jl
OjpSYW5nZSYpcmFuZ2UgaW5GcmFtZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBP
cHRpb25zOihOU0RpY3Rpb25hcnkgKilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdl
YkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjoo
V2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9u
VHJhbnNpdGlvbgogewotICAgIFdlYkNvcmU6OkVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRv
cigpOworICAgIGF1dG8mIGVkaXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0
SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyh0cnVlKTsKIAogICAgIC8vIERpY3Rpb25hcnkg
QVBJIHdpbGwgYWNjZXB0IGEgd2hpdGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBh
cyBpZiBpdCB3ZXJlIHJlYWwgdGV4dCwKQEAgLTUwNiwxNyArNTA2LDE2IEBAICsgKFdlYkNvcmU6
OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29y
ZTo6UmFuZ2UmKXJhCiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgY29u
c3QgV2ViQ29yZTo6UmVuZGVyU3R5bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5y
ZW5kZXJTdHlsZSgpOworICAgIGF1dG8gc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJl
bmRlclN0eWxlKCk7CiAgICAgZmxvYXQgc2NhbGVkRGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZv
bnRNZXRyaWNzKCkuZGVzY2VudCgpICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkg
OiAwOwogCi0gICAgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2Uu
YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1dG8gcXVhZHMgPSBXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlKTsKICAgICBpZiAocXVhZHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZh
bHNlKTsKICAgICAgICAgcmV0dXJuIHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJhbmdlUmVjdCA9IGZyYW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNb
MF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CisgICAgYXV0byByYW5nZVJlY3QgPSBmcmFtZS0+
dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkp
OwogCiAgICAgcG9wdXBJbmZvLm9yaWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJh
bmdlUmVjdC55KCkgKyBzY2FsZWREZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxv
b2t1cE9wdGlvbnM7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNTZkNWFkNzJkMDY3YmVhYzEwZTdhMTJlOTQ0NmZhMjcxYzY3MzRiOS4uZTJlODJm
MTdiZjg5ZWYxNjBmMjcyNTM0ZTFkM2RmNDAzNWQ3MTkwZiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTA0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxp
dmUgcmFuZ2VzIGluIERvY3VtZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvTWFya2VkVGV4dC5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogVXBkYXRl
IGZvciBjaGFuZ2UgdG8gRG9jdW1lbnRNYXJrZXIgY29uc3RydWN0b3IuCisKIDIwMjAtMDQtMDQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
Zm91cnRoIHJvdW5kIG9mIGxvZ2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIw
OTY4NT4KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJr
ZWRUZXh0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0
LmNwcAppbmRleCAwNjgxY2FiNDM2N2M1MjM2YTliNTY0MjhhZDZmMTA3NDViYTkxNzgxLi42YThl
NTcyOTFiZjVkMDE2NzY4ZDhlMjkyZTJiOGM2N2FjMDA4NWZiIDEwMDY0NAotLS0gYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKKysrIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCkBAIC05MCw3ICs5MCw3IEBA
IFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlU2ltcGxlKQogCiBURVNUKE1hcmtlZFRleHQsIFN1
YmRpdmlkZVNwZWxsaW5nQW5kR3JhbW1hclNpbXBsZSkKIHsKLSAgICBSZW5kZXJlZERvY3VtZW50
TWFya2VyIGdyYW1tYXJFcnJvck1hcmtlciB7IERvY3VtZW50TWFya2VyIHsgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIDcsIDggfSB9OworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgZ3JhbW1h
ckVycm9yTWFya2VyIHsgRG9jdW1lbnRNYXJrZXIgeyBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwg
eyA3LCA4IH0gfSB9OwogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBleHBlY3RlZE1hcmtlZFRleHRz
IHsKICAgICAgICAgTWFya2VkVGV4dCB7IGdyYW1tYXJFcnJvck1hcmtlci5zdGFydE9mZnNldCgp
LCBncmFtbWFyRXJyb3JNYXJrZXIuZW5kT2Zmc2V0KCksIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJv
ciwgJmdyYW1tYXJFcnJvck1hcmtlciB9LAogICAgICAgICBNYXJrZWRUZXh0IHsgMjIsIDMyLCBN
YXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYjZhZjQ2ZDM1Y2JmNmUzNDk0YjRi
MzMyYTU0Y2E2ZmE2NTFkMzRiNy4uYTllMmUyNGZhYzZlYTQwNzNhMWU0Y2JiZTFkNWVhZmI5YmYx
NzI5MiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4IEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRh
cmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3Qt
ZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJh
ci10aWNrbWFya3MtaGl0dGVzdC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xs
aW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC5odG1sOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXIt
dGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC5wbmc6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnM6IFJlbW92ZWQgZXhwZWN0YXRpb24gZm9yIHNjcm9sbGJh
ci10aWNrbWFya3MuCisgICAgICAgIFRoZXNlIHdlcmUgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdHMu
CisKIDIwMjAtMDQtMDQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgog
CiAgICAgICAgICdcdScgc2hvdWxkIHRocm93IGFuIGVhcmx5IFN5bnRheEVycm9yIGV4Y2VwdGlv
biwgYnV0IGluc3RlYWQgZXZhbHVhdGVzIHRvICd1JwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC1l
eHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMTI5OTViZmNmMjNj
OTc3NzRhYmQ2ZDFlMTM0NjY1MjAzZmI1NDQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRp
Y2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAg
QEAKLUNoZWNrcyB0aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3aGVuIHRpY2ttYXJr
cyBhcmUgYWRkZWQuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQotCi1QQVNTIGRpZCBz
Y3JvbGwKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVTVCBDT01QTEVURQot
wqAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNr
bWFya3MtaGl0dGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFy
LXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVj
NDEzMWMxOWIwODA5MTIyOGMwYmQ5M2M4YjM4NTZjZDA1ZjQ0YmYuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSAr
MCwwIEBACi08aHRtbD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgotPGJvZHkgc3R5bGU9Im1pbi1oZWlnaHQ6IDUwMDBweCI+IAotPHNwYW4g
aWQ9ImVsdCI+Jm5ic3A7PC9zcGFuPgotCi08c2NyaXB0PgotZGVzY3JpcHRpb24oJ0NoZWNrcyB0
aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3aGVuIHRpY2ttYXJrcyBhcmUgYWRkZWQu
Jyk7Ci1vbmxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQot
ICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB2YXIgcmFuZ2UgPSBkb2N1bWVu
dC5jcmVhdGVSYW5nZSgpOwotICAgIHZhciBlbHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
ZWx0Jyk7Ci0gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsdCk7Ci0gICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpIHsKLSAgICAgICAgd2luZG93LmludGVybmFscy5hZGRUZXh0TWF0Y2hNYXJr
ZXIocmFuZ2UsIHRydWUpOwotICAgIH0KLSAgICBpZiAod2luZG93LnRlc3RSdW5uZXIpCi0gICAg
ICAgIHRlc3RSdW5uZXIuZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKTsKLSAgICBpZiAod2luZG93
LmV2ZW50U2VuZGVyKSB7Ci0gICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92ZVRvKHdpbmRvdy5p
bm5lcldpZHRoIC0gMSwgd2luZG93LmlubmVySGVpZ2h0IC0gMSk7Ci0gICAgICAgIGV2ZW50U2Vu
ZGVyLm1vdXNlRG93bigpOwotICAgICAgICBldmVudFNlbmRlci5tb3VzZVVwKCk7Ci0gICAgfQot
fQotCi1vbnNjcm9sbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0ZXN0UGFzc2VkKCdkaWQgc2Nyb2xs
Jyk7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19Ci0KLXZhciBqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsK
LTwvc2NyaXB0PgotCi08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4
cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZhZjIyYTJlMTg4Mjcx
NDM4MmIxYjQyYzIzOTRkNDZjNDgyODE1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlj
a21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi3C
oApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2tt
YXJrcy1zdHlsZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10
aWNrbWFya3Mtc3R5bGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0YjNm
ZTMyZTI0YmQ1NjI3NWE5MWNmNmU4YmJiYTMwNWE3OGMxMGQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Ny
b2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAg
QEAKLTwhRE9DVFlQRSBodG1sPgotPGhlYWQ+Ci08c3R5bGU+Ci1odG1sIHsKLSAgICBmb250OiBB
aGVtIDEwcHg7Ci0gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogbm9uZTsKLX0KLTo6LXdlYmtp
dC1zY3JvbGxiYXIgewotICAgIHdpZHRoOiAxM3B4OwotICAgIGhlaWdodDogMTNweDsKLX0KLTo6
LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewotICAgIGJhY2tncm91bmQtY29sb3I6Z3JlZW47Ci19
Ci06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOnJnYmEo
MTI4LCAxMjgsIDEyOCwgMC44KTsgIC8qIExldCB0aWNrbWFyayBzaGluZSB0aHJvdWdoICovCi19
Ci08L3N0eWxlPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGhpZ2hsaWdodCgpCi17Ci0gICAgdmFyIHJh
bmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2VsdCcpOwotICAgIHJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbHQpOwot
ICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYWRk
VGV4dE1hdGNoTWFya2VyKHJhbmdlLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQodHJ1ZSk7Ci19Ci08L3Njcmlw
dD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0iaGlnaGxpZ2h0KCk7Ij4KLQotPGRpdiBzdHlsZT0i
aGVpZ2h0OjYwMHB4Ij48L2Rpdj4KLTxzcGFuIGlkPSJlbHQiIHN0eWxlPSJwb3NpdGlvbjphYnNv
bHV0ZTsgdG9wOjMwMHB4Ij4mbmJzcDs8L3NwYW4+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXIt
dGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQtZXhwZWN0ZWQucG5nCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGE4YTNhMTMzNmQ4ZDUxMzI4NmVjYTA1NWRk
ODc3NjIxNTQxYjBlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFsIDI4NzgKemNtZUFT
QE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3MkbEhgb2s8bX0/b1Ru
MGxFCnpHWWNjYlJBVTIrQiU/JnJ2XjB4VSEhKUNtd0IlJi1SST88KnF+d247ekNRdEtWb1VPTmNW
WU1zZighTzhwVWw5KAp6d2E/U1ZGe0VQNytaIThzVE8wJmY5USNyX25AQFpYd3BjOWE2cmI5XkYp
alEwODVzdEtvRWA3Nyk2NDg/KiU9UCgKejdtUSRGRmw9T0g1RCo/XmowVkRKTipLKXJxcSQlLTdt
VmhEKE9mV14zcjJHUi1kcXJFe1BgTyUxSD02ZEAzdEMkCm5LRkd3LSFLdVUwRnlqRShqSzIpNioq
dyplMmJ4b1daQ2VJVVMzajNeUDY8cl9pZD9XWQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rl
c3RFeHBlY3RhdGlvbnMKaW5kZXggMGYwNDU5YzNiNWM3MTRkN2JkN2NiNzFjZDdhYzQ4NTVmY2Mx
NGZlNS4uMTY0OGU5NmRjNzFkZjgzM2Q5NWJmNDJjNGExZGZkNmMxYWQ4Nzc2MyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY4Nyw3ICs2ODcsNiBAQCBm
YXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itb3ZlcmxheS1zY3JvbGxiYXJzLWhvdmVyZWQu
aHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLXNlbGVjdC1saXN0
LWV2ZW50cy5odG1sIFsgU2tpcCBdCiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItbW91c2Vkb3du
LW1vdXNldXAuaHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLW1vdXNlZG93
bi1tb3ZlLW1vdXNldXAuaHRtbCBbIFNraXAgXQotZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRp
Y2ttYXJrcy1oaXR0ZXN0Lmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2VsZWN0b3JzL2FjdGl2ZS1ob3Zl
ci1xdWlya3MuaHRtbCBbIFNraXAgXQogZmFzdC9zZWxlY3RvcnMvYWN0aXZlLWhvdmVyLXN0cmlj
dC5odG1sIFsgU2tpcCBdCiBmYXN0L3NlbGVjdG9ycy9hY3RpdmUtcXVpcmtzLmh0bWwgWyBTa2lw
IF0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395474</attachid>
            <date>2020-04-04 20:35:25 -0700</date>
            <delta_ts>2020-04-05 10:12:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200404203523.patch</filename>
            <type>text/plain</type>
            <size>212542</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4YTBiY2Y2ODA3MzAxZTM5ZmU2NDE4
NDkxM2VlYzllZTMyMGRlMDEuLjVkMTJkMjMzYjUwNDFjMjU1YTE1NDA0YjdjOGQyOWJlN2RkOWY3
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRGVmaW5lICJpZCIgaGVyZSB3aGVuIGNvbXBpbGlu
ZyBub24tT2JqQyBzbyBpdCdzIGVhc2llciB0byB1c2UKKyAgICAgICAgUmV0YWluUHRyPGlkPiBp
biBhbnkgaGVhZGVyIGZpbGUuIExldHMgdXMgc3RvcCBkb2luZyB0aGlzIG1hbnkgb3RoZXIgcGxh
Y2VzLgorICAgICAgICBIYXJtbGVzcyB3aGVuIG5vdCBuZWVkZWQuCisKIDIwMjAtMDQtMDQgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NsYW5n
IDEwXSBGaXggLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiBjb21waWxhdGlvbiB3YXJu
aW5ncyBpbiBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwYWU5ZjYwMTQ0Y2QyMGM2ODEwZmQ1ZTcxMDJhMjcw
NjY1MWRhZjdiLi41NzhhYWVjNzJlNjc1ZjU5ODM3MGVlMTcyY2RmOTEwZjdiNGVmNzZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjgxIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW1vdmVkIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuCisgICAgICAgIC0gUmVtb3ZlZCAiYWN0aXZlL2luYWN0aXZlIHRleHQgbWF0
Y2ggbWFya2VyIiwgd2hpY2ggd2FzIG9ubHkgZXZlciB1c2VkCisgICAgICAgICAgYnkgQ2hyb21p
dW0sIGFuZCBoYXMgYmVlbiBkZWFkIGNvZGUgaW4gV2ViS2l0IGZvciB3aGlsZSBub3cuCisgICAg
ICAgIC0gTWFkZSBhIHJlcGxhY2VtZW50IGZvciBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMsIGlu
IFJlbmRlck9iamVjdCwKKyAgICAgICAgICBhbmQgbW92ZWQgYWxsIGNhbGxlcnMgb3Zlci4KKyAg
ICAgICAgLSBBZGRlZCBhIGZhc3QgcGF0aCBmb3IgTm9kZTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSB0
aGF0IG1ha2VzIGl0IHdvcmsKKyAgICAgICAgICB3aXRob3V0IGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsIGZvciB0aGUgY29tbW9uIG5vZGUgdHlwZXMuCisgICAgICAgIC0gQWRkZWQgYSBOb2RlOjps
ZW5ndGggZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbidzCisgICAg
ICAgICAgZGVmaW5pdG9uIG9mIGEgbm9kZSdzIGxlbmd0aCwgcGFydCBvZiBob3cgcmFuZ2VzIGFy
ZSBkZWZpbmVkLgorICAgICAgICAtIEFkZGVkIGEgc3RydWN0dXJlIE9mZnNldFJhbmdlIHRvIHJl
cHJlc2VudCBzdGFydC9lbmQgb2Zmc2V0cyB3aXRoaW4KKyAgICAgICAgICBhIHNpbmdsZSBjaGFy
YWN0ZXIgZGF0YSBub2RlLiBUaGlzIGlzIGEgY29tbW9uIGlkaW9tIHRvIGhhbmRsZSBwb3NzaWJs
ZQorICAgICAgICAgIHBhcnRpYWwgc2VsZWN0aW9uIG9mIHRleHQgbm9kZXMgYXQgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHdoZW4KKyAgICAgICAgICBpdGVyYXRpbmcgdGV4dCB3aXRo
aW4gYSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIERvY3VtZW50TWFya2VyIGZ1bmN0aW9ucyB0
byB1c2UgT2Zmc2V0UmFuZ2UuCisgICAgICAgIC0gQWRkZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig
dHVybmluZyBhIHZlY3RvciBvZiBxdWFkcyBpbnRvIGEgdmVjdG9yCisgICAgICAgICAgb2YgYm91
bmRpbmcgYm94IHJlY3RhbmdsZXMsIGFuZCBmb3IgY29tcHV0aW5nIGEgdW5pb24gb2YgYWxsIHRo
ZQorICAgICAgICAgIHJlY3RhbmdsZXMsIHNpbmNlIGJvdGggb2YgdGhlc2UgYXJlIGNvbW1vbiBj
b2RpbmcgcGF0dGVybnMuCisgICAgICAgIC0gQWRkZWQgYW4gaW50ZXJzZWN0aW5nTm9kZXMgZnVu
Y3Rpb24sIHByb2R1Y2luZyBhIGZvci1sb29wLWNvbXBhdGlibGUKKyAgICAgICAgICByYW5nZSBm
b3IgaXRlcmF0aW5nIGFsbCBub2RlcyBjb3ZlcmVkIGJ5IGEgRE9NIHJhbmdlLgorICAgICAgICAt
IENoYW5nZWQgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzbyBp
dCBjYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGhvdXQgYW4gI2lmIGF0IGVhY2ggY2FsbCBzaXRl
LCBleHBhbmRzIHRvIG5vdGhpbmcgaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIC0gRWxpbWlu
YXRlZCB1c2VzIG9mIFJldGFpblB0cjxpZD4gaW5zdGVhZCBvZiBqdXN0IGlkIHRvIHBhc3MgYXJn
dW1lbnRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRlZCBzaW5jZSBp
c0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1YWwgZnVuY3Rp
b24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRJbnNlcnRlZCk6IFBhc3MgYW4gT2Zmc2V0UmFuZ2UgdG8gcmVtb3ZlTWFya2Vy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0UmVtb3ZlZCk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6IFJlbW92ZWQgbW9zdCBwbGF0Zm9ybS1zcGVj
aWZpYyBmdW5jdGlvbnMuCisgICAgICAgIFJlbW92ZWQgdGhlIGFjdGl2ZSBtYXRjaCBib29sZWFu
LCB3aGljaCB3YXMgb25seSBldmVyIHVzZWQgZm9yIENocm9taXVtLgorICAgICAgICBVc2UgT2Zm
c2V0UmFuZ2UuIFVwZGF0ZWQgc29tZSBvYnNvbGV0ZSBjb21tZW50cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0
VGV4dFJhbmdlcyk6IENoYW5nZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gcmV0dXJuIGEgc3Ry
dWN0dXJlIHdpdGggYSBub2RlIGFuZCBhbiBvZmZzZXQgcmFuZ2UgcmF0aGVyIHRoYW4gdXNpbmcg
YQorICAgICAgICBTaW1wbGVSYW5nZTsgYWRkcyBjbGFyaXR5IHRvIHRoZSBmYWN0IHRoYXQgaXQn
cyBndXJhbnRlZWQgdG8gYmUgb25seSBhCisgICAgICAgIHNpbmdsZSBub2RlLiBNYXkgZXZlbiB3
YW50IHRvIGNvbnNpZGVyIHNvbWUgZGF5IG1vdmluZyBUZXh0SXRlcmF0b3Igb3ZlcgorICAgICAg
ICB0byB0aGlzLCBidXQgaXQncyBkZWZpbml0ZWx5IGJldHRlciBoZXJlIGZvciBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6IFVwZGF0
ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29sbGVjdFRleHRSYW5nZXMgYW5kIHRvIERv
Y3VtZW50TWFya2VyIGNvbnN0cnVjdGlvbiwgYW5kIHRvIHVzZSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgc3ludGF4IHRoYXQgZG9lc24ndCByZXBlYXQgdGhlIERvY3VtZW50TWFya2VyIGNsYXNzIG5h
bWUuIERlbGV0ZWQgb3ZlcmxvYWRzCisgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRv
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKTogVXBkYXRl
ZCBhcyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IEZpeCBhIG1pc3Rha2Ug
d2hlcmUgY29weWluZworICAgICAgICBtYXJrZXJzIHdvdWxkIGhhdmUgYSBzaWRlIGVmZmVjdCBv
ZiBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKTogSnVzdCBoYXZlIHRoaXMgY2FsbAorICAgICAg
ICBmaWx0ZXJNYXJrZXJzIHdpdGggbnVsbCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogVXBkYXRlZCBm
b3IgdGhlIGNoYW5nZSB0bworICAgICAgICBjb2xsZWN0VGV4dFJhbmdlcyBhbmQgdG8gcGFzcyBh
IE9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1h
cmtlcik6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZQorICAgICAgICByYW5nZS4g
VXNlIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgYm91bmRpbmdC
b3hlcyBmdW5jdGlvbnMKKyAgICAgICAgdG8gbWFrZSB0aGlzIGNsZWFyZXIgYW5kIHNpbXBsZXIu
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKTogVXBkYXRl
IGZvciBjaGFuZ2VzIHRvIERvY3VtZW50TWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5z
dGVhZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51
c2VkICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNz
aW5nIDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0
aWxsIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmZvckVhY2gpOiBBZGRlZC4gU2hhcmVkIGxvZ2ljIGZvciB0aGUgbXVsdGlwbGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgaXRlcmF0ZSB0aGUgbWFya2VycyBjb3ZlcmVkIGJ5IGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6IFNpbXBsaWZpZWQgbG9vcHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOiBE
ZWxldGVkLiBXYXMgb25seQorICAgICAgICB1c2VkIGZvciBDaHJvbWl1bSBhbmQgaGFzIGJlZW4g
ZGVhZCBjb2RlIHNpbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UpOgorICAgICAgICBDYWxsIGZvckVhY2guCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZHNJblJvb3RWaWV3
U3BhY2UpOiBVc2UgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmFic29sdXRlRXZlbnRCb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG91dExheW91dCk6IERpdHRvLgorCisgICAgICAg
ICogZG9tL05vZGUuaDogQWRkZWQgaW5saW5lIGZhc3QgcGF0aCBmb3IgaXNDaGFyYWN0ZXJEYXRh
Tm9kZS4KKyAgICAgICAgTW92ZWQgc29tZSBpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG91dCBvZiBj
bGFzcyBkZWZpbml0aW9uIHNvIGl0J3MKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQgaXQgYW5kIGdl
dCBhbiBvdmVydmlldy4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogVXNlIGJvdW5k
aW5nQm94ZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmg6IERl
bGV0ZWQgYWJzb2x1dGVUZXh0UXVhZHMuCisKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oOiBVc2UgcnZhbHVlIHJlZmVyZW5jZXMgYW5kIG1vdmUuCisKKyAgICAgICAgKiBk
b20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdElzQ2hhcmFjdGVyRGF0
YSk6IERlbGV0ZWQuIE1vdmVkIHRoZSBvcHRpbWl6YXRpb25zIGludG8KKyAgICAgICAgTm9kZTo6
aXNDaGFyYWN0ZXJEYXRhTm9kZSBzbyBub3cgYWxsIGNhbGxlcnMgZ2V0IHRoZW0uCisgICAgICAg
IChXZWJDb3JlOjpsZW5ndGgpOiBEZWxldGVkLiBNb3ZlZCB0byBOb2RlOjpsZW5ndGguCisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogVXNlIE5v
ZGU6Omxlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmly
c3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5n
ZTo6c2VudGluZWwgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yOjpvcGVyYXRvcisrKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuaDogQWRkZWQgaW50ZXJzZWN0aW5nTm9kZXMgZnVuY3Rpb24sIGFuZCB0aGUKKyAgICAgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlIGFuZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgY2xhc3Nl
cyB1c2VkCisgICAgICAgIHRvIG1ha2UgaXQgd29yay4gQWRkZWQgdGhlIE9mZnNldFJhbmdlIHN0
cnVjdHVyZSBhbmQgdGhlCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5jdGlv
biwgYWxzbyB0byBoZWxwIHdpdGggaXRlcmF0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgVGFr
ZSBvdXQgdW5uZWVkZWQgaG9sZHNfYWx0ZXJuYXRpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRl
cm5hdGl2ZSk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGVzLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6IFBhc3MgcmVm
ZXJlbmNlIHRvIHJhbmdlCisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8gcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgIFRha2UgYSBT
aW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4gQWxzbyB1c2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAg
ICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVBy
ZXNlcnZpbmdNYXJrZXJzKToKKyAgICAgICAgUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIHNpbmNl
IHdlIGNhbiBjb3B5IG1hcmtlciBkYXRhIHdpdGhvdXQKKyAgICAgICAgc2VwYXJhdGUgY29kZSBm
b3IgZWFjaCB0eXBlLiBBbHNvIHVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5n
ZS4KKworICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHA6IENhbGwgYWRkTWFy
a2VyIGluc3RlYWQgb2YKKyAgICAgICAgYWRkTWFya2VyVG9Ob2RlLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0
ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICBSZW1vdmVkIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOiBSZW1vdmUgdXNlIG9mIFJldGFpblB0cjxpZD4gZm9yIGFyZ3VtZW50
cy4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgTWVyZ2VkIHRoZSBsb2dpYyBmcm9tIGdldFRleHRS
ZWN0YW5nbGVzIGluIGhlcmUsIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCBib3VuZGluZ0JveGVzLgorICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICB0
aGUgY29weU1hcmtlcnMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFu
ZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpE
aWN0YXRpb25Db21tYW5kSU9TKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBSZXRhaW5QdHI8aWQ+
IGZvciBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpj
cmVhdGUpOiBNb3ZlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZElPUzo6ZG9BcHBseSk6IFVwZGF0ZWQgdG8gZG8gdGhlIHdvcmsgaGVyZQorICAgICAgICBz
aW5jZSB3ZSBkb24ndCBoYXZlIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIgYW55IG1vcmUuCisgICAgICAgIFNwZWNpZmljYWxseSwgcmVtb3ZlIHRoZSBmaXJzdCBpbnRl
cnByZXRhdGlvbiwgd2hpY2ggbGVhdmVzIGJlaGluZCBhCisgICAgICAgIHZlY3RvciBvZiBhbHRl
cm5hdGl2ZXMuIFNhbWUgZm9yIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlci4KKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyk6IFRha2UgaWQgaW5zdGVhZCBvZgorICAg
ICAgICBSZXRhaW5QdHI8aWQ+LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IENoYW5nZWQKKyAgICAgICAgYXJvdW5kIHNpbmNl
IHdlIGRvbid0IGhhdmUgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcgor
ICAgICAgICBvciBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIgYW55IG1vcmUuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMpOiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6
CisgICAgICAgIEdldCBhbHRlcm5hdGl2ZXMgZGlyZWN0bHkgZnJvbSBEb2N1bWVudE1hcmtlcjo6
ZGF0YSwgbm93IHRoYXQKKyAgICAgICAgdGhlcmUgaXMgbm90IGEgc2VwYXJhdGUgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcyBmdW5jdGlvbi4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAg
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMs
CisgICAgICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKKyAgICAgICAgaWQgc2lu
Y2UgdGhhdCdzIG5vdyBkb25lIGluIFJldGFpblB0ci5oLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXRlZEJvdW5kaW5nQm94ZXMpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDogQSBjb3VwbGUgdHdlYWtz
LCBwbHVzIGRlY2xhcmVkIHRoZQorICAgICAgICBmdW5jdGlvbnMgYWJvdmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZSBkZWZpbml0aW9uIG9m
CisgICAgICAgIGlkIHNpbmNlIHRoYXQncyBub3cgZG9uZSBpbiBSZXRhaW5QdHIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IFRha2Ugb3V0
CisgICAgICAgIGlzQWN0aXZlTWF0Y2ggbG9naWMgdGhhdCB3YXMgdXNlZCBmb3IgQ2hyb21pdW0g
b25seS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggY29uc3QpOiBVcGRhdGUg
Zm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgY29u
c3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1hcmtD
b250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZvcgorICAgICAgICBjaGFuZ2VzIHRv
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25zdCk6IFVzZQorICAgICAgICB1bml0
ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKTogVXNlCisgICAg
ICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91
bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIFJhbmdlOjphYnNvbHV0ZVRl
eHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNpdHkgYW5kIHJlbW92ZWQKKyAgICAg
ICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRvIGltcGxlbWVudCwgZmVhdHVyZSB0
aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgc29tZSBvciBhbGwgb2YgdGhlIHF1
YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92ZWQgbXVsdGktbGluZSBmdW5jdGlv
bgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJPYmplY3QgY2xhc3MgZGVmaW5pdGlv
biB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFkLiBEZWNsYXJlZCBhIG5ldyBhYnNv
bHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAgICBtX3NldE5lZWRzTGF5b3V0Rm9y
YmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4gY2FuIGJlIGNvbnN0LgorICAgICAg
ICBDb25kaXRpb25hbGl6ZWQgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbiBhbmQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUKKyAgICAgICAgc28gYm90aCBjYW4gYmUgdXNlZCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcyBidXQgZXhwYW5kIHRvIG5vIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ2dlZENvbnRlbnRD
b250YWluc1JlcGxhY2VkRWxlbWVudCk6IFNpbXBsaWZpZWQgYW5kIHVwZGF0ZWQKKyAgICAgICAg
bm93IHRoYXQgdGhlIGRyYWdnZWQgY29udGVudCBkYXRhIG5vIGxvbmdlciBoYXMgaXRzIG93biBu
YW1lZCBzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQp
OiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mp
OiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTog
UmVtb3ZlZCB0aGUgQ2hyb21pdW0tb25seQorICAgICAgICBjb25jZXB0IG9mIGFjdGl2ZSB2cy4g
aW5hY3RpdmUgdGV4dCBzZWFyY2ggaGlnaGxpZ2h0IGNvbG9ycy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKTogRGVsZXRlZC4gV2FzIG9ubHkgdXNlZCBmb3Ig
YSB0ZXN0CisgICAgICAgIG9mIENocm9taXVtLXNwZWNpZmljIHNjcm9sbCB0aWNrIG1hcmtzLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6IERlbGV0ZWQgYWRkVGV4dE1hdGNoTWFya2Vy
LgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogRGl0dG8uCisKIDIwMjAtMDQtMDQg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
Zm91cnRoIHJvdW5kIG9mIGxvZ2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIw
OTY4NT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMTdiOTIxZjRkZDc4NjcwZjYyNDFiZjdlZGIyYmViMzFiMDNiYzg0
Zi4uYjczYzdiN2IyMDJkNzQwMzEzMzMxNzY5ZTgwN2FjZTAwYTFhMjBmOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNyBAQAorMjAyMC0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmg6IFJlbW92ZWQgdW51c2VkICJDb2NvYSB3aXRo
b3V0IElPU3VyZmFjZSIgY29kZSBwYXRocy4KKyAgICAgICAgKiBVSVByb2Nlc3MvbWFjL1ZpZXdT
bmFwc2hvdFN0b3JlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNyZWF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OlZpZXdTbmFwc2hvdCk6
IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnNldFN1cmZhY2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpoYXNJbWFnZSBjb25zdCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmNsZWFySW1hZ2UpOiBEaXR0by4KKyAg
ICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZSk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OmFzSW1hZ2VGb3JUZXN0aW5nKTogRGl0dG8uCisgICAg
ICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KTogRGVs
ZXRlZC4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkubW06CisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24pOiBVcGRhdGVkIHNpbmNlCisgICAg
ICAgIGFkZFBsYXRmb3JtVGV4dENoZWNraW5nTWFya2VyIG5vIGxvbmdlciBleGlzdHMuCisgICAg
ICAgIChXZWJLaXQ6OlRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlv
blJlbGF0aXZlVG9TZWxlY3Rpb24pOgorICAgICAgICBVcGRhdGVkIHNpbmNlIGZpbHRlck1hcmtl
cnMgcGFzc2VzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YgYSBwb2ludGVyIG5vdy4KKyAgICAgICAg
KFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdC
ZXR3ZWVuUG9zaXRpb25zKToKKyAgICAgICAgU2ltcGxpZmllZCBjb2RlIGEgYml0IGJ5IHJlbW92
aW5nIGxvY2FsIHZhcmlhYmxlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9XZWJQYWdlQ29jb2EubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RB
dExvY2F0aW9uKTogVXNlCisgICAgICAgIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMg
YW5kIHVuaXRlZEJvdW5kaW5nQm94ZXMuCisKIDIwMjAtMDQtMDQgIFdlbnNvbiBIc2llaCAgPHdl
bnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgZm91cnRoIHJvdW5kIG9mIGxv
Z2dpbmcgdG8gaGVscCBkaWFnbm9zZSA8d2Via2l0Lm9yZy9iLzIwOTY4NT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZwppbmRleCAwNmRiNjNmMzVlYjlmODE0NTlmNDdjODI4YWEyNjdiZTgyMTMx
Mzk0Li4xYWVmZTdhMmZiZDU2OWQ4YzFhOWJiNDMyNjRhNGRjZTJjYjEyNjZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9pb3MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMg
aW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAg
ICAgICAoLVtXZWJGcmFtZSBwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRh
cnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIFVwZGF0ZSBzaW5jZSBEb2N1bWVudE1hcmtlcjo6
bWV0YWRhdGEgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKC1bV2ViRnJhbWUgbmV4dFVucGVy
dHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246XSk6CisgICAgICAgIERp
dHRvLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tOgor
ICAgICAgICAoLVtXZWJWaXNpYmxlUG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9u
UGhyYXNlQWx0ZXJuYXRpdmVzOl0pOgorICAgICAgICBVcGRhdGUgc2luY2UgRG9jdW1lbnRNYXJr
ZXI6OmFsdGVybmF0aXZlcyBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoLVtXZWJWaXNpYmxl
UG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcl0pOgorICAgICAg
ICBEaXR0by4KKwogMjAyMC0wMy0xMiAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNv
bT4KIAogICAgICAgICByZGFyOi8vcHJvYmxlbS82MDM1OTIzMCBNYXJrIGxvY2F0aW9uTWFuYWdl
cjpkaWRDaGFuZ2VBdXRob3JpemF0aW9uU3RhdHVzOiBhcyBkZXByZWNhdGVkLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvQ2hhbmdlTG9nCmluZGV4IGNjYTVmZDcyNGI3ZTczMzNhYjAxZGFjYTU3YTBiYmI4YTM4
Mjg2NGIuLjgwMTE5MTc5MTNiZjVhNTcyMTQxMGQwMTk1ZmIxYTEwODQ2MWZkY2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMC0wNC0wNCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdl
cyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToKKyAgICAgICAgKC1bRE9NTm9kZSBh
YnNvbHV0ZVF1YWRBbmRJbnNpZGVGaXhlZFBvc2l0aW9uOl0pOiBVc2UgdW5pdGVkQm91bmRpbmdC
b3hlcy4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW06CisgICAg
ICAgIChXZWJFZGl0b3JDbGllbnQ6OmhhbmRsZVJlcXVlc3RlZENhbmRpZGF0ZXMpOiBVc2UgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6YW5kTWV0
YWRhdGFzOl0pOiBVcGRhdGVkIHNpbmNlIERvY3VtZW50TWFya2VyIG5vCisgICAgICAgIGxvbmdl
ciBoYXMgYSBkZWRpY2F0ZWQgbWV0YWRhdGEgbWVtYmVyIGZ1bmN0aW9uLgorICAgICAgICAoLVtX
ZWJGcmFtZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOl0pOgorICAgICAgICAqIFdl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKCtbV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOmluRnJh
bWU6d2l0aExvb2t1cE9wdGlvbnM6aW5kaWNhdG9yT3B0aW9uczp0cmFuc2l0aW9uOl0pOgorICAg
ICAgICBVc2UgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKwogMjAyMC0wNC0wNCAg
UGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIy
NTkwOTUpOiBBU1NFUlRJT04gRkFJTEVEOiBtX3ZpZGVvRnVsbHNjcmVlbk1vZGUgIT0gVmlkZW9G
dWxsc2NyZWVuTW9kZU5vbmUgc2VlbiB3aXRoIFRlc3RXZWJLaXRBUEkuV2ViS2l0TGVnYWN5LkF1
ZGlvU2Vzc2lvbkNhdGVnb3J5SU9TCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5Q
dHIuaCBiL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCmluZGV4IDYxZjEwOWJjYWZlNjA1MTZh
NzMyZWU0ZWQ4MzlhZDEzYjM0YjU3MWEuLjAxMmEwMWQ3OTQ0ZWE2YWRhNjVmYzllNTk3ZGE0ZmNi
MzFiZWZmMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCisrKyBiL1Nv
dXJjZS9XVEYvd3RmL1JldGFpblB0ci5oCkBAIC00OCw2ICs0OCwxMCBAQAogI2RlZmluZSBOU19S
RUxFQVNFU19BUkdVTUVOVAogI2VuZGlmCiAKKyNpZm5kZWYgX19PQkpDX18KK3R5cGVkZWYgc3Ry
dWN0IG9iamNfb2JqZWN0ICppZDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogLy8gVW5s
aWtlIG1vc3QgbW9zdCBvZiBvdXIgc21hcnQgcG9pbnRlcnMsIFJldGFpblB0ciBjYW4gdGFrZSBl
aXRoZXIgdGhlIHBvaW50ZXIgdHlwZSBvciB0aGUgcG9pbnRlZC10byB0eXBlLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmgKaW5kZXggMTUyN2M1MWQ1YjQ2ZDQyYmRiYWM0OTNlOWU0YmJhMWIy
ZWRiZGUzYy4uZTIzMWQ1MzU3N2NiNTA4NWFkMzhlYmU2ZTAzMmY0MWU3OTE1YTNkNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCkBAIC02Miw3ICs2Miw3IEBAIHByb3RlY3RlZDoKIHBy
aXZhdGU6CiAgICAgU3RyaW5nIG5vZGVWYWx1ZSgpIGNvbnN0IGZpbmFsOwogICAgIEV4Y2VwdGlv
bk9yPHZvaWQ+IHNldE5vZGVWYWx1ZShjb25zdCBTdHJpbmcmKSBmaW5hbDsKLSAgICBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisgICAgYm9v
bCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
ICAgIGludCBtYXhDaGFyYWN0ZXJPZmZzZXQoKSBjb25zdCBmaW5hbDsKICAgICB2b2lkIHNldERh
dGFBbmRVcGRhdGUoY29uc3QgU3RyaW5nJiwgdW5zaWduZWQgb2Zmc2V0T2ZSZXBsYWNlZERhdGEs
IHVuc2lnbmVkIG9sZExlbmd0aCwgdW5zaWduZWQgbmV3TGVuZ3RoKTsKICAgICB2b2lkIG5vdGlm
eVBhcmVudEFmdGVyQ2hhbmdlKENvbnRhaW5lck5vZGU6OkNoaWxkQ2hhbmdlU291cmNlKTsKQEAg
LTcwLDYgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZGF0YTsKIH07CiAKK2lubGlu
ZSB1bnNpZ25lZCBOb2RlOjpsZW5ndGgoKSBjb25zdAoreworICAgIGlmIChpczxDaGFyYWN0ZXJE
YXRhPigqdGhpcykpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPigqdGhp
cykubGVuZ3RoKCk7CisgICAgcmV0dXJuIGNvdW50Q2hpbGROb2RlcygpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
Q2hhcmFjdGVyRGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDNlZjk0NTkwMGJhOGYy
NGUwMmY1ZWNmMjBkZWNmYzcwOGJmZDgyYTAuLjJjYWNjNWQyZTJkNjRiODRkMTYyYzdmMDczZjM5
Y2YzMTc1NTYzZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNDY0MSw3ICs0NjQxLDcg
QEAgdm9pZCBEb2N1bWVudDo6dGV4dEluc2VydGVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKQogCiAjaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NI
RUNLSU5HKQogICAgIC8vIEZyZXNobHkgaW5zZXJ0ZWQgdGV4dCBpcyBleHBlY3RlZCB0byBub3Qg
aW5oZXJpdCBQbGF0Zm9ybVRleHRDaGVja2luZyBtYXJrZXJzLgotICAgIG1fbWFya2Vycy0+cmVt
b3ZlTWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3Jt
VGV4dENoZWNraW5nKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZz
ZXQsIG9mZnNldCArIGxlbmd0aCB9LCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmcpOwogI2VuZGlmCiB9CiAKQEAgLTQ2NTMsNyArNDY1Myw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRl
eHRSZW1vdmVkKE5vZGUmIHRleHQsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKQog
ICAgIH0KIAogICAgIC8vIFVwZGF0ZSB0aGUgbWFya2VycyBmb3Igc3BlbGxpbmcgYW5kIGdyYW1t
YXIgY2hlY2tpbmcuCi0gICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIG9mZnNldCwg
bGVuZ3RoKTsKKyAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgeyBvZmZzZXQsIG9m
ZnNldCArIGxlbmd0aCB9KTsKICAgICBtX21hcmtlcnMtPnNoaWZ0TWFya2Vycyh0ZXh0LCBvZmZz
ZXQgKyBsZW5ndGgsIDAgLSBsZW5ndGgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ci5oCmluZGV4IDY1NWJkMzY4YmJkYjU5YjM5Y2U3NWZmY2Q3MjA2YjMyY2YwOGU4ZDcuLmRmNWNj
OGY3YjVhYWU4NjRmYjAwYWRmMGU2NzgxZTk1MDI2NTU1NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudE1hcmtlci5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNi0y
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
Ni0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtMjAsOCArMjAsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIk5vZGUuaCIK
LQorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvT3B0aW9uU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL1ZhcmlhbnQuaD4KQEAgLTI5
LDE1ICsyOCwxMiBAQAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KLXR5cGVkZWYgc3RydWN0IG9iamNfb2JqZWN0ICppZDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIEEgcmFuZ2Ugb2YgYSBub2RlIHdpdGhpbiBhIGRvY3Vt
ZW50IHRoYXQgaXMgIm1hcmtlZCIsIHN1Y2ggYXMgdGhlIHJhbmdlIG9mIGEgbWlzc3BlbGxlZCB3
b3JkLgogLy8gSXQgb3B0aW9uYWxseSBpbmNsdWRlcyBhIGRlc2NyaXB0aW9uIHRoYXQgY291bGQg
YmUgZGlzcGxheWVkIGluIHRoZSB1c2VyIGludGVyZmFjZS4KLS8vIEl0IGFsc28gb3B0aW9uYWxs
eSBpbmNsdWRlcyBhIGZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBtYXRjaCBpcyBhY3RpdmUs
IHdoaWNoIGlzIGlnbm9yZWQKLS8vIGZvciBhbGwgdHlwZXMgb3RoZXIgdGhhbiB0eXBlIFRleHRN
YXRjaC4KIGNsYXNzIERvY3VtZW50TWFya2VyIHsKIHB1YmxpYzoKICAgICBlbnVtIE1hcmtlclR5
cGUgewpAQCAtNzIsNyArNjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIFRlbGVwaG9uZU51bWJlciA9
IDEgPDwgMTAsCiAjZW5kaWYKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBG
SVhNRTogaU9TIHNob3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24gbWFyayBzeXN0ZW0gd2l0
aCB0aGUgb3RoZXIgcGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMxMjQ5Pi4KKyAgICAgICAg
Ly8gRklYTUU6IGlPUyBzaG91bGQgc2hhcmUgdGhlIHNhbWUgZGljdGF0aW9uIG1hcmsgc3lzdGVt
IHdpdGggdGhlIG90aGVyIHBsYXRmb3Jtcy4KICAgICAgICAgRGljdGF0aW9uUGhyYXNlV2l0aEFs
dGVybmF0aXZlcyA9IDEgPDwgMTEsCiAgICAgICAgIERpY3RhdGlvblJlc3VsdCA9IDEgPDwgMTIs
CiAjZW5kaWYKQEAgLTg4LDcwICs4NCw1MCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3Rl
eHByIE9wdGlvblNldDxNYXJrZXJUeXBlPiBhbGxNYXJrZXJzKCk7CiAKLSAgICB1c2luZyBJc0Fj
dGl2ZU1hdGNoRGF0YSA9IGJvb2w7Ci0gICAgdXNpbmcgRGVzY3JpcHRpb25EYXRhID0gU3RyaW5n
OwogICAgIHN0cnVjdCBEaWN0YXRpb25EYXRhIHsKICAgICAgICAgdWludDY0X3QgY29udGV4dDsK
ICAgICAgICAgU3RyaW5nIG9yaWdpbmFsVGV4dDsKICAgICB9OwotICAgIHN0cnVjdCBEaWN0YXRp
b25BbHRlcm5hdGl2ZXNEYXRhIHsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICBW
ZWN0b3I8U3RyaW5nPiBhbHRlcm5hdGl2ZXM7Ci0gICAgICAgIFJldGFpblB0cjxpZD4gbWV0YWRh
dGE7Ci0jZW5kaWYKLSAgICB9OwotICAgIHN0cnVjdCBEcmFnZ2VkQ29udGVudERhdGEgewotICAg
ICAgICBSZWZQdHI8Tm9kZT4gdGFyZ2V0Tm9kZTsKLSAgICB9OwogI2lmIEVOQUJMRShQTEFURk9S
TV9EUklWRU5fVEVYVF9DSEVDS0lORykKICAgICBzdHJ1Y3QgUGxhdGZvcm1UZXh0Q2hlY2tpbmdE
YXRhIHsKICAgICAgICAgU3RyaW5nIGtleTsKICAgICAgICAgU3RyaW5nIHZhbHVlOwogICAgIH07
CiAjZW5kaWYKLSAgICB1c2luZyBEYXRhID0gVmFyaWFudDxJc0FjdGl2ZU1hdGNoRGF0YSwgRGVz
Y3JpcHRpb25EYXRhLCBEaWN0YXRpb25EYXRhLCBEaWN0YXRpb25BbHRlcm5hdGl2ZXNEYXRhLCBE
cmFnZ2VkQ29udGVudERhdGEKKworICAgIHVzaW5nIERhdGEgPSBWYXJpYW50PAorICAgICAgICBT
dHJpbmcKKyAgICAgICAgLCBEaWN0YXRpb25EYXRhIC8vIERpY3RhdGlvbkFsdGVybmF0aXZlcwor
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAgICwgVmVjdG9yPFN0cmluZz4gLy8gRGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcworICAgICAgICAsIFJldGFpblB0cjxpZD4gLy8g
RGljdGF0aW9uUmVzdWx0CisjZW5kaWYKKyAgICAgICAgLCBSZWZQdHI8Tm9kZT4gLy8gRHJhZ2dl
ZENvbnRlbnQKICNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCi0gICAg
LCBQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGEKKyAgICAgICAgLCBQbGF0Zm9ybVRleHRDaGVja2lu
Z0RhdGEgLy8gUGxhdGZvcm1UZXh0Q2hlY2tpbmcKICNlbmRpZgogICAgID47CiAKLSAgICBEb2N1
bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29s
IGlzQWN0aXZlTWF0Y2gpOwotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRp
b24gPSBTdHJpbmcoKSk7Ci0gICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgRGF0YSYmKTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEp
OwotI2VuZGlmCisgICAgRG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSwgT2Zmc2V0UmFuZ2UsIERh
dGEmJiA9IHsgfSk7CiAKICAgICBNYXJrZXJUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRP
ZmZzZXQ7IH0KLSAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
ZnNldDsgfQorICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9yYW5n
ZS5zdGFydDsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFu
Z2UuZW5kOyB9CiAKICAgICBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAKLSAg
ICBib29sIGlzQWN0aXZlTWF0Y2goKSBjb25zdDsKLSAgICB2b2lkIHNldEFjdGl2ZU1hdGNoKGJv
b2wpOwotCiAgICAgY29uc3QgRGF0YSYgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQot
ICAgIHZvaWQgY2xlYXJEYXRhKCkgeyBtX2RhdGEgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJE
YXRhKCkgeyBtX2RhdGEgPSBTdHJpbmcgeyB9OyB9CiAKICAgICAvLyBPZmZzZXQgbW9kaWZpY2F0
aW9ucyBhcmUgZG9uZSBieSBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuCiAgICAgLy8gT3RoZXIg
Y2xhc3NlcyBzaG91bGQgbm90IGNhbGwgZm9sbG93aW5nIHNldHRlcnMuCi0gICAgdm9pZCBzZXRT
dGFydE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9zdGFydE9mZnNldCA9IG9mZnNldDsgfQot
ICAgIHZvaWQgc2V0RW5kT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX2VuZE9mZnNldCA9IG9m
ZnNldDsgfQorICAgIHZvaWQgc2V0U3RhcnRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmFu
Z2Uuc3RhcnQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldEVuZE9mZnNldCh1bnNpZ25lZCBvZmZz
ZXQpIHsgbV9yYW5nZS5lbmQgPSBvZmZzZXQ7IH0KICAgICB2b2lkIHNoaWZ0T2Zmc2V0cyhpbnQg
ZGVsdGEpOwogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIGlzRGljdGF0aW9u
KCkgY29uc3Q7Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcygpIGNvbnN0
OwotICAgIHZvaWQgc2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90IGluZGV4KTsK
LSAgICBpZCBtZXRhZGF0YSgpIGNvbnN0OwotICAgIHZvaWQgc2V0TWV0YWRhdGEoaWQpOwotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgTWFya2VyVHlwZSBtX3R5cGU7Ci0gICAgdW5zaWduZWQgbV9z
dGFydE9mZnNldDsKLSAgICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKKyAgICBPZmZzZXRSYW5nZSBt
X3JhbmdlOwogICAgIERhdGEgbV9kYXRhOwogfTsKIApAQCAtMTgzLDM0ICsxNTksMTcgQEAgY29u
c3RleHByIGF1dG8gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSAtPiBPcHRpb25TZXQ8TWFy
a2VyVHlwZT4KICAgICB9OwogfQogCi1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFy
a2VyKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wgaXNBY3Rp
dmVNYXRjaCkKLSAgICA6IG1fdHlwZShUZXh0TWF0Y2gpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0
YXJ0T2Zmc2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICwgbV9kYXRhKGlz
QWN0aXZlTWF0Y2gpCi17Ci19Ci0KLWlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJr
ZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zm
c2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQoraW5saW5lIERvY3VtZW50TWFya2VyOjpE
b2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIE9mZnNldFJhbmdlIHJhbmdlLCBEYXRhJiYg
ZGF0YSkKICAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNl
dCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShkZXNjcmlwdGlv
bikKLXsKLX0KLQotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJU
eXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEm
JiBkYXRhKQotICAgIDogbV90eXBlKHR5cGUpCi0gICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQotICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICwgbV9yYW5nZShyYW5nZSkK
ICAgICAsIG1fZGF0YShXVEZNb3ZlKGRhdGEpKQogewogfQogCiBpbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2hpZnRPZmZzZXRzKGludCBkZWx0YSkKIHsKLSAgICBtX3N0YXJ0T2Zmc2V0ICs9
IGRlbHRhOwotICAgIG1fZW5kT2Zmc2V0ICs9IGRlbHRhOworICAgIG1fcmFuZ2Uuc3RhcnQgKz0g
ZGVsdGE7CisgICAgbV9yYW5nZS5lbmQgKz0gZGVsdGE7CiB9CiAKIGlubGluZSBjb25zdCBTdHJp
bmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNvbnN0CkBAIC0yMTgsNTUgKzE3Nyw0
IEBAIGlubGluZSBjb25zdCBTdHJpbmcmIERvY3VtZW50TWFya2VyOjpkZXNjcmlwdGlvbigpIGNv
bnN0CiAgICAgcmV0dXJuIFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8U3RyaW5nPihtX2RhdGEpID8g
V1RGOjpnZXQ8U3RyaW5nPihtX2RhdGEpIDogZW1wdHlTdHJpbmcoKTsKIH0KIAotaW5saW5lIGJv
b2wgRG9jdW1lbnRNYXJrZXI6OmlzQWN0aXZlTWF0Y2goKSBjb25zdAotewotICAgIHJldHVybiBX
VEY6OmhvbGRzX2FsdGVybmF0aXZlPGJvb2w+KG1fZGF0YSkgJiYgV1RGOjpnZXQ8Ym9vbD4obV9k
YXRhKTsKLX0KLQotaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldEFjdGl2ZU1hdGNoKGJv
b2wgaXNBY3RpdmVNYXRjaCkKLXsKLSAgICBBU1NFUlQobV90eXBlID09IFRleHRNYXRjaCk7Ci0g
ICAgbV9kYXRhID0gaXNBY3RpdmVNYXRjaDsKLX0KLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLS8vIEZJWE1FOiBpT1Mgc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGRpY3RhdGlvbiBtYXJrIHN5
c3RlbSB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybXMgPHJkYXI6Ly9wcm9ibGVtLzk0MzEyNDk+Lgot
Ci1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGFsdGVybmF0aXZlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0
YSkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkK
LSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShEaWN0YXRpb25BbHRl
cm5hdGl2ZXNEYXRhIHsgYWx0ZXJuYXRpdmVzLCBtZXRhZGF0YSB9KQotewotICAgIEFTU0VSVChp
c0RpY3RhdGlvbigpKTsKLX0KLQotaW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXI6OmlzRGljdGF0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90eXBlID09IERpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMgfHwgbV90eXBlID09IERpY3RhdGlvblJlc3VsdDsKLX0KLQotaW5saW5lIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBEb2N1bWVudE1hcmtlcjo6YWx0ZXJuYXRpdmVzKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRh
KS5hbHRlcm5hdGl2ZXM7Ci19Ci0KLWlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBbHRl
cm5hdGl2ZShjb25zdCBTdHJpbmcmIGFsdGVybmF0aXZlLCBzaXplX3QgaW5kZXgpCi17Ci0gICAg
V1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5hbHRlcm5hdGl2ZXNb
aW5kZXhdID0gYWx0ZXJuYXRpdmU7Ci19Ci0KLWlubGluZSBpZCBEb2N1bWVudE1hcmtlcjo6bWV0
YWRhdGEoKSBjb25zdAotewotICAgIHJldHVybiBXVEY6OmdldDxEaWN0YXRpb25BbHRlcm5hdGl2
ZXNEYXRhPihtX2RhdGEpLm1ldGFkYXRhLmdldCgpOwotfQotCi1pbmxpbmUgdm9pZCBEb2N1bWVu
dE1hcmtlcjo6c2V0TWV0YWRhdGEoaWQgbWV0YWRhdGEpCi17Ci0gICAgV1RGOjpnZXQ8RGljdGF0
aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YSA9IG1ldGFkYXRhOwotfQotCi0j
ZW5kaWYKLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAppbmRleCBjZDkzZWU1OTY4MWFkMjZkODRjMTM1
MDg0OWM5ZWRhMmM3Y2QxMGRiLi5mYzY0ZTMwNmY1NWYwNjhkNjZhMGFjYTEwNDA5OGY4M2NmNDUz
ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEB3ZWJraXQub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3LCAyMDA4LCAyMDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJpZ2h0IChD
KSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk5vZGVU
cmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1
ZGUgIlJlbmRlclRleHQuaCIKQEAgLTYwLDEzNCArNTksNTQgQEAgdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmRldGFjaCgpCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMg
PSB7IH07CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmNvbGxlY3RUZXh0UmFuZ2VzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK2F1dG8gRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpIC0+IFZlY3RvcjxUZXh0UmFuZ2U+CiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5n
ZT4+IHRleHRSYW5nZTsKLSAgICBmb3IgKFRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IocmFuZ2Up
OyAhdGV4dEl0ZXJhdG9yLmF0RW5kKCk7IHRleHRJdGVyYXRvci5hZHZhbmNlKCkpCi0gICAgICAg
IHRleHRSYW5nZS5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHRleHRJdGVyYXRvci5yYW5nZSgpKSk7
Ci0gICAgcmV0dXJuIHRleHRSYW5nZTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pCi17Ci0gICAgZm9yIChh
dXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4
dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpLCBkZXNjcmlwdGlv
bikpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKLXsK
LSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQotICAg
ICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtl
cih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCkp
KTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShO
b2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQotewotICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgpKTsKLX0KLQot
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRvTm9kZShOb2RlJiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmIGRhdGEpCi17Ci0gICAgYWRk
TWFya2VyKG5vZGUsIERvY3VtZW50TWFya2VyKHR5cGUsIHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNl
dCArIGxlbmd0aCwgV1RGTW92ZShkYXRhKSkpOwotfQotCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiByYW5nZSwgYm9vbCBhY3Rp
dmVNYXRjaCkKLXsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMo
cmFuZ2UpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFy
dE9mZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9m
ZnNldCgpOwotICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBE
b2N1bWVudE1hcmtlcihzdGFydE9mZnNldCwgZW5kT2Zmc2V0LCBhY3RpdmVNYXRjaCkpOworICAg
IFZlY3RvcjxUZXh0UmFuZ2U+IHJhbmdlczsKKyAgICBmb3IgKFRleHRJdGVyYXRvciBpdGVyYXRv
cihyYW5nZSk7ICFpdGVyYXRvci5hdEVuZCgpOyBpdGVyYXRvci5hZHZhbmNlKCkpIHsKKyAgICAg
ICAgYXV0byBjdXJyZW50UmFuZ2UgPSBpdGVyYXRvci5yYW5nZSgpOworICAgICAgICByYW5nZXMu
YXBwZW5kKHsgV1RGTW92ZShjdXJyZW50UmFuZ2Uuc3RhcnQuY29udGFpbmVyKSwgeyBjdXJyZW50
UmFuZ2Uuc3RhcnQub2Zmc2V0LCBjdXJyZW50UmFuZ2UuZW5kLm9mZnNldCB9IH0pOwogICAgIH0K
KyAgICByZXR1cm4gcmFuZ2VzOwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotdm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihSYW5nZSYgcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24sIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMsIGNvbnN0IFJldGFpblB0cjxpZD4m
IG1ldGFkYXRhKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihjb25z
dCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIGNv
bnN0IERvY3VtZW50TWFya2VyOjpEYXRhJiBkYXRhKQogewotICAgIGZvciAoYXV0byB0ZXh0UGll
Y2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGll
Y2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3Rh
cnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24sIGludGVycHJl
dGF0aW9ucywgbWV0YWRhdGEpKTsKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RU
ZXh0UmFuZ2VzKHJhbmdlKSkKKyAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS5ub2RlLCB7IHR5
cGUsIHRleHRQaWVjZS5yYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEgeyBkYXRhIH0gfSk7CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25QaHJhc2VXaXRo
QWx0ZXJuYXRpdmVzTWFya2VyKFJhbmdlJiByYW5nZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
dGVycHJldGF0aW9ucykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIo
VGV4dCYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQog
ewotICAgIEFTU0VSVChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSk7Ci0gICAgaWYgKGludGVy
cHJldGF0aW9ucy5zaXplKCkgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG51
bWJlck9mQWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25zLnNpemUoKSAtIDE7Ci0gICAgZm9y
IChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBE
b2N1bWVudE1hcmtlciBtYXJrZXIoRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhB
bHRlcm5hdGl2ZXMsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZz
ZXQoKSwgZW1wdHlTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4obnVtYmVyT2ZBbHRlcm5hdGl2ZXMp
LCBSZXRhaW5QdHI8aWQ+KCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJl
ck9mQWx0ZXJuYXRpdmVzOyArK2kpCi0gICAgICAgICAgICBtYXJrZXIuc2V0QWx0ZXJuYXRpdmUo
aW50ZXJwcmV0YXRpb25zW2kgKyAxXSwgaSk7Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Ut
PnN0YXJ0Q29udGFpbmVyKCksIG1hcmtlcik7Ci0gICAgfQorICAgIGFkZE1hcmtlcihub2RlLCB7
IHR5cGUsIHsgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIH0sIFdURk1vdmUoZGF0
YSkgfSk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREaWN0YXRpb25S
ZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBSZXRhaW5QdHI8aWQ+
JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2VkQ29u
dGVudE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgZm9yIChhdXRvIHRl
eHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFya2VyKHRl
eHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblJlc3VsdCwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVu
ZE9mZnNldCgpLCBTdHJpbmcoKSwgVmVjdG9yPFN0cmluZz4oKSwgbWV0YWRhdGEpKTsKKyAgICAv
LyBGSVhNRTogU2luY2UgdGhlIG1hcmtlciBpcyBhbHJlYWR5IHN0b3JlZCBpbiBhIG1hcCBrZXll
ZCBieSBub2RlLCB3ZSBjYW4gcHJvYmFibHkgY2hhbmdlIHRoaW5ncyBhcm91bmQgc28gd2UgZG9u
J3QgaGF2ZSB0byBhbHNvIHN0b3JlIHRoZSBub2RlIGluIHRoZSBtYXJrZXIuCisgICAgZm9yIChh
dXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisgICAgICAgIGFkZE1h
cmtlcih0ZXh0UGllY2Uubm9kZSwgeyBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRl
eHRQaWVjZS5yYW5nZSwgUmVmUHRyPE5vZGU+IHsgdGV4dFBpZWNlLm5vZGUucHRyKCkgfSB9KTsK
IH0KIAotI2VuZGlmCi0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGREcmFnZ2Vk
Q29udGVudE1hcmtlcihSYW5nZSYgcmFuZ2UpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6
IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICBEb2N1bWVudE1hcmtlcjo6RHJh
Z2dlZENvbnRlbnREYXRhIGRyYWdnZWRDb250ZW50RGF0YSB7IHRleHRQaWVjZS0+Zmlyc3ROb2Rl
KCkgfTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBE
b2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwg
dGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZShkcmFnZ2VkQ29udGVudERhdGEpIH0pOwot
ICAgIH0KLX0KLQotI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtl
cihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBTdHJp
bmcmIHZhbHVlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJs
YXBSdWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhy
YW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0
YSB0ZXh0Q2hlY2tpbmdEYXRhIHsga2V5LCB2YWx1ZSB9OwotICAgICAgICBhZGRNYXJrZXIodGV4
dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCB7IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZywgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgp
LCBXVEZNb3ZlKHRleHRDaGVja2luZ0RhdGEpIH0pOwotICAgIH0KLX0KLSNlbmRpZgotCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhSYW5nZSYgcmFuZ2UsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFu
Z2VzKHJhbmdlKSkgewotICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBl
cykpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1w
dHkoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gdGV4dFBpZWNlLT5zdGFydE9m
ZnNldCgpOwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSB0ZXh0UGllY2UtPmVuZE9mZnNl
dCgpOwotICAgICAgICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwg
c3RhcnRPZmZzZXQsIGVuZE9mZnNldCAtIHN0YXJ0T2Zmc2V0LCBtYXJrZXJUeXBlcywgbnVsbHB0
ciwgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIH0KKyAgICBm
aWx0ZXJNYXJrZXJzKHJhbmdlLCBudWxscHRyLCB0eXBlcywgb3ZlcmxhcFJ1bGUpOwogfQogCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2VycyhSYW5nZSYgcmFuZ2Us
IHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1
bWVudE1hcmtlciYpPiYgZmlsdGVyLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IHR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IG92ZXJsYXBS
dWxlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5n
ZSkpIHsKLSAgICAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAg
IGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7CisgICAg
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKLQotICAgICAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFy
a2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQg
LSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIGZpbHRlckZ1bmN0aW9uLCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBp
ZWNlLm5vZGUsIHRleHRQaWVjZS5yYW5nZSwgdHlwZXMsIGZpbHRlciwgb3ZlcmxhcFJ1bGUpOwog
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcihSZW5k
ZXJlZERvY3VtZW50TWFya2VyJiBtYXJrZXIsIE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFu
b2RlLmRvY3VtZW50KCkudmlldygpIHx8ICFub2RlLmRvY3VtZW50KCkudmlldygpLT5uZWVkc0xh
eW91dCgpKTsKLQotICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVmYWN0b3IgdGhpcyBzbyB0aGF0
IHdlIGRvbid0IHVzZSBSYW5nZSAoYmVjYXVzZSB3ZSBvbmx5IGhhdmUgb25lIE5vZGUpLCBidXQg
c3RpbGwgc2hhcmUgY29kZSB3aXRoIGFic29sdXRlVGV4dFF1YWRzKCkuCi0gICAgYXV0byBtYXJr
ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpLCAmbm9kZSwgbWFya2VyLnN0
YXJ0T2Zmc2V0KCksICZub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpOwotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IGFic29sdXRlTWFya2VyUXVhZHM7Ci0gICAgbWFya2VyUmFuZ2UtPmFic29sdXRlVGV4
dFF1YWRzKGFic29sdXRlTWFya2VyUXVhZHMsIHRydWUpOwotCi0gICAgVmVjdG9yPEZsb2F0UmVj
dD4gYWJzb2x1dGVNYXJrZXJSZWN0czsKLSAgICBhYnNvbHV0ZU1hcmtlclJlY3RzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoYWJzb2x1dGVNYXJrZXJRdWFkcy5zaXplKCkpOwotICAgIGZvciAoY29u
c3QgYXV0byYgcXVhZCA6IGFic29sdXRlTWFya2VyUXVhZHMpCi0gICAgICAgIGFic29sdXRlTWFy
a2VyUmVjdHMudW5jaGVja2VkQXBwZW5kKHF1YWQuYm91bmRpbmdCb3goKSk7Ci0KLSAgICBtYXJr
ZXIuc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhhYnNvbHV0ZU1hcmtlclJlY3RzKTsKKyAgICBh
dXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpIH0s
IHsgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKKyAgICBtYXJrZXIuc2V0VW5jbGlwcGVk
QWJzb2x1dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVh
ZHMocmFuZ2UsIHRydWUpKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpp
bnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCkKQEAgLTE5NSw4ICsxMTQsOCBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCiAg
ICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoYXV0byYg
bWFya2VycyA6IG1fbWFya2Vycy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICptYXJrZXJzKQorICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMudmFs
dWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMpCiAgICAg
ICAgICAgICBtYXJrZXIuaW52YWxpZGF0ZSgpOwogICAgIH0KIApAQCAtMjA5LDcgKzEyOCw3IEBA
IHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjppbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJz
SW5Ob2RlKE5vZGUmIG5vZGUpCiAgICAgaWYgKCFoYXNNYXJrZXJzKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIE1hcmtlckxpc3QqIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAg
ICBhdXRvIG1hcmtlcnMgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBBU1NFUlQobWFya2Vy
cyk7CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICptYXJrZXJzKQpAQCAtMjMyLDQxICsxNTEs
MzMgQEAgc3RhdGljIHZvaWQgdXBkYXRlTWFpbkZyYW1lTGF5b3V0SWZOZWVkZWQoRG9jdW1lbnQm
IGRvY3VtZW50KQogICAgIG1haW5GcmFtZVZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUoKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnVwZGF0
ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlIG1hcmtlclR5cGUpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6dXBkYXRlUmVj
dHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
dHlwZSkKIHsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlKSkKKyAgICBp
ZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlKSkKICAgICAgICAgcmV0dXJuOwotICAgIEFTU0VS
VCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKLQotICAgIGJvb2wgbmVlZHNMYXlvdXRJZkFueVJl
Y3RzQXJlRGlydHkgPSB0cnVlOwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1f
bWFya2VycykgewotICAgICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKLSAg
ICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAg
ICAgICAgIGlmIChtYXJrZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICAg
ICAgaWYgKG1hcmtlci5pc1ZhbGlkKCkpCisgICAgYm9vbCB1cGRhdGVkTGF5b3V0ID0gZmFsc2U7
CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBmb3Ig
KGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkgeworICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlKCkgIT0gdHlwZSB8fCBtYXJrZXIuaXNWYWxpZCgpKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotCi0gICAgICAgICAgICAvLyBXZSdsbCBkbyB1cCB0byBvbmUgbGF5b3V0IHBl
ciBjYWxsIGlmIHdlIGhhdmUgYW55IGRpcnR5IG1hcmtlcnMuCi0gICAgICAgICAgICBpZiAobmVl
ZHNMYXlvdXRJZkFueVJlY3RzQXJlRGlydHkpIHsKKyAgICAgICAgICAgIGlmICghdXBkYXRlZExh
eW91dCkgewogICAgICAgICAgICAgICAgIHVwZGF0ZU1haW5GcmFtZUxheW91dElmTmVlZGVkKG1f
ZG9jdW1lbnQpOwotICAgICAgICAgICAgICAgIG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5
ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgdXBkYXRlZExheW91dCA9IHRydWU7CiAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCBub2RlKTsKKyAgICAgICAgICAgIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIobWFya2Vy
LCAqbm9kZU1hcmtlcnMua2V5KTsKICAgICAgICAgfQogICAgIH0KIH0KIAotVmVjdG9yPEZsb2F0
UmVjdD4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhE
b2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQorVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlKQogewogICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlc3Vs
dDsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQorICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKHR5cGUpKQogICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIEFT
U0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCiAgICAgUmVmUHRyPEZyYW1lPiBmcmFtZSA9IG1fZG9jdW1lbnQuZnJhbWUoKTsK
ICAgICBpZiAoIWZyYW1lKQpAQCAtMjc1LDI2ICsxODYsMjYgQEAgVmVjdG9yPEZsb2F0UmVjdD4g
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVu
dE1hcmsKICAgICBpZiAoIWZyYW1lVmlldykKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKIAotICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUpOworICAg
IHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKHR5cGUpOwogCiAgICAgYm9v
bCBpc1N1YmZyYW1lID0gIWZyYW1lLT5pc01haW5GcmFtZSgpOwogICAgIEludFJlY3Qgc3ViZnJh
bWVDbGlwUmVjdDsKICAgICBpZiAoaXNTdWJmcmFtZSkKICAgICAgICAgc3ViZnJhbWVDbGlwUmVj
dCA9IGZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyhmcmFtZVZpZXctPndpbmRvd0NsaXBSZWN0
KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAg
ICAgICBOb2RlJiBub2RlID0gKm5vZGVBbmRNYXJrZXJzLmtleTsKKyAgICBmb3IgKGF1dG8mIG5v
ZGVNYXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlTWFy
a2Vycy5rZXktPnJlbmRlcmVyKCk7CiAgICAgICAgIEZsb2F0UmVjdCBvdmVyZmxvd0NsaXBSZWN0
OwotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKSkK
KyAgICAgICAgaWYgKHJlbmRlcmVyKQogICAgICAgICAgICAgb3ZlcmZsb3dDbGlwUmVjdCA9IHJl
bmRlcmVyLT5hYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKTsKLSAgICAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChtYXJr
ZXIudHlwZSgpICE9IG1hcmtlclR5cGUpCisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5v
ZGVNYXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSB0eXBl
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBhdXRvIHJlbmRlcmVk
UmVjdHMgPSBtYXJrZXIudW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpOwogCiAgICAgICAgICAgICAv
LyBDbGlwIGRvY3VtZW50IG1hcmtlcnMgYnkgdGhlaXIgb3ZlcmZsb3cgY2xpcC4KLSAgICAgICAg
ICAgIGlmIChub2RlLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGlmIChyZW5kZXJlcikgewog
ICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHJlbmRlcmVkUmVjdHMpCiAgICAgICAg
ICAgICAgICAgICAgIHJlY3QuaW50ZXJzZWN0KG92ZXJmbG93Q2xpcFJlY3QpOwogICAgICAgICAg
ICAgfQpAQCAtMzE1LDIxICsyMjYsMjAgQEAgVmVjdG9yPEZsb2F0UmVjdD4gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW5kZXJlZFJlY3RzRm9yTWFya2VycyhEb2N1bWVudE1hcmsKICAgICBy
ZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFy
a2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCitzdGF0aWMgYm9vbCBzaG91bGRJ
bnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAj
aWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAgIGlmIChuZXdNYXJr
ZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZykKKyAgICBp
ZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcp
CiAgICAgICAgIHJldHVybiB0cnVlOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQotICAgIGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25Q
aHJhc2VXaXRoQWx0ZXJuYXRpdmVzIHx8IG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvblJlc3VsdCkKKyAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyB8fCBtYXJrZXIudHlwZSgpID09
IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgIHJldHVybiB0cnVlOwog
I2VuZGlmCi0gICAgaWYgKG5ld01hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50KSB7Ci0gICAgICAgIGlmIChhdXRvIHRhcmdldE5vZGUgPSBXVEY6OmdldDxEb2N1
bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRhPihuZXdNYXJrZXIuZGF0YSgpKS50YXJnZXRO
b2RlKQotICAgICAgICAgICAgcmV0dXJuIHRhcmdldE5vZGUtPnJlbmRlcmVyKCkgJiYgdGFyZ2V0
Tm9kZS0+cmVuZGVyZXIoKS0+aXNSZW5kZXJSZXBsYWNlZCgpOwotICAgIH0KKworICAgIGlmICht
YXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkKKyAgICAgICAg
cmV0dXJuIGlzPFJlbmRlclJlcGxhY2VkPihXVEY6OmdldDxSZWZQdHI8Tm9kZT4+KG1hcmtlci5k
YXRhKCkpLT5yZW5kZXJlcigpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTMzNyw3ICsy
NDcsNyBAQCBzdGF0aWMgYm9vbCBzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKGNvbnN0IERv
Y3VtZW50TWFya2VyJiBuZXdNYXJrZXIpCiAvLyBNYXJrZXJzIGFyZSBzdG9yZWQgaW4gb3JkZXIg
c29ydGVkIGJ5IHRoZWlyIHN0YXJ0IG9mZnNldC4KIC8vIE1hcmtlcnMgb2YgdGhlIHNhbWUgdHlw
ZSBkbyBub3Qgb3ZlcmxhcCBlYWNoIG90aGVyLgogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYXJr
ZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IERvY3VtZW50TWFya2VyJiYgbmV3TWFya2VyKQogewogICAgIEFTU0VSVChuZXdNYXJrZXIuZW5k
T2Zmc2V0KCkgPj0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpOwogICAgIGlmIChuZXdNYXJrZXIu
ZW5kT2Zmc2V0KCkgPT0gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCkBAIC0zNTMsMTEgKzI2Mywx
MSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUs
IGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogCiAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMuYWRkKG5ld01hcmtlci50eXBlKCkpOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1h
cmtlckxpc3Q+JiBsaXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOworICAgIGF1dG8mIGxpc3QgPSBtX21hcmtlcnMuYWRkKCZub2RlLCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAKICAgICBpZiAoIWxpc3QpIHsKLSAgICAgICAgbGlzdCA9IG1ha2VV
bmlxdWU8TWFya2VyTGlzdD4oKTsKLSAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIobmV3TWFya2VyKSk7CisgICAgICAgIGxpc3QgPSBtYWtlVW5pcXVlPFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TWFya2VyPj4oKTsKKyAgICAgICAgbGlzdC0+YXBwZW5kKFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIGlmIChzaG91
bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKG5ld01hcmtlcikpIHsKICAgICAgICAgLy8gV2UgZG9u
J3QgbWVyZ2UgZGljdGF0aW9uIG1hcmtlcnMuCiAgICAgICAgIHNpemVfdCBpOwpAQCAtMzY3LDkg
KzI3Nyw5IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoTm9kZSYg
bm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG5ld01hCiAgICAgICAgICAgICBpZiAobWFya2Vy
LnN0YXJ0T2Zmc2V0KCkgPiBuZXdNYXJrZXIuc3RhcnRPZmZzZXQoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1
bWVudE1hcmtlcihuZXdNYXJrZXIpKTsKKyAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdNYXJrZXIpKSk7CiAgICAgfSBlbHNlIHsKLSAgICAg
ICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChuZXdNYXJrZXIpOworICAgICAgICBS
ZW5kZXJlZERvY3VtZW50TWFya2VyIHRvSW5zZXJ0KFdURk1vdmUobmV3TWFya2VyKSk7CiAgICAg
ICAgIHNpemVfdCBudW1NYXJrZXJzID0gbGlzdC0+c2l6ZSgpOwogICAgICAgICBzaXplX3QgaTsK
ICAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBtYXJrZXJzIHdob3NlIHN0YXJ0IG9mZnNldCBp
cyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIG5ldyBtYXJrZXIncy4KQEAgLTQxNCwxMDIgKzMy
NCw5OSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5v
ZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgIGludmFsaWRhdGVSZWN0c0Zvck1h
cmtlcnNJbk5vZGUobm9kZSk7CiB9CiAKLS8vIGNvcGllcyBtYXJrZXJzIGZyb20gc3JjTm9kZSB0
byBkc3ROb2RlLCBhcHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3Bp
ZXMuICBUaGUgc2hpZnQgaXMKLS8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3Jl
YXRlZCB0aGUgZHN0Tm9kZSBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNyY05v
ZGUuCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc3Jj
Tm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE5vZGUmIGRzdE5vZGUsIGlu
dCBkZWx0YSkKKy8vIENvcGllcyBtYXJrZXJzIGZyb20gc291cmNlIHRvIGRlc3RpbmF0aW9uLCBh
cHBseWluZyB0aGUgc3BlY2lmaWVkIHNoaWZ0IGRlbHRhIHRvIHRoZSBjb3BpZXMuIFRoZSBzaGlm
dCBpcworLy8gdXNlZnVsIGlmLCBlLmcuLCB0aGUgY2FsbGVyIGhhcyBjcmVhdGVkIHRoZSBkZXN0
aW5hdGlvbiBmcm9tIGEgbm9uLXByZWZpeCBzdWJzdHJpbmcgb2YgdGhlIHNvdXJjZS4KK3ZvaWQg
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNl
dFJhbmdlIHJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbikKIHsKLSAgICBpZiAobGVuZ3RoIDw9IDAp
CisgICAgaWYgKHJhbmdlLnN0YXJ0ID49IHJhbmdlLmVuZCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkp
CiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0g
ICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJnNyY05vZGUpOworICAgIGF1dG8g
bGlzdCA9IG1fbWFya2Vycy5nZXQoJnNvdXJjZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgZW5kT2Zm
c2V0ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGggLSAxOworICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBm
YWxzZTsKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIC8vIHN0b3Ag
aWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAgICAgICAgaWYgKG1hcmtl
ci5zdGFydE9mZnNldCgpID4gZW5kT2Zmc2V0KQorICAgICAgICAvLyBTdG9wIGlmIHdlIGFyZSBu
b3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zm
c2V0KCkgPj0gcmFuZ2UuZW5kKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgLy8gc2tp
cCBtYXJrZXIgdGhhdCBpcyBiZWZvcmUgdGhlIHNwZWNpZmllZCByYW5nZSBvciBpcyB0aGUgd3Jv
bmcgdHlwZQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQpCisg
ICAgICAgIC8vIFNraXAgbWFya2VyIHRoYXQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgcmFuZ2Uu
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCByYW5nZS5zdGFydCkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCi0gICAgICAgIC8vIHBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZp
ZWQgcmFuZ2UgYW5kIGFwcGx5IHRoZSBzaGlmdCBkZWx0YQotICAgICAgICBkb2NEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0KQotICAg
ICAgICAgICAgbWFya2VyLnNldFN0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KTsKLSAgICAgICAgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkKLSAgICAgICAgICAgIG1hcmtlci5zZXRF
bmRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7
CisgICAgICAgIC8vIFBpbiB0aGUgbWFya2VyIHRvIHRoZSBzcGVjaWZpZWQgcmFuZ2UgYW5kIGFw
cGx5IHRoZSBzaGlmdCBkZWx0YS4KKyAgICAgICAgYXV0byBjb3BpZWRNYXJrZXIgPSBtYXJrZXI7
CisgICAgICAgIGlmIChjb3BpZWRNYXJrZXIuc3RhcnRPZmZzZXQoKSA8IHJhbmdlLnN0YXJ0KQor
ICAgICAgICAgICAgY29waWVkTWFya2VyLnNldFN0YXJ0T2Zmc2V0KHJhbmdlLnN0YXJ0KTsKKyAg
ICAgICAgaWYgKGNvcGllZE1hcmtlci5lbmRPZmZzZXQoKSA+PSByYW5nZS5lbmQpCisgICAgICAg
ICAgICBjb3BpZWRNYXJrZXIuc2V0RW5kT2Zmc2V0KHJhbmdlLmVuZCk7CiAKLSAgICAgICAgYWRk
TWFya2VyKGRzdE5vZGUsIG1hcmtlcik7CisgICAgICAgIGFkZE1hcmtlcihkZXN0aW5hdGlvbiwg
V1RGTW92ZShjb3BpZWRNYXJrZXIpKTsKKyAgICAgICAgbmVlZFJlcGFpbnQgPSB0cnVlOwogICAg
IH0KIAotICAgIGlmIChkb2NEaXJ0eSAmJiBkc3ROb2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIGRz
dE5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgpOworICAgIGlmIChuZWVkUmVwYWludCkgeworICAg
ICAgICBpZiAoYXV0byByZW5kZXJlciA9IGRlc3RpbmF0aW9uLnJlbmRlcmVyKCkpCisgICAgICAg
ICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0KIAotdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFy
a2VyVHlwZXMsIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBzaG91bGRSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIE9mZnNldFJhbmdlIHJhbmdlLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBjb25zdCBGdW5jdGlvbjxib29sKGNv
bnN0IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCiB7Ci0g
ICAgaWYgKGxlbmd0aCA8PSAwKQorICAgIGlmIChyYW5nZS5zdGFydCA+PSByYW5nZS5lbmQpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7CisgICAgQVNTRVJUKCFtX21hcmtl
cnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZu
b2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxp
c3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgZG9jRGlydHkgPSBmYWxzZTsKLSAgICB1
bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGFydE9mZnNldCArIGxlbmd0aDsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTspIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CisgICAgYm9vbCBuZWVkUmVwYWludCA9IGZhbHNlOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbGlzdC0+c2l6ZSgpOyApIHsKKyAgICAgICAgYXV0byYgbWFy
a2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgLy8gbWFya2VycyBhcmUgcmV0dXJuZWQgaW4g
b3JkZXIsIHNvIHN0b3AgaWYgd2UgYXJlIG5vdyBwYXN0IHRoZSBzcGVjaWZpZWQgcmFuZ2UKLSAg
ICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKKyAgICAgICAgaWYg
KG1hcmtlci5zdGFydE9mZnNldCgpID49IHJhbmdlLmVuZCkKICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFy
Z2V0Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgfHwgIW1h
cmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7CisgICAgICAgIGlmIChtYXJrZXIu
ZW5kT2Zmc2V0KCkgPD0gcmFuZ2Uuc3RhcnQgfHwgIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBl
KCkpKSB7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCi0gICAgICAgIGlmIChmaWx0ZXJGdW5jdGlvbiAmJiAhZmlsdGVyRnVuY3Rpb24oJm1hcmtl
cikpIHsKKyAgICAgICAgaWYgKGZpbHRlciAmJiAhZmlsdGVyKG1hcmtlcikpIHsKICAgICAgICAg
ICAgIGkrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8g
YXQgdGhpcyBwb2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGlu
IHNvbWUgd2F5Ci0gICAgICAgIGRvY0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB3ZSBrbm93IHRoYXQgbWFya2VyIGFuZCB0YXJnZXQgaW50ZXJzZWN0IGluIHNvbWUgd2F5
LgorICAgICAgICBuZWVkUmVwYWludCA9IHRydWU7CiAKLSAgICAgICAgLy8gcGl0Y2ggdGhlIG9s
ZCBtYXJrZXIKICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwotCiAgICAgICAgIGlmIChzaG91bGRS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKLSAgICAgICAgICAgIC8vIFN0b3AgaGVy
ZS4gRG9uJ3QgYWRkIHJlc3VsdGluZyBzbGljZXMgYmFjay4KICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIC8vIGFkZCBlaXRoZXIgb2YgdGhlIHJlc3VsdGluZyBzbGljZXMgdGhhdCBh
cmUgbGVmdCBhZnRlciByZW1vdmluZyB0YXJnZXQKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4g
bWFya2VyLnN0YXJ0T2Zmc2V0KCkpIHsKKyAgICAgICAgaWYgKHJhbmdlLnN0YXJ0ID4gbWFya2Vy
LnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQgPSBt
YXJrZXI7Ci0gICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChzdGFydE9mZnNldCk7Ci0g
ICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdMZWZ0
KSk7CisgICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChyYW5nZS5zdGFydCk7CisgICAg
ICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihXVEZNb3ZlKG5l
d0xlZnQpKSk7CiAgICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2Vy
dGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAgICAgICAgICAgIGkrKzsK
ICAgICAgICAgfQotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gZW5kT2Zmc2V0KSB7
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiByYW5nZS5lbmQpIHsKICAgICAgICAg
ICAgIERvY3VtZW50TWFya2VyIG5ld1JpZ2h0ID0gbWFya2VyOwotICAgICAgICAgICAgbmV3Umln
aHQuc2V0U3RhcnRPZmZzZXQoZW5kT2Zmc2V0KTsKLSAgICAgICAgICAgIGxpc3QtPmluc2VydChp
LCBSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld1JpZ2h0KSk7CisgICAgICAgICAgICBuZXdSaWdo
dC5zZXRTdGFydE9mZnNldChyYW5nZS5lbmQpOworICAgICAgICAgICAgbGlzdC0+aW5zZXJ0KGks
IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdSaWdodCkpKTsKICAgICAgICAgICAg
IC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9kZSwgYnV0IHdlIHdhbnQg
dG8gc2tpcCB0aGF0IG9uZQogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CkBAIC01MjEsMTE3
ICs0MjgsMTE3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
KE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpCiAgICAgICAgICAgICBtX3Bvc3Np
Ymx5RXhpc3RpbmdNYXJrZXJUeXBlcyA9IHsgfTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkg
JiYgbm9kZS5yZW5kZXJlcigpKQotICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsK
KyAgICBpZiAobmVlZFJlcGFpbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBub2Rl
LnJlbmRlcmVyKCkpCisgICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOworICAgIH0KIH0K
IAotRG9jdW1lbnRNYXJrZXIqIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2VyQ29udGFp
bmluZ1BvaW50KGNvbnN0IExheW91dFBvaW50JiBwb2ludCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSkKK0RvY3VtZW50TWFya2VyKiBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQb2ludCYgcG9pbnQsIERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtl
cnMobWFya2VyVHlwZSkpCisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZSkpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIEFTU0VSVCghKG1fbWFya2Vycy5pc0VtcHR5KCkpKTsK
LQotICAgIHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKG1hcmtlclR5cGUp
OwotCi0gICAgZm9yIChhdXRvJiBub2RlQW5kTWFya2VycyA6IG1fbWFya2VycykgewotICAgICAg
ICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlQW5kTWFya2Vycy52YWx1ZSkgewotICAgICAgICAg
ICAgaWYgKG1hcmtlci50eXBlKCkgIT0gbWFya2VyVHlwZSkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgICAgICAgICBp
ZiAobWFya2VyLmNvbnRhaW5zKHBvaW50KSkKKyAgICB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVk
TWFya2Vyc09mVHlwZSh0eXBlKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9tYXJr
ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJrZXJz
KSB7CisgICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSA9PSB0eXBlICYmIG1hcmtlci5jb250
YWlucyhwb2ludCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICZtYXJrZXI7CiAgICAgICAgIH0K
ICAgICB9Ci0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlcnNGb3IoTm9kZSYgbm9k
ZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK1Zl
Y3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpt
YXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQor
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuIHsgfTsK
IAogICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gcmVzdWx0OwotICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21h
cmtlcnMuZ2V0KCZub2RlKTsKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7Ci0gICAgICAgIGlmIChtYXJrZXJU
eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKKyAgICAgICAgaWYgKHR5cGVzLmNvbnRhaW5z
KG1hcmtlci50eXBlKCkpKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgmbWFya2VyKTsKICAg
ICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1WZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0luUmFuZ2UoUmFuZ2UmIHJh
bmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQor
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZvckVhY2goY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzLCBGdW5j
dGlvbjxib29sKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImKT4gZnVuY3Rpb24pCiB7Ci0gICAgaWYg
KCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICByZXR1cm4gVmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPigpOwotCi0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIqPiBmb3VuZE1hcmtlcnM7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9IHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5k
Q29udGFpbmVyKCk7CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQorICAgICAg
ICByZXR1cm47CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVU
cmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAg
Zm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYg
KCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA8PSByYW5nZS5zdGFydE9mZnNldCgpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKG5vZGUgPT0gJmVuZENvbnRhaW5lciAmJiBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkgPj0gcmFuZ2UuZW5kT2Zmc2V0KCkpCi0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICBmb3VuZE1hcmtlcnMuYXBwZW5kKG1hcmtlcik7CisgICAg
Zm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlm
IChhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZub2RlKSkgeworICAgICAgICAgICAgYXV0byBv
ZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwgbm9kZSk7CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpsaXN0KSB7CisgICAgICAgICAgICAgICAgLy8g
TWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0
aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICAgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZz
ZXQoKSA+PSBvZmZzZXRSYW5nZS5lbmQpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBvZmZzZXRSYW5nZS5zdGFydCAm
JiB0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZnVuY3Rpb24obWFya2VyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgcmV0
dXJuIGZvdW5kTWFya2VyczsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJl
bW92ZU1hcmtlcnMoTm9kZSYgbm9kZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiBtYXJrZXJUeXBlcykKK1ZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJzSW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAg
aWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIC8vIEZJWE1FOiBDb25z
aWRlciBtYWtpbmcgZm9yRWFjaCBwdWJsaWMgYW5kIGNoYW5naW5nIGNhbGxlcnMgdG8gdXNlIHRo
YXQgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aGlzIG9uZS4KKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnM7CisgICAgZm9yRWFjaChyYW5nZSwgdHlwZXMsIFsmXSAoUmVu
ZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIG1hcmtlcnMuYXBwZW5kKCZt
YXJrZXIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSk7CisgICAgcmV0dXJuIG1hcmtl
cnM7Cit9CisKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5v
ZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCit7
CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKICAgICAKICAgICBhdXRvIGl0ZXJhdG9y
ID0gbV9tYXJrZXJzLmZpbmQoJm5vZGUpOwogICAgIGlmIChpdGVyYXRvciAhPSBtX21hcmtlcnMu
ZW5kKCkpCi0gICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlw
ZXMpOworICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIHR5cGVzKTsKIH0K
IAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2Vy
VHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0
dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBmb3IgKGF1dG8m
IG5vZGUgOiBjb3B5VG9WZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpIHsKLSAgICAgICAgYXV0byBp
dGVyYXRvciA9IG1fbWFya2Vycy5maW5kKG5vZGUpOwotICAgICAgICBpZiAoaXRlcmF0b3IgIT0g
bV9tYXJrZXJzLmVuZCgpKQotICAgICAgICAgICAgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KGl0ZXJh
dG9yLCBtYXJrZXJUeXBlcyk7Ci0gICAgfQotCi0gICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2Vy
VHlwZXMucmVtb3ZlKG1hcmtlclR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBjb3B5VG9W
ZWN0b3IobV9tYXJrZXJzLmtleXMoKSkpCisgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdCht
X21hcmtlcnMuZmluZChub2RlKSwgdHlwZXMpOworICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtl
clR5cGVzLnJlbW92ZSh0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvciwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJvbUxpc3QoTWFya2VyTWFwOjpp
dGVyYXRvciBpdGVyYXRvciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0
eXBlcykKIHsKICAgICBib29sIG5lZWRzUmVwYWludGluZyA9IGZhbHNlOwogICAgIGJvb2wgbGlz
dENhbkJlUmVtb3ZlZDsKIAotICAgIGlmIChtYXJrZXJUeXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6
YWxsTWFya2VycygpKSB7CisgICAgaWYgKHR5cGVzID09IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCkpIHsKICAgICAgICAgbmVlZHNSZXBhaW50aW5nID0gdHJ1ZTsKICAgICAgICAgbGlzdENh
bkJlUmVtb3ZlZCA9IHRydWU7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgTWFya2VyTGlzdCogbGlz
dCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKKyAgICAgICAgYXV0byBsaXN0ID0gaXRlcmF0b3It
PnZhbHVlLmdldCgpOwogCiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNp
emUoKTsgKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBtYXJrZXIgPSBsaXN0LT5hdChp
KTsKIAogICAgICAgICAgICAgLy8gc2tpcCBub2RlcyB0aGF0IGFyZSBub3Qgb2YgdGhlIHNwZWNp
ZmllZCB0eXBlCi0gICAgICAgICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50
eXBlKCkpKSB7CisgICAgICAgICAgICBpZiAoIXR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkp
KSB7CiAgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQpAQCAtNjU3LDMxICs1NjQsMjAgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yIGl0ZXJhdG8K
ICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vy
cyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlcGFpbnRNYXJrZXJzKE9wdGlvblNldDxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01h
cmtlcnMobWFya2VyVHlwZXMpKQorICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAvLyBvdXRlciBsb29wOiBwcm9jZXNzIGVhY2ggbWFya2VyZWQgbm9kZSBpbiB0aGUgZG9jdW1l
bnQKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1fbWFya2VycykgewotICAgICAgICBOb2RlKiBu
b2RlID0gbWFya2VyLmtleS5nZXQoKTsKLQotICAgICAgICAvLyBpbm5lciBsb29wOiBwcm9jZXNz
IGVhY2ggbWFya2VyIGluIHRoZSBjdXJyZW50IG5vZGUKLSAgICAgICAgYm9vbCBub2RlTmVlZHNS
ZXBhaW50ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFy
a2VyLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMoZG9jdW1l
bnRNYXJrZXIudHlwZSgpKSkgewotICAgICAgICAgICAgICAgIG5vZGVOZWVkc1JlcGFpbnQgPSB0
cnVlOworICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAgICAg
Zm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAgIGlm
ICh0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZU1hcmtlcnMua2V5LT5yZW5kZXJlcigpKQorICAgICAgICAgICAg
ICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFub2RlTmVlZHNSZXBhaW50KQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgLy8gY2F1c2UgdGhlIG5vZGUgdG8gYmUg
cmVkcmF3bgotICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICByZW5kZXJlci0+cmVwYWludCgpOwogICAgIH0KIH0KIApAQCAtNjkxLDE1ICs1
ODcsMTYgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2Rl
JiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgcmV0dXJuOwogICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9t
YXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7
CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGRpZFNoaWZ0TWFy
a2VyID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gbGlzdC0+c2l6ZSgpOyAp
IHsKLSAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyID0gbGlzdC0+YXQoaSk7
Ci0gICAgICAgIC8vIEZJWE1FOiBIb3cgY2FuIHRoaXMgcG9zc2libHkgYmUgaU9TLXNwZWNpZmlj
IGNvZGU/CisgICAgICAgIGF1dG8mIG1hcmtlciA9IGxpc3QtPmF0KGkpOworCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29uIHRoaXMg
c2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2ludC4KICAg
ICAgICAgaW50IHRhcmdldFN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkgKyBkZWx0
YTsKICAgICAgICAgaW50IHRhcmdldEVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKSArIGRl
bHRhOwogICAgICAgICBpZiAodGFyZ2V0U3RhcnRPZmZzZXQgPj0gbm9kZS5tYXhDaGFyYWN0ZXJP
ZmZzZXQoKSB8fCB0YXJnZXRFbmRPZmZzZXQgPD0gMCkgewpAQCAtNzA3LDE2ICs2MDQsMTUgQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFya2VycyhOb2RlJiBub2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAjZW5kaWYKKwogICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gc3RhcnRPZmZz
ZXQpIHsKICAgICAgICAgICAgIEFTU0VSVCgoaW50KW1hcmtlci5zdGFydE9mZnNldCgpICsgZGVs
dGEgPj0gMCk7CiAgICAgICAgICAgICBtYXJrZXIuc2hpZnRPZmZzZXRzKGRlbHRhKTsKICAgICAg
ICAgICAgIGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkK
ICAgICAgICAgfQotI2Vsc2UKLSAgICAgICAgLy8gRklYTUU6IEluc2VydGluZyB0ZXh0IGluc2lk
ZSBhIERvY3VtZW50TWFya2VyIGRvZXMgbm90IGdyb3cgdGhlIG1hcmtlci4KLSAgICAgICAgLy8g
U2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI1MDQ+LgotICAg
ICAgICB9IGVsc2UgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IHN0YXJ0T2Zmc2V0KSB7CisjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAgLy8gRklYTUU6IE5vIG9idmlvdXMgcmVhc29u
IHRoaXMgc2hvdWxkIGJlIGlPUy1zcGVjaWZpYy4gUmVtb3ZlIHRoZSAjaWYgYXQgc29tZSBwb2lu
dC4KKyAgICAgICAgZWxzZSBpZiAobWFya2VyLmVuZE9mZnNldCgpID4gc3RhcnRPZmZzZXQpIHsK
ICAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YSA8PSBtYXJrZXIuc3Rh
cnRPZmZzZXQoKSkgewogICAgICAgICAgICAgICAgIGxpc3QtPnJlbW92ZShpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTcyNSwxNDAgKzYyMSw1OCBAQCB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6c2hpZnRNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCBpbgogICAgICAgICAgICAgZGlkU2hpZnRNYXJrZXIgPSB0cnVlOwogICAgICAgICB9CiAj
ZW5kaWYKKwogICAgICAgICArK2k7CiAgICAgfQogCiAgICAgaWYgKGRpZFNoaWZ0TWFya2VyKSB7
CiAgICAgICAgIGludmFsaWRhdGVSZWN0c0Zvck1hcmtlcnNJbk5vZGUobm9kZSk7Ci0KLSAgICAg
ICAgaWYgKG5vZGUucmVuZGVyZXIoKSkKLSAgICAgICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVw
YWludCgpOwotICAgIH0KLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1h
cmtlcnNBY3RpdmUoUmFuZ2UmIHJhbmdlLCBib29sIGFjdGl2ZSkKLXsKLSAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFy
dENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFp
bmVyID0gcmFuZ2UuZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSBy
YW5nZS5wYXN0TGFzdE5vZGUoKTsKLQotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0
Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbm9kZSA9PSAmc3RhcnRD
b250YWluZXIgPyByYW5nZS5zdGFydE9mZnNldCgpIDogMDsKLSAgICAgICAgdW5zaWduZWQgZW5k
T2Zmc2V0ID0gbm9kZSA9PSAmZW5kQ29udGFpbmVyID8gcmFuZ2UuZW5kT2Zmc2V0KCkgOiBzdGQ6
Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIHNldE1hcmtlcnNBY3Rp
dmUoKm5vZGUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIGFjdGl2ZSk7CisgICAgICAgIGlmIChh
dXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKICAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRN
YXJrZXJzQWN0aXZlKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBl
bmRPZmZzZXQsIGJvb2wgYWN0aXZlKQorYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhh
c01hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtl
cnMuZ2V0KCZub2RlKTsKLSAgICBpZiAoIWxpc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIGJv
b2wgZGlkQWN0aXZhdGVNYXJrZXIgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICps
aXN0KSB7Ci0gICAgICAgIC8vIE1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9w
IGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlLgotICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgLy8gU2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQu
Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPCBzdGFydE9mZnNldCB8fCBtYXJrZXIu
dHlwZSgpICE9IERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBtYXJrZXIuc2V0QWN0aXZlTWF0Y2goYWN0aXZlKTsKLSAgICAgICAgZGlk
QWN0aXZhdGVNYXJrZXIgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChkaWRBY3RpdmF0ZU1hcmtl
ciAmJiBub2RlLnJlbmRlcmVyKCkpCi0gICAgICAgIG5vZGUucmVuZGVyZXIoKS0+cmVwYWludCgp
OworICAgIGJvb2wgZm91bmRNYXJrZXIgPSBmYWxzZTsKKyAgICBmb3JFYWNoKHJhbmdlLCB0eXBl
cywgWyZdIChSZW5kZXJlZERvY3VtZW50TWFya2VyJikgeworICAgICAgICBmb3VuZE1hcmtlciA9
IHRydWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0pOworICAgIHJldHVybiBmb3VuZE1h
cmtlcjsKIH0KIAotYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoUmFu
Z2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5
cGVzKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNsZWFyRGVzY3JpcHRpb25Pbk1h
cmtlcnNJbnRlcnNlY3RpbmdSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7Ci0gICAgaWYgKCFwb3NzaWJs
eUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQorICAgIGZvckVhY2gocmFuZ2UsIHR5cGVzLCBbJl0g
KFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlcikgeworICAgICAgICBtYXJrZXIuY2xlYXJE
YXRhKCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0g
ICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUpOwot
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnNGb3IoKm5vZGUpKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci0+dHlwZSgpKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChub2RlID09ICZzdGFydENvbnRhaW5l
ciAmJiBtYXJrZXItPmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5z
dGFydE9mZnNldCgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlm
IChub2RlID09ICZlbmRDb250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQoKSkpCi0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRl
c2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmIHJhbmdlLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzKQotewotICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFT
U0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICBOb2RlJiBzdGFydENvbnRhaW5lciA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgTm9kZSYgZW5kQ29udGFpbmVyID0gcmFuZ2Uu
ZW5kQ29udGFpbmVyKCk7Ci0KLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5wYXN0TGFz
dE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAh
PSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAg
ICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUg
PT0gJmVuZENvbnRhaW5lciA/IHN0YXRpY19jYXN0PHVuc2lnbmVkPihyYW5nZS5lbmRPZmZzZXQo
KSkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgIE1hcmtl
ckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KG5vZGUpOwotICAgICAgICBpZiAoIWxpc3QpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxp
c3QtPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBEb2N1bWVudE1hcmtlciYgbWFya2VyID0g
bGlzdC0+YXQoaSk7Ci0KLSAgICAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9y
ZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAg
ICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gZW5kT2Zmc2V0KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25n
IHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAgICAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQo
KSA8PSBzdGFydE9mZnNldCB8fCAhbWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5cGUoKSkp
IHsKLSAgICAgICAgICAgICAgICBpKys7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1hcmtlci5jbGVhckRhdGEoKTsKLSAgICAgICAgfQot
ICAgIH0KKyAgICB9KTsKIH0KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKKwogdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKIHsKICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVkIG5vZGVzIGhhdmUgbWFya2VyczpcbiIsIG1fbWFya2Vycy5zaXplKCkp
OwotICAgIGZvciAoYXV0byYgbWFya2VyIDogbV9tYXJrZXJzKSB7Ci0gICAgICAgIE5vZGUqIG5v
ZGUgPSBtYXJrZXIua2V5LmdldCgpOwotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9k
ZSk7Ci0gICAgICAgIGZvciAoYXV0byYgZG9jdW1lbnRNYXJrZXIgOiAqbWFya2VyLnZhbHVlKQot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIgJWQ6WyVkOiVkXSglZCkiLCBkb2N1bWVudE1h
cmtlci50eXBlKCksIGRvY3VtZW50TWFya2VyLnN0YXJ0T2Zmc2V0KCksIGRvY3VtZW50TWFya2Vy
LmVuZE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5pc0FjdGl2ZU1hdGNoKCkpOwotCi0gICAgICAg
IGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9t
YXJrZXJzKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAiLCBub2RlTWFya2Vycy5rZXku
Z2V0KCkpOworICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICVkOlslZDolZF0iLCBtYXJrZXIudHlwZSgp
LCBtYXJrZXIuc3RhcnRPZmZzZXQoKSwgbWFya2VyLmVuZE9mZnNldCgpKTsKKyAgICAgICAgZnB1
dGMoJ1xuJywgc3RkZXJyKTsKICAgICB9CiB9CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgc2hvd0RvY3VtZW50
TWFya2Vycyhjb25zdCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIpCiB7CiAgICAgaWYgKGNvbnRyb2xsZXIpCiAgICAgICAgIGNvbnRyb2xsZXItPnNob3dNYXJr
ZXJzKCk7CiB9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5oCmluZGV4IDYzMDVhYTY2YzE2ZTY5Y2M2NzU2ZGUyODg1OTJiZWNmYzg4MDEx
MTAuLjg2ZWIwZmRjZjZiY2U1MDZkMWYzZmE1M2Y5Zjg2NzRmYzVmZTIzYjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTMsNyArMyw3IEBA
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLiAoaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vKQogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKQEAgLTM1LDY1ICszNSw0NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IERvY3VtZW50OwogY2xhc3MgTGF5b3V0UG9pbnQ7Ci1jbGFzcyBMYXlvdXRSZWN0OwogY2xhc3Mg
Tm9kZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyZWREb2N1bWVudE1hcmtlcjsKK2NsYXNz
IFRleHQ7CiAKIHN0cnVjdCBTaW1wbGVSYW5nZTsKIAogY2xhc3MgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLQogICAgIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcihEb2N1bWVudCYpOwogICAgIH5Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIo
KTsKIAogICAgIHZvaWQgZGV0YWNoKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJr
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbik7Ci0gICAgdm9p
ZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZE1hcmtlclRv
Tm9kZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBhY3Rp
dmVNYXRjaCk7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICB2b2lkIGFkZE1hcmtlcihS
YW5nZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5Q
dHI8aWQ+JiBtZXRhZGF0YSk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJu
YXRpdmVzTWFya2VyKFJhbmdlJiwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGludGVycHJldGF0aW9u
cyk7Ci0gICAgdm9pZCBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2Um
LCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSk7Ci0jZW5kaWYKLSAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKFJhbmdlJik7CiAKLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVO
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBhZGRQbGF0Zm9ybVRleHRD
aGVja2luZ01hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFN0cmluZyYga2V5LCBjb25z
dCBTdHJpbmcmIHZhbHVlKTsKLSNlbmRpZgorICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWFy
a2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNvbnN0
IERvY3VtZW50TWFya2VyOjpEYXRhJiA9IHsgfSk7CisgICAgdm9pZCBhZGRNYXJrZXIoVGV4dCYs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKKyAgICB2b2lkIGFkZERy
YWdnZWRDb250ZW50TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKLSAgICB2b2lkIGNvcHlN
YXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBO
b2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpOwotICAgIGJvb2wgaGFzTWFya2VycygpIGNvbnN0Ci0g
ICAgewotICAgICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4
aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSkpOwotICAgICAgICByZXR1cm4gIW1fbWFya2Vycy5pc0VtcHR5KCk7Ci0gICAgfQotICAgIGJv
b2wgaGFzTWFya2VycyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKKyAgICB2b2lkIGNvcHlNYXJrZXJz
KE5vZGUmIHNvdXJjZSwgT2Zmc2V0UmFuZ2UsIE5vZGUmIGRlc3RpbmF0aW9uKTsKKyAgICBib29s
IGhhc01hcmtlcnMoKSBjb25zdDsKKyAgICBib29sIGhhc01hcmtlcnMoY29uc3QgU2ltcGxlUmFu
Z2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJr
ZXI6OmFsbE1hcmtlcnMoKSk7CiAKICAgICAvLyBXaGVuIGEgbWFya2VyIHBhcnRpYWxseSBvdmVy
bGFwcyB3aXRoIHJhbmdlLCBpZiByZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcnMgaXMg
dHJ1ZSwgd2UgY29tcGxldGVseQogICAgIC8vIHJlbW92ZSB0aGUgbWFya2VyLiBJZiB0aGUgYXJn
dW1lbnQgaXMgZmFsc2UsIHdlIHdpbGwgYWRqdXN0IHRoZSBzcGFuIG9mIHRoZSBtYXJrZXIgc28g
dGhhdCBpdCByZXRhaW5zCiAgICAgLy8gdGhlIHBvcnRpb24gdGhhdCBpcyBvdXRzaWRlIG9mIHRo
ZSByYW5nZS4KICAgICBlbnVtIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qg
eyBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyLCBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlciB9OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2Vy
cyhSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVu
dE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9y
Tm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgdm9pZCBy
ZW1vdmVNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxN
YXJrZXJzKCksIHN0ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5j
dGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBE
b05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT2Zmc2V0
UmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1h
cmtlcjo6YWxsTWFya2VycygpLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0IERvY3VtZW50TWFy
a2VyJik+JiBmaWx0ZXJGdW5jdGlvbiA9IG51bGxwdHIsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
IAogICAgIC8vIFJldHVybiBmYWxzZSBmcm9tIGZpbHRlckZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUg
bWFya2VyLgotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgZmlsdGVyTWFya2VycyhSYW5nZSYsIHN0
ZDo6ZnVuY3Rpb248Ym9vbChEb2N1bWVudE1hcmtlciopPiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9u
U2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92
ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGZp
bHRlck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBGdW5jdGlvbjxib29sKGNvbnN0
IERvY3VtZW50TWFya2VyJik+JiBmaWx0ZXJGdW5jdGlvbiwgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJs
YXBwaW5nTWFya2VyKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlTWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSk7CiAgICAgdm9pZCByZW1vdmVNYXJrZXJzKE5vZGUmLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7
CiAgICAgdm9pZCByZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSk7CiAgICAgdm9pZCBzaGlmdE1h
cmtlcnMoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgZGVsdGEpOwotICAgIHZvaWQg
c2V0TWFya2Vyc0FjdGl2ZShSYW5nZSYsIGJvb2wpOwotICAgIHZvaWQgc2V0TWFya2Vyc0FjdGl2
ZShOb2RlJiwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCk7
CiAKICAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1h
cmtlcnNGb3IoTm9kZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8
UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKFJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7Ci0gICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnNJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CisgICAgdm9pZCBjbGVhckRlc2NyaXB0aW9u
T25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUoRG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGUpOwogCkBAIC0xMDgsMTEgKzg5LDE4IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2
YXRlOgotICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBjb25zdCBEb2N1bWVudE1hcmtlciYpOwot
ICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVS
YW5nZSYpOworICAgIHZvaWQgYWRkTWFya2VyKE5vZGUmLCBEb2N1bWVudE1hcmtlciYmKTsKKwor
ICAgIHN0cnVjdCBUZXh0UmFuZ2UgeworICAgICAgICBSZWY8Tm9kZT4gbm9kZTsKKyAgICAgICAg
T2Zmc2V0UmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBWZWN0b3I8VGV4dFJhbmdlPiBjb2xsZWN0
VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYpOworCisgICAgdm9pZCBmb3JFYWNoKGNvbnN0
IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiwgY29u
c3QgRnVuY3Rpb248Ym9vbChSZW5kZXJlZERvY3VtZW50TWFya2VyJik+KTsKKworICAgIHVzaW5n
IE1hcmtlck1hcCA9IEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+Pj47CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJl
ZERvY3VtZW50TWFya2VyPiBNYXJrZXJMaXN0OwotICAgIHR5cGVkZWYgSGFzaE1hcDxSZWZQdHI8
Tm9kZT4sIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0Pj4gTWFya2VyTWFwOwogICAgIGJvb2wg
cG9zc2libHlIYXNNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4p
OwogICAgIHZvaWQgcmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4pOwogCkBAIC0xMjIsNiArMTEwLDEy
IEBAIHByaXZhdGU6CiAgICAgRG9jdW1lbnQmIG1fZG9jdW1lbnQ7CiB9OwogCitpbmxpbmUgYm9v
bCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtlcnMoKSBjb25zdAoreworICAgIEFT
U0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBl
cy5jb250YWluc0FueShEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CisgICAgcmV0dXJu
ICFtX21hcmtlcnMuaXNFbXB0eSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYzlkYmQ1
ZTUzYTNlNjIyMTRhZDhlNDdlODg0Y2I2MDczNTM1ODNmZi4uYjI4MTRiMDBlZmY4ZmFlZjdhNjEx
ZDhiM2Q3YWZlN2UxNWMyOTk2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTM4OSwxNSAr
MTM4OSw3IEBAIEludFJlY3QgRWxlbWVudDo6Ym91bmRzSW5Sb290Vmlld1NwYWNlKCkKICAgICAg
ICAgICAgIHJlbmRlckJveE1vZGVsT2JqZWN0KCktPmFic29sdXRlUXVhZHMocXVhZHMpOwogICAg
IH0KIAotICAgIGlmIChxdWFkcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7
Ci0KLSAgICBJbnRSZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAg
cmVzdWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwotCi0gICAgcmVz
dWx0ID0gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KGVuY2xvc2luZ0ludFJlY3Qo
dW5pdGVkQm91bmRpbmdCb3hlcyhxdWFkcykpKTsKIH0KIAogc3RhdGljIGJvb2wgbGF5b3V0T3Zl
cmZsb3dSZWN0Q29udGFpbnNBbGxEZXNjZW5kYW50cyhjb25zdCBSZW5kZXJCb3gmIHJlbmRlckJv
eCkKQEAgLTE0NjQsMTEgKzE0NTYsNyBAQCBMYXlvdXRSZWN0IEVsZW1lbnQ6OmFic29sdXRlRXZl
bnRCb3VuZHMoYm9vbCYgYm91bmRzSW5jbHVkZUFsbERlc2NlbmRhbnRFbGVtZW50cwogICAgICAg
ICAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAgICAgICAgICAgIEZsb2F0
UmVjdCBsb2NhbFJlY3QoMCwgMCwgYm94LndpZHRoKCksIGJveC5oZWlnaHQoKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGZyYWdtZW50ZWRGbG93LT5hYnNvbHV0ZVF1YWRzRm9yQm94KHF1YWRzLCAm
d2FzRml4ZWQsICZib3gsIGxvY2FsUmVjdC55KCksIGxvY2FsUmVjdC5tYXhZKCkpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBxdWFkQm91bmRzID0gcXVhZHNbMF0uYm91bmRpbmdC
b3goKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBxdWFkcy5z
aXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHF1YWRCb3VuZHMudW5pdGUocXVh
ZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHF1YWRCb3VuZHMpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBMYXlvdXRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKICAg
ICAgICAgICAgICAgICAgICAgY29tcHV0ZWRCb3VuZHMgPSB0cnVlOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IGNvbHVtbnMuIEp1c3Qg
cmV0dXJuIHRoZSBib3VuZHMgb2YgdGhlIG11bHRpY29sIGJsb2NrIGZvciBub3cuCkBAIC0xNjAz
LDExICsxNTkxLDcgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPFJlbmRlck9iamVjdCosIEZsb2F0UmVj
dD4+IEVsZW1lbnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG8KICAgICBpZiAocXVhZHMuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgRmxvYXRSZWN0IHJl
c3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlKHF1YWRzW2ldLmJvdW5k
aW5nQm94KCkpOwotCi0gICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKHJlbmRlcmVyLCByZXN1bHQp
OworICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihyZW5kZXJlciwgdW5pdGVkQm91bmRpbmdCb3hl
cyhxdWFkcykpOwogfQogCiBGbG9hdFJlY3QgRWxlbWVudDo6Ym91bmRpbmdDbGllbnRSZWN0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5oCmluZGV4IGQyMDhjNzE3OTY5MTcyYWM0MTEzNzgwMjJkNDhjYTg3ZWFjMGVmMzcu
LjllNjBhNDA4Zjk3MzIxYjNiOTc5ZTJmM2Q5Mjk1ZWJhNzU0YjNjNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaApA
QCAtMjAzLDcgKzIwMyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIGJvb2wgaXNTdHlsZWRFbGVt
ZW50KCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhJc0hUTUxGbGFnKSB8fCBnZXRGbGFnKElzU1ZH
RmxhZykgfHwgZ2V0RmxhZyhJc01hdGhNTEZsYWcpOyB9CiAgICAgdmlydHVhbCBib29sIGlzQXR0
cmlidXRlTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGlz
Q2hhcmFjdGVyRGF0YU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXND
aGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuICFpc0NvbnRhaW5lck5vZGUoKSAmJiAo
aXNUZXh0Tm9kZSgpIHx8IHZpcnR1YWxJc0NoYXJhY3RlckRhdGEoKSk7IH0KICAgICB2aXJ0dWFs
IGJvb2wgaXNGcmFtZU93bmVyRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzUGx1Z2luRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAj
aWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCkBAIC0zMTEsMTkgKzMxMSwyMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBoYXNFdmVudFRhcmdldERhdGEoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKEhh
c0V2ZW50VGFyZ2V0RGF0YUZsYWcpOyB9CiAgICAgdm9pZCBzZXRIYXNFdmVudFRhcmdldERhdGEo
Ym9vbCBmbGFnKSB7IHNldEZsYWcoZmxhZywgSGFzRXZlbnRUYXJnZXREYXRhRmxhZyk7IH0KIAot
ICAgIGVudW0gVXNlclNlbGVjdEFsbFRyZWF0bWVudCB7Ci0gICAgICAgIFVzZXJTZWxlY3RBbGxE
b2VzTm90QWZmZWN0RWRpdGFiaWxpdHksCi0gICAgICAgIFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05v
bkVkaXRhYmxlCi0gICAgfTsKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQ29udGVudEVkaXRh
YmxlKCk7CiAgICAgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBpbnNwZWN0KCk7CiAKKyAgICBlbnVtIFVzZXJTZWxlY3RBbGxUcmVhdG1l
bnQgeworICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmlsaXR5LAorICAg
ICAgICBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQorICAgIH07CiAgICAgYm9vbCBo
YXNFZGl0YWJsZVN0eWxlKFVzZXJTZWxlY3RBbGxUcmVhdG1lbnQgdHJlYXRtZW50ID0gVXNlclNl
bGVjdEFsbElzQWx3YXlzTm9uRWRpdGFibGUpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4g
Y29tcHV0ZUVkaXRhYmlsaXR5KHRyZWF0bWVudCwgU2hvdWxkVXBkYXRlU3R5bGU6OkRvTm90VXBk
YXRlKSAhPSBFZGl0YWJpbGl0eTo6UmVhZE9ubHk7CiAgICAgfQorCiAgICAgLy8gRklYTUU6IFJl
cGxhY2UgZXZlcnkgdXNlIG9mIHRoaXMgZnVuY3Rpb24gYnkgaGVscGVycyBpbiBFZGl0aW5nLmgK
ICAgICBib29sIGhhc1JpY2hseUVkaXRhYmxlU3R5bGUoKSBjb25zdAogICAgIHsKQEAgLTM0Mywx
MiArMzQ0LDggQEAgcHVibGljOgogICAgIC8vIG9mIGEgRG9jdW1lbnQgbm9kZS4KICAgICBXRUJD
T1JFX0VYUE9SVCBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogCi0gICAgLy8gUmV0
dXJucyB0aGUgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KLSAgICAvLyBBIERv
Y3VtZW50IG5vZGUgcmV0dXJucyBpdHNlbGYuCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7Ci0g
ICAgfQorICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG5v
ZGUuIEEgZG9jdW1lbnQgbm9kZSByZXR1cm5zIGl0c2VsZi4KKyAgICBEb2N1bWVudCYgZG9jdW1l
bnQoKSBjb25zdCB7IHJldHVybiB0cmVlU2NvcGUoKS5kb2N1bWVudFNjb3BlKCk7IH0KIAogICAg
IFRyZWVTY29wZSYgdHJlZVNjb3BlKCkgY29uc3QKICAgICB7CkBAIC0zNjAsMTAgKzM1Nyw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIG5vZGUgaXMgYXNzb2NpYXRl
ZCB3aXRoIGEgZG9jdW1lbnQgYW5kIGlzIGluIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50J3MKICAg
ICAvLyBub2RlIHRyZWUsIGZhbHNlIG90aGVyd2lzZSAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cu
b3JnLyNjb25uZWN0ZWQpLgotICAgIGJvb2wgaXNDb25uZWN0ZWQoKSBjb25zdAotICAgIHsgCi0g
ICAgICAgIHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7Ci0gICAgfQorICAgIGJvb2wg
aXNDb25uZWN0ZWQoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKElzQ29ubmVjdGVkRmxhZyk7IH0K
ICAgICBib29sIGlzSW5Vc2VyQWdlbnRTaGFkb3dUcmVlKCkgY29uc3Q7CiAgICAgYm9vbCBpc0lu
U2hhZG93VHJlZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNJblNoYWRvd1RyZWVGbGFnKTsg
fQogICAgIGJvb2wgaXNJblRyZWVTY29wZSgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoc3RhdGlj
X2Nhc3Q8Tm9kZUZsYWdzPihJc0Nvbm5lY3RlZEZsYWcgfCBJc0luU2hhZG93VHJlZUZsYWcpKTsg
fQpAQCAtMzcxLDYgKzM2NSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRG9jdW1lbnRUeXBlTm9k
ZSgpIGNvbnN0IHsgcmV0dXJuIG5vZGVUeXBlKCkgPT0gRE9DVU1FTlRfVFlQRV9OT0RFOyB9CiAg
ICAgdmlydHVhbCBib29sIGNoaWxkVHlwZUFsbG93ZWQoTm9kZVR5cGUpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAgICAgdW5zaWduZWQgY291bnRDaGlsZE5vZGVzKCkgY29uc3Q7CisgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgTm9kZSogdHJhdmVyc2VUb0NoaWxkQXQodW5zaWdu
ZWQpIGNvbnN0OwogCiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gY2hlY2tTZXRQcmVmaXgoY29uc3Qg
QXRvbVN0cmluZyYgcHJlZml4KTsKQEAgLTQxNSw3ICs0MTAsNiBAQCBwdWJsaWM6CiAgICAgICAg
IERvbmUsCiAgICAgICAgIE5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrLAogICAgIH07Ci0KICAg
ICBzdHJ1Y3QgSW5zZXJ0aW9uVHlwZSB7CiAgICAgICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVu
dCB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CkBA
IC02NDMsNiArNjM3LDggQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIFBzZXVkb0lkOjpOb25l
OwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCB2aXJ0dWFsSXNDaGFyYWN0ZXJEYXRhKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVtb3ZlZExh
c3RSZWYoKTsKIAogICAgIHZvaWQgcmVmRXZlbnRUYXJnZXQoKSBmaW5hbDsKQEAgLTY3OSw2ICs2
NzUsNyBAQCBwcml2YXRlOgogfTsKIAogI2lmIEFTU0VSVF9FTkFCTEVECisKIGlubGluZSB2b2lk
IGFkb3B0ZWQoTm9kZSogbm9kZSkKIHsKICAgICBpZiAoIW5vZGUpCkBAIC02ODcsNiArNjg0LDcg
QEAgaW5saW5lIHZvaWQgYWRvcHRlZChOb2RlKiBub2RlKQogICAgIEFTU0VSVCghbm9kZS0+bV9p
blJlbW92ZWRMYXN0UmVmRnVuY3Rpb24pOwogICAgIG5vZGUtPm1fYWRvcHRpb25Jc1JlcXVpcmVk
ID0gZmFsc2U7CiB9CisKICNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgTm9kZTo6cmVmKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IGJlNGViNjk5NTEw
NDAxODNkYmM0MjA2ZWQwMGQ0OGJkODg0MmYwM2YuLmE3M2M2OWVhZjUwODc4ZGU2Y2MzOWUzNTkz
ZWZlYmU0N2ZkMDExNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTE3NywxMSArMTE3Nyw3IEBA
IFZlY3RvcjxGbG9hdFJlY3Q+IFJhbmdlOjphYnNvbHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQoTm9k
ZSogbm9kZSwgUmVuZGVyVGV4dCYgcmVuCiAgICAgICAgIHJldHVybiBjbGlwcGVkUmVjdHM7CiAg
ICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gZmxvYXRSZWN0czsKLSAgICBmbG9hdFJlY3Rz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodGV4dFF1YWRzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRv
JiBxdWFkIDogdGV4dFF1YWRzKQotICAgICAgICBmbG9hdFJlY3RzLnVuY2hlY2tlZEFwcGVuZChx
dWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBmbG9hdFJlY3RzOworICAgIHJldHVybiBi
b3VuZGluZ0JveGVzKHRleHRRdWFkcyk7CiB9CiAKIHZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBSYW5n
ZUluRml4ZWRQb3NpdGlvbiogaW5GaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PiByZWN0T3B0aW9ucykgY29uc3QKQEAgLTEyMTMsMzMgKzEyMDksNiBAQCB2b2lkIFJhbmdlOjph
YnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBib29sIHVzZVNlbGVjdGlv
bkhlaWdodCwgUgogICAgICAgICAqaW5GaXhlZCA9IGFsbEZpeGVkID8gRW50aXJlbHlGaXhlZFBv
c2l0aW9uIDogKHNvbWVGaXhlZCA/IFBhcnRpYWxseUZpeGVkUG9zaXRpb24gOiBOb3RGaXhlZFBv
c2l0aW9uKTsKIH0KIAotdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0
UXVhZD4mIHF1YWRzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRp
b24qIGluRml4ZWQpIGNvbnN0Ci17Ci0gICAgYm9vbCBhbGxGaXhlZCA9IHRydWU7Ci0gICAgYm9v
bCBzb21lRml4ZWQgPSBmYWxzZTsKLQotICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7
IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIoKTsKLSAgICAgICAgaWYgKCFyZW5kZXJlcikK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGlzRml4ZWQgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKHJlbmRlcmVyLT5pc0JSKCkpCi0gICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1
dGVRdWFkcyhxdWFkcywgJmlzRml4ZWQpOwotICAgICAgICBlbHNlIGlmIChpczxSZW5kZXJUZXh0
PigqcmVuZGVyZXIpKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUg
PT0gJnN0YXJ0Q29udGFpbmVyKCkgPyBtX3N0YXJ0Lm9mZnNldCgpIDogMDsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENvbnRhaW5lcigpID8gbV9lbmQub2Zm
c2V0KCkgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCk7Ci0gICAgICAgICAg
ICBxdWFkcy5hcHBlbmRWZWN0b3IoZG93bmNhc3Q8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKS5hYnNv
bHV0ZVF1YWRzRm9yUmFuZ2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgdXNlU2VsZWN0aW9uSGVp
Z2h0LCBmYWxzZSAvKiBpZ25vcmVFbXB0eVRleHRTZWxlY3Rpb25zICovLCAmaXNGaXhlZCkpOwot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhbGxGaXhlZCAm
PSBpc0ZpeGVkOwotICAgICAgICBzb21lRml4ZWQgfD0gaXNGaXhlZDsKLSAgICB9Ci0KLSAgICBp
ZiAoaW5GaXhlZCkKLSAgICAgICAgKmluRml4ZWQgPSBhbGxGaXhlZCA/IEVudGlyZWx5Rml4ZWRQ
b3NpdGlvbiA6IChzb21lRml4ZWQgPyBQYXJ0aWFsbHlGaXhlZFBvc2l0aW9uIDogTm90Rml4ZWRQ
b3NpdGlvbik7Ci19Ci0KICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogc3RhdGljIGJvb2wgaW50
ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcChpbnQgc3RhcnRBLCBpbnQgZW5kQSwgaW50IHN0YXJ0
QiwgaW50IGVuZEIpCiB7CkBAIC0xODMyLDggKzE4MDEsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBS
YW5nZTo6Ym9yZGVyQW5kVGV4dFJlY3RzKENvb3JkaW5hdGVTcGFjZSBzcGFjZSwgT3B0aW9uU2V0
PEJvdQogICAgICAgICAgICAgICAgIGlmIChzcGFjZSA9PSBDb29yZGluYXRlU3BhY2U6OkNsaWVu
dCkKICAgICAgICAgICAgICAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS5jb252ZXJ0QWJzb2x1dGVU
b0NsaWVudFF1YWRzKGVsZW1lbnRRdWFkcywgcmVuZGVyZXItPnN0eWxlKCkpOwogCi0gICAgICAg
ICAgICAgICAgZm9yIChhdXRvJiBxdWFkIDogZWxlbWVudFF1YWRzKQotICAgICAgICAgICAgICAg
ICAgICByZWN0cy5hcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKKyAgICAgICAgICAgICAgICBy
ZWN0cyA9IGJvdW5kaW5nQm94ZXMoZWxlbWVudFF1YWRzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmIChpczxUZXh0Pigqbm9kZSkpIHsKICAgICAgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IGRvd25jYXN0PFRleHQ+KCpub2RlKS5yZW5kZXJlcigpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CmluZGV4IDY5Y2YyYjk3MmVkYThlZjYyM2M3NDRkZTkwMzNjYmE0NmZhM2Q3YjYuLjAyY2ExMzA4
NGM5ODBkMTA4MGFhZjIwOTQwOWEwZmVhZDg5NDIxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC0xMjUs
NyArMTI1LDYgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgYWJzb2x1dGVC
b3VuZGluZ0JveChPcHRpb25TZXQ8Qm91bmRpbmdSZWN0QmVoYXZpb3I+ID0geyB9KSBjb25zdDsK
IAogICAgIC8vIFRyYW5zZm9ybS1mcmllbmRseQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWJz
b2x1dGVUZXh0UXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCA9IGZhbHNlLCBSYW5nZUluRml4ZWRQb3NpdGlvbiogPSBudWxscHRyKSBjb25zdDsKICAgICBX
RUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJv
dW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
ZW5kZXJlZERvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oCmluZGV4IDg5ZTY0OTNiNzViZGYzMzFmNzJjMjUwYzVkNjQwMzE5M2JiYzM1
YjQuLmVmZWIwNDFkYzQwMTAyYmM1YWVmZGM3ZWVkMTVlNDBhOGEwZjEyNzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaApAQCAtMzMsOCArMzMsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgOiBwdWJs
aWMgRG9jdW1lbnRNYXJrZXIgewogcHVibGljOgotICAgIGV4cGxpY2l0IFJlbmRlcmVkRG9jdW1l
bnRNYXJrZXIoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKLSAgICAgICAgOiBEb2N1bWVu
dE1hcmtlcihtYXJrZXIpCisgICAgZXhwbGljaXQgUmVuZGVyZWREb2N1bWVudE1hcmtlcihEb2N1
bWVudE1hcmtlciYmIG1hcmtlcikKKyAgICAgICAgOiBEb2N1bWVudE1hcmtlcihXVEZNb3ZlKG1h
cmtlcikpCiAgICAgewogICAgIH0KIApAQCAtNDgsMTAgKzQ4LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVS
ZWN0cyhWZWN0b3I8RmxvYXRSZWN0PiYgcmVjdHMpCisgICAgdm9pZCBzZXRVbmNsaXBwZWRBYnNv
bHV0ZVJlY3RzKFZlY3RvcjxGbG9hdFJlY3Q+JiYgcmVjdHMpCiAgICAgewogICAgICAgICBtX2lz
VmFsaWQgPSB0cnVlOwotICAgICAgICBtX3JlY3RzID0gcmVjdHM7CisgICAgICAgIG1fcmVjdHMg
PSBXVEZNb3ZlKHJlY3RzKTsKICAgICB9CiAKICAgICBjb25zdCBWZWN0b3I8RmxvYXRSZWN0LCAx
PiYgdW5jbGlwcGVkQWJzb2x1dGVSZWN0cygpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcAppbmRleCA4ZWVhZDA2MWI2MzBkZWRhNTIzNTA5Y2UxM2VlNDY4N2FhMDQ4OWVhLi5hMjIw
MzVjZGVkMGJmZWM4MWMxYmY0YzU3MTkwMTU1N2UzNGU4M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1w
bGVSYW5nZS5jcHAKQEAgLTU0LDI4ICs1NCw0NiBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgU2lt
cGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBiKQogICAgIHJldHVybiBhLnN0YXJ0ID09
IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CiB9CiAKLS8vIEZJWE1FOiBOb2RlOjppc0NoYXJh
Y3RlckRhdGEgc2hvdWxkIHVzZSBhbiBhbGdvcml0aG0gbGlrZSB0aGlzLCBzaW5jZSBJJ20gYXNz
dW1pbmcgaXQncyBmYXN0ZXIgdGhhbiB0aGUgaXNDaGFyYWN0ZXJEYXRhTm9kZSB2aXJ0dWFsIGNh
bGwgaW4gbW9zdCBjYXNlcy4KLXN0YXRpYyBib29sIGZhc3RJc0NoYXJhY3RlckRhdGEoY29uc3Qg
Tm9kZSYgbm9kZSkKK3N0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKLSAgICByZXR1cm4gIW5vZGUuaXNDb250YWluZXJO
b2RlKCkgJiYgKG5vZGUuaXNUZXh0Tm9kZSgpIHx8IG5vZGUuaXNDaGFyYWN0ZXJEYXRhTm9kZSgp
KTsKKyAgICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgpIH07CiB9CiAKLS8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBOb2RlOjpsZW5ndGggc2luY2UgdGhlIERPTSBzcGVjaWZpY2F0aW9uIGNh
bGxzIHRoaXMgYSBub2RlJ3MgbGVuZ3RoLgotc3RhdGljIHVuc2lnbmVkIGxlbmd0aChjb25zdCBO
b2RlJiBub2RlKQorU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5v
ZGUmIG5vZGUpCiB7Ci0gICAgaWYgKGZhc3RJc0NoYXJhY3RlckRhdGEobm9kZSkpCi0gICAgICAg
IHJldHVybiBkb3duY2FzdDxDaGFyYWN0ZXJEYXRhPihub2RlKS5sZW5ndGgoKTsKLSAgICByZXR1
cm4gbm9kZS5jb3VudENoaWxkTm9kZXMoKTsKKyAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cyhub2RlKSB9OwogfQogCi1zdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2lu
dEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCitzdGF0aWMgUmVmUHRyPE5vZGU+IG5vZGVB
ZnRlcihjb25zdCBCb3VuZGFyeVBvaW50JiBwb2ludCkKIHsKLSAgICByZXR1cm4geyBub2RlLCBs
ZW5ndGgobm9kZSkgfTsKKyAgICBpZiAocG9pbnQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFO
b2RlKCkpCisgICAgICAgIHJldHVybiBwb2ludC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1
dG8gY2hpbGQgPSBwb2ludC5jb250YWluZXItPnRyYXZlcnNlVG9DaGlsZEF0KHBvaW50Lm9mZnNl
dCkpCisgICAgICAgIHJldHVybiBjaGlsZDsKKyAgICByZXR1cm4gTm9kZVRyYXZlcnNhbDo6bmV4
dFNraXBwaW5nQ2hpbGRyZW4ocG9pbnQuY29udGFpbmVyKTsKIH0KIAotU2ltcGxlUmFuZ2UgbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCitSZWZQdHI8Tm9kZT4gSW50
ZXJzZWN0aW5nTm9kZVJhbmdlOjpmaXJzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHsgbWFrZUJv
dW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0
ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKKyAgICByZXR1cm4gbm9kZUFmdGVyKG1fcmFuZ2Uuc3Rh
cnQpOworfQorCitSZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpzZW50aW5lbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG5vZGVBZnRlcihtX3JhbmdlLmVuZCk7Cit9CisKK09mZnNl
dFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUg
PT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKworSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJhdG9yKysoKQoreworICAgIEFT
U0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7
CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4
IDk1ODJkZjhjMzMyNmM4OTg1NWJiOGRlYTExNDYzMzVjNDY3MTNhODEuLjU3ZjQxM2I1YmUxNjNl
N2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBA
IC01NSw2ICs1NSw2MSBAQCBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxl
UmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCitjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFu
Z2U7CitJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxl
UmFuZ2UmKTsKKworc3RydWN0IE9mZnNldFJhbmdlIHsKKyAgICB1bnNpZ25lZCBzdGFydCB7IDAg
fTsKKyAgICB1bnNpZ25lZCBlbmQgeyAwIH07Cit9OworT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0
YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgTm9kZSYpOworCitjbGFzcyBJ
bnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndh
cmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CitwdWJsaWM6CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKworICAgIE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsg
QVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigp
IGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KKworICAgIG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9
IG90aGVyLm1fbm9kZTsgfQorCisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRv
cisrKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKK307CisKK2NsYXNz
IEludGVyc2VjdGluZ05vZGVSYW5nZSB7CitwdWJsaWM6CisgICAgSW50ZXJzZWN0aW5nTm9kZVJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CisKKyAgICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgpOyB9CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbnRpbmVsKCk7IH0KKworcHJpdmF0ZToKKyAg
ICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBjb25zdDsKKyAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwo
KSBjb25zdDsKKworICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBtX3JhbmdlOworfTsKKworaW5saW5l
IEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0
cjxOb2RlPiYmIG5vZGUpCisgICAgOiBtX25vZGUoV1RGTW92ZShub2RlKSkKK3sKK30KKworaW5s
aW5lIEludGVyc2VjdGluZ05vZGVSYW5nZTo6SW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fcmFuZ2UocmFuZ2UpCit7Cit9CisKK2lubGluZSBJ
bnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlKQoreworICAgIHJldHVybiB7IHJhbmdlIH07Cit9CisKIGlubGluZSBTaW1wbGVSYW5n
ZTo6U2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYgcmFuZ2UpCiAgICAgOiBTaW1wbGVSYW5n
ZShyYW5nZS5nZXQoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGYxMTI4YjkyNDdlODhiZDliMTIwNTAxNjFi
MzZlYzVhOWJlZmUyNmIuLjNmNGZjYjNhYTY5ZmNiNWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpCiAK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxh
Y2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
Qm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoJnJhbmdlVG9SZXBsYWNlKTsKKyAgICBhdXRvIGJv
dW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VUb1JlcGxhY2UpOwogICAgIGlm
IChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICBtX29yaWdpbmFs
VGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKICAgICAgICAgbV9vcmlnaW5hbFRleHQg
PSBwbGFpblRleHQoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOwotICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZl
LmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdl
KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9
IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICAgICAgICAgIGNsaWVudC0+c2hvd0Nv
cnJlY3Rpb25BbHRlcm5hdGl2ZShtX3R5cGUsIGJvdW5kaW5nQm94LCBtX29yaWdpbmFsVGV4dCwg
cmVwbGFjZW1lbnRTdHJpbmcsIHsgfSk7CkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBBbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAgICAgU3RyaW5nIHRvcFN1Z2dl
c3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwogICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUo
MCk7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgp
KTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKCptX3Jh
bmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVy
bmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICAgICAgICAgIGNsaWVudC0+c2hvd0NvcnJlY3Rp
b25BbHRlcm5hdGl2ZShtX3R5cGUsIGJvdW5kaW5nQm94LCBtX29yaWdpbmFsVGV4dCwgdG9wU3Vn
Z2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwpAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlv
bkNvbnRleHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2ZURpY3RhdGlvbkNvbnRleHQ+KG1fZGV0YWls
cyk7CiAgICAgICAgIGlmICghZGljdGF0aW9uQ29udGV4dCkKICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9y
YW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CisgICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSBy
b290Vmlld1JlY3RGb3JSYW5nZSgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSk7CiAgICAgICAgIG1f
aXNBY3RpdmUgPSB0cnVlOwogICAgICAgICBpZiAoIWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewog
ICAgICAgICAgICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRp
dmVUZXh0Q2xpZW50KCkpCkBAIC0zMzgsMTcgKzMzOCwxMiBAQCBib29sIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAgICAg
cmV0dXJuIGVkaXRvckNsaWVudCgpICYmIGVkaXRvckNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxs
aW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAotRmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QK
K0Zsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3
ID0gbV9mcmFtZS52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1fZnJhbWUudmlldygpOwogICAg
IGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9h
dFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHModGV4dFF1YWRz
KTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZvciAoYXV0byYgdGV4dFF1YWQg
OiB0ZXh0UXVhZHMpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZSh0ZXh0UXVhZC5ib3VuZGlu
Z0JveCgpKTsKLSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91
bmRpbmdSZWN0KSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIHZpZXctPmNvbnRl
bnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMocmFuZ2UpKSk7CiB9ICAgICAgICAKIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IG9sZFNlbGVjdGlvbikKQEAgLTU0Miw4ICs1MzcsNiBAQCBib29sIEFsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2Vy
JgogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlw
ZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvbkFsdGVybmF0aXZlczogewotICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRp
dmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBp
ZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRleHQpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC02MzgsNyArNjMxLDYgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMK
IHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRp
dmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJ
Q1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5kYXRhKCkpKTsKICAgICBpZiAo
YXV0byogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+
cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKICNlbHNlCkBAIC02NDksNyArNjQx
LDYgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW0KIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1
bWVudE1hcmtlciYgbWFya2VyKQogewogI2lmIFVTRShESUNUQVRJT05fQUxURVJOQVRJVkVTKQot
ICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRl
cm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQo
KSkKICAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0
PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsK
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKQEAgLTY2MiwxNSArNjUzLDEyIEBAIFZlY3Rv
cjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcihjb25zdCBECiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5
RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsK
ICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBFZGl0b3ImIGVkaXRvciA9IG1f
ZnJhbWUuZWRpdG9yKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rpb24gPSBlZGl0b3Iuc2Vs
ZWN0ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRvciA9IG1fZnJhbWUuZWRpdG9yKCk7CisgICAg
YXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0
aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0
aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsK
LSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMgPSBzZWxlY3Rpb24tPnN0YXJ0
Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJr
ZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVzKTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtl
cnMpCisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKnNlbGVjdGlvbiwgRG9jdW1lbnRN
YXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykpCiAgICAgICAgIHJlbW92ZURpY3RhdGlvbkFs
dGVybmF0aXZlc0Zvck1hcmtlcigqbWFya2VyKTsKLQogICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0
VG9SYW5nZSgqc2VsZWN0aW9uLCBhbHRlcm5hdGl2ZVN0cmluZywgQWx0ZXJuYXRpdmVUZXh0VHlw
ZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyVHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0
ZXJuYXRpdmUoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShhbHRlcm5hdGl2ZVN0cmluZyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oCmluZGV4IDk4MWQyNzA5MjA3YjZmMzk0ZGIyMWNiMWZkYTU2NjllYTgwYTk3NDguLjk0Nzc0
YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCkBAIC0xMjUsNyArMTI1
LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0b3JDbGllbnQqIGVkaXRvckNsaWVudCgpOwogICAgIAog
ICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOwotICAgIEZsb2F0UmVjdCByb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0OworICAgIEZsb2F0UmVjdCByb290
Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNvbnN0OwogICAgIHZvaWQgbWFy
a1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQo
RWRpdENvbW1hbmQqKTsKIAogICAgIFRpbWVyIG1fdGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4IDYzYmU5MWU5MDRjODkzNWRm
Zjk1NjE0Yzg3MGM5MjRhZjM0ZGJhNzkuLjRiZmQ5MjQwNWU0NmI2NDdjZDdmMDE5NTM0OTE5N2Qw
MjNiOTg5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENv
bW1hbmQuY3BwCkBAIC03NjksMzIgKzc2OSwxMiBAQCBzdGF0aWMgVmVjdG9yPFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXI+IGNvcHlNYXJrZXJzKGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TQog
CiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdN
YXJrZXJzKFRleHQmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0
IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KQogewotICAgIFJlZjxUZXh0PiBwcm90ZWN0ZWROb2Rl
KG5vZGUpOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9
IGRvY3VtZW50KCkubWFya2VycygpOwotICAgIGF1dG8gbWFya2VycyA9IGNvcHlNYXJrZXJzKG1h
cmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAm
bm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBEb2N1bWVudE1hcmtlcjo6YWxs
TWFya2VycygpKSk7CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBvZmZz
ZXQgfSwgeyBub2RlLCBvZmZzZXQgKyBjb3VudCB9IH07CisgICAgYXV0byBtYXJrZXJzID0gY29w
eU1hcmtlcnMoZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBv
ZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIGF1dG8gbmV3UmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZub2RlLCBvZmZzZXQgKyByZXBs
YWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAoY29uc3QgYXV0byYgbWFya2VyIDogbWFy
a2VycykgewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgICAgIGlmIChtYXJrZXIuaXNE
aWN0YXRpb24oKSkgewotICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3
UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJu
YXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcp
Ci0gICAgICAgIGlmIChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRl
eHRDaGVja2luZykgewotICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERv
Y3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpKSB7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8mIHRleHRDaGVja2lu
Z0RhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRh
PihtYXJrZXIuZGF0YSgpKTsKLSAgICAgICAgICAgIG1hcmtlckNvbnRyb2xsZXIuYWRkUGxhdGZv
cm1UZXh0Q2hlY2tpbmdNYXJrZXIobmV3UmFuZ2UsIHRleHRDaGVja2luZ0RhdGEua2V5LCB0ZXh0
Q2hlY2tpbmdEYXRhLnZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0j
ZW5kaWYKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtl
ci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKLSAgICB9CisgICAgcmFuZ2UuZW5kLm9m
ZnNldCA9IHJhbmdlLnN0YXJ0Lm9mZnNldCArIHJlcGxhY2VtZW50VGV4dC5sZW5ndGgoKTsKKyAg
ICBmb3IgKGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCisgICAgICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZE1hcmtlcihyYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFya2VyLmRhdGEoKSk7CiB9CiAK
IFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNv
bnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlv
bkNvbW1hbmQuY3BwCmluZGV4IGFkZjc0NGZjNWMzMTFmY2Y2NWM2ZmQ3YTM1MWVmNjMwMDA4MWI5
NzEuLjg0YzJhZGUxYTk0OTdmOGI2NmEzYzExNjM2ZDE2NDBlNTI5ZGFhM2IgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApAQCAtNjYsOCArNjYsOCBAQCBw
dWJsaWM6CiAgICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIgPSB0ZXh0Tm9kZS5kb2N1bWVu
dCgpLm1hcmtlcnMoKTsKICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0ZXJu
YXRpdmVzKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uRGF0YSBkYXRh
IHsgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCwgdGV4dFRvQmVJbnNlcnRlZC5zdWJzdHJp
bmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgpIH07Ci0g
ICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0
ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5n
ZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShk
YXRhKSk7Ci0gICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0
Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5h
dGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24p
OworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIodGV4dE5vZGUsIGFsdGVy
bmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VM
ZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMsIFdURk1vdmUoZGF0
YSkpOworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJrZXIodGV4dE5vZGUsIGFs
dGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFu
Z2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKICAgICAg
ICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggZTgxOGQxMmIy
MzkxMjBhMWFhMmJmZjVlMGFjYjc5YTZkMjBkOWQwMS4uYjJmMjg2YzBiNmVjMWY0NjY5NzA4YzYy
MThkYTRiZjJjYTM1YzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTI0
LDE5ICsxMTI0LDE4IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVz
aW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSYgbm9kZSwgaW50IGluCiAgICAgaWYgKGluZGV4IDw9
IDApCiAgICAgICAgIHJldHVybiB7IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZSgmbm9kZSks
IERPV05TVFJFQU0gfTsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9j
dW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKLSAgICBDaGFy
YWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7CisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChy
YW5nZSk7CiAgICAgaXQuYWR2YW5jZShpbmRleCAtIDEpOwogCiAgICAgaWYgKCFpdC5hdEVuZCgp
ICYmIGl0LnRleHQoKS5sZW5ndGgoKSA9PSAxICYmIGl0LnRleHQoKVswXSA9PSAnXG4nKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiB3b3JrYXJvdW5kIGZvciBjb2xsYXBzZWQgcmFuZ2UgKHdoZXJlIG9u
bHkgc3RhcnQgcG9zaXRpb24gaXMgY29ycmVjdCkgZW1pdHRlZCBmb3Igc29tZSBlbWl0dGVkIG5l
d2xpbmVzLgogICAgICAgICBpdC5hZHZhbmNlKDEpOwogICAgICAgICBpZiAoIWl0LmF0RW5kKCkp
Ci0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CisgICAgICAgICAgICByZXR1cm4geyBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5zdGFydCkgfTsKICAgICB9CiAKLSAgICBy
ZXR1cm4geyBpdC5hdEVuZCgpID8gcmFuZ2UtPmVuZFBvc2l0aW9uKCkgOiBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5lbmQpLCBVUFNUUkVBTSB9OworICAgIHJldHVybiB7
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigoaXQuYXRFbmQoKSA/IHJhbmdlIDogaXQucmFu
Z2UoKSkuZW5kKSwgVVBTVFJFQU0gfTsKIH0KIAogLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBw
b3NpdGlvbnMgYXJlIHZpc2libHkgbmV4dCB0byBlYWNoIG90aGVyIChmaXJzdCB0aGVuIHNlY29u
ZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBhNGUwNjAyMzk1ZTI3OTc5OWJmMzg5
MjMyYjNlZDY4MmI3ZWU0ZmE0Li5mOGM5MzM4MjY4ZWRmZTM0OWRiZWNkYzAzYjFmYTdiMThjNDFl
ODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zMDc2LDggKzMwNzYsNyBAQCB2
b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBk
b05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIG9mIG1hcmtlciB0aGF0IGNvbnRhaW5zIHRo
ZSB3b3JkIGluIHF1ZXN0aW9uLCBhbmQgcmVtb3ZlIG1hcmtlciBvbiB0aGF0IHdob2xlIHJhbmdl
LgogICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9m
Rmlyc3RXb3JkLmRlZXBFcXVpdmFsZW50KCksIGVuZE9mTGFzdFdvcmQuZGVlcEVxdWl2YWxlbnQo
KSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1
bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwotICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2Vy
cykKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJ
blJhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykp
CiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVtb3ZlRGljdGF0aW9uQWx0
ZXJuYXRpdmVzRm9yTWFya2VyKCptYXJrZXIpOwogCiAgICAgT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvUmVtb3ZlIHsKQEAgLTM2MjYsNyArMzYyNSw3
IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRh
cmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQo
Y3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSk7CiAKICAgICAgICAgaWYgKG1hcmtNYXRjaGVz
KQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKGNyZWF0ZUxpdmVS
YW5nZShyZXN1bHRSYW5nZSksIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRo
ZSBzcGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2YgMCBtZWFucyBubyBsaW1pdC4KICAgICAgICAg
aWYgKGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKaW5kZXggZTAzNzhhZWI3YTkyYjUyYWE1ZGQ5YzdiOWU5NTBhMWZlMDRlNWQ3My4uZmJlNzEy
YTk4ZGRkMDY4OWZjZGFiOWFjYzg4NThlMWMyMTIxNzc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5oCkBAIC0zOTksOCArMzk5LDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
Y29uZmlybU1hcmtlZFRleHQoKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRleHRBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYsIEVsZW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3Jp
dGluZ0RpcmVjdGlvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnREaWN0YXRpb25Q
aHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5Q
dHI8aWQ+IG1ldGFkYXRhKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpY3RhdGlvblBo
cmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGRpY3Rh
dGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEsIEVsZW1lbnQmKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIGluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJp
bmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxW
ZWN0b3I8U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhLCBFbGVtZW50Jik7
CiAjZW5kaWYKICAgICAKICAgICBlbnVtIGNsYXNzIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSB7IFBy
ZXBlbmRUZXh0LCBBcHBlbmRUZXh0IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCmluZGV4IDI2ZmE3NjExYjE5MGFlZWIzZGE3YTZiYThmMzI4MjU3MDBlZmRhYTQu
LjQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFiNzg1MjQ1M2ZiZmE5N2IzNTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMzI1LDMzICsyMzI1LDE5IEBAIEZs
b2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250
ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRW
aXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRS
ZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7Ci0gICAgUmVuZGVyVmlldyog
cm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAgIGlmICghcm9vdCkKKyAgICBp
ZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAgICByZXR1cm47CiAKLSAgICBW
ZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7Ci0gICAgZ2V0VGV4dFJlY3RhbmdsZXModGV4dFJl
Y3RzLCB0ZXh0UmVjdEhlaWdodCk7Ci0KLSAgICBGbG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0
ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6Okxl
Z2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwotCi0gICAgZm9yIChjb25zdCBhdXRvJiByZWN0
IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50
ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7Ci0gICAgICAgIGlmICghaW50ZXJz
ZWN0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWN0YW5nbGVzLmFwcGVuZChpbnRl
cnNlY3Rpb25SZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVTZWxlY3Rpb246OmdldFRleHRS
ZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVp
Z2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAotewogICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0
b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFk
cyhxdWFkcywgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9u
SGVpZ2h0KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBy
ZWN0YW5nbGVzLmFwcGVuZChxdWFkLmJvdW5kaW5nQm94KCkpOworICAgIGF1dG8gdmlzaWJsZUNv
bnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJs
ZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOworICAgIGZvciAoYXV0byYgcmVj
dCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2Us
IHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkp
KSB7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2
aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBpZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0
eSgpKQorICAgICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50ZXJzZWN0aW9uUmVjdCk7Cisg
ICAgfQogfQogCiAvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1
ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlv
bi5oCmluZGV4IDI4NTU5MTc4NGE5ZmUzYTI3MWU4NDhlMTEyY2YwNTI3MzQ3MDQ4MDAuLmU2YTcw
OGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTI3Niw3ICsyNzYsNiBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIGNsYXNzIFRleHRSZWN0YW5nbGVIZWlnaHQgeyBUZXh0SGVpZ2h0LCBTZWxlY3Rpb25IZWln
aHQgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3Rh
bmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0ID0gVGV4dFJlY3Rh
bmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGdldFRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiwgVGV4dFJlY3RhbmdsZUhl
aWdodCA9IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkgY29uc3Q7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCBIVE1MRm9ybUVsZW1lbnQqIGN1cnJlbnRGb3JtKCkgY29uc3Q7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKaW5k
ZXggOWI3NzYxMDJmOWYxNWFjOTY2ODk5MzgwOTdjYjIyZWVhMmZkMGJiOS4uNzNkNjA5Y2FjOThl
MWU1MjgyN2JmYzNhN2EzN2UyYzg1YjFkZmUxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBTcGxp
dFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBtX3RleHQxID0gVGV4dDo6Y3JlYXRl
KGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4dCkpOwogICAgIEFTU0VSVChtX3RleHQxKTsK
LSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycyhtX3RleHQyLCAwLCBtX29mZnNl
dCwgKm1fdGV4dDEsIDApOworICAgIGRvY3VtZW50KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1f
dGV4dDIsIHsgMCwgbV9vZmZzZXQgfSwgKm1fdGV4dDEpOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRU
cmltVGV4dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFu
ZDo6ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDItPmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7
CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJl
Zml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0MiwgMCk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCku
Y29weU1hcmtlcnMoKm1fdGV4dDEsIHsgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSB9LCBtX3RleHQy
KTsKICAgICBtX3RleHQxLT5yZW1vdmUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDU1N2JmZWNhZWEwMjMyODVhZWEwOTBkNGYw
NTcxZDdkYThkMzNhYmUuLmY0ZjA2ZmZlNzEyMjdlMjNiMWE2ZWRiOTVkOGFkMjNkYzQ3MGU4NWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAg
LTEwNSwxNyArMTA1LDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRl
Y3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAgICBpZiAoIW1haW5S
ZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250
ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5j
ZSgpIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1l
bnQoKS52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gbmlsOworCisgICAg
YXV0byBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5j
ZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChfX2JyaWRn
ZSBpZCltYWluUmVzdWx0IF1dOwogICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFp
blJlc3VsdF07CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBtYWluUmVzdWx0
UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbWFpblJlc3Vs
dFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgIGZvciAoY29uc3QgYXV0byYgcXVh
ZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZp
ZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KKyAg
ICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9z
aW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7CiAgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWlu
UmVzdWx0UmFuZ2U7CiAKICAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKaW5kZXggNWI0M2Nh
MzNlOTBmYWEyZTZmZTE4NDVjOTIzN2IwYTlmZWE3NDNjMC4uOGFjNzY5NDAyMDkzNTBmZjQzYWVj
MTQ0ZDMzYWQ2MTYwMTI2ZTQzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAgLTM5LDEzICszOSwxOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLURpY3RhdGlvbkNvbW1hbmRJT1M6OkRpY3RhdGlvbkNvbW1hbmRJT1Mo
RG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkKK0RpY3RhdGlvbkNvbW1hbmRJT1M6OkRpY3Rh
dGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+
JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29t
bWFuZChkb2N1bWVudCwgRWRpdEFjdGlvbjo6RGljdGF0aW9uKQogICAgICwgbV9kaWN0YXRpb25Q
aHJhc2VzKFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcykpCi0gICAgLCBtX21ldGFkYXRhKFdURk1v
dmUobWV0YWRhdGEpKQorICAgICwgbV9tZXRhZGF0YShtZXRhZGF0YSkKIHsKIH0KIAorUmVmPERp
Y3RhdGlvbkNvbW1hbmRJT1M+IERpY3RhdGlvbkNvbW1hbmRJT1M6OmNyZWF0ZShEb2N1bWVudCYg
ZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBt
ZXRhZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEaWN0YXRpb25Db21tYW5kSU9T
KGRvY3VtZW50LCBXVEZNb3ZlKGRpY3RhdGlvblBocmFzZXMpLCBtZXRhZGF0YSkpOworfQorCiB2
b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogewogICAgIHVpbnQ2NF90IHJlc3Vs
dExlbmd0aCA9IDA7CkBAIC01NCw4ICs1OSwxMSBAQCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6
OmRvQXBwbHkoKQogICAgICAgICByZXN1bHRMZW5ndGggKz0gZmlyc3RJbnRlcnByZXRhdGlvbi5s
ZW5ndGgoKTsKICAgICAgICAgaW5wdXRUZXh0KGZpcnN0SW50ZXJwcmV0YXRpb24sIHRydWUpOwog
Ci0gICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSkKLSAgICAgICAgICAgIGRv
Y3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCksIGludGVycHJldGF0aW9u
cyk7CisgICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4gMSkgeworICAgICAgICAg
ICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7CisgICAgICAgICAgICBhbHRl
cm5hdGl2ZXMucmVtb3ZlKDApOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKCplbmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92ZShhbHRlcm5hdGl2
ZXMpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2Vs
ZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKSkpOwogICAgIH0KQEAgLTczLDcg
KzgxLDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0FwcGx5KCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCB7IGVuZE9mZnNldCAtIHJlc3VsdExl
bmd0aCwgZW5kT2Zmc2V0IH0pOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlv
blJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7CisgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9u
UmVzdWx0LCBtX21ldGFkYXRhKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5oCmluZGV4IGY2
MzAwNjAwMTM3NTNlOGQyZThhMjAxM2NhMTcxNTVmNmQ4NmExNDIuLmQzM2MxNTFiOGYyMzk0MDk2
ZTUzMDFkMTQxMDIwNmU0MDhkZTEzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmgKQEAgLTMwLDIxICszMCwxNiBAQAogI2ltcG9ydCAi
Q29tcG9zaXRlRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotdHlw
ZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIERpY3RhdGlvbkNvbW1hbmRJT1MgOiBwdWJsaWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgewor
Y2xhc3MgRGljdGF0aW9uQ29tbWFuZElPUyBmaW5hbCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29t
bWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEaWN0YXRpb25Db21tYW5kSU9TPiBjcmVh
dGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9u
UGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IERpY3RhdGlvbkNvbW1hbmRJT1MoZG9jdW1lbnQsIFdURk1vdmUoZGljdGF0
aW9uUGhyYXNlcyksIFdURk1vdmUobWV0YWRhdGEpKSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8
RGljdGF0aW9uQ29tbWFuZElPUz4gY3JlYXRlKERvY3VtZW50JiwgVmVjdG9yPFZlY3RvcjxTdHJp
bmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKTsKIAogcHJpdmF0ZToKLSAgICBE
aWN0YXRpb25Db21tYW5kSU9TKERvY3VtZW50JiwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRp
Y3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpOworICAgIERpY3RhdGlvbkNv
bW1hbmRJT1MoRG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhy
YXNlcywgaWQgbWV0YWRhdGEpOwogCi0gICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkb0FwcGx5KCkgZmluYWw7CiAKICAgICBWZWN0b3I8VmVjdG9yPFN0cmluZz4+IG1fZGlj
dGF0aW9uUGhyYXNlczsKICAgICBSZXRhaW5QdHI8aWQ+IG1fbWV0YWRhdGE7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggNDEyNmVkMTU3ZmRiMTFhMzRiY2UwZDE3
NTk3M2Q1NTZmYWYyZmQ1Ni4uZjJhMmQ1MmFjNWFiZjRlNGYxMzExM2NhMjVkMWIyMGExNzM4ZmE2
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMjQxLDcgKzI0
MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZy
YWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpw
YXN0ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1h
aWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUg
OiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiB9CiAKLXZvaWQg
RWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBk
aWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhKQordm9pZCBFZGl0b3I6Omlu
c2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBo
cmFzZXMsIGlkIG1ldGFkYXRhKQogewogICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9u
ZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDksMTAgKzI0OSwxMCBAQCB2b2lkIEVkaXRvcjo6
aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9u
UGhyYXNlcywgUgogICAgIGlmIChkaWN0YXRpb25QaHJhc2VzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRGljdGF0aW9uQ29tbWFuZElPUzo6Y3JlYXRlKGRvY3VtZW50KCksIFdU
Rk1vdmUoZGljdGF0aW9uUGhyYXNlcyksIFdURk1vdmUobWV0YWRhdGEpKS0+YXBwbHkoKTsKKyAg
ICBEaWN0YXRpb25Db21tYW5kSU9TOjpjcmVhdGUoZG9jdW1lbnQoKSwgV1RGTW92ZShkaWN0YXRp
b25QaHJhc2VzKSwgbWV0YWRhdGEpLT5hcHBseSgpOwogfQogCi12b2lkIEVkaXRvcjo6c2V0RGlj
dGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+
PiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSwgRWxlbWVudCYgZWxl
bWVudCkKK3ZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChj
b25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0
YSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBDbGVhciB0aGUgY29tcG9zaXRpb24uCiAg
ICAgY2xlYXIoKTsKQEAgLTI5MywyMCArMjkzLDE5IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBk
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0
PFRleHQ+KCplbGVtZW50LmZpcnN0Q2hpbGQoKSk7Ci0gICAgaW50IHByZXZpb3VzRGljdGF0aW9u
UGhyYXNlU3RhcnQgPSAwOworICAgIGF1dG8mIHRleHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmVs
ZW1lbnQuZmlyc3RDaGlsZCgpKTsKKyAgICB1bnNpZ25lZCBwcmV2aW91c0RpY3RhdGlvblBocmFz
ZVN0YXJ0ID0gMDsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBo
cmFzZXMpIHsKLSAgICAgICAgaW50IGRpY3RhdGlvblBocmFzZUxlbmd0aCA9IGludGVycHJldGF0
aW9uc1swXS5sZW5ndGgoKTsKLSAgICAgICAgaW50IGRpY3RhdGlvblBocmFzZUVuZCA9IHByZXZp
b3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgKyBkaWN0YXRpb25QaHJhc2VMZW5ndGg7CisgICAgICAg
IGF1dG8gZGljdGF0aW9uUGhyYXNlTGVuZ3RoID0gaW50ZXJwcmV0YXRpb25zWzBdLmxlbmd0aCgp
OwogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAg
IGF1dG8gZGljdGF0aW9uUGhyYXNlUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZ0
ZXh0Tm9kZSwgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgJnRleHROb2RlLCBkaWN0YXRp
b25QaHJhc2VFbmQpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0
aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihkaWN0YXRpb25QaHJhc2VSYW5nZSwgaW50
ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgICAgIGF1dG8gYWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0
YXRpb25zOworICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnJlbW92ZSgwKTsKKyAgICAgICAgICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9kZSwgcHJldmlvdXNEaWN0YXRp
b25QaHJhc2VTdGFydCwgZGljdGF0aW9uUGhyYXNlTGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92ZShhbHRlcm5hdGl2ZXMpKTsKICAg
ICAgICAgfQotICAgICAgICBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ID0gZGljdGF0aW9u
UGhyYXNlRW5kOworICAgICAgICBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ICs9IGRpY3Rh
dGlvblBocmFzZUxlbmd0aDsKICAgICB9CiAKLSAgICBhdXRvIHJlc3VsdFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIDAsICZ0ZXh0Tm9kZSwgdGV4dE5vZGUubGVu
Z3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtl
cihyZXN1bHRSYW5nZSwgbWV0YWRhdGEpOworICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1h
cmtlcih0ZXh0Tm9kZSwgMCwgdGV4dE5vZGUubGVuZ3RoKCksIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25SZXN1bHQsIHJldGFpblB0cihtZXRhZGF0YSkpOwogCiAgICAgY2xpZW50KCktPnJlc3Bv
bmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4
IGM2OGY1ZDM4YzZlNTFlMDQ4ODg3MDk0YzU3ZWJmZjA3YWFmMDFjZWIuLjAxNzc2ZmNkMDE0ZTJk
OGM0YTdmN2FjN2Q1MTEzY2FjYjRlMzU3Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAK
QEAgLTQyNzksOSArNDI3OSw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGlydHlSZWN0CiAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG1fbm9kZVRvRHJhdyA/IG1fbm9kZVRvRHJhdy0+cmVuZGVyZXIo
KSA6IG51bGxwdHI7CiAgICAgUmVuZGVyTGF5ZXIqIHJvb3RMYXllciA9IHJlbmRlclZpZXctPmxh
eWVyKCk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgUmVuZGVyRWxlbWVudDo6U2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVlZHNMYXlvdXQoJnJvb3RMYXllci0+cmVuZGVy
ZXIoKSk7Ci0jZW5kaWYKKyAgICBSZW5kZXJPYmplY3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRl
blNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KHJvb3RMYXllci0+cmVuZGVyZXIoKSk7CiAKICAg
ICAvLyBUbyB3b3JrIGFyb3VuZCBodHRwOi8vd2Via2l0Lm9yZy9iLzEzNTEwNiwgZW5zdXJlIHRo
YXQgdGhlIHBhaW50IHJvb3QgaXNuJ3QgYW4gaW5saW5lIHdpdGggY3VsbGVkIGxpbmUgYm94ZXMu
CiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGNhdXNlIGFkZGl0aW9uYWwgY29udGVudCB0byBiZSBp
bmNsdWRlZCBpbiB0aGUgc25hcHNob3QsIHNvIHJlbW92ZSB0aGlzIG9uY2UgdGhhdCBidWcgaXMg
Zml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDA2Mjg1YTUxODRlNWE0
YzAwYTMxYmE2MzM0MjNkYjVkYmM5ODgwOTguLjBhZmVjYWZkMTlkZTAxNGU3MjNlZTVkYzVlNGUy
MmQ2ODc5MWQxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03MzYsNyAr
NzM2LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkg
Y29uc3QKICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnQgPSAxOwogCiAgICAgZm9yIChh
dXRvKiBtYXJrZXIgOiBtYXJrZXJzSW5Sb290KQotICAgICAgICBpbnRlcnByZXRhdGlvbnNDb3Vu
dCAqPSBtYXJrZXItPmFsdGVybmF0aXZlcygpLnNpemUoKSArIDE7CisgICAgICAgIGludGVycHJl
dGF0aW9uc0NvdW50ICo9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSku
c2l6ZSgpICsgMTsKIAogICAgIFZlY3RvcjxWZWN0b3I8VUNoYXI+PiBpbnRlcnByZXRhdGlvbnM7
CiAgICAgaW50ZXJwcmV0YXRpb25zLmdyb3coaW50ZXJwcmV0YXRpb25zQ291bnQpOwpAQCAtNzQ5
LDYgKzc0OSw4IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCgpIGNvbnN0CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VPZlJvb3RDb250ZW50cy0+Zmly
c3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4
dCgqbm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIG1h
cmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKKyAgICAgICAgICAgIGF1
dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEo
KSk7CisKICAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0IHByZWNlZGUgdGhlIG1h
cmtlci4KICAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiAhPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSkgewog
ICAgICAgICAgICAgICAgIGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKTsKQEAgLTc2MSw3ICs3NjMs
NyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25z
dAogCiAgICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gUmFuZ2U6OmNyZWF0ZSgqZG9j
dW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRP
ZmZzZXQoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9m
ZnNldCgpKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmlzaWJsZVRleHRGb3JNYXJrZXIgPSBwbGFp
blRleHQocmFuZ2VGb3JNYXJrZXIpOwotICAgICAgICAgICAgc2l6ZV90IGludGVycHJldGF0aW9u
c0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IG1hcmtlci0+YWx0ZXJuYXRpdmVzKCkuc2l6ZSgpICsg
MTsKKyAgICAgICAgICAgIHNpemVfdCBpbnRlcnByZXRhdGlvbnNDb3VudEZvckN1cnJlbnRNYXJr
ZXIgPSBhbHRlcm5hdGl2ZXMuc2l6ZSgpICsgMTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgaW50ZXJwcmV0YXRpb25zQ291bnQ7ICsraSkgewogICAgICAgICAgICAgICAgIC8v
IERldGVybWluZSB0ZXh0IGZvciB0aGUgaXRoIGludGVycHJldGF0aW9uLiBJdCB3aWxsIGVpdGhl
ciBiZSB0aGUgdmlzaWJsZSB0ZXh0LCBvciBvbmUgb2YgaXRzCiAgICAgICAgICAgICAgICAgLy8g
YWx0ZXJuYXRpdmVzIHN0b3JlZCBpbiB0aGUgbWFya2VyLgpAQCAtNzcwLDcgKzc3Miw3IEBAIE5T
QXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAg
ICAgICAgICAgICAgaWYgKCFpbmRleE9mSW50ZXJwcmV0YXRpb25Gb3JDdXJyZW50TWFya2VyKQog
ICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCB2aXNpYmxlVGV4
dEZvck1hcmtlcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBh
cHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCBtYXJrZXItPmFsdGVybmF0aXZlcygpLmF0KGkgJSBt
YXJrZXItPmFsdGVybmF0aXZlcygpLnNpemUoKSkpOworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQoaW50ZXJwcmV0YXRpb25zW2ldLCBhbHRlcm5hdGl2ZXNbaSAlIGFsdGVybmF0aXZlcy5zaXpl
KCldKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29tYmluYXRpb25zU29GYXIgKj0g
aW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFya2VyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KaW5kZXggOThmNWM1
ZWI5ODAxNDAxMmQ3OWUzNWUwYmEzNjg2OTNiYmFlNGFhYy4uMDEwNGZlZTIxN2RjYmVhMDc3MDU4
OGNjZDA4OGFmMzIxYWUxNDFiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC0xOTAsMTYgKzE5MCw2IEBAIHZvaWQg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpkaWRGaW5pc2hGYWRlT3V0QW5p
bWF0aW9uKCkKICAgICBsYXllcigpLnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIAotc3RhdGljIElu
dFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShSYW5nZSYgcmFuZ2UpCi17Ci0g
ICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1
YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdDsKLSAgICBmb3IgKGF1
dG8mIHF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0ZShxdWFkLmJv
dW5kaW5nQm94KCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kaW5nUmVjdCk7
Ci19Ci0KIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIoUGFnZSYgcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAgICwgbV9kZXRlcm1pbmVBY3Rp
dmVIaWdobGlnaHRUaW1lcigqdGhpcywgJlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVy
bWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQpCkBAIC01MDEsMTcgKzQ5MSwxNyBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCkK
ICAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbWFpbkZyYW1lKCkudmlldygpOwogCiAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IHBob25lTnVtYmVyUmFuZ2VzKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhlIHJhbmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBv
ZiB0aGUgdmlldy4KLSAgICAgICAgLy8gV2hhdCBzaG91bGQgd2UgZG8gaW4gdGhhdCBjYXNlPwot
ICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCpy
YW5nZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1ha2VzIGEgYmlnIHJlY3QgaWYgdGhlIHJh
bmdlIGV4dGVuZHMgZnJvbSB0aGUgZW5kIG9mIG9uZSBsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUg
bmV4dC4gSGFuZGxlIHRoYXQgY2FzZSBiZXR0ZXI/CisgICAgICAgIGF1dG8gcmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzKCpyYW5nZSkpKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3Vt
ZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgLy8gRklYTUU6IEl0J3MgYSBsaXR0bGUg
Y3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVuIHdpbmRvd1RvQ29udGVudHMg
aW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAvLyBX
ZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZp
ZXcgZm9yIGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290Vmll
dygpIGlzCiAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlv
dSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KLSAgICAgICAgRnJh
bWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAg
ICAgICAgYXV0byogdmlld0ZvclJhbmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7
CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQogICAgICAgICAgICAgY29udGludWU7CisKICAg
ICAgICAgcmVjdC5zZXRMb2NhdGlvbihtYWluRnJhbWVWaWV3LndpbmRvd1RvQ29udGVudHModmll
d0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRpb24oKSkpKTsKIAogICAgICAg
ICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVWYWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKaW5kZXggNGJjNjMzNGFiZTJi
MzRjOWY0YWViMmEzZmZjYmJmYzc5MWMwYWRmMC4uNTM1MzFjNzhkOGZlNjQyN2YyYjRlZDRmYTc1
ZDkyYjQ1OWEyZjA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFs
aXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
U2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKQEAgLTMwLDEwICszMCw2IEBACiAjaW5j
bHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lm
ICFkZWZpbmVkKF9fT0JKQ19fKQotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2Vu
ZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKIHVzaW5nIFBsYXRmb3JtTmF0aXZlVmFsdWUgPSBp
ZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFk
LmNwcAppbmRleCBjNTY4Nzc2N2M5ODk5Yjg2ODkzYjNlMTVjOWQyNTYzN2FjZmM2M2FjLi4zNGVk
M2U4ZWI4NDRjNjBhMzRhMDlkZjdlOGFkN2FmMGVjNDBkMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKQEAgLTIyNyw0ICsyMjcsMjQgQEAg
Ym9vbCBGbG9hdFF1YWQ6OmlzQ291bnRlcmNsb2Nrd2lzZSgpIGNvbnN0CiAgICAgcmV0dXJuIGRl
dGVybWluYW50KG1fcDIgLSBtX3AxLCBtX3AzIC0gbV9wMikgPCAwOwogfQogCitWZWN0b3I8Rmxv
YXRSZWN0PiBib3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sK
KyAgICBWZWN0b3I8RmxvYXRSZWN0PiBib3hlczsKKyAgICBib3hlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KHF1YWRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMp
CisgICAgICAgIGJveGVzLnVuY2hlY2tlZEFwcGVuZChxdWFkLmJvdW5kaW5nQm94KCkpOworICAg
IHJldHVybiBib3hlczsKK30KKworRmxvYXRSZWN0IHVuaXRlZEJvdW5kaW5nQm94ZXMoY29uc3Qg
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIGF1dG8gc2l6ZSA9IHF1YWRzLnNpemUo
KTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byByZXN1bHQg
PSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6
ZTsgKytpKQorICAgICAgICByZXN1bHQudW5pdGVFdmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGlu
Z0JveCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGNh
ZjlkNzI2MmFhZGFlOTJjNTRiNDYzNjJiNTg1ZDg5NDFkMDUxODYuLjE4MGNjZjEzMzZlZjJhZmE2
M2YwZjQzZTg2YjQ4MzFiZmM5ZmVhZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC0yNiwxNSArMjYsMTYgQEAKICAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBGbG9hdFF1YWRfaAotI2RlZmluZSBGbG9hdFF1YWRfaAorI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAorLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyB3b3VsZCBiZSBiZXR0ZXIgYXMg
YSBzdHJ1Y3QuCisKIC8vIEEgRmxvYXRRdWFkIGlzIGEgY29sbGVjdGlvbiBvZiA0IHBvaW50cywg
b2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YKIC8vIG1hcHBpbmcgYSByZWN0YW5nbGUg
dGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRpYWxpemVkIGZyb20gYSByZWN0LCB0aGUKIC8v
IHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVyIGZyb20gdG9wIGxlZnQuCkBAIC0xNjUsMjIg
KzE2NiwxNSBAQCBpbmxpbmUgRmxvYXRRdWFkJiBvcGVyYXRvci09KEZsb2F0UXVhZCYgYSwgY29u
c3QgRmxvYXRTaXplJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UXVh
ZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQogewotICAgIHJldHVybiBhLnAxKCkgPT0gYi5wMSgp
ICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAyKCkgJiYgCi0gICAgICAgICAgIGEucDMoKSA9
PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgpID09IGIucDQoKTsKKyAgICByZXR1cm4gYS5w
MSgpID09IGIucDEoKSAmJiBhLnAyKCkgPT0gYi5wMigpICYmIGEucDMoKSA9PSBiLnAzKCkgJiYg
YS5wNCgpID09IGIucDQoKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9h
dFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikKIHsKLSAgICByZXR1cm4gYS5wMSgpICE9IGIu
cDEoKSB8fAotICAgICAgICAgICBhLnAyKCkgIT0gYi5wMigpIHx8IAotICAgICAgICAgICBhLnAz
KCkgIT0gYi5wMygpIHx8Ci0gICAgICAgICAgIGEucDQoKSAhPSBiLnA0KCk7CisgICAgcmV0dXJu
ICEoYSA9PSBiKTsKIH0KIAotfSAgIC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLQotI2VuZGlmIC8v
IEZsb2F0UXVhZF9oCitWZWN0b3I8RmxvYXRSZWN0PiBib3VuZGluZ0JveGVzKGNvbnN0IFZlY3Rv
cjxGbG9hdFF1YWQ+Jik7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdW5pdGVkQm91bmRpbmdC
b3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYpOwogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFu
ZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgK
aW5kZXggMTllMWE2YjdmYmMxOTE0ZjcxNjczOWY1N2Y4YjZiNjhkZmE3NTY3MC4uYTM0NTI0NzY4
ZjRiMjhiMzFiNjc3ZGUzMGE5ZjcwYTRjNzJhMWZhYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAtNTIsOSArNTIsNiBAQCBPQkpD
X0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNFcnJvcjsKIE9CSkNfQ0xBU1MgTlNV
UkxDb25uZWN0aW9uOwogT0JKQ19DTEFTUyBOU1VSTFJlcXVlc3Q7Ci0jaWZuZGVmIF9fT0JKQ19f
Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYg
VVNFKENGVVJMQ09OTkVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaAppbmRleCAzZjY0OGUw
NjA0MGI1M2FiNzhmNmVhYWRhMDIzNTRhZmNmOThjNDcwLi5iNGNhNzljMzVmZDgwMGE3N2MxZTYx
MTQ1NDdiY2U5MDk4YzA5ODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZS5oCkBAIC0zMCwxNyAr
MzAsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFVTRShDRlVSTENPTk5FQ1RJ
T04pCi0KIHR5cGVkZWYgc3RydWN0IF9DRlVSTEF1dGhDaGFsbGVuZ2UqIENGVVJMQXV0aENoYWxs
ZW5nZVJlZjsKLQogI2Vsc2UKLQotI2lmbmRlZiBfX09CSkNfXwotdHlwZWRlZiBzdHJ1Y3Qgb2Jq
Y19vYmplY3QgKmlkOwotI2VuZGlmCi0KIE9CSkNfQ0xBU1MgTlNVUkxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZTsKLQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzQxLDcg
QEAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgOiBwdWJsaWMgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2VCYXNlIHsKIHB1YmxpYzoKICAgICBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIHt9
CiAgICAgV0VCQ09SRV9FWFBPUlQgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVj
dGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYgcHJvcG9zZWRDcmVkZW50aWFsLCB1bnNpZ25l
ZCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKKwogI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pCiAgICAgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmLCBBdXRoZW50aWNhdGlvbkNsaWVu
dCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
OGEwMmJlNGViZTdlZTkwY2RlYTI0MGRmYmYxOGVlMzVlODcyMjc2Ni4uYzE0YjBmYzdiZGQ3OWJj
ODhlZWYxMWViYTVkNGI2ZjViMTQ0NTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcApAQCAtODYzLDcgKzg2Myw3IEBAIGF1dG8gSW5saW5lVGV4dEJveDo6
cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChjb25zdCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBj
b25zCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xv
ciA9IHJlbmRlcmVyKCkudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NWYWx1ZUFwcGxlU3lzdGVtTGFi
ZWwsIHN0eWxlQ29sb3JPcHRpb25zKTsKICNlbmRpZgotICAgICAgICBzdHlsZS5iYWNrZ3JvdW5k
Q29sb3IgPSBtYXJrZWRUZXh0Lm1hcmtlci0+aXNBY3RpdmVNYXRjaCgpID8gcmVuZGVyZXIoKS50
aGVtZSgpLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucykg
OiByZW5kZXJlcigpLnRoZW1lKCkuaW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Ioc3R5
bGVDb2xvck9wdGlvbnMpOworICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJl
cigpLnRoZW1lKCkudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAKaW5kZXggNDBiYTFhZTIxNzYwMjU4MjQ3OGYyNjUwNzhhYWRmMjM1OTdhNzUwOS4u
NGYzNzhkNzM1ZjhmYjJhZDZjZjk4NmY2ZTJhZDk5NjJhOGFiZGQ2NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEwMzcsMjQgKzEwMzcsMTggQEAgdm9pZCBSZW5k
ZXJCb3g6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2lj
YWxXaWR0aCwgTGF5b3UKIExheW91dFVuaXQgUmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2Fs
V2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkg
ewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUg
bGF5b3V0Rm9yYmlkZGVuU2NvcGUoY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKSk7Ci0jZW5k
aWYKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUg
bGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOworICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJv
eCY+KCp0aGlzKS5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwogICAgIH0KLSAgICAg
ICAgCiAgICAgcmV0dXJuIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoOwogfQogCiBMYXlvdXRV
bml0IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgY29uc3QKIHsKICAgICBp
ZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAg
ICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKGNv
bnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykpOwotI2VuZGlmCi0gICAgICAgIGNvbnN0X2Nhc3Q8
UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CisgICAg
ICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKCp0
aGlzKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gmPigqdGhpcykuY29tcHV0ZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB9Ci0gICAgICAgIAogICAgIHJldHVybiBtX21heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwCmluZGV4IGQzZWI0NjNhY2I4YmRiZTdmYjVkMGY3MWRmZWY4ODY0N2I1N2U5
ZmYuLmVhZDlkNzY0MGNlNDY0ZDYyOTg3YjViYTc3ZTI5MDA1ZTMzNmY1NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAgLTQzNiwxNCArNDM2LDEyIEBA
IHZvaWQgUmVuZGVyQ291bnRlcjo6dXBkYXRlQ291bnRlcigpCiAKIHZvaWQgUmVuZGVyQ291bnRl
cjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQgbGVhZCkKIHsKLSNpZm5kZWYg
TkRFQlVHCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBtb2RpZnlpbmcgdGhlIHRyZWUg
aW4gY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMuCiAgICAgLy8gSW5zdGVhZCwgd2Ugc2hv
dWxkIHByb3Blcmx5IGhvb2sgdGhlIGFwcHJvcHJpYXRlIGNoYW5nZXMgaW4gdGhlIERPTSBhbmQg
bW9kaWZ5CiAgICAgLy8gdGhlIHJlbmRlciB0cmVlIHRoZW4uIFdoZW4gdGhhdCdzIGRvbmUsIHdl
IGFsc28gd29uJ3QgbmVlZCB0byBvdmVycmlkZQogICAgIC8vIGNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzIGF0IGFsbC4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTA0ODI5Ci0gICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0
Rm9yYmlkZGVuU2NvcGUodGhpcywgZmFsc2UpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMsIGZhbHNlKTsKIAogICAg
IHNldFJlbmRlcmVkVGV4dChvcmlnaW5hbFRleHQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggMDgxZDRjNzY0MDNhOGViYmUw
MDc5ZGEyMTI1M2NhMmZlMGJhY2JkMi4uNGJiZTNlMDk2ZmEyMjMzY2JmZTZhYzMwNmJmYTFmN2Ix
YjAzM2JlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
QmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5jcHAKQEAgLTI4OTAsOSArMjg5MCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpw
YWludEludG9MYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAg
ICAgaWYgKGV2ZW50UmVnaW9uQ29udGV4dCkKICAgICAgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVy
TGF5ZXI6OlBhaW50TGF5ZXJDb2xsZWN0aW5nRXZlbnRSZWdpb24pOwogCi0jaWZuZGVmIE5ERUJV
RwotICAgIFJlbmRlckVsZW1lbnQ6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGZvcmJp
ZFNldE5lZWRzTGF5b3V0KCZyZW5kZXJlcigpKTsKLSNlbmRpZgorICAgIFJlbmRlck9iamVjdDo6
U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVlZHNMYXlvdXQocmVuZGVy
ZXIoKSk7CiAKICAgICBhdXRvIHBhaW50T25lTGF5ZXIgPSBbJl0oUmVuZGVyTGF5ZXImIGxheWVy
LCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFnPiBwYWludEZsYWdzKSB7CiAg
ICAgICAgIEZyYW1lVmlldzo6UGFpbnRpbmdTdGF0ZSBwYWludGluZ1N0YXRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBkNTYwMjg3NTI2ZDFiN2RiNWI5
YjQ5NjJlMTU2YmIwNmQ1ODM2ZTE5Li4wZTNmNmEyNDUzOWE1N2NkMTAxNDEzZTA2NGExYzM4ZjA3
NDY0ZGM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAt
Myw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlz
dG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJA
a2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtk
ZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcs
IDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4g
KGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCkBAIC00Miw2ICs0Miw3IEBACiAjaW5j
bHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNp
bmNsdWRlICJMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzLmgiCisjaW5jbHVkZSAiTm9kZVRy
YXZlcnNhbC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyQ2hpbGRJdGVyYXRvci5oIgpAQCAtODUsMTkgKzg2LDIwIEBAIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChS
ZW5kZXJPYmplY3QpOwogCi0jaWZuZGVmIE5ERUJVRworI2lmIEFTU0VSVF9FTkFCTEVECiAKLVJl
bmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExheW91dE5lZWRl
ZEZvcmJpZGRlblNjb3BlKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0LCBib29sIGlzRm9yYmlk
ZGVuKQorUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0TGF5
b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3Qs
IGJvb2wgaXNGb3JiaWRkZW4pCiAgICAgOiBtX3JlbmRlck9iamVjdChyZW5kZXJPYmplY3QpCi0g
ICAgLCBtX3ByZWV4aXN0aW5nRm9yYmlkZGVuKG1fcmVuZGVyT2JqZWN0LT5pc1NldE5lZWRzTGF5
b3V0Rm9yYmlkZGVuKCkpCisgICAgLCBtX3ByZWV4aXN0aW5nRm9yYmlkZGVuKG1fcmVuZGVyT2Jq
ZWN0LmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSkKIHsKLSAgICBtX3JlbmRlck9iamVjdC0+
c2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihpc0ZvcmJpZGRlbik7CisgICAgbV9yZW5kZXJPYmpl
Y3Quc2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihpc0ZvcmJpZGRlbik7CiB9CiAKIFJlbmRlck9i
amVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6On5TZXRMYXlvdXROZWVkZWRGb3Ji
aWRkZW5TY29wZSgpCiB7Ci0gICAgbV9yZW5kZXJPYmplY3QtPnNldE5lZWRzTGF5b3V0SXNGb3Ji
aWRkZW4obV9wcmVleGlzdGluZ0ZvcmJpZGRlbik7CisgICAgbV9yZW5kZXJPYmplY3Quc2V0TmVl
ZHNMYXlvdXRJc0ZvcmJpZGRlbihtX3ByZWV4aXN0aW5nRm9yYmlkZGVuKTsKIH0KKwogI2VuZGlm
CiAKIHN0cnVjdCBTYW1lU2l6ZUFzUmVuZGVyT2JqZWN0IHsKQEAgLTUyMSwxMSArNTIzLDkgQEAg
dm9pZCBSZW5kZXJPYmplY3Q6Om1hcmtDb250YWluaW5nQmxvY2tzRm9yTGF5b3V0KFNjaGVkdWxl
UmVsYXlvdXQgc2NoZWR1bGVSZWxheW8KICAgICBib29sIGhhc091dE9mRmxvd1Bvc2l0aW9uID0g
IWlzVGV4dCgpICYmIHN0eWxlKCkuaGFzT3V0T2ZGbG93UG9zaXRpb24oKTsKIAogICAgIHdoaWxl
IChhbmNlc3RvcikgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0
aGlzIG9uY2Ugd2UgcmVtb3ZlIHRoZSBzcGVjaWFsIGNhc2VzIGZvciBjb3VudGVycywgcXVvdGVz
IGFuZCBtYXRobWwKLSAgICAgICAgLy8gY2FsbGluZyBzZXROZWVkc0xheW91dCBkdXJpbmcgcHJl
ZmVycmVkIHdpZHRoIGNvbXB1dGF0aW9uLgotICAgICAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRk
ZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZShhbmNlc3RvciwgaXNTZXROZWVkc0xheW91dEZv
cmJpZGRlbigpKTsKLSNlbmRpZgorICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3
ZSByZW1vdmUgdGhlIHNwZWNpYWwgY2FzZXMgZm9yIGNvdW50ZXJzLCBxdW90ZXMgYW5kIG1hdGht
bCBjYWxsaW5nIHNldE5lZWRzTGF5b3V0IGR1cmluZyBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRp
b24uCisgICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRl
blNjb3BlKCphbmNlc3RvciwgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigpKTsKKwogICAgICAg
ICAvLyBEb24ndCBtYXJrIHRoZSBvdXRlcm1vc3Qgb2JqZWN0IG9mIGFuIHVucm9vdGVkIHN1YnRy
ZWUuIFRoYXQgb2JqZWN0IHdpbGwgYmUKICAgICAgICAgLy8gbWFya2VkIHdoZW4gdGhlIHN1YnRy
ZWUgaXMgYWRkZWQgdG8gdGhlIGRvY3VtZW50LgogICAgICAgICBhdXRvIGNvbnRhaW5lciA9IGFu
Y2VzdG9yLT5jb250YWluZXIoKTsKQEAgLTcxMywxNSArNzEzLDcgQEAgSW50UmVjdCBSZW5kZXJP
YmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0KGJvb2wgdXNlVHJhbnNmb3JtcywgYm9vbCog
d2FzRml4ZWQKICAgICBpZiAodXNlVHJhbnNmb3JtcykgewogICAgICAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKICAgICAgICAgYWJzb2x1dGVRdWFkcyhxdWFkcywgd2FzRml4ZWQpOwotCi0g
ICAgICAgIHNpemVfdCBuID0gcXVhZHMuc2l6ZSgpOwotICAgICAgICBpZiAoIW4pCi0gICAgICAg
ICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIAotICAgICAgICBJbnRSZWN0IHJlc3VsdCA9IHF1
YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgbjsgKytpKQotICAgICAgICAgICAgcmVzdWx0LnVuaXRlKHF1YWRzW2ldLmVuY2xvc2lu
Z0JvdW5kaW5nQm94KCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4g
ZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKHF1YWRzKSk7CiAgICAgfQogCiAg
ICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCAwIC8q
IGlnbm9yZSB0cmFuc2Zvcm1zICovLCB3YXNGaXhlZCk7CkBAIC03NTcsMjEgKzc0OSw5IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+
JiBxdWFkcykKIEZsb2F0UmVjdCBSZW5kZXJPYmplY3Q6OmFic29sdXRlQm91bmRpbmdCb3hSZWN0
Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqIHJhbmdlKQogewogICAgIGlmICghcmFuZ2UpCi0gICAgICAg
IHJldHVybiBGbG9hdFJlY3QoKTsKLQorICAgICAgICByZXR1cm4geyB9OwogICAgIHJhbmdlLT5v
d25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7Ci0KLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBx
dWFkczsKLSAgICByYW5nZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOwotCi0gICAgaWYgKHF1
YWRzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCi0gICAgRmxvYXRS
ZWN0IHJlc3VsdCA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDE7IGkgPCBxdWFkcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LnVuaXRlRXZlbklmRW1w
dHkocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJl
dHVybiB1bml0ZWRCb3VuZGluZ0JveGVzKGFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpOwogfQog
CiB2b2lkIFJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIoTGF5b3V0UmVjdCYg
cmVzdWx0KQpAQCAtMTkwNyw2ICsxODg3LDIxIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjpoYXNOb25F
bXB0eVZpc2libGVSZWN0UmVzcGVjdGluZ1BhcmVudEZyYW1lcygpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitWZWN0b3I8RmxvYXRRdWFkPiBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQp
Cit7CisgICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7CisgICAgZm9yIChhdXRvJiBub2RlIDog
aW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2Rl
LnJlbmRlcmVyKCk7CisgICAgICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNCUigpKQor
ICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMocXVhZHMpOworICAgICAgICBlbHNl
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgICAgIGF1dG8gb2Zmc2V0
UmFuZ2UgPSBjaGFyYWN0ZXJEYXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIGRvd25jYXN0PENoYXJhY3Rl
ckRhdGE+KG5vZGUpKTsKKyAgICAgICAgICAgIHF1YWRzLmFwcGVuZFZlY3Rvcihkb3duY2FzdDxS
ZW5kZXJUZXh0PigqcmVuZGVyZXIpLmFic29sdXRlUXVhZHNGb3JSYW5nZShvZmZzZXRSYW5nZS5z
dGFydCwgb2Zmc2V0UmFuZ2UuZW5kLCB1c2VTZWxlY3Rpb25IZWlnaHQpKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcXVhZHM7Cit9CisKICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcp
CiAKIHZvaWQgcHJpbnRSZW5kZXJUcmVlRm9yTGl2ZURvY3VtZW50cygpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggMjY0ZjFkMTZlYjY5MzExMzY5MTJjMmFkMjc0
MWY3NWUxNTdmMGRhZS4uMDk5MjRhZmZjNzNhMzhlMzRiZjUzMzY3MzYxODZiM2FiNjJhMWJkNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtMyw3ICszLDcgQEAK
ICAqICAgICAgICAgICAoQykgMjAwMCBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAq
ICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5j
b20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgs
IDIwMDksIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtNzMsNiArNzMsNyBAQCBjbGFzcyBTZWxlY3Rpb25SZWN0OwogI2VuZGlmCiAKIHN0cnVj
dCBQYWludEluZm87CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiAKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogY29uc3QgaW50IGNhcmV0V2lkdGggPSAyOyAvLyBUaGlzIHZhbHVlIHNob3VsZCBiZSBr
ZXB0IGluIHN5bmMgd2l0aCBVSUtpdC4gU2VlIDxyZGFyOi8vcHJvYmxlbS8xNTU4MDYwMT4uCkBA
IC0xNDcsMjAgKzE0OCwxMyBAQCBwdWJsaWM6CiAgICAgLy8gU2Nyb2xsaW5nIGlzIGEgUmVuZGVy
Qm94IGNvbmNlcHQsIGhvd2V2ZXIgc29tZSBjb2RlIGp1c3QgY2FyZXMgYWJvdXQgcmVjdXJzaXZl
bHkgc2Nyb2xsaW5nIG91ciBlbmNsb3NpbmcgU2Nyb2xsYWJsZUFyZWEocykuCiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCBzY3JvbGxSZWN0VG9WaXNpYmxlKGNvbnN0IExheW91dFJlY3QmIGFic29s
dXRlUmVjdCwgYm9vbCBpbnNpZGVGaXhlZCwgY29uc3QgU2Nyb2xsUmVjdFRvVmlzaWJsZU9wdGlv
bnMmKTsKIAotICAgIC8vIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRvIHRoZSBu
ZWFyZXN0IGVuY2xvc2luZyBib3ggb2YgYSBSZW5kZXJPYmplY3QuCisgICAgLy8gTmVhcmVzdCBl
bmNsb3NpbmcgYm94LgogICAgIFdFQkNPUkVfRVhQT1JUIFJlbmRlckJveCYgZW5jbG9zaW5nQm94
KCkgY29uc3Q7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QmIGVuY2xvc2luZ0JveE1vZGVsT2Jq
ZWN0KCkgY29uc3Q7CiAgICAgY29uc3QgUmVuZGVyQm94KiBlbmNsb3NpbmdTY3JvbGxhYmxlQ29u
dGFpbmVyRm9yU25hcHBpbmcoKSBjb25zdDsKIAotICAgIC8vIEZ1bmN0aW9uIHRvIHJldHVybiBv
dXIgZW5jbG9zaW5nIGZsb3cgdGhyZWFkIGlmIHdlIGFyZSBjb250YWluZWQgaW5zaWRlIG9uZS4g
VGhpcwotICAgIC8vIGZ1bmN0aW9uIGZvbGxvd3MgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4u
Ci0gICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChmcmFnbWVudGVkRmxvd1N0YXRlKCkgPT0gTm90SW5zaWRl
RnJhZ21lbnRlZEZsb3cpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICBy
ZXR1cm4gbG9jYXRlRW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsKLSAgICB9CisgICAgLy8gUmV0
dXJuIG91ciBlbmNsb3NpbmcgZmxvdyB0aHJlYWQgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUg
b25lLiBGb2xsb3dzIHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluLgorICAgIFJlbmRlckZyYWdt
ZW50ZWRGbG93KiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0OwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgYm9vbCB1c2VEYXJrQXBwZWFyYW5jZSgpIGNvbnN0OwogICAgIE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPiBzdHlsZUNvbG9yT3B0aW9ucygpIGNvbnN0OwpAQCAtMTY4LDIw
ICsxNjIsMTIgQEAgcHVibGljOgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgdm9pZCBzZXRIYXNB
WE9iamVjdChib29sIGZsYWcpIHsgbV9oYXNBWE9iamVjdCA9IGZsYWc7IH0KICAgICBib29sIGhh
c0FYT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBWE9iamVjdDsgfQorI2VuZGlmCiAKLSAg
ICAvLyBIZWxwZXIgY2xhc3MgZm9yYmlkZGluZyBjYWxscyB0byBzZXROZWVkc0xheW91dCgpIGR1
cmluZyBpdHMgbGlmZXRpbWUuCi0gICAgY2xhc3MgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2Nv
cGUgewotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgU2V0TGF5b3V0TmVlZGVkRm9yYmlk
ZGVuU2NvcGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBpc0ZvcmJpZGRlbiA9IHRydWUpOwotICAgICAg
ICB+U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoKTsKLSAgICBwcml2YXRlOgotICAgICAg
ICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyT2JqZWN0OwotICAgICAgICBib29sIG1fcHJlZXhpc3Rp
bmdGb3JiaWRkZW47Ci0gICAgfTsKLSNlbmRpZiAvLyBBU1NFUlRfRU5BQkxFRAorICAgIC8vIEZv
cmJpZCBjYWxscyB0byBzZXROZWVkc0xheW91dCgpIGR1cmluZyBpdHMgbGlmZXRpbWUuCisgICAg
Y2xhc3MgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU7CiAKLSAgICAvLyBPYnRhaW5zIHRo
ZSBuZWFyZXN0IGVuY2xvc2luZyBibG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29u
dHJpYnV0ZXMgYSBmaXJzdC1saW5lIHN0eWxlIHRvIG91ciBpbmxpbmUKLSAgICAvLyBjaGlsZHJl
bi4KKyAgICAvLyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBibG9jayAoaW5jbHVkaW5n
IHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0ZXMgYSBmaXJzdC1saW5lIHN0eWxlIHRvIG91ciBp
bmxpbmUgY2hpbGRyZW4uCiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2so
KSBjb25zdDsKICAgICAKICAgICAvLyBSZW5kZXJPYmplY3QgdHJlZSBtYW5pcHVsYXRpb24KQEAg
LTM4OSwyMiArMzc1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNBc3BlY3RSYXRpbygpIGNv
bnN0IHsgcmV0dXJuIGlzUmVwbGFjZWQoKSAmJiAoaXNJbWFnZSgpIHx8IGlzVmlkZW8oKSB8fCBp
c0NhbnZhcygpKTsgfQogICAgIGJvb2wgaXNBbm9ueW1vdXMoKSBjb25zdCB7IHJldHVybiBtX2Jp
dGZpZWxkcy5pc0Fub255bW91cygpOyB9Ci0gICAgYm9vbCBpc0Fub255bW91c0Jsb2NrKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMga2VwdCBpbiBzeW5jIHdpdGgg
YW5vbnltb3VzIGJsb2NrIGNyZWF0aW9uIGNvbmRpdGlvbnMgaW4KLSAgICAgICAgLy8gUmVuZGVy
QmxvY2s6OmNyZWF0ZUFub255bW91c0Jsb2NrKCkuIFRoaXMgaW5jbHVkZXMgY3JlYXRpbmcgYW4g
YW5vbnltb3VzCi0gICAgICAgIC8vIFJlbmRlckJsb2NrIGhhdmluZyBhIERpc3BsYXlUeXBlOjpC
bG9jayBvciBEaXNwbGF5VHlwZTo6Qm94IGRpc3BsYXkuIE90aGVyIGNsYXNzZXMgc3VjaCBhcyBS
ZW5kZXJUZXh0RnJhZ21lbnQKLSAgICAgICAgLy8gYXJlIG5vdCBSZW5kZXJCbG9ja3MgYW5kIHdp
bGwgcmV0dXJuIGZhbHNlLiBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU2NzA5LiAKLSAgICAgICAgcmV0dXJuIGlzQW5vbnltb3VzKCkgJiYgKHN0eWxlKCkuZGlz
cGxheSgpID09IERpc3BsYXlUeXBlOjpCbG9jayB8fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNw
bGF5VHlwZTo6Qm94KSAmJiBzdHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lICYm
IGlzUmVuZGVyQmxvY2soKSAmJiAhaXNMaXN0TWFya2VyKCkgJiYgIWlzUmVuZGVyRnJhZ21lbnRl
ZEZsb3coKSAmJiAhaXNSZW5kZXJNdWx0aUNvbHVtblNldCgpICYmICFpc1JlbmRlclZpZXcoKQot
I2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKLSAgICAgICAgICAgICYmICFpc1JlbmRlckZ1bGxT
Y3JlZW4oKQotICAgICAgICAgICAgJiYgIWlzUmVuZGVyRnVsbFNjcmVlblBsYWNlaG9sZGVyKCkK
LSNlbmRpZgotI2lmIEVOQUJMRShNQVRITUwpCi0gICAgICAgICAgICAmJiAhaXNSZW5kZXJNYXRo
TUxCbG9jaygpCi0jZW5kaWYKLSAgICAgICAgICAgIDsKLSAgICB9CisgICAgYm9vbCBpc0Fub255
bW91c0Jsb2NrKCkgY29uc3Q7CiAKICAgICBib29sIGlzRmxvYXRpbmcoKSBjb25zdCB7IHJldHVy
biBtX2JpdGZpZWxkcy5mbG9hdGluZygpOyB9CiAKQEAgLTQ0NiwxOSArNDE3LDEwIEBAIHB1Ymxp
YzoKICAgICBib29sIGhhc1Zpc2libGVCb3hEZWNvcmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0ZmllbGRzLmJveERlY29yYXRpb25TdGF0ZSgpICE9IE5vQm94RGVjb3JhdGlvbnM7IH0KICAg
ICBib29sIGJhY2tncm91bmRJc0tub3duVG9CZU9ic2N1cmVkKGNvbnN0IExheW91dFBvaW50JiBw
YWludE9mZnNldCk7CiAKLSAgICBib29sIG5lZWRzTGF5b3V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc0xheW91dCgpIHx8IG1fYml0ZmllbGRzLm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKSB8fCBtX2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRzTGF5b3V0KCkK
LSAgICAgICAgICAgIHx8IG1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlv
dXQoKSB8fCBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwotICAg
IH0KLQorICAgIGJvb2wgbmVlZHNMYXlvdXQoKSBjb25zdDsKICAgICBib29sIHNlbGZOZWVkc0xh
eW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCk7IH0KICAgICBi
b29sIG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRm
aWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsgfQotICAgIGJvb2wgbmVlZHNQ
b3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpICYmICFtX2JpdGZp
ZWxkcy5uZWVkc0xheW91dCgpICYmICFtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0
KCkKLSAgICAgICAgICAgICYmICFtX2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRzTGF5b3V0KCkgJiYg
IW1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKTsKLSAgICB9Cisg
ICAgYm9vbCBuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dE9ubHkoKSBjb25zdDsKIAogICAg
IGJvb2wgcG9zQ2hpbGROZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLnBv
c0NoaWxkTmVlZHNMYXlvdXQoKTsgfQogICAgIGJvb2wgbmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxv
d0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzU2ltcGxpZmllZE5vcm1h
bEZsb3dMYXlvdXQoKTsgfQpAQCAtNTA4LDE3ICs0NzAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoYm9vbCwgTWFya2luZ0JlaGF2aW9yID0gTWFy
a0NvbnRhaW5pbmdCbG9ja0NoYWluKTsKICAgICB2b2lkIGludmFsaWRhdGVDb250YWluZXJQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAgICAgCi0gICAgdm9pZCBzZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKQotICAgIHsKLSAgICAgICAgc2V0TmVlZHNMYXlvdXQoKTsKLSAgICAg
ICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUpOwotICAgIH0KKyAgICB2b2lk
IHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogCi0gICAgdm9pZCBzZXRQb3Np
dGlvblN0YXRlKFBvc2l0aW9uVHlwZSBwb3NpdGlvbikKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgo
cG9zaXRpb24gIT0gUG9zaXRpb25UeXBlOjpBYnNvbHV0ZSAmJiBwb3NpdGlvbiAhPSBQb3NpdGlv
blR5cGU6OkZpeGVkKSB8fCBpc0JveCgpKTsKLSAgICAgICAgbV9iaXRmaWVsZHMuc2V0UG9zaXRp
b25lZFN0YXRlKHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pKTsKLSAgICB9CisgICAgdm9pZCBz
ZXRQb3NpdGlvblN0YXRlKFBvc2l0aW9uVHlwZSk7CiAgICAgdm9pZCBjbGVhclBvc2l0aW9uZWRT
dGF0ZSgpIHsgbV9iaXRmaWVsZHMuY2xlYXJQb3NpdGlvbmVkU3RhdGUoKTsgfQogCiAgICAgdm9p
ZCBzZXRGbG9hdGluZyhib29sIGIgPSB0cnVlKSB7IG1fYml0ZmllbGRzLnNldEZsb2F0aW5nKGIp
OyB9CkBAIC01NjMsNyArNTE3LDcgQEAgcHVibGljOgogICAgIFZpc2libGVQb3NpdGlvbiBjcmVh
dGVWaXNpYmxlUG9zaXRpb24oaW50IG9mZnNldCwgRUFmZmluaXR5KSBjb25zdDsKICAgICBWaXNp
YmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFBvc2l0aW9uJikgY29uc3Q7
CiAKLSAgICAvLyByZXR1cm5zIHRoZSBjb250YWluaW5nIGJsb2NrIGxldmVsIGVsZW1lbnQgZm9y
IHRoaXMgZWxlbWVudC4KKyAgICAvLyBSZXR1cm5zIHRoZSBjb250YWluaW5nIGJsb2NrIGxldmVs
IGVsZW1lbnQgZm9yIHRoaXMgZWxlbWVudC4KICAgICBXRUJDT1JFX0VYUE9SVCBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrKCkgY29uc3Q7CiAgICAgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdC
bG9ja0Zvck9iamVjdEluRmxvdygpIGNvbnN0OwogCkBAIC01NzIsMTIgKzUyNiw5IEBAIHB1Ymxp
YzoKICAgICBGbG9hdFBvaW50IGFic29sdXRlVG9Mb2NhbChjb25zdCBGbG9hdFBvaW50JiwgTWFw
Q29vcmRpbmF0ZXNGbGFncyA9IDApIGNvbnN0OwogCiAgICAgLy8gQ29udmVydCBhIGxvY2FsIHF1
YWQgdG8gYWJzb2x1dGUgY29vcmRpbmF0ZXMsIHRha2luZyB0cmFuc2Zvcm1zIGludG8gYWNjb3Vu
dC4KLSAgICBGbG9hdFF1YWQgbG9jYWxUb0Fic29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1
YWQsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSA9IFVzZVRyYW5zZm9ybXMsIGJvb2wqIHdhc0Zp
eGVkID0gbnVsbHB0cikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBsb2NhbFRvQ29udGFp
bmVyUXVhZChxdWFkLCBudWxscHRyLCBtb2RlLCB3YXNGaXhlZCk7Ci0gICAgfQorICAgIEZsb2F0
UXVhZCBsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIE1hcENvb3JkaW5hdGVz
RmxhZ3MgPSBVc2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0Owog
ICAgIC8vIENvbnZlcnQgYW4gYWJzb2x1dGUgcXVhZCB0byBsb2NhbCBjb29yZGluYXRlcy4KLSAg
ICBGbG9hdFF1YWQgYWJzb2x1dGVUb0xvY2FsUXVhZChjb25zdCBGbG9hdFF1YWQmLCBNYXBDb29y
ZGluYXRlc0ZsYWdzIG1vZGUgPSBVc2VUcmFuc2Zvcm1zKSBjb25zdDsKKyAgICBGbG9hdFF1YWQg
YWJzb2x1dGVUb0xvY2FsUXVhZChjb25zdCBGbG9hdFF1YWQmLCBNYXBDb29yZGluYXRlc0ZsYWdz
ID0gVXNlVHJhbnNmb3JtcykgY29uc3Q7CiAKICAgICAvLyBDb252ZXJ0IGEgbG9jYWwgcXVhZCBp
bnRvIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiBjb250YWluZXIsIHRha2luZyB0cmFuc2Zvcm1z
IGludG8gYWNjb3VudC4KICAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFF1YWQgbG9jYWxUb0NvbnRh
aW5lclF1YWQoY29uc3QgRmxvYXRRdWFkJiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCog
cmVwYWludENvbnRhaW5lciwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IFVzZVRyYW5zZm9ybXMsIGJv
b2wqIHdhc0ZpeGVkID0gbnVsbHB0cikgY29uc3Q7CkBAIC01OTYsMTUgKzU0NywxNCBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBMYXlvdXRQb2ludCYpIGNvbnN0IHsgfQogCi0gICAgLy8gRklYTUU6IHVzZVRyYW5zZm9y
bXMgc2hvdWxkIGdvIGF3YXkgZXZlbnR1YWxseQogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3Qg
YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VUcmFuc2Zvcm0gPSB0cnVlLCBib29sKiB3
YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0OwogICAgIEludFJlY3QgYWJzb2x1dGVCb3VuZGluZ0Jv
eFJlY3RJZ25vcmluZ1RyYW5zZm9ybXMoKSBjb25zdCB7IHJldHVybiBhYnNvbHV0ZUJvdW5kaW5n
Qm94UmVjdChmYWxzZSk7IH0KIAogICAgIC8vIEJ1aWxkIGFuIGFycmF5IG9mIHF1YWRzIGluIGFi
c29sdXRlIGNvb3JkcyBmb3IgbGluZSBib3hlcwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCogLyp3YXNGaXhlZCovID0gbnVsbHB0cikgY29u
c3QgeyB9Ci0KICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVGb2N1c1JpbmdRdWFkcyhWZWN0b3I8
RmxvYXRRdWFkPiYpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxGbG9hdFF1
YWQ+IGFic29sdXRlVGV4dFF1YWRzKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCB1c2VTZWxlY3Rp
b25IZWlnaHQgPSBmYWxzZSk7CiAgICAgc3RhdGljIEZsb2F0UmVjdCBhYnNvbHV0ZUJvdW5kaW5n
Qm94UmVjdEZvclJhbmdlKGNvbnN0IFJhbmdlKik7CiAKICAgICAvLyB0aGUgcmVjdCB0aGF0IHdp
bGwgYmUgcGFpbnRlZCBpZiB0aGlzIG9iamVjdCBpcyBwYXNzZWQgYXMgdGhlIHBhaW50aW5nUm9v
dApAQCAtNjIzLDggKzU3Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEN1cnNvckRpcmVjdGl2
ZSBnZXRDdXJzb3IoY29uc3QgTGF5b3V0UG9pbnQmLCBDdXJzb3ImKSBjb25zdDsKIAogICAgIC8v
IFJldHVybiB0aGUgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCBpbiB0aGUgY29udGFpbmVyIGNoYWlu
IHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGlzIG9iamVjdCwgb3IgbnVsbHB0
cgotICAgIC8vIGlmIHBhaW50aW5nIGlzIHJvb3QtcmVsYXRpdmUuIFRoaXMgaXMgdGhlIGNvbnRh
aW5lciB0aGF0IHNob3VsZCBiZSBwYXNzZWQgdG8gdGhlICdmb3JSZXBhaW50JwotICAgIC8vIG1l
dGhvZHMuCisgICAgLy8gaWYgcGFpbnRpbmcgaXMgcm9vdC1yZWxhdGl2ZS4gVGhpcyBpcyB0aGUg
Y29udGFpbmVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgJ2ZvclJlcGFpbnQnIGZ1bmN0
aW9ucy4KICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBjb250YWluZXJGb3JSZXBhaW50KCkg
Y29uc3Q7CiAgICAgLy8gQWN0dWFsbHkgZG8gdGhlIHJlcGFpbnQgb2YgcmVjdCByIGZvciB0aGlz
IG9iamVjdCB3aGljaCBoYXMgYmVlbiBjb21wdXRlZCBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZQog
ICAgIC8vIG9mIHJlcGFpbnRDb250YWluZXIuIElmIHJlcGFpbnRDb250YWluZXIgaXMgbnVsbHB0
ciwgcmVwYWludCB2aWEgdGhlIHZpZXcuCkBAIC02NDIsMTAgKzU5MSw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFJldHVybnMgdGhlIHJlY3QgdGhhdCBzaG91bGQgYmUgcmVwYWludGVkIHdoZW5ldmVy
IHRoaXMgb2JqZWN0IGNoYW5nZXMuICBUaGUgcmVjdCBpcyBpbiB0aGUgdmlldydzCiAgICAgLy8g
Y29vcmRpbmF0ZSBzcGFjZS4gIFRoaXMgbWV0aG9kIGRlYWxzIHdpdGggb3V0bGluZXMgYW5kIG92
ZXJmbG93LgotICAgIExheW91dFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChu
dWxscHRyKTsKLSAgICB9CisgICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QoKSBjb25zdCB7IHJldHVybiBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChudWxscHRy
KTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEludFJlY3QgcGl4ZWxTbmFwcGVkQWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCkgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRSZWN0IGNsaXBwZWRP
dmVyZmxvd1JlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFp
bnRDb250YWluZXIpIGNvbnN0OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCByZWN0V2l0aE91dGxp
bmVGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIExheW91dFVuaXQgb3V0bGluZVdpZHRoKSBjb25zdDsKQEAgLTY1MywxMCArNTk5LDcgQEAg
cHVibGljOgogCiAgICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBvYmplY3QncyBjb29yZGluYXRl
IHNwYWNlLCBjb21wdXRlIGEgcmVjdCBzdWl0YWJsZSBmb3IgcmVwYWludGluZwogICAgIC8vIHRo
YXQgcmVjdCBpbiB2aWV3IGNvb3JkaW5hdGVzLgotICAgIExheW91dFJlY3QgY29tcHV0ZUFic29s
dXRlUmVwYWludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcikgY29uc3QKLSAgICB7Ci0gICAgICAg
IHJldHVybiBjb21wdXRlUmVjdEZvclJlcGFpbnQociwgbnVsbHB0cik7Ci0gICAgfQorICAgIExh
eW91dFJlY3QgY29tcHV0ZUFic29sdXRlUmVwYWludFJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVj
dCkgY29uc3QgeyByZXR1cm4gY29tcHV0ZVJlY3RGb3JSZXBhaW50KHJlY3QsIG51bGxwdHIpOyB9
CiAgICAgLy8gR2l2ZW4gYSByZWN0IGluIHRoZSBvYmplY3QncyBjb29yZGluYXRlIHNwYWNlLCBj
b21wdXRlIGEgcmVjdCBzdWl0YWJsZSBmb3IgcmVwYWludGluZwogICAgIC8vIHRoYXQgcmVjdCBp
biB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiByZXBhaW50Q29udGFpbmVyLgogICAgIExheW91dFJl
Y3QgY29tcHV0ZVJlY3RGb3JSZXBhaW50KGNvbnN0IExheW91dFJlY3QmLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKQEAgLTY4Nyw3ICs2MzAs
NyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIGhhc05vbkVtcHR5VmlzaWJs
ZVJlY3RSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHVuc2ln
bmVkIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiAxOyB9CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiAxOyB9CiAKICAgICBib29sIGlzRmxvYXRpbmdPck91
dE9mRmxvd1Bvc2l0aW9uZWQoKSBjb25zdCB7IHJldHVybiAoaXNGbG9hdGluZygpIHx8IGlzT3V0
T2ZGbG93UG9zaXRpb25lZCgpKTsgfQogCkBAIC03MzEsMTQgKzY3NCw5IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFZpcnR1YWwgZnVuY3Rpb24gaGVscGVycyBmb3IgdGhlIGRlcHJlY2F0ZWQgRmxleGli
bGUgQm94IExheW91dCAoZGlzcGxheTogLXdlYmtpdC1ib3gpLgogICAgIHZpcnR1YWwgYm9vbCBp
c0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KICAgICAv
LyBWaXJ0dWFsIGZ1bmN0aW9uIGhlbHBlciBmb3IgdGhlIG5ldyBGbGV4aWJsZUJveCBMYXlvdXQg
KGRpc3BsYXk6IC13ZWJraXQtZmxleCkuCiAgICAgdmlydHVhbCBib29sIGlzRmxleGlibGVCb3go
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgYm9vbCBpc0ZsZXhpYmxlQm94SW5jbHVk
aW5nRGVwcmVjYXRlZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gaXNGbGV4aWJsZUJv
eCgpIHx8IGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCk7Ci0gICAgfQorICAgIGJvb2wgaXNGbGV4
aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKSBjb25zdCB7IHJldHVybiBpc0ZsZXhpYmxlQm94
KCkgfHwgaXNEZXByZWNhdGVkRmxleGlibGVCb3goKTsgfQogCiAgICAgdmlydHVhbCBib29sIGlz
Q29tYmluZVRleHQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCkBAIC03NjksMTAgKzcwNyw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPExheW91dFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmIC8qIGFkZGl0aW9uYWxPZmZzZXQg
Ki8sIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIC8qIHBhaW50Q29udGFpbmVyICovID0g
bnVsbHB0cikgeyB9OwogCi0gICAgTGF5b3V0UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KG51bGxw
dHIpOwotICAgIH0KKyAgICBMYXlvdXRSZWN0IGFic29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0
IHsgcmV0dXJuIG91dGxpbmVCb3VuZHNGb3JSZXBhaW50KG51bGxwdHIpOyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgd2lsbEJlUmVtb3ZlZEZyb21UcmVlKCk7CiAgICAgdm9pZCByZXNldEZyYWdtZW50
ZWRGbG93U3RhdGVPblJlbW92YWwoKTsKQEAgLTgwNSwxNyArNzQwLDExIEBAIHByb3RlY3RlZDoK
IAogICAgIHN0YXRpYyBib29sIHNob3VsZEFwcGx5Q29tcG9zaXRlZENvbnRhaW5lclNjcm9sbHNG
b3JSZXBhaW50KCk7CiAKLSAgICBzdGF0aWMgVmlzaWJsZVJlY3RDb250ZXh0IHZpc2libGVSZWN0
Q29udGV4dEZvclJlcGFpbnQoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIFZpc2libGVSZWN0Q29u
dGV4dChmYWxzZSwgZmFsc2UsIHsgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbnRh
aW5lckNsaXAsIFZpc2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb21wb3NpdGVkQ29udGFp
bmVyU2Nyb2xscyB9KTsKLSAgICB9CisgICAgc3RhdGljIFZpc2libGVSZWN0Q29udGV4dCB2aXNp
YmxlUmVjdENvbnRleHRGb3JSZXBhaW50KCk7CiAKLXByaXZhdGU6Ci0jaWYgQVNTRVJUX0VOQUJM
RUQKLSAgICBib29sIGlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSBjb25zdCB7IHJldHVybiBt
X3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuOyB9Ci0gICAgdm9pZCBzZXROZWVkc0xheW91dElzRm9y
YmlkZGVuKGJvb2wgZmxhZykgeyBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuID0gZmxhZzsgfQot
I2VuZGlmCisgICAgYm9vbCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkgY29uc3Q7CiAKK3By
aXZhdGU6CiAgICAgdm9pZCBhZGRBYnNvbHV0ZVJlY3RGb3JMYXllcihMYXlvdXRSZWN0JiByZXN1
bHQpOwogICAgIHZvaWQgc2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50KCk7CiAgICAgdm9pZCBzZXRM
YXllck5lZWRzRnVsbFJlcGFpbnRGb3JQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKQEAgLTgz
Miw2ICs3NjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0SGFzUmFyZURhdGEoYm9vbCBiKSB7
IG1fYml0ZmllbGRzLnNldEhhc1JhcmVEYXRhKGIpOyB9CiAKICNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihib29sIGZsYWcpIGNvbnN0IHsgbV9z
ZXROZWVkc0xheW91dEZvcmJpZGRlbiA9IGZsYWc7IH0KICAgICB2b2lkIGNoZWNrQmxvY2tQb3Np
dGlvbmVkT2JqZWN0c05lZWRMYXlvdXQoKTsKICNlbmRpZgogCkBAIC04NDIsOCArNzcyLDggQEAg
cHJpdmF0ZToKICAgICBSZW5kZXJPYmplY3QqIG1fbmV4dDsKIAogI2lmIEFTU0VSVF9FTkFCTEVE
Ci0gICAgYm9vbCBtX2hhc0FYT2JqZWN0ICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1fc2V0
TmVlZHNMYXlvdXRGb3JiaWRkZW4gOiAxOworICAgIGJvb2wgbV9oYXNBWE9iamVjdCA6IDE7Cisg
ICAgbXV0YWJsZSBib29sIG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4gOiAxOwogI2VuZGlmCiAK
ICNkZWZpbmUgQUREX0JPT0xFQU5fQklURklFTEQobmFtZSwgTmFtZSkgXApAQCAtOTkwLDYgKzky
MCwxNyBAQCBwcml2YXRlOgogI3VuZGVmIEFERF9CT09MRUFOX0JJVEZJRUxECiB9OwogCitjbGFz
cyBSZW5kZXJPYmplY3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShjb25zdCBSZW5kZXJP
YmplY3QmLCBib29sIGlzRm9yYmlkZGVuID0gdHJ1ZSk7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAg
ICB+U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoKTsKK3ByaXZhdGU6CisgICAgY29uc3Qg
UmVuZGVyT2JqZWN0JiBtX3JlbmRlck9iamVjdDsKKyAgICBib29sIG1fcHJlZXhpc3RpbmdGb3Ji
aWRkZW47CisjZW5kaWYKK307CisKIGlubGluZSBGcmFtZSYgUmVuZGVyT2JqZWN0OjpmcmFtZSgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuICpkb2N1bWVudCgpLmZyYW1lKCk7CkBAIC0xMTA0LDcgKzEw
NDUsOTcgQEAgaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpuZWVkc1NpbXBsaWZpZWROb3JtYWxG
bG93TGF5b3V0T25seSgpIGNvbnN0CiAgICAgICAgICYmICFtX2JpdGZpZWxkcy5wb3NDaGlsZE5l
ZWRzTGF5b3V0KCkgJiYgIW1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
KCk7CiB9CiAKLWlubGluZSB2b2lkIE5vZGU6OnNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpIHsgbV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnNldFBvaW50ZXIocmVuZGVyZXIpOyB9
CitpbmxpbmUgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIFJlbmRlck9iamVjdDo6ZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3coKSBjb25zdAoreworICAgIGlmIChmcmFnbWVudGVkRmxvd1N0YXRlKCkgPT0g
Tm90SW5zaWRlRnJhZ21lbnRlZEZsb3cpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIGxvY2F0ZUVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCk7Cit9CisKK2lubGluZSBib29s
IFJlbmRlck9iamVjdDo6aXNBbm9ueW1vdXNCbG9jaygpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBm
dW5jdGlvbiBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIGFub255bW91cyBibG9jayBjcmVhdGlv
biBjb25kaXRpb25zIGluIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9jaygpLgorICAg
IC8vIEZJWE1FOiBUaGF0IHNlZW1zIGRpZmZpY3VsdC4gQ2FuIHdlIGNvbWUgdXAgd2l0aCBhIHNp
bXBsZXIgd2F5IHRvIG1ha2UgYmVoYXZpb3IgY29ycmVjdD8KKyAgICAvLyBGSVhNRTogRG9lcyB0
aGlzIHJlbGF0aXZlbHkgbG9uZyBmdW5jdGlvbiBiZW5lZml0IGZyb20gYmVpbmcgaW5saW5lZD8K
KyAgICByZXR1cm4gaXNBbm9ueW1vdXMoKQorICAgICAgICAmJiAoc3R5bGUoKS5kaXNwbGF5KCkg
PT0gRGlzcGxheVR5cGU6OkJsb2NrIHx8IHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBl
OjpCb3gpCisgICAgICAgICYmIHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUK
KyAgICAgICAgJiYgaXNSZW5kZXJCbG9jaygpCisjaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQor
ICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuKCkKKyAgICAgICAgJiYgIWlzUmVuZGVyRnVs
bFNjcmVlblBsYWNlaG9sZGVyKCkKKyNlbmRpZgorI2lmIEVOQUJMRShNQVRITUwpCisgICAgICAg
ICYmICFpc1JlbmRlck1hdGhNTEJsb2NrKCkKKyNlbmRpZgorICAgICAgICAmJiAhaXNMaXN0TWFy
a2VyKCkKKyAgICAgICAgJiYgIWlzUmVuZGVyRnJhZ21lbnRlZEZsb3coKQorICAgICAgICAmJiAh
aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpCisgICAgICAgICYmICFpc1JlbmRlclZpZXcoKTsKK30K
KworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpuZWVkc0xheW91dCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkKKyAgICAgICAgfHwgbV9iaXRmaWVsZHMu
bm9ybWFsQ2hpbGROZWVkc0xheW91dCgpCisgICAgICAgIHx8IG1fYml0ZmllbGRzLnBvc0NoaWxk
TmVlZHNMYXlvdXQoKQorICAgICAgICB8fCBtX2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWROb3Jt
YWxGbG93TGF5b3V0KCkKKyAgICAgICAgfHwgbV9iaXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92
ZW1lbnRMYXlvdXQoKTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpuZWVkc1Bvc2l0
aW9uZWRNb3ZlbWVudExheW91dE9ubHkoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpdGZpZWxk
cy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpCisgICAgICAgICYmICFtX2JpdGZpZWxk
cy5uZWVkc0xheW91dCgpCisgICAgICAgICYmICFtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRz
TGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKQor
ICAgICAgICAmJiAhbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgp
OworfQorCitpbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpCit7CisgICAgc2V0TmVlZHNMYXlvdXQoKTsKKyAgICBzZXRQcmVmZXJyZWRM
b2dpY2FsV2lkdGhzRGlydHkodHJ1ZSk7Cit9CisKK2lubGluZSB2b2lkIFJlbmRlck9iamVjdDo6
c2V0UG9zaXRpb25TdGF0ZShQb3NpdGlvblR5cGUgcG9zaXRpb24pCit7CisgICAgQVNTRVJUKChw
b3NpdGlvbiAhPSBQb3NpdGlvblR5cGU6OkFic29sdXRlICYmIHBvc2l0aW9uICE9IFBvc2l0aW9u
VHlwZTo6Rml4ZWQpIHx8IGlzQm94KCkpOworICAgIG1fYml0ZmllbGRzLnNldFBvc2l0aW9uZWRT
dGF0ZShzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uKSk7Cit9CisKK2lubGluZSBGbG9hdFF1YWQg
UmVuZGVyT2JqZWN0Ojpsb2NhbFRvQWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwg
TWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlLCBib29sKiB3YXNGaXhlZCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgbnVsbHB0ciwgbW9kZSwgd2FzRml4ZWQp
OworfQorCitpbmxpbmUgYXV0byBSZW5kZXJPYmplY3Q6OnZpc2libGVSZWN0Q29udGV4dEZvclJl
cGFpbnQoKSAtPiBWaXNpYmxlUmVjdENvbnRleHQKK3sKKyAgICByZXR1cm4geyBmYWxzZSwgZmFs
c2UsIHsgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbnRhaW5lckNsaXAsIFZpc2li
bGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb21wb3NpdGVkQ29udGFpbmVyU2Nyb2xscyB9IH07
Cit9CisKK2lubGluZSBib29sIFJlbmRlck9iamVjdDo6aXNTZXROZWVkc0xheW91dEZvcmJpZGRl
bigpIGNvbnN0Cit7CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICByZXR1cm4gbV9zZXROZWVkc0xh
eW91dEZvcmJpZGRlbjsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisKKyNp
ZiAhQVNTRVJUX0VOQUJMRUQKKworaW5saW5lIFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGU6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKGNvbnN0IFJlbmRl
ck9iamVjdCYsIGJvb2wpCit7Cit9CisKKyNlbmRpZgorCitpbmxpbmUgdm9pZCBOb2RlOjpzZXRS
ZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIG1fcmVuZGVyZXJXaXRoU3R5
bGVGbGFncy5zZXRQb2ludGVyKHJlbmRlcmVyKTsKK30KIAogI2lmIEVOQUJMRShUUkVFX0RFQlVH
R0lORykKIHZvaWQgcHJpbnRSZW5kZXJUcmVlRm9yTGl2ZURvY3VtZW50cygpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5kZXggYWUwNWExNDMyMWZjYTg2
ZTc3YWM0OWQ3MWU3ODBhMmVlYjczNDRhMS4uMDBiNjFmN2YwMGM4M2FkNTMyYWM1N2EyZGJlODBi
NjJiYTQ4ZjE3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQu
Y3BwCkBAIC0xNDEsMTUgKzE0MSwxMCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGREcmF3
U2VsZWN0aW9uVGludCgpIGNvbnN0CiAKIGlubGluZSBzdGF0aWMgYm9vbCBkcmFnZ2VkQ29udGVu
dENvbnRhaW5zUmVwbGFjZWRFbGVtZW50KGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyKj4mIG1hcmtlcnMsIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKG1hcmtl
cnMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBmb3IgKGF1dG8qIG1h
cmtlciA6IG1hcmtlcnMpIHsKLSAgICAgICAgYXV0byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RG
OjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkp
OwotICAgICAgICBpZiAoZHJhZ2dlZENvbnRlbnREYXRhLnRhcmdldE5vZGUgPT0gJmVsZW1lbnQp
CisgICAgICAgIGlmIChXVEY6OmdldDxSZWZQdHI8Tm9kZT4+KG1hcmtlci0+ZGF0YSgpKSA9PSAm
ZWxlbWVudCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQogICAgIHJldHVybiBm
YWxzZTsKIH0KIApAQCAtMTY5LDkgKzE2NCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50
KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUgc2NvcGUodGhpcyk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZSBzY29wZSgqdGhpcyk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0
ZVNhdmVyIHNhdmVkR3JhcGhpY3NDb250ZXh0KHBhaW50SW5mby5jb250ZXh0KCksIGZhbHNlKTsK
ICAgICBpZiAoZWxlbWVudCgpICYmIGVsZW1lbnQoKS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVu
dCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCmluZGV4IGJiYzlkMGYzNjA1MDg3YmI3NDhlMmJhMGUzYWVmYmMxNGM5NmI0OTYuLjU1Njhh
N2U2ZGRkOWEwNDJiZDVlY2ZkYzY4YmVlMDdkZDVkMGE4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCkBAIC0yMjIsOSArMjIyLDcgQEAg
c3RhdGljIExheW91dFVuaXQgcmVzb2x2ZUxvZ2ljYWxIZWlnaHRGb3JSb3coY29uc3QgTGVuZ3Ro
JiByb3dMb2dpY2FsSGVpZ2h0KQogCiBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2Fs
Y1Jvd0xvZ2ljYWxIZWlnaHQoKQogewotI2lmbmRlZiBOREVCVUcKLSAgICBTZXRMYXlvdXROZWVk
ZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSh0aGlzKTsKLSNlbmRpZgorICAg
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKCp0aGlz
KTsKIAogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAKQEAgLTUzOCw5ICs1MzYsNyBAQCB2
b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6cmVsYXlvdXRDZWxsSWZGbGV4ZWQoUmVuZGVyVGFibGVD
ZWxsJiBjZWxsLCBpbnQgcm93SW5kZQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0
Um93cygpCiB7Ci0jaWZuZGVmIE5ERUJVRwotICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNj
b3BlIGxheW91dEZvcmJpZGRlblNjb3BlKHRoaXMpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOwogCiAgICAgQVNT
RVJUKCFuZWVkc0xheW91dCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRoZW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5jcHAKaW5kZXggZTlkZDE0OTQ1ODY0YmE5YmQ4ZTg1YTQ1MDg0N2UyZTYyNTJkMTY0Ni4uOTg5
NWFkYmRjOTI2YmIxOGE3Y2RlNzQ4ZWFlZTAzYmM2MGFmZGUzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCkBAIC0xMzQ3LDI4ICsxMzQ3LDE1IEBAIENvbG9yIFJl
bmRlclRoZW1lOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpCiAgICAgfQogfQogCi1Db2xvciBSZW5kZXJUaGVtZTo6YWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRp
b25zKSBjb25zdAorQ29sb3IgUmVuZGVyVGhlbWU6OnRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKIHsKICAgICBhdXRv
JiBjYWNoZSA9IGNvbG9yQ2FjaGUob3B0aW9ucyk7Ci0gICAgaWYgKCFjYWNoZS5hY3RpdmVUZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICBjYWNoZS5hY3RpdmVUZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3IgPSBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvcihvcHRpb25zKTsKLSAgICByZXR1cm4gY2FjaGUuYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yOworICAgIGlmICghY2FjaGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgY2FjaGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yID0gcGxhdGZvcm1UZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3Iob3B0aW9ucyk7CisgICAgcmV0dXJuIGNhY2hlLnRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcjsKIH0KIAotQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlVGV4dFNl
YXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25z
KSBjb25zdAotewotICAgIGF1dG8mIGNhY2hlID0gY29sb3JDYWNoZShvcHRpb25zKTsKLSAgICBp
ZiAoIWNhY2hlLmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgY2FjaGUuaW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgPSBwbGF0Zm9ybUlu
YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKG9wdGlvbnMpOwotICAgIHJldHVybiBjYWNo
ZS5pbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhl
bWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPikgY29uc3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAxNTAsIDUw
KTsgLy8gT3JhbmdlLgotfQotCi1Db2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNv
bnN0CitDb2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
T3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAogewogICAgIHJldHVybiBDb2xv
cigyNTUsIDI1NSwgMCk7IC8vIFllbGxvdy4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRoZW1lLmgKaW5kZXggNDAxOWQ0ZjJiMTk3MWRmNDJlYzRhNzk4YzNmOTM4Yjc0MjMzOWVmNC4u
YjM1NTM3OGFkZTY5YjgwMDZhZjY1ZTI0YjJjMjJhYTk1YjNjM2I1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKQEAgLTE1NCw5ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAg
Q29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAgICAgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3Q7CiAKLSAgICAvLyBIaWdobGlnaHRpbmcgY29sb3JzIGZvciBzZWFyY2ggbWF0Y2hlcy4KLSAg
ICBDb2xvciBhY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+KSBjb25zdDsKLSAgICBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OworICAgIC8vIEhp
Z2hsaWdodGluZyBjb2xvciBmb3Igc2VhcmNoIG1hdGNoZXMuCisgICAgQ29sb3IgdGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAK
ICAgICB2aXJ0dWFsIENvbG9yIGRpc2FibGVkVGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29s
b3IsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdW5kQ29sb3IpIGNvbnN0OwogCkBAIC0yNzUsOSArMjc0
LDcgQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVMaXN0Qm94
U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikg
Y29uc3Q7CiAgICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlv
bkZvcmVncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0Owog
Ci0gICAgLy8gVGhlIHBsYXRmb3JtIGhpZ2hsaWdodGluZyBjb2xvcnMgZm9yIHNlYXJjaCBtYXRj
aGVzLgotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKLSAgICB2aXJ0dWFs
IENvbG9yIHBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0
PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3Jt
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikg
Y29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3JzKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0xpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3JzKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQpAQCAtNDMzLDggKzQzMCw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgQ29sb3IgYWN0aXZlTGlz
dEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcjsKICAgICAgICAgQ29sb3IgaW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yOwogCi0gICAgICAgIENvbG9yIGFjdGl2ZVRleHRT
ZWFyY2hIaWdobGlnaHRDb2xvcjsKLSAgICAgICAgQ29sb3IgaW5hY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3I7CisgICAgICAgIENvbG9yIHRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKICAg
ICB9OwogCiAgICAgdmlydHVhbCBDb2xvckNhY2hlJiBjb2xvckNhY2hlKE9wdGlvblNldDxTdHls
ZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCmluZGV4IDA3ZjI2ZTUxMTNkNmQ5NTRhZDQyN2YzNWQ0N2UzNWUxNTI0MWQ0Yzgu
LmUwNDg0NTJjNmM5MjdmYjdkNmZlNzI0YjY0MGY2YzNiZjc4ZDUzMTkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCkBAIC02Myw4ICs2Myw3IEBAIHB1YmxpYzoK
ICAgICBDb2xvciBwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOwogICAgIENvbG9y
IHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CiAgICAgQ29sb3IgcGxhdGZvcm1G
b2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFs
OwotICAgIENvbG9yIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgcGxhdGZv
cm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4pIGNvbnN0IGZpbmFsOworICAgIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CiAK
ICAgICBTY3JvbGxiYXJDb250cm9sU2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoQ29u
dHJvbFBhcnQpIGZpbmFsIHsgcmV0dXJuIFNtYWxsU2Nyb2xsYmFyOyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCAwZTM3MTg4NjIyOGMxYjE2YjI2
MmU4ZDZhMDYyOTQyY2I4MmM1OWM2Li5jYmExNjFlNzQ5NjA0ZTZiNGRkNjhmMDQ0NWEwMDFmODg2
NDE5ZDlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVN
YWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBA
IC00NzEsMTkgKzQ3MSwxMiBAQCBDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1Jp
bmdDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aQogICAgIHJldHVybiBj
b2xvcldpdGhPdmVycmlkZUFscGhhKGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRG
b2N1c0luZGljYXRvckNvbG9yXSkucmdiKCksIDEpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1h
Yzo6cGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxh
dGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlv
bnM+IG9wdGlvbnMpIGNvbnN0CiB7CiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBs
b2NhbEFwcGVhcmFuY2Uob3B0aW9ucy5jb250YWlucyhTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VE
YXJrQXBwZWFyYW5jZSkpOwogICAgIHJldHVybiBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGZp
bmRIaWdobGlnaHRDb2xvcl0pOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1J
bmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0
aW9ucz4gb3B0aW9ucykgY29uc3QKLXsKLSAgICAvLyBUaGUgaW5hY3RpdmUgY29sb3IgaXMgbm9y
bWFsbHkgdXNlZCwgc2luY2Ugbm8gbGVnYWN5IFdlYktpdCBjbGllbnQgbWFya3MgYSB0ZXh0IG1h
dGNoIGFzIGFjdGl2ZS4KLSAgICAvLyBTbyBqdXN0IHJldHVybiB0aGUgc2FtZSBjb2xvciBmb3Ig
Ym90aCBzdGF0ZXMuCi0gICAgcmV0dXJuIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKG9wdGlvbnMpOwotfQotCiBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIHRvRm9udFdl
aWdodChOU0ludGVnZXIgYXBwS2l0Rm9udFdlaWdodCkKIHsKICAgICBBU1NFUlQoYXBwS2l0Rm9u
dFdlaWdodCA+IDAgJiYgYXBwS2l0Rm9udFdlaWdodCA8IDE1KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAppbmRleCA1MWU3ZDFiZTkzMmExNzczYzY2NTAwYzg2MGRkZDRlY2UxMzFi
NTJjLi4wMWQ4MWM1MGFiMTQ3OTk5Nzg3NDNjNzQ1ZTNhOWY4NjU2ZWE3MDY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0xNzU1LDEyICsxNzU1LDYgQEAgRXhjZXB0aW9u
T3I8U3RyaW5nPiBJbnRlcm5hbHM6OmR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtl
clR5cGVTdHJpbmcpCiAgICAgcmV0dXJuIHJlY3RTdHJpbmcudG9TdHJpbmcoKTsKIH0KIAotdm9p
ZCBJbnRlcm5hbHM6OmFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wg
aXNBY3RpdmUpCi17Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJz
KCkuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCBpc0FjdGl2ZSk7Ci19Ci0KIEV4Y2VwdGlvbk9y
PHZvaWQ+IEludGVybmFsczo6c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29s
IGZsYWcpCiB7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCA3OWY0MjRjM2Q4M2EwZDZlM2FkMzJhZDVh
YTg0ZTZjMDU2OTcyZjU4Li5jYjZlMTQ3Y2Q2NmZlZGYxMmNhMTVkYmM4MmY1ZDE2YWM2ZDhhNjk2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTI1OSw3ICsyNTksNiBAQCBwdWJs
aWM6CiAgICAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gbWFya2VyUmFuZ2VGb3JOb2RlKE5v
ZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KTsKICAgICBFeGNl
cHRpb25PcjxTdHJpbmc+IG1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiwgY29uc3QgU3Ry
aW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCk7CiAgICAgRXhjZXB0aW9uT3I8U3RyaW5n
PiBkdW1wTWFya2VyUmVjdHMoY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFk
ZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYsIGJvb2wgaXNBY3RpdmUpOwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCk7CiAK
ICAgICB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmlkbAppbmRleCBlNWM1OGY2MmI0MWJjOTU3ODlmZjE3NDE5MzVlZjY5MDE3MmY4MzlmLi4y
MDNkYTgwNTA5YjllYjUxN2Y2YzAyZjVhYjRmNTdjYzFkZTQ3Yzc1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuaWRsCkBAIC0yNzgsNyArMjc4LDYgQEAgZW51bSBDb21wb3NpdGluZ1Bv
bGljeSB7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBSYW5nZT8gbWFya2VyUmFuZ2VGb3JOb2Rl
KE5vZGUgbm9kZSwgRE9NU3RyaW5nIG1hcmtlclR5cGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwog
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIG1hcmtlckRlc2NyaXB0aW9uRm9yTm9k
ZShOb2RlIG5vZGUsIERPTVN0cmluZyBtYXJrZXJUeXBlLCB1bnNpZ25lZCBsb25nIGluZGV4KTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIERPTVN0cmluZyBkdW1wTWFya2VyUmVjdHMoRE9NU3Ry
aW5nIG1hcmtlclR5cGUpOwotICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKFJhbmdlIHJhbmdl
LCBib29sZWFuIGlzQWN0aXZlKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sZWFuIGZsYWcpOwogCiAgICAgdm9pZCBp
bnZhbGlkYXRlRm9udENhY2hlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9WaWV3U25hcHNob3RTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld1NuYXBz
aG90U3RvcmUuaAppbmRleCAyMDAyNGE1ODdhZTNkNGVkMTExMWVmYWZlMjlhMDE0MTVjMzhjNWU4
Li5hYjE0N2JlNGE5YTdhYTM4OTc4ZjMyYzI5ZmUxZGM0YzMxZjE0YjRjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmgKQEAgLTI3LDEzICsyNywxMSBAQAog
CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQu
aD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hT
ZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgUExBVEZPUk0o
Q09DT0EpCisjaWYgSEFWRShJT1NVUkZBQ0UpCiAjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2Uu
aD4KICNlbmRpZgogCkBAIC00MSwzNSArMzksMTcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0
ckNhaXJvLmg+CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotI2lmICFkZWZpbmVkKF9f
T0JKQ19fKQotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2VuZGlmCi0KLU9CSkNf
Q0xBU1MgQ0FDb250ZXh0OwotCi0jaWYgSEFWRShJT1NVUkZBQ0UpCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBJT1N1cmZhY2U7Ci19Ci0jZW5kaWYKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
S2l0IHsKIAotY2xhc3MgVmlld1NuYXBzaG90U3RvcmU7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtOwogY2xhc3MgV2ViUGFnZVByb3h5OwogCiBjbGFzcyBWaWV3U25hcHNob3QgOiBwdWJs
aWMgUmVmQ291bnRlZDxWaWV3U25hcHNob3Q+IHsKIHB1YmxpYzoKLSNpZiBQTEFURk9STShDT0NP
QSkKICNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hvdD4gY3Jl
YXRlKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+KTsKLSNlbHNlCi0gICAgc3Rh
dGljIFJlZjxWaWV3U25hcHNob3Q+IGNyZWF0ZSh1aW50MzJfdCBzbG90SUQsIFdlYkNvcmU6Oklu
dFNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKTsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0o
R1RLKQorI2lmIFBMQVRGT1JNKEdUSykKICAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hvdD4gY3Jl
YXRlKFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwogI2VuZGlmCiAKQEAgLTc3LDcgKzU3LDgg
QEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhckltYWdlKCk7CiAgICAgYm9vbCBoYXNJbWFnZSgp
IGNvbnN0OwotI2lmIFBMQVRGT1JNKENPQ09BKQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAg
aWQgYXNMYXllckNvbnRlbnRzKCk7CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGFzSW1hZ2VG
b3JUZXN0aW5nKCk7CiAjZW5kaWYKQEAgLTg1LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0UmVuZGVyVHJlZVNpemUodWludDY0X3QgcmVuZGVyVHJlZVNpemUpIHsgbV9yZW5kZXJUcmVl
U2l6ZSA9IHJlbmRlclRyZWVTaXplOyB9CiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX3JlbmRlclRyZWVTaXplOyB9CiAKLSAgICB2b2lkIHNldEJhY2tncm91
bmRDb2xvcihXZWJDb3JlOjpDb2xvciBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9y
OyB9CisgICAgdm9pZCBzZXRCYWNrZ3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNv
bG9yKSB7IG1fYmFja2dyb3VuZENvbG9yID0gY29sb3I7IH0KICAgICBXZWJDb3JlOjpDb2xvciBi
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCiAg
ICAgdm9pZCBzZXRWaWV3U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9z
aXRpb24pIHsgbV92aWV3U2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsgfQpAQCAtOTQs
NyArNzUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcikgeyBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0
b3I7IH0KICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGV2
aWNlU2NhbGVGYWN0b3I7IH0KIAotI2lmIFBMQVRGT1JNKENPQ09BKQogI2lmIEhBVkUoSU9TVVJG
QUNFKQogICAgIFdlYkNvcmU6OklPU3VyZmFjZSogc3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c3VyZmFjZS5nZXQoKTsgfQogCkBAIC0xMDQsMTEgKzg0LDkgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U3VyZmFjZShzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPik7CiAKICAgICBX
ZWJDb3JlOjpJT1N1cmZhY2U6OlN1cmZhY2VTdGF0ZSBzZXRWb2xhdGlsZShib29sKTsKLSNlbHNl
Ci0gICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0g
ICAgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU2l6ZUlu
Qnl0ZXM7IH0KICNlbmRpZgotI2VsaWYgUExBVEZPUk0oR1RLKQorCisjaWYgUExBVEZPUk0oR1RL
KQogICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFj
ZS5nZXQoKTsgfQogCiAgICAgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMoKSBjb25zdDsKQEAgLTEx
NiwyMiArOTQsMTYgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0jaWYgUExBVEZPUk0o
Q09DT0EpCiAjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgZXhwbGljaXQgVmlld1NuYXBzaG90KHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJDb3JlOjpJT1N1cmZhY2U+IG1fc3VyZmFjZTsKLSNlbHNlCi0gICAgZXhwbGljaXQgVmll
d1NuYXBzaG90KHVpbnQzMl90IHNsb3RJRCwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdl
U2l6ZUluQnl0ZXMpOwotCi0gICAgdWludDMyX3QgbV9zbG90SUQ7Ci0gICAgc2l6ZV90IG1faW1h
Z2VTaXplSW5CeXRlczsKLSAgICBXZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICNlbmRpZgotI2Vs
aWYgUExBVEZPUk0oR1RLKQorCisjaWYgUExBVEZPUk0oR1RLKQogICAgIGV4cGxpY2l0IFZpZXdT
bmFwc2hvdChSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYmKTsKIAotICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1fc3VyZmFjZSB7IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiBtX3N1cmZhY2U7CiAjZW5kaWYKIAogICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemU7
CkBAIC0xNTYsMTAgKzEyOCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERpc2FibGVTbmFwc2hv
dFZvbGF0aWxpdHlGb3JUZXN0aW5nKGJvb2wgZGlzYWJsZSkgeyBtX2Rpc2FibGVTbmFwc2hvdFZv
bGF0aWxpdHkgPSBkaXNhYmxlOyB9CiAgICAgYm9vbCBkaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5
Rm9yVGVzdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eTsg
fQogCi0jaWYgIUhBVkUoSU9TVVJGQUNFKSAmJiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9T
RVJWRVIpCi0gICAgc3RhdGljIENBQ29udGV4dCAqc25hcHNob3R0aW5nQ29udGV4dCgpOwotI2Vu
ZGlmCi0KIHByaXZhdGU6CiAgICAgdm9pZCBkaWRBZGRJbWFnZVRvU25hcHNob3QoVmlld1NuYXBz
aG90Jik7CiAgICAgdm9pZCB3aWxsUmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoVmlld1NuYXBzaG90
Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90
U3RvcmVNYWMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmVNYWMubW0KaW5kZXggMzViYzdjMmViOTkwZThmNDFlODdjYzM0ZDExYzMxZjhiNmQ5M2Q1ZS4u
YzQzYmQzN2RmOWM2MDU5YjI2NjYxODk2ODllMjlhNjhiMGIxYzA0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0b3JlTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbQpAQCAtMzQs
NTMgKzM0LDE5IEBACiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAotI2lmICFIQVZFKElPU1VSRkFDRSkgJiYgSEFWRShDT1JFX0FOSU1BVElP
Tl9SRU5ERVJfU0VSVkVSKQotQ0FDb250ZXh0ICpWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3R0
aW5nQ29udGV4dCgpCi17Ci0gICAgc3RhdGljIENBQ29udGV4dCAqY29udGV4dDsKLSAgICBzdGF0
aWMgZGlzcGF0Y2hfb25jZV90IG9uY2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9r
ZW4sIF57Ci0gICAgICAgIE5TRGljdGlvbmFyeSAqb3B0aW9ucyA9IEB7Ci0gICAgICAgICAgICBr
Q0FDb250ZXh0RGlzcGxheU5hbWU6IEAiV2ViS2l0U25hcHNob3R0aW5nIiwKLSAgICAgICAgICAg
IGtDQUNvbnRleHRJZ25vcmVzSGl0VGVzdDogQFlFUywKLSAgICAgICAgICAgIGtDQUNvbnRleHRE
aXNwbGF5SWQgOiBAMjAwMDAKLSAgICAgICAgfTsKLSAgICAgICAgY29udGV4dCA9IFtbQ0FDb250
ZXh0IHJlbW90ZUNvbnRleHRXaXRoT3B0aW9uczpvcHRpb25zXSByZXRhaW5dOwotICAgIH0pOwot
Ci0gICAgcmV0dXJuIGNvbnRleHQ7Ci19Ci0jZW5kaWYKLQotI2lmIEhBVkUoSU9TVVJGQUNFKQog
UmVmPFZpZXdTbmFwc2hvdD4gVmlld1NuYXBzaG90OjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFdl
YkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBW
aWV3U25hcHNob3QoV1RGTW92ZShzdXJmYWNlKSkpOwogfQotI2Vsc2UKLVJlZjxWaWV3U25hcHNo
b3Q+IFZpZXdTbmFwc2hvdDo6Y3JlYXRlKHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBzaXplLCBz
aXplX3QgaW1hZ2VTaXplSW5CeXRlcykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWV3
U25hcHNob3Qoc2xvdElELCBzaXplLCBpbWFnZVNpemVJbkJ5dGVzKSk7Ci19Ci0jZW5kaWYKIAot
I2lmIEhBVkUoSU9TVVJGQUNFKQogVmlld1NuYXBzaG90OjpWaWV3U25hcHNob3Qoc3RkOjp1bmlx
dWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKICAgICA6IG1fc3VyZmFjZShXVEZN
b3ZlKHN1cmZhY2UpKQotI2Vsc2UKLVZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KHVpbnQzMl90
IHNsb3RJRCwgSW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykKLSAgICA6IG1f
c2xvdElEKHNsb3RJRCkKLSAgICAsIG1faW1hZ2VTaXplSW5CeXRlcyhpbWFnZVNpemVJbkJ5dGVz
KQotICAgICwgbV9zaXplKHNpemUpCi0jZW5kaWYKIHsKICAgICBpZiAoaGFzSW1hZ2UoKSkKICAg
ICAgICAgVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpZEFkZEltYWdlVG9TbmFwc2hv
dCgqdGhpcyk7CiB9CiAKLSNpZiBIQVZFKElPU1VSRkFDRSkKIHZvaWQgVmlld1NuYXBzaG90Ojpz
ZXRTdXJmYWNlKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1cmZhY2UpCiB7
CiAgICAgQVNTRVJUKCFtX3N1cmZhY2UpOwpAQCAtOTIsMTUgKzU4LDEwIEBAIHZvaWQgVmlld1Nu
YXBzaG90OjpzZXRTdXJmYWNlKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1
cmZhY2UpCiAgICAgbV9zdXJmYWNlID0gV1RGTW92ZShzdXJmYWNlKTsKICAgICBWaWV3U25hcHNo
b3RTdG9yZTo6c2luZ2xldG9uKCkuZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KLSNl
bmRpZgogCiBib29sIFZpZXdTbmFwc2hvdDo6aGFzSW1hZ2UoKSBjb25zdAogewotI2lmIEhBVkUo
SU9TVVJGQUNFKQogICAgIHJldHVybiAhIW1fc3VyZmFjZTsKLSNlbHNlCi0gICAgcmV0dXJuIG1f
c2xvdElEOwotI2VuZGlmCiB9CiAKIHZvaWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKQEAg
LTExMCwxOCArNzEsOSBAQCB2b2lkIFZpZXdTbmFwc2hvdDo6Y2xlYXJJbWFnZSgpCiAKICAgICBW
aWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkud2lsbFJlbW92ZUltYWdlRnJvbVNuYXBzaG90
KCp0aGlzKTsKIAotI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7
Ci0jZWxzZQotI2lmIEhBVkUoQ09SRV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKLSAgICBbVmll
d1NuYXBzaG90U3RvcmU6OnNuYXBzaG90dGluZ0NvbnRleHQoKSBkZWxldGVTbG90Om1fc2xvdElE
XTsKLSNlbmRpZgotICAgIG1fc2xvdElEID0gMDsKLSAgICBtX2ltYWdlU2l6ZUluQnl0ZXMgPSAw
OwotI2VuZGlmCiB9CiAKLSNpZiBIQVZFKElPU1VSRkFDRSkKIFdlYkNvcmU6OklPU3VyZmFjZTo6
U3VyZmFjZVN0YXRlIFZpZXdTbmFwc2hvdDo6c2V0Vm9sYXRpbGUoYm9vbCBiZWNvbWVWb2xhdGls
ZSkKIHsKICAgICBpZiAoVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpc2FibGVTbmFw
c2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKCkpCkBAIC0xMzIsMTEgKzg0LDkgQEAgV2ViQ29yZTo6
SU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgVmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZShib29sIGJl
Y29tZVZvbGF0aWxlKQogCiAgICAgcmV0dXJuIG1fc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShiZWNv
bWVWb2xhdGlsZSk7CiB9Ci0jZW5kaWYKIAogaWQgVmlld1NuYXBzaG90Ojphc0xheWVyQ29udGVu
dHMoKQogewotI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIGlmICghbV9zdXJmYWNlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTQ2LDIzICs5NiwxNSBAQCBpZCBWaWV3U25hcHNob3Q6
OmFzTGF5ZXJDb250ZW50cygpCiAgICAgfQogCiAgICAgcmV0dXJuIG1fc3VyZmFjZS0+YXNMYXll
ckNvbnRlbnRzKCk7Ci0jZWxzZQotICAgIHJldHVybiBbQ0FDb250ZXh0IG9iamVjdEZvclNsb3Q6
bV9zbG90SURdOwotI2VuZGlmCiB9CiAKIFJldGFpblB0cjxDR0ltYWdlUmVmPiBWaWV3U25hcHNo
b3Q6OmFzSW1hZ2VGb3JUZXN0aW5nKCkKIHsKLSNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBpZiAo
IW1fc3VyZmFjZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoVmlld1Nu
YXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0
aW5nKCkpOwogICAgIHJldHVybiBtX3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZWxzZQotICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcyBpbiB0aGUgc2xvdCBjYXNlLgotICAgIHJldHVybiBu
dWxscHRyOwotI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4
dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCmluZGV4IGU0NDliZmQwMDAwZGYwMTM5ODgwNDg5
ZDBlZDMwOWYxYmExOWY2NzYuLmE1ZWU3ZTM4OTVkNTA4ZmJjOThlZDM4ZTgxODcyOTRlYzI2Yzdk
YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1Rl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTEzOCw3
ICsxMzgsOCBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0
aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmlidXRlZFN0cgogICAgICAgICBbYXR0cnMgZW51bWVy
YXRlS2V5c0FuZE9iamVjdHNVc2luZ0Jsb2NrOl4oTlNBdHRyaWJ1dGVkU3RyaW5nS2V5IGtleSwg
aWQgdmFsdWUsIEJPT0wgKnN0b3ApIHsKICAgICAgICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9m
Q2xhc3M6W05TU3RyaW5nIGNsYXNzXV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgbWFya2Vycy5hZGRQbGF0Zm9ybVRleHRDaGVja2luZ01hcmtlcihhdHRyaWJ1dGVDb3Jl
UmFuZ2UsIGtleSwgKE5TU3RyaW5nICopdmFsdWUpOworICAgICAgICAgICAgbWFya2Vycy5hZGRN
YXJrZXIoYXR0cmlidXRlQ29yZVJhbmdlLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmcsCisgICAgICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6
OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YSB7IGtleSwgKE5TU3RyaW5nICopdmFsdWUgfSk7CiAK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBTd2l0Y2ggdG8gY29uc3RhbnRzIGFmdGVyIHJkYXI6Ly9w
cm9ibGVtLzQ4OTE0MTUzIGlzIHJlc29sdmVkLgogICAgICAgICAgICAgaWYgKFtrZXkgaXNFcXVh
bFRvU3RyaW5nOkAiTlNTcGVsbGluZ1N0YXRlIl0pIHsKQEAgLTE0Nyw3ICsxNDgsNyBAQCB2b2lk
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24o
Y29uc3QgQXR0cmlidXRlZFN0cgogICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtl
cihhdHRyaWJ1dGVDb3JlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAg
ICAgICAgICAgaWYgKHNwZWxsaW5nU3RhdGUgJiBOU1NwZWxsaW5nU3RhdGVHcmFtbWFyRmxhZykg
ewogICAgICAgICAgICAgICAgICAgICBOU1N0cmluZyAqdXNlckRlc2NyaXB0aW9uID0gW2F0dHJz
IG9iamVjdEZvcktleTpAIk5TR3JhbW1hclVzZXJEZXNjcmlwdGlvbiJdOwotICAgICAgICAgICAg
ICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2UsIERvY3VtZW50TWFy
a2VyOjpHcmFtbWFyLCB1c2VyRGVzY3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICBtYXJr
ZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFy
LCBTdHJpbmcgeyB1c2VyRGVzY3JpcHRpb24gfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQogICAgICAgICB9XTsKQEAgLTE1Niw3ICsxNTcsNiBAQCB2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmli
dXRlZFN0cgogCiB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3Rh
dGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBhbm5vdGF0aW9uLCBpbnQ2NF90
IHNlbGVjdGlvbk9mZnNldCwgdWludDY0X3QgbGVuZ3RoKQogewotICAgIEZyYW1lJiBmcmFtZSA9
IG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUo
KTsKICAgICBhdXRvIHJhbmdlQW5kT2Zmc2V0ID0gcmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2Vs
ZWN0aW9uKHNlbGVjdGlvbk9mZnNldCwgbGVuZ3RoKTsKICAgICBpZiAoIXJhbmdlQW5kT2Zmc2V0
KQogICAgICAgICByZXR1cm47CkBAIC0xNjQsMTMgKzE2NCwxMyBAQCB2b2lkIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29u
c3QgU3RyaQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgcmVt
b3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0gIk5TU3BlbGxpbmdTdGF0ZSI7
Ci0gICAgZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpLmZpbHRlck1hcmtlcnMoKnJhbmdlLCBb
Jl0gKERvY3VtZW50TWFya2VyKiBtYXJrZXIpIHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2Fs
dGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtl
ci0+ZGF0YSgpKSkKKyAgICBhdXRvIHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPSBhbm5vdGF0
aW9uID09ICJOU1NwZWxsaW5nU3RhdGUiOworICAgIGF1dG8gdHlwZXMgPSByZW1vdmVDb3JlU3Bl
bGxpbmdNYXJrZXJzID8gcmVsZXZhbnRNYXJrZXJUeXBlcygpIDogV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5kb2N1bWVudCgpLT5tYXJrZXJzKCku
ZmlsdGVyTWFya2VycygqcmFuZ2UsIFsmXSAoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikg
eworICAgICAgICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8V2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLmRhdGEoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGF1dG8mIHRleHRDaGVja2luZ0RhdGEgPSBXVEY6
OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRh
dGEoKSk7Ci0gICAgICAgIHJldHVybiB0ZXh0Q2hlY2tpbmdEYXRhLmtleSAhPSBhbm5vdGF0aW9u
OwotICAgIH0sIHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVz
KCkgOiBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcpOworICAgICAgICByZXR1
cm4gV1RGOjpnZXQ8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5n
RGF0YT4obWFya2VyLmRhdGEoKSkua2V5ICE9IGFubm90YXRpb247CisgICAgfSwgdHlwZXMpOwog
fQogCiBBdHRyaWJ1dGVkU3RyaW5nIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3Rh
dGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRp
b24mIHN0YXJ0LCBjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIGVuZCkKQEAgLTE4OCwx
MCArMTg4LDcgQEAgQXR0cmlidXRlZFN0cmluZyBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6
OmFubm90YXRlZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICBbc3RyaW5nIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6YWRvcHROUyhbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3Ry
aW5nV2l0aG91dENvcHlpbmcoKS5nZXQoKV0pLmdldCgpXTsKICAgICAgICAgYXV0byByYW5nZSA9
IGl0LnJhbmdlKCk7Ci0gICAgICAgIGF1dG8gbWFya2VycyA9IHJhbmdlLnN0YXJ0LmRvY3VtZW50
KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIERvY3Vt
ZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0
byogbWFya2VyIDogbWFya2VycykgewotICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+
ZGF0YSgpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChhdXRvKiBt
YXJrZXIgOiByYW5nZS5zdGFydC5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKSkgewogICAgICAgICAg
ICAgYXV0byYgZGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVj
a2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKICAgICAgICAgICAgIGF1dG8gc3VicmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIHsgbWFya2VyLT5zdGFydE9mZnNldCgpLCBtYXJr
ZXItPmVuZE9mZnNldCgpIC0gbWFya2VyLT5zdGFydE9mZnNldCgpIH0pOwogICAgICAgICAgICAg
W3N0cmluZyBhZGRBdHRyaWJ1dGU6ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSByYW5nZTpjaGFy
YWN0ZXJSYW5nZShlbnRpcmVSYW5nZSwgc3VicmFuZ2UpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAzM2Vj
ZDdiZTI0NWNkYjU5ODdhYmUwMTA5NTcwZmFlZTJhYjlkNjFkLi5lMzYzZmMxZjljNzVkNjA4NTBk
OTQzNWExMWJlZTEwNmI1NDk3YTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0xMzIsOCArMTMyLDcgQEAg
RGljdGlvbmFyeVBvcHVwSW5mbyBXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2Uo
RnJhbWUmIGZyYW1lLCBSYW5nZSYgcmEKICAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cElu
Zm87CiAgICAgfQogCi0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJz
b2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1dG8gcXVhZHMgPSBSZW5kZXJPYmplY3Q6OmFi
c29sdXRlVGV4dFF1YWRzKHJhbmdlKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CiAgICAg
ICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAg
ICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGRhMTEzMmMyYzliZDkxNDhj
ODMzYzg3NTM3ZjNlODI2NjM4ZmNlMzcuLjQ2YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjcz
MjRkYjBkYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tCkBAIC0xNjEsMTMgKzE2MSwxMSBAQCB2b2lkIFdlYlBhZ2U6OmdldFBs
YXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25z
dAogICAgIHBvc3RMYXlvdXREYXRhLnBhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0
ID0gY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJh
bmdlRm9yQ2FuZGlkYXRlUmVxdWVzdCkgOiBTdHJpbmcoKTsKICAgICBwb3N0TGF5b3V0RGF0YS5z
dHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9yQ2FuZGlk
YXRlUmVxdWVzdCgpOwogCi0gICAgSW50UmVjdCByZWN0Rm9yU2VsZWN0aW9uQ2FuZGlkYXRlczsK
LSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICBzZWxlY3RlZFJhbmdlLT5hYnNvbHV0
ZVRleHRRdWFkcyhxdWFkcyk7CisgICAgYXV0byBxdWFkcyA9IFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMoKnNlbGVjdGVkUmFuZ2UpOwogICAgIGlmICghcXVhZHMuaXNFbXB0eSgpKQog
ICAgICAgICBwb3N0TGF5b3V0RGF0YS5mb2N1c2VkRWxlbWVudFJlY3QgPSBmcmFtZS52aWV3KCkt
PmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIC8vIFJhbmdlOjphYnNvbHV0ZVRleHRRdWFkcygpIHdpbGwgYmUgZW1w
dHkgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoLgorICAgICAgICAvLyBRdWFkcyB3aWxsIGJl
IGVtcHR5IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaC4KICAgICAgICAgaWYgKHNlbGVjdGlv
bi5pc0NhcmV0KCkpCiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5mb2N1c2VkRWxlbWVudFJl
Y3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3coZnJhbWUuc2VsZWN0aW9uKCkuYWJz
b2x1dGVDYXJldEJvdW5kcygpKTsKICAgICB9CkBAIC04NzIsOCArODcwLDggQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGkKICAgICB9CiAKICAgICBib29sIHBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVE
YXRhRGV0ZWN0b3JzID0gZmFsc2U7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvdmVybGF5IDogY29y
ZVBhZ2UoKS0+cGFnZU92ZXJsYXlDb250cm9sbGVyKCkucGFnZU92ZXJsYXlzKCkpIHsKLSAgICAg
ICAgV2ViUGFnZU92ZXJsYXkqIHdlYk92ZXJsYXkgPSBXZWJQYWdlT3ZlcmxheTo6ZnJvbUNvcmVP
dmVybGF5KCpvdmVybGF5KTsKKyAgICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5w
YWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5wYWdlT3ZlcmxheXMoKSkgeworICAgICAgICBhdXRvIHdl
Yk92ZXJsYXkgPSBXZWJQYWdlT3ZlcmxheTo6ZnJvbUNvcmVPdmVybGF5KCpvdmVybGF5KTsKICAg
ICAgICAgaWYgKCF3ZWJPdmVybGF5KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTg4Miwy
MCArODgwLDE1IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RB
dExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgICAgIGlmICghYWN0aW9u
Q29udGV4dCB8fCAhbWFpblJlc3VsdFJhbmdlKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAg
ICAgICAgYXV0byB2aWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygp
OworICAgICAgICBpZiAoIXZpZXcpCisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBw
YWdlT3ZlcmxheURpZE92ZXJyaWRlRGF0YURldGVjdG9ycyA9IHRydWU7CiAgICAgICAgIGltbWVk
aWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0ID0gYWN0aW9uQ29udGV4
dDsKLQotICAgICAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKLSAgICAgICAgbWFpblJlc3Vs
dFJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Ci0gICAgICAgIEZsb2F0UmVjdCBkZXRl
Y3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWlu
UmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgICAgIGZvciAoY29uc3Qg
YXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gu
dW5pdGUoZnJhbWVWaWV3LT5jb250ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKSkpOwotCi0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3Vu
ZGluZ0JveCA9IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OworICAgICAgICBpbW1lZGlhdGVBY3Rp
b25SZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93
KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29s
dXRlVGV4dFF1YWRzKCptYWluUmVzdWx0UmFuZ2UpKSkpOwogICAgICAgICBpbW1lZGlhdGVBY3Rp
b25SZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZSgqbWFpblJlc3VsdFJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRp
bmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJl
c3VsdC5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5ID0gb3ZlcmxheS0+cGFnZU92
ZXJsYXlJRCgpOwotCiAgICAgICAgIGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA1ODdj
MzRlY2NmMGJmOGJkYzc0YzdiMGRjMDRmMDAwOTQwMWNkMDk5Li41ZDY5NGU0ZTI1YjJiZjk3YzI5
OGZkMWZjMjhlNjM1MWZkZDYxYzJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtODQzLDExICs4NDMsOCBAQCAt
IChXZWJWaXNpYmxlUG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0
Qm91bmRhcnlGcm9tUG9zaXRpb246KAogICAgICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKmN1cnJl
bnRXZWJWaXNpYmxlUG9zaXRpb24gPSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBv
c2l0aW9uOmN1cnJlbnRWaXNpYmxlUG9zaXRpb25dOwogICAgICAgICAKICAgICAgICAgYXV0byog
Y3VycmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5j
aG9yTm9kZSgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5n
KCpjdXJyZW50Tm9kZSk7Ci0gICAgICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49IDApOwotICAgICAg
ICBpZiAobGFzdE9mZnNldCA8IDApCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2li
bGVQb3NpdGlvbjsKLSAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0
T2Zmc2V0Rm9yRWRpdGluZygqY3VycmVudE5vZGUpOworCiAgICAgICAgIFZpc2libGVQb3NpdGlv
biBwcmV2aW91c1Zpc2libGVQb3NpdGlvbiA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24ucHJldmlv
dXMoKTsKICAgICAgICAgaWYgKHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CkBAIC04NjMsMTggKzg2
MCwxOCBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0
aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246KAogICAgICAgICAvLyBBU1NFUlQobWFya2Vy
cy5zaXplKCkgPT0gMSk7CiAgICAgICAgIGlmIChtYXJrZXJzLnNpemUoKSA+IDEpCiAgICAgICAg
ICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKLSAgICAgICAgUmVuZGVyZWRE
b2N1bWVudE1hcmtlciogcmVzdWx0TWFya2VyID0gbWFya2Vycy5hdCgwKTsKKworICAgICAgICBh
dXRvJiBtYXJrZXIgPSAqbWFya2Vyc1swXTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBX
ZWJDb3JlIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSBtYXJrZXJzIGNvcnJlY3RseSBkdXJpbmcgZWRp
dGluZy4gQmFpbCBpZiByZXN1bHRNYXJrZXIgZXh0ZW5kcyBvZmYgdGhlIGVkZ2Ugb2YgCi0gICAg
ICAgIC8vIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KLSAgICAg
ICAgaWYgKHJlc3VsdE1hcmtlci0+ZW5kT2Zmc2V0KCkgPiAodW5zaWduZWQpbGFzdE9mZnNldCkK
KyAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMg
Y29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9m
ZiB0aGUgZWRnZSBvZiB0aGlzIG5vZGUsIGJlY2F1c2UgdGhhdCBtZWFucyBpdCdzIGludmFsaWQu
CisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBsYXN0T2Zmc2V0KQogICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBp
ZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6cmVz
dWx0TWFya2VyLT5tZXRhZGF0YSgpXSkKKyAgICAgICAgaWYgKCFbdWlraXREZWxlZ2F0ZSBpc1Vu
cGVydHVyYmVkRGljdGF0aW9uUmVzdWx0TWFya2VyOldURjo6Z2V0PFJldGFpblB0cjxpZD4+KG1h
cmtlci5kYXRhKCkpLmdldCgpXSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJs
ZVBvc2l0aW9uOwogICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdE1hcmtlci0+c3RhcnRPZmZz
ZXQoKSA+IDApCi0gICAgICAgICAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZp
c2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KGN1cnJlbnROb2RlLCByZXN1bHRNYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKV07CisgICAgICAgIGlm
IChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IDApCisgICAgICAgICAgICByZXR1cm4gW1dlYlZpc2li
bGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSkpXTsK
ICAgICAgICAgCiAgICAgICAgIGN1cnJlbnRWaXNpYmxlUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRp
b24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCAwKSk7CiAgICAgfQpA
QCAtODk5LDExICs4OTYsOCBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJi
ZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjooV2ViVgogICAgICAgICBXZWJW
aXNpYmxlUG9zaXRpb24gKmN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb24gPSBbV2ViVmlzaWJsZVBv
c2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOmN1cnJlbnRWaXNpYmxlUG9zaXRpb25dOwogICAg
ICAgICAKICAgICAgICAgYXV0byogY3VycmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9u
LmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9
IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7Ci0gICAgICAgIEFTU0VSVChsYXN0
T2Zmc2V0ID49IDApOwotICAgICAgICBpZiAobGFzdE9mZnNldCA8IDApCi0gICAgICAgICAgICBy
ZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKLSAgICAgICAgCisgICAgICAgIHVuc2ln
bmVkIGxhc3RPZmZzZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZygqY3VycmVudE5vZGUpOworCiAg
ICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0VmlzaWJsZVBvc2l0aW9uID0gY3VycmVudFZpc2li
bGVQb3NpdGlvbi5uZXh0KCk7CiAgICAgICAgIGlmIChuZXh0VmlzaWJsZVBvc2l0aW9uLmlzTnVs
bCgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CkBAIC05
MTksMTggKzkxMywxOCBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWRE
aWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjooV2ViVgogICAgICAgICAvL0FTU0VS
VChtYXJrZXJzLnNpemUoKSA9PSAxKTsKICAgICAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpID4gMSkK
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAgICBE
b2N1bWVudE1hcmtlciogcmVzdWx0TWFya2VyID0gbWFya2Vycy5hdCgwKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBXZWJDb3JlIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSBtYXJrZXJzIGNv
cnJlY3RseSBkdXJpbmcgZWRpdGluZy4gQmFpbCBpZiByZXN1bHRNYXJrZXIgZXh0ZW5kcyBvZmYg
dGhlIGVkZ2Ugb2YgCi0gICAgICAgIC8vIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0
J3MgaW52YWxpZC4KLSAgICAgICAgaWYgKHJlc3VsdE1hcmtlci0+ZW5kT2Zmc2V0KCkgPiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obGFzdE9mZnNldCkpCisKKyAgICAgICAgYXV0byYgbWFya2VyID0g
Km1hcmtlcnNbMF07CisKKyAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMg
dXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1h
cmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiB0aGlzIG5vZGUsIGJlY2F1c2UgdGhhdCBtZWFu
cyBpdCdzIGludmFsaWQuCisgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBsYXN0T2Zm
c2V0KQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAg
ICAgIAotICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25S
ZXN1bHRNYXJrZXI6cmVzdWx0TWFya2VyLT5tZXRhZGF0YSgpXSkKKyAgICAgICAgaWYgKCFbdWlr
aXREZWxlZ2F0ZSBpc1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0TWFya2VyOldURjo6Z2V0PFJl
dGFpblB0cjxpZD4+KG1hcmtlci5kYXRhKCkpLmdldCgpXSkKICAgICAgICAgICAgIHJldHVybiBj
dXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwogICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdE1h
cmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RPZmZzZXQpKQot
ICAgICAgICAgICAgcmV0dXJuIFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRp
b246VmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9k
ZSwgcmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSkpXTsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRP
ZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdE9mZnNldCkpCisgICAgICAgICAg
ICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxl
UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXJrZXIu
ZW5kT2Zmc2V0KCkpKV07CiAgICAgICAgIAogICAgICAgICBjdXJyZW50VmlzaWJsZVBvc2l0aW9u
ID0gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9k
ZSwgbGFzdE9mZnNldCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQppbmRleCA2ODI4
YWE2N2YxYjAwMTk5NjYzNTdiZTYzOTU4NjcwYThkZTJlNGJmLi42OTFmODUxOTM4ZjgzNTdkNzcw
ZDhjNGY4NGU1ZDJlNmMzZWY5OGVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lv
cy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC00MDQs
NjkgKzQwNCw0NCBAQCAtIChET01SYW5nZSAqKWVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBo
cmFzZUFsdGVybmF0aXZlczooTlNBcnJheSAqKilhbHRlcm5hdAogICAgIEFTU0VSVChhbHRlcm5h
dGl2ZXMpOwogICAgIGlmICghYWx0ZXJuYXRpdmVzKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
ICAgICAKKwogICAgIC8vICphbHRlcm5hdGl2ZXMgc2hvdWxkIG5vdCBhbHJlYWR5IHBvaW50IHRv
IGFuIGFycmF5LgotICAgIEFTU0VSVCghKCphbHRlcm5hdGl2ZXMpKTsKKyAgICBBU1NFUlQoISph
bHRlcm5hdGl2ZXMpOwogICAgICphbHRlcm5hdGl2ZXMgPSBuaWw7Ci0gICAgICAgIAotICAgIFZp
c2libGVQb3NpdGlvbiBwID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHAuaXNO
dWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgIAotICAgIGludCBvID0gcC5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgaWYgKG8gPCAwKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IG87Ci0gICAgCi0gICAg
Tm9kZSogbm9kZSA9IHAuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgRG9jdW1l
bnQmIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBjb25zdCBhdXRvJiBt
YXJrZXJzID0gZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKTsKLSAgICBpZiAobWFya2Vycy5p
c0VtcHR5KCkpCisKKyAgICBhdXRvIHBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07
CisgICAgYXV0byogbm9kZSA9IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgp
OworICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0
IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOworCisgICAgdW5zaWduZWQgb2Zm
c2V0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
OworICAgIGF1dG8mIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBmb3IgKGF1dG8g
bWFya2VyIDogZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKSkgewogICAgICAgICBpZiAobWFy
a2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9m
ZnNldCkgewotICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIG1hcmtlckFsdGVybmF0
aXZlcyA9IG1hcmtlci0+YWx0ZXJuYXRpdmVzKCk7Ci0gICAgICAgICAgICAqYWx0ZXJuYXRpdmVz
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om1hcmtlckFsdGVybmF0aXZlcy5z
aXplKCldOwotICAgICAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBtYXJrZXJBbHRlcm5h
dGl2ZXMuc2l6ZSgpOyBqKyspCi0gICAgICAgICAgICAgICAgWyhOU011dGFibGVBcnJheSAqKSph
bHRlcm5hdGl2ZXMgYWRkT2JqZWN0OihOU1N0cmluZyAqKShtYXJrZXJBbHRlcm5hdGl2ZXNbal0p
XTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+
ZW5kT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7CisgICAg
ICAgICAgICBhdXRvJiBtYXJrZXJBbHRlcm5hdGl2ZXMgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5n
Pj4obWFya2VyLT5kYXRhKCkpOworICAgICAgICAgICAgYXV0byBhcnJheSA9IFtOU011dGFibGVB
cnJheSBhcnJheVdpdGhDYXBhY2l0eTptYXJrZXJBbHRlcm5hdGl2ZXMuc2l6ZSgpXTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgYWx0ZXJuYXRpdmUgOiBtYXJrZXJBbHRlcm5hdGl2ZXMpCisgICAg
ICAgICAgICAgICAgW2FycmF5IGFkZE9iamVjdDphbHRlcm5hdGl2ZV07CisgICAgICAgICAgICAq
YWx0ZXJuYXRpdmVzID0gYXJyYXk7CisgICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVh
dGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5l
bmRPZmZzZXQoKSkucHRyKCkpOwogICAgICAgICB9CiAgICAgfQotICAgICAgICAKICAgICByZXR1
cm4gbmlsOwogfQogCiAtIChET01SYW5nZSAqKWVuY2xvc2luZ1JhbmdlV2l0aENvcnJlY3Rpb25J
bmRpY2F0b3IKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcCA9IFtzZWxmIF92aXNpYmxlUG9zaXRp
b25dOwotICAgIGlmIChwLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAg
IGludCBvID0gcC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0g
ICAgaWYgKG8gPCAwKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIHVuc2lnbmVkIG9mZnNldCA9
IG87Ci0gICAgCi0gICAgTm9kZSogbm9kZSA9IHAuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2Rl
KCk7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAg
ICBjb25zdCBhdXRvJiBtYXJrZXJzID0gZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5v
ZGUsIERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgp
KQorICAgIGF1dG8gcG9zaXRpb24gPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRv
KiBub2RlID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYg
KCFub2RlKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbWFya2Vycy5zaXplKCk7IGkrKykgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtl
ciogbWFya2VyID0gbWFya2Vyc1tpXTsKLSAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQo
KSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKLSAgICAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmV0
dXJuIGtpdChyYW5nZS5wdHIoKSk7Ci0gICAgICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCA9
IHBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAg
ICBhdXRvJiBkb2N1bWVudCA9IG5vZGUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvIG1hcmtl
ciA6IGRvY3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxpbmcpKSB7CisgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0
ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGtp
dChSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5v
ZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpLnB0cigpKTsKICAgICB9Ci0gICAgCiAgICAgcmV0dXJu
IG5pbDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KaW5kZXggN2VmOTNkYjYxMjMz
MzBkYWRlYmM5YmI0MDhkZTRjMWQ1OWRmZWY3Mi4uOGI3YmE1Y2FiYzgxZDc4YjY4YWEyNGJkNWVm
ZjI1YWQyNzhiMmJhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC0zNTgsMTQg
KzM1OCw5IEBAIC0gKFdLUXVhZClhYnNvbHV0ZVF1YWRBbmRJbnNpZGVGaXhlZFBvc2l0aW9uOihC
T09MICopaW5zaWRlRml4ZWQKIAogICAgIGlmIChxdWFkcy5zaXplKCkgPT0gMCkKICAgICAgICAg
cmV0dXJuIHplcm9RdWFkKCk7Ci0KICAgICBpZiAocXVhZHMuc2l6ZSgpID09IDEpCiAgICAgICAg
IHJldHVybiB3a1F1YWRGcm9tRmxvYXRRdWFkKHF1YWRzWzBdKTsKLQotICAgIGF1dG8gYm91bmRp
bmdSZWN0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsg
aSA8IHF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocXVhZHNb
aV0uYm91bmRpbmdCb3goKSk7Ci0gICAgcmV0dXJuIHdrUXVhZEZyb21GbG9hdFF1YWQoYm91bmRp
bmdSZWN0KTsKKyAgICByZXR1cm4gd2tRdWFkRnJvbUZsb2F0UXVhZCh1bml0ZWRCb3VuZGluZ0Jv
eGVzKHF1YWRzKSk7CiB9CiAKIC8vIHRoaXMgbWV0aG9kIGlzIGxpa2UgLSAoQ0dSZWN0KWJvdW5k
aW5nQm94LCBidXQgaXQgYWNjb3VudHMgZm9yIGZvciB0cmFuc2Zvcm1zCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQu
bW0KaW5kZXggM2MzMGQ1N2U2OGNjYTRiNjJlNmI4ZjBkYWRiNDI4MjYwNzEwNGFlZS4uOWFkNDZj
NjA0NzAxMmViM2U0MjM4MDRkNDA3MjA3MDI1N2RjNWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpA
QCAtMTE1NywxMiArMTE1NywxMSBAQCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlUmVxdWVz
dGVkQ2FuZGlkYXRlcyhOU0ludGVnZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYQogICAgICAgICBy
ZXR1cm47CiAKICAgICBJbnRSZWN0IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1
YWRzKHF1YWRzKTsKKyAgICBhdXRvIHF1YWRzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRR
dWFkcygqc2VsZWN0ZWRSYW5nZSk7CiAgICAgaWYgKCFxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAg
IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dp
bmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgLy8gUmFuZ2U6OmFic29sdXRlVGV4dFF1YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3Rh
cnQgb2YgYSBwYXJhZ3JhcGguCisgICAgICAgIC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhl
IHN0YXJ0IG9mIGEgcGFyYWdyYXBoLgogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkK
ICAgICAgICAgICAgIHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzID0gZnJhbWUtPnZpZXcoKS0+
Y29udGVudHNUb1dpbmRvdyhmcmFtZS0+c2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygp
KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpp
bmRleCBlNTVjMzA5MTA1NzU0YmJjYzgwNDdiNzU4MGQ5NzQwZTIxZDMzYWMzLi5iZDlhNjc4MWJi
ZWEwNjExZTJlNGQ3MDQ5NjA4NmNlZmQ1OGIxMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTE3NTcsMTIgKzE3NTcsMTEgQEAgLSAodm9pZCln
ZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6KE5TQXJyYXkgKiopb3V0UmFuZ2VzIGFuZE1ldGFkYXRh
czooTlNBcnJheSAqKikKICAgICBmb3IgKFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSByb290OyBub2Rl
OyBub2RlID0gV2ViQ29yZTo6Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAg
YXV0byBtYXJrZXJzID0gZG9jdW1lbnQtPm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKTsKICAg
ICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7Ci0KICAgICAgICAgICAgIGlmICht
YXJrZXItPnR5cGUoKSAhPSBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBp
ZCBtZXRhZGF0YSA9IG1hcmtlci0+bWV0YWRhdGEoKTsKLSAgICAgICAgICAgIAorCisgICAgICAg
ICAgICBpZCBtZXRhZGF0YSA9IFdURjo6Z2V0PFJldGFpblB0cjxpZD4+KG1hcmtlci0+ZGF0YSgp
KS5nZXQoKTsKKwogICAgICAgICAgICAgLy8gQWxsIHJlc3VsdCBtYXJrZXJzIHNob3VsZCBoYXZl
IG1ldGFkYXRhLgogICAgICAgICAgICAgQVNTRVJUKG1ldGFkYXRhKTsKICAgICAgICAgICAgIGlm
ICghbWV0YWRhdGEpCkBAIC0xODAxLDE1ICsxODAwLDE1IEBAIC0gKGlkKWRpY3RhdGlvblJlc3Vs
dE1ldGFkYXRhRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gbmlsOwotICAgIAorCiAgICAgYXV0byBtYXJrZXJzID0gY29yZShzZWxm
KS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNJblJhbmdlKCpjb3JlKHJhbmdlKSwgV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7Ci0gICAgCisKICAgICAvLyBV
SUtpdCBzaG91bGQgb25seSBldmVyIGdpdmUgdXMgYSBET01SYW5nZSBmb3IgYSBwaHJhc2Ugd2l0
aCBhbHRlcm5hdGl2ZXMsIHdoaWNoIHNob3VsZCBub3QgYmUgcGFydCBvZiBtb3JlIHRoYW4gb25l
IHJlc3VsdC4KICAgICBBU1NFUlQobWFya2Vycy5zaXplKCkgPD0gMSk7CiAgICAgaWYgKG1hcmtl
cnMuc2l6ZSgpID09IDApCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIG1h
cmtlcnNbMF0tPm1ldGFkYXRhKCk7CisKKyAgICByZXR1cm4gV1RGOjpnZXQ8UmV0YWluUHRyPGlk
Pj4obWFya2Vyc1swXS0+ZGF0YSgpKS5nZXQoKTsKIH0KIAogLSAodm9pZClyZWN1cnNpdmVTZXRV
cGRhdGVBcHBlYXJhbmNlRW5hYmxlZDooQk9PTCllbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIubW0KaW5kZXggMmVmYzdmNDk0MDc4Nzc2N2ZlMGU2MmExZWE2MjQ0ZDRjZTA4NjYxZC4u
YWE1MWI2Mzk0ODg4YTcwYjdmMGQ5ZGJhMDUxZmUyNWIxZTE2ZmY5NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbQpAQCAtNDk1LDcgKzQ5NSw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFj
dGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVj
dGVkCiAKICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cElu
Zm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1l
KilmcmFtZSB3aXRoTG9va3VwT3B0aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBp
bmRpY2F0b3JPcHRpb25zOihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JP
cHRpb25zIHRyYW5zaXRpb246KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uKXByZXNlbnRhdGlvblRyYW5zaXRpb24KIHsKLSAgICBXZWJDb3JlOjpFZGl0b3ImIGVk
aXRvciA9IGZyYW1lLT5lZGl0b3IoKTsKKyAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9y
KCk7CiAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CiAK
ICAgICAvLyBEaWN0aW9uYXJ5IEFQSSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBzdHJp
bmcgYW5kIGRpc3BsYXkgVUkgYXMgaWYgaXQgd2VyZSByZWFsIHRleHQsCkBAIC01MDYsMTcgKzUw
NiwxNiBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2U6KFdlYkNvcmU6OlJhbmdlJilyYQogICAgICAgICByZXR1cm4gcG9wdXBJbmZv
OwogICAgIH0KIAotICAgIGNvbnN0IFdlYkNvcmU6OlJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdl
LnN0YXJ0Q29udGFpbmVyKCkucmVuZGVyU3R5bGUoKTsKKyAgICBhdXRvIHN0eWxlID0gcmFuZ2Uu
c3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOwogICAgIGZsb2F0IHNjYWxlZERlc2NlbnQg
PSBzdHlsZSA/IHN0eWxlLT5mb250TWV0cmljcygpLmRlc2NlbnQoKSAqIGZyYW1lLT5wYWdlKCkt
PnBhZ2VTY2FsZUZhY3RvcigpIDogMDsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+
IHF1YWRzOwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBhdXRvIHF1
YWRzID0gV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSk7CiAg
ICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkgewogICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGlj
dGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7CiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAg
fQogCi0gICAgV2ViQ29yZTo6SW50UmVjdCByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250
ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIGF1dG8g
cmFuZ2VSZWN0ID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpKTsKIAogICAgIHBvcHVwSW5mby5vcmlnaW4gPSBOU01ha2VQb2lu
dChyYW5nZVJlY3QueCgpLCByYW5nZVJlY3QueSgpICsgc2NhbGVkRGVzY2VudCk7CiAgICAgcG9w
dXBJbmZvLm9wdGlvbnMgPSBsb29rdXBPcHRpb25zOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdl
TG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDU2ZDVhZDcyZDA2N2JlYWMxMGU3YTEyZTk0NDZm
YTI3MWM2NzM0YjkuLmUyZTgyZjE3YmY4OWVmMTYwZjI3MjUzNGUxZDNkZjQwMzVkNzE5MGYgMTAw
NjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMyBAQAorMjAyMC0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAg
ICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwOgorICAgICAgICAoVGVzdFdlYktp
dEFQSTo6VEVTVCk6IFVwZGF0ZSBmb3IgY2hhbmdlIHRvIERvY3VtZW50TWFya2VyIGNvbnN0cnVj
dG9yLgorCiAyMDIwLTA0LTA0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhIGZvdXJ0aCByb3VuZCBvZiBsb2dnaW5nIHRvIGhlbHAgZGlhZ25v
c2UgPHdlYmtpdC5vcmcvYi8yMDk2ODU+CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9EdW1wUmVuZGVyVHJlZS54Y29kZXByb2oveGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9EdW1wUmVu
ZGVyVHJlZS54Y3NjaGVtZSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhj
b2RlcHJvai94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0R1bXBSZW5kZXJUcmVlLnhjc2NoZW1lCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzYxNzYyOGZlODAyOGFiYjUzNGY3NjFkNmM4
YzRjYmQ2ZTkzZDNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLnhjb2RlcHJvai94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL0R1bXBSZW5kZXJUcmVlLnhjc2NoZW1lCisrKyAvZGV2L251bGwKQEAg
LTEsNzggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxT
Y2hlbWUKLSAgIExhc3RVcGdyYWRlVmVyc2lvbiA9ICIxMTQwIgotICAgdmVyc2lvbiA9ICIxLjMi
PgotICAgPEJ1aWxkQWN0aW9uCi0gICAgICBwYXJhbGxlbGl6ZUJ1aWxkYWJsZXMgPSAiWUVTIgot
ICAgICAgYnVpbGRJbXBsaWNpdERlcGVuZGVuY2llcyA9ICJZRVMiPgotICAgICAgPEJ1aWxkQWN0
aW9uRW50cmllcz4KLSAgICAgICAgIDxCdWlsZEFjdGlvbkVudHJ5Ci0gICAgICAgICAgICBidWls
ZEZvclRlc3RpbmcgPSAiWUVTIgotICAgICAgICAgICAgYnVpbGRGb3JSdW5uaW5nID0gIllFUyIK
LSAgICAgICAgICAgIGJ1aWxkRm9yUHJvZmlsaW5nID0gIllFUyIKLSAgICAgICAgICAgIGJ1aWxk
Rm9yQXJjaGl2aW5nID0gIllFUyIKLSAgICAgICAgICAgIGJ1aWxkRm9yQW5hbHl6aW5nID0gIllF
UyI+Ci0gICAgICAgICAgICA8QnVpbGRhYmxlUmVmZXJlbmNlCi0gICAgICAgICAgICAgICBCdWls
ZGFibGVJZGVudGlmaWVyID0gInByaW1hcnkiCi0gICAgICAgICAgICAgICBCbHVlcHJpbnRJZGVu
dGlmaWVyID0gIjkzNDA5OTRBMDg1NDBDQUUwMDdGM0JDOCIKLSAgICAgICAgICAgICAgIEJ1aWxk
YWJsZU5hbWUgPSAiRHVtcFJlbmRlclRyZWUiCi0gICAgICAgICAgICAgICBCbHVlcHJpbnROYW1l
ID0gIkR1bXBSZW5kZXJUcmVlIgotICAgICAgICAgICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9
ICJjb250YWluZXI6RHVtcFJlbmRlclRyZWUueGNvZGVwcm9qIj4KLSAgICAgICAgICAgIDwvQnVp
bGRhYmxlUmVmZXJlbmNlPgotICAgICAgICAgPC9CdWlsZEFjdGlvbkVudHJ5PgotICAgICAgPC9C
dWlsZEFjdGlvbkVudHJpZXM+Ci0gICA8L0J1aWxkQWN0aW9uPgotICAgPFRlc3RBY3Rpb24KLSAg
ICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyIKLSAgICAgIHNlbGVjdGVkRGVidWdnZXJJ
ZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5EZWJ1Z2dlci5MTERCIgotICAg
ICAgc2VsZWN0ZWRMYXVuY2hlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9u
LkxhdW5jaGVyLkxMREIiCi0gICAgICBzaG91bGRVc2VMYXVuY2hTY2hlbWVBcmdzRW52ID0gIllF
UyI+Ci0gICAgICA8VGVzdGFibGVzPgotICAgICAgPC9UZXN0YWJsZXM+Ci0gICA8L1Rlc3RBY3Rp
b24+Ci0gICA8TGF1bmNoQWN0aW9uCi0gICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiRGVidWci
Ci0gICAgICBzZWxlY3RlZERlYnVnZ2VySWRlbnRpZmllciA9ICJYY29kZS5EZWJ1Z2dlckZvdW5k
YXRpb24uRGVidWdnZXIuTExEQiIKLSAgICAgIHNlbGVjdGVkTGF1bmNoZXJJZGVudGlmaWVyID0g
Ilhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCIgotICAgICAgbGF1bmNoU3R5
bGUgPSAiMCIKLSAgICAgIHVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkgPSAiTk8iCi0gICAgICBp
Z25vcmVzUGVyc2lzdGVudFN0YXRlT25MYXVuY2ggPSAiTk8iCi0gICAgICBkZWJ1Z0RvY3VtZW50
VmVyc2lvbmluZyA9ICJZRVMiCi0gICAgICBkZWJ1Z1NlcnZpY2VFeHRlbnNpb24gPSAiaW50ZXJu
YWwiCi0gICAgICBhbGxvd0xvY2F0aW9uU2ltdWxhdGlvbiA9ICJZRVMiPgotICAgICAgPEJ1aWxk
YWJsZVByb2R1Y3RSdW5uYWJsZQotICAgICAgICAgcnVubmFibGVEZWJ1Z2dpbmdNb2RlID0gIjAi
PgotICAgICAgICAgPEJ1aWxkYWJsZVJlZmVyZW5jZQotICAgICAgICAgICAgQnVpbGRhYmxlSWRl
bnRpZmllciA9ICJwcmltYXJ5IgotICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICI5
MzQwOTk0QTA4NTQwQ0FFMDA3RjNCQzgiCi0gICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIkR1
bXBSZW5kZXJUcmVlIgotICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJEdW1wUmVuZGVyVHJl
ZSIKLSAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFpbmVyOkR1bXBSZW5k
ZXJUcmVlLnhjb2RlcHJvaiI+Ci0gICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KLSAgICAg
IDwvQnVpbGRhYmxlUHJvZHVjdFJ1bm5hYmxlPgotICAgPC9MYXVuY2hBY3Rpb24+Ci0gICA8UHJv
ZmlsZUFjdGlvbgotICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCi0gICAgICBz
aG91bGRVc2VMYXVuY2hTY2hlbWVBcmdzRW52ID0gIllFUyIKLSAgICAgIHNhdmVkVG9vbElkZW50
aWZpZXIgPSAiIgotICAgICAgdXNlQ3VzdG9tV29ya2luZ0RpcmVjdG9yeSA9ICJOTyIKLSAgICAg
IGRlYnVnRG9jdW1lbnRWZXJzaW9uaW5nID0gIllFUyI+Ci0gICAgICA8QnVpbGRhYmxlUHJvZHVj
dFJ1bm5hYmxlCi0gICAgICAgICBydW5uYWJsZURlYnVnZ2luZ01vZGUgPSAiMCI+Ci0gICAgICAg
ICA8QnVpbGRhYmxlUmVmZXJlbmNlCi0gICAgICAgICAgICBCdWlsZGFibGVJZGVudGlmaWVyID0g
InByaW1hcnkiCi0gICAgICAgICAgICBCbHVlcHJpbnRJZGVudGlmaWVyID0gIjkzNDA5OTRBMDg1
NDBDQUUwMDdGM0JDOCIKLSAgICAgICAgICAgIEJ1aWxkYWJsZU5hbWUgPSAiRHVtcFJlbmRlclRy
ZWUiCi0gICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIkR1bXBSZW5kZXJUcmVlIgotICAgICAg
ICAgICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6RHVtcFJlbmRlclRyZWUueGNv
ZGVwcm9qIj4KLSAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgotICAgICAgPC9CdWlsZGFi
bGVQcm9kdWN0UnVubmFibGU+Ci0gICA8L1Byb2ZpbGVBY3Rpb24+Ci0gICA8QW5hbHl6ZUFjdGlv
bgotICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIkRlYnVnIj4KLSAgIDwvQW5hbHl6ZUFjdGlv
bj4KLSAgIDxBcmNoaXZlQWN0aW9uCi0gICAgICBidWlsZENvbmZpZ3VyYXRpb24gPSAiUmVsZWFz
ZSIKLSAgICAgIHJldmVhbEFyY2hpdmVJbk9yZ2FuaXplciA9ICJZRVMiPgotICAgPC9BcmNoaXZl
QWN0aW9uPgotPC9TY2hlbWU+CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvTWFya2VkVGV4dC5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNv
cmUvTWFya2VkVGV4dC5jcHAKaW5kZXggMDY4MWNhYjQzNjdjNTIzNmE5YjU2NDI4YWQ2ZjEwNzQ1
YmE5MTc4MS4uNmE4ZTU3MjkxYmY1ZDAxNjc2OGQ4ZTI5MmUyYjhjNjdhYzAwODVmYiAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCisr
KyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0LmNwcApAQCAt
OTAsNyArOTAsNyBAQCBURVNUKE1hcmtlZFRleHQsIFN1YmRpdmlkZVNpbXBsZSkKIAogVEVTVChN
YXJrZWRUZXh0LCBTdWJkaXZpZGVTcGVsbGluZ0FuZEdyYW1tYXJTaW1wbGUpCiB7Ci0gICAgUmVu
ZGVyZWREb2N1bWVudE1hcmtlciBncmFtbWFyRXJyb3JNYXJrZXIgeyBEb2N1bWVudE1hcmtlciB7
IERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCA3LCA4IH0gfTsKKyAgICBSZW5kZXJlZERvY3VtZW50
TWFya2VyIGdyYW1tYXJFcnJvck1hcmtlciB7IERvY3VtZW50TWFya2VyIHsgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXIsIHsgNywgOCB9IH0gfTsKICAgICBWZWN0b3I8TWFya2VkVGV4dD4gZXhwZWN0
ZWRNYXJrZWRUZXh0cyB7CiAgICAgICAgIE1hcmtlZFRleHQgeyBncmFtbWFyRXJyb3JNYXJrZXIu
c3RhcnRPZmZzZXQoKSwgZ3JhbW1hckVycm9yTWFya2VyLmVuZE9mZnNldCgpLCBNYXJrZWRUZXh0
OjpHcmFtbWFyRXJyb3IsICZncmFtbWFyRXJyb3JNYXJrZXIgfSwKICAgICAgICAgTWFya2VkVGV4
dCB7IDIyLCAzMiwgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJvciB9LApkaWZmIC0tZ2l0IGEvVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai94Y3NoYXJlZGRh
dGEveGNzY2hlbWVzL1dlYktpdFRlc3RSdW5uZXIueGNzY2hlbWUgYi9Ub29scy9XZWJLaXRUZXN0
UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMv
V2ViS2l0VGVzdFJ1bm5lci54Y3NjaGVtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
OWY5ODFhM2ZmMWMxOTAzNTg0MDAwYjA2ZmRlOGI4Zjk2OGQwOTAzMS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Ub29scy9XZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvV2ViS2l0VGVz
dFJ1bm5lci54Y3NjaGVtZQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZl
cnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08U2NoZW1lCi0gICBMYXN0VXBncmFkZVZl
cnNpb24gPSAiMTE0MCIKLSAgIHZlcnNpb24gPSAiMS4zIj4KLSAgIDxCdWlsZEFjdGlvbgotICAg
ICAgcGFyYWxsZWxpemVCdWlsZGFibGVzID0gIllFUyIKLSAgICAgIGJ1aWxkSW1wbGljaXREZXBl
bmRlbmNpZXMgPSAiWUVTIj4KLSAgICAgIDxCdWlsZEFjdGlvbkVudHJpZXM+Ci0gICAgICAgICA8
QnVpbGRBY3Rpb25FbnRyeQotICAgICAgICAgICAgYnVpbGRGb3JUZXN0aW5nID0gIllFUyIKLSAg
ICAgICAgICAgIGJ1aWxkRm9yUnVubmluZyA9ICJZRVMiCi0gICAgICAgICAgICBidWlsZEZvclBy
b2ZpbGluZyA9ICJZRVMiCi0gICAgICAgICAgICBidWlsZEZvckFyY2hpdmluZyA9ICJZRVMiCi0g
ICAgICAgICAgICBidWlsZEZvckFuYWx5emluZyA9ICJZRVMiPgotICAgICAgICAgICAgPEJ1aWxk
YWJsZVJlZmVyZW5jZQotICAgICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRpZmllciA9ICJwcmlt
YXJ5IgotICAgICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICI4REQ3NkY5NjA0ODZB
QTc2MDBEOTZCNUUiCi0gICAgICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIldlYktpdFRlc3RS
dW5uZXIiCi0gICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIldlYktpdFRlc3RSdW5uZXIi
Ci0gICAgICAgICAgICAgICBSZWZlcmVuY2VkQ29udGFpbmVyID0gImNvbnRhaW5lcjpXZWJLaXRU
ZXN0UnVubmVyLnhjb2RlcHJvaiI+Ci0gICAgICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4K
LSAgICAgICAgIDwvQnVpbGRBY3Rpb25FbnRyeT4KLSAgICAgIDwvQnVpbGRBY3Rpb25FbnRyaWVz
PgotICAgPC9CdWlsZEFjdGlvbj4KLSAgIDxUZXN0QWN0aW9uCi0gICAgICBidWlsZENvbmZpZ3Vy
YXRpb24gPSAiRGVidWciCi0gICAgICBzZWxlY3RlZERlYnVnZ2VySWRlbnRpZmllciA9ICJYY29k
ZS5EZWJ1Z2dlckZvdW5kYXRpb24uRGVidWdnZXIuTExEQiIKLSAgICAgIHNlbGVjdGVkTGF1bmNo
ZXJJZGVudGlmaWVyID0gIlhjb2RlLkRlYnVnZ2VyRm91bmRhdGlvbi5MYXVuY2hlci5MTERCIgot
ICAgICAgc2hvdWxkVXNlTGF1bmNoU2NoZW1lQXJnc0VudiA9ICJZRVMiPgotICAgICAgPFRlc3Rh
Ymxlcz4KLSAgICAgIDwvVGVzdGFibGVzPgotICAgPC9UZXN0QWN0aW9uPgotICAgPExhdW5jaEFj
dGlvbgotICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIkRlYnVnIgotICAgICAgc2VsZWN0ZWRE
ZWJ1Z2dlcklkZW50aWZpZXIgPSAiWGNvZGUuRGVidWdnZXJGb3VuZGF0aW9uLkRlYnVnZ2VyLkxM
REIiCi0gICAgICBzZWxlY3RlZExhdW5jaGVySWRlbnRpZmllciA9ICJYY29kZS5EZWJ1Z2dlckZv
dW5kYXRpb24uTGF1bmNoZXIuTExEQiIKLSAgICAgIGxhdW5jaFN0eWxlID0gIjAiCi0gICAgICB1
c2VDdXN0b21Xb3JraW5nRGlyZWN0b3J5ID0gIk5PIgotICAgICAgaWdub3Jlc1BlcnNpc3RlbnRT
dGF0ZU9uTGF1bmNoID0gIk5PIgotICAgICAgZGVidWdEb2N1bWVudFZlcnNpb25pbmcgPSAiWUVT
IgotICAgICAgZGVidWdTZXJ2aWNlRXh0ZW5zaW9uID0gImludGVybmFsIgotICAgICAgYWxsb3dM
b2NhdGlvblNpbXVsYXRpb24gPSAiWUVTIj4KLSAgICAgIDxCdWlsZGFibGVQcm9kdWN0UnVubmFi
bGUKLSAgICAgICAgIHJ1bm5hYmxlRGVidWdnaW5nTW9kZSA9ICIwIj4KLSAgICAgICAgIDxCdWls
ZGFibGVSZWZlcmVuY2UKLSAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSAicHJpbWFy
eSIKLSAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiOERENzZGOTYwNDg2QUE3NjAw
RDk2QjVFIgotICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJXZWJLaXRUZXN0UnVubmVyIgot
ICAgICAgICAgICAgQmx1ZXByaW50TmFtZSA9ICJXZWJLaXRUZXN0UnVubmVyIgotICAgICAgICAg
ICAgUmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6V2ViS2l0VGVzdFJ1bm5lci54Y29k
ZXByb2oiPgotICAgICAgICAgPC9CdWlsZGFibGVSZWZlcmVuY2U+Ci0gICAgICA8L0J1aWxkYWJs
ZVByb2R1Y3RSdW5uYWJsZT4KLSAgIDwvTGF1bmNoQWN0aW9uPgotICAgPFByb2ZpbGVBY3Rpb24K
LSAgICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJSZWxlYXNlIgotICAgICAgc2hvdWxkVXNlTGF1
bmNoU2NoZW1lQXJnc0VudiA9ICJZRVMiCi0gICAgICBzYXZlZFRvb2xJZGVudGlmaWVyID0gIiIK
LSAgICAgIHVzZUN1c3RvbVdvcmtpbmdEaXJlY3RvcnkgPSAiTk8iCi0gICAgICBkZWJ1Z0RvY3Vt
ZW50VmVyc2lvbmluZyA9ICJZRVMiPgotICAgICAgPEJ1aWxkYWJsZVByb2R1Y3RSdW5uYWJsZQot
ICAgICAgICAgcnVubmFibGVEZWJ1Z2dpbmdNb2RlID0gIjAiPgotICAgICAgICAgPEJ1aWxkYWJs
ZVJlZmVyZW5jZQotICAgICAgICAgICAgQnVpbGRhYmxlSWRlbnRpZmllciA9ICJwcmltYXJ5Igot
ICAgICAgICAgICAgQmx1ZXByaW50SWRlbnRpZmllciA9ICI4REQ3NkY5NjA0ODZBQTc2MDBEOTZC
NUUiCi0gICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gIldlYktpdFRlc3RSdW5uZXIiCi0gICAg
ICAgICAgICBCbHVlcHJpbnROYW1lID0gIldlYktpdFRlc3RSdW5uZXIiCi0gICAgICAgICAgICBS
ZWZlcmVuY2VkQ29udGFpbmVyID0gImNvbnRhaW5lcjpXZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJv
aiI+Ci0gICAgICAgICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4KLSAgICAgIDwvQnVpbGRhYmxlUHJv
ZHVjdFJ1bm5hYmxlPgotICAgPC9Qcm9maWxlQWN0aW9uPgotICAgPEFuYWx5emVBY3Rpb24KLSAg
ICAgIGJ1aWxkQ29uZmlndXJhdGlvbiA9ICJEZWJ1ZyI+Ci0gICA8L0FuYWx5emVBY3Rpb24+Ci0g
ICA8QXJjaGl2ZUFjdGlvbgotICAgICAgYnVpbGRDb25maWd1cmF0aW9uID0gIlJlbGVhc2UiCi0g
ICAgICByZXZlYWxBcmNoaXZlSW5Pcmdhbml6ZXIgPSAiWUVTIj4KLSAgIDwvQXJjaGl2ZUFjdGlv
bj4KLTwvU2NoZW1lPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI2YWY0NmQzNWNiZjZlMzQ5NGI0YjMzMmE1NGNhNmZhNjUx
ZDM0YjcuLmE5ZTJlMjRmYWM2ZWE0MDczYTFlNGNiYmUxZDVlYWZiOWJmMTcyOTIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAyMC0wNC0wNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIw
OTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dDog
UmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhp
dHRlc3QuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXIt
dGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAgICAgICogZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQuaHRtbDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHls
ZWQtZXhwZWN0ZWQucG5nOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9UZXN0RXhw
ZWN0YXRpb25zOiBSZW1vdmVkIGV4cGVjdGF0aW9uIGZvciBzY3JvbGxiYXItdGlja21hcmtzLgor
ICAgICAgICBUaGVzZSB3ZXJlIENocm9taXVtLXNwZWNpZmljIHRlc3RzLgorCiAyMDIwLTA0LTA0
ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICAnXHUn
IHNob3VsZCB0aHJvdyBhbiBlYXJseSBTeW50YXhFcnJvciBleGNlcHRpb24sIGJ1dCBpbnN0ZWFk
IGV2YWx1YXRlcyB0byAndScKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3QtZXhwZWN0ZWQudHh0CmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZTEyOTk1YmZjZjIzYzk3Nzc0YWJkNmQxZTEz
NDY2NTIwM2ZiNTQ0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVz
dC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1DaGVja3MgdGhh
dCBjbGlja2luZyBvbiBzY3JvbGxiYXIgd29ya3Mgd2hlbiB0aWNrbWFya3MgYXJlIGFkZGVkLgot
Ci1PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCi0KLQotUEFTUyBkaWQgc2Nyb2xsCi1QQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLcKgCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3Qu
aHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0
dGVzdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzQxMzFjMTliMDgwOTEy
MjhjMGJkOTNjOGIzODU2Y2QwNWY0NGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNr
bWFya3MtaGl0dGVzdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+
Ci08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
LTxib2R5IHN0eWxlPSJtaW4taGVpZ2h0OiA1MDAwcHgiPiAKLTxzcGFuIGlkPSJlbHQiPiZuYnNw
Ozwvc3Bhbj4KLQotPHNjcmlwdD4KLWRlc2NyaXB0aW9uKCdDaGVja3MgdGhhdCBjbGlja2luZyBv
biBzY3JvbGxiYXIgd29ya3Mgd2hlbiB0aWNrbWFya3MgYXJlIGFkZGVkLicpOwotb25sb2FkID0g
ZnVuY3Rpb24oKQotewotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1
bm5lci5kdW1wQXNUZXh0KCk7Ci0gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2Uo
KTsKLSAgICB2YXIgZWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VsdCcpOwotICAgIHJh
bmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbHQpOwotICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
Ci0gICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCB0cnVl
KTsKLSAgICB9Ci0gICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVy
LmRpc3BsYXlBbmRUcmFja1JlcGFpbnRzKCk7Ci0gICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikg
ewotICAgICAgICBldmVudFNlbmRlci5tb3VzZU1vdmVUbyh3aW5kb3cuaW5uZXJXaWR0aCAtIDEs
IHdpbmRvdy5pbm5lckhlaWdodCAtIDEpOwotICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24o
KTsKLSAgICAgICAgZXZlbnRTZW5kZXIubW91c2VVcCgpOwotICAgIH0KLX0KLQotb25zY3JvbGwg
PSBmdW5jdGlvbigpCi17Ci0gICAgdGVzdFBhc3NlZCgnZGlkIHNjcm9sbCcpOwotICAgIGZpbmlz
aEpTVGVzdCgpOwotfQotCi12YXIganNUZXN0SXNBc3luYyA9IHRydWU7Ci08L3NjcmlwdD4KLQot
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgot
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGlu
Zy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmYWYyMmEyZTE4ODI3MTQzODJiMWI0MmMyMzk0
ZDQ2YzQ4MjgxNTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQt
ZXhwZWN0ZWQudHh0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotwqAKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxl
ZC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGIzZmUzMmUyNGJkNTYyNzVh
OTFjZjZlOGJiYmEzMDVhNzhjMTBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3Mtc3R5bGVkLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IURPQ1RZUEUg
aHRtbD4KLTxoZWFkPgotPHN0eWxlPgotaHRtbCB7Ci0gICAgZm9udDogQWhlbSAxMHB4OwotICAg
IC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IG5vbmU7Ci19Ci06Oi13ZWJraXQtc2Nyb2xsYmFyIHsK
LSAgICB3aWR0aDogMTNweDsKLSAgICBoZWlnaHQ6IDEzcHg7Ci19Ci06Oi13ZWJraXQtc2Nyb2xs
YmFyLXRyYWNrIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOmdyZWVuOwotfQotOjotd2Via2l0LXNj
cm9sbGJhci10aHVtYiB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyOCwgMTI4LCAxMjgs
IDAuOCk7ICAvKiBMZXQgdGlja21hcmsgc2hpbmUgdGhyb3VnaCAqLwotfQotPC9zdHlsZT4KLTxz
Y3JpcHQ+Ci1mdW5jdGlvbiBoaWdobGlnaHQoKQotewotICAgIHZhciByYW5nZSA9IGRvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdl
bHQnKTsKLSAgICByYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWx0KTsKLSAgICBpZiAod2luZG93
LmludGVybmFscykgewotICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmFkZFRleHRNYXRjaE1hcmtl
cihyYW5nZSwgdHJ1ZSk7Ci0gICAgfQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAg
ICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KHRydWUpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08
Ym9keSBvbmxvYWQ9ImhpZ2hsaWdodCgpOyI+Ci0KLTxkaXYgc3R5bGU9ImhlaWdodDo2MDBweCI+
PC9kaXY+Ci08c3BhbiBpZD0iZWx0IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDozMDBw
eCI+Jm5ic3A7PC9zcGFuPgotCi08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9ndGsvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHls
ZWQtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnBuZwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMjRhOGEzYTEzMzZkOGQ1MTMyODZlY2EwNTVkZDg3NzYyMTU0MWIwZS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNo
CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKbGl0ZXJhbCAyODc4CnpjbWVBU0BOPyhvbEh5YHVWQnEh
aWEweX55VXsrdllWMmE+aTAqWik9aF5obEElQFdzJGxIYG9rPG19P29UbjBsRQp6R1ljY2JSQVUy
K0IlPyZydl4weFUhISlDbXdCJSYtUkk/PCpxfnduO3pDUXRLVm9VT05jVllNc2YoIU84cFVsOSgK
endhP1NWRntFUDcrWiE4c1RPMCZmOVEjcl9uQEBaWHdwYzlhNnJiOV5GKWpRMDg1c3RLb0VgNzcp
NjQ4PyolPVAoCno3bVEkRkZsPU9INUQqP15qMFZESk4qSylycXEkJS03bVZoRChPZldeM3IyR1It
ZHFyRXtQYE8lMUg9NmRAM3RDJApuS0ZHdy0hS3VVMEZ5akUoaksyKTYqKncqZTJieG9XWkNlSVVT
M2ozXlA2PHJfaWQ/V1kKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVz
dEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25z
CmluZGV4IDBmMDQ1OWMzYjVjNzE0ZDdiZDdjYjcxY2Q3YWM0ODU1ZmNjMTRmZTUuLjE2NDhlOTZk
YzcxZGY4MzNkOTViZjQyYzRhMWRmZDZjMWFkODc3NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2lvcy9UZXN0RXhwZWN0YXRpb25zCkBAIC02ODcsNyArNjg3LDYgQEAgZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsLWFuaW1hdG9yLW92ZXJsYXktc2Nyb2xsYmFycy1ob3ZlcmVkLmh0bWwgWyBTa2lwIF0K
IGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbC1hbmltYXRvci1zZWxlY3QtbGlzdC1ldmVudHMuaHRtbCBb
IFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLW1vdXNlZG93bi1tb3VzZXVwLmh0bWwg
WyBTa2lwIF0KIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci1tb3VzZWRvd24tbW92ZS1tb3VzZXVw
Lmh0bWwgWyBTa2lwIF0KLWZhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVz
dC5odG1sIFsgU2tpcCBdCiBmYXN0L3NlbGVjdG9ycy9hY3RpdmUtaG92ZXItcXVpcmtzLmh0bWwg
WyBTa2lwIF0KIGZhc3Qvc2VsZWN0b3JzL2FjdGl2ZS1ob3Zlci1zdHJpY3QuaHRtbCBbIFNraXAg
XQogZmFzdC9zZWxlY3RvcnMvYWN0aXZlLXF1aXJrcy5odG1sIFsgU2tpcCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395514</attachid>
            <date>2020-04-05 10:12:15 -0700</date>
            <delta_ts>2020-04-05 17:43:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200405101213.patch</filename>
            <type>text/plain</type>
            <size>205627</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4YTBiY2Y2ODA3MzAxZTM5ZmU2NDE4
NDkxM2VlYzllZTMyMGRlMDEuLjVkMTJkMjMzYjUwNDFjMjU1YTE1NDA0YjdjOGQyOWJlN2RkOWY3
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRGVmaW5lICJpZCIgaGVyZSB3aGVuIGNvbXBpbGlu
ZyBub24tT2JqQyBzbyBpdCdzIGVhc2llciB0byB1c2UKKyAgICAgICAgUmV0YWluUHRyPGlkPiBp
biBhbnkgaGVhZGVyIGZpbGUuIExldHMgdXMgc3RvcCBkb2luZyB0aGlzIG1hbnkgb3RoZXIgcGxh
Y2VzLgorICAgICAgICBIYXJtbGVzcyB3aGVuIG5vdCBuZWVkZWQuCisKIDIwMjAtMDQtMDQgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NsYW5n
IDEwXSBGaXggLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiBjb21waWxhdGlvbiB3YXJu
aW5ncyBpbiBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBjN2UxNTc0MjNjYjk1ZDY5YWIxNmJiYjE2ZWMyZDY2
M2MyMWU2NzE2Li4zNDIyOGEyZDIyYTAxMzIzOTg3ZjBjMmQyMTQ1MmFiYzMwNzBjMWE0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjgxIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW1vdmVkIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuCisgICAgICAgIC0gUmVtb3ZlZCAiYWN0aXZlL2luYWN0aXZlIHRleHQgbWF0
Y2ggbWFya2VyIiwgd2hpY2ggd2FzIG9ubHkgZXZlciB1c2VkCisgICAgICAgICAgYnkgQ2hyb21p
dW0sIGFuZCBoYXMgYmVlbiBkZWFkIGNvZGUgaW4gV2ViS2l0IGZvciB3aGlsZSBub3cuCisgICAg
ICAgIC0gTWFkZSBhIHJlcGxhY2VtZW50IGZvciBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMsIGlu
IFJlbmRlck9iamVjdCwKKyAgICAgICAgICBhbmQgbW92ZWQgYWxsIGNhbGxlcnMgb3Zlci4KKyAg
ICAgICAgLSBBZGRlZCBhIGZhc3QgcGF0aCBmb3IgTm9kZTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSB0
aGF0IG1ha2VzIGl0IHdvcmsKKyAgICAgICAgICB3aXRob3V0IGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsIGZvciB0aGUgY29tbW9uIG5vZGUgdHlwZXMuCisgICAgICAgIC0gQWRkZWQgYSBOb2RlOjps
ZW5ndGggZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbidzCisgICAg
ICAgICAgZGVmaW5pdG9uIG9mIGEgbm9kZSdzIGxlbmd0aCwgcGFydCBvZiBob3cgcmFuZ2VzIGFy
ZSBkZWZpbmVkLgorICAgICAgICAtIEFkZGVkIGEgc3RydWN0dXJlIE9mZnNldFJhbmdlIHRvIHJl
cHJlc2VudCBzdGFydC9lbmQgb2Zmc2V0cyB3aXRoaW4KKyAgICAgICAgICBhIHNpbmdsZSBjaGFy
YWN0ZXIgZGF0YSBub2RlLiBUaGlzIGlzIGEgY29tbW9uIGlkaW9tIHRvIGhhbmRsZSBwb3NzaWJs
ZQorICAgICAgICAgIHBhcnRpYWwgc2VsZWN0aW9uIG9mIHRleHQgbm9kZXMgYXQgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHdoZW4KKyAgICAgICAgICBpdGVyYXRpbmcgdGV4dCB3aXRo
aW4gYSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIERvY3VtZW50TWFya2VyIGZ1bmN0aW9ucyB0
byB1c2UgT2Zmc2V0UmFuZ2UuCisgICAgICAgIC0gQWRkZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig
dHVybmluZyBhIHZlY3RvciBvZiBxdWFkcyBpbnRvIGEgdmVjdG9yCisgICAgICAgICAgb2YgYm91
bmRpbmcgYm94IHJlY3RhbmdsZXMsIGFuZCBmb3IgY29tcHV0aW5nIGEgdW5pb24gb2YgYWxsIHRo
ZQorICAgICAgICAgIHJlY3RhbmdsZXMsIHNpbmNlIGJvdGggb2YgdGhlc2UgYXJlIGNvbW1vbiBj
b2RpbmcgcGF0dGVybnMuCisgICAgICAgIC0gQWRkZWQgYW4gaW50ZXJzZWN0aW5nTm9kZXMgZnVu
Y3Rpb24sIHByb2R1Y2luZyBhIGZvci1sb29wLWNvbXBhdGlibGUKKyAgICAgICAgICByYW5nZSBm
b3IgaXRlcmF0aW5nIGFsbCBub2RlcyBjb3ZlcmVkIGJ5IGEgRE9NIHJhbmdlLgorICAgICAgICAt
IENoYW5nZWQgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzbyBp
dCBjYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGhvdXQgYW4gI2lmIGF0IGVhY2ggY2FsbCBzaXRl
LCBleHBhbmRzIHRvIG5vdGhpbmcgaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIC0gRWxpbWlu
YXRlZCB1c2VzIG9mIFJldGFpblB0cjxpZD4gaW5zdGVhZCBvZiBqdXN0IGlkIHRvIHBhc3MgYXJn
dW1lbnRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRlZCBzaW5jZSBp
c0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1YWwgZnVuY3Rp
b24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRJbnNlcnRlZCk6IFBhc3MgYW4gT2Zmc2V0UmFuZ2UgdG8gcmVtb3ZlTWFya2Vy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0UmVtb3ZlZCk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6IFJlbW92ZWQgbW9zdCBwbGF0Zm9ybS1zcGVj
aWZpYyBmdW5jdGlvbnMuCisgICAgICAgIFJlbW92ZWQgdGhlIGFjdGl2ZSBtYXRjaCBib29sZWFu
LCB3aGljaCB3YXMgb25seSBldmVyIHVzZWQgZm9yIENocm9taXVtLgorICAgICAgICBVc2UgT2Zm
c2V0UmFuZ2UuIFVwZGF0ZWQgc29tZSBvYnNvbGV0ZSBjb21tZW50cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0
VGV4dFJhbmdlcyk6IENoYW5nZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gcmV0dXJuIGEgc3Ry
dWN0dXJlIHdpdGggYSBub2RlIGFuZCBhbiBvZmZzZXQgcmFuZ2UgcmF0aGVyIHRoYW4gdXNpbmcg
YQorICAgICAgICBTaW1wbGVSYW5nZTsgYWRkcyBjbGFyaXR5IHRvIHRoZSBmYWN0IHRoYXQgaXQn
cyBndXJhbnRlZWQgdG8gYmUgb25seSBhCisgICAgICAgIHNpbmdsZSBub2RlLiBNYXkgZXZlbiB3
YW50IHRvIGNvbnNpZGVyIHNvbWUgZGF5IG1vdmluZyBUZXh0SXRlcmF0b3Igb3ZlcgorICAgICAg
ICB0byB0aGlzLCBidXQgaXQncyBkZWZpbml0ZWx5IGJldHRlciBoZXJlIGZvciBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6IFVwZGF0
ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29sbGVjdFRleHRSYW5nZXMgYW5kIHRvIERv
Y3VtZW50TWFya2VyIGNvbnN0cnVjdGlvbiwgYW5kIHRvIHVzZSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgc3ludGF4IHRoYXQgZG9lc24ndCByZXBlYXQgdGhlIERvY3VtZW50TWFya2VyIGNsYXNzIG5h
bWUuIERlbGV0ZWQgb3ZlcmxvYWRzCisgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRv
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKTogVXBkYXRl
ZCBhcyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IEZpeCBhIG1pc3Rha2Ug
d2hlcmUgY29weWluZworICAgICAgICBtYXJrZXJzIHdvdWxkIGhhdmUgYSBzaWRlIGVmZmVjdCBv
ZiBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKTogSnVzdCBoYXZlIHRoaXMgY2FsbAorICAgICAg
ICBmaWx0ZXJNYXJrZXJzIHdpdGggbnVsbCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogVXBkYXRlZCBm
b3IgdGhlIGNoYW5nZSB0bworICAgICAgICBjb2xsZWN0VGV4dFJhbmdlcyBhbmQgdG8gcGFzcyBh
IE9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1h
cmtlcik6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZQorICAgICAgICByYW5nZS4g
VXNlIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgYm91bmRpbmdC
b3hlcyBmdW5jdGlvbnMKKyAgICAgICAgdG8gbWFrZSB0aGlzIGNsZWFyZXIgYW5kIHNpbXBsZXIu
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKTogVXBkYXRl
IGZvciBjaGFuZ2VzIHRvIERvY3VtZW50TWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5z
dGVhZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51
c2VkICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNz
aW5nIDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0
aWxsIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmZvckVhY2gpOiBBZGRlZC4gU2hhcmVkIGxvZ2ljIGZvciB0aGUgbXVsdGlwbGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgaXRlcmF0ZSB0aGUgbWFya2VycyBjb3ZlcmVkIGJ5IGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6IFNpbXBsaWZpZWQgbG9vcHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOiBE
ZWxldGVkLiBXYXMgb25seQorICAgICAgICB1c2VkIGZvciBDaHJvbWl1bSBhbmQgaGFzIGJlZW4g
ZGVhZCBjb2RlIHNpbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UpOgorICAgICAgICBDYWxsIGZvckVhY2guCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZHNJblJvb3RWaWV3
U3BhY2UpOiBVc2UgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmFic29sdXRlRXZlbnRCb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG91dExheW91dCk6IERpdHRvLgorCisgICAgICAg
ICogZG9tL05vZGUuaDogQWRkZWQgaW5saW5lIGZhc3QgcGF0aCBmb3IgaXNDaGFyYWN0ZXJEYXRh
Tm9kZS4KKyAgICAgICAgTW92ZWQgc29tZSBpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG91dCBvZiBj
bGFzcyBkZWZpbml0aW9uIHNvIGl0J3MKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQgaXQgYW5kIGdl
dCBhbiBvdmVydmlldy4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogVXNlIGJvdW5k
aW5nQm94ZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmg6IERl
bGV0ZWQgYWJzb2x1dGVUZXh0UXVhZHMuCisKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oOiBVc2UgcnZhbHVlIHJlZmVyZW5jZXMgYW5kIG1vdmUuCisKKyAgICAgICAgKiBk
b20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdElzQ2hhcmFjdGVyRGF0
YSk6IERlbGV0ZWQuIE1vdmVkIHRoZSBvcHRpbWl6YXRpb25zIGludG8KKyAgICAgICAgTm9kZTo6
aXNDaGFyYWN0ZXJEYXRhTm9kZSBzbyBub3cgYWxsIGNhbGxlcnMgZ2V0IHRoZW0uCisgICAgICAg
IChXZWJDb3JlOjpsZW5ndGgpOiBEZWxldGVkLiBNb3ZlZCB0byBOb2RlOjpsZW5ndGguCisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogVXNlIE5v
ZGU6Omxlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmly
c3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5n
ZTo6c2VudGluZWwgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yOjpvcGVyYXRvcisrKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuaDogQWRkZWQgaW50ZXJzZWN0aW5nTm9kZXMgZnVuY3Rpb24sIGFuZCB0aGUKKyAgICAgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlIGFuZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgY2xhc3Nl
cyB1c2VkCisgICAgICAgIHRvIG1ha2UgaXQgd29yay4gQWRkZWQgdGhlIE9mZnNldFJhbmdlIHN0
cnVjdHVyZSBhbmQgdGhlCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5jdGlv
biwgYWxzbyB0byBoZWxwIHdpdGggaXRlcmF0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgVGFr
ZSBvdXQgdW5uZWVkZWQgaG9sZHNfYWx0ZXJuYXRpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRl
cm5hdGl2ZSk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGVzLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6IFBhc3MgcmVm
ZXJlbmNlIHRvIHJhbmdlCisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8gcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgIFRha2UgYSBT
aW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4gQWxzbyB1c2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAg
ICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVBy
ZXNlcnZpbmdNYXJrZXJzKToKKyAgICAgICAgUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIHNpbmNl
IHdlIGNhbiBjb3B5IG1hcmtlciBkYXRhIHdpdGhvdXQKKyAgICAgICAgc2VwYXJhdGUgY29kZSBm
b3IgZWFjaCB0eXBlLiBBbHNvIHVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5n
ZS4KKworICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHA6IENhbGwgYWRkTWFy
a2VyIGluc3RlYWQgb2YKKyAgICAgICAgYWRkTWFya2VyVG9Ob2RlLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0
ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICBSZW1vdmVkIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOiBSZW1vdmUgdXNlIG9mIFJldGFpblB0cjxpZD4gZm9yIGFyZ3VtZW50
cy4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgTWVyZ2VkIHRoZSBsb2dpYyBmcm9tIGdldFRleHRS
ZWN0YW5nbGVzIGluIGhlcmUsIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCBib3VuZGluZ0JveGVzLgorICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICB0
aGUgY29weU1hcmtlcnMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFu
ZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpE
aWN0YXRpb25Db21tYW5kSU9TKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBSZXRhaW5QdHI8aWQ+
IGZvciBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpj
cmVhdGUpOiBNb3ZlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZElPUzo6ZG9BcHBseSk6IFVwZGF0ZWQgdG8gZG8gdGhlIHdvcmsgaGVyZQorICAgICAgICBz
aW5jZSB3ZSBkb24ndCBoYXZlIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIgYW55IG1vcmUuCisgICAgICAgIFNwZWNpZmljYWxseSwgcmVtb3ZlIHRoZSBmaXJzdCBpbnRl
cnByZXRhdGlvbiwgd2hpY2ggbGVhdmVzIGJlaGluZCBhCisgICAgICAgIHZlY3RvciBvZiBhbHRl
cm5hdGl2ZXMuIFNhbWUgZm9yIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlci4KKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyk6IFRha2UgaWQgaW5zdGVhZCBvZgorICAg
ICAgICBSZXRhaW5QdHI8aWQ+LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IENoYW5nZWQKKyAgICAgICAgYXJvdW5kIHNpbmNl
IHdlIGRvbid0IGhhdmUgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcgor
ICAgICAgICBvciBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIgYW55IG1vcmUuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMpOiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6
CisgICAgICAgIEdldCBhbHRlcm5hdGl2ZXMgZGlyZWN0bHkgZnJvbSBEb2N1bWVudE1hcmtlcjo6
ZGF0YSwgbm93IHRoYXQKKyAgICAgICAgdGhlcmUgaXMgbm90IGEgc2VwYXJhdGUgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcyBmdW5jdGlvbi4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAg
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMs
CisgICAgICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKKyAgICAgICAgaWQgc2lu
Y2UgdGhhdCdzIG5vdyBkb25lIGluIFJldGFpblB0ci5oLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXRlZEJvdW5kaW5nQm94ZXMpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDogQSBjb3VwbGUgdHdlYWtz
LCBwbHVzIGRlY2xhcmVkIHRoZQorICAgICAgICBmdW5jdGlvbnMgYWJvdmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZSBkZWZpbml0aW9uIG9m
CisgICAgICAgIGlkIHNpbmNlIHRoYXQncyBub3cgZG9uZSBpbiBSZXRhaW5QdHIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IFRha2Ugb3V0
CisgICAgICAgIGlzQWN0aXZlTWF0Y2ggbG9naWMgdGhhdCB3YXMgdXNlZCBmb3IgQ2hyb21pdW0g
b25seS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggY29uc3QpOiBVcGRhdGUg
Zm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgY29u
c3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1hcmtD
b250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZvcgorICAgICAgICBjaGFuZ2VzIHRv
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25zdCk6IFVzZQorICAgICAgICB1bml0
ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKTogVXNlCisgICAg
ICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91
bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIFJhbmdlOjphYnNvbHV0ZVRl
eHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNpdHkgYW5kIHJlbW92ZWQKKyAgICAg
ICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRvIGltcGxlbWVudCwgZmVhdHVyZSB0
aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgc29tZSBvciBhbGwgb2YgdGhlIHF1
YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92ZWQgbXVsdGktbGluZSBmdW5jdGlv
bgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJPYmplY3QgY2xhc3MgZGVmaW5pdGlv
biB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFkLiBEZWNsYXJlZCBhIG5ldyBhYnNv
bHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAgICBtX3NldE5lZWRzTGF5b3V0Rm9y
YmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4gY2FuIGJlIGNvbnN0LgorICAgICAg
ICBDb25kaXRpb25hbGl6ZWQgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbiBhbmQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUKKyAgICAgICAgc28gYm90aCBjYW4gYmUgdXNlZCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcyBidXQgZXhwYW5kIHRvIG5vIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ2dlZENvbnRlbnRD
b250YWluc1JlcGxhY2VkRWxlbWVudCk6IFNpbXBsaWZpZWQgYW5kIHVwZGF0ZWQKKyAgICAgICAg
bm93IHRoYXQgdGhlIGRyYWdnZWQgY29udGVudCBkYXRhIG5vIGxvbmdlciBoYXMgaXRzIG93biBu
YW1lZCBzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQp
OiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mp
OiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTog
UmVtb3ZlZCB0aGUgQ2hyb21pdW0tb25seQorICAgICAgICBjb25jZXB0IG9mIGFjdGl2ZSB2cy4g
aW5hY3RpdmUgdGV4dCBzZWFyY2ggaGlnaGxpZ2h0IGNvbG9ycy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKTogRGVsZXRlZC4gV2FzIG9ubHkgdXNlZCBmb3Ig
YSB0ZXN0CisgICAgICAgIG9mIENocm9taXVtLXNwZWNpZmljIHNjcm9sbCB0aWNrIG1hcmtzLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6IERlbGV0ZWQgYWRkVGV4dE1hdGNoTWFya2Vy
LgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogRGl0dG8uCisKIDIwMjAtMDQtMDUg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10g
VWdseSBhbmQgbWlzYWxpZ25lZCBmb3JtIHZhbGlkYXRpb24gYnViYmxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDE3
YjkyMWY0ZGQ3ODY3MGY2MjQxYmY3ZWRiMmJlYjMxYjAzYmM4NGYuLmI3M2M3YjdiMjAyZDc0MDMx
MzMzMTc2OWU4MDdhY2UwMGExYTIwZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMjAt
MDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNp
bmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9WaWV3U25hcHNo
b3RTdG9yZS5oOiBSZW1vdmVkIHVudXNlZCAiQ29jb2Egd2l0aG91dCBJT1N1cmZhY2UiIGNvZGUg
cGF0aHMuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbToK
KyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAg
KFdlYktpdDo6Vmlld1NuYXBzaG90OjpWaWV3U25hcHNob3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YktpdDo6Vmlld1NuYXBzaG90OjpzZXRTdXJmYWNlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6
OlZpZXdTbmFwc2hvdDo6aGFzSW1hZ2UgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6
Vmlld1NuYXBzaG90OjpjbGVhckltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZpZXdT
bmFwc2hvdDo6c2V0Vm9sYXRpbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90Ojphc0xheWVyQ29udGVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBz
aG90Ojphc0ltYWdlRm9yVGVzdGluZyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25h
cHNob3RTdG9yZTo6c25hcHNob3R0aW5nQ29udGV4dCk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OnJlcGxhY2VSZWxh
dGl2ZVRvU2VsZWN0aW9uKTogVXBkYXRlZCBzaW5jZQorICAgICAgICBhZGRQbGF0Zm9ybVRleHRD
aGVja2luZ01hcmtlciBubyBsb25nZXIgZXhpc3RzLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hl
Y2tpbmdDb250cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9u
KToKKyAgICAgICAgVXBkYXRlZCBzaW5jZSBmaWx0ZXJNYXJrZXJzIHBhc3NlcyBhIHJlZmVyZW5j
ZSBpbnN0ZWFkIG9mIGEgcG9pbnRlciBub3cuCisgICAgICAgIChXZWJLaXQ6OlRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucyk6Cisg
ICAgICAgIFNpbXBsaWZpZWQgY29kZSBhIGJpdCBieSByZW1vdmluZyBsb2NhbCB2YXJpYWJsZXMu
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UpOiBV
c2UKKyAgICAgICAgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcy4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6IFVzZQorICAg
ICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCB1bml0ZWRCb3VuZGluZ0Jv
eGVzLgorCiAyMDIwLTA0LTA0ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29t
PgogCiAgICAgICAgIEFkZCBhIGZvdXJ0aCByb3VuZCBvZiBsb2dnaW5nIHRvIGhlbHAgZGlhZ25v
c2UgPHdlYmtpdC5vcmcvYi8yMDk2ODU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5kZXgg
MDZkYjYzZjM1ZWI5ZjgxNDU5ZjQ3YzgyOGFhMjY3YmU4MjEzMTM5NC4uMWFlZmU3YTJmYmQ1Njlk
OGMxYTliYjQzMjY0YTRkY2UyY2IxMjY2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNv
bT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJl
dmlvdXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgor
ICAgICAgICBVcGRhdGUgc2luY2UgRG9jdW1lbnRNYXJrZXI6Om1ldGFkYXRhIG5vIGxvbmdlciBl
eGlzdHMuCisgICAgICAgICgtW1dlYkZyYW1lIG5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3Vs
dEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorICAgICAgICBEaXR0by4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJs
ZVBvc2l0aW9uIGVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczpd
KToKKyAgICAgICAgVXBkYXRlIHNpbmNlIERvY3VtZW50TWFya2VyOjphbHRlcm5hdGl2ZXMgbm8g
bG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1Jh
bmdlV2l0aENvcnJlY3Rpb25JbmRpY2F0b3JdKToKKyAgICAgICAgRGl0dG8uCisKIDIwMjAtMDMt
MTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgcmRhcjov
L3Byb2JsZW0vNjAzNTkyMzAgTWFyayBsb2NhdGlvbk1hbmFnZXI6ZGlkQ2hhbmdlQXV0aG9yaXph
dGlvblN0YXR1czogYXMgZGVwcmVjYXRlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRl
eCBjY2E1ZmQ3MjRiN2U3MzMzYWIwMWRhY2E1N2EwYmJiOGEzODI4NjRiLi44MDExOTE3OTEzYmY1
YTU3MjE0MTBkMDE5NWZiMWExMDg0NjFmZGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIERPTS9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgYWJzb2x1dGVRdWFkQW5kSW5zaWRl
Rml4ZWRQb3NpdGlvbjpdKTogVXNlIHVuaXRlZEJvdW5kaW5nQm94ZXMuCisgICAgICAgICogV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tOgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50
OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTogVXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMuCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2VzOmFuZE1ldGFkYXRhczpdKTogVXBkYXRlZCBz
aW5jZSBEb2N1bWVudE1hcmtlciBubworICAgICAgICBsb25nZXIgaGFzIGEgZGVkaWNhdGVkIG1l
dGFkYXRhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAgICAgKC1bV2ViRnJhbWUgZGljdGF0aW9uUmVz
dWx0TWV0YWRhdGFGb3JSYW5nZTpdKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFj
dGlvbkNvbnRyb2xsZXIubW06CisgICAgICAgICgrW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xs
ZXIgX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTppbkZyYW1lOndpdGhMb29rdXBPcHRpb25z
OmluZGljYXRvck9wdGlvbnM6dHJhbnNpdGlvbjpdKToKKyAgICAgICAgVXNlIFJlbmRlck9iamVj
dDo6YWJzb2x1dGVUZXh0UXVhZHMuCisKIDIwMjAtMDQtMDQgIFBlbmcgTGl1ICA8cGVuZy5saXU2
QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMjU5MDk1KTogQVNTRVJUSU9OIEZB
SUxFRDogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIHNl
ZW4gd2l0aCBUZXN0V2ViS2l0QVBJLldlYktpdExlZ2FjeS5BdWRpb1Nlc3Npb25DYXRlZ29yeUlP
UwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUmV0YWluUHRyLmggYi9Tb3VyY2UvV1RGL3d0
Zi9SZXRhaW5QdHIuaAppbmRleCA2MWYxMDliY2FmZTYwNTE2YTczMmVlNGVkODM5YWQxM2IzNGI1
NzFhLi4wMTJhMDFkNzk0NGVhNmFkYTY1ZmM5ZTU5N2RhNGZjYjMxYmVmZjAyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5Q
dHIuaApAQCAtNDgsNiArNDgsMTAgQEAKICNkZWZpbmUgTlNfUkVMRUFTRVNfQVJHVU1FTlQKICNl
bmRpZgogCisjaWZuZGVmIF9fT0JKQ19fCit0eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIC8vIFVubGlrZSBtb3N0IG1vc3Qgb2Ygb3Vy
IHNtYXJ0IHBvaW50ZXJzLCBSZXRhaW5QdHIgY2FuIHRha2UgZWl0aGVyIHRoZSBwb2ludGVyIHR5
cGUgb3IgdGhlIHBvaW50ZWQtdG8gdHlwZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCmlu
ZGV4IDE1MjdjNTFkNWI0NmQ0MmJkYmFjNDkzZTllNGJiYTFiMmVkYmRlM2MuLmUyMzFkNTM1Nzdj
YjUwODVhZDM4ZWJlNmUwMzJmNDFlNzkxNWEzZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRh
dGEuaApAQCAtNjIsNyArNjIsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIFN0cmluZyBu
b2RlVmFsdWUoKSBjb25zdCBmaW5hbDsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXROb2RlVmFs
dWUoY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorICAgIGJvb2wgdmlydHVhbElzQ2hhcmFjdGVy
RGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KICAgICBpbnQgbWF4Q2hhcmFjdGVy
T2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9pZCBzZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0
cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFjZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgs
IHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9pZCBub3RpZnlQYXJlbnRBZnRlckNoYW5nZShD
b250YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJjZSk7CkBAIC03MCw2ICs3MCwxMyBAQCBwcml2
YXRlOgogICAgIFN0cmluZyBtX2RhdGE7CiB9OwogCitpbmxpbmUgdW5zaWduZWQgTm9kZTo6bGVu
Z3RoKCkgY29uc3QKK3sKKyAgICBpZiAoaXM8Q2hhcmFjdGVyRGF0YT4oKnRoaXMpKQorICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4oKnRoaXMpLmxlbmd0aCgpOworICAgIHJl
dHVybiBjb3VudENoaWxkTm9kZXMoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OkNoYXJhY3RlckRhdGEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZWY5NDU5MDBiYThmMjRlMDJmNWVjZjIwZGVjZmM3MDhi
ZmQ4MmEwLi4yY2FjYzVkMmUyZDY0Yjg0ZDE2MmM3ZjA3M2YzOWNmMzE3NTU2M2RlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ2NDEsNyArNDY0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRl
eHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkK
IAogI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKICAgICAvLyBGcmVz
aGx5IGluc2VydGVkIHRleHQgaXMgZXhwZWN0ZWQgdG8gbm90IGluaGVyaXQgUGxhdGZvcm1UZXh0
Q2hlY2tpbmcgbWFya2Vycy4KLSAgICBtX21hcmtlcnMtPnJlbW92ZU1hcmtlcnModGV4dCwgb2Zm
c2V0LCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZyk7CisgICAg
bV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIHsgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgg
fSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKTsKICNlbmRpZgogfQogCkBA
IC00NjUzLDcgKzQ2NTMsNyBAQCB2b2lkIERvY3VtZW50Ojp0ZXh0UmVtb3ZlZChOb2RlJiB0ZXh0
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKICAgICB9CiAKICAgICAvLyBVcGRh
dGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFuZCBncmFtbWFyIGNoZWNraW5nLgotICAgIG1f
bWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0LCBvZmZzZXQsIGxlbmd0aCk7CisgICAgbV9tYXJr
ZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIHsgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGggfSk7CiAg
ICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVu
Z3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAppbmRleCA2NTViZDM2OGJi
ZGI1OWIzOWNlNzVmZmNkNzIwNmIzMmNmMDhlOGQ3Li5kZjVjYzhmN2I1YWFlODY0ZmIwMGFkZjBl
Njc4MWU5NTAyNjU1NTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRN
YXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaApAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTIwLDggKzIwLDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJOb2RlLmgiCi0KKyNpbmNsdWRlICJTaW1wbGVS
YW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNl
dC5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+CkBAIC0yOSwxNSArMjgsMTIgQEAKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci10eXBlZGVm
IHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAvLyBBIHJhbmdlIG9mIGEgbm9kZSB3aXRoaW4gYSBkb2N1bWVudCB0aGF0IGlzICJtYXJrZWQi
LCBzdWNoIGFzIHRoZSByYW5nZSBvZiBhIG1pc3NwZWxsZWQgd29yZC4KIC8vIEl0IG9wdGlvbmFs
bHkgaW5jbHVkZXMgYSBkZXNjcmlwdGlvbiB0aGF0IGNvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUg
dXNlciBpbnRlcmZhY2UuCi0vLyBJdCBhbHNvIG9wdGlvbmFsbHkgaW5jbHVkZXMgYSBmbGFnIHNw
ZWNpZnlpbmcgd2hldGhlciB0aGUgbWF0Y2ggaXMgYWN0aXZlLCB3aGljaCBpcyBpZ25vcmVkCi0v
LyBmb3IgYWxsIHR5cGVzIG90aGVyIHRoYW4gdHlwZSBUZXh0TWF0Y2guCiBjbGFzcyBEb2N1bWVu
dE1hcmtlciB7CiBwdWJsaWM6CiAgICAgZW51bSBNYXJrZXJUeXBlIHsKQEAgLTcyLDcgKzY4LDcg
QEAgcHVibGljOgogICAgICAgICBUZWxlcGhvbmVOdW1iZXIgPSAxIDw8IDEwLAogI2VuZGlmCiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgLy8gRklYTUU6IGlPUyBzaG91bGQgc2hh
cmUgdGhlIHNhbWUgZGljdGF0aW9uIG1hcmsgc3lzdGVtIHdpdGggdGhlIG90aGVyIHBsYXRmb3Jt
cyA8cmRhcjovL3Byb2JsZW0vOTQzMTI0OT4uCisgICAgICAgIC8vIEZJWE1FOiBpT1Mgc2hvdWxk
IHNoYXJlIHRoZSBzYW1lIGRpY3RhdGlvbiBtYXJrIHN5c3RlbSB3aXRoIHRoZSBvdGhlciBwbGF0
Zm9ybXMuCiAgICAgICAgIERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgPSAxIDw8IDEx
LAogICAgICAgICBEaWN0YXRpb25SZXN1bHQgPSAxIDw8IDEyLAogI2VuZGlmCkBAIC04OCw3MCAr
ODQsNTAgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8TWFya2Vy
VHlwZT4gYWxsTWFya2VycygpOwogCi0gICAgdXNpbmcgSXNBY3RpdmVNYXRjaERhdGEgPSBib29s
OwotICAgIHVzaW5nIERlc2NyaXB0aW9uRGF0YSA9IFN0cmluZzsKICAgICBzdHJ1Y3QgRGljdGF0
aW9uRGF0YSB7CiAgICAgICAgIHVpbnQ2NF90IGNvbnRleHQ7CiAgICAgICAgIFN0cmluZyBvcmln
aW5hbFRleHQ7CiAgICAgfTsKLSAgICBzdHJ1Y3QgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSB7
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAgICAgVmVjdG9yPFN0cmluZz4gYWx0ZXJu
YXRpdmVzOwotICAgICAgICBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhOwotI2VuZGlmCi0gICAgfTsK
LSAgICBzdHJ1Y3QgRHJhZ2dlZENvbnRlbnREYXRhIHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IHRh
cmdldE5vZGU7Ci0gICAgfTsKICNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJ
TkcpCiAgICAgc3RydWN0IFBsYXRmb3JtVGV4dENoZWNraW5nRGF0YSB7CiAgICAgICAgIFN0cmlu
ZyBrZXk7CiAgICAgICAgIFN0cmluZyB2YWx1ZTsKICAgICB9OwogI2VuZGlmCi0gICAgdXNpbmcg
RGF0YSA9IFZhcmlhbnQ8SXNBY3RpdmVNYXRjaERhdGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0
aW9uRGF0YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhCisK
KyAgICB1c2luZyBEYXRhID0gVmFyaWFudDwKKyAgICAgICAgU3RyaW5nCisgICAgICAgICwgRGlj
dGF0aW9uRGF0YSAvLyBEaWN0YXRpb25BbHRlcm5hdGl2ZXMKKyNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQorICAgICAgICAsIFZlY3RvcjxTdHJpbmc+IC8vIERpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXMKKyAgICAgICAgLCBSZXRhaW5QdHI8aWQ+IC8vIERpY3RhdGlvblJlc3VsdAorI2Vu
ZGlmCisgICAgICAgICwgUmVmUHRyPE5vZGU+IC8vIERyYWdnZWRDb250ZW50CiAjaWYgRU5BQkxF
KFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAgICwgUGxhdGZvcm1UZXh0Q2hlY2tp
bmdEYXRhCisgICAgICAgICwgUGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhIC8vIFBsYXRmb3JtVGV4
dENoZWNraW5nCiAjZW5kaWYKICAgICA+OwogCi0gICAgRG9jdW1lbnRNYXJrZXIodW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgYm9vbCBpc0FjdGl2ZU1hdGNoKTsKLSAg
ICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uID0gU3RyaW5nKCkpOwotICAg
IERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQsIERhdGEmJik7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBEb2N1
bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5k
T2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
YWx0ZXJuYXRpdmVzLCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhKTsKLSNlbmRpZgorICAgIERvY3Vt
ZW50TWFya2VyKE1hcmtlclR5cGUsIE9mZnNldFJhbmdlLCBEYXRhJiYgPSB7IH0pOwogCiAgICAg
TWFya2VyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0gICAgdW5zaWduZWQg
c3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9Ci0gICAgdW5zaWdu
ZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKyAgICB1bnNpZ25l
ZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2Uuc3RhcnQ7IH0KKyAgICB1bnNp
Z25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmVuZDsgfQogCiAgICAgY29u
c3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0OwogCi0gICAgYm9vbCBpc0FjdGl2ZU1hdGNo
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY3RpdmVNYXRjaChib29sKTsKLQogICAgIGNvbnN0IERh
dGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KLSAgICB2b2lkIGNsZWFyRGF0YSgp
IHsgbV9kYXRhID0gZmFsc2U7IH0KKyAgICB2b2lkIGNsZWFyRGF0YSgpIHsgbV9kYXRhID0gU3Ry
aW5nIHsgfTsgfQogCiAgICAgLy8gT2Zmc2V0IG1vZGlmaWNhdGlvbnMgYXJlIGRvbmUgYnkgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLgogICAgIC8vIE90aGVyIGNsYXNzZXMgc2hvdWxkIG5vdCBj
YWxsIGZvbGxvd2luZyBzZXR0ZXJzLgotICAgIHZvaWQgc2V0U3RhcnRPZmZzZXQodW5zaWduZWQg
b2Zmc2V0KSB7IG1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7IH0KLSAgICB2b2lkIHNldEVuZE9mZnNl
dCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9lbmRPZmZzZXQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNl
dFN0YXJ0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgeyBtX3JhbmdlLnN0YXJ0ID0gb2Zmc2V0OyB9
CisgICAgdm9pZCBzZXRFbmRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fcmFuZ2UuZW5kID0g
b2Zmc2V0OyB9CiAgICAgdm9pZCBzaGlmdE9mZnNldHMoaW50IGRlbHRhKTsKIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBpc0RpY3RhdGlvbigpIGNvbnN0OwotICAgIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMoKSBjb25zdDsKLSAgICB2b2lkIHNldEFsdGVy
bmF0aXZlKGNvbnN0IFN0cmluZyYsIHNpemVfdCBpbmRleCk7Ci0gICAgaWQgbWV0YWRhdGEoKSBj
b25zdDsKLSAgICB2b2lkIHNldE1ldGFkYXRhKGlkKTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAg
IE1hcmtlclR5cGUgbV90eXBlOwotICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7Ci0gICAgdW5z
aWduZWQgbV9lbmRPZmZzZXQ7CisgICAgT2Zmc2V0UmFuZ2UgbV9yYW5nZTsKICAgICBEYXRhIG1f
ZGF0YTsKIH07CiAKQEAgLTE4MywzNCArMTU5LDE3IEBAIGNvbnN0ZXhwciBhdXRvIERvY3VtZW50
TWFya2VyOjphbGxNYXJrZXJzKCkgLT4gT3B0aW9uU2V0PE1hcmtlclR5cGU+CiAgICAgfTsKIH0K
IAotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9m
ZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGlzQWN0aXZlTWF0Y2gpCi0gICAgOiBtX3R5
cGUoVGV4dE1hdGNoKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAsIG1f
ZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1fZGF0YShpc0FjdGl2ZU1hdGNoKQotewotfQot
Ci1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3VtZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBk
ZXNjcmlwdGlvbikKK2lubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIoTWFya2Vy
VHlwZSB0eXBlLCBPZmZzZXRSYW5nZSByYW5nZSwgRGF0YSYmIGRhdGEpCiAgICAgOiBtX3R5cGUo
dHlwZSkKLSAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNl
dChlbmRPZmZzZXQpCi0gICAgLCBtX2RhdGEoZGVzY3JpcHRpb24pCi17Ci19Ci0KLWlubGluZSBE
b2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBEYXRhJiYgZGF0YSkKLSAgICA6IG1fdHlw
ZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAsIG1fZW5kT2Zm
c2V0KGVuZE9mZnNldCkKKyAgICAsIG1fcmFuZ2UocmFuZ2UpCiAgICAgLCBtX2RhdGEoV1RGTW92
ZShkYXRhKSkKIHsKIH0KIAogaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0
cyhpbnQgZGVsdGEpCiB7Ci0gICAgbV9zdGFydE9mZnNldCArPSBkZWx0YTsKLSAgICBtX2VuZE9m
ZnNldCArPSBkZWx0YTsKKyAgICBtX3JhbmdlLnN0YXJ0ICs9IGRlbHRhOworICAgIG1fcmFuZ2Uu
ZW5kICs9IGRlbHRhOwogfQogCiBpbmxpbmUgY29uc3QgU3RyaW5nJiBEb2N1bWVudE1hcmtlcjo6
ZGVzY3JpcHRpb24oKSBjb25zdApAQCAtMjE4LDU1ICsxNzcsNCBAQCBpbmxpbmUgY29uc3QgU3Ry
aW5nJiBEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRpb24oKSBjb25zdAogICAgIHJldHVybiBXVEY6
OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9kYXRhKSA/IFdURjo6Z2V0PFN0cmluZz4obV9k
YXRhKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKLWlubGluZSBib29sIERvY3VtZW50TWFya2VyOjpp
c0FjdGl2ZU1hdGNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2
ZTxib29sPihtX2RhdGEpICYmIFdURjo6Z2V0PGJvb2w+KG1fZGF0YSk7Ci19Ci0KLWlubGluZSB2
b2lkIERvY3VtZW50TWFya2VyOjpzZXRBY3RpdmVNYXRjaChib29sIGlzQWN0aXZlTWF0Y2gpCi17
Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBUZXh0TWF0Y2gpOwotICAgIG1fZGF0YSA9IGlzQWN0aXZl
TWF0Y2g7Ci19Ci0KLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotCi0vLyBGSVhNRTogaU9TIHNo
b3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24gbWFyayBzeXN0ZW0gd2l0aCB0aGUgb3RoZXIg
cGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMxMjQ5Pi4KLQotaW5saW5lIERvY3VtZW50TWFy
a2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlIHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0
LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+
JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEpCi0gICAgOiBtX3R5cGUodHlw
ZSkKLSAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNldChl
bmRPZmZzZXQpCi0gICAgLCBtX2RhdGEoRGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSB7IGFsdGVy
bmF0aXZlcywgbWV0YWRhdGEgfSkKLXsKLSAgICBBU1NFUlQoaXNEaWN0YXRpb24oKSk7Ci19Ci0K
LWlubGluZSBib29sIERvY3VtZW50TWFya2VyOjppc0RpY3RhdGlvbigpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fdHlwZSA9PSBEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzIHx8IG1fdHlw
ZSA9PSBEaWN0YXRpb25SZXN1bHQ7Ci19Ci0KLWlubGluZSBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
RG9jdW1lbnRNYXJrZXI6OmFsdGVybmF0aXZlcygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6
Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOwotfQot
Ci1pbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6c2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5n
JiBhbHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQotewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFs
dGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJuYXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZl
OwotfQotCi1pbmxpbmUgaWQgRG9jdW1lbnRNYXJrZXI6Om1ldGFkYXRhKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRh
ZGF0YS5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQgRG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRh
KGlkIG1ldGFkYXRhKQotewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+
KG1fZGF0YSkubWV0YWRhdGEgPSBtZXRhZGF0YTsKLX0KLQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJv
bGxlci5jcHAKaW5kZXggY2Q5M2VlNTk2ODFhZDI2ZDg0YzEzNTA4NDljOWVkYTJjN2NkMTBkYi4u
ZmM2NGUzMDZmNTVmMDY4ZDY2YTBhY2ExMDQwOThmODNjZjQ1M2RhNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKQEAgLTMsNyArMyw3IEBA
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAx
MCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMiw3ICszMiw2IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBA
IC02MCwxMzQgKzU5LDU0IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpkZXRhY2go
KQogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzID0geyB9OwogfQogCi1WZWN0b3I8
UmVmUHRyPFJhbmdlPj4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdl
cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCithdXRvIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6Y29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSAtPiBWZWN0b3I8
VGV4dFJhbmdlPgogewotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiB0ZXh0UmFuZ2U7Ci0gICAg
Zm9yIChUZXh0SXRlcmF0b3IgdGV4dEl0ZXJhdG9yKHJhbmdlKTsgIXRleHRJdGVyYXRvci5hdEVu
ZCgpOyB0ZXh0SXRlcmF0b3IuYWR2YW5jZSgpKQotICAgICAgICB0ZXh0UmFuZ2UuYXBwZW5kKGNy
ZWF0ZUxpdmVSYW5nZSh0ZXh0SXRlcmF0b3IucmFuZ2UoKSkpOwotICAgIHJldHVybiB0ZXh0UmFu
Z2U7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25z
dCBTdHJpbmcmIGRlc2NyaXB0aW9uKQotewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xs
ZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0
Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQo
KSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVzY3JpcHRpb24pKTsKLX0KLQotdm9pZCBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2Us
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQ
aWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkKLSAgICAgICAgYWRkTWFya2VyKHRleHRQ
aWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5z
dGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9mZnNldCgpKSk7Ci19Ci0KLXZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQg
c3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
dHlwZSkKLXsKLSAgICBhZGRNYXJrZXIobm9kZSwgRG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRP
ZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9j
dW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQotewotICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVu
dE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3RhcnRPZmZzZXQgKyBsZW5ndGgsIFdURk1vdmUo
ZGF0YSkpKTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRj
aE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgYWN0aXZlTWF0Y2gpCi17Ci0gICAgZm9y
IChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAg
dW5zaWduZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgYWRk
TWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRP
ZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gpKTsKKyAgICBWZWN0b3I8VGV4dFJhbmdlPiBy
YW5nZXM7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3Iu
YXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgICAgIGF1dG8gY3VycmVudFJhbmdl
ID0gaXRlcmF0b3IucmFuZ2UoKTsKKyAgICAgICAgcmFuZ2VzLmFwcGVuZCh7IFdURk1vdmUoY3Vy
cmVudFJhbmdlLnN0YXJ0LmNvbnRhaW5lciksIHsgY3VycmVudFJhbmdlLnN0YXJ0Lm9mZnNldCwg
Y3VycmVudFJhbmdlLmVuZC5vZmZzZXQgfSB9KTsKICAgICB9CisgICAgcmV0dXJuIHJhbmdlczsK
IH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYg
aW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5QdHI8aWQ+JiBtZXRhZGF0YSkKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBEb2N1bWVudE1hcmtlcjo6
RGF0YSYgZGF0YSkKIHsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5n
ZXMocmFuZ2UpKQotICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigp
LCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVj
ZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uLCBpbnRlcnByZXRhdGlvbnMsIG1ldGFkYXRhKSk7
CisgICAgZm9yIChhdXRvJiB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisg
ICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Uubm9kZSwgeyB0eXBlLCB0ZXh0UGllY2UucmFuZ2Us
IERvY3VtZW50TWFya2VyOjpEYXRhIHsgZGF0YSB9IH0pOwogfQogCi12b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihS
YW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpCit2b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKFRleHQmIG5vZGUsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
IHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgZGF0YSkKIHsKLSAgICBBU1NFUlQoaW50ZXJw
cmV0YXRpb25zLnNpemUoKSA+IDEpOwotICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIDw9
IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1iZXJPZkFsdGVybmF0aXZlcyA9
IGludGVycHJldGF0aW9ucy5zaXplKCkgLSAxOwotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBj
b2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2Vy
KERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzLCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGVtcHR5U3RyaW5nKCks
IFZlY3RvcjxTdHJpbmc+KG51bWJlck9mQWx0ZXJuYXRpdmVzKSwgUmV0YWluUHRyPGlkPigpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZkFsdGVybmF0aXZlczsgKytp
KQotICAgICAgICAgICAgbWFya2VyLnNldEFsdGVybmF0aXZlKGludGVycHJldGF0aW9uc1tpICsg
MV0sIGkpOwotICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBt
YXJrZXIpOwotICAgIH0KKyAgICBhZGRNYXJrZXIobm9kZSwgeyB0eXBlLCB7IHN0YXJ0T2Zmc2V0
LCBzdGFydE9mZnNldCArIGxlbmd0aCB9LCBXVEZNb3ZlKGRhdGEpIH0pOwogfQogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSwgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4
dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFp
bmVyKCksIERvY3VtZW50TWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHRl
eHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgU3RyaW5nKCks
IFZlY3RvcjxTdHJpbmc+KCksIG1ldGFkYXRhKSk7CisgICAgLy8gRklYTUU6IFNpbmNlIHRoZSBt
YXJrZXIgaXMgYWxyZWFkeSBzdG9yZWQgaW4gYSBtYXAga2V5ZWQgYnkgbm9kZSwgd2UgY2FuIHBy
b2JhYmx5IGNoYW5nZSB0aGluZ3MgYXJvdW5kIHNvIHdlIGRvbid0IGhhdmUgdG8gYWxzbyBzdG9y
ZSB0aGUgbm9kZSBpbiB0aGUgbWFya2VyLgorICAgIGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29s
bGVjdFRleHRSYW5nZXMocmFuZ2UpKQorICAgICAgICBhZGRNYXJrZXIodGV4dFBpZWNlLm5vZGUs
IHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UucmFuZ2UsIFJlZlB0
cjxOb2RlPiB7IHRleHRQaWVjZS5ub2RlLnB0cigpIH0gfSk7CiB9CiAKLSNlbmRpZgotCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJhZ2dlZENvbnRlbnRNYXJrZXIoUmFuZ2Um
IHJhbmdlKQotewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhy
YW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YSBkcmFn
Z2VkQ29udGVudERhdGEgeyB0ZXh0UGllY2UtPmZpcnN0Tm9kZSgpIH07Ci0gICAgICAgIGFkZE1h
cmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdn
ZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0
KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRhKSB9KTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFC
TEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCi12b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBvdmVybGFwUnVsZSkKIHsKLSAgICBmb3Ig
KGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7Ci0gICAgICAgIERv
Y3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGEgdGV4dENoZWNraW5nRGF0YSB7
IGtleSwgdmFsdWUgfTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWlu
ZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcsIHRleHRQaWVjZS0+
c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgV1RGTW92ZSh0ZXh0Q2hlY2tp
bmdEYXRhKSB9KTsKLSAgICB9Ci19Ci0jZW5kaWYKLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQotewotICAg
IGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAg
ICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZXMpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwotICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5z
aWduZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5lbmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3Zl
TWFya2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZz
ZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMsIG51bGxwdHIsIHNob3VsZFJlbW92ZVBhcnRp
YWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICB9CisgICAgZmlsdGVyTWFya2VycyhyYW5nZSwg
bnVsbHB0ciwgdHlwZXMsIG92ZXJsYXBSdWxlKTsKIH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6OmZpbHRlck1hcmtlcnMoUmFuZ2UmIHJhbmdlLCBzdGQ6OmZ1bmN0aW9uPGJvb2wo
RG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVyTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29uc3QgRG9jdW1lbnRNYXJrZXImKT4mIGZpbHRl
ciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBvdmVybGFwUnVsZSkKIHsKLSAgICBmb3IgKGF1
dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKSB7Ci0gICAgICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVj
ZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkgeworICAgICAgICBpZiAoIXBvc3NpYmx5SGFz
TWFya2Vycyh0eXBlcykpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIEFTU0VSVCghbV9t
YXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0
UGllY2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQ
aWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIHJlbW92ZU1hcmtlcnModGV4dFBpZWNlLT5zdGFy
dENvbnRhaW5lcigpLCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0IC0gc3RhcnRPZmZzZXQsIG1hcmtl
clR5cGVzLCBmaWx0ZXJGdW5jdGlvbiwgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIpOworICAgICAgICByZW1vdmVNYXJrZXJzKHRleHRQaWVjZS5ub2RlLCB0ZXh0UGllY2Uu
cmFuZ2UsIHR5cGVzLCBmaWx0ZXIsIG92ZXJsYXBSdWxlKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2
b2lkIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYg
bWFya2VyLCBOb2RlJiBub2RlKQogewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXco
KSB8fCAhbm9kZS5kb2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMgc28gdGhhdCB3ZSBkb24ndCB1c2UgUmFuZ2Ug
KGJlY2F1c2Ugd2Ugb25seSBoYXZlIG9uZSBOb2RlKSwgYnV0IHN0aWxsIHNoYXJlIGNvZGUgd2l0
aCBhYnNvbHV0ZVRleHRRdWFkcygpLgotICAgIGF1dG8gbWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG5vZGUuZG9jdW1lbnQoKSwgJm5vZGUsIG1hcmtlci5zdGFydE9mZnNldCgpLCAmbm9kZSwg
bWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZU1hcmtl
clF1YWRzOwotICAgIG1hcmtlclJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhhYnNvbHV0ZU1hcmtl
clF1YWRzLCB0cnVlKTsKLQotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGFic29sdXRlTWFya2VyUmVj
dHM7Ci0gICAgYWJzb2x1dGVNYXJrZXJSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFic29s
dXRlTWFya2VyUXVhZHMuc2l6ZSgpKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBhYnNv
bHV0ZU1hcmtlclF1YWRzKQotICAgICAgICBhYnNvbHV0ZU1hcmtlclJlY3RzLnVuY2hlY2tlZEFw
cGVuZChxdWFkLmJvdW5kaW5nQm94KCkpOwotCi0gICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29s
dXRlUmVjdHMoYWJzb2x1dGVNYXJrZXJSZWN0cyk7CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJh
bmdlIHsgeyBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSB9LCB7IG5vZGUsIG1hcmtlci5lbmRP
ZmZzZXQoKSB9IH07CisgICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoYm91bmRp
bmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlLCB0cnVlKSkpOwog
fQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxs
TWFya2VycygpCkBAIC0xOTUsOCArMTE0LDggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKQogICAgIGlmICghaGFzTWFya2Vycygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8mIG1hcmtlcnMgOiBtX21hcmtlcnMu
dmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbWFya2VycykKKyAgICBm
b3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9tYXJrZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZv
ciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJrZXJzKQogICAgICAgICAgICAgbWFya2VyLmludmFs
aWRhdGUoKTsKICAgICB9CiAKQEAgLTIwOSw3ICsxMjgsNyBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yTWFya2Vyc0luTm9kZShOb2RlJiBub2RlKQog
ICAgIGlmICghaGFzTWFya2VycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBNYXJrZXJMaXN0
KiBtYXJrZXJzID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBtYXJrZXJzID0gbV9t
YXJrZXJzLmdldCgmbm9kZSk7CiAgICAgQVNTRVJUKG1hcmtlcnMpOwogCiAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbWFya2VycykKQEAgLTIzMiw0MSArMTUxLDMzIEBAIHN0YXRpYyB2b2lkIHVw
ZGF0ZU1haW5GcmFtZUxheW91dElmTmVlZGVkKERvY3VtZW50JiBkb2N1bWVudCkKICAgICBtYWlu
RnJhbWVWaWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiB9CiAK
LXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjp1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVk
TWFya2Vyc09mVHlwZShEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSBtYXJrZXJUeXBlKQordm9p
ZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJr
ZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCFw
b3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZSkpCisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtl
cnModHlwZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0
eSgpKSk7Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5ID0gdHJ1ZTsK
LQotICAgIGZvciAoYXV0byYgbm9kZUFuZE1hcmtlcnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAg
Tm9kZSYgbm9kZSA9ICpub2RlQW5kTWFya2Vycy5rZXk7Ci0gICAgICAgIGZvciAoYXV0byYgbWFy
a2VyIDogKm5vZGVBbmRNYXJrZXJzLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5
cGUoKSAhPSBtYXJrZXJUeXBlKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgIEFTU0VS
VCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICAgICAgICAgIGlmIChtYXJrZXIuaXNWYWxp
ZCgpKQorICAgIGJvb2wgdXBkYXRlZExheW91dCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgbm9k
ZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9k
ZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSgpICE9IHR5cGUg
fHwgbWFya2VyLmlzVmFsaWQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgLy8gV2UnbGwgZG8gdXAgdG8gb25lIGxheW91dCBwZXIgY2FsbCBpZiB3ZSBoYXZlIGFu
eSBkaXJ0eSBtYXJrZXJzLgotICAgICAgICAgICAgaWYgKG5lZWRzTGF5b3V0SWZBbnlSZWN0c0Fy
ZURpcnR5KSB7CisgICAgICAgICAgICBpZiAoIXVwZGF0ZWRMYXlvdXQpIHsKICAgICAgICAgICAg
ICAgICB1cGRhdGVNYWluRnJhbWVMYXlvdXRJZk5lZWRlZChtX2RvY3VtZW50KTsKLSAgICAgICAg
ICAgICAgICBuZWVkc0xheW91dElmQW55UmVjdHNBcmVEaXJ0eSA9IGZhbHNlOworICAgICAgICAg
ICAgICAgIHVwZGF0ZWRMYXlvdXQgPSB0cnVlOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2VyKG1hcmtlciwgbm9kZSk7CisgICAgICAgICAg
ICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2VyKG1hcmtlciwgKm5vZGVNYXJrZXJzLmtleSk7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVZlY3RvcjxGbG9hdFJlY3Q+IERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUgbWFya2VyVHlwZSkKK1ZlY3RvcjxGbG9hdFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUg
dHlwZSkKIHsKICAgICBWZWN0b3I8RmxvYXRSZWN0PiByZXN1bHQ7CiAKLSAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2VycyhtYXJrZXJUeXBlKSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0
eXBlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNF
bXB0eSgpKSk7CisgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAogICAgIFJlZlB0
cjxGcmFtZT4gZnJhbWUgPSBtX2RvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAg
LTI3NSwyNiArMTg2LDI2IEBAIFZlY3RvcjxGbG9hdFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrCiAgICAgaWYgKCFmcmFt
ZVZpZXcpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICB1cGRhdGVSZWN0c0ZvckludmFs
aWRhdGVkTWFya2Vyc09mVHlwZShtYXJrZXJUeXBlKTsKKyAgICB1cGRhdGVSZWN0c0ZvckludmFs
aWRhdGVkTWFya2Vyc09mVHlwZSh0eXBlKTsKIAogICAgIGJvb2wgaXNTdWJmcmFtZSA9ICFmcmFt
ZS0+aXNNYWluRnJhbWUoKTsKICAgICBJbnRSZWN0IHN1YmZyYW1lQ2xpcFJlY3Q7CiAgICAgaWYg
KGlzU3ViZnJhbWUpCiAgICAgICAgIHN1YmZyYW1lQ2xpcFJlY3QgPSBmcmFtZVZpZXctPndpbmRv
d1RvQ29udGVudHMoZnJhbWVWaWV3LT53aW5kb3dDbGlwUmVjdCgpKTsKIAotICAgIGZvciAoYXV0
byYgbm9kZUFuZE1hcmtlcnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9ICpu
b2RlQW5kTWFya2Vycy5rZXk7CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2Vy
cykgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZU1hcmtlcnMua2V5LT5yZW5kZXJlcigp
OwogICAgICAgICBGbG9hdFJlY3Qgb3ZlcmZsb3dDbGlwUmVjdDsKLSAgICAgICAgaWYgKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCkpCisgICAgICAgIGlmIChyZW5kZXJl
cikKICAgICAgICAgICAgIG92ZXJmbG93Q2xpcFJlY3QgPSByZW5kZXJlci0+YWJzb2x1dGVDbGlw
cGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVBbmRN
YXJrZXJzLnZhbHVlKSB7Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSBtYXJrZXJU
eXBlKQorICAgICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2Vycy52YWx1ZSkgewor
ICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlKCkgIT0gdHlwZSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKIAogICAgICAgICAgICAgYXV0byByZW5kZXJlZFJlY3RzID0gbWFya2VyLnVuY2xp
cHBlZEFic29sdXRlUmVjdHMoKTsKIAogICAgICAgICAgICAgLy8gQ2xpcCBkb2N1bWVudCBtYXJr
ZXJzIGJ5IHRoZWlyIG92ZXJmbG93IGNsaXAuCi0gICAgICAgICAgICBpZiAobm9kZS5yZW5kZXJl
cigpKSB7CisgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KGF1dG8mIHJlY3QgOiByZW5kZXJlZFJlY3RzKQogICAgICAgICAgICAgICAgICAgICByZWN0Lmlu
dGVyc2VjdChvdmVyZmxvd0NsaXBSZWN0KTsKICAgICAgICAgICAgIH0KQEAgLTMxNSwyMSArMjI2
LDIwIEBAIFZlY3RvcjxGbG9hdFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVy
ZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJrCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
c3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1h
cmtlciYgbmV3TWFya2VyKQorc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtl
cihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQogewogI2lmIEVOQUJMRShQTEFURk9STV9E
UklWRU5fVEVYVF9DSEVDS0lORykKLSAgICBpZiAobmV3TWFya2VyLnR5cGUoKSA9PSBEb2N1bWVu
dE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcpCisgICAgaWYgKG1hcmtlci50eXBlKCkgPT0g
RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAobmV3TWFya2Vy
LnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
cyB8fCBuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQp
CisgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMgfHwgbWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUmVzdWx0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgotICAgIGlmIChuZXdN
YXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2VyOjpEcmFnZ2VkQ29udGVudCkgewotICAgICAg
ICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRD
b250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSkudGFyZ2V0Tm9kZSkKLSAgICAgICAgICAgIHJl
dHVybiB0YXJnZXROb2RlLT5yZW5kZXJlcigpICYmIHRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmlz
UmVuZGVyUmVwbGFjZWQoKTsKLSAgICB9CisKKyAgICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1
bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpCisgICAgICAgIHJldHVybiBpczxSZW5kZXJSZXBs
YWNlZD4oV1RGOjpnZXQ8UmVmUHRyPE5vZGU+PihtYXJrZXIuZGF0YSgpKS0+cmVuZGVyZXIoKSk7
CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0zMzcsNyArMjQ3LDcgQEAgc3RhdGljIGJvb2wg
c2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFy
a2VyKQogLy8gTWFya2VycyBhcmUgc3RvcmVkIGluIG9yZGVyIHNvcnRlZCBieSB0aGVpciBzdGFy
dCBvZmZzZXQuCiAvLyBNYXJrZXJzIG9mIHRoZSBzYW1lIHR5cGUgZG8gbm90IG92ZXJsYXAgZWFj
aCBvdGhlci4KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
JiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKQordm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlJiBub2RlLCBEb2N1bWVudE1hcmtlciYmIG5l
d01hcmtlcikKIHsKICAgICBBU1NFUlQobmV3TWFya2VyLmVuZE9mZnNldCgpID49IG5ld01hcmtl
ci5zdGFydE9mZnNldCgpKTsKICAgICBpZiAobmV3TWFya2VyLmVuZE9mZnNldCgpID09IG5ld01h
cmtlci5zdGFydE9mZnNldCgpKQpAQCAtMzUzLDExICsyNjMsMTEgQEAgdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtl
ciYgbmV3TWEKIAogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmFkZChuZXdNYXJr
ZXIudHlwZSgpKTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNYXJrZXJMaXN0PiYgbGlzdCA9IG1f
bWFya2Vycy5hZGQoJm5vZGUsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBs
aXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCiAg
ICAgaWYgKCFsaXN0KSB7Ci0gICAgICAgIGxpc3QgPSBtYWtlVW5pcXVlPE1hcmtlckxpc3Q+KCk7
Ci0gICAgICAgIGxpc3QtPmFwcGVuZChSZW5kZXJlZERvY3VtZW50TWFya2VyKG5ld01hcmtlcikp
OworICAgICAgICBsaXN0ID0gbWFrZVVuaXF1ZTxWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cj4+KCk7CisgICAgICAgIGxpc3QtPmFwcGVuZChSZW5kZXJlZERvY3VtZW50TWFya2VyKFdURk1v
dmUobmV3TWFya2VyKSkpOwogICAgIH0gZWxzZSBpZiAoc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1h
cmtlcihuZXdNYXJrZXIpKSB7CiAgICAgICAgIC8vIFdlIGRvbid0IG1lcmdlIGRpY3RhdGlvbiBt
YXJrZXJzLgogICAgICAgICBzaXplX3QgaTsKQEAgLTM2Nyw5ICsyNzcsOSBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2VyKE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50
TWFya2VyJiBuZXdNYQogICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gbmV3
TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3TWFya2Vy
KSk7CisgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFya2VyKFdURk1v
dmUobmV3TWFya2VyKSkpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIgdG9JbnNlcnQobmV3TWFya2VyKTsKKyAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtl
ciB0b0luc2VydChXVEZNb3ZlKG5ld01hcmtlcikpOwogICAgICAgICBzaXplX3QgbnVtTWFya2Vy
cyA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgc2l6ZV90IGk7CiAgICAgICAgIC8vIEl0ZXJhdGUg
b3ZlciBhbGwgbWFya2VycyB3aG9zZSBzdGFydCBvZmZzZXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvIHRoZSBuZXcgbWFya2VyJ3MuCkBAIC00MTQsMTAyICszMjQsOTkgQEAgdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1h
cmtlciYgbmV3TWEKICAgICBpbnZhbGlkYXRlUmVjdHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwog
fQogCi0vLyBjb3BpZXMgbWFya2VycyBmcm9tIHNyY05vZGUgdG8gZHN0Tm9kZSwgYXBwbHlpbmcg
dGhlIHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0aGUgY29waWVzLiAgVGhlIHNoaWZ0IGlzCi0v
LyB1c2VmdWwgaWYsIGUuZy4sIHRoZSBjYWxsZXIgaGFzIGNyZWF0ZWQgdGhlIGRzdE5vZGUgZnJv
bSBhIG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRoZSBzcmNOb2RlLgotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5vZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlJiBkc3ROb2RlLCBpbnQgZGVsdGEpCisvLyBDb3BpZXMg
bWFya2VycyBmcm9tIHNvdXJjZSB0byBkZXN0aW5hdGlvbiwgYXBwbHlpbmcgdGhlIHNwZWNpZmll
ZCBzaGlmdCBkZWx0YSB0byB0aGUgY29waWVzLiBUaGUgc2hpZnQgaXMKKy8vIHVzZWZ1bCBpZiwg
ZS5nLiwgdGhlIGNhbGxlciBoYXMgY3JlYXRlZCB0aGUgZGVzdGluYXRpb24gZnJvbSBhIG5vbi1w
cmVmaXggc3Vic3RyaW5nIG9mIHRoZSBzb3VyY2UuCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc291cmNlLCBPZmZzZXRSYW5nZSByYW5nZSwgTm9kZSYg
ZGVzdGluYXRpb24pCiB7Ci0gICAgaWYgKGxlbmd0aCA8PSAwKQorICAgIGlmIChyYW5nZS5zdGFy
dCA+PSByYW5nZS5lbmQpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghcG9zc2libHlIYXNN
YXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKQogICAgICAgICByZXR1cm47CiAg
ICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3Qg
PSBtX21hcmtlcnMuZ2V0KCZzcmNOb2RlKTsKKyAgICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0
KCZzb3VyY2UpOwogICAgIGlmICghbGlzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBk
b2NEaXJ0eSA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsg
bGVuZ3RoIC0gMTsKKyAgICBib29sIG5lZWRSZXBhaW50ID0gZmFsc2U7CiAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICAvLyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0
aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IGVu
ZE9mZnNldCkKKyAgICAgICAgLy8gU3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmll
ZCByYW5nZS4KKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IHJhbmdlLmVuZCkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIC8vIHNraXAgbWFya2VyIHRoYXQgaXMgYmVm
b3JlIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3IgaXMgdGhlIHdyb25nIHR5cGUKLSAgICAgICAgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA8IHN0YXJ0T2Zmc2V0KQorICAgICAgICAvLyBTa2lwIG1hcmtl
ciB0aGF0IGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVkIHJhbmdlLgorICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCgpIDwgcmFuZ2Uuc3RhcnQpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICAvLyBwaW4gdGhlIG1hcmtlciB0byB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCBhcHBseSB0
aGUgc2hpZnQgZGVsdGEKLSAgICAgICAgZG9jRGlydHkgPSB0cnVlOwotICAgICAgICBpZiAobWFy
a2VyLnN0YXJ0T2Zmc2V0KCkgPCBzdGFydE9mZnNldCkKLSAgICAgICAgICAgIG1hcmtlci5zZXRT
dGFydE9mZnNldChzdGFydE9mZnNldCk7Ci0gICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkg
PiBlbmRPZmZzZXQpCi0gICAgICAgICAgICBtYXJrZXIuc2V0RW5kT2Zmc2V0KGVuZE9mZnNldCk7
Ci0gICAgICAgIG1hcmtlci5zaGlmdE9mZnNldHMoZGVsdGEpOworICAgICAgICAvLyBQaW4gdGhl
IG1hcmtlciB0byB0aGUgc3BlY2lmaWVkIHJhbmdlIGFuZCBhcHBseSB0aGUgc2hpZnQgZGVsdGEu
CisgICAgICAgIGF1dG8gY29waWVkTWFya2VyID0gbWFya2VyOworICAgICAgICBpZiAoY29waWVk
TWFya2VyLnN0YXJ0T2Zmc2V0KCkgPCByYW5nZS5zdGFydCkKKyAgICAgICAgICAgIGNvcGllZE1h
cmtlci5zZXRTdGFydE9mZnNldChyYW5nZS5zdGFydCk7CisgICAgICAgIGlmIChjb3BpZWRNYXJr
ZXIuZW5kT2Zmc2V0KCkgPj0gcmFuZ2UuZW5kKQorICAgICAgICAgICAgY29waWVkTWFya2VyLnNl
dEVuZE9mZnNldChyYW5nZS5lbmQpOwogCi0gICAgICAgIGFkZE1hcmtlcihkc3ROb2RlLCBtYXJr
ZXIpOworICAgICAgICBhZGRNYXJrZXIoZGVzdGluYXRpb24sIFdURk1vdmUoY29waWVkTWFya2Vy
KSk7CisgICAgICAgIG5lZWRSZXBhaW50ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGly
dHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQotICAgICAgICBkc3ROb2RlLnJlbmRlcmVyKCktPnJl
cGFpbnQoKTsKKyAgICBpZiAobmVlZFJlcGFpbnQpIHsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVy
ZXIgPSBkZXN0aW5hdGlvbi5yZW5kZXJlcigpKQorICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFp
bnQoKTsKKyAgICB9CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBzdGQ6OmZ1bmN0
aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24sIFJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdN
YXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2Rl
JiBub2RlLCBPZmZzZXRSYW5nZSByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiB0eXBlcywgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYp
PiYgZmlsdGVyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKQogewotICAgIGlmIChsZW5ndGggPD0gMCkK
KyAgICBpZiAocmFuZ2Uuc3RhcnQgPj0gcmFuZ2UuZW5kKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlcykpCisgICAgaWYgKCFwb3NzaWJs
eUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICByZXR1cm47Ci0gICAgQVNTRVJUKCEobV9tYXJr
ZXJzLmlzRW1wdHkoKSkpOworICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0
ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm47
CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0g
c3RhcnRPZmZzZXQgKyBsZW5ndGg7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5z
aXplKCk7KSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyIG1hcmtlciA9IGxpc3QtPmF0KGkpOwor
ICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBmYWxzZTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxpc3QtPnNpemUoKTsgKSB7CisgICAgICAgIGF1dG8mIG1hcmtlciA9IGxpc3QtPmF0KGkpOwog
CiAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVybmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdl
IGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAgICAgIGlmIChtYXJrZXIuc3Rh
cnRPZmZzZXQoKSA+PSBlbmRPZmZzZXQpCisgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQo
KSA+PSByYW5nZS5lbmQpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvLyBza2lwIG1h
cmtlciB0aGF0IGlzIHdyb25nIHR5cGUgb3IgYmVmb3JlIHRhcmdldAotICAgICAgICBpZiAobWFy
a2VyLmVuZE9mZnNldCgpIDw9IHN0YXJ0T2Zmc2V0IHx8ICFtYXJrZXJUeXBlcy5jb250YWlucyht
YXJrZXIudHlwZSgpKSkgeworICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHJhbmdl
LnN0YXJ0IHx8ICF0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAg
aSsrOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoZmls
dGVyRnVuY3Rpb24gJiYgIWZpbHRlckZ1bmN0aW9uKCZtYXJrZXIpKSB7CisgICAgICAgIGlmIChm
aWx0ZXIgJiYgIWZpbHRlcihtYXJrZXIpKSB7CiAgICAgICAgICAgICBpKys7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgd2Uga25v
dyB0aGF0IG1hcmtlciBhbmQgdGFyZ2V0IGludGVyc2VjdCBpbiBzb21lIHdheQotICAgICAgICBk
b2NEaXJ0eSA9IHRydWU7CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IG1h
cmtlciBhbmQgdGFyZ2V0IGludGVyc2VjdCBpbiBzb21lIHdheS4KKyAgICAgICAgbmVlZFJlcGFp
bnQgPSB0cnVlOwogCi0gICAgICAgIC8vIHBpdGNoIHRoZSBvbGQgbWFya2VyCiAgICAgICAgIGxp
c3QtPnJlbW92ZShpKTsKLQogICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlUGFydGlhbGx5T3Zlcmxh
cHBpbmdNYXJrZXIpCi0gICAgICAgICAgICAvLyBTdG9wIGhlcmUuIERvbid0IGFkZCByZXN1bHRp
bmcgc2xpY2VzIGJhY2suCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyBhZGQg
ZWl0aGVyIG9mIHRoZSByZXN1bHRpbmcgc2xpY2VzIHRoYXQgYXJlIGxlZnQgYWZ0ZXIgcmVtb3Zp
bmcgdGFyZ2V0Ci0gICAgICAgIGlmIChzdGFydE9mZnNldCA+IG1hcmtlci5zdGFydE9mZnNldCgp
KSB7CisgICAgICAgIGlmIChyYW5nZS5zdGFydCA+IG1hcmtlci5zdGFydE9mZnNldCgpKSB7CiAg
ICAgICAgICAgICBEb2N1bWVudE1hcmtlciBuZXdMZWZ0ID0gbWFya2VyOwotICAgICAgICAgICAg
bmV3TGVmdC5zZXRFbmRPZmZzZXQoc3RhcnRPZmZzZXQpOwotICAgICAgICAgICAgbGlzdC0+aW5z
ZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3TGVmdCkpOworICAgICAgICAgICAgbmV3
TGVmdC5zZXRFbmRPZmZzZXQocmFuZ2Uuc3RhcnQpOworICAgICAgICAgICAgbGlzdC0+aW5zZXJ0
KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShuZXdMZWZ0KSkpOwogICAgICAgICAg
ICAgLy8gaSBub3cgcG9pbnRzIHRvIHRoZSBuZXdseS1pbnNlcnRlZCBub2RlLCBidXQgd2Ugd2Fu
dCB0byBza2lwIHRoYXQgb25lCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIH0KLSAgICAgICAg
aWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IGVuZE9mZnNldCkgeworICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCgpID4gcmFuZ2UuZW5kKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlciBu
ZXdSaWdodCA9IG1hcmtlcjsKLSAgICAgICAgICAgIG5ld1JpZ2h0LnNldFN0YXJ0T2Zmc2V0KGVu
ZE9mZnNldCk7Ci0gICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1h
cmtlcihuZXdSaWdodCkpOworICAgICAgICAgICAgbmV3UmlnaHQuc2V0U3RhcnRPZmZzZXQocmFu
Z2UuZW5kKTsKKyAgICAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5kZXJlZERvY3VtZW50TWFy
a2VyKFdURk1vdmUobmV3UmlnaHQpKSk7CiAgICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8g
dGhlIG5ld2x5LWluc2VydGVkIG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKICAg
ICAgICAgICAgIGkrKzsKICAgICAgICAgfQpAQCAtNTIxLDExNyArNDI4LDExNyBAQCB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlw
ZXMgPSB7IH07CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUucmVuZGVyZXIoKSkK
LSAgICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKG5lZWRSZXBhaW50
KSB7CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAg
ICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKKyAgICB9CiB9CiAKLURvY3VtZW50TWFya2VyKiBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlv
dXRQb2ludCYgcG9pbnQsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCitE
b2N1bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5n
UG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSB0eXBlKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQorICAg
IGlmICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7Ci0KLSAgICB1cGRhdGVSZWN0c0Zv
ckludmFsaWRhdGVkTWFya2Vyc09mVHlwZShtYXJrZXJUeXBlKTsKLQotICAgIGZvciAoYXV0byYg
bm9kZUFuZE1hcmtlcnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIg
OiAqbm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSgp
ICE9IG1hcmtlclR5cGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgQVNTRVJUKCFt
X21hcmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgaWYgKG1hcmtlci5jb250YWlucyhw
b2ludCkpCisgICAgdXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUodHlwZSk7
CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2Vycy52YWx1ZXMoKSkgeworICAg
ICAgICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2VycykgeworICAgICAgICAgICAgaWYg
KG1hcmtlci50eXBlKCkgPT0gdHlwZSAmJiBtYXJrZXIuY29udGFpbnMocG9pbnQpKQogICAgICAg
ICAgICAgICAgIHJldHVybiAmbWFya2VyOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJu
IG51bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVu
dE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlJiBub2Rl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIGlm
ICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBpZiAoIXBvc3NpYmx5SGFz
TWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVuZGVy
ZWREb2N1bWVudE1hcmtlcio+IHJlc3VsdDsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJr
ZXJzLmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAg
ICAgaWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgZm9yIChhdXRvJiBt
YXJrZXIgOiAqbGlzdCkgewotICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUoKSkpCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJm1hcmtlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpmb3JFYWNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgRnVuY3Rpb248Ym9vbChSZW5kZXJlZERv
Y3VtZW50TWFya2VyJik+IGZ1bmN0aW9uKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJz
KG1hcmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyKj4oKTsKLQotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZm91bmRNYXJr
ZXJzOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigp
OwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOworICAgIGlm
ICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VS
VCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5n
ZS5wYXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUo
KTsgbm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2Rl
KSkgewotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDog
bWFya2Vyc0Zvcigqbm9kZSkpIHsKLSAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFp
bnMobWFya2VyLT50eXBlKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0g
cmFuZ2Uuc3RhcnRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGlmIChub2RlID09ICZlbmRDb250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49
IHJhbmdlLmVuZE9mZnNldCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgZm91bmRNYXJrZXJzLmFwcGVuZChtYXJrZXIpOworICAgIGZvciAoYXV0byYgbm9kZSA6IGlu
dGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBpZiAoYXV0byBsaXN0ID0gbV9tYXJr
ZXJzLmdldCgmbm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0
ZXJEYXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIG5vZGUpOworICAgICAgICAgICAgZm9yIChhdXRvJiBt
YXJrZXIgOiAqbGlzdCkgeworICAgICAgICAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHN0b3JlZCBp
biBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZS4K
KyAgICAgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gb2Zmc2V0UmFuZ2Uu
ZW5kKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobWFy
a2VyLmVuZE9mZnNldCgpID4gb2Zmc2V0UmFuZ2Uuc3RhcnQgJiYgdHlwZXMuY29udGFpbnMobWFy
a2VyLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKG1hcmtlcikp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBmb3VuZE1hcmtlcnM7CiB9
CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5v
ZGUsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
bWFya2Vyc0luUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJr
ZXJzKG1hcmtlclR5cGVzKSkKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWFraW5nIGZvckVhY2gg
cHVibGljIGFuZCBjaGFuZ2luZyBjYWxsZXJzIHRvIHVzZSB0aGF0IGZ1bmN0aW9uIGluc3RlYWQg
b2YgdGhpcyBvbmUuCisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
OworICAgIGZvckVhY2gocmFuZ2UsIHR5cGVzLCBbJl0gKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIm
IG1hcmtlcikgeworICAgICAgICBtYXJrZXJzLmFwcGVuZCgmbWFya2VyKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBtYXJrZXJzOworfQorCit2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQoreworICAgIGlmICghcG9zc2libHlI
YXNNYXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJz
LmlzRW1wdHkoKSk7CiAgICAgCiAgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKCZu
b2RlKTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQotICAgICAgICByZW1v
dmVNYXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3Zl
TWFya2Vyc0Zyb21MaXN0KGl0ZXJhdG9yLCB0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVt
b3ZlTWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQog
ewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBpZiAoIXBv
c3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1f
bWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9y
KG1fbWFya2Vycy5rZXlzKCkpKSB7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlcnMu
ZmluZChub2RlKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAg
ICAgICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwot
ICAgIH0KLQotICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLnJlbW92ZShtYXJrZXJU
eXBlcyk7CisgICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9yKG1fbWFya2Vycy5rZXlz
KCkpKQorICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QobV9tYXJrZXJzLmZpbmQobm9kZSks
IHR5cGVzKTsKKyAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUodHlwZXMp
OwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21M
aXN0KE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxl
cjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9w
dGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7CiAgICAgYm9vbCBu
ZWVkc1JlcGFpbnRpbmcgPSBmYWxzZTsKICAgICBib29sIGxpc3RDYW5CZVJlbW92ZWQ7CiAKLSAg
ICBpZiAobWFya2VyVHlwZXMgPT0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkgeworICAg
IGlmICh0eXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSB7CiAgICAgICAgIG5l
ZWRzUmVwYWludGluZyA9IHRydWU7CiAgICAgICAgIGxpc3RDYW5CZVJlbW92ZWQgPSB0cnVlOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpdGVyYXRvci0+dmFsdWUu
Z2V0KCk7CisgICAgICAgIGF1dG8gbGlzdCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICkgewogICAgICAgICAg
ICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8v
IHNraXAgbm9kZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQotICAgICAgICAg
ICAgaWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAg
ICAgaWYgKCF0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAgICAg
ICsraTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY1Nywz
MSArNTY0LDIwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJz
RnJvbUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvCiAgICAgfQogfQogCi12b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpyZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkK
KyAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAg
ICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgLy8gb3V0ZXIgbG9vcDogcHJv
Y2VzcyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3VtZW50Ci0gICAgZm9yIChhdXRvJiBt
YXJrZXIgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1hcmtlci5rZXkuZ2V0
KCk7Ci0KLSAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGUg
Y3VycmVudCBub2RlCi0gICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwotICAg
ICAgICBmb3IgKGF1dG8mIGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkgewotICAgICAg
ICAgICAgaWYgKG1hcmtlclR5cGVzLmNvbnRhaW5zKGRvY3VtZW50TWFya2VyLnR5cGUoKSkpIHsK
LSAgICAgICAgICAgICAgICBub2RlTmVlZHNSZXBhaW50ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8m
IG5vZGVNYXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDog
Km5vZGVNYXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAodHlwZXMuY29udGFpbnMobWFy
a2VyLnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGVN
YXJrZXJzLmtleS0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotCi0gICAgICAgIGlmICghbm9kZU5lZWRzUmVwYWludCkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIC8vIGNhdXNlIHRoZSBub2RlIHRvIGJlIHJlZHJhd24KLSAgICAgICAgaWYg
KGF1dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgcmVuZGVyZXIt
PnJlcGFpbnQoKTsKICAgICB9CiB9CiAKQEAgLTY5MSwxNSArNTg3LDE2IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIGluCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwogCi0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwor
ICAgIGF1dG8gbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBkaWRTaGlmdE1hcmtlciA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNpemUoKTsgKSB7Ci0gICAgICAgIFJlbmRlcmVk
RG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotICAgICAgICAvLyBGSVhNRTog
SG93IGNhbiB0aGlzIHBvc3NpYmx5IGJlIGlPUy1zcGVjaWZpYyBjb2RlPworICAgICAgICBhdXRv
JiBtYXJrZXIgPSBsaXN0LT5hdChpKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAg
ICAgIC8vIEZJWE1FOiBObyBvYnZpb3VzIHJlYXNvbiB0aGlzIHNob3VsZCBiZSBpT1Mtc3BlY2lm
aWMuIFJlbW92ZSB0aGUgI2lmIGF0IHNvbWUgcG9pbnQuCiAgICAgICAgIGludCB0YXJnZXRTdGFy
dE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0YXJn
ZXRFbmRPZmZzZXQgPSBtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKICAgICAgICAgaWYgKHRh
cmdldFN0YXJ0T2Zmc2V0ID49IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5k
T2Zmc2V0IDw9IDApIHsKQEAgLTcwNywxNiArNjA0LDE1IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQs
IGluCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCisKICAgICAgICAg
aWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICBB
U1NFUlQoKGludCltYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRhID49IDApOwogICAgICAgICAg
ICAgbWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7CiAgICAgICAgICAgICBkaWRTaGlmdE1hcmtl
ciA9IHRydWU7Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIH0KLSNlbHNlCi0g
ICAgICAgIC8vIEZJWE1FOiBJbnNlcnRpbmcgdGV4dCBpbnNpZGUgYSBEb2N1bWVudE1hcmtlciBk
b2VzIG5vdCBncm93IHRoZSBtYXJrZXIuCi0gICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTA0Pi4KLSAgICAgICAgfSBlbHNlIGlmIChtYXJr
ZXIuZW5kT2Zmc2V0KCkgPiBzdGFydE9mZnNldCkgeworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgICAgIC8vIEZJWE1FOiBObyBvYnZpb3VzIHJlYXNvbiB0aGlzIHNob3VsZCBiZSBpT1Mt
c3BlY2lmaWMuIFJlbW92ZSB0aGUgI2lmIGF0IHNvbWUgcG9pbnQuCisgICAgICAgIGVsc2UgaWYg
KG1hcmtlci5lbmRPZmZzZXQoKSA+IHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAobWFy
a2VyLmVuZE9mZnNldCgpICsgZGVsdGEgPD0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAg
ICAgICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC03MjUsMTQwICs2MjEsNTggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0
TWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAg
IGRpZFNoaWZ0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCisKICAgICAgICAgKytp
OwogICAgIH0KIAogICAgIGlmIChkaWRTaGlmdE1hcmtlcikgewogICAgICAgICBpbnZhbGlkYXRl
UmVjdHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwotCi0gICAgICAgIGlmIChub2RlLnJlbmRlcmVy
KCkpCi0gICAgICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdlJiBy
YW5nZSwgYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1l
bnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1f
bWFya2Vycy5pc0VtcHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5z
dGFydENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRh
aW5lcigpOwotCi0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7
Ci0KLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0
TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1
bnNpZ25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3Rh
cnRPZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVu
ZENvbnRhaW5lciA/IHJhbmdlLmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNp
Z25lZD46Om1heCgpOwotICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBzdGFydE9mZnNl
dCwgZW5kT2Zmc2V0LCBhY3RpdmUpOworICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUu
cmVuZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7CiAgICAgfQogfQog
Ci12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlJiBu
b2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2
ZSkKK2Jvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBl
cykKIHsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7Ci0gICAg
aWYgKCFsaXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGRpZEFjdGl2YXRlTWFya2Vy
ID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICAvLyBN
YXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3Qg
dGhlIHNwZWNpZmllZCByYW5nZS4KLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49
IGVuZE9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIFNraXAgbWFya2Vy
IHRoYXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFyZ2V0LgotICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQgfHwgbWFya2VyLnR5cGUoKSAhPSBEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbWFya2Vy
LnNldEFjdGl2ZU1hdGNoKGFjdGl2ZSk7Ci0gICAgICAgIGRpZEFjdGl2YXRlTWFya2VyID0gdHJ1
ZTsKLSAgICB9Ci0KLSAgICBpZiAoZGlkQWN0aXZhdGVNYXJrZXIgJiYgbm9kZS5yZW5kZXJlcigp
KQotICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBib29sIGZvdW5kTWFy
a2VyID0gZmFsc2U7CisgICAgZm9yRWFjaChyYW5nZSwgdHlwZXMsIFsmXSAoUmVuZGVyZWREb2N1
bWVudE1hcmtlciYpIHsKKyAgICAgICAgZm91bmRNYXJrZXIgPSB0cnVlOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gZm91bmRNYXJrZXI7CiB9CiAKLWJvb2wgRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFu
Z2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1h
cmtlclR5cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5
cGVzKSkKKyAgICBmb3JFYWNoKHJhbmdlLCB0eXBlcywgWyZdIChSZW5kZXJlZERvY3VtZW50TWFy
a2VyJiBtYXJrZXIpIHsKKyAgICAgICAgbWFya2VyLmNsZWFyRGF0YSgpOwogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKLQotICAgIE5vZGUm
IHN0YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRD
b250YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKLQotICAgIE5vZGUqIHBhc3RMYXN0Tm9k
ZSA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZp
cnN0Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5l
eHQoKm5vZGUpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBt
YXJrZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBl
cy5jb250YWlucyhtYXJrZXItPnR5cGUoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZz
ZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc3RhcnRPZmZzZXQoKSkpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmZW5kQ29udGFp
bmVyICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFu
Z2UuZW5kT2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0lu
dGVyc2VjdGluZ1JhbmdlKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKLXsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyht
YXJrZXJUeXBlcykpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0Vt
cHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5l
cigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0g
ICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2Rl
ID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lciA/IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgOiAw
OwotICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UuZW5kT2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJr
ZXJzLmdldChub2RlKTsKLSAgICAgICAgaWYgKCFsaXN0KQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotCi0gICAg
ICAgICAgICAvLyBtYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBh
cmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQotICAgICAgICAgICAgaWYgKG1hcmtlci5z
dGFydE9mZnNldCgpID49IGVuZE9mZnNldCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAg
ICAgICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJn
ZXQKLSAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgfHwg
IW1hcmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAg
aSsrOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBtYXJrZXIuY2xlYXJEYXRhKCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgfSk7CiB9CiAK
ICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpzaG93TWFya2VycygpIGNvbnN0CiB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlZCBub2Rl
cyBoYXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG1h
cmtlciA6IG1fbWFya2VycykgewotICAgICAgICBOb2RlKiBub2RlID0gbWFya2VyLmtleS5nZXQo
KTsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGUpOwotICAgICAgICBmb3IgKGF1
dG8mIGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkKLSAgICAgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiICVkOlslZDolZF0oJWQpIiwgZG9jdW1lbnRNYXJrZXIudHlwZSgpLCBkb2N1bWVu
dE1hcmtlci5zdGFydE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5lbmRPZmZzZXQoKSwgZG9jdW1l
bnRNYXJrZXIuaXNBY3RpdmVNYXRjaCgpKTsKLQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxu
Iik7CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIiVwIiwgbm9kZU1hcmtlcnMua2V5LmdldCgpKTsKKyAgICAgICAgZm9y
IChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpCisgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiAlZDpbJWQ6JWRdIiwgbWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0
KCksIG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAgICAgIGZwdXRjKCdcbicsIHN0ZGVycik7CiAg
ICAgfQogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxF
KFRSRUVfREVCVUdHSU5HKQorCiB2b2lkIHNob3dEb2N1bWVudE1hcmtlcnMoY29uc3QgV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBjb250cm9sbGVyKQogewogICAgIGlmIChjb250
cm9sbGVyKQogICAgICAgICBjb250cm9sbGVyLT5zaG93TWFya2VycygpOwogfQorCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCA2
MzA1YWE2NmMxNmU2OWNjNjc1NmRlMjg4NTkyYmVjZmM4ODAxMTEwLi44NmViMGZkY2Y2YmNlNTA2
ZDFmM2ZhNTNmOWY4Njc0ZmM1ZmUyM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2
IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNSw2NSAr
MzUsNDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIExh
eW91dFBvaW50OwotY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsK
IGNsYXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CitjbGFzcyBUZXh0OwogCiBzdHJ1Y3QgU2lt
cGxlUmFuZ2U7CiAKIGNsYXNzIERvY3VtZW50TWFya2VyQ29udHJvbGxlciB7CiAgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIoRG9jdW1l
bnQmKTsKICAgICB+RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFj
aCgpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdl
JiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
YWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUs
IGNvbnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5v
ZGUmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
LCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRl
eHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYsIGJvb2wgYWN0aXZlTWF0Y2gpOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0
cmluZz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOwot
ICAgIHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYs
IGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpOwotICAgIHZvaWQgYWRkRGlj
dGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgUmV0YWluUHRyPGlk
PiYgbWV0YWRhdGEpOwotI2VuZGlmCi0gICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihS
YW5nZSYpOwogCi0jaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0j
ZW5kaWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5n
ZSYsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBEb2N1bWVudE1hcmtlcjo6RGF0
YSYgPSB7IH0pOworICAgIHZvaWQgYWRkTWFya2VyKFRleHQmLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRN
YXJrZXI6OkRhdGEmJiA9IHsgfSk7CisgICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihj
b25zdCBTaW1wbGVSYW5nZSYpOwogCi0gICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzcmNOb2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50IGRl
bHRhKTsKLSAgICBib29sIGhhc01hcmtlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJU
KG1fbWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmNv
bnRhaW5zQW55KERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKLSAgICAgICAgcmV0dXJu
ICFtX21hcmtlcnMuaXNFbXB0eSgpOwotICAgIH0KLSAgICBib29sIGhhc01hcmtlcnMoUmFuZ2Um
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6
OmFsbE1hcmtlcnMoKSk7CisgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNl
dFJhbmdlLCBOb2RlJiBkZXN0aW5hdGlvbik7CisgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29uc3Q7
CisgICAgYm9vbCBoYXNNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwog
CiAgICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5nZSwgaWYg
cmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBsZXRlbHkK
ICAgICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3
aWxsIGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAg
IC8vIHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCiAgICAgZW51bSBS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsK
LSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UmLCBPcHRpb25TZXQ8
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMo
KSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFy
dGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwg
dW5zaWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBzdGQ6OmZ1bmN0
aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24gPSBudWxscHRyLCBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsK
KyAgICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSYsIE9mZnNldFJhbmdlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwg
Y29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyRnVuY3Rp
b24gPSBudWxscHRyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9O
b3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICAvLyBSZXR1cm4gZmFs
c2UgZnJvbSBmaWx0ZXJGdW5jdGlvbiB0byByZW1vdmUgdGhlIG1hcmtlci4KLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIGZpbHRlck1hcmtlcnMoUmFuZ2UmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9j
dW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGlu
Z01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWx0ZXJNYXJrZXJzKGNvbnN0IFNp
bXBsZVJhbmdlJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYg
ZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZv
aWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1h
cmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFy
a2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgaW50IGRlbHRhKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFu
Z2UmLCBib29sKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOwogCiAgICAgV0VCQ09SRV9FWFBP
UlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1h
cmtlcnMoKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiBtYXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4pOwotICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGlu
Z1JhbmdlKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7Cisg
ICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJz
SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4pOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGlu
Z1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVJlY3RzRm9ySW52YWxp
ZGF0ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKIApAQCAtMTA4
LDExICs4OSwxOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFkZE1h
cmtlcihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKLSAgICBWZWN0b3I8UmVmUHRyPFJh
bmdlPj4gY29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAgICB2b2lkIGFk
ZE1hcmtlcihOb2RlJiwgRG9jdW1lbnRNYXJrZXImJik7CisKKyAgICBzdHJ1Y3QgVGV4dFJhbmdl
IHsKKyAgICAgICAgUmVmPE5vZGU+IG5vZGU7CisgICAgICAgIE9mZnNldFJhbmdlIHJhbmdlOwor
ICAgIH07CisgICAgVmVjdG9yPFRleHRSYW5nZT4gY29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2lt
cGxlUmFuZ2UmKTsKKworICAgIHZvaWQgZm9yRWFjaChjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIGNvbnN0IEZ1bmN0aW9uPGJvb2woUmVu
ZGVyZWREb2N1bWVudE1hcmtlciYpPik7CisKKyAgICB1c2luZyBNYXJrZXJNYXAgPSBIYXNoTWFw
PFJlZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFy
a2VyPj4+OwogCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gTWFy
a2VyTGlzdDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9w
dHI8TWFya2VyTGlzdD4+IE1hcmtlck1hcDsKICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICB2b2lkIHJlbW92ZU1h
cmtlcnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJr
ZXI6Ok1hcmtlclR5cGU+KTsKIApAQCAtMTIyLDYgKzExMCwxMiBAQCBwcml2YXRlOgogICAgIERv
Y3VtZW50JiBtX2RvY3VtZW50OwogfTsKIAoraW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1w
dHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1l
bnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOworICAgIHJldHVybiAhbV9tYXJrZXJzLmlzRW1wdHko
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdH
SU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGM5ZGJkNWU1M2EzZTYyMjE0YWQ4ZTQ3ZTg4
NGNiNjA3MzUzNTgzZmYuLmIyODE0YjAwZWZmOGZhZWY3YTYxMWQ4YjNkN2FmZTdlMTVjMjk5NjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEzODksMTUgKzEzODksNyBAQCBJbnRSZWN0IEVs
ZW1lbnQ6OmJvdW5kc0luUm9vdFZpZXdTcGFjZSgpCiAgICAgICAgICAgICByZW5kZXJCb3hNb2Rl
bE9iamVjdCgpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKICAgICB9CiAKLSAgICBpZiAocXVhZHMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1
bHQgPSBxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tp
XS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLQotICAgIHJlc3VsdCA9IHZpZXctPmNvbnRlbnRz
VG9Sb290VmlldyhyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZpZXct
PmNvbnRlbnRzVG9Sb290VmlldyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMo
cXVhZHMpKSk7CiB9CiAKIHN0YXRpYyBib29sIGxheW91dE92ZXJmbG93UmVjdENvbnRhaW5zQWxs
RGVzY2VuZGFudHMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCkBAIC0xNDY0LDExICsxNDU2
LDcgQEAgTGF5b3V0UmVjdCBFbGVtZW50OjphYnNvbHV0ZUV2ZW50Qm91bmRzKGJvb2wmIGJvdW5k
c0luY2x1ZGVBbGxEZXNjZW5kYW50RWxlbWVudHMKICAgICAgICAgICAgICAgICBWZWN0b3I8Rmxv
YXRRdWFkPiBxdWFkczsKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIDAs
IGJveC53aWR0aCgpLCBib3guaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVu
dGVkRmxvdy0+YWJzb2x1dGVRdWFkc0ZvckJveChxdWFkcywgJndhc0ZpeGVkLCAmYm94LCBsb2Nh
bFJlY3QueSgpLCBsb2NhbFJlY3QubWF4WSgpKSkgewotICAgICAgICAgICAgICAgICAgICBGbG9h
dFJlY3QgcXVhZEJvdW5kcyA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBxdWFkQm91bmRzLnVuaXRlKHF1YWRzW2ldLmJvdW5kaW5nQm94KCkp
OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5
b3V0UmVjdChxdWFkQm91bmRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5b3V0
UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKHF1YWRzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVkQm91bmRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgICAgICAgICAvLyBQcm9iYWJseSBjb2x1bW5zLiBKdXN0IHJldHVybiB0aGUgYm91bmRzIG9m
IHRoZSBtdWx0aWNvbCBibG9jayBmb3Igbm93LgpAQCAtMTYwMywxMSArMTU5MSw3IEBAIE9wdGlv
bmFsPHN0ZDo6cGFpcjxSZW5kZXJPYmplY3QqLCBGbG9hdFJlY3Q+PiBFbGVtZW50Ojpib3VuZGlu
Z0Fic29sdXRlUmVjdFdpdGhvCiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQgPSBxdWFkc1swXS5ib3Vu
ZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kp
Ci0gICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLQotICAgIHJl
dHVybiBzdGQ6Om1ha2VfcGFpcihyZW5kZXJlciwgcmVzdWx0KTsKKyAgICByZXR1cm4gc3RkOjpt
YWtlX3BhaXIocmVuZGVyZXIsIHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAogRmxv
YXRSZWN0IEVsZW1lbnQ6OmJvdW5kaW5nQ2xpZW50UmVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBkMjA4
YzcxNzk2OTE3MmFjNDExMzc4MDIyZDQ4Y2E4N2VhYzBlZjM3Li45ZTYwYTQwOGY5NzMyMWIzYjk3
OWUyZjNkOTI5NWViYTc1NGIzYzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9k
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIwMyw3ICsyMDMsNyBAQCBw
dWJsaWM6CiAjZW5kaWYKICAgICBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IGdldEZsYWcoSXNIVE1MRmxhZykgfHwgZ2V0RmxhZyhJc1NWR0ZsYWcpIHx8IGdldEZsYWcoSXNN
YXRoTUxGbGFnKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBj
b25zdCB7IHJldHVybiAhaXNDb250YWluZXJOb2RlKCkgJiYgKGlzVGV4dE5vZGUoKSB8fCB2aXJ0
dWFsSXNDaGFyYWN0ZXJEYXRhKCkpOyB9CiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVPd25lckVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdp
bkVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQpAQCAtMzExLDE5ICszMTEsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlbnRU
YXJnZXREYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNFdmVudFRhcmdldERhdGFGbGFn
KTsgfQogICAgIHZvaWQgc2V0SGFzRXZlbnRUYXJnZXREYXRhKGJvb2wgZmxhZykgeyBzZXRGbGFn
KGZsYWcsIEhhc0V2ZW50VGFyZ2V0RGF0YUZsYWcpOyB9CiAKLSAgICBlbnVtIFVzZXJTZWxlY3RB
bGxUcmVhdG1lbnQgewotICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmls
aXR5LAotICAgICAgICBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQotICAgIH07CiAg
ICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIGJvb2wgaXND
b250ZW50UmljaGx5RWRpdGFibGUoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zcGVj
dCgpOwogCisgICAgZW51bSBVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHsKKyAgICAgICAgVXNlclNl
bGVjdEFsbERvZXNOb3RBZmZlY3RFZGl0YWJpbGl0eSwKKyAgICAgICAgVXNlclNlbGVjdEFsbElz
QWx3YXlzTm9uRWRpdGFibGUKKyAgICB9OwogICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZShVc2Vy
U2VsZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVk
aXRhYmxlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVFZGl0YWJpbGl0eSh0
cmVhdG1lbnQsIFNob3VsZFVwZGF0ZVN0eWxlOjpEb05vdFVwZGF0ZSkgIT0gRWRpdGFiaWxpdHk6
OlJlYWRPbmx5OwogICAgIH0KKwogICAgIC8vIEZJWE1FOiBSZXBsYWNlIGV2ZXJ5IHVzZSBvZiB0
aGlzIGZ1bmN0aW9uIGJ5IGhlbHBlcnMgaW4gRWRpdGluZy5oCiAgICAgYm9vbCBoYXNSaWNobHlF
ZGl0YWJsZVN0eWxlKCkgY29uc3QKICAgICB7CkBAIC0zNDMsMTIgKzM0NCw4IEBAIHB1YmxpYzoK
ICAgICAvLyBvZiBhIERvY3VtZW50IG5vZGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQq
IG93bmVyRG9jdW1lbnQoKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFz
c29jaWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICAgLy8gQSBEb2N1bWVudCBub2RlIHJldHVybnMg
aXRzZWxmLgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gdHJlZVNjb3BlKCkuZG9jdW1lbnRTY29wZSgpOwotICAgIH0KKyAgICAvLyBSZXR1cm5z
IHRoZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLiBBIGRvY3VtZW50IG5vZGUg
cmV0dXJucyBpdHNlbGYuCisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
dHJlZVNjb3BlKCkuZG9jdW1lbnRTY29wZSgpOyB9CiAKICAgICBUcmVlU2NvcGUmIHRyZWVTY29w
ZSgpIGNvbnN0CiAgICAgewpAQCAtMzYwLDEwICszNTcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRvY3VtZW50IGFu
ZCBpcyBpbiBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudCdzCiAgICAgLy8gbm9kZSB0cmVlLCBmYWxz
ZSBvdGhlcndpc2UgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29ubmVjdGVkKS4KLSAg
ICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QKLSAgICB7IAotICAgICAgICByZXR1cm4gZ2V0Rmxh
ZyhJc0Nvbm5lY3RlZEZsYWcpOwotICAgIH0KKyAgICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3Qg
eyByZXR1cm4gZ2V0RmxhZyhJc0Nvbm5lY3RlZEZsYWcpOyB9CiAgICAgYm9vbCBpc0luVXNlckFn
ZW50U2hhZG93VHJlZSgpIGNvbnN0OwogICAgIGJvb2wgaXNJblNoYWRvd1RyZWUoKSBjb25zdCB7
IHJldHVybiBnZXRGbGFnKElzSW5TaGFkb3dUcmVlRmxhZyk7IH0KICAgICBib29sIGlzSW5UcmVl
U2NvcGUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKHN0YXRpY19jYXN0PE5vZGVGbGFncz4oSXND
b25uZWN0ZWRGbGFnIHwgSXNJblNoYWRvd1RyZWVGbGFnKSk7IH0KQEAgLTM3MSw2ICszNjUsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBpc0RvY3VtZW50VHlwZU5vZGUoKSBjb25zdCB7IHJldHVybiBu
b2RlVHlwZSgpID09IERPQ1VNRU5UX1RZUEVfTk9ERTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGls
ZFR5cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHVuc2ln
bmVkIGNvdW50Q2hpbGROb2RlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogICAgIE5vZGUqIHRyYXZlcnNlVG9DaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKIAogICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCk7
CkBAIC00MTUsNyArNDEwLDYgQEAgcHVibGljOgogICAgICAgICBEb25lLAogICAgICAgICBOZWVk
c1Bvc3RJbnNlcnRpb25DYWxsYmFjaywKICAgICB9OwotCiAgICAgc3RydWN0IEluc2VydGlvblR5
cGUgewogICAgICAgICBib29sIGNvbm5lY3RlZFRvRG9jdW1lbnQgeyBmYWxzZSB9OwogICAgICAg
ICBib29sIHRyZWVTY29wZUNoYW5nZWQgeyBmYWxzZSB9OwpAQCAtNjQzLDYgKzYzNyw4IEBAIHBy
aXZhdGU6CiAgICAgICAgIHJldHVybiBQc2V1ZG9JZDo6Tm9uZTsKICAgICB9CiAKKyAgICB2aXJ0
dWFsIGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7CiAKICAgICB2b2lk
IHJlZkV2ZW50VGFyZ2V0KCkgZmluYWw7CkBAIC02NzksNiArNjc1LDcgQEAgcHJpdmF0ZToKIH07
CiAKICNpZiBBU1NFUlRfRU5BQkxFRAorCiBpbmxpbmUgdm9pZCBhZG9wdGVkKE5vZGUqIG5vZGUp
CiB7CiAgICAgaWYgKCFub2RlKQpAQCAtNjg3LDYgKzY4NCw3IEBAIGlubGluZSB2b2lkIGFkb3B0
ZWQoTm9kZSogbm9kZSkKICAgICBBU1NFUlQoIW5vZGUtPm1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0
aW9uKTsKICAgICBub2RlLT5tX2Fkb3B0aW9uSXNSZXF1aXJlZCA9IGZhbHNlOwogfQorCiAjZW5k
aWYgLy8gQVNTRVJUX0VOQUJMRUQKIAogQUxXQVlTX0lOTElORSB2b2lkIE5vZGU6OnJlZigpIGNv
bnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCBiZTRlYjY5OTUxMDQwMTgzZGJjNDIwNmVkMDBkNDhi
ZDg4NDJmMDNmLi5hNzNjNjllYWY1MDg3OGRlNmNjMzllMzU5M2VmZWJlNDdmZDAxMTYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9SYW5nZS5jcHAKQEAgLTExNzcsMTEgKzExNzcsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBS
YW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqIG5vZGUsIFJlbmRlclRleHQm
IHJlbgogICAgICAgICByZXR1cm4gY2xpcHBlZFJlY3RzOwogICAgIH0KIAotICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IGZsb2F0UmVjdHM7Ci0gICAgZmxvYXRSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KHRleHRRdWFkcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykK
LSAgICAgICAgZmxvYXRSZWN0cy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsK
LSAgICByZXR1cm4gZmxvYXRSZWN0czsKKyAgICByZXR1cm4gYm91bmRpbmdCb3hlcyh0ZXh0UXVh
ZHMpOwogfQogCiB2b2lkIFJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGlu
Rml4ZWQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0
CkBAIC0xMjEzLDMzICsxMjA5LDYgQEAgdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIFIKICAgICAgICAg
KmluRml4ZWQgPSBhbGxGaXhlZCA/IEVudGlyZWx5Rml4ZWRQb3NpdGlvbiA6IChzb21lRml4ZWQg
PyBQYXJ0aWFsbHlGaXhlZFBvc2l0aW9uIDogTm90Rml4ZWRQb3NpdGlvbik7CiB9CiAKLXZvaWQg
UmFuZ2U6OmFic29sdXRlVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB1
c2VTZWxlY3Rpb25IZWlnaHQsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBpbkZpeGVkKSBjb25zdAot
ewotICAgIGJvb2wgYWxsRml4ZWQgPSB0cnVlOwotICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7
Ci0KLSAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSog
bm9kZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNh
bDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUt
PnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgYm9vbCBpc0ZpeGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+
aXNCUigpKQotICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMocXVhZHMsICZpc0Zp
eGVkKTsKLSAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewotICAg
ICAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lcigp
ID8gbV9zdGFydC5vZmZzZXQoKSA6IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQg
PSBub2RlID09ICZlbmRDb250YWluZXIoKSA/IG1fZW5kLm9mZnNldCgpIDogc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9y
KGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKHN0
YXJ0T2Zmc2V0LCBlbmRPZmZzZXQsIHVzZVNlbGVjdGlvbkhlaWdodCwgZmFsc2UgLyogaWdub3Jl
RW1wdHlUZXh0U2VsZWN0aW9ucyAqLywgJmlzRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKLSAgICAgICAg
c29tZUZpeGVkIHw9IGlzRml4ZWQ7Ci0gICAgfQotCi0gICAgaWYgKGluRml4ZWQpCi0gICAgICAg
ICppbkZpeGVkID0gYWxsRml4ZWQgPyBFbnRpcmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVk
ID8gUGFydGlhbGx5Rml4ZWRQb3NpdGlvbiA6IE5vdEZpeGVkUG9zaXRpb24pOwotfQotCiAjaWYg
UExBVEZPUk0oSU9TX0ZBTUlMWSkKIHN0YXRpYyBib29sIGludGVydmFsc1N1ZmZpY2llbnRseU92
ZXJsYXAoaW50IHN0YXJ0QSwgaW50IGVuZEEsIGludCBzdGFydEIsIGludCBlbmRCKQogewpAQCAt
MTgzMiw4ICsxODAxLDcgQEAgVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJvcmRlckFuZFRleHRS
ZWN0cyhDb29yZGluYXRlU3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3UKICAgICAgICAgICAgICAg
ICBpZiAoc3BhY2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpCiAgICAgICAgICAgICAgICAg
ICAgIG5vZGUtPmRvY3VtZW50KCkuY29udmVydEFic29sdXRlVG9DbGllbnRRdWFkcyhlbGVtZW50
UXVhZHMsIHJlbmRlcmVyLT5zdHlsZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
cXVhZCA6IGVsZW1lbnRRdWFkcykKLSAgICAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1
YWQuYm91bmRpbmdCb3goKSk7CisgICAgICAgICAgICAgICAgcmVjdHMgPSBib3VuZGluZ0JveGVz
KGVsZW1lbnRRdWFkcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8VGV4
dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBkb3duY2FzdDxU
ZXh0Pigqbm9kZSkucmVuZGVyZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA2OWNmMmI5NzJlZGE4
ZWY2MjNjNzQ0ZGU5MDMzY2JhNDZmYTNkN2I2Li4wMmNhMTMwODRjOTgwZDEwODBhYWYyMDk0MDlh
MGZlYWQ4OTQyMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTI1LDcgKzEyNSw2IEBAIHB1YmxpYzoK
ICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3goT3B0aW9uU2V0
PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAKICAgICAvLyBUcmFuc2Zvcm0t
ZnJpZW5kbHkKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFic29sdXRlVGV4dFF1YWRzKFZlY3Rv
cjxGbG9hdFF1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwgUmFuZ2VJbkZp
eGVkUG9zaXRpb24qID0gbnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRS
ZWN0IGFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4g
PSB7IH0pIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaAppbmRleCA4
OWU2NDkzYjc1YmRmMzMxZjcyYzI1MGM1ZDY0MDMxOTNiYmMzNWI0Li5lZmViMDQxZGM0MDEwMmJj
NWFlZmRjN2VlZDE1ZTQwYThhMGYxMjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UmVuZGVyZWREb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SZW5kZXJl
ZERvY3VtZW50TWFya2VyLmgKQEAgLTMzLDggKzMzLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyIDogcHVibGljIERvY3VtZW50TWFya2VyIHsK
IHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJlZERvY3VtZW50TWFya2VyKGNvbnN0IERvY3Vt
ZW50TWFya2VyJiBtYXJrZXIpCi0gICAgICAgIDogRG9jdW1lbnRNYXJrZXIobWFya2VyKQorICAg
IGV4cGxpY2l0IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXImJiBtYXJrZXIp
CisgICAgICAgIDogRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShtYXJrZXIpKQogICAgIHsKICAgICB9
CiAKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoVmVjdG9yPEZsb2F0UmVj
dD4mIHJlY3RzKQorICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhWZWN0b3I8Rmxv
YXRSZWN0PiYmIHJlY3RzKQogICAgIHsKICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKLSAgICAg
ICAgbV9yZWN0cyA9IHJlY3RzOworICAgICAgICBtX3JlY3RzID0gV1RGTW92ZShyZWN0cyk7CiAg
ICAgfQogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdCwgMT4mIHVuY2xpcHBlZEFic29sdXRl
UmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggOGVlYWQwNjFi
NjMwZGVkYTUyMzUwOWNlMTNlZTQ2ODdhYTA0ODllYS4uYTFlN2Q3N2U4MDZkNGQyMzc4NTBlMWM4
NDg3YTM1OTA5OTI2OTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC01NCwy
OCArNTQsNDUgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBT
aW1wbGVSYW5nZSYgYikKICAgICByZXR1cm4gYS5zdGFydCA9PSBiLnN0YXJ0ICYmIGEuZW5kID09
IGIuZW5kOwogfQogCi0vLyBGSVhNRTogTm9kZTo6aXNDaGFyYWN0ZXJEYXRhIHNob3VsZCB1c2Ug
YW4gYWxnb3JpdGhtIGxpa2UgdGhpcywgc2luY2UgSSdtIGFzc3VtaW5nIGl0J3MgZmFzdGVyIHRo
YW4gdGhlIGlzQ2hhcmFjdGVyRGF0YU5vZGUgdmlydHVhbCBjYWxsIGluIG1vc3QgY2FzZXMuCi1z
dGF0aWMgYm9vbCBmYXN0SXNDaGFyYWN0ZXJEYXRhKGNvbnN0IE5vZGUmIG5vZGUpCitzdGF0aWMg
Qm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5v
ZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLmlzQ29udGFpbmVyTm9kZSgpICYmIChub2RlLmlzVGV4
dE5vZGUoKSB8fCBub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgcmV0dXJuIHsgbm9k
ZSwgbm9kZS5sZW5ndGgoKSB9OwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgTm9kZTo6
bGVuZ3RoIHNpbmNlIHRoZSBET00gc3BlY2lmaWNhdGlvbiBjYWxscyB0aGlzIGEgbm9kZSdzIGxl
bmd0aC4KLXN0YXRpYyB1bnNpZ25lZCBsZW5ndGgoY29uc3QgTm9kZSYgbm9kZSkKK1NpbXBsZVJh
bmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewotICAgIGlm
IChmYXN0SXNDaGFyYWN0ZXJEYXRhKG5vZGUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hh
cmFjdGVyRGF0YT4obm9kZSkubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIG5vZGUuY291bnRDaGlsZE5v
ZGVzKCk7CisgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMo
bm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKIH0KIAot
c3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhO
b2RlJiBub2RlKQorUmVmUHRyPE5vZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmlyc3QoKSBj
b25zdAogewotICAgIHJldHVybiB7IG5vZGUsIGxlbmd0aChub2RlKSB9OworICAgIGlmIChtX3Jh
bmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAgICAgICByZXR1
cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8gY2hpbGQgPSBt
X3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5nZS5zdGFydC5v
ZmZzZXQpKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6
Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsKIH0KIAotU2lt
cGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCitSZWZQ
dHI8Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpzZW50aW5lbCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKKyAgICBpZiAobV9yYW5nZS5l
bmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJldHVybiBOb2Rl
VHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250YWluZXIpOwor
ICAgIGlmIChhdXRvIGNoaWxkID0gbV9yYW5nZS5lbmQuY29udGFpbmVyLT50cmF2ZXJzZVRvQ2hp
bGRBdChtX3JhbmdlLmVuZC5vZmZzZXQpKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgcmV0
dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2UuZW5kLmNvbnRh
aW5lcik7Cit9CisKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgJm5v
ZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDog
MCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/IHJhbmdlLmVu
ZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgfTsKK30KKwor
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3I6Om9wZXJh
dG9yKysoKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IE5vZGVUcmF2ZXJz
YWw6Om5leHQoKm1fbm9kZSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5oCmluZGV4IDk1ODJkZjhjMzMyNmM4OTg1NWJiOGRlYTExNDYzMzVjNDY3MTNh
ODEuLjU3ZjQxM2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5oCkBAIC01NSw2ICs1NSw2MSBAQCBXRUJDT1JFX0VYUE9SVCBTaW1wbGVS
YW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBib29sIG9wZXJh
dG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwogCitjbGFzcyBJ
bnRlcnNlY3RpbmdOb2RlUmFuZ2U7CitJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5n
Tm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKworc3RydWN0IE9mZnNldFJhbmdlIHsKKyAgICB1
bnNpZ25lZCBzdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBlbmQgeyAwIH07Cit9OworT2Zmc2V0
UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3Qg
Tm9kZSYpOworCitjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJsaWMgc3RkOjpp
dGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CitwdWJsaWM6CisgICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKworICAgIE5vZGUmIG9w
ZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2RlOyB9CisgICAg
Tm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiBtX25vZGUu
Z2V0KCk7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX25vZGU7IH0K
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0KKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorCisgICAgSW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRyPE5vZGU+IG1f
bm9kZTsKK307CisKK2NsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZSB7CitwdWJsaWM6CisgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CisKKyAgICBJbnRlcnNl
Y3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgpOyB9CisgICAg
SW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNlbnRpbmVsKCk7
IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBjb25zdDsKKyAgICBSZWZQ
dHI8Tm9kZT4gc2VudGluZWwoKSBjb25zdDsKKworICAgIGNvbnN0IFNpbXBsZVJhbmdlJiBtX3Jh
bmdlOworfTsKKworaW5saW5lIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50ZXJzZWN0aW5n
Tm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCisgICAgOiBtX25vZGUoV1RGTW92ZShu
b2RlKSkKK3sKK30KKworaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5nZTo6SW50ZXJzZWN0aW5n
Tm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fcmFuZ2UocmFuZ2Up
Cit7Cit9CisKK2lubGluZSBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0aW5nTm9kZXMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiB7IHJhbmdlIH07Cit9CisK
IGlubGluZSBTaW1wbGVSYW5nZTo6U2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYgcmFuZ2Up
CiAgICAgOiBTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IGYxMTI4Yjky
NDdlODhiZDliMTIwNTAxNjFiMzZlYzVhOWJlZmUyNmIuLjNmNGZjYjNhYTY5ZmNiNWFjODExYjRl
OGM3OTFhODE0N2IzNGZkNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBAIGJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQoUmFuZ2UmIG1p
c3NwZWxsaW5nUmFuZ2UpCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyhS
YW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQpCiB7Ci0gICAg
RmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoJnJhbmdlVG9SZXBs
YWNlKTsKKyAgICBhdXRvIGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UocmFuZ2VU
b1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFjZSk7CkBAIC0y
NTIsNyArMjUyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVk
KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsKICAgICAg
ICAgbV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQoKm1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUpOwot
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3Jh
bmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJv
b3RWaWV3UmVjdEZvclJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgaWYg
KCFib3VuZGluZ0JveC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRlcm5hdGl2ZVRl
eHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICAgICAg
ICAgIGNsaWVudC0+c2hvd0NvcnJlY3Rpb25BbHRlcm5hdGl2ZShtX3R5cGUsIGJvdW5kaW5nQm94
LCBtX29yaWdpbmFsVGV4dCwgcmVwbGFjZW1lbnRTdHJpbmcsIHsgfSk7CkBAIC0yNzIsNyArMjcy
LDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKICAgICAg
ICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwogICAgICAgICBz
dWdnZXN0aW9ucy5yZW1vdmUoMCk7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwotICAgICAg
ICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZShtX3JhbmdlV2l0
aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9IHJvb3RWaWV3
UmVjdEZvclJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAgaWYgKCFib3Vu
ZGluZ0JveC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGll
bnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICAgICAgICAgIGNs
aWVudC0+c2hvd0NvcnJlY3Rpb25BbHRlcm5hdGl2ZShtX3R5cGUsIGJvdW5kaW5nQm94LCBtX29y
aWdpbmFsVGV4dCwgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwpAQCAtMjg3LDcgKzI4Nyw3
IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgICAg
IHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2ZURpY3RhdGlv
bkNvbnRleHQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmICghZGljdGF0aW9uQ29udGV4dCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZp
ZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7CisgICAgICAgIGF1
dG8gYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSgqbV9yYW5nZVdpdGhBbHRlcm5h
dGl2ZSk7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwogICAgICAgICBpZiAoIWJvdW5kaW5n
Qm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVudCog
Y2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCkBAIC0zMzgsMTcgKzMzOCwxMiBAQCBi
b29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0
aW9uRW5hYmxlZCgpCiAgICAgcmV0dXJuIGVkaXRvckNsaWVudCgpICYmIGVkaXRvckNsaWVudCgp
LT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAotRmxvYXRSZWN0
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdlKGNvbnN0IFJh
bmdlKiByYW5nZSkgY29uc3QKK0Zsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
b290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNvbnN0CiB7Ci0g
ICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAgYXV0byogdmlldyA9IG1f
ZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgp
OwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS0+YWJzb2x1dGVU
ZXh0UXVhZHModGV4dFF1YWRzKTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0OwotICAgIGZv
ciAoYXV0byYgdGV4dFF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAgIGJvdW5kaW5nUmVjdC51bml0
ZSh0ZXh0UXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gdmlldy0+Y29udGVudHNUb1Jv
b3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
cmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRl
ck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CiB9ICAgICAgICAKIAogdm9pZCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0aW9uKGNvbnN0
IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKQEAgLTU0Miw4ICs1MzcsNiBAQCBib29s
IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKGNv
bnN0IERvY3VtZW50TWFya2VyJgogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4dFVJVGltZXIo
QWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczogewotICAgICAgICBpZiAoIVdU
Rjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtl
ci5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBhdXRvJiBtYXJr
ZXJEYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5k
YXRhKCkpOwogICAgICAgICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5vcmlnaW5hbFRl
eHQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MzgsNyArNjMxLDYgQEAgYm9vbCBB
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29uc3QgU3RyaW5n
JiB0ZXh0LCBjb25zdCBWZWMKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVtb3Zl
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJr
ZXIpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+KG1hcmtlci5k
YXRhKCkpKTsKICAgICBpZiAoYXV0byogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
CiAgICAgICAgIGNsaWVudC0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0PERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKICNl
bHNlCkBAIC02NDksNyArNjQxLDYgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
ZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW0KIFZlY3RvcjxT
dHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zv
ck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQogewogI2lmIFVTRShESUNUQVRJ
T05fQUxURVJOQVRJVkVTKQotICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFy
a2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGllbnQgPSBhbHRl
cm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGljdGF0aW9uQWx0
ZXJuYXRpdmVzKFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIu
ZGF0YSgpKS5jb250ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKQEAgLTY2Miwx
NSArNjUzLDEyIEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRp
Y3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2b2lkIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRl
cm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZFUykKLSAgICBF
ZGl0b3ImIGVkaXRvciA9IG1fZnJhbWUuZWRpdG9yKCk7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWxl
Y3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRvciA9IG1fZnJh
bWUuZWRpdG9yKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgp
OwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4dChhbHRlcm5h
dGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlcnMg
PSBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCk7Ci0gICAg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5hdGl2ZXNNYXJr
ZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRpY3RhdGlv
bkFsdGVybmF0aXZlc01hcmtlcnMpCisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBzZWxlY3Rpb24t
PnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKnNl
bGVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykpCiAgICAgICAg
IHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcigqbWFya2VyKTsKLQogICAgIGFw
cGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqc2VsZWN0aW9uLCBhbHRlcm5hdGl2ZVN0cmluZywg
QWx0ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2VyVHlwZXNGb3JB
cHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShh
bHRlcm5hdGl2ZVN0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk4MWQyNzA5MjA3YjZmMzk0ZGIyMWNiMWZkYTU2
NjllYTgwYTk3NDguLjk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZkZTY0MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
ci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0b3JDbGllbnQqIGVkaXRv
ckNsaWVudCgpOwogICAgIAogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hlY2tlcigpOwot
ICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSopIGNvbnN0Owor
ICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYpIGNv
bnN0OwogICAgIHZvaWQgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJl
Y3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqKTsKIAogICAgIFRpbWVyIG1fdGltZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmluZGV4
IDYzYmU5MWU5MDRjODkzNWRmZjk1NjE0Yzg3MGM5MjRhZjM0ZGJhNzkuLjRiZmQ5MjQwNWU0NmI2
NDdjZDdmMDE5NTM0OTE5N2QwMjNiOTg5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NjksMzIgKzc2OSwxMiBAQCBzdGF0aWMg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IGNvcHlNYXJrZXJzKGNvbnN0IFZlY3RvcjxS
ZW5kZXJlZERvY3VtZW50TQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4
dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmIG5vZGUsIHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KQogewotICAgIFJlZjxU
ZXh0PiBwcm90ZWN0ZWROb2RlKG5vZGUpOwotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxlciYg
bWFya2VyQ29udHJvbGxlciA9IGRvY3VtZW50KCkubWFya2VycygpOwotICAgIGF1dG8gbWFya2Vy
cyA9IGNvcHlNYXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UoUmFuZ2U6OmNy
ZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsgY291bnQpLCBE
b2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJh
bmdlIHsgeyBub2RlLCBvZmZzZXQgfSwgeyBub2RlLCBvZmZzZXQgKyBjb3VudCB9IH07CisgICAg
YXV0byBtYXJrZXJzID0gY29weU1hcmtlcnMoZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0lu
UmFuZ2UocmFuZ2UsIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAgICByZXBsYWNl
VGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQpOwotICAgIGF1
dG8gbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBvZmZzZXQsICZu
b2RlLCBvZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZvciAoY29uc3Qg
YXV0byYgbWFya2VyIDogbWFya2VycykgewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ICAgIGlmIChtYXJrZXIuaXNEaWN0YXRpb24oKSkgewotICAgICAgICAgICAgbWFya2VyQ29udHJv
bGxlci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlv
bigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJ
VkVOX1RFWFRfQ0hFQ0tJTkcpCi0gICAgICAgIGlmIChtYXJrZXIudHlwZSgpID09IERvY3VtZW50
TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZykgewotICAgICAgICAgICAgaWYgKCFXVEY6Omhv
bGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+
KG1hcmtlci5kYXRhKCkpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGF1dG8mIHRleHRDaGVja2luZ0RhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKTsKLSAgICAgICAgICAgIG1hcmtlckNv
bnRyb2xsZXIuYWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIobmV3UmFuZ2UsIHRleHRDaGVj
a2luZ0RhdGEua2V5LCB0ZXh0Q2hlY2tpbmdEYXRhLnZhbHVlKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJr
ZXIobmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigpKTsKLSAgICB9
CisgICAgcmFuZ2UuZW5kLm9mZnNldCA9IHJhbmdlLnN0YXJ0Lm9mZnNldCArIHJlcGxhY2VtZW50
VGV4dC5sZW5ndGgoKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1hcmtlcnMpCisgICAgICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgbWFya2VyLnR5cGUoKSwgbWFy
a2VyLmRhdGEoKSk7CiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpwb3NpdGlv
bk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCmluZGV4IGFkZjc0NGZjNWMzMTFmY2Y2NWM2
ZmQ3YTM1MWVmNjMwMDA4MWI5NzEuLjg0YzJhZGUxYTk0OTdmOGI2NmEzYzExNjM2ZDE2NDBlNTI5
ZGFhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21tYW5kLmNwcApA
QCAtNjYsOCArNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8mIG1hcmtlckNvbnRyb2xsZXIg
PSB0ZXh0Tm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKICAgICAgICAgZm9yIChhdXRvJiBhbHRl
cm5hdGl2ZSA6IG1fYWx0ZXJuYXRpdmVzKSB7CiAgICAgICAgICAgICBEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uRGF0YSBkYXRhIHsgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4dCwgdGV4dFRv
QmVJbnNlcnRlZC5zdWJzdHJpbmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0ZXJuYXRpdmUu
cmFuZ2VMZW5ndGgpIH07Ci0gICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFkZE1hcmtlclRv
Tm9kZSh0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9mSW5zZXJ0aW9u
LCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVy
bmF0aXZlcywgV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFk
ZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9m
SW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OlNwZWxs
Q2hlY2tpbmdFeGVtcHRpb24pOworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRNYXJr
ZXIodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlvbiwg
YWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5h
dGl2ZXMsIFdURk1vdmUoZGF0YSkpOworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxlci5hZGRN
YXJrZXIodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZkluc2VydGlv
biwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5n
RXhlbXB0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5j
cHAKaW5kZXggZTgxOGQxMmIyMzkxMjBhMWFhMmJmZjVlMGFjYjc5YTZkMjBkOWQwMS4uYjJmMjg2
YzBiNmVjMWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCkBAIC0xMTI0LDE5ICsxMTI0LDE4IEBAIFZpc2libGVQb3NpdGlvbiB2aXNpYmxl
UG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSYgbm9kZSwgaW50IGlu
CiAgICAgaWYgKGluZGV4IDw9IDApCiAgICAgICAgIHJldHVybiB7IGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZSgmbm9kZSksIERPV05TVFJFQU0gfTsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50
cyhub2RlKTsKLSAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7CisgICAgYXV0
byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsKKyAgICBDaGFy
YWN0ZXJJdGVyYXRvciBpdChyYW5nZSk7CiAgICAgaXQuYWR2YW5jZShpbmRleCAtIDEpOwogCiAg
ICAgaWYgKCFpdC5hdEVuZCgpICYmIGl0LnRleHQoKS5sZW5ndGgoKSA9PSAxICYmIGl0LnRleHQo
KVswXSA9PSAnXG4nKSB7CiAgICAgICAgIC8vIEZJWE1FOiB3b3JrYXJvdW5kIGZvciBjb2xsYXBz
ZWQgcmFuZ2UgKHdoZXJlIG9ubHkgc3RhcnQgcG9zaXRpb24gaXMgY29ycmVjdCkgZW1pdHRlZCBm
b3Igc29tZSBlbWl0dGVkIG5ld2xpbmVzLgogICAgICAgICBpdC5hZHZhbmNlKDEpOwogICAgICAg
ICBpZiAoIWl0LmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7CisgICAgICAgICAg
ICByZXR1cm4geyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5zdGFydCkg
fTsKICAgICB9CiAKLSAgICByZXR1cm4geyBpdC5hdEVuZCgpID8gcmFuZ2UtPmVuZFBvc2l0aW9u
KCkgOiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5lbmQpLCBVUFNUUkVB
TSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigoaXQuYXRFbmQo
KSA/IHJhbmdlIDogaXQucmFuZ2UoKSkuZW5kKSwgVVBTVFJFQU0gfTsKIH0KIAogLy8gRGV0ZXJt
aW5lcyB3aGV0aGVyIHR3byBwb3NpdGlvbnMgYXJlIHZpc2libHkgbmV4dCB0byBlYWNoIG90aGVy
IChmaXJzdCB0aGVuIHNlY29uZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCBhNGUw
NjAyMzk1ZTI3OTc5OWJmMzg5MjMyYjNlZDY4MmI3ZWU0ZmE0Li5mOGM5MzM4MjY4ZWRmZTM0OWRi
ZWNkYzAzYjFmYTdiMThjNDFlODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0z
MDc2LDggKzMwNzYsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0
ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8vIG9mIG1hcmtl
ciB0aGF0IGNvbnRhaW5zIHRoZSB3b3JkIGluIHF1ZXN0aW9uLCBhbmQgcmVtb3ZlIG1hcmtlciBv
biB0aGF0IHdob2xlIHJhbmdlLgogICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCgpLCBzdGFydE9mRmlyc3RXb3JkLmRlZXBFcXVpdmFsZW50KCksIGVuZE9mTGFzdFdv
cmQuZGVlcEVxdWl2YWxlbnQoKSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFu
Z2UsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwotICAgIGZvciAoYXV0
byogbWFya2VyIDogbWFya2VycykKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCku
bWFya2VycygpLm1hcmtlcnNJblJhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlcykpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+
cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKCptYXJrZXIpOwogCiAgICAgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1RvUmVtb3ZlIHsK
QEAgLTM2MjYsNyArMzYyNSw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4
dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAgICAgICAgICAg
ICBtYXRjaGVzLT5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSk7CiAKICAgICAg
ICAgaWYgKG1hcmtNYXRjaGVzKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRk
TWFya2VyKGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSksIERvY3VtZW50TWFya2VyOjpUZXh0
TWF0Y2gpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3Vs
dFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAvLyBTdG9wIGxv
b2tpbmcgaWYgd2UgaGl0IHRoZSBzcGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2YgMCBtZWFucyBu
byBsaW1pdC4KICAgICAgICAgaWYgKGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49IGxpbWl0KQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZTAzNzhhZWI3YTkyYjUyYWE1ZGQ5YzdiOWU5NTBh
MWZlMDRlNWQ3My4uZmJlNzEyYTk4ZGRkMDY4OWZjZGFiOWFjYzg4NThlMWMyMTIxNzc0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0zOTksOCArMzk5LDggQEAgcHVibGljOgogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybU1hcmtlZFRleHQoKTsKICAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYsIEVsZW1lbnQmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRleHRBbGlnbm1lbnRGb3JDaGFuZ2VkQmFzZVdy
aXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9p
ZCBpbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRp
b25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0
b3I8U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEsIEVs
ZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERpY3RhdGlvblBocmFzZXMo
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVt
ZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIGlkIG1l
dGFkYXRhLCBFbGVtZW50Jik7CiAjZW5kaWYKICAgICAKICAgICBlbnVtIGNsYXNzIEtpbGxSaW5n
SW5zZXJ0aW9uTW9kZSB7IFByZXBlbmRUZXh0LCBBcHBlbmRUZXh0IH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDI2ZmE3NjExYjE5MGFlZWIzZGE3YTZi
YThmMzI4MjU3MDBlZmRhYTQuLjQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFiNzg1MjQ1M2ZiZmE5N2Iz
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0yMzI1
LDMzICsyMzI1LDE5IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0aW9uQm91bmRz
KENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQgRnJhbWVTZWxl
Y3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4m
IHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQpIGNvbnN0CiB7
Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpOwotICAg
IGlmICghcm9vdCkKKyAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7Ci0gICAgZ2V0VGV4
dFJlY3RhbmdsZXModGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCk7Ci0KLSAgICBGbG9hdFJlY3Qg
dmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3Qo
U2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwotCi0gICAgZm9y
IChjb25zdCBhdXRvJiByZWN0IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBpbnRl
cnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50UmVjdCk7Ci0g
ICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWN0
YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgRnJhbWVT
ZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiByZWN0YW5nbGVz
LCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAotewogICAgIFJlZlB0
cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICghcmFuZ2UpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdl
LT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcywgdGV4dFJlY3RIZWlnaHQgPT0gVGV4dFJlY3Rhbmds
ZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6
IHF1YWRzKQotICAgICAgICByZWN0YW5nbGVzLmFwcGVuZChxdWFkLmJvdW5kaW5nQm94KCkpOwor
ICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwor
ICAgIGZvciAoYXV0byYgcmVjdCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRRdWFkcygqcmFuZ2UsIHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5nbGVIZWlnaHQ6
OlNlbGVjdGlvbkhlaWdodCkpKSB7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9uUmVjdCA9IGlu
dGVyc2VjdGlvbihyZWN0LCB2aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBpZiAoIWludGVy
c2VjdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVjdGFuZ2xlcy5hcHBlbmQoaW50
ZXJzZWN0aW9uUmVjdCk7CisgICAgfQogfQogCiAvLyBTY2FucyBsb2dpY2FsbHkgZm9yd2FyZCBm
cm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDI4NTU5MTc4NGE5ZmUzYTI3MWU4NDhlMTEyY2Yw
NTI3MzQ3MDQ4MDAuLmU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1YTA1MDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTI3Niw3ICsyNzYsNiBA
QCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIFRleHRSZWN0YW5nbGVIZWlnaHQgeyBUZXh0SGVp
Z2h0LCBTZWxlY3Rpb25IZWlnaHQgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldENsaXBw
ZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0UmVjdGFuZ2xl
SGVpZ2h0ID0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBjb25zdDsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+
JiwgVGV4dFJlY3RhbmdsZUhlaWdodCA9IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhl
aWdodCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRm9ybUVsZW1lbnQqIGN1cnJl
bnRGb3JtKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3Bs
aXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHRO
b2RlQ29tbWFuZC5jcHAKaW5kZXggOWI3NzYxMDJmOWYxNWFjOTY2ODk5MzgwOTdjYjIyZWVhMmZk
MGJiOS4uNzNkNjA5Y2FjOThlMWU1MjgyN2JmYzNhN2EzN2UyYzg1YjFkZmUxZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAKQEAgLTYyLDcg
KzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBtX3Rl
eHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4dCkpOwogICAg
IEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vycyht
X3RleHQyLCAwLCBtX29mZnNldCwgKm1fdGV4dDEsIDApOworICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmNvcHlNYXJrZXJzKG1fdGV4dDIsIHsgMCwgbV9vZmZzZXQgfSwgKm1fdGV4dDEpOwogCiAg
ICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcgQEAgdm9pZCBT
cGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDItPmluc2VydERh
dGEoMCwgcHJlZml4VGV4dCk7CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5TWFya2Vy
cygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0MiwgMCk7CisgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMoKm1fdGV4dDEsIHsgMCwgcHJlZml4VGV4dC5s
ZW5ndGgoKSB9LCBtX3RleHQyKTsKICAgICBtX3RleHQxLT5yZW1vdmUoKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDU1N2JmZWNh
ZWEwMjMyODVhZWEwOTBkNGYwNTcxZDdkYThkMzNhYmUuLmY0ZjA2ZmZlNzEyMjdlMjNiMWE2ZWRi
OTVkOGFkMjNkYzQ3MGU4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW0KQEAgLTEwNSwxNyArMTA1LDE1IEBAIHN0YXRpYyBSZXRhaW5QdHI8RERB
Y3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRp
b24KICAgICBpZiAoIW1haW5SZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZXRh
aW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFj
dGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0
UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICBy
ZXR1cm4gbmlsOworCisgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFj
dGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxS
ZXN1bHRzOkBbIChfX2JyaWRnZSBpZCltYWluUmVzdWx0IF1dOwogICAgIFthY3Rpb25Db250ZXh0
IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKLSAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICBk
ZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1lVmlldyogZnJh
bWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERhdGFCb3VuZGlu
Z0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKSk7Ci0KKyAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRl
bnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7CiAgICAgZGV0ZWN0
ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7CiAKICAgICByZXR1cm4gYWN0aW9uQ29udGV4
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1h
bmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElP
Uy5jcHAKaW5kZXggNWI0M2NhMzNlOTBmYWEyZTZmZTE4NDVjOTIzN2IwYTlmZWE3NDNjMC4uOGFj
NzY5NDAyMDkzNTBmZjQzYWVjMTQ0ZDMzYWQ2MTYwMTI2ZTQzNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAgLTM5LDEzICsz
OSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURpY3RhdGlvbkNvbW1hbmRJT1M6OkRp
Y3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0cmlu
Zz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkKK0RpY3RhdGlv
bkNvbW1hbmRJT1M6OkRpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0
b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEpCiAgICAg
OiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCwgRWRpdEFjdGlvbjo6RGljdGF0aW9uKQog
ICAgICwgbV9kaWN0YXRpb25QaHJhc2VzKFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcykpCi0gICAg
LCBtX21ldGFkYXRhKFdURk1vdmUobWV0YWRhdGEpKQorICAgICwgbV9tZXRhZGF0YShtZXRhZGF0
YSkKIHsKIH0KIAorUmVmPERpY3RhdGlvbkNvbW1hbmRJT1M+IERpY3RhdGlvbkNvbW1hbmRJT1M6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0
YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBE
aWN0YXRpb25Db21tYW5kSU9TKGRvY3VtZW50LCBXVEZNb3ZlKGRpY3RhdGlvblBocmFzZXMpLCBt
ZXRhZGF0YSkpOworfQorCiB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogewog
ICAgIHVpbnQ2NF90IHJlc3VsdExlbmd0aCA9IDA7CkBAIC01NCw4ICs1OSwxMSBAQCB2b2lkIERp
Y3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICByZXN1bHRMZW5ndGggKz0gZmly
c3RJbnRlcnByZXRhdGlvbi5sZW5ndGgoKTsKICAgICAgICAgaW5wdXRUZXh0KGZpcnN0SW50ZXJw
cmV0YXRpb24sIHRydWUpOwogCi0gICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpID4g
MSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblBocmFzZVdp
dGhBbHRlcm5hdGl2ZXNNYXJrZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMuc2l6ZSgp
ID4gMSkgeworICAgICAgICAgICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnByZXRhdGlvbnM7
CisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMucmVtb3ZlKDApOworICAgICAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCplbmRpbmdTZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywg
V1RGTW92ZShhbHRlcm5hdGl2ZXMpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHNldEVuZGluZ1Nl
bGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVFbmQoKSkp
OwogICAgIH0KQEAgLTczLDcgKzgxLDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5kSU9TOjpkb0Fw
cGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9IHJlc29sdmVD
aGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJvb3QpLCB7IGVu
ZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0IH0pOwotICAgIGRvY3VtZW50KCkubWFy
a2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbV9tZXRhZGF0YSk7
CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0LCBtX21ldGFkYXRhKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0
aW9uQ29tbWFuZElPUy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29t
bWFuZElPUy5oCmluZGV4IGY2MzAwNjAwMTM3NTNlOGQyZThhMjAxM2NhMTcxNTVmNmQ4NmExNDIu
LmQzM2MxNTFiOGYyMzk0MDk2ZTUzMDFkMTQxMDIwNmU0MDhkZTEzMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmgKQEAgLTMwLDIxICsz
MCwxNiBAQAogI2ltcG9ydCAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKICNpbXBvcnQgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIERpY3RhdGlvbkNvbW1hbmRJT1MgOiBwdWJsaWMgQ29tcG9z
aXRlRWRpdENvbW1hbmQgeworY2xhc3MgRGljdGF0aW9uQ29tbWFuZElPUyBmaW5hbCA6IHB1Ymxp
YyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxEaWN0YXRp
b25Db21tYW5kSU9TPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVjdG9yPFN0
cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpY3RhdGlvbkNvbW1hbmRJT1MoZG9jdW1l
bnQsIFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcyksIFdURk1vdmUobWV0YWRhdGEpKSk7Ci0gICAg
fQorICAgIHN0YXRpYyBSZWY8RGljdGF0aW9uQ29tbWFuZElPUz4gY3JlYXRlKERvY3VtZW50Jiwg
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKTsK
IAogcHJpdmF0ZToKLSAgICBEaWN0YXRpb25Db21tYW5kSU9TKERvY3VtZW50JiwgVmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0YWRhdGEp
OworICAgIERpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmLCBWZWN0b3I8VmVjdG9yPFN0cmlu
Zz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEpOwogCi0gICAgdm9pZCBkb0FwcGx5
KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAKICAgICBWZWN0b3I8VmVj
dG9yPFN0cmluZz4+IG1fZGljdGF0aW9uUGhyYXNlczsKICAgICBSZXRhaW5QdHI8aWQ+IG1fbWV0
YWRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5kZXggNDEyNmVk
MTU3ZmRiMTFhMzRiY2UwZDE3NTk3M2Q1NTZmYWYyZmQ1Ni4uZjJhMmQ1MmFjNWFiZjRlNGYxMzEx
M2NhMjVkMWIyMGExNzM4ZmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklP
Uy5tbQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQYXN0ZWJvYXJk
KFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4KICAgICAgICAg
cGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0UmVwbGFj
ZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29udGFpbnMoUGFz
dGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6
Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2tx
dW90ZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxW
ZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRh
KQordm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJp
bmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewogICAgIGlmIChtX2ZyYW1l
LnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDksMTAgKzI0OSwx
MCBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8VmVjdG9yPFN0
cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUgogICAgIGlmIChkaWN0YXRpb25QaHJhc2VzLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGljdGF0aW9uQ29tbWFuZElPUzo6Y3Jl
YXRlKGRvY3VtZW50KCksIFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcyksIFdURk1vdmUobWV0YWRh
dGEpKS0+YXBwbHkoKTsKKyAgICBEaWN0YXRpb25Db21tYW5kSU9TOjpjcmVhdGUoZG9jdW1lbnQo
KSwgV1RGTW92ZShkaWN0YXRpb25QaHJhc2VzKSwgbWV0YWRhdGEpLT5hcHBseSgpOwogfQogCi12
b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3QgVmVj
dG9yPFZlY3RvcjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRh
ZGF0YSwgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2Vz
QXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkaWN0YXRpb25Q
aHJhc2VzLCBpZCBtZXRhZGF0YSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAvLyBDbGVhciB0
aGUgY29tcG9zaXRpb24uCiAgICAgY2xlYXIoKTsKQEAgLTI5MywyMCArMjkzLDE5IEBAIHZvaWQg
RWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBUZXh0JiB0
ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCplbGVtZW50LmZpcnN0Q2hpbGQoKSk7Ci0gICAgaW50
IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSAwOworICAgIGF1dG8mIHRleHROb2RlID0g
ZG93bmNhc3Q8VGV4dD4oKmVsZW1lbnQuZmlyc3RDaGlsZCgpKTsKKyAgICB1bnNpZ25lZCBwcmV2
aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ID0gMDsKICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0
aW9ucyA6IGRpY3RhdGlvblBocmFzZXMpIHsKLSAgICAgICAgaW50IGRpY3RhdGlvblBocmFzZUxl
bmd0aCA9IGludGVycHJldGF0aW9uc1swXS5sZW5ndGgoKTsKLSAgICAgICAgaW50IGRpY3RhdGlv
blBocmFzZUVuZCA9IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgKyBkaWN0YXRpb25QaHJh
c2VMZW5ndGg7CisgICAgICAgIGF1dG8gZGljdGF0aW9uUGhyYXNlTGVuZ3RoID0gaW50ZXJwcmV0
YXRpb25zWzBdLmxlbmd0aCgpOwogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+
IDEpIHsKLSAgICAgICAgICAgIGF1dG8gZGljdGF0aW9uUGhyYXNlUmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKGRvY3VtZW50KCksICZ0ZXh0Tm9kZSwgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwg
JnRleHROb2RlLCBkaWN0YXRpb25QaHJhc2VFbmQpOwotICAgICAgICAgICAgZG9jdW1lbnQoKS5t
YXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihkaWN0YXRp
b25QaHJhc2VSYW5nZSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgICAgIGF1dG8gYWx0ZXJu
YXRpdmVzID0gaW50ZXJwcmV0YXRpb25zOworICAgICAgICAgICAgYWx0ZXJuYXRpdmVzLnJlbW92
ZSgwKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9k
ZSwgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgZGljdGF0aW9uUGhyYXNlTGVuZ3RoLCBE
b2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywgV1RGTW92ZShh
bHRlcm5hdGl2ZXMpKTsKICAgICAgICAgfQotICAgICAgICBwcmV2aW91c0RpY3RhdGlvblBocmFz
ZVN0YXJ0ID0gZGljdGF0aW9uUGhyYXNlRW5kOworICAgICAgICBwcmV2aW91c0RpY3RhdGlvblBo
cmFzZVN0YXJ0ICs9IGRpY3RhdGlvblBocmFzZUxlbmd0aDsKICAgICB9CiAKLSAgICBhdXRvIHJl
c3VsdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUsIDAsICZ0ZXh0
Tm9kZSwgdGV4dE5vZGUubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERp
Y3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbWV0YWRhdGEpOworICAgIGRvY3VtZW50
KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9kZSwgMCwgdGV4dE5vZGUubGVuZ3RoKCksIERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHJldGFpblB0cihtZXRhZGF0YSkpOwogCiAg
ICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCmluZGV4IGM2OGY1ZDM4YzZlNTFlMDQ4ODg3MDk0YzU3ZWJmZjA3YWFmMDFj
ZWIuLjAxNzc2ZmNkMDE0ZTJkOGM0YTdmN2FjN2Q1MTEzY2FjYjRlMzU3Y2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQyNzksOSArNDI3OSw3IEBAIHZvaWQgRnJhbWVWaWV3Ojpw
YWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgZGly
dHlSZWN0CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fbm9kZVRvRHJhdyA/IG1fbm9k
ZVRvRHJhdy0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CiAgICAgUmVuZGVyTGF5ZXIqIHJvb3RMYXll
ciA9IHJlbmRlclZpZXctPmxheWVyKCk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgUmVuZGVyRWxl
bWVudDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVlZHNMYXlvdXQo
JnJvb3RMYXllci0+cmVuZGVyZXIoKSk7Ci0jZW5kaWYKKyAgICBSZW5kZXJPYmplY3Q6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KHJvb3RMYXllci0+
cmVuZGVyZXIoKSk7CiAKICAgICAvLyBUbyB3b3JrIGFyb3VuZCBodHRwOi8vd2Via2l0Lm9yZy9i
LzEzNTEwNiwgZW5zdXJlIHRoYXQgdGhlIHBhaW50IHJvb3QgaXNuJ3QgYW4gaW5saW5lIHdpdGgg
Y3VsbGVkIGxpbmUgYm94ZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGNhdXNlIGFkZGl0aW9u
YWwgY29udGVudCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc25hcHNob3QsIHNvIHJlbW92ZSB0aGlz
IG9uY2UgdGhhdCBidWcgaXMgZml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmlu
ZGV4IDA2Mjg1YTUxODRlNWE0YzAwYTMxYmE2MzM0MjNkYjVkYmM5ODgwOTguLjBhZmVjYWZkMTlk
ZTAxNGU3MjNlZTVkYzVlNGUyMmQ2ODc5MWQxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCkBAIC03MzYsNyArNzM2LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9u
c0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICBzaXplX3QgaW50ZXJwcmV0YXRpb25zQ291bnQg
PSAxOwogCiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzSW5Sb290KQotICAgICAgICBp
bnRlcnByZXRhdGlvbnNDb3VudCAqPSBtYXJrZXItPmFsdGVybmF0aXZlcygpLnNpemUoKSArIDE7
CisgICAgICAgIGludGVycHJldGF0aW9uc0NvdW50ICo9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+
PihtYXJrZXItPmRhdGEoKSkuc2l6ZSgpICsgMTsKIAogICAgIFZlY3RvcjxWZWN0b3I8VUNoYXI+
PiBpbnRlcnByZXRhdGlvbnM7CiAgICAgaW50ZXJwcmV0YXRpb25zLmdyb3coaW50ZXJwcmV0YXRp
b25zQ291bnQpOwpAQCAtNzQ5LDYgKzc0OSw4IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRh
dGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VP
ZlJvb3RDb250ZW50cy0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG5vZGUpOwogICAg
ICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzRm9y
KCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykp
IHsKKyAgICAgICAgICAgIGF1dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJp
bmc+PihtYXJrZXItPmRhdGEoKSk7CisKICAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0
aGF0IHByZWNlZGUgdGhlIG1hcmtlci4KICAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3Rh
cnRQb3NpdGlvbiAhPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5z
dGFydE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgIGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24s
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkp
KTsKQEAgLTc2MSw3ICs3NjMsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9y
Q3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0g
UmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5v
ZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihu
b2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmlzaWJsZVRl
eHRGb3JNYXJrZXIgPSBwbGFpblRleHQocmFuZ2VGb3JNYXJrZXIpOwotICAgICAgICAgICAgc2l6
ZV90IGludGVycHJldGF0aW9uc0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IG1hcmtlci0+YWx0ZXJu
YXRpdmVzKCkuc2l6ZSgpICsgMTsKKyAgICAgICAgICAgIHNpemVfdCBpbnRlcnByZXRhdGlvbnND
b3VudEZvckN1cnJlbnRNYXJrZXIgPSBhbHRlcm5hdGl2ZXMuc2l6ZSgpICsgMTsKICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW50ZXJwcmV0YXRpb25zQ291bnQ7ICsraSkgewog
ICAgICAgICAgICAgICAgIC8vIERldGVybWluZSB0ZXh0IGZvciB0aGUgaXRoIGludGVycHJldGF0
aW9uLiBJdCB3aWxsIGVpdGhlciBiZSB0aGUgdmlzaWJsZSB0ZXh0LCBvciBvbmUgb2YgaXRzCiAg
ICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIHN0b3JlZCBpbiB0aGUgbWFya2VyLgpAQCAt
NzcwLDcgKzc3Miw3IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50
Um9vdCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKCFpbmRleE9mSW50ZXJwcmV0YXRpb25G
b3JDdXJyZW50TWFya2VyKQogICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRp
b25zW2ldLCB2aXNpYmxlVGV4dEZvck1hcmtlcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCBtYXJrZXItPmFsdGVy
bmF0aXZlcygpLmF0KGkgJSBtYXJrZXItPmFsdGVybmF0aXZlcygpLnNpemUoKSkpOworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCBhbHRlcm5hdGl2ZXNbaSAl
IGFsdGVybmF0aXZlcy5zaXplKCldKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgY29t
YmluYXRpb25zU29GYXIgKj0gaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFya2VyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIubW0KaW5kZXggOThmNWM1ZWI5ODAxNDAxMmQ3OWUzNWUwYmEzNjg2OTNiYmFlNGFhYy4uMDEw
NGZlZTIxN2RjYmVhMDc3MDU4OGNjZDA4OGFmMzIxYWUxNDFiYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCkBAIC0xOTAs
MTYgKzE5MCw2IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0Ojpk
aWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCkKICAgICBsYXllcigpLnJlbW92ZUZyb21QYXJlbnQo
KTsKIH0KIAotc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RGb3JSYW5nZShS
YW5nZSYgcmFuZ2UpCi17Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRzOwotICAgIHJh
bmdlLmFic29sdXRlVGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5n
UmVjdDsKLSAgICBmb3IgKGF1dG8mIHF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZShxdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGJvdW5kaW5nUmVjdCk7Ci19Ci0KIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYgcGFnZSkKICAgICA6IG1fcGFnZShwYWdlKQogICAg
ICwgbV9kZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lcigqdGhpcywgJlNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQpCkBAIC01MDEs
MTcgKzQ5MSwxNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVO
dW1iZXJIaWdobGlnaHRzKCkKICAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcgPSAqbWFpbkZy
YW1lKCkudmlldygpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHBob25lTnVtYmVyUmFuZ2Vz
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhlIHJhbmdlIHdyYXBz
IGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KLSAgICAgICAgLy8gV2hhdCBzaG91bGQgd2Ug
ZG8gaW4gdGhhdCBjYXNlPwotICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVhZHNUb0JvdW5k
aW5nUmVjdEZvclJhbmdlKCpyYW5nZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1ha2VzIGEg
YmlnIHJlY3QgaWYgdGhlIHJhbmdlIGV4dGVuZHMgZnJvbSB0aGUgZW5kIG9mIG9uZSBsaW5lIHRv
IHRoZSBzdGFydCBvZiB0aGUgbmV4dC4gSGFuZGxlIHRoYXQgY2FzZSBiZXR0ZXI/CisgICAgICAg
IGF1dG8gcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsKIAogICAgICAgICAvLyBDb252ZXJ0
IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgLy8gRklY
TUU6IEl0J3MgYSBsaXR0bGUgY3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVu
IHdpbmRvd1RvQ29udGVudHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNw
YWNlLgogICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVu
Y3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3cs
IGNvbnRlbnRzVG9Sb290VmlldygpIGlzCiAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdo
YXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJh
bm5lci4KLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSByYW5nZS0+b3duZXJEb2N1
bWVudCgpLnZpZXcoKTsKKyAgICAgICAgYXV0byogdmlld0ZvclJhbmdlID0gcmFuZ2UtPm93bmVy
RG9jdW1lbnQoKS52aWV3KCk7CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQogICAgICAgICAg
ICAgY29udGludWU7CisKICAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihtYWluRnJhbWVWaWV3Lndp
bmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KHJlY3QubG9jYXRp
b24oKSkpKTsKIAogICAgICAgICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVWYWx1ZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgK
aW5kZXggNGJjNjMzNGFiZTJiMzRjOWY0YWViMmEzZmZjYmJmYzc5MWMwYWRmMC4uNTM1MzFjNzhk
OGZlNjQyN2YyYjRlZDRmYTc1ZDkyYjQ1OWEyZjA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKQEAgLTMw
LDEwICszMCw2IEBACiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAotI2lmICFkZWZpbmVkKF9fT0JKQ19fKQotdHlwZWRlZiBzdHJ1Y3Qgb2Jq
Y19vYmplY3QgKmlkOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKIHVzaW5nIFBsYXRm
b3JtTmF0aXZlVmFsdWUgPSBpZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcAppbmRleCBjNTY4Nzc2N2M5ODk5Yjg2ODkzYjNlMTVjOWQy
NTYzN2FjZmM2M2FjLi4zNGVkM2U4ZWI4NDRjNjBhMzRhMDlkZjdlOGFkN2FmMGVjNDBkMjdhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAKQEAg
LTIyNyw0ICsyMjcsMjQgQEAgYm9vbCBGbG9hdFF1YWQ6OmlzQ291bnRlcmNsb2Nrd2lzZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGRldGVybWluYW50KG1fcDIgLSBtX3AxLCBtX3AzIC0gbV9wMikgPCAw
OwogfQogCitWZWN0b3I8RmxvYXRSZWN0PiBib3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9h
dFF1YWQ+JiBxdWFkcykKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBib3hlczsKKyAgICBib3hl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7CisgICAgZm9yIChjb25zdCBh
dXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGJveGVzLnVuY2hlY2tlZEFwcGVuZChxdWFkLmJv
dW5kaW5nQm94KCkpOworICAgIHJldHVybiBib3hlczsKK30KKworRmxvYXRSZWN0IHVuaXRlZEJv
dW5kaW5nQm94ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQoreworICAgIGF1dG8g
c2l6ZSA9IHF1YWRzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgYXV0byByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQudW5pdGVFdmVuSWZFbXB0
eShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UXVhZC5oCmluZGV4IGNhZjlkNzI2MmFhZGFlOTJjNTRiNDYzNjJiNTg1ZDg5NDFkMDUxODYu
LjE4MGNjZjEzMzZlZjJhZmE2M2YwZjQzZTg2YjQ4MzFiZmM5ZmVhZDMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC0yNiwxNSArMjYsMTYgQEAK
ICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGbG9hdFF1YWRfaAotI2RlZmluZSBGbG9hdFF1
YWRfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFNlZW1zIGxpa2UgdGhpcyB3
b3VsZCBiZSBiZXR0ZXIgYXMgYSBzdHJ1Y3QuCisKIC8vIEEgRmxvYXRRdWFkIGlzIGEgY29sbGVj
dGlvbiBvZiA0IHBvaW50cywgb2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YKIC8vIG1h
cHBpbmcgYSByZWN0YW5nbGUgdGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRpYWxpemVkIGZy
b20gYSByZWN0LCB0aGUKIC8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVyIGZyb20gdG9w
IGxlZnQuCkBAIC0xNjUsMjIgKzE2NiwxNSBAQCBpbmxpbmUgRmxvYXRRdWFkJiBvcGVyYXRvci09
KEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQogCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQogewotICAgIHJldHVy
biBhLnAxKCkgPT0gYi5wMSgpICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAyKCkgJiYgCi0g
ICAgICAgICAgIGEucDMoKSA9PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgpID09IGIucDQo
KTsKKyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJiBhLnAyKCkgPT0gYi5wMigpICYmIGEu
cDMoKSA9PSBiLnAzKCkgJiYgYS5wNCgpID09IGIucDQoKTsKIH0KIAogaW5saW5lIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikKIHsKLSAgICBy
ZXR1cm4gYS5wMSgpICE9IGIucDEoKSB8fAotICAgICAgICAgICBhLnAyKCkgIT0gYi5wMigpIHx8
IAotICAgICAgICAgICBhLnAzKCkgIT0gYi5wMygpIHx8Ci0gICAgICAgICAgIGEucDQoKSAhPSBi
LnA0KCk7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotfSAgIC8vIG5hbWVzcGFjZSBXZWJD
b3JlCi0KLQotI2VuZGlmIC8vIEZsb2F0UXVhZF9oCitWZWN0b3I8RmxvYXRSZWN0PiBib3VuZGlu
Z0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFJl
Y3QgdW5pdGVkQm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYpOwogCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L1Jlc291cmNlSGFuZGxlLmgKaW5kZXggMTllMWE2YjdmYmMxOTE0ZjcxNjczOWY1N2Y4YjZiNjhk
ZmE3NTY3MC4uYTM0NTI0NzY4ZjRiMjhiMzFiNjc3ZGUzMGE5ZjcwYTRjNzJhMWZhYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhhbmRsZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5kbGUuaApAQCAt
NTIsOSArNTIsNiBAQCBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xBU1MgTlNFcnJv
cjsKIE9CSkNfQ0xBU1MgTlNVUkxDb25uZWN0aW9uOwogT0JKQ19DTEFTUyBOU1VSTFJlcXVlc3Q7
Ci0jaWZuZGVmIF9fT0JKQ19fCi10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7Ci0jZW5k
aWYKICNlbmRpZgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVuZ2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UuaAppbmRleCAzZjY0OGUwNjA0MGI1M2FiNzhmNmVhYWRhMDIzNTRhZmNmOThjNDcwLi5iNGNh
NzljMzVmZDgwMGE3N2MxZTYxMTQ1NDdiY2U5MDk4YzA5ODQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZS5oCkBAIC0zMCwxNyArMzAsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lm
IFVTRShDRlVSTENPTk5FQ1RJT04pCi0KIHR5cGVkZWYgc3RydWN0IF9DRlVSTEF1dGhDaGFsbGVu
Z2UqIENGVVJMQXV0aENoYWxsZW5nZVJlZjsKLQogI2Vsc2UKLQotI2lmbmRlZiBfX09CSkNfXwot
dHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2VuZGlmCi0KIE9CSkNfQ0xBU1MgTlNV
UkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ5LDYgKzQxLDcgQEAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UgOiBwdWJs
aWMgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKIHB1YmxpYzoKICAgICBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSgpIHt9CiAgICAgV0VCQ09SRV9FWFBPUlQgQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYgcHJvcG9zZWRD
cmVkZW50aWFsLCB1bnNpZ25lZCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKwogI2lmIFVTRShDRlVSTENPTk5FQ1RJ
T04pCiAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxlbmdlUmVmLCBB
dXRoZW50aWNhdGlvbkNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKaW5kZXggOGEwMmJlNGViZTdlZTkwY2RlYTI0MGRmYmYxOGVlMzVlODcyMjc2
Ni4uYzE0YjBmYzdiZGQ3OWJjODhlZWYxMWViYTVkNGI2ZjViMTQ0NTdlMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtODYzLDcgKzg2Myw3IEBAIGF1
dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChjb25zdCBNYXJrZWRU
ZXh0JiBtYXJrZWRUZXh0LCBjb25zCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAgICBzdHlsZS50
ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5zeXN0ZW1Db2xvcihDU1NW
YWx1ZUFwcGxlU3lzdGVtTGFiZWwsIHN0eWxlQ29sb3JPcHRpb25zKTsKICNlbmRpZgotICAgICAg
ICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBtYXJrZWRUZXh0Lm1hcmtlci0+aXNBY3RpdmVNYXRj
aCgpID8gcmVuZGVyZXIoKS50aGVtZSgpLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihz
dHlsZUNvbG9yT3B0aW9ucykgOiByZW5kZXJlcigpLnRoZW1lKCkuaW5hY3RpdmVUZXh0U2VhcmNo
SGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlvbnMpOworICAgICAgICBzdHlsZS5iYWNrZ3Jv
dW5kQ29sb3IgPSByZW5kZXJlcigpLnRoZW1lKCkudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKHN0
eWxlQ29sb3JPcHRpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNDBiYTFhZTIxNzYwMjU4MjQ3OGYyNjUw
NzhhYWRmMjM1OTdhNzUwOS4uNGYzNzhkNzM1ZjhmYjJhZDZjZjk4NmY2ZTJhZDk5NjJhOGFiZGQ2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEwMzcsMjQgKzEw
MzcsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzKExh
eW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3UKIExheW91dFVuaXQgUmVuZGVyQm94Ojpt
aW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzRGlydHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoY29uc3RfY2FzdDxSZW5kZXJC
b3gqPih0aGlzKSk7Ci0jZW5kaWYKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gqPih0aGlz
KS0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgU2V0TGF5b3V0TmVl
ZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOworICAgICAgICBj
b25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKS5jb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cygpOwogICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgY29uc3QKIHsKICAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KCkpIHsKLSNp
Zm5kZWYgTkRFQlVHCi0gICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91
dEZvcmJpZGRlblNjb3BlKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykpOwotI2VuZGlmCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVmZXJyZWRMb2dp
Y2FsV2lkdGhzKCk7CisgICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91
dEZvcmJpZGRlblNjb3BlKCp0aGlzKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJCb3gmPigq
dGhpcykuY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB9Ci0gICAgICAgIAog
ICAgIHJldHVybiBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGQzZWI0NjNhY2I4YmRiZTdmYjVk
MGY3MWRmZWY4ODY0N2I1N2U5ZmYuLmVhZDlkNzY0MGNlNDY0ZDYyOTg3YjViYTc3ZTI5MDA1ZTMz
NmY1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKQEAg
LTQzNiwxNCArNDM2LDEyIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6dXBkYXRlQ291bnRlcigpCiAK
IHZvaWQgUmVuZGVyQ291bnRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoZmxvYXQg
bGVhZCkKIHsKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBiZSBt
b2RpZnlpbmcgdGhlIHRyZWUgaW4gY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMuCiAgICAg
Ly8gSW5zdGVhZCwgd2Ugc2hvdWxkIHByb3Blcmx5IGhvb2sgdGhlIGFwcHJvcHJpYXRlIGNoYW5n
ZXMgaW4gdGhlIERPTSBhbmQgbW9kaWZ5CiAgICAgLy8gdGhlIHJlbmRlciB0cmVlIHRoZW4uIFdo
ZW4gdGhhdCdzIGRvbmUsIHdlIGFsc28gd29uJ3QgbmVlZCB0byBvdmVycmlkZQogICAgIC8vIGNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzIGF0IGFsbC4KICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODI5Ci0gICAgU2V0TGF5b3V0TmVlZGVkRm9y
YmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUodGhpcywgZmFsc2UpOwotI2VuZGlmCisg
ICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRo
aXMsIGZhbHNlKTsKIAogICAgIHNldFJlbmRlcmVkVGV4dChvcmlnaW5hbFRleHQoKSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXgg
MDgxZDRjNzY0MDNhOGViYmUwMDc5ZGEyMTI1M2NhMmZlMGJhY2JkMi4uNGJiZTNlMDk2ZmEyMjMz
Y2JmZTZhYzMwNmJmYTFmN2IxYjAzM2JlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI4OTAsOSArMjg5MCw3IEBAIHZvaWQgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25zdCBHcmFwaGljc0xheWVyKiBncmFw
aGljc0xheWVyLCBHcmFwCiAgICAgaWYgKGV2ZW50UmVnaW9uQ29udGV4dCkKICAgICAgICAgcGFp
bnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJDb2xsZWN0aW5nRXZlbnRSZWdpb24p
OwogCi0jaWZuZGVmIE5ERUJVRwotICAgIFJlbmRlckVsZW1lbnQ6OlNldExheW91dE5lZWRlZEZv
cmJpZGRlblNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KCZyZW5kZXJlcigpKTsKLSNlbmRpZgor
ICAgIFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0
TmVlZHNMYXlvdXQocmVuZGVyZXIoKSk7CiAKICAgICBhdXRvIHBhaW50T25lTGF5ZXIgPSBbJl0o
UmVuZGVyTGF5ZXImIGxheWVyLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJGbGFn
PiBwYWludEZsYWdzKSB7CiAgICAgICAgIEZyYW1lVmlldzo6UGFpbnRpbmdTdGF0ZSBwYWludGlu
Z1N0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCBk
NTYwMjg3NTI2ZDFiN2RiNWI5YjQ5NjJlMTU2YmIwNmQ1ODM2ZTE5Li45NWI1YTJhNjUwOGMzMzBm
YjZhZjJlOWZhZTk5NDNiNDcwNWU0MmNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNCBBbGxhbiBT
YW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqCkBAIC04
NSwxOSArODUsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKFJlbmRlck9iamVjdCk7CiAKLSNpZm5kZWYgTkRFQlVHCisjaWYgQVNT
RVJUX0VOQUJMRUQKIAotUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29w
ZTo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QsIGJvb2wgaXNGb3JiaWRkZW4pCitSZW5kZXJPYmplY3Q6OlNldExheW91dE5lZWRlZEZvcmJp
ZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlck9iamVjdCwgYm9vbCBpc0ZvcmJpZGRlbikKICAgICA6IG1fcmVuZGVyT2JqZWN0
KHJlbmRlck9iamVjdCkKLSAgICAsIG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4obV9yZW5kZXJPYmpl
Y3QtPmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSkKKyAgICAsIG1fcHJlZXhpc3RpbmdGb3Ji
aWRkZW4obV9yZW5kZXJPYmplY3QuaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigpKQogewotICAg
IG1fcmVuZGVyT2JqZWN0LT5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKGlzRm9yYmlkZGVuKTsK
KyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKGlzRm9yYmlkZGVu
KTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNl
dExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCkKIHsKLSAgICBtX3JlbmRlck9iamVjdC0+c2V0
TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihtX3ByZWV4aXN0aW5nRm9yYmlkZGVuKTsKKyAgICBtX3Jl
bmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKG1fcHJlZXhpc3RpbmdGb3JiaWRk
ZW4pOwogfQorCiAjZW5kaWYKIAogc3RydWN0IFNhbWVTaXplQXNSZW5kZXJPYmplY3QgewpAQCAt
NTIxLDExICs1MjIsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9ja3NG
b3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dCBzY2hlZHVsZVJlbGF5bwogICAgIGJvb2wgaGFzT3V0
T2ZGbG93UG9zaXRpb24gPSAhaXNUZXh0KCkgJiYgc3R5bGUoKS5oYXNPdXRPZkZsb3dQb3NpdGlv
bigpOwogCiAgICAgd2hpbGUgKGFuY2VzdG9yKSB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSByZW1vdmUgdGhlIHNwZWNpYWwgY2FzZXMgZm9y
IGNvdW50ZXJzLCBxdW90ZXMgYW5kIG1hdGhtbAotICAgICAgICAvLyBjYWxsaW5nIHNldE5lZWRz
TGF5b3V0IGR1cmluZyBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24uCi0gICAgICAgIFNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKGFuY2VzdG9yLCBp
c1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOwotI2VuZGlmCisgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlcyBmb3IgY291bnRlcnMs
IHF1b3RlcyBhbmQgbWF0aG1sIGNhbGxpbmcgc2V0TmVlZHNMYXlvdXQgZHVyaW5nIHByZWZlcnJl
ZCB3aWR0aCBjb21wdXRhdGlvbi4KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2Nv
cGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKmFuY2VzdG9yLCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlk
ZGVuKCkpOworCiAgICAgICAgIC8vIERvbid0IG1hcmsgdGhlIG91dGVybW9zdCBvYmplY3Qgb2Yg
YW4gdW5yb290ZWQgc3VidHJlZS4gVGhhdCBvYmplY3Qgd2lsbCBiZQogICAgICAgICAvLyBtYXJr
ZWQgd2hlbiB0aGUgc3VidHJlZSBpcyBhZGRlZCB0byB0aGUgZG9jdW1lbnQuCiAgICAgICAgIGF1
dG8gY29udGFpbmVyID0gYW5jZXN0b3ItPmNvbnRhaW5lcigpOwpAQCAtNzEzLDE1ICs3MTIsNyBA
QCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoYm9vbCB1c2VU
cmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZAogICAgIGlmICh1c2VUcmFuc2Zvcm1zKSB7CiAgICAg
ICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAgICBhYnNvbHV0ZVF1YWRzKHF1YWRz
LCB3YXNGaXhlZCk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7Ci0gICAgICAg
IGlmICghbikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0gICAgICAgIElu
dFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsKLSAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICByZXN1bHQudW5pdGUo
cXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVh
ZHMpKTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShG
bG9hdFBvaW50KCksIDAgLyogaWdub3JlIHRyYW5zZm9ybXMgKi8sIHdhc0ZpeGVkKTsKQEAgLTc1
NywyMSArNzQ4LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZHMo
VmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogRmxvYXRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1
dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCiB7CiAgICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCisgICAgICAgIHJldHVybiB7
IH07CiAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsKLQotICAgIFZl
Y3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFk
cyk7Ci0KLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0
KCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdCb3goKTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1
bHQudW5pdGVFdmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7CisgICAgcmV0dXJuIHVuaXRlZEJvdW5kaW5nQm94ZXMoYWJzb2x1dGVUZXh0UXVh
ZHMoKnJhbmdlKSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRBYnNvbHV0ZVJlY3RGb3JM
YXllcihMYXlvdXRSZWN0JiByZXN1bHQpCkBAIC0xOTA3LDYgKzE4ODYsMjEgQEAgYm9vbCBSZW5k
ZXJPYmplY3Q6Omhhc05vbkVtcHR5VmlzaWJsZVJlY3RSZXNwZWN0aW5nUGFyZW50RnJhbWVzKCkg
Y29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1ZlY3RvcjxGbG9hdFF1YWQ+IFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHVz
ZVNlbGVjdGlvbkhlaWdodCkKK3sKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFkczsKKyAgICBm
b3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgYXV0
byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmIHJl
bmRlcmVyLT5pc0JSKCkpCisgICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVRdWFkcyhxdWFk
cyk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgeworICAgICAg
ICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZShyYW5nZSwg
ZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkpOworICAgICAgICAgICAgcXVhZHMuYXBwZW5k
VmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJh
bmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNlbGVjdGlvbkhlaWdo
dCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBxdWFkczsKK30KKwogI2lmIEVOQUJM
RShUUkVFX0RFQlVHR0lORykKIAogdm9pZCBwcmludFJlbmRlclRyZWVGb3JMaXZlRG9jdW1lbnRz
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAyNjRmMWQxNmVi
NjkzMTEzNjkxMmMyYWQyNzQxZjc1ZTE1N2YwZGFlLi4wOTkyNGFmZmM3M2EzOGUzNGJmNTMzNjcz
NjE4NmIzYWI2MmExYmQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAyMDAwIEFudHRpIEtvaXZpc3RvIChr
b2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVl
bGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA0IEFsbGFuIFNhbmRmZWxkIEplbnNl
biAoa2RlQGNhcmV3b2xmLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCkBAIC03Myw2ICs3Myw3IEBAIGNsYXNzIFNlbGVjdGlvblJlY3Q7
CiAjZW5kaWYKIAogc3RydWN0IFBhaW50SW5mbzsKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCiBjb25zdCBpbnQgY2FyZXRXaWR0aCA9IDI7IC8vIFRoaXMg
dmFsdWUgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIFVJS2l0LiBTZWUgPHJkYXI6Ly9wcm9i
bGVtLzE1NTgwNjAxPi4KQEAgLTE0NywyMCArMTQ4LDEzIEBAIHB1YmxpYzoKICAgICAvLyBTY3Jv
bGxpbmcgaXMgYSBSZW5kZXJCb3ggY29uY2VwdCwgaG93ZXZlciBzb21lIGNvZGUganVzdCBjYXJl
cyBhYm91dCByZWN1cnNpdmVseSBzY3JvbGxpbmcgb3VyIGVuY2xvc2luZyBTY3JvbGxhYmxlQXJl
YShzKS4KICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcm9sbFJlY3RUb1Zpc2libGUoY29uc3Qg
TGF5b3V0UmVjdCYgYWJzb2x1dGVSZWN0LCBib29sIGluc2lkZUZpeGVkLCBjb25zdCBTY3JvbGxS
ZWN0VG9WaXNpYmxlT3B0aW9ucyYpOwogCi0gICAgLy8gQ29udmVuaWVuY2UgZnVuY3Rpb24gZm9y
IGdldHRpbmcgdG8gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJveCBvZiBhIFJlbmRlck9iamVjdC4K
KyAgICAvLyBOZWFyZXN0IGVuY2xvc2luZyBib3guCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVy
Qm94JiBlbmNsb3NpbmdCb3goKSBjb25zdDsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgZW5j
bG9zaW5nQm94TW9kZWxPYmplY3QoKSBjb25zdDsKICAgICBjb25zdCBSZW5kZXJCb3gqIGVuY2xv
c2luZ1Njcm9sbGFibGVDb250YWluZXJGb3JTbmFwcGluZygpIGNvbnN0OwogCi0gICAgLy8gRnVu
Y3Rpb24gdG8gcmV0dXJuIG91ciBlbmNsb3NpbmcgZmxvdyB0aHJlYWQgaWYgd2UgYXJlIGNvbnRh
aW5lZCBpbnNpZGUgb25lLiBUaGlzCi0gICAgLy8gZnVuY3Rpb24gZm9sbG93cyB0aGUgY29udGFp
bmluZyBibG9jayBjaGFpbi4KLSAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyogZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3coKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGZyYWdtZW50ZWRGbG93U3Rh
dGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgICAgIHJldHVybiBsb2NhdGVFbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpOwot
ICAgIH0KKyAgICAvLyBSZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVhZCBpZiB3ZSBhcmUg
Y29udGFpbmVkIGluc2lkZSBvbmUuIEZvbGxvd3MgdGhlIGNvbnRhaW5pbmcgYmxvY2sgY2hhaW4u
CisgICAgUmVuZGVyRnJhZ21lbnRlZEZsb3cqIGVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkgY29u
c3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBib29sIHVzZURhcmtBcHBlYXJhbmNlKCkgY29uc3Q7
CiAgICAgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IHN0eWxlQ29sb3JPcHRpb25zKCkg
Y29uc3Q7CkBAIC0xNjgsMjAgKzE2MiwxMiBAQCBwdWJsaWM6CiAjaWYgQVNTRVJUX0VOQUJMRUQK
ICAgICB2b2lkIHNldEhhc0FYT2JqZWN0KGJvb2wgZmxhZykgeyBtX2hhc0FYT2JqZWN0ID0gZmxh
ZzsgfQogICAgIGJvb2wgaGFzQVhPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0FYT2JqZWN0
OyB9CisjZW5kaWYKIAotICAgIC8vIEhlbHBlciBjbGFzcyBmb3JiaWRkaW5nIGNhbGxzIHRvIHNl
dE5lZWRzTGF5b3V0KCkgZHVyaW5nIGl0cyBsaWZldGltZS4KLSAgICBjbGFzcyBTZXRMYXlvdXRO
ZWVkZWRGb3JiaWRkZW5TY29wZSB7Ci0gICAgcHVibGljOgotICAgICAgICBleHBsaWNpdCBTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShSZW5kZXJPYmplY3QqLCBib29sIGlzRm9yYmlkZGVu
ID0gdHJ1ZSk7Ci0gICAgICAgIH5TZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSgpOwotICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlbmRlck9iamVjdCogbV9yZW5kZXJPYmplY3Q7Ci0gICAgICAg
IGJvb2wgbV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKLSAgICB9OwotI2VuZGlmIC8vIEFTU0VSVF9F
TkFCTEVECisgICAgLy8gRm9yYmlkIGNhbGxzIHRvIHNldE5lZWRzTGF5b3V0KCkgZHVyaW5nIGl0
cyBsaWZldGltZS4KKyAgICBjbGFzcyBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTsKIAot
ICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhp
cyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGlu
ZQotICAgIC8vIGNoaWxkcmVuLgorICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5n
IGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxp
bmUgc3R5bGUgdG8gb3VyIGlubGluZSBjaGlsZHJlbi4KICAgICB2aXJ0dWFsIFJlbmRlckJsb2Nr
KiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogICAgIAogICAgIC8vIFJlbmRlck9iamVjdCB0cmVl
IG1hbmlwdWxhdGlvbgpAQCAtMzg5LDIyICszNzUsNyBAQCBwdWJsaWM6CiAKICAgICBib29sIGhh
c0FzcGVjdFJhdGlvKCkgY29uc3QgeyByZXR1cm4gaXNSZXBsYWNlZCgpICYmIChpc0ltYWdlKCkg
fHwgaXNWaWRlbygpIHx8IGlzQ2FudmFzKCkpOyB9CiAgICAgYm9vbCBpc0Fub255bW91cygpIGNv
bnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmlzQW5vbnltb3VzKCk7IH0KLSAgICBib29sIGlzQW5v
bnltb3VzQmxvY2soKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBr
ZXB0IGluIHN5bmMgd2l0aCBhbm9ueW1vdXMgYmxvY2sgY3JlYXRpb24gY29uZGl0aW9ucyBpbgot
ICAgICAgICAvLyBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soKS4gVGhpcyBpbmNs
dWRlcyBjcmVhdGluZyBhbiBhbm9ueW1vdXMKLSAgICAgICAgLy8gUmVuZGVyQmxvY2sgaGF2aW5n
IGEgRGlzcGxheVR5cGU6OkJsb2NrIG9yIERpc3BsYXlUeXBlOjpCb3ggZGlzcGxheS4gT3RoZXIg
Y2xhc3NlcyBzdWNoIGFzIFJlbmRlclRleHRGcmFnbWVudAotICAgICAgICAvLyBhcmUgbm90IFJl
bmRlckJsb2NrcyBhbmQgd2lsbCByZXR1cm4gZmFsc2UuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTY3MDkuIAotICAgICAgICByZXR1cm4gaXNBbm9ueW1vdXMo
KSAmJiAoc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJsb2NrIHx8IHN0eWxlKCku
ZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpCb3gpICYmIHN0eWxlKCkuc3R5bGVUeXBlKCkgPT0g
UHNldWRvSWQ6Ok5vbmUgJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc0xpc3RNYXJrZXIoKSAmJiAh
aXNSZW5kZXJGcmFnbWVudGVkRmxvdygpICYmICFpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkgJiYg
IWlzUmVuZGVyVmlldygpCi0jaWYgRU5BQkxFKEZVTExTQ1JFRU5fQVBJKQotICAgICAgICAgICAg
JiYgIWlzUmVuZGVyRnVsbFNjcmVlbigpCi0gICAgICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2Ny
ZWVuUGxhY2Vob2xkZXIoKQotI2VuZGlmCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICAgICAgICAg
ICYmICFpc1JlbmRlck1hdGhNTEJsb2NrKCkKLSNlbmRpZgotICAgICAgICAgICAgOwotICAgIH0K
KyAgICBib29sIGlzQW5vbnltb3VzQmxvY2soKSBjb25zdDsKIAogICAgIGJvb2wgaXNGbG9hdGlu
ZygpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLmZsb2F0aW5nKCk7IH0KIApAQCAtNDQ2LDE5
ICs0MTcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVmlzaWJsZUJveERlY29yYXRpb25zKCkg
Y29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuYm94RGVjb3JhdGlvblN0YXRlKCkgIT0gTm9Cb3hE
ZWNvcmF0aW9uczsgfQogICAgIGJvb2wgYmFja2dyb3VuZElzS25vd25Ub0JlT2JzY3VyZWQoY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KTsKIAotICAgIGJvb2wgbmVlZHNMYXlvdXQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkgfHwg
bV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgpIHx8IG1fYml0ZmllbGRzLnBvc0No
aWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgfHwgbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlm
aWVkTm9ybWFsRmxvd0xheW91dCgpIHx8IG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1vdmVt
ZW50TGF5b3V0KCk7Ci0gICAgfQotCisgICAgYm9vbCBuZWVkc0xheW91dCgpIGNvbnN0OwogICAg
IGJvb2wgc2VsZk5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNM
YXlvdXQoKTsgfQogICAgIGJvb2wgbmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKSBjb25z
dCB7IHJldHVybiBtX2JpdGZpZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOyB9
Ci0gICAgYm9vbCBuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dE9ubHkoKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5
b3V0KCkgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkgJiYgIW1fYml0ZmllbGRzLm5vcm1h
bENoaWxkTmVlZHNMYXlvdXQoKQotICAgICAgICAgICAgJiYgIW1fYml0ZmllbGRzLnBvc0NoaWxk
TmVlZHNMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xh
eW91dCgpOwotICAgIH0KKyAgICBib29sIG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0T25s
eSgpIGNvbnN0OwogCiAgICAgYm9vbCBwb3NDaGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1
cm4gbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpOyB9CiAgICAgYm9vbCBuZWVkc1Np
bXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMubmVl
ZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOyB9CkBAIC01MDgsMTcgKzQ3MCw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShib29sLCBNYXJr
aW5nQmVoYXZpb3IgPSBNYXJrQ29udGFpbmluZ0Jsb2NrQ2hhaW4pOwogICAgIHZvaWQgaW52YWxp
ZGF0ZUNvbnRhaW5lclByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICAKLSAgICB2b2lkIHNl
dE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpCi0gICAgewotICAgICAgICBzZXROZWVk
c0xheW91dCgpOwotICAgICAgICBzZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkodHJ1ZSk7
Ci0gICAgfQorICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAK
LSAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9zaXRpb25UeXBlIHBvc2l0aW9uKQotICAgIHsK
LSAgICAgICAgQVNTRVJUKChwb3NpdGlvbiAhPSBQb3NpdGlvblR5cGU6OkFic29sdXRlICYmIHBv
c2l0aW9uICE9IFBvc2l0aW9uVHlwZTo6Rml4ZWQpIHx8IGlzQm94KCkpOwotICAgICAgICBtX2Jp
dGZpZWxkcy5zZXRQb3NpdGlvbmVkU3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbikpOwot
ICAgIH0KKyAgICB2b2lkIHNldFBvc2l0aW9uU3RhdGUoUG9zaXRpb25UeXBlKTsKICAgICB2b2lk
IGNsZWFyUG9zaXRpb25lZFN0YXRlKCkgeyBtX2JpdGZpZWxkcy5jbGVhclBvc2l0aW9uZWRTdGF0
ZSgpOyB9CiAKICAgICB2b2lkIHNldEZsb2F0aW5nKGJvb2wgYiA9IHRydWUpIHsgbV9iaXRmaWVs
ZHMuc2V0RmxvYXRpbmcoYik7IH0KQEAgLTU2Myw3ICs1MTcsNyBAQCBwdWJsaWM6CiAgICAgVmlz
aWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2libGVQb3NpdGlvbihpbnQgb2Zmc2V0LCBFQWZmaW5pdHkp
IGNvbnN0OwogICAgIFZpc2libGVQb3NpdGlvbiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oY29uc3Qg
UG9zaXRpb24mKSBjb25zdDsKIAotICAgIC8vIHJldHVybnMgdGhlIGNvbnRhaW5pbmcgYmxvY2sg
bGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBlbGVtZW50LgorICAgIC8vIFJldHVybnMgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgbGV2ZWwgZWxlbWVudCBmb3IgdGhpcyBlbGVtZW50LgogICAgIFdFQkNPUkVf
RVhQT1JUIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2soKSBjb25zdDsKICAgICBSZW5kZXJC
bG9jayogY29udGFpbmluZ0Jsb2NrRm9yT2JqZWN0SW5GbG93KCkgY29uc3Q7CiAKQEAgLTU3Miwx
MiArNTI2LDkgQEAgcHVibGljOgogICAgIEZsb2F0UG9pbnQgYWJzb2x1dGVUb0xvY2FsKGNvbnN0
IEZsb2F0UG9pbnQmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0gMCkgY29uc3Q7CiAKICAgICAvLyBD
b252ZXJ0IGEgbG9jYWwgcXVhZCB0byBhYnNvbHV0ZSBjb29yZGluYXRlcywgdGFraW5nIHRyYW5z
Zm9ybXMgaW50byBhY2NvdW50LgotICAgIEZsb2F0UXVhZCBsb2NhbFRvQWJzb2x1dGVRdWFkKGNv
bnN0IEZsb2F0UXVhZCYgcXVhZCwgTWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlID0gVXNlVHJhbnNm
b3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGxvY2FsVG9Db250YWluZXJRdWFkKHF1YWQsIG51bGxwdHIsIG1vZGUsIHdhc0ZpeGVkKTsK
LSAgICB9CisgICAgRmxvYXRRdWFkIGxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFk
JiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IFVzZVRyYW5zZm9ybXMsIGJvb2wqIHdhc0ZpeGVkID0g
bnVsbHB0cikgY29uc3Q7CiAgICAgLy8gQ29udmVydCBhbiBhYnNvbHV0ZSBxdWFkIHRvIGxvY2Fs
IGNvb3JkaW5hdGVzLgotICAgIEZsb2F0UXVhZCBhYnNvbHV0ZVRvTG9jYWxRdWFkKGNvbnN0IEZs
b2F0UXVhZCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9kZSA9IFVzZVRyYW5zZm9ybXMpIGNvbnN0
OworICAgIEZsb2F0UXVhZCBhYnNvbHV0ZVRvTG9jYWxRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIE1h
cENvb3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zKSBjb25zdDsKIAogICAgIC8vIENvbnZl
cnQgYSBsb2NhbCBxdWFkIGludG8gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIGNvbnRhaW5lciwg
dGFraW5nIHRyYW5zZm9ybXMgaW50byBhY2NvdW50LgogICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0
UXVhZCBsb2NhbFRvQ29udGFpbmVyUXVhZChjb25zdCBGbG9hdFF1YWQmLCBjb25zdCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBNYXBDb29yZGluYXRlc0ZsYWdzID0g
VXNlVHJhbnNmb3JtcywgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdDsKQEAgLTU5Niwx
NSArNTQ3LDE0IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3QgeyB9CiAKLSAgICAvLyBG
SVhNRTogdXNlVHJhbnNmb3JtcyBzaG91bGQgZ28gYXdheSBldmVudHVhbGx5CiAgICAgV0VCQ09S
RV9FWFBPUlQgSW50UmVjdCBhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdChib29sIHVzZVRyYW5zZm9y
bSA9IHRydWUsIGJvb2wqIHdhc0ZpeGVkID0gbnVsbHB0cikgY29uc3Q7CiAgICAgSW50UmVjdCBh
YnNvbHV0ZUJvdW5kaW5nQm94UmVjdElnbm9yaW5nVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJu
IGFic29sdXRlQm91bmRpbmdCb3hSZWN0KGZhbHNlKTsgfQogCiAgICAgLy8gQnVpbGQgYW4gYXJy
YXkgb2YgcXVhZHMgaW4gYWJzb2x1dGUgY29vcmRzIGZvciBsaW5lIGJveGVzCiAgICAgdmlydHVh
bCB2b2lkIGFic29sdXRlUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mLCBib29sKiAvKndhc0ZpeGVk
Ki8gPSBudWxscHRyKSBjb25zdCB7IH0KLQogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZUZvY3Vz
UmluZ1F1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+Jik7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0
aWMgVmVjdG9yPEZsb2F0UXVhZD4gYWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2Um
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCA9IGZhbHNlKTsKICAgICBzdGF0aWMgRmxvYXRSZWN0
IGFic29sdXRlQm91bmRpbmdCb3hSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UqKTsKIAogICAgIC8v
IHRoZSByZWN0IHRoYXQgd2lsbCBiZSBwYWludGVkIGlmIHRoaXMgb2JqZWN0IGlzIHBhc3NlZCBh
cyB0aGUgcGFpbnRpbmdSb290CkBAIC02MjMsOCArNTczLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgQ3Vyc29yRGlyZWN0aXZlIGdldEN1cnNvcihjb25zdCBMYXlvdXRQb2ludCYsIEN1cnNvciYp
IGNvbnN0OwogCiAgICAgLy8gUmV0dXJuIHRoZSBSZW5kZXJMYXllck1vZGVsT2JqZWN0IGluIHRo
ZSBjb250YWluZXIgY2hhaW4gd2hpY2ggaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoaXMg
b2JqZWN0LCBvciBudWxscHRyCi0gICAgLy8gaWYgcGFpbnRpbmcgaXMgcm9vdC1yZWxhdGl2ZS4g
VGhpcyBpcyB0aGUgY29udGFpbmVyIHRoYXQgc2hvdWxkIGJlIHBhc3NlZCB0byB0aGUgJ2ZvclJl
cGFpbnQnCi0gICAgLy8gbWV0aG9kcy4KKyAgICAvLyBpZiBwYWludGluZyBpcyByb290LXJlbGF0
aXZlLiBUaGlzIGlzIHRoZSBjb250YWluZXIgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSAn
Zm9yUmVwYWludCcgZnVuY3Rpb25zLgogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIGNvbnRh
aW5lckZvclJlcGFpbnQoKSBjb25zdDsKICAgICAvLyBBY3R1YWxseSBkbyB0aGUgcmVwYWludCBv
ZiByZWN0IHIgZm9yIHRoaXMgb2JqZWN0IHdoaWNoIGhhcyBiZWVuIGNvbXB1dGVkIGluIHRoZSBj
b29yZGluYXRlIHNwYWNlCiAgICAgLy8gb2YgcmVwYWludENvbnRhaW5lci4gSWYgcmVwYWludENv
bnRhaW5lciBpcyBudWxscHRyLCByZXBhaW50IHZpYSB0aGUgdmlldy4KQEAgLTY0MiwxMCArNTkx
LDcgQEAgcHVibGljOgogCiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0IHNob3VsZCBiZSBy
ZXBhaW50ZWQgd2hlbmV2ZXIgdGhpcyBvYmplY3QgY2hhbmdlcy4gIFRoZSByZWN0IGlzIGluIHRo
ZSB2aWV3J3MKICAgICAvLyBjb29yZGluYXRlIHNwYWNlLiAgVGhpcyBtZXRob2QgZGVhbHMgd2l0
aCBvdXRsaW5lcyBhbmQgb3ZlcmZsb3cuCi0gICAgTGF5b3V0UmVjdCBhYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNsaXBwZWRPdmVyZmxv
d1JlY3RGb3JSZXBhaW50KG51bGxwdHIpOwotICAgIH0KKyAgICBMYXlvdXRSZWN0IGFic29sdXRl
Q2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0IHsgcmV0dXJuIGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KG51bGxwdHIpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgSW50UmVjdCBwaXhlbFNu
YXBwZWRBYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1JlY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIExh
eW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3Q7CiAgICAgdmlydHVhbCBMYXlvdXRS
ZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgTGF5b3V0VW5pdCBvdXRsaW5lV2lkdGgpIGNvbnN0OwpAQCAt
NjUzLDEwICs1OTksNyBAQCBwdWJsaWM6CiAKICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9i
amVjdCdzIGNvb3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRhYmxlIGZvciByZXBh
aW50aW5nCiAgICAgLy8gdGhhdCByZWN0IGluIHZpZXcgY29vcmRpbmF0ZXMuCi0gICAgTGF5b3V0
UmVjdCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChjb25zdCBMYXlvdXRSZWN0JiByKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVSZWN0Rm9yUmVwYWludChyLCBudWxscHRy
KTsKLSAgICB9CisgICAgTGF5b3V0UmVjdCBjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChjb25z
dCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdCB7IHJldHVybiBjb21wdXRlUmVjdEZvclJlcGFpbnQo
cmVjdCwgbnVsbHB0cik7IH0KICAgICAvLyBHaXZlbiBhIHJlY3QgaW4gdGhlIG9iamVjdCdzIGNv
b3JkaW5hdGUgc3BhY2UsIGNvbXB1dGUgYSByZWN0IHN1aXRhYmxlIGZvciByZXBhaW50aW5nCiAg
ICAgLy8gdGhhdCByZWN0IGluIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIHJlcGFpbnRDb250YWlu
ZXIuCiAgICAgTGF5b3V0UmVjdCBjb21wdXRlUmVjdEZvclJlcGFpbnQoY29uc3QgTGF5b3V0UmVj
dCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIpIGNvbnN0
OwpAQCAtNjg3LDcgKzYzMCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wg
aGFzTm9uRW1wdHlWaXNpYmxlUmVjdFJlc3BlY3RpbmdQYXJlbnRGcmFtZXMoKSBjb25zdDsKIAot
ICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKyAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KIAogICAgIGJv
b2wgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIChpc0Zs
b2F0aW5nKCkgfHwgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOyB9CiAKQEAgLTczMSwxNCArNjc0
LDkgQEAgcHVibGljOgogCiAgICAgLy8gVmlydHVhbCBmdW5jdGlvbiBoZWxwZXJzIGZvciB0aGUg
ZGVwcmVjYXRlZCBGbGV4aWJsZSBCb3ggTGF5b3V0IChkaXNwbGF5OiAtd2Via2l0LWJveCkuCiAg
ICAgdmlydHVhbCBib29sIGlzRGVwcmVjYXRlZEZsZXhpYmxlQm94KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLQogICAgIC8vIFZpcnR1YWwgZnVuY3Rpb24gaGVscGVyIGZvciB0aGUgbmV3IEZs
ZXhpYmxlQm94IExheW91dCAoZGlzcGxheTogLXdlYmtpdC1mbGV4KS4KICAgICB2aXJ0dWFsIGJv
b2wgaXNGbGV4aWJsZUJveCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICBib29sIGlz
RmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNhdGVkKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBpc0ZsZXhpYmxlQm94KCkgfHwgaXNEZXByZWNhdGVkRmxleGlibGVCb3goKTsKLSAgICB9
CisgICAgYm9vbCBpc0ZsZXhpYmxlQm94SW5jbHVkaW5nRGVwcmVjYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIGlzRmxleGlibGVCb3goKSB8fCBpc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDb21iaW5lVGV4dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAK
QEAgLTc2OSwxMCArNzA3LDcgQEAgcHVibGljOgogICAgIAogICAgIHZpcnR1YWwgdm9pZCBhZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8TGF5b3V0UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYgLyog
YWRkaXRpb25hbE9mZnNldCAqLywgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogLyogcGFp
bnRDb250YWluZXIgKi8gPSBudWxscHRyKSB7IH07CiAKLSAgICBMYXlvdXRSZWN0IGFic29sdXRl
T3V0bGluZUJvdW5kcygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gb3V0bGluZUJvdW5k
c0ZvclJlcGFpbnQobnVsbHB0cik7Ci0gICAgfQorICAgIExheW91dFJlY3QgYWJzb2x1dGVPdXRs
aW5lQm91bmRzKCkgY29uc3QgeyByZXR1cm4gb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQobnVsbHB0
cik7IH0KIAogICAgIHZpcnR1YWwgdm9pZCB3aWxsQmVSZW1vdmVkRnJvbVRyZWUoKTsKICAgICB2
b2lkIHJlc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZU9uUmVtb3ZhbCgpOwpAQCAtODA1LDE3ICs3NDAs
MTEgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGJvb2wgc2hvdWxkQXBwbHlDb21wb3NpdGVk
Q29udGFpbmVyU2Nyb2xsc0ZvclJlcGFpbnQoKTsKIAotICAgIHN0YXRpYyBWaXNpYmxlUmVjdENv
bnRleHQgdmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWludCgpCi0gICAgewotICAgICAgICByZXR1
cm4gVmlzaWJsZVJlY3RDb250ZXh0KGZhbHNlLCBmYWxzZSwgeyBWaXNpYmxlUmVjdENvbnRleHRP
cHRpb246OkFwcGx5Q29udGFpbmVyQ2xpcCwgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBs
eUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzIH0pOwotICAgIH0KKyAgICBzdGF0aWMgVmlzaWJs
ZVJlY3RDb250ZXh0IHZpc2libGVSZWN0Q29udGV4dEZvclJlcGFpbnQoKTsKIAotcHJpdmF0ZToK
LSNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW47IH0KLSAgICB2b2lkIHNl
dE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSB7IG1fc2V0TmVlZHNMYXlvdXRGb3Ji
aWRkZW4gPSBmbGFnOyB9Ci0jZW5kaWYKKyAgICBib29sIGlzU2V0TmVlZHNMYXlvdXRGb3JiaWRk
ZW4oKSBjb25zdDsKIAorcHJpdmF0ZToKICAgICB2b2lkIGFkZEFic29sdXRlUmVjdEZvckxheWVy
KExheW91dFJlY3QmIHJlc3VsdCk7CiAgICAgdm9pZCBzZXRMYXllck5lZWRzRnVsbFJlcGFpbnQo
KTsKICAgICB2b2lkIHNldExheWVyTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVu
dExheW91dCgpOwpAQCAtODMyLDYgKzc2MSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRIYXNS
YXJlRGF0YShib29sIGIpIHsgbV9iaXRmaWVsZHMuc2V0SGFzUmFyZURhdGEoYik7IH0KIAogI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBzZXROZWVkc0xheW91dElzRm9yYmlkZGVuKGJvb2wg
ZmxhZykgY29uc3QgeyBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuID0gZmxhZzsgfQogICAgIHZv
aWQgY2hlY2tCbG9ja1Bvc2l0aW9uZWRPYmplY3RzTmVlZExheW91dCgpOwogI2VuZGlmCiAKQEAg
LTg0Miw4ICs3NzIsOCBAQCBwcml2YXRlOgogICAgIFJlbmRlck9iamVjdCogbV9uZXh0OwogCiAj
aWYgQVNTRVJUX0VOQUJMRUQKLSAgICBib29sIG1faGFzQVhPYmplY3QgICAgICAgICAgICAgOiAx
OwotICAgIGJvb2wgbV9zZXROZWVkc0xheW91dEZvcmJpZGRlbiA6IDE7CisgICAgYm9vbCBtX2hh
c0FYT2JqZWN0IDogMTsKKyAgICBtdXRhYmxlIGJvb2wgbV9zZXROZWVkc0xheW91dEZvcmJpZGRl
biA6IDE7CiAjZW5kaWYKIAogI2RlZmluZSBBRERfQk9PTEVBTl9CSVRGSUVMRChuYW1lLCBOYW1l
KSBcCkBAIC05OTAsNiArOTIwLDE3IEBAIHByaXZhdGU6CiAjdW5kZWYgQUREX0JPT0xFQU5fQklU
RklFTEQKIH07CiAKK2NsYXNzIFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNj
b3BlKGNvbnN0IFJlbmRlck9iamVjdCYsIGJvb2wgaXNGb3JiaWRkZW4gPSB0cnVlKTsKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgIH5TZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSgpOworcHJp
dmF0ZToKKyAgICBjb25zdCBSZW5kZXJPYmplY3QmIG1fcmVuZGVyT2JqZWN0OworICAgIGJvb2wg
bV9wcmVleGlzdGluZ0ZvcmJpZGRlbjsKKyNlbmRpZgorfTsKKwogaW5saW5lIEZyYW1lJiBSZW5k
ZXJPYmplY3Q6OmZyYW1lKCkgY29uc3QKIHsKICAgICByZXR1cm4gKmRvY3VtZW50KCkuZnJhbWUo
KTsKQEAgLTExMDQsNyArMTA0NSw5NyBAQCBpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Om5lZWRz
U2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXRPbmx5KCkgY29uc3QKICAgICAgICAgJiYgIW1fYml0
ZmllbGRzLnBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubmVlZHNQb3NpdGlv
bmVkTW92ZW1lbnRMYXlvdXQoKTsKIH0KIAotaW5saW5lIHZvaWQgTm9kZTo6c2V0UmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikgeyBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3Muc2V0UG9p
bnRlcihyZW5kZXJlcik7IH0KK2lubGluZSBSZW5kZXJGcmFnbWVudGVkRmxvdyogUmVuZGVyT2Jq
ZWN0OjplbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0Cit7CisgICAgaWYgKGZyYWdtZW50
ZWRGbG93U3RhdGUoKSA9PSBOb3RJbnNpZGVGcmFnbWVudGVkRmxvdykKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICByZXR1cm4gbG9jYXRlRW5jbG9zaW5nRnJhZ21lbnRlZEZsb3coKTsK
K30KKworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc0Fub255bW91c0Jsb2NrKCkgY29uc3QK
K3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggYW5vbnlt
b3VzIGJsb2NrIGNyZWF0aW9uIGNvbmRpdGlvbnMgaW4gUmVuZGVyQmxvY2s6OmNyZWF0ZUFub255
bW91c0Jsb2NrKCkuCisgICAgLy8gRklYTUU6IFRoYXQgc2VlbXMgZGlmZmljdWx0LiBDYW4gd2Ug
Y29tZSB1cCB3aXRoIGEgc2ltcGxlciB3YXkgdG8gbWFrZSBiZWhhdmlvciBjb3JyZWN0PworICAg
IC8vIEZJWE1FOiBEb2VzIHRoaXMgcmVsYXRpdmVseSBsb25nIGZ1bmN0aW9uIGJlbmVmaXQgZnJv
bSBiZWluZyBpbmxpbmVkPworICAgIHJldHVybiBpc0Fub255bW91cygpCisgICAgICAgICYmIChz
dHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgc3R5bGUoKS5kaXNwbGF5
KCkgPT0gRGlzcGxheVR5cGU6OkJveCkKKyAgICAgICAgJiYgc3R5bGUoKS5zdHlsZVR5cGUoKSA9
PSBQc2V1ZG9JZDo6Tm9uZQorICAgICAgICAmJiBpc1JlbmRlckJsb2NrKCkKKyNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpCisgICAgICAgICYmICFpc1JlbmRlckZ1bGxTY3JlZW4oKQorICAgICAg
ICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuUGxhY2Vob2xkZXIoKQorI2VuZGlmCisjaWYgRU5BQkxF
KE1BVEhNTCkKKyAgICAgICAgJiYgIWlzUmVuZGVyTWF0aE1MQmxvY2soKQorI2VuZGlmCisgICAg
ICAgICYmICFpc0xpc3RNYXJrZXIoKQorICAgICAgICAmJiAhaXNSZW5kZXJGcmFnbWVudGVkRmxv
dygpCisgICAgICAgICYmICFpc1JlbmRlck11bHRpQ29sdW1uU2V0KCkKKyAgICAgICAgJiYgIWlz
UmVuZGVyVmlldygpOworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6Om5lZWRzTGF5b3V0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKQorICAgICAg
ICB8fCBtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkKKyAgICAgICAgfHwgbV9i
aXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCisgICAgICAgIHx8IG1fYml0ZmllbGRzLm5l
ZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKQorICAgICAgICB8fCBtX2JpdGZpZWxkcy5u
ZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJP
YmplY3Q6Om5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0T25seSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCkKKyAgICAg
ICAgJiYgIW1fYml0ZmllbGRzLm5lZWRzTGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRz
Lm5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKQorICAgICAgICAmJiAhbV9iaXRmaWVsZHMucG9zQ2hp
bGROZWVkc0xheW91dCgpCisgICAgICAgICYmICFtX2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWRO
b3JtYWxGbG93TGF5b3V0KCk7Cit9CisKK2lubGluZSB2b2lkIFJlbmRlck9iamVjdDo6c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCkKK3sKKyAgICBzZXROZWVkc0xheW91dCgpOwor
ICAgIHNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eSh0cnVlKTsKK30KKworaW5saW5lIHZv
aWQgUmVuZGVyT2JqZWN0OjpzZXRQb3NpdGlvblN0YXRlKFBvc2l0aW9uVHlwZSBwb3NpdGlvbikK
K3sKKyAgICBBU1NFUlQoKHBvc2l0aW9uICE9IFBvc2l0aW9uVHlwZTo6QWJzb2x1dGUgJiYgcG9z
aXRpb24gIT0gUG9zaXRpb25UeXBlOjpGaXhlZCkgfHwgaXNCb3goKSk7CisgICAgbV9iaXRmaWVs
ZHMuc2V0UG9zaXRpb25lZFN0YXRlKHN0YXRpY19jYXN0PGludD4ocG9zaXRpb24pKTsKK30KKwor
aW5saW5lIEZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZVF1YWQoY29uc3Qg
RmxvYXRRdWFkJiBxdWFkLCBNYXBDb29yZGluYXRlc0ZsYWdzIG1vZGUsIGJvb2wqIHdhc0ZpeGVk
KSBjb25zdAoreworICAgIHJldHVybiBsb2NhbFRvQ29udGFpbmVyUXVhZChxdWFkLCBudWxscHRy
LCBtb2RlLCB3YXNGaXhlZCk7Cit9CisKK2lubGluZSBhdXRvIFJlbmRlck9iamVjdDo6dmlzaWJs
ZVJlY3RDb250ZXh0Rm9yUmVwYWludCgpIC0+IFZpc2libGVSZWN0Q29udGV4dAoreworICAgIHJl
dHVybiB7IGZhbHNlLCBmYWxzZSwgeyBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFwcGx5Q29u
dGFpbmVyQ2xpcCwgVmlzaWJsZVJlY3RDb250ZXh0T3B0aW9uOjpBcHBseUNvbXBvc2l0ZWRDb250
YWluZXJTY3JvbGxzIH0gfTsKK30KKworaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1NldE5l
ZWRzTGF5b3V0Rm9yYmlkZGVuKCkgY29uc3QKK3sKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIHJl
dHVybiBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuOworI2Vsc2UKKyAgICByZXR1cm4gZmFsc2U7
CisjZW5kaWYKK30KKworI2lmICFBU1NFUlRfRU5BQkxFRAorCitpbmxpbmUgUmVuZGVyT2JqZWN0
OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgYm9vbCkKK3sKK30KKworI2VuZGlmCisKK2lubGlu
ZSB2b2lkIE5vZGU6OnNldFJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAg
bV9yZW5kZXJlcldpdGhTdHlsZUZsYWdzLnNldFBvaW50ZXIocmVuZGVyZXIpOworfQogCiAjaWYg
RU5BQkxFKFRSRUVfREVCVUdHSU5HKQogdm9pZCBwcmludFJlbmRlclRyZWVGb3JMaXZlRG9jdW1l
bnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRl
eCBhZTA1YTE0MzIxZmNhODZlNzdhYzQ5ZDcxZTc4MGEyZWViNzM0NGExLi4wMGI2MWY3ZjAwYzgz
YWQ1MzJhYzU3YTJkYmU4MGI2MmJhNDhmMTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTE0MSwxNSArMTQxLDEwIEBAIGJvb2wgUmVuZGVyUmVw
bGFjZWQ6OnNob3VsZERyYXdTZWxlY3Rpb25UaW50KCkgY29uc3QKIAogaW5saW5lIHN0YXRpYyBi
b29sIGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoY29uc3QgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2VycywgY29uc3QgRWxlbWVudCYgZWxlbWVudCkK
IHsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQog
ICAgIGZvciAoYXV0byogbWFya2VyIDogbWFya2VycykgewotICAgICAgICBhdXRvJiBkcmFnZ2Vk
Q29udGVudERhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnREYXRh
PihtYXJrZXItPmRhdGEoKSk7Ci0gICAgICAgIGlmIChkcmFnZ2VkQ29udGVudERhdGEudGFyZ2V0
Tm9kZSA9PSAmZWxlbWVudCkKKyAgICAgICAgaWYgKFdURjo6Z2V0PFJlZlB0cjxOb2RlPj4obWFy
a2VyLT5kYXRhKCkpID09ICZlbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xNjksOSArMTY0LDcgQEAgdm9pZCBSZW5k
ZXJSZXBsYWNlZDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50
JiBwYWludE9mZnNldCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotI2lmbmRlZiBOREVCVUcK
LSAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzY29wZSh0aGlzKTsKLSNlbmRpZgor
ICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIHNjb3BlKCp0aGlzKTsKIAogICAgIEdy
YXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc2F2ZWRHcmFwaGljc0NvbnRleHQocGFpbnRJbmZvLmNv
bnRleHQoKSwgZmFsc2UpOwogICAgIGlmIChlbGVtZW50KCkgJiYgZWxlbWVudCgpLT5wYXJlbnRP
clNoYWRvd0hvc3RFbGVtZW50KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRhYmxlU2VjdGlvbi5jcHAKaW5kZXggYmJjOWQwZjM2MDUwODdiYjc0OGUyYmEwZTNhZWZi
YzE0Yzk2YjQ5Ni4uNTU2OGE3ZTZkZGQ5YTA0MmJkNWVjZmRjNjhiZWUwN2RkNWQwYThhZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKQEAg
LTIyMiw5ICsyMjIsNyBAQCBzdGF0aWMgTGF5b3V0VW5pdCByZXNvbHZlTG9naWNhbEhlaWdodEZv
clJvdyhjb25zdCBMZW5ndGgmIHJvd0xvZ2ljYWxIZWlnaHQpCiAKIExheW91dFVuaXQgUmVuZGVy
VGFibGVTZWN0aW9uOjpjYWxjUm93TG9naWNhbEhlaWdodCgpCiB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKHRo
aXMpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9y
YmlkZGVuU2NvcGUoKnRoaXMpOwogCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsKIApAQCAt
NTM4LDkgKzUzNiw3IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpyZWxheW91dENlbGxJZkZs
ZXhlZChSZW5kZXJUYWJsZUNlbGwmIGNlbGwsIGludCByb3dJbmRlCiAKIHZvaWQgUmVuZGVyVGFi
bGVTZWN0aW9uOjpsYXlvdXRSb3dzKCkKIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUodGhpcyk7Ci0jZW5kaWYK
KyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlvdXRGb3JiaWRkZW5TY29wZSgq
dGhpcyk7CiAKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRoZW1lLmNwcAppbmRleCBlOWRkMTQ5NDU4NjRiYTliZDhlODVhNDUwODQ3
ZTJlNjI1MmQxNjQ2Li45ODk1YWRiZGM5MjZiYjE4YTdjZGU3NDhlYWVlMDNiYzYwYWZkZTM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKQEAgLTEzNDcsMjggKzEz
NDcsMTUgQEAgQ29sb3IgUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKENTU1ZhbHVlSUQgY3NzVmFs
dWVJZCwgT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGkKICAgICB9CiB9CiAKLUNvbG9yIFJlbmRl
clRoZW1lOjphY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZTo6dGV4dFNlYXJj
aEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBj
b25zdAogewogICAgIGF1dG8mIGNhY2hlID0gY29sb3JDYWNoZShvcHRpb25zKTsKLSAgICBpZiAo
IWNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
IGNhY2hlLmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciA9IHBsYXRmb3JtQWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKG9wdGlvbnMpOwotICAgIHJldHVybiBjYWNoZS5hY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3I7CisgICAgaWYgKCFjYWNoZS50ZXh0U2VhcmNoSGlnaGxp
Z2h0Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICBjYWNoZS50ZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IgPSBwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihvcHRpb25zKTsKKyAgICByZXR1
cm4gY2FjaGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwogfQogCi1Db2xvciBSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0Ci17Ci0gICAgYXV0byYgY2FjaGUgPSBjb2xvckNhY2hl
KG9wdGlvbnMpOwotICAgIGlmICghY2FjaGUuaW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IuaXNWYWxpZCgpKQotICAgICAgICBjYWNoZS5pbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRD
b2xvciA9IHBsYXRmb3JtSW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Iob3B0aW9ucyk7
Ci0gICAgcmV0dXJuIGNhY2hlLmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwotfQot
Ci1Db2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29s
b3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdAotewotICAgIHJldHVybiBD
b2xvcigyNTUsIDE1MCwgNTApOyAvLyBPcmFuZ2UuCi19Ci0KLUNvbG9yIFJlbmRlclRoZW1lOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QKK0NvbG9yIFJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CiB7
CiAgICAgcmV0dXJuIENvbG9yKDI1NSwgMjU1LCAwKTsgLy8gWWVsbG93LgogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAppbmRleCA0MDE5ZDRmMmIxOTcxZGY0MmVjNGE3OThj
M2Y5MzhiNzQyMzM5ZWY0Li5iMzU1Mzc4YWRlNjliODAwNmFmNjVlMjRiMmMyMmFhOTViM2MzYjUx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUuaApAQCAtMTU0LDkgKzE1NCw4
IEBAIHB1YmxpYzoKICAgICBDb2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKICAgICBDb2xvciBp
bmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29s
b3I6Ok9wdGlvbnM+KSBjb25zdDsKIAotICAgIC8vIEhpZ2hsaWdodGluZyBjb2xvcnMgZm9yIHNl
YXJjaCBtYXRjaGVzLgotICAgIENvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihP
cHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwotICAgIENvbG9yIGluYWN0aXZl
VGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikg
Y29uc3Q7CisgICAgLy8gSGlnaGxpZ2h0aW5nIGNvbG9yIGZvciBzZWFyY2ggbWF0Y2hlcy4KKyAg
ICBDb2xvciB0ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9w
dGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1YWwgQ29sb3IgZGlzYWJsZWRUZXh0Q29sb3IoY29u
c3QgQ29sb3ImIHRleHRDb2xvciwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRDb2xvcikgY29uc3Q7
CiAKQEAgLTI3NSw5ICsyNzQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBDb2xvciBwbGF0
Zm9ybUFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKICAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpP
cHRpb25zPikgY29uc3Q7CiAKLSAgICAvLyBUaGUgcGxhdGZvcm0gaGlnaGxpZ2h0aW5nIGNvbG9y
cyBmb3Igc2VhcmNoIG1hdGNoZXMuCi0gICAgdmlydHVhbCBDb2xvciBwbGF0Zm9ybUFjdGl2ZVRl
eHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNv
bnN0OwotICAgIHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OworICAgIHZpcnR1
YWwgQ29sb3IgcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c1NlbGVj
dGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzTGlzdEJveFNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcnMoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CkBAIC00MzMsOCArNDMwLDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICBDb2xvciBhY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yOwogICAgICAgICBD
b2xvciBpbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3I7CiAKLSAgICAgICAg
Q29sb3IgYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOwotICAgICAgICBDb2xvciBpbmFj
dGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKKyAgICAgICAgQ29sb3IgdGV4dFNlYXJjaEhp
Z2hsaWdodENvbG9yOwogICAgIH07CiAKICAgICB2aXJ0dWFsIENvbG9yQ2FjaGUmIGNvbG9yQ2Fj
aGUoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKaW5kZXggMDdmMjZlNTExM2Q2ZDk1NGFkNDI3ZjM1
ZDQ3ZTM1ZTE1MjQxZDRjOC4uZTA0ODQ1MmM2YzkyN2ZiN2Q2ZmU3MjRiNjQwZjZjM2JmNzhkNTMx
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmgKQEAgLTYzLDgg
KzYzLDcgQEAgcHVibGljOgogICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0Qm94U2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Qg
ZmluYWw7CiAgICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3Jv
dW5kQ29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBmaW5hbDsKICAg
ICBDb2xvciBwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRp
b25zPikgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGln
aGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdCBmaW5hbDsK
LSAgICBDb2xvciBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CisgICAgQ29sb3IgcGxhdGZv
cm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdCBmaW5hbDsKIAogICAgIFNjcm9sbGJhckNvbnRyb2xTaXplIHNjcm9sbGJhckNvbnRy
b2xTaXplRm9yUGFydChDb250cm9sUGFydCkgZmluYWwgeyByZXR1cm4gU21hbGxTY3JvbGxiYXI7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFj
Lm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCmluZGV4IDBl
MzcxODg2MjI4YzFiMTZiMjYyZThkNmEwNjI5NDJjYjgyYzU5YzYuLmNiYTE2MWU3NDk2MDRlNmI0
ZGQ2OGYwNDQ1YTAwMWY4ODY0MTlkOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KQEAgLTQ3MSwxOSArNDcxLDEyIEBAIENvbG9yIFJlbmRlclRoZW1lTWFj
OjpwbGF0Zm9ybUZvY3VzUmluZ0NvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBv
cHRpCiAgICAgcmV0dXJuIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoY29sb3JGcm9tTlNDb2xvcihb
TlNDb2xvciBrZXlib2FyZEZvY3VzSW5kaWNhdG9yQ29sb3JdKS5yZ2IoKSwgMSk7CiB9CiAKLUNv
bG9yIFJlbmRlclRoZW1lTWFjOjpwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKK0NvbG9yIFJl
bmRlclRoZW1lTWFjOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8
U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKIHsKICAgICBMb2NhbERlZmF1bHRT
eXN0ZW1BcHBlYXJhbmNlIGxvY2FsQXBwZWFyYW5jZShvcHRpb25zLmNvbnRhaW5zKFN0eWxlQ29s
b3I6Ok9wdGlvbnM6OlVzZURhcmtBcHBlYXJhbmNlKSk7CiAgICAgcmV0dXJuIGNvbG9yRnJvbU5T
Q29sb3IoW05TQ29sb3IgZmluZEhpZ2hsaWdodENvbG9yXSk7CiB9CiAKLUNvbG9yIFJlbmRlclRo
ZW1lTWFjOjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNl
dDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAotewotICAgIC8vIFRoZSBpbmFj
dGl2ZSBjb2xvciBpcyBub3JtYWxseSB1c2VkLCBzaW5jZSBubyBsZWdhY3kgV2ViS2l0IGNsaWVu
dCBtYXJrcyBhIHRleHQgbWF0Y2ggYXMgYWN0aXZlLgotICAgIC8vIFNvIGp1c3QgcmV0dXJuIHRo
ZSBzYW1lIGNvbG9yIGZvciBib3RoIHN0YXRlcy4KLSAgICByZXR1cm4gcGxhdGZvcm1BY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Iob3B0aW9ucyk7Ci19Ci0KIHN0YXRpYyBGb250U2VsZWN0
aW9uVmFsdWUgdG9Gb250V2VpZ2h0KE5TSW50ZWdlciBhcHBLaXRGb250V2VpZ2h0KQogewogICAg
IEFTU0VSVChhcHBLaXRGb250V2VpZ2h0ID4gMCAmJiBhcHBLaXRGb250V2VpZ2h0IDwgMTUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDUxZTdkMWJlOTMyYTE3NzNjNjY1
MDBjODYwZGRkNGVjZTEzMWI1MmMuLjAxZDgxYzUwYWIxNDc5OTk3ODc0M2M3NDVlM2E5Zjg2NTZl
YTcwNjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE3NTUsMTIgKzE3
NTUsNiBAQCBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6ZHVtcE1hcmtlclJlY3RzKGNv
bnN0IFN0cmluZyYgbWFya2VyVHlwZVN0cmluZykKICAgICByZXR1cm4gcmVjdFN0cmluZy50b1N0
cmluZygpOwogfQogCi12b2lkIEludGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJh
bmdlJiByYW5nZSwgYm9vbCBpc0FjdGl2ZSkKLXsKLSAgICByYW5nZS5vd25lckRvY3VtZW50KCku
dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmFuZ2Uub3duZXJE
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRUZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIGlzQWN0aXZlKTsK
LX0KLQogRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzZXRNYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkKGJvb2wgZmxhZykKIHsKICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBjb250
ZXh0RG9jdW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDc5ZjQyNGMz
ZDgzYTBkNmUzYWQzMmFkNWFhODRlNmMwNTY5NzJmNTguLmNiNmUxNDdjZDY2ZmVkZjEyY2ExNWRi
YzgyZjVkMTZhYzZkOGE2OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMjU5
LDcgKzI1OSw2IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25PcjxSZWZQdHI8UmFuZ2U+PiBtYXJr
ZXJSYW5nZUZvck5vZGUoTm9kZSYsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQg
aW5kZXgpOwogICAgIEV4Y2VwdGlvbk9yPFN0cmluZz4gbWFya2VyRGVzY3JpcHRpb25Gb3JOb2Rl
KE5vZGUmLCBjb25zdCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KTsKICAgICBF
eGNlcHRpb25PcjxTdHJpbmc+IGR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtlclR5
cGUpOwotICAgIHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKGNvbnN0IFJhbmdlJiwgYm9vbCBpc0Fj
dGl2ZSk7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChib29sKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZUZvbnRDYWNoZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IGU1YzU4ZjYyYjQxYmM5NTc4OWZmMTc0MTkz
NWVmNjkwMTcyZjgzOWYuLjIwM2RhODA1MDliOWViNTE3ZjZjMDJmNWFiNGY1N2NjMWRlNDdjNzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTI3OCw3ICsyNzgsNiBAQCBl
bnVtIENvbXBvc2l0aW5nUG9saWN5IHsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIFJhbmdlPyBt
YXJrZXJSYW5nZUZvck5vZGUoTm9kZSBub2RlLCBET01TdHJpbmcgbWFya2VyVHlwZSwgdW5zaWdu
ZWQgbG9uZyBpbmRleCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBET01TdHJpbmcgbWFya2Vy
RGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUgbm9kZSwgRE9NU3RyaW5nIG1hcmtlclR5cGUsIHVuc2ln
bmVkIGxvbmcgaW5kZXgpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGR1bXBN
YXJrZXJSZWN0cyhET01TdHJpbmcgbWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRUZXh0TWF0Y2hN
YXJrZXIoUmFuZ2UgcmFuZ2UsIGJvb2xlYW4gaXNBY3RpdmUpOwogICAgIFtNYXlUaHJvd0V4Y2Vw
dGlvbl0gdm9pZCBzZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGJvb2xlYW4gZmxh
Zyk7CiAKICAgICB2b2lkIGludmFsaWRhdGVGb250Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5oCmluZGV4IDIwMDI0YTU4N2FlM2Q0ZWQxMTExZWZh
ZmUyOWEwMTQxNWMzOGM1ZTguLmFiMTQ3YmU0YTlhN2FhMzg5NzhmMzJjMjlmZTFkYzRjMzFmMTRi
NGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdTbmFwc2hvdFN0b3Jl
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld1NuYXBzaG90U3RvcmUuaApAQCAt
MjcsMTMgKzI3LDExIEBACiAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yLmg+CiAjaW5jbHVkZSA8
V2ViQ29yZS9JbnRQb2ludC5oPgotI2luY2x1ZGUgPFdlYkNvcmUvSW50U2l6ZS5oPgogI2luY2x1
ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKLSNpZiBQTEFURk9STShDT0NPQSkKKyNpZiBIQVZFKElPU1VSRkFDRSkKICNpbmNsdWRlIDxX
ZWJDb3JlL0lPU3VyZmFjZS5oPgogI2VuZGlmCiAKQEAgLTQxLDM1ICszOSwxNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaWYgIWRlZmluZWQoX19PQkpDX18pCi10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7
Ci0jZW5kaWYKLQotT0JKQ19DTEFTUyBDQUNvbnRleHQ7Ci0KLSNpZiBIQVZFKElPU1VSRkFDRSkK
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIElPU3VyZmFjZTsKLX0KLSNlbmRpZgotI2VuZGlm
Ci0KIG5hbWVzcGFjZSBXZWJLaXQgewogCi1jbGFzcyBWaWV3U25hcHNob3RTdG9yZTsKIGNsYXNz
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW07CiBjbGFzcyBXZWJQYWdlUHJveHk7CiAKIGNsYXNzIFZp
ZXdTbmFwc2hvdCA6IHB1YmxpYyBSZWZDb3VudGVkPFZpZXdTbmFwc2hvdD4gewogcHVibGljOgot
I2lmIFBMQVRGT1JNKENPQ09BKQogI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIHN0YXRpYyBSZWY8
Vmlld1NuYXBzaG90PiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4p
OwotI2Vsc2UKLSAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hvdD4gY3JlYXRlKHVpbnQzMl90IHNs
b3RJRCwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpOwogI2VuZGlm
Ci0jZWxpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RLKQogICAgIHN0YXRpYyBSZWY8
Vmlld1NuYXBzaG90PiBjcmVhdGUoUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mJik7CiAjZW5kaWYK
IApAQCAtNzcsNyArNTcsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNsZWFySW1hZ2UoKTsKICAg
ICBib29sIGhhc0ltYWdlKCkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oQ09DT0EpCisKKyNpZiBIQVZF
KElPU1VSRkFDRSkKICAgICBpZCBhc0xheWVyQ29udGVudHMoKTsKICAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gYXNJbWFnZUZvclRlc3RpbmcoKTsKICNlbmRpZgpAQCAtODUsNyArNjYsNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRSZW5kZXJUcmVlU2l6ZSh1aW50NjRfdCByZW5kZXJUcmVlU2l6
ZSkgeyBtX3JlbmRlclRyZWVTaXplID0gcmVuZGVyVHJlZVNpemU7IH0KICAgICB1aW50NjRfdCBy
ZW5kZXJUcmVlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyVHJlZVNpemU7IH0KIAotICAg
IHZvaWQgc2V0QmFja2dyb3VuZENvbG9yKFdlYkNvcmU6OkNvbG9yIGNvbG9yKSB7IG1fYmFja2dy
b3VuZENvbG9yID0gY29sb3I7IH0KKyAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihjb25zdCBX
ZWJDb3JlOjpDb2xvciYgY29sb3IpIHsgbV9iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsgfQogICAg
IFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dy
b3VuZENvbG9yOyB9CiAKICAgICB2b2lkIHNldFZpZXdTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJ
bnRQb2ludCBzY3JvbGxQb3NpdGlvbikgeyBtX3ZpZXdTY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBv
c2l0aW9uOyB9CkBAIC05NCw3ICs3NSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERldmljZVNj
YWxlRmFjdG9yKGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKSB7IG1fZGV2aWNlU2NhbGVGYWN0b3Ig
PSBkZXZpY2VTY2FsZUZhY3RvcjsgfQogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9kZXZpY2VTY2FsZUZhY3RvcjsgfQogCi0jaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgV2ViQ29yZTo6SU9TdXJmYWNlKiBzdXJmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAKQEAgLTEwNCwxMSArODQsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRTdXJmYWNlKHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1
cmZhY2U+KTsKIAogICAgIFdlYkNvcmU6OklPU3VyZmFjZTo6U3VyZmFjZVN0YXRlIHNldFZvbGF0
aWxlKGJvb2wpOwotI2Vsc2UKLSAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3NpemU7IH0KLSAgICBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2VTaXplSW5CeXRlczsgfQogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisK
KyNpZiBQTEFURk9STShHVEspCiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdXJmYWNlLmdldCgpOyB9CiAKICAgICBzaXplX3QgaW1hZ2VTaXplSW5CeXRl
cygpIGNvbnN0OwpAQCAtMTE2LDIyICs5NCwxNiBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0
ZToKLSNpZiBQTEFURk9STShDT0NPQSkKICNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBleHBsaWNp
dCBWaWV3U25hcHNob3Qoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4pOwogCiAg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gbV9zdXJmYWNlOwotI2Vsc2UK
LSAgICBleHBsaWNpdCBWaWV3U25hcHNob3QodWludDMyX3Qgc2xvdElELCBXZWJDb3JlOjpJbnRT
aXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcyk7Ci0KLSAgICB1aW50MzJfdCBtX3Nsb3RJRDsK
LSAgICBzaXplX3QgbV9pbWFnZVNpemVJbkJ5dGVzOwotICAgIFdlYkNvcmU6OkludFNpemUgbV9z
aXplOwogI2VuZGlmCi0jZWxpZiBQTEFURk9STShHVEspCisKKyNpZiBQTEFURk9STShHVEspCiAg
ICAgZXhwbGljaXQgVmlld1NuYXBzaG90KFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiYpOwogCi0g
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gbV9zdXJmYWNlIHsgbnVsbHB0ciB9OworICAgIFJl
ZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZTsKICNlbmRpZgogCiAgICAgdWludDY0X3Qg
bV9yZW5kZXJUcmVlU2l6ZTsKQEAgLTE1NiwxMCArMTI4LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcoYm9vbCBkaXNhYmxlKSB7IG1f
ZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eSA9IGRpc2FibGU7IH0KICAgICBib29sIGRpc2FibGVT
bmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9kaXNhYmxlU25h
cHNob3RWb2xhdGlsaXR5OyB9CiAKLSNpZiAhSEFWRShJT1NVUkZBQ0UpICYmIEhBVkUoQ09SRV9B
TklNQVRJT05fUkVOREVSX1NFUlZFUikKLSAgICBzdGF0aWMgQ0FDb250ZXh0ICpzbmFwc2hvdHRp
bmdDb250ZXh0KCk7Ci0jZW5kaWYKLQogcHJpdmF0ZToKICAgICB2b2lkIGRpZEFkZEltYWdlVG9T
bmFwc2hvdChWaWV3U25hcHNob3QmKTsKICAgICB2b2lkIHdpbGxSZW1vdmVJbWFnZUZyb21TbmFw
c2hvdChWaWV3U25hcHNob3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21h
Yy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbQppbmRleCAzNWJjN2MyZWI5OTBlOGY0MWU4N2NjMzRk
MTFjMzFmOGI2ZDkzZDVlLi5jNDNiZDM3ZGY5YzYwNTliMjY2NjE4OTY4OWUyOWE2OGIwYjFjMDRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3Rv
cmVNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1ZpZXdTbmFwc2hvdFN0
b3JlTWFjLm1tCkBAIC0zNCw1MyArMzQsMTkgQEAKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi0jaWYgIUhBVkUoSU9TVVJGQUNFKSAmJiBI
QVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIpCi1DQUNvbnRleHQgKlZpZXdTbmFwc2hv
dFN0b3JlOjpzbmFwc2hvdHRpbmdDb250ZXh0KCkKLXsKLSAgICBzdGF0aWMgQ0FDb250ZXh0ICpj
b250ZXh0OwotICAgIHN0YXRpYyBkaXNwYXRjaF9vbmNlX3Qgb25jZVRva2VuOwotICAgIGRpc3Bh
dGNoX29uY2UoJm9uY2VUb2tlbiwgXnsKLSAgICAgICAgTlNEaWN0aW9uYXJ5ICpvcHRpb25zID0g
QHsKLSAgICAgICAgICAgIGtDQUNvbnRleHREaXNwbGF5TmFtZTogQCJXZWJLaXRTbmFwc2hvdHRp
bmciLAotICAgICAgICAgICAga0NBQ29udGV4dElnbm9yZXNIaXRUZXN0OiBAWUVTLAotICAgICAg
ICAgICAga0NBQ29udGV4dERpc3BsYXlJZCA6IEAyMDAwMAotICAgICAgICB9OwotICAgICAgICBj
b250ZXh0ID0gW1tDQUNvbnRleHQgcmVtb3RlQ29udGV4dFdpdGhPcHRpb25zOm9wdGlvbnNdIHJl
dGFpbl07Ci0gICAgfSk7Ci0KLSAgICByZXR1cm4gY29udGV4dDsKLX0KLSNlbmRpZgotCi0jaWYg
SEFWRShJT1NVUkZBQ0UpCiBSZWY8Vmlld1NuYXBzaG90PiBWaWV3U25hcHNob3Q6OmNyZWF0ZShz
dGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBzdXJmYWNlKQogewogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChXVEZNb3ZlKHN1cmZhY2UpKSk7CiB9Ci0jZWxz
ZQotUmVmPFZpZXdTbmFwc2hvdD4gVmlld1NuYXBzaG90OjpjcmVhdGUodWludDMyX3Qgc2xvdElE
LCBJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJbkJ5dGVzKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFZpZXdTbmFwc2hvdChzbG90SUQsIHNpemUsIGltYWdlU2l6ZUluQnl0ZXMp
KTsKLX0KLSNlbmRpZgogCi0jaWYgSEFWRShJT1NVUkZBQ0UpCiBWaWV3U25hcHNob3Q6OlZpZXdT
bmFwc2hvdChzdGQ6OnVuaXF1ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPiBzdXJmYWNlKQogICAg
IDogbV9zdXJmYWNlKFdURk1vdmUoc3VyZmFjZSkpCi0jZWxzZQotVmlld1NuYXBzaG90OjpWaWV3
U25hcHNob3QodWludDMyX3Qgc2xvdElELCBJbnRTaXplIHNpemUsIHNpemVfdCBpbWFnZVNpemVJ
bkJ5dGVzKQotICAgIDogbV9zbG90SUQoc2xvdElEKQotICAgICwgbV9pbWFnZVNpemVJbkJ5dGVz
KGltYWdlU2l6ZUluQnl0ZXMpCi0gICAgLCBtX3NpemUoc2l6ZSkKLSNlbmRpZgogewogICAgIGlm
IChoYXNJbWFnZSgpKQogICAgICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuZGlk
QWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KIAotI2lmIEhBVkUoSU9TVVJGQUNFKQogdm9p
ZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3Vy
ZmFjZT4gc3VyZmFjZSkKIHsKICAgICBBU1NFUlQoIW1fc3VyZmFjZSk7CkBAIC05MiwxNSArNTgs
MTAgQEAgdm9pZCBWaWV3U25hcHNob3Q6OnNldFN1cmZhY2Uoc3RkOjp1bmlxdWVfcHRyPFdlYkNv
cmU6OklPU3VyZmFjZT4gc3VyZmFjZSkKICAgICBtX3N1cmZhY2UgPSBXVEZNb3ZlKHN1cmZhY2Up
OwogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS5kaWRBZGRJbWFnZVRvU25hcHNo
b3QoKnRoaXMpOwogfQotI2VuZGlmCiAKIGJvb2wgVmlld1NuYXBzaG90OjpoYXNJbWFnZSgpIGNv
bnN0CiB7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgcmV0dXJuICEhbV9zdXJmYWNlOwotI2Vs
c2UKLSAgICByZXR1cm4gbV9zbG90SUQ7Ci0jZW5kaWYKIH0KIAogdm9pZCBWaWV3U25hcHNob3Q6
OmNsZWFySW1hZ2UoKQpAQCAtMTEwLDE4ICs3MSw5IEBAIHZvaWQgVmlld1NuYXBzaG90OjpjbGVh
ckltYWdlKCkKIAogICAgIFZpZXdTbmFwc2hvdFN0b3JlOjpzaW5nbGV0b24oKS53aWxsUmVtb3Zl
SW1hZ2VGcm9tU25hcHNob3QoKnRoaXMpOwogCi0jaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgbV9z
dXJmYWNlID0gbnVsbHB0cjsKLSNlbHNlCi0jaWYgSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJf
U0VSVkVSKQotICAgIFtWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3R0aW5nQ29udGV4dCgpIGRl
bGV0ZVNsb3Q6bV9zbG90SURdOwotI2VuZGlmCi0gICAgbV9zbG90SUQgPSAwOwotICAgIG1faW1h
Z2VTaXplSW5CeXRlcyA9IDA7Ci0jZW5kaWYKIH0KIAotI2lmIEhBVkUoSU9TVVJGQUNFKQogV2Vi
Q29yZTo6SU9TdXJmYWNlOjpTdXJmYWNlU3RhdGUgVmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZShi
b29sIGJlY29tZVZvbGF0aWxlKQogewogICAgIGlmIChWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xl
dG9uKCkuZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eUZvclRlc3RpbmcoKSkKQEAgLTEzMiwxMSAr
ODQsOSBAQCBXZWJDb3JlOjpJT1N1cmZhY2U6OlN1cmZhY2VTdGF0ZSBWaWV3U25hcHNob3Q6OnNl
dFZvbGF0aWxlKGJvb2wgYmVjb21lVm9sYXRpbGUpCiAKICAgICByZXR1cm4gbV9zdXJmYWNlLT5z
ZXRJc1ZvbGF0aWxlKGJlY29tZVZvbGF0aWxlKTsKIH0KLSNlbmRpZgogCiBpZCBWaWV3U25hcHNo
b3Q6OmFzTGF5ZXJDb250ZW50cygpCiB7Ci0jaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgaWYgKCFt
X3N1cmZhY2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkBAIC0xNDYsMjMgKzk2LDE1IEBA
IGlkIFZpZXdTbmFwc2hvdDo6YXNMYXllckNvbnRlbnRzKCkKICAgICB9CiAKICAgICByZXR1cm4g
bV9zdXJmYWNlLT5hc0xheWVyQ29udGVudHMoKTsKLSNlbHNlCi0gICAgcmV0dXJuIFtDQUNvbnRl
eHQgb2JqZWN0Rm9yU2xvdDptX3Nsb3RJRF07Ci0jZW5kaWYKIH0KIAogUmV0YWluUHRyPENHSW1h
Z2VSZWY+IFZpZXdTbmFwc2hvdDo6YXNJbWFnZUZvclRlc3RpbmcoKQogewotI2lmIEhBVkUoSU9T
VVJGQUNFKQogICAgIGlmICghbV9zdXJmYWNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIEFTU0VSVChWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCkuZGlzYWJsZVNuYXBzaG90
Vm9sYXRpbGl0eUZvclRlc3RpbmcoKSk7CiAgICAgcmV0dXJuIG1fc3VyZmFjZS0+Y3JlYXRlSW1h
Z2UoKTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzIGluIHRoZSBzbG90IGNh
c2UuCi0gICAgcmV0dXJuIG51bGxwdHI7Ci0jZW5kaWYKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9U
ZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggZTQ0OWJm
ZDAwMDBkZjAxMzk4ODA0ODlkMGVkMzA5ZjFiYTE5ZjY3Ni4uYTVlZTdlMzg5NWQ1MDhmYmM5OGVk
MzhlODE4NzI5NGVjMjZjN2RhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQ
cm94eS5tbQpAQCAtMTM4LDcgKzEzOCw4IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyCiAgICAg
ICAgIFthdHRycyBlbnVtZXJhdGVLZXlzQW5kT2JqZWN0c1VzaW5nQmxvY2s6XihOU0F0dHJpYnV0
ZWRTdHJpbmdLZXkga2V5LCBpZCB2YWx1ZSwgQk9PTCAqc3RvcCkgewogICAgICAgICAgICAgaWYg
KCFbdmFsdWUgaXNLaW5kT2ZDbGFzczpbTlNTdHJpbmcgY2xhc3NdXSkKICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICBtYXJrZXJzLmFkZFBsYXRmb3JtVGV4dENoZWNraW5nTWFy
a2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwga2V5LCAoTlNTdHJpbmcgKil2YWx1ZSk7CisgICAgICAg
ICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2UsIFdlYkNvcmU6OkRvY3Vt
ZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZywKKyAgICAgICAgICAgICAgICBXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhIHsga2V5LCAoTlNTdHJp
bmcgKil2YWx1ZSB9KTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IFN3aXRjaCB0byBjb25zdGFu
dHMgYWZ0ZXIgcmRhcjovL3Byb2JsZW0vNDg5MTQxNTMgaXMgcmVzb2x2ZWQuCiAgICAgICAgICAg
ICBpZiAoW2tleSBpc0VxdWFsVG9TdHJpbmc6QCJOU1NwZWxsaW5nU3RhdGUiXSkgewpAQCAtMTQ3
LDcgKzE0OCw3IEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVs
YXRpdmVUb1NlbGVjdGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyCiAgICAgICAgICAgICAgICAgICAg
IG1hcmtlcnMuYWRkTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nKTsKICAgICAgICAgICAgICAgICBpZiAoc3BlbGxpbmdTdGF0ZSAmIE5TU3BlbGxpbmdT
dGF0ZUdyYW1tYXJGbGFnKSB7CiAgICAgICAgICAgICAgICAgICAgIE5TU3RyaW5nICp1c2VyRGVz
Y3JpcHRpb24gPSBbYXR0cnMgb2JqZWN0Rm9yS2V5OkAiTlNHcmFtbWFyVXNlckRlc2NyaXB0aW9u
Il07Ci0gICAgICAgICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJpYnV0ZUNvcmVS
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXIsIHVzZXJEZXNjcmlwdGlvbik7CisgICAgICAg
ICAgICAgICAgICAgIG1hcmtlcnMuYWRkTWFya2VyKGF0dHJpYnV0ZUNvcmVSYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OkdyYW1tYXIsIFN0cmluZyB7IHVzZXJEZXNjcmlwdGlvbiB9KTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH1dOwpAQCAtMTU2LDcgKzE1Nyw2IEBA
IHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVj
dGlvbihjb25zdCBBdHRyaWJ1dGVkU3RyCiAKIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBTdHJpbmcmIGFu
bm90YXRpb24sIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgpCiB7Ci0g
ICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogICAgIGF1dG8gcmFuZ2VBbmRPZmZzZXQgPSByYW5nZUFuZE9m
ZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zmc2V0LCBsZW5ndGgpOwogICAgIGlm
ICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKQEAgLTE2NCwxMyArMTY0LDEzIEBA
IHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRp
dmVUb1NlbGVjdGlvbihjb25zdCBTdHJpCiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYm9vbCByZW1vdmVDb3JlU3BlbGxpbmdNYXJrZXJzID0gYW5ub3RhdGlvbiA9PSAi
TlNTcGVsbGluZ1N0YXRlIjsKLSAgICBmcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuZmlsdGVy
TWFya2VycygqcmFuZ2UsIFsmXSAoRG9jdW1lbnRNYXJrZXIqIG1hcmtlcikgewotICAgICAgICBp
ZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENo
ZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQorICAgIGF1dG8gcmVtb3ZlQ29yZVNwZWxsaW5n
TWFya2VycyA9IGFubm90YXRpb24gPT0gIk5TU3BlbGxpbmdTdGF0ZSI7CisgICAgYXV0byB0eXBl
cyA9IHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmc7CisgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKCpyYW5nZSwgWyZdIChjb25zdCBEb2N1bWVu
dE1hcmtlciYgbWFya2VyKSB7CisgICAgICAgIGlmICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIu
ZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgYXV0byYgdGV4dENo
ZWNraW5nRGF0YSA9IFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2lu
Z0RhdGE+KG1hcmtlci0+ZGF0YSgpKTsKLSAgICAgICAgcmV0dXJuIHRleHRDaGVja2luZ0RhdGEu
a2V5ICE9IGFubm90YXRpb247Ci0gICAgfSwgcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA/IHJl
bGV2YW50TWFya2VyVHlwZXMoKSA6IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2lu
Zyk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxh
dGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKS5rZXkgIT0gYW5ub3RhdGlvbjsK
KyAgICB9LCB0eXBlcyk7CiB9CiAKIEF0dHJpYnV0ZWRTdHJpbmcgVGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5Ojphbm5vdGF0ZWRTdWJzdHJpbmdCZXR3ZWVuUG9zaXRpb25zKGNvbnN0IFdlYkNv
cmU6OlZpc2libGVQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFdlYkNvcmU6OlZpc2libGVQb3NpdGlv
biYgZW5kKQpAQCAtMTg4LDEwICsxODgsNyBAQCBBdHRyaWJ1dGVkU3RyaW5nIFRleHRDaGVja2lu
Z0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBvc2l0aW9ucwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIFtzdHJpbmcgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzphZG9wdE5TKFtbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzppdC50
ZXh0KCkuY3JlYXRlTlNTdHJpbmdXaXRob3V0Q29weWluZygpLmdldCgpXSkuZ2V0KCldOwogICAg
ICAgICBhdXRvIHJhbmdlID0gaXQucmFuZ2UoKTsKLSAgICAgICAgYXV0byBtYXJrZXJzID0gcmFu
Z2Uuc3RhcnQuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoY3JlYXRlTGl2ZVJh
bmdlKHJhbmdlKSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nKTsKLSAgICAg
ICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7Ci0gICAgICAgICAgICBpZiAo
IVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNr
aW5nRGF0YT4obWFya2VyLT5kYXRhKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2Vycygp
Lm1hcmtlcnNJblJhbmdlKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmcpKSB7CiAgICAgICAgICAgICBhdXRvJiBkYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6
OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLT5kYXRhKCkpOwogICAgICAgICAgICAg
YXV0byBzdWJyYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgeyBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksIG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
fSk7CiAgICAgICAgICAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZTpkYXRhLmtleSB2YWx1ZTpkYXRh
LnZhbHVlIHJhbmdlOmNoYXJhY3RlclJhbmdlKGVudGlyZVJhbmdlLCBzdWJyYW5nZSldOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNv
Y29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNv
Y29hLm1tCmluZGV4IDMzZWNkN2JlMjQ1Y2RiNTk4N2FiZTAxMDk1NzBmYWVlMmFiOWQ2MWQuLmUz
NjNmYzFmOWM3NWQ2MDg1MGQ5NDM1YTExYmVlMTA2YjU0OTdhODMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAg
LTEzMiw4ICsxMzIsNyBAQCBEaWN0aW9uYXJ5UG9wdXBJbmZvIFdlYlBhZ2U6OmRpY3Rpb25hcnlQ
b3B1cEluZm9Gb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYQogICAgICAgICByZXR1cm4g
ZGljdGlvbmFyeVBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKLSAgICByYW5nZS5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7CisgICAgYXV0byBxdWFkcyA9
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpOwogICAgIGlmIChxdWFkcy5p
c0VtcHR5KCkpIHsKICAgICAgICAgZWRpdG9yLnNldElzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cElu
Zm8oZmFsc2UpOwogICAgICAgICByZXR1cm4gZGljdGlvbmFyeVBvcHVwSW5mbzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXgg
ZGExMTMyYzJjOWJkOTE0OGM4MzNjODc1MzdmM2U4MjY2MzhmY2UzNy4uNDZhY2VlODI2NWVjODU2
NTNmNjQ5Y2FkZThkNWViNzMyNGRiMGRjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTE2MSwxMyArMTYxLDExIEBAIHZv
aWQgV2ViUGFnZTo6Z2V0UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0
YXRlJiByZXN1bHQpIGNvbnN0CiAgICAgcG9zdExheW91dERhdGEucGFyYWdyYXBoQ29udGV4dEZv
ckNhbmRpZGF0ZVJlcXVlc3QgPSBjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0ID8gcGxh
aW5UZXh0KCpjb250ZXh0UmFuZ2VGb3JDYW5kaWRhdGVSZXF1ZXN0KSA6IFN0cmluZygpOwogICAg
IHBvc3RMYXlvdXREYXRhLnN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3QgPSBmcmFtZS5lZGl0b3Io
KS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCk7CiAKLSAgICBJbnRSZWN0IHJlY3RGb3JTZWxl
Y3Rpb25DYW5kaWRhdGVzOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHNlbGVj
dGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBhdXRvIHF1YWRzID0gUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqc2VsZWN0ZWRSYW5nZSk7CiAgICAgaWYgKCFx
dWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHBvc3RMYXlvdXREYXRhLmZvY3VzZWRFbGVtZW50UmVj
dCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3Vu
ZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gUmFuZ2U6OmFic29sdXRlVGV4dFF1
YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGguCisgICAgICAg
IC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoLgogICAg
ICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
LmZvY3VzZWRFbGVtZW50UmVjdCA9IGZyYW1lLnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFt
ZS5zZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkpOwogICAgIH0KQEAgLTg3Miw4ICs4
NzAsOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2Nh
dGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgIH0KIAogICAgIGJvb2wgcGFnZU92
ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRlY3RvcnMgPSBmYWxzZTsKLSAgICBmb3IgKGNvbnN0IGF1
dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIoKS5wYWdlT3Zl
cmxheXMoKSkgewotICAgICAgICBXZWJQYWdlT3ZlcmxheSogd2ViT3ZlcmxheSA9IFdlYlBhZ2VP
dmVybGF5Ojpmcm9tQ29yZU92ZXJsYXkoKm92ZXJsYXkpOworICAgIGZvciAoYXV0byYgb3Zlcmxh
eSA6IGNvcmVQYWdlKCktPnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLnBhZ2VPdmVybGF5cygpKSB7
CisgICAgICAgIGF1dG8gd2ViT3ZlcmxheSA9IFdlYlBhZ2VPdmVybGF5Ojpmcm9tQ29yZU92ZXJs
YXkoKm92ZXJsYXkpOwogICAgICAgICBpZiAoIXdlYk92ZXJsYXkpCiAgICAgICAgICAgICBjb250
aW51ZTsKIApAQCAtODgyLDIwICs4ODAsMTUgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRp
YXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKICAg
ICAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFtYWluUmVzdWx0UmFuZ2UpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAorICAgICAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVy
RG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGlmICghdmlldykKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCiAgICAgICAgIHBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVEYXRhRGV0ZWN0b3JzID0gdHJ1
ZTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUFjdGlvbkNvbnRl
eHQgPSBhY3Rpb25Db250ZXh0OwotCi0gICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwot
ICAgICAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKLSAgICAg
ICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBGcmFtZVZpZXcq
IGZyYW1lVmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKLSAg
ICAgICAgZm9yIChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCi0gICAgICAgICAgICBkZXRlY3Rl
ZERhdGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0
LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7CisgICAg
ICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXct
PmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJl
bmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7CiAgICAg
ICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIFRleHRJbmRpY2F0
b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2Vz
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXkg
PSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7Ci0KICAgICAgICAgYnJlYWs7CiAgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFt
ZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1l
SU9TLm1tCmluZGV4IDU4N2MzNGVjY2YwYmY4YmRjNzRjN2IwZGMwNGYwMDA5NDAxY2QwOTkuLjVk
Njk0ZTRlMjViMmJmOTdjMjk4ZmQxZmMyOGU2MzUxZmRkNjFjMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC04
NDMsMTEgKzg0Myw4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXByZXZpb3VzVW5wZXJ0dXJi
ZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjooCiAgICAgICAgIFdlYlZpc2li
bGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlvbiA9IFtXZWJWaXNpYmxlUG9zaXRp
b24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2libGVQb3NpdGlvbl07CiAgICAgICAg
IAogICAgICAgICBhdXRvKiBjdXJyZW50Tm9kZSA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgICAgIGludCBsYXN0T2Zmc2V0ID0gbGFz
dE9mZnNldEZvckVkaXRpbmcoKmN1cnJlbnROb2RlKTsKLSAgICAgICAgQVNTRVJUKGxhc3RPZmZz
ZXQgPj0gMCk7Ci0gICAgICAgIGlmIChsYXN0T2Zmc2V0IDwgMCkKLSAgICAgICAgICAgIHJldHVy
biBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAgICAKKyAgICAgICAgdW5zaWduZWQg
bGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7CisKICAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzVmlzaWJsZVBvc2l0aW9uID0gY3VycmVudFZpc2li
bGVQb3NpdGlvbi5wcmV2aW91cygpOwogICAgICAgICBpZiAocHJldmlvdXNWaXNpYmxlUG9zaXRp
b24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlv
bjsKQEAgLTg2MywxOCArODYwLDE4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXByZXZpb3Vz
VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFyeUZyb21Qb3NpdGlvbjooCiAgICAgICAg
IC8vIEFTU0VSVChtYXJrZXJzLnNpemUoKSA9PSAxKTsKICAgICAgICAgaWYgKG1hcmtlcnMuc2l6
ZSgpID4gMSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwot
ICAgICAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyKiByZXN1bHRNYXJrZXIgPSBtYXJrZXJzLmF0
KDApOworCisgICAgICAgIGF1dG8mIG1hcmtlciA9ICptYXJrZXJzWzBdOwogICAgICAgICAKLSAg
ICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29y
cmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0
aGUgZWRnZSBvZiAKLSAgICAgICAgLy8gdGhpcyBub2RlLCBiZWNhdXNlIHRoYXQgbWVhbnMgaXQn
cyBpbnZhbGlkLgotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA+ICh1bnNp
Z25lZClsYXN0T2Zmc2V0KQorICAgICAgICAvLyBGSVhNRTogV2ViQ29yZSBkb2Vzbid0IGFsd2F5
cyB1cGRhdGUgbWFya2VycyBjb3JyZWN0bHkgZHVyaW5nIGVkaXRpbmcuIEJhaWwgaWYgcmVzdWx0
TWFya2VyIGV4dGVuZHMgb2ZmIHRoZSBlZGdlIG9mIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1l
YW5zIGl0J3MgaW52YWxpZC4KKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+IGxhc3RP
ZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKICAg
ICAgICAgCi0gICAgICAgIGlmICghW3Vpa2l0RGVsZWdhdGUgaXNVbnBlcnR1cmJlZERpY3RhdGlv
blJlc3VsdE1hcmtlcjpyZXN1bHRNYXJrZXItPm1ldGFkYXRhKCldKQorICAgICAgICBpZiAoIVt1
aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6V1RGOjpnZXQ8
UmV0YWluUHRyPGlkPj4obWFya2VyLmRhdGEoKSkuZ2V0KCldKQogICAgICAgICAgICAgcmV0dXJu
IGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBpZiAocmVzdWx0
TWFya2VyLT5zdGFydE9mZnNldCgpID4gMCkKLSAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJs
ZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIHJlc3VsdE1hcmtlci0+c3RhcnRPZmZzZXQo
KSkpXTsKKyAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID4gMCkKKyAgICAgICAgICAg
IHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOlZpc2libGVQ
b3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5vZGUsIG1hcmtlci5z
dGFydE9mZnNldCgpKSldOwogICAgICAgICAKICAgICAgICAgY3VycmVudFZpc2libGVQb3NpdGlv
biA9IFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudE5v
ZGUsIDApKTsKICAgICB9CkBAIC04OTksMTEgKzg5Niw4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlv
biAqKW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihX
ZWJWCiAgICAgICAgIFdlYlZpc2libGVQb3NpdGlvbiAqY3VycmVudFdlYlZpc2libGVQb3NpdGlv
biA9IFtXZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246Y3VycmVudFZpc2li
bGVQb3NpdGlvbl07CiAgICAgICAgIAogICAgICAgICBhdXRvKiBjdXJyZW50Tm9kZSA9IGN1cnJl
bnRWaXNpYmxlUG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgICAg
IGludCBsYXN0T2Zmc2V0ID0gbGFzdE9mZnNldEZvckVkaXRpbmcoKmN1cnJlbnROb2RlKTsKLSAg
ICAgICAgQVNTRVJUKGxhc3RPZmZzZXQgPj0gMCk7Ci0gICAgICAgIGlmIChsYXN0T2Zmc2V0IDwg
MCkKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAg
ICAKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpj
dXJyZW50Tm9kZSk7CisKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5leHRWaXNpYmxlUG9zaXRp
b24gPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLm5leHQoKTsKICAgICAgICAgaWYgKG5leHRWaXNp
YmxlUG9zaXRpb24uaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2li
bGVQb3NpdGlvbjsKQEAgLTkxOSwxOCArOTEzLDE4IEBAIC0gKFdlYlZpc2libGVQb3NpdGlvbiAq
KW5leHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOihXZWJW
CiAgICAgICAgIC8vQVNTRVJUKG1hcmtlcnMuc2l6ZSgpID09IDEpOwogICAgICAgICBpZiAobWFy
a2Vycy5zaXplKCkgPiAxKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9z
aXRpb247Ci0gICAgICAgIERvY3VtZW50TWFya2VyKiByZXN1bHRNYXJrZXIgPSBtYXJrZXJzLmF0
KDApOwotICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMg
dXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1h
cmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiAKLSAgICAgICAgLy8gdGhpcyBub2RlLCBiZWNh
dXNlIHRoYXQgbWVhbnMgaXQncyBpbnZhbGlkLgotICAgICAgICBpZiAocmVzdWx0TWFya2VyLT5l
bmRPZmZzZXQoKSA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0T2Zmc2V0KSkKKworICAgICAg
ICBhdXRvJiBtYXJrZXIgPSAqbWFya2Vyc1swXTsKKworICAgICAgICAvLyBGSVhNRTogV2ViQ29y
ZSBkb2Vzbid0IGFsd2F5cyB1cGRhdGUgbWFya2VycyBjb3JyZWN0bHkgZHVyaW5nIGVkaXRpbmcu
IEJhaWwgaWYgcmVzdWx0TWFya2VyIGV4dGVuZHMgb2ZmIHRoZSBlZGdlIG9mIHRoaXMgbm9kZSwg
YmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KKyAgICAgICAgaWYgKG1hcmtlci5lbmRP
ZmZzZXQoKSA+IGxhc3RPZmZzZXQpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2li
bGVQb3NpdGlvbjsKICAgICAgICAgCi0gICAgICAgIGlmICghW3Vpa2l0RGVsZWdhdGUgaXNVbnBl
cnR1cmJlZERpY3RhdGlvblJlc3VsdE1hcmtlcjpyZXN1bHRNYXJrZXItPm1ldGFkYXRhKCldKQor
ICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRN
YXJrZXI6V1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2VyLmRhdGEoKSkuZ2V0KCldKQogICAg
ICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAg
ICAgICBpZiAocmVzdWx0TWFya2VyLT5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGFzdE9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBf
d3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGN1cnJlbnROb2RlLCByZXN1bHRNYXJrZXItPmVuZE9mZnNldCgpKSldOworICAgICAg
ICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0T2Zm
c2V0KSkKKyAgICAgICAgICAgIHJldHVybiBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJs
ZVBvc2l0aW9uOlZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3Vy
cmVudE5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSkpXTsKICAgICAgICAgCiAgICAgICAgIGN1cnJl
bnRWaXNpYmxlUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGN1cnJlbnROb2RlLCBsYXN0T2Zmc2V0KSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0
aW9uLm1tCmluZGV4IDY4MjhhYTY3ZjFiMDAxOTk2NjM1N2JlNjM5NTg2NzBhOGRlMmU0YmYuLjY5
MWY4NTE5MzhmODM1N2Q3NzBkOGM0Zjg0ZTVkMmU2YzNlZjk4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9z
aXRpb24ubW0KQEAgLTQwNCw2OSArNDA0LDQ0IEBAIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFu
Z2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihOU0FycmF5ICoqKWFsdGVybmF0CiAg
ICAgQVNTRVJUKGFsdGVybmF0aXZlcyk7CiAgICAgaWYgKCFhbHRlcm5hdGl2ZXMpCiAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgICAgIAorCiAgICAgLy8gKmFsdGVybmF0aXZlcyBzaG91bGQgbm90
IGFscmVhZHkgcG9pbnQgdG8gYW4gYXJyYXkuCi0gICAgQVNTRVJUKCEoKmFsdGVybmF0aXZlcykp
OworICAgIEFTU0VSVCghKmFsdGVybmF0aXZlcyk7CiAgICAgKmFsdGVybmF0aXZlcyA9IG5pbDsK
LSAgICAgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHAgPSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9u
XTsKLSAgICBpZiAocC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0g
ICAgaW50IG8gPSBwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsK
LSAgICBpZiAobyA8IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgdW5zaWduZWQgb2Zmc2V0
ID0gbzsKLSAgICAKLSAgICBOb2RlKiBub2RlID0gcC5kZWVwRXF1aXZhbGVudCgpLmFuY2hvck5v
ZGUoKTsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwotICAgIAot
ICAgIGNvbnN0IGF1dG8mIG1hcmtlcnMgPSBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigq
bm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpOwot
ICAgIGlmIChtYXJrZXJzLmlzRW1wdHkoKSkKKworICAgIGF1dG8gcG9zaXRpb24gPSBbc2VsZiBf
dmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRvKiBub2RlID0gcG9zaXRpb24uZGVlcEVxdWl2YWxl
bnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gbmlsOwot
ICAgICAgICAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1hcmtlcnMuc2l6ZSgpOyBpKysp
IHsKLSAgICAgICAgY29uc3QgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciA9IG1hcmtlcnNbaV07CisK
KyAgICB1bnNpZ25lZCBvZmZzZXQgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgYXV0byYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgp
OworICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigq
bm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSB7
CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0ICYmIG1hcmtlci0+
ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7Ci0gICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYgbWFya2VyQWx0ZXJuYXRpdmVzID0gbWFya2VyLT5hbHRlcm5hdGl2ZXMoKTsKLSAgICAgICAg
ICAgICphbHRlcm5hdGl2ZXMgPSBbTlNNdXRhYmxlQXJyYXkgYXJyYXlXaXRoQ2FwYWNpdHk6bWFy
a2VyQWx0ZXJuYXRpdmVzLnNpemUoKV07Ci0gICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsg
aiA8IG1hcmtlckFsdGVybmF0aXZlcy5zaXplKCk7IGorKykKLSAgICAgICAgICAgICAgICBbKE5T
TXV0YWJsZUFycmF5ICopKmFsdGVybmF0aXZlcyBhZGRPYmplY3Q6KE5TU3RyaW5nICopKG1hcmtl
ckFsdGVybmF0aXZlc1tqXSldOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBy
YW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQo
KSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KHJh
bmdlLnB0cigpKTsKKyAgICAgICAgICAgIGF1dG8mIG1hcmtlckFsdGVybmF0aXZlcyA9IFdURjo6
Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSk7CisgICAgICAgICAgICBhdXRvIGFy
cmF5ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5Om1hcmtlckFsdGVybmF0aXZl
cy5zaXplKCldOworICAgICAgICAgICAgZm9yIChhdXRvJiBhbHRlcm5hdGl2ZSA6IG1hcmtlckFs
dGVybmF0aXZlcykKKyAgICAgICAgICAgICAgICBbYXJyYXkgYWRkT2JqZWN0OmFsdGVybmF0aXZl
XTsKKyAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBhcnJheTsKKyAgICAgICAgICAgIHJldHVy
biBraXQoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgp
LCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKS5wdHIoKSk7CiAgICAgICAgIH0KICAgICB9Ci0g
ICAgICAgIAogICAgIHJldHVybiBuaWw7CiB9CiAKIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFu
Z2VXaXRoQ29ycmVjdGlvbkluZGljYXRvcgogewotICAgIFZpc2libGVQb3NpdGlvbiBwID0gW3Nl
bGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgaW50IG8gPSBwLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKLSAgICBpZiAobyA8IDApCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAg
dW5zaWduZWQgb2Zmc2V0ID0gbzsKLSAgICAKLSAgICBOb2RlKiBub2RlID0gcC5kZWVwRXF1aXZh
bGVudCgpLmFuY2hvck5vZGUoKTsKLSAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBub2RlLT5kb2N1
bWVudCgpOwotICAgIAotICAgIGNvbnN0IGF1dG8mIG1hcmtlcnMgPSBkb2N1bWVudC5tYXJrZXJz
KCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKTsKLSAgICBpZiAo
bWFya2Vycy5pc0VtcHR5KCkpCisgICAgYXV0byBwb3NpdGlvbiA9IFtzZWxmIF92aXNpYmxlUG9z
aXRpb25dOworICAgIGF1dG8qIG5vZGUgPSBwb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLmFuY2hv
ck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtYXJrZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNv
bnN0IERvY3VtZW50TWFya2VyKiBtYXJrZXIgPSBtYXJrZXJzW2ldOwotICAgICAgICBpZiAobWFy
a2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9m
ZnNldCkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQs
IG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7
Ci0gICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlLnB0cigpKTsKLSAgICAgICAgfQorCisgICAg
dW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkRWRp
dGluZ09mZnNldCgpOworICAgIGF1dG8mIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAg
ICBmb3IgKGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUs
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykpIHsKKyAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRP
ZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+
c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSkucHRyKCkpOwogICAgIH0K
LSAgICAKICAgICByZXR1cm4gbmlsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpp
bmRleCA3ZWY5M2RiNjEyMzMzMGRhZGViYzliYjQwOGRlNGMxZDU5ZGZlZjcyLi44YjdiYTVjYWJj
ODFkNzhiNjhhYTI0YmQ1ZWZmMjVhZDI3OGIyYmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T00ubW0KQEAgLTM1OCwxNCArMzU4LDkgQEAgLSAoV0tRdWFkKWFic29sdXRlUXVhZEFuZEluc2lk
ZUZpeGVkUG9zaXRpb246KEJPT0wgKilpbnNpZGVGaXhlZAogCiAgICAgaWYgKHF1YWRzLnNpemUo
KSA9PSAwKQogICAgICAgICByZXR1cm4gemVyb1F1YWQoKTsKLQogICAgIGlmIChxdWFkcy5zaXpl
KCkgPT0gMSkKICAgICAgICAgcmV0dXJuIHdrUXVhZEZyb21GbG9hdFF1YWQocXVhZHNbMF0pOwot
Ci0gICAgYXV0byBib3VuZGluZ1JlY3QgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gd2tRdWFkRnJv
bUZsb2F0UXVhZChib3VuZGluZ1JlY3QpOworICAgIHJldHVybiB3a1F1YWRGcm9tRmxvYXRRdWFk
KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAogLy8gdGhpcyBtZXRob2QgaXMgbGlr
ZSAtIChDR1JlY3QpYm91bmRpbmdCb3gsIGJ1dCBpdCBhY2NvdW50cyBmb3IgZm9yIHRyYW5zZm9y
bXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkVkaXRvckNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0
L1dlYkVkaXRvckNsaWVudC5tbQppbmRleCAzYzMwZDU3ZTY4Y2NhNGI2MmU2YjhmMGRhZGI0Mjgy
NjA3MTA0YWVlLi45YWQ0NmM2MDQ3MDEyZWIzZTQyMzgwNGQ0MDcyMDcwMjU3ZGM1ZTQ2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JD
bGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
RWRpdG9yQ2xpZW50Lm1tCkBAIC0xMTU3LDEyICsxMTU3LDExIEBAIHZvaWQgV2ViRWRpdG9yQ2xp
ZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKE5TSW50ZWdlciBzZXF1ZW5jZU51bWJlciwg
TlNBcnJhCiAgICAgICAgIHJldHVybjsKIAogICAgIEludFJlY3QgcmVjdEZvclNlbGVjdGlvbkNh
bmRpZGF0ZXM7Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgc2VsZWN0ZWRSYW5n
ZS0+YWJzb2x1dGVUZXh0UXVhZHMocXVhZHMpOworICAgIGF1dG8gcXVhZHMgPSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzKCpzZWxlY3RlZFJhbmdlKTsKICAgICBpZiAoIXF1YWRzLmlz
RW1wdHkoKSkKICAgICAgICAgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXMgPSBmcmFtZS0+dmll
dygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwog
ICAgIGVsc2UgewotICAgICAgICAvLyBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMoKSB3aWxsIGJl
IGVtcHR5IGF0IHRoZSBzdGFydCBvZiBhIHBhcmFncmFwaC4KKyAgICAgICAgLy8gUXVhZHMgd2ls
bCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGguCiAgICAgICAgIGlmIChzZWxl
Y3Rpb24uaXNDYXJldCgpKQogICAgICAgICAgICAgcmVjdEZvclNlbGVjdGlvbkNhbmRpZGF0ZXMg
PSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KGZyYW1lLT5zZWxlY3Rpb24oKS5hYnNv
bHV0ZUNhcmV0Qm91bmRzKCkpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCmluZGV4IGU1NWMzMDkxMDU3NTRiYmNjODA0N2I3NTgwZDk3NDBlMjFk
MzNhYzMuLmJkOWE2NzgxYmJlYTA2MTFlMmU0ZDcwNDk2MDg2Y2VmZDU4YjExNGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtMTc1NywxMiArMTc1
NywxMSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJhbmdlczooTlNBcnJheSAqKilvdXRS
YW5nZXMgYW5kTWV0YWRhdGFzOihOU0FycmF5ICoqKQogICAgIGZvciAoV2ViQ29yZTo6Tm9kZSog
bm9kZSA9IHJvb3Q7IG5vZGU7IG5vZGUgPSBXZWJDb3JlOjpOb2RlVHJhdmVyc2FsOjpuZXh0KCpu
b2RlKSkgewogICAgICAgICBhdXRvIG1hcmtlcnMgPSBkb2N1bWVudC0+bWFya2VycygpLm1hcmtl
cnNGb3IoKm5vZGUpOwogICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLQog
ICAgICAgICAgICAgaWYgKG1hcmtlci0+dHlwZSgpICE9IFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25SZXN1bHQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlkIG1ldGFkYXRhID0gbWFya2VyLT5tZXRhZGF0YSgpOwotICAgICAg
ICAgICAgCisKKyAgICAgICAgICAgIGlkIG1ldGFkYXRhID0gV1RGOjpnZXQ8UmV0YWluUHRyPGlk
Pj4obWFya2VyLT5kYXRhKCkpLmdldCgpOworCiAgICAgICAgICAgICAvLyBBbGwgcmVzdWx0IG1h
cmtlcnMgc2hvdWxkIGhhdmUgbWV0YWRhdGEuCiAgICAgICAgICAgICBBU1NFUlQobWV0YWRhdGEp
OwogICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkKQEAgLTE4MDEsMTUgKzE4MDAsMTUgQEAgLSAo
aWQpZGljdGF0aW9uUmVzdWx0TWV0YWRhdGFGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewog
ICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCisKICAgICBhdXRvIG1h
cmtlcnMgPSBjb3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2Uo
KmNvcmUocmFuZ2UpLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsK
LSAgICAKKwogICAgIC8vIFVJS2l0IHNob3VsZCBvbmx5IGV2ZXIgZ2l2ZSB1cyBhIERPTVJhbmdl
IGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcywgd2hpY2ggc2hvdWxkIG5vdCBiZSBwYXJ0
IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0LgogICAgIEFTU0VSVChtYXJrZXJzLnNpemUoKSA8PSAx
KTsKICAgICBpZiAobWFya2Vycy5zaXplKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICAKLSAgICByZXR1cm4gbWFya2Vyc1swXS0+bWV0YWRhdGEoKTsKKworICAgIHJldHVybiBXVEY6
OmdldDxSZXRhaW5QdHI8aWQ+PihtYXJrZXJzWzBdLT5kYXRhKCkpLmdldCgpOwogfQogCiAtICh2
b2lkKXJlY3Vyc2l2ZVNldFVwZGF0ZUFwcGVhcmFuY2VFbmFibGVkOihCT09MKWVuYWJsZWQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1t
ZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCAyZWZjN2Y0OTQwNzg3NzY3ZmUwZTYyYTFl
YTYyNDRkNGNlMDg2NjFkLi5hYTUxYjYzOTQ4ODhhNzBiN2YwZDlkYmEwNTFmZTI1YjFlMTZmZjk3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00OTUsNyArNDk1LDcgQEAgLSAo
aWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRy
b2xsZXJGb3JEYXRhRGV0ZWN0ZWQKIAogKyAoV2ViQ29yZTo6RGljdGlvbmFyeVBvcHVwSW5mbylf
ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlOihXZWJDb3JlOjpSYW5nZSYpcmFuZ2UgaW5GcmFt
ZTooV2ViQ29yZTo6RnJhbWUqKWZyYW1lIHdpdGhMb29rdXBPcHRpb25zOihOU0RpY3Rpb25hcnkg
Kilsb29rdXBPcHRpb25zIGluZGljYXRvck9wdGlvbnM6KFdlYkNvcmU6OlRleHRJbmRpY2F0b3JP
cHRpb25zKWluZGljYXRvck9wdGlvbnMgdHJhbnNpdGlvbjooV2ViQ29yZTo6VGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24pcHJlc2VudGF0aW9uVHJhbnNpdGlvbgogewotICAgIFdl
YkNvcmU6OkVkaXRvciYgZWRpdG9yID0gZnJhbWUtPmVkaXRvcigpOworICAgIGF1dG8mIGVkaXRv
ciA9IGZyYW1lLT5lZGl0b3IoKTsKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBv
cHVwSW5mbyh0cnVlKTsKIAogICAgIC8vIERpY3Rpb25hcnkgQVBJIHdpbGwgYWNjZXB0IGEgd2hp
dGVzcGFjZS1vbmx5IHN0cmluZyBhbmQgZGlzcGxheSBVSSBhcyBpZiBpdCB3ZXJlIHJlYWwgdGV4
dCwKQEAgLTUwNiwxNyArNTA2LDE2IEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8p
X2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6UmFuZ2UmKXJhCiAgICAgICAg
IHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgY29uc3QgV2ViQ29yZTo6UmVuZGVyU3R5
bGUqIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5kZXJTdHlsZSgpOworICAgIGF1
dG8gc3R5bGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLnJlbmRlclN0eWxlKCk7CiAgICAgZmxv
YXQgc2NhbGVkRGVzY2VudCA9IHN0eWxlID8gc3R5bGUtPmZvbnRNZXRyaWNzKCkuZGVzY2VudCgp
ICogZnJhbWUtPnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCkgOiAwOwogCi0gICAgVmVjdG9yPFdl
YkNvcmU6OkZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVh
ZHMpOworICAgIGF1dG8gcXVhZHMgPSBXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4
dFF1YWRzKHJhbmdlKTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVkaXRv
ci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJu
IHBvcHVwSW5mbzsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJhbmdlUmVjdCA9IGZy
YW1lLT52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdC
b3goKSk7CisgICAgYXV0byByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2lu
ZG93KHF1YWRzWzBdLmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOwogCiAgICAgcG9wdXBJbmZvLm9y
aWdpbiA9IE5TTWFrZVBvaW50KHJhbmdlUmVjdC54KCksIHJhbmdlUmVjdC55KCkgKyBzY2FsZWRE
ZXNjZW50KTsKICAgICBwb3B1cEluZm8ub3B0aW9ucyA9IGxvb2t1cE9wdGlvbnM7CmRpZmYgLS1n
aXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggM2MwZTA5MmYxNDY5
YWQxZmI5YmZhYTQwN2I3N2IyMDU4OWFiMjkxOS4uMjBiNDE1ZTdjYWVjYWQ3ZjEzYjc1NTNlYWJk
MDdhNzcxOWUxOTcyMSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHA6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKTogVXBkYXRlIGZvciBjaGFuZ2UgdG8gRG9jdW1l
bnRNYXJrZXIgY29uc3RydWN0b3IuCisKIDIwMjAtMDQtMDUgIERhbmllbCBCYXRlcyAgPGRhYmF0
ZXNAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcXVlc3RUZXh0SW5wdXRDb250ZXh0LlNpbXBsZSBp
ZnJhbWUgc3ViLXRlc3RzIG1heSBzb21ldGltZXMgZmFpbApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCmluZGV4IDA2ODFjYWI0MzY3YzUyMzZh
OWI1NjQyOGFkNmYxMDc0NWJhOTE3ODEuLjZhOGU1NzI5MWJmNWQwMTY3NjhkOGUyOTJlMmI4YzY3
YWMwMDg1ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9N
YXJrZWRUZXh0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFy
a2VkVGV4dC5jcHAKQEAgLTkwLDcgKzkwLDcgQEAgVEVTVChNYXJrZWRUZXh0LCBTdWJkaXZpZGVT
aW1wbGUpCiAKIFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlU3BlbGxpbmdBbmRHcmFtbWFyU2lt
cGxlKQogewotICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgZ3JhbW1hckVycm9yTWFya2VyIHsg
RG9jdW1lbnRNYXJrZXIgeyBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgNywgOCB9IH07CisgICAg
UmVuZGVyZWREb2N1bWVudE1hcmtlciBncmFtbWFyRXJyb3JNYXJrZXIgeyBEb2N1bWVudE1hcmtl
ciB7IERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCB7IDcsIDggfSB9IH07CiAgICAgVmVjdG9yPE1h
cmtlZFRleHQ+IGV4cGVjdGVkTWFya2VkVGV4dHMgewogICAgICAgICBNYXJrZWRUZXh0IHsgZ3Jh
bW1hckVycm9yTWFya2VyLnN0YXJ0T2Zmc2V0KCksIGdyYW1tYXJFcnJvck1hcmtlci5lbmRPZmZz
ZXQoKSwgTWFya2VkVGV4dDo6R3JhbW1hckVycm9yLCAmZ3JhbW1hckVycm9yTWFya2VyIH0sCiAg
ICAgICAgIE1hcmtlZFRleHQgeyAyMiwgMzIsIE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJyb3IgfSwK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyMjRiMDE3MTUyNDFmYzEwNDI1NGQ4NmE3Mzk1MzRjNDViNmZlMmZjLi5lNTM1MTI4
NjVmMWRkMTMyNzdjYTlkMjE5YTRlNDI3YWY5MDY0NTFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0
b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5n
L3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisgICAg
ICAgICogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWw6IFJl
bW92ZWQuCisgICAgICAgICogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHls
ZWQtZXhwZWN0ZWQudHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9s
bGJhci10aWNrbWFya3Mtc3R5bGVkLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3RrL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnBu
ZzogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9uczogUmVt
b3ZlZCBleHBlY3RhdGlvbiBmb3Igc2Nyb2xsYmFyLXRpY2ttYXJrcy4KKyAgICAgICAgVGhlc2Ug
d2VyZSBDaHJvbWl1bS1zcGVjaWZpYyB0ZXN0cy4KKwogMjAyMC0wNC0wNSAgQWxleGV5IFNodmF5
a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgT2N0YWwgZXNjYXBlcyBzaG91
bGQgYmUgbWF4IDMgZGlnaXRzIGFuZCBzeW50YXggZXJyb3JzIGluIFVuaWNvZGUgcGF0dGVybnMK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3MtaGl0dGVzdC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3Jv
bGxiYXItdGlja21hcmtzLWhpdHRlc3QtZXhwZWN0ZWQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA2ZTEyOTk1YmZjZjIzYzk3Nzc0YWJkNmQxZTEzNDY2NTIwM2ZiNTQ0Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91dFRlc3RzL2Zh
c3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC1leHBlY3RlZC50eHQKKysr
IC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1DaGVja3MgdGhhdCBjbGlja2luZyBvbiBzY3Jv
bGxiYXIgd29ya3Mgd2hlbiB0aWNrbWFya3MgYXJlIGFkZGVkLgotCi1PbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCi0KLQotUEFTUyBkaWQgc2Nyb2xsCi1QQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCi0KLVRFU1QgQ09NUExFVEUKLcKgCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3QuaHRtbCBiL0xheW91dFRlc3Rz
L2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC5odG1sCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzQxMzFjMTliMDgwOTEyMjhjMGJkOTNjOGIzODU2Y2Qw
NWY0NGJmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xh
eW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC5odG1s
CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPGh0bWw+Ci08c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KLTxib2R5IHN0eWxlPSJtaW4t
aGVpZ2h0OiA1MDAwcHgiPiAKLTxzcGFuIGlkPSJlbHQiPiZuYnNwOzwvc3Bhbj4KLQotPHNjcmlw
dD4KLWRlc2NyaXB0aW9uKCdDaGVja3MgdGhhdCBjbGlja2luZyBvbiBzY3JvbGxiYXIgd29ya3Mg
d2hlbiB0aWNrbWFya3MgYXJlIGFkZGVkLicpOwotb25sb2FkID0gZnVuY3Rpb24oKQotewotICAg
IGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
Ci0gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICB2YXIgZWx0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VsdCcpOwotICAgIHJhbmdlLnNlbGVjdE5vZGVDb250
ZW50cyhlbHQpOwotICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIHdpbmRvdy5p
bnRlcm5hbHMuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLmRpc3BsYXlBbmRUcmFja1Jl
cGFpbnRzKCk7Ci0gICAgaWYgKHdpbmRvdy5ldmVudFNlbmRlcikgewotICAgICAgICBldmVudFNl
bmRlci5tb3VzZU1vdmVUbyh3aW5kb3cuaW5uZXJXaWR0aCAtIDEsIHdpbmRvdy5pbm5lckhlaWdo
dCAtIDEpOwotICAgICAgICBldmVudFNlbmRlci5tb3VzZURvd24oKTsKLSAgICAgICAgZXZlbnRT
ZW5kZXIubW91c2VVcCgpOwotICAgIH0KLX0KLQotb25zY3JvbGwgPSBmdW5jdGlvbigpCi17Ci0g
ICAgdGVzdFBhc3NlZCgnZGlkIHNjcm9sbCcpOwotICAgIGZpbmlzaEpTVGVzdCgpOwotfQotCi12
YXIganNUZXN0SXNBc3luYyA9IHRydWU7Ci08L3NjcmlwdD4KLQotPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgotCi08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21h
cmtzLXN0eWxlZC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9zY3Jv
bGxiYXItdGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNmYWYyMmEyZTE4ODI3MTQzODJiMWI0MmMyMzk0ZDQ2YzQ4MjgxNTEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQtZXhwZWN0ZWQudHh0CisrKyAv
ZGV2L251bGwKQEAgLTEgKzAsMCBAQAotwqAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
c2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA3NGIzZmUzMmUyNGJkNTYyNzVhOTFjZjZlOGJiYmEzMDVhNzhj
MTBkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLmh0bWwKKysr
IC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi08IURPQ1RZUEUgaHRtbD4KLTxoZWFkPgotPHN0
eWxlPgotaHRtbCB7Ci0gICAgZm9udDogQWhlbSAxMHB4OwotICAgIC13ZWJraXQtZm9udC1zbW9v
dGhpbmc6IG5vbmU7Ci19Ci06Oi13ZWJraXQtc2Nyb2xsYmFyIHsKLSAgICB3aWR0aDogMTNweDsK
LSAgICBoZWlnaHQ6IDEzcHg7Ci19Ci06Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKLSAgICBi
YWNrZ3JvdW5kLWNvbG9yOmdyZWVuOwotfQotOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7Ci0g
ICAgYmFja2dyb3VuZC1jb2xvcjpyZ2JhKDEyOCwgMTI4LCAxMjgsIDAuOCk7ICAvKiBMZXQgdGlj
a21hcmsgc2hpbmUgdGhyb3VnaCAqLwotfQotPC9zdHlsZT4KLTxzY3JpcHQ+Ci1mdW5jdGlvbiBo
aWdobGlnaHQoKQotewotICAgIHZhciByYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdlbHQnKTsKLSAgICByYW5nZS5z
ZWxlY3ROb2RlQ29udGVudHMoZWx0KTsKLSAgICBpZiAod2luZG93LmludGVybmFscykgewotICAg
ICAgICB3aW5kb3cuaW50ZXJuYWxzLmFkZFRleHRNYXRjaE1hcmtlcihyYW5nZSwgdHJ1ZSk7Ci0g
ICAgfQotICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKLSAgICAgICAgdGVzdFJ1bm5lci5kdW1w
QXNUZXh0KHRydWUpOwotfQotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9ImhpZ2hs
aWdodCgpOyI+Ci0KLTxkaXYgc3R5bGU9ImhlaWdodDo2MDBweCI+PC9kaXY+Ci08c3BhbiBpZD0i
ZWx0IiBzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7IHRvcDozMDBweCI+Jm5ic3A7PC9zcGFuPgot
Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
ZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQtZXhwZWN0ZWQucG5nIGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3Mtc3R5bGVkLWV4cGVjdGVkLnBuZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjRh
OGEzYTEzMzZkOGQ1MTMyODZlY2EwNTVkZDg3NzYyMTU0MWIwZS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKbGl0ZXJhbCAyODc4CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEweX55VXsrdllWMmE+aTAq
Wik9aF5obEElQFdzJGxIYG9rPG19P29UbjBsRQp6R1ljY2JSQVUyK0IlPyZydl4weFUhISlDbXdC
JSYtUkk/PCpxfnduO3pDUXRLVm9VT05jVllNc2YoIU84cFVsOSgKendhP1NWRntFUDcrWiE4c1RP
MCZmOVEjcl9uQEBaWHdwYzlhNnJiOV5GKWpRMDg1c3RLb0VgNzcpNjQ4PyolPVAoCno3bVEkRkZs
PU9INUQqP15qMFZESk4qSylycXEkJS03bVZoRChPZldeM3IyR1ItZHFyRXtQYE8lMUg9NmRAM3RD
JApuS0ZHdy0hS3VVMEZ5akUoaksyKTYqKncqZTJieG9XWkNlSVVTM2ozXlA2PHJfaWQ/V1kKCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9pb3MvVGVzdEV4cGVjdGF0aW9ucyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDBmMDQ1OWMzYjVj
NzE0ZDdiZDdjYjcxY2Q3YWM0ODU1ZmNjMTRmZTUuLjE2NDhlOTZkYzcxZGY4MzNkOTViZjQyYzRh
MWRmZDZjMWFkODc3NjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0
RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRp
b25zCkBAIC02ODcsNyArNjg3LDYgQEAgZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9yLW92
ZXJsYXktc2Nyb2xsYmFycy1ob3ZlcmVkLmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2Nyb2xsaW5nL3Nj
cm9sbC1hbmltYXRvci1zZWxlY3QtbGlzdC1ldmVudHMuaHRtbCBbIFNraXAgXQogZmFzdC9zY3Jv
bGxpbmcvc2Nyb2xsYmFyLW1vdXNlZG93bi1tb3VzZXVwLmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2Ny
b2xsaW5nL3Njcm9sbGJhci1tb3VzZWRvd24tbW92ZS1tb3VzZXVwLmh0bWwgWyBTa2lwIF0KLWZh
c3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC5odG1sIFsgU2tpcCBdCiBm
YXN0L3NlbGVjdG9ycy9hY3RpdmUtaG92ZXItcXVpcmtzLmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2Vs
ZWN0b3JzL2FjdGl2ZS1ob3Zlci1zdHJpY3QuaHRtbCBbIFNraXAgXQogZmFzdC9zZWxlY3RvcnMv
YWN0aXZlLXF1aXJrcy5odG1sIFsgU2tpcCBdCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395538</attachid>
            <date>2020-04-05 17:43:08 -0700</date>
            <delta_ts>2020-04-06 04:55:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209985-20200405174306.patch</filename>
            <type>text/plain</type>
            <size>210594</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5NTU5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDM4YTBiY2Y2ODA3MzAxZTM5ZmU2NDE4
NDkxM2VlYzllZTMyMGRlMDEuLjVkMTJkMjMzYjUwNDFjMjU1YTE1NDA0YjdjOGQyOWJlN2RkOWY3
NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDQtMDQgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHd0Zi9SZXRhaW5QdHIuaDogRGVmaW5lICJpZCIgaGVyZSB3aGVuIGNvbXBpbGlu
ZyBub24tT2JqQyBzbyBpdCdzIGVhc2llciB0byB1c2UKKyAgICAgICAgUmV0YWluUHRyPGlkPiBp
biBhbnkgaGVhZGVyIGZpbGUuIExldHMgdXMgc3RvcCBkb2luZyB0aGlzIG1hbnkgb3RoZXIgcGxh
Y2VzLgorICAgICAgICBIYXJtbGVzcyB3aGVuIG5vdCBuZWVkZWQuCisKIDIwMjAtMDQtMDQgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NsYW5n
IDEwXSBGaXggLVdpbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiBjb21waWxhdGlvbiB3YXJu
aW5ncyBpbiBXVEYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZGM2NGU2ODY1MTc5MzQ4MjI2OTExOWM3MjNhZDc2
ZjA4YzU1MWY1Li44MjdjYjRiYmJiNjYyOGIxYmM2NGNlNGIxN2FiY2Q4NTY0YTRjNzFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjgxIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgLSBSZW1vdmVkIHVzZXMgb2YgbGl2ZSByYW5nZXMgZnJvbSBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuCisgICAgICAgIC0gUmVtb3ZlZCAiYWN0aXZlL2luYWN0aXZlIHRleHQgbWF0
Y2ggbWFya2VyIiwgd2hpY2ggd2FzIG9ubHkgZXZlciB1c2VkCisgICAgICAgICAgYnkgQ2hyb21p
dW0sIGFuZCBoYXMgYmVlbiBkZWFkIGNvZGUgaW4gV2ViS2l0IGZvciB3aGlsZSBub3cuCisgICAg
ICAgIC0gTWFkZSBhIHJlcGxhY2VtZW50IGZvciBSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMsIGlu
IFJlbmRlck9iamVjdCwKKyAgICAgICAgICBhbmQgbW92ZWQgYWxsIGNhbGxlcnMgb3Zlci4KKyAg
ICAgICAgLSBBZGRlZCBhIGZhc3QgcGF0aCBmb3IgTm9kZTo6aXNDaGFyYWN0ZXJEYXRhTm9kZSB0
aGF0IG1ha2VzIGl0IHdvcmsKKyAgICAgICAgICB3aXRob3V0IGEgdmlydHVhbCBmdW5jdGlvbiBj
YWxsIGZvciB0aGUgY29tbW9uIG5vZGUgdHlwZXMuCisgICAgICAgIC0gQWRkZWQgYSBOb2RlOjps
ZW5ndGggZnVuY3Rpb24gdGhhdCBtYXRjaGVzIHRoZSBET00gc3BlY2lmaWNhdGlvbidzCisgICAg
ICAgICAgZGVmaW5pdG9uIG9mIGEgbm9kZSdzIGxlbmd0aCwgcGFydCBvZiBob3cgcmFuZ2VzIGFy
ZSBkZWZpbmVkLgorICAgICAgICAtIEFkZGVkIGEgc3RydWN0dXJlIE9mZnNldFJhbmdlIHRvIHJl
cHJlc2VudCBzdGFydC9lbmQgb2Zmc2V0cyB3aXRoaW4KKyAgICAgICAgICBhIHNpbmdsZSBjaGFy
YWN0ZXIgZGF0YSBub2RlLiBUaGlzIGlzIGEgY29tbW9uIGlkaW9tIHRvIGhhbmRsZSBwb3NzaWJs
ZQorICAgICAgICAgIHBhcnRpYWwgc2VsZWN0aW9uIG9mIHRleHQgbm9kZXMgYXQgdGhlIHN0YXJ0
IGFuZCBlbmQgb2YgdGhlIHJhbmdlIHdoZW4KKyAgICAgICAgICBpdGVyYXRpbmcgdGV4dCB3aXRo
aW4gYSByYW5nZS4KKyAgICAgICAgLSBDaGFuZ2VkIERvY3VtZW50TWFya2VyIGZ1bmN0aW9ucyB0
byB1c2UgT2Zmc2V0UmFuZ2UuCisgICAgICAgIC0gQWRkZWQgaGVscGVyIGZ1bmN0aW9ucyBmb3Ig
dHVybmluZyBhIHZlY3RvciBvZiBxdWFkcyBpbnRvIGEgdmVjdG9yCisgICAgICAgICAgb2YgYm91
bmRpbmcgYm94IHJlY3RhbmdsZXMsIGFuZCBmb3IgY29tcHV0aW5nIGEgdW5pb24gb2YgYWxsIHRo
ZQorICAgICAgICAgIHJlY3RhbmdsZXMsIHNpbmNlIGJvdGggb2YgdGhlc2UgYXJlIGNvbW1vbiBj
b2RpbmcgcGF0dGVybnMuCisgICAgICAgIC0gQWRkZWQgYW4gaW50ZXJzZWN0aW5nTm9kZXMgZnVu
Y3Rpb24sIHByb2R1Y2luZyBhIGZvci1sb29wLWNvbXBhdGlibGUKKyAgICAgICAgICByYW5nZSBm
b3IgaXRlcmF0aW5nIGFsbCBub2RlcyBjb3ZlcmVkIGJ5IGEgRE9NIHJhbmdlLgorICAgICAgICAt
IENoYW5nZWQgUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzbyBp
dCBjYW4gYmUgdXNlZAorICAgICAgICAgIHdpdGhvdXQgYW4gI2lmIGF0IGVhY2ggY2FsbCBzaXRl
LCBleHBhbmRzIHRvIG5vdGhpbmcgaW4gcmVsZWFzZSBidWlsZHMuCisgICAgICAgIC0gRWxpbWlu
YXRlZCB1c2VzIG9mIFJldGFpblB0cjxpZD4gaW5zdGVhZCBvZiBqdXN0IGlkIHRvIHBhc3MgYXJn
dW1lbnRzLgorCisgICAgICAgICogZG9tL0NoYXJhY3RlckRhdGEuaDogVXBkYXRlZCBzaW5jZSBp
c0NoYXJhY3RlckRhdGFOb2RlIGlzIG5vIGxvbmdlciBhCisgICAgICAgIHZpcnR1YWwgZnVuY3Rp
b24uCisKKyAgICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9j
dW1lbnQ6OnRleHRJbnNlcnRlZCk6IFBhc3MgYW4gT2Zmc2V0UmFuZ2UgdG8gcmVtb3ZlTWFya2Vy
cy4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp0ZXh0UmVtb3ZlZCk6IERpdHRvLgorCisg
ICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyLmg6IFJlbW92ZWQgbW9zdCBwbGF0Zm9ybS1zcGVj
aWZpYyBmdW5jdGlvbnMuCisgICAgICAgIFJlbW92ZWQgdGhlIGFjdGl2ZSBtYXRjaCBib29sZWFu
LCB3aGljaCB3YXMgb25seSBldmVyIHVzZWQgZm9yIENocm9taXVtLgorICAgICAgICBVc2UgT2Zm
c2V0UmFuZ2UuIFVwZGF0ZWQgc29tZSBvYnNvbGV0ZSBjb21tZW50cy4KKworICAgICAgICAqIGRv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOiBSZW1vdmVkIGluY2x1ZGUgb2YgIlJhbmdl
LmgiLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb2xsZWN0
VGV4dFJhbmdlcyk6IENoYW5nZSByZXR1cm4gdmFsdWUKKyAgICAgICAgdG8gcmV0dXJuIGEgc3Ry
dWN0dXJlIHdpdGggYSBub2RlIGFuZCBhbiBvZmZzZXQgcmFuZ2UgcmF0aGVyIHRoYW4gdXNpbmcg
YQorICAgICAgICBTaW1wbGVSYW5nZTsgYWRkcyBjbGFyaXR5IHRvIHRoZSBmYWN0IHRoYXQgaXQn
cyBndXJhbnRlZWQgdG8gYmUgb25seSBhCisgICAgICAgIHNpbmdsZSBub2RlLiBNYXkgZXZlbiB3
YW50IHRvIGNvbnNpZGVyIHNvbWUgZGF5IG1vdmluZyBUZXh0SXRlcmF0b3Igb3ZlcgorICAgICAg
ICB0byB0aGlzLCBidXQgaXQncyBkZWZpbml0ZWx5IGJldHRlciBoZXJlIGZvciBub3cuCisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcik6IFVwZGF0
ZWQgZm9yIHRoZSBjaGFuZ2UgdG8KKyAgICAgICAgY29sbGVjdFRleHRSYW5nZXMgYW5kIHRvIERv
Y3VtZW50TWFya2VyIGNvbnN0cnVjdGlvbiwgYW5kIHRvIHVzZSBjb25zdHJ1Y3Rpb24KKyAgICAg
ICAgc3ludGF4IHRoYXQgZG9lc24ndCByZXBlYXQgdGhlIERvY3VtZW50TWFya2VyIGNsYXNzIG5h
bWUuIERlbGV0ZWQgb3ZlcmxvYWRzCisgICAgICAgIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQu
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlclRv
Tm9kZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjphZGRUZXh0TWF0Y2hNYXJrZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6
OmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZERyYWdnZWRDb250ZW50TWFya2VyKTogVXBkYXRl
ZCBhcyBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
YWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IEZpeCBhIG1pc3Rha2Ug
d2hlcmUgY29weWluZworICAgICAgICBtYXJrZXJzIHdvdWxkIGhhdmUgYSBzaWRlIGVmZmVjdCBv
ZiBtb2RpZnlpbmcgdGhlIG9yaWdpbmFsLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKTogSnVzdCBoYXZlIHRoaXMgY2FsbAorICAgICAg
ICBmaWx0ZXJNYXJrZXJzIHdpdGggbnVsbCBmb3IgdGhlIGZ1bmN0aW9uLgorICAgICAgICAoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJzKTogVXBkYXRlZCBm
b3IgdGhlIGNoYW5nZSB0bworICAgICAgICBjb2xsZWN0VGV4dFJhbmdlcyBhbmQgdG8gcGFzcyBh
IE9mZnNldFJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1h
cmtlcik6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZQorICAgICAgICByYW5nZS4g
VXNlIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgYm91bmRpbmdC
b3hlcyBmdW5jdGlvbnMKKyAgICAgICAgdG8gbWFrZSB0aGlzIGNsZWFyZXIgYW5kIHNpbXBsZXIu
CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbnNlcnRBc1NlcGFyYXRlTWFya2VyKTogVXBkYXRl
IGZvciBjaGFuZ2VzIHRvIERvY3VtZW50TWFya2VyLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjb3B5TWFya2Vycyk6IFRha2UgYW4gT2Zmc2V0UmFuZ2UgaW5z
dGVhZAorICAgICAgICBvZiBhIHN0YXJ0IGFuZCBsZW5ndGguIEFsc28gcmVtb3ZlZCB0aGUgdW51
c2VkICJkZWx0YSIgYXJndW1lbnQgc2luY2UgYWxsCisgICAgICAgIGNhbGxlcnMgd2VyZSBwYXNz
aW5nIDAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92
ZU1hcmtlcnMpOiBSZW1vdmVkIHVubmVlZGVkCisgICAgICAgIGNoZWNrIGlmIGEga2V5IGlzIHN0
aWxsIGluIHRoZSBtYXAuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXI6OmZvckVhY2gpOiBBZGRlZC4gU2hhcmVkIGxvZ2ljIGZvciB0aGUgbXVsdGlwbGUKKyAgICAg
ICAgZnVuY3Rpb25zIHRoYXQgaXRlcmF0ZSB0aGUgbWFya2VycyBjb3ZlcmVkIGJ5IGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtl
cnNJblJhbmdlKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpyZXBhaW50TWFya2Vycyk6IFNpbXBsaWZpZWQgbG9vcHMuCisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNldE1hcmtlcnNBY3RpdmUpOiBE
ZWxldGVkLiBXYXMgb25seQorICAgICAgICB1c2VkIGZvciBDaHJvbWl1bSBhbmQgaGFzIGJlZW4g
ZGVhZCBjb2RlIHNpbmNlLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKTogQ2FsbCBmb3JFYWNoLgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5n
UmFuZ2UpOgorICAgICAgICBDYWxsIGZvckVhY2guCisgICAgICAgICogZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBkb20v
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpib3VuZHNJblJvb3RWaWV3
U3BhY2UpOiBVc2UgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmFic29sdXRlRXZlbnRCb3VuZHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6OmJvdW5kaW5nQWJzb2x1dGVSZWN0V2l0aG91dExheW91dCk6IERpdHRvLgorCisgICAgICAg
ICogZG9tL05vZGUuaDogQWRkZWQgaW5saW5lIGZhc3QgcGF0aCBmb3IgaXNDaGFyYWN0ZXJEYXRh
Tm9kZS4KKyAgICAgICAgTW92ZWQgc29tZSBpbmxpbmUgZnVuY3Rpb24gYm9kaWVzIG91dCBvZiBj
bGFzcyBkZWZpbml0aW9uIHNvIGl0J3MKKyAgICAgICAgZWFzaWVyIHRvIHJlYWQgaXQgYW5kIGdl
dCBhbiBvdmVydmlldy4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0IGNvbnN0KTogVXNlIGJvdW5k
aW5nQm94ZXMuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6YWJzb2x1dGVUZXh0UXVhZHMgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyBjb25zdCk6IFVzZSBib3VuZGluZ0JveGVzLgorCisgICAgICAgICogZG9tL1JhbmdlLmg6IERl
bGV0ZWQgYWJzb2x1dGVUZXh0UXVhZHMuCisKKyAgICAgICAgKiBkb20vUmVuZGVyZWREb2N1bWVu
dE1hcmtlci5oOiBVc2UgcnZhbHVlIHJlZmVyZW5jZXMgYW5kIG1vdmUuCisKKyAgICAgICAgKiBk
b20vU2ltcGxlUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdElzQ2hhcmFjdGVyRGF0
YSk6IERlbGV0ZWQuIE1vdmVkIHRoZSBvcHRpbWl6YXRpb25zIGludG8KKyAgICAgICAgTm9kZTo6
aXNDaGFyYWN0ZXJEYXRhTm9kZSBzbyBub3cgYWxsIGNhbGxlcnMgZ2V0IHRoZW0uCisgICAgICAg
IChXZWJDb3JlOjpsZW5ndGgpOiBEZWxldGVkLiBNb3ZlZCB0byBOb2RlOjpsZW5ndGguCisgICAg
ICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogVXNlIE5v
ZGU6Omxlbmd0aC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5nZTo6Zmly
c3QgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVyc2VjdGluZ05vZGVSYW5n
ZTo6c2VudGluZWwgY29uc3QpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNoYXJhY3RlckRh
dGFPZmZzZXRSYW5nZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJzZWN0aW5nTm9k
ZUl0ZXJhdG9yOjpvcGVyYXRvcisrKTogQWRkZWQuCisKKyAgICAgICAgKiBkb20vU2ltcGxlUmFu
Z2UuaDogQWRkZWQgaW50ZXJzZWN0aW5nTm9kZXMgZnVuY3Rpb24sIGFuZCB0aGUKKyAgICAgICAg
SW50ZXJzZWN0aW5nTm9kZVJhbmdlIGFuZCBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgY2xhc3Nl
cyB1c2VkCisgICAgICAgIHRvIG1ha2UgaXQgd29yay4gQWRkZWQgdGhlIE9mZnNldFJhbmdlIHN0
cnVjdHVyZSBhbmQgdGhlCisgICAgICAgIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5nZSBmdW5jdGlv
biwgYWxzbyB0byBoZWxwIHdpdGggaXRlcmF0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5kT2ZXb3JkKToKKyAgICAgICAgVGFr
ZSBvdXQgdW5uZWVkZWQgaG9sZHNfYWx0ZXJuYXRpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3Jl
OjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNG
b3JNYXJrZXIpOgorICAgICAgICBSZW1vdmVkIHVubmVlZGVkIGFzc2VydGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZl
c0Zvck1hcmtlcik6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgYXNzZXJ0aW9uLgorICAgICAg
ICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlEaWN0YXRpb25BbHRl
cm5hdGl2ZSk6CisgICAgICAgIFJlbW92ZWQgdW5uZWVkZWQgbG9jYWwgdmFyaWFibGVzLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6c2hvdyk6IFBhc3MgcmVm
ZXJlbmNlIHRvIHJhbmdlCisgICAgICAgIHJhdGhlciB0aGFuIHBvaW50ZXIgdG8gcm9vdFZpZXdS
ZWN0Rm9yUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojp0aW1lckZpcmVkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRD
b250cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZSBjb25zdCk6CisgICAgICAgIFRha2UgYSBT
aW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4gQWxzbyB1c2UKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKyAg
ICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaDogVXBkYXRlZCBmb3Ig
YWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjpyZXBsYWNlVGV4dEluTm9kZVBy
ZXNlcnZpbmdNYXJrZXJzKToKKyAgICAgICAgUmVtb3ZlZCBtb3N0IG9mIHRoZSBjb2RlIHNpbmNl
IHdlIGNhbiBjb3B5IG1hcmtlciBkYXRhIHdpdGhvdXQKKyAgICAgICAgc2VwYXJhdGUgY29kZSBm
b3IgZWFjaCB0eXBlLiBBbHNvIHVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5n
ZS4KKworICAgICAgICAqIGVkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHA6IENhbGwgYWRkTWFy
a2VyIGluc3RlYWQgb2YKKyAgICAgICAgYWRkTWFya2VyVG9Ob2RlLgorCisgICAgICAgICogZWRp
dGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2libGVQb3NpdGlvbkZvcklu
ZGV4VXNpbmdDaGFyYWN0ZXJJdGVyYXRvcik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0
ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6dXBkYXRlTWFya2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVk
aXRpbmcpOgorICAgICAgICBSZW1vdmVkIGEgbG9jYWwgdmFyaWFibGUuCisKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRvci5oOiBSZW1vdmUgdXNlIG9mIFJldGFpblB0cjxpZD4gZm9yIGFyZ3VtZW50
cy4KKworICAgICAgICAqIGVkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpnZXRDbGlwcGVkVmlzaWJsZVRleHRS
ZWN0YW5nbGVzIGNvbnN0KToKKyAgICAgICAgTWVyZ2VkIHRoZSBsb2dpYyBmcm9tIGdldFRleHRS
ZWN0YW5nbGVzIGluIGhlcmUsIGFuZCBjaGFuZ2VkIHRvCisgICAgICAgIHVzZSBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFF1YWRzIGFuZCBib3VuZGluZ0JveGVzLgorICAgICAgICAqIGVkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uaDogVXBkYXRlZCBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0VGV4
dE5vZGVDb21tYW5kOjpkb0FwcGx5KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0bworICAgICAgICB0
aGUgY29weU1hcmtlcnMgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTcGxpdFRleHROb2Rl
Q29tbWFuZDo6ZG9VbmFwcGx5KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0Rh
dGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtQXRQb3NpdGlvbldp
dGhSYW5nZSk6IFVzZQorICAgICAgICBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzIGFu
ZCB1bml0ZWRCb3VuZGluZ0JveGVzLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpE
aWN0YXRpb25Db21tYW5kSU9TKTogUmVtb3ZlIHVzZSBvZgorICAgICAgICBSZXRhaW5QdHI8aWQ+
IGZvciBhcmd1bWVudHMuCisgICAgICAgIChXZWJDb3JlOjpEaWN0YXRpb25Db21tYW5kSU9TOjpj
cmVhdGUpOiBNb3ZlIGZyb20gaGVhZGVyLgorICAgICAgICAoV2ViQ29yZTo6RGljdGF0aW9uQ29t
bWFuZElPUzo6ZG9BcHBseSk6IFVwZGF0ZWQgdG8gZG8gdGhlIHdvcmsgaGVyZQorICAgICAgICBz
aW5jZSB3ZSBkb24ndCBoYXZlIGFkZERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJr
ZXIgYW55IG1vcmUuCisgICAgICAgIFNwZWNpZmljYWxseSwgcmVtb3ZlIHRoZSBmaXJzdCBpbnRl
cnByZXRhdGlvbiwgd2hpY2ggbGVhdmVzIGJlaGluZCBhCisgICAgICAgIHZlY3RvciBvZiBhbHRl
cm5hdGl2ZXMuIFNhbWUgZm9yIGFkZERpY3RhdGlvblJlc3VsdE1hcmtlci4KKyAgICAgICAgKiBl
ZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvaW9zL0VkaXRvcklPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyk6IFRha2UgaWQgaW5zdGVhZCBvZgorICAg
ICAgICBSZXRhaW5QdHI8aWQ+LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudCk6IENoYW5nZWQKKyAgICAgICAgYXJvdW5kIHNpbmNl
IHdlIGRvbid0IGhhdmUgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcgor
ICAgICAgICBvciBhZGREaWN0YXRpb25SZXN1bHRNYXJrZXIgYW55IG1vcmUuCisKKyAgICAgICAg
KiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnBhaW50
Q29udGVudHMpOiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVk
Rm9yYmlkZGVuU2NvcGUuCisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6
CisgICAgICAgIEdldCBhbHRlcm5hdGl2ZXMgZGlyZWN0bHkgZnJvbSBEb2N1bWVudE1hcmtlcjo6
ZGF0YSwgbm93IHRoYXQKKyAgICAgICAgdGhlcmUgaXMgbm90IGEgc2VwYXJhdGUgRG9jdW1lbnRN
YXJrZXI6OmFsdGVybmF0aXZlcyBmdW5jdGlvbi4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UXVhZHNUb0Jv
dW5kaW5nUmVjdEZvclJhbmdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKToKKyAgICAgICAg
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMsIHVuaXRlZEJvdW5kaW5nQm94ZXMs
CisgICAgICAgIGFuZCBlbmNsb3NpbmdJbnRSZWN0IHRvIGRvIHdoYXQgdGV4dFF1YWRzVG9Cb3Vu
ZGluZ1JlY3RGb3JSYW5nZSBkaWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9TZXJpYWxpemVkUGxh
dGZvcm1EYXRhQ3VlVmFsdWUuaDogUmVtb3ZlIGRlZmluaXRpb24gb2YKKyAgICAgICAgaWQgc2lu
Y2UgdGhhdCdzIG5vdyBkb25lIGluIFJldGFpblB0ci5oLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRmxvYXRRdWFkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJvdW5kaW5nQm94ZXMp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVuaXRlZEJvdW5kaW5nQm94ZXMpOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaDogQSBjb3VwbGUgdHdlYWtz
LCBwbHVzIGRlY2xhcmVkIHRoZQorICAgICAgICBmdW5jdGlvbnMgYWJvdmUuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmg6IFJlbW92ZSBkZWZpbml0aW9uIG9m
CisgICAgICAgIGlkIHNpbmNlIHRoYXQncyBub3cgZG9uZSBpbiBSZXRhaW5QdHIuaC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlLmg6IERpdHRv
LgorCisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dCk6IFRha2Ugb3V0
CisgICAgICAgIGlzQWN0aXZlTWF0Y2ggbG9naWMgdGhhdCB3YXMgdXNlZCBmb3IgQ2hyb21pdW0g
b25seS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggY29uc3QpOiBVcGRhdGUg
Zm9yCisgICAgICAgIGNoYW5nZXMgdG8gU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUuCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6Om1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCBjb25z
dCk6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KTogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50SW50b0xheWVyKTogRGl0
dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGU6OlNldExh
eW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKToKKyAgICAgICAgQ2hhbmdlZCB0byB0YWtlIGEgY29u
c3QmIGluc3RlYWQgb2YgYSAqLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpTZXRM
YXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3Bl
KToKKyAgICAgICAgRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1hcmtD
b250YWluaW5nQmxvY2tzRm9yTGF5b3V0KTogVXBkYXRlIGZvcgorICAgICAgICBjaGFuZ2VzIHRv
IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCBjb25zdCk6IFVzZQorICAgICAgICB1bml0
ZWRCb3VuZGluZ0JveGVzIGFuZCBlbmNsb3NpbmdJbnRSZWN0LgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUJvdW5kaW5nQm94UmVjdEZvclJhbmdlKTogVXNlCisgICAg
ICAgIHRoZSBuZXcgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91
bmRpbmdCb3hlcy4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UXVhZHMpOiBBZGRlZC4gTW92ZWQgaGVyZSBmcm9tCisgICAgICAgIFJhbmdlOjphYnNvbHV0ZVRl
eHRRdWFkcywgYnV0IHJlZmFjdG9yZWQgZm9yIHNpbXBsaWNpdHkgYW5kIHJlbW92ZWQKKyAgICAg
ICAgdGhlIHVudXNlZCwgYW5kIG1pbGRseSBjb21wbGV4IHRvIGltcGxlbWVudCwgZmVhdHVyZSB0
aGF0IHdvdWxkCisgICAgICAgIGluZGljYXRlIHdoZXRoZXIgc29tZSBvciBhbGwgb2YgdGhlIHF1
YWRzIHdlcmUgZnJvbSBmaXhlZCBwb3NpdGlvbmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaDogVHdlYWtlZCBjb21tZW50cy4gTW92ZWQgbXVsdGktbGluZSBmdW5jdGlv
bgorICAgICAgICBib2RpZXMgb3V0IG9mIHRoZSBSZW5kZXJPYmplY3QgY2xhc3MgZGVmaW5pdGlv
biB0byBtYWtlIGl0IGVhc2llciB0bworICAgICAgICByZWFkLiBEZWNsYXJlZCBhIG5ldyBhYnNv
bHV0ZVRleHRRdWFkcyBmdW5jdGlvbi4gTWFkZQorICAgICAgICBtX3NldE5lZWRzTGF5b3V0Rm9y
YmlkZGVuIHNvIHNldE5lZWRzTGF5b3V0SXNGb3JiaWRkZW4gY2FuIGJlIGNvbnN0LgorICAgICAg
ICBDb25kaXRpb25hbGl6ZWQgaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbiBhbmQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUKKyAgICAgICAgc28gYm90aCBjYW4gYmUgdXNlZCBpbiBwcm9k
dWN0aW9uIGJ1aWxkcyBidXQgZXhwYW5kIHRvIG5vIGNvZGUuCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhZ2dlZENvbnRlbnRD
b250YWluc1JlcGxhY2VkRWxlbWVudCk6IFNpbXBsaWZpZWQgYW5kIHVwZGF0ZWQKKyAgICAgICAg
bm93IHRoYXQgdGhlIGRyYWdnZWQgY29udGVudCBkYXRhIG5vIGxvbmdlciBoYXMgaXRzIG93biBu
YW1lZCBzdHJ1Y3R1cmUuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQp
OiBVcGRhdGUgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVu
U2NvcGUuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dMb2dpY2FsSGVpZ2h0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmxheW91dFJvd3Mp
OiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUaGVtZTo6dGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTog
UmVtb3ZlZCB0aGUgQ2hyb21pdW0tb25seQorICAgICAgICBjb25jZXB0IG9mIGFjdGl2ZSB2cy4g
aW5hY3RpdmUgdGV4dCBzZWFyY2ggaGlnaGxpZ2h0IGNvbG9ycy4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lOjpwbGF0Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvciBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVt
ZTo6aW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
OjpwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRl
ZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWUuaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLmg6IERpdHRvLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwbGF0
Zm9ybVRleHRTZWFyY2hIaWdobGlnaHRDb2xvciBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpw
bGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yIGNvbnN0KTogRGVsZXRlZC4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YWRkVGV4dE1hdGNoTWFya2VyKTogRGVsZXRlZC4gV2FzIG9ubHkgdXNlZCBmb3Ig
YSB0ZXN0CisgICAgICAgIG9mIENocm9taXVtLXNwZWNpZmljIHNjcm9sbCB0aWNrIG1hcmtzLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6IERlbGV0ZWQgYWRkVGV4dE1hdGNoTWFya2Vy
LgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDogRGl0dG8uCisKIDIwMjAtMDQtMDUg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkcmVz
cyByZXZpZXcgY29tbWVudHMgYWZ0ZXIgcjI1OTU1MApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBiZTVhYWQ5NGE1ODdh
YjZmNGY2Y2I0YzlhMDI1YmE4ZDA3YjU4MmJkLi45MjgwYWVjYjQ2NzA2ZTE4OTBmMDY4YTk5N2Y1
Yzg4MTVhZWRhZjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIwLTA0LTA0ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFu
Z2VzIGluIERvY3VtZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvVmlld1NuYXBzaG90U3RvcmUuaDog
UmVtb3ZlZCB1bnVzZWQgIkNvY29hIHdpdGhvdXQgSU9TdXJmYWNlIiBjb2RlIHBhdGhzLgorICAg
ICAgICAqIFVJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmVNYWMubW06CisgICAgICAgIChX
ZWJLaXQ6OlZpZXdTbmFwc2hvdDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZp
ZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZpZXdT
bmFwc2hvdDo6c2V0U3VyZmFjZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNo
b3Q6Omhhc0ltYWdlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hv
dDo6Y2xlYXJJbWFnZSk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpWaWV3U25hcHNob3Q6OnNl
dFZvbGF0aWxlKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6YXNMYXll
ckNvbnRlbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OlZpZXdTbmFwc2hvdDo6YXNJbWFn
ZUZvclRlc3RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6Vmlld1NuYXBzaG90U3RvcmU6
OnNuYXBzaG90dGluZ0NvbnRleHQpOiBEZWxldGVkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbToKKyAgICAgICAgKFdl
YktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVj
dGlvbik6IFVwZGF0ZWQgc2luY2UKKyAgICAgICAgYWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJr
ZXIgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJv
bGxlclByb3h5OjpyZW1vdmVBbm5vdGF0aW9uUmVsYXRpdmVUb1NlbGVjdGlvbik6CisgICAgICAg
IFVwZGF0ZWQgc2luY2UgZmlsdGVyTWFya2VycyBwYXNzZXMgYSByZWZlcmVuY2UgaW5zdGVhZCBv
ZiBhIHBvaW50ZXIgbm93LgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHk6OmFubm90YXRlZFN1YnN0cmluZ0JldHdlZW5Qb3NpdGlvbnMpOgorICAgICAgICBTaW1w
bGlmaWVkIGNvZGUgYSBiaXQgYnkgcmVtb3ZpbmcgbG9jYWwgdmFyaWFibGVzLgorCisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZTo6ZGljdGlvbmFyeVBvcHVwSW5mb0ZvclJhbmdlKTogVXNlCisgICAgICAg
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMuCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJm
b3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOiBVc2UKKyAgICAgICAgUmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyBhbmQgdW5pdGVkQm91bmRpbmdCb3hlcy4KKwogMjAy
MC0wNC0wNSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgYWRkaW5nIG1pc3NpbmcgaGVhZGVyIGluY2x1c2lvbnMgdG8gZ2V0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9DaGFuZ2VMb2cKaW5kZXggMDZkYjYzZjM1ZWI5ZjgxNDU5ZjQ3YzgyOGFhMjY3
YmU4MjEzMTM5NC4uMWFlZmU3YTJmYmQ1NjlkOGMxYTliYjQzMjY0YTRkY2UyY2IxMjY2YyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA0LTA0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUg
cmFuZ2VzIGluIERvY3VtZW50TWFya2VyQ29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5t
bToKKyAgICAgICAgKC1bV2ViRnJhbWUgcHJldmlvdXNVbnBlcnR1cmJlZERpY3RhdGlvblJlc3Vs
dEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorICAgICAgICBVcGRhdGUgc2luY2UgRG9jdW1lbnRN
YXJrZXI6Om1ldGFkYXRhIG5vIGxvbmdlciBleGlzdHMuCisgICAgICAgICgtW1dlYkZyYW1lIG5l
eHRVbnBlcnR1cmJlZERpY3RhdGlvblJlc3VsdEJvdW5kYXJ5RnJvbVBvc2l0aW9uOl0pOgorICAg
ICAgICBEaXR0by4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlv
bi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1JhbmdlV2l0aERp
Y3RhdGlvblBocmFzZUFsdGVybmF0aXZlczpdKToKKyAgICAgICAgVXBkYXRlIHNpbmNlIERvY3Vt
ZW50TWFya2VyOjphbHRlcm5hdGl2ZXMgbm8gbG9uZ2VyIGV4aXN0cy4KKyAgICAgICAgKC1bV2Vi
VmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1JhbmdlV2l0aENvcnJlY3Rpb25JbmRpY2F0b3JdKToK
KyAgICAgICAgRGl0dG8uCisKIDIwMjAtMDMtMTIgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBh
cHBsZS5jb20+CiAKICAgICAgICAgcmRhcjovL3Byb2JsZW0vNjAzNTkyMzAgTWFyayBsb2NhdGlv
bk1hbmFnZXI6ZGlkQ2hhbmdlQXV0aG9yaXphdGlvblN0YXR1czogYXMgZGVwcmVjYXRlZC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBjY2E1ZmQ3MjRiN2U3MzMzYWIwMWRhY2E1N2Ew
YmJiOGEzODI4NjRiLi44MDExOTE3OTEzYmY1YTU3MjE0MTBkMDE5NWZiMWExMDg0NjFmZGNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjAtMDQtMDQg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFN0b3AgdXNpbmcgbGl2
ZSByYW5nZXMgaW4gRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDk5ODUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET00ubW06CisgICAgICAgICgtW0RP
TU5vZGUgYWJzb2x1dGVRdWFkQW5kSW5zaWRlRml4ZWRQb3NpdGlvbjpdKTogVXNlIHVuaXRlZEJv
dW5kaW5nQm94ZXMuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1t
OgorICAgICAgICAoV2ViRWRpdG9yQ2xpZW50OjpoYW5kbGVSZXF1ZXN0ZWRDYW5kaWRhdGVzKTog
VXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMuCisgICAgICAgICogV2ViVmlldy9X
ZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2Vz
OmFuZE1ldGFkYXRhczpdKTogVXBkYXRlZCBzaW5jZSBEb2N1bWVudE1hcmtlciBubworICAgICAg
ICBsb25nZXIgaGFzIGEgZGVkaWNhdGVkIG1ldGFkYXRhIG1lbWJlciBmdW5jdGlvbi4KKyAgICAg
ICAgKC1bV2ViRnJhbWUgZGljdGF0aW9uUmVzdWx0TWV0YWRhdGFGb3JSYW5nZTpdKToKKyAgICAg
ICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW06CisgICAgICAgICgr
W1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5n
ZTppbkZyYW1lOndpdGhMb29rdXBPcHRpb25zOmluZGljYXRvck9wdGlvbnM6dHJhbnNpdGlvbjpd
KToKKyAgICAgICAgVXNlIFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMuCisKIDIwMjAt
MDQtMDQgIFBlbmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OIChyMjU5MDk1KTogQVNTRVJUSU9OIEZBSUxFRDogbV92aWRlb0Z1bGxzY3JlZW5Nb2RlICE9
IFZpZGVvRnVsbHNjcmVlbk1vZGVOb25lIHNlZW4gd2l0aCBUZXN0V2ViS2l0QVBJLldlYktpdExl
Z2FjeS5BdWRpb1Nlc3Npb25DYXRlZ29yeUlPUwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
UmV0YWluUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaAppbmRleCA2MWYxMDliY2Fm
ZTYwNTE2YTczMmVlNGVkODM5YWQxM2IzNGI1NzFhLi4wMTJhMDFkNzk0NGVhNmFkYTY1ZmM5ZTU5
N2RhNGZjYjMxYmVmZjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIuaApAQCAtNDgsNiArNDgsMTAgQEAKICNkZWZp
bmUgTlNfUkVMRUFTRVNfQVJHVU1FTlQKICNlbmRpZgogCisjaWZuZGVmIF9fT0JKQ19fCit0eXBl
ZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAK
IC8vIFVubGlrZSBtb3N0IG1vc3Qgb2Ygb3VyIHNtYXJ0IHBvaW50ZXJzLCBSZXRhaW5QdHIgY2Fu
IHRha2UgZWl0aGVyIHRoZSBwb2ludGVyIHR5cGUgb3IgdGhlIHBvaW50ZWQtdG8gdHlwZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vQ2hhcmFjdGVyRGF0YS5oCmluZGV4IDE1MjdjNTFkNWI0NmQ0MmJkYmFjNDkzZTll
NGJiYTFiMmVkYmRlM2MuLmUyMzFkNTM1NzdjYjUwODVhZDM4ZWJlNmUwMzJmNDFlNzkxNWEzZDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DaGFyYWN0ZXJEYXRhLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0NoYXJhY3RlckRhdGEuaApAQCAtNjIsNyArNjIsNyBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIFN0cmluZyBub2RlVmFsdWUoKSBjb25zdCBmaW5hbDsKICAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXROb2RlVmFsdWUoY29uc3QgU3RyaW5nJikgZmluYWw7Ci0gICAg
Ym9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQor
ICAgIGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KICAgICBpbnQgbWF4Q2hhcmFjdGVyT2Zmc2V0KCkgY29uc3QgZmluYWw7CiAgICAgdm9p
ZCBzZXREYXRhQW5kVXBkYXRlKGNvbnN0IFN0cmluZyYsIHVuc2lnbmVkIG9mZnNldE9mUmVwbGFj
ZWREYXRhLCB1bnNpZ25lZCBvbGRMZW5ndGgsIHVuc2lnbmVkIG5ld0xlbmd0aCk7CiAgICAgdm9p
ZCBub3RpZnlQYXJlbnRBZnRlckNoYW5nZShDb250YWluZXJOb2RlOjpDaGlsZENoYW5nZVNvdXJj
ZSk7CkBAIC03MCw2ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2RhdGE7CiB9Owog
CitpbmxpbmUgdW5zaWduZWQgTm9kZTo6bGVuZ3RoKCkgY29uc3QKK3sKKyAgICBpZiAoaXM8Q2hh
cmFjdGVyRGF0YT4oKnRoaXMpKQorICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q2hhcmFjdGVyRGF0
YT4oKnRoaXMpLmxlbmd0aCgpOworICAgIHJldHVybiBjb3VudENoaWxkTm9kZXMoKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OkNoYXJhY3RlckRhdGEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAzZWY5NDU5
MDBiYThmMjRlMDJmNWVjZjIwZGVjZmM3MDhiZmQ4MmEwLi4yY2FjYzVkMmUyZDY0Yjg0ZDE2MmM3
ZjA3M2YzOWNmMzE3NTU2M2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTQ2NDEsNyAr
NDY0MSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnRleHRJbnNlcnRlZChOb2RlJiB0ZXh0LCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkKIAogI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5f
VEVYVF9DSEVDS0lORykKICAgICAvLyBGcmVzaGx5IGluc2VydGVkIHRleHQgaXMgZXhwZWN0ZWQg
dG8gbm90IGluaGVyaXQgUGxhdGZvcm1UZXh0Q2hlY2tpbmcgbWFya2Vycy4KLSAgICBtX21hcmtl
cnMtPnJlbW92ZU1hcmtlcnModGV4dCwgb2Zmc2V0LCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpQ
bGF0Zm9ybVRleHRDaGVja2luZyk7CisgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQs
IHsgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGggfSwgRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4
dENoZWNraW5nKTsKICNlbmRpZgogfQogCkBAIC00NjUzLDcgKzQ2NTMsNyBAQCB2b2lkIERvY3Vt
ZW50Ojp0ZXh0UmVtb3ZlZChOb2RlJiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxl
bmd0aCkKICAgICB9CiAKICAgICAvLyBVcGRhdGUgdGhlIG1hcmtlcnMgZm9yIHNwZWxsaW5nIGFu
ZCBncmFtbWFyIGNoZWNraW5nLgotICAgIG1fbWFya2Vycy0+cmVtb3ZlTWFya2Vycyh0ZXh0LCBv
ZmZzZXQsIGxlbmd0aCk7CisgICAgbV9tYXJrZXJzLT5yZW1vdmVNYXJrZXJzKHRleHQsIHsgb2Zm
c2V0LCBvZmZzZXQgKyBsZW5ndGggfSk7CiAgICAgbV9tYXJrZXJzLT5zaGlmdE1hcmtlcnModGV4
dCwgb2Zmc2V0ICsgbGVuZ3RoLCAwIC0gbGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXIuaAppbmRleCA2NTViZDM2OGJiZGI1OWIzOWNlNzVmZmNkNzIwNmIzMmNmMDhlOGQ3
Li5kZjVjYzhmN2I1YWFlODY0ZmIwMGFkZjBlNjc4MWU5NTAyNjU1NTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRG9jdW1lbnRNYXJrZXIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTIwLDggKzIwLDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJO
b2RlLmgiCi0KKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9WYXJpYW50Lmg+
CkBAIC0yOSwxNSArMjgsMTIgQEAKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0
IDx3dGYvUmV0YWluUHRyLmg+Ci10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAqaWQ7CiAjZW5k
aWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBBIHJhbmdlIG9mIGEgbm9kZSB3aXRoaW4g
YSBkb2N1bWVudCB0aGF0IGlzICJtYXJrZWQiLCBzdWNoIGFzIHRoZSByYW5nZSBvZiBhIG1pc3Nw
ZWxsZWQgd29yZC4KIC8vIEl0IG9wdGlvbmFsbHkgaW5jbHVkZXMgYSBkZXNjcmlwdGlvbiB0aGF0
IGNvdWxkIGJlIGRpc3BsYXllZCBpbiB0aGUgdXNlciBpbnRlcmZhY2UuCi0vLyBJdCBhbHNvIG9w
dGlvbmFsbHkgaW5jbHVkZXMgYSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0aGUgbWF0Y2ggaXMg
YWN0aXZlLCB3aGljaCBpcyBpZ25vcmVkCi0vLyBmb3IgYWxsIHR5cGVzIG90aGVyIHRoYW4gdHlw
ZSBUZXh0TWF0Y2guCiBjbGFzcyBEb2N1bWVudE1hcmtlciB7CiBwdWJsaWM6CiAgICAgZW51bSBN
YXJrZXJUeXBlIHsKQEAgLTcyLDcgKzY4LDcgQEAgcHVibGljOgogICAgICAgICBUZWxlcGhvbmVO
dW1iZXIgPSAxIDw8IDEwLAogI2VuZGlmCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICAg
ICAgLy8gRklYTUU6IGlPUyBzaG91bGQgc2hhcmUgdGhlIHNhbWUgZGljdGF0aW9uIG1hcmsgc3lz
dGVtIHdpdGggdGhlIG90aGVyIHBsYXRmb3JtcyA8cmRhcjovL3Byb2JsZW0vOTQzMTI0OT4uCisg
ICAgICAgIC8vIEZJWE1FOiBpT1Mgc2hvdWxkIHNoYXJlIHRoZSBzYW1lIGRpY3RhdGlvbiBtYXJr
IHN5c3RlbSB3aXRoIHRoZSBvdGhlciBwbGF0Zm9ybXMuCiAgICAgICAgIERpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMgPSAxIDw8IDExLAogICAgICAgICBEaWN0YXRpb25SZXN1bHQgPSAx
IDw8IDEyLAogI2VuZGlmCkBAIC04OCw3MCArODQsNTAgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IGNvbnN0ZXhwciBPcHRpb25TZXQ8TWFya2VyVHlwZT4gYWxsTWFya2VycygpOwogCi0gICAgdXNp
bmcgSXNBY3RpdmVNYXRjaERhdGEgPSBib29sOwotICAgIHVzaW5nIERlc2NyaXB0aW9uRGF0YSA9
IFN0cmluZzsKICAgICBzdHJ1Y3QgRGljdGF0aW9uRGF0YSB7CiAgICAgICAgIHVpbnQ2NF90IGNv
bnRleHQ7CiAgICAgICAgIFN0cmluZyBvcmlnaW5hbFRleHQ7CiAgICAgfTsKLSAgICBzdHJ1Y3Qg
RGljdGF0aW9uQWx0ZXJuYXRpdmVzRGF0YSB7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAg
ICAgICAgVmVjdG9yPFN0cmluZz4gYWx0ZXJuYXRpdmVzOwotICAgICAgICBSZXRhaW5QdHI8aWQ+
IG1ldGFkYXRhOwotI2VuZGlmCi0gICAgfTsKLSAgICBzdHJ1Y3QgRHJhZ2dlZENvbnRlbnREYXRh
IHsKLSAgICAgICAgUmVmUHRyPE5vZGU+IHRhcmdldE5vZGU7Ci0gICAgfTsKICNpZiBFTkFCTEUo
UExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCiAgICAgc3RydWN0IFBsYXRmb3JtVGV4dENo
ZWNraW5nRGF0YSB7CiAgICAgICAgIFN0cmluZyBrZXk7CiAgICAgICAgIFN0cmluZyB2YWx1ZTsK
ICAgICB9OwogI2VuZGlmCi0gICAgdXNpbmcgRGF0YSA9IFZhcmlhbnQ8SXNBY3RpdmVNYXRjaERh
dGEsIERlc2NyaXB0aW9uRGF0YSwgRGljdGF0aW9uRGF0YSwgRGljdGF0aW9uQWx0ZXJuYXRpdmVz
RGF0YSwgRHJhZ2dlZENvbnRlbnREYXRhCisKKyAgICB1c2luZyBEYXRhID0gVmFyaWFudDwKKyAg
ICAgICAgU3RyaW5nCisgICAgICAgICwgRGljdGF0aW9uRGF0YSAvLyBEaWN0YXRpb25BbHRlcm5h
dGl2ZXMKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorICAgICAgICAsIFZlY3RvcjxTdHJpbmc+
IC8vIERpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMKKyAgICAgICAgLCBSZXRhaW5QdHI8
aWQ+IC8vIERpY3RhdGlvblJlc3VsdAorI2VuZGlmCisgICAgICAgICwgUmVmUHRyPE5vZGU+IC8v
IERyYWdnZWRDb250ZW50CiAjaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5H
KQotICAgICwgUGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhCisgICAgICAgICwgUGxhdGZvcm1UZXh0
Q2hlY2tpbmdEYXRhIC8vIFBsYXRmb3JtVGV4dENoZWNraW5nCiAjZW5kaWYKICAgICA+OwogCi0g
ICAgRG9jdW1lbnRNYXJrZXIodW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCwgYm9vbCBpc0FjdGl2ZU1hdGNoKTsKLSAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRl
c2NyaXB0aW9uID0gU3RyaW5nKCkpOwotICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIERhdGEmJik7Ci0jaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBlLCB1bnNpZ25l
ZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgYWx0ZXJuYXRpdmVzLCBSZXRhaW5QdHI8aWQ+IG1l
dGFkYXRhKTsKLSNlbmRpZgorICAgIERvY3VtZW50TWFya2VyKE1hcmtlclR5cGUsIE9mZnNldFJh
bmdlLCBEYXRhJiYgPSB7IH0pOwogCiAgICAgTWFya2VyVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9Ci0gICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0T2Zmc2V0OyB9Ci0gICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9lbmRPZmZzZXQ7IH0KKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2Uuc3RhcnQ7IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX3JhbmdlLmVuZDsgfQogCiAgICAgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbigpIGNvbnN0
OwogCi0gICAgYm9vbCBpc0FjdGl2ZU1hdGNoKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRBY3RpdmVN
YXRjaChib29sKTsKLQogICAgIGNvbnN0IERhdGEmIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KLSAgICB2b2lkIGNsZWFyRGF0YSgpIHsgbV9kYXRhID0gZmFsc2U7IH0KKyAgICB2b2lk
IGNsZWFyRGF0YSgpIHsgbV9kYXRhID0gU3RyaW5nIHsgfTsgfQogCiAgICAgLy8gT2Zmc2V0IG1v
ZGlmaWNhdGlvbnMgYXJlIGRvbmUgYnkgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLgogICAgIC8v
IE90aGVyIGNsYXNzZXMgc2hvdWxkIG5vdCBjYWxsIGZvbGxvd2luZyBzZXR0ZXJzLgotICAgIHZv
aWQgc2V0U3RhcnRPZmZzZXQodW5zaWduZWQgb2Zmc2V0KSB7IG1fc3RhcnRPZmZzZXQgPSBvZmZz
ZXQ7IH0KLSAgICB2b2lkIHNldEVuZE9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIHsgbV9lbmRPZmZz
ZXQgPSBvZmZzZXQ7IH0KKyAgICB2b2lkIHNldFN0YXJ0T2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkg
eyBtX3JhbmdlLnN0YXJ0ID0gb2Zmc2V0OyB9CisgICAgdm9pZCBzZXRFbmRPZmZzZXQodW5zaWdu
ZWQgb2Zmc2V0KSB7IG1fcmFuZ2UuZW5kID0gb2Zmc2V0OyB9CiAgICAgdm9pZCBzaGlmdE9mZnNl
dHMoaW50IGRlbHRhKTsKIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBpc0Rp
Y3RhdGlvbigpIGNvbnN0OwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMo
KSBjb25zdDsKLSAgICB2b2lkIHNldEFsdGVybmF0aXZlKGNvbnN0IFN0cmluZyYsIHNpemVfdCBp
bmRleCk7Ci0gICAgaWQgbWV0YWRhdGEoKSBjb25zdDsKLSAgICB2b2lkIHNldE1ldGFkYXRhKGlk
KTsKLSNlbmRpZgotCiBwcml2YXRlOgogICAgIE1hcmtlclR5cGUgbV90eXBlOwotICAgIHVuc2ln
bmVkIG1fc3RhcnRPZmZzZXQ7Ci0gICAgdW5zaWduZWQgbV9lbmRPZmZzZXQ7CisgICAgT2Zmc2V0
UmFuZ2UgbV9yYW5nZTsKICAgICBEYXRhIG1fZGF0YTsKIH07CiAKQEAgLTE4MywzNCArMTU5LDE3
IEBAIGNvbnN0ZXhwciBhdXRvIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkgLT4gT3B0aW9u
U2V0PE1hcmtlclR5cGU+CiAgICAgfTsKIH0KIAotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1
bWVudE1hcmtlcih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29s
IGlzQWN0aXZlTWF0Y2gpCi0gICAgOiBtX3R5cGUoVGV4dE1hdGNoKQotICAgICwgbV9zdGFydE9m
ZnNldChzdGFydE9mZnNldCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAsIG1f
ZGF0YShpc0FjdGl2ZU1hdGNoKQotewotfQotCi1pbmxpbmUgRG9jdW1lbnRNYXJrZXI6OkRvY3Vt
ZW50TWFya2VyKE1hcmtlclR5cGUgdHlwZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbikKK2lubGluZSBEb2N1bWVudE1h
cmtlcjo6RG9jdW1lbnRNYXJrZXIoTWFya2VyVHlwZSB0eXBlLCBPZmZzZXRSYW5nZSByYW5nZSwg
RGF0YSYmIGRhdGEpCiAgICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RhcnRPZmZzZXQoc3Rh
cnRPZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgLCBtX2RhdGEoZGVz
Y3JpcHRpb24pCi17Ci19Ci0KLWlubGluZSBEb2N1bWVudE1hcmtlcjo6RG9jdW1lbnRNYXJrZXIo
TWFya2VyVHlwZSB0eXBlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0
LCBEYXRhJiYgZGF0YSkKLSAgICA6IG1fdHlwZSh0eXBlKQotICAgICwgbV9zdGFydE9mZnNldChz
dGFydE9mZnNldCkKLSAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKKyAgICAsIG1fcmFuZ2Uo
cmFuZ2UpCiAgICAgLCBtX2RhdGEoV1RGTW92ZShkYXRhKSkKIHsKIH0KIAogaW5saW5lIHZvaWQg
RG9jdW1lbnRNYXJrZXI6OnNoaWZ0T2Zmc2V0cyhpbnQgZGVsdGEpCiB7Ci0gICAgbV9zdGFydE9m
ZnNldCArPSBkZWx0YTsKLSAgICBtX2VuZE9mZnNldCArPSBkZWx0YTsKKyAgICBtX3JhbmdlLnN0
YXJ0ICs9IGRlbHRhOworICAgIG1fcmFuZ2UuZW5kICs9IGRlbHRhOwogfQogCiBpbmxpbmUgY29u
c3QgU3RyaW5nJiBEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRpb24oKSBjb25zdApAQCAtMjE4LDU1
ICsxNzcsNCBAQCBpbmxpbmUgY29uc3QgU3RyaW5nJiBEb2N1bWVudE1hcmtlcjo6ZGVzY3JpcHRp
b24oKSBjb25zdAogICAgIHJldHVybiBXVEY6OmhvbGRzX2FsdGVybmF0aXZlPFN0cmluZz4obV9k
YXRhKSA/IFdURjo6Z2V0PFN0cmluZz4obV9kYXRhKSA6IGVtcHR5U3RyaW5nKCk7CiB9CiAKLWlu
bGluZSBib29sIERvY3VtZW50TWFya2VyOjppc0FjdGl2ZU1hdGNoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxib29sPihtX2RhdGEpICYmIFdURjo6Z2V0PGJv
b2w+KG1fZGF0YSk7Ci19Ci0KLWlubGluZSB2b2lkIERvY3VtZW50TWFya2VyOjpzZXRBY3RpdmVN
YXRjaChib29sIGlzQWN0aXZlTWF0Y2gpCi17Ci0gICAgQVNTRVJUKG1fdHlwZSA9PSBUZXh0TWF0
Y2gpOwotICAgIG1fZGF0YSA9IGlzQWN0aXZlTWF0Y2g7Ci19Ci0KLSNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQotCi0vLyBGSVhNRTogaU9TIHNob3VsZCBzaGFyZSB0aGUgc2FtZSBkaWN0YXRpb24g
bWFyayBzeXN0ZW0gd2l0aCB0aGUgb3RoZXIgcGxhdGZvcm1zIDxyZGFyOi8vcHJvYmxlbS85NDMx
MjQ5Pi4KLQotaW5saW5lIERvY3VtZW50TWFya2VyOjpEb2N1bWVudE1hcmtlcihNYXJrZXJUeXBl
IHR5cGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGNvbnN0IFN0
cmluZyYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBhbHRlcm5hdGl2ZXMsIFJldGFpblB0cjxpZD4g
bWV0YWRhdGEpCi0gICAgOiBtX3R5cGUodHlwZSkKLSAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRP
ZmZzZXQpCi0gICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgLCBtX2RhdGEoRGljdGF0
aW9uQWx0ZXJuYXRpdmVzRGF0YSB7IGFsdGVybmF0aXZlcywgbWV0YWRhdGEgfSkKLXsKLSAgICBB
U1NFUlQoaXNEaWN0YXRpb24oKSk7Ci19Ci0KLWlubGluZSBib29sIERvY3VtZW50TWFya2VyOjpp
c0RpY3RhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdHlwZSA9PSBEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzIHx8IG1fdHlwZSA9PSBEaWN0YXRpb25SZXN1bHQ7Ci19Ci0KLWlu
bGluZSBjb25zdCBWZWN0b3I8U3RyaW5nPiYgRG9jdW1lbnRNYXJrZXI6OmFsdGVybmF0aXZlcygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+
KG1fZGF0YSkuYWx0ZXJuYXRpdmVzOwotfQotCi1pbmxpbmUgdm9pZCBEb2N1bWVudE1hcmtlcjo6
c2V0QWx0ZXJuYXRpdmUoY29uc3QgU3RyaW5nJiBhbHRlcm5hdGl2ZSwgc2l6ZV90IGluZGV4KQot
ewotICAgIFdURjo6Z2V0PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkuYWx0ZXJu
YXRpdmVzW2luZGV4XSA9IGFsdGVybmF0aXZlOwotfQotCi1pbmxpbmUgaWQgRG9jdW1lbnRNYXJr
ZXI6Om1ldGFkYXRhKCkgY29uc3QKLXsKLSAgICByZXR1cm4gV1RGOjpnZXQ8RGljdGF0aW9uQWx0
ZXJuYXRpdmVzRGF0YT4obV9kYXRhKS5tZXRhZGF0YS5nZXQoKTsKLX0KLQotaW5saW5lIHZvaWQg
RG9jdW1lbnRNYXJrZXI6OnNldE1ldGFkYXRhKGlkIG1ldGFkYXRhKQotewotICAgIFdURjo6Z2V0
PERpY3RhdGlvbkFsdGVybmF0aXZlc0RhdGE+KG1fZGF0YSkubWV0YWRhdGEgPSBtZXRhZGF0YTsK
LX0KLQotI2VuZGlmCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggY2Q5M2VlNTk2ODFhZDI2
ZDg0YzEzNTA4NDljOWVkYTJjN2NkMTBkYi4uNGM1Mjg2MTc4NGE2NTcyY2ZhNWEyNGVmYTA0MWM3
ZTVkZmE5Y2E2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2Vy
Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5jcHAKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFBy
b3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRl
ICJOb2RlVHJhdmVyc2FsLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIlJhbmdlLmgi
CiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCkBAIC02MCwxMzQgKzU5LDU0IEBAIHZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpkZXRhY2goKQogICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtl
clR5cGVzID0geyB9OwogfQogCi1WZWN0b3I8UmVmUHRyPFJhbmdlPj4gRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpjb2xsZWN0VGV4dFJhbmdlcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCith
dXRvIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlKSAtPiBWZWN0b3I8VGV4dFJhbmdlPgogewotICAgIFZlY3RvcjxSZWZQ
dHI8UmFuZ2U+PiB0ZXh0UmFuZ2U7Ci0gICAgZm9yIChUZXh0SXRlcmF0b3IgdGV4dEl0ZXJhdG9y
KHJhbmdlKTsgIXRleHRJdGVyYXRvci5hdEVuZCgpOyB0ZXh0SXRlcmF0b3IuYWR2YW5jZSgpKQot
ICAgICAgICB0ZXh0UmFuZ2UuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZSh0ZXh0SXRlcmF0b3IucmFu
Z2UoKSkpOwotICAgIHJldHVybiB0ZXh0UmFuZ2U7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjphZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0aW9uKQotewotICAg
IGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAg
IGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKHR5
cGUsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRPZmZzZXQoKSwgZGVz
Y3JpcHRpb24pKTsKLX0KLQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtl
cihjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5
cGUpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdl
KSkKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgRG9jdW1l
bnRNYXJrZXIodHlwZSwgdGV4dFBpZWNlLT5zdGFydE9mZnNldCgpLCB0ZXh0UGllY2UtPmVuZE9m
ZnNldCgpKSk7Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJU
b05vZGUoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKLXsKLSAgICBhZGRNYXJrZXIobm9kZSwg
RG9jdW1lbnRNYXJrZXIodHlwZSwgc3RhcnRPZmZzZXQsIHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoKSk7
Ci19Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXJUb05vZGUoTm9k
ZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGUgdHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiBkYXRhKQotewot
ICAgIGFkZE1hcmtlcihub2RlLCBEb2N1bWVudE1hcmtlcih0eXBlLCBzdGFydE9mZnNldCwgc3Rh
cnRPZmZzZXQgKyBsZW5ndGgsIFdURk1vdmUoZGF0YSkpKTsKLX0KLQotdm9pZCBEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXI6OmFkZFRleHRNYXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJv
b2wgYWN0aXZlTWF0Y2gpCi17Ci0gICAgZm9yIChhdXRvIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0
UmFuZ2VzKHJhbmdlKSkgewotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHRleHRQaWVj
ZS0+c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNl
LT5lbmRPZmZzZXQoKTsKLSAgICAgICAgYWRkTWFya2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWlu
ZXIoKSwgRG9jdW1lbnRNYXJrZXIoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCwgYWN0aXZlTWF0Y2gp
KTsKKyAgICBWZWN0b3I8VGV4dFJhbmdlPiByYW5nZXM7CisgICAgZm9yIChUZXh0SXRlcmF0b3Ig
aXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7
CisgICAgICAgIGF1dG8gY3VycmVudFJhbmdlID0gaXRlcmF0b3IucmFuZ2UoKTsKKyAgICAgICAg
cmFuZ2VzLmFwcGVuZCh7IFdURk1vdmUoY3VycmVudFJhbmdlLnN0YXJ0LmNvbnRhaW5lciksIHsg
Y3VycmVudFJhbmdlLnN0YXJ0Lm9mZnNldCwgY3VycmVudFJhbmdlLmVuZC5vZmZzZXQgfSB9KTsK
ICAgICB9CisgICAgcmV0dXJuIHJhbmdlczsKIH0KIAotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
Ci0KLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJrZXIoUmFuZ2UmIHJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmIGRlc2NyaXB0
aW9uLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW50ZXJwcmV0YXRpb25zLCBjb25zdCBSZXRhaW5Q
dHI8aWQ+JiBtZXRhZGF0YSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjphZGRNYXJr
ZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0
eXBlLCBjb25zdCBEb2N1bWVudE1hcmtlcjo6RGF0YSYgZGF0YSkKIHsKLSAgICBmb3IgKGF1dG8g
dGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQotICAgICAgICBhZGRNYXJrZXIo
dGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBEb2N1bWVudE1hcmtlcih0eXBlLCB0ZXh0UGll
Y2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIGRlc2NyaXB0aW9uLCBp
bnRlcnByZXRhdGlvbnMsIG1ldGFkYXRhKSk7CisgICAgZm9yIChhdXRvJiB0ZXh0UGllY2UgOiBj
b2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCisgICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2Uubm9k
ZSwgeyB0eXBlLCB0ZXh0UGllY2UucmFuZ2UsIERvY3VtZW50TWFya2VyOjpEYXRhIHsgZGF0YSB9
IH0pOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGljdGF0aW9uUGhy
YXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYgcmFuZ2UsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBpbnRlcnByZXRhdGlvbnMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
TWFya2VyKFRleHQmIG5vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYg
ZGF0YSkKIHsKLSAgICBBU1NFUlQoaW50ZXJwcmV0YXRpb25zLnNpemUoKSA+IDEpOwotICAgIGlm
IChpbnRlcnByZXRhdGlvbnMuc2l6ZSgpIDw9IDEpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNp
emVfdCBudW1iZXJPZkFsdGVybmF0aXZlcyA9IGludGVycHJldGF0aW9ucy5zaXplKCkgLSAxOwot
ICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAg
ICAgICAgRG9jdW1lbnRNYXJrZXIgbWFya2VyKERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJh
c2VXaXRoQWx0ZXJuYXRpdmVzLCB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCksIHRleHRQaWVjZS0+
ZW5kT2Zmc2V0KCksIGVtcHR5U3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KG51bWJlck9mQWx0ZXJu
YXRpdmVzKSwgUmV0YWluUHRyPGlkPigpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBudW1iZXJPZkFsdGVybmF0aXZlczsgKytpKQotICAgICAgICAgICAgbWFya2VyLnNldEFsdGVy
bmF0aXZlKGludGVycHJldGF0aW9uc1tpICsgMV0sIGkpOwotICAgICAgICBhZGRNYXJrZXIodGV4
dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBtYXJrZXIpOwotICAgIH0KKyAgICBhZGRNYXJrZXIo
bm9kZSwgeyB0eXBlLCB7IHN0YXJ0T2Zmc2V0LCBzdGFydE9mZnNldCArIGxlbmd0aCB9LCBXVEZN
b3ZlKGRhdGEpIH0pOwogfQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRGlj
dGF0aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgUmV0YWlu
UHRyPGlkPiYgbWV0YWRhdGEpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkRHJh
Z2dlZENvbnRlbnRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGZvciAo
YXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpCi0gICAgICAgIGFkZE1h
cmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVyKCksIERvY3VtZW50TWFya2VyKERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBp
ZWNlLT5lbmRPZmZzZXQoKSwgU3RyaW5nKCksIFZlY3RvcjxTdHJpbmc+KCksIG1ldGFkYXRhKSk7
CisgICAgLy8gRklYTUU6IFNpbmNlIHRoZSBtYXJrZXIgaXMgYWxyZWFkeSBzdG9yZWQgaW4gYSBt
YXAga2V5ZWQgYnkgbm9kZSwgd2UgY2FuIHByb2JhYmx5IGNoYW5nZSB0aGluZ3MgYXJvdW5kIHNv
IHdlIGRvbid0IGhhdmUgdG8gYWxzbyBzdG9yZSB0aGUgbm9kZSBpbiB0aGUgbWFya2VyLgorICAg
IGZvciAoYXV0byYgdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5nZXMocmFuZ2UpKQorICAgICAg
ICBhZGRNYXJrZXIodGV4dFBpZWNlLm5vZGUsIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250
ZW50LCB0ZXh0UGllY2UucmFuZ2UsIFJlZlB0cjxOb2RlPiB7IHRleHRQaWVjZS5ub2RlLnB0cigp
IH0gfSk7CiB9CiAKLSNlbmRpZgotCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRk
RHJhZ2dlZENvbnRlbnRNYXJrZXIoUmFuZ2UmIHJhbmdlKQotewotICAgIGZvciAoYXV0byB0ZXh0
UGllY2UgOiBjb2xsZWN0VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAgICAgRG9jdW1lbnRNYXJr
ZXI6OkRyYWdnZWRDb250ZW50RGF0YSBkcmFnZ2VkQ29udGVudERhdGEgeyB0ZXh0UGllY2UtPmZp
cnN0Tm9kZSgpIH07Ci0gICAgICAgIGFkZE1hcmtlcih0ZXh0UGllY2UtPnN0YXJ0Q29udGFpbmVy
KCksIHsgRG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50LCB0ZXh0UGllY2UtPnN0YXJ0T2Zm
c2V0KCksIHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCksIFdURk1vdmUoZHJhZ2dlZENvbnRlbnREYXRh
KSB9KTsKLSAgICB9Ci19Ci0KLSNpZiBFTkFCTEUoUExBVEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJ
TkcpCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkUGxhdGZvcm1UZXh0Q2hlY2tp
bmdNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIGtleSwgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVN
YXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5v
dCBvdmVybGFwUnVsZSkKIHsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRS
YW5nZXMocmFuZ2UpKSB7Ci0gICAgICAgIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVj
a2luZ0RhdGEgdGV4dENoZWNraW5nRGF0YSB7IGtleSwgdmFsdWUgfTsKLSAgICAgICAgYWRkTWFy
a2VyKHRleHRQaWVjZS0+c3RhcnRDb250YWluZXIoKSwgeyBEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmcsIHRleHRQaWVjZS0+c3RhcnRPZmZzZXQoKSwgdGV4dFBpZWNlLT5lbmRP
ZmZzZXQoKSwgV1RGTW92ZSh0ZXh0Q2hlY2tpbmdEYXRhKSB9KTsKLSAgICB9Ci19Ci0jZW5kaWYK
LQotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnJlbW92ZU1hcmtlcnMoUmFuZ2UmIHJh
bmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IG1hcmtlclR5cGVzLCBS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxs
eU92ZXJsYXBwaW5nTWFya2VyKQotewotICAgIGZvciAoYXV0byB0ZXh0UGllY2UgOiBjb2xsZWN0
VGV4dFJhbmdlcyhyYW5nZSkpIHsKLSAgICAgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFy
a2VyVHlwZXMpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBBU1NFUlQoIW1fbWFya2Vy
cy5pc0VtcHR5KCkpOwotICAgICAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IHRleHRQaWVjZS0+
c3RhcnRPZmZzZXQoKTsKLSAgICAgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gdGV4dFBpZWNlLT5l
bmRPZmZzZXQoKTsKLSAgICAgICAgcmVtb3ZlTWFya2Vycyh0ZXh0UGllY2UtPnN0YXJ0Q29udGFp
bmVyKCksIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQgLSBzdGFydE9mZnNldCwgbWFya2VyVHlwZXMs
IG51bGxwdHIsIHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICB9
CisgICAgZmlsdGVyTWFya2VycyhyYW5nZSwgbnVsbHB0ciwgdHlwZXMsIG92ZXJsYXBSdWxlKTsK
IH0KIAotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1hcmtlcnMoUmFuZ2Um
IHJhbmdlLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rp
b24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMsIFJl
bW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxkUmVtb3ZlUGFydGlhbGx5
T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6ZmlsdGVy
TWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IEZ1bmN0aW9uPGJvb2woY29u
c3QgRG9jdW1lbnRNYXJrZXImKT4mIGZpbHRlciwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlPiB0eXBlcywgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCBv
dmVybGFwUnVsZSkKIHsKLSAgICBmb3IgKGF1dG8gdGV4dFBpZWNlIDogY29sbGVjdFRleHRSYW5n
ZXMocmFuZ2UpKSB7Ci0gICAgICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKKyAgICBmb3IgKGF1dG8mIHRleHRQaWVjZSA6IGNvbGxlY3RUZXh0UmFuZ2VzKHJhbmdlKSkg
eworICAgICAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7Ci0KLSAgICAgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQgPSB0ZXh0UGllY2UtPnN0YXJ0T2Zmc2V0KCk7Ci0gICAgICAg
IHVuc2lnbmVkIGVuZE9mZnNldCA9IHRleHRQaWVjZS0+ZW5kT2Zmc2V0KCk7Ci0gICAgICAgIHJl
bW92ZU1hcmtlcnModGV4dFBpZWNlLT5zdGFydENvbnRhaW5lcigpLCBzdGFydE9mZnNldCwgZW5k
T2Zmc2V0IC0gc3RhcnRPZmZzZXQsIG1hcmtlclR5cGVzLCBmaWx0ZXJGdW5jdGlvbiwgc2hvdWxk
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgICAgICByZW1vdmVNYXJrZXJz
KHRleHRQaWVjZS5ub2RlLCB0ZXh0UGllY2UucmFuZ2UsIHR5cGVzLCBmaWx0ZXIsIG92ZXJsYXBS
dWxlKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJr
ZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBOb2RlJiBub2RlKQogewogICAgIEFT
U0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAhbm9kZS5kb2N1bWVudCgpLnZpZXcoKS0+
bmVlZHNMYXlvdXQoKSk7Ci0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlZmFjdG9yIHRoaXMg
c28gdGhhdCB3ZSBkb24ndCB1c2UgUmFuZ2UgKGJlY2F1c2Ugd2Ugb25seSBoYXZlIG9uZSBOb2Rl
KSwgYnV0IHN0aWxsIHNoYXJlIGNvZGUgd2l0aCBhYnNvbHV0ZVRleHRRdWFkcygpLgotICAgIGF1
dG8gbWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSwgJm5vZGUsIG1h
cmtlci5zdGFydE9mZnNldCgpLCAmbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpKTsKLSAgICBWZWN0
b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZU1hcmtlclF1YWRzOwotICAgIG1hcmtlclJhbmdlLT5hYnNv
bHV0ZVRleHRRdWFkcyhhYnNvbHV0ZU1hcmtlclF1YWRzLCB0cnVlKTsKLQotICAgIFZlY3RvcjxG
bG9hdFJlY3Q+IGFic29sdXRlTWFya2VyUmVjdHM7Ci0gICAgYWJzb2x1dGVNYXJrZXJSZWN0cy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFic29sdXRlTWFya2VyUXVhZHMuc2l6ZSgpKTsKLSAgICBm
b3IgKGNvbnN0IGF1dG8mIHF1YWQgOiBhYnNvbHV0ZU1hcmtlclF1YWRzKQotICAgICAgICBhYnNv
bHV0ZU1hcmtlclJlY3RzLnVuY2hlY2tlZEFwcGVuZChxdWFkLmJvdW5kaW5nQm94KCkpOwotCi0g
ICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoYWJzb2x1dGVNYXJrZXJSZWN0cyk7
CisgICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBtYXJrZXIuc3RhcnRPZmZz
ZXQoKSB9LCB7IG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSB9IH07CisgICAgbWFya2VyLnNldFVu
Y2xpcHBlZEFic29sdXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRl
VGV4dFF1YWRzKHJhbmdlLCB0cnVlKSkpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBAIC0xOTUsOCArMTE0LDggQEAg
dm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtl
cnMoKQogICAgIGlmICghaGFzTWFya2VycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KGF1dG8mIG1hcmtlcnMgOiBtX21hcmtlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgZm9yIChhdXRv
JiBtYXJrZXIgOiAqbWFya2VycykKKyAgICBmb3IgKGF1dG8mIG5vZGVNYXJrZXJzIDogbV9tYXJr
ZXJzLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVNYXJrZXJz
KQogICAgICAgICAgICAgbWFya2VyLmludmFsaWRhdGUoKTsKICAgICB9CiAKQEAgLTIwOSw3ICsx
MjgsNyBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9y
TWFya2Vyc0luTm9kZShOb2RlJiBub2RlKQogICAgIGlmICghaGFzTWFya2VycygpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBNYXJrZXJMaXN0KiBtYXJrZXJzID0gbV9tYXJrZXJzLmdldCgmbm9k
ZSk7CisgICAgYXV0byBtYXJrZXJzID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAgQVNTRVJU
KG1hcmtlcnMpOwogCiAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbWFya2VycykKQEAgLTIzMiw0
MSArMTUxLDMzIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZU1haW5GcmFtZUxheW91dElmTmVlZGVkKERv
Y3VtZW50JiBkb2N1bWVudCkKICAgICBtYWluRnJhbWVWaWV3LT51cGRhdGVMYXlvdXRBbmRTdHls
ZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
Ojp1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVkTWFya2Vyc09mVHlwZShEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSBtYXJrZXJUeXBlKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnVw
ZGF0ZVJlY3RzRm9ySW52YWxpZGF0ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMobWFya2VyVHlwZSkp
CisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZSkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7Ci0KLSAgICBib29sIG5lZWRzTGF5b3V0
SWZBbnlSZWN0c0FyZURpcnR5ID0gdHJ1ZTsKLQotICAgIGZvciAoYXV0byYgbm9kZUFuZE1hcmtl
cnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSYgbm9kZSA9ICpub2RlQW5kTWFya2Vycy5r
ZXk7Ci0gICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5vZGVBbmRNYXJrZXJzLnZhbHVlKSB7
Ci0gICAgICAgICAgICBpZiAobWFya2VyLnR5cGUoKSAhPSBtYXJrZXJUeXBlKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIEFTU0VSVCghbV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAg
ICAgICAgICAgIGlmIChtYXJrZXIuaXNWYWxpZCgpKQorICAgIGJvb2wgdXBkYXRlZExheW91dCA9
IGZhbHNlOworICAgIGZvciAoYXV0byYgbm9kZU1hcmtlcnMgOiBtX21hcmtlcnMpIHsKKyAgICAg
ICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpIHsKKyAgICAgICAgICAg
IGlmIChtYXJrZXIudHlwZSgpICE9IHR5cGUgfHwgbWFya2VyLmlzVmFsaWQoKSkKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgLy8gV2UnbGwgZG8gdXAgdG8gb25lIGxh
eW91dCBwZXIgY2FsbCBpZiB3ZSBoYXZlIGFueSBkaXJ0eSBtYXJrZXJzLgotICAgICAgICAgICAg
aWYgKG5lZWRzTGF5b3V0SWZBbnlSZWN0c0FyZURpcnR5KSB7CisgICAgICAgICAgICBpZiAoIXVw
ZGF0ZWRMYXlvdXQpIHsKICAgICAgICAgICAgICAgICB1cGRhdGVNYWluRnJhbWVMYXlvdXRJZk5l
ZWRlZChtX2RvY3VtZW50KTsKLSAgICAgICAgICAgICAgICBuZWVkc0xheW91dElmQW55UmVjdHNB
cmVEaXJ0eSA9IGZhbHNlOworICAgICAgICAgICAgICAgIHVwZGF0ZWRMYXlvdXQgPSB0cnVlOwog
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vy
KG1hcmtlciwgbm9kZSk7CisgICAgICAgICAgICB1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2Vy
KG1hcmtlciwgKm5vZGVNYXJrZXJzLmtleSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLVZlY3Rv
cjxGbG9hdFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1h
cmtlcnMoRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSkKK1ZlY3RvcjxGbG9h
dFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMo
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUgdHlwZSkKIHsKICAgICBWZWN0b3I8RmxvYXRSZWN0
PiByZXN1bHQ7CiAKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJrZXJUeXBlKSkKKyAg
ICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlKSkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7CisgICAgQVNTRVJUKCFtX21hcmtl
cnMuaXNFbXB0eSgpKTsKIAogICAgIFJlZlB0cjxGcmFtZT4gZnJhbWUgPSBtX2RvY3VtZW50LmZy
YW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTI3NSwyNiArMTg2LDI2IEBAIFZlY3RvcjxGbG9h
dFJlY3Q+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMo
RG9jdW1lbnRNYXJrCiAgICAgaWYgKCFmcmFtZVZpZXcpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CiAKLSAgICB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVkTWFya2Vyc09mVHlwZShtYXJrZXJUeXBl
KTsKKyAgICB1cGRhdGVSZWN0c0ZvckludmFsaWRhdGVkTWFya2Vyc09mVHlwZSh0eXBlKTsKIAog
ICAgIGJvb2wgaXNTdWJmcmFtZSA9ICFmcmFtZS0+aXNNYWluRnJhbWUoKTsKICAgICBJbnRSZWN0
IHN1YmZyYW1lQ2xpcFJlY3Q7CiAgICAgaWYgKGlzU3ViZnJhbWUpCiAgICAgICAgIHN1YmZyYW1l
Q2xpcFJlY3QgPSBmcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHMoZnJhbWVWaWV3LT53aW5kb3dD
bGlwUmVjdCgpKTsKIAotICAgIGZvciAoYXV0byYgbm9kZUFuZE1hcmtlcnMgOiBtX21hcmtlcnMp
IHsKLSAgICAgICAgTm9kZSYgbm9kZSA9ICpub2RlQW5kTWFya2Vycy5rZXk7CisgICAgZm9yIChh
dXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0g
bm9kZU1hcmtlcnMua2V5LT5yZW5kZXJlcigpOwogICAgICAgICBGbG9hdFJlY3Qgb3ZlcmZsb3dD
bGlwUmVjdDsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBub2RlLnJlbmRl
cmVyKCkpCisgICAgICAgIGlmIChyZW5kZXJlcikKICAgICAgICAgICAgIG92ZXJmbG93Q2xpcFJl
Y3QgPSByZW5kZXJlci0+YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCk7Ci0gICAgICAgIGZv
ciAoYXV0byYgbWFya2VyIDogKm5vZGVBbmRNYXJrZXJzLnZhbHVlKSB7Ci0gICAgICAgICAgICBp
ZiAobWFya2VyLnR5cGUoKSAhPSBtYXJrZXJUeXBlKQorICAgICAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6ICpub2RlTWFya2Vycy52YWx1ZSkgeworICAgICAgICAgICAgaWYgKG1hcmtlci50eXBlKCkg
IT0gdHlwZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgYXV0byBy
ZW5kZXJlZFJlY3RzID0gbWFya2VyLnVuY2xpcHBlZEFic29sdXRlUmVjdHMoKTsKIAogICAgICAg
ICAgICAgLy8gQ2xpcCBkb2N1bWVudCBtYXJrZXJzIGJ5IHRoZWlyIG92ZXJmbG93IGNsaXAuCi0g
ICAgICAgICAgICBpZiAobm9kZS5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBpZiAocmVuZGVy
ZXIpIHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiByZW5kZXJlZFJlY3RzKQog
ICAgICAgICAgICAgICAgICAgICByZWN0LmludGVyc2VjdChvdmVyZmxvd0NsaXBSZWN0KTsKICAg
ICAgICAgICAgIH0KQEAgLTMxNSwyMSArMjI2LDIwIEBAIFZlY3RvcjxGbG9hdFJlY3Q+IERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoRG9jdW1lbnRNYXJr
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBh
cmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKQorc3RhdGljIGJvb2wg
c2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2Vy
KQogewogI2lmIEVOQUJMRShQTEFURk9STV9EUklWRU5fVEVYVF9DSEVDS0lORykKLSAgICBpZiAo
bmV3TWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcp
CisgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENo
ZWNraW5nKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKLSAgICBpZiAobmV3TWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcyB8fCBuZXdNYXJrZXIudHlwZSgpID09IERvY3Vt
ZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQpCisgICAgaWYgKG1hcmtlci50eXBlKCkgPT0gRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMgfHwgbWFya2VyLnR5
cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKICNlbmRpZgotICAgIGlmIChuZXdNYXJrZXIudHlwZSgpID09IERvY3VtZW50TWFya2Vy
OjpEcmFnZ2VkQ29udGVudCkgewotICAgICAgICBpZiAoYXV0byB0YXJnZXROb2RlID0gV1RGOjpn
ZXQ8RG9jdW1lbnRNYXJrZXI6OkRyYWdnZWRDb250ZW50RGF0YT4obmV3TWFya2VyLmRhdGEoKSku
dGFyZ2V0Tm9kZSkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXROb2RlLT5yZW5kZXJlcigpICYm
IHRhcmdldE5vZGUtPnJlbmRlcmVyKCktPmlzUmVuZGVyUmVwbGFjZWQoKTsKLSAgICB9CisKKyAg
ICBpZiAobWFya2VyLnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RHJhZ2dlZENvbnRlbnQpCisg
ICAgICAgIHJldHVybiBpczxSZW5kZXJSZXBsYWNlZD4oV1RGOjpnZXQ8UmVmUHRyPE5vZGU+Piht
YXJrZXIuZGF0YSgpKS0+cmVuZGVyZXIoKSk7CiAKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0z
MzcsNyArMjQ3LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihj
b25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWFya2VyKQogLy8gTWFya2VycyBhcmUgc3RvcmVkIGlu
IG9yZGVyIHNvcnRlZCBieSB0aGVpciBzdGFydCBvZmZzZXQuCiAvLyBNYXJrZXJzIG9mIHRoZSBz
YW1lIHR5cGUgZG8gbm90IG92ZXJsYXAgZWFjaCBvdGhlci4KIAotdm9pZCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYg
bmV3TWFya2VyKQordm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
JiBub2RlLCBEb2N1bWVudE1hcmtlciYmIG5ld01hcmtlcikKIHsKICAgICBBU1NFUlQobmV3TWFy
a2VyLmVuZE9mZnNldCgpID49IG5ld01hcmtlci5zdGFydE9mZnNldCgpKTsKICAgICBpZiAobmV3
TWFya2VyLmVuZE9mZnNldCgpID09IG5ld01hcmtlci5zdGFydE9mZnNldCgpKQpAQCAtMzUzLDEx
ICsyNjMsMTEgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihOb2Rl
JiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKIAogICAgIG1fcG9zc2libHlFeGlz
dGluZ01hcmtlclR5cGVzLmFkZChuZXdNYXJrZXIudHlwZSgpKTsKIAotICAgIHN0ZDo6dW5pcXVl
X3B0cjxNYXJrZXJMaXN0PiYgbGlzdCA9IG1fbWFya2Vycy5hZGQoJm5vZGUsIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICBhdXRvJiBsaXN0ID0gbV9tYXJrZXJzLmFkZCgmbm9kZSwgbnVs
bHB0cikuaXRlcmF0b3ItPnZhbHVlOwogCiAgICAgaWYgKCFsaXN0KSB7Ci0gICAgICAgIGxpc3Qg
PSBtYWtlVW5pcXVlPE1hcmtlckxpc3Q+KCk7Ci0gICAgICAgIGxpc3QtPmFwcGVuZChSZW5kZXJl
ZERvY3VtZW50TWFya2VyKG5ld01hcmtlcikpOworICAgICAgICBsaXN0ID0gbWFrZVVuaXF1ZTxW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4+KCk7CisgICAgICAgIGxpc3QtPmFwcGVuZChS
ZW5kZXJlZERvY3VtZW50TWFya2VyKFdURk1vdmUobmV3TWFya2VyKSkpOwogICAgIH0gZWxzZSBp
ZiAoc2hvdWxkSW5zZXJ0QXNTZXBhcmF0ZU1hcmtlcihuZXdNYXJrZXIpKSB7CiAgICAgICAgIC8v
IFdlIGRvbid0IG1lcmdlIGRpY3RhdGlvbiBtYXJrZXJzLgogICAgICAgICBzaXplX3QgaTsKQEAg
LTM2Nyw5ICsyNzcsOSBAQCB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6YWRkTWFya2Vy
KE5vZGUmIG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBuZXdNYQogICAgICAgICAgICAgaWYg
KG1hcmtlci5zdGFydE9mZnNldCgpID4gbmV3TWFya2VyLnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRl
cmVkRG9jdW1lbnRNYXJrZXIobmV3TWFya2VyKSk7CisgICAgICAgIGxpc3QtPmluc2VydChpLCBS
ZW5kZXJlZERvY3VtZW50TWFya2VyKFdURk1vdmUobmV3TWFya2VyKSkpOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgdG9JbnNlcnQobmV3TWFya2VyKTsKKyAg
ICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciB0b0luc2VydChXVEZNb3ZlKG5ld01hcmtlcikp
OwogICAgICAgICBzaXplX3QgbnVtTWFya2VycyA9IGxpc3QtPnNpemUoKTsKICAgICAgICAgc2l6
ZV90IGk7CiAgICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBhbGwgbWFya2VycyB3aG9zZSBzdGFydCBv
ZmZzZXQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBuZXcgbWFya2VyJ3MuCkBAIC00MTQs
MTAzICszMjQsOTggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmFkZE1hcmtlcihO
b2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbmV3TWEKICAgICBpbnZhbGlkYXRlUmVj
dHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwogfQogCi0vLyBjb3BpZXMgbWFya2VycyBmcm9tIHNy
Y05vZGUgdG8gZHN0Tm9kZSwgYXBwbHlpbmcgdGhlIHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0
aGUgY29waWVzLiAgVGhlIHNoaWZ0IGlzCi0vLyB1c2VmdWwgaWYsIGUuZy4sIHRoZSBjYWxsZXIg
aGFzIGNyZWF0ZWQgdGhlIGRzdE5vZGUgZnJvbSBhIG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRo
ZSBzcmNOb2RlLgotdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmNvcHlNYXJrZXJzKE5v
ZGUmIHNyY05vZGUsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBOb2RlJiBkc3RO
b2RlLCBpbnQgZGVsdGEpCisvLyBDb3BpZXMgbWFya2VycyBmcm9tIHNvdXJjZSB0byBkZXN0aW5h
dGlvbiwgYXBwbHlpbmcgdGhlIHNwZWNpZmllZCBzaGlmdCBkZWx0YSB0byB0aGUgY29waWVzLiBU
aGUgc2hpZnQgaXMKKy8vIHVzZWZ1bCBpZiwgZS5nLiwgdGhlIGNhbGxlciBoYXMgY3JlYXRlZCB0
aGUgZGVzdGluYXRpb24gZnJvbSBhIG5vbi1wcmVmaXggc3Vic3RyaW5nIG9mIHRoZSBzb3VyY2Uu
Cit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y29weU1hcmtlcnMoTm9kZSYgc291cmNl
LCBPZmZzZXRSYW5nZSByYW5nZSwgTm9kZSYgZGVzdGluYXRpb24pCiB7Ci0gICAgaWYgKGxlbmd0
aCA8PSAwKQorICAgIGlmIChyYW5nZS5zdGFydCA+PSByYW5nZS5lbmQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKERvY3VtZW50TWFya2VyOjphbGxNYXJr
ZXJzKCkpKQogICAgICAgICByZXR1cm47CiAgICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgp
KTsKIAotICAgIE1hcmtlckxpc3QqIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZzcmNOb2RlKTsKKyAg
ICBhdXRvIGxpc3QgPSBtX21hcmtlcnMuZ2V0KCZzb3VyY2UpOwogICAgIGlmICghbGlzdCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgYm9vbCBkb2NEaXJ0eSA9IGZhbHNlOwotICAgIHVuc2lnbmVk
IGVuZE9mZnNldCA9IHN0YXJ0T2Zmc2V0ICsgbGVuZ3RoIC0gMTsKKyAgICBib29sIG5lZWRSZXBh
aW50ID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICAv
LyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJhbmdlCi0gICAgICAgIGlm
IChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+IGVuZE9mZnNldCkKKyAgICAgICAgLy8gU3RvcCBpZiB3
ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZS4KKyAgICAgICAgaWYgKG1hcmtlci5z
dGFydE9mZnNldCgpID49IHJhbmdlLmVuZCkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IC8vIHNraXAgbWFya2VyIHRoYXQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb3IgaXMg
dGhlIHdyb25nIHR5cGUKLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8IHN0YXJ0T2Zm
c2V0KQorICAgICAgICAvLyBTa2lwIG1hcmtlciB0aGF0IGlzIGJlZm9yZSB0aGUgc3BlY2lmaWVk
IHJhbmdlLgorICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDwgcmFuZ2Uuc3RhcnQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAvLyBwaW4gdGhlIG1hcmtlciB0byB0aGUg
c3BlY2lmaWVkIHJhbmdlIGFuZCBhcHBseSB0aGUgc2hpZnQgZGVsdGEKLSAgICAgICAgZG9jRGly
dHkgPSB0cnVlOwotICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPCBzdGFydE9mZnNl
dCkKLSAgICAgICAgICAgIG1hcmtlci5zZXRTdGFydE9mZnNldChzdGFydE9mZnNldCk7Ci0gICAg
ICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBlbmRPZmZzZXQpCi0gICAgICAgICAgICBtYXJr
ZXIuc2V0RW5kT2Zmc2V0KGVuZE9mZnNldCk7Ci0gICAgICAgIG1hcmtlci5zaGlmdE9mZnNldHMo
ZGVsdGEpOworICAgICAgICAvLyBQaW4gdGhlIG1hcmtlciB0byB0aGUgc3BlY2lmaWVkIHJhbmdl
IGFuZCBhcHBseSB0aGUgc2hpZnQgZGVsdGEuCisgICAgICAgIGF1dG8gY29waWVkTWFya2VyID0g
bWFya2VyOworICAgICAgICBpZiAoY29waWVkTWFya2VyLnN0YXJ0T2Zmc2V0KCkgPCByYW5nZS5z
dGFydCkKKyAgICAgICAgICAgIGNvcGllZE1hcmtlci5zZXRTdGFydE9mZnNldChyYW5nZS5zdGFy
dCk7CisgICAgICAgIGlmIChjb3BpZWRNYXJrZXIuZW5kT2Zmc2V0KCkgPj0gcmFuZ2UuZW5kKQor
ICAgICAgICAgICAgY29waWVkTWFya2VyLnNldEVuZE9mZnNldChyYW5nZS5lbmQpOwogCi0gICAg
ICAgIGFkZE1hcmtlcihkc3ROb2RlLCBtYXJrZXIpOworICAgICAgICBhZGRNYXJrZXIoZGVzdGlu
YXRpb24sIFdURk1vdmUoY29waWVkTWFya2VyKSk7CisgICAgICAgIG5lZWRSZXBhaW50ID0gdHJ1
ZTsKICAgICB9CiAKLSAgICBpZiAoZG9jRGlydHkgJiYgZHN0Tm9kZS5yZW5kZXJlcigpKQotICAg
ICAgICBkc3ROb2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBpZiAobmVlZFJlcGFpbnQp
IHsKKyAgICAgICAgaWYgKGF1dG8gcmVuZGVyZXIgPSBkZXN0aW5hdGlvbi5yZW5kZXJlcigpKQor
ICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKKyAgICB9CiB9CiAKLXZvaWQgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCBpbnQgbGVuZ3RoLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGU+IG1hcmtlclR5cGVzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmls
dGVyRnVuY3Rpb24sIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyT3JOb3Qgc2hvdWxk
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpCit2b2lkIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBPZmZzZXRSYW5nZSByYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgY29uc3QgRnVuY3Rpb248
Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyLCBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlck9yTm90IHNob3VsZFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
KQogewotICAgIGlmIChsZW5ndGggPD0gMCkKKyAgICBpZiAocmFuZ2Uuc3RhcnQgPj0gcmFuZ2Uu
ZW5kKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJr
ZXJUeXBlcykpCisgICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnModHlwZXMpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgQVNTRVJUKCEobV9tYXJrZXJzLmlzRW1wdHkoKSkpOworICAgIEFTU0VSVCgh
bV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAg
aWYgKCFsaXN0KQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIGRvY0RpcnR5ID0gZmFsc2U7
Ci0gICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgKyBsZW5ndGg7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7KSB7Ci0gICAgICAgIERvY3VtZW50TWFy
a2VyIG1hcmtlciA9IGxpc3QtPmF0KGkpOworICAgIGJvb2wgbmVlZFJlcGFpbnQgPSBmYWxzZTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxpc3QtPnNpemUoKTsgKSB7CisgICAgICAgIGF1
dG8mIG1hcmtlciA9IGxpc3QtPmF0KGkpOwogCiAgICAgICAgIC8vIG1hcmtlcnMgYXJlIHJldHVy
bmVkIGluIG9yZGVyLCBzbyBzdG9wIGlmIHdlIGFyZSBub3cgcGFzdCB0aGUgc3BlY2lmaWVkIHJh
bmdlCi0gICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+PSBlbmRPZmZzZXQpCisgICAg
ICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQoKSA+PSByYW5nZS5lbmQpCiAgICAgICAgICAgICBi
cmVhazsKIAogICAgICAgICAvLyBza2lwIG1hcmtlciB0aGF0IGlzIHdyb25nIHR5cGUgb3IgYmVm
b3JlIHRhcmdldAotICAgICAgICBpZiAobWFya2VyLmVuZE9mZnNldCgpIDw9IHN0YXJ0T2Zmc2V0
IHx8ICFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICBpZiAo
bWFya2VyLmVuZE9mZnNldCgpIDw9IHJhbmdlLnN0YXJ0IHx8ICF0eXBlcy5jb250YWlucyhtYXJr
ZXIudHlwZSgpKSkgewogICAgICAgICAgICAgaSsrOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoZmlsdGVyRnVuY3Rpb24gJiYgIWZpbHRlckZ1bmN0aW9u
KCZtYXJrZXIpKSB7CisgICAgICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihtYXJrZXIpKSB7CiAg
ICAgICAgICAgICBpKys7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAg
ICAgIC8vIGF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IG1hcmtlciBhbmQgdGFyZ2V0IGludGVy
c2VjdCBpbiBzb21lIHdheQotICAgICAgICBkb2NEaXJ0eSA9IHRydWU7CisgICAgICAgIC8vIEF0
IHRoaXMgcG9pbnQgd2Uga25vdyB0aGF0IG1hcmtlciBhbmQgdGFyZ2V0IGludGVyc2VjdCBpbiBz
b21lIHdheS4KKyAgICAgICAgbmVlZFJlcGFpbnQgPSB0cnVlOwogCi0gICAgICAgIC8vIHBpdGNo
IHRoZSBvbGQgbWFya2VyCisgICAgICAgIERvY3VtZW50TWFya2VyIGNvcGllZE1hcmtlciA9IG1h
cmtlcjsKICAgICAgICAgbGlzdC0+cmVtb3ZlKGkpOwotCiAgICAgICAgIGlmIChzaG91bGRSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcikKLSAgICAgICAgICAgIC8vIFN0b3AgaGVyZS4g
RG9uJ3QgYWRkIHJlc3VsdGluZyBzbGljZXMgYmFjay4KICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIC8vIGFkZCBlaXRoZXIgb2YgdGhlIHJlc3VsdGluZyBzbGljZXMgdGhhdCBhcmUg
bGVmdCBhZnRlciByZW1vdmluZyB0YXJnZXQKLSAgICAgICAgaWYgKHN0YXJ0T2Zmc2V0ID4gbWFy
a2VyLnN0YXJ0T2Zmc2V0KCkpIHsKLSAgICAgICAgICAgIERvY3VtZW50TWFya2VyIG5ld0xlZnQg
PSBtYXJrZXI7Ci0gICAgICAgICAgICBuZXdMZWZ0LnNldEVuZE9mZnNldChzdGFydE9mZnNldCk7
Ci0gICAgICAgICAgICBsaXN0LT5pbnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihuZXdM
ZWZ0KSk7Ci0gICAgICAgICAgICAvLyBpIG5vdyBwb2ludHMgdG8gdGhlIG5ld2x5LWluc2VydGVk
IG5vZGUsIGJ1dCB3ZSB3YW50IHRvIHNraXAgdGhhdCBvbmUKKyAgICAgICAgLy8gQWRkIGVpdGhl
ciBvZiB0aGUgcmVzdWx0aW5nIHNsaWNlcyB0aGF0IHJlbWFpbiBhZnRlciByZW1vdmluZyB0YXJn
ZXQuCisgICAgICAgIGlmIChyYW5nZS5zdGFydCA+IGNvcGllZE1hcmtlci5zdGFydE9mZnNldCgp
KSB7CisgICAgICAgICAgICBhdXRvIG5ld0xlZnQgPSBjb3BpZWRNYXJrZXI7CisgICAgICAgICAg
ICBuZXdMZWZ0LnNldEVuZE9mZnNldChyYW5nZS5zdGFydCk7CisgICAgICAgICAgICBsaXN0LT5p
bnNlcnQoaSwgUmVuZGVyZWREb2N1bWVudE1hcmtlcihXVEZNb3ZlKG5ld0xlZnQpKSk7CiAgICAg
ICAgICAgICBpKys7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA+
IGVuZE9mZnNldCkgewotICAgICAgICAgICAgRG9jdW1lbnRNYXJrZXIgbmV3UmlnaHQgPSBtYXJr
ZXI7Ci0gICAgICAgICAgICBuZXdSaWdodC5zZXRTdGFydE9mZnNldChlbmRPZmZzZXQpOwotICAg
ICAgICAgICAgbGlzdC0+aW5zZXJ0KGksIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIobmV3UmlnaHQp
KTsKLSAgICAgICAgICAgIC8vIGkgbm93IHBvaW50cyB0byB0aGUgbmV3bHktaW5zZXJ0ZWQgbm9k
ZSwgYnV0IHdlIHdhbnQgdG8gc2tpcCB0aGF0IG9uZQorICAgICAgICBpZiAoY29waWVkTWFya2Vy
LmVuZE9mZnNldCgpID4gcmFuZ2UuZW5kKSB7CisgICAgICAgICAgICBjb3BpZWRNYXJrZXIuc2V0
U3RhcnRPZmZzZXQocmFuZ2UuZW5kKTsKKyAgICAgICAgICAgIGxpc3QtPmluc2VydChpLCBSZW5k
ZXJlZERvY3VtZW50TWFya2VyKFdURk1vdmUoY29waWVkTWFya2VyKSkpOwogICAgICAgICAgICAg
aSsrOwogICAgICAgICB9CiAgICAgfQpAQCAtNTIxLDExNyArNDI2LDExNyBAQCB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgaQogICAgICAgICAgICAgbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMg
PSB7IH07CiAgICAgfQogCi0gICAgaWYgKGRvY0RpcnR5ICYmIG5vZGUucmVuZGVyZXIoKSkKLSAg
ICAgICAgbm9kZS5yZW5kZXJlcigpLT5yZXBhaW50KCk7CisgICAgaWYgKG5lZWRSZXBhaW50KSB7
CisgICAgICAgIGlmIChhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpKQorICAgICAgICAg
ICAgcmVuZGVyZXItPnJlcGFpbnQoKTsKKyAgICB9CiB9CiAKLURvY3VtZW50TWFya2VyKiBEb2N1
bWVudE1hcmtlckNvbnRyb2xsZXI6Om1hcmtlckNvbnRhaW5pbmdQb2ludChjb25zdCBMYXlvdXRQ
b2ludCYgcG9pbnQsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIG1hcmtlclR5cGUpCitEb2N1
bWVudE1hcmtlciogRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjptYXJrZXJDb250YWluaW5nUG9p
bnQoY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSB0
eXBlKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGUpKQorICAgIGlm
ICghcG9zc2libHlIYXNNYXJrZXJzKHR5cGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBBU1NFUlQoIShtX21hcmtlcnMuaXNFbXB0eSgpKSk7Ci0KLSAgICB1cGRhdGVSZWN0c0Zvcklu
dmFsaWRhdGVkTWFya2Vyc09mVHlwZShtYXJrZXJUeXBlKTsKLQotICAgIGZvciAoYXV0byYgbm9k
ZUFuZE1hcmtlcnMgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgZm9yIChhdXRvJiBtYXJrZXIgOiAq
bm9kZUFuZE1hcmtlcnMudmFsdWUpIHsKLSAgICAgICAgICAgIGlmIChtYXJrZXIudHlwZSgpICE9
IG1hcmtlclR5cGUpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgQVNTRVJUKCFtX21h
cmtlcnMuaXNFbXB0eSgpKTsKIAotICAgICAgICAgICAgaWYgKG1hcmtlci5jb250YWlucyhwb2lu
dCkpCisgICAgdXBkYXRlUmVjdHNGb3JJbnZhbGlkYXRlZE1hcmtlcnNPZlR5cGUodHlwZSk7Cisg
ICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2Vycy52YWx1ZXMoKSkgeworICAgICAg
ICBmb3IgKGF1dG8mIG1hcmtlciA6ICpub2RlTWFya2VycykgeworICAgICAgICAgICAgaWYgKG1h
cmtlci50eXBlKCkgPT0gdHlwZSAmJiBtYXJrZXIuY29udGFpbnMocG9pbnQpKQogICAgICAgICAg
ICAgICAgIHJldHVybiAmbWFya2VyOwogICAgICAgICB9CiAgICAgfQotCiAgICAgcmV0dXJuIG51
bGxwdHI7CiB9CiAKLVZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjptYXJrZXJzRm9yKE5vZGUmIG5vZGUsIE9wdGlvblNldDxEb2N1bWVudE1h
cmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1h
cmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFya2Vyc0ZvcihOb2RlJiBub2RlLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBpZiAoIXBvc3NpYmx5SGFzTWFy
a2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybiB7IH07CiAKICAgICBWZWN0b3I8UmVuZGVyZWRE
b2N1bWVudE1hcmtlcio+IHJlc3VsdDsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldCgmbm9kZSk7CisgICAgYXV0byBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7CiAgICAg
aWYgKCFsaXN0KQogICAgICAgICByZXR1cm4gcmVzdWx0OwogCiAgICAgZm9yIChhdXRvJiBtYXJr
ZXIgOiAqbGlzdCkgewotICAgICAgICBpZiAobWFya2VyVHlwZXMuY29udGFpbnMobWFya2VyLnR5
cGUoKSkpCisgICAgICAgIGlmICh0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkKICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJm1hcmtlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBEb2N1bWVudE1hcmtlckNv
bnRyb2xsZXI6Om1hcmtlcnNJblJhbmdlKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpmb3JFYWNoKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3Vt
ZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcywgRnVuY3Rpb248Ym9vbChSZW5kZXJlZERvY3Vt
ZW50TWFya2VyJik+IGZ1bmN0aW9uKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1h
cmtlclR5cGVzKSkKLSAgICAgICAgcmV0dXJuIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Kj4oKTsKLQotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4gZm91bmRNYXJrZXJz
OwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOwot
ICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOworICAgIGlmICgh
cG9zc2libHlIYXNNYXJrZXJzKHR5cGVzKSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCgh
bV9tYXJrZXJzLmlzRW1wdHkoKSk7CiAKLSAgICBOb2RlKiBwYXN0TGFzdE5vZGUgPSByYW5nZS5w
YXN0TGFzdE5vZGUoKTsKLSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsg
bm9kZSAhPSBwYXN0TGFzdE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkg
ewotICAgICAgICBBU1NFUlQobm9kZSk7Ci0gICAgICAgIGZvciAoYXV0byogbWFya2VyIDogbWFy
a2Vyc0Zvcigqbm9kZSkpIHsKLSAgICAgICAgICAgIGlmICghbWFya2VyVHlwZXMuY29udGFpbnMo
bWFya2VyLT50eXBlKCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gcmFu
Z2Uuc3RhcnRPZmZzZXQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChub2RlID09ICZlbmRDb250YWluZXIgJiYgbWFya2VyLT5zdGFydE9mZnNldCgpID49IHJh
bmdlLmVuZE9mZnNldCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
Zm91bmRNYXJrZXJzLmFwcGVuZChtYXJrZXIpOworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVy
c2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBpZiAoYXV0byBsaXN0ID0gbV9tYXJrZXJz
LmdldCgmbm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8gb2Zmc2V0UmFuZ2UgPSBjaGFyYWN0ZXJE
YXRhT2Zmc2V0UmFuZ2UocmFuZ2UsIG5vZGUpOworICAgICAgICAgICAgZm9yIChhdXRvJiBtYXJr
ZXIgOiAqbGlzdCkgeworICAgICAgICAgICAgICAgIC8vIE1hcmtlcnMgYXJlIHN0b3JlZCBpbiBv
cmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZS4KKyAg
ICAgICAgICAgICAgICBpZiAobWFya2VyLnN0YXJ0T2Zmc2V0KCkgPj0gb2Zmc2V0UmFuZ2UuZW5k
KQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCgpID4gb2Zmc2V0UmFuZ2Uuc3RhcnQgJiYgdHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uKG1hcmtlcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiBmb3VuZE1hcmtlcnM7CiB9CiAK
LXZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE5vZGUmIG5vZGUs
IE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCitWZWN0
b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6bWFy
a2Vyc0luUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJz
KG1hcmtlclR5cGVzKSkKKyAgICAvLyBGSVhNRTogQ29uc2lkZXIgbWFraW5nIGZvckVhY2ggcHVi
bGljIGFuZCBjaGFuZ2luZyBjYWxsZXJzIHRvIHVzZSB0aGF0IGZ1bmN0aW9uIGluc3RlYWQgb2Yg
dGhpcyBvbmUuCisgICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzOwor
ICAgIGZvckVhY2gocmFuZ2UsIHR5cGVzLCBbJl0gKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1h
cmtlcikgeworICAgICAgICBtYXJrZXJzLmFwcGVuZCgmbWFya2VyKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0pOworICAgIHJldHVybiBtYXJrZXJzOworfQorCit2b2lkIERvY3VtZW50
TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2VycyhOb2RlJiBub2RlLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQoreworICAgIGlmICghcG9zc2libHlIYXNN
YXJrZXJzKHR5cGVzKSkKICAgICAgICAgcmV0dXJuOwogICAgIEFTU0VSVCghbV9tYXJrZXJzLmlz
RW1wdHkoKSk7CiAgICAgCiAgICAgYXV0byBpdGVyYXRvciA9IG1fbWFya2Vycy5maW5kKCZub2Rl
KTsKICAgICBpZiAoaXRlcmF0b3IgIT0gbV9tYXJrZXJzLmVuZCgpKQotICAgICAgICByZW1vdmVN
YXJrZXJzRnJvbUxpc3QoaXRlcmF0b3IsIG1hcmtlclR5cGVzKTsKKyAgICAgICAgcmVtb3ZlTWFy
a2Vyc0Zyb21MaXN0KGl0ZXJhdG9yLCB0eXBlcyk7CiB9CiAKLXZvaWQgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpyZW1vdmVNYXJrZXJzKE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3Zl
TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHR5cGVzKQogewot
ICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAgICBpZiAoIXBvc3Np
Ymx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFy
a2Vycy5pc0VtcHR5KCkpOwogCi0gICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9yKG1f
bWFya2Vycy5rZXlzKCkpKSB7Ci0gICAgICAgIGF1dG8gaXRlcmF0b3IgPSBtX21hcmtlcnMuZmlu
ZChub2RlKTsKLSAgICAgICAgaWYgKGl0ZXJhdG9yICE9IG1fbWFya2Vycy5lbmQoKSkKLSAgICAg
ICAgICAgIHJlbW92ZU1hcmtlcnNGcm9tTGlzdChpdGVyYXRvciwgbWFya2VyVHlwZXMpOwotICAg
IH0KLQotICAgIG1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLnJlbW92ZShtYXJrZXJUeXBl
cyk7CisgICAgZm9yIChhdXRvJiBub2RlIDogY29weVRvVmVjdG9yKG1fbWFya2Vycy5rZXlzKCkp
KQorICAgICAgICByZW1vdmVNYXJrZXJzRnJvbUxpc3QobV9tYXJrZXJzLmZpbmQobm9kZSksIHR5
cGVzKTsKKyAgICBtX3Bvc3NpYmx5RXhpc3RpbmdNYXJrZXJUeXBlcy5yZW1vdmUodHlwZXMpOwog
fQogCi12b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6cmVtb3ZlTWFya2Vyc0Zyb21MaXN0
KE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gbWFya2VyVHlwZXMpCit2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6
cmVtb3ZlTWFya2Vyc0Zyb21MaXN0KE1hcmtlck1hcDo6aXRlcmF0b3IgaXRlcmF0b3IsIE9wdGlv
blNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gdHlwZXMpCiB7CiAgICAgYm9vbCBuZWVk
c1JlcGFpbnRpbmcgPSBmYWxzZTsKICAgICBib29sIGxpc3RDYW5CZVJlbW92ZWQ7CiAKLSAgICBp
ZiAobWFya2VyVHlwZXMgPT0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkgeworICAgIGlm
ICh0eXBlcyA9PSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSB7CiAgICAgICAgIG5lZWRz
UmVwYWludGluZyA9IHRydWU7CiAgICAgICAgIGxpc3RDYW5CZVJlbW92ZWQgPSB0cnVlOwogICAg
IH0gZWxzZSB7Ci0gICAgICAgIE1hcmtlckxpc3QqIGxpc3QgPSBpdGVyYXRvci0+dmFsdWUuZ2V0
KCk7CisgICAgICAgIGF1dG8gbGlzdCA9IGl0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIAogICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBsaXN0LT5zaXplKCk7ICkgewogICAgICAgICAgICAg
RG9jdW1lbnRNYXJrZXIgbWFya2VyID0gbGlzdC0+YXQoaSk7CiAKICAgICAgICAgICAgIC8vIHNr
aXAgbm9kZXMgdGhhdCBhcmUgbm90IG9mIHRoZSBzcGVjaWZpZWQgdHlwZQotICAgICAgICAgICAg
aWYgKCFtYXJrZXJUeXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgeworICAgICAgICAgICAg
aWYgKCF0eXBlcy5jb250YWlucyhtYXJrZXIudHlwZSgpKSkgewogICAgICAgICAgICAgICAgICsr
aTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTY1NywzMSAr
NTYyLDIwIEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpyZW1vdmVNYXJrZXJzRnJv
bUxpc3QoTWFya2VyTWFwOjppdGVyYXRvciBpdGVyYXRvCiAgICAgfQogfQogCi12b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6cmVwYWludE1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpyZXBhaW50TWFya2VycyhPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+
IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVzKSkKKyAg
ICBpZiAoIXBvc3NpYmx5SGFzTWFya2Vycyh0eXBlcykpCiAgICAgICAgIHJldHVybjsKICAgICBB
U1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5KCkpOwogCi0gICAgLy8gb3V0ZXIgbG9vcDogcHJvY2Vz
cyBlYWNoIG1hcmtlcmVkIG5vZGUgaW4gdGhlIGRvY3VtZW50Ci0gICAgZm9yIChhdXRvJiBtYXJr
ZXIgOiBtX21hcmtlcnMpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IG1hcmtlci5rZXkuZ2V0KCk7
Ci0KLSAgICAgICAgLy8gaW5uZXIgbG9vcDogcHJvY2VzcyBlYWNoIG1hcmtlciBpbiB0aGUgY3Vy
cmVudCBub2RlCi0gICAgICAgIGJvb2wgbm9kZU5lZWRzUmVwYWludCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKGF1dG8mIGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkgewotICAgICAgICAg
ICAgaWYgKG1hcmtlclR5cGVzLmNvbnRhaW5zKGRvY3VtZW50TWFya2VyLnR5cGUoKSkpIHsKLSAg
ICAgICAgICAgICAgICBub2RlTmVlZHNSZXBhaW50ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8mIG5v
ZGVNYXJrZXJzIDogbV9tYXJrZXJzKSB7CisgICAgICAgIGZvciAoYXV0byYgbWFya2VyIDogKm5v
ZGVNYXJrZXJzLnZhbHVlKSB7CisgICAgICAgICAgICBpZiAodHlwZXMuY29udGFpbnMobWFya2Vy
LnR5cGUoKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGVNYXJr
ZXJzLmtleS0+cmVuZGVyZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVuZGVyZXItPnJlcGFp
bnQoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
Ci0gICAgICAgIGlmICghbm9kZU5lZWRzUmVwYWludCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIC8vIGNhdXNlIHRoZSBub2RlIHRvIGJlIHJlZHJhd24KLSAgICAgICAgaWYgKGF1
dG8gcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpKQotICAgICAgICAgICAgcmVuZGVyZXItPnJl
cGFpbnQoKTsKICAgICB9CiB9CiAKQEAgLTY5MSwxNSArNTg1LDE2IEBAIHZvaWQgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRP
ZmZzZXQsIGluCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5
KCkpOwogCi0gICAgTWFya2VyTGlzdCogbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOworICAg
IGF1dG8gbGlzdCA9IG1fbWFya2Vycy5nZXQoJm5vZGUpOwogICAgIGlmICghbGlzdCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYm9vbCBkaWRTaGlmdE1hcmtlciA9IGZhbHNlOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpICE9IGxpc3QtPnNpemUoKTsgKSB7Ci0gICAgICAgIFJlbmRlcmVkRG9j
dW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotICAgICAgICAvLyBGSVhNRTogSG93
IGNhbiB0aGlzIHBvc3NpYmx5IGJlIGlPUy1zcGVjaWZpYyBjb2RlPworICAgICAgICBhdXRvJiBt
YXJrZXIgPSBsaXN0LT5hdChpKTsKKwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgICAg
IC8vIEZJWE1FOiBObyBvYnZpb3VzIHJlYXNvbiB0aGlzIHNob3VsZCBiZSBpT1Mtc3BlY2lmaWMu
IFJlbW92ZSB0aGUgI2lmIGF0IHNvbWUgcG9pbnQuCiAgICAgICAgIGludCB0YXJnZXRTdGFydE9m
ZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpICsgZGVsdGE7CiAgICAgICAgIGludCB0YXJnZXRF
bmRPZmZzZXQgPSBtYXJrZXIuZW5kT2Zmc2V0KCkgKyBkZWx0YTsKICAgICAgICAgaWYgKHRhcmdl
dFN0YXJ0T2Zmc2V0ID49IG5vZGUubWF4Q2hhcmFjdGVyT2Zmc2V0KCkgfHwgdGFyZ2V0RW5kT2Zm
c2V0IDw9IDApIHsKQEAgLTcwNywxNiArNjAyLDE1IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpzaGlmdE1hcmtlcnMoTm9kZSYgbm9kZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIGlu
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCisKICAgICAgICAgaWYg
KG1hcmtlci5zdGFydE9mZnNldCgpID49IHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICBBU1NF
UlQoKGludCltYXJrZXIuc3RhcnRPZmZzZXQoKSArIGRlbHRhID49IDApOwogICAgICAgICAgICAg
bWFya2VyLnNoaWZ0T2Zmc2V0cyhkZWx0YSk7CiAgICAgICAgICAgICBkaWRTaGlmdE1hcmtlciA9
IHRydWU7Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgICAgIH0KLSNlbHNlCi0gICAg
ICAgIC8vIEZJWE1FOiBJbnNlcnRpbmcgdGV4dCBpbnNpZGUgYSBEb2N1bWVudE1hcmtlciBkb2Vz
IG5vdCBncm93IHRoZSBtYXJrZXIuCi0gICAgICAgIC8vIFNlZSA8aHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTYyNTA0Pi4KLSAgICAgICAgfSBlbHNlIGlmIChtYXJrZXIu
ZW5kT2Zmc2V0KCkgPiBzdGFydE9mZnNldCkgeworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgICAgIC8vIEZJWE1FOiBObyBvYnZpb3VzIHJlYXNvbiB0aGlzIHNob3VsZCBiZSBpT1Mtc3Bl
Y2lmaWMuIFJlbW92ZSB0aGUgI2lmIGF0IHNvbWUgcG9pbnQuCisgICAgICAgIGVsc2UgaWYgKG1h
cmtlci5lbmRPZmZzZXQoKSA+IHN0YXJ0T2Zmc2V0KSB7CiAgICAgICAgICAgICBpZiAobWFya2Vy
LmVuZE9mZnNldCgpICsgZGVsdGEgPD0gbWFya2VyLnN0YXJ0T2Zmc2V0KCkpIHsKICAgICAgICAg
ICAgICAgICBsaXN0LT5yZW1vdmUoaSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC03
MjUsMTQwICs2MTksNTggQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNoaWZ0TWFy
a2VycyhOb2RlJiBub2RlLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgaW4KICAgICAgICAgICAgIGRp
ZFNoaWZ0TWFya2VyID0gdHJ1ZTsKICAgICAgICAgfQogI2VuZGlmCisKICAgICAgICAgKytpOwog
ICAgIH0KIAogICAgIGlmIChkaWRTaGlmdE1hcmtlcikgewogICAgICAgICBpbnZhbGlkYXRlUmVj
dHNGb3JNYXJrZXJzSW5Ob2RlKG5vZGUpOwotCi0gICAgICAgIGlmIChub2RlLnJlbmRlcmVyKCkp
Ci0gICAgICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKLSAgICB9Ci19Ci0KLXZv
aWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpzZXRNYXJrZXJzQWN0aXZlKFJhbmdlJiByYW5n
ZSwgYm9vbCBhY3RpdmUpCi17Ci0gICAgaWYgKCFwb3NzaWJseUhhc01hcmtlcnMoRG9jdW1lbnRN
YXJrZXI6OmFsbE1hcmtlcnMoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fbWFy
a2Vycy5pc0VtcHR5KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFy
dENvbnRhaW5lcigpOwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5l
cigpOwotCi0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0K
LSAgICBmb3IgKE5vZGUqIG5vZGUgPSByYW5nZS5maXJzdE5vZGUoKTsgbm9kZSAhPSBwYXN0TGFz
dE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG5vZGUgPT0gJnN0YXJ0Q29udGFpbmVyID8gcmFuZ2Uuc3RhcnRP
ZmZzZXQoKSA6IDA7Ci0gICAgICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG5vZGUgPT0gJmVuZENv
bnRhaW5lciA/IHJhbmdlLmVuZE9mZnNldCgpIDogc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpOwotICAgICAgICBzZXRNYXJrZXJzQWN0aXZlKCpub2RlLCBzdGFydE9mZnNldCwg
ZW5kT2Zmc2V0LCBhY3RpdmUpOworICAgICAgICBpZiAoYXV0byByZW5kZXJlciA9IG5vZGUucmVu
ZGVyZXIoKSkKKyAgICAgICAgICAgIHJlbmRlcmVyLT5yZXBhaW50KCk7CiAgICAgfQogfQogCi12
b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6c2V0TWFya2Vyc0FjdGl2ZShOb2RlJiBub2Rl
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0LCBib29sIGFjdGl2ZSkK
K2Jvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB0eXBlcykK
IHsKLSAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJzLmdldCgmbm9kZSk7Ci0gICAgaWYg
KCFsaXN0KQotICAgICAgICByZXR1cm47Ci0KLSAgICBib29sIGRpZEFjdGl2YXRlTWFya2VyID0g
ZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBtYXJrZXIgOiAqbGlzdCkgewotICAgICAgICAvLyBNYXJr
ZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUgbm93IHBhc3QgdGhl
IHNwZWNpZmllZCByYW5nZS4KLSAgICAgICAgaWYgKG1hcmtlci5zdGFydE9mZnNldCgpID49IGVu
ZE9mZnNldCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIFNraXAgbWFya2VyIHRo
YXQgaXMgd3JvbmcgdHlwZSBvciBiZWZvcmUgdGFyZ2V0LgotICAgICAgICBpZiAobWFya2VyLmVu
ZE9mZnNldCgpIDwgc3RhcnRPZmZzZXQgfHwgbWFya2VyLnR5cGUoKSAhPSBEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgbWFya2VyLnNl
dEFjdGl2ZU1hdGNoKGFjdGl2ZSk7Ci0gICAgICAgIGRpZEFjdGl2YXRlTWFya2VyID0gdHJ1ZTsK
LSAgICB9Ci0KLSAgICBpZiAoZGlkQWN0aXZhdGVNYXJrZXIgJiYgbm9kZS5yZW5kZXJlcigpKQot
ICAgICAgICBub2RlLnJlbmRlcmVyKCktPnJlcGFpbnQoKTsKKyAgICBib29sIGZvdW5kTWFya2Vy
ID0gZmFsc2U7CisgICAgZm9yRWFjaChyYW5nZSwgdHlwZXMsIFsmXSAoUmVuZGVyZWREb2N1bWVu
dE1hcmtlciYpIHsKKyAgICAgICAgZm91bmRNYXJrZXIgPSB0cnVlOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9KTsKKyAgICByZXR1cm4gZm91bmRNYXJrZXI7CiB9CiAKLWJvb2wgRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERv
Y3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlcykKK3ZvaWQgRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyOjpjbGVhckRlc2NyaXB0aW9uT25NYXJrZXJzSW50ZXJzZWN0aW5nUmFuZ2Uo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGU+IHR5cGVzKQogewotICAgIGlmICghcG9zc2libHlIYXNNYXJrZXJzKG1hcmtlclR5cGVz
KSkKKyAgICBmb3JFYWNoKHJhbmdlLCB0eXBlcywgWyZdIChSZW5kZXJlZERvY3VtZW50TWFya2Vy
JiBtYXJrZXIpIHsKKyAgICAgICAgbWFya2VyLmNsZWFyRGF0YSgpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgQVNTRVJUKCFtX21hcmtlcnMuaXNFbXB0eSgpKTsKLQotICAgIE5vZGUmIHN0
YXJ0Q29udGFpbmVyID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBOb2RlJiBlbmRDb250
YWluZXIgPSByYW5nZS5lbmRDb250YWluZXIoKTsKLQotICAgIE5vZGUqIHBhc3RMYXN0Tm9kZSA9
IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0
Tm9kZSgpOyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQo
Km5vZGUpKSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJr
ZXIgOiBtYXJrZXJzRm9yKCpub2RlKSkgewotICAgICAgICAgICAgaWYgKCFtYXJrZXJUeXBlcy5j
b250YWlucyhtYXJrZXItPnR5cGUoKSkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBpZiAobm9kZSA9PSAmc3RhcnRDb250YWluZXIgJiYgbWFya2VyLT5lbmRPZmZzZXQo
KSA8PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uuc3RhcnRPZmZzZXQoKSkpCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAobm9kZSA9PSAmZW5kQ29udGFpbmVy
ICYmIG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2Uu
ZW5kT2Zmc2V0KCkpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lk
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6Y2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVy
c2VjdGluZ1JhbmdlKFJhbmdlJiByYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlPiBtYXJrZXJUeXBlcykKLXsKLSAgICBpZiAoIXBvc3NpYmx5SGFzTWFya2VycyhtYXJr
ZXJUeXBlcykpCi0gICAgICAgIHJldHVybjsKLSAgICBBU1NFUlQoIW1fbWFya2Vycy5pc0VtcHR5
KCkpOwotCi0gICAgTm9kZSYgc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydENvbnRhaW5lcigp
OwotICAgIE5vZGUmIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZENvbnRhaW5lcigpOwotCi0gICAg
Tm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2Rl
KiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0g
Tm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgdW5zaWduZWQgc3RhcnRPZmZz
ZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lciA/IHJhbmdlLnN0YXJ0T2Zmc2V0KCkgOiAwOwot
ICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBub2RlID09ICZlbmRDb250YWluZXIgPyBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocmFuZ2UuZW5kT2Zmc2V0KCkpIDogc3RkOjpudW1lcmljX2xpbWl0
czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICBNYXJrZXJMaXN0KiBsaXN0ID0gbV9tYXJrZXJz
LmdldChub2RlKTsKLSAgICAgICAgaWYgKCFsaXN0KQotICAgICAgICAgICAgY29udGludWU7Ci0K
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsaXN0LT5zaXplKCk7ICsraSkgewotICAg
ICAgICAgICAgRG9jdW1lbnRNYXJrZXImIG1hcmtlciA9IGxpc3QtPmF0KGkpOwotCi0gICAgICAg
ICAgICAvLyBtYXJrZXJzIGFyZSByZXR1cm5lZCBpbiBvcmRlciwgc28gc3RvcCBpZiB3ZSBhcmUg
bm93IHBhc3QgdGhlIHNwZWNpZmllZCByYW5nZQotICAgICAgICAgICAgaWYgKG1hcmtlci5zdGFy
dE9mZnNldCgpID49IGVuZE9mZnNldCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICAgICAgLy8gc2tpcCBtYXJrZXIgdGhhdCBpcyB3cm9uZyB0eXBlIG9yIGJlZm9yZSB0YXJnZXQK
LSAgICAgICAgICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPD0gc3RhcnRPZmZzZXQgfHwgIW1h
cmtlclR5cGVzLmNvbnRhaW5zKG1hcmtlci50eXBlKCkpKSB7Ci0gICAgICAgICAgICAgICAgaSsr
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBtYXJrZXIuY2xlYXJEYXRhKCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgfSk7CiB9CiAKICNp
ZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCisKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
OjpzaG93TWFya2VycygpIGNvbnN0CiB7CiAgICAgZnByaW50ZihzdGRlcnIsICIlZCBub2RlcyBo
YXZlIG1hcmtlcnM6XG4iLCBtX21hcmtlcnMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG1hcmtl
ciA6IG1fbWFya2VycykgewotICAgICAgICBOb2RlKiBub2RlID0gbWFya2VyLmtleS5nZXQoKTsK
LSAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcCIsIG5vZGUpOwotICAgICAgICBmb3IgKGF1dG8m
IGRvY3VtZW50TWFya2VyIDogKm1hcmtlci52YWx1ZSkKLSAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiICVkOlslZDolZF0oJWQpIiwgZG9jdW1lbnRNYXJrZXIudHlwZSgpLCBkb2N1bWVudE1h
cmtlci5zdGFydE9mZnNldCgpLCBkb2N1bWVudE1hcmtlci5lbmRPZmZzZXQoKSwgZG9jdW1lbnRN
YXJrZXIuaXNBY3RpdmVNYXRjaCgpKTsKLQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7
CisgICAgZm9yIChhdXRvJiBub2RlTWFya2VycyA6IG1fbWFya2VycykgeworICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIiVwIiwgbm9kZU1hcmtlcnMua2V5LmdldCgpKTsKKyAgICAgICAgZm9yIChh
dXRvJiBtYXJrZXIgOiAqbm9kZU1hcmtlcnMudmFsdWUpCisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAlZDpbJWQ6JWRdIiwgbWFya2VyLnR5cGUoKSwgbWFya2VyLnN0YXJ0T2Zmc2V0KCks
IG1hcmtlci5lbmRPZmZzZXQoKSk7CisgICAgICAgIGZwdXRjKCdcbicsIHN0ZGVycik7CiAgICAg
fQogfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRS
RUVfREVCVUdHSU5HKQorCiB2b2lkIHNob3dEb2N1bWVudE1hcmtlcnMoY29uc3QgV2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKiBjb250cm9sbGVyKQogewogICAgIGlmIChjb250cm9s
bGVyKQogICAgICAgICBjb250cm9sbGVyLT5zaG93TWFya2VycygpOwogfQorCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCA2MzA1
YWE2NmMxNmU2OWNjNjc1NmRlMjg4NTkyYmVjZmM4ODAxMTEwLi44NmViMGZkY2Y2YmNlNTA2ZDFm
M2ZhNTNmOWY4Njc0ZmM1ZmUyM2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFs
ZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDgsIDIwMDkgVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLykKICAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90
aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNSw2NSArMzUs
NDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIExheW91
dFBvaW50OwotY2xhc3MgTGF5b3V0UmVjdDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKIGNs
YXNzIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI7CitjbGFzcyBUZXh0OwogCiBzdHJ1Y3QgU2ltcGxl
UmFuZ2U7CiAKIGNsYXNzIERvY3VtZW50TWFya2VyQ29udHJvbGxlciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKTsgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CiBwdWJsaWM6Ci0KICAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIoRG9jdW1lbnQm
KTsKICAgICB+RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyKCk7CiAKICAgICB2b2lkIGRldGFjaCgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwg
RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgYWRk
TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIGNv
bnN0IFN0cmluZyYgZGVzY3JpcHRpb24pOwotICAgIHZvaWQgYWRkTWFya2VyVG9Ob2RlKE5vZGUm
LCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSk7Ci0gICAgdm9pZCBhZGRNYXJrZXJUb05vZGUoTm9kZSYsIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBE
b2N1bWVudE1hcmtlcjo6RGF0YSYmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZFRleHRN
YXRjaE1hcmtlcihjb25zdCBSYW5nZSYsIGJvb2wgYWN0aXZlTWF0Y2gpOwotI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCi0gICAgdm9pZCBhZGRNYXJrZXIoUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSwgY29uc3QgU3RyaW5nJiBkZXNjcmlwdGlvbiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGludGVycHJldGF0aW9ucywgY29uc3QgUmV0YWluUHRyPGlkPiYgbWV0YWRhdGEpOwotICAg
IHZvaWQgYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtlcihSYW5nZSYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBpbnRlcnByZXRhdGlvbnMpOwotICAgIHZvaWQgYWRkRGljdGF0
aW9uUmVzdWx0TWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgUmV0YWluUHRyPGlkPiYg
bWV0YWRhdGEpOwotI2VuZGlmCi0gICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihSYW5n
ZSYpOwogCi0jaWYgRU5BQkxFKFBMQVRGT1JNX0RSSVZFTl9URVhUX0NIRUNLSU5HKQotICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgYWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIoY29uc3QgU2lt
cGxlUmFuZ2UmLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0jZW5k
aWYKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYs
IERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlLCBjb25zdCBEb2N1bWVudE1hcmtlcjo6RGF0YSYg
PSB7IH0pOworICAgIHZvaWQgYWRkTWFya2VyKFRleHQmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJr
ZXI6OkRhdGEmJiA9IHsgfSk7CisgICAgdm9pZCBhZGREcmFnZ2VkQ29udGVudE1hcmtlcihjb25z
dCBTaW1wbGVSYW5nZSYpOwogCi0gICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzcmNOb2RlLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgaW50IGxlbmd0aCwgTm9kZSYgZHN0Tm9kZSwgaW50IGRlbHRh
KTsKLSAgICBib29sIGhhc01hcmtlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgQVNTRVJUKG1f
bWFya2Vycy5pc0VtcHR5KCkgPT0gIW1fcG9zc2libHlFeGlzdGluZ01hcmtlclR5cGVzLmNvbnRh
aW5zQW55KERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKLSAgICAgICAgcmV0dXJuICFt
X21hcmtlcnMuaXNFbXB0eSgpOwotICAgIH0KLSAgICBib29sIGhhc01hcmtlcnMoUmFuZ2UmLCBP
cHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFs
bE1hcmtlcnMoKSk7CisgICAgdm9pZCBjb3B5TWFya2VycyhOb2RlJiBzb3VyY2UsIE9mZnNldFJh
bmdlLCBOb2RlJiBkZXN0aW5hdGlvbik7CisgICAgYm9vbCBoYXNNYXJrZXJzKCkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50
TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogCiAg
ICAgLy8gV2hlbiBhIG1hcmtlciBwYXJ0aWFsbHkgb3ZlcmxhcHMgd2l0aCByYW5nZSwgaWYgcmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJzIGlzIHRydWUsIHdlIGNvbXBsZXRlbHkKICAg
ICAvLyByZW1vdmUgdGhlIG1hcmtlci4gSWYgdGhlIGFyZ3VtZW50IGlzIGZhbHNlLCB3ZSB3aWxs
IGFkanVzdCB0aGUgc3BhbiBvZiB0aGUgbWFya2VyIHNvIHRoYXQgaXQgcmV0YWlucwogICAgIC8v
IHRoZSBwb3J0aW9uIHRoYXQgaXMgb3V0c2lkZSBvZiB0aGUgcmFuZ2UuCiAgICAgZW51bSBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90IHsgRG9Ob3RSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlciwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgfTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoUmFuZ2UmLCBPcHRpb25TZXQ8RG9j
dW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwg
UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXJPck5vdCA9IERvTm90UmVtb3ZlUGFydGlh
bGx5T3ZlcmxhcHBpbmdNYXJrZXIpOwotICAgIHZvaWQgcmVtb3ZlTWFya2VycyhOb2RlJiwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIGludCBsZW5ndGgsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woRG9jdW1lbnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24gPSBudWxscHRyLCBSZW1vdmVQ
YXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZW1vdmVNYXJrZXJzKGNv
bnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9
IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5n
TWFya2VyT3JOb3QgPSBEb05vdFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAg
ICB2b2lkIHJlbW92ZU1hcmtlcnMoTm9kZSYsIE9mZnNldFJhbmdlLCBPcHRpb25TZXQ8RG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgY29u
c3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmlsdGVyRnVuY3Rpb24g
PSBudWxscHRyLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RS
ZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICAvLyBSZXR1cm4gZmFsc2Ug
ZnJvbSBmaWx0ZXJGdW5jdGlvbiB0byByZW1vdmUgdGhlIG1hcmtlci4KLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGZpbHRlck1hcmtlcnMoUmFuZ2UmLCBzdGQ6OmZ1bmN0aW9uPGJvb2woRG9jdW1l
bnRNYXJrZXIqKT4gZmlsdGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlP
dmVybGFwcGluZ01hcmtlck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcik7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBmaWx0ZXJNYXJrZXJzKGNvbnN0IFNpbXBs
ZVJhbmdlJiwgY29uc3QgRnVuY3Rpb248Ym9vbChjb25zdCBEb2N1bWVudE1hcmtlciYpPiYgZmls
dGVyRnVuY3Rpb24sIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4gPSBEb2N1
bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtl
ck9yTm90ID0gRG9Ob3RSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CiAKICAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZU1hcmtlcnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQg
cmVtb3ZlTWFya2VycyhOb2RlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgcmVwYWludE1hcmtl
cnMoT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3VtZW50TWFya2Vy
OjphbGxNYXJrZXJzKCkpOwogICAgIHZvaWQgc2hpZnRNYXJrZXJzKE5vZGUmLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgaW50IGRlbHRhKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoUmFuZ2Um
LCBib29sKTsKLSAgICB2b2lkIHNldE1hcmtlcnNBY3RpdmUoTm9kZSYsIHVuc2lnbmVkIHN0YXJ0
T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQsIGJvb2wpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQg
VmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzRm9yKE5vZGUmLCBPcHRpb25T
ZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtl
cnMoKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIq
PiBtYXJrZXJzSW5SYW5nZShSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4pOwotICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jh
bmdlKFJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPik7CisgICAg
V0VCQ09SRV9FWFBPUlQgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzSW5S
YW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4pOworICAgIHZvaWQgY2xlYXJEZXNjcmlwdGlvbk9uTWFya2Vyc0ludGVyc2VjdGluZ1Jh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJU
eXBlPik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVwZGF0ZVJlY3RzRm9ySW52YWxpZGF0
ZWRNYXJrZXJzT2ZUeXBlKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlKTsKIApAQCAtMTA4LDEx
ICs4OSwxOCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICB2b2lkIGFkZE1hcmtl
cihOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdl
Pj4gY29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKyAgICB2b2lkIGFkZE1h
cmtlcihOb2RlJiwgRG9jdW1lbnRNYXJrZXImJik7CisKKyAgICBzdHJ1Y3QgVGV4dFJhbmdlIHsK
KyAgICAgICAgUmVmPE5vZGU+IG5vZGU7CisgICAgICAgIE9mZnNldFJhbmdlIHJhbmdlOworICAg
IH07CisgICAgVmVjdG9yPFRleHRSYW5nZT4gY29sbGVjdFRleHRSYW5nZXMoY29uc3QgU2ltcGxl
UmFuZ2UmKTsKKworICAgIHZvaWQgZm9yRWFjaChjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNl
dDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4sIGNvbnN0IEZ1bmN0aW9uPGJvb2woUmVuZGVy
ZWREb2N1bWVudE1hcmtlciYpPik7CisKKyAgICB1c2luZyBNYXJrZXJNYXAgPSBIYXNoTWFwPFJl
ZlB0cjxOb2RlPiwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2Vy
Pj4+OwogCi0gICAgdHlwZWRlZiBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcj4gTWFya2Vy
TGlzdDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8UmVmUHRyPE5vZGU+LCBzdGQ6OnVuaXF1ZV9wdHI8
TWFya2VyTGlzdD4+IE1hcmtlck1hcDsKICAgICBib29sIHBvc3NpYmx5SGFzTWFya2VycyhPcHRp
b25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+KTsKICAgICB2b2lkIHJlbW92ZU1hcmtl
cnNGcm9tTGlzdChNYXJrZXJNYXA6Oml0ZXJhdG9yLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGU+KTsKIApAQCAtMTIyLDYgKzExMCwxMiBAQCBwcml2YXRlOgogICAgIERvY3Vt
ZW50JiBtX2RvY3VtZW50OwogfTsKIAoraW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHko
KSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRN
YXJrZXI6OmFsbE1hcmtlcnMoKSkpOworICAgIHJldHVybiAhbV9tYXJrZXJzLmlzRW1wdHkoKTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IGE4YjQwMTE5MjU0MThkM2Y4ZTI0OWIxZjkxNWZm
NmIxMmVhNmNjNzIuLjVjMjkxZDAwMTA3YWEyNDQ3MjRiZGMxMzBjYTQzYWYzNjE4NWIxNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTEzODksMTUgKzEzODksNyBAQCBJbnRSZWN0IEVsZW1l
bnQ6OmJvdW5kc0luUm9vdFZpZXdTcGFjZSgpCiAgICAgICAgICAgICByZW5kZXJCb3hNb2RlbE9i
amVjdCgpLT5hYnNvbHV0ZVF1YWRzKHF1YWRzKTsKICAgICB9CiAKLSAgICBpZiAocXVhZHMuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCi0gICAgSW50UmVjdCByZXN1bHQg
PSBxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAx
OyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpKTsKLQotICAgIHJlc3VsdCA9IHZpZXctPmNvbnRlbnRzVG9S
b290VmlldyhyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHZpZXctPmNv
bnRlbnRzVG9Sb290VmlldyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMocXVh
ZHMpKSk7CiB9CiAKIHN0YXRpYyBib29sIGxheW91dE92ZXJmbG93UmVjdENvbnRhaW5zQWxsRGVz
Y2VuZGFudHMoY29uc3QgUmVuZGVyQm94JiByZW5kZXJCb3gpCkBAIC0xNDY0LDExICsxNDU2LDcg
QEAgTGF5b3V0UmVjdCBFbGVtZW50OjphYnNvbHV0ZUV2ZW50Qm91bmRzKGJvb2wmIGJvdW5kc0lu
Y2x1ZGVBbGxEZXNjZW5kYW50RWxlbWVudHMKICAgICAgICAgICAgICAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKICAgICAgICAgICAgICAgICBGbG9hdFJlY3QgbG9jYWxSZWN0KDAsIDAsIGJv
eC53aWR0aCgpLCBib3guaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudGVk
Rmxvdy0+YWJzb2x1dGVRdWFkc0ZvckJveChxdWFkcywgJndhc0ZpeGVkLCAmYm94LCBsb2NhbFJl
Y3QueSgpLCBsb2NhbFJlY3QubWF4WSgpKSkgewotICAgICAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QgcXVhZEJvdW5kcyA9IHF1YWRzWzBdLmJvdW5kaW5nQm94KCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBxdWFkQm91bmRzLnVuaXRlKHF1YWRzW2ldLmJvdW5kaW5nQm94KCkpOwot
ICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5b3V0
UmVjdChxdWFkQm91bmRzKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gTGF5b3V0UmVj
dCh1bml0ZWRCb3VuZGluZ0JveGVzKHF1YWRzKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbXB1
dGVkQm91bmRzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAvLyBQcm9iYWJseSBjb2x1bW5zLiBKdXN0IHJldHVybiB0aGUgYm91bmRzIG9mIHRo
ZSBtdWx0aWNvbCBibG9jayBmb3Igbm93LgpAQCAtMTYwMywxMSArMTU5MSw3IEBAIE9wdGlvbmFs
PHN0ZDo6cGFpcjxSZW5kZXJPYmplY3QqLCBGbG9hdFJlY3Q+PiBFbGVtZW50Ojpib3VuZGluZ0Fi
c29sdXRlUmVjdFdpdGhvCiAgICAgaWYgKHF1YWRzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKIAotICAgIEZsb2F0UmVjdCByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGlu
Z0JveCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgcXVhZHMuc2l6ZSgpOyArK2kpCi0g
ICAgICAgIHJlc3VsdC51bml0ZShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLQotICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihyZW5kZXJlciwgcmVzdWx0KTsKKyAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIocmVuZGVyZXIsIHVuaXRlZEJvdW5kaW5nQm94ZXMocXVhZHMpKTsKIH0KIAogRmxvYXRS
ZWN0IEVsZW1lbnQ6OmJvdW5kaW5nQ2xpZW50UmVjdCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCA3MTc5NTFh
ZWEzZjhmNmNkM2JhZjFkOTBlMDQ5Y2I1ZTJhMjU5ZjM0Li45M2E3MWExNTYyY2E1MDkxYmIwMDBi
ZmQyMzRmNmIwNTcyYWJmN2QxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTIwMyw3ICsyMDMsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICBib29sIGlzU3R5bGVkRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGdl
dEZsYWcoSXNIVE1MRmxhZykgfHwgZ2V0RmxhZyhJc1NWR0ZsYWcpIHx8IGdldEZsYWcoSXNNYXRo
TUxGbGFnKTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc0F0dHJpYnV0ZU5vZGUoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0NoYXJhY3RlckRhdGFOb2RlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIGlzQ2hhcmFjdGVyRGF0YU5vZGUoKSBjb25z
dCB7IHJldHVybiAhaXNDb250YWluZXJOb2RlKCkgJiYgKGlzVGV4dE5vZGUoKSB8fCB2aXJ0dWFs
SXNDaGFyYWN0ZXJEYXRhKCkpOyB9CiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVPd25lckVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkVs
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRS
T0xTKQpAQCAtMzExLDE5ICszMTEsMjAgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlbnRUYXJn
ZXREYXRhKCkgY29uc3QgeyByZXR1cm4gZ2V0RmxhZyhIYXNFdmVudFRhcmdldERhdGFGbGFnKTsg
fQogICAgIHZvaWQgc2V0SGFzRXZlbnRUYXJnZXREYXRhKGJvb2wgZmxhZykgeyBzZXRGbGFnKGZs
YWcsIEhhc0V2ZW50VGFyZ2V0RGF0YUZsYWcpOyB9CiAKLSAgICBlbnVtIFVzZXJTZWxlY3RBbGxU
cmVhdG1lbnQgewotICAgICAgICBVc2VyU2VsZWN0QWxsRG9lc05vdEFmZmVjdEVkaXRhYmlsaXR5
LAotICAgICAgICBVc2VyU2VsZWN0QWxsSXNBbHdheXNOb25FZGl0YWJsZQotICAgIH07CiAgICAg
V0VCQ09SRV9FWFBPUlQgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIGJvb2wgaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zcGVjdCgp
OwogCisgICAgZW51bSBVc2VyU2VsZWN0QWxsVHJlYXRtZW50IHsKKyAgICAgICAgVXNlclNlbGVj
dEFsbERvZXNOb3RBZmZlY3RFZGl0YWJpbGl0eSwKKyAgICAgICAgVXNlclNlbGVjdEFsbElzQWx3
YXlzTm9uRWRpdGFibGUKKyAgICB9OwogICAgIGJvb2wgaGFzRWRpdGFibGVTdHlsZShVc2VyU2Vs
ZWN0QWxsVHJlYXRtZW50IHRyZWF0bWVudCA9IFVzZXJTZWxlY3RBbGxJc0Fsd2F5c05vbkVkaXRh
YmxlKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbXB1dGVFZGl0YWJpbGl0eSh0cmVh
dG1lbnQsIFNob3VsZFVwZGF0ZVN0eWxlOjpEb05vdFVwZGF0ZSkgIT0gRWRpdGFiaWxpdHk6OlJl
YWRPbmx5OwogICAgIH0KKwogICAgIC8vIEZJWE1FOiBSZXBsYWNlIGV2ZXJ5IHVzZSBvZiB0aGlz
IGZ1bmN0aW9uIGJ5IGhlbHBlcnMgaW4gRWRpdGluZy5oCiAgICAgYm9vbCBoYXNSaWNobHlFZGl0
YWJsZVN0eWxlKCkgY29uc3QKICAgICB7CkBAIC0zNDMsMTIgKzM0NCw4IEBAIHB1YmxpYzoKICAg
ICAvLyBvZiBhIERvY3VtZW50IG5vZGUuCiAgICAgV0VCQ09SRV9FWFBPUlQgRG9jdW1lbnQqIG93
bmVyRG9jdW1lbnQoKSBjb25zdDsKIAotICAgIC8vIFJldHVybnMgdGhlIGRvY3VtZW50IGFzc29j
aWF0ZWQgd2l0aCB0aGlzIG5vZGUuCi0gICAgLy8gQSBEb2N1bWVudCBub2RlIHJldHVybnMgaXRz
ZWxmLgotICAgIERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gdHJlZVNjb3BlKCkuZG9jdW1lbnRTY29wZSgpOwotICAgIH0KKyAgICAvLyBSZXR1cm5zIHRo
ZSBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhpcyBub2RlLiBBIGRvY3VtZW50IG5vZGUgcmV0
dXJucyBpdHNlbGYuCisgICAgRG9jdW1lbnQmIGRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gdHJl
ZVNjb3BlKCkuZG9jdW1lbnRTY29wZSgpOyB9CiAKICAgICBUcmVlU2NvcGUmIHRyZWVTY29wZSgp
IGNvbnN0CiAgICAgewpAQCAtMzYwLDEwICszNTcsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1
cm5zIHRydWUgaWYgdGhpcyBub2RlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGRvY3VtZW50IGFuZCBp
cyBpbiBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudCdzCiAgICAgLy8gbm9kZSB0cmVlLCBmYWxzZSBv
dGhlcndpc2UgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29ubmVjdGVkKS4KLSAgICBi
b29sIGlzQ29ubmVjdGVkKCkgY29uc3QKLSAgICB7IAotICAgICAgICByZXR1cm4gZ2V0RmxhZyhJ
c0Nvbm5lY3RlZEZsYWcpOwotICAgIH0KKyAgICBib29sIGlzQ29ubmVjdGVkKCkgY29uc3QgeyBy
ZXR1cm4gZ2V0RmxhZyhJc0Nvbm5lY3RlZEZsYWcpOyB9CiAgICAgYm9vbCBpc0luVXNlckFnZW50
U2hhZG93VHJlZSgpIGNvbnN0OwogICAgIGJvb2wgaXNJblNoYWRvd1RyZWUoKSBjb25zdCB7IHJl
dHVybiBnZXRGbGFnKElzSW5TaGFkb3dUcmVlRmxhZyk7IH0KICAgICBib29sIGlzSW5UcmVlU2Nv
cGUoKSBjb25zdCB7IHJldHVybiBnZXRGbGFnKHN0YXRpY19jYXN0PE5vZGVGbGFncz4oSXNDb25u
ZWN0ZWRGbGFnIHwgSXNJblNoYWRvd1RyZWVGbGFnKSk7IH0KQEAgLTM3MSw2ICszNjUsNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc0RvY3VtZW50VHlwZU5vZGUoKSBjb25zdCB7IHJldHVybiBub2Rl
VHlwZSgpID09IERPQ1VNRU5UX1RZUEVfTk9ERTsgfQogICAgIHZpcnR1YWwgYm9vbCBjaGlsZFR5
cGVBbGxvd2VkKE5vZGVUeXBlKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHVuc2lnbmVk
IGNvdW50Q2hpbGROb2RlcygpIGNvbnN0OworICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
ICAgIE5vZGUqIHRyYXZlcnNlVG9DaGlsZEF0KHVuc2lnbmVkKSBjb25zdDsKIAogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IGNoZWNrU2V0UHJlZml4KGNvbnN0IEF0b21TdHJpbmcmIHByZWZpeCk7CkBA
IC00MTUsNyArNDEwLDYgQEAgcHVibGljOgogICAgICAgICBEb25lLAogICAgICAgICBOZWVkc1Bv
c3RJbnNlcnRpb25DYWxsYmFjaywKICAgICB9OwotCiAgICAgc3RydWN0IEluc2VydGlvblR5cGUg
ewogICAgICAgICBib29sIGNvbm5lY3RlZFRvRG9jdW1lbnQgeyBmYWxzZSB9OwogICAgICAgICBi
b29sIHRyZWVTY29wZUNoYW5nZWQgeyBmYWxzZSB9OwpAQCAtNjQ1LDYgKzYzOSw4IEBAIHByaXZh
dGU6CiAgICAgICAgIHJldHVybiBQc2V1ZG9JZDo6Tm9uZTsKICAgICB9CiAKKyAgICB2aXJ0dWFs
IGJvb2wgdmlydHVhbElzQ2hhcmFjdGVyRGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisK
ICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlbW92ZWRMYXN0UmVmKCk7CiAKICAgICB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgZmluYWw7CkBAIC02ODEsNiArNjc3LDcgQEAgcHJpdmF0ZToKIH07CiAK
ICNpZiBBU1NFUlRfRU5BQkxFRAorCiBpbmxpbmUgdm9pZCBhZG9wdGVkKE5vZGUqIG5vZGUpCiB7
CiAgICAgaWYgKCFub2RlKQpAQCAtNjg5LDYgKzY4Niw3IEBAIGlubGluZSB2b2lkIGFkb3B0ZWQo
Tm9kZSogbm9kZSkKICAgICBBU1NFUlQoIW5vZGUtPm1faW5SZW1vdmVkTGFzdFJlZkZ1bmN0aW9u
KTsKICAgICBub2RlLT5tX2Fkb3B0aW9uSXNSZXF1aXJlZCA9IGZhbHNlOwogfQorCiAjZW5kaWYg
Ly8gQVNTRVJUX0VOQUJMRUQKIAogQUxXQVlTX0lOTElORSB2b2lkIE5vZGU6OnJlZigpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAppbmRleCBiZTRlYjY5OTUxMDQwMTgzZGJjNDIwNmVkMDBkNDhiZDg4
NDJmMDNmLi4wZmMzMjZjMjljNGMxZjQ1YmUxODdmOTAyMjRmOGMzNDI4YmJmYTE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SYW5nZS5jcHAKQEAgLTExNzcsMTEgKzExNzcsNyBAQCBWZWN0b3I8RmxvYXRSZWN0PiBSYW5n
ZTo6YWJzb2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqIG5vZGUsIFJlbmRlclRleHQmIHJl
bgogICAgICAgICByZXR1cm4gY2xpcHBlZFJlY3RzOwogICAgIH0KIAotICAgIFZlY3RvcjxGbG9h
dFJlY3Q+IGZsb2F0UmVjdHM7Ci0gICAgZmxvYXRSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KHRleHRRdWFkcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgcXVhZCA6IHRleHRRdWFkcykKLSAg
ICAgICAgZmxvYXRSZWN0cy51bmNoZWNrZWRBcHBlbmQocXVhZC5ib3VuZGluZ0JveCgpKTsKLSAg
ICByZXR1cm4gZmxvYXRSZWN0czsKKyAgICByZXR1cm4gYm91bmRpbmdCb3hlcyh0ZXh0UXVhZHMp
OwogfQogCiB2b2lkIFJhbmdlOjphYnNvbHV0ZVRleHRSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCwgUmFuZ2VJbkZpeGVkUG9zaXRpb24qIGluRml4
ZWQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlvcj4gcmVjdE9wdGlvbnMpIGNvbnN0CkBA
IC0xMjEzLDMzICsxMjA5LDYgQEAgdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIFIKICAgICAgICAgKmlu
Rml4ZWQgPSBhbGxGaXhlZCA/IEVudGlyZWx5Rml4ZWRQb3NpdGlvbiA6IChzb21lRml4ZWQgPyBQ
YXJ0aWFsbHlGaXhlZFBvc2l0aW9uIDogTm90Rml4ZWRQb3NpdGlvbik7CiB9CiAKLXZvaWQgUmFu
Z2U6OmFic29sdXRlVGV4dFF1YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcywgYm9vbCB1c2VT
ZWxlY3Rpb25IZWlnaHQsIFJhbmdlSW5GaXhlZFBvc2l0aW9uKiBpbkZpeGVkKSBjb25zdAotewot
ICAgIGJvb2wgYWxsRml4ZWQgPSB0cnVlOwotICAgIGJvb2wgc29tZUZpeGVkID0gZmFsc2U7Ci0K
LSAgICBOb2RlKiBzdG9wTm9kZSA9IHBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9k
ZSA9IGZpcnN0Tm9kZSgpOyBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJl
bmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgYm9vbCBpc0ZpeGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+aXNC
UigpKQotICAgICAgICAgICAgcmVuZGVyZXItPmFic29sdXRlUXVhZHMocXVhZHMsICZpc0ZpeGVk
KTsKLSAgICAgICAgZWxzZSBpZiAoaXM8UmVuZGVyVGV4dD4oKnJlbmRlcmVyKSkgewotICAgICAg
ICAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSBub2RlID09ICZzdGFydENvbnRhaW5lcigpID8g
bV9zdGFydC5vZmZzZXQoKSA6IDA7Ci0gICAgICAgICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBu
b2RlID09ICZlbmRDb250YWluZXIoKSA/IG1fZW5kLm9mZnNldCgpIDogc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpOwotICAgICAgICAgICAgcXVhZHMuYXBwZW5kVmVjdG9yKGRv
d25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVRdWFkc0ZvclJhbmdlKHN0YXJ0
T2Zmc2V0LCBlbmRPZmZzZXQsIHVzZVNlbGVjdGlvbkhlaWdodCwgZmFsc2UgLyogaWdub3JlRW1w
dHlUZXh0U2VsZWN0aW9ucyAqLywgJmlzRml4ZWQpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgYWxsRml4ZWQgJj0gaXNGaXhlZDsKLSAgICAgICAgc29t
ZUZpeGVkIHw9IGlzRml4ZWQ7Ci0gICAgfQotCi0gICAgaWYgKGluRml4ZWQpCi0gICAgICAgICpp
bkZpeGVkID0gYWxsRml4ZWQgPyBFbnRpcmVseUZpeGVkUG9zaXRpb24gOiAoc29tZUZpeGVkID8g
UGFydGlhbGx5Rml4ZWRQb3NpdGlvbiA6IE5vdEZpeGVkUG9zaXRpb24pOwotfQotCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKIHN0YXRpYyBib29sIGludGVydmFsc1N1ZmZpY2llbnRseU92ZXJs
YXAoaW50IHN0YXJ0QSwgaW50IGVuZEEsIGludCBzdGFydEIsIGludCBlbmRCKQogewpAQCAtMTgz
Miw4ICsxODAxLDcgQEAgVmVjdG9yPEZsb2F0UmVjdD4gUmFuZ2U6OmJvcmRlckFuZFRleHRSZWN0
cyhDb29yZGluYXRlU3BhY2Ugc3BhY2UsIE9wdGlvblNldDxCb3UKICAgICAgICAgICAgICAgICBp
ZiAoc3BhY2UgPT0gQ29vcmRpbmF0ZVNwYWNlOjpDbGllbnQpCiAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmRvY3VtZW50KCkuY29udmVydEFic29sdXRlVG9DbGllbnRRdWFkcyhlbGVtZW50UXVh
ZHMsIHJlbmRlcmVyLT5zdHlsZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciAoYXV0byYgcXVh
ZCA6IGVsZW1lbnRRdWFkcykKLSAgICAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHF1YWQu
Ym91bmRpbmdCb3goKSk7CisgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kVmVjdG9yKGJvdW5k
aW5nQm94ZXMoZWxlbWVudFF1YWRzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8VGV4dD4oKm5vZGUpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBk
b3duY2FzdDxUZXh0Pigqbm9kZSkucmVuZGVyZXIoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA2OWNm
MmI5NzJlZGE4ZWY2MjNjNzQ0ZGU5MDMzY2JhNDZmYTNkN2I2Li4wMmNhMTMwODRjOTgwZDEwODBh
YWYyMDk0MDlhMGZlYWQ4OTQyMWZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFu
Z2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtMTI1LDcgKzEyNSw2IEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3go
T3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7CiAKICAgICAvLyBU
cmFuc2Zvcm0tZnJpZW5kbHkKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGFic29sdXRlVGV4dFF1
YWRzKFZlY3RvcjxGbG9hdFF1YWQ+JiwgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQgPSBmYWxzZSwg
UmFuZ2VJbkZpeGVkUG9zaXRpb24qID0gbnVsbHB0cikgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBP
UlQgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1JlY3RC
ZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV0VC
Q09SRV9FWFBPUlQgdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJl
Y3Q+JikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmVuZGVyZWREb2N1
bWVudE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1JlbmRlcmVkRG9jdW1lbnRNYXJrZXIu
aAppbmRleCA4OWU2NDkzYjc1YmRmMzMxZjcyYzI1MGM1ZDY0MDMxOTNiYmMzNWI0Li5lZmViMDQx
ZGM0MDEwMmJjNWFlZmRjN2VlZDE1ZTQwYThhMGYxMjc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUmVuZGVyZWREb2N1bWVudE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9SZW5kZXJlZERvY3VtZW50TWFya2VyLmgKQEAgLTMzLDggKzMzLDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyIDogcHVibGljIERvY3VtZW50
TWFya2VyIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBSZW5kZXJlZERvY3VtZW50TWFya2VyKGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCi0gICAgICAgIDogRG9jdW1lbnRNYXJrZXIobWFy
a2VyKQorICAgIGV4cGxpY2l0IFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIoRG9jdW1lbnRNYXJrZXIm
JiBtYXJrZXIpCisgICAgICAgIDogRG9jdW1lbnRNYXJrZXIoV1RGTW92ZShtYXJrZXIpKQogICAg
IHsKICAgICB9CiAKQEAgLTQ4LDEwICs0OCwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICB2b2lkIHNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoVmVjdG9y
PEZsb2F0UmVjdD4mIHJlY3RzKQorICAgIHZvaWQgc2V0VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhW
ZWN0b3I8RmxvYXRSZWN0PiYmIHJlY3RzKQogICAgIHsKICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1
ZTsKLSAgICAgICAgbV9yZWN0cyA9IHJlY3RzOworICAgICAgICBtX3JlY3RzID0gV1RGTW92ZShy
ZWN0cyk7CiAgICAgfQogCiAgICAgY29uc3QgVmVjdG9yPEZsb2F0UmVjdCwgMT4mIHVuY2xpcHBl
ZEFic29sdXRlUmVjdHMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXgg
OGVlYWQwNjFiNjMwZGVkYTUyMzUwOWNlMTNlZTQ2ODdhYTA0ODllYS4uYTFlN2Q3N2U4MDZkNGQy
Mzc4NTBlMWM4NDg3YTM1OTA5OTI2OTIwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3Bw
CkBAIC01NCwyOCArNTQsNDUgQEAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiBh
LCBjb25zdCBTaW1wbGVSYW5nZSYgYikKICAgICByZXR1cm4gYS5zdGFydCA9PSBiLnN0YXJ0ICYm
IGEuZW5kID09IGIuZW5kOwogfQogCi0vLyBGSVhNRTogTm9kZTo6aXNDaGFyYWN0ZXJEYXRhIHNo
b3VsZCB1c2UgYW4gYWxnb3JpdGhtIGxpa2UgdGhpcywgc2luY2UgSSdtIGFzc3VtaW5nIGl0J3Mg
ZmFzdGVyIHRoYW4gdGhlIGlzQ2hhcmFjdGVyRGF0YU5vZGUgdmlydHVhbCBjYWxsIGluIG1vc3Qg
Y2FzZXMuCi1zdGF0aWMgYm9vbCBmYXN0SXNDaGFyYWN0ZXJEYXRhKGNvbnN0IE5vZGUmIG5vZGUp
CitzdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRz
KE5vZGUmIG5vZGUpCiB7Ci0gICAgcmV0dXJuICFub2RlLmlzQ29udGFpbmVyTm9kZSgpICYmIChu
b2RlLmlzVGV4dE5vZGUoKSB8fCBub2RlLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSk7CisgICAgcmV0
dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9OwogfQogCi0vLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgTm9kZTo6bGVuZ3RoIHNpbmNlIHRoZSBET00gc3BlY2lmaWNhdGlvbiBjYWxscyB0aGlzIGEg
bm9kZSdzIGxlbmd0aC4KLXN0YXRpYyB1bnNpZ25lZCBsZW5ndGgoY29uc3QgTm9kZSYgbm9kZSkK
K1NpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQog
ewotICAgIGlmIChmYXN0SXNDaGFyYWN0ZXJEYXRhKG5vZGUpKQotICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkubGVuZ3RoKCk7Ci0gICAgcmV0dXJuIG5vZGUuY291
bnRDaGlsZE5vZGVzKCk7CisgICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMobm9kZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkg
fTsKIH0KIAotc3RhdGljIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVD
b250ZW50cyhOb2RlJiBub2RlKQorUmVmUHRyPE5vZGU+IEludGVyc2VjdGluZ05vZGVSYW5nZTo6
Zmlyc3QoKSBjb25zdAogewotICAgIHJldHVybiB7IG5vZGUsIGxlbmd0aChub2RlKSB9OworICAg
IGlmIChtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+aXNDaGFyYWN0ZXJEYXRhTm9kZSgpKQorICAg
ICAgICByZXR1cm4gbV9yYW5nZS5zdGFydC5jb250YWluZXIucHRyKCk7CisgICAgaWYgKGF1dG8g
Y2hpbGQgPSBtX3JhbmdlLnN0YXJ0LmNvbnRhaW5lci0+dHJhdmVyc2VUb0NoaWxkQXQobV9yYW5n
ZS5zdGFydC5vZmZzZXQpKQorICAgICAgICByZXR1cm4gY2hpbGQ7CisgICAgcmV0dXJuIE5vZGVU
cmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2Uuc3RhcnQuY29udGFpbmVyKTsK
IH0KIAotU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5v
ZGUpCitSZWZQdHI8Tm9kZT4gSW50ZXJzZWN0aW5nTm9kZVJhbmdlOjpzZW50aW5lbCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9k
ZSksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKKyAgICBpZiAo
bV9yYW5nZS5lbmQuY29udGFpbmVyLT5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCisgICAgICAgIHJl
dHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tpcHBpbmdDaGlsZHJlbihtX3JhbmdlLmVuZC5jb250
YWluZXIpOworICAgIGlmIChhdXRvIGNoaWxkID0gbV9yYW5nZS5lbmQuY29udGFpbmVyLT50cmF2
ZXJzZVRvQ2hpbGRBdChtX3JhbmdlLmVuZC5vZmZzZXQpKQorICAgICAgICByZXR1cm4gY2hpbGQ7
CisgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxkcmVuKG1fcmFuZ2Uu
ZW5kLmNvbnRhaW5lcik7Cit9CisKK09mZnNldFJhbmdlIGNoYXJhY3RlckRhdGFPZmZzZXRSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0IE5vZGUmIG5vZGUpCit7CisgICAgcmV0
dXJuIHsgJm5vZGUgPT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpID8gcmFuZ2Uuc3RhcnQu
b2Zmc2V0IDogMCwKKyAgICAgICAgJm5vZGUgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSA/
IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkg
fTsKK30KKworSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0
b3I6Om9wZXJhdG9yKysoKQoreworICAgIEFTU0VSVChtX25vZGUpOworICAgIG1fbm9kZSA9IE5v
ZGVUcmF2ZXJzYWw6Om5leHQoKm1fbm9kZSk7CisgICAgcmV0dXJuICp0aGlzOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDk1ODJkZjhjMzMyNmM4OTg1NWJiOGRlYTExNDYz
MzVjNDY3MTNhODEuLjU3ZjQxM2I1YmUxNjNlN2ZjZTFlMzk2NzdiY2MzM2VhNTg4YmVjYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC01NSw2ICs1NSw2MSBAQCBXRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYpOwogCiBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwog
CitjbGFzcyBJbnRlcnNlY3RpbmdOb2RlUmFuZ2U7CitJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50
ZXJzZWN0aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmKTsKKworc3RydWN0IE9mZnNldFJhbmdl
IHsKKyAgICB1bnNpZ25lZCBzdGFydCB7IDAgfTsKKyAgICB1bnNpZ25lZCBlbmQgeyAwIH07Cit9
OworT2Zmc2V0UmFuZ2UgY2hhcmFjdGVyRGF0YU9mZnNldFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiwgY29uc3QgTm9kZSYpOworCitjbGFzcyBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgOiBwdWJs
aWMgc3RkOjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBOb2RlPiB7CitwdWJs
aWM6CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmKTsKKworICAg
IE5vZGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVybiAqbV9ub2Rl
OyB9CisgICAgTm9kZSogb3BlcmF0b3ItPigpIGNvbnN0IHsgQVNTRVJUKG1fbm9kZSk7IHJldHVy
biBtX25vZGUuZ2V0KCk7IH0KKworICAgIG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBt
X25vZGU7IH0KKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX25vZGU7IH0K
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yJiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9ub2RlICE9IG90aGVyLm1fbm9kZTsgfQorCisgICAgSW50ZXJz
ZWN0aW5nTm9kZUl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7CisKK3ByaXZhdGU6CisgICAgUmVmUHRy
PE5vZGU+IG1fbm9kZTsKK307CisKK2NsYXNzIEludGVyc2VjdGluZ05vZGVSYW5nZSB7CitwdWJs
aWM6CisgICAgSW50ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJik7CisKKyAg
ICBJbnRlcnNlY3RpbmdOb2RlSXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBmaXJzdCgp
OyB9CisgICAgSW50ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHNl
bnRpbmVsKCk7IH0KKworcHJpdmF0ZToKKyAgICBSZWZQdHI8Tm9kZT4gZmlyc3QoKSBjb25zdDsK
KyAgICBSZWZQdHI8Tm9kZT4gc2VudGluZWwoKSBjb25zdDsKKworICAgIGNvbnN0IFNpbXBsZVJh
bmdlJiBtX3JhbmdlOworfTsKKworaW5saW5lIEludGVyc2VjdGluZ05vZGVJdGVyYXRvcjo6SW50
ZXJzZWN0aW5nTm9kZUl0ZXJhdG9yKFJlZlB0cjxOb2RlPiYmIG5vZGUpCisgICAgOiBtX25vZGUo
V1RGTW92ZShub2RlKSkKK3sKK30KKworaW5saW5lIEludGVyc2VjdGluZ05vZGVSYW5nZTo6SW50
ZXJzZWN0aW5nTm9kZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKKyAgICA6IG1fcmFu
Z2UocmFuZ2UpCit7Cit9CisKK2lubGluZSBJbnRlcnNlY3RpbmdOb2RlUmFuZ2UgaW50ZXJzZWN0
aW5nTm9kZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiB7IHJhbmdl
IH07Cit9CisKIGlubGluZSBTaW1wbGVSYW5nZTo6U2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdl
PiYgcmFuZ2UpCiAgICAgOiBTaW1wbGVSYW5nZShyYW5nZS5nZXQoKSkKIHsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4
IGYxMTI4YjkyNDdlODhiZDliMTIwNTAxNjFiMzZlYzVhOWJlZmUyNmIuLjNmNGZjYjNhYTY5ZmNi
NWFjODExYjRlOGM3OTFhODE0N2IzNGZkNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMTU0LDcgKzE1NCw3IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6aXNTcGVsbGluZ01hcmtlckFsbG93ZWQo
UmFuZ2UmIG1pc3NwZWxsaW5nUmFuZ2UpCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6c2hvdyhSYW5nZSYgcmFuZ2VUb1JlcGxhY2UsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnQp
CiB7Ci0gICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UoJnJh
bmdlVG9SZXBsYWNlKTsKKyAgICBhdXRvIGJvdW5kaW5nQm94ID0gcm9vdFZpZXdSZWN0Rm9yUmFu
Z2UocmFuZ2VUb1JlcGxhY2UpOwogICAgIGlmIChib3VuZGluZ0JveC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX29yaWdpbmFsVGV4dCA9IHBsYWluVGV4dChyYW5nZVRvUmVwbGFj
ZSk7CkBAIC0yNTIsNyArMjUyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0
aW1lckZpcmVkKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBtX2lzQWN0aXZlID0gdHJ1
ZTsKICAgICAgICAgbV9vcmlnaW5hbFRleHQgPSBwbGFpblRleHQoKm1fcmFuZ2VXaXRoQWx0ZXJu
YXRpdmUpOwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JS
YW5nZShtX3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGlu
Z0JveCA9IHJvb3RWaWV3UmVjdEZvclJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAg
ICAgICAgaWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRl
cm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAg
ICAgICAgICAgICAgIGNsaWVudC0+c2hvd0NvcnJlY3Rpb25BbHRlcm5hdGl2ZShtX3R5cGUsIGJv
dW5kaW5nQm94LCBtX29yaWdpbmFsVGV4dCwgcmVwbGFjZW1lbnRTdHJpbmcsIHsgfSk7CkBAIC0y
NzIsNyArMjcyLDcgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVk
KCkKICAgICAgICAgU3RyaW5nIHRvcFN1Z2dlc3Rpb24gPSBzdWdnZXN0aW9ucy5maXJzdCgpOwog
ICAgICAgICBzdWdnZXN0aW9ucy5yZW1vdmUoMCk7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVl
OwotICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSht
X3JhbmdlV2l0aEFsdGVybmF0aXZlLmdldCgpKTsKKyAgICAgICAgYXV0byBib3VuZGluZ0JveCA9
IHJvb3RWaWV3UmVjdEZvclJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKTsKICAgICAgICAg
aWYgKCFib3VuZGluZ0JveC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGlmIChBbHRlcm5hdGl2
ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4dENsaWVudCgpKQogICAgICAgICAg
ICAgICAgIGNsaWVudC0+c2hvd0NvcnJlY3Rpb25BbHRlcm5hdGl2ZShtX3R5cGUsIGJvdW5kaW5n
Qm94LCBtX29yaWdpbmFsVGV4dCwgdG9wU3VnZ2VzdGlvbiwgc3VnZ2VzdGlvbnMpOwpAQCAtMjg3
LDcgKzI4Nyw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgp
CiAgICAgICAgIHVpbnQ2NF90IGRpY3RhdGlvbkNvbnRleHQgPSBXVEY6OmdldDxBbHRlcm5hdGl2
ZURpY3RhdGlvbkNvbnRleHQ+KG1fZGV0YWlscyk7CiAgICAgICAgIGlmICghZGljdGF0aW9uQ29u
dGV4dCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94
ID0gcm9vdFZpZXdSZWN0Rm9yUmFuZ2UobV9yYW5nZVdpdGhBbHRlcm5hdGl2ZS5nZXQoKSk7Cisg
ICAgICAgIGF1dG8gYm91bmRpbmdCb3ggPSByb290Vmlld1JlY3RGb3JSYW5nZSgqbV9yYW5nZVdp
dGhBbHRlcm5hdGl2ZSk7CiAgICAgICAgIG1faXNBY3RpdmUgPSB0cnVlOwogICAgICAgICBpZiAo
IWJvdW5kaW5nQm94LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgaWYgKEFsdGVybmF0aXZlVGV4
dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCkBAIC0zMzgsMTcgKzMz
OCwxMiBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmlzQXV0b21hdGljU3BlbGxp
bmdDb3JyZWN0aW9uRW5hYmxlZCgpCiAgICAgcmV0dXJuIGVkaXRvckNsaWVudCgpICYmIGVkaXRv
ckNsaWVudCgpLT5pc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKTsKIH0KIAot
RmxvYXRSZWN0IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJvb3RWaWV3UmVjdEZvclJhbmdl
KGNvbnN0IFJhbmdlKiByYW5nZSkgY29uc3QKK0Zsb2F0UmVjdCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIGNv
bnN0CiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS52aWV3KCk7CisgICAgYXV0byog
dmlldyA9IG1fZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHRleHRRdWFkczsKLSAgICByYW5nZS0+
YWJzb2x1dGVUZXh0UXVhZHModGV4dFF1YWRzKTsKLSAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0
OwotICAgIGZvciAoYXV0byYgdGV4dFF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAgIGJvdW5kaW5n
UmVjdC51bml0ZSh0ZXh0UXVhZC5ib3VuZGluZ0JveCgpKTsKLSAgICByZXR1cm4gdmlldy0+Y29u
dGVudHNUb1Jvb3RWaWV3KEludFJlY3QoYm91bmRpbmdSZWN0KSk7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgcmV0dXJuIHZpZXctPmNvbnRlbnRzVG9Sb290Vmlldyh1bml0ZWRCb3VuZGluZ0Jv
eGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7CiB9ICAgICAgICAK
IAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9DaGFuZ2VkU2VsZWN0
aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG9sZFNlbGVjdGlvbikKQEAgLTU0Miw4ICs1Mzcs
NiBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb01hcmtlckF0RW5k
T2ZXb3JkKGNvbnN0IERvY3VtZW50TWFya2VyJgogICAgICAgICBzdGFydEFsdGVybmF0aXZlVGV4
dFVJVGltZXIoQWx0ZXJuYXRpdmVUZXh0VHlwZVJldmVyc2lvbik7CiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczogewotICAgICAg
ICBpZiAoIVdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRh
dGE+KG1hcmtlci5kYXRhKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBh
dXRvJiBtYXJrZXJEYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+
KG1hcmtlci5kYXRhKCkpOwogICAgICAgICBpZiAoY3VycmVudFdvcmQgIT0gbWFya2VyRGF0YS5v
cmlnaW5hbFRleHQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02MzgsNyArNjMxLDYg
QEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjppbnNlcnREaWN0YXRlZFRleHQoY29u
c3QgU3RyaW5nJiB0ZXh0LCBjb25zdCBWZWMKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxl
cjo6cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKGNvbnN0IERvY3VtZW50TWFy
a2VyJiBtYXJrZXIpCiB7CiAjaWYgVVNFKERJQ1RBVElPTl9BTFRFUk5BVElWRVMpCi0gICAgQVNT
RVJUKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkRhdGE+
KG1hcmtlci5kYXRhKCkpKTsKICAgICBpZiAoYXV0byogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0
Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzKFdU
Rjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRhPihtYXJrZXIuZGF0YSgpKS5jb250
ZXh0KTsKICNlbHNlCkBAIC02NDksNyArNjQxLDYgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZW1vdmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoY29uc3QgRG9jdW0K
IFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmRpY3RhdGlvbkFsdGVy
bmF0aXZlc0Zvck1hcmtlcihjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQogewogI2lmIFVT
RShESUNUQVRJT05fQUxURVJOQVRJVkVTKQotICAgIEFTU0VSVChtYXJrZXIudHlwZSgpID09IERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwogICAgIGlmIChhdXRvKiBjbGll
bnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAgICAgICAgcmV0dXJuIGNsaWVudC0+ZGlj
dGF0aW9uQWx0ZXJuYXRpdmVzKFdURjo6Z2V0PERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25EYXRh
PihtYXJrZXIuZGF0YSgpKS5jb250ZXh0KTsKICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsK
QEAgLTY2MiwxNSArNjUzLDEyIEBAIFZlY3RvcjxTdHJpbmc+IEFsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXI6OmRpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcihjb25zdCBECiB2b2lkIEFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5RGljdGF0aW9uQWx0ZXJuYXRpdmUoY29uc3QgU3Ry
aW5nJiBhbHRlcm5hdGl2ZVN0cmluZykKIHsKICNpZiBVU0UoRElDVEFUSU9OX0FMVEVSTkFUSVZF
UykKLSAgICBFZGl0b3ImIGVkaXRvciA9IG1fZnJhbWUuZWRpdG9yKCk7Ci0gICAgUmVmUHRyPFJh
bmdlPiBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0ZWRSYW5nZSgpOworICAgIGF1dG8mIGVkaXRv
ciA9IG1fZnJhbWUuZWRpdG9yKCk7CisgICAgYXV0byBzZWxlY3Rpb24gPSBlZGl0b3Iuc2VsZWN0
ZWRSYW5nZSgpOwogICAgIGlmICghc2VsZWN0aW9uIHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0VGV4
dChhbHRlcm5hdGl2ZVN0cmluZywgc2VsZWN0aW9uLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb246
OlBhc3RlZCkpCiAgICAgICAgIHJldHVybjsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIm
IG1hcmtlcnMgPSBzZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJz
KCk7Ci0gICAgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBkaWN0YXRpb25BbHRlcm5h
dGl2ZXNNYXJrZXJzID0gbWFya2Vycy5tYXJrZXJzSW5SYW5nZSgqc2VsZWN0aW9uLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6
IGRpY3RhdGlvbkFsdGVybmF0aXZlc01hcmtlcnMpCisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBz
ZWxlY3Rpb24tPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0lu
UmFuZ2UoKnNlbGVjdGlvbiwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykp
CiAgICAgICAgIHJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcigqbWFya2VyKTsK
LQogICAgIGFwcGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZSgqc2VsZWN0aW9uLCBhbHRlcm5hdGl2
ZVN0cmluZywgQWx0ZXJuYXRpdmVUZXh0VHlwZURpY3RhdGlvbkFsdGVybmF0aXZlcywgbWFya2Vy
VHlwZXNGb3JBcHBsaWVkRGljdGF0aW9uQWx0ZXJuYXRpdmUoKSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTShhbHRlcm5hdGl2ZVN0cmluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5oCmluZGV4IDk4MWQyNzA5MjA3YjZmMzk0ZGIy
MWNiMWZkYTU2NjllYTgwYTk3NDguLjk0Nzc0YTc2YjIwN2VlODcxMDFkODNhMjNiZDkzY2ZkZjZk
ZTY0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBFZGl0b3JDbGll
bnQqIGVkaXRvckNsaWVudCgpOwogICAgIAogICAgIFRleHRDaGVja2VyQ2xpZW50KiB0ZXh0Q2hl
Y2tlcigpOwotICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSop
IGNvbnN0OworICAgIEZsb2F0UmVjdCByb290Vmlld1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYpIGNvbnN0OwogICAgIHZvaWQgbWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVk
QXV0b2NvcnJlY3Rpb25BZnRlckNvbW1hbmQoRWRpdENvbW1hbmQqKTsKIAogICAgIFRpbWVyIG1f
dGltZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCmluZGV4IDYzYmU5MWU5MDRjODkzNWRmZjk1NjE0Yzg3MGM5MjRhZjM0ZGJhNzkuLjRiZmQ5
MjQwNWU0NmI2NDdjZDdmMDE5NTM0OTE5N2QwMjNiOTg5OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC03NjksMzIgKzc2OSwxMiBA
QCBzdGF0aWMgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXI+IGNvcHlNYXJrZXJzKGNvbnN0
IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TQogCiB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpy
ZXBsYWNlVGV4dEluTm9kZVByZXNlcnZpbmdNYXJrZXJzKFRleHQmIG5vZGUsIHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgY291bnQsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRUZXh0KQogewot
ICAgIFJlZjxUZXh0PiBwcm90ZWN0ZWROb2RlKG5vZGUpOwotICAgIERvY3VtZW50TWFya2VyQ29u
dHJvbGxlciYgbWFya2VyQ29udHJvbGxlciA9IGRvY3VtZW50KCkubWFya2VycygpOwotICAgIGF1
dG8gbWFya2VycyA9IGNvcHlNYXJrZXJzKG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2Uo
UmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmbm9kZSwgb2Zmc2V0LCAmbm9kZSwgb2Zmc2V0ICsg
Y291bnQpLCBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpKSk7CisgICAgYXV0byByYW5nZSA9
IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBvZmZzZXQgfSwgeyBub2RlLCBvZmZzZXQgKyBjb3VudCB9
IH07CisgICAgYXV0byBtYXJrZXJzID0gY29weU1hcmtlcnMoZG9jdW1lbnQoKS5tYXJrZXJzKCku
bWFya2Vyc0luUmFuZ2UocmFuZ2UsIERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCkpKTsKICAg
ICByZXBsYWNlVGV4dEluTm9kZShub2RlLCBvZmZzZXQsIGNvdW50LCByZXBsYWNlbWVudFRleHQp
OwotICAgIGF1dG8gbmV3UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZub2RlLCBv
ZmZzZXQsICZub2RlLCBvZmZzZXQgKyByZXBsYWNlbWVudFRleHQubGVuZ3RoKCkpOwotICAgIGZv
ciAoY29uc3QgYXV0byYgbWFya2VyIDogbWFya2VycykgewotI2lmIFBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgICAgIGlmIChtYXJrZXIuaXNEaWN0YXRpb24oKSkgewotICAgICAgICAgICAgbWFy
a2VyQ29udHJvbGxlci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5k
ZXNjcmlwdGlvbigpLCBtYXJrZXIuYWx0ZXJuYXRpdmVzKCksIG1hcmtlci5tZXRhZGF0YSgpKTsK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSNpZiBFTkFCTEUoUExB
VEZPUk1fRFJJVkVOX1RFWFRfQ0hFQ0tJTkcpCi0gICAgICAgIGlmIChtYXJrZXIudHlwZSgpID09
IERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZykgewotICAgICAgICAgICAgaWYg
KCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVj
a2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGF1dG8mIHRleHRDaGVja2luZ0RhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtl
cjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKTsKLSAgICAgICAgICAg
IG1hcmtlckNvbnRyb2xsZXIuYWRkUGxhdGZvcm1UZXh0Q2hlY2tpbmdNYXJrZXIobmV3UmFuZ2Us
IHRleHRDaGVja2luZ0RhdGEua2V5LCB0ZXh0Q2hlY2tpbmdEYXRhLnZhbHVlKTsKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgbWFya2VyQ29udHJvbGxl
ci5hZGRNYXJrZXIobmV3UmFuZ2UsIG1hcmtlci50eXBlKCksIG1hcmtlci5kZXNjcmlwdGlvbigp
KTsKLSAgICB9CisgICAgcmFuZ2UuZW5kLm9mZnNldCA9IHJhbmdlLnN0YXJ0Lm9mZnNldCArIHJl
cGxhY2VtZW50VGV4dC5sZW5ndGgoKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1hcmtlcnMp
CisgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgbWFya2VyLnR5
cGUoKSwgbWFya2VyLmRhdGEoKSk7CiB9CiAKIFBvc2l0aW9uIENvbXBvc2l0ZUVkaXRDb21tYW5k
Ojpwb3NpdGlvbk91dHNpZGVUYWJTcGFuKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0aW9uQ29tbWFuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0RpY3RhdGlvbkNvbW1hbmQuY3BwCmluZGV4IGFkZjc0NGZjNWMz
MTFmY2Y2NWM2ZmQ3YTM1MWVmNjMwMDA4MWI5NzEuLjg0YzJhZGUxYTk0OTdmOGI2NmEzYzExNjM2
ZDE2NDBlNTI5ZGFhM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGljdGF0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EaWN0YXRpb25Db21t
YW5kLmNwcApAQCAtNjYsOCArNjYsOCBAQCBwdWJsaWM6CiAgICAgICAgIGF1dG8mIG1hcmtlckNv
bnRyb2xsZXIgPSB0ZXh0Tm9kZS5kb2N1bWVudCgpLm1hcmtlcnMoKTsKICAgICAgICAgZm9yIChh
dXRvJiBhbHRlcm5hdGl2ZSA6IG1fYWx0ZXJuYXRpdmVzKSB7CiAgICAgICAgICAgICBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uRGF0YSBkYXRhIHsgYWx0ZXJuYXRpdmUuZGljdGF0aW9uQ29udGV4
dCwgdGV4dFRvQmVJbnNlcnRlZC5zdWJzdHJpbmcoYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCwgYWx0
ZXJuYXRpdmUucmFuZ2VMZW5ndGgpIH07Ci0gICAgICAgICAgICBtYXJrZXJDb250cm9sbGVyLmFk
ZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCArIG9mZnNldE9m
SW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6OkRpY3Rh
dGlvbkFsdGVybmF0aXZlcywgV1RGTW92ZShkYXRhKSk7Ci0gICAgICAgICAgICBtYXJrZXJDb250
cm9sbGVyLmFkZE1hcmtlclRvTm9kZSh0ZXh0Tm9kZSwgYWx0ZXJuYXRpdmUucmFuZ2VTdGFydCAr
IG9mZnNldE9mSW5zZXJ0aW9uLCBhbHRlcm5hdGl2ZS5yYW5nZUxlbmd0aCwgRG9jdW1lbnRNYXJr
ZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgICAgICAgICAgbWFya2VyQ29udHJvbGxl
ci5hZGRNYXJrZXIodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRPZklu
c2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpEaWN0YXRp
b25BbHRlcm5hdGl2ZXMsIFdURk1vdmUoZGF0YSkpOworICAgICAgICAgICAgbWFya2VyQ29udHJv
bGxlci5hZGRNYXJrZXIodGV4dE5vZGUsIGFsdGVybmF0aXZlLnJhbmdlU3RhcnQgKyBvZmZzZXRP
Zkluc2VydGlvbiwgYWx0ZXJuYXRpdmUucmFuZ2VMZW5ndGgsIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZy5jcHAKaW5kZXggZTgxOGQxMmIyMzkxMjBhMWFhMmJmZjVlMGFjYjc5YTZkMjBkOWQw
MS4uYjJmMjg2YzBiNmVjMWY0NjY5NzA4YzYyMThkYTRiZjJjYTM1YzQ3MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTI0LDE5ICsxMTI0LDE4IEBAIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleFVzaW5nQ2hhcmFjdGVySXRlcmF0b3IoTm9kZSYgbm9k
ZSwgaW50IGluCiAgICAgaWYgKGluZGV4IDw9IDApCiAgICAgICAgIHJldHVybiB7IGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZSgmbm9kZSksIERPV05TVFJFQU0gfTsKIAotICAgIGF1dG8gcmFu
Z2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSk7Ci0gICAgcmFuZ2UtPnNlbGVjdE5v
ZGVDb250ZW50cyhub2RlKTsKLSAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZS5nZXQoKSk7
CisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKTsK
KyAgICBDaGFyYWN0ZXJJdGVyYXRvciBpdChyYW5nZSk7CiAgICAgaXQuYWR2YW5jZShpbmRleCAt
IDEpOwogCiAgICAgaWYgKCFpdC5hdEVuZCgpICYmIGl0LnRleHQoKS5sZW5ndGgoKSA9PSAxICYm
IGl0LnRleHQoKVswXSA9PSAnXG4nKSB7CiAgICAgICAgIC8vIEZJWE1FOiB3b3JrYXJvdW5kIGZv
ciBjb2xsYXBzZWQgcmFuZ2UgKHdoZXJlIG9ubHkgc3RhcnQgcG9zaXRpb24gaXMgY29ycmVjdCkg
ZW1pdHRlZCBmb3Igc29tZSBlbWl0dGVkIG5ld2xpbmVzLgogICAgICAgICBpdC5hZHZhbmNlKDEp
OwogICAgICAgICBpZiAoIWl0LmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihpdC5yYW5nZSgpLnN0YXJ0KSk7Cisg
ICAgICAgICAgICByZXR1cm4geyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2Uo
KS5zdGFydCkgfTsKICAgICB9CiAKLSAgICByZXR1cm4geyBpdC5hdEVuZCgpID8gcmFuZ2UtPmVu
ZFBvc2l0aW9uKCkgOiBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oaXQucmFuZ2UoKS5lbmQp
LCBVUFNUUkVBTSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigo
aXQuYXRFbmQoKSA/IHJhbmdlIDogaXQucmFuZ2UoKSkuZW5kKSwgVVBTVFJFQU0gfTsKIH0KIAog
Ly8gRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBwb3NpdGlvbnMgYXJlIHZpc2libHkgbmV4dCB0byBl
YWNoIG90aGVyIChmaXJzdCB0aGVuIHNlY29uZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApp
bmRleCBhNGUwNjAyMzk1ZTI3OTc5OWJmMzg5MjMyYjNlZDY4MmI3ZWU0ZmE0Li5mOGM5MzM4MjY4
ZWRmZTM0OWRiZWNkYzAzYjFmYTdiMThjNDFlODg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCkBAIC0zMDc2LDggKzMwNzYsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0Zvcldv
cmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAgIC8v
IG9mIG1hcmtlciB0aGF0IGNvbnRhaW5zIHRoZSB3b3JkIGluIHF1ZXN0aW9uLCBhbmQgcmVtb3Zl
IG1hcmtlciBvbiB0aGF0IHdob2xlIHJhbmdlLgogICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mRmlyc3RXb3JkLmRlZXBFcXVpdmFsZW50KCksIGVu
ZE9mTGFzdFdvcmQuZGVlcEVxdWl2YWxlbnQoKSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1
bWVudE1hcmtlcio+IG1hcmtlcnMgPSBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5n
ZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXMpOwotICAg
IGZvciAoYXV0byogbWFya2VyIDogbWFya2VycykKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRv
Y3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHdvcmRSYW5nZSwgRG9jdW1lbnRNYXJr
ZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlcykpCiAgICAgICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci0+cmVtb3ZlRGljdGF0aW9uQWx0ZXJuYXRpdmVzRm9yTWFya2VyKCptYXJrZXIpOwog
CiAgICAgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiBtYXJrZXJUeXBlc1Rv
UmVtb3ZlIHsKQEAgLTM2MjYsNyArMzYyNSw3IEBAIHVuc2lnbmVkIEVkaXRvcjo6Y291bnRNYXRj
aGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgUmFuZ2UqIHJhbmdlLCBGaW5kT3B0CiAg
ICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSk7
CiAKICAgICAgICAgaWYgKG1hcmtNYXRjaGVzKQotICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkTWFya2VyKGNyZWF0ZUxpdmVSYW5nZShyZXN1bHRSYW5nZSksIERvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpOworICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKHJlc3VsdFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIAogICAgICAgICAv
LyBTdG9wIGxvb2tpbmcgaWYgd2UgaGl0IHRoZSBzcGVjaWZpZWQgbGltaXQuIEEgbGltaXQgb2Yg
MCBtZWFucyBubyBsaW1pdC4KICAgICAgICAgaWYgKGxpbWl0ID4gMCAmJiBtYXRjaENvdW50ID49
IGxpbWl0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggZTAzNzhhZWI3YTkyYjUyYWE1ZGQ5
YzdiOWU5NTBhMWZlMDRlNWQ3My4uZmJlNzEyYTk4ZGRkMDY4OWZjZGFiOWFjYzg4NThlMWMyMTIx
Nzc0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC0zOTksOCArMzk5LDggQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29uZmlybU1hcmtlZFRleHQoKTsKICAgICBXRUJD
T1JFX0VYUE9SVCB2b2lkIHNldFRleHRBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFN0cmluZyYsIEVs
ZW1lbnQmKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldFRleHRBbGlnbm1lbnRGb3JDaGFu
Z2VkQmFzZVdyaXRpbmdEaXJlY3Rpb24oV3JpdGluZ0RpcmVjdGlvbik7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgdm9pZCBpbnNlcnREaWN0YXRpb25QaHJhc2VzKFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4m
JiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+IG1ldGFkYXRhKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCB2b2lkIHNldERpY3RhdGlvblBocmFzZXNBc0NoaWxkT2ZFbGVtZW50KGNvbnN0IFZl
Y3RvcjxWZWN0b3I8U3RyaW5nPj4mIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4gbWV0
YWRhdGEsIEVsZW1lbnQmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGluc2VydERpY3RhdGlv
blBocmFzZXMoVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1l
dGFkYXRhKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHNldERpY3RhdGlvblBocmFzZXNBc0No
aWxkT2ZFbGVtZW50KGNvbnN0IFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mIGRpY3RhdGlvblBocmFz
ZXMsIGlkIG1ldGFkYXRhLCBFbGVtZW50Jik7CiAjZW5kaWYKICAgICAKICAgICBlbnVtIGNsYXNz
IEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSB7IFByZXBlbmRUZXh0LCBBcHBlbmRUZXh0IH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDI2ZmE3NjExYjE5MGFl
ZWIzZGE3YTZiYThmMzI4MjU3MDBlZmRhYTQuLjQ1MTZlNTA2NTA3MmZmNTFjM2M5MDFiNzg1MjQ1
M2ZiZmE5N2IzNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC0yMzI1LDMzICsyMzI1LDE5IEBAIEZsb2F0UmVjdCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0
aW9uQm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250CiAKIHZvaWQg
RnJhbWVTZWxlY3Rpb246OmdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZs
b2F0UmVjdD4mIHJlY3RhbmdsZXMsIFRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQp
IGNvbnN0CiB7Ci0gICAgUmVuZGVyVmlldyogcm9vdCA9IG1fZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpOwotICAgIGlmICghcm9vdCkKKyAgICBpZiAoIW1fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7Ci0g
ICAgZ2V0VGV4dFJlY3RhbmdsZXModGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCk7Ci0KLSAgICBG
bG9hdFJlY3QgdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52aXNpYmxlQ29u
dGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJsZVJlY3QpOwot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiByZWN0IDogdGV4dFJlY3RzKSB7Ci0gICAgICAgIEZsb2F0
UmVjdCBpbnRlcnNlY3Rpb25SZWN0ID0gaW50ZXJzZWN0aW9uKHJlY3QsIHZpc2libGVDb250ZW50
UmVjdCk7Ci0gICAgICAgIGlmICghaW50ZXJzZWN0aW9uUmVjdC5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICByZWN0YW5nbGVzLmFwcGVuZChpbnRlcnNlY3Rpb25SZWN0KTsKLSAgICB9Ci19Ci0KLXZv
aWQgRnJhbWVTZWxlY3Rpb246OmdldFRleHRSZWN0YW5nbGVzKFZlY3RvcjxGbG9hdFJlY3Q+JiBy
ZWN0YW5nbGVzLCBUZXh0UmVjdGFuZ2xlSGVpZ2h0IHRleHRSZWN0SGVpZ2h0KSBjb25zdAotewog
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSB0b05vcm1hbGl6ZWRSYW5nZSgpOwogICAgIGlmICgh
cmFuZ2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwot
ICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcywgdGV4dFJlY3RIZWlnaHQgPT0gVGV4
dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KTsKLQotICAgIGZvciAoY29uc3QgYXV0
byYgcXVhZCA6IHF1YWRzKQotICAgICAgICByZWN0YW5nbGVzLmFwcGVuZChxdWFkLmJvdW5kaW5n
Qm94KCkpOworICAgIGF1dG8gdmlzaWJsZUNvbnRlbnRSZWN0ID0gbV9mcmFtZS0+dmlldygpLT52
aXNpYmxlQ29udGVudFJlY3QoU2Nyb2xsYWJsZUFyZWE6OkxlZ2FjeUlPU0RvY3VtZW50VmlzaWJs
ZVJlY3QpOworICAgIGZvciAoYXV0byYgcmVjdCA6IGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0
OjphYnNvbHV0ZVRleHRRdWFkcygqcmFuZ2UsIHRleHRSZWN0SGVpZ2h0ID09IFRleHRSZWN0YW5n
bGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCkpKSB7CisgICAgICAgIGF1dG8gaW50ZXJzZWN0aW9u
UmVjdCA9IGludGVyc2VjdGlvbihyZWN0LCB2aXNpYmxlQ29udGVudFJlY3QpOworICAgICAgICBp
ZiAoIWludGVyc2VjdGlvblJlY3QuaXNFbXB0eSgpKQorICAgICAgICAgICAgcmVjdGFuZ2xlcy5h
cHBlbmQoaW50ZXJzZWN0aW9uUmVjdCk7CisgICAgfQogfQogCiAvLyBTY2FucyBsb2dpY2FsbHkg
Zm9yd2FyZCBmcm9tICJzdGFydCIsIGluY2x1ZGluZyBhbnkgY2hpbGQgZnJhbWVzLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCmluZGV4IDI4NTU5MTc4NGE5ZmUzYTI3MWU4
NDhlMTEyY2YwNTI3MzQ3MDQ4MDAuLmU2YTcwOGIwNTRmNTliMzBiZmI1N2VmZGZlMzJjYWVkMTY1
YTA1MDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKQEAgLTI3Niw3
ICsyNzYsNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIGNsYXNzIFRleHRSZWN0YW5nbGVIZWlnaHQg
eyBUZXh0SGVpZ2h0LCBTZWxlY3Rpb25IZWlnaHQgfTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGdldENsaXBwZWRWaXNpYmxlVGV4dFJlY3RhbmdsZXMoVmVjdG9yPEZsb2F0UmVjdD4mLCBUZXh0
UmVjdGFuZ2xlSGVpZ2h0ID0gVGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0KSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGdldFRleHRSZWN0YW5nbGVzKFZlY3RvcjxG
bG9hdFJlY3Q+JiwgVGV4dFJlY3RhbmdsZUhlaWdodCA9IFRleHRSZWN0YW5nbGVIZWlnaHQ6OlNl
bGVjdGlvbkhlaWdodCkgY29uc3Q7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBIVE1MRm9ybUVsZW1l
bnQqIGN1cnJlbnRGb3JtKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGxpdFRleHROb2RlQ29tbWFuZC5jcHAKaW5kZXggOWI3NzYxMDJmOWYxNWFjOTY2ODk5MzgwOTdj
YjIyZWVhMmZkMGJiOS4uNzNkNjA5Y2FjOThlMWU1MjgyN2JmYzNhN2EzN2UyYzg1YjFkZmUxZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9BcHBseSgpCiAK
ICAgICBtX3RleHQxID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUocHJlZml4VGV4
dCkpOwogICAgIEFTU0VSVChtX3RleHQxKTsKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5jb3B5
TWFya2VycyhtX3RleHQyLCAwLCBtX29mZnNldCwgKm1fdGV4dDEsIDApOworICAgIGRvY3VtZW50
KCkubWFya2VycygpLmNvcHlNYXJrZXJzKG1fdGV4dDIsIHsgMCwgbV9vZmZzZXQgfSwgKm1fdGV4
dDEpOwogCiAgICAgaW5zZXJ0VGV4dDFBbmRUcmltVGV4dDIoKTsKIH0KQEAgLTc4LDcgKzc4LDcg
QEAgdm9pZCBTcGxpdFRleHROb2RlQ29tbWFuZDo6ZG9VbmFwcGx5KCkKIAogICAgIG1fdGV4dDIt
Pmluc2VydERhdGEoMCwgcHJlZml4VGV4dCk7CiAKLSAgICBkb2N1bWVudCgpLm1hcmtlcnMoKS5j
b3B5TWFya2VycygqbV90ZXh0MSwgMCwgcHJlZml4VGV4dC5sZW5ndGgoKSwgbV90ZXh0MiwgMCk7
CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuY29weU1hcmtlcnMoKm1fdGV4dDEsIHsgMCwgcHJl
Zml4VGV4dC5sZW5ndGgoKSB9LCBtX3RleHQyKTsKICAgICBtX3RleHQxLT5yZW1vdmUoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4
IDU1N2JmZWNhZWEwMjMyODVhZWEwOTBkNGYwNTcxZDdkYThkMzNhYmUuLmY0ZjA2ZmZlNzEyMjdl
MjNiMWE2ZWRiOTVkOGFkMjNkYzQ3MGU4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTEwNSwxNyArMTA1LDE1IEBAIHN0YXRpYyBSZXRh
aW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNp
YmxlUG9zaXRpb24KICAgICBpZiAoIW1haW5SZXN1bHQpCiAgICAgICAgIHJldHVybiBuaWw7CiAK
LSAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhb
YWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKKyAgICBhdXRvIHZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgaWYgKCF2aWV3KQor
ICAgICAgICByZXR1cm4gbmlsOworCisgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gYWRvcHROUyhb
YWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsKICAgICBbYWN0aW9uQ29udGV4
dCBzZXRBbGxSZXN1bHRzOkBbIChfX2JyaWRnZSBpZCltYWluUmVzdWx0IF1dOwogICAgIFthY3Rp
b25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07CiAKLSAgICBWZWN0b3I8RmxvYXRR
dWFkPiBxdWFkczsKLSAgICBtYWluUmVzdWx0UmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRz
KTsKLSAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IEZsb2F0UmVjdCgpOwotICAgIEZyYW1l
VmlldyogZnJhbWVWaWV3ID0gbWFpblJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygp
OwotICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQotICAgICAgICBkZXRlY3RlZERh
dGFCb3VuZGluZ0JveC51bml0ZShmcmFtZVZpZXctPmNvbnRlbnRzVG9XaW5kb3cocXVhZC5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpKSk7Ci0KKyAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZp
ZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVz
KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7CiAg
ICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBtYWluUmVzdWx0UmFuZ2U7CiAKICAgICByZXR1cm4gYWN0
aW9uQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3Rh
dGlvbkNvbW1hbmRJT1MuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9u
Q29tbWFuZElPUy5jcHAKaW5kZXggNWI0M2NhMzNlOTBmYWEyZTZmZTE4NDVjOTIzN2IwYTlmZWE3
NDNjMC4uOGFjNzY5NDAyMDkzNTBmZjQzYWVjMTQ0ZDMzYWQ2MTYwMTI2ZTQzNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGljdGF0aW9uQ29tbWFuZElPUy5jcHAKQEAg
LTM5LDEzICszOSwxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLURpY3RhdGlvbkNvbW1h
bmRJT1M6OkRpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8VmVj
dG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0YSkK
K0RpY3RhdGlvbkNvbW1hbmRJT1M6OkRpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRh
dGEpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVudCwgRWRpdEFjdGlvbjo6RGlj
dGF0aW9uKQogICAgICwgbV9kaWN0YXRpb25QaHJhc2VzKFdURk1vdmUoZGljdGF0aW9uUGhyYXNl
cykpCi0gICAgLCBtX21ldGFkYXRhKFdURk1vdmUobWV0YWRhdGEpKQorICAgICwgbV9tZXRhZGF0
YShtZXRhZGF0YSkKIHsKIH0KIAorUmVmPERpY3RhdGlvbkNvbW1hbmRJT1M+IERpY3RhdGlvbkNv
bW1hbmRJT1M6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIFZlY3RvcjxWZWN0b3I8U3RyaW5n
Pj4mJiBkaWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBEaWN0YXRpb25Db21tYW5kSU9TKGRvY3VtZW50LCBXVEZNb3ZlKGRpY3RhdGlvblBo
cmFzZXMpLCBtZXRhZGF0YSkpOworfQorCiB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBw
bHkoKQogewogICAgIHVpbnQ2NF90IHJlc3VsdExlbmd0aCA9IDA7CkBAIC01NCw4ICs1OSwxMSBA
QCB2b2lkIERpY3RhdGlvbkNvbW1hbmRJT1M6OmRvQXBwbHkoKQogICAgICAgICByZXN1bHRMZW5n
dGggKz0gZmlyc3RJbnRlcnByZXRhdGlvbi5sZW5ndGgoKTsKICAgICAgICAgaW5wdXRUZXh0KGZp
cnN0SW50ZXJwcmV0YXRpb24sIHRydWUpOwogCi0gICAgICAgIGlmIChpbnRlcnByZXRhdGlvbnMu
c2l6ZSgpID4gMSkKLSAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZERpY3RhdGlv
blBocmFzZVdpdGhBbHRlcm5hdGl2ZXNNYXJrZXIoKmVuZGluZ1NlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCksIGludGVycHJldGF0aW9ucyk7CisgICAgICAgIGlmIChpbnRlcnByZXRhdGlv
bnMuc2l6ZSgpID4gMSkgeworICAgICAgICAgICAgYXV0byBhbHRlcm5hdGl2ZXMgPSBpbnRlcnBy
ZXRhdGlvbnM7CisgICAgICAgICAgICBhbHRlcm5hdGl2ZXMucmVtb3ZlKDApOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKCplbmRpbmdTZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlcywgV1RGTW92ZShhbHRlcm5hdGl2ZXMpKTsKKyAgICAgICAgfQogCiAgICAgICAgIHNl
dEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKGVuZGluZ1NlbGVjdGlvbigpLnZpc2li
bGVFbmQoKSkpOwogICAgIH0KQEAgLTczLDcgKzgxLDcgQEAgdm9pZCBEaWN0YXRpb25Db21tYW5k
SU9TOjpkb0FwcGx5KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byByZXN1bHRSYW5nZSA9
IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJv
b3QpLCB7IGVuZE9mZnNldCAtIHJlc3VsdExlbmd0aCwgZW5kT2Zmc2V0IH0pOwotICAgIGRvY3Vt
ZW50KCkubWFya2VycygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbV9t
ZXRhZGF0YSk7CisgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJlc3VsdFJhbmdl
LCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0LCBtX21ldGFkYXRhKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRGljdGF0aW9uQ29tbWFuZElPUy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRGlj
dGF0aW9uQ29tbWFuZElPUy5oCmluZGV4IGY2MzAwNjAwMTM3NTNlOGQyZThhMjAxM2NhMTcxNTVm
NmQ4NmExNDIuLmQzM2MxNTFiOGYyMzk0MDk2ZTUzMDFkMTQxMDIwNmU0MDhkZTEzMjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0RpY3RhdGlvbkNvbW1hbmRJT1MuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9EaWN0YXRpb25Db21tYW5kSU9TLmgKQEAg
LTMwLDIxICszMCwxNiBAQAogI2ltcG9ydCAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KIAotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIERpY3RhdGlvbkNvbW1hbmRJT1MgOiBwdWJs
aWMgQ29tcG9zaXRlRWRpdENvbW1hbmQgeworY2xhc3MgRGljdGF0aW9uQ29tbWFuZElPUyBmaW5h
bCA6IHB1YmxpYyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJl
ZjxEaWN0YXRpb25Db21tYW5kSU9TPiBjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRyPGlkPiBtZXRhZGF0
YSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERpY3RhdGlvbkNvbW1hbmRJ
T1MoZG9jdW1lbnQsIFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcyksIFdURk1vdmUobWV0YWRhdGEp
KSk7Ci0gICAgfQorICAgIHN0YXRpYyBSZWY8RGljdGF0aW9uQ29tbWFuZElPUz4gY3JlYXRlKERv
Y3VtZW50JiwgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1l
dGFkYXRhKTsKIAogcHJpdmF0ZToKLSAgICBEaWN0YXRpb25Db21tYW5kSU9TKERvY3VtZW50Jiwg
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIFJldGFpblB0cjxpZD4g
bWV0YWRhdGEpOworICAgIERpY3RhdGlvbkNvbW1hbmRJT1MoRG9jdW1lbnQmLCBWZWN0b3I8VmVj
dG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgaWQgbWV0YWRhdGEpOwogCi0gICAgdm9p
ZCBkb0FwcGx5KCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkb0FwcGx5KCkgZmluYWw7CiAKICAgICBW
ZWN0b3I8VmVjdG9yPFN0cmluZz4+IG1fZGljdGF0aW9uUGhyYXNlczsKICAgICBSZXRhaW5QdHI8
aWQ+IG1fbWV0YWRhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9F
ZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KaW5k
ZXggNDEyNmVkMTU3ZmRiMTFhMzRiY2UwZDE3NTk3M2Q1NTZmYWYyZmQ1Ni4uZjJhMmQ1MmFjNWFi
ZjRlNGYxMzExM2NhMjVkMWIyMGExNzM4ZmE2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQpAQCAtMjQxLDcgKzI0MSw3IEBAIHZvaWQgRWRpdG9yOjpwYXN0ZVdpdGhQ
YXN0ZWJvYXJkKFBhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIE9wdGlvblNldDxQYXN0ZU9wdGlvbj4K
ICAgICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNt
YXJ0UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKCpwYXN0ZWJvYXJkKSwgZmFsc2UsIG9wdGlvbnMuY29u
dGFpbnMoUGFzdGVPcHRpb246Oklnbm9yZU1haWxCbG9ja3F1b3RlKSA/IE1haWxCbG9ja3F1b3Rl
SGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUgOiBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNw
ZWN0QmxvY2txdW90ZSk7CiB9CiAKLXZvaWQgRWRpdG9yOjppbnNlcnREaWN0YXRpb25QaHJhc2Vz
KFZlY3RvcjxWZWN0b3I8U3RyaW5nPj4mJiBkaWN0YXRpb25QaHJhc2VzLCBSZXRhaW5QdHI8aWQ+
IG1ldGFkYXRhKQordm9pZCBFZGl0b3I6Omluc2VydERpY3RhdGlvblBocmFzZXMoVmVjdG9yPFZl
Y3RvcjxTdHJpbmc+PiYmIGRpY3RhdGlvblBocmFzZXMsIGlkIG1ldGFkYXRhKQogewogICAgIGlm
IChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDks
MTAgKzI0OSwxMCBAQCB2b2lkIEVkaXRvcjo6aW5zZXJ0RGljdGF0aW9uUGhyYXNlcyhWZWN0b3I8
VmVjdG9yPFN0cmluZz4+JiYgZGljdGF0aW9uUGhyYXNlcywgUgogICAgIGlmIChkaWN0YXRpb25Q
aHJhc2VzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRGljdGF0aW9uQ29tbWFu
ZElPUzo6Y3JlYXRlKGRvY3VtZW50KCksIFdURk1vdmUoZGljdGF0aW9uUGhyYXNlcyksIFdURk1v
dmUobWV0YWRhdGEpKS0+YXBwbHkoKTsKKyAgICBEaWN0YXRpb25Db21tYW5kSU9TOjpjcmVhdGUo
ZG9jdW1lbnQoKSwgV1RGTW92ZShkaWN0YXRpb25QaHJhc2VzKSwgbWV0YWRhdGEpLT5hcHBseSgp
OwogfQogCi12b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQo
Y29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZGljdGF0aW9uUGhyYXNlcywgUmV0YWluUHRy
PGlkPiBtZXRhZGF0YSwgRWxlbWVudCYgZWxlbWVudCkKK3ZvaWQgRWRpdG9yOjpzZXREaWN0YXRp
b25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBk
aWN0YXRpb25QaHJhc2VzLCBpZCBtZXRhZGF0YSwgRWxlbWVudCYgZWxlbWVudCkKIHsKICAgICAv
LyBDbGVhciB0aGUgY29tcG9zaXRpb24uCiAgICAgY2xlYXIoKTsKQEAgLTI5MywyMCArMjkzLDE5
IEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9mRWxlbWVudChjb25z
dCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBUZXh0JiB0ZXh0Tm9kZSA9IGRvd25jYXN0PFRleHQ+KCplbGVtZW50LmZpcnN0Q2hpbGQoKSk7
Ci0gICAgaW50IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgPSAwOworICAgIGF1dG8mIHRl
eHROb2RlID0gZG93bmNhc3Q8VGV4dD4oKmVsZW1lbnQuZmlyc3RDaGlsZCgpKTsKKyAgICB1bnNp
Z25lZCBwcmV2aW91c0RpY3RhdGlvblBocmFzZVN0YXJ0ID0gMDsKICAgICBmb3IgKGF1dG8mIGlu
dGVycHJldGF0aW9ucyA6IGRpY3RhdGlvblBocmFzZXMpIHsKLSAgICAgICAgaW50IGRpY3RhdGlv
blBocmFzZUxlbmd0aCA9IGludGVycHJldGF0aW9uc1swXS5sZW5ndGgoKTsKLSAgICAgICAgaW50
IGRpY3RhdGlvblBocmFzZUVuZCA9IHByZXZpb3VzRGljdGF0aW9uUGhyYXNlU3RhcnQgKyBkaWN0
YXRpb25QaHJhc2VMZW5ndGg7CisgICAgICAgIGF1dG8gZGljdGF0aW9uUGhyYXNlTGVuZ3RoID0g
aW50ZXJwcmV0YXRpb25zWzBdLmxlbmd0aCgpOwogICAgICAgICBpZiAoaW50ZXJwcmV0YXRpb25z
LnNpemUoKSA+IDEpIHsKLSAgICAgICAgICAgIGF1dG8gZGljdGF0aW9uUGhyYXNlUmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksICZ0ZXh0Tm9kZSwgcHJldmlvdXNEaWN0YXRpb25QaHJh
c2VTdGFydCwgJnRleHROb2RlLCBkaWN0YXRpb25QaHJhc2VFbmQpOwotICAgICAgICAgICAgZG9j
dW1lbnQoKS5tYXJrZXJzKCkuYWRkRGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlc01hcmtl
cihkaWN0YXRpb25QaHJhc2VSYW5nZSwgaW50ZXJwcmV0YXRpb25zKTsKKyAgICAgICAgICAgIGF1
dG8gYWx0ZXJuYXRpdmVzID0gaW50ZXJwcmV0YXRpb25zOworICAgICAgICAgICAgYWx0ZXJuYXRp
dmVzLnJlbW92ZSgwKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtl
cih0ZXh0Tm9kZSwgcHJldmlvdXNEaWN0YXRpb25QaHJhc2VTdGFydCwgZGljdGF0aW9uUGhyYXNl
TGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcywg
V1RGTW92ZShhbHRlcm5hdGl2ZXMpKTsKICAgICAgICAgfQotICAgICAgICBwcmV2aW91c0RpY3Rh
dGlvblBocmFzZVN0YXJ0ID0gZGljdGF0aW9uUGhyYXNlRW5kOworICAgICAgICBwcmV2aW91c0Rp
Y3RhdGlvblBocmFzZVN0YXJ0ICs9IGRpY3RhdGlvblBocmFzZUxlbmd0aDsKICAgICB9CiAKLSAg
ICBhdXRvIHJlc3VsdFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCAmdGV4dE5vZGUs
IDAsICZ0ZXh0Tm9kZSwgdGV4dE5vZGUubGVuZ3RoKCkpOwotICAgIGRvY3VtZW50KCkubWFya2Vy
cygpLmFkZERpY3RhdGlvblJlc3VsdE1hcmtlcihyZXN1bHRSYW5nZSwgbWV0YWRhdGEpOworICAg
IGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcih0ZXh0Tm9kZSwgMCwgdGV4dE5vZGUubGVu
Z3RoKCksIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQsIHJldGFpblB0cihtZXRhZGF0
YSkpOwogCiAgICAgY2xpZW50KCktPnJlc3BvbmRUb0NoYW5nZWRDb250ZW50cygpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IGM2OGY1ZDM4YzZlNTFlMDQ4ODg3MDk0YzU3ZWJm
ZjA3YWFmMDFjZWIuLjAxNzc2ZmNkMDE0ZTJkOGM0YTdmN2FjN2Q1MTEzY2FjYjRlMzU3Y2MgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQyNzksOSArNDI3OSw3IEBAIHZvaWQgRnJh
bWVWaWV3OjpwYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYgZGlydHlSZWN0CiAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG1fbm9kZVRvRHJh
dyA/IG1fbm9kZVRvRHJhdy0+cmVuZGVyZXIoKSA6IG51bGxwdHI7CiAgICAgUmVuZGVyTGF5ZXIq
IHJvb3RMYXllciA9IHJlbmRlclZpZXctPmxheWVyKCk7CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAg
UmVuZGVyRWxlbWVudDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgZm9yYmlkU2V0TmVl
ZHNMYXlvdXQoJnJvb3RMYXllci0+cmVuZGVyZXIoKSk7Ci0jZW5kaWYKKyAgICBSZW5kZXJPYmpl
Y3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KHJv
b3RMYXllci0+cmVuZGVyZXIoKSk7CiAKICAgICAvLyBUbyB3b3JrIGFyb3VuZCBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzEzNTEwNiwgZW5zdXJlIHRoYXQgdGhlIHBhaW50IHJvb3QgaXNuJ3QgYW4gaW5s
aW5lIHdpdGggY3VsbGVkIGxpbmUgYm94ZXMuCiAgICAgLy8gRklYTUU6IFRoaXMgY2FuIGNhdXNl
IGFkZGl0aW9uYWwgY29udGVudCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgc25hcHNob3QsIHNvIHJl
bW92ZSB0aGlzIG9uY2UgdGhhdCBidWcgaXMgZml4ZWQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1l
SU9TLm1tCmluZGV4IDA2Mjg1YTUxODRlNWE0YzAwYTMxYmE2MzM0MjNkYjVkYmM5ODgwOTguLjBh
ZmVjYWZkMTlkZTAxNGU3MjNlZTVkYzVlNGUyMmQ2ODc5MWQxNjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tCkBAIC03MzYsNyArNzM2LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVy
cHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICBzaXplX3QgaW50ZXJwcmV0YXRp
b25zQ291bnQgPSAxOwogCiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBtYXJrZXJzSW5Sb290KQot
ICAgICAgICBpbnRlcnByZXRhdGlvbnNDb3VudCAqPSBtYXJrZXItPmFsdGVybmF0aXZlcygpLnNp
emUoKSArIDE7CisgICAgICAgIGludGVycHJldGF0aW9uc0NvdW50ICo9IFdURjo6Z2V0PFZlY3Rv
cjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSkuc2l6ZSgpICsgMTsKIAogICAgIFZlY3RvcjxWZWN0
b3I8VUNoYXI+PiBpbnRlcnByZXRhdGlvbnM7CiAgICAgaW50ZXJwcmV0YXRpb25zLmdyb3coaW50
ZXJwcmV0YXRpb25zQ291bnQpOwpAQCAtNzQ5LDYgKzc0OSw4IEBAIE5TQXJyYXkgKkZyYW1lOjpp
bnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgZm9yIChOb2RlKiBub2Rl
ID0gcmFuZ2VPZlJvb3RDb250ZW50cy0+Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2Rl
OyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgQVNTRVJUKG5v
ZGUpOwogICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5t
YXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVy
bmF0aXZlcykpIHsKKyAgICAgICAgICAgIGF1dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZl
Y3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSk7CisKICAgICAgICAgICAgIC8vIEZpcnN0LCBh
ZGQgdGV4dCB0aGF0IHByZWNlZGUgdGhlIG1hcmtlci4KICAgICAgICAgICAgIGlmIChwcmVjZWRp
bmdUZXh0U3RhcnRQb3NpdGlvbiAhPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpKSkgewogICAgICAgICAgICAgICAgIGF1dG8gcHJlY2VkaW5n
VGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0
UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCkpKTsKQEAgLTc2MSw3ICs3NjMsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0
YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgICAgICAgICBhdXRvIHJhbmdlRm9y
TWFya2VyID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKSk7CiAgICAgICAgICAgICBTdHJpbmcg
dmlzaWJsZVRleHRGb3JNYXJrZXIgPSBwbGFpblRleHQocmFuZ2VGb3JNYXJrZXIpOwotICAgICAg
ICAgICAgc2l6ZV90IGludGVycHJldGF0aW9uc0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IG1hcmtl
ci0+YWx0ZXJuYXRpdmVzKCkuc2l6ZSgpICsgMTsKKyAgICAgICAgICAgIHNpemVfdCBpbnRlcnBy
ZXRhdGlvbnNDb3VudEZvckN1cnJlbnRNYXJrZXIgPSBhbHRlcm5hdGl2ZXMuc2l6ZSgpICsgMTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW50ZXJwcmV0YXRpb25zQ291bnQ7
ICsraSkgewogICAgICAgICAgICAgICAgIC8vIERldGVybWluZSB0ZXh0IGZvciB0aGUgaXRoIGlu
dGVycHJldGF0aW9uLiBJdCB3aWxsIGVpdGhlciBiZSB0aGUgdmlzaWJsZSB0ZXh0LCBvciBvbmUg
b2YgaXRzCiAgICAgICAgICAgICAgICAgLy8gYWx0ZXJuYXRpdmVzIHN0b3JlZCBpbiB0aGUgbWFy
a2VyLgpAQCAtNzcwLDcgKzc3Miw3IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRhdGlvbnNG
b3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgICAgICAgICAgICAgaWYgKCFpbmRleE9mSW50ZXJw
cmV0YXRpb25Gb3JDdXJyZW50TWFya2VyKQogICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50
ZXJwcmV0YXRpb25zW2ldLCB2aXNpYmxlVGV4dEZvck1hcmtlcik7CiAgICAgICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCBtYXJr
ZXItPmFsdGVybmF0aXZlcygpLmF0KGkgJSBtYXJrZXItPmFsdGVybmF0aXZlcygpLnNpemUoKSkp
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmQoaW50ZXJwcmV0YXRpb25zW2ldLCBhbHRlcm5h
dGl2ZXNbaSAlIGFsdGVybmF0aXZlcy5zaXplKCldKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgY29tYmluYXRpb25zU29GYXIgKj0gaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50
TWFya2VyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KaW5kZXggOThmNWM1ZWI5ODAxNDAxMmQ3OWUzNWUwYmEzNjg2OTNiYmFl
NGFhYy4uMDEwNGZlZTIxN2RjYmVhMDc3MDU4OGNjZDA4OGFmMzIxYWUxNDFiYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1t
CkBAIC0xOTAsMTYgKzE5MCw2IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0OjpkaWRGaW5pc2hGYWRlT3V0QW5pbWF0aW9uKCkKICAgICBsYXllcigpLnJlbW92ZUZy
b21QYXJlbnQoKTsKIH0KIAotc3RhdGljIEludFJlY3QgdGV4dFF1YWRzVG9Cb3VuZGluZ1JlY3RG
b3JSYW5nZShSYW5nZSYgcmFuZ2UpCi17Ci0gICAgVmVjdG9yPEZsb2F0UXVhZD4gdGV4dFF1YWRz
OwotICAgIHJhbmdlLmFic29sdXRlVGV4dFF1YWRzKHRleHRRdWFkcyk7Ci0gICAgRmxvYXRSZWN0
IGJvdW5kaW5nUmVjdDsKLSAgICBmb3IgKGF1dG8mIHF1YWQgOiB0ZXh0UXVhZHMpCi0gICAgICAg
IGJvdW5kaW5nUmVjdC51bml0ZShxdWFkLmJvdW5kaW5nQm94KCkpOwotICAgIHJldHVybiBlbmNs
b3NpbmdJbnRSZWN0KGJvdW5kaW5nUmVjdCk7Ci19Ci0KIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoUGFnZSYgcGFnZSkKICAgICA6IG1fcGFnZShw
YWdlKQogICAgICwgbV9kZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lcigqdGhpcywgJlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OmRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQp
CkBAIC01MDEsMTcgKzQ5MSwxNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1
aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKICAgICBGcmFtZVZpZXcmIG1haW5GcmFtZVZpZXcg
PSAqbWFpbkZyYW1lKCkudmlldygpOwogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHBob25lTnVt
YmVyUmFuZ2VzKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hva2UgaWYgdGhlIHJh
bmdlIHdyYXBzIGFyb3VuZCB0aGUgZWRnZSBvZiB0aGUgdmlldy4KLSAgICAgICAgLy8gV2hhdCBz
aG91bGQgd2UgZG8gaW4gdGhhdCBjYXNlPwotICAgICAgICBJbnRSZWN0IHJlY3QgPSB0ZXh0UXVh
ZHNUb0JvdW5kaW5nUmVjdEZvclJhbmdlKCpyYW5nZSk7CisgICAgICAgIC8vIEZJWE1FOiBUaGlz
IG1ha2VzIGEgYmlnIHJlY3QgaWYgdGhlIHJhbmdlIGV4dGVuZHMgZnJvbSB0aGUgZW5kIG9mIG9u
ZSBsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dC4gSGFuZGxlIHRoYXQgY2FzZSBiZXR0ZXI/
CisgICAgICAgIGF1dG8gcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hl
cyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpyYW5nZSkpKTsKIAogICAgICAgICAv
LyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAg
ICAgLy8gRklYTUU6IEl0J3MgYSBsaXR0bGUgY3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93
IGFuZCB0aGVuIHdpbmRvd1RvQ29udGVudHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29y
ZGluYXRlIHNwYWNlLgogICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZl
cnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBS
aWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCiAgICAgICAgIC8vIG5vdCBlcXVpdmFs
ZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEg
aGVhZGVyIGJhbm5lci4KLSAgICAgICAgRnJhbWVWaWV3KiB2aWV3Rm9yUmFuZ2UgPSByYW5nZS0+
b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAgYXV0byogdmlld0ZvclJhbmdlID0gcmFu
Z2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CiAgICAgICAgIGlmICghdmlld0ZvclJhbmdlKQog
ICAgICAgICAgICAgY29udGludWU7CisKICAgICAgICAgcmVjdC5zZXRMb2NhdGlvbihtYWluRnJh
bWVWaWV3LndpbmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5jb250ZW50c1RvV2luZG93KHJl
Y3QubG9jYXRpb24oKSkpKTsKIAogICAgICAgICBDR1JlY3QgY2dSZWN0ID0gcmVjdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVW
YWx1ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1
ZVZhbHVlLmgKaW5kZXggNGJjNjMzNGFiZTJiMzRjOWY0YWViMmEzZmZjYmJmYzc5MWMwYWRmMC4u
NTM1MzFjNzhkOGZlNjQyN2YyYjRlZDRmYTc1ZDkyYjQ1OWEyZjA4OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2VyaWFsaXplZFBsYXRmb3JtRGF0YUN1ZVZhbHVl
LmgKQEAgLTMwLDEwICszMCw2IEBACiAjaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotI2lmICFkZWZpbmVkKF9fT0JKQ19fKQotdHlwZWRlZiBz
dHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShDT0NPQSkKIHVz
aW5nIFBsYXRmb3JtTmF0aXZlVmFsdWUgPSBpZDsKICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmNwcAppbmRleCBjNTY4Nzc2N2M5ODk5Yjg2ODkz
YjNlMTVjOWQyNTYzN2FjZmM2M2FjLi4zNGVkM2U4ZWI4NDRjNjBhMzRhMDlkZjdlOGFkN2FmMGVj
NDBkMjdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFF1YWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVh
ZC5jcHAKQEAgLTIyNyw0ICsyMjcsMjQgQEAgYm9vbCBGbG9hdFF1YWQ6OmlzQ291bnRlcmNsb2Nr
d2lzZSgpIGNvbnN0CiAgICAgcmV0dXJuIGRldGVybWluYW50KG1fcDIgLSBtX3AxLCBtX3AzIC0g
bV9wMikgPCAwOwogfQogCitWZWN0b3I8RmxvYXRSZWN0PiBib3VuZGluZ0JveGVzKGNvbnN0IFZl
Y3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykKK3sKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiBib3hlczsK
KyAgICBib3hlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KHF1YWRzLnNpemUoKSk7CisgICAgZm9y
IChjb25zdCBhdXRvJiBxdWFkIDogcXVhZHMpCisgICAgICAgIGJveGVzLnVuY2hlY2tlZEFwcGVu
ZChxdWFkLmJvdW5kaW5nQm94KCkpOworICAgIHJldHVybiBib3hlczsKK30KKworRmxvYXRSZWN0
IHVuaXRlZEJvdW5kaW5nQm94ZXMoY29uc3QgVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQorewor
ICAgIGF1dG8gc2l6ZSA9IHF1YWRzLnNpemUoKTsKKyAgICBpZiAoIXNpemUpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgYXV0byByZXN1bHQgPSBxdWFkc1swXS5ib3VuZGluZ0JveCgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICByZXN1bHQudW5pdGVF
dmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UXVhZC5oCmluZGV4IGNhZjlkNzI2MmFhZGFlOTJjNTRiNDYzNjJiNTg1ZDg5
NDFkMDUxODYuLjE4MGNjZjEzMzZlZjJhZmE2M2YwZjQzZTg2YjQ4MzFiZmM5ZmVhZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5oCkBAIC0yNiwxNSAr
MjYsMTYgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBGbG9hdFF1YWRfaAotI2RlZmlu
ZSBGbG9hdFF1YWRfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJGbG9hdFBvaW50LmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gRklYTUU6IFNlZW1zIGxp
a2UgdGhpcyB3b3VsZCBiZSBiZXR0ZXIgYXMgYSBzdHJ1Y3QuCisKIC8vIEEgRmxvYXRRdWFkIGlz
IGEgY29sbGVjdGlvbiBvZiA0IHBvaW50cywgb2Z0ZW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQg
b2YKIC8vIG1hcHBpbmcgYSByZWN0YW5nbGUgdGhyb3VnaCB0cmFuc2Zvcm1zLiBXaGVuIGluaXRp
YWxpemVkIGZyb20gYSByZWN0LCB0aGUKIC8vIHBvaW50cyBhcmUgaW4gY2xvY2t3aXNlIG9yZGVy
IGZyb20gdG9wIGxlZnQuCkBAIC0xNjUsMjIgKzE2NiwxNSBAQCBpbmxpbmUgRmxvYXRRdWFkJiBv
cGVyYXRvci09KEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRTaXplJiBiKQogCiBpbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IEZsb2F0UXVhZCYgYSwgY29uc3QgRmxvYXRRdWFkJiBiKQogewot
ICAgIHJldHVybiBhLnAxKCkgPT0gYi5wMSgpICYmCi0gICAgICAgICAgIGEucDIoKSA9PSBiLnAy
KCkgJiYgCi0gICAgICAgICAgIGEucDMoKSA9PSBiLnAzKCkgJiYKLSAgICAgICAgICAgYS5wNCgp
ID09IGIucDQoKTsKKyAgICByZXR1cm4gYS5wMSgpID09IGIucDEoKSAmJiBhLnAyKCkgPT0gYi5w
MigpICYmIGEucDMoKSA9PSBiLnAzKCkgJiYgYS5wNCgpID09IGIucDQoKTsKIH0KIAogaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBGbG9hdFF1YWQmIGEsIGNvbnN0IEZsb2F0UXVhZCYgYikK
IHsKLSAgICByZXR1cm4gYS5wMSgpICE9IGIucDEoKSB8fAotICAgICAgICAgICBhLnAyKCkgIT0g
Yi5wMigpIHx8IAotICAgICAgICAgICBhLnAzKCkgIT0gYi5wMygpIHx8Ci0gICAgICAgICAgIGEu
cDQoKSAhPSBiLnA0KCk7CisgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotfSAgIC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLQotI2VuZGlmIC8vIEZsb2F0UXVhZF9oCitWZWN0b3I8RmxvYXRSZWN0
PiBib3VuZGluZ0JveGVzKGNvbnN0IFZlY3RvcjxGbG9hdFF1YWQ+Jik7CitXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3QgdW5pdGVkQm91bmRpbmdCb3hlcyhjb25zdCBWZWN0b3I8RmxvYXRRdWFkPiYp
OwogCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL1Jlc291cmNlSGFuZGxlLmgKaW5kZXggMTllMWE2YjdmYmMxOTE0ZjcxNjczOWY1
N2Y4YjZiNjhkZmE3NTY3MC4uYTM0NTI0NzY4ZjRiMjhiMzFiNjc3ZGUzMGE5ZjcwYTRjNzJhMWZh
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUhh
bmRsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VIYW5k
bGUuaApAQCAtNTIsOSArNTIsNiBAQCBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIE9CSkNfQ0xB
U1MgTlNFcnJvcjsKIE9CSkNfQ0xBU1MgTlNVUkxDb25uZWN0aW9uOwogT0JKQ19DTEFTUyBOU1VS
TFJlcXVlc3Q7Ci0jaWZuZGVmIF9fT0JKQ19fCi10eXBlZGVmIHN0cnVjdCBvYmpjX29iamVjdCAq
aWQ7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWYgVVNFKENGVVJMQ09OTkVDVElPTikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2YvQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UuaAppbmRleCAzZjY0OGUwNjA0MGI1M2FiNzhmNmVhYWRhMDIzNTRhZmNmOThj
NDcwLi5iNGNhNzljMzVmZDgwMGE3N2MxZTYxMTQ1NDdiY2U5MDk4YzA5ODQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2NmL0F1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jZi9BdXRoZW50aWNh
dGlvbkNoYWxsZW5nZS5oCkBAIC0zMCwxNyArMzAsOSBAQAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KIAogI2lmIFVTRShDRlVSTENPTk5FQ1RJT04pCi0KIHR5cGVkZWYgc3RydWN0IF9DRlVSTEF1
dGhDaGFsbGVuZ2UqIENGVVJMQXV0aENoYWxsZW5nZVJlZjsKLQogI2Vsc2UKLQotI2lmbmRlZiBf
X09CSkNfXwotdHlwZWRlZiBzdHJ1Y3Qgb2JqY19vYmplY3QgKmlkOwotI2VuZGlmCi0KIE9CSkNf
Q0xBU1MgTlNVUkxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZTsKLQogI2VuZGlmCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTQ5LDYgKzQxLDcgQEAgY2xhc3MgQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UgOiBwdWJsaWMgQXV0aGVudGljYXRpb25DaGFsbGVuZ2VCYXNlIHsKIHB1YmxpYzoKICAgICBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSgpIHt9CiAgICAgV0VCQ09SRV9FWFBPUlQgQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoY29uc3QgUHJvdGVjdGlvblNwYWNlJiwgY29uc3QgQ3JlZGVudGlhbCYg
cHJvcG9zZWRDcmVkZW50aWFsLCB1bnNpZ25lZCBwcmV2aW91c0ZhaWx1cmVDb3VudCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKwogI2lmIFVTRShDRlVS
TENPTk5FQ1RJT04pCiAgICAgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoQ0ZVUkxBdXRoQ2hhbGxl
bmdlUmVmLCBBdXRoZW50aWNhdGlvbkNsaWVudCopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggOGEwMmJlNGViZTdlZTkwY2RlYTI0MGRmYmYxOGVl
MzVlODcyMjc2Ni4uYzE0YjBmYzdiZGQ3OWJjODhlZWYxMWViYTVkNGI2ZjViMTQ0NTdlMSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApAQCAtODYzLDcgKzg2
Myw3IEBAIGF1dG8gSW5saW5lVGV4dEJveDo6cmVzb2x2ZVN0eWxlRm9yTWFya2VkVGV4dChjb25z
dCBNYXJrZWRUZXh0JiBtYXJrZWRUZXh0LCBjb25zCiAjaWYgUExBVEZPUk0oTUFDKQogICAgICAg
ICBzdHlsZS50ZXh0U3R5bGVzLmZpbGxDb2xvciA9IHJlbmRlcmVyKCkudGhlbWUoKS5zeXN0ZW1D
b2xvcihDU1NWYWx1ZUFwcGxlU3lzdGVtTGFiZWwsIHN0eWxlQ29sb3JPcHRpb25zKTsKICNlbmRp
ZgotICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBtYXJrZWRUZXh0Lm1hcmtlci0+aXNB
Y3RpdmVNYXRjaCgpID8gcmVuZGVyZXIoKS50aGVtZSgpLmFjdGl2ZVRleHRTZWFyY2hIaWdobGln
aHRDb2xvcihzdHlsZUNvbG9yT3B0aW9ucykgOiByZW5kZXJlcigpLnRoZW1lKCkuaW5hY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Ioc3R5bGVDb2xvck9wdGlvbnMpOworICAgICAgICBzdHls
ZS5iYWNrZ3JvdW5kQ29sb3IgPSByZW5kZXJlcigpLnRoZW1lKCkudGV4dFNlYXJjaEhpZ2hsaWdo
dENvbG9yKHN0eWxlQ29sb3JPcHRpb25zKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKaW5kZXggNDBiYTFhZTIxNzYwMjU4
MjQ3OGYyNjUwNzhhYWRmMjM1OTdhNzUwOS4uNGYzNzhkNzM1ZjhmYjJhZDZjZjk4NmY2ZTJhZDk5
NjJhOGFiZGQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKQEAgLTEw
MzcsMjQgKzEwMzcsMTggQEAgdm9pZCBSZW5kZXJCb3g6OmNvbXB1dGVJbnRyaW5zaWNMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3UKIExheW91dFVuaXQgUmVu
ZGVyQm94OjptaW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgoKSBjb25zdAogewogICAgIGlmIChwcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoKSkgewotI2lmbmRlZiBOREVCVUcKLSAgICAgICAgU2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoY29uc3RfY2Fz
dDxSZW5kZXJCb3gqPih0aGlzKSk7Ci0jZW5kaWYKLSAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJC
b3gqPih0aGlzKS0+Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKKyAgICAgICAgU2V0
TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOwor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCY+KCp0aGlzKS5jb21wdXRlUHJlZmVycmVkTG9n
aWNhbFdpZHRocygpOwogICAgIH0KLSAgICAgICAgCiAgICAgcmV0dXJuIG1fbWluUHJlZmVycmVk
TG9naWNhbFdpZHRoOwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJveDo6bWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoKCkgY29uc3QKIHsKICAgICBpZiAocHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5
KCkpIHsKLSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNj
b3BlIGxheW91dEZvcmJpZGRlblNjb3BlKGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcykpOwot
I2VuZGlmCi0gICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCk7CisgICAgICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNj
b3BlIGxheW91dEZvcmJpZGRlblNjb3BlKCp0aGlzKTsKKyAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJCb3gmPigqdGhpcykuY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKTsKICAgICB9Ci0g
ICAgICAgIAogICAgIHJldHVybiBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCmluZGV4IGQzZWI0NjNhY2I4
YmRiZTdmYjVkMGY3MWRmZWY4ODY0N2I1N2U5ZmYuLmVhZDlkNzY0MGNlNDY0ZDYyOTg3YjViYTc3
ZTI5MDA1ZTMzNmY1NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRl
ci5jcHAKQEAgLTQzNiwxNCArNDM2LDEyIEBAIHZvaWQgUmVuZGVyQ291bnRlcjo6dXBkYXRlQ291
bnRlcigpCiAKIHZvaWQgUmVuZGVyQ291bnRlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0
aHMoZmxvYXQgbGVhZCkKIHsKLSNpZm5kZWYgTkRFQlVHCiAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBtb2RpZnlpbmcgdGhlIHRyZWUgaW4gY29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0
aHMuCiAgICAgLy8gSW5zdGVhZCwgd2Ugc2hvdWxkIHByb3Blcmx5IGhvb2sgdGhlIGFwcHJvcHJp
YXRlIGNoYW5nZXMgaW4gdGhlIERPTSBhbmQgbW9kaWZ5CiAgICAgLy8gdGhlIHJlbmRlciB0cmVl
IHRoZW4uIFdoZW4gdGhhdCdzIGRvbmUsIHdlIGFsc28gd29uJ3QgbmVlZCB0byBvdmVycmlkZQog
ICAgIC8vIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzIGF0IGFsbC4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODI5Ci0gICAgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUodGhpcywgZmFsc2UpOwot
I2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVu
U2NvcGUoKnRoaXMsIGZhbHNlKTsKIAogICAgIHNldFJlbmRlcmVkVGV4dChvcmlnaW5hbFRleHQo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5j
cHAKaW5kZXggMDgxZDRjNzY0MDNhOGViYmUwMDc5ZGEyMTI1M2NhMmZlMGJhY2JkMi4uNGJiZTNl
MDk2ZmEyMjMzY2JmZTZhYzMwNmJmYTFmN2IxYjAzM2JlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI4OTAsOSArMjg5MCw3IEBA
IHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludEludG9MYXllcihjb25zdCBHcmFwaGljc0xh
eWVyKiBncmFwaGljc0xheWVyLCBHcmFwCiAgICAgaWYgKGV2ZW50UmVnaW9uQ29udGV4dCkKICAg
ICAgICAgcGFpbnRGbGFncy5hZGQoUmVuZGVyTGF5ZXI6OlBhaW50TGF5ZXJDb2xsZWN0aW5nRXZl
bnRSZWdpb24pOwogCi0jaWZuZGVmIE5ERUJVRwotICAgIFJlbmRlckVsZW1lbnQ6OlNldExheW91
dE5lZWRlZEZvcmJpZGRlblNjb3BlIGZvcmJpZFNldE5lZWRzTGF5b3V0KCZyZW5kZXJlcigpKTsK
LSNlbmRpZgorICAgIFJlbmRlck9iamVjdDo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUg
Zm9yYmlkU2V0TmVlZHNMYXlvdXQocmVuZGVyZXIoKSk7CiAKICAgICBhdXRvIHBhaW50T25lTGF5
ZXIgPSBbJl0oUmVuZGVyTGF5ZXImIGxheWVyLCBPcHRpb25TZXQ8UmVuZGVyTGF5ZXI6OlBhaW50
TGF5ZXJGbGFnPiBwYWludEZsYWdzKSB7CiAgICAgICAgIEZyYW1lVmlldzo6UGFpbnRpbmdTdGF0
ZSBwYWludGluZ1N0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAppbmRleCBiMjQzZDE4NzMwYjYxMzc4NDdiNGZhNWZlYWQ0ZGY2YWNkYTg2OGVmLi5jMDM1MDM1
YjA5MGNmNmJiMWMwMWEwNTUzN2ZmNTdiNDcxOTAxZTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAw
NCBBbGxhbiBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gKGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLykK
ICAqCkBAIC04NiwxOSArODYsMjAgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogV1RG
X01BS0VfSVNPX0FMTE9DQVRFRF9JTVBMKFJlbmRlck9iamVjdCk7CiAKLSNpZm5kZWYgTkRFQlVH
CisjaWYgQVNTRVJUX0VOQUJMRUQKIAotUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3Ji
aWRkZW5TY29wZTo6U2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJPYmplY3QsIGJvb2wgaXNGb3JiaWRkZW4pCitSZW5kZXJPYmplY3Q6OlNldExheW91dE5l
ZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZShjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgYm9vbCBpc0ZvcmJpZGRlbikKICAgICA6IG1fcmVu
ZGVyT2JqZWN0KHJlbmRlck9iamVjdCkKLSAgICAsIG1fcHJlZXhpc3RpbmdGb3JiaWRkZW4obV9y
ZW5kZXJPYmplY3QtPmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSkKKyAgICAsIG1fcHJlZXhp
c3RpbmdGb3JiaWRkZW4obV9yZW5kZXJPYmplY3QuaXNTZXROZWVkc0xheW91dEZvcmJpZGRlbigp
KQogewotICAgIG1fcmVuZGVyT2JqZWN0LT5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKGlzRm9y
YmlkZGVuKTsKKyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKGlz
Rm9yYmlkZGVuKTsKIH0KIAogUmVuZGVyT2JqZWN0OjpTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5T
Y29wZTo6flNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKCkKIHsKLSAgICBtX3JlbmRlck9i
amVjdC0+c2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihtX3ByZWV4aXN0aW5nRm9yYmlkZGVuKTsK
KyAgICBtX3JlbmRlck9iamVjdC5zZXROZWVkc0xheW91dElzRm9yYmlkZGVuKG1fcHJlZXhpc3Rp
bmdGb3JiaWRkZW4pOwogfQorCiAjZW5kaWYKIAogc3RydWN0IFNhbWVTaXplQXNSZW5kZXJPYmpl
Y3QgewpAQCAtNTIyLDExICs1MjMsOSBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5p
bmdCbG9ja3NGb3JMYXlvdXQoU2NoZWR1bGVSZWxheW91dCBzY2hlZHVsZVJlbGF5bwogICAgIGJv
b2wgaGFzT3V0T2ZGbG93UG9zaXRpb24gPSAhaXNUZXh0KCkgJiYgc3R5bGUoKS5oYXNPdXRPZkZs
b3dQb3NpdGlvbigpOwogCiAgICAgd2hpbGUgKGFuY2VzdG9yKSB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSB3ZSByZW1vdmUgdGhlIHNwZWNpYWwg
Y2FzZXMgZm9yIGNvdW50ZXJzLCBxdW90ZXMgYW5kIG1hdGhtbAotICAgICAgICAvLyBjYWxsaW5n
IHNldE5lZWRzTGF5b3V0IGR1cmluZyBwcmVmZXJyZWQgd2lkdGggY29tcHV0YXRpb24uCi0gICAg
ICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKGFu
Y2VzdG9yLCBpc1NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuKCkpOwotI2VuZGlmCisgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHdlIHJlbW92ZSB0aGUgc3BlY2lhbCBjYXNlcyBmb3Ig
Y291bnRlcnMsIHF1b3RlcyBhbmQgbWF0aG1sIGNhbGxpbmcgc2V0TmVlZHNMYXlvdXQgZHVyaW5n
IHByZWZlcnJlZCB3aWR0aCBjb21wdXRhdGlvbi4KKyAgICAgICAgU2V0TGF5b3V0TmVlZGVkRm9y
YmlkZGVuU2NvcGUgbGF5b3V0Rm9yYmlkZGVuU2NvcGUoKmFuY2VzdG9yLCBpc1NldE5lZWRzTGF5
b3V0Rm9yYmlkZGVuKCkpOworCiAgICAgICAgIC8vIERvbid0IG1hcmsgdGhlIG91dGVybW9zdCBv
YmplY3Qgb2YgYW4gdW5yb290ZWQgc3VidHJlZS4gVGhhdCBvYmplY3Qgd2lsbCBiZQogICAgICAg
ICAvLyBtYXJrZWQgd2hlbiB0aGUgc3VidHJlZSBpcyBhZGRlZCB0byB0aGUgZG9jdW1lbnQuCiAg
ICAgICAgIGF1dG8gY29udGFpbmVyID0gYW5jZXN0b3ItPmNvbnRhaW5lcigpOwpAQCAtNzE0LDE1
ICs3MTMsNyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3Qo
Ym9vbCB1c2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZAogICAgIGlmICh1c2VUcmFuc2Zvcm1z
KSB7CiAgICAgICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwogICAgICAgICBhYnNvbHV0ZVF1
YWRzKHF1YWRzLCB3YXNGaXhlZCk7Ci0KLSAgICAgICAgc2l6ZV90IG4gPSBxdWFkcy5zaXplKCk7
Ci0gICAgICAgIGlmICghbikKLSAgICAgICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgCi0g
ICAgICAgIEludFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBuOyArK2kpCi0gICAgICAgICAgICByZXN1
bHQudW5pdGUocXVhZHNbaV0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7Ci0gICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5n
Qm94ZXMocXVhZHMpKTsKICAgICB9CiAKICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGxvY2FsVG9B
YnNvbHV0ZShGbG9hdFBvaW50KCksIDAgLyogaWdub3JlIHRyYW5zZm9ybXMgKi8sIHdhc0ZpeGVk
KTsKQEAgLTc1OCwyMSArNzQ5LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNS
aW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mIHF1YWRzKQogRmxvYXRSZWN0IFJlbmRlck9iamVj
dDo6YWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBSYW5nZSogcmFuZ2UpCiB7
CiAgICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdCgpOwotCisgICAgICAg
IHJldHVybiB7IH07CiAgICAgcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS51cGRhdGVMYXlvdXQoKTsK
LQotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLT5hYnNvbHV0ZVRleHRR
dWFkcyhxdWFkcyk7Ci0KLSAgICBpZiAocXVhZHMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
RmxvYXRSZWN0KCk7Ci0KLSAgICBGbG9hdFJlY3QgcmVzdWx0ID0gcXVhZHNbMF0uYm91bmRpbmdC
b3goKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytpKQotICAg
ICAgICByZXN1bHQudW5pdGVFdmVuSWZFbXB0eShxdWFkc1tpXS5ib3VuZGluZ0JveCgpKTsKLQot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHVuaXRlZEJvdW5kaW5nQm94ZXMoYWJzb2x1
dGVUZXh0UXVhZHMoKnJhbmdlKSk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRBYnNvbHV0
ZVJlY3RGb3JMYXllcihMYXlvdXRSZWN0JiByZXN1bHQpCkBAIC0xOTA4LDYgKzE4ODcsMjEgQEAg
Ym9vbCBSZW5kZXJPYmplY3Q6Omhhc05vbkVtcHR5VmlzaWJsZVJlY3RSZXNwZWN0aW5nUGFyZW50
RnJhbWVzKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK1ZlY3RvcjxGbG9hdFF1YWQ+
IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBib29sIHVzZVNlbGVjdGlvbkhlaWdodCkKK3sKKyAgICBWZWN0b3I8RmxvYXRRdWFkPiBxdWFk
czsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAg
ICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKHJlbmRl
cmVyICYmIHJlbmRlcmVyLT5pc0JSKCkpCisgICAgICAgICAgICByZW5kZXJlci0+YWJzb2x1dGVR
dWFkcyhxdWFkcyk7CisgICAgICAgIGVsc2UgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkg
eworICAgICAgICAgICAgYXV0byBvZmZzZXRSYW5nZSA9IGNoYXJhY3RlckRhdGFPZmZzZXRSYW5n
ZShyYW5nZSwgZG93bmNhc3Q8Q2hhcmFjdGVyRGF0YT4obm9kZSkpOworICAgICAgICAgICAgcXVh
ZHMuYXBwZW5kVmVjdG9yKGRvd25jYXN0PFJlbmRlclRleHQ+KCpyZW5kZXJlcikuYWJzb2x1dGVR
dWFkc0ZvclJhbmdlKG9mZnNldFJhbmdlLnN0YXJ0LCBvZmZzZXRSYW5nZS5lbmQsIHVzZVNlbGVj
dGlvbkhlaWdodCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBxdWFkczsKK30KKwog
U3RyaW5nIFJlbmRlck9iamVjdDo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgU3Ry
aW5nQnVpbGRlciBidWlsZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CmluZGV4IDVjMDRiZWY3OWI0NDBjODU3M2NjNjVjNTVkMzg2NDI4OGMzYTVmYzUuLmI5MzFkNDY3
M2UzYTEyMTgzYWY3NjQ0ZjAzNmNmNDlkZTg3YWEzNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKQEAgLTMsNyArMyw3IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDAg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDQgQWxs
YW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQotICogQ29weXJpZ2h0IChDKSAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTc3LDYgKzc3LDcgQEAgY2xh
c3MgU2VsZWN0aW9uUmVjdDsKICNlbmRpZgogCiBzdHJ1Y3QgUGFpbnRJbmZvOworc3RydWN0IFNp
bXBsZVJhbmdlOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGNvbnN0IGludCBjYXJldFdp
ZHRoID0gMjsgLy8gVGhpcyB2YWx1ZSBzaG91bGQgYmUga2VwdCBpbiBzeW5jIHdpdGggVUlLaXQu
IFNlZSA8cmRhcjovL3Byb2JsZW0vMTU1ODA2MDE+LgpAQCAtMTUxLDIwICsxNTIsMTMgQEAgcHVi
bGljOgogICAgIC8vIFNjcm9sbGluZyBpcyBhIFJlbmRlckJveCBjb25jZXB0LCBob3dldmVyIHNv
bWUgY29kZSBqdXN0IGNhcmVzIGFib3V0IHJlY3Vyc2l2ZWx5IHNjcm9sbGluZyBvdXIgZW5jbG9z
aW5nIFNjcm9sbGFibGVBcmVhKHMpLgogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgc2Nyb2xsUmVj
dFRvVmlzaWJsZShjb25zdCBMYXlvdXRSZWN0JiBhYnNvbHV0ZVJlY3QsIGJvb2wgaW5zaWRlRml4
ZWQsIGNvbnN0IFNjcm9sbFJlY3RUb1Zpc2libGVPcHRpb25zJik7CiAKLSAgICAvLyBDb252ZW5p
ZW5jZSBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0byB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYm94IG9m
IGEgUmVuZGVyT2JqZWN0LgorICAgIC8vIE5lYXJlc3QgZW5jbG9zaW5nIGJveC4KICAgICBXRUJD
T1JFX0VYUE9SVCBSZW5kZXJCb3gmIGVuY2xvc2luZ0JveCgpIGNvbnN0OwogICAgIFJlbmRlckJv
eE1vZGVsT2JqZWN0JiBlbmNsb3NpbmdCb3hNb2RlbE9iamVjdCgpIGNvbnN0OwogICAgIGNvbnN0
IFJlbmRlckJveCogZW5jbG9zaW5nU2Nyb2xsYWJsZUNvbnRhaW5lckZvclNuYXBwaW5nKCkgY29u
c3Q7CiAKLSAgICAvLyBGdW5jdGlvbiB0byByZXR1cm4gb3VyIGVuY2xvc2luZyBmbG93IHRocmVh
ZCBpZiB3ZSBhcmUgY29udGFpbmVkIGluc2lkZSBvbmUuIFRoaXMKLSAgICAvLyBmdW5jdGlvbiBm
b2xsb3dzIHRoZSBjb250YWluaW5nIGJsb2NrIGNoYWluLgotICAgIFJlbmRlckZyYWdtZW50ZWRG
bG93KiBlbmNsb3NpbmdGcmFnbWVudGVkRmxvdygpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
ZnJhZ21lbnRlZEZsb3dTdGF0ZSgpID09IE5vdEluc2lkZUZyYWdtZW50ZWRGbG93KQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcmV0dXJuIGxvY2F0ZUVuY2xvc2luZ0Zy
YWdtZW50ZWRGbG93KCk7Ci0gICAgfQorICAgIC8vIFJldHVybiBvdXIgZW5jbG9zaW5nIGZsb3cg
dGhyZWFkIGlmIHdlIGFyZSBjb250YWluZWQgaW5zaWRlIG9uZS4gRm9sbG93cyB0aGUgY29udGFp
bmluZyBibG9jayBjaGFpbi4KKyAgICBSZW5kZXJGcmFnbWVudGVkRmxvdyogZW5jbG9zaW5nRnJh
Z21lbnRlZEZsb3coKSBjb25zdDsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgdXNlRGFya0Fw
cGVhcmFuY2UoKSBjb25zdDsKICAgICBPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gc3R5
bGVDb2xvck9wdGlvbnMoKSBjb25zdDsKQEAgLTE3MiwyMCArMTY2LDEyIEBAIHB1YmxpYzoKICNp
ZiBBU1NFUlRfRU5BQkxFRAogICAgIHZvaWQgc2V0SGFzQVhPYmplY3QoYm9vbCBmbGFnKSB7IG1f
aGFzQVhPYmplY3QgPSBmbGFnOyB9CiAgICAgYm9vbCBoYXNBWE9iamVjdCgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQVhPYmplY3Q7IH0KKyNlbmRpZgogCi0gICAgLy8gSGVscGVyIGNsYXNzIGZvcmJp
ZGRpbmcgY2FsbHMgdG8gc2V0TmVlZHNMYXlvdXQoKSBkdXJpbmcgaXRzIGxpZmV0aW1lLgotICAg
IGNsYXNzIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIGV4cGxpY2l0IFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlKFJlbmRlck9iamVjdCos
IGJvb2wgaXNGb3JiaWRkZW4gPSB0cnVlKTsKLSAgICAgICAgflNldExheW91dE5lZWRlZEZvcmJp
ZGRlblNjb3BlKCk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVuZGVyT2JqZWN0KiBtX3JlbmRl
ck9iamVjdDsKLSAgICAgICAgYm9vbCBtX3ByZWV4aXN0aW5nRm9yYmlkZGVuOwotICAgIH07Ci0j
ZW5kaWYgLy8gQVNTRVJUX0VOQUJMRUQKKyAgICAvLyBGb3JiaWQgY2FsbHMgdG8gc2V0TmVlZHNM
YXlvdXQoKSBkdXJpbmcgaXRzIGxpZmV0aW1lLgorICAgIGNsYXNzIFNldExheW91dE5lZWRlZEZv
cmJpZGRlblNjb3BlOwogCi0gICAgLy8gT2J0YWlucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYmxv
Y2sgKGluY2x1ZGluZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1dGVzIGEgZmlyc3QtbGluZSBz
dHlsZSB0byBvdXIgaW5saW5lCi0gICAgLy8gY2hpbGRyZW4uCisgICAgLy8gT2J0YWlucyB0aGUg
bmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGluZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRy
aWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIgaW5saW5lIGNoaWxkcmVuLgogICAgIHZp
cnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7CiAgICAgCiAgICAgLy8g
UmVuZGVyT2JqZWN0IHRyZWUgbWFuaXB1bGF0aW9uCkBAIC0zOTMsMjIgKzM3OSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaGFzQXNwZWN0UmF0aW8oKSBjb25zdCB7IHJldHVybiBpc1JlcGxhY2Vk
KCkgJiYgKGlzSW1hZ2UoKSB8fCBpc1ZpZGVvKCkgfHwgaXNDYW52YXMoKSk7IH0KICAgICBib29s
IGlzQW5vbnltb3VzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaXNBbm9ueW1vdXMoKTsg
fQotICAgIGJvb2wgaXNBbm9ueW1vdXNCbG9jaygpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGtlcHQgaW4gc3luYyB3aXRoIGFub255bW91cyBibG9jayBjcmVhdGlv
biBjb25kaXRpb25zIGluCi0gICAgICAgIC8vIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNC
bG9jaygpLiBUaGlzIGluY2x1ZGVzIGNyZWF0aW5nIGFuIGFub255bW91cwotICAgICAgICAvLyBS
ZW5kZXJCbG9jayBoYXZpbmcgYSBEaXNwbGF5VHlwZTo6QmxvY2sgb3IgRGlzcGxheVR5cGU6OkJv
eCBkaXNwbGF5LiBPdGhlciBjbGFzc2VzIHN1Y2ggYXMgUmVuZGVyVGV4dEZyYWdtZW50Ci0gICAg
ICAgIC8vIGFyZSBub3QgUmVuZGVyQmxvY2tzIGFuZCB3aWxsIHJldHVybiBmYWxzZS4gU2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01NjcwOS4gCi0gICAgICAgIHJl
dHVybiBpc0Fub255bW91cygpICYmIChzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6
QmxvY2sgfHwgc3R5bGUoKS5kaXNwbGF5KCkgPT0gRGlzcGxheVR5cGU6OkJveCkgJiYgc3R5bGUo
KS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSAmJiBpc1JlbmRlckJsb2NrKCkgJiYgIWlz
TGlzdE1hcmtlcigpICYmICFpc1JlbmRlckZyYWdtZW50ZWRGbG93KCkgJiYgIWlzUmVuZGVyTXVs
dGlDb2x1bW5TZXQoKSAmJiAhaXNSZW5kZXJWaWV3KCkKLSNpZiBFTkFCTEUoRlVMTFNDUkVFTl9B
UEkpCi0gICAgICAgICAgICAmJiAhaXNSZW5kZXJGdWxsU2NyZWVuKCkKLSAgICAgICAgICAgICYm
ICFpc1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCi0jZW5kaWYKLSNpZiBFTkFCTEUoTUFU
SE1MKQotICAgICAgICAgICAgJiYgIWlzUmVuZGVyTWF0aE1MQmxvY2soKQotI2VuZGlmCi0gICAg
ICAgICAgICA7Ci0gICAgfQorICAgIGJvb2wgaXNBbm9ueW1vdXNCbG9jaygpIGNvbnN0OwogCiAg
ICAgYm9vbCBpc0Zsb2F0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZmxvYXRpbmco
KTsgfQogCkBAIC00NTAsMTkgKzQyMSwxMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNWaXNpYmxl
Qm94RGVjb3JhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5ib3hEZWNvcmF0aW9u
U3RhdGUoKSAhPSBOb0JveERlY29yYXRpb25zOyB9CiAgICAgYm9vbCBiYWNrZ3JvdW5kSXNLbm93
blRvQmVPYnNjdXJlZChjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpOwogCi0gICAgYm9v
bCBuZWVkc0xheW91dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9iaXRmaWVsZHMu
bmVlZHNMYXlvdXQoKSB8fCBtX2JpdGZpZWxkcy5ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgfHwg
bV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpCi0gICAgICAgICAgICB8fCBtX2JpdGZp
ZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCkgfHwgbV9iaXRmaWVsZHMubmVl
ZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQoKTsKLSAgICB9Ci0KKyAgICBib29sIG5lZWRzTGF5
b3V0KCkgY29uc3Q7CiAgICAgYm9vbCBzZWxmTmVlZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBt
X2JpdGZpZWxkcy5uZWVkc0xheW91dCgpOyB9CiAgICAgYm9vbCBuZWVkc1Bvc2l0aW9uZWRNb3Zl
bWVudExheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1v
dmVtZW50TGF5b3V0KCk7IH0KLSAgICBib29sIG5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0
T25seSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNQb3Np
dGlvbmVkTW92ZW1lbnRMYXlvdXQoKSAmJiAhbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKSAmJiAh
bV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgpCi0gICAgICAgICAgICAmJiAhbV9i
aXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFtX2JpdGZpZWxkcy5uZWVkc1NpbXBs
aWZpZWROb3JtYWxGbG93TGF5b3V0KCk7Ci0gICAgfQorICAgIGJvb2wgbmVlZHNQb3NpdGlvbmVk
TW92ZW1lbnRMYXlvdXRPbmx5KCkgY29uc3Q7CiAKICAgICBib29sIHBvc0NoaWxkTmVlZHNMYXlv
dXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRzTGF5b3V0KCk7IH0K
ICAgICBib29sIG5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKSBjb25zdCB7IHJldHVy
biBtX2JpdGZpZWxkcy5uZWVkc1NpbXBsaWZpZWROb3JtYWxGbG93TGF5b3V0KCk7IH0KQEAgLTUx
MiwxNyArNDc0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRo
c0RpcnR5KGJvb2wsIE1hcmtpbmdCZWhhdmlvciA9IE1hcmtDb250YWluaW5nQmxvY2tDaGFpbik7
CiAgICAgdm9pZCBpbnZhbGlkYXRlQ29udGFpbmVyUHJlZmVycmVkTG9naWNhbFdpZHRocygpOwog
ICAgIAotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCkKLSAgICB7
Ci0gICAgICAgIHNldE5lZWRzTGF5b3V0KCk7Ci0gICAgICAgIHNldFByZWZlcnJlZExvZ2ljYWxX
aWR0aHNEaXJ0eSh0cnVlKTsKLSAgICB9CisgICAgdm9pZCBzZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKIAotICAgIHZvaWQgc2V0UG9zaXRpb25TdGF0ZShQb3NpdGlvblR5cGUg
cG9zaXRpb24pCi0gICAgewotICAgICAgICBBU1NFUlQoKHBvc2l0aW9uICE9IFBvc2l0aW9uVHlw
ZTo6QWJzb2x1dGUgJiYgcG9zaXRpb24gIT0gUG9zaXRpb25UeXBlOjpGaXhlZCkgfHwgaXNCb3go
KSk7Ci0gICAgICAgIG1fYml0ZmllbGRzLnNldFBvc2l0aW9uZWRTdGF0ZShzdGF0aWNfY2FzdDxp
bnQ+KHBvc2l0aW9uKSk7Ci0gICAgfQorICAgIHZvaWQgc2V0UG9zaXRpb25TdGF0ZShQb3NpdGlv
blR5cGUpOwogICAgIHZvaWQgY2xlYXJQb3NpdGlvbmVkU3RhdGUoKSB7IG1fYml0ZmllbGRzLmNs
ZWFyUG9zaXRpb25lZFN0YXRlKCk7IH0KIAogICAgIHZvaWQgc2V0RmxvYXRpbmcoYm9vbCBiID0g
dHJ1ZSkgeyBtX2JpdGZpZWxkcy5zZXRGbG9hdGluZyhiKTsgfQpAQCAtNTY3LDcgKzUyMSw3IEBA
IHB1YmxpYzoKICAgICBWaXNpYmxlUG9zaXRpb24gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKGludCBv
ZmZzZXQsIEVBZmZpbml0eSkgY29uc3Q7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGNyZWF0ZVZpc2li
bGVQb3NpdGlvbihjb25zdCBQb3NpdGlvbiYpIGNvbnN0OwogCi0gICAgLy8gcmV0dXJucyB0aGUg
Y29udGFpbmluZyBibG9jayBsZXZlbCBlbGVtZW50IGZvciB0aGlzIGVsZW1lbnQuCisgICAgLy8g
UmV0dXJucyB0aGUgY29udGFpbmluZyBibG9jayBsZXZlbCBlbGVtZW50IGZvciB0aGlzIGVsZW1l
bnQuCiAgICAgV0VCQ09SRV9FWFBPUlQgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaygpIGNv
bnN0OwogICAgIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tGb3JPYmplY3RJbkZsb3coKSBj
b25zdDsKIApAQCAtNTc2LDEyICs1MzAsOSBAQCBwdWJsaWM6CiAgICAgRmxvYXRQb2ludCBhYnNv
bHV0ZVRvTG9jYWwoY29uc3QgRmxvYXRQb2ludCYsIE1hcENvb3JkaW5hdGVzRmxhZ3MgPSAwKSBj
b25zdDsKIAogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFic29sdXRlIGNvb3JkaW5h
dGVzLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCi0gICAgRmxvYXRRdWFkIGxvY2Fs
VG9BYnNvbHV0ZVF1YWQoY29uc3QgRmxvYXRRdWFkJiBxdWFkLCBNYXBDb29yZGluYXRlc0ZsYWdz
IG1vZGUgPSBVc2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZCA9IG51bGxwdHIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbG9jYWxUb0NvbnRhaW5lclF1YWQocXVhZCwgbnVsbHB0ciwg
bW9kZSwgd2FzRml4ZWQpOwotICAgIH0KKyAgICBGbG9hdFF1YWQgbG9jYWxUb0Fic29sdXRlUXVh
ZChjb25zdCBGbG9hdFF1YWQmLCBNYXBDb29yZGluYXRlc0ZsYWdzID0gVXNlVHJhbnNmb3Jtcywg
Ym9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25zdDsKICAgICAvLyBDb252ZXJ0IGFuIGFic29s
dXRlIHF1YWQgdG8gbG9jYWwgY29vcmRpbmF0ZXMuCi0gICAgRmxvYXRRdWFkIGFic29sdXRlVG9M
b2NhbFF1YWQoY29uc3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyBtb2RlID0gVXNl
VHJhbnNmb3JtcykgY29uc3Q7CisgICAgRmxvYXRRdWFkIGFic29sdXRlVG9Mb2NhbFF1YWQoY29u
c3QgRmxvYXRRdWFkJiwgTWFwQ29vcmRpbmF0ZXNGbGFncyA9IFVzZVRyYW5zZm9ybXMpIGNvbnN0
OwogCiAgICAgLy8gQ29udmVydCBhIGxvY2FsIHF1YWQgaW50byB0aGUgY29vcmRpbmF0ZSBzeXN0
ZW0gb2YgY29udGFpbmVyLCB0YWtpbmcgdHJhbnNmb3JtcyBpbnRvIGFjY291bnQuCiAgICAgV0VC
Q09SRV9FWFBPUlQgRmxvYXRRdWFkIGxvY2FsVG9Db250YWluZXJRdWFkKGNvbnN0IEZsb2F0UXVh
ZCYsIGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIE1hcENv
b3JkaW5hdGVzRmxhZ3MgPSBVc2VUcmFuc2Zvcm1zLCBib29sKiB3YXNGaXhlZCA9IG51bGxwdHIp
IGNvbnN0OwpAQCAtNjAwLDE1ICs1NTEsMTQgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lk
IGFic29sdXRlUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgTGF5b3V0UG9pbnQmKSBjb25z
dCB7IH0KIAotICAgIC8vIEZJWE1FOiB1c2VUcmFuc2Zvcm1zIHNob3VsZCBnbyBhd2F5IGV2ZW50
dWFsbHkKICAgICBXRUJDT1JFX0VYUE9SVCBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0
KGJvb2wgdXNlVHJhbnNmb3JtID0gdHJ1ZSwgYm9vbCogd2FzRml4ZWQgPSBudWxscHRyKSBjb25z
dDsKICAgICBJbnRSZWN0IGFic29sdXRlQm91bmRpbmdCb3hSZWN0SWdub3JpbmdUcmFuc2Zvcm1z
KCkgY29uc3QgeyByZXR1cm4gYWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoZmFsc2UpOyB9CiAKICAg
ICAvLyBCdWlsZCBhbiBhcnJheSBvZiBxdWFkcyBpbiBhYnNvbHV0ZSBjb29yZHMgZm9yIGxpbmUg
Ym94ZXMKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVRdWFkcyhWZWN0b3I8RmxvYXRRdWFkPiYs
IGJvb2wqIC8qd2FzRml4ZWQqLyA9IG51bGxwdHIpIGNvbnN0IHsgfQotCiAgICAgdmlydHVhbCB2
b2lkIGFic29sdXRlRm9jdXNSaW5nUXVhZHMoVmVjdG9yPEZsb2F0UXVhZD4mKTsKIAorICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8RmxvYXRRdWFkPiBhYnNvbHV0ZVRleHRRdWFkcyhj
b25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0ID0gZmFsc2UpOwogICAg
IHN0YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ0JveFJlY3RGb3JSYW5nZShjb25zdCBS
YW5nZSopOwogCiAgICAgLy8gdGhlIHJlY3QgdGhhdCB3aWxsIGJlIHBhaW50ZWQgaWYgdGhpcyBv
YmplY3QgaXMgcGFzc2VkIGFzIHRoZSBwYWludGluZ1Jvb3QKQEAgLTYyNyw4ICs1NzcsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBDdXJzb3JEaXJlY3RpdmUgZ2V0Q3Vyc29yKGNvbnN0IExheW91
dFBvaW50JiwgQ3Vyc29yJikgY29uc3Q7CiAKICAgICAvLyBSZXR1cm4gdGhlIFJlbmRlckxheWVy
TW9kZWxPYmplY3QgaW4gdGhlIGNvbnRhaW5lciBjaGFpbiB3aGljaCBpcyByZXNwb25zaWJsZSBm
b3IgcGFpbnRpbmcgdGhpcyBvYmplY3QsIG9yIG51bGxwdHIKLSAgICAvLyBpZiBwYWludGluZyBp
cyByb290LXJlbGF0aXZlLiBUaGlzIGlzIHRoZSBjb250YWluZXIgdGhhdCBzaG91bGQgYmUgcGFz
c2VkIHRvIHRoZSAnZm9yUmVwYWludCcKLSAgICAvLyBtZXRob2RzLgorICAgIC8vIGlmIHBhaW50
aW5nIGlzIHJvb3QtcmVsYXRpdmUuIFRoaXMgaXMgdGhlIGNvbnRhaW5lciB0aGF0IHNob3VsZCBi
ZSBwYXNzZWQgdG8gdGhlICdmb3JSZXBhaW50JyBmdW5jdGlvbnMuCiAgICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogY29udGFpbmVyRm9yUmVwYWludCgpIGNvbnN0OwogICAgIC8vIEFjdHVhbGx5
IGRvIHRoZSByZXBhaW50IG9mIHJlY3QgciBmb3IgdGhpcyBvYmplY3Qgd2hpY2ggaGFzIGJlZW4g
Y29tcHV0ZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2UKICAgICAvLyBvZiByZXBhaW50Q29udGFp
bmVyLiBJZiByZXBhaW50Q29udGFpbmVyIGlzIG51bGxwdHIsIHJlcGFpbnQgdmlhIHRoZSB2aWV3
LgpAQCAtNjQ2LDEwICs1OTUsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0
IHRoYXQgc2hvdWxkIGJlIHJlcGFpbnRlZCB3aGVuZXZlciB0aGlzIG9iamVjdCBjaGFuZ2VzLiAg
VGhlIHJlY3QgaXMgaW4gdGhlIHZpZXcncwogICAgIC8vIGNvb3JkaW5hdGUgc3BhY2UuICBUaGlz
IG1ldGhvZCBkZWFscyB3aXRoIG91dGxpbmVzIGFuZCBvdmVyZmxvdy4KLSAgICBMYXlvdXRSZWN0
IGFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQobnVsbHB0cik7Ci0gICAgfQorICAgIExh
eW91dFJlY3QgYWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0KCkgY29uc3QgeyByZXR1cm4gY2xp
cHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQobnVsbHB0cik7IH0KICAgICBXRUJDT1JFX0VYUE9S
VCBJbnRSZWN0IHBpeGVsU25hcHBlZEFic29sdXRlQ2xpcHBlZE92ZXJmbG93UmVjdCgpIGNvbnN0
OwogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChj
b25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdDsKICAg
ICB2aXJ0dWFsIExheW91dFJlY3QgcmVjdFdpdGhPdXRsaW5lRm9yUmVwYWludChjb25zdCBSZW5k
ZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRVbml0IG91dGxpbmVX
aWR0aCkgY29uc3Q7CkBAIC02NTcsMTAgKzYwMyw3IEBAIHB1YmxpYzoKIAogICAgIC8vIEdpdmVu
IGEgcmVjdCBpbiB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwgY29tcHV0ZSBhIHJlY3Qg
c3VpdGFibGUgZm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0IHJlY3QgaW4gdmlldyBjb29yZGlu
YXRlcy4KLSAgICBMYXlvdXRSZWN0IGNvbXB1dGVBYnNvbHV0ZVJlcGFpbnRSZWN0KGNvbnN0IExh
eW91dFJlY3QmIHIpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gY29tcHV0ZVJlY3RGb3JS
ZXBhaW50KHIsIG51bGxwdHIpOwotICAgIH0KKyAgICBMYXlvdXRSZWN0IGNvbXB1dGVBYnNvbHV0
ZVJlcGFpbnRSZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0IHsgcmV0dXJuIGNvbXB1
dGVSZWN0Rm9yUmVwYWludChyZWN0LCBudWxscHRyKTsgfQogICAgIC8vIEdpdmVuIGEgcmVjdCBp
biB0aGUgb2JqZWN0J3MgY29vcmRpbmF0ZSBzcGFjZSwgY29tcHV0ZSBhIHJlY3Qgc3VpdGFibGUg
Zm9yIHJlcGFpbnRpbmcKICAgICAvLyB0aGF0IHJlY3QgaW4gdGhlIGNvb3JkaW5hdGUgc3BhY2Ug
b2YgcmVwYWludENvbnRhaW5lci4KICAgICBMYXlvdXRSZWN0IGNvbXB1dGVSZWN0Rm9yUmVwYWlu
dChjb25zdCBMYXlvdXRSZWN0JiwgY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnRhaW5lcikgY29uc3Q7CkBAIC02OTEsNyArNjM0LDcgQEAgcHVibGljOgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBoYXNOb25FbXB0eVZpc2libGVSZWN0UmVzcGVjdGluZ1BhcmVudEZy
YW1lcygpIGNvbnN0OwogCi0gICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgbGVuZ3RoKCkgY29uc3Qg
eyByZXR1cm4gMTsgfQorICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1
cm4gMTsgfQogCiAgICAgYm9vbCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgY29u
c3QgeyByZXR1cm4gKGlzRmxvYXRpbmcoKSB8fCBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7IH0K
IApAQCAtNzM1LDE0ICs2NzgsOSBAQCBwdWJsaWM6CiAKICAgICAvLyBWaXJ0dWFsIGZ1bmN0aW9u
IGhlbHBlcnMgZm9yIHRoZSBkZXByZWNhdGVkIEZsZXhpYmxlIEJveCBMYXlvdXQgKGRpc3BsYXk6
IC13ZWJraXQtYm94KS4KICAgICB2aXJ0dWFsIGJvb2wgaXNEZXByZWNhdGVkRmxleGlibGVCb3go
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCiAgICAgLy8gVmlydHVhbCBmdW5jdGlvbiBoZWxw
ZXIgZm9yIHRoZSBuZXcgRmxleGlibGVCb3ggTGF5b3V0IChkaXNwbGF5OiAtd2Via2l0LWZsZXgp
LgogICAgIHZpcnR1YWwgYm9vbCBpc0ZsZXhpYmxlQm94KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIGJvb2wgaXNGbGV4aWJsZUJveEluY2x1ZGluZ0RlcHJlY2F0ZWQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGlzRmxleGlibGVCb3goKSB8fCBpc0RlcHJlY2F0ZWRGbGV4
aWJsZUJveCgpOwotICAgIH0KKyAgICBib29sIGlzRmxleGlibGVCb3hJbmNsdWRpbmdEZXByZWNh
dGVkKCkgY29uc3QgeyByZXR1cm4gaXNGbGV4aWJsZUJveCgpIHx8IGlzRGVwcmVjYXRlZEZsZXhp
YmxlQm94KCk7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0NvbWJpbmVUZXh0KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KIApAQCAtNzczLDEwICs3MTEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYsIGNvbnN0
IExheW91dFBvaW50JiAvKiBhZGRpdGlvbmFsT2Zmc2V0ICovLCBjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiAvKiBwYWludENvbnRhaW5lciAqLyA9IG51bGxwdHIpIHsgfTsKIAotICAgIExh
eW91dFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBvdXRsaW5lQm91bmRzRm9yUmVwYWludChudWxscHRyKTsKLSAgICB9CisgICAgTGF5b3V0
UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdCB7IHJldHVybiBvdXRsaW5lQm91bmRz
Rm9yUmVwYWludChudWxscHRyKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHdpbGxCZVJlbW92ZWRG
cm9tVHJlZSgpOwogICAgIHZvaWQgcmVzZXRGcmFnbWVudGVkRmxvd1N0YXRlT25SZW1vdmFsKCk7
CkBAIC04MTEsMTcgKzc0NiwxMSBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdGF0aWMgYm9vbCBzaG91
bGRBcHBseUNvbXBvc2l0ZWRDb250YWluZXJTY3JvbGxzRm9yUmVwYWludCgpOwogCi0gICAgc3Rh
dGljIFZpc2libGVSZWN0Q29udGV4dCB2aXNpYmxlUmVjdENvbnRleHRGb3JSZXBhaW50KCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBWaXNpYmxlUmVjdENvbnRleHQoZmFsc2UsIGZhbHNlLCB7IFZp
c2libGVSZWN0Q29udGV4dE9wdGlvbjo6QXBwbHlDb250YWluZXJDbGlwLCBWaXNpYmxlUmVjdENv
bnRleHRPcHRpb246OkFwcGx5Q29tcG9zaXRlZENvbnRhaW5lclNjcm9sbHMgfSk7Ci0gICAgfQor
ICAgIHN0YXRpYyBWaXNpYmxlUmVjdENvbnRleHQgdmlzaWJsZVJlY3RDb250ZXh0Rm9yUmVwYWlu
dCgpOwogCi1wcml2YXRlOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAgYm9vbCBpc1NldE5lZWRz
TGF5b3V0Rm9yYmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9zZXROZWVkc0xheW91dEZvcmJpZGRl
bjsgfQotICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRJc0ZvcmJpZGRlbihib29sIGZsYWcpIHsgbV9z
ZXROZWVkc0xheW91dEZvcmJpZGRlbiA9IGZsYWc7IH0KLSNlbmRpZgorICAgIGJvb2wgaXNTZXRO
ZWVkc0xheW91dEZvcmJpZGRlbigpIGNvbnN0OwogCitwcml2YXRlOgogICAgIHZvaWQgYWRkQWJz
b2x1dGVSZWN0Rm9yTGF5ZXIoTGF5b3V0UmVjdCYgcmVzdWx0KTsKICAgICB2b2lkIHNldExheWVy
TmVlZHNGdWxsUmVwYWludCgpOwogICAgIHZvaWQgc2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50Rm9y
UG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7CkBAIC04MzgsNiArNzY3LDcgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHNldEhhc1JhcmVEYXRhKGJvb2wgYikgeyBtX2JpdGZpZWxkcy5zZXRIYXNSYXJl
RGF0YShiKTsgfQogCiAjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0
SXNGb3JiaWRkZW4oYm9vbCBmbGFnKSBjb25zdCB7IG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4g
PSBmbGFnOyB9CiAgICAgdm9pZCBjaGVja0Jsb2NrUG9zaXRpb25lZE9iamVjdHNOZWVkTGF5b3V0
KCk7CiAjZW5kaWYKIApAQCAtODQ4LDggKzc3OCw4IEBAIHByaXZhdGU6CiAgICAgUmVuZGVyT2Jq
ZWN0KiBtX25leHQ7CiAKICNpZiBBU1NFUlRfRU5BQkxFRAotICAgIGJvb2wgbV9oYXNBWE9iamVj
dCAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3NldE5lZWRzTGF5b3V0Rm9yYmlkZGVuIDog
MTsKKyAgICBib29sIG1faGFzQVhPYmplY3QgOiAxOworICAgIG11dGFibGUgYm9vbCBtX3NldE5l
ZWRzTGF5b3V0Rm9yYmlkZGVuIDogMTsKICNlbmRpZgogCiAjZGVmaW5lIEFERF9CT09MRUFOX0JJ
VEZJRUxEKG5hbWUsIE5hbWUpIFwKQEAgLTk5Niw2ICs5MjYsMTcgQEAgcHJpdmF0ZToKICN1bmRl
ZiBBRERfQk9PTEVBTl9CSVRGSUVMRAogfTsKIAorY2xhc3MgUmVuZGVyT2JqZWN0OjpTZXRMYXlv
dXROZWVkZWRGb3JiaWRkZW5TY29wZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgU2V0TGF5b3V0
TmVlZGVkRm9yYmlkZGVuU2NvcGUoY29uc3QgUmVuZGVyT2JqZWN0JiwgYm9vbCBpc0ZvcmJpZGRl
biA9IHRydWUpOworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgflNldExheW91dE5lZWRlZEZvcmJp
ZGRlblNjb3BlKCk7Citwcml2YXRlOgorICAgIGNvbnN0IFJlbmRlck9iamVjdCYgbV9yZW5kZXJP
YmplY3Q7CisgICAgYm9vbCBtX3ByZWV4aXN0aW5nRm9yYmlkZGVuOworI2VuZGlmCit9OworCiBp
bmxpbmUgRnJhbWUmIFJlbmRlck9iamVjdDo6ZnJhbWUoKSBjb25zdAogewogICAgIHJldHVybiAq
ZG9jdW1lbnQoKS5mcmFtZSgpOwpAQCAtMTExMCw3ICsxMDUxLDk3IEBAIGlubGluZSBib29sIFJl
bmRlck9iamVjdDo6bmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dE9ubHkoKSBjb25zdAog
ICAgICAgICAmJiAhbV9iaXRmaWVsZHMucG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFtX2JpdGZp
ZWxkcy5uZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwogfQogCi1pbmxpbmUgdm9pZCBO
b2RlOjpzZXRSZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKSB7IG1fcmVuZGVyZXJXaXRo
U3R5bGVGbGFncy5zZXRQb2ludGVyKHJlbmRlcmVyKTsgfQoraW5saW5lIFJlbmRlckZyYWdtZW50
ZWRGbG93KiBSZW5kZXJPYmplY3Q6OmVuY2xvc2luZ0ZyYWdtZW50ZWRGbG93KCkgY29uc3QKK3sK
KyAgICBpZiAoZnJhZ21lbnRlZEZsb3dTdGF0ZSgpID09IE5vdEluc2lkZUZyYWdtZW50ZWRGbG93
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBsb2NhdGVFbmNsb3NpbmdG
cmFnbWVudGVkRmxvdygpOworfQorCitpbmxpbmUgYm9vbCBSZW5kZXJPYmplY3Q6OmlzQW5vbnlt
b3VzQmxvY2soKSBjb25zdAoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBrZXB0IGlu
IHN5bmMgd2l0aCBhbm9ueW1vdXMgYmxvY2sgY3JlYXRpb24gY29uZGl0aW9ucyBpbiBSZW5kZXJC
bG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soKS4KKyAgICAvLyBGSVhNRTogVGhhdCBzZWVtcyBk
aWZmaWN1bHQuIENhbiB3ZSBjb21lIHVwIHdpdGggYSBzaW1wbGVyIHdheSB0byBtYWtlIGJlaGF2
aW9yIGNvcnJlY3Q/CisgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWxhdGl2ZWx5IGxvbmcgZnVu
Y3Rpb24gYmVuZWZpdCBmcm9tIGJlaW5nIGlubGluZWQ/CisgICAgcmV0dXJuIGlzQW5vbnltb3Vz
KCkKKyAgICAgICAgJiYgKHN0eWxlKCkuZGlzcGxheSgpID09IERpc3BsYXlUeXBlOjpCbG9jayB8
fCBzdHlsZSgpLmRpc3BsYXkoKSA9PSBEaXNwbGF5VHlwZTo6Qm94KQorICAgICAgICAmJiBzdHls
ZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lCisgICAgICAgICYmIGlzUmVuZGVyQmxv
Y2soKQorI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkKKyAgICAgICAgJiYgIWlzUmVuZGVyRnVs
bFNjcmVlbigpCisgICAgICAgICYmICFpc1JlbmRlckZ1bGxTY3JlZW5QbGFjZWhvbGRlcigpCisj
ZW5kaWYKKyNpZiBFTkFCTEUoTUFUSE1MKQorICAgICAgICAmJiAhaXNSZW5kZXJNYXRoTUxCbG9j
aygpCisjZW5kaWYKKyAgICAgICAgJiYgIWlzTGlzdE1hcmtlcigpCisgICAgICAgICYmICFpc1Jl
bmRlckZyYWdtZW50ZWRGbG93KCkKKyAgICAgICAgJiYgIWlzUmVuZGVyTXVsdGlDb2x1bW5TZXQo
KQorICAgICAgICAmJiAhaXNSZW5kZXJWaWV3KCk7Cit9CisKK2lubGluZSBib29sIFJlbmRlck9i
amVjdDo6bmVlZHNMYXlvdXQoKSBjb25zdAoreworICAgIHJldHVybiBtX2JpdGZpZWxkcy5uZWVk
c0xheW91dCgpCisgICAgICAgIHx8IG1fYml0ZmllbGRzLm5vcm1hbENoaWxkTmVlZHNMYXlvdXQo
KQorICAgICAgICB8fCBtX2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRzTGF5b3V0KCkKKyAgICAgICAg
fHwgbV9iaXRmaWVsZHMubmVlZHNTaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpCisgICAgICAg
IHx8IG1fYml0ZmllbGRzLm5lZWRzUG9zaXRpb25lZE1vdmVtZW50TGF5b3V0KCk7Cit9CisKK2lu
bGluZSBib29sIFJlbmRlck9iamVjdDo6bmVlZHNQb3NpdGlvbmVkTW92ZW1lbnRMYXlvdXRPbmx5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9iaXRmaWVsZHMubmVlZHNQb3NpdGlvbmVkTW92ZW1l
bnRMYXlvdXQoKQorICAgICAgICAmJiAhbV9iaXRmaWVsZHMubmVlZHNMYXlvdXQoKQorICAgICAg
ICAmJiAhbV9iaXRmaWVsZHMubm9ybWFsQ2hpbGROZWVkc0xheW91dCgpCisgICAgICAgICYmICFt
X2JpdGZpZWxkcy5wb3NDaGlsZE5lZWRzTGF5b3V0KCkKKyAgICAgICAgJiYgIW1fYml0ZmllbGRz
Lm5lZWRzU2ltcGxpZmllZE5vcm1hbEZsb3dMYXlvdXQoKTsKK30KKworaW5saW5lIHZvaWQgUmVu
ZGVyT2JqZWN0OjpzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKQoreworICAgIHNl
dE5lZWRzTGF5b3V0KCk7CisgICAgc2V0UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KHRydWUp
OworfQorCitpbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFBvc2l0aW9uU3RhdGUoUG9zaXRp
b25UeXBlIHBvc2l0aW9uKQoreworICAgIEFTU0VSVCgocG9zaXRpb24gIT0gUG9zaXRpb25UeXBl
OjpBYnNvbHV0ZSAmJiBwb3NpdGlvbiAhPSBQb3NpdGlvblR5cGU6OkZpeGVkKSB8fCBpc0JveCgp
KTsKKyAgICBtX2JpdGZpZWxkcy5zZXRQb3NpdGlvbmVkU3RhdGUoc3RhdGljX2Nhc3Q8aW50Pihw
b3NpdGlvbikpOworfQorCitpbmxpbmUgRmxvYXRRdWFkIFJlbmRlck9iamVjdDo6bG9jYWxUb0Fi
c29sdXRlUXVhZChjb25zdCBGbG9hdFF1YWQmIHF1YWQsIE1hcENvb3JkaW5hdGVzRmxhZ3MgbW9k
ZSwgYm9vbCogd2FzRml4ZWQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxvY2FsVG9Db250YWluZXJR
dWFkKHF1YWQsIG51bGxwdHIsIG1vZGUsIHdhc0ZpeGVkKTsKK30KKworaW5saW5lIGF1dG8gUmVu
ZGVyT2JqZWN0Ojp2aXNpYmxlUmVjdENvbnRleHRGb3JSZXBhaW50KCkgLT4gVmlzaWJsZVJlY3RD
b250ZXh0Cit7CisgICAgcmV0dXJuIHsgZmFsc2UsIGZhbHNlLCB7IFZpc2libGVSZWN0Q29udGV4
dE9wdGlvbjo6QXBwbHlDb250YWluZXJDbGlwLCBWaXNpYmxlUmVjdENvbnRleHRPcHRpb246OkFw
cGx5Q29tcG9zaXRlZENvbnRhaW5lclNjcm9sbHMgfSB9OworfQorCitpbmxpbmUgYm9vbCBSZW5k
ZXJPYmplY3Q6OmlzU2V0TmVlZHNMYXlvdXRGb3JiaWRkZW4oKSBjb25zdAoreworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgcmV0dXJuIG1fc2V0TmVlZHNMYXlvdXRGb3JiaWRkZW47CisjZWxzZQor
ICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisjaWYgIUFTU0VSVF9FTkFCTEVECisKK2lu
bGluZSBSZW5kZXJPYmplY3Q6OlNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlOjpTZXRMYXlv
dXROZWVkZWRGb3JiaWRkZW5TY29wZShjb25zdCBSZW5kZXJPYmplY3QmLCBib29sKQoreworfQor
CisjZW5kaWYKKworaW5saW5lIHZvaWQgTm9kZTo6c2V0UmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKK3sKKyAgICBtX3JlbmRlcmVyV2l0aFN0eWxlRmxhZ3Muc2V0UG9pbnRlcihyZW5k
ZXJlcik7Cit9CiAKIFdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBSZW5kZXJPYmplY3QmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5jcHAKaW5kZXggYWUwNWExNDMyMWZjYTg2ZTc3YWM0OWQ3MWU3ODBhMmVlYjcz
NDRhMS4uMDBiNjFmN2YwMGM4M2FkNTMyYWM1N2EyZGJlODBiNjJiYTQ4ZjE3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0xNDEsMTUgKzE0MSwx
MCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGREcmF3U2VsZWN0aW9uVGludCgpIGNvbnN0
CiAKIGlubGluZSBzdGF0aWMgYm9vbCBkcmFnZ2VkQ29udGVudENvbnRhaW5zUmVwbGFjZWRFbGVt
ZW50KGNvbnN0IFZlY3RvcjxSZW5kZXJlZERvY3VtZW50TWFya2VyKj4mIG1hcmtlcnMsIGNvbnN0
IEVsZW1lbnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLSAg
ICAgICAgYXV0byYgZHJhZ2dlZENvbnRlbnREYXRhID0gV1RGOjpnZXQ8RG9jdW1lbnRNYXJrZXI6
OkRyYWdnZWRDb250ZW50RGF0YT4obWFya2VyLT5kYXRhKCkpOwotICAgICAgICBpZiAoZHJhZ2dl
ZENvbnRlbnREYXRhLnRhcmdldE5vZGUgPT0gJmVsZW1lbnQpCisgICAgICAgIGlmIChXVEY6Omdl
dDxSZWZQdHI8Tm9kZT4+KG1hcmtlci0+ZGF0YSgpKSA9PSAmZWxlbWVudCkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTY5LDkg
KzE2NCw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSNpZm5kZWYgTkRFQlVHCi0gICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgc2Nv
cGUodGhpcyk7Ci0jZW5kaWYKKyAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBzY29w
ZSgqdGhpcyk7CiAKICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHNhdmVkR3JhcGhpY3ND
b250ZXh0KHBhaW50SW5mby5jb250ZXh0KCksIGZhbHNlKTsKICAgICBpZiAoZWxlbWVudCgpICYm
IGVsZW1lbnQoKS0+cGFyZW50T3JTaGFkb3dIb3N0RWxlbWVudCgpKSB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCmluZGV4IGJiYzlkMGYzNjA1
MDg3YmI3NDhlMmJhMGUzYWVmYmMxNGM5NmI0OTYuLjU1NjhhN2U2ZGRkOWEwNDJiZDVlY2ZkYzY4
YmVlMDdkZDVkMGE4YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCkBAIC0yMjIsOSArMjIyLDcgQEAgc3RhdGljIExheW91dFVuaXQgcmVz
b2x2ZUxvZ2ljYWxIZWlnaHRGb3JSb3coY29uc3QgTGVuZ3RoJiByb3dMb2dpY2FsSGVpZ2h0KQog
CiBMYXlvdXRVbml0IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jvd0xvZ2ljYWxIZWlnaHQoKQog
ewotI2lmbmRlZiBOREVCVUcKLSAgICBTZXRMYXlvdXROZWVkZWRGb3JiaWRkZW5TY29wZSBsYXlv
dXRGb3JiaWRkZW5TY29wZSh0aGlzKTsKLSNlbmRpZgorICAgIFNldExheW91dE5lZWRlZEZvcmJp
ZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNjb3BlKCp0aGlzKTsKIAogICAgIEFTU0VSVCghbmVl
ZHNMYXlvdXQoKSk7CiAKQEAgLTUzOCw5ICs1MzYsNyBAQCB2b2lkIFJlbmRlclRhYmxlU2VjdGlv
bjo6cmVsYXlvdXRDZWxsSWZGbGV4ZWQoUmVuZGVyVGFibGVDZWxsJiBjZWxsLCBpbnQgcm93SW5k
ZQogCiB2b2lkIFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93cygpCiB7Ci0jaWZuZGVmIE5E
RUJVRwotICAgIFNldExheW91dE5lZWRlZEZvcmJpZGRlblNjb3BlIGxheW91dEZvcmJpZGRlblNj
b3BlKHRoaXMpOwotI2VuZGlmCisgICAgU2V0TGF5b3V0TmVlZGVkRm9yYmlkZGVuU2NvcGUgbGF5
b3V0Rm9yYmlkZGVuU2NvcGUoKnRoaXMpOwogCiAgICAgQVNTRVJUKCFuZWVkc0xheW91dCgpKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAKaW5kZXggZTlkZDE0OTQ1
ODY0YmE5YmQ4ZTg1YTQ1MDg0N2UyZTYyNTJkMTY0Ni4uOTg5NWFkYmRjOTI2YmIxOGE3Y2RlNzQ4
ZWFlZTAzYmM2MGFmZGUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWUu
Y3BwCkBAIC0xMzQ3LDI4ICsxMzQ3LDE1IEBAIENvbG9yIFJlbmRlclRoZW1lOjpzeXN0ZW1Db2xv
cihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQsIE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpCiAgICAg
fQogfQogCi1Db2xvciBSZW5kZXJUaGVtZTo6YWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAorQ29sb3IgUmVu
ZGVyVGhlbWU6OnRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6
T3B0aW9ucz4gb3B0aW9ucykgY29uc3QKIHsKICAgICBhdXRvJiBjYWNoZSA9IGNvbG9yQ2FjaGUo
b3B0aW9ucyk7Ci0gICAgaWYgKCFjYWNoZS5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Iu
aXNWYWxpZCgpKQotICAgICAgICBjYWNoZS5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Ig
PSBwbGF0Zm9ybUFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihvcHRpb25zKTsKLSAgICBy
ZXR1cm4gY2FjaGUuYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yOworICAgIGlmICghY2Fj
aGUudGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgY2FjaGUudGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yID0gcGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3Io
b3B0aW9ucyk7CisgICAgcmV0dXJuIGNhY2hlLnRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKIH0K
IAotQ29sb3IgUmVuZGVyVGhlbWU6OmluYWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9w
dGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPiBvcHRpb25zKSBjb25zdAotewotICAgIGF1dG8m
IGNhY2hlID0gY29sb3JDYWNoZShvcHRpb25zKTsKLSAgICBpZiAoIWNhY2hlLmluYWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgY2FjaGUuaW5hY3RpdmVU
ZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IgPSBwbGF0Zm9ybUluYWN0aXZlVGV4dFNlYXJjaEhpZ2hs
aWdodENvbG9yKG9wdGlvbnMpOwotICAgIHJldHVybiBjYWNoZS5pbmFjdGl2ZVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcjsKLX0KLQotQ29sb3IgUmVuZGVyVGhlbWU6OnBsYXRmb3JtQWN0aXZlVGV4
dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3QKLXsKLSAgICByZXR1cm4gQ29sb3IoMjU1LCAxNTAsIDUwKTsgLy8gT3JhbmdlLgotfQotCi1D
b2xvciBSZW5kZXJUaGVtZTo6cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xv
cihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0CitDb2xvciBSZW5kZXJUaGVt
ZTo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6
Ok9wdGlvbnM+KSBjb25zdAogewogICAgIHJldHVybiBDb2xvcigyNTUsIDI1NSwgMCk7IC8vIFll
bGxvdy4KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lLmgKaW5kZXggNDAxOWQ0
ZjJiMTk3MWRmNDJlYzRhNzk4YzNmOTM4Yjc0MjMzOWVmNC4uYjM1NTM3OGFkZTY5YjgwMDZhZjY1
ZTI0YjJjMjJhYTk1YjNjM2I1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
LmgKQEAgLTE1NCw5ICsxNTQsOCBAQCBwdWJsaWM6CiAgICAgQ29sb3IgaW5hY3RpdmVMaXN0Qm94
U2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikg
Y29uc3Q7CiAgICAgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAKLSAgICAvLyBIaWdobGln
aHRpbmcgY29sb3JzIGZvciBzZWFyY2ggbWF0Y2hlcy4KLSAgICBDb2xvciBhY3RpdmVUZXh0U2Vh
cmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+KSBjb25zdDsK
LSAgICBDb2xvciBpbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OworICAgIC8vIEhpZ2hsaWdodGluZyBjb2xvciBmb3Ig
c2VhcmNoIG1hdGNoZXMuCisgICAgQ29sb3IgdGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlv
blNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIENvbG9yIGRp
c2FibGVkVGV4dENvbG9yKGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IpIGNvbnN0OwogCkBAIC0yNzUsOSArMjc0LDcgQEAgcHJvdGVjdGVkOgogICAg
IHZpcnR1YWwgQ29sb3IgcGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAgICAgdmlydHVhbCBD
b2xvciBwbGF0Zm9ybUluYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcihPcHRp
b25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0OwogCi0gICAgLy8gVGhlIHBsYXRmb3Jt
IGhpZ2hsaWdodGluZyBjb2xvcnMgZm9yIHNlYXJjaCBtYXRjaGVzLgotICAgIHZpcnR1YWwgQ29s
b3IgcGxhdGZvcm1BY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxl
Q29sb3I6Ok9wdGlvbnM+KSBjb25zdDsKLSAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtSW5hY3Rp
dmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+
KSBjb25zdDsKKyAgICB2aXJ0dWFsIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENv
bG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
dXBwb3J0c0xpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3JzKE9wdGlvblNldDxTdHlsZUNv
bG9yOjpPcHRpb25zPikgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNDMzLDggKzQzMCw3IEBA
IHByb3RlY3RlZDoKICAgICAgICAgQ29sb3IgYWN0aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91
bmRDb2xvcjsKICAgICAgICAgQ29sb3IgaW5hY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yOwogCi0gICAgICAgIENvbG9yIGFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsK
LSAgICAgICAgQ29sb3IgaW5hY3RpdmVUZXh0U2VhcmNoSGlnaGxpZ2h0Q29sb3I7CisgICAgICAg
IENvbG9yIHRleHRTZWFyY2hIaWdobGlnaHRDb2xvcjsKICAgICB9OwogCiAgICAgdmlydHVhbCBD
b2xvckNhY2hlJiBjb2xvckNhY2hlKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25zPikgY29u
c3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5oCmluZGV4IDA3ZjI2
ZTUxMTNkNmQ5NTRhZDQyN2YzNWQ0N2UzNWUxNTI0MWQ0YzguLmUwNDg0NTJjNmM5MjdmYjdkNmZl
NzI0YjY0MGY2YzNiZjc4ZDUzMTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5oCkBAIC02Myw4ICs2Myw3IEBAIHB1YmxpYzoKICAgICBDb2xvciBwbGF0Zm9ybUlu
YWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xv
cjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOwogICAgIENvbG9yIHBsYXRmb3JtSW5hY3RpdmVMaXN0
Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRpb25z
PikgY29uc3QgZmluYWw7CiAgICAgQ29sb3IgcGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25T
ZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFsOwotICAgIENvbG9yIHBsYXRmb3Jt
QWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxTdHlsZUNvbG9yOjpPcHRp
b25zPikgY29uc3QgZmluYWw7Ci0gICAgQ29sb3IgcGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hI
aWdobGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4pIGNvbnN0IGZpbmFs
OworICAgIENvbG9yIHBsYXRmb3JtVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKE9wdGlvblNldDxT
dHlsZUNvbG9yOjpPcHRpb25zPikgY29uc3QgZmluYWw7CiAKICAgICBTY3JvbGxiYXJDb250cm9s
U2l6ZSBzY3JvbGxiYXJDb250cm9sU2l6ZUZvclBhcnQoQ29udHJvbFBhcnQpIGZpbmFsIHsgcmV0
dXJuIFNtYWxsU2Nyb2xsYmFyOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZU1hYy5tbQppbmRleCAwZTM3MTg4NjIyOGMxYjE2YjI2MmU4ZDZhMDYyOTQyY2I4MmM1OWM2
Li5jYmExNjFlNzQ5NjA0ZTZiNGRkNjhmMDQ0NWEwMDFmODg2NDE5ZDlmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCkBAIC00NzEsMTkgKzQ3MSwxMiBAQCBD
b2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1Gb2N1c1JpbmdDb2xvcihPcHRpb25TZXQ8U3R5
bGVDb2xvcjo6T3B0aW9ucz4gb3B0aQogICAgIHJldHVybiBjb2xvcldpdGhPdmVycmlkZUFscGhh
KGNvbG9yRnJvbU5TQ29sb3IoW05TQ29sb3Iga2V5Ym9hcmRGb2N1c0luZGljYXRvckNvbG9yXSku
cmdiKCksIDEpOwogfQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1BY3RpdmVUZXh0
U2VhcmNoSGlnaGxpZ2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlv
bnMpIGNvbnN0CitDb2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1UZXh0U2VhcmNoSGlnaGxp
Z2h0Q29sb3IoT3B0aW9uU2V0PFN0eWxlQ29sb3I6Ok9wdGlvbnM+IG9wdGlvbnMpIGNvbnN0CiB7
CiAgICAgTG9jYWxEZWZhdWx0U3lzdGVtQXBwZWFyYW5jZSBsb2NhbEFwcGVhcmFuY2Uob3B0aW9u
cy5jb250YWlucyhTdHlsZUNvbG9yOjpPcHRpb25zOjpVc2VEYXJrQXBwZWFyYW5jZSkpOwogICAg
IHJldHVybiBjb2xvckZyb21OU0NvbG9yKFtOU0NvbG9yIGZpbmRIaWdobGlnaHRDb2xvcl0pOwog
fQogCi1Db2xvciBSZW5kZXJUaGVtZU1hYzo6cGxhdGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdo
bGlnaHRDb2xvcihPcHRpb25TZXQ8U3R5bGVDb2xvcjo6T3B0aW9ucz4gb3B0aW9ucykgY29uc3QK
LXsKLSAgICAvLyBUaGUgaW5hY3RpdmUgY29sb3IgaXMgbm9ybWFsbHkgdXNlZCwgc2luY2Ugbm8g
bGVnYWN5IFdlYktpdCBjbGllbnQgbWFya3MgYSB0ZXh0IG1hdGNoIGFzIGFjdGl2ZS4KLSAgICAv
LyBTbyBqdXN0IHJldHVybiB0aGUgc2FtZSBjb2xvciBmb3IgYm90aCBzdGF0ZXMuCi0gICAgcmV0
dXJuIHBsYXRmb3JtQWN0aXZlVGV4dFNlYXJjaEhpZ2hsaWdodENvbG9yKG9wdGlvbnMpOwotfQot
CiBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIHRvRm9udFdlaWdodChOU0ludGVnZXIgYXBwS2l0
Rm9udFdlaWdodCkKIHsKICAgICBBU1NFUlQoYXBwS2l0Rm9udFdlaWdodCA+IDAgJiYgYXBwS2l0
Rm9udFdlaWdodCA8IDE1KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCA1
MWU3ZDFiZTkzMmExNzczYzY2NTAwYzg2MGRkZDRlY2UxMzFiNTJjLi4wMWQ4MWM1MGFiMTQ3OTk5
Nzg3NDNjNzQ1ZTNhOWY4NjU2ZWE3MDY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwCkBAIC0xNzU1LDEyICsxNzU1LDYgQEAgRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5hbHM6
OmR1bXBNYXJrZXJSZWN0cyhjb25zdCBTdHJpbmcmIG1hcmtlclR5cGVTdHJpbmcpCiAgICAgcmV0
dXJuIHJlY3RTdHJpbmcudG9TdHJpbmcoKTsKIH0KIAotdm9pZCBJbnRlcm5hbHM6OmFkZFRleHRN
YXRjaE1hcmtlcihjb25zdCBSYW5nZSYgcmFuZ2UsIGJvb2wgaXNBY3RpdmUpCi17Ci0gICAgcmFu
Z2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygp
OwotICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkVGV4dE1hdGNoTWFya2Vy
KHJhbmdlLCBpc0FjdGl2ZSk7Ci19Ci0KIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c2V0
TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChib29sIGZsYWcpCiB7CiAgICAgRG9jdW1l
bnQqIGRvY3VtZW50ID0gY29udGV4dERvY3VtZW50KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAppbmRleCA3OWY0MjRjM2Q4M2EwZDZlM2FkMzJhZDVhYTg0ZTZjMDU2OTcyZjU4Li5jYjZl
MTQ3Y2Q2NmZlZGYxMmNhMTVkYmM4MmY1ZDE2YWM2ZDhhNjk2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKQEAgLTI1OSw3ICsyNTksNiBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8
UmVmUHRyPFJhbmdlPj4gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmLCBjb25zdCBTdHJpbmcmIG1h
cmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KTsKICAgICBFeGNlcHRpb25PcjxTdHJpbmc+IG1hcmtl
ckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNp
Z25lZCBpbmRleCk7CiAgICAgRXhjZXB0aW9uT3I8U3RyaW5nPiBkdW1wTWFya2VyUmVjdHMoY29u
c3QgU3RyaW5nJiBtYXJrZXJUeXBlKTsKLSAgICB2b2lkIGFkZFRleHRNYXRjaE1hcmtlcihjb25z
dCBSYW5nZSYsIGJvb2wgaXNBY3RpdmUpOwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldE1hcmtl
ZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoYm9vbCk7CiAKICAgICB2b2lkIGludmFsaWRhdGVG
b250Q2FjaGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCBlNWM1OGY2
MmI0MWJjOTU3ODlmZjE3NDE5MzVlZjY5MDE3MmY4MzlmLi4yMDNkYTgwNTA5YjllYjUxN2Y2YzAy
ZjVhYjRmNTdjYzFkZTQ3Yzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBA
IC0yNzgsNyArMjc4LDYgQEAgZW51bSBDb21wb3NpdGluZ1BvbGljeSB7CiAgICAgW01heVRocm93
RXhjZXB0aW9uXSBSYW5nZT8gbWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUgbm9kZSwgRE9NU3RyaW5n
IG1hcmtlclR5cGUsIHVuc2lnbmVkIGxvbmcgaW5kZXgpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gRE9NU3RyaW5nIG1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlIG5vZGUsIERPTVN0cmlu
ZyBtYXJrZXJUeXBlLCB1bnNpZ25lZCBsb25nIGluZGV4KTsKICAgICBbTWF5VGhyb3dFeGNlcHRp
b25dIERPTVN0cmluZyBkdW1wTWFya2VyUmVjdHMoRE9NU3RyaW5nIG1hcmtlclR5cGUpOwotICAg
IHZvaWQgYWRkVGV4dE1hdGNoTWFya2VyKFJhbmdlIHJhbmdlLCBib29sZWFuIGlzQWN0aXZlKTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHZvaWQgc2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChib29sZWFuIGZsYWcpOwogCiAgICAgdm9pZCBpbnZhbGlkYXRlRm9udENhY2hlKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9WaWV3U25hcHNob3RTdG9yZS5o
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvVmlld1NuYXBzaG90U3RvcmUuaAppbmRleCAyMDAy
NGE1ODdhZTNkNGVkMTExMWVmYWZlMjlhMDE0MTVjMzhjNWU4Li5hYjE0N2JlNGE5YTdhYTM4OTc4
ZjMyYzI5ZmUxZGM0YzMxZjE0YjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9WaWV3U25hcHNob3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1ZpZXdT
bmFwc2hvdFN0b3JlLmgKQEAgLTI3LDEzICsyNywxMSBAQAogCiAjaW5jbHVkZSA8V2ViQ29yZS9D
b2xvci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvSW50UG9pbnQuaD4KLSNpbmNsdWRlIDxXZWJDb3Jl
L0ludFNpemUuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCisjaWYgSEFWRShJT1NV
UkZBQ0UpCiAjaW5jbHVkZSA8V2ViQ29yZS9JT1N1cmZhY2UuaD4KICNlbmRpZgogCkBAIC00MSwz
NSArMzksMTcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjZW5kaWYKIAot
I2lmIFBMQVRGT1JNKENPQ09BKQotI2lmICFkZWZpbmVkKF9fT0JKQ19fKQotdHlwZWRlZiBzdHJ1
Y3Qgb2JqY19vYmplY3QgKmlkOwotI2VuZGlmCi0KLU9CSkNfQ0xBU1MgQ0FDb250ZXh0OwotCi0j
aWYgSEFWRShJT1NVUkZBQ0UpCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBJT1N1cmZhY2U7
Ci19Ci0jZW5kaWYKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotY2xhc3MgVmlld1Nu
YXBzaG90U3RvcmU7CiBjbGFzcyBXZWJCYWNrRm9yd2FyZExpc3RJdGVtOwogY2xhc3MgV2ViUGFn
ZVByb3h5OwogCiBjbGFzcyBWaWV3U25hcHNob3QgOiBwdWJsaWMgUmVmQ291bnRlZDxWaWV3U25h
cHNob3Q+IHsKIHB1YmxpYzoKLSNpZiBQTEFURk9STShDT0NPQSkKICNpZiBIQVZFKElPU1VSRkFD
RSkKICAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hvdD4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxX
ZWJDb3JlOjpJT1N1cmZhY2U+KTsKLSNlbHNlCi0gICAgc3RhdGljIFJlZjxWaWV3U25hcHNob3Q+
IGNyZWF0ZSh1aW50MzJfdCBzbG90SUQsIFdlYkNvcmU6OkludFNpemUsIHNpemVfdCBpbWFnZVNp
emVJbkJ5dGVzKTsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKEdU
SykKICAgICBzdGF0aWMgUmVmPFZpZXdTbmFwc2hvdD4gY3JlYXRlKFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+JiYpOwogI2VuZGlmCiAKQEAgLTc3LDcgKzU3LDggQEAgcHVibGljOgogCiAgICAgdm9p
ZCBjbGVhckltYWdlKCk7CiAgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0OwotI2lmIFBMQVRGT1JN
KENPQ09BKQorCisjaWYgSEFWRShJT1NVUkZBQ0UpCiAgICAgaWQgYXNMYXllckNvbnRlbnRzKCk7
CiAgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGFzSW1hZ2VGb3JUZXN0aW5nKCk7CiAjZW5kaWYK
QEAgLTg1LDcgKzY2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVuZGVyVHJlZVNpemUodWlu
dDY0X3QgcmVuZGVyVHJlZVNpemUpIHsgbV9yZW5kZXJUcmVlU2l6ZSA9IHJlbmRlclRyZWVTaXpl
OyB9CiAgICAgdWludDY0X3QgcmVuZGVyVHJlZVNpemUoKSBjb25zdCB7IHJldHVybiBtX3JlbmRl
clRyZWVTaXplOyB9CiAKLSAgICB2b2lkIHNldEJhY2tncm91bmRDb2xvcihXZWJDb3JlOjpDb2xv
ciBjb2xvcikgeyBtX2JhY2tncm91bmRDb2xvciA9IGNvbG9yOyB9CisgICAgdm9pZCBzZXRCYWNr
Z3JvdW5kQ29sb3IoY29uc3QgV2ViQ29yZTo6Q29sb3ImIGNvbG9yKSB7IG1fYmFja2dyb3VuZENv
bG9yID0gY29sb3I7IH0KICAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kQ29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCiAgICAgdm9pZCBzZXRWaWV3U2Nyb2xs
UG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQgc2Nyb2xsUG9zaXRpb24pIHsgbV92aWV3U2Nyb2xs
UG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsgfQpAQCAtOTQsNyArNzUsNiBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXREZXZpY2VTY2FsZUZhY3RvcihmbG9hdCBkZXZpY2VTY2FsZUZhY3RvcikgeyBt
X2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7IH0KICAgICBmbG9hdCBkZXZp
Y2VTY2FsZUZhY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlU2NhbGVGYWN0b3I7IH0KIAot
I2lmIFBMQVRGT1JNKENPQ09BKQogI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIFdlYkNvcmU6OklP
U3VyZmFjZSogc3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsgfQogCkBA
IC0xMDQsMTEgKzg0LDkgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U3VyZmFjZShzdGQ6OnVuaXF1
ZV9wdHI8V2ViQ29yZTo6SU9TdXJmYWNlPik7CiAKICAgICBXZWJDb3JlOjpJT1N1cmZhY2U6OlN1
cmZhY2VTdGF0ZSBzZXRWb2xhdGlsZShib29sKTsKLSNlbHNlCi0gICAgV2ViQ29yZTo6SW50U2l6
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgc2l6ZV90IGltYWdlU2l6ZUlu
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlU2l6ZUluQnl0ZXM7IH0KICNlbmRpZgotI2Vs
aWYgUExBVEZPUk0oR1RLKQorCisjaWYgUExBVEZPUk0oR1RLKQogICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3VyZmFjZS5nZXQoKTsgfQogCiAgICAgc2l6
ZV90IGltYWdlU2l6ZUluQnl0ZXMoKSBjb25zdDsKQEAgLTExNiwyMiArOTQsMTYgQEAgcHVibGlj
OgogI2VuZGlmCiAKIHByaXZhdGU6Ci0jaWYgUExBVEZPUk0oQ09DT0EpCiAjaWYgSEFWRShJT1NV
UkZBQ0UpCiAgICAgZXhwbGljaXQgVmlld1NuYXBzaG90KHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3Jl
OjpJT1N1cmZhY2U+KTsKIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+
IG1fc3VyZmFjZTsKLSNlbHNlCi0gICAgZXhwbGljaXQgVmlld1NuYXBzaG90KHVpbnQzMl90IHNs
b3RJRCwgV2ViQ29yZTo6SW50U2l6ZSwgc2l6ZV90IGltYWdlU2l6ZUluQnl0ZXMpOwotCi0gICAg
dWludDMyX3QgbV9zbG90SUQ7Ci0gICAgc2l6ZV90IG1faW1hZ2VTaXplSW5CeXRlczsKLSAgICBX
ZWJDb3JlOjpJbnRTaXplIG1fc2l6ZTsKICNlbmRpZgotI2VsaWYgUExBVEZPUk0oR1RLKQorCisj
aWYgUExBVEZPUk0oR1RLKQogICAgIGV4cGxpY2l0IFZpZXdTbmFwc2hvdChSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiYmKTsKIAotICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fc3VyZmFjZSB7
IG51bGxwdHIgfTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CiAjZW5k
aWYKIAogICAgIHVpbnQ2NF90IG1fcmVuZGVyVHJlZVNpemU7CkBAIC0xNTYsMTAgKzEyOCw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldERpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5n
KGJvb2wgZGlzYWJsZSkgeyBtX2Rpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHkgPSBkaXNhYmxlOyB9
CiAgICAgYm9vbCBkaXNhYmxlU25hcHNob3RWb2xhdGlsaXR5Rm9yVGVzdGluZygpIGNvbnN0IHsg
cmV0dXJuIG1fZGlzYWJsZVNuYXBzaG90Vm9sYXRpbGl0eTsgfQogCi0jaWYgIUhBVkUoSU9TVVJG
QUNFKSAmJiBIQVZFKENPUkVfQU5JTUFUSU9OX1JFTkRFUl9TRVJWRVIpCi0gICAgc3RhdGljIENB
Q29udGV4dCAqc25hcHNob3R0aW5nQ29udGV4dCgpOwotI2VuZGlmCi0KIHByaXZhdGU6CiAgICAg
dm9pZCBkaWRBZGRJbWFnZVRvU25hcHNob3QoVmlld1NuYXBzaG90Jik7CiAgICAgdm9pZCB3aWxs
UmVtb3ZlSW1hZ2VGcm9tU25hcHNob3QoVmlld1NuYXBzaG90Jik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmVNYWMubW0gYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvVmlld1NuYXBzaG90U3RvcmVNYWMubW0KaW5kZXggMzViYzdj
MmViOTkwZThmNDFlODdjYzM0ZDExYzMxZjhiNmQ5M2Q1ZS4uYzQzYmQzN2RmOWM2MDU5YjI2NjYx
ODk2ODllMjlhNjhiMGIxYzA0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1ZpZXdTbmFwc2hvdFN0b3JlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L21hYy9WaWV3U25hcHNob3RTdG9yZU1hYy5tbQpAQCAtMzQsNTMgKzM0LDE5IEBACiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYktpdCB7Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotI2lmICFI
QVZFKElPU1VSRkFDRSkgJiYgSEFWRShDT1JFX0FOSU1BVElPTl9SRU5ERVJfU0VSVkVSKQotQ0FD
b250ZXh0ICpWaWV3U25hcHNob3RTdG9yZTo6c25hcHNob3R0aW5nQ29udGV4dCgpCi17Ci0gICAg
c3RhdGljIENBQ29udGV4dCAqY29udGV4dDsKLSAgICBzdGF0aWMgZGlzcGF0Y2hfb25jZV90IG9u
Y2VUb2tlbjsKLSAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0gICAgICAgIE5TRGlj
dGlvbmFyeSAqb3B0aW9ucyA9IEB7Ci0gICAgICAgICAgICBrQ0FDb250ZXh0RGlzcGxheU5hbWU6
IEAiV2ViS2l0U25hcHNob3R0aW5nIiwKLSAgICAgICAgICAgIGtDQUNvbnRleHRJZ25vcmVzSGl0
VGVzdDogQFlFUywKLSAgICAgICAgICAgIGtDQUNvbnRleHREaXNwbGF5SWQgOiBAMjAwMDAKLSAg
ICAgICAgfTsKLSAgICAgICAgY29udGV4dCA9IFtbQ0FDb250ZXh0IHJlbW90ZUNvbnRleHRXaXRo
T3B0aW9uczpvcHRpb25zXSByZXRhaW5dOwotICAgIH0pOwotCi0gICAgcmV0dXJuIGNvbnRleHQ7
Ci19Ci0jZW5kaWYKLQotI2lmIEhBVkUoSU9TVVJGQUNFKQogUmVmPFZpZXdTbmFwc2hvdD4gVmll
d1NuYXBzaG90OjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3VyZmFjZT4gc3Vy
ZmFjZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWV3U25hcHNob3QoV1RGTW92ZShz
dXJmYWNlKSkpOwogfQotI2Vsc2UKLVJlZjxWaWV3U25hcHNob3Q+IFZpZXdTbmFwc2hvdDo6Y3Jl
YXRlKHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBzaXplLCBzaXplX3QgaW1hZ2VTaXplSW5CeXRl
cykKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBWaWV3U25hcHNob3Qoc2xvdElELCBzaXpl
LCBpbWFnZVNpemVJbkJ5dGVzKSk7Ci19Ci0jZW5kaWYKIAotI2lmIEhBVkUoSU9TVVJGQUNFKQog
Vmlld1NuYXBzaG90OjpWaWV3U25hcHNob3Qoc3RkOjp1bmlxdWVfcHRyPFdlYkNvcmU6OklPU3Vy
ZmFjZT4gc3VyZmFjZSkKICAgICA6IG1fc3VyZmFjZShXVEZNb3ZlKHN1cmZhY2UpKQotI2Vsc2UK
LVZpZXdTbmFwc2hvdDo6Vmlld1NuYXBzaG90KHVpbnQzMl90IHNsb3RJRCwgSW50U2l6ZSBzaXpl
LCBzaXplX3QgaW1hZ2VTaXplSW5CeXRlcykKLSAgICA6IG1fc2xvdElEKHNsb3RJRCkKLSAgICAs
IG1faW1hZ2VTaXplSW5CeXRlcyhpbWFnZVNpemVJbkJ5dGVzKQotICAgICwgbV9zaXplKHNpemUp
Ci0jZW5kaWYKIHsKICAgICBpZiAoaGFzSW1hZ2UoKSkKICAgICAgICAgVmlld1NuYXBzaG90U3Rv
cmU6OnNpbmdsZXRvbigpLmRpZEFkZEltYWdlVG9TbmFwc2hvdCgqdGhpcyk7CiB9CiAKLSNpZiBI
QVZFKElPU1VSRkFDRSkKIHZvaWQgVmlld1NuYXBzaG90OjpzZXRTdXJmYWNlKHN0ZDo6dW5pcXVl
X3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1cmZhY2UpCiB7CiAgICAgQVNTRVJUKCFtX3N1cmZh
Y2UpOwpAQCAtOTIsMTUgKzU4LDEwIEBAIHZvaWQgVmlld1NuYXBzaG90OjpzZXRTdXJmYWNlKHN0
ZDo6dW5pcXVlX3B0cjxXZWJDb3JlOjpJT1N1cmZhY2U+IHN1cmZhY2UpCiAgICAgbV9zdXJmYWNl
ID0gV1RGTW92ZShzdXJmYWNlKTsKICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2luZ2xldG9uKCku
ZGlkQWRkSW1hZ2VUb1NuYXBzaG90KCp0aGlzKTsKIH0KLSNlbmRpZgogCiBib29sIFZpZXdTbmFw
c2hvdDo6aGFzSW1hZ2UoKSBjb25zdAogewotI2lmIEhBVkUoSU9TVVJGQUNFKQogICAgIHJldHVy
biAhIW1fc3VyZmFjZTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fc2xvdElEOwotI2VuZGlmCiB9CiAK
IHZvaWQgVmlld1NuYXBzaG90OjpjbGVhckltYWdlKCkKQEAgLTExMCwxOCArNzEsOSBAQCB2b2lk
IFZpZXdTbmFwc2hvdDo6Y2xlYXJJbWFnZSgpCiAKICAgICBWaWV3U25hcHNob3RTdG9yZTo6c2lu
Z2xldG9uKCkud2lsbFJlbW92ZUltYWdlRnJvbVNuYXBzaG90KCp0aGlzKTsKIAotI2lmIEhBVkUo
SU9TVVJGQUNFKQogICAgIG1fc3VyZmFjZSA9IG51bGxwdHI7Ci0jZWxzZQotI2lmIEhBVkUoQ09S
RV9BTklNQVRJT05fUkVOREVSX1NFUlZFUikKLSAgICBbVmlld1NuYXBzaG90U3RvcmU6OnNuYXBz
aG90dGluZ0NvbnRleHQoKSBkZWxldGVTbG90Om1fc2xvdElEXTsKLSNlbmRpZgotICAgIG1fc2xv
dElEID0gMDsKLSAgICBtX2ltYWdlU2l6ZUluQnl0ZXMgPSAwOwotI2VuZGlmCiB9CiAKLSNpZiBI
QVZFKElPU1VSRkFDRSkKIFdlYkNvcmU6OklPU3VyZmFjZTo6U3VyZmFjZVN0YXRlIFZpZXdTbmFw
c2hvdDo6c2V0Vm9sYXRpbGUoYm9vbCBiZWNvbWVWb2xhdGlsZSkKIHsKICAgICBpZiAoVmlld1Nu
YXBzaG90U3RvcmU6OnNpbmdsZXRvbigpLmRpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0
aW5nKCkpCkBAIC0xMzIsMTEgKzg0LDkgQEAgV2ViQ29yZTo6SU9TdXJmYWNlOjpTdXJmYWNlU3Rh
dGUgVmlld1NuYXBzaG90OjpzZXRWb2xhdGlsZShib29sIGJlY29tZVZvbGF0aWxlKQogCiAgICAg
cmV0dXJuIG1fc3VyZmFjZS0+c2V0SXNWb2xhdGlsZShiZWNvbWVWb2xhdGlsZSk7CiB9Ci0jZW5k
aWYKIAogaWQgVmlld1NuYXBzaG90Ojphc0xheWVyQ29udGVudHMoKQogewotI2lmIEhBVkUoSU9T
VVJGQUNFKQogICAgIGlmICghbV9zdXJmYWNlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApA
QCAtMTQ2LDIzICs5NiwxNSBAQCBpZCBWaWV3U25hcHNob3Q6OmFzTGF5ZXJDb250ZW50cygpCiAg
ICAgfQogCiAgICAgcmV0dXJuIG1fc3VyZmFjZS0+YXNMYXllckNvbnRlbnRzKCk7Ci0jZWxzZQot
ICAgIHJldHVybiBbQ0FDb250ZXh0IG9iamVjdEZvclNsb3Q6bV9zbG90SURdOwotI2VuZGlmCiB9
CiAKIFJldGFpblB0cjxDR0ltYWdlUmVmPiBWaWV3U25hcHNob3Q6OmFzSW1hZ2VGb3JUZXN0aW5n
KCkKIHsKLSNpZiBIQVZFKElPU1VSRkFDRSkKICAgICBpZiAoIW1fc3VyZmFjZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CiAKICAgICBBU1NFUlQoVmlld1NuYXBzaG90U3RvcmU6OnNpbmdsZXRv
bigpLmRpc2FibGVTbmFwc2hvdFZvbGF0aWxpdHlGb3JUZXN0aW5nKCkpOwogICAgIHJldHVybiBt
X3N1cmZhY2UtPmNyZWF0ZUltYWdlKCk7Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
dGhpcyBpbiB0aGUgc2xvdCBjYXNlLgotICAgIHJldHVybiBudWxscHRyOwotI2VuZGlmCiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5Lm1tCmluZGV4IGU0NDliZmQwMDAwZGYwMTM5ODgwNDg5ZDBlZDMwOWYxYmExOWY2NzYuLmE1
ZWU3ZTM4OTVkNTA4ZmJjOThlZDM4ZTgxODcyOTRlYzI2YzdkYTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQ
cm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0
Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KQEAgLTEzOCw3ICsxMzgsOCBAQCB2b2lkIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3Qg
QXR0cmlidXRlZFN0cgogICAgICAgICBbYXR0cnMgZW51bWVyYXRlS2V5c0FuZE9iamVjdHNVc2lu
Z0Jsb2NrOl4oTlNBdHRyaWJ1dGVkU3RyaW5nS2V5IGtleSwgaWQgdmFsdWUsIEJPT0wgKnN0b3Ap
IHsKICAgICAgICAgICAgIGlmICghW3ZhbHVlIGlzS2luZE9mQ2xhc3M6W05TU3RyaW5nIGNsYXNz
XV0pCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgbWFya2Vycy5hZGRQbGF0
Zm9ybVRleHRDaGVja2luZ01hcmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2UsIGtleSwgKE5TU3RyaW5n
ICopdmFsdWUpOworICAgICAgICAgICAgbWFya2Vycy5hZGRNYXJrZXIoYXR0cmlidXRlQ29yZVJh
bmdlLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmcsCisgICAg
ICAgICAgICAgICAgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5n
RGF0YSB7IGtleSwgKE5TU3RyaW5nICopdmFsdWUgfSk7CiAKICAgICAgICAgICAgIC8vIEZJWE1F
OiBTd2l0Y2ggdG8gY29uc3RhbnRzIGFmdGVyIHJkYXI6Ly9wcm9ibGVtLzQ4OTE0MTUzIGlzIHJl
c29sdmVkLgogICAgICAgICAgICAgaWYgKFtrZXkgaXNFcXVhbFRvU3RyaW5nOkAiTlNTcGVsbGlu
Z1N0YXRlIl0pIHsKQEAgLTE0Nyw3ICsxNDgsNyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eTo6cmVwbGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmlidXRlZFN0cgog
ICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZyk7CiAgICAgICAgICAgICAgICAgaWYgKHNwZWxsaW5n
U3RhdGUgJiBOU1NwZWxsaW5nU3RhdGVHcmFtbWFyRmxhZykgewogICAgICAgICAgICAgICAgICAg
ICBOU1N0cmluZyAqdXNlckRlc2NyaXB0aW9uID0gW2F0dHJzIG9iamVjdEZvcktleTpAIk5TR3Jh
bW1hclVzZXJEZXNjcmlwdGlvbiJdOwotICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLmFkZE1h
cmtlcihhdHRyaWJ1dGVDb3JlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCB1c2VyRGVz
Y3JpcHRpb24pOworICAgICAgICAgICAgICAgICAgICBtYXJrZXJzLmFkZE1hcmtlcihhdHRyaWJ1
dGVDb3JlUmFuZ2UsIERvY3VtZW50TWFya2VyOjpHcmFtbWFyLCBTdHJpbmcgeyB1c2VyRGVzY3Jp
cHRpb24gfSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9XTsK
QEAgLTE1Niw3ICsxNTcsNiBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVw
bGFjZVJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgQXR0cmlidXRlZFN0cgogCiB2b2lkIFRleHRD
aGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rp
b24oY29uc3QgU3RyaW5nJiBhbm5vdGF0aW9uLCBpbnQ2NF90IHNlbGVjdGlvbk9mZnNldCwgdWlu
dDY0X3QgbGVuZ3RoKQogewotICAgIEZyYW1lJiBmcmFtZSA9IG1fcGFnZS5jb3JlUGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdlQW5k
T2Zmc2V0ID0gcmFuZ2VBbmRPZmZzZXRSZWxhdGl2ZVRvU2VsZWN0aW9uKHNlbGVjdGlvbk9mZnNl
dCwgbGVuZ3RoKTsKICAgICBpZiAoIXJhbmdlQW5kT2Zmc2V0KQogICAgICAgICByZXR1cm47CkBA
IC0xNjQsMTMgKzE2NCwxMyBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVt
b3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybjsKIAotICAgIGJvb2wgcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2Vy
cyA9IGFubm90YXRpb24gPT0gIk5TU3BlbGxpbmdTdGF0ZSI7Ci0gICAgZnJhbWUuZG9jdW1lbnQo
KS0+bWFya2VycygpLmZpbHRlck1hcmtlcnMoKnJhbmdlLCBbJl0gKERvY3VtZW50TWFya2VyKiBt
YXJrZXIpIHsKLSAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFy
a2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKSkKKyAgICBhdXRv
IHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMgPSBhbm5vdGF0aW9uID09ICJOU1NwZWxsaW5nU3Rh
dGUiOworICAgIGF1dG8gdHlwZXMgPSByZW1vdmVDb3JlU3BlbGxpbmdNYXJrZXJzID8gcmVsZXZh
bnRNYXJrZXJUeXBlcygpIDogV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENo
ZWNraW5nOworICAgIG1fcGFnZS5jb3JlUGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2Vk
T3JNYWluRnJhbWUoKS5kb2N1bWVudCgpLT5tYXJrZXJzKCkuZmlsdGVyTWFya2VycygqcmFuZ2Us
IFsmXSAoY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikgeworICAgICAgICBpZiAoIVdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8V2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENo
ZWNraW5nRGF0YT4obWFya2VyLmRhdGEoKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGF1dG8mIHRleHRDaGVja2luZ0RhdGEgPSBXVEY6OmdldDxEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXItPmRhdGEoKSk7Ci0gICAgICAgIHJldHVy
biB0ZXh0Q2hlY2tpbmdEYXRhLmtleSAhPSBhbm5vdGF0aW9uOwotICAgIH0sIHJlbW92ZUNvcmVT
cGVsbGluZ01hcmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmcpOworICAgICAgICByZXR1cm4gV1RGOjpnZXQ8V2ViQ29yZTo6
RG9jdW1lbnRNYXJrZXI6OlBsYXRmb3JtVGV4dENoZWNraW5nRGF0YT4obWFya2VyLmRhdGEoKSku
a2V5ICE9IGFubm90YXRpb247CisgICAgfSwgdHlwZXMpOwogfQogCiBBdHRyaWJ1dGVkU3RyaW5n
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6YW5ub3RhdGVkU3Vic3RyaW5nQmV0d2VlblBv
c2l0aW9ucyhjb25zdCBXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBXZWJD
b3JlOjpWaXNpYmxlUG9zaXRpb24mIGVuZCkKQEAgLTE4OCwxMCArMTg4LDcgQEAgQXR0cmlidXRl
ZFN0cmluZyBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OmFubm90YXRlZFN1YnN0cmluZ0Jl
dHdlZW5Qb3NpdGlvbnMKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBbc3RyaW5nIGFw
cGVuZEF0dHJpYnV0ZWRTdHJpbmc6YWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6aXQudGV4dCgpLmNyZWF0ZU5TU3RyaW5nV2l0aG91dENvcHlpbmcoKS5n
ZXQoKV0pLmdldCgpXTsKICAgICAgICAgYXV0byByYW5nZSA9IGl0LnJhbmdlKCk7Ci0gICAgICAg
IGF1dG8gbWFya2VycyA9IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJ
blJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRl
eHRDaGVja2luZyk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2Vycykg
ewotICAgICAgICAgICAgaWYgKCFXVEY6OmhvbGRzX2FsdGVybmF0aXZlPERvY3VtZW50TWFya2Vy
OjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0YSgpKSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiByYW5nZS5zdGFydC5k
b2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZShyYW5nZSwgRG9jdW1lbnRNYXJrZXI6
OlBsYXRmb3JtVGV4dENoZWNraW5nKSkgewogICAgICAgICAgICAgYXV0byYgZGF0YSA9IFdURjo6
Z2V0PERvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci0+ZGF0
YSgpKTsKICAgICAgICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2Uo
cmFuZ2UsIHsgbWFya2VyLT5zdGFydE9mZnNldCgpLCBtYXJrZXItPmVuZE9mZnNldCgpIC0gbWFy
a2VyLT5zdGFydE9mZnNldCgpIH0pOwogICAgICAgICAgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGU6
ZGF0YS5rZXkgdmFsdWU6ZGF0YS52YWx1ZSByYW5nZTpjaGFyYWN0ZXJSYW5nZShlbnRpcmVSYW5n
ZSwgc3VicmFuZ2UpXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQppbmRleCAzM2VjZDdiZTI0NWNkYjU5ODdhYmUwMTA5
NTcwZmFlZTJhYjlkNjFkLi5lMzYzZmMxZjljNzVkNjA4NTBkOTQzNWExMWJlZTEwNmI1NDk3YTgz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQ
YWdlQ29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
V2ViUGFnZUNvY29hLm1tCkBAIC0xMzIsOCArMTMyLDcgQEAgRGljdGlvbmFyeVBvcHVwSW5mbyBX
ZWJQYWdlOjpkaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYg
cmEKICAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQb3B1cEluZm87CiAgICAgfQogCi0gICAgVmVj
dG9yPEZsb2F0UXVhZD4gcXVhZHM7Ci0gICAgcmFuZ2UuYWJzb2x1dGVUZXh0UXVhZHMocXVhZHMp
OworICAgIGF1dG8gcXVhZHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdl
KTsKICAgICBpZiAocXVhZHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsKICAgICAgICAgcmV0dXJuIGRpY3Rpb25hcnlQ
b3B1cEluZm87CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tCmluZGV4IGRhMTEzMmMyYzliZDkxNDhjODMzYzg3NTM3ZjNlODI2NjM4ZmNl
MzcuLjQ2YWNlZTgyNjVlYzg1NjUzZjY0OWNhZGU4ZDVlYjczMjRkYjBkYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC0x
NjEsMTMgKzE2MSwxMSBAQCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJh
bWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogICAgIHBvc3RMYXlvdXREYXRh
LnBhcmFncmFwaENvbnRleHRGb3JDYW5kaWRhdGVSZXF1ZXN0ID0gY29udGV4dFJhbmdlRm9yQ2Fu
ZGlkYXRlUmVxdWVzdCA/IHBsYWluVGV4dCgqY29udGV4dFJhbmdlRm9yQ2FuZGlkYXRlUmVxdWVz
dCkgOiBTdHJpbmcoKTsKICAgICBwb3N0TGF5b3V0RGF0YS5zdHJpbmdGb3JDYW5kaWRhdGVSZXF1
ZXN0ID0gZnJhbWUuZWRpdG9yKCkuc3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpOwogCi0gICAg
SW50UmVjdCByZWN0Rm9yU2VsZWN0aW9uQ2FuZGlkYXRlczsKLSAgICBWZWN0b3I8RmxvYXRRdWFk
PiBxdWFkczsKLSAgICBzZWxlY3RlZFJhbmdlLT5hYnNvbHV0ZVRleHRRdWFkcyhxdWFkcyk7Cisg
ICAgYXV0byBxdWFkcyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnNlbGVjdGVk
UmFuZ2UpOwogICAgIGlmICghcXVhZHMuaXNFbXB0eSgpKQogICAgICAgICBwb3N0TGF5b3V0RGF0
YS5mb2N1c2VkRWxlbWVudFJlY3QgPSBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9XaW5kb3cocXVh
ZHNbMF0uZW5jbG9zaW5nQm91bmRpbmdCb3goKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIC8vIFJh
bmdlOjphYnNvbHV0ZVRleHRRdWFkcygpIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0IG9mIGEg
cGFyYWdyYXBoLgorICAgICAgICAvLyBRdWFkcyB3aWxsIGJlIGVtcHR5IGF0IHRoZSBzdGFydCBv
ZiBhIHBhcmFncmFwaC4KICAgICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpCiAgICAgICAg
ICAgICBwb3N0TGF5b3V0RGF0YS5mb2N1c2VkRWxlbWVudFJlY3QgPSBmcmFtZS52aWV3KCktPmNv
bnRlbnRzVG9XaW5kb3coZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsK
ICAgICB9CkBAIC04NzIsOCArODcwLDggQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKICAgICB9
CiAKICAgICBib29sIHBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVEYXRhRGV0ZWN0b3JzID0gZmFsc2U7
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvdmVybGF5IDogY29yZVBhZ2UoKS0+cGFnZU92ZXJsYXlD
b250cm9sbGVyKCkucGFnZU92ZXJsYXlzKCkpIHsKLSAgICAgICAgV2ViUGFnZU92ZXJsYXkqIHdl
Yk92ZXJsYXkgPSBXZWJQYWdlT3ZlcmxheTo6ZnJvbUNvcmVPdmVybGF5KCpvdmVybGF5KTsKKyAg
ICBmb3IgKGF1dG8mIG92ZXJsYXkgOiBjb3JlUGFnZSgpLT5wYWdlT3ZlcmxheUNvbnRyb2xsZXIo
KS5wYWdlT3ZlcmxheXMoKSkgeworICAgICAgICBhdXRvIHdlYk92ZXJsYXkgPSBXZWJQYWdlT3Zl
cmxheTo6ZnJvbUNvcmVPdmVybGF5KCpvdmVybGF5KTsKICAgICAgICAgaWYgKCF3ZWJPdmVybGF5
KQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTg4MiwyMCArODgwLDE1IEBAIHZvaWQgV2Vi
UGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZs
b2F0UG9pbnQgbG9jYXRpCiAgICAgICAgIGlmICghYWN0aW9uQ29udGV4dCB8fCAhbWFpblJlc3Vs
dFJhbmdlKQogICAgICAgICAgICAgY29udGludWU7CiAKKyAgICAgICAgYXV0byB2aWV3ID0gbWFp
blJlc3VsdFJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICBpZiAoIXZpZXcp
CisgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICBwYWdlT3ZlcmxheURpZE92ZXJyaWRl
RGF0YURldGVjdG9ycyA9IHRydWU7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRl
Y3RlZERhdGFBY3Rpb25Db250ZXh0ID0gYWN0aW9uQ29udGV4dDsKLQotICAgICAgICBWZWN0b3I8
RmxvYXRRdWFkPiBxdWFkczsKLSAgICAgICAgbWFpblJlc3VsdFJhbmdlLT5hYnNvbHV0ZVRleHRR
dWFkcyhxdWFkcyk7Ci0gICAgICAgIEZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsK
LSAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS52aWV3KCk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYgcXVhZCA6IHF1YWRzKQot
ICAgICAgICAgICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gudW5pdGUoZnJhbWVWaWV3LT5jb250
ZW50c1RvV2luZG93KHF1YWQuZW5jbG9zaW5nQm91bmRpbmdCb3goKSkpOwotCi0gICAgICAgIGlt
bWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IGRldGVjdGVkRGF0
YUJvdW5kaW5nQm94OworICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRh
Qm91bmRpbmdCb3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5p
dGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCptYWluUmVz
dWx0UmFuZ2UpKSkpOwogICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRh
VGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbWFpblJlc3Vs
dFJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250
ZW50Rm9yQ29tcGxleFJhbmdlcywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkZhZGVJbik7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFPcmln
aW5hdGluZ1BhZ2VPdmVybGF5ID0gb3ZlcmxheS0+cGFnZU92ZXJsYXlJRCgpOwotCiAgICAgICAg
IGJyZWFrOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQppbmRleCA1ODdjMzRlY2NmMGJmOGJkYzc0YzdiMGRj
MDRmMDAwOTQwMWNkMDk5Li41ZDY5NGU0ZTI1YjJiZjk3YzI5OGZkMWZjMjhlNjM1MWZkZDYxYzJm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJG
cmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUlPUy5tbQpAQCAtODQzLDExICs4NDMsOCBAQCAtIChXZWJWaXNpYmxlUG9zaXRpb24g
KilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9tUG9zaXRpb246
KAogICAgICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKmN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb24g
PSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBvc2l0aW9uOmN1cnJlbnRWaXNpYmxl
UG9zaXRpb25dOwogICAgICAgICAKICAgICAgICAgYXV0byogY3VycmVudE5vZGUgPSBjdXJyZW50
VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOwotICAgICAgICBp
bnQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5nKCpjdXJyZW50Tm9kZSk7Ci0gICAg
ICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49IDApOwotICAgICAgICBpZiAobGFzdE9mZnNldCA8IDAp
Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2libGVQb3NpdGlvbjsKLSAgICAgICAg
CisgICAgICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0T2Zmc2V0Rm9yRWRpdGluZygqY3Vy
cmVudE5vZGUpOworCiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c1Zpc2libGVQb3Np
dGlvbiA9IGN1cnJlbnRWaXNpYmxlUG9zaXRpb24ucHJldmlvdXMoKTsKICAgICAgICAgaWYgKHBy
ZXZpb3VzVmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGN1cnJl
bnRXZWJWaXNpYmxlUG9zaXRpb247CkBAIC04NjMsMTggKzg2MCwxOCBAQCAtIChXZWJWaXNpYmxl
UG9zaXRpb24gKilwcmV2aW91c1VucGVydHVyYmVkRGljdGF0aW9uUmVzdWx0Qm91bmRhcnlGcm9t
UG9zaXRpb246KAogICAgICAgICAvLyBBU1NFUlQobWFya2Vycy5zaXplKCkgPT0gMSk7CiAgICAg
ICAgIGlmIChtYXJrZXJzLnNpemUoKSA+IDEpCiAgICAgICAgICAgICByZXR1cm4gY3VycmVudFdl
YlZpc2libGVQb3NpdGlvbjsKLSAgICAgICAgUmVuZGVyZWREb2N1bWVudE1hcmtlciogcmVzdWx0
TWFya2VyID0gbWFya2Vycy5hdCgwKTsKKworICAgICAgICBhdXRvJiBtYXJrZXIgPSAqbWFya2Vy
c1swXTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZWJDb3JlIGRvZXNuJ3QgYWx3YXlz
IHVwZGF0ZSBtYXJrZXJzIGNvcnJlY3RseSBkdXJpbmcgZWRpdGluZy4gQmFpbCBpZiByZXN1bHRN
YXJrZXIgZXh0ZW5kcyBvZmYgdGhlIGVkZ2Ugb2YgCi0gICAgICAgIC8vIHRoaXMgbm9kZSwgYmVj
YXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KLSAgICAgICAgaWYgKHJlc3VsdE1hcmtlci0+
ZW5kT2Zmc2V0KCkgPiAodW5zaWduZWQpbGFzdE9mZnNldCkKKyAgICAgICAgLy8gRklYTUU6IFdl
YkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29ycmVjdGx5IGR1cmluZyBlZGl0
aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0aGUgZWRnZSBvZiB0aGlzIG5v
ZGUsIGJlY2F1c2UgdGhhdCBtZWFucyBpdCdzIGludmFsaWQuCisgICAgICAgIGlmIChtYXJrZXIu
ZW5kT2Zmc2V0KCkgPiBsYXN0T2Zmc2V0KQogICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRXZWJW
aXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBpZiAoIVt1aWtpdERlbGVnYXRlIGlz
VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6cmVzdWx0TWFya2VyLT5tZXRhZGF0YSgp
XSkKKyAgICAgICAgaWYgKCFbdWlraXREZWxlZ2F0ZSBpc1VucGVydHVyYmVkRGljdGF0aW9uUmVz
dWx0TWFya2VyOldURjo6Z2V0PFJldGFpblB0cjxpZD4+KG1hcmtlci5kYXRhKCkpLmdldCgpXSkK
ICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwogICAgICAgICAK
LSAgICAgICAgaWYgKHJlc3VsdE1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IDApCi0gICAgICAgICAg
ICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxl
UG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCByZXN1bHRN
YXJrZXItPnN0YXJ0T2Zmc2V0KCkpKV07CisgICAgICAgIGlmIChtYXJrZXIuc3RhcnRPZmZzZXQo
KSA+IDApCisgICAgICAgICAgICByZXR1cm4gW1dlYlZpc2libGVQb3NpdGlvbiBfd3JhcFZpc2li
bGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1
cnJlbnROb2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSkpXTsKICAgICAgICAgCiAgICAgICAgIGN1
cnJlbnRWaXNpYmxlUG9zaXRpb24gPSBWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGN1cnJlbnROb2RlLCAwKSk7CiAgICAgfQpAQCAtODk5LDExICs4OTYsOCBAQCAt
IChXZWJWaXNpYmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3Vu
ZGFyeUZyb21Qb3NpdGlvbjooV2ViVgogICAgICAgICBXZWJWaXNpYmxlUG9zaXRpb24gKmN1cnJl
bnRXZWJWaXNpYmxlUG9zaXRpb24gPSBbV2ViVmlzaWJsZVBvc2l0aW9uIF93cmFwVmlzaWJsZVBv
c2l0aW9uOmN1cnJlbnRWaXNpYmxlUG9zaXRpb25dOwogICAgICAgICAKICAgICAgICAgYXV0byog
Y3VycmVudE5vZGUgPSBjdXJyZW50VmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5j
aG9yTm9kZSgpOwotICAgICAgICBpbnQgbGFzdE9mZnNldCA9IGxhc3RPZmZzZXRGb3JFZGl0aW5n
KCpjdXJyZW50Tm9kZSk7Ci0gICAgICAgIEFTU0VSVChsYXN0T2Zmc2V0ID49IDApOwotICAgICAg
ICBpZiAobGFzdE9mZnNldCA8IDApCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudFdlYlZpc2li
bGVQb3NpdGlvbjsKLSAgICAgICAgCisgICAgICAgIHVuc2lnbmVkIGxhc3RPZmZzZXQgPSBsYXN0
T2Zmc2V0Rm9yRWRpdGluZygqY3VycmVudE5vZGUpOworCiAgICAgICAgIFZpc2libGVQb3NpdGlv
biBuZXh0VmlzaWJsZVBvc2l0aW9uID0gY3VycmVudFZpc2libGVQb3NpdGlvbi5uZXh0KCk7CiAg
ICAgICAgIGlmIChuZXh0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CkBAIC05MTksMTggKzkxMywxOCBAQCAtIChX
ZWJWaXNpYmxlUG9zaXRpb24gKiluZXh0VW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRCb3VuZGFy
eUZyb21Qb3NpdGlvbjooV2ViVgogICAgICAgICAvL0FTU0VSVChtYXJrZXJzLnNpemUoKSA9PSAx
KTsKICAgICAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpID4gMSkKICAgICAgICAgICAgIHJldHVybiBj
dXJyZW50V2ViVmlzaWJsZVBvc2l0aW9uOwotICAgICAgICBEb2N1bWVudE1hcmtlciogcmVzdWx0
TWFya2VyID0gbWFya2Vycy5hdCgwKTsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZWJD
b3JlIGRvZXNuJ3QgYWx3YXlzIHVwZGF0ZSBtYXJrZXJzIGNvcnJlY3RseSBkdXJpbmcgZWRpdGlu
Zy4gQmFpbCBpZiByZXN1bHRNYXJrZXIgZXh0ZW5kcyBvZmYgdGhlIGVkZ2Ugb2YgCi0gICAgICAg
IC8vIHRoaXMgbm9kZSwgYmVjYXVzZSB0aGF0IG1lYW5zIGl0J3MgaW52YWxpZC4KLSAgICAgICAg
aWYgKHJlc3VsdE1hcmtlci0+ZW5kT2Zmc2V0KCkgPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFz
dE9mZnNldCkpCisKKyAgICAgICAgYXV0byYgbWFya2VyID0gKm1hcmtlcnNbMF07CisKKyAgICAg
ICAgLy8gRklYTUU6IFdlYkNvcmUgZG9lc24ndCBhbHdheXMgdXBkYXRlIG1hcmtlcnMgY29ycmVj
dGx5IGR1cmluZyBlZGl0aW5nLiBCYWlsIGlmIHJlc3VsdE1hcmtlciBleHRlbmRzIG9mZiB0aGUg
ZWRnZSBvZiB0aGlzIG5vZGUsIGJlY2F1c2UgdGhhdCBtZWFucyBpdCdzIGludmFsaWQuCisgICAg
ICAgIGlmIChtYXJrZXIuZW5kT2Zmc2V0KCkgPiBsYXN0T2Zmc2V0KQogICAgICAgICAgICAgcmV0
dXJuIGN1cnJlbnRXZWJWaXNpYmxlUG9zaXRpb247CiAgICAgICAgIAotICAgICAgICBpZiAoIVt1
aWtpdERlbGVnYXRlIGlzVW5wZXJ0dXJiZWREaWN0YXRpb25SZXN1bHRNYXJrZXI6cmVzdWx0TWFy
a2VyLT5tZXRhZGF0YSgpXSkKKyAgICAgICAgaWYgKCFbdWlraXREZWxlZ2F0ZSBpc1VucGVydHVy
YmVkRGljdGF0aW9uUmVzdWx0TWFya2VyOldURjo6Z2V0PFJldGFpblB0cjxpZD4+KG1hcmtlci5k
YXRhKCkpLmdldCgpXSkKICAgICAgICAgICAgIHJldHVybiBjdXJyZW50V2ViVmlzaWJsZVBvc2l0
aW9uOwogICAgICAgICAKLSAgICAgICAgaWYgKHJlc3VsdE1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RPZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIFtX
ZWJWaXNpYmxlUG9zaXRpb24gX3dyYXBWaXNpYmxlUG9zaXRpb246VmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgcmVzdWx0TWFya2VyLT5lbmRP
ZmZzZXQoKSkpXTsKKyAgICAgICAgaWYgKG1hcmtlci5lbmRPZmZzZXQoKSA8PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obGFzdE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gW1dlYlZpc2libGVQ
b3NpdGlvbiBfd3JhcFZpc2libGVQb3NpdGlvbjpWaXNpYmxlUG9zaXRpb24oY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnROb2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkpKV07CiAgICAg
ICAgIAogICAgICAgICBjdXJyZW50VmlzaWJsZVBvc2l0aW9uID0gVmlzaWJsZVBvc2l0aW9uKGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjdXJyZW50Tm9kZSwgbGFzdE9mZnNldCkpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2libGVQb3NpdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQppbmRleCA2ODI4YWE2N2YxYjAwMTk5NjYzNTdiZTYz
OTU4NjcwYThkZTJlNGJmLi42OTFmODUxOTM4ZjgzNTdkNzcwZDhjNGY4NGU1ZDJlNmMzZWY5OGVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJW
aXNpYmxlUG9zaXRpb24ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCkBAIC00MDQsNjkgKzQwNCw0NCBAQCAtIChET01S
YW5nZSAqKWVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczooTlNB
cnJheSAqKilhbHRlcm5hdAogICAgIEFTU0VSVChhbHRlcm5hdGl2ZXMpOwogICAgIGlmICghYWx0
ZXJuYXRpdmVzKQogICAgICAgICByZXR1cm4gbmlsOwotICAgICAgICAKKwogICAgIC8vICphbHRl
cm5hdGl2ZXMgc2hvdWxkIG5vdCBhbHJlYWR5IHBvaW50IHRvIGFuIGFycmF5LgotICAgIEFTU0VS
VCghKCphbHRlcm5hdGl2ZXMpKTsKKyAgICBBU1NFUlQoISphbHRlcm5hdGl2ZXMpOwogICAgICph
bHRlcm5hdGl2ZXMgPSBuaWw7Ci0gICAgICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBwID0gW3Nl
bGYgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHAuaXNOdWxsKCkpCi0gICAgICAgIHJldHVy
biBuaWw7Ci0gICAgICAgIAotICAgIGludCBvID0gcC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgaWYgKG8gPCAwKQotICAgICAgICByZXR1cm4gbmlsOwot
ICAgIHVuc2lnbmVkIG9mZnNldCA9IG87Ci0gICAgCi0gICAgTm9kZSogbm9kZSA9IHAuZGVlcEVx
dWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbm9kZS0+
ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBjb25zdCBhdXRvJiBtYXJrZXJzID0gZG9jdW1lbnQubWFy
a2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzKTsKLSAgICBpZiAobWFya2Vycy5pc0VtcHR5KCkpCisKKyAgICBhdXRv
IHBvc2l0aW9uID0gW3NlbGYgX3Zpc2libGVQb3NpdGlvbl07CisgICAgYXV0byogbm9kZSA9IHBv
c2l0aW9uLmRlZXBFcXVpdmFsZW50KCkuYW5jaG9yTm9kZSgpOworICAgIGlmICghbm9kZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
YXJrZXJzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IERvY3VtZW50TWFya2VyKiBtYXJr
ZXIgPSBtYXJrZXJzW2ldOworCisgICAgdW5zaWduZWQgb2Zmc2V0ID0gcG9zaXRpb24uZGVlcEVx
dWl2YWxlbnQoKS5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIGF1dG8mIGRvY3VtZW50
ID0gbm9kZS0+ZG9jdW1lbnQoKTsKKyAgICBmb3IgKGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFy
a2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VX
aXRoQWx0ZXJuYXRpdmVzKSkgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9
IG9mZnNldCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkgewotICAgICAgICAgICAg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIG1hcmtlckFsdGVybmF0aXZlcyA9IG1hcmtlci0+YWx0ZXJu
YXRpdmVzKCk7Ci0gICAgICAgICAgICAqYWx0ZXJuYXRpdmVzID0gW05TTXV0YWJsZUFycmF5IGFy
cmF5V2l0aENhcGFjaXR5Om1hcmtlckFsdGVybmF0aXZlcy5zaXplKCldOwotICAgICAgICAgICAg
Zm9yIChzaXplX3QgaiA9IDA7IGogPCBtYXJrZXJBbHRlcm5hdGl2ZXMuc2l6ZSgpOyBqKyspCi0g
ICAgICAgICAgICAgICAgWyhOU011dGFibGVBcnJheSAqKSphbHRlcm5hdGl2ZXMgYWRkT2JqZWN0
OihOU1N0cmluZyAqKShtYXJrZXJBbHRlcm5hdGl2ZXNbal0pXTsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7CisgICAgICAgICAgICBhdXRvJiBtYXJrZXJB
bHRlcm5hdGl2ZXMgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4obWFya2VyLT5kYXRhKCkpOwor
ICAgICAgICAgICAgYXV0byBhcnJheSA9IFtOU011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0
eTptYXJrZXJBbHRlcm5hdGl2ZXMuc2l6ZSgpXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgYWx0
ZXJuYXRpdmUgOiBtYXJrZXJBbHRlcm5hdGl2ZXMpCisgICAgICAgICAgICAgICAgW2FycmF5IGFk
ZE9iamVjdDphbHRlcm5hdGl2ZV07CisgICAgICAgICAgICAqYWx0ZXJuYXRpdmVzID0gYXJyYXk7
CisgICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1h
cmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSkucHRyKCkpOwog
ICAgICAgICB9CiAgICAgfQotICAgICAgICAKICAgICByZXR1cm4gbmlsOwogfQogCiAtIChET01S
YW5nZSAqKWVuY2xvc2luZ1JhbmdlV2l0aENvcnJlY3Rpb25JbmRpY2F0b3IKIHsKLSAgICBWaXNp
YmxlUG9zaXRpb24gcCA9IFtzZWxmIF92aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChwLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIGludCBvID0gcC5kZWVwRXF1aXZh
bGVudCgpLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgaWYgKG8gPCAwKQotICAgICAg
ICByZXR1cm4gbmlsOwotICAgIHVuc2lnbmVkIG9mZnNldCA9IG87Ci0gICAgCi0gICAgTm9kZSog
bm9kZSA9IHAuZGVlcEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7Ci0gICAgRG9jdW1lbnQmIGRv
Y3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBjb25zdCBhdXRvJiBtYXJrZXJz
ID0gZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3VtZW50TWFya2VyOjpT
cGVsbGluZyk7Ci0gICAgaWYgKG1hcmtlcnMuaXNFbXB0eSgpKQorICAgIGF1dG8gcG9zaXRpb24g
PSBbc2VsZiBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRvKiBub2RlID0gcG9zaXRpb24uZGVl
cEVxdWl2YWxlbnQoKS5hbmNob3JOb2RlKCk7CisgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1
cm4gbmlsOwotICAgIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbWFya2Vycy5zaXplKCk7
IGkrKykgewotICAgICAgICBjb25zdCBEb2N1bWVudE1hcmtlciogbWFya2VyID0gbWFya2Vyc1tp
XTsKLSAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2Vy
LT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKLSAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1h
cmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICAgICAgcmV0dXJuIGtpdChyYW5nZS5wdHIoKSk7
Ci0gICAgICAgIH0KKworICAgIHVuc2lnbmVkIG9mZnNldCA9IHBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBhdXRvJiBkb2N1bWVudCA9IG5v
ZGUtPmRvY3VtZW50KCk7CisgICAgZm9yIChhdXRvIG1hcmtlciA6IGRvY3VtZW50Lm1hcmtlcnMo
KS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcpKSB7CisgICAgICAg
IGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0ICYmIG1hcmtlci0+ZW5kT2Zmc2V0
KCkgPj0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGtpdChSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0
KCkpLnB0cigpKTsKICAgICB9Ci0gICAgCiAgICAgcmV0dXJuIG5pbDsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET00ubW0KaW5kZXggN2VmOTNkYjYxMjMzMzBkYWRlYmM5YmI0MDhkZTRjMWQ1
OWRmZWY3Mi4uOGI3YmE1Y2FiYzgxZDc4YjY4YWEyNGJkNWVmZjI1YWQyNzhiMmJhNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCkBAIC0zNTgsMTQgKzM1OCw5IEBAIC0gKFdLUXVhZClh
YnNvbHV0ZVF1YWRBbmRJbnNpZGVGaXhlZFBvc2l0aW9uOihCT09MICopaW5zaWRlRml4ZWQKIAog
ICAgIGlmIChxdWFkcy5zaXplKCkgPT0gMCkKICAgICAgICAgcmV0dXJuIHplcm9RdWFkKCk7Ci0K
ICAgICBpZiAocXVhZHMuc2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybiB3a1F1YWRGcm9tRmxv
YXRRdWFkKHF1YWRzWzBdKTsKLQotICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcXVhZHNbMF0uYm91
bmRpbmdCb3goKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IHF1YWRzLnNpemUoKTsgKytp
KQotICAgICAgICBib3VuZGluZ1JlY3QudW5pdGUocXVhZHNbaV0uYm91bmRpbmdCb3goKSk7Ci0g
ICAgcmV0dXJuIHdrUXVhZEZyb21GbG9hdFF1YWQoYm91bmRpbmdSZWN0KTsKKyAgICByZXR1cm4g
d2tRdWFkRnJvbUZsb2F0UXVhZCh1bml0ZWRCb3VuZGluZ0JveGVzKHF1YWRzKSk7CiB9CiAKIC8v
IHRoaXMgbWV0aG9kIGlzIGxpa2UgLSAoQ0dSZWN0KWJvdW5kaW5nQm94LCBidXQgaXQgYWNjb3Vu
dHMgZm9yIGZvciB0cmFuc2Zvcm1zCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQubW0KaW5kZXggM2MzMGQ1N2U2OGNj
YTRiNjJlNmI4ZjBkYWRiNDI4MjYwNzEwNGFlZS4uOWFkNDZjNjA0NzAxMmViM2U0MjM4MDRkNDA3
MjA3MDI1N2RjNWU0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5tbQpAQCAtMTE1NywxMiArMTE1NywxMSBA
QCB2b2lkIFdlYkVkaXRvckNsaWVudDo6aGFuZGxlUmVxdWVzdGVkQ2FuZGlkYXRlcyhOU0ludGVn
ZXIgc2VxdWVuY2VOdW1iZXIsIE5TQXJyYQogICAgICAgICByZXR1cm47CiAKICAgICBJbnRSZWN0
IHJlY3RGb3JTZWxlY3Rpb25DYW5kaWRhdGVzOwotICAgIFZlY3RvcjxGbG9hdFF1YWQ+IHF1YWRz
OwotICAgIHNlbGVjdGVkUmFuZ2UtPmFic29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBhdXRv
IHF1YWRzID0gUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqc2VsZWN0ZWRSYW5nZSk7
CiAgICAgaWYgKCFxdWFkcy5pc0VtcHR5KCkpCiAgICAgICAgIHJlY3RGb3JTZWxlY3Rpb25DYW5k
aWRhdGVzID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3Np
bmdCb3VuZGluZ0JveCgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgLy8gUmFuZ2U6OmFic29sdXRl
VGV4dFF1YWRzKCkgd2lsbCBiZSBlbXB0eSBhdCB0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGguCisg
ICAgICAgIC8vIFF1YWRzIHdpbGwgYmUgZW1wdHkgYXQgdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBo
LgogICAgICAgICBpZiAoc2VsZWN0aW9uLmlzQ2FyZXQoKSkKICAgICAgICAgICAgIHJlY3RGb3JT
ZWxlY3Rpb25DYW5kaWRhdGVzID0gZnJhbWUtPnZpZXcoKS0+Y29udGVudHNUb1dpbmRvdyhmcmFt
ZS0+c2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpKTsKICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBlNTVjMzA5MTA1NzU0YmJj
YzgwNDdiNzU4MGQ5NzQwZTIxZDMzYWMzLi5iZDlhNjc4MWJiZWEwNjExZTJlNGQ3MDQ5NjA4NmNl
ZmQ1OGIxMTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUu
bW0KQEAgLTE3NTcsMTIgKzE3NTcsMTEgQEAgLSAodm9pZClnZXREaWN0YXRpb25SZXN1bHRSYW5n
ZXM6KE5TQXJyYXkgKiopb3V0UmFuZ2VzIGFuZE1ldGFkYXRhczooTlNBcnJheSAqKikKICAgICBm
b3IgKFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSByb290OyBub2RlOyBub2RlID0gV2ViQ29yZTo6Tm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKICAgICAgICAgYXV0byBtYXJrZXJzID0gZG9jdW1l
bnQtPm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlKTsKICAgICAgICAgZm9yIChhdXRvKiBtYXJr
ZXIgOiBtYXJrZXJzKSB7Ci0KICAgICAgICAgICAgIGlmIChtYXJrZXItPnR5cGUoKSAhPSBXZWJD
b3JlOjpEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZCBtZXRhZGF0YSA9IG1hcmtlci0+
bWV0YWRhdGEoKTsKLSAgICAgICAgICAgIAorCisgICAgICAgICAgICBpZCBtZXRhZGF0YSA9IFdU
Rjo6Z2V0PFJldGFpblB0cjxpZD4+KG1hcmtlci0+ZGF0YSgpKS5nZXQoKTsKKwogICAgICAgICAg
ICAgLy8gQWxsIHJlc3VsdCBtYXJrZXJzIHNob3VsZCBoYXZlIG1ldGFkYXRhLgogICAgICAgICAg
ICAgQVNTRVJUKG1ldGFkYXRhKTsKICAgICAgICAgICAgIGlmICghbWV0YWRhdGEpCkBAIC0xODAx
LDE1ICsxODAwLDE1IEBAIC0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6KERP
TVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwot
ICAgIAorCiAgICAgYXV0byBtYXJrZXJzID0gY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLm1hcmtlcnNJblJhbmdlKCpjb3JlKHJhbmdlKSwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvblJlc3VsdCk7Ci0gICAgCisKICAgICAvLyBVSUtpdCBzaG91bGQgb25seSBldmVy
IGdpdmUgdXMgYSBET01SYW5nZSBmb3IgYSBwaHJhc2Ugd2l0aCBhbHRlcm5hdGl2ZXMsIHdoaWNo
IHNob3VsZCBub3QgYmUgcGFydCBvZiBtb3JlIHRoYW4gb25lIHJlc3VsdC4KICAgICBBU1NFUlQo
bWFya2Vycy5zaXplKCkgPD0gMSk7CiAgICAgaWYgKG1hcmtlcnMuc2l6ZSgpID09IDApCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgcmV0dXJuIG1hcmtlcnNbMF0tPm1ldGFkYXRhKCk7
CisKKyAgICByZXR1cm4gV1RGOjpnZXQ8UmV0YWluUHRyPGlkPj4obWFya2Vyc1swXS0+ZGF0YSgp
KS5nZXQoKTsKIH0KIAogLSAodm9pZClyZWN1cnNpdmVTZXRVcGRhdGVBcHBlYXJhbmNlRW5hYmxl
ZDooQk9PTCllbmFibGVkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KaW5kZXggMmVmYzdm
NDk0MDc4Nzc2N2ZlMGU2MmExZWE2MjQ0ZDRjZTA4NjYxZC4uYWE1MWI2Mzk0ODg4YTcwYjdmMGQ5
ZGJhMDUxZmUyNWIxZTE2ZmY5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQpAQCAt
NDk1LDcgKzQ5NSw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xs
ZXI+KV9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkCiAKICsgKFdlYkNvcmU6OkRp
Y3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooV2ViQ29yZTo6
UmFuZ2UmKXJhbmdlIGluRnJhbWU6KFdlYkNvcmU6OkZyYW1lKilmcmFtZSB3aXRoTG9va3VwT3B0
aW9uczooTlNEaWN0aW9uYXJ5ICopbG9va3VwT3B0aW9ucyBpbmRpY2F0b3JPcHRpb25zOihXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9ucylpbmRpY2F0b3JPcHRpb25zIHRyYW5zaXRpb246KFdl
YkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uKXByZXNlbnRhdGlvblRy
YW5zaXRpb24KIHsKLSAgICBXZWJDb3JlOjpFZGl0b3ImIGVkaXRvciA9IGZyYW1lLT5lZGl0b3Io
KTsKKyAgICBhdXRvJiBlZGl0b3IgPSBmcmFtZS0+ZWRpdG9yKCk7CiAgICAgZWRpdG9yLnNldElz
R2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8odHJ1ZSk7CiAKICAgICAvLyBEaWN0aW9uYXJ5IEFQ
SSB3aWxsIGFjY2VwdCBhIHdoaXRlc3BhY2Utb25seSBzdHJpbmcgYW5kIGRpc3BsYXkgVUkgYXMg
aWYgaXQgd2VyZSByZWFsIHRleHQsCkBAIC01MDYsMTcgKzUwNiwxNiBAQCArIChXZWJDb3JlOjpE
aWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KFdlYkNvcmU6
OlJhbmdlJilyYQogICAgICAgICByZXR1cm4gcG9wdXBJbmZvOwogICAgIH0KIAotICAgIGNvbnN0
IFdlYkNvcmU6OlJlbmRlclN0eWxlKiBzdHlsZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkucmVu
ZGVyU3R5bGUoKTsKKyAgICBhdXRvIHN0eWxlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKS5yZW5k
ZXJTdHlsZSgpOwogICAgIGZsb2F0IHNjYWxlZERlc2NlbnQgPSBzdHlsZSA/IHN0eWxlLT5mb250
TWV0cmljcygpLmRlc2NlbnQoKSAqIGZyYW1lLT5wYWdlKCktPnBhZ2VTY2FsZUZhY3RvcigpIDog
MDsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFF1YWQ+IHF1YWRzOwotICAgIHJhbmdlLmFi
c29sdXRlVGV4dFF1YWRzKHF1YWRzKTsKKyAgICBhdXRvIHF1YWRzID0gV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSk7CiAgICAgaWYgKHF1YWRzLmlzRW1wdHko
KSkgewogICAgICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyhmYWxz
ZSk7CiAgICAgICAgIHJldHVybiBwb3B1cEluZm87CiAgICAgfQogCi0gICAgV2ViQ29yZTo6SW50
UmVjdCByYW5nZVJlY3QgPSBmcmFtZS0+dmlldygpLT5jb250ZW50c1RvV2luZG93KHF1YWRzWzBd
LmVuY2xvc2luZ0JvdW5kaW5nQm94KCkpOworICAgIGF1dG8gcmFuZ2VSZWN0ID0gZnJhbWUtPnZp
ZXcoKS0+Y29udGVudHNUb1dpbmRvdyhxdWFkc1swXS5lbmNsb3NpbmdCb3VuZGluZ0JveCgpKTsK
IAogICAgIHBvcHVwSW5mby5vcmlnaW4gPSBOU01ha2VQb2ludChyYW5nZVJlY3QueCgpLCByYW5n
ZVJlY3QueSgpICsgc2NhbGVkRGVzY2VudCk7CiAgICAgcG9wdXBJbmZvLm9wdGlvbnMgPSBsb29r
dXBPcHRpb25zOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDNjMGUwOTJmMTQ2OWFkMWZiOWJmYWE0MDdiNzdiMjA1ODlhYjI5MTkuLjIwYjQxNWU3
Y2FlY2FkN2YxM2I3NTUzZWFiZDA3YTc3MTllMTk3MjEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMC0wNC0wNCAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgU3RvcCB1c2luZyBsaXZl
IHJhbmdlcyBpbiBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwOTk4NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L01hcmtlZFRleHQuY3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6IFVwZGF0ZSBm
b3IgY2hhbmdlIHRvIERvY3VtZW50TWFya2VyIGNvbnN0cnVjdG9yLgorCiAyMDIwLTA0LTA1ICBE
YW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXF1ZXN0VGV4dElu
cHV0Q29udGV4dC5TaW1wbGUgaWZyYW1lIHN1Yi10ZXN0cyBtYXkgc29tZXRpbWVzIGZhaWwKZGlm
ZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0LmNw
cCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0LmNwcAppbmRl
eCAwNjgxY2FiNDM2N2M1MjM2YTliNTY0MjhhZDZmMTA3NDViYTkxNzgxLi42YThlNTcyOTFiZjVk
MDE2NzY4ZDhlMjkyZTJiOGM2N2FjMDA4NWZiIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQuY3BwCkBAIC05MCw3ICs5MCw3IEBAIFRFU1QoTWFy
a2VkVGV4dCwgU3ViZGl2aWRlU2ltcGxlKQogCiBURVNUKE1hcmtlZFRleHQsIFN1YmRpdmlkZVNw
ZWxsaW5nQW5kR3JhbW1hclNpbXBsZSkKIHsKLSAgICBSZW5kZXJlZERvY3VtZW50TWFya2VyIGdy
YW1tYXJFcnJvck1hcmtlciB7IERvY3VtZW50TWFya2VyIHsgRG9jdW1lbnRNYXJrZXI6OkdyYW1t
YXIsIDcsIDggfSB9OworICAgIFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIgZ3JhbW1hckVycm9yTWFy
a2VyIHsgRG9jdW1lbnRNYXJrZXIgeyBEb2N1bWVudE1hcmtlcjo6R3JhbW1hciwgeyA3LCA4IH0g
fSB9OwogICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBleHBlY3RlZE1hcmtlZFRleHRzIHsKICAgICAg
ICAgTWFya2VkVGV4dCB7IGdyYW1tYXJFcnJvck1hcmtlci5zdGFydE9mZnNldCgpLCBncmFtbWFy
RXJyb3JNYXJrZXIuZW5kT2Zmc2V0KCksIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvciwgJmdyYW1t
YXJFcnJvck1hcmtlciB9LAogICAgICAgICBNYXJrZWRUZXh0IHsgMjIsIDMyLCBNYXJrZWRUZXh0
OjpTcGVsbGluZ0Vycm9yIH0sCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMjI0YjAxNzE1MjQxZmMxMDQyNTRkODZhNzM5NTM0
YzQ1YjZmZTJmYy4uNmU5ZGFkNzExNWI1ZjczZjJiYWM4NjM1NWRiNTE1OThhNWMwMjQwMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDIyIEBACisyMDIwLTA0LTA0ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA5OTg1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBmYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLWhpdHRlc3QtZXhwZWN0ZWQu
dHh0OiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3MtaGl0dGVzdC5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIGZhc3Qvc2Nyb2xsaW5nL3Njcm9s
bGJhci10aWNrbWFya3Mtc3R5bGVkLWV4cGVjdGVkLnR4dDogUmVtb3ZlZC4KKyAgICAgICAgKiBm
YXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC5odG1sOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGluZy9zY3JvbGxiYXItdGlja21hcmtz
LXN0eWxlZC1leHBlY3RlZC5wbmc6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Rl
c3RFeHBlY3RhdGlvbnM6IFJlbW92ZWQgZXhwZWN0YXRpb24gZm9yIHNjcm9sbGJhci10aWNrbWFy
a3MuCisgICAgICAgIFRoZXNlIHdlcmUgQ2hyb21pdW0tc3BlY2lmaWMgdGVzdHMuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnM6IFVwZGF0ZWQgdG8gZXhwZWN0
IGZsYWtpbmVzcyBpbnN0ZWFkIG9mCisgICAgICAgIHJlcGVhdGFibGUgZmFpbHVyZXMgZm9yIHRl
c3RzIHRoYXQgcGFzc2VkIGxvY2FsbHkuCisgICAgICAgICogcGxhdGZvcm0vbWFjL1Rlc3RFeHBl
Y3RhdGlvbnM6IERpdHRvLgorCiAyMDIwLTA0LTA1ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2Fs
ZXNoQGdtYWlsLmNvbT4KIAogICAgICAgICBPY3RhbCBlc2NhcGVzIHNob3VsZCBiZSBtYXggMyBk
aWdpdHMgYW5kIHN5bnRheCBlcnJvcnMgaW4gVW5pY29kZSBwYXR0ZXJucwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0LWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3MtaGl0dGVzdC1leHBlY3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZl
MTI5OTViZmNmMjNjOTc3NzRhYmQ2ZDFlMTM0NjY1MjAzZmI1NDQuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBA
IC0xLDEwICswLDAgQEAKLUNoZWNrcyB0aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3
aGVuIHRpY2ttYXJrcyBhcmUgYWRkZWQuCi0KLU9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KLQot
Ci1QQVNTIGRpZCBzY3JvbGwKLVBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKLQotVEVT
VCBDT01QTEVURQotwqAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Nj
cm9sbGJhci10aWNrbWFya3MtaGl0dGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxp
bmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDVjNDEzMWMxOWIwODA5MTIyOGMwYmQ5M2M4YjM4NTZjZDA1ZjQ0YmYuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwKKysrIC9kZXYvbnVs
bApAQCAtMSwzOSArMCwwIEBACi08aHRtbD4KLTxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgotPGJvZHkgc3R5bGU9Im1pbi1oZWlnaHQ6IDUwMDBw
eCI+IAotPHNwYW4gaWQ9ImVsdCI+Jm5ic3A7PC9zcGFuPgotCi08c2NyaXB0PgotZGVzY3JpcHRp
b24oJ0NoZWNrcyB0aGF0IGNsaWNraW5nIG9uIHNjcm9sbGJhciB3b3JrcyB3aGVuIHRpY2ttYXJr
cyBhcmUgYWRkZWQuJyk7Ci1vbmxvYWQgPSBmdW5jdGlvbigpCi17Ci0gICAgaWYgKHdpbmRvdy50
ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKLSAgICB2YXIgcmFu
Z2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgIHZhciBlbHQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgnZWx0Jyk7Ci0gICAgcmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVsdCk7Ci0g
ICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgICAgICAgd2luZG93LmludGVybmFscy5hZGRU
ZXh0TWF0Y2hNYXJrZXIocmFuZ2UsIHRydWUpOwotICAgIH0KLSAgICBpZiAod2luZG93LnRlc3RS
dW5uZXIpCi0gICAgICAgIHRlc3RSdW5uZXIuZGlzcGxheUFuZFRyYWNrUmVwYWludHMoKTsKLSAg
ICBpZiAod2luZG93LmV2ZW50U2VuZGVyKSB7Ci0gICAgICAgIGV2ZW50U2VuZGVyLm1vdXNlTW92
ZVRvKHdpbmRvdy5pbm5lcldpZHRoIC0gMSwgd2luZG93LmlubmVySGVpZ2h0IC0gMSk7Ci0gICAg
ICAgIGV2ZW50U2VuZGVyLm1vdXNlRG93bigpOwotICAgICAgICBldmVudFNlbmRlci5tb3VzZVVw
KCk7Ci0gICAgfQotfQotCi1vbnNjcm9sbCA9IGZ1bmN0aW9uKCkKLXsKLSAgICB0ZXN0UGFzc2Vk
KCdkaWQgc2Nyb2xsJyk7Ci0gICAgZmluaXNoSlNUZXN0KCk7Ci19Ci0KLXZhciBqc1Rlc3RJc0Fz
eW5jID0gdHJ1ZTsKLTwvc2NyaXB0PgotCi08c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Ci0KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5nL3Njcm9sbGJhci10aWNrbWFy
a3Mtc3R5bGVkLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2Zh
ZjIyYTJlMTg4MjcxNDM4MmIxYjQyYzIzOTRkNDZjNDgyODE1MS4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L3Njcm9sbGluZy9z
Y3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC50eHQKKysrIC9kZXYvbnVsbApAQCAt
MSArMCwwIEBACi3CoApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zY3JvbGxpbmcvc2Ny
b2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2Nyb2xsaW5n
L3Njcm9sbGJhci10aWNrbWFya3Mtc3R5bGVkLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDc0YjNmZTMyZTI0YmQ1NjI3NWE5MWNmNmU4YmJiYTMwNWE3OGMxMGQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9z
Y3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQuaHRtbAorKysgL2Rldi9udWxsCkBA
IC0xLDM5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sPgotPGhlYWQ+Ci08c3R5bGU+Ci1odG1sIHsK
LSAgICBmb250OiBBaGVtIDEwcHg7Ci0gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogbm9uZTsK
LX0KLTo6LXdlYmtpdC1zY3JvbGxiYXIgewotICAgIHdpZHRoOiAxM3B4OwotICAgIGhlaWdodDog
MTNweDsKLX0KLTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewotICAgIGJhY2tncm91bmQtY29s
b3I6Z3JlZW47Ci19Ci06Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKLSAgICBiYWNrZ3JvdW5k
LWNvbG9yOnJnYmEoMTI4LCAxMjgsIDEyOCwgMC44KTsgIC8qIExldCB0aWNrbWFyayBzaGluZSB0
aHJvdWdoICovCi19Ci08L3N0eWxlPgotPHNjcmlwdD4KLWZ1bmN0aW9uIGhpZ2hsaWdodCgpCi17
Ci0gICAgdmFyIHJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICB2YXIgZWx0ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2VsdCcpOwotICAgIHJhbmdlLnNlbGVjdE5vZGVDb250
ZW50cyhlbHQpOwotICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgIHdpbmRvdy5p
bnRlcm5hbHMuYWRkVGV4dE1hdGNoTWFya2VyKHJhbmdlLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYg
KHdpbmRvdy50ZXN0UnVubmVyKQotICAgICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQodHJ1ZSk7
Ci19Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5IG9ubG9hZD0iaGlnaGxpZ2h0KCk7Ij4KLQot
PGRpdiBzdHlsZT0iaGVpZ2h0OjYwMHB4Ij48L2Rpdj4KLTxzcGFuIGlkPSJlbHQiIHN0eWxlPSJw
b3NpdGlvbjphYnNvbHV0ZTsgdG9wOjMwMHB4Ij4mbmJzcDs8L3NwYW4+Ci0KLTwvYm9keT4KLTwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9mYXN0L3Njcm9sbGlu
Zy9zY3JvbGxiYXItdGlja21hcmtzLXN0eWxlZC1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9ndGsvZmFzdC9zY3JvbGxpbmcvc2Nyb2xsYmFyLXRpY2ttYXJrcy1zdHlsZWQtZXhw
ZWN0ZWQucG5nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGE4YTNhMTMzNmQ4ZDUx
MzI4NmVjYTA1NWRkODc3NjIxNTQxYjBlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpsaXRlcmFs
IDI4NzgKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB5fnlVeyt2WVYyYT5pMCpaKT1oXmhsQSVAV3Mk
bEhgb2s8bX0/b1RuMGxFCnpHWWNjYlJBVTIrQiU/JnJ2XjB4VSEhKUNtd0IlJi1SST88KnF+d247
ekNRdEtWb1VPTmNWWU1zZighTzhwVWw5KAp6d2E/U1ZGe0VQNytaIThzVE8wJmY5USNyX25AQFpY
d3BjOWE2cmI5XkYpalEwODVzdEtvRWA3Nyk2NDg/KiU9UCgKejdtUSRGRmw9T0g1RCo/XmowVkRK
TipLKXJxcSQlLTdtVmhEKE9mV14zcjJHUi1kcXJFe1BgTyUxSD02ZEAzdEMkCm5LRkd3LSFLdVUw
RnlqRShqSzIpNioqdyplMmJ4b1daQ2VJVVMzajNeUDY8cl9pZD9XWQoKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2lvcy9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMGYwNDU5YzNiNWM3MTRkN2JkN2NiNzFj
ZDdhYzQ4NTVmY2MxNGZlNS4uMTY0OGU5NmRjNzFkZjgzM2Q5NWJmNDJjNGExZGZkNmMxYWQ4Nzc2
MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vaW9zL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTY4Nyw3
ICs2ODcsNiBAQCBmYXN0L3Njcm9sbGluZy9zY3JvbGwtYW5pbWF0b3Itb3ZlcmxheS1zY3JvbGxi
YXJzLWhvdmVyZWQuaHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xsLWFuaW1hdG9y
LXNlbGVjdC1saXN0LWV2ZW50cy5odG1sIFsgU2tpcCBdCiBmYXN0L3Njcm9sbGluZy9zY3JvbGxi
YXItbW91c2Vkb3duLW1vdXNldXAuaHRtbCBbIFNraXAgXQogZmFzdC9zY3JvbGxpbmcvc2Nyb2xs
YmFyLW1vdXNlZG93bi1tb3ZlLW1vdXNldXAuaHRtbCBbIFNraXAgXQotZmFzdC9zY3JvbGxpbmcv
c2Nyb2xsYmFyLXRpY2ttYXJrcy1oaXR0ZXN0Lmh0bWwgWyBTa2lwIF0KIGZhc3Qvc2VsZWN0b3Jz
L2FjdGl2ZS1ob3Zlci1xdWlya3MuaHRtbCBbIFNraXAgXQogZmFzdC9zZWxlY3RvcnMvYWN0aXZl
LWhvdmVyLXN0cmljdC5odG1sIFsgU2tpcCBdCiBmYXN0L3NlbGVjdG9ycy9hY3RpdmUtcXVpcmtz
Lmh0bWwgWyBTa2lwIF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEv
VGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCBhMGJhMWVjMTkxOWMxODc2YTQ0MTY3ZTNmYjdjYjNkZGUyYTJiM2M3Li41
YTRlM2Q1YTQ3ZjQ3MTJkNDI2YzU4Y2I4ZTE2ZDM5OTQ3MWIwOTRmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0RXhwZWN0YXRpb25zCkBAIC02MzcsNyArNjM3LDcgQEAg
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC1wb3RlbnRp
YWxseS1zdWJzYW1wbGVkLWltYWdlLmgKIHN2Zy9XM0MtU1ZHLTEuMS9mb250cy1lbGVtLTA0LWIu
c3ZnIFsgRmFpbHVyZSBdCiAKICMgPHJkYXI6Ly9wcm9ibGVtLzMxODkzNzE0PiBSRUdSRVNTSU9O
OiBMYXlvdXRUZXN0IGZhc3QvdGV4dC9tdWx0aXBsZS1jb2RldW5pdC12ZXJ0aWNhbC11cHJpZ2h0
Lmh0bWwgaXMgZmFpbGluZyBvbiBXSzEKLWZhc3QvdGV4dC9tdWx0aXBsZS1jb2RldW5pdC12ZXJ0
aWNhbC11cHJpZ2h0Lmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK2Zhc3QvdGV4dC9tdWx0aXBs
ZS1jb2RldW5pdC12ZXJ0aWNhbC11cHJpZ2h0Lmh0bWwgWyBQYXNzIEltYWdlT25seUZhaWx1cmUg
XQogCiAjIDxyZGFyOi8vcHJvYmxlbS8zMTg5NTE5Mj4gRHVtcFJlbmRlclRyZWUgY3Jhc2hlZCBp
biBjb20uYXBwbGUuSW1hZ2VJTy5mcmFtZXdvcms6IElJT0RpY3Rpb25hcnk6OmdldEJvb2xGb3JL
ZXkgKyAwCiBodHRwL3Rlc3RzL21pc2Mvc2xvdy1sb2FkaW5nLWFuaW1hdGVkLWltYWdlLmh0bWwg
WyBTa2lwIF0KQEAgLTY0Nyw3ICs2NDcsNyBAQCBmYXN0L2V2ZW50cy9rZXlib2FyZGV2ZW50LWNv
ZGUuaHRtbCBbIENyYXNoIF0KIGZhc3QvZXZlbnRzL2tleWJvYXJkZXZlbnQta2V5Lmh0bWwgWyBD
cmFzaCBdCiBmYXN0L2V2ZW50cy9rZXlkb3duLWxlZnRyaWdodC1rZXlzLmh0bWwgWyBDcmFzaCBd
CiBmYXN0L2Zvcm1zL3RleHRhcmVhLW1heGxlbmd0aC5odG1sIFsgQ3Jhc2ggXQotZmFzdC90ZXh0
L3N5c3RlbS1mb250LWZhbGxiYWNrLWVtb2ppLmh0bWwgWyBDcmFzaCBdCitmYXN0L3RleHQvc3lz
dGVtLWZvbnQtZmFsbGJhY2stZW1vamkuaHRtbCBbIFBhc3MgQ3Jhc2ggXQogCiB3ZWJraXQub3Jn
L2IvMTc5Nzc1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMveGhyL2ZpcmluZy1ldmVu
dHMtaHR0cC1uby1jb250ZW50LWxlbmd0aC5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIApAQCAtNjYz
LDcgKzY2Myw3IEBAIHdlYmtpdC5vcmcvYi8xODI3NTIgYWNjZXNzaWJpbGl0eS9tYWMvYWNjZXNz
aWJpbGl0eS1tYWtlLWZpcnN0LXJlc3BvbmRlci5odG1sIFsKIHdlYmtpdC5vcmcvYi8xODU3NDIg
YWNjZXNzaWJpbGl0eS9tYWMvcHJpbWFyeS1zY3JlZW4taGVpZ2h0Lmh0bWwgWyBTa2lwIF0KIAog
IyBVc2VyLWluc3RhbGxlZCBmb250cyB0ZXN0IGluZnJhc3RydWN0dXJlIGlzIG5vdCBwcmVzZW50
IGluIFdLMQotd2Via2l0Lm9yZy9iLzE4MDA2MiBmYXN0L3RleHQvdXNlci1pbnN0YWxsZWQtZm9u
dHMgWyBJbWFnZU9ubHlGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODAwNjIgZmFzdC90ZXh0L3Vz
ZXItaW5zdGFsbGVkLWZvbnRzIFsgUGFzcyBJbWFnZU9ubHlGYWlsdXJlIF0KIAogd2Via2l0Lm9y
Zy9iLzE3OTY0MyBtZWRpYS9XM0MvdmlkZW8vbmV0d29ya1N0YXRlL25ldHdvcmtTdGF0ZV9kdXJp
bmdfbG9hZHN0YXJ0Lmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogCkBAIC05NTEsNCArOTUxLDQgQEAg
d2Via2l0Lm9yZy9iLzIwOTg2NiBbIE1vamF2ZSBSZWxlYXNlIF0gcGxhdGZvcm0vbWFjL21lZGlh
L21lZGlhLXNvdXJjZS92aWRlb3BsYXkKIAogd2Via2l0Lm9yZy9iLzIwOTg4MiBbIERlYnVnIF0g
aW5zcGVjdG9yL3BhZ2Uvb3ZlcnJpZGVTZXR0aW5nLUlDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJs
ZWQuaHRtbCBbIFBhc3MgVGltZW91dCBdCiAKLXdlYmtpdC5vcmcvYi8yMDk5MjEgWyBEZWJ1ZyBd
IGluc3BlY3Rvci9jc3MvYWRkLWNzcy1wcm9wZXJ0eS5odG1sIFsgUGFzcyBUaW1lb3V0IF0KXCBO
byBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCit3ZWJraXQub3JnL2IvMjA5OTIxIFsgRGVidWcgXSBp
bnNwZWN0b3IvY3NzL2FkZC1jc3MtcHJvcGVydHkuaHRtbCBbIFBhc3MgVGltZW91dCBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25zCmluZGV4IGY4ZDRkZWU1NDdlNzk2
MjFhNjkzN2M4NWMyY2M1YThjNDY2OTgwYWEuLjU3YTE4NDQ1MDlkMzFkYTM4NmEwYzk3NTUxYzc4
YWYxNDI5MWM0OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhw
ZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL21hYy9UZXN0RXhwZWN0YXRpb25z
CkBAIC0zNyw3ICszNyw3IEBAIGh0dHAvdGVzdHMvZ3ppcC1jb250ZW50LWVuY29kaW5nIFsgUGFz
cyBdCiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2d6aXAtY29udGVudC10eXBlLW5vLWNvbnRl
bnQtZW5jb2RpbmcuaHRtbCBbIFBhc3MgXQogCiBmYXN0L3RleHQvbWFjIFsgUGFzcyBdCi13ZWJr
aXQub3JnL2IvMTgxOTY0IGZhc3QvdGV4dC9tYWMvc2VsZWN0LWNoYXJhY3Rlci1iZWZvcmUtemVy
by13aWR0aC1qb2luZXIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE4
MTk2NCBmYXN0L3RleHQvbWFjL3NlbGVjdC1jaGFyYWN0ZXItYmVmb3JlLXplcm8td2lkdGgtam9p
bmVyLmh0bWwgWyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQogCiBwb2ludGVyZXZlbnRzL21vdXNl
IFsgUGFzcyBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3BvaW50ZXJldmVudHMg
WyBQYXNzIF0KQEAgLTEwNjgsNyArMTA2OCw3IEBAIGltcG9ydGVkL2JsaW5rL2NvbXBvc2l0aW5n
L3ZpZGVvL3ZpZGVvLWNvbnRyb2xzLWxheWVyLWNyZWF0aW9uLXNxdWFzaGluZy5odG1sIFsKIHdl
YmtpdC5vcmcvYi8xNTA4MDYgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy94aHIvc2Vu
ZC10aW1lb3V0LWV2ZW50cy5odG0gWyBQYXNzIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE1MDgy
MyBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3hoci9nZXRyZXNwb25zZWhlYWRlci1j
aHVua2VkLXRyYWlsZXIuaHRtIFsgUGFzcyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzE2MjY2
OCBmYXN0L3RleHQvd29mZjItdG90YWxzZm50c2l6ZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMTYyNjY4IGZhc3QvdGV4dC93b2ZmMi10b3RhbHNmbnRzaXplLmh0bWwg
WyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTQwMjE3IGh0dHAvdGVz
dHMvbmF2aWdhdGlvbi9mb3J3YXJkLWFuZC1jYW5jZWwuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiAK
QEAgLTE0NTksNyArMTQ1OSw3IEBAIGNhbnZhcy9waGlsaXAvdGVzdHMvMmQucGF0aC5zdHJva2Uu
c2NhbGUyLmh0bWwgWyBGYWlsdXJlIF0KIGltcG9ydGVkL3czYy9jYW52YXMvMmQucGF0aC5zdHJv
a2Uuc2NhbGUyLmh0bWwgWyBGYWlsdXJlIF0KIAogIyA8cmRhcjovL3Byb2JsZW0vMzI3OTk1NzM+
IFJFR1JFU1NJT046IExheW91dFRlc3QgZmFzdC90ZXh0L2lwYS10b25lLWxldHRlcnMuaHRtbCBp
cyBmYWlsaW5nCi1mYXN0L3RleHQvaXBhLXRvbmUtbGV0dGVycy5odG1sIFsgRmFpbHVyZSBdCitm
YXN0L3RleHQvaXBhLXRvbmUtbGV0dGVycy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogIyA8cmRh
cjovL3Byb2JsZW0vMzI3OTk2MjQ+IFJFR1JFU1NJT046IExheW91dFRlc3RzIGNzczMvZm9udC12
YXJpYW50LXBldGl0ZS1jYXBzLXN5bnRoZXNpcy1jb3ZlcmFnZS5odG1sIGFuZCBjc3MzL2ZvbnQt
dmFyaWFudC1zbWFsbC1jYXBzLXN5bnRoZXNpcy1jb3ZlcmFnZS5odG1sIGFyZSBmYWlsaW5nCiBj
c3MzL2ZvbnQtdmFyaWFudC1wZXRpdGUtY2Fwcy1zeW50aGVzaXMtY292ZXJhZ2UuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQpAQCAtMTcwNSw3ICsxNzA1LDcgQEAgd2Via2l0Lm9yZy9iLzE5MDg4
MiBhbmltYXRpb25zL2NoYW5nZS1vbmUtYW5pbS5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIAogIyA8
cmRhcjovL3Byb2JsZW0vNDAxNzI0Mjg+CiBbIENhdGFsaW5hKyBdIGZhc3QvdGV4dC9mb250LWNv
bGxlY3Rpb24uaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQotWyBDYXRhbGluYSsgXSBmYXN0L3Rl
eHQvd29mZjIuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQorWyBDYXRhbGluYSsgXSBmYXN0L3Rl
eHQvd29mZjIuaHRtbCBbIFBhc3MgSW1hZ2VPbmx5RmFpbHVyZSBdCiAKICMgPHJkYXI6Ly9wcm9i
bGVtLzQ1MDU2MjA0PgogWyBDYXRhbGluYSsgXSBodHRwL3Rlc3RzL2Nvb2tpZXMvdGhpcmQtcGFy
dHktY29va2llLXJlbGF4aW5nLmh0bWwgWyBGYWlsdXJlIF0K
</data>
<flag name="review"
          id="410955"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>