<?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>211058</bug_id>
          
          <creation_ts>2020-04-26 17:37:15 -0700</creation_ts>
          <short_desc>Replace more uses of live ranges with SimpleRange</short_desc>
          <delta_ts>2020-05-06 11:56:13 -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>DOM</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>aboxhall</cc>
    
    <cc>andersca</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>japhet</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1645860</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 17:37:15 -0700</bug_when>
    <thetext>Replace more uses of live ranges with SimpleRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645865</commentid>
    <comment_count>1</comment_count>
      <attachid>397639</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 17:57:24 -0700</bug_when>
    <thetext>Created attachment 397639
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645867</commentid>
    <comment_count>2</comment_count>
      <attachid>397640</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 17:59:39 -0700</bug_when>
    <thetext>Created attachment 397640
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645882</commentid>
    <comment_count>3</comment_count>
      <attachid>397644</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 22:02:00 -0700</bug_when>
    <thetext>Created attachment 397644
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645890</commentid>
    <comment_count>4</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 22:35:41 -0700</bug_when>
    <thetext>Created attachment 397645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645891</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-26 22:37:57 -0700</bug_when>
    <thetext>Reducing live ranges is going to take a while, it seems. Might decide to set a breakpoint and prioritize paths that are called during normal webpage loads next. For this patch I just searched for instances of Range::create and then followed up with whatever changes were needed to make them go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645909</commentid>
    <comment_count>6</comment_count>
      <attachid>397645</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-27 00:11:23 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt; Source/WebCore/dom/Node.cpp:2624
&gt; +RefPtr&lt;Node&gt; commonInclusiveAncestor(Node&amp; a, Node&amp; b)
&gt; +{
&gt; +    for (auto ancestorA = &amp;a; ancestorA; ancestorA = ancestorA-&gt;parentNode()) {
&gt; +        for (auto ancestorB = &amp;b; ancestorB; ancestorB = ancestorB-&gt;parentNode()) {
&gt; +            if (ancestorA == ancestorB)
&gt; +                return ancestorA;
&gt; +        }
&gt; +    }
&gt; +    return nullptr;
&gt; +}

This is a pretty inefficient implementation (I know it is not new in this patch).

&gt; Source/WebCore/editing/VisibleSelection.cpp:210
&gt; +    if (!scope)
&gt; +        return WTF::nullopt;

I would just return { };

&gt; Source/WebCore/editing/cocoa/DataDetection.h:52
&gt; +enum class DataDetectorTypes : uint32_t {
&gt; +    None = 0,
&gt; +    PhoneNumber = 1 &lt;&lt; 0,
&gt; +    Link = 1 &lt;&lt; 1,
&gt; +    Address = 1 &lt;&lt; 2,
&gt; +    CalendarEvent = 1 &lt;&lt; 3,
&gt; +    TrackingNumber = 1 &lt;&lt; 4,
&gt; +    FlightNumber = 1 &lt;&lt; 5,
&gt; +    LookupSuggestion = 1 &lt;&lt; 6,
&gt; +};

Simon would tell you to line these up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645988</commentid>
    <comment_count>7</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 07:21:05 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt;&gt; Source/WebCore/dom/Node.cpp:2624
&gt;&gt; +}
&gt; 
&gt; This is a pretty inefficient implementation (I know it is not new in this patch).

Yes definitely. I noticed that, too. Do you have ideas for a better one? I didn’t immediately think of one.

&gt;&gt; Source/WebCore/editing/VisibleSelection.cpp:210
&gt;&gt; +        return WTF::nullopt;
&gt; 
&gt; I would just return { };

That does seem appealing. Although I have checked in a lot of “return nullopt” in patches recently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645989</commentid>
    <comment_count>8</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 07:25:06 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2624
&gt;&gt;&gt; +}
&gt;&gt; 
&gt;&gt; This is a pretty inefficient implementation (I know it is not new in this patch).
&gt; 
&gt; Yes definitely. I noticed that, too. Do you have ideas for a better one? I didn’t immediately think of one.

I looked at https://en.wikipedia.org/wiki/Lowest_common_ancestor and did not immediately find something useful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1645991</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 07:31:29 -0700</bug_when>
    <thetext>Maybe one trip each to find the roots and distance to the root, return null if the roots are different, then walk up both at the same time, keeping distance from root constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646000</commentid>
    <comment_count>10</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 07:53:54 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2624
&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt; 
&gt;&gt;&gt; This is a pretty inefficient implementation (I know it is not new in this patch).
&gt;&gt; 
&gt;&gt; Yes definitely. I noticed that, too. Do you have ideas for a better one? I didn’t immediately think of one.
&gt; 
&gt; I looked at https://en.wikipedia.org/wiki/Lowest_common_ancestor and did not immediately find something useful.

I’m going to fix this in a follow-up patch now that I figured out how.

&gt;&gt;&gt; Source/WebCore/editing/VisibleSelection.cpp:210
&gt;&gt;&gt; +        return WTF::nullopt;
&gt;&gt; 
&gt;&gt; I would just return { };
&gt; 
&gt; That does seem appealing. Although I have checked in a lot of “return nullopt” in patches recently.

Will do this before landing.

&gt;&gt; Source/WebCore/editing/cocoa/DataDetection.h:52
&gt;&gt; +};
&gt; 
&gt; Simon would tell you to line these up.

Not sure how to resolve this minor code style disagreement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646004</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 08:05:13 -0700</bug_when>
    <thetext>Committed r260753: &lt;https://trac.webkit.org/changeset/260753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646005</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-04-27 08:06:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/62452499&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646011</commentid>
    <comment_count>13</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-04-27 08:25:27 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/dom/Node.cpp:2624
&gt;&gt;&gt;&gt;&gt; +}
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This is a pretty inefficient implementation (I know it is not new in this patch).
&gt;&gt;&gt; 
&gt;&gt;&gt; Yes definitely. I noticed that, too. Do you have ideas for a better one? I didn’t immediately think of one.
&gt;&gt; 
&gt;&gt; I looked at https://en.wikipedia.org/wiki/Lowest_common_ancestor and did not immediately find something useful.
&gt; 
&gt; I’m going to fix this in a follow-up patch now that I figured out how.

Bug 211078.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1646038</commentid>
    <comment_count>14</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-04-27 09:14:23 -0700</bug_when>
    <thetext>&gt; That does seem appealing. Although I have checked in a lot of “return
&gt; nullopt” in patches recently.

I know and think both approaches are fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1649729</commentid>
    <comment_count>15</comment_count>
      <attachid>397645</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-05-06 11:56:13 -0700</bug_when>
    <thetext>Comment on attachment 397645
Patch

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

&gt; Source/WebCore/page/TextIndicator.cpp:200
&gt; -        auto* node = iterator.node();
&gt; -        if (!is&lt;Text&gt;(node) || !is&lt;RenderText&gt;(node-&gt;renderer()))
&gt; -            continue;
&gt; -
&gt; -        colors.add(node-&gt;renderer()-&gt;style().color());
&gt; +        auto renderer = iterator.node()-&gt;renderer();
&gt; +        if (is&lt;RenderText&gt;(renderer))
&gt; +            colors.add(renderer-&gt;style().color());

This change accidentally removed the null check done by is&lt;Text&gt;(node). We don’t need and is&lt;Text&gt; check, but we do need a null check.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397639</attachid>
            <date>2020-04-26 17:57:24 -0700</date>
            <delta_ts>2020-04-26 17:59:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211058-20200426175723.patch</filename>
            <type>text/plain</type>
            <size>118227</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTk0NDI2NDcwNDFlOTY4
NThhMjRmOTY0M2RkODM0ZTFiNGJlOTIzYS4uMTMxYmMwNmMzYTc2ZWI5MGJmNDgxN2Q2NzQxNzEx
ZGY2ODlmZTNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAyMC0wNC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisKKyAgICAgICAg
KiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0OiBUaGlzIGZpbGUgbW9kaWZpZWQgaXRz
ZWxmIHdoZW4gSSBidWlsdC4KKyAgICAgICAgU29tZW9uZSBuZWVkcyB0byBjaGVjayBpbiB0aGUg
cmVzdWx0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRl
eHRVbmRlckVsZW1lbnQgY29uc3QpOiBVc2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBkb20v
Qm91bmRhcnlQb2ludC5oOiBNb3ZlZCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRz
IGhlcmUgc28gaXQKKyAgICAgICAgY2FuIGJlIHVzZWQgbW9yZSBwbGFjZXMuCisKKyAgICAgICAg
KiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cik6IE1vdmVkIHRoZSBjb21tb25BbmNlc3RvckNvbnRhaW5lciBmdW5jdGlvbgorICAgICAgICBo
ZXJlIGZyb20gUmFuZ2UsIGRlY2lkZWQgdG8gdXNlIHRoZSAiaW5jbHVzaXZlIGFuY2VzdG9yIiBu
YW1pbmcgZnJvbSB0aGUKKyAgICAgICAgRE9NIHNwZWNpZmljYXRpb24sIGFuZCB1c2VkIFJlZlB0
ciBmb3IgdGhlIHJlc3VsdCBzaW5jZSBpdCdzIHBhcnQgb2Ygb3VyIG1vZGVybgorICAgICAgICBz
YWZlciBkZXNpZ24gdG8gYWx3YXlzIHVzZSBzbWFydCBwb2ludGVycyBmb3IgcmV0dXJuIHZhbHVl
cy4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBBZGRlZCBjb21tb25JbmNsdXNpdmVBbmNlc3Rvci4K
KworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb21tb25T
aGFkb3dJbmNsdWRpbmdBbmNlc3Rvcik6IENhbGwgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IuCisK
KyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1v
bkFuY2VzdG9yQ29udGFpbmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpp
c1BvaW50SW5SYW5nZSk6IENhbGwgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IuCisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpSYW5nZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5l
cyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGRvbS9SYW5nZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGNvbnN0KTogQ2FsbCBjb21tb25JbmNs
dXNpdmVBbmNlc3Rvci4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKTogTW92ZWQgdG8g
Qm91bmRhcnlQb2ludC5oLgorCisgICAgICAgICogZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6
OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlvbik6IFVzZQorICAgICAgICBTaW1wbGVS
YW5nZSBpbnN0ZWFkIG9mIGxpdmUgcmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hp
dGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFmdGVyQ29tbWFuZCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNP
blRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9D
aGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bGlzdENvbnZlcnNp
b25UeXBlRm9yU2VsZWN0aW9uKTogdXNlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4pOiBUYWtlIGEgU2ltcGxlUmFuZ2UgYXJndW1lbnQuCisgICAgICAg
ICogZWRpdGluZy9FZGl0aW5nLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAq
IGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWRkUmFuZ2VU
b0tpbGxSaW5nKTogVGFrZSBhIFNpbXBsZVJhbmdlIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzIGNvbnN0KTogTWFkZSB0aGlz
IGNvbnN0IGFuZAorICAgICAgICB0d2Vha2VkIGNvZGluZyBzdHlsZSBhIGJpdC4KKyAgICAgICAg
KFdlYkNvcmU6OnNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKTogTW92ZWQgdGhpcywgbWFkZSBpdCBh
IG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJlbmFtZWQgZnJvbSBzY2FuUmFuZ2VGb3JU
ZWxlcGhvbmVOdW1iZXJzLCB1c2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpleHRl
bmRTZWxlY3Rpb24pOiBBZGRlZC4gRmFjdG9yZWQgb3V0IHNvbWUgbG9naWMgZnJvbSB0aGUgZnVu
Y3Rpb24gYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JU
ZWxlcGhvbmVOdW1iZXJzKTogVXNlIFNpbXBsZVJhbmdlLiBSZW1vdmVkCisgICAgICAgIHNvbWUg
dW5uZWNlc3NhcnkgY29kZSB0aGF0IHN1YnRyYWN0cyAxIGFuZCB0aGVuIGFkZHMgMSBhZ2Fpbi4K
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAg
ICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpyZXBsYWNlKTogVXNlIGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTZWFyY2hSYW5nZSk6IFJldHVybiBhIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxp
bmdXaGl0ZXNwYWNlKTogVXNlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9XZWJD
b250ZW50UmVhZGVyLmg6IFVzZSBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4K
KworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oOiBVc2UgYSBzdHJ1Y3Qs
IERldGVjdGVkSXRlbSwgZm9yIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgZnJvbSB0aGUgZGV0
ZWN0aW9uIGZ1bmN0aW9ucy4gQWxzbyBjaGFuZ2VkIERhdGFEZXRlY3RvclR5cGVzIHRvIGFuIGVu
dW0gY2xhc3Mgc28KKyAgICAgICAgaXQgY2FuIGJlIGZvcndhcmQtZGVjbGFyZWQgaW5zdGVhZCBv
ZiBoYXZpbmcgdG8gaW5jbHVkZSB0aGlzIGhlYWRlci4KKyAgICAgICAgKiBlZGl0aW5nL2NvY29h
L0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJDb3JlOjpkZXRlY3RJdGVtKTogUmVuYW1l
ZCBmcm9tIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlLiBSZXR1cm4gdGhlCisgICAgICAg
IERldGVjdGVkSXRlbSBzdHJ1Y3QsIHdpdGggYSBTaW1wbGVSYW5nZSByYXRoZXIgdGhhbiBhbiBv
dXQgYXJndW1lbnQgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246
OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
Ojpjb250YWlucyk6IEFkZGVkIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0ZXN0aW5nIGJpdHMgaW4g
dGhlCisgICAgICAgIERhdGFEZXRlY3RvclR5cGUgZW51bS4gTGF0ZXIgd2UgY2FuIG1ha2UgdGhp
cyBiZXR0ZXIgdXNpbmcgT3B0aW9uU2V0LgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0VVJM
U3RyaW5nRm9yUmVzdWx0KTogUmVmYWN0b3JlZCBhIGJpdCwgdXBkYXRlZCBmb3IgdGhlIG5ldwor
ICAgICAgICBEYXRhRGV0ZWN0b3JUeXBlcyBlbnVtIGNsYXNzLCBhbmQgdG8gdXNlIENGRXF1YWwg
aW5zdGVhZCBvZiBDRlN0cmluZ0NvbXBhcmUuCisgICAgICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0
aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9j
b2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvY29j
b2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29udGVu
dFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6IFVwZGF0ZWQgc2luY2UgY29udGV4dCBpcyBTaW1wbGVS
YW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQpOiBVc2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6IFVzZSBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0
YXJnZXROb2RlRm9yQ2xpY2tFdmVudCk6IFVzZSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvci4gQWxz
byB1cGRhdGVkCisgICAgICAgIHRvIHJldHVybiBhIFJlZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOiBVcGRhdGVkIGZvciB0aGUg
YWJvdmUuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLnlhbWw6IENoYW5nZWQgdGhlIGRlZmF1
bHQgZm9yIERhdGFEZXRlY3RvclR5cGVzIHRvIGJlIHRoZSBlbXB0eQorICAgICAgICBzdHJpbmcg
cmF0aGVyIHRoYW4gYSBuYW1lZCBjb25zdGFudC4KKyAgICAgICAgKiBwYWdlL1NldHRpbmdzQmFz
ZS5oOiBGb3J3YXJkLWRlY2xhcmUgRGF0YURldGVjdG9yVHlwZXMgaW5zdGVhZCBvZiBpbmNsdWRp
bmcKKyAgICAgICAgdGhlIERhdGFEZXRlY3Rpb24uaCBoZWFkZXIuCisKKyAgICAgICAgKiBwYWdl
L1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKTogVGFrZSBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6Omhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6c2VsZWN0aW9uUmVjdHMpOiBEaXR0by4gQWxzbyByZW5hbWVkIGZyb20gZ2V0
U2VsZWN0aW9uUmVjdHNGb3JSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxlQ29udGFpbnND
b21wbGV4QmFja2dyb3VuZCk6IFR3ZWFrZWQgaW1wbGVtZW50YXRpb24uCisgICAgICAgIChXZWJD
b3JlOjplc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2UpOiBUYWtlIGEgU2ltcGxlUmFuZ2UuCisg
ICAgICAgIChXZWJDb3JlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdEZvclJhbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNPbmx5V2hpdGVTcGFjZVRleHQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOiBEaXR0by4KKyAgICAgICAg
KiBwYWdlL1RleHRJbmRpY2F0b3IuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAg
ICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOiBVc2UgU2ltcGxlUmFuZ2Ug
aW5zdGVhZCBvZiBhIGxpdmUKKyAgICAgICAgcmFuZ2UgZm9yIGhpZ2hsaWdodHMuCisgICAgICAg
ICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0
aW9uKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OkhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0
ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpm
aW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFu
ZGxlQ2xpY2spOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKTogVXNlIFNpbXBs
ZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKTog
VHdlYWtlZCBhIGJpdC4KKwogMjAyMC0wNC0yNiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gQ29tcHV0ZSBhbmQgZGlzdHJpYnV0ZSBleHRyYSB2
ZXJ0aWNhbCBzcGFjZSBmb3Igcm93cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1YTk2ODU4N2JjMmIzZDNiZjEyOWNm
Y2ViN2MzOThkNDNkYmEyMmJmLi45N2M3Njc1ZGY2ZDJlOTM4NmJmYjRmOWQxODYyNTA4Y2JhZWIw
ZWI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDIwLTA0LTI2ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZXBsYWNlIG1vcmUgdXNlcyBvZiBsaXZlIHJh
bmdlcyB3aXRoIFNpbXBsZVJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTEwNTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIFNoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVy
bmFsLmg6CisgICAgICAgIChmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyk6IFVwZGF0ZWQgc2luY2Ug
RGF0YURldGVjdG9yVHlwZXMKKyAgICAgICAgaXMgbm93IGFuIGVudW0gY2xhc3MuIEFsc28gZ290
IHJpZCBvZiBzcGVjaWFsICJub25lIiBhbmQgImFsbCIgdmFsdWVzLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VI
YW5kbGUubW06CisgICAgICAgICgtW1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlIGRldGVj
dERhdGFXaXRoVHlwZXM6Y29udGV4dDpdKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBEYXRhRGV0
ZWN0aW9uIG5vdyB0YWtlcyBhIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViS2l0
OjpWaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yOjpjb21wdXRlVGV4dExlZ2liaWxpdHlTY2Fs
ZXMpOgorICAgICAgICBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkZXRlY3REYXRhSW5B
bGxGcmFtZXMpOiBEaXR0by4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lmg6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBEYXRhRGV0ZWN0aW9uLmguCisKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6IFVz
ZSBTaW1wbGVSYW5nZS4KKwogMjAyMC0wNC0xMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgU3RvcCB1c2luZyBsaXZlIHJhbmdlcyBpbiBmdW5jdGlvbnMgdGhhdCBy
ZXR1cm4gcmFuZ2Ugb2YgdGhlIHNlbGVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCmlu
ZGV4IGU4N2M2NzEyMzE3NjFjYTQxMDliYzBlNzUxYTQ2YThlMDg1Njk0OGQuLmI5NGIwZjYxYTdl
NWUxZDVkYzYxZjdmZTBlNjI2ZWIxY2IxYTI4YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMgd2l0aCBT
aW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVudUNsaWVu
dDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKTogRGl0dG8uCisKKyAg
ICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW06CisgICAgICAg
ICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JE
YXRhRGV0ZWN0ZWRUZXh0XSk6CisgICAgICAgIFVwZGF0ZWQgdG8gdXNlIERldGVjdGVkSXRlbSBh
bmQgU2ltcGxlUmFuZ2UuCisgICAgICAgICgrW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIg
X2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTppbkZyYW1lOndpdGhMb29rdXBPcHRpb25zOmlu
ZGljYXRvck9wdGlvbnM6dHJhbnNpdGlvbjpdKToKKyAgICAgICAgRGl0dG8uCisKIDIwMjAtMDQt
MTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3AgdXNpbmcg
bGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJhbmdlIG9mIHRoZSBzZWxlY3Rp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmls
ZWxpc3QgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0Cmlu
ZGV4IDJkNGQxMjg1ZTg3MTBjYjU1ODdmYmIyZWVlZjhlNGMyY2Q2YzNlMDAuLmZkM2JhMDAxYzdj
MTczY2M3ZjBiYjY0OTBkODU4OWI1ODQ5NTJiM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysrIGIvU291cmNlL1dlYkNvcmUvRGVy
aXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTE4MCwzICsxMTgwLDUgQEAgJChQUk9K
RUNUX0RJUikveG1sL1hQYXRoUmVzdWx0LmlkbAogJChQUk9KRUNUX0RJUikveG1sL1hTTFRQcm9j
ZXNzb3IuaWRsCiAkKFBST0pFQ1RfRElSKS94bWwveG1sYXR0cnMuaW4KICQoUFJPSkVDVF9ESVIp
L3htbC94bWxuc2F0dHJzLmluCitBcHBsZVBheVNldHVwLmlkbAorQXBwbGVQYXlTZXR1cEZlYXR1
cmUuaWRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiMzQ3ZDc5OGNjYmNlMWJiNmE5MDY4NTdm
Y2ExZTQzZGIxYzJkZjgzLi4wMmM3NTcwMGE4NWIzYzcyNTY2OTc3YmEyZGJjMWUzYWY4MjkxNGI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTYzMywxMCArNjMzLDEwIEBAIFN0cmluZyBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0
VW5kZXJFbGVtZW50CiAgICAgICAgIC8vIElmIHBvc3NpYmxlLCB1c2UgYSB0ZXh0IGl0ZXJhdG9y
IHRvIGdldCB0aGUgdGV4dCwgc28gdGhhdCB3aGl0ZXNwYWNlCiAgICAgICAgIC8vIGlzIGhhbmRs
ZWQgY29uc2lzdGVudGx5LgogICAgICAgICBEb2N1bWVudCogbm9kZURvY3VtZW50ID0gbnVsbHB0
cjsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UmFuZ2U7CisgICAgICAgIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiB0ZXh0UmFuZ2U7CiAgICAgICAgIGlmIChOb2RlKiBub2RlID0gbV9yZW5kZXJl
ci0+bm9kZSgpKSB7CiAgICAgICAgICAgICBub2RlRG9jdW1lbnQgPSAmbm9kZS0+ZG9jdW1lbnQo
KTsKLSAgICAgICAgICAgIHRleHRSYW5nZSA9IHJhbmdlT2ZDb250ZW50cygqbm9kZSk7CisgICAg
ICAgICAgICB0ZXh0UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKm5vZGUp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRm9yIGFub255bW91cyBibG9ja3Ms
IHdlIHdvcmsgYXJvdW5kIG5vdCBoYXZpbmcgYSBkaXJlY3Qgbm9kZSB0byBjcmVhdGUgYSByYW5n
ZSBmcm9tCiAgICAgICAgICAgICAvLyBkZWZpbmluZyBvbmUgYmFzZWQgaW4gdGhlIHR3byBleHRl
cm5hbCBwb3NpdGlvbnMgZGVmaW5pbmcgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHN1YnRyZWUuCkBA
IC02NTAsNyArNjUwLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRV
bmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgICAgICAg
ICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uSW5QYXJlbnRBZnRlck5vZGUobGFzdENo
aWxkUmVuZGVyZXItPm5vZGUoKSk7CiAKICAgICAgICAgICAgICAgICBub2RlRG9jdW1lbnQgPSAm
Zmlyc3ROb2RlSW5CbG9jay0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICB0ZXh0UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpub2RlRG9jdW1lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKKyAgICAgICAgICAgICAgICB0ZXh0UmFuZ2UgPSB7IHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kUG9zaXRpb24pIH0gfTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91
bmRhcnlQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaAppbmRleCA1
Y2JiZmRjMDBmNTUwNzQ3NWExODViMmU4NTIzYWZhYjcyMzhiMjIyLi40YjIyYTMxYWMxMWE5NjU0
OGU5OWY2NjgxODE1ZjQyNjJmNDEyZDBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20v
Qm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgK
QEAgLTQ3LDYgKzQ3LDcgQEAgc3RydWN0IEJvdW5kYXJ5UG9pbnQgewogYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFyeVBvaW50Jik7CiAKIEJvdW5kYXJ5
UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoTm9kZSYpOworQm91bmRh
cnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmKTsKIAogaW5s
aW5lIEJvdW5kYXJ5UG9pbnQ6OkJvdW5kYXJ5UG9pbnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1
bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBjb250YWluZXIoV1RGTW92ZShjb250YWluZXIpKQpAQCAt
ODIsNCArODMsOSBAQCBpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAgIHJldHVybiB7IG5vZGUsIDAgfTsKIH0KIAor
aW5saW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhO
b2RlJiBub2RlKQoreworICAgIHJldHVybiB7IG5vZGUsIG5vZGUubGVuZ3RoKCkgfTsKK30KKwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCmluZGV4IDhlNThkMGVkZDg2ZjJhYjkyNjZiNTcwZGYxNzlmMWNlMTRk
ZDQwOTkuLjc4ZjdmNTViZWY1ZDM5MTViNzcyMDZhOWIxMmFkMDI1NWI0MTczMzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
Tm9kZS5jcHAKQEAgLTI2MTIsNiArMjYxMiwxNyBAQCB2b2lkKiBOb2RlOjpvcGFxdWVSb290U2xv
dygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGNvbnN0
IHZvaWQqPihub2RlKSk7CiB9CiAKK1JlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihOb2RlJiBhLCBOb2RlJiBiKQoreworICAgIGZvciAoYXV0byBhbmNlc3RvckEgPSAmYTsgYW5j
ZXN0b3JBOyBhbmNlc3RvckEgPSBhbmNlc3RvckEtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBm
b3IgKGF1dG8gYW5jZXN0b3JCID0gJmI7IGFuY2VzdG9yQjsgYW5jZXN0b3JCID0gYW5jZXN0b3JC
LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChhbmNlc3RvckEgPT0gYW5jZXN0b3JC
KQorICAgICAgICAgICAgICAgIHJldHVybiBhbmNlc3RvckE7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgdHMgPDwgIm5vZGUgIiA8PCAmbm9kZSA8
PCAiICIgPDwgbm9kZS5kZWJ1Z0Rlc2NyaXB0aW9uKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAppbmRleCBlMmIzMDYx
NzI2MmE0MjUwOWEyMWJmZGQ3NGE1Mzc0OGNhZGNkNjgyLi5lYWFhMzU4YzRlYTFiZWZjZWM0OTAy
YjFiNzc1M2U3MWU4MmI4M2Y0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAgLTY3MCw2ICs2NzAsOCBAQCBwcml2
YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlUmFyZURhdGEsIE5vZGVSYXJlRGF0YURlbGV0
ZXI+IG1fcmFyZURhdGE7CiB9OwogCitXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9u
SW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYsIE5vZGUmKTsKKwogI2lmIEFTU0VSVF9FTkFCTEVECiAK
IGlubGluZSB2b2lkIGFkb3B0ZWQoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCmlu
ZGV4IGJjZjY5MDQ1NzVlYmRlMjQ0ZDkxNDUxZDk3MTM4NjQ4YjcxMjE4ZjIuLjY3NDViMTk5ZGI1
NmJmYWQ1MzY2NDcyOGFjMmY3N2Y2ODA3NjgwMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApA
QCAtMTU3MCw3ICsxNTcwLDcgQEAgUmVmUHRyPE5vZGU+IGNvbW1vblNoYWRvd0luY2x1ZGluZ0Fu
Y2VzdG9yKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3NpdGlvbiYgYikKICAgICBBU1NFUlQo
bm9kZUEpOwogICAgIGF1dG8qIG5vZGVCID0gY29tbW9uU2NvcGUtPmFuY2VzdG9yTm9kZUluVGhp
c1Njb3BlKGIuY29udGFpbmVyTm9kZSgpKTsKICAgICBBU1NFUlQobm9kZUIpOwotICAgIHJldHVy
biBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIobm9kZUEsIG5vZGVCKTsKKyAgICByZXR1
cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKm5vZGVBLCAqbm9kZUIpOwogfQogCiBQb3NpdGlv
biBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShOb2RlKiBub2RlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
aW5kZXggNjRhOGFhODI2N2RkMjU0MTdhNjVhMDNiZWIwZjE2MjU5MGUwNzEwNy4uZDViZGUwYTBi
YmY1NGMyNjJiMWNmYWIwYWNhMzRlNzQwMDMwZjkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC0x
NDMsMTcgKzE0Myw2IEBAIHZvaWQgUmFuZ2U6OnNldERvY3VtZW50KERvY3VtZW50JiBkb2N1bWVu
dCkKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKIH0KIAotTm9kZSog
UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNv
bnRhaW5lckIpCi17Ci0gICAgZm9yIChOb2RlKiBwYXJlbnRBID0gY29udGFpbmVyQTsgcGFyZW50
QTsgcGFyZW50QSA9IHBhcmVudEEtPnBhcmVudE5vZGUoKSkgewotICAgICAgICBmb3IgKE5vZGUq
IHBhcmVudEIgPSBjb250YWluZXJCOyBwYXJlbnRCOyBwYXJlbnRCID0gcGFyZW50Qi0+cGFyZW50
Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50QSA9PSBwYXJlbnRCKQotICAgICAgICAg
ICAgICAgIHJldHVybiBwYXJlbnRBOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxs
cHRyOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tGb3JEaWZmZXJlbnRSb290Q29udGFp
bmVyKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgc3RhcnQsIGNvbnN0IFJhbmdlQm91bmRhcnlQ
b2ludCYgZW5kKQogewogICAgIE5vZGUqIGVuZFJvb3RDb250YWluZXIgPSBlbmQuY29udGFpbmVy
KCk7CkBAIC0yMzksNyArMjI4LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJ
blJhbmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICBpZiAoY2hlY2tOb2Rl
UmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1
cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBz
YW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9y
ZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAg
IGlmICghY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnJlZk5vZGUsICZzdGFydENvbnRhaW5lcigp
KSkKKyAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyZWZOb2RlLCBzdGFydENv
bnRhaW5lcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGNo
ZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAgICAgfQpAQCAtMjYzLDcgKzI1Miw3
IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZVBvaW50KE5vZGUmIHJlZk5vZGUs
IHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0
aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QK
ICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8o
bikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghcmVmTm9kZS5p
c0Nvbm5lY3RlZCgpICYmICFjb21tb25BbmNlc3RvckNvbnRhaW5lcigmcmVmTm9kZSwgJnN0YXJ0
Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSAmJiAhY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCiAgICAgICAg
ICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVudEVycm9yIH07CiAgICAgICAgIHJl
dHVybiBjaGVja05vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTQyMSwx
OSArNDEwLDE5IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9p
bnRzKE5vZGUqIGNvbnRhaW5lckEsIHVuc2lnbmVkIG9mZnNlCiAKICAgICAvLyBjYXNlIDQ6IGNv
bnRhaW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGlsZHJlbiBvZiBzaWJsaW5ncwogICAg
IC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhlcmUgaW5zdGVhZAotICAgIGF1dG8q
IGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoY29udGFpbmVyQSwgY29u
dGFpbmVyQik7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKCpjb250YWluZXJBLCAqY29udGFpbmVyQik7CiAgICAgaWYgKCFjb21tb25BbmNlc3RvcikK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogICAgIE5v
ZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7CiAgICAgd2hpbGUgKGNoaWxkQSAmJiBjaGlsZEEtPnBh
cmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAgICAgY2hpbGRBID0gY2hpbGRBLT5w
YXJlbnROb2RlKCk7CiAgICAgaWYgKCFjaGlsZEEpCi0gICAgICAgIGNoaWxkQSA9IGNvbW1vbkFu
Y2VzdG9yOworICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNlc3Rvci5nZXQoKTsKICAgICBOb2Rl
KiBjaGlsZEIgPSBjb250YWluZXJCOwogICAgIHdoaWxlIChjaGlsZEIgJiYgY2hpbGRCLT5wYXJl
bnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIGNoaWxkQiA9IGNoaWxkQi0+cGFy
ZW50Tm9kZSgpOwogICAgIGlmICghY2hpbGRCKQotICAgICAgICBjaGlsZEIgPSBjb21tb25BbmNl
c3RvcjsKKyAgICAgICAgY2hpbGRCID0gY29tbW9uQW5jZXN0b3IuZ2V0KCk7CiAKICAgICBpZiAo
Y2hpbGRBID09IGNoaWxkQikKICAgICAgICAgcmV0dXJuIDA7IC8vIEEgaXMgZXF1YWwgdG8gQgpA
QCAtMTI5MCwxMCArMTI3OSwxMCBAQCBpbnQgUmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dp
dGhvdXRVbmlvbkludGVyaW9yTGluZXMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JgogICAgICAgICB9
CiAgICAgfQogCi0gICAgLy8gVGhlIHJhbmdlIGNvdWxkIHNwYW4gb3ZlciBub2RlcyB3aXRoIGRp
ZmZlcmVudCB3cml0aW5nIG1vZGVzLgorICAgIC8vIFRoZSByYW5nZSBjb3VsZCBzcGFuIG5vZGVz
IHdpdGggZGlmZmVyZW50IHdyaXRpbmcgbW9kZXMuCiAgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2Fz
ZSwgd2UgdXNlIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KICAgICBp
ZiAoY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMpIHsKLSAgICAgICAgaWYgKE5vZGUqIGFu
Y2VzdG9yID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0YXJ0Q29udGFpbmVyLCAmZW5kQ29u
dGFpbmVyKSkKKyAgICAgICAgaWYgKGF1dG8gYW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkKICAgICAgICAgICAgIGhhc0ZsaXBw
ZWRXcml0aW5nTW9kZSA9IGFuY2VzdG9yLT5yZW5kZXJlcigpLT5zdHlsZSgpLmlzRmxpcHBlZEJs
b2Nrc1dyaXRpbmdNb2RlKCk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDgyYzMyNjUzNTk2
M2FhNmZkOGVkNzVlNjNjZDgyMmMzNzJmMTIzZGUuLjhhMjZhYjUyZGZhZTczZDY4YjkzMjVmM2E3
MjA4ZDFiODhhMDZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC02MCw4ICs2MCw3IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5vZmZzZXQoKTsg
fQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydCA9PSBtX2VuZDsg
fQogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSBjb25zdCB7IHJldHVybiBj
b21tb25BbmNlc3RvckNvbnRhaW5lcigmc3RhcnRDb250YWluZXIoKSwgJmVuZENvbnRhaW5lcigp
KTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOb2RlKiBjb21tb25BbmNlc3RvckNvbnRh
aW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKTsKKyAgICBOb2RlKiBjb21t
b25BbmNlc3RvckNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKHN0YXJ0Q29udGFpbmVyKCksIGVuZENvbnRhaW5lcigpKS5nZXQoKTsgfQogICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0KFJlZjxOb2RlPiYmIGNvbnRhaW5l
ciwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lk
PiBzZXRFbmQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0YXJ0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2lt
cGxlUmFuZ2UuY3BwCmluZGV4IDlhYjEzNjAxMjQ5MTc0MDNmODFiYTM2MWU3MjJkYTljMjI4ZmFi
ZjAuLjkyNDBjMzQyNDE4MThiMmQwNGVlODYzMDI0MmFmZjU0ZDk5Y2NmMWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtNjQsMTEgKzY0LDYgQEAgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYgbm9kZSkKICAgICByZXR1cm4gU2ltcGxl
UmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJlbnQsIG9mZnNldCArIDEgfSB9Owog
fQogCi1zdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRl
bnRzKE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIHsgbm9kZSwgbm9kZS5sZW5ndGgoKSB9Owot
fQotCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoTm9kZSYgbm9k
ZSkKIHsKICAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhu
b2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhub2RlKSB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
aW5kZXggNWFmMmM2MGU0NDQwMWJlOTJkZGE4ODgyYTY1N2ZiY2Q3OWUwNTY3MS4uM2JkNjU4ZGY2
NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC0yMTcsMTggKzIx
NywyMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFwcGx5QXV0b2NvcnJlY3Rp
b25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKIAogdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0gICAgaWYgKEFsdGVybmF0aXZlVGV4dENsaWVu
dCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCisgICAgaWYgKGF1dG8gY2xpZW50
ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAgIGNsaWVudC0+cmVjb3JkQXV0b2Nv
cnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgY29ycmVj
dGVkLCBjb3JyZWN0aW9uKTsKIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwog
ICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7Ci0gICAgbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9u
OjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29y
cmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJh
bWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLCBt
X2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpKTsKIAorICAgIG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlv
bjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENv
cnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8gcmFuZ2UgPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1
cm47CiAgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwot
ICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVsbGluZywgRG9jdW1lbnRNYXJrZXI6
OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpSZW1vdmVQYXJ0aWFs
bHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBtYXJrZXJzLnJlbW92
ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9
LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFy
a2VyKTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBs
YWNlbWVudCk7CisgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6
U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6dGltZXJGaXJlZCgpCkBAIC0zOTUsMTAgKzM5NywxMiBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcoRWRpdENvbW1hbmRDb21w
b3NpdGlvbgogewogICAgIGlmICghY29tbWFuZC0+d2FzQ3JlYXRlTGlua0NvbW1hbmQoKSkKICAg
ICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRv
Y3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuc3RhcnQoKSwgY29tbWFuZC0+
c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0byByYW5nZSA9IGNvbW1hbmQtPnN0
YXJ0aW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAg
IHJldHVybjsKICAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFtZS5kb2N1bWVudCgpLT5tYXJrZXJz
KCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNl
bWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVs
bENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3Vt
ZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJhbmdlLCBE
b2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIEVkaXRvckNsaWVu
dCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRpdG9yQ2xpZW50KCkKQEAgLTQ3MSw3ICs0
NzUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRpbmdXaGl0
ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAgIGlmIChlbmRPZlNlbGVjdGlvbiA9
PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0
byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1l
bnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVuZE9mU2VsZWN0aW9uKTsKKyAgICBh
dXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5
UG9pbnQocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
T2ZTZWxlY3Rpb24pIH07CiAgICAgU3RyaW5nIHN0cmluZyA9IHBsYWluVGV4dChwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSk7CiAgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkgfHwgIWRlcHJlY2F0ZWRJ
c0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcubGVuZ3RoKCkgLSAxXSkpCiAgICAgICAg
IHJldHVybjsKQEAgLTQ4NCwyNSArNDg4LDI1IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25BCiAK
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0Jl
UmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCwgUmFuZ2Um
IHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcmIHN0cmluZ1RvQmVSZXBsYWNlZCkK
IHsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1hcmtlckNvbnRyb2xsZXIgPSBtX2Zy
YW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBpZiAobWFya2VyQ29udHJvbGxlci5oYXNN
YXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQp
KSB7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwor
ICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50
TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09IFRleHRD
aGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAgICByZWNvcmRTcGVsbGNoZWNrZXJS
ZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgc3RyaW5n
VG9CZVJlcGxhY2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXIuaGFzTWFya2VycyhyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCisgICAgaWYg
KG1hcmtlcnMuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6
OlJlamVjdGVkQ29ycmVjdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICht
YXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50
TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCisgICAgaWYgKG1hcmtlcnMuaGFzTWFya2Vycyhy
YW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUG9zaXRpb24gYmVnaW5uaW5nT2ZSYW5nZSA9
IHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0UG9zaXRpb24oKTsKICAgICBQb3NpdGlvbiBwcmVj
ZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09mUmFuZ2UucHJldmlvdXMoKTsKLSAg
ICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5k
b2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiwgYmVnaW5uaW5nT2ZSYW5nZSk7
CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSBtYXJrZXJD
b250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVu
dE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKLSAgICBmb3IgKGNvbnN0IGF1dG8qIG1h
cmtlciA6IG1hcmtlcnMpIHsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gU2lt
cGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24p
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoYmVnaW5uaW5nT2ZSYW5nZSkgfTsKKworICAgIGZvciAoYXV0
byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVjdGlvbikpIHsKICAgICAgICAgaWYg
KG1hcmtlci0+ZGVzY3JpcHRpb24oKSA9PSBzdHJpbmdUb0JlUmVwbGFjZWQpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFu
Z2VMaXN0VHlwZUNvbW1hbmQuY3BwCmluZGV4IGQ4YTg3MDNhNWJiYzYwNTVjNTA2Y2UwOGYzNWFk
ZGJjNGEwZTliMWQuLmQ5OTdiYWJmZTJjOGY1ZTA1NTg2ZGE2MDc4MTlmNjFlMDUxZTcxZWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5kLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAK
QEAgLTQwLDggKzQwLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIE9wdGlvbmFs
PHN0ZDo6cGFpcjxDaGFuZ2VMaXN0VHlwZUNvbW1hbmQ6OlR5cGUsIFJlZjxIVE1MRWxlbWVudD4+
PiBsaXN0Q29udmVyc2lvblR5cGVGb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uKQogeworICAgIGF1dG8gc3RhcnROb2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuY29u
dGFpbmVyTm9kZSgpOworICAgIGF1dG8gZW5kTm9kZSA9IHNlbGVjdGlvbi5lbmQoKS5jb250YWlu
ZXJOb2RlKCk7CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVuZE5vZGUpCisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKCpzdGFydE5vZGUsICplbmROb2RlKTsKKwogICAgIFJlZlB0cjxIVE1MRWxlbWVu
dD4gbGlzdFRvUmVwbGFjZTsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gbWFrZVJlZlB0cihS
YW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIoc2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVy
Tm9kZSgpLCBzZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpKSk7CiAgICAgaWYgKGlzPEhU
TUxVTGlzdEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yKSB8fCBpczxIVE1MT0xpc3RFbGVtZW50Pihj
b21tb25BbmNlc3RvcikpCiAgICAgICAgIGxpc3RUb1JlcGxhY2UgPSBkb3duY2FzdDxIVE1MRWxl
bWVudD4oY29tbW9uQW5jZXN0b3IuZ2V0KCkpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuY3BwCmluZGV4IDNiMDI5ZWE3ZjMwMTQ1YzE3NGMzNDI0Y2IzYWM4MmJjMzg5NWViZDYu
LjVhZTdhYjJkZmEzYmJlYjc1OTI5ODBhNGY4ZWMyYTc1NzhmMzA1NDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nLmNwcApAQCAtMTE0MCwxOSArMTE0MCwyMiBAQCBzdGF0aWMgYm9vbCBpc1Zp
c2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3QsIGNvbnN0IFBvc2l0aW9uJiBzZWNv
bmQpCiAKIC8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUgaXMgaW5zaWRlIGEgcmFuZ2Ugb3Ig
dmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHJhbmdlLgog
Ly8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3aGV0aGVyIGEgbm9kZSBpcyB2aXNp
Ymx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQotYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVk
V2l0aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlJiByYW5nZSkKK2Jvb2wgaXNOb2RlVmlzaWJs
eUNvbnRhaW5lZFdpdGhpbihOb2RlJiBub2RlLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7
CiAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSByYW5nZSwgdGhlbiBpdCBzdXJlbHkg
aXMgY29udGFpbmVkIHdpdGhpbi4KLSAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSByYW5nZS5j
b21wYXJlTm9kZShub2RlKTsKKyAgICBhdXRvIGNvbXBhcmlzb25SZXN1bHQgPSBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLT5jb21wYXJlTm9kZShub2RlKTsKICAgICBpZiAoIWNvbXBhcmlzb25SZXN1
bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9v
bCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9
PSByYW5nZS5zdGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYg
Y29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKCZub2RlKSwgcmFuZ2Uu
ZW5kUG9zaXRpb24oKSkgPCAwKQorICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAgYXV0byBlbmRQb3NpdGlvbiA9IGNy
ZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpOworCisgICAgYm9vbCBzdGFydElz
VmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3JlTm9kZShub2RlKSA9PSBzdGFydFBv
c2l0aW9uOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMo
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIGVuZFBvc2l0aW9uKSA8IDApCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQ
b3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSByYW5nZS5lbmRQb3NpdGlvbigpOwotICAgIGlmIChl
bmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHJhbmdlLnN0YXJ0UG9zaXRpb24o
KSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoJm5vZGUpKSA8IDApCisgICAgYm9vbCBlbmRJ
c1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSBlbmRQb3Np
dGlvbjsKKyAgICBpZiAoZW5kSXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhzdGFy
dFBvc2l0aW9uLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgmbm9kZSkpIDwgMCkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBlbmRJ
c1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKaW5kZXggYzA1MjY0NmUxNTMz
YmYyZDY3NWU0NDBjMzcxMDc5ZGE5NGE0ZGNkMS4uN2YzYWM2MmIzN2UxOGMwZGUwOTM1MzEwZWE4
OGM0NzE3NjBmMTdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKQEAgLTM3LDcgKzM3LDYg
QEAgY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OwogY2xhc3MgSFRN
TFNwYW5FbGVtZW50OwogY2xhc3MgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ7Ci1jbGFzcyBS
YW5nZTsKIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogY2xhc3Mg
VmlzaWJsZVNlbGVjdGlvbjsKQEAgLTEwMSw3ICsxMDAsNyBAQCBib29sIGlzTm9kZVJlbmRlcmVk
KGNvbnN0IE5vZGUmKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
Y29uc3QgTm9kZSopOwogYm9vbCBpc05vblRhYmxlQ2VsbEhUTUxCbG9ja0VsZW1lbnQoY29uc3Qg
Tm9kZSopOwogCi1ib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSYsIGNvbnN0
IFJhbmdlJik7Citib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSYsIGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgYXJlSWRlbnRpY2FsRWxlbWVudHMoY29uc3QgTm9kZSYs
IGNvbnN0IE5vZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IDFjODNmZDBh
YWU4NzMzOWIxNDNhMTk2ZDY0NGE5NDY2ODlmYjE1M2YuLjJiMTA2MDY4OTkwYjcyMjgyNGNkODZk
MTdmZGNjMmU1ZjFjYzM4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTMyMTEs
NyArMzIxMSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIHJlcGxhY2VTZWxlY3Rp
b25XaXRoVGV4dCh0cmFuc3Bvc2VkLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFj
ZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiB9CiAKLXZvaWQgRWRpdG9yOjphZGRSYW5nZVRv
S2lsbFJpbmcoY29uc3QgUmFuZ2UmIHJhbmdlLCBLaWxsUmluZ0luc2VydGlvbk1vZGUgbW9kZSkK
K3ZvaWQgRWRpdG9yOjphZGRSYW5nZVRvS2lsbFJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
LCBLaWxsUmluZ0luc2VydGlvbk1vZGUgbW9kZSkKIHsKICAgICBhZGRUZXh0VG9LaWxsUmluZyhw
bGFpblRleHQocmFuZ2UpLCBtb2RlKTsKIH0KQEAgLTM2ODUsOTkgKzM2ODUsNzQgQEAgdm9pZCBF
ZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYs
IE9wdGlvblNldDxGcmFtZVMKICAgICBzY2hlZHVsZUVkaXRvclVJVXBkYXRlKCk7CiB9CiAKLSNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFN
SUxZKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExBVEZPUk0o
TUFDKQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpCitib29s
IEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpIGNvbnN0CiB7Ci0gICAgaWYg
KCFtX2ZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
ZG9jdW1lbnQoKS5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25l
TnVtYmVyRGV0ZWN0b3I6OmlzU3VwcG9ydGVkKCk7CisgICAgcmV0dXJuIG1fZnJhbWUuZG9jdW1l
bnQoKSAmJiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFyc2luZ0VuYWJsZWQoKSAmJiBU
ZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsKIH0KIAotdm9pZCBFZGl0b3I6
OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKK3N0YXRpYyBWZWN0b3I8U2ltcGxl
UmFuZ2U+IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
IHsKLSAgICBpZiAoIXNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSB8fCAhY2xpZW50KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMu
Y2xlYXIoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBtYXJrZWRSYW5nZXM7Ci0KLSAg
ICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5nZSgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBw
YWdlID0gbV9mcmFtZS5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7Ci0gICAg
ICAgIHJldHVybjsKKyAgICAvLyBEb24ndCBzY2FuIGZvciBwaG9uZSBudW1iZXJzIGluc2lkZSBl
ZGl0YWJsZSByZWdpb25zLgorICAgIGF1dG8mIHN0YXJ0Tm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFp
bmVyKCk7CisgICAgaWYgKHN0YXJ0Tm9kZS5oYXNFZGl0YWJsZVN0eWxlKCkpCisgICAgICAgIHJl
dHVybiB7IH07CisgICAgYXV0byB0ZXh0ID0gcGxhaW5UZXh0KHJhbmdlKTsKKyAgICBWZWN0b3I8
U2ltcGxlUmFuZ2U+IHJlc3VsdDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgp
OworICAgIHVuc2lnbmVkIHNjYW5uZXJQb3NpdGlvbiA9IDA7CisgICAgaW50IHJlbGF0aXZlU3Rh
cnRQb3NpdGlvbiA9IDA7CisgICAgaW50IHJlbGF0aXZlRW5kUG9zaXRpb24gPSAwOworICAgIGF1
dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcgeyB0ZXh0IH0udXBjb252ZXJ0ZWRDaGFyYWN0ZXJz
KCk7CisgICAgd2hpbGUgKHNjYW5uZXJQb3NpdGlvbiA8IGxlbmd0aCAmJiBUZWxlcGhvbmVOdW1i
ZXJEZXRlY3Rvcjo6ZmluZCgmY2hhcmFjdGVyc1tzY2FubmVyUG9zaXRpb25dLCBsZW5ndGggLSBz
Y2FubmVyUG9zaXRpb24sICZyZWxhdGl2ZVN0YXJ0UG9zaXRpb24sICZyZWxhdGl2ZUVuZFBvc2l0
aW9uKSkgeworICAgICAgICBBU1NFUlQoc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVFbmRQb3Np
dGlvbiA8PSBsZW5ndGgpOworICAgICAgICByZXN1bHQuYXBwZW5kKHJlc29sdmVDaGFyYWN0ZXJS
YW5nZShyYW5nZSwgQ2hhcmFjdGVyUmFuZ2Uoc2Nhbm5lclBvc2l0aW9uICsgcmVsYXRpdmVTdGFy
dFBvc2l0aW9uLCByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFydFBvc2l0aW9uKSkp
OworICAgICAgICBzY2FubmVyUG9zaXRpb24gKz0gcmVsYXRpdmVFbmRQb3NpdGlvbjsKICAgICB9
Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwotCi0gICAgLy8gRXh0ZW5kIHRoZSBy
YW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNvbXBs
ZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KLSAgICBzdGF0aWMgY29uc3QgaW50IGNoYXJh
Y3RlcnNUb0V4dGVuZCA9IDE1OwotICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHZpc2libGVT
ZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKLSAgICBQb3NpdGlvbiBzdGFy
dCA9IHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBQb3NpdGlvbiBlbmQgPSB2aXNpYmxl
U2VsZWN0aW9uLmVuZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RvRXh0
ZW5kOyArK2kpIHsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgU2ltcGxlUmFuZ2Ug
ZXh0ZW5kU2VsZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgdW5zaWduZWQgY2hhcmFj
dGVyc1RvRXh0ZW5kKQoreworICAgIGF1dG8gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2Uuc3RhcnQpOworICAgIGF1dG8gZW5kID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJhbmdlLmVuZCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoYXJhY3Rl
cnNUb0V4dGVuZDsgKytpKSB7CiAgICAgICAgIHN0YXJ0ID0gc3RhcnQucHJldmlvdXMoQ2hhcmFj
dGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFjdGVyKTsKICAgICB9CisgICAgcmV0
dXJuIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZCl9
OworfQogCi0gICAgRnJhbWVTZWxlY3Rpb24gZXh0ZW5kZWRTZWxlY3Rpb247Ci0gICAgZXh0ZW5k
ZWRTZWxlY3Rpb24uc2V0U3RhcnQoc3RhcnQpOwotICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldEVu
ZChlbmQpOwotICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9IGV4dGVuZGVkU2VsZWN0aW9uLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0KLSAgICBpZiAoIWV4dGVuZGVkUmFuZ2UpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAgICAgIHBh
Z2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJh
bmdlc0NoYW5nZWQoKTsKK3ZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9yVGVsZXBob25lTnVt
YmVycygpCit7CisgICAgLy8gRklYTUU6IFdoeSBpcyBpdCBoZWxwZnVsIGhlcmUgdG8gY2hlY2sg
Y2xpZW50IGZvciBudWxsPworICAgIGlmICghc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygp
IHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAotICAgIHNjYW5SYW5nZUZv
clRlbGVwaG9uZU51bWJlcnMoY3JlYXRlTGl2ZVJhbmdlKCpleHRlbmRlZFJhbmdlKSwgcGxhaW5U
ZXh0KCpleHRlbmRlZFJhbmdlKSwgbWFya2VkUmFuZ2VzKTsKKyAgICBtX2RldGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICAvLyBPbmx5IGNvbnNpZGVyIHJhbmdlcyB3
aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92ZXJsYXAgd2l0aCB0aGUg
YWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KLSAgICBmb3IgKGF1dG8mIHJhbmdlIDogbWFya2VkUmFu
Z2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZXNPdmVybGFwKHJhbmdlLmdldCgpLCBzZWxlY3RlZFJh
bmdlLmdldCgpKSkKLSAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMu
YXBwZW5kKHJhbmdlKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
OworICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CisgICAgICAgIGlmIChhdXRvIHNlbGVj
dGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CisgICAgICAg
ICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBkaXJlY3Rp
b24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgorICAgICAg
ICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4dGVuZCA9IDE1OworICAgICAg
ICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0ZWRS
YW5nZSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlIDogc2NhbkZvclRlbGVwaG9uZU51
bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3RlZFJhbmdlLCBjaGFyYWN0ZXJzVG9FeHRlbmQp
KSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgZG8gdGhpcyB1bmNvbmRp
dGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRoaXMgb25seSB3aGVuIGl0IG92ZXJsYXBzIHRo
ZSBzZWxlY3Rpb24/CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS5tYXJrZXJzKCkuYWRkTWFy
a2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVyKTsKKworICAgICAgICAg
ICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUg
bnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgor
ICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSku
cHRyKCksIHNlbGVjdGVkTGl2ZVJhbmdlLnB0cigpKSkKKyAgICAgICAgICAgICAgICAgICAgbV9k
ZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2Uo
KSkKICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVjdGVkVGVs
ZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCi12b2lkIEVkaXRvcjo6c2NhblJhbmdl
Rm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYgcmFuZ2UsIGNvbnN0IFN0cmluZ1ZpZXcmIHN0cmlu
Z1ZpZXcsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWFya2VkUmFuZ2VzKQotewotICAgIC8vIERv
bid0IHNjYW4gZm9yIHBob25lIG51bWJlcnMgaW5zaWRlIGVkaXRhYmxlIHJlZ2lvbnMuCi0gICAg
Tm9kZSYgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKLSAgICBpZiAoc3RhcnRO
b2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gcmVsYXRp
dmVTdGFydFBvc2l0aW9uIGFuZCByZWxhdGl2ZUVuZFBvc2l0aW9uIGFyZSB0aGUgZW5kcG9pbnRz
IG9mIHRoZSBwaG9uZSBudW1iZXIgcmFuZ2UsCi0gICAgLy8gcmVsYXRpdmUgdG8gdGhlIHNjYW5u
ZXJQb3NpdGlvbgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZ1ZpZXcubGVuZ3RoKCk7Ci0g
ICAgdW5zaWduZWQgc2Nhbm5lclBvc2l0aW9uID0gMDsKLSAgICBpbnQgcmVsYXRpdmVTdGFydFBv
c2l0aW9uID0gMDsKLSAgICBpbnQgcmVsYXRpdmVFbmRQb3NpdGlvbiA9IDA7Ci0KLSAgICBhdXRv
IGNoYXJhY3RlcnMgPSBzdHJpbmdWaWV3LnVwY29udmVydGVkQ2hhcmFjdGVycygpOwotCi0gICAg
d2hpbGUgKHNjYW5uZXJQb3NpdGlvbiA8IGxlbmd0aCAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rv
cjo6ZmluZCgmY2hhcmFjdGVyc1tzY2FubmVyUG9zaXRpb25dLCBsZW5ndGggLSBzY2FubmVyUG9z
aXRpb24sICZyZWxhdGl2ZVN0YXJ0UG9zaXRpb24sICZyZWxhdGl2ZUVuZFBvc2l0aW9uKSkgewot
ICAgICAgICAvLyBUaGUgY29udmVudGlvbiBpbiB0aGUgRGF0YSBEZXRlY3RvcnMgZnJhbWV3b3Jr
IGlzIHRoYXQgdGhlIGVuZCBwb3NpdGlvbiBpcyB0aGUgZmlyc3QgY2hhcmFjdGVyIE5PVCBpbiB0
aGUgcGhvbmUgbnVtYmVyCi0gICAgICAgIC8vICh0aGF0IGlzLCB0aGUgbGVuZ3RoIG9mIHRoZSBy
YW5nZSBpcyByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVTdGFydFBvc2l0aW9uKS4gU28g
c3VidHJhY3QgMSB0byBnZXQgdGhlIHNhbWUKLSAgICAgICAgLy8gY29udmVudGlvbiBhcyB0aGUg
b2xkIFdlYkNvcmUgcGhvbmUgbnVtYmVyIHBhcnNlciAoc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUg
Y29kZSBpcyBzdGlsbCB2YWxpZCBpZiB3ZSB3YW50IHRvIGdvIGJhY2sKLSAgICAgICAgLy8gdG8g
dGhlIG9sZCBwYXJzZXIpLgotICAgICAgICAtLXJlbGF0aXZlRW5kUG9zaXRpb247Ci0KLSAgICAg
ICAgQVNTRVJUKHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlRW5kUG9zaXRpb24gPCBsZW5ndGgp
OwotCi0gICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2Us
IENoYXJhY3RlclJhbmdlKHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwg
cmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiArIDEpKTsKLQotICAg
ICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVSYW5nZShzdWJyYW5nZSkpOwotICAg
ICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihzdWJyYW5nZSwg
RG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7Ci0KLSAgICAgICAgc2Nhbm5lclBvc2l0
aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRpb24gKyAxOwotICAgIH0KLX0KLQogI2VuZGlmIC8vIEVO
QUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAKIHZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lmU2NoZWR1bGVkKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCmluZGV4IGFkOWVkYTI2MThjOWE4ODBiZWNiYjFjZTRkNjhiYjU5Yjg5YzIw
YzAuLjIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBkN2RhZTQ5YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaApAQCAtNDE3LDcgKzQxNyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIAog
ICAgIGVudW0gY2xhc3MgS2lsbFJpbmdJbnNlcnRpb25Nb2RlIHsgUHJlcGVuZFRleHQsIEFwcGVu
ZFRleHQgfTsKLSAgICB2b2lkIGFkZFJhbmdlVG9LaWxsUmluZyhjb25zdCBSYW5nZSYsIEtpbGxS
aW5nSW5zZXJ0aW9uTW9kZSk7CisgICAgdm9pZCBhZGRSYW5nZVRvS2lsbFJpbmcoY29uc3QgU2lt
cGxlUmFuZ2UmLCBLaWxsUmluZ0luc2VydGlvbk1vZGUpOwogICAgIHZvaWQgYWRkVGV4dFRvS2ls
bFJpbmcoY29uc3QgU3RyaW5nJiwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlKTsKICAgICB2b2lkIHNl
dFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShib29sKTsKIApAQCAtNTA2LDcgKzUwNiw3IEBAIHB1
YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2dsZUF1dG9tYXRpY1NwZWxsaW5nQ29y
cmVjdGlvbigpOwogI2VuZGlmCiAKLSAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29u
dGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOworICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250KiBmb250Rm9yU2VsZWN0aW9uKGJv
b2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0OwogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25TdGFydChGcmFtZSogLCBOb2RlICom
bm9kZVRvUmVtb3ZlKTsKQEAgLTUxNiwxMiArNTE2LDEzIEBAIHB1YmxpYzoKICAgICBXRUJDT1JF
X0VYUE9SVCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFzdGVib2FyZCgpOwogICAgIFN0cmlu
ZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aEltYWdlQWx0VGV4dCgpOwogICAgIHZv
aWQgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCk7Ci0jaWYgIVBMQVRGT1JNKElPU19GQU1J
TFkpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0
ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgPSBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CisjZW5kaWYKKworI2lm
IFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlYWRTZWxlY3Rpb25Gcm9t
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKICAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIHJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSosIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUp
OwotI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQotICAgIFdFQkNPUkVfRVhQT1JUIHZv
aWQgcmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmlidXRlZFN0cmlu
ZyAqLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nID0gTWFpbEJsb2NrcXVvdGVIYW5kbGluZzo6UmVz
cGVjdEJsb2NrcXVvdGUpOwogI2VuZGlmCiAKICAgICBib29sIGNhbkNvcHlFeGNsdWRpbmdTdGFu
ZGFsb25lSW1hZ2VzKCkgY29uc3Q7CkBAIC01MzIsOSArNTMzLDkgQEAgcHVibGljOgogICAgIHZv
aWQgd3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRhdGEmKTsKICNlbmRpZgogCi0jaWYg
RU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlM
WSkKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1B
QykKICAgICB2b2lkIHNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCk7Ci0gICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBkZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXM7IH0KKyAgICBj
b25zdCBWZWN0b3I8U2ltcGxlUmFuZ2U+JiBkZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXM7IH0KICNlbmRp
ZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmluZ0ZvckNhbmRpZGF0ZVJlcXVlc3Qo
KSBjb25zdDsKQEAgLTY0OCwxMiArNjQ5LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2VkaXRv
clVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlvbiB7IGZhbHNlIH07CiAgICAgYm9v
bCBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSB7IGZhbHNlIH07CiAKLSNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQotICAg
IGJvb2wgc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpOwotICAgIHZvaWQgc2NhblJhbmdl
Rm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYsIGNvbnN0IFN0cmluZ1ZpZXcmLCBWZWN0b3I8UmVm
UHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcyk7CisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCisgICAgYm9vbCBzaG91bGREZXRlY3RUZWxlcGhv
bmVOdW1iZXJzKCkgY29uc3Q7CiAKICAgICBUaW1lciBtX3RlbGVwaG9uZU51bWJlckRldGVjdGlv
blVwZGF0ZVRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBtX2RldGVjdGVkVGVsZXBo
b25lTnVtYmVyUmFuZ2VzOworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gbV9kZXRlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlczsKICNlbmRpZgogCiAgICAgYm9vbCBtX2lzR2V0dGluZ0RpY3Rpb25h
cnlQb3B1cEluZm8geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRleCA3ZTUzNGYyOTRkNjdhMTNkMmFj
NWQyNTFiNDAwMDdiZGM4MTk4NTEwLi43ZTQ0NGQwNWQ5ZjgwYThhZGE2MTI1YTIwZDA4ZGMzNWM3
NWZjMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRp
b25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVs
YXRpb25Db250cm9sbGVyLmNwcApAQCAtNTk2LDcgKzU5Niw3IEBAIGF1dG8gVGV4dE1hbmlwdWxh
dGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1bGF0aW9uSXRlbURhdGEmIGl0ZW0s
IGNvbnN0CiAgICAgICAgICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQogICAgICAgICAgICAgICAg
IGNvbW1vbkFuY2VzdG9yID0gcGFyZW50OwogICAgICAgICAgICAgZWxzZSBpZiAoIXBhcmVudC0+
aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAg
Y29tbW9uQW5jZXN0b3IgPSBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIoY29tbW9uQW5j
ZXN0b3IuZ2V0KCksIHBhcmVudC5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0
b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29tbW9uQW5jZXN0b3IsICpwYXJlbnQpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25BbmNlc3Rvcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCmlu
ZGV4IDNjYWZjM2E4ZmJjYmM5Y2I1NDk5YzlkOGE3OWYxNTNjMTQzZGU2NmIuLjIyM2NlMWNmMTQ1
NDc1MWZiMzBkYTIzZTI5YmE0MzdhODBiNWI5MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjAyLDI2ICsyMDIsMTYgQEAgYm9vbCBWaXNpYmxl
U2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIFJlZlB0cjxSYW5nZT4gbWFrZVNl
YXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKK3N0YXRpYyBPcHRpb25hbDxTaW1w
bGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKIHsKLSAg
ICBhdXRvKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKLSAgICBpZiAoIW5vZGUp
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8qIGJvdW5kYXJ5ID0gZGVwcmVjYXRl
ZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7Ci0gICAgaWYgKCFib3VuZGFyeSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNlYXJjaFJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZShub2RlLT5kb2N1bWVudCgpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gc2VhcmNoUmFuZ2Ut
PnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFBvc2l0aW9uIHN0YXJ0IHsgcG9z
aXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkgfTsKLSAgICByZXN1bHQgPSBzZWFyY2hS
YW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQub2Zmc2V0SW5Db250
YWluZXJOb2RlKCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNlYXJjaFJhbmdlOworICAgIGF1dG8gbm9kZSA9
IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgYXV0byBzY29wZSA9IGRlcHJlY2F0ZWRF
bmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KG5vZGUpOworICAgIGlmICghc2NvcGUpCisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBzdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50
KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKKyAgICBpZiAoIXN0YXJ0KQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJldHVybiB7IHsgV1RGTW92ZSgqc3Rh
cnQpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKCpzY29wZSkgfSB9OwogfQog
CiBib29sIFZpc2libGVTZWxlY3Rpb246OmlzQWxsKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVs
ZSBydWxlKSBjb25zdApAQCAtMjMxLDcgKzIyMSw3IEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6
aXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CiAKIHZvaWQgVmlz
aWJsZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNlKCkKIHsKLSAgICBSZWZQdHI8
UmFuZ2U+IHNlYXJjaFJhbmdlID0gbWFrZVNlYXJjaFJhbmdlKG1fZW5kKTsKKyAgICBhdXRvIHNl
YXJjaFJhbmdlID0gbWFrZVNlYXJjaFJhbmdlKG1fZW5kKTsKICAgICBpZiAoIXNlYXJjaFJhbmdl
KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
V2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVh
ZGVyLmgKaW5kZXggNjgzZTI0NDM0OWM5MDVhNjgyOTk3MzQwZTgzNWU2ZWRhOGE2ZmU2My4uNTQ1
NDFmMGE3MmJiMDM4M2Y3MWMyOTVjNDAyZWE5M2IxYTI4ZWU0MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTI4LDEzICsyOCwxMiBAQAogI2luY2x1ZGUg
IkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAj
aW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXJjaGl2
ZVJlc291cmNlOwotY2xhc3MgQmxvYjsKIAogY2xhc3MgRnJhbWVXZWJDb250ZW50UmVhZGVyIDog
cHVibGljIFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyIHsKIHB1YmxpYzoKQEAgLTUyLDEzICs1
MSwxMyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIFdlYkNvbnRlbnRSZWFkZXIgZmluYWwgOiBwdWJs
aWMgRnJhbWVXZWJDb250ZW50UmVhZGVyIHsKIHB1YmxpYzoKLSAgICBSYW5nZSYgY29udGV4dDsK
KyAgICBjb25zdCBTaW1wbGVSYW5nZSBjb250ZXh0OwogICAgIGNvbnN0IGJvb2wgYWxsb3dQbGFp
blRleHQ7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQ7CiAgICAgYm9v
bCBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OwogCi0gICAgV2ViQ29udGVudFJlYWRlcihGcmFt
ZSYgZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0KQorICAgIFdlYkNv
bnRlbnRSZWFkZXIoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgYm9v
bCBhbGxvd1BsYWluVGV4dCkKICAgICAgICAgOiBGcmFtZVdlYkNvbnRlbnRSZWFkZXIoZnJhbWUp
CiAgICAgICAgICwgY29udGV4dChjb250ZXh0KQogICAgICAgICAsIGFsbG93UGxhaW5UZXh0KGFs
bG93UGxhaW5UZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rp
b24uaAppbmRleCAxZDExMmRjNjk4Mzk4MGJmZDZmNmI5N2RmNzgwMGZiZWQ2MzM4MTc1Li4zNGEz
NDVjNzYzMGNjMzk2Mzc3NmRhYTE4N2NmZWE5M2Q1ZDQ3NjNiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5ICsyNyw5IEBACiAKICNpZiBFTkFC
TEUoREFUQV9ERVRFQ1RJT04pCiAKLSNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KKyNpbXBvcnQgIkZs
b2F0UmVjdC5oIgorI2ltcG9ydCAiU2ltcGxlUmFuZ2UuaCIKICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBPQkpDX0NMQVNTIEREQWN0
aW9uQ29udGV4dDsKIE9CSkNfQ0xBU1MgTlNBcnJheTsKQEAgLTM3LDMwICszNywzMiBAQCBPQkpD
X0NMQVNTIE5TRGljdGlvbmFyeTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBEb2N1
bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBIaXRUZXN0UmVz
dWx0OwotY2xhc3MgUmFuZ2U7CiAKLWVudW0gRGF0YURldGVjdG9yVHlwZXMgewotICAgIERhdGFE
ZXRlY3RvclR5cGVOb25lID0gMCwKLSAgICBEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIgPSAx
IDw8IDAsCi0gICAgRGF0YURldGVjdG9yVHlwZUxpbmsgPSAxIDw8IDEsCi0gICAgRGF0YURldGVj
dG9yVHlwZUFkZHJlc3MgPSAxIDw8IDIsCi0gICAgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZl
bnQgPSAxIDw8IDMsCi0gICAgRGF0YURldGVjdG9yVHlwZVRyYWNraW5nTnVtYmVyID0gMSA8PCA0
LAotICAgIERhdGFEZXRlY3RvclR5cGVGbGlnaHROdW1iZXIgPSAxIDw8IDUsCi0gICAgRGF0YURl
dGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rpb24gPSAxIDw8IDYsCi0gICAgRGF0YURldGVjdG9yVHlw
ZUFsbCA9IFVMT05HX01BWAorLy8gRklYTUU6IFdvdWxkIGJlIGJldHRlciB0byB1c2UgYW4gT3B0
aW9uU2V0IGFuZCBwZXJoYXBzIHRvIHVzZSB1aW50OF90IGluc3RlYWQgb2YgdWludDMyX3QuCitl
bnVtIGNsYXNzIERhdGFEZXRlY3RvclR5cGVzIDogdWludDMyX3QgeworICAgIE5vbmUgPSAwLAor
ICAgIFBob25lTnVtYmVyID0gMSA8PCAwLAorICAgIExpbmsgPSAxIDw8IDEsCisgICAgQWRkcmVz
cyA9IDEgPDwgMiwKKyAgICBDYWxlbmRhckV2ZW50ID0gMSA8PCAzLAorICAgIFRyYWNraW5nTnVt
YmVyID0gMSA8PCA0LAorICAgIEZsaWdodE51bWJlciA9IDEgPDwgNSwKKyAgICBMb29rdXBTdWdn
ZXN0aW9uID0gMSA8PCA2LAorfTsKKworc3RydWN0IERldGVjdGVkSXRlbSB7CisgICAgUmV0YWlu
UHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dDsKKyAgICBGbG9hdFJlY3QgYm91bmRp
bmdCb3g7CisgICAgU2ltcGxlUmFuZ2UgcmFuZ2U7CiB9OwogCiBjbGFzcyBEYXRhRGV0ZWN0aW9u
IHsKIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7CisgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1
bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogI2VuZGlmCi0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIE5TQXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRS
YW5nZSwgRGF0YURldGVjdG9yVHlwZXMsIE5TRGljdGlvbmFyeSAqY29udGV4dCk7CisgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgRGF0YURldGVjdG9yVHlwZXMsIE5TRGljdGlvbmFyeSAqY29udGV4dCk7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcmVtb3ZlRGF0YURldGVjdGVkTGlua3NJbkRv
Y3VtZW50KERvY3VtZW50Jik7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgYm9vbCBjYW5CZVByZXNlbnRlZEJ5RGF0YURldGVjdG9ycyhjb25zdCBV
UkwmKTsKQEAgLTc3LDQgKzc5LDMgQEAgcHVibGljOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRh
RGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9u
Lm1tCmluZGV4IDQzOWMwMzNjZTIyYTM4NTE3ZmNiNzViNzAwNmI1NmY2M2Y3NmYyY2QuLjJmYmVm
NjEyNDI3ODNlZmIzYjA4MjA1MGE2ZDBkZDg2Yzk1MjQ0YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOCw3ICszOCw2IEBACiAj
aW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmgiCiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1wb3J0ICJOb2RlLmgiCiAjaW1wb3J0
ICJOb2RlTGlzdC5oIgogI2ltcG9ydCAiTm9kZVRyYXZlcnNhbC5oIgogI2ltcG9ydCAiUmFuZ2Uu
aCIKQEAgLTU2LDggKzU1LDcgQEAKICNpbXBvcnQgIkRhdGFEZXRlY3RvcnNDb3JlU29mdExpbmsu
aCIKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJF
RCA+PSAxMDE0MDAKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgV1RGOjpDRlR5cGVUcmFpdDxERFJlc3Vs
dFJlZj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgV1RGOjpDRlR5cGVUcmFpdDxERFJlc3VsdFJlZj4g
ewogICAgIHN0YXRpYyBpbmxpbmUgQ0ZUeXBlSUQgdHlwZUlEKHZvaWQpIHsgcmV0dXJuIEREUmVz
dWx0R2V0Q0ZUeXBlSUQoKTsgfQogfTsKICNlbmRpZgpAQCAtNjgsMjUgKzY2LDI0IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZiBQTEFURk9STShNQUMpCiAKLXN0YXRpYyBSZXRh
aW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlLCBGbG9hdFJl
Y3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFS
YW5nZSkKK3N0YXRpYyBPcHRpb25hbDxEZXRlY3RlZEl0ZW0+IGRldGVjdEl0ZW0oY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZSkK
IHsKLSAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAg
aWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KCpjb250ZXh0
UmFuZ2UpOwotICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbikgfSk7Cisg
ICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxhaW5UZXh0KGNvbnRleHRSYW5nZSk7
CisgICAgQ0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3RlckNvdW50KHsgY29udGV4dFJhbmdl
LnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOwogCiAgICAgYXV0byBzY2Fu
bmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBu
dWxscHRyKSk7CiAgICAgYXV0byBzY2FuUXVlcnkgPSBhZG9wdENGKEREU2NhblF1ZXJ5Q3JlYXRl
RnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxsUGxhaW5UZXh0U3RyaW5nLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1bGxQbGFpblRleHRTdHJpbmcubGVu
Z3RoKCkpKSk7CiAKICAgICBpZiAoIUREU2Nhbm5lclNjYW5RdWVyeShzY2FubmVyLmdldCgpLCBz
Y2FuUXVlcnkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbmlsOworICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogCiAgICAgYXV0byByZXN1bHRzID0gYWRvcHRDRihERFNjYW5uZXJDb3B5UmVz
dWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9u
c05vT3ZlcmxhcCkpOwogCiAgICAgLy8gRmluZCB0aGUgRERSZXN1bHRSZWYgdGhhdCBpbnRlcnNl
Y3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0aW9uLgogICAgIEREUmVzdWx0UmVm
IG1haW5SZXN1bHQgPSBudWxscHRyOwotICAgIFJlZlB0cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdl
OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWluUmVzdWx0UmFuZ2U7CiAgICAgQ0ZJbmRl
eCByZXN1bHRDb3VudCA9IENGQXJyYXlHZXRDb3VudChyZXN1bHRzLmdldCgpKTsKICAgICBmb3Ig
KENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRDb3VudDsgaSsrKSB7CiAjaWYgX19NQUNfT1NfWF9W
RVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDAKQEAgLTk3LDM5ICs5NCw0MCBAQCBzdGF0aWMg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2Uo
VmlzaWJsZVBvc2l0aW9uCiAgICAgICAgIENGUmFuZ2UgcmVzdWx0UmFuZ2VJbkNvbnRleHQgPSBE
RFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7CiAgICAgICAgIGlmIChoaXRMb2NhdGlvbiA+PSByZXN1
bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9jYXRpb24gLSByZXN1bHRSYW5nZUlu
Q29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29udGV4dC5sZW5ndGgpIHsKICAgICAg
ICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAgICAgICBtYWluUmVzdWx0UmFuZ2Ug
PSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKCpjb250ZXh0UmFuZ2UsIHJl
c3VsdFJhbmdlSW5Db250ZXh0KSk7CisgICAgICAgICAgICBtYWluUmVzdWx0UmFuZ2UgPSByZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UoY29udGV4dFJhbmdlLCByZXN1bHRSYW5nZUluQ29udGV4dCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghbWFpblJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAot
ICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsK
KyAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPnN0YXJ0LmRvY3VtZW50KCkudmlldygp
OwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgIGF1dG8gYWN0aW9uQ29udGV4dCA9IGFkb3B0TlMoW2FsbG9jRERB
Y3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0QWxs
UmVzdWx0czpAWyAoX19icmlkZ2UgaWQpbWFpblJlc3VsdCBdXTsKICAgICBbYWN0aW9uQ29udGV4
dCBzZXRNYWluUmVzdWx0Om1haW5SZXN1bHRdOwogCi0gICAgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRp
bmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCptYWluUmVzdWx0UmFuZ2Up
KSkpOwotICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJlc3VsdFJhbmdlOwotCi0gICAgcmV0
dXJuIGFjdGlvbkNvbnRleHQ7CisgICAgcmV0dXJuIHsgeworICAgICAgICBXVEZNb3ZlKGFjdGlv
bkNvbnRleHQpLAorICAgICAgICB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJl
Y3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCpt
YWluUmVzdWx0UmFuZ2UpKSkpLAorICAgICAgICAqbWFpblJlc3VsdFJhbmdlLAorICAgIH0gfTsK
IH0KIAotUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRl
bUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCwg
RmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0
ZWREYXRhUmFuZ2UpCitPcHRpb25hbDxEZXRlY3RlZEl0ZW0+IERhdGFEZXRlY3Rpb246OmRldGVj
dEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1
bHQpCiB7CiAgICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFyeSgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIE5vZGUqIG5vZGUg
PSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpOwogICAgIGlmICghbm9kZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
YXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAgICAgaWYgKCFyZW5kZXJlcikKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CiAgICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0UmFu
Z2U7CkBAIC0xNDAsMjcgKzEzOCwyNiBAQCBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBEYXRh
RGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaQogICAgICAg
ICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7CiAKICAg
ICAgICAgY29udGV4dFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFyb3VuZFBvc2l0aW9uQnlDaGFyYWN0
ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEZyYW1lKiBmcmFtZSA9
IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAog
ICAgICAgICBJbnRQb2ludCBmcmFtZVBvaW50ID0gaGl0VGVzdFJlc3VsdC5yb3VuZGVkUG9pbnRJ
bklubmVyTm9kZUZyYW1lKCk7CiAgICAgICAgIGlmICghZnJhbWUtPnJhbmdlRm9yUG9pbnQoZnJh
bWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uID0gZnJh
bWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOworICAgICAgICBwb3NpdGlv
biA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChmcmFtZVBvaW50KTsKICAgICAgICAg
aWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIGNvbnRleHRSYW5nZSA9IGVu
Y2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlvbiwgTGluZUdyYW51bGFyaXR5LCBE
aXJlY3Rpb25Gb3J3YXJkKTsKLSAgICAgICAgaWYgKCFjb250ZXh0UmFuZ2UpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1cm4gZGV0ZWN0SXRlbUF0UG9zaXRp
b25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRSYW5nZSwgZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKKyAgICBpZiAoIWNvbnRleHRSYW5nZSkKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBkZXRlY3RJdGVtKHBvc2l0aW9uLCAq
Y29udGV4dFJhbmdlKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKQEAgLTIyMywyNSAr
MjIwLDMwIEBAIHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKEREUmVzdWx0UmVmIHJlc3VsdCkKICAg
ICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2JqZWN0OihOU1N0cmluZyAqKXNvZnRMaW5rX0Rh
dGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0VHlwZShyZXN1bHQpXTsKIH0KIAorLy8gUG9vciBt
YW4ncyBPcHRpb25TZXQuCitzdGF0aWMgYm9vbCBjb250YWlucyhEYXRhRGV0ZWN0b3JUeXBlcyB0
eXBlcywgRGF0YURldGVjdG9yVHlwZXMgc2luZ2xlVHlwZSkKK3sKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHR5cGVzKSAmIHN0YXRpY19jYXN0PHVpbnQzMl90PihzaW5nbGVUeXBl
KTsKK30KKwogc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RVUkxTdHJpbmdGb3JSZXN1bHQoRERS
ZXN1bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJlc3VsdElkZW50aWZpZXIsIE5TRGF0
ZSAqcmVmZXJlbmNlRGF0ZSwgTlNUaW1lWm9uZSAqcmVmZXJlbmNlVGltZVpvbmUsIERhdGFEZXRl
Y3RvclR5cGVzIGRldGVjdGlvblR5cGVzKQogewogICAgIGlmICghc29mdExpbmtfRGF0YURldGVj
dG9yc0NvcmVfRERSZXN1bHRIYXNQcm9wZXJ0aWVzKGN1cnJlbnRSZXN1bHQsIEREUmVzdWx0UHJv
cGVydHlQYXNzaXZlRGlzcGxheSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgCi0gICAgRERV
UkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgcGhvbmVUeXBlcyA9IChkZXRlY3Rpb25U
eXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikgPyBERFVSTGlmaWVyUGhvbmVOdW1i
ZXJEZXRlY3Rpb25SZWd1bGFyIDogRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uTm9uZTsK
LSAgICBERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5ID0gc29mdExpbmtfRGF0YURldGVjdG9yc0Nv
cmVfRERSZXN1bHRHZXRDYXRlZ29yeShjdXJyZW50UmVzdWx0KTsKLSAgICBDRlN0cmluZ1JlZiB0
eXBlID0gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBlKGN1cnJlbnRS
ZXN1bHQpOwotICAgIAotICAgIGlmICgoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlw
ZUFkZHJlc3MpICYmIChERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9PSBjYXRlZ29yeSkpCi0gICAg
ICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlVHJhY2tpbmdOdW1iZXIp
ICYmIChDRlN0cmluZ0NvbXBhcmUoZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyVHJhY2tp
bmdOdW1iZXJLZXkoKSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKQotICAgICAgICB8
fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUZsaWdodE51bWJlcikgJiYgKENG
U3RyaW5nQ29tcGFyZShnZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJGbGlnaHRJbmZvcm1h
dGlvbktleSgpLCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykpCi0gICAgICAgIHx8ICgo
ZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlTG9va3VwU3VnZ2VzdGlvbikgJiYgKENG
U3RyaW5nQ29tcGFyZShnZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJQYXJzZWNTb3VyY2VL
ZXkoKSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKQotICAgICAgICB8fCAoKGRldGVj
dGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyKSAmJiAoRERSZXN1bHRDYXRl
Z29yeVBob25lTnVtYmVyID09IGNhdGVnb3J5KSkKLSAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBl
cyAmIERhdGFEZXRlY3RvclR5cGVMaW5rKSAmJiByZXN1bHRJc1VSTChjdXJyZW50UmVzdWx0KSkp
IHsKLSAgICAgICAgCisKKyAgICBhdXRvIHBob25lVHlwZXMgPSBjb250YWlucyhkZXRlY3Rpb25U
eXBlcywgRGF0YURldGVjdG9yVHlwZXM6OlBob25lTnVtYmVyKSA/IEREVVJMaWZpZXJQaG9uZU51
bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25l
OworICAgIGF1dG8gY2F0ZWdvcnkgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3Vs
dEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIGF1dG8gdHlwZSA9IHNvZnRMaW5rX0Rh
dGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0VHlwZShjdXJyZW50UmVzdWx0KTsKKworICAgIGlm
ICgoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3RvclR5cGVzOjpBZGRyZXNzKSAm
JiBERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9PSBjYXRlZ29yeSkKKyAgICAgICAgfHwgKGNvbnRh
aW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6VHJhY2tpbmdOdW1iZXIpICYm
IENGRXF1YWwoZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyVHJhY2tpbmdOdW1iZXJLZXko
KSwgdHlwZSkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0YURldGVj
dG9yVHlwZXM6OkZsaWdodE51bWJlcikgJiYgQ0ZFcXVhbChnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleSgpLCB0eXBlKSkKKyAgICAgICAgfHwgKGNvbnRh
aW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6TG9va3VwU3VnZ2VzdGlvbikg
JiYgQ0ZFcXVhbChnZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJQYXJzZWNTb3VyY2VLZXko
KSwgdHlwZSkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0YURldGVj
dG9yVHlwZXM6OlBob25lTnVtYmVyKSAmJiBERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXIgPT0g
Y2F0ZWdvcnkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0YURldGVj
dG9yVHlwZXM6OkxpbmspICYmIHJlc3VsdElzVVJMKGN1cnJlbnRSZXN1bHQpKSkgewogICAgICAg
ICByZXR1cm4gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERVUkxTdHJpbmdGb3JSZXN1bHQo
Y3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0
ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwogICAgIH0KLSAgICBpZiAoKGRldGVjdGlvblR5cGVzICYg
RGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQpICYmIChERFJlc3VsdENhdGVnb3J5Q2FsZW5k
YXJFdmVudCA9PSBjYXRlZ29yeSkpIHsKKyAgICBpZiAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMs
IERhdGFEZXRlY3RvclR5cGVzOjpDYWxlbmRhckV2ZW50KSAmJiBERFJlc3VsdENhdGVnb3J5Q2Fs
ZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkgewogICAgICAgICBpZiAoIXNvZnRMaW5rX0RhdGFEZXRl
Y3RvcnNDb3JlX0REUmVzdWx0SXNQYXN0RGF0ZShjdXJyZW50UmVzdWx0LCAoQ0ZEYXRlUmVmKXJl
ZmVyZW5jZURhdGUsIChDRlRpbWVab25lUmVmKXJlZmVyZW5jZVRpbWVab25lKSkKICAgICAgICAg
ICAgIHJldHVybiBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFVSTFN0cmluZ0ZvclJlc3Vs
dChjdXJyZW50UmVzdWx0LCByZXN1bHRJZGVudGlmaWVyLCBwaG9uZVR5cGVzLCByZWZlcmVuY2VE
YXRlLCByZWZlcmVuY2VUaW1lWm9uZSk7CiAgICAgfQpAQCAtNDQzLDI4ICs0NDUsMjQgQEAgdm9p
ZCBEYXRhRGV0ZWN0aW9uOjpyZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rc0luRG9jdW1lbnQoRG9jdW1l
bnQmIGRvY3VtZW50KQogICAgICAgICByZW1vdmVSZXN1bHRMaW5rc0Zyb21BbmNob3IoYW5jaG9y
LmdldCgpKTsKIH0KIAotTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFu
Z2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcyB0eXBlcywg
TlNEaWN0aW9uYXJ5ICpjb250ZXh0KQorTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29u
dGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9y
VHlwZXMgdHlwZXMsIE5TRGljdGlvbmFyeSAqY29udGV4dCkKIHsKLSAgICBpZiAoIWNvbnRleHRS
YW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJldGFpblB0cjxERFNjYW5uZXJSZWY+
IHNjYW5uZXIgPSBhZG9wdENGKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNy
ZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKLSAgICBSZXRhaW5QdHI8
RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9y
c0NvcmVfRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOwotICAgIGJ1aWxkUXVlcnkoc2NhblF1ZXJ5
LmdldCgpLCAqY29udGV4dFJhbmdlKTsKKyAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKHNvZnRM
aW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRh
cmQsIDAsIG51bGxwdHIpKTsKKyAgICBhdXRvIHNjYW5RdWVyeSA9IGFkb3B0Q0Yoc29mdExpbmtf
RGF0YURldGVjdG9yc0NvcmVfRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOworICAgIGJ1aWxkUXVl
cnkoc2NhblF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UpOwogICAgIAotICAgIGlmICh0eXBlcyAm
IERhdGFEZXRlY3RvclR5cGVMb29rdXBTdWdnZXN0aW9uKQorICAgIGlmIChjb250YWlucyh0eXBl
cywgRGF0YURldGVjdG9yVHlwZXM6Okxvb2t1cFN1Z2dlc3Rpb24pKQogICAgICAgICBzb2Z0TGlu
a19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJFbmFibGVPcHRpb25hbFNvdXJjZShzY2FubmVy
LmdldCgpLCBERFNjYW5uZXJTb3VyY2VTcG90bGlnaHQsIHRydWUpOwogCiAgICAgLy8gRklYTUU6
IHdlIHNob3VsZCBhZGQgYSB0aW1lb3V0IHRvIHRoaXMgY2FsbCB0byBtYWtlIHN1cmUgaXQgZG9l
c24ndCB0YWtlIHRvbyBtdWNoIHRpbWUuCiAgICAgaWYgKCFzb2Z0TGlua19EYXRhRGV0ZWN0b3Jz
Q29yZV9ERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0cjxDRkFycmF5UmVmPiBzY2FubmVy
UmVzdWx0cyA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVyQ29w
eVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2ZVVzZSgpIHwgRERTY2FubmVyQ29w
eVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzKSk7CisgICAgYXV0byBzY2FubmVyUmVz
dWx0cyA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVyQ29weVJl
c3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBnZXRfRGF0YURldGVjdG9yc0NvcmVfRERT
Y2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2ZVVzZSgpIHwgRERTY2FubmVyQ29weVJl
c3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzKSk7CiAgICAgaWYgKCFzY2FubmVyUmVzdWx0
cykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBDRkFy
cmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMuZ2V0KCkpOwotICAgIGlmICghcmVzdWx0Q291bnQp
CisgICAgaWYgKCFDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMuZ2V0KCkpKQogICAgICAg
ICByZXR1cm4gbmlsOwogCiAgICAgVmVjdG9yPFJldGFpblB0cjxERFJlc3VsdFJlZj4+IGFsbFJl
c3VsdHM7CkBAIC00NzYsNyArNDc0LDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0
Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGUKICAgICBm
b3IgKGlkIHJlc3VsdE9iamVjdCBpbiAoTlNBcnJheSAqKXNjYW5uZXJSZXN1bHRzLmdldCgpKSB7
CiAgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJlc3VsdFJlZilyZXN1bHRPYmplY3Q7
CiAgICAgICAgIE5TSW5kZXhQYXRoICppbmRleFBhdGggPSBbTlNJbmRleFBhdGggaW5kZXhQYXRo
V2l0aEluZGV4OmN1cnJlbnRUb3BMZXZlbEluZGV4XTsKLSAgICAgICAgaWYgKENGU3RyaW5nQ29t
cGFyZShzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldFR5cGUocmVzdWx0KSwg
Z2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyU2lnbmF0dXJlQmxvY2tLZXkoKSwgMCkgPT0g
a0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgaWYgKENGRXF1YWwoc29mdExpbmtfRGF0YURl
dGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBlKHJlc3VsdCksIGdldF9EYXRhRGV0ZWN0b3JzQ29y
ZV9EREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5KCkpKSB7CiAgICAgICAgICAgICBOU0FycmF5ICpz
dWJyZXN1bHRzID0gKE5TQXJyYXkgKilzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3Vs
dEdldFN1YlJlc3VsdHMocmVzdWx0KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgZm9yIChO
U1VJbnRlZ2VyIHN1YlJlc3VsdEluZGV4ID0gMCA7IHN1YlJlc3VsdEluZGV4IDwgW3N1YnJlc3Vs
dHMgY291bnRdIDsgc3ViUmVzdWx0SW5kZXgrKykgewpAQCAtNDkxLDcgKzQ4OSw3IEBAIE5TQXJy
YXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNv
bnRleHRSYW5nZSwgRGF0YURlCiAgICAgfQogCiAgICAgVmVjdG9yPFZlY3RvcjxTaW1wbGVSYW5n
ZT4+IGFsbFJlc3VsdFJhbmdlczsKLSAgICBUZXh0SXRlcmF0b3IgaXRlcmF0b3IoKmNvbnRleHRS
YW5nZSk7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKGNvbnRleHRSYW5nZSk7CiAgICAgQ0ZJ
bmRleCBpdGVyYXRvckNvdW50ID0gMDsKIAogICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgYXJy
YXkgb2YgdGhlIGV4cGFuZGVkIHJlc3VsdHMgdG8gY3JlYXRlIGEgdmVjdG9yIG9mIFJhbmdlIG9i
amVjdHMgdGhhdCBpbmRpY2F0ZQpAQCAtNTM2LDE2ICs1MzQsMTUgQEAgTlNBcnJheSAqRGF0YURl
dGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdl
LCBEYXRhRGUKIAogICAgIGF1dG8gdHogPSBhZG9wdENGKENGVGltZVpvbmVDb3B5RGVmYXVsdCgp
KTsKICAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbY29udGV4dCBvYmplY3RGb3JLZXk6Z2V0
a0RhdGFEZXRlY3RvcnNSZWZlcmVuY2VEYXRlS2V5KCldID86IFtOU0RhdGUgZGF0ZV07Ci0gICAg
VGV4dCogbGFzdFRleHROb2RlVG9VcGRhdGUgPSBudWxscHRyOworICAgIFJlZlB0cjxUZXh0PiBs
YXN0VGV4dE5vZGVUb1VwZGF0ZTsKICAgICBTdHJpbmcgbGFzdE5vZGVDb250ZW50OwotICAgIHNp
emVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25lZCBjb250ZW50T2Zmc2V0ID0gMDsK
ICAgICBERFF1ZXJ5T2Zmc2V0IGxhc3RNb2RpZmllZFF1ZXJ5T2Zmc2V0ID0geyAtMSwgMCB9Owot
ICAgIAorCiAgICAgLy8gRm9yIGVhY2ggcmVzdWx0IGFkZCB0aGUgbGluay4KICAgICAvLyBTaW5j
ZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSByZXN1bHRzIGluIHRoZSBzYW1lIHRleHQgbm9kZSwg
dGhlIG5vZGUgaXMgb25seSBtb2RpZmllZCB3aGVuCiAgICAgLy8gd2UgYXJlIGFib3V0IHRvIHBy
b2Nlc3MgYSBkaWZmZXJlbnQgdGV4dCBub2RlLgotICAgIHJlc3VsdENvdW50ID0gYWxsUmVzdWx0
cy5zaXplKCk7Ci0gICAgCisgICAgQ0ZJbmRleCByZXN1bHRDb3VudCA9IGFsbFJlc3VsdHMuc2l6
ZSgpOwogICAgIGZvciAoQ0ZJbmRleCByZXN1bHRJbmRleCA9IDA7IHJlc3VsdEluZGV4IDwgcmVz
dWx0Q291bnQ7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAgICAgRERSZXN1bHRSZWYgY29yZVJlc3Vs
dCA9IGFsbFJlc3VsdHNbcmVzdWx0SW5kZXhdLmdldCgpOwogICAgICAgICBERFF1ZXJ5UmFuZ2Ug
cXVlcnlSYW5nZSA9IHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0UXVlcnlS
YW5nZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKQEAgLTU3OCw3ICs1NzUsNyBAQCBOU0Fy
cmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBj
b250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdFJhbmdlcy5zaXpl
KCkgPT0gcmFuZ2VCb3VuZGFyaWVzLnNpemUoKSk7CiAgICAgICAgICAgICByZXN1bHRSYW5nZXMu
c2hyaW5rKDApOyAvLyBLZWVwIGNhcGFjaXR5IGFzIHdlIGFyZSBnb2luZyB0byByZXBvcHVsYXRl
IHRoZSBWZWN0b3IgcmlnaHQgYXdheSB3aXRoIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtcy4KICAg
ICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VCb3VuZGFyeSA6IHJhbmdlQm91bmRhcmllcykKLSAg
ICAgICAgICAgICAgICByZXN1bHRSYW5nZXMudW5jaGVja2VkQXBwZW5kKFJhbmdlOjpjcmVhdGUo
KnJhbmdlQm91bmRhcnkuZmlyc3QuZG9jdW1lbnQoKSwgcmFuZ2VCb3VuZGFyeS5maXJzdCwgcmFu
Z2VCb3VuZGFyeS5zZWNvbmQpKTsKKyAgICAgICAgICAgICAgICByZXN1bHRSYW5nZXMudW5jaGVj
a2VkQXBwZW5kKHsgKm1ha2VCb3VuZGFyeVBvaW50KHJhbmdlQm91bmRhcnkuZmlyc3QpLCAqbWFr
ZUJvdW5kYXJ5UG9pbnQocmFuZ2VCb3VuZGFyeS5zZWNvbmQpIH0pOwogICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHF1ZXJ5UmFuZ2UuZW5kOwpA
QCAtNjEyLDcgKzYwOSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJ
blJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAKICAgICAgICAgICAg
IC8vIENyZWF0ZSB0aGUgYWN0dWFsIGFuY2hvciBub2RlIGFuZCBpbnNlcnQgaXQgYmVmb3JlIHRo
ZSBjdXJyZW50IG5vZGUuCiAgICAgICAgICAgICB0ZXh0Tm9kZURhdGEgPSBjdXJyZW50VGV4dE5v
ZGUuZGF0YSgpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5vZmZzZXQsIHJhbmdlLmVuZC5vZmZzZXQg
LSByYW5nZS5zdGFydC5vZmZzZXQpOwotICAgICAgICAgICAgUmVmPFRleHQ+IG5ld1RleHROb2Rl
ID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCB0ZXh0Tm9kZURhdGEpOworICAgICAgICAgICAgYXV0
byBuZXdUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKICAg
ICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShuZXdUZXh0Tm9kZS5jb3B5UmVmKCks
ICZjdXJyZW50VGV4dE5vZGUpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBSZWY8SFRNTEFu
Y2hvckVsZW1lbnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKQEAgLTY1OSwxMyArNjU2LDEzIEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRl
dGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAK
ICAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCiAgICAgICAgIGxhc3RUZXh0Tm9kZVRvVXBk
YXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7Ci0gICAgCisKICAgICByZXR1cm4gW2dldERE
U2Nhbm5lclJlc3VsdENsYXNzKCkgcmVzdWx0c0Zyb21Db3JlUmVzdWx0czpzY2FubmVyUmVzdWx0
cy5nZXQoKV07CiB9CiAKICNlbHNlCiAKLU5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0ZWN0b3JUeXBlcywgTlNEaWN0aW9u
YXJ5ICopCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYsIERhdGFEZXRlY3RvclR5cGVzLCBOU0RpY3Rpb25hcnkgKikKIHsKICAg
ICByZXR1cm4gbmlsOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29j
b2EubW0KaW5kZXggODU4MDc4MTIxNDFkZTU2OTM1NDlkNDNlMWE2NDhiNGVjODliOTZkYS4uZTVh
OTRkNmY2MDBkZmQ5MzY4YmUxOTBiNzRkOWMwMDMzZDgxYzU5NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC0yMjUsNyArMjI1LDcgQEAgUmVmUHRy
PFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhSW5SVEZGb3JtYXQoTlNBdHRyaWJ1dGVkU3RyaW5n
ICpzdHJpbmcpCiAKIC8vIEZJWE1FOiBTaG91bGQgZ2l2ZSB0aGlzIGZ1bmN0aW9uIGEgbmFtZSB0
aGF0IG1ha2VzIGl0IGNsZWFyIGl0IGFkZHMgcmVzb3VyY2VzIHRvIHRoZSBkb2N1bWVudCBsb2Fk
ZXIgYXMgYSBzaWRlIGVmZmVjdC4KIC8vIE9yIHJlZmFjdG9yIHNvIGl0IGRvZXMgbm90IGRvIHRo
YXQuCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3Rl
Ym9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQ
bGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQs
IGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKIHsKICAgICBXZWJDb250ZW50UmVhZGVyIHJlYWRlcihtX2ZyYW1lLCBj
b250ZXh0LCBhbGxvd1BsYWluVGV4dCk7CiAgICAgcGFzdGVib2FyZC5yZWFkKHJlYWRlcik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJD
b2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNv
Y29hLm1tCmluZGV4IGJiZmJjNjhlNmNmZDViOTU4OGVlYzJlNjFiYTEzMTYzZGQ1NDhhZWIuLmQ3
OTQ3ODQ2ZDU5ZTk4YWFmMGZiMmRiM2EwMGJhOTY2ZjQ2ZjcyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCkBAIC02
NzUsNyArNjc1LDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KGNvbnN0
IFN0cmluZyYgdGV4dCkKICAgICBpZiAoIWFsbG93UGxhaW5UZXh0KQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQs
IFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSk7CisgICAgYWRk
RnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UoY29udGV4dCks
IFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKSk7CiAKICAgICBt
YWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0ID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRleCAyZjYxNmE5NDQ5YzBmZDljYWMz
ZDMxMGMzYTc3NzdlMGQ2ZGJjZmQzLi43NDAyNmJiMTY0OTAyYjViZDVjNzE5YWM5OWViMTYzYWU0
NjE0YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCkBAIC0xNDEs
OCArMTQxLDkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSog
bm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdl
OjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24obm9kZSwgUG9zaXRpb246OlBvc2l0
aW9uSXNCZWZvcmVBbmNob3IpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0Fm
dGVyQW5jaG9yKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsK
KworICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKm5vZGUp
OworICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24o
cmFuZ2UpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKICAgICBQYXN0ZWJvYXJk
IHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCkBAIC0xNTcsOSArMTU4LDkgQEAgdm9pZCBF
ZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5n
JiBwYXN0ZWJvYXJkTmFtZSkKICAgICBBTExPV19ERVBSRUNBVEVEX0RFQ0xBUkFUSU9OU19FTkQK
IAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgaWYgKFJlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5n
ZS5nZXQoKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpKSB7CisgICAgaWYgKGF1dG8gZnJhZ21lbnQg
PSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2FyZCwgcmFuZ2UsIHRydWUsIGNob3Nl
UGxhaW5UZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2RlQXR0cmlidXRlc1RvRnJhZ21lbnQo
Km5vZGUsICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJh
Z21lbnQsIHJhbmdlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkpCisgICAgICAg
IGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVkKSkKICAgICAgICAgICAgIHBhc3Rl
QXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgpLCBjYW5TbWFydFJlcGxhY2VXaXRo
UGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6Okln
bm9yZUJsb2NrcXVvdGUpOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5j
cHAKaW5kZXggNWMxY2EzZWEwN2IxNDE5NjdkZTFhNTc4NTAxYjBiYzQ5YzZiMDNjYy4uYjBiZThl
NGNlN2NlY2E3MzUzYzQwNjUxNzQyMGU4Yjc4Njg3YTRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIv
RnJhbWVMb2FkZXIuY3BwCkBAIC0yNTk5LDEzICsyNTk5LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6
OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKCkKICAgICAgICAgICAgICAgICBGUkFNRUxP
QURFUl9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFJlc291cmNlTG9hZGluZywgImNoZWNrTG9hZENv
bXBsZXRlRm9yVGhpc0ZyYW1lOiBGaW5pc2hlZCBmcmFtZSBsb2FkIik7CiAjaWYgRU5BQkxFKERB
VEFfREVURUNUSU9OKQogICAgICAgICAgICAgICAgIGF1dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5k
b2N1bWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLnNldHRpbmdzKCkuZGF0YURl
dGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBlTm9uZSAmJiBkb2N1bWVudCkgewotICAg
ICAgICAgICAgICAgICAgICBpZiAoYXV0byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmFuZ2U+
IGRvY3VtZW50UmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQb3NpdGlvbkluTm9kZShkb2N1bWVudEVs
ZW1lbnQpLCBsYXN0UG9zaXRpb25Jbk5vZGUoZG9jdW1lbnRFbGVtZW50KSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2ZyYW1lLnNldERhdGFEZXRlY3Rpb25SZXN1bHRzKERhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKGRvY3VtZW50UmFuZ2UsIG1fZnJhbWUuc2V0dGluZ3Mo
KS5kYXRhRGV0ZWN0b3JUeXBlcygpLCBtX2NsaWVudC0+ZGF0YURldGVjdGlvbkNvbnRleHQoKSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRGaW5pc2hEYXRh
RGV0ZWN0aW9uKG1fZnJhbWUuZGF0YURldGVjdGlvblJlc3VsdHMoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5zZXR0aW5ncygpLmRhdGFEZXRl
Y3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZXM6Ok5vbmUgJiYgZG9jdW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZS5zZXREYXRhRGV0ZWN0aW9uUmVzdWx0cyhEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoKmRvY3VtZW50KSwgbV9mcmFtZS5zZXR0aW5ncygpLmRhdGFEZXRlY3RvclR5cGVzKCksIG1f
Y2xpZW50LT5kYXRhRGV0ZWN0aW9uQ29udGV4dCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlm
IChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKG1fZnJhbWUuZGF0YURldGVjdGlvblJl
c3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgICAgICAgICAgbV9j
bGllbnQtPmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRs
ZXIuY3BwCmluZGV4IGIzMmZjYWRkOTA2OWEwNDZkYTliN2JhODMwNDdiODIyY2YzNTA5ZmYuLmQ2
NzU0OWI0NmE4MWYwMGE5MGYyZDU1Mzk0NzQ1Mjc0YzEwZjRhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0V2ZW50SGFuZGxlci5jcHAKQEAgLTIwNjYsNyArMjA2Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVy
OjppbnZhbGlkYXRlQ2xpY2soKQogICAgIG1fY2xpY2tOb2RlID0gbnVsbHB0cjsKIH0KIAotc3Rh
dGljIE5vZGUqIHRhcmdldE5vZGVGb3JDbGlja0V2ZW50KE5vZGUqIG1vdXNlUHJlc3NOb2RlLCBO
b2RlKiBtb3VzZVJlbGVhc2VOb2RlKQorc3RhdGljIFJlZlB0cjxOb2RlPiB0YXJnZXROb2RlRm9y
Q2xpY2tFdmVudChOb2RlKiBtb3VzZVByZXNzTm9kZSwgTm9kZSogbW91c2VSZWxlYXNlTm9kZSkK
IHsKICAgICBpZiAoIW1vdXNlUHJlc3NOb2RlIHx8ICFtb3VzZVJlbGVhc2VOb2RlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNzYsMTcgKzIwNzYsMTggQEAgc3RhdGljIE5vZGUqIHRh
cmdldE5vZGVGb3JDbGlja0V2ZW50KE5vZGUqIG1vdXNlUHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJl
bGVhc2VOb2QKIAogICAgIC8vIElmIG1vdXNlUHJlc3NOb2RlIGFuZCBtb3VzZVJlbGVhc2VOb2Rl
IGRpZmZlciwgd2Ugc2hvdWxkIGZpcmUgdGhlIGV2ZW50IGF0IHRoZWlyIGNvbW1vbiBhbmNlc3Rv
ciBpZiB0aGVyZSBpcyBvbmUuCiAgICAgaWYgKCZtb3VzZVByZXNzTm9kZS0+ZG9jdW1lbnQoKSA9
PSAmbW91c2VSZWxlYXNlTm9kZS0+ZG9jdW1lbnQoKSkgewotICAgICAgICBpZiAoYXV0byogY29t
bW9uQW5jZXN0b3IgPSBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIobW91c2VQcmVzc05v
ZGUsIG1vdXNlUmVsZWFzZU5vZGUpKQorICAgICAgICBpZiAoYXV0byBjb21tb25BbmNlc3RvciA9
IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCptb3VzZVByZXNzTm9kZSwgKm1vdXNlUmVsZWFzZU5v
ZGUpKQogICAgICAgICAgICAgcmV0dXJuIGNvbW1vbkFuY2VzdG9yOwogICAgIH0KIAotICAgIEVs
ZW1lbnQqIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3QgPSBtb3VzZVJlbGVhc2VOb2RlLT5zaGFkb3dI
b3N0KCk7CisgICAgYXV0byBtb3VzZVJlbGVhc2VTaGFkb3dIb3N0ID0gbW91c2VSZWxlYXNlTm9k
ZS0+c2hhZG93SG9zdCgpOwogICAgIGlmIChtb3VzZVJlbGVhc2VTaGFkb3dIb3N0ICYmIG1vdXNl
UmVsZWFzZVNoYWRvd0hvc3QgPT0gbW91c2VQcmVzc05vZGUtPnNoYWRvd0hvc3QoKSkgewogICAg
ICAgICAvLyBXZSB3YW50IHRvIGRpc3BhdGNoIHRoZSBjbGljayB0byB0aGUgc2hhZG93IHRyZWUg
aG9zdCBlbGVtZW50IHRvIGdpdmUgbGlzdGVuZXJzIHRoZSBpbGx1c2lvbiB0aGF0IHRoZQogICAg
ICAgICAvLyBzaGFkb20gdHJlZSBpcyBhIHNpbmdsZSBlbGVtZW50LiBGb3IgZXhhbXBsZSwgd2Ug
d2FudCB0byBnaXZlIHRoZSBpbGx1c2lvbiB0aGF0IDxpbnB1dCB0eXBlPSJyYW5nZSI+CiAgICAg
ICAgIC8vIGlzIGEgc2luZ2xlIGVsZW1lbnQgZXZlbiB0aG91Z2ggaXQgaXMgYSBjb21wb3NpdGlv
biBvZiBtdWx0aXBsZSBzaGFkb20gdHJlZSBlbGVtZW50cy4KICAgICAgICAgcmV0dXJuIG1vdXNl
UmVsZWFzZVNoYWRvd0hvc3Q7CiAgICAgfQorCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKQEAg
LTIxNTksOCArMjE2MCw4IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VF
dmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRmb3JtTW91CiAKICAgICBib29sIGNv
bnRleHRNZW51RXZlbnQgPSBwbGF0Zm9ybU1vdXNlRXZlbnQuYnV0dG9uKCkgPT0gUmlnaHRCdXR0
b247CiAKLSAgICBOb2RlKiBub2RlVG9DbGljayA9IHRhcmdldE5vZGVGb3JDbGlja0V2ZW50KG1f
Y2xpY2tOb2RlLmdldCgpLCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSk7Ci0gICAgYm9vbCBzd2Fs
bG93Q2xpY2tFdmVudCA9IG1fY2xpY2tDb3VudCA+IDAgJiYgIWNvbnRleHRNZW51RXZlbnQgJiYg
bm9kZVRvQ2xpY2sgJiYgIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5hbWVzKCkuY2xpY2tFdmVu
dCwgbm9kZVRvQ2xpY2ssIHRydWUsIG1fY2xpY2tDb3VudCwgcGxhdGZvcm1Nb3VzZUV2ZW50LCB0
cnVlKTsKKyAgICBhdXRvIG5vZGVUb0NsaWNrID0gdGFyZ2V0Tm9kZUZvckNsaWNrRXZlbnQobV9j
bGlja05vZGUuZ2V0KCksIG1vdXNlRXZlbnQudGFyZ2V0Tm9kZSgpKTsKKyAgICBib29sIHN3YWxs
b3dDbGlja0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAmJiAhY29udGV4dE1lbnVFdmVudCAmJiBu
b2RlVG9DbGljayAmJiAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50
LCBub2RlVG9DbGljay5nZXQoKSwgdHJ1ZSwgbV9jbGlja0NvdW50LCBwbGF0Zm9ybU1vdXNlRXZl
bnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIpIHsKICAgICAgICAgbV9yZXNpemVM
YXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbApp
bmRleCBhODY3NmQ5N2MzY2FiOTczYzEzMjM1ZGY4OTZjMmRkN2FkYWViNWFlLi4wYjQ5YWQ3M2U5
ZjY1YWQ0OWVmYTRhNGM0MGI2MmIxN2EyMjI3ZDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55
YW1sCkBAIC01NDEsNyArNTQxLDcgQEAgdXNlSW1hZ2VEb2N1bWVudEZvclN1YmZyYW1lUERGOgog
ICBpbml0aWFsOiBmYWxzZQogZGF0YURldGVjdG9yVHlwZXM6CiAgIHR5cGU6IERhdGFEZXRlY3Rv
clR5cGVzCi0gIGluaXRpYWw6IERhdGFEZXRlY3RvclR5cGVOb25lCisgIGluaXRpYWw6IAogICBj
b25kaXRpb25hbDogREFUQV9ERVRFQ1RJT04KIAogIyBBbGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0
b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3IgYXBwcm94aW1hdGVseSBmaXZlIG1pbnV0
ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCmluZGV4IGFkZjhkYmFjZGRjYTdjYWQwZmI3
MmNhMzE2OWMxMmRhOGI0ODUwNjcuLmFmMjI0OWRiMzBjMmNjZTZkZGQyZWMxMjk1MDJkYTlmZDBl
N2ZlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaApAQCAtNDMsMTUgKzQzLDEzIEBA
CiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21TdHJpbmdIYXNoLmg+CiAKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0jaW5jbHVkZSAi
RGF0YURldGVjdGlvbi5oIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Rm9udEdlbmVyaWNGYW1pbGllczsKIGNsYXNzIFBhZ2U7CiAKK2VudW0gY2xhc3MgRGF0YURldGVj
dG9yVHlwZXMgOiB1aW50MzJfdDsKKwogZW51bSBFZGl0YWJsZUxpbmtCZWhhdmlvciB7CiAgICAg
RWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAogICAgIEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCBiMTIxZDlkZGIzNWIxMTI3
ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3Li4yZDZjZTgwOGJlZDY5M2MxZjcwMzNmZmM3ZTdhZDU0
NmM1MGFhM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTUyLDcg
KzUyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgYm9vbCBpbml0aWFsaXpl
SW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiwgRnJhbWUmLCBjb25zdCBSYW5nZSYsIEZsb2F0
U2l6ZSBtYXJnaW4sIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbik7CitzdGF0aWMgYm9v
bCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiwgRnJhbWUmLCBjb25zdCBT
aW1wbGVSYW5nZSYsIEZsb2F0U2l6ZSBtYXJnaW4sIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNlbGVj
dGlvbik7CiAKIFRleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0b3IoY29uc3QgVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEpCiAgICAgOiBtX2RhdGEoZGF0YSkKQEAgLTY2LDMxICs2NiwyNyBAQCBSZWY8
VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JE
YXRhJiBkYXRhKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFRleHRJbmRpY2F0b3IoZGF0YSkp
OwogfQogCi1SZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwg
RmxvYXRTaXplIG1hcmdpbikKK1JlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0
aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50
YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQogewotICAgIEZyYW1lKiBmcmFtZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5mcmFtZSgpOwotCisgICAgYXV0byBm
cmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLmZyYW1l
KCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgUmVm
PEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKKyAgICBib29sIGluZGljYXRlc0N1cnJlbnRTZWxl
Y3Rpb24gPSByYW5nZSA9PSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxp
emVkUmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlvblNldDxUZW1wb3JhcnlTZWxlY3Rp
b25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0
aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpEb05vdFNldEZvY3VzKTsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMu
YWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAg
ICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9u
OjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rp
b25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0g
fSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hh
bmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgcmFuZ2UgfSwgdGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBkYXRhOwogCiAgICAgZGF0YS5wcmVz
ZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9w
dGlvbnMgPSBvcHRpb25zOwogCi0gICAgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uID0g
YXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVMaXZlUmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9y
bWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLQogICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihk
YXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA4LDI1ICsxMDQsMTkgQEAgUmVmUHRyPFRl
eHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZy
YW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRhdGlvblRyYW5zaXRpb24gPSBwcmVzZW50
YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9IG9wdGlvbnM7CiAKLSAgICBpZiAo
IWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCBtYXJnaW4sIHRydWUpKQorICAgIGlmICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCBmcmFt
ZSwgKnJhbmdlLCBtYXJnaW4sIHRydWUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7CiB9CiAKLXN0YXRpYyBib29sIGhh
c05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMg
Ym9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlKQogewotICAgIE5vZGUqIHN0b3BOb2RlID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5v
ZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewotICAgICAgICBpZiAoIW5vZGUpCi0g
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IG5v
ZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgaWYgKCghcmVuZGVyZXItPmlzSW5saW5lKCkgfHwgcmVuZGVyZXItPmlz
UmVwbGFjZWQoKSkgJiYgcmFuZ2UuaW50ZXJzZWN0c05vZGUoKm5vZGUpLnJlbGVhc2VSZXR1cm5W
YWx1ZSgpKQorICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGluZ05vZGVzKHJhbmdlKSkg
eworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigpOworICAgICAgICBpZiAo
cmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8fCByZW5kZXJlci0+aXNSZXBsYWNl
ZCgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIApAQCAtMTg0LDU5ICsxNzQsNDkgQEAgc3RhdGljIGJvb2wgdGFrZVNuYXBzaG90cyhU
ZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBJbnRSZWN0IHNuYXBzaG8KIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLXN0YXRpYyB2b2lkIGdldFNlbGVjdGlvblJlY3Rz
Rm9yUmFuZ2UoVmVjdG9yPEZsb2F0UmVjdD4mIHJlc3VsdGluZ1JlY3RzLCBjb25zdCBSYW5nZSYg
cmFuZ2UpCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gc2VsZWN0aW9uUmVjdHMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlKQogewotICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25S
ZWN0c0ZvclJhbmdlOwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHNlbGVjdGlvblJlY3RzRm9yUmFu
Z2VJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIHJhbmdlLmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyhzZWxlY3Rpb25SZWN0c0ZvclJhbmdlKTsKLSAgICBmb3IgKGF1dG8gc2VsZWN0aW9uUmVj
dCA6IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpCi0gICAgICAgIHJlc3VsdGluZ1JlY3RzLmFwcGVu
ZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7CisgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVj
dGlvblJlY3RzOworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyhzZWxlY3Rpb25SZWN0cyk7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7CisgICAg
Zm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCisgICAgICAgIHJlY3Rz
LmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7CisgICAgcmV0dXJuIHJlY3RzOwogfQogCiAj
ZW5kaWYKIAogc3RhdGljIGJvb2wgc3R5bGVDb250YWluc0NvbXBsZXhCYWNrZ3JvdW5kKGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBpZiAoc3R5bGUuaGFzQmxlbmRNb2RlKCkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN0eWxlLmhhc0JhY2tncm91bmRJbWFnZSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChzdHlsZS5oYXNCYWNrZHJvcEZpbHRl
cigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gc3R5bGUuaGFzQmxlbmRNb2RlKCkgfHwgc3R5bGUuaGFzQmFja2dyb3VuZEltYWdlKCkgfHwg
c3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKTsKIH0KIAotc3RhdGljIEhhc2hTZXQ8Q29sb3I+IGVz
dGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgSGFz
aFNldDxDb2xvcj4gZXN0aW1hdGVkVGV4dENvbG9yc0ZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZSkKIHsKICAgICBIYXNoU2V0PENvbG9yPiBjb2xvcnM7CiAgICAgZm9yIChUZXh0SXRl
cmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5j
ZSgpKSB7Ci0gICAgICAgIGF1dG8qIG5vZGUgPSBpdGVyYXRvci5ub2RlKCk7Ci0gICAgICAgIGlm
ICghaXM8VGV4dD4obm9kZSkgfHwgIWlzPFJlbmRlclRleHQ+KG5vZGUtPnJlbmRlcmVyKCkpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29sb3JzLmFkZChub2RlLT5yZW5kZXJl
cigpLT5zdHlsZSgpLmNvbG9yKCkpOworICAgICAgICBhdXRvIHJlbmRlcmVyID0gaXRlcmF0b3Iu
bm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIp
KQorICAgICAgICAgICAgY29sb3JzLmFkZChyZW5kZXJlci0+c3R5bGUoKS5jb2xvcigpKTsKICAg
ICB9CiAgICAgcmV0dXJuIGNvbG9yczsKIH0KLSAgICAKLXN0YXRpYyBGbG9hdFJlY3QgYWJzb2x1
dGVCb3VuZGluZ1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UpCisKK3N0YXRpYyBGbG9h
dFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlLmFic29sdXRlQm91bmRpbmdSZWN0KHsKKyAgICByZXR1
cm4gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ1JlY3QoewogICAgICAg
ICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZywKICAgICAgICAg
UmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNpYmxlQm91bmRzLAogICAgICAgICBS
YW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZVRpbnlSZWN0cywKICAgICB9KTsKIH0K
IAotc3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFJh
bmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQorc3RhdGljIENvbG9yIGVzdGltYXRlZEJh
Y2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnJh
bWUmIGZyYW1lKQogewogICAgIGF1dG8gZXN0aW1hdGVkQmFja2dyb3VuZENvbG9yID0gZnJhbWUu
dmlldygpID8gZnJhbWUudmlldygpLT5kb2N1bWVudEJhY2tncm91bmRDb2xvcigpIDogQ29sb3I6
OnRyYW5zcGFyZW50OwogCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIgPSBudWxscHRyOwot
ICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSByYW5nZS5jb21tb25BbmNlc3RvckNvbnRhaW5lcigp
OworICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyYW5n
ZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpOwogICAgIHdoaWxlIChjb21t
b25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8UmVuZGVyRWxlbWVudD4oY29tbW9uQW5jZXN0
b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICByZW5kZXJlciA9IGRvd25jYXN0PFJlbmRl
ckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigpKTsKQEAgLTI5MSwxNyArMjcxLDE2
IEBAIHN0YXRpYyBib29sIGhhc0FueUlsbGVnaWJsZUNvbG9ycyhUZXh0SW5kaWNhdG9yRGF0YSYg
ZGF0YSwgY29uc3QgQ29sb3ImIGJhY2tncm91CiAgICAgcmV0dXJuICFoYXNPbmx5TGVnaWJsZVRl
eHRDb2xvcnMgfHwgdGV4dENvbG9ycy5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBib29sIGNvbnRh
aW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKK3N0YXRpYyBib29sIGNv
bnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAg
ICBhdXRvKiBzdG9wID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChhdXRvKiBub2Rl
ID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgJiYgbm9kZSAhPSBzdG9wOyBub2RlID0gTm9kZVRy
YXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0Pihub2Rl
LT5yZW5kZXJlcigpKSkKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2Rlcyhy
YW5nZSkpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0Pihub2RlLnJlbmRlcmVyKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gcGxhaW5UZXh0UmVw
bGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlKS5zdHJpcFdoaXRlU3BhY2UoKS5pc0VtcHR5KCk7CiB9
CiAKLXN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRh
dGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuZ2UmIHJhbmdlLCBGbG9hdFNpemUgbWFyZ2luLCBi
b29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pCitzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5k
aWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgRmxvYXRTaXplIG1hcmdpbiwgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2Vs
ZWN0aW9uKQogewogICAgIGlmIChhdXRvKiBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCiAg
ICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsK
QEAgLTMxMiwyMCArMjkxLDE3IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4
dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuCiAgICAgICAgIHRy
ZWF0UmFuZ2VBc0NvbXBsZXhEdWVUb0lsbGVnaWJsZVRleHRDb2xvcnMgPSBoYXNBbnlJbGxlZ2li
bGVDb2xvcnMoZGF0YSwgZGF0YS5lc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IsIGVzdGltYXRlZFRl
eHRDb2xvcnNGb3JSYW5nZShyYW5nZSkpOwogICAgIH0KIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IHRleHRSZWN0czsKLQogICAgIC8vIEZJWE1FICgxMzg4ODgpOiBJZGVhbGx5IHdlIHdvdWxkbid0
IHJlbW92ZSB0aGUgbWFyZ2luIGluIHRoaXMgY2FzZSwgYnV0IHdlIG5lZWQgdG8KICAgICAvLyBl
bnN1cmUgdGhhdCB0aGUgaW5kaWNhdG9yIGFuZCBpbmRpY2F0b3Itd2l0aC1oaWdobGlnaHQgb3Zl
cmxhcCBwcmVjaXNlbHksIGFuZAogICAgIC8vIHdlIGNhbid0IGFkZCBhIG1hcmdpbiB0byB0aGUg
aW5kaWNhdG9yLXdpdGgtaGlnaGxpZ2h0LgogICAgIGlmIChpbmRpY2F0ZXNDdXJyZW50U2VsZWN0
aW9uICYmICEoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9wdGlvbkluY2x1ZGVNYXJnaW5J
ZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbikpCiAgICAgICAgIG1hcmdpbiA9IEZsb2F0U2l6ZSgpOwog
Ci0gICAgRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQg
PSAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9wdGlvblRpZ2h0bHlGaXRDb250ZW50KSA/
IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpUZXh0SGVpZ2h0IDogRnJhbWVT
ZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodDsKKyAgICBWZWN0
b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CiAKICAgICBib29sIHVzZUJvdW5kaW5nUmVjdEFuZFBh
aW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgPSBkYXRhLm9wdGlvbnMgJiBUZXh0SW5kaWNh
dG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdl
czsKICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJh
bmdlcyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChyYW5nZSkpIHsKLSAgICAgICAgYXV0
byBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IG1ha2VSZWZQdHIocmFuZ2UuY29tbW9uQW5jZXN0
b3JDb250YWluZXIoKSk7Ci0gICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChhdXRvKiBj
b250YWluZXJSZW5kZXJlciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNv
bnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lciktPnJlbmRlcmVyKCkpIHsKICAgICAgICAgICAg
IGRhdGEub3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50OwogICAg
ICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWluZXJSZW5kZXJlci0+YWJzb2x1dGVCb3Vu
ZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KQEAgLTMzMywxNSArMzA5LDE1IEBAIHN0YXRpYyBi
b29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBm
cmFtZSwgY29uc3QgUmFuCiAgICAgICAgIGRhdGEub3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0
aW9uUGFpbnRBbGxDb250ZW50OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgZWxzZSBp
ZiAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9wdGlvblVzZVNlbGVjdGlvblJlY3RGb3JT
aXppbmcpCi0gICAgICAgIGdldFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodGV4dFJlY3RzLCByYW5n
ZSk7CisgICAgICAgIHRleHRSZWN0cyA9IHNlbGVjdGlvblJlY3RzKHJhbmdlKTsKICNlbmRpZgog
ICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8SW50UmVjdD4gYWJzb2x1dGVUZXh0UmVjdHM7Ci0g
ICAgICAgIHJhbmdlLmFic29sdXRlVGV4dFJlY3RzKGFic29sdXRlVGV4dFJlY3RzLCB0ZXh0UmVj
dEhlaWdodCA9PSBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6U2VsZWN0aW9u
SGVpZ2h0LCBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3BlY3RDbGlwcGluZyk7Ci0K
LSAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYWJzb2x1dGVUZXh0UmVj
dHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZWN0IDogYWJzb2x1dGVUZXh0UmVjdHMp
Ci0gICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2VkQXBwZW5kKHJlY3QpOworICAgICAgICBh
dXRvIHRleHRSZWN0SGVpZ2h0ID0gKGRhdGEub3B0aW9ucyAmIFRleHRJbmRpY2F0b3JPcHRpb25U
aWdodGx5Rml0Q29udGVudCkgPyBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6
VGV4dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rp
b25IZWlnaHQ7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBpbnRSZWN0czsKKyAgICAgICAgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVUZXh0UmVjdHMoaW50UmVjdHMsIHRleHRSZWN0
SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25I
ZWlnaHQsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6UmVzcGVjdENsaXBwaW5nKTsKKyAg
ICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoaW50UmVjdHMuc2l6ZSgpKTsK
KyAgICAgICAgZm9yIChhdXRvJiBpbnRSZWN0IDogaW50UmVjdHMpCisgICAgICAgICAgICB0ZXh0
UmVjdHMudW5jaGVja2VkQXBwZW5kKGludFJlY3QpOwogICAgIH0KIAogICAgIGlmICh0ZXh0UmVj
dHMuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuaAppbmRleCA2ZjMwODg0
ZmMyODc5N2YxODg3OGY2OTFhMTg5ZTk1ODRlYzZmOWY4Li40MTE3M2FmZDk3ODU2MDEyY2FjYzlj
N2EwNzdhODY5YjUyNDQxMDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuaApAQCAt
MzQsNyArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZyYW1lOwogY2xhc3Mg
R3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmFuZ2U7CisKK3N0cnVjdCBTaW1wbGVSYW5nZTsKIAog
Ly8gRklYTUU6IE1vdmUgUHJlc2VudGF0aW9uVHJhbnNpdGlvbiB0byBUZXh0SW5kaWNhdG9yV2lu
ZG93LCBiZWNhdXNlIGl0J3MgYWJvdXQgcHJlc2VudGF0aW9uLgogZW51bSBjbGFzcyBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiA6IHVpbnQ4X3QgewpAQCAtMTIzLDcgKzEyNCw3
IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8VGV4dEluZGljYXRv
cj4gY3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJik7CiAgICAgV0VCQ09SRV9FWFBPUlQg
c3RhdGljIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoU2VsZWN0aW9uSW5GcmFtZShG
cmFtZSYsIFRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbiA9IEZsb2F0U2l6ZShkZWZhdWx0SG9yaXpvbnRhbE1h
cmdpbiwgZGVmYXVsdFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoUmFuZ2UoY29uc3QgUmFuZ2UmLCBUZXh0
SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZs
b2F0U2l6ZSBtYXJnaW4gPSBGbG9hdFNpemUoZGVmYXVsdEhvcml6b250YWxNYXJnaW4sIGRlZmF1
bHRWZXJ0aWNhbE1hcmdpbikpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8VGV4
dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVGV4dEluZGlj
YXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNp
emUgbWFyZ2luID0gRmxvYXRTaXplKGRlZmF1bHRIb3Jpem9udGFsTWFyZ2luLCBkZWZhdWx0VmVy
dGljYWxNYXJnaW4pKTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIH5UZXh0SW5kaWNhdG9yKCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaAppbmRleCBmNGU0YjVlZTI4OTIxN2RmY2FhMWIwZGYzMmRkMjAzNDNmZjA5MThlLi5mNTA4
MmZkZjVjZDExYTA0MTQ0ZjkwMDUyN2U3ZWZmNTVmNTU2YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oCkBAIC01NSwxNCAr
NTUsMTQgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBIaWdobGlnaHQgOiBwdWJsaWMgUmVmQ291bnRl
ZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5ZXJDbGllbnQgewogICAgICAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOwogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiwgUmVmPFJhbmdlPiYmKTsKLSAgICAgICAg
c3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiwgUmVmPFJhbmdlPiYm
KTsKKyAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiYmLCBTaW1w
bGVSYW5nZSYmKTsKKyAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclRlbGVw
aG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxp
Z2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKICAgICAgICAgfkhpZ2hsaWdodCgpOwogCiAgICAg
ICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgICAgIERESGlnaGxpZ2h0UmVmIGRkSGlnaGxp
Z2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5nZXQoKTsgfQotICAgICAgICBSYW5n
ZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdldCgpOyB9CisgICAgICAgIGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2U7IH0KICAgICAgICAg
R3JhcGhpY3NMYXllciYgbGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX2dyYXBoaWNzTGF5ZXIuZ2V0
KCk7IH0KIAogICAgICAgICBlbnVtIHsKQEAgLTc4LDcgKzc4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJlZik7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFR5cGUsIFJldGFp
blB0cjxEREhpZ2hsaWdodFJlZj4sIFJlZjxSYW5nZT4mJik7CisgICAgICAgIEhpZ2hsaWdodChT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVm
PiYmLCBTaW1wbGVSYW5nZSYmKTsKIAogICAgICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50CiAg
ICAgICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgb3Zl
cnJpZGU7CkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlciogbV9jb250cm9sbGVyOwogICAgICAgICBSZXRhaW5QdHI8RERIaWdobGln
aHRSZWY+IG1fZGRIaWdobGlnaHQ7Ci0gICAgICAgIFJlZjxSYW5nZT4gbV9yYW5nZTsKKyAgICAg
ICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKICAgICAgICAgUmVmPEdyYXBoaWNzTGF5ZXI+IG1fZ3Jh
cGhpY3NMYXllcjsKICAgICAgICAgVHlwZSBtX3R5cGU7CiAgICAgfTsKQEAgLTEyNiw5ICsxMjYs
OSBAQCBwcml2YXRlOgogICAgIFNlY29uZHMgcmVtYWluaW5nVGltZVVudGlsSGlnaGxpZ2h0U2hv
dWxkQmVTaG93bihIaWdobGlnaHQqKSBjb25zdDsKICAgICB2b2lkIGRldGVybWluZUFjdGl2ZUhp
Z2hsaWdodFRpbWVyRmlyZWQoKTsKIAotICAgIHN0YXRpYyBib29sIGhpZ2hsaWdodHNBcmVFcXVp
dmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGlnaGxpZ2h0KiBiKTsKKyAgICBzdGF0
aWMgYm9vbCBoaWdobGlnaHRzQXJlRXF1aXZhbGVudChjb25zdCBIaWdobGlnaHQqLCBjb25zdCBI
aWdobGlnaHQqKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiB0ZWxlcGhvbmVOdW1iZXJS
YW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHRlbGVwaG9u
ZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOwogCiAgICAgdm9pZCBkaWRDcmVhdGVIaWdo
bGlnaHQoSGlnaGxpZ2h0Kik7CiAgICAgdm9pZCB3aWxsRGVzdHJveUhpZ2hsaWdodChIaWdobGln
aHQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCmluZGV4IGNkY2JhMmVkM2IwYWY0ZTMyZjc2MDQzNzk3NmE4ZTA0YzRiODNl
ZmMuLjJlZmM0MWUzZDQyNzMyNjU5MjdhZGU1YjhiYmE5NmE3NzEyMzY5ODUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQpA
QCAtNTUsMTcgKzU1LDE3IEBAIGNvbnN0IGZsb2F0IGhpZ2hsaWdodEZhZGVBbmltYXRpb25EdXJh
dGlvbiA9IDAuMzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGln
aHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9s
bGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBSZWY8UmFuZ2U+JiYg
cmFuZ2UpCitSZWY8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+
JiYgZGRIaWdobGlnaHQsIFNpbXBsZVJhbmdlJiYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSwg
ZGRIaWdobGlnaHQsIFdURk1vdmUocmFuZ2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhpZ2hsaWdodDo6U2VsZWN0aW9uVHlwZSwgV1RGTW92ZShk
ZEhpZ2hsaWdodCksIFdURk1vdmUocmFuZ2UpKSk7CiB9CiAKLVJlZjxTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdo
dDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNv
bnRyb2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQsIFJlZjxSYW5n
ZT4mJiByYW5nZSkKK1JlZjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVt
YmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFpblB0cjxEREhp
Z2hsaWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxlUmFuZ2UmJiByYW5nZSkKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29udHJvbGxlciwgSGlnaGxpZ2h0OjpUZWxl
cGhvbmVOdW1iZXJUeXBlLCBkZEhpZ2hsaWdodCwgV1RGTW92ZShyYW5nZSkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29udHJvbGxlciwgSGlnaGxpZ2h0OjpUZWxlcGhv
bmVOdW1iZXJUeXBlLCBXVEZNb3ZlKGRkSGlnaGxpZ2h0KSwgV1RGTW92ZShyYW5nZSkpKTsKIH0K
IAotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdobGlnaHQoU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBSZXRhaW5QdHI8RERI
aWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBSZWY8V2ViQ29yZTo6UmFuZ2U+JiYgcmFuZ2UpCitT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OkhpZ2hsaWdodChTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBUeXBlIHR5cGUsIFJldGFpblB0cjxEREhpZ2hs
aWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxlUmFuZ2UmJiByYW5nZSkKICAgICA6IG1fY29u
dHJvbGxlcigmY29udHJvbGxlcikKICAgICAsIG1fcmFuZ2UoV1RGTW92ZShyYW5nZSkpCiAgICAg
LCBtX2dyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3JlYXRlKGNvbnRyb2xsZXIucGFnZSgp
LmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0b3J5KCksICp0aGlzKSkKQEAgLTQ3
NCw3ICs0NzQsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OnJlbW92ZUFsbFBv
dGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0OjpUeQogCiB2b2lkIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdobGlnaHRzKCkKIHsKLSAgICBWZWN0
b3I8UmVmUHRyPFJhbmdlPj4gcGhvbmVOdW1iZXJSYW5nZXM7CisgICAgVmVjdG9yPFNpbXBsZVJh
bmdlPiBwaG9uZU51bWJlclJhbmdlczsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9ICZtYWluRnJh
bWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkKICAgICAg
ICAgcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kVmVjdG9yKGZyYW1lLT5lZGl0b3IoKS5kZXRlY3Rl
ZFRlbGVwaG9uZU51bWJlclJhbmdlcygpKTsKIApAQCAtNDkyLDI2ICs0OTIsMjUgQEAgdm9pZCBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0cygpCiAK
ICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcGhvbmVOdW1iZXJSYW5nZXMpIHsKICAgICAgICAgLy8g
RklYTUU6IFRoaXMgbWFrZXMgYSBiaWcgcmVjdCBpZiB0aGUgcmFuZ2UgZXh0ZW5kcyBmcm9tIHRo
ZSBlbmQgb2Ygb25lIGxpbmUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBuZXh0LiBIYW5kbGUgdGhhdCBj
YXNlIGJldHRlcj8KLSAgICAgICAgYXV0byByZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRC
b3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKnJhbmdlKSkpOwor
ICAgICAgICBhdXRvIHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMo
UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZSkpKTsKIAogICAgICAgICAvLyBD
b252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAg
Ly8gRklYTUU6IEl0J3MgYSBsaXR0bGUgY3JhenkgdG8gY2FsbCBjb250ZW50c1RvV2luZG93IGFu
ZCB0aGVuIHdpbmRvd1RvQ29udGVudHMgaW4gb3JkZXIgdG8gZ2V0IHRoZSByaWdodCBjb29yZGlu
YXRlIHNwYWNlLgogICAgICAgICAvLyBXZSBzaG91bGQgY29uc2lkZXIgYWRkaW5nIGNvbnZlcnNp
b24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdo
dCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCiAgICAgICAgIC8vIG5vdCBlcXVpdmFsZW50
IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9wQ29udGVudEluc2V0IG9yIGEgaGVh
ZGVyIGJhbm5lci4KLSAgICAgICAgYXV0byogdmlld0ZvclJhbmdlID0gcmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8qIHZpZXdGb3JSYW5nZSA9IHJhbmdlLnN0YXJ0
LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZpZXdGb3JSYW5nZSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy53
aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0
aW9uKCkpKSk7CiAKICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9IHJlY3Q7Ci0gICAgICAgIAogI2lm
IEhBVkUoRERfSElHSExJR0hUX0NSRUFURV9XSVRIX1NDQUxFKQotICAgICAgICBSZXRhaW5QdHI8
RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdp
dGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRyLCAm
Y2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdo
dFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cs
IFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUywgMCkpOworICAgICAgICBh
dXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlz
aWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBt
YWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdodFN0eWxlQnViYmxl
U3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3csIFlFUywgTlNXcml0
aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUywgMCkpOwogI2Vsc2UKLSAgICAgICAgUmV0YWlu
UHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVh
dGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsICZj
Z1JlY3QsIDEsIG1haW5GcmFtZVZpZXcudmlzaWJsZUNvbnRlbnRSZWN0KCksIERESGlnaGxpZ2h0
U3R5bGVCdWJibGVTdGFuZGFyZCB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdywg
WUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CisgICAgICAgIGF1dG8g
ZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxl
UmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVW
aWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQg
fCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0
aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAgICAgIG5ld1BvdGVudGlhbEhpZ2hs
aWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKCp0aGlzLCBkZEhp
Z2hsaWdodCwgcmFuZ2UucmVsZWFzZU5vbk51bGwoKSkpOworICAgICAgICBuZXdQb3RlbnRpYWxI
aWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcigqdGhpcywg
V1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUocmFuZ2UpKSk7CiAgICAgfQogCiAgICAgcmVw
bGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZhbGVudEhpZ2hsaWdodHMobmV3UG90
ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKTsKQEAgLTU0
NCwxNyArNTQzLDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRTZWxl
Y3Rpb25IaWdobGlnaHQoKQogICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxl
Y3Rpb25SZWN0cykgewogICAgICAgICAgICAgSW50UmVjdCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJ
bnRSZWN0KHJlY3QpOwogICAgICAgICAgICAgY3VycmVudFJlY3Quc2V0TG9jYXRpb24obWFpbkZy
YW1lVmlldy0+d2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3co
Y3VycmVudFJlY3QubG9jYXRpb24oKSkpKTsKLSAgICAgICAgICAgIGNnUmVjdHMuYXBwZW5kKChD
R1JlY3QpY3VycmVudFJlY3QpOworICAgICAgICAgICAgY2dSZWN0cy5hcHBlbmQoY3VycmVudFJl
Y3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjZ1JlY3RzLmlzRW1wdHkoKSkgewogICAg
ICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZyYW1lVmlldy0+dmlzaWJsZUNvbnRl
bnRSZWN0KCk7CiAjaWYgSEFWRShERF9ISUdITElHSFRfQ1JFQVRFX1dJVEhfU0NBTEUpCi0gICAg
ICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihE
REhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERp
cmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxl
UmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRh
cmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dy
aXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTLCAwKSk7CisgICAgICAgICAgICBhdXRvIGRk
SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJl
Y3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNn
UmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBE
REhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9u
U2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTLCAwKSk7
CiAjZWxzZQotICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdo
dCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0
eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVnaW4oKSwgY2dSZWN0cy5zaXplKCks
IHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5
bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGlnaGxpZ2h0U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZ
RVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKKyAgICAgICAgICAgIGF1
dG8gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNp
YmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNn
UmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBE
REhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9u
U2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7CiAj
ZW5kaWYKLSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6
Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdodCwgY3JlYXRlTGl2ZVJhbmdlKCpz
ZWxlY3Rpb25SYW5nZSkpKTsKKyAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRk
KEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBXVEZNb3ZlKGRkSGlnaGxpZ2h0
KSwgV1RGTW92ZSgqc2VsZWN0aW9uUmFuZ2UpKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTYw
Nyw3ICs2MDYsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJs
YXlJZk5lZWRlZCgpCiAgICAgbV9wYWdlLnBhZ2VPdmVybGF5Q29udHJvbGxlcigpLmluc3RhbGxQ
YWdlT3ZlcmxheShXVEZNb3ZlKG92ZXJsYXkpLCBQYWdlT3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90
RmFkZSk7CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKQorVmVjdG9yPFNpbXBs
ZVJhbmdlPiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNG
b3JGb2N1c2VkRnJhbWUoKQogewogICAgIHJldHVybiBtX3BhZ2UuZm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCkuZWRpdG9yKCkuZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5n
ZXMoKTsKIH0KQEAgLTYxOCw3ICs2MTcsNyBAQCBib29sIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29ucwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIWEgfHwgIWIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gYS0+dHlwZSgpID09IGItPnR5cGUoKSAmJiBhcmVSYW5nZXNFcXVhbCgm
YS0+cmFuZ2UoKSwgJmItPnJhbmdlKCkpOworICAgIHJldHVybiBhLT50eXBlKCkgPT0gYi0+dHlw
ZSgpICYmIGEtPnJhbmdlKCkgPT0gYi0+cmFuZ2UoKTsKIH0KIAogU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBo
b25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhpZ2hsaWdodChIaWdobGlnaHQm
IHNlbGVjdGlvbkhpZ2hsaWdodCkKQEAgLTYzMSw3ICs2MzAsNyBAQCBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmZpbmRUZWxl
cGhvbmVOdQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIGZvciAoYXV0byYgaGlnaGxp
Z2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAgICAgIGlmIChoaWdobGlnaHQtPnR5
cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5cGUgJiYgaGlnaGxpZ2h0LT5yYW5n
ZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSkKKyAgICAgICAg
aWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSAm
JiBjcmVhdGVMaXZlUmFuZ2UoaGlnaGxpZ2h0LT5yYW5nZSgpKS0+Y29udGFpbnMoY3JlYXRlTGl2
ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodC5n
ZXQoKTsKICAgICB9CiAKQEAgLTc4NywxMSArNzg2LDExIEBAIHZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2soY29uc3QgSW50UG9pbnQmIGNsaWNrUG9pbnQsIEhpZ2hs
aWdoCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVkVGVsZXBob25lTnVtYmVyczsKICAg
ICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJlc2VydmVDYXBhY2l0eSh0ZWxlcGhvbmVO
dW1iZXJSYW5nZXMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChhdXRvJiByYW5nZSA6IHRlbGVwaG9u
ZU51bWJlclJhbmdlcykKLSAgICAgICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5hcHBl
bmQocmFuZ2UtPnRleHQoKSk7CisgICAgICAgICAgICBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMu
YXBwZW5kKHBsYWluVGV4dChyYW5nZSkpOwogCiAgICAgICAgIG1fcGFnZS5jaHJvbWUoKS5jbGll
bnQoKS5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sobV9wYWdlLmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLCBzZWxlY3RlZFRlbGVwaG9uZU51bWJl
cnMsIHdpbmRvd1BvaW50KTsKICAgICB9IGVsc2UgaWYgKGhpZ2hsaWdodC50eXBlKCkgPT0gSGln
aGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKQotICAgICAgICBtX3BhZ2UuY2hyb21lKCkuY2xp
ZW50KCkuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGlnaGxpZ2h0LnJhbmdlKCkudGV4dCgp
LCB3aW5kb3dQb2ludCk7CisgICAgICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5oYW5kbGVU
ZWxlcGhvbmVOdW1iZXJDbGljayhwbGFpblRleHQoaGlnaGxpZ2h0LnJhbmdlKCkpLCB3aW5kb3dQ
b2ludCk7CiB9CiAKIEZyYW1lJiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjptYWluRnJhbWUo
KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFn
ZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5k
ZXggNTAyNzk5MGNlNTVlNDYxYjJkZDgyYjljMzI5ZTlkOWEzMmY4MGU5Yi4uMjFmNjg4NGNjNjU5
MDMyN2Y3YTNhZjQ2ZWY3ZjE2NTY1ZDgyZGQ3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC00MCw2ICs0MCw3IEBACiAjaW1wb3J0ICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQg
IlNpbXBsZVJhbmdlLmgiCiAjaW1wb3J0ICJTdHJpbmdUcnVuY2F0b3IuaCIKICNpbXBvcnQgIlRl
eHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIlRleHRSdW4uaCIKQEAgLTEzNSw4ICsxMzYsOCBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwg
VVJMJiB1cmwsIGNvbnN0IFN0cmluZwogCiAgICAgQ0dSZWN0IGltYWdlUmVjdCA9IENHUmVjdE1h
a2UoMCwgMCwgdGV4dFdpZHRoICsgMiAqIGRyYWdJbWFnZVBhZGRpbmcsIHRleHRIZWlnaHQgKyAy
ICogZHJhZ0ltYWdlUGFkZGluZyk7CiAKLSAgICBSZXRhaW5QdHI8VUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJl
ckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5zaXplXSk7Ci0gICAgVUlJbWFnZSAq
aW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VS
ZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgeworICAgIGF1dG8gcmVuZGVyZXIgPSBh
ZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRX
aXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOworICAgIGF1dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1h
Z2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJD
b250ZXh0KSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4
dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWln
aHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKQEAgLTE0
Niw4ICsxNDcsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhFbGVtZW50
JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZwogICAgICAgICAgICAgdXJsRm9u
dENhc2NhZGUuZ2V0KCkuZHJhd1RleHQoY29udGV4dCwgVGV4dFJ1bih0cnVuY2F0ZWRCb3R0b21T
dHJpbmcpLCBGbG9hdFBvaW50KGRyYWdJbWFnZVBhZGRpbmcsIDQwICsgZHJhZ0ltYWdlUGFkZGlu
ZykpOwogICAgIH1dOwogCi0gICAgYXV0byBsaW5rUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobGlu
a0VsZW1lbnQpOwotICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLCBkZWZhdWx0TGlua0luZGljYXRvck9wdGlvbnMsIFRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBGbG9hdFNpemUoKSkpCisg
ICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5n
ZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobGlua0VsZW1lbnQpLCBkZWZhdWx0TGlu
a0luZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpO
b25lLCBGbG9hdFNpemUoKSkpCiAgICAgICAgIGluZGljYXRvckRhdGEgPSB0ZXh0SW5kaWNhdG9y
LT5kYXRhKCk7CiAKICAgICByZXR1cm4gaW1hZ2UuQ0dJbWFnZTsKQEAgLTE5MSwxNyArMTkxLDE1
IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1l
LCBUZXh0SW5kaWNhdG9yRGF0YSYgaW5kaWNhCiAgICAgICAgIGltYWdlUmVjdC5zY2FsZSgxIC8g
cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKIAotICAgIFJldGFpblB0cjxVSUdyYXBoaWNz
SW1hZ2VSZW5kZXJlcj4gcmVuZGVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0pOwotICAg
IFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlvbnM6XihV
SUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgeworICAgIGF1
dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJ
bnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZSgpXSk7CisgICAgcmV0dXJuIFty
ZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0
ICpyZW5kZXJlckNvbnRleHQpIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQocmVu
ZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29udGV4dCBm
bGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFuZCBzdWdnZXN0cyB0aGF0IHNvbWV3
aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAgIC8vIGRyYWcgaW5pdGlhdGlvbiBmbG93
LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBoaWNzIGNvbnRleHQuCiAgICAgICAgIGNv
bnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWlnaHQoKSk7CiAgICAgICAgIGNvbnRleHQu
c2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKmltYWdlLCBpbWFn
ZVJlY3QpOwotICAgIH1dOwotCi0gICAgcmV0dXJuIGZpbmFsSW1hZ2UuQ0dJbWFnZTsKKyAgICB9
XS5DR0ltYWdlOwogfQogCiBEcmFnSW1hZ2VSZWYgZGlzc29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9u
KERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmggYi9Tb3VyY2UvV2Vi
S2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmgKaW5kZXgg
M2U4ZjAyZTU3NDNkOGE0OTM0MDM3MDk3NzZhZTQ5ZDcwMjRjMWRlNi4uNGI4YzVjNTkzZWRiNTE3
Zjk3YjFhNTA2N2M5NjAyZjBjNTA5NzZmNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFy
ZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0RhdGFEZXRlY3RvclR5cGVzSW50ZXJuYWwuaApAQCAt
MzEsMjcgKzMxLDIxIEBACiAKIHN0YXRpYyBpbmxpbmUgV2ViQ29yZTo6RGF0YURldGVjdG9yVHlw
ZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDY0X3QgdHlwZXMpCiB7Ci0gICAgaWYgKHN0
YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5
cGVOb25lKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZU5vbmU7Ci0g
ICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5cGVzKSA9PSBXS0RhdGFE
ZXRlY3RvclR5cGVBbGwpCi0gICAgICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBl
QWxsOwotCi0gICAgdWludDMyX3QgdmFsdWUgPSBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlTm9u
ZTsKKyAgICB1aW50MzJfdCB2YWx1ZSA9IDA7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0
b3JUeXBlUGhvbmVOdW1iZXIpCi0gICAgICAgIHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRlY3Rv
clR5cGVQaG9uZU51bWJlcjsKKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+
KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpQaG9uZU51bWJlcik7CiAgICAgaWYgKHR5cGVz
ICYgV0tEYXRhRGV0ZWN0b3JUeXBlTGluaykKLSAgICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0
YURldGVjdG9yVHlwZUxpbms7CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90
PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6TGluayk7CiAgICAgaWYgKHR5cGVzICYgV0tE
YXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykKLSAgICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURl
dGVjdG9yVHlwZUFkZHJlc3M7CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90
PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6QWRkcmVzcyk7CiAgICAgaWYgKHR5cGVzICYg
V0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkKLSAgICAgICAgdmFsdWUgfD0gV2ViQ29y
ZTo6RGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQ7CisgICAgICAgIHZhbHVlIHw9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6Q2FsZW5kYXJFdmVu
dCk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlVHJhY2tpbmdOdW1iZXIpCi0g
ICAgICAgIHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlcjsK
KyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRl
Y3RvclR5cGVzOjpUcmFja2luZ051bWJlcik7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0
b3JUeXBlRmxpZ2h0TnVtYmVyKQotICAgICAgICB2YWx1ZSB8PSBXZWJDb3JlOjpEYXRhRGV0ZWN0
b3JUeXBlRmxpZ2h0TnVtYmVyOworICAgICAgICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50MzJf
dD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM6OkZsaWdodE51bWJlcik7CiAgICAgaWYgKHR5
cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTG9va3VwU3VnZ2VzdGlvbikKLSAgICAgICAgdmFsdWUg
fD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rpb247Ci0KKyAgICAgICAg
dmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVz
OjpMb29rdXBTdWdnZXN0aW9uKTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0
YURldGVjdG9yVHlwZXM+KHZhbHVlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5n
ZUhhbmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Q29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUubW0KaW5kZXggYzhkZTY4ODkxOTMz
ZjRkOGVhNjY1ZWU1MmJhMjIyZGQ0ZTJkMzFiNC4uMDc2NzZhMGUzNjY3YzFiNzU4Mjg0MzQyYjZm
YmRmMzhhOWUxNjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2Vi
UHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCkBAIC02MywxNSArNjMsMTYgQEAgLSAoTlNTdHJp
bmcgKil0ZXh0CiB9CiAKICNpZiBUQVJHRVRfT1NfSVBIT05FCisKIC0gKE5TQXJyYXkgKilkZXRl
Y3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVzKXR5cGVzIGNvbnRleHQ6KE5TRGlj
dGlvbmFyeSAqKWNvbnRleHQKIHsKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgUmVm
UHRyPFdlYkNvcmU6OlJhbmdlPiBjb3JlUmFuZ2UgPSAmX3JhbmdlSGFuZGxlLT5jb3JlUmFuZ2Uo
KTsKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFu
Z2UoY29yZVJhbmdlLCBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyksIGNvbnRleHQpOwor
ICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShf
cmFuZ2VIYW5kbGUtPmNvcmVSYW5nZSgpLCBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyks
IGNvbnRleHQpOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwogI2VuZGlmCiB9CisKICNlbmRpZgog
CiAtIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUmKV9yYW5nZUhhbmRsZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRleCBiMGU2NTIyZjZmMTczZDhiOGVjZTk0
N2ZiM2UwOGY0MDAyN2Y4YTU5Li5lMTYwY2VhNjAxMTMwMzAxODQzZmJkMDJlMWUzYmM5MTJjOWE2
ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2Vz
dHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcApAQCAtMTU2LDEzICsxNTYs
MTIgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91YmxlPj4gVmlld0dlc3R1cmVHZW9t
ZXRyeUNvbGxlY3Rvcjo6Y29tcHV0ZVRleHRMZWcKIAogICAgIGRvY3VtZW50LT51cGRhdGVMYXlv
dXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAgIGF1dG8gZG9jdW1lbnRSYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCB7eyBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCks
IFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIH19LCB7eyBkb2N1bWVudC0+ZG9jdW1l
bnRFbGVtZW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IgfX0pOwogICAgIEhh
c2hTZXQ8Tm9kZSo+IGFsbFRleHROb2RlczsKICAgICBIYXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25l
ZD4gZm9udFNpemVUb0NvdW50TWFwOwogICAgIHVuc2lnbmVkIG51bWJlck9mSXRlcmF0aW9ucyA9
IDA7CiAgICAgdW5zaWduZWQgdG90YWxTYW1wbGVkVGV4dExlbmd0aCA9IDA7CiAKLSAgICBmb3Ig
KFRleHRJdGVyYXRvciBkb2N1bWVudFRleHRJdGVyYXRvciB7IGRvY3VtZW50UmFuZ2UuZ2V0KCks
IFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyB9OyAhZG9jdW1lbnRUZXh0SXRlcmF0b3Iu
YXRFbmQoKTsgZG9jdW1lbnRUZXh0SXRlcmF0b3IuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0
SXRlcmF0b3IgZG9jdW1lbnRUZXh0SXRlcmF0b3IgeyBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKmRvY3VtZW50KSwgVGV4dEl0ZXJhdG9yRW50ZXJzVGV4dENvbnRyb2xzIH07ICFkb2N1
bWVudFRleHRJdGVyYXRvci5hdEVuZCgpOyBkb2N1bWVudFRleHRJdGVyYXRvci5hZHZhbmNlKCkp
IHsKICAgICAgICAgaWYgKCsrbnVtYmVyT2ZJdGVyYXRpb25zID49IG1heGltdW1OdW1iZXJPZlRl
eHRSdW5zVG9Db25zaWRlcikKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDhkNzBiOTc0ZDc5YTM5NmM5NmJl
ODU0OWZlOTQ3YjkzODQzZDlkNGMuLjQ0M2VlNTYxNTNlNzdhYTU1NTRlZTNmMWI2MTdhZjczZGVi
YjBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
CkBAIC0zNzMxLDkgKzM3MzEsNyBAQCB2b2lkIFdlYlBhZ2U6OmRldGVjdERhdGFJbkFsbEZyYW1l
cyh1aW50NjRfdCB0eXBlcywgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChjb25zdAogICAgICAgICBh
dXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihmcmFtZS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGlm
ICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQsIFBvc2l0aW9uIHsgZG9jdW1lbnQu
Z2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hpbGRyZW4gfSwgUG9zaXRpb24geyBk
b2N1bWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNBZnRlckNoaWxkcmVuIH0pOwotICAg
ICAgICBmcmFtZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdHMoRGF0YURldGVjdGlvbjo6ZGV0ZWN0
Q29udGVudEluUmFuZ2UocmFuZ2UsIGRhdGFEZXRlY3RvclR5cGVzLCBtX2RhdGFEZXRlY3Rpb25D
b250ZXh0LmdldCgpKSk7CisgICAgICAgIGZyYW1lLT5zZXREYXRhRGV0ZWN0aW9uUmVzdWx0cyhE
YXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKmRvY3VtZW50KSwgZGF0YURldGVjdG9yVHlwZXMsIG1fZGF0YURldGVjdGlvbkNv
bnRleHQuZ2V0KCkpKTsKICAgICB9CiAgICAgY29tcGxldGlvbkhhbmRsZXIoeyBtX3BhZ2UtPm1h
aW5GcmFtZSgpLmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMDBjNDc2OTVkZTI4NmUzNjNiMzBiMzRh
ODkyN2NlNmJhN2RlODk0OS4uNmIzYTU4MDAyYjFlZDFmZDcwZjU3NGY5ZGY0YjY3NWMzNWRiOTdi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTI5
LDEwICsxMjksNiBAQCB0eXBlZGVmIHN0cnVjdCBfQXRrT2JqZWN0IEF0a09iamVjdDsKICNpbmNs
dWRlIDxXZWJDb3JlL1BsYXRmb3JtVG91Y2hFdmVudC5oPgogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
REFUQV9ERVRFQ1RJT04pCi0jaW5jbHVkZSA8V2ViQ29yZS9EYXRhRGV0ZWN0aW9uLmg+Ci0jZW5k
aWYKLQogI2lmIEVOQUJMRShNQUNfR0VTVFVSRV9FVkVOVFMpCiAjaW5jbHVkZSA8V2ViS2l0QWRk
aXRpb25zL1BsYXRmb3JtR2VzdHVyZUV2ZW50TWFjLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggOWJkNzMx
ZTIyMmMwOTM2OTdiYjE4MzhlMTg2NTYyOGI5OGYyMGE5ZC4uMWYxYjM0NDk2NGUxMjU4NDZlYjM5
YTQwNWY4OTBiMWU2MTE3MTk5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg1OCw3ICs4NTgsNyBAQCB2b2lkIFdlYlBh
Z2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9h
dFBvaW50IGxvY2F0aQogICAgIFVSTCBhYnNvbHV0ZUxpbmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFi
c29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVSTEVsZW1lbnQgPSBoaXRUZXN0UmVzdWx0
LlVSTEVsZW1lbnQoKTsKICAgICBpZiAoIWFic29sdXRlTGlua1VSTC5pc0VtcHR5KCkgJiYgVVJM
RWxlbWVudCkKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmxpbmtUZXh0SW5kaWNhdG9y
ID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlT2ZDb250ZW50cygqVVJMRWxl
bWVudCksIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRl
bnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
RmFkZUluKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmxpbmtUZXh0SW5kaWNhdG9y
ID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cygqVVJMRWxlbWVudCksIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RB
bmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKIAogICAgIGF1dG8gbG9va3VwUmVzdWx0ID0gbG9va3Vw
VGV4dEF0TG9jYXRpb24obG9jYXRpb25JblZpZXdDb29yZGluYXRlcyk7CiAgICAgaWYgKGF1dG8q
IGxvb2t1cFJhbmdlID0gc3RkOjpnZXQ8UmVmUHRyPFJhbmdlPj4obG9va3VwUmVzdWx0KS5nZXQo
KSkgewpAQCAtODk2LDEyICs4OTYsMTEgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRl
QWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKIAogICAg
IC8vIEZJWE1FOiBBdm9pZCBzY2FubmluZyBpZiB3ZSB3aWxsIGp1c3QgdGhyb3cgYXdheSB0aGUg
cmVzdWx0IChlLmcuIHdlJ3JlIG92ZXIgYSBsaW5rKS4KICAgICBpZiAoIXBhZ2VPdmVybGF5RGlk
T3ZlcnJpZGVEYXRhRGV0ZWN0b3JzICYmIGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCkgJiYgKGhp
dFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUoKSB8fCBoaXRUZXN0UmVzdWx0Lmlz
T3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkpIHsKLSAgICAgICAgRmxvYXRSZWN0
IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBSZWZQdHI8UmFuZ2U+IGRldGVjdGVk
RGF0YVJhbmdlOwotICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQWN0
aW9uQ29udGV4dCA9IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0
KGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5n
ZSk7Ci0gICAgICAgIGlmIChpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9u
Q29udGV4dCAmJiBkZXRlY3RlZERhdGFSYW5nZSkgewotICAgICAgICAgICAgaW1tZWRpYXRlQWN0
aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdC
b3g7Ci0gICAgICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dElu
ZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqZGV0ZWN0ZWREYXRhUmFu
Z2UsIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRG
b3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFk
ZUluKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRl
bUFyb3VuZEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdCkpIHsKKyAgICAgICAgICAgIGltbWVk
aWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0ID0gV1RGTW92ZShyZXN1
bHQtPmFjdGlvbkNvbnRleHQpOworICAgICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gcmVzdWx0LT5ib3VuZGluZ0JveDsKKyAgICAgICAgICAg
IGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJlc3VsdC0+cmFuZ2UsCisgICAgICAgICAgICAgICAg
VGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNv
bXBsZXhSYW5nZXMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4p
OwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQppbmRleCBk
ZjBiNTIwOTExZmUxODVjYjkzOGZmMWY3Yzk5N2VhZmVhMjcwZjNmLi41ZjA2MGIwNTJkNmFlYWNk
YzYxMzg4NmY1YzljMzI3MDY1YTE1NTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0K
QEAgLTUyMywxMCArNTIzLDggQEAgLSAodm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJ
bWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgYXV0byYg
bm9kZSA9ICpjb3JlKHNlbGYpOwogCi0gICAgYXV0byByYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhu
b2RlKTsKLQogICAgIGNvbnN0IGZsb2F0IG1hcmdpbiA9IDQgLyBub2RlLmRvY3VtZW50KCkucGFn
ZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5k
aWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25UaWdodGx5
Rml0Q29udGVudCB8CisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhub2RlKSwgVGV4dElu
ZGljYXRvck9wdGlvblRpZ2h0bHlGaXRDb250ZW50IHwKICAgICAgICAgVGV4dEluZGljYXRvck9w
dGlvblJlc3BlY3RUZXh0Q29sb3IgfAogICAgICAgICBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRC
YWNrZ3JvdW5kcyB8CiAgICAgICAgIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RB
bmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzIHwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGll
bnQubW0KaW5kZXggODA2ZGEwYmZiMDdkYWU5Y2I3MzY0OGEyYWYwZmZmNGQyOTMzN2NjMC4uMjU2
ZTY4OTExYjc1OGYxMzU5OTU4MDIwOTFiZTAyZjczOGY3MzMxZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0K
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1l
bnVDbGllbnQubW0KQEAgLTE0OCw2ICsxNDgsNyBAQCBib29sIFdlYkNvbnRleHRNZW51Q2xpZW50
OjpjbGllbnRGbG9hdFJlY3RGb3JOb2RlKE5vZGUmIG5vZGUsIEZsb2F0UmVjdCYgcmVjdCkgYwog
fQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisKIHZvaWQgV2ViQ29udGV4dE1lbnVD
bGllbnQ6OnNoYXJpbmdTZXJ2aWNlUGlja2VyV2lsbEJlRGVzdHJveWVkKFdlYlNoYXJpbmdTZXJ2
aWNlUGlja2VyQ29udHJvbGxlciAmKQogewogICAgIG1fc2hhcmluZ1NlcnZpY2VQaWNrZXJDb250
cm9sbGVyID0gbmlsOwpAQCAtMTgzLDE1ICsxODQsMTUgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IFdl
YkNvbnRleHRNZW51Q2xpZW50OjpzY3JlZW5SZWN0Rm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlj
a2UKIAogUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRNZW51Q2xpZW50OjppbWFnZUZvckN1
cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0oV2ViU2hhcmluZ1NlcnZpY2VQaWNrZXJDb250
cm9sbGVyICYpCiB7Ci0gICAgUGFnZSogcGFnZSA9IFttX3dlYlZpZXcgcGFnZV07CisgICAgYXV0
byBwYWdlID0gW21fd2ViVmlldyBwYWdlXTsKICAgICBpZiAoIXBhZ2UpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBOb2RlKiBub2RlID0gcGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCku
Y29udGV4dCgpLmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vZGUoKTsKKyAgICBhdXRvIG5vZGUgPSBt
YWtlUmVmUHRyKHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLmNvbnRleHQoKS5oaXRUZXN0
UmVzdWx0KCkuaW5uZXJOb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS52aWV3KCk7
CisgICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKG5vZGUtPmRvY3VtZW50KCkudmlldygp
KTsKICAgICBpZiAoIWZyYW1lVmlldykgewogICAgICAgICAvLyBUaGlzIG1ldGhvZCBzaG91bGRu
J3QgYmUgY2FsbGVkIGluIGNhc2VzIHdoZXJlIHRoZSBjb250cm9sbGVkIG5vZGUgaXNuJ3QgaW4g
YSByZW5kZXJlZCB2aWV3LgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTIwMywx
NSArMjA0LDE0IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1h
Z2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25hcHNob3QsIGFuZCB3aWxsIGJlIHBh
aW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGluIGxpbmUgd2l0aCBGcmFtZVNuYXBz
aG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdl
QnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQp
OworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVu
ZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lVmll
dy0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBhdXRvIHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlvbihub2RlLCBQb3NpdGlvbjo6UG9z
aXRpb25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklz
QWZ0ZXJBbmNob3IpKTsKLSAgICBmcmFtZVZpZXctPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2V0U2Vs
ZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9O
b3RTZXRGb2N1cyk7CisgICAgYXV0byBvbGRTZWxlY3Rpb24gPSBmcmFtZVZpZXctPmZyYW1lKCku
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlv
bigpLnNldFNlbGVjdGlvbigqbWFrZVJhbmdlU2VsZWN0aW5nTm9kZSgqbm9kZSksIEZyYW1lU2Vs
ZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAotICAgIE9wdGlvblNldDxQYWludEJlaGF2aW9yPiBv
bGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWludEJlaGF2aW9yKCk7CisgICAgYXV0byBv
bGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWludEJlaGF2aW9yKCk7CiAgICAgZnJhbWVW
aWV3LT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6OlNlbGVjdGlvbk9ubHkpOwogCiAg
ICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC10b0Zsb2F0U2l6ZShyZWN0LmxvY2F0aW9u
KCkpKTsKQEAgLTIyMCwxMiArMjIwLDEzIEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0
TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtCiAgICAg
ZnJhbWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihvbGRTZWxlY3Rpb24p
OwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihvbGRQYWludEJlaGF2aW9yKTsKIAot
ICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZN
b3ZlKGJ1ZmZlcikpOworICAgIGF1dG8gaW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFn
ZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIGlmICghaW1hZ2UpCiAgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICByZXR1cm4gaW1hZ2UtPnNuYXBzaG90TlNJbWFnZSgpOwogfQorCiAjZW5kaWYKIAog
TlNNZW51ICpXZWJDb250ZXh0TWVudUNsaWVudDo6Y29udGV4dE1lbnVGb3JFdmVudChOU0V2ZW50
ICpldmVudCwgTlNWaWV3ICp2aWV3LCBib29sJiBpc1NlcnZpY2VzTWVudSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0
aW9uQ29udHJvbGxlci5tbQppbmRleCA4NTk2ODQ4OTVlY2MzNzBiMmJkYTA4YjAxMjk1MTZlYjY0
ODI2YWQwLi4zYzVlYzg1OThlY2U3NDI3ZjkxYjgwYWI1MDVkNGU1NDU0ODBhOTE3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00MTEsMzUgKzQxMSwzNyBAQCAtIChpZCA8TlNJ
bW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZv
ckRhdGFEZXRlY3RlZAogICAgIGlmICghRGF0YURldGVjdG9yc0xpYnJhcnkoKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZGV0ZWN0ZWREYXRhUmFu
Z2U7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAg
IFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHQ7CisgICAgT3B0aW9uYWw8
V2ViQ29yZTo6RGV0ZWN0ZWRJdGVtPiBkZXRlY3RlZEl0ZW07CiAKICAgICBpZiAoW1tfd2ViVmll
dyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKF93ZWJWaWV3OmFjdGlv
bkNvbnRleHRGb3JIaXRUZXN0UmVzdWx0OnJhbmdlOildKSB7Ci0gICAgICAgIFJldGFpblB0cjxX
ZWJFbGVtZW50RGljdGlvbmFyeT4gaGl0VGVzdERpY3Rpb25hcnkgPSBhZG9wdE5TKFtbV2ViRWxl
bWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVzdFJlc3VsdDpfaGl0VGVzdFJlc3Vs
dF0pOwotCiAgICAgICAgIERPTVJhbmdlICpjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2U7Ci0gICAg
ICAgIGFjdGlvbkNvbnRleHQgPSBbKGlkKVtfd2ViVmlldyBVSURlbGVnYXRlXSBfd2ViVmlldzpf
d2ViVmlldyBhY3Rpb25Db250ZXh0Rm9ySGl0VGVzdFJlc3VsdDpoaXRUZXN0RGljdGlvbmFyeS5n
ZXQoKSByYW5nZTomY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlXTsKLQotICAgICAgICBpZiAoYWN0
aW9uQ29udGV4dCAmJiBjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpCi0gICAgICAgICAgICBkZXRl
Y3RlZERhdGFSYW5nZSA9IGNvcmUoY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKTsKKyAgICAgICAg
YXV0byBhY3Rpb25Db250ZXh0ID0gWyhpZClbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gX3dlYlZpZXc6
X3dlYlZpZXcKKyAgICAgICAgICAgIGFjdGlvbkNvbnRleHRGb3JIaXRUZXN0UmVzdWx0OmFkb3B0
TlMoW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5pdFdpdGhIaXRUZXN0UmVzdWx0Ol9o
aXRUZXN0UmVzdWx0XSkuZ2V0KCkKKyAgICAgICAgICAgIHJhbmdlOiZjdXN0b21EYXRhRGV0ZWN0
b3JzUmFuZ2VdOworICAgICAgICBpZiAoYWN0aW9uQ29udGV4dCAmJiBjdXN0b21EYXRhRGV0ZWN0
b3JzUmFuZ2UpIHsKKyAgICAgICAgICAgIGRldGVjdGVkSXRlbSA9IHsgeworICAgICAgICAgICAg
ICAgIGFjdGlvbkNvbnRleHQsCisgICAgICAgICAgICAgICAgeyB9LCAvLyBGSVhNRTogU2VlbXMg
bGlrZSBhbiBlbXB0eSByZWN0IGlzbid0IHJlYWxseSBPSy4KKyAgICAgICAgICAgICAgICAqY29y
ZShjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpCisgICAgICAgICAgICB9IH07CisgICAgICAgIH0K
ICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2xpZW50IGRpZG4ndCBnaXZlIHVzIGFuIGFjdGlvbiBj
b250ZXh0LCB0cnkgdG8gc2NhbiBhcm91bmQgdGhlIGhpdCBwb2ludC4KLSAgICBpZiAoIWFjdGlv
bkNvbnRleHQgfHwgIWRldGVjdGVkRGF0YVJhbmdlKQotICAgICAgICBhY3Rpb25Db250ZXh0ID0g
V2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoX2hp
dFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7
CisgICAgaWYgKCFkZXRlY3RlZEl0ZW0pCisgICAgICAgIGRldGVjdGVkSXRlbSA9IFdlYkNvcmU6
OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVz
dWx0KTsKIAotICAgIGlmICghYWN0aW9uQ29udGV4dCB8fCAhZGV0ZWN0ZWREYXRhUmFuZ2UpCisg
ICAgaWYgKCFkZXRlY3RlZEl0ZW0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBbYWN0aW9u
Q29udGV4dCBzZXRBbHRNb2RlOllFU107Ci0gICAgW2FjdGlvbkNvbnRleHQgc2V0SW1tZWRpYXRl
OllFU107Ci0gICAgaWYgKCFbW2dldEREQWN0aW9uc01hbmFnZXJDbGFzcygpIHNoYXJlZE1hbmFn
ZXJdIGhhc0FjdGlvbnNGb3JSZXN1bHQ6W2FjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9u
Q29udGV4dDphY3Rpb25Db250ZXh0LmdldCgpXSkKKyAgICBbZGV0ZWN0ZWRJdGVtLT5hY3Rpb25D
b250ZXh0IHNldEFsdE1vZGU6WUVTXTsKKyAgICBbZGV0ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0
IHNldEltbWVkaWF0ZTpZRVNdOworICAgIGlmICghW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3Mo
KSBzaGFyZWRNYW5hZ2VyXSBoYXNBY3Rpb25zRm9yUmVzdWx0OltkZXRlY3RlZEl0ZW0tPmFjdGlv
bkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDpkZXRlY3RlZEl0ZW0tPmFjdGlvbkNv
bnRleHQuZ2V0KCldKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBpbmRpY2F0b3Ig
PSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmRldGVjdGVkRGF0YVJh
bmdlLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVsdCwgV2ViQ29yZTo6VGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CisgICAgYXV0byBpbmRpY2F0
b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJh
bmdlKGRldGVjdGVkSXRlbS0+cmFuZ2UpLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRGVm
YXVsdCwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJ
bik7CiAKLSAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBbYWN0aW9uQ29udGV4dCBjb250ZXh0
Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRlcmFjdGlvblN0YXJ0ZWRIYW5kbGVyOl4o
KSB7CisgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gW2RldGVjdGVkSXRlbS0+YWN0aW9uQ29u
dGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRlcmFjdGlvblN0YXJ0
ZWRIYW5kbGVyOl4oKSB7CiAgICAgfSBpbnRlcmFjdGlvbkNoYW5nZWRIYW5kbGVyOl4oKSB7CiAg
ICAgICAgIGlmIChpbmRpY2F0b3IpCiAgICAgICAgICAgICBbX3dlYlZpZXcgX3NldFRleHRJbmRp
Y2F0b3I6KmluZGljYXRvciB3aXRoTGlmZXRpbWU6V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRv
d0xpZmV0aW1lOjpQZXJtYW5lbnRdOwpAQCAtNDQ3LDcgKzQ0OSw3IEBAIC0gKGlkIDxOU0ltbWVk
aWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0
YURldGVjdGVkCiAgICAgICAgIFtfd2ViVmlldyBfY2xlYXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1h
dGlvbjpXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRl
T3V0XTsKICAgICB9XTsKIAotICAgIFtfY3VycmVudEFjdGlvbkNvbnRleHQgc2V0SGlnaGxpZ2h0
RnJhbWU6W193ZWJWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOmRldGVjdGVkRGF0YUJv
dW5kaW5nQm94XV07CisgICAgW19jdXJyZW50QWN0aW9uQ29udGV4dCBzZXRIaWdobGlnaHRGcmFt
ZTpbX3dlYlZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9TY3JlZW46ZGV0ZWN0ZWRJdGVtLT5ib3Vu
ZGluZ0JveF1dOwogCiAgICAgTlNBcnJheSAqbWVudUl0ZW1zID0gW1tnZXREREFjdGlvbnNNYW5h
Z2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRlbXNGb3JSZXN1bHQ6W19jdXJyZW50QWN0
aW9uQ29udGV4dCBtYWluUmVzdWx0XSBhY3Rpb25Db250ZXh0Ol9jdXJyZW50QWN0aW9uQ29udGV4
dC5nZXQoKV07CiAgICAgaWYgKG1lbnVJdGVtcy5jb3VudCAhPSAxKQpAQCAtNTM2LDcgKzUzOCw3
IEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8pX2RpY3Rpb25hcnlQb3B1cEluZm9G
b3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltCiAKICAgICBwb3B1cEluZm8uYXR0cmlidXRlZFN0
cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7CiAKLSAgICBpZiAoYXV0byB0ZXh0
SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRp
b24pKQorICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9wdGlvbnMsIHByZXNlbnRhdGlvblRy
YW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dEluZGljYXRvciA9IHRleHRJbmRpY2F0
b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZv
KGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397640</attachid>
            <date>2020-04-26 17:59:39 -0700</date>
            <delta_ts>2020-04-26 22:01:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211058-20200426175937.patch</filename>
            <type>text/plain</type>
            <size>118191</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRjNjIzNGFjMjA1NGIy
N2FmNzdkZTEzYTEwMTA1MzMxYjhhZWE5OC4uYzk5OTdkZjIzZWZiMDJhNDI2NTI5ZDU3ZGRiOWJj
NmQ5YjdlZTdkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNiBAQAorMjAyMC0wNC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OiBUaGlzIGZpbGUgbW9kaWZpZWQgaXRzZWxmIHdoZW4gSSBidWlsdC4KKyAgICAgICAgU29tZW9u
ZSBuZWVkcyB0byBjaGVjayBpbiB0aGUgcmVzdWx0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQgY29uc3QpOiBVc2UgU2ltcGxl
UmFuZ2UuCisKKyAgICAgICAgKiBkb20vQm91bmRhcnlQb2ludC5oOiBNb3ZlZCBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzIGhlcmUgc28gaXQKKyAgICAgICAgY2FuIGJlIHVzZWQg
bW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21tb25JbmNsdXNpdmVBbmNlc3Rvcik6IE1vdmVkIHRoZSBjb21tb25BbmNlc3RvckNvbnRh
aW5lciBmdW5jdGlvbgorICAgICAgICBoZXJlIGZyb20gUmFuZ2UsIGRlY2lkZWQgdG8gdXNlIHRo
ZSAiaW5jbHVzaXZlIGFuY2VzdG9yIiBuYW1pbmcgZnJvbSB0aGUKKyAgICAgICAgRE9NIHNwZWNp
ZmljYXRpb24sIGFuZCB1c2VkIFJlZlB0ciBmb3IgdGhlIHJlc3VsdCBzaW5jZSBpdCdzIHBhcnQg
b2Ygb3VyIG1vZGVybgorICAgICAgICBzYWZlciBkZXNpZ24gdG8gYWx3YXlzIHVzZSBzbWFydCBw
b2ludGVycyBmb3IgcmV0dXJuIHZhbHVlcy4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBBZGRlZCBj
b21tb25JbmNsdXNpdmVBbmNlc3Rvci4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21tb25TaGFkb3dJbmNsdWRpbmdBbmNlc3Rvcik6IENhbGwgY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjppc1BvaW50SW5SYW5nZSk6IENhbGwgY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29sbGVjdFNlbGVjdGlvblJlY3Rz
V2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
IGNvbnN0KTogQ2FsbCBjb21tb25JbmNsdXNpdmVBbmNlc3Rvci4KKworICAgICAgICAqIGRvbS9T
aW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKTogTW92ZWQgdG8gQm91bmRhcnlQb2ludC5oLgorCisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlv
bik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGxpdmUgcmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxp
ZWRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFm
dGVyQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bGlzdENvbnZlcnNpb25UeXBlRm9yU2VsZWN0aW9uKTogdXNlIGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOiBUYWtlIGEgU2ltcGxl
UmFuZ2UgYXJndW1lbnQuCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YWRkUmFuZ2VUb0tpbGxSaW5nKTogVGFrZSBhIFNpbXBsZVJhbmdlIGFy
Z3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVO
dW1iZXJzIGNvbnN0KTogTWFkZSB0aGlzIGNvbnN0IGFuZAorICAgICAgICB0d2Vha2VkIGNvZGlu
ZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJz
KTogTW92ZWQgdGhpcywgbWFkZSBpdCBhIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJl
bmFtZWQgZnJvbSBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzLCB1c2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRTZWxlY3Rpb24pOiBBZGRlZC4gRmFjdG9yZWQgb3V0
IHNvbWUgbG9naWMgZnJvbSB0aGUgZnVuY3Rpb24gYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVXNlIFNpbXBsZVJhbmdl
LiBSZW1vdmVkCisgICAgICAgIHNvbWUgdW5uZWNlc3NhcnkgY29kZSB0aGF0IHN1YnRyYWN0cyAx
IGFuZCB0aGVuIGFkZHMgMSBhZ2Fpbi4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOiBVcGRh
dGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpyZXBsYWNlKTogVXNlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTZWFy
Y2hSYW5nZSk6IFJldHVybiBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNlKTogVXNlIFNpbXBsZVJhbmdlLgor
CisgICAgICAgICogZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmg6IFVzZSBTaW1wbGVSYW5nZSBp
bnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURl
dGVjdGlvbi5oOiBVc2UgYSBzdHJ1Y3QsIERldGVjdGVkSXRlbSwgZm9yIHRoZSByZXR1cm4gdmFs
dWUKKyAgICAgICAgZnJvbSB0aGUgZGV0ZWN0aW9uIGZ1bmN0aW9ucy4gQWxzbyBjaGFuZ2VkIERh
dGFEZXRlY3RvclR5cGVzIHRvIGFuIGVudW0gY2xhc3Mgc28KKyAgICAgICAgaXQgY2FuIGJlIGZv
cndhcmQtZGVjbGFyZWQgaW5zdGVhZCBvZiBoYXZpbmcgdG8gaW5jbHVkZSB0aGlzIGhlYWRlci4K
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJD
b3JlOjpkZXRlY3RJdGVtKTogUmVuYW1lZCBmcm9tIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJh
bmdlLiBSZXR1cm4gdGhlCisgICAgICAgIERldGVjdGVkSXRlbSBzdHJ1Y3QsIHdpdGggYSBTaW1w
bGVSYW5nZSByYXRoZXIgdGhhbiBhbiBvdXQgYXJndW1lbnQgbGl2ZSByYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250YWlucyk6IEFkZGVkIGEgaGVscGVyIGZ1bmN0
aW9uIGZvciB0ZXN0aW5nIGJpdHMgaW4gdGhlCisgICAgICAgIERhdGFEZXRlY3RvclR5cGUgZW51
bS4gTGF0ZXIgd2UgY2FuIG1ha2UgdGhpcyBiZXR0ZXIgdXNpbmcgT3B0aW9uU2V0LgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KTogUmVmYWN0b3JlZCBhIGJp
dCwgdXBkYXRlZCBmb3IgdGhlIG5ldworICAgICAgICBEYXRhRGV0ZWN0b3JUeXBlcyBlbnVtIGNs
YXNzLCBhbmQgdG8gdXNlIENGRXF1YWwgaW5zdGVhZCBvZiBDRlN0cmluZ0NvbXBhcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6IFVwZGF0ZWQg
c2luY2UgY29udGV4dCBpcyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0
b3JNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3Rl
Ym9hcmQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRo
aXNGcmFtZSk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjp0YXJnZXROb2RlRm9yQ2xpY2tFdmVudCk6IFVzZSBjb21t
b25JbmNsdXNpdmVBbmNlc3Rvci4gQWxzbyB1cGRhdGVkCisgICAgICAgIHRvIHJldHVybiBhIFJl
ZlB0ci4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNl
RXZlbnQpOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdz
LnlhbWw6IENoYW5nZWQgdGhlIGRlZmF1bHQgZm9yIERhdGFEZXRlY3RvclR5cGVzIHRvIGJlIHRo
ZSBlbXB0eQorICAgICAgICBzdHJpbmcgcmF0aGVyIHRoYW4gYSBuYW1lZCBjb25zdGFudC4KKyAg
ICAgICAgKiBwYWdlL1NldHRpbmdzQmFzZS5oOiBGb3J3YXJkLWRlY2xhcmUgRGF0YURldGVjdG9y
VHlwZXMgaW5zdGVhZCBvZiBpbmNsdWRpbmcKKyAgICAgICAgdGhlIERhdGFEZXRlY3Rpb24uaCBo
ZWFkZXIuCisKKyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKTogVGFrZSBhIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbklu
RnJhbWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Omhhc05vbklubGluZU9yUmVwbGFjZWRF
bGVtZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9uUmVjdHMpOiBEaXR0
by4gQWxzbyByZW5hbWVkIGZyb20gZ2V0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OnN0eWxlQ29udGFpbnNDb21wbGV4QmFja2dyb3VuZCk6IFR3ZWFrZWQgaW1wbGVt
ZW50YXRpb24uCisgICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2Up
OiBUYWtlIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0ZUJvdW5kaW5n
UmVjdEZvclJhbmdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRCYWNrZ3Jv
dW5kQ29sb3JGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNPbmx5
V2hpdGVTcGFjZVRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVJbmRp
Y2F0b3IpOiBEaXR0by4KKyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuaDogVXBkYXRlZCBm
b3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5oOiBVc2UgU2ltcGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUKKyAgICAgICAgcmFuZ2Ug
Zm9yIGhpZ2hsaWdodHMuCisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJv
bGxlci5tbToKKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9y
VGVsZXBob25lTnVtYmVyKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OkhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdo
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJh
bWUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6
OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFp
bmluZ1NlbGVjdGlvbkhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2spOiBEaXR0by4KKworICAgICAgICAqIHBs
YXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFn
SW1hZ2VGb3JMaW5rKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yU2VsZWN0aW9uKTogVHdlYWtlZCBhIGJpdC4KKwogMjAyMC0wNC0yNiAgQWxl
eGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgSW50ZXJuYWxG
dW5jdGlvbjo6Y3JlYXRlU3ViY2xhc3NTdHJ1Y3R1cmUgc2hvdWxkIHVzZSBuZXdUYXJnZXQncyBn
bG9iYWxPYmplY3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZTJhM2ZhMWI2NmQzOWRiNWM1ODhlNDllNzI3Yjk4Y2Qz
ZTZlODBlZi4uOTIyM2YyYzQ5MzlmOGExMDZhOGQyMDQ1ZmQzODJkZDQ1NmJjYjgyYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyOSBAQAorMjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBs
ZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMgd2l0aCBT
aW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBTaGFyZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5hbC5oOgorICAg
ICAgICAoZnJvbVdLRGF0YURldGVjdG9yVHlwZXMpOiBVcGRhdGVkIHNpbmNlIERhdGFEZXRlY3Rv
clR5cGVzCisgICAgICAgIGlzIG5vdyBhbiBlbnVtIGNsYXNzLiBBbHNvIGdvdCByaWQgb2Ygc3Bl
Y2lhbCAibm9uZSIgYW5kICJhbGwiIHZhbHVlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tOgor
ICAgICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZSBkZXRlY3REYXRhV2l0aFR5
cGVzOmNvbnRleHQ6XSk6IFVwZGF0ZWQKKyAgICAgICAgc2luY2UgRGF0YURldGVjdGlvbiBub3cg
dGFrZXMgYSBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3
R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1
cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Y29tcHV0ZVRleHRMZWdpYmlsaXR5U2NhbGVzKToKKyAgICAg
ICAgVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKTog
RGl0dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBSZW1vdmVk
IHVubmVlZGVkIGluY2x1ZGUgb2YgRGF0YURldGVjdGlvbi5oLgorCisgICAgICAgICogV2ViUHJv
Y2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdl
OjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOiBVc2UgU2ltcGxlUmFu
Z2UuCisKIDIwMjAtMDQtMjYgIFBlbmcgTGl1ICA8cGVuZy5saXU2QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgdW51c2VkIGNsYXNzIFBsYXliYWNrU2Vzc2lvbkludGVyZmFjZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCmluZGV4IGU4N2M2NzEyMzE3NjFjYTQxMDliYzBlNzUxYTQ2YThl
MDg1Njk0OGQuLmI5NGIwZjYxYTdlNWUxZDVkYzYxZjdmZTBlNjI2ZWIxY2IxYTI4YWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01Ob2Rl
IGdldFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOiBVc2UgU2ltcGxlUmFuZ2UuCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAg
IChXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNr
ZXJJdGVtKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNv
bnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2Fu
aW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWRUZXh0XSk6CisgICAgICAgIFVwZGF0ZWQg
dG8gdXNlIERldGVjdGVkSXRlbSBhbmQgU2ltcGxlUmFuZ2UuCisgICAgICAgICgrW1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTppbkZyYW1l
OndpdGhMb29rdXBPcHRpb25zOmluZGljYXRvck9wdGlvbnM6dHJhbnNpdGlvbjpdKToKKyAgICAg
ICAgRGl0dG8uCisKIDIwMjAtMDQtMTEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFN0b3AgdXNpbmcgbGl2ZSByYW5nZXMgaW4gZnVuY3Rpb25zIHRoYXQgcmV0dXJu
IHJhbmdlIG9mIHRoZSBzZWxlY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2
ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy1pbnB1dC54Y2ZpbGVsaXN0CmluZGV4IDJkNGQxMjg1ZTg3MTBjYjU1ODdmYmIyZWVlZjhlNGMy
Y2Q2YzNlMDAuLmZkM2JhMDAxYzdjMTczY2M3ZjBiYjY0OTBkODU4OWI1ODQ5NTJiM2YgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0LnhjZmlsZWxpc3QKKysr
IGIvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdApAQCAtMTE4
MCwzICsxMTgwLDUgQEAgJChQUk9KRUNUX0RJUikveG1sL1hQYXRoUmVzdWx0LmlkbAogJChQUk9K
RUNUX0RJUikveG1sL1hTTFRQcm9jZXNzb3IuaWRsCiAkKFBST0pFQ1RfRElSKS94bWwveG1sYXR0
cnMuaW4KICQoUFJPSkVDVF9ESVIpL3htbC94bWxuc2F0dHJzLmluCitBcHBsZVBheVNldHVwLmlk
bAorQXBwbGVQYXlTZXR1cEZlYXR1cmUuaWRsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCBiMzQ3
ZDc5OGNjYmNlMWJiNmE5MDY4NTdmY2ExZTQzZGIxYzJkZjgzLi4wMmM3NTcwMGE4NWIzYzcyNTY2
OTc3YmEyZGJjMWUzYWY4MjkxNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTYzMywxMCAr
NjMzLDEwIEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVt
ZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50CiAgICAgICAgIC8vIElmIHBvc3NpYmxl
LCB1c2UgYSB0ZXh0IGl0ZXJhdG9yIHRvIGdldCB0aGUgdGV4dCwgc28gdGhhdCB3aGl0ZXNwYWNl
CiAgICAgICAgIC8vIGlzIGhhbmRsZWQgY29uc2lzdGVudGx5LgogICAgICAgICBEb2N1bWVudCog
bm9kZURvY3VtZW50ID0gbnVsbHB0cjsKLSAgICAgICAgUmVmUHRyPFJhbmdlPiB0ZXh0UmFuZ2U7
CisgICAgICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiB0ZXh0UmFuZ2U7CiAgICAgICAgIGlmIChO
b2RlKiBub2RlID0gbV9yZW5kZXJlci0+bm9kZSgpKSB7CiAgICAgICAgICAgICBub2RlRG9jdW1l
bnQgPSAmbm9kZS0+ZG9jdW1lbnQoKTsKLSAgICAgICAgICAgIHRleHRSYW5nZSA9IHJhbmdlT2ZD
b250ZW50cygqbm9kZSk7CisgICAgICAgICAgICB0ZXh0UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoKm5vZGUpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8g
Rm9yIGFub255bW91cyBibG9ja3MsIHdlIHdvcmsgYXJvdW5kIG5vdCBoYXZpbmcgYSBkaXJlY3Qg
bm9kZSB0byBjcmVhdGUgYSByYW5nZSBmcm9tCiAgICAgICAgICAgICAvLyBkZWZpbmluZyBvbmUg
YmFzZWQgaW4gdGhlIHR3byBleHRlcm5hbCBwb3NpdGlvbnMgZGVmaW5pbmcgdGhlIGJvdW5kYXJp
ZXMgb2YgdGhlIHN1YnRyZWUuCkBAIC02NTAsNyArNjUwLDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVs
ZW1lbnQKICAgICAgICAgICAgICAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uSW5Q
YXJlbnRBZnRlck5vZGUobGFzdENoaWxkUmVuZGVyZXItPm5vZGUoKSk7CiAKICAgICAgICAgICAg
ICAgICBub2RlRG9jdW1lbnQgPSAmZmlyc3ROb2RlSW5CbG9jay0+ZG9jdW1lbnQoKTsKLSAgICAg
ICAgICAgICAgICB0ZXh0UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpub2RlRG9jdW1lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICAgICAgICAgICAgICB0ZXh0UmFuZ2UgPSB7IHsg
Km1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0UG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5k
UG9zaXRpb24pIH0gfTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0Jv
dW5kYXJ5UG9pbnQuaAppbmRleCA1Y2JiZmRjMDBmNTUwNzQ3NWExODViMmU4NTIzYWZhYjcyMzhi
MjIyLi40YjIyYTMxYWMxMWE5NjU0OGU5OWY2NjgxODE1ZjQyNjJmNDEyZDBjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Cb3VuZGFyeVBvaW50LmgKQEAgLTQ3LDYgKzQ3LDcgQEAgc3RydWN0IEJvdW5kYXJ5UG9p
bnQgewogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJvdW5kYXJ5UG9pbnQmLCBjb25zdCBCb3VuZGFy
eVBvaW50Jik7CiAKIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29u
dGVudHMoTm9kZSYpOworQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNv
bnRlbnRzKE5vZGUmKTsKIAogaW5saW5lIEJvdW5kYXJ5UG9pbnQ6OkJvdW5kYXJ5UG9pbnQoUmVm
PE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgOiBjb250YWluZXIoV1RG
TW92ZShjb250YWluZXIpKQpAQCAtODIsNCArODMsOSBAQCBpbmxpbmUgQm91bmRhcnlQb2ludCBt
YWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhOb2RlJiBub2RlKQogICAgIHJldHVy
biB7IG5vZGUsIDAgfTsKIH0KIAoraW5saW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9p
bnRBZnRlck5vZGVDb250ZW50cyhOb2RlJiBub2RlKQoreworICAgIHJldHVybiB7IG5vZGUsIG5v
ZGUubGVuZ3RoKCkgfTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDhlNThkMGVkZDg2ZjJh
YjkyNjZiNTcwZGYxNzlmMWNlMTRkZDQwOTkuLjc4ZjdmNTViZWY1ZDM5MTViNzcyMDZhOWIxMmFk
MDI1NWI0MTczMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTI2MTIsNiArMjYxMiwxNyBAQCB2b2lk
KiBOb2RlOjpvcGFxdWVSb290U2xvdygpIGNvbnN0CiAgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8dm9p
ZCo+KHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihub2RlKSk7CiB9CiAKK1JlZlB0cjxOb2RlPiBj
b21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiBhLCBOb2RlJiBiKQoreworICAgIGZvciAoYXV0
byBhbmNlc3RvckEgPSAmYTsgYW5jZXN0b3JBOyBhbmNlc3RvckEgPSBhbmNlc3RvckEtPnBhcmVu
dE5vZGUoKSkgeworICAgICAgICBmb3IgKGF1dG8gYW5jZXN0b3JCID0gJmI7IGFuY2VzdG9yQjsg
YW5jZXN0b3JCID0gYW5jZXN0b3JCLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChh
bmNlc3RvckEgPT0gYW5jZXN0b3JCKQorICAgICAgICAgICAgICAgIHJldHVybiBhbmNlc3RvckE7
CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IE5vZGUmIG5vZGUpCiB7CiAgICAgdHMg
PDwgIm5vZGUgIiA8PCAmbm9kZSA8PCAiICIgPDwgbm9kZS5kZWJ1Z0Rlc2NyaXB0aW9uKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuaAppbmRleCBlMmIzMDYxNzI2MmE0MjUwOWEyMWJmZGQ3NGE1Mzc0OGNhZGNkNjgyLi5l
YWFhMzU4YzRlYTFiZWZjZWM0OTAyYjFiNzc1M2U3MWU4MmI4M2Y0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKQEAg
LTY3MCw2ICs2NzAsOCBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxOb2RlUmFyZURh
dGEsIE5vZGVSYXJlRGF0YURlbGV0ZXI+IG1fcmFyZURhdGE7CiB9OwogCitXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYsIE5vZGUmKTsKKwog
I2lmIEFTU0VSVF9FTkFCTEVECiAKIGlubGluZSB2b2lkIGFkb3B0ZWQoTm9kZSogbm9kZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCmluZGV4IGJjZjY5MDQ1NzVlYmRlMjQ0ZDkxNDUxZDk3MTM4NjQ4
YjcxMjE4ZjIuLjY3NDViMTk5ZGI1NmJmYWQ1MzY2NDcyOGFjMmY3N2Y2ODA3NjgwMWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1Bvc2l0aW9uLmNwcApAQCAtMTU3MCw3ICsxNTcwLDcgQEAgUmVmUHRyPE5vZGU+IGNv
bW1vblNoYWRvd0luY2x1ZGluZ0FuY2VzdG9yKGNvbnN0IFBvc2l0aW9uJiBhLCBjb25zdCBQb3Np
dGlvbiYgYikKICAgICBBU1NFUlQobm9kZUEpOwogICAgIGF1dG8qIG5vZGVCID0gY29tbW9uU2Nv
cGUtPmFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKGIuY29udGFpbmVyTm9kZSgpKTsKICAgICBBU1NF
UlQobm9kZUIpOwotICAgIHJldHVybiBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIobm9k
ZUEsIG5vZGVCKTsKKyAgICByZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKm5vZGVBLCAq
bm9kZUIpOwogfQogCiBQb3NpdGlvbiBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZShOb2RlKiBu
b2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggNjRhOGFhODI2N2RkMjU0MTdhNjVhMDNiZWIwZjE2
MjU5MGUwNzEwNy4uZDViZGUwYTBiYmY1NGMyNjJiMWNmYWIwYWNhMzRlNzQwMDMwZjkwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuY3BwCkBAIC0xNDMsMTcgKzE0Myw2IEBAIHZvaWQgUmFuZ2U6OnNldERvY3Vt
ZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdl
KCp0aGlzKTsKIH0KIAotTm9kZSogUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKE5vZGUq
IGNvbnRhaW5lckEsIE5vZGUqIGNvbnRhaW5lckIpCi17Ci0gICAgZm9yIChOb2RlKiBwYXJlbnRB
ID0gY29udGFpbmVyQTsgcGFyZW50QTsgcGFyZW50QSA9IHBhcmVudEEtPnBhcmVudE5vZGUoKSkg
ewotICAgICAgICBmb3IgKE5vZGUqIHBhcmVudEIgPSBjb250YWluZXJCOyBwYXJlbnRCOyBwYXJl
bnRCID0gcGFyZW50Qi0+cGFyZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAocGFyZW50QSA9
PSBwYXJlbnRCKQotICAgICAgICAgICAgICAgIHJldHVybiBwYXJlbnRBOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCiBzdGF0aWMgaW5saW5lIGJvb2wgY2hlY2tG
b3JEaWZmZXJlbnRSb290Q29udGFpbmVyKGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgc3RhcnQs
IGNvbnN0IFJhbmdlQm91bmRhcnlQb2ludCYgZW5kKQogewogICAgIE5vZGUqIGVuZFJvb3RDb250
YWluZXIgPSBlbmQuY29udGFpbmVyKCk7CkBAIC0yMzksNyArMjI4LDcgQEAgRXhjZXB0aW9uT3I8
Ym9vbD4gUmFuZ2U6OmlzUG9pbnRJblJhbmdlKE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNl
dCkKICAgICBpZiAoY2hlY2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8v
IERPTTQgc3BlYyByZXF1aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0
IGNvbnRhaW5lciBoYXZlIHRoZSBzYW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRv
IGl0IGluIHRoZSByZXZlcnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4g
Y29tbW9uIGNhc2UuCi0gICAgICAgIGlmICghY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnJlZk5v
ZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAgICAgICAgaWYgKCFjb21tb25JbmNsdXNpdmVBbmNl
c3RvcihyZWZOb2RlLCBzdGFydENvbnRhaW5lcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CiAg
ICAgfQpAQCAtMjYzLDcgKzI1Miw3IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5nZTo6Y29tcGFy
ZVBvaW50KE5vZGUmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkgY29uc3QKICAgICBpZiAoY2hl
Y2tOb2RlUmVzdWx0Lmhhc0V4Y2VwdGlvbigpKSB7CiAgICAgICAgIC8vIERPTTQgc3BlYyByZXF1
aXJlcyB1cyB0byBjaGVjayB3aGV0aGVyIHJlZk5vZGUgYW5kIHN0YXJ0IGNvbnRhaW5lciBoYXZl
IHRoZSBzYW1lIHJvb3QgZmlyc3QKICAgICAgICAgLy8gYnV0IHdlIGRvIGl0IGluIHRoZSByZXZl
cnNlIG9yZGVyIHRvIGF2b2lkIE8obikgb3BlcmF0aW9uIGhlcmUgaW4gY29tbW9uIGNhc2UuCi0g
ICAgICAgIGlmICghcmVmTm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25BbmNlc3RvckNvbnRh
aW5lcigmcmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIXJlZk5vZGUu
aXNDb25uZWN0ZWQoKSAmJiAhY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRD
b250YWluZXIoKSkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3JvbmdEb2N1bWVu
dEVycm9yIH07CiAgICAgICAgIHJldHVybiBjaGVja05vZGVSZXN1bHQucmVsZWFzZUV4Y2VwdGlv
bigpOwogICAgIH0KQEAgLTQyMSwxOSArNDEwLDE5IEBAIEV4Y2VwdGlvbk9yPHNob3J0PiBSYW5n
ZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKE5vZGUqIGNvbnRhaW5lckEsIHVuc2lnbmVkIG9mZnNl
CiAKICAgICAvLyBjYXNlIDQ6IGNvbnRhaW5lcnMgQSAmIEIgYXJlIHNpYmxpbmdzLCBvciBjaGls
ZHJlbiBvZiBzaWJsaW5ncwogICAgIC8vICMjIyB3ZSBuZWVkIHRvIGRvIGEgdHJhdmVyc2FsIGhl
cmUgaW5zdGVhZAotICAgIGF1dG8qIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JDb250
YWluZXIoY29udGFpbmVyQSwgY29udGFpbmVyQik7CisgICAgYXV0byBjb21tb25BbmNlc3RvciA9
IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpjb250YWluZXJBLCAqY29udGFpbmVyQik7CiAgICAg
aWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFdyb25nRG9j
dW1lbnRFcnJvciB9OwogICAgIE5vZGUqIGNoaWxkQSA9IGNvbnRhaW5lckE7CiAgICAgd2hpbGUg
KGNoaWxkQSAmJiBjaGlsZEEtPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAgICAg
ICAgY2hpbGRBID0gY2hpbGRBLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFjaGlsZEEpCi0gICAg
ICAgIGNoaWxkQSA9IGNvbW1vbkFuY2VzdG9yOworICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNl
c3Rvci5nZXQoKTsKICAgICBOb2RlKiBjaGlsZEIgPSBjb250YWluZXJCOwogICAgIHdoaWxlIChj
aGlsZEIgJiYgY2hpbGRCLT5wYXJlbnROb2RlKCkgIT0gY29tbW9uQW5jZXN0b3IpCiAgICAgICAg
IGNoaWxkQiA9IGNoaWxkQi0+cGFyZW50Tm9kZSgpOwogICAgIGlmICghY2hpbGRCKQotICAgICAg
ICBjaGlsZEIgPSBjb21tb25BbmNlc3RvcjsKKyAgICAgICAgY2hpbGRCID0gY29tbW9uQW5jZXN0
b3IuZ2V0KCk7CiAKICAgICBpZiAoY2hpbGRBID09IGNoaWxkQikKICAgICAgICAgcmV0dXJuIDA7
IC8vIEEgaXMgZXF1YWwgdG8gQgpAQCAtMTI5MCwxMCArMTI3OSwxMCBAQCBpbnQgUmFuZ2U6OmNv
bGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoVmVjdG9yPFNlbGVj
dGlvblJlY3Q+JgogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gVGhlIHJhbmdlIGNvdWxkIHNw
YW4gb3ZlciBub2RlcyB3aXRoIGRpZmZlcmVudCB3cml0aW5nIG1vZGVzLgorICAgIC8vIFRoZSBy
YW5nZSBjb3VsZCBzcGFuIG5vZGVzIHdpdGggZGlmZmVyZW50IHdyaXRpbmcgbW9kZXMuCiAgICAg
Ly8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgdXNlIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIGNv
bW1vbiBhbmNlc3Rvci4KICAgICBpZiAoY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMpIHsK
LSAgICAgICAgaWYgKE5vZGUqIGFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3JDb250YWluZXIoJnN0
YXJ0Q29udGFpbmVyLCAmZW5kQ29udGFpbmVyKSkKKyAgICAgICAgaWYgKGF1dG8gYW5jZXN0b3Ig
PSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihzdGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkK
ICAgICAgICAgICAgIGhhc0ZsaXBwZWRXcml0aW5nTW9kZSA9IGFuY2VzdG9yLT5yZW5kZXJlcigp
LT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CiAgICAgfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5n
ZS5oCmluZGV4IDgyYzMyNjUzNTk2M2FhNmZkOGVkNzVlNjNjZDgyMmMzNzJmMTIzZGUuLjhhMjZh
YjUyZGZhZTczZDY4YjkzMjVmM2E3MjA4ZDFiODhhMDZmZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC02
MCw4ICs2MCw3IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX2VuZC5vZmZzZXQoKTsgfQogICAgIGJvb2wgY29sbGFwc2VkKCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydCA9PSBtX2VuZDsgfQogCi0gICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiBjb21tb25BbmNlc3RvckNvbnRhaW5lcigmc3RhcnRDb250YWlu
ZXIoKSwgJmVuZENvbnRhaW5lcigpKTsgfQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOb2Rl
KiBjb21tb25BbmNlc3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWlu
ZXJCKTsKKyAgICBOb2RlKiBjb21tb25BbmNlc3RvckNvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHN0YXJ0Q29udGFpbmVyKCksIGVuZENvbnRhaW5lcigp
KS5nZXQoKTsgfQogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0
KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICBXRUJDT1JFX0VY
UE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNp
Z25lZCBvZmZzZXQpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgY29sbGFwc2UoYm9vbCB0b1N0
YXJ0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDlhYjEzNjAxMjQ5MTc0MDNm
ODFiYTM2MWU3MjJkYTljMjI4ZmFiZjAuLjkyNDBjMzQyNDE4MThiMmQwNGVlODYzMDI0MmFmZjU0
ZDk5Y2NmMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtNjQsMTEgKzY0LDYg
QEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9kZSYgbm9k
ZSkKICAgICByZXR1cm4gU2ltcGxlUmFuZ2UgeyB7ICpwYXJlbnQsIG9mZnNldCB9LCB7ICpwYXJl
bnQsIG9mZnNldCArIDEgfSB9OwogfQogCi1zdGF0aWMgQm91bmRhcnlQb2ludCBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIHsgbm9k
ZSwgbm9kZS5sZW5ndGgoKSB9OwotfQotCiBTaW1wbGVSYW5nZSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoTm9kZSYgbm9kZSkKIHsKICAgICByZXR1cm4geyBtYWtlQm91bmRhcnlQb2lu
dEJlZm9yZU5vZGVDb250ZW50cyhub2RlKSwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250
ZW50cyhub2RlKSB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKaW5kZXggNWFmMmM2MGU0NDQwMWJlOTJkZGE4ODgyYTY1N2Zi
Y2Q3OWUwNTY3MS4uM2JkNjU4ZGY2NDQwMWQyMmIwNjFkNmNjNDMwZmVlY2I0MWZlYjAwNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXIuY3BwCkBAIC0yMTcsMTggKzIxNywyMCBAQCBib29sIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6OmFwcGx5QXV0b2NvcnJlY3Rpb25CZWZvcmVUeXBpbmdJZkFwcHJvcHJpYXRlKCkKIAogdm9p
ZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxpZWRTcGVsbENvcnJl
Y3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0
IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCiB7Ci0gICAgaWYg
KEFsdGVybmF0aXZlVGV4dENsaWVudCogY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkp
CisgICAgaWYgKGF1dG8gY2xpZW50ID0gYWx0ZXJuYXRpdmVUZXh0Q2xpZW50KCkpCiAgICAgICAg
IGNsaWVudC0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3Bv
bnNlOjpSZXZlcnRlZCwgY29ycmVjdGVkLCBjb3JyZWN0aW9uKTsKIAogICAgIFJlZjxGcmFtZT4g
cHJvdGVjdG9yKG1fZnJhbWUpOwogICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0
KCk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uT2ZDb3Jy
ZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpIHwgRnJh
bWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7Ci0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5zdGFydCgpLCBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
KTsKIAorICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbk9mQ29y
cmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSB8IEZy
YW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQpOworICAgIGF1dG8gcmFuZ2Ug
PSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAo
IXJhbmdlKQorICAgICAgICByZXR1cm47CiAgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycyhyYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpTcGVs
bGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7Ci0gICAgbWFya2Vycy5h
ZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vy
cy5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9u
KTsKKyAgICBtYXJrZXJzLnJlbW92ZU1hcmtlcnMoKnJhbmdlLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nLCBEb2N1bWVudE1h
cmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OlJlbW92ZVBh
cnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKKyAgICBtYXJrZXJzLmFkZE1hcmtlcigqcmFuZ2Us
IERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJh
bmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlvbik7CiB9CiAKIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCkBAIC0zOTUsMTAgKzM5Nywx
MiBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVk
aXRpbmcoRWRpdENvbW1hbmRDb21wb3NpdGlvbgogewogICAgIGlmICghY29tbWFuZC0+d2FzQ3Jl
YXRlTGlua0NvbW1hbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSBSYW5n
ZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9u
KCkuc3RhcnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5lbmQoKSk7CisgICAgYXV0
byByYW5nZSA9IGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKICAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2UsIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7Ci0gICAgbWFya2Vycy5hZGRNYXJrZXIocmFuZ2Us
IERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKKyAgICBtYXJrZXJzLmFk
ZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCk7CisgICAgbWFya2Vy
cy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CiB9CiAKIEVkaXRvckNsaWVudCogQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6ZWRpdG9y
Q2xpZW50KCkKQEAgLTQ3MSw3ICs0NzUsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xs
ZXI6Om1hcmtQcmVjZWRpbmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogICAg
IGlmIChlbmRPZlNlbGVjdGlvbiA9PSBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpj
cmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24sIGVu
ZE9mU2VsZWN0aW9uKTsKKyAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gU2ltcGxl
UmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocHJlY2VkaW5nQ2hhcmFjdGVyUG9zaXRpb24pLCAq
bWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZTZWxlY3Rpb24pIH07CiAgICAgU3RyaW5nIHN0cmluZyA9
IHBsYWluVGV4dChwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSk7CiAgICAgaWYgKHN0cmluZy5pc0Vt
cHR5KCkgfHwgIWRlcHJlY2F0ZWRJc0VkaXRpbmdXaGl0ZXNwYWNlKHN0cmluZ1tzdHJpbmcubGVu
Z3RoKCkgLSAxXSkpCiAgICAgICAgIHJldHVybjsKQEAgLTQ4NCwyNSArNDg4LDI1IEBAIHZvaWQg
QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxl
dGVkQXV0b2NvcnJlY3Rpb25BCiAKIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cHJv
Y2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdChjb25zdCBUZXh0Q2hlY2tpbmdS
ZXN1bHQmIHJlc3VsdCwgUmFuZ2UmIHJhbmdlV2l0aEFsdGVybmF0aXZlLCBjb25zdCBTdHJpbmcm
IHN0cmluZ1RvQmVSZXBsYWNlZCkKIHsKLSAgICBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXImIG1h
cmtlckNvbnRyb2xsZXIgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBpZiAo
bWFya2VyQ29udHJvbGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVu
dE1hcmtlcjo6UmVwbGFjZW1lbnQpKSB7CisgICAgYXV0byYgbWFya2VycyA9IG1fZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOworICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRo
QWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKICAgICAgICAgaWYg
KHJlc3VsdC50eXBlID09IFRleHRDaGVja2luZ1R5cGU6OkNvcnJlY3Rpb24pCiAgICAgICAgICAg
ICByZWNvcmRTcGVsbGNoZWNrZXJSZXNwb25zZUZvck1vZGlmaWVkQ29ycmVjdGlvbihyYW5nZVdp
dGhBbHRlcm5hdGl2ZSwgc3RyaW5nVG9CZVJlcGxhY2VkLCByZXN1bHQucmVwbGFjZW1lbnQpOwog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXIu
aGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVk
Q29ycmVjdGlvbikpCisgICAgaWYgKG1hcmtlcnMuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5h
dGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlamVjdGVkQ29ycmVjdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGlmIChtYXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRo
QWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCisgICAgaWYg
KG1hcmtlcnMuaGFzTWFya2VycyhyYW5nZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6
OkFjY2VwdGVkQ2FuZGlkYXRlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgUG9zaXRp
b24gYmVnaW5uaW5nT2ZSYW5nZSA9IHJhbmdlV2l0aEFsdGVybmF0aXZlLnN0YXJ0UG9zaXRpb24o
KTsKICAgICBQb3NpdGlvbiBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiA9IGJlZ2lubmluZ09m
UmFuZ2UucHJldmlvdXMoKTsKLSAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgYmVnaW5uaW5nT2ZSYW5nZSk7CiAKLSAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtl
cio+IG1hcmtlcnMgPSBtYXJrZXJDb250cm9sbGVyLm1hcmtlcnNJblJhbmdlKHByZWNlZGluZ0No
YXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9jb3JyZWN0aW9uKTsKLSAg
ICBmb3IgKGNvbnN0IGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKKyAgICBhdXRvIHByZWNlZGlu
Z0NoYXJhY3RlclJhbmdlID0gU2ltcGxlUmFuZ2UgeyAqbWFrZUJvdW5kYXJ5UG9pbnQocHJlY2Vk
aW5nQ2hhcmFjdGVyUG9zaXRpb24pLCAqbWFrZUJvdW5kYXJ5UG9pbnQoYmVnaW5uaW5nT2ZSYW5n
ZSkgfTsKKworICAgIGZvciAoYXV0byYgbWFya2VyIDogbWFya2Vycy5tYXJrZXJzSW5SYW5nZShw
cmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRBdXRvY29ycmVj
dGlvbikpIHsKICAgICAgICAgaWYgKG1hcmtlci0+ZGVzY3JpcHRpb24oKSA9PSBzdHJpbmdUb0Jl
UmVwbGFjZWQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwCmluZGV4IGQ4YTg3MDNh
NWJiYzYwNTVjNTA2Y2UwOGYzNWFkZGJjNGEwZTliMWQuLmQ5OTdiYWJmZTJjOGY1ZTA1NTg2ZGE2
MDc4MTlmNjFlMDUxZTcxZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hh
bmdlTGlzdFR5cGVDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5n
ZUxpc3RUeXBlQ29tbWFuZC5jcHAKQEAgLTQwLDggKzQwLDEzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogc3RhdGljIE9wdGlvbmFsPHN0ZDo6cGFpcjxDaGFuZ2VMaXN0VHlwZUNvbW1hbmQ6OlR5
cGUsIFJlZjxIVE1MRWxlbWVudD4+PiBsaXN0Q29udmVyc2lvblR5cGVGb3JTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogeworICAgIGF1dG8gc3RhcnROb2RlID0g
c2VsZWN0aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpOworICAgIGF1dG8gZW5kTm9kZSA9IHNl
bGVjdGlvbi5lbmQoKS5jb250YWluZXJOb2RlKCk7CisgICAgaWYgKCFzdGFydE5vZGUgfHwgIWVu
ZE5vZGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBjb21tb25BbmNl
c3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpzdGFydE5vZGUsICplbmROb2RlKTsKKwog
ICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdFRvUmVwbGFjZTsKLSAgICBhdXRvIGNvbW1vbkFu
Y2VzdG9yID0gbWFrZVJlZlB0cihSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIoc2VsZWN0
aW9uLnN0YXJ0KCkuY29udGFpbmVyTm9kZSgpLCBzZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9k
ZSgpKSk7CiAgICAgaWYgKGlzPEhUTUxVTGlzdEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yKSB8fCBp
czxIVE1MT0xpc3RFbGVtZW50Pihjb21tb25BbmNlc3RvcikpCiAgICAgICAgIGxpc3RUb1JlcGxh
Y2UgPSBkb3duY2FzdDxIVE1MRWxlbWVudD4oY29tbW9uQW5jZXN0b3IuZ2V0KCkpOwogICAgIGVs
c2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCmluZGV4IDNiMDI5ZWE3ZjMwMTQ1YzE3NGMz
NDI0Y2IzYWM4MmJjMzg5NWViZDYuLjVhZTdhYjJkZmEzYmJlYjc1OTI5ODBhNGY4ZWMyYTc1Nzhm
MzA1NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcApAQCAtMTE0MCwxOSArMTE0MCwy
MiBAQCBzdGF0aWMgYm9vbCBpc1Zpc2libHlBZGphY2VudChjb25zdCBQb3NpdGlvbiYgZmlyc3Qs
IGNvbnN0IFBvc2l0aW9uJiBzZWNvbmQpCiAKIC8vIERldGVybWluZXMgd2hldGhlciBhIG5vZGUg
aXMgaW5zaWRlIGEgcmFuZ2Ugb3IgdmlzaWJseSBzdGFydHMgYW5kIGVuZHMgYXQgdGhlIGJvdW5k
YXJpZXMgb2YgdGhlIHJhbmdlLgogLy8gQ2FsbCB0aGlzIGZ1bmN0aW9uIHRvIGRldGVybWluZSB3
aGV0aGVyIGEgbm9kZSBpcyB2aXNpYmx5IGZpdCBpbnNpZGUgc2VsZWN0ZWRSYW5nZQotYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNvbnN0IFJhbmdlJiByYW5n
ZSkKK2Jvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlJiBub2RlLCBjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgLy8gSWYgdGhlIG5vZGUgaXMgaW5zaWRlIHRoZSBy
YW5nZSwgdGhlbiBpdCBzdXJlbHkgaXMgY29udGFpbmVkIHdpdGhpbi4KLSAgICBhdXRvIGNvbXBh
cmlzb25SZXN1bHQgPSByYW5nZS5jb21wYXJlTm9kZShub2RlKTsKKyAgICBhdXRvIGNvbXBhcmlz
b25SZXN1bHQgPSBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb21wYXJlTm9kZShub2RlKTsKICAg
ICBpZiAoIWNvbXBhcmlzb25SZXN1bHQuaGFzRXhjZXB0aW9uKCkgJiYgY29tcGFyaXNvblJlc3Vs
dC5yZWxlYXNlUmV0dXJuVmFsdWUoKSA9PSBSYW5nZTo6Tk9ERV9JTlNJREUpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0
aW9uQmVmb3JlTm9kZShub2RlKSA9PSByYW5nZS5zdGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0
YXJ0SXNWaXN1YWxseVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0
ZXJOb2RlKCZub2RlKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSkgPCAwKQorICAgIGF1dG8gc3RhcnRQ
b3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAg
YXV0byBlbmRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQp
OworCisgICAgYm9vbCBzdGFydElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQmVmb3Jl
Tm9kZShub2RlKSA9PSBzdGFydFBvc2l0aW9uOworICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1l
ICYmIGNvbXBhcmVQb3NpdGlvbnMocG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIGVu
ZFBvc2l0aW9uKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgYm9vbCBlbmRJc1Zp
c3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVyTm9kZShub2RlKSA9PSByYW5nZS5lbmRQ
b3NpdGlvbigpOwotICAgIGlmIChlbmRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25z
KHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgcG9zaXRpb25JblBhcmVudEJlZm9yZU5vZGUoJm5vZGUp
KSA8IDApCisgICAgYm9vbCBlbmRJc1Zpc3VhbGx5U2FtZSA9IHZpc2libGVQb3NpdGlvbkFmdGVy
Tm9kZShub2RlKSA9PSBlbmRQb3NpdGlvbjsKKyAgICBpZiAoZW5kSXNWaXN1YWxseVNhbWUgJiYg
Y29tcGFyZVBvc2l0aW9ucyhzdGFydFBvc2l0aW9uLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9k
ZSgmbm9kZSkpIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICByZXR1cm4gc3RhcnRJ
c1Zpc3VhbGx5U2FtZSAmJiBlbmRJc1Zpc3VhbGx5U2FtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
LmgKaW5kZXggYzA1MjY0NmUxNTMzYmYyZDY3NWU0NDBjMzcxMDc5ZGE5NGE0ZGNkMS4uN2YzYWM2
MmIzN2UxOGMwZGUwOTM1MzEwZWE4OGM0NzE3NjBmMTdiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nLmgKQEAgLTM3LDcgKzM3LDYgQEAgY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MSW1h
Z2VFbGVtZW50OwogY2xhc3MgSFRNTFNwYW5FbGVtZW50OwogY2xhc3MgSFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlckJsb2NrOwogY2xhc3MgVmlz
aWJsZVBvc2l0aW9uOwogY2xhc3MgVmlzaWJsZVNlbGVjdGlvbjsKQEAgLTEwMSw3ICsxMDAsNyBA
QCBib29sIGlzTm9kZVJlbmRlcmVkKGNvbnN0IE5vZGUmKTsKIGJvb2wgaXNSZW5kZXJlZEFzTm9u
SW5saW5lVGFibGVJbWFnZU9ySFIoY29uc3QgTm9kZSopOwogYm9vbCBpc05vblRhYmxlQ2VsbEhU
TUxCbG9ja0VsZW1lbnQoY29uc3QgTm9kZSopOwogCi1ib29sIGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4oTm9kZSYsIGNvbnN0IFJhbmdlJik7Citib29sIGlzTm9kZVZpc2libHlDb250YWlu
ZWRXaXRoaW4oTm9kZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgYXJlSWRlbnRpY2Fs
RWxlbWVudHMoY29uc3QgTm9kZSYsIGNvbnN0IE5vZGUmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCmluZGV4IDFjODNmZDBhYWU4NzMzOWIxNDNhMTk2ZDY0NGE5NDY2ODlmYjE1M2YuLjJi
MTA2MDY4OTkwYjcyMjgyNGNkODZkMTdmZGNjMmU1ZjFjYzM4ZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKQEAgLTMyMTEsNyArMzIxMSw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2Uo
KQogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dCh0cmFuc3Bvc2VkLCBTZWxlY3RSZXBsYWNl
bWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246Okluc2VydCk7CiB9CiAKLXZv
aWQgRWRpdG9yOjphZGRSYW5nZVRvS2lsbFJpbmcoY29uc3QgUmFuZ2UmIHJhbmdlLCBLaWxsUmlu
Z0luc2VydGlvbk1vZGUgbW9kZSkKK3ZvaWQgRWRpdG9yOjphZGRSYW5nZVRvS2lsbFJpbmcoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBLaWxsUmluZ0luc2VydGlvbk1vZGUgbW9kZSkKIHsKICAg
ICBhZGRUZXh0VG9LaWxsUmluZyhwbGFpblRleHQocmFuZ2UpLCBtb2RlKTsKIH0KQEAgLTM2ODUs
OTkgKzM2ODUsNzQgQEAgdm9pZCBFZGl0b3I6OnJlc3BvbmRUb0NoYW5nZWRTZWxlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYsIE9wdGlvblNldDxGcmFtZVMKICAgICBzY2hlZHVsZUVkaXRv
clVJVXBkYXRlKCk7CiB9CiAKLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04p
ICYmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RF
VEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQogCi1ib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVs
ZXBob25lTnVtYmVycygpCitib29sIEVkaXRvcjo6c2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVy
cygpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2ZyYW1lLmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdF
bmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmlzU3VwcG9ydGVkKCk7CisgICAg
cmV0dXJuIG1fZnJhbWUuZG9jdW1lbnQoKSAmJiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVy
UGFyc2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQo
KTsKIH0KIAotdm9pZCBFZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkK
K3N0YXRpYyBWZWN0b3I8U2ltcGxlUmFuZ2U+IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBpZiAoIXNob3VsZERldGVjdFRlbGVwaG9uZU51
bWJlcnMoKSB8fCAhY2xpZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fZGV0ZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXMuY2xlYXIoKTsKLQotICAgIFZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBtYXJrZWRSYW5nZXM7Ci0KLSAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgIGlmICghZnJhbWVTZWxlY3Rpb24uaXNSYW5nZSgpKSB7
Ci0gICAgICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCi0gICAgICAgICAgICBw
YWdlLT5zZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJS
YW5nZXNDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKKyAgICAvLyBEb24ndCBzY2FuIGZvciBw
aG9uZSBudW1iZXJzIGluc2lkZSBlZGl0YWJsZSByZWdpb25zLgorICAgIGF1dG8mIHN0YXJ0Tm9k
ZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7CisgICAgaWYgKHN0YXJ0Tm9kZS5oYXNFZGl0YWJs
ZVN0eWxlKCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgYXV0byB0ZXh0ID0gcGxhaW5UZXh0
KHJhbmdlKTsKKyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IHJlc3VsdDsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHNjYW5uZXJQb3NpdGlvbiA9IDA7
CisgICAgaW50IHJlbGF0aXZlU3RhcnRQb3NpdGlvbiA9IDA7CisgICAgaW50IHJlbGF0aXZlRW5k
UG9zaXRpb24gPSAwOworICAgIGF1dG8gY2hhcmFjdGVycyA9IFN0cmluZ1ZpZXcgeyB0ZXh0IH0u
dXBjb252ZXJ0ZWRDaGFyYWN0ZXJzKCk7CisgICAgd2hpbGUgKHNjYW5uZXJQb3NpdGlvbiA8IGxl
bmd0aCAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6ZmluZCgmY2hhcmFjdGVyc1tzY2FubmVy
UG9zaXRpb25dLCBsZW5ndGggLSBzY2FubmVyUG9zaXRpb24sICZyZWxhdGl2ZVN0YXJ0UG9zaXRp
b24sICZyZWxhdGl2ZUVuZFBvc2l0aW9uKSkgeworICAgICAgICBBU1NFUlQoc2Nhbm5lclBvc2l0
aW9uICsgcmVsYXRpdmVFbmRQb3NpdGlvbiA8PSBsZW5ndGgpOworICAgICAgICByZXN1bHQuYXBw
ZW5kKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgQ2hhcmFjdGVyUmFuZ2Uoc2Nhbm5lclBv
c2l0aW9uICsgcmVsYXRpdmVTdGFydFBvc2l0aW9uLCByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVs
YXRpdmVTdGFydFBvc2l0aW9uKSkpOworICAgICAgICBzY2FubmVyUG9zaXRpb24gKz0gcmVsYXRp
dmVFbmRQb3NpdGlvbjsKICAgICB9Ci0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gY3JlYXRlTGl2
ZVJhbmdlKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpOwot
Ci0gICAgLy8gRXh0ZW5kIHRoZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0
aW9uIHRvIGRldGVjdCBpbmNvbXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KLSAgICBz
dGF0aWMgY29uc3QgaW50IGNoYXJhY3RlcnNUb0V4dGVuZCA9IDE1OwotICAgIGNvbnN0IFZpc2li
bGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KTsKLSAgICBQb3NpdGlvbiBzdGFydCA9IHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBQ
b3NpdGlvbiBlbmQgPSB2aXNpYmxlU2VsZWN0aW9uLmVuZCgpOwotICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgY2hhcmFjdGVyc1RvRXh0ZW5kOyArK2kpIHsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitzdGF0aWMgU2ltcGxlUmFuZ2UgZXh0ZW5kU2VsZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgdW5zaWduZWQgY2hhcmFjdGVyc1RvRXh0ZW5kKQoreworICAgIGF1dG8gc3RhcnQgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpOworICAgIGF1dG8gZW5kID0g
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGNoYXJhY3RlcnNUb0V4dGVuZDsgKytpKSB7CiAgICAgICAgIHN0YXJ0ID0g
c3RhcnQucHJldmlvdXMoQ2hhcmFjdGVyKTsKICAgICAgICAgZW5kID0gZW5kLm5leHQoQ2hhcmFj
dGVyKTsKICAgICB9CisgICAgcmV0dXJuIHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZCl9OworfQogCi0gICAgRnJhbWVTZWxlY3Rpb24gZXh0ZW5kZWRT
ZWxlY3Rpb247Ci0gICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0U3RhcnQoc3RhcnQpOwotICAgIGV4
dGVuZGVkU2VsZWN0aW9uLnNldEVuZChlbmQpOwotICAgIGF1dG8gZXh0ZW5kZWRSYW5nZSA9IGV4
dGVuZGVkU2VsZWN0aW9uLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7Ci0KLSAgICBp
ZiAoIWV4dGVuZGVkUmFuZ2UpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBh
Z2UoKSkKLSAgICAgICAgICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlc0NoYW5nZWQoKTsKK3ZvaWQgRWRpdG9yOjpzY2FuU2Vs
ZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpCit7CisgICAgLy8gRklYTUU6IFdoeSBpcyBpdCBo
ZWxwZnVsIGhlcmUgdG8gY2hlY2sgY2xpZW50IGZvciBudWxsPworICAgIGlmICghc2hvdWxkRGV0
ZWN0VGVsZXBob25lTnVtYmVycygpIHx8ICFjbGllbnQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IH0KIAotICAgIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJlcnMoY3JlYXRlTGl2ZVJhbmdlKCpl
eHRlbmRlZFJhbmdlKSwgcGxhaW5UZXh0KCpleHRlbmRlZFJhbmdlKSwgbWFya2VkUmFuZ2VzKTsK
KyAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7CiAKLSAgICAvLyBP
bmx5IGNvbnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0
aGV5IG92ZXJsYXAgd2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KLSAgICBmb3IgKGF1
dG8mIHJhbmdlIDogbWFya2VkUmFuZ2VzKSB7Ci0gICAgICAgIGlmIChyYW5nZXNPdmVybGFwKHJh
bmdlLmdldCgpLCBzZWxlY3RlZFJhbmdlLmdldCgpKSkKLSAgICAgICAgICAgIG1fZGV0ZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX2ZyYW1lLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNSYW5nZSgpKSB7Cisg
ICAgICAgIGlmIChhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpKSB7CisgICAgICAgICAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJh
Y3RlcnMgaW4gZWFjaCBkaXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBw
aG9uZSBudW1iZXJzLgorICAgICAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIGNoYXJhY3RlcnNU
b0V4dGVuZCA9IDE1OworICAgICAgICAgICAgYXV0byBzZWxlY3RlZExpdmVSYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0ZWRSYW5nZSk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdl
IDogc2NhbkZvclRlbGVwaG9uZU51bWJlcnMoZXh0ZW5kU2VsZWN0aW9uKCpzZWxlY3RlZFJhbmdl
LCBjaGFyYWN0ZXJzVG9FeHRlbmQpKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBXaHkg
ZG8gd2UgZG8gdGhpcyB1bmNvbmRpdGlvbmFsbHkgYW5kIHRoZSBjb2RlIGJlbG93IHRoaXMgb25s
eSB3aGVuIGl0IG92ZXJsYXBzIHRoZSBzZWxlY3Rpb24/CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS5tYXJrZXJzKCkuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25l
TnVtYmVyKTsKKworICAgICAgICAgICAgICAgIC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGgg
YSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVyIGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1
YWwgc2VsZWN0aW9uIHJhbmdlLgorICAgICAgICAgICAgICAgIGlmIChyYW5nZXNPdmVybGFwKGNy
ZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIHNlbGVjdGVkTGl2ZVJhbmdlLnB0cigpKSkKKyAg
ICAgICAgICAgICAgICAgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQo
cmFuZ2UpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGF1dG8q
IHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcigpLnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwogfQogCi12
b2lkIEVkaXRvcjo6c2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYgcmFuZ2UsIGNv
bnN0IFN0cmluZ1ZpZXcmIHN0cmluZ1ZpZXcsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWFya2Vk
UmFuZ2VzKQotewotICAgIC8vIERvbid0IHNjYW4gZm9yIHBob25lIG51bWJlcnMgaW5zaWRlIGVk
aXRhYmxlIHJlZ2lvbnMuCi0gICAgTm9kZSYgc3RhcnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKTsKLSAgICBpZiAoc3RhcnROb2RlLmhhc0VkaXRhYmxlU3R5bGUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gcmVsYXRpdmVTdGFydFBvc2l0aW9uIGFuZCByZWxhdGl2ZUVuZFBvc2l0
aW9uIGFyZSB0aGUgZW5kcG9pbnRzIG9mIHRoZSBwaG9uZSBudW1iZXIgcmFuZ2UsCi0gICAgLy8g
cmVsYXRpdmUgdG8gdGhlIHNjYW5uZXJQb3NpdGlvbgotICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0
cmluZ1ZpZXcubGVuZ3RoKCk7Ci0gICAgdW5zaWduZWQgc2Nhbm5lclBvc2l0aW9uID0gMDsKLSAg
ICBpbnQgcmVsYXRpdmVTdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgcmVsYXRpdmVFbmRQb3Np
dGlvbiA9IDA7Ci0KLSAgICBhdXRvIGNoYXJhY3RlcnMgPSBzdHJpbmdWaWV3LnVwY29udmVydGVk
Q2hhcmFjdGVycygpOwotCi0gICAgd2hpbGUgKHNjYW5uZXJQb3NpdGlvbiA8IGxlbmd0aCAmJiBU
ZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6ZmluZCgmY2hhcmFjdGVyc1tzY2FubmVyUG9zaXRpb25d
LCBsZW5ndGggLSBzY2FubmVyUG9zaXRpb24sICZyZWxhdGl2ZVN0YXJ0UG9zaXRpb24sICZyZWxh
dGl2ZUVuZFBvc2l0aW9uKSkgewotICAgICAgICAvLyBUaGUgY29udmVudGlvbiBpbiB0aGUgRGF0
YSBEZXRlY3RvcnMgZnJhbWV3b3JrIGlzIHRoYXQgdGhlIGVuZCBwb3NpdGlvbiBpcyB0aGUgZmly
c3QgY2hhcmFjdGVyIE5PVCBpbiB0aGUgcGhvbmUgbnVtYmVyCi0gICAgICAgIC8vICh0aGF0IGlz
LCB0aGUgbGVuZ3RoIG9mIHRoZSByYW5nZSBpcyByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRp
dmVTdGFydFBvc2l0aW9uKS4gU28gc3VidHJhY3QgMSB0byBnZXQgdGhlIHNhbWUKLSAgICAgICAg
Ly8gY29udmVudGlvbiBhcyB0aGUgb2xkIFdlYkNvcmUgcGhvbmUgbnVtYmVyIHBhcnNlciAoc28g
dGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZCBpZiB3ZSB3YW50IHRvIGdv
IGJhY2sKLSAgICAgICAgLy8gdG8gdGhlIG9sZCBwYXJzZXIpLgotICAgICAgICAtLXJlbGF0aXZl
RW5kUG9zaXRpb247Ci0KLSAgICAgICAgQVNTRVJUKHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZl
RW5kUG9zaXRpb24gPCBsZW5ndGgpOwotCi0gICAgICAgIGF1dG8gc3VicmFuZ2UgPSByZXNvbHZl
Q2hhcmFjdGVyUmFuZ2UocmFuZ2UsIENoYXJhY3RlclJhbmdlKHNjYW5uZXJQb3NpdGlvbiArIHJl
bGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRpdmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQ
b3NpdGlvbiArIDEpKTsKLQotICAgICAgICBtYXJrZWRSYW5nZXMuYXBwZW5kKGNyZWF0ZUxpdmVS
YW5nZShzdWJyYW5nZSkpOwotICAgICAgICByYW5nZS5vd25lckRvY3VtZW50KCkubWFya2Vycygp
LmFkZE1hcmtlcihzdWJyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7Ci0K
LSAgICAgICAgc2Nhbm5lclBvc2l0aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRpb24gKyAxOwotICAg
IH0KLX0KLQogI2VuZGlmIC8vIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCiAKIHZvaWQgRWRpdG9yOjp1cGRhdGVFZGl0b3JVSU5vd0lm
U2NoZWR1bGVkKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGFkOWVkYTI2MThjOWE4ODBi
ZWNiYjFjZTRkNjhiYjU5Yjg5YzIwYzAuLjIzZjVkZTEzMDQwNDk4ZTU4MGNlMWQxZDQxY2U0NzBk
N2RhZTQ5YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtNDE3LDcgKzQxNyw3IEBAIHB1
YmxpYzoKICNlbmRpZgogICAgIAogICAgIGVudW0gY2xhc3MgS2lsbFJpbmdJbnNlcnRpb25Nb2Rl
IHsgUHJlcGVuZFRleHQsIEFwcGVuZFRleHQgfTsKLSAgICB2b2lkIGFkZFJhbmdlVG9LaWxsUmlu
Zyhjb25zdCBSYW5nZSYsIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSk7CisgICAgdm9pZCBhZGRSYW5n
ZVRvS2lsbFJpbmcoY29uc3QgU2ltcGxlUmFuZ2UmLCBLaWxsUmluZ0luc2VydGlvbk1vZGUpOwog
ICAgIHZvaWQgYWRkVGV4dFRvS2lsbFJpbmcoY29uc3QgU3RyaW5nJiwgS2lsbFJpbmdJbnNlcnRp
b25Nb2RlKTsKICAgICB2b2lkIHNldFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShib29sKTsKIApA
QCAtNTA2LDcgKzUwNiw3IEBAIHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRvZ2ds
ZUF1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbigpOwogI2VuZGlmCiAKLSAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBSYW5n
ZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwor
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFz
dGVib2FyZCYsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0
LCBib29sJiBjaG9zZVBsYWluVGV4dCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBjb25zdCBGb250
KiBmb250Rm9yU2VsZWN0aW9uKGJvb2wmIGhhc011bHRpcGxlRm9udHMpIGNvbnN0OwogICAgIFdF
QkNPUkVfRVhQT1JUIHN0YXRpYyBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGVGb3JTZWxlY3Rpb25T
dGFydChGcmFtZSogLCBOb2RlICombm9kZVRvUmVtb3ZlKTsKQEAgLTUxNiwxMiArNTE2LDEzIEBA
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc3RyaW5nU2VsZWN0aW9uRm9yUGFz
dGVib2FyZCgpOwogICAgIFN0cmluZyBzdHJpbmdTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkV2l0aElt
YWdlQWx0VGV4dCgpOwogICAgIHZvaWQgdGFrZUZpbmRTdHJpbmdGcm9tU2VsZWN0aW9uKCk7Ci0j
aWYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNl
U2VsZWN0aW9uV2l0aEF0dHJpYnV0ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmcgPSBNYWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2tx
dW90ZSk7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKICAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQo
Tm9kZSosIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JU
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGFTZWxlY3Rpb25Gb3JQYXN0ZWJvYXJkKGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpOwotI2VuZGlmIC8vICFQTEFURk9STShJT1NfRkFNSUxZKQot
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3Ry
aW5nKE5TQXR0cmlidXRlZFN0cmluZyAqLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nID0gTWFpbEJs
b2NrcXVvdGVIYW5kbGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOwogI2VuZGlmCiAKICAgICBib29s
IGNhbkNvcHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkgY29uc3Q7CkBAIC01MzIsOSArNTMz
LDkgQEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oUGFzdGVib2FyZFdyaXRlckRh
dGEmKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAm
JiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRF
Q1RJT04pICYmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhv
bmVOdW1iZXJzKCk7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBkZXRlY3RlZFRl
bGVwaG9uZU51bWJlclJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0ZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXM7IH0KKyAgICBjb25zdCBWZWN0b3I8U2ltcGxlUmFuZ2U+JiBkZXRlY3RlZFRl
bGVwaG9uZU51bWJlclJhbmdlcygpIGNvbnN0IHsgcmV0dXJuIG1fZGV0ZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXM7IH0KICNlbmRpZgogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0cmlu
Z0ZvckNhbmRpZGF0ZVJlcXVlc3QoKSBjb25zdDsKQEAgLTY0OCwxMiArNjQ5LDExIEBAIHByaXZh
dGU6CiAgICAgYm9vbCBtX2VkaXRvclVJVXBkYXRlVGltZXJXYXNUcmlnZ2VyZWRCeURpY3RhdGlv
biB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzSGFuZGxpbmdBY2NlcHRlZENhbmRpZGF0ZSB7IGZh
bHNlIH07CiAKLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmICFQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGJvb2wgc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygp
OwotICAgIHZvaWQgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhSYW5nZSYsIGNvbnN0IFN0
cmluZ1ZpZXcmLCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcyk7CisjaWYgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCisgICAgYm9v
bCBzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkgY29uc3Q7CiAKICAgICBUaW1lciBtX3Rl
bGVwaG9uZU51bWJlckRldGVjdGlvblVwZGF0ZVRpbWVyOwotICAgIFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PiBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzOworICAgIFZlY3RvcjxTaW1wbGVS
YW5nZT4gbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlczsKICNlbmRpZgogCiAgICAgYm9v
bCBtX2lzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAppbmRl
eCA3ZTUzNGYyOTRkNjdhMTNkMmFjNWQyNTFiNDAwMDdiZGM4MTk4NTEwLi43ZTQ0NGQwNWQ5Zjgw
YThhZGE2MTI1YTIwZDA4ZGMzNWM3NWZjMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNwcApAQCAtNTk2LDcgKzU5Niw3
IEBAIGF1dG8gVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UoY29uc3QgTWFuaXB1
bGF0aW9uSXRlbURhdGEmIGl0ZW0sIGNvbnN0CiAgICAgICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yKQogICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gcGFyZW50OwogICAgICAgICAg
ICAgZWxzZSBpZiAoIXBhcmVudC0+aXNEZXNjZW5kYW50T2YoY29tbW9uQW5jZXN0b3IuZ2V0KCkp
KSB7Ci0gICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBSYW5nZTo6Y29tbW9uQW5jZXN0
b3JDb250YWluZXIoY29tbW9uQW5jZXN0b3IuZ2V0KCksIHBhcmVudC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29tbW9u
QW5jZXN0b3IsICpwYXJlbnQpOwogICAgICAgICAgICAgICAgIEFTU0VSVChjb21tb25BbmNlc3Rv
cik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVTZWxlY3Rpb24uY3BwCmluZGV4IDNjYWZjM2E4ZmJjYmM5Y2I1NDk5YzlkOGE3OWYxNTNj
MTQzZGU2NmIuLjIyM2NlMWNmMTQ1NDc1MWZiMzBkYTIzZTI5YmE0MzdhODBiNWI5MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcApAQCAtMjAyLDI2ICsy
MDIsMTYgQEAgYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjpleHBhbmRVc2luZ0dyYW51bGFyaXR5KFRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IFJlZlB0cjxSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikK
K3N0YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNlYXJjaFJhbmdlKGNvbnN0IFBvc2l0
aW9uJiBwb3NpdGlvbikKIHsKLSAgICBhdXRvKiBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5v
ZGUoKTsKLSAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGF1dG8q
IGJvdW5kYXJ5ID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7Ci0g
ICAgaWYgKCFib3VuZGFyeSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNl
YXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpKTsKLQotICAgIGF1dG8g
cmVzdWx0ID0gc2VhcmNoUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnkpOwotICAg
IGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IFBvc2l0aW9uIHN0YXJ0IHsgcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkgfTsK
LSAgICByZXN1bHQgPSBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmNvbnRhaW5lck5vZGUo
KSwgc3RhcnQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIHNlYXJjaFJh
bmdlOworICAgIGF1dG8gbm9kZSA9IHBvc2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgYXV0
byBzY29wZSA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KG5vZGUpOworICAg
IGlmICghc2NvcGUpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgYXV0byBzdGFy
dCA9IG1ha2VCb3VuZGFyeVBvaW50KHBvc2l0aW9uLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KTsKKyAgICBpZiAoIXN0YXJ0KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIHJl
dHVybiB7IHsgV1RGTW92ZSgqc3RhcnQpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRl
bnRzKCpzY29wZSkgfSB9OwogfQogCiBib29sIFZpc2libGVTZWxlY3Rpb246OmlzQWxsKEVkaXRp
bmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdApAQCAtMjMxLDcgKzIyMSw3IEBAIGJv
b2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNBbGwoRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1
bGUpIGNvbnN0CiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNw
YWNlKCkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHNlYXJjaFJhbmdlID0gbWFrZVNlYXJjaFJhbmdl
KG1fZW5kKTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNlYXJjaFJhbmdlKG1fZW5kKTsK
ICAgICBpZiAoIXNlYXJjaFJhbmdlKQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKaW5kZXggNjgzZTI0NDM0OWM5MDVhNjgyOTk3MzQw
ZTgzNWU2ZWRhOGE2ZmU2My4uNTQ1NDFmMGE3MmJiMDM4M2Y3MWMyOTVjNDAyZWE5M2IxYTI4ZWU0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmgKQEAgLTI4LDEz
ICsyOCwxMiBAQAogI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1
ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgQXJjaGl2ZVJlc291cmNlOwotY2xhc3MgQmxvYjsKIAogY2xhc3MgRnJh
bWVXZWJDb250ZW50UmVhZGVyIDogcHVibGljIFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyIHsK
IHB1YmxpYzoKQEAgLTUyLDEzICs1MSwxMyBAQCBwcm90ZWN0ZWQ6CiAKIGNsYXNzIFdlYkNvbnRl
bnRSZWFkZXIgZmluYWwgOiBwdWJsaWMgRnJhbWVXZWJDb250ZW50UmVhZGVyIHsKIHB1YmxpYzoK
LSAgICBSYW5nZSYgY29udGV4dDsKKyAgICBjb25zdCBTaW1wbGVSYW5nZSBjb250ZXh0OwogICAg
IGNvbnN0IGJvb2wgYWxsb3dQbGFpblRleHQ7CiAKICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVu
dD4gZnJhZ21lbnQ7CiAgICAgYm9vbCBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0OwogCi0gICAg
V2ViQ29udGVudFJlYWRlcihGcmFtZSYgZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93
UGxhaW5UZXh0KQorICAgIFdlYkNvbnRlbnRSZWFkZXIoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1w
bGVSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKICAgICAgICAgOiBGcmFtZVdl
YkNvbnRlbnRSZWFkZXIoZnJhbWUpCiAgICAgICAgICwgY29udGV4dChjb250ZXh0KQogICAgICAg
ICAsIGFsbG93UGxhaW5UZXh0KGFsbG93UGxhaW5UZXh0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaAppbmRleCAxZDExMmRjNjk4Mzk4MGJmZDZmNmI5N2Rm
NzgwMGZiZWQ2MzM4MTc1Li4zNGEzNDVjNzYzMGNjMzk2Mzc3NmRhYTE4N2NmZWE5M2Q1ZDQ3NjNi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaApAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw5
ICsyNyw5IEBACiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCiAKLSNpbXBvcnQgPHd0Zi9S
ZWZQdHIuaD4KKyNpbXBvcnQgIkZsb2F0UmVjdC5oIgorI2ltcG9ydCAiU2ltcGxlUmFuZ2UuaCIK
ICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbXBvcnQgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgogCiBPQkpDX0NMQVNTIEREQWN0aW9uQ29udGV4dDsKIE9CSkNfQ0xBU1MgTlNBcnJheTsKQEAg
LTM3LDMwICszNywzMiBAQCBPQkpDX0NMQVNTIE5TRGljdGlvbmFyeTsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGbG9hdFJl
Y3Q7CiBjbGFzcyBIaXRUZXN0UmVzdWx0OwotY2xhc3MgUmFuZ2U7CiAKLWVudW0gRGF0YURldGVj
dG9yVHlwZXMgewotICAgIERhdGFEZXRlY3RvclR5cGVOb25lID0gMCwKLSAgICBEYXRhRGV0ZWN0
b3JUeXBlUGhvbmVOdW1iZXIgPSAxIDw8IDAsCi0gICAgRGF0YURldGVjdG9yVHlwZUxpbmsgPSAx
IDw8IDEsCi0gICAgRGF0YURldGVjdG9yVHlwZUFkZHJlc3MgPSAxIDw8IDIsCi0gICAgRGF0YURl
dGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQgPSAxIDw8IDMsCi0gICAgRGF0YURldGVjdG9yVHlwZVRy
YWNraW5nTnVtYmVyID0gMSA8PCA0LAotICAgIERhdGFEZXRlY3RvclR5cGVGbGlnaHROdW1iZXIg
PSAxIDw8IDUsCi0gICAgRGF0YURldGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rpb24gPSAxIDw8IDYs
Ci0gICAgRGF0YURldGVjdG9yVHlwZUFsbCA9IFVMT05HX01BWAorLy8gRklYTUU6IFdvdWxkIGJl
IGJldHRlciB0byB1c2UgYW4gT3B0aW9uU2V0IGFuZCBwZXJoYXBzIHRvIHVzZSB1aW50OF90IGlu
c3RlYWQgb2YgdWludDMyX3QuCitlbnVtIGNsYXNzIERhdGFEZXRlY3RvclR5cGVzIDogdWludDMy
X3QgeworICAgIE5vbmUgPSAwLAorICAgIFBob25lTnVtYmVyID0gMSA8PCAwLAorICAgIExpbmsg
PSAxIDw8IDEsCisgICAgQWRkcmVzcyA9IDEgPDwgMiwKKyAgICBDYWxlbmRhckV2ZW50ID0gMSA8
PCAzLAorICAgIFRyYWNraW5nTnVtYmVyID0gMSA8PCA0LAorICAgIEZsaWdodE51bWJlciA9IDEg
PDwgNSwKKyAgICBMb29rdXBTdWdnZXN0aW9uID0gMSA8PCA2LAorfTsKKworc3RydWN0IERldGVj
dGVkSXRlbSB7CisgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dDsK
KyAgICBGbG9hdFJlY3QgYm91bmRpbmdCb3g7CisgICAgU2ltcGxlUmFuZ2UgcmFuZ2U7CiB9Owog
CiBjbGFzcyBEYXRhRGV0ZWN0aW9uIHsKIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCi0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0
ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmLCBGbG9hdFJlY3QmIGRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSk7
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE9wdGlvbmFsPERldGVjdGVkSXRlbT4gZGV0ZWN0
SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYpOwogI2VuZGlmCi0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMsIE5TRGljdGlvbmFy
eSAqY29udGV4dCk7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIE5TQXJyYXkgKmRldGVjdENv
bnRlbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgRGF0YURldGVjdG9yVHlwZXMsIE5TRGlj
dGlvbmFyeSAqY29udGV4dCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHZvaWQgcmVtb3Zl
RGF0YURldGVjdGVkTGlua3NJbkRvY3VtZW50KERvY3VtZW50Jik7CiAjaWYgUExBVEZPUk0oSU9T
X0ZBTUlMWSkKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgYm9vbCBjYW5CZVByZXNlbnRlZEJ5
RGF0YURldGVjdG9ycyhjb25zdCBVUkwmKTsKQEAgLTc3LDQgKzc5LDMgQEAgcHVibGljOgogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDQzOWMwMzNjZTIyYTM4NTE3ZmNiNzViNzAw
NmI1NmY2M2Y3NmYyY2QuLjJmYmVmNjEyNDI3ODNlZmIzYjA4MjA1MGE2ZDBkZDg2Yzk1MjQ0YmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMTcgQXBwbGUsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0zOCw3ICszOCw2IEBACiAjaW1wb3J0ICJIVE1MTmFtZXMuaCIKICNpbXBvcnQgIkhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCi0jaW1w
b3J0ICJOb2RlLmgiCiAjaW1wb3J0ICJOb2RlTGlzdC5oIgogI2ltcG9ydCAiTm9kZVRyYXZlcnNh
bC5oIgogI2ltcG9ydCAiUmFuZ2UuaCIKQEAgLTU2LDggKzU1LDcgQEAKICNpbXBvcnQgIkRhdGFE
ZXRlY3RvcnNDb3JlU29mdExpbmsuaCIKIAogI2lmIFBMQVRGT1JNKE1BQykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDAKLXRlbXBsYXRlIDw+Ci1zdHJ1Y3QgV1RG
OjpDRlR5cGVUcmFpdDxERFJlc3VsdFJlZj4gewordGVtcGxhdGU8PiBzdHJ1Y3QgV1RGOjpDRlR5
cGVUcmFpdDxERFJlc3VsdFJlZj4gewogICAgIHN0YXRpYyBpbmxpbmUgQ0ZUeXBlSUQgdHlwZUlE
KHZvaWQpIHsgcmV0dXJuIEREUmVzdWx0R2V0Q0ZUeXBlSUQoKTsgfQogfTsKICNlbmRpZgpAQCAt
NjgsMjUgKzY2LDI0IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKICNpZiBQTEFURk9S
TShNQUMpCiAKLXN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRlY3RJdGVtQXRQ
b3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24sIFJlZlB0cjxSYW5nZT4g
Y29udGV4dFJhbmdlLCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBSZWZQdHI8
UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKK3N0YXRpYyBPcHRpb25hbDxEZXRlY3RlZEl0ZW0+
IGRldGVjdEl0ZW0oY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBwb3NpdGlvbiwgY29uc3QgU2ltcGxl
UmFuZ2UmIGNvbnRleHRSYW5nZSkKIHsKLSAgICBhdXRvIHN0YXJ0ID0gY29udGV4dFJhbmdlLT5z
dGFydFBvc2l0aW9uKCk7Ci0gICAgaWYgKHN0YXJ0LmlzTnVsbCgpIHx8IHBvc2l0aW9uLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5n
ID0gcGxhaW5UZXh0KCpjb250ZXh0UmFuZ2UpOwotICAgIENGSW5kZXggaGl0TG9jYXRpb24gPSBj
aGFyYWN0ZXJDb3VudCh7ICptYWtlQm91bmRhcnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQ
b2ludChwb3NpdGlvbikgfSk7CisgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIFN0cmluZyBmdWxsUGxhaW5UZXh0U3RyaW5nID0gcGxh
aW5UZXh0KGNvbnRleHRSYW5nZSk7CisgICAgQ0ZJbmRleCBoaXRMb2NhdGlvbiA9IGNoYXJhY3Rl
ckNvdW50KHsgY29udGV4dFJhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24p
IH0pOwogCiAgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihERFNjYW5uZXJDcmVhdGUoRERTY2Fu
bmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7CiAgICAgYXV0byBzY2FuUXVlcnkgPSBhZG9w
dENGKEREU2NhblF1ZXJ5Q3JlYXRlRnJvbVN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBmdWxs
UGxhaW5UZXh0U3RyaW5nLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIENGUmFuZ2VNYWtlKDAsIGZ1
bGxQbGFpblRleHRTdHJpbmcubGVuZ3RoKCkpKSk7CiAKICAgICBpZiAoIUREU2Nhbm5lclNjYW5R
dWVyeShzY2FubmVyLmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQotICAgICAgICByZXR1cm4gbmls
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byByZXN1bHRzID0gYWRv
cHRDRihERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCksIEREU2Nh
bm5lckNvcHlSZXN1bHRzT3B0aW9uc05vT3ZlcmxhcCkpOwogCiAgICAgLy8gRmluZCB0aGUgRERS
ZXN1bHRSZWYgdGhhdCBpbnRlcnNlY3RzIHRoZSBoaXRUZXN0UmVzdWx0J3MgVmlzaWJsZVBvc2l0
aW9uLgogICAgIEREUmVzdWx0UmVmIG1haW5SZXN1bHQgPSBudWxscHRyOwotICAgIFJlZlB0cjxS
YW5nZT4gbWFpblJlc3VsdFJhbmdlOworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWluUmVz
dWx0UmFuZ2U7CiAgICAgQ0ZJbmRleCByZXN1bHRDb3VudCA9IENGQXJyYXlHZXRDb3VudChyZXN1
bHRzLmdldCgpKTsKICAgICBmb3IgKENGSW5kZXggaSA9IDA7IGkgPCByZXN1bHRDb3VudDsgaSsr
KSB7CiAjaWYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDE0MDAKQEAgLTk3
LDM5ICs5NCw0MCBAQCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0ZWN0SXRl
bUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uCiAgICAgICAgIENGUmFuZ2UgcmVz
dWx0UmFuZ2VJbkNvbnRleHQgPSBERFJlc3VsdEdldFJhbmdlKHJlc3VsdCk7CiAgICAgICAgIGlm
IChoaXRMb2NhdGlvbiA+PSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbiAmJiAoaGl0TG9j
YXRpb24gLSByZXN1bHRSYW5nZUluQ29udGV4dC5sb2NhdGlvbikgPCByZXN1bHRSYW5nZUluQ29u
dGV4dC5sZW5ndGgpIHsKICAgICAgICAgICAgIG1haW5SZXN1bHQgPSByZXN1bHQ7Ci0gICAgICAg
ICAgICBtYWluUmVzdWx0UmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJh
bmdlKCpjb250ZXh0UmFuZ2UsIHJlc3VsdFJhbmdlSW5Db250ZXh0KSk7CisgICAgICAgICAgICBt
YWluUmVzdWx0UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoY29udGV4dFJhbmdlLCByZXN1
bHRSYW5nZUluQ29udGV4dCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0K
IAogICAgIGlmICghbWFpblJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAotICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3du
ZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2UtPnN0
YXJ0LmRvY3VtZW50KCkudmlldygpOwogICAgIGlmICghdmlldykKLSAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gYWN0aW9uQ29udGV4
dCA9IGFkb3B0TlMoW2FsbG9jRERBY3Rpb25Db250ZXh0SW5zdGFuY2UoKSBpbml0XSk7CiAgICAg
W2FjdGlvbkNvbnRleHQgc2V0QWxsUmVzdWx0czpAWyAoX19icmlkZ2UgaWQpbWFpblJlc3VsdCBd
XTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRNYWluUmVzdWx0Om1haW5SZXN1bHRdOwogCi0gICAg
ZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2lu
Z0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKCptYWluUmVzdWx0UmFuZ2UpKSkpOwotICAgIGRldGVjdGVkRGF0YVJhbmdlID0gbWFpblJl
c3VsdFJhbmdlOwotCi0gICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7CisgICAgcmV0dXJuIHsgewor
ICAgICAgICBXVEZNb3ZlKGFjdGlvbkNvbnRleHQpLAorICAgICAgICB2aWV3LT5jb250ZW50c1Rv
V2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6
OmFic29sdXRlVGV4dFF1YWRzKCptYWluUmVzdWx0UmFuZ2UpKSkpLAorICAgICAgICAqbWFpblJl
c3VsdFJhbmdlLAorICAgIH0gfTsKIH0KIAotUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0
YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJl
c3VsdCYgaGl0VGVzdFJlc3VsdCwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
UmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCitPcHRpb25hbDxEZXRlY3RlZEl0ZW0+
IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRl
c3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQpCiB7CiAgICAgaWYgKCFEYXRhRGV0ZWN0b3JzTGlicmFy
eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKIAogICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
OwogICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgYXV0byByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7CiAg
ICAgaWYgKCFyZW5kZXJlcikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb247CiAgICAgUmVm
UHRyPFJhbmdlPiBjb250ZXh0UmFuZ2U7CkBAIC0xNDAsMjcgKzEzOCwyNiBAQCBSZXRhaW5QdHI8
RERBY3Rpb25Db250ZXh0PiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJl
c3VsdChjb25zdCBIaQogICAgICAgICAgICAgcG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobm9kZSk7CiAKICAgICAgICAgY29udGV4dFJhbmdlID0gcmFuZ2VFeHBhbmRlZEFy
b3VuZFBvc2l0aW9uQnlDaGFyYWN0ZXJzKHBvc2l0aW9uLCAyNTApOwotICAgICAgICBpZiAoIWNv
bnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIEZyYW1lKiBmcmFtZSA9IG5vZGUtPmRvY3VtZW50KCkuZnJhbWUoKTsKICAgICAgICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKIAogICAgICAgICBJbnRQb2ludCBmcmFtZVBvaW50ID0gaGl0VGVz
dFJlc3VsdC5yb3VuZGVkUG9pbnRJbklubmVyTm9kZUZyYW1lKCk7CiAgICAgICAgIGlmICghZnJh
bWUtPnJhbmdlRm9yUG9pbnQoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgVmlzaWJsZVBv
c2l0aW9uIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9p
bnQpOworICAgICAgICBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChm
cmFtZVBvaW50KTsKICAgICAgICAgaWYgKHBvc2l0aW9uLmlzTnVsbCgpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAg
ICAgIGNvbnRleHRSYW5nZSA9IGVuY2xvc2luZ1RleHRVbml0T2ZHcmFudWxhcml0eShwb3NpdGlv
biwgTGluZUdyYW51bGFyaXR5LCBEaXJlY3Rpb25Gb3J3YXJkKTsKLSAgICAgICAgaWYgKCFjb250
ZXh0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9CiAKLSAgICByZXR1
cm4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UocG9zaXRpb24sIGNvbnRleHRSYW5nZSwg
ZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIGRldGVjdGVkRGF0YVJhbmdlKTsKKyAgICBpZiAoIWNv
bnRleHRSYW5nZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIHJldHVybiBk
ZXRlY3RJdGVtKHBvc2l0aW9uLCAqY29udGV4dFJhbmdlKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRG
T1JNKE1BQykKQEAgLTIyMywyNSArMjIwLDMwIEBAIHN0YXRpYyBCT09MIHJlc3VsdElzVVJMKERE
UmVzdWx0UmVmIHJlc3VsdCkKICAgICByZXR1cm4gW3VybFR5cGVzIGNvbnRhaW5zT2JqZWN0OihO
U1N0cmluZyAqKXNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0VHlwZShyZXN1
bHQpXTsKIH0KIAorLy8gUG9vciBtYW4ncyBPcHRpb25TZXQuCitzdGF0aWMgYm9vbCBjb250YWlu
cyhEYXRhRGV0ZWN0b3JUeXBlcyB0eXBlcywgRGF0YURldGVjdG9yVHlwZXMgc2luZ2xlVHlwZSkK
K3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHR5cGVzKSAmIHN0YXRpY19jYXN0
PHVpbnQzMl90PihzaW5nbGVUeXBlKTsKK30KKwogc3RhdGljIE5TU3RyaW5nICpjb25zdHJ1Y3RV
UkxTdHJpbmdGb3JSZXN1bHQoRERSZXN1bHRSZWYgY3VycmVudFJlc3VsdCwgTlNTdHJpbmcgKnJl
c3VsdElkZW50aWZpZXIsIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSwgTlNUaW1lWm9uZSAqcmVmZXJl
bmNlVGltZVpvbmUsIERhdGFEZXRlY3RvclR5cGVzIGRldGVjdGlvblR5cGVzKQogewogICAgIGlm
ICghc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRIYXNQcm9wZXJ0aWVzKGN1cnJl
bnRSZXN1bHQsIEREUmVzdWx0UHJvcGVydHlQYXNzaXZlRGlzcGxheSkpCiAgICAgICAgIHJldHVy
biBuaWw7Ci0gICAgCi0gICAgRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uVHlwZXMgcGhv
bmVUeXBlcyA9IChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcikg
PyBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1bGFyIDogRERVUkxpZmllclBob25l
TnVtYmVyRGV0ZWN0aW9uTm9uZTsKLSAgICBERFJlc3VsdENhdGVnb3J5IGNhdGVnb3J5ID0gc29m
dExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRDYXRlZ29yeShjdXJyZW50UmVzdWx0
KTsKLSAgICBDRlN0cmluZ1JlZiB0eXBlID0gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERS
ZXN1bHRHZXRUeXBlKGN1cnJlbnRSZXN1bHQpOwotICAgIAotICAgIGlmICgoKGRldGVjdGlvblR5
cGVzICYgRGF0YURldGVjdG9yVHlwZUFkZHJlc3MpICYmIChERFJlc3VsdENhdGVnb3J5QWRkcmVz
cyA9PSBjYXRlZ29yeSkpCi0gICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0
b3JUeXBlVHJhY2tpbmdOdW1iZXIpICYmIChDRlN0cmluZ0NvbXBhcmUoZ2V0X0RhdGFEZXRlY3Rv
cnNDb3JlX0REQmluZGVyVHJhY2tpbmdOdW1iZXJLZXkoKSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFy
ZUVxdWFsVG8pKQotICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlw
ZUZsaWdodE51bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleSgpLCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykpCi0gICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlTG9v
a3VwU3VnZ2VzdGlvbikgJiYgKENGU3RyaW5nQ29tcGFyZShnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERCaW5kZXJQYXJzZWNTb3VyY2VLZXkoKSwgdHlwZSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8p
KQotICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25lTnVt
YmVyKSAmJiAoRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyID09IGNhdGVnb3J5KSkKLSAgICAg
ICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVMaW5rKSAmJiByZXN1bHRJ
c1VSTChjdXJyZW50UmVzdWx0KSkpIHsKLSAgICAgICAgCisKKyAgICBhdXRvIHBob25lVHlwZXMg
PSBjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0YURldGVjdG9yVHlwZXM6OlBob25lTnVtYmVy
KSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlmaWVyUGhv
bmVOdW1iZXJEZXRlY3Rpb25Ob25lOworICAgIGF1dG8gY2F0ZWdvcnkgPSBzb2Z0TGlua19EYXRh
RGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRSZXN1bHQpOworICAgIGF1
dG8gdHlwZSA9IHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0VHlwZShjdXJy
ZW50UmVzdWx0KTsKKworICAgIGlmICgoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRl
Y3RvclR5cGVzOjpBZGRyZXNzKSAmJiBERFJlc3VsdENhdGVnb3J5QWRkcmVzcyA9PSBjYXRlZ29y
eSkKKyAgICAgICAgfHwgKGNvbnRhaW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBl
czo6VHJhY2tpbmdOdW1iZXIpICYmIENGRXF1YWwoZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmlu
ZGVyVHJhY2tpbmdOdW1iZXJLZXkoKSwgdHlwZSkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRl
Y3Rpb25UeXBlcywgRGF0YURldGVjdG9yVHlwZXM6OkZsaWdodE51bWJlcikgJiYgQ0ZFcXVhbChn
ZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJGbGlnaHRJbmZvcm1hdGlvbktleSgpLCB0eXBl
KSkKKyAgICAgICAgfHwgKGNvbnRhaW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBl
czo6TG9va3VwU3VnZ2VzdGlvbikgJiYgQ0ZFcXVhbChnZXRfRGF0YURldGVjdG9yc0NvcmVfRERC
aW5kZXJQYXJzZWNTb3VyY2VLZXkoKSwgdHlwZSkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRl
Y3Rpb25UeXBlcywgRGF0YURldGVjdG9yVHlwZXM6OlBob25lTnVtYmVyKSAmJiBERFJlc3VsdENh
dGVnb3J5UGhvbmVOdW1iZXIgPT0gY2F0ZWdvcnkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRl
Y3Rpb25UeXBlcywgRGF0YURldGVjdG9yVHlwZXM6OkxpbmspICYmIHJlc3VsdElzVVJMKGN1cnJl
bnRSZXN1bHQpKSkgewogICAgICAgICByZXR1cm4gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVf
RERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwgcmVzdWx0SWRlbnRpZmllciwgcGhv
bmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGltZVpvbmUpOwogICAgIH0KLSAgICBp
ZiAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQpICYmIChE
RFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkpIHsKKyAgICBpZiAoY29u
dGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3RvclR5cGVzOjpDYWxlbmRhckV2ZW50KSAm
JiBERFJlc3VsdENhdGVnb3J5Q2FsZW5kYXJFdmVudCA9PSBjYXRlZ29yeSkgewogICAgICAgICBp
ZiAoIXNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0SXNQYXN0RGF0ZShjdXJyZW50
UmVzdWx0LCAoQ0ZEYXRlUmVmKXJlZmVyZW5jZURhdGUsIChDRlRpbWVab25lUmVmKXJlZmVyZW5j
ZVRpbWVab25lKSkKICAgICAgICAgICAgIHJldHVybiBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29y
ZV9ERFVSTFN0cmluZ0ZvclJlc3VsdChjdXJyZW50UmVzdWx0LCByZXN1bHRJZGVudGlmaWVyLCBw
aG9uZVR5cGVzLCByZWZlcmVuY2VEYXRlLCByZWZlcmVuY2VUaW1lWm9uZSk7CiAgICAgfQpAQCAt
NDQzLDI4ICs0NDUsMjQgQEAgdm9pZCBEYXRhRGV0ZWN0aW9uOjpyZW1vdmVEYXRhRGV0ZWN0ZWRM
aW5rc0luRG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgICAgICByZW1vdmVSZXN1bHRM
aW5rc0Zyb21BbmNob3IoYW5jaG9yLmdldCgpKTsKIH0KIAotTlNBcnJheSAqRGF0YURldGVjdGlv
bjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRh
RGV0ZWN0b3JUeXBlcyB0eXBlcywgTlNEaWN0aW9uYXJ5ICpjb250ZXh0KQorTlNBcnJheSAqRGF0
YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRl
eHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMgdHlwZXMsIE5TRGljdGlvbmFyeSAqY29udGV4dCkK
IHsKLSAgICBpZiAoIWNvbnRleHRSYW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLQotICAgIFJl
dGFpblB0cjxERFNjYW5uZXJSZWY+IHNjYW5uZXIgPSBhZG9wdENGKHNvZnRMaW5rX0RhdGFEZXRl
Y3RvcnNDb3JlX0REU2Nhbm5lckNyZWF0ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxw
dHIpKTsKLSAgICBSZXRhaW5QdHI8RERTY2FuUXVlcnlSZWY+IHNjYW5RdWVyeSA9IGFkb3B0Q0Yo
c29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FuUXVlcnlDcmVhdGUoTlVMTCkpOwotICAg
IGJ1aWxkUXVlcnkoc2NhblF1ZXJ5LmdldCgpLCAqY29udGV4dFJhbmdlKTsKKyAgICBhdXRvIHNj
YW5uZXIgPSBhZG9wdENGKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNyZWF0
ZShERFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKKyAgICBhdXRvIHNjYW5RdWVy
eSA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FuUXVlcnlDcmVhdGUo
TlVMTCkpOworICAgIGJ1aWxkUXVlcnkoc2NhblF1ZXJ5LmdldCgpLCBjb250ZXh0UmFuZ2UpOwog
ICAgIAotICAgIGlmICh0eXBlcyAmIERhdGFEZXRlY3RvclR5cGVMb29rdXBTdWdnZXN0aW9uKQor
ICAgIGlmIChjb250YWlucyh0eXBlcywgRGF0YURldGVjdG9yVHlwZXM6Okxvb2t1cFN1Z2dlc3Rp
b24pKQogICAgICAgICBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJFbmFibGVP
cHRpb25hbFNvdXJjZShzY2FubmVyLmdldCgpLCBERFNjYW5uZXJTb3VyY2VTcG90bGlnaHQsIHRy
dWUpOwogCiAgICAgLy8gRklYTUU6IHdlIHNob3VsZCBhZGQgYSB0aW1lb3V0IHRvIHRoaXMgY2Fs
bCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCB0YWtlIHRvbyBtdWNoIHRpbWUuCiAgICAgaWYgKCFz
b2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQo
KSwgc2NhblF1ZXJ5LmdldCgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJldGFpblB0
cjxDRkFycmF5UmVmPiBzY2FubmVyUmVzdWx0cyA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVj
dG9yc0NvcmVfRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBn
ZXRfRGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2
ZVVzZSgpIHwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzKSk7
CisgICAgYXV0byBzY2FubmVyUmVzdWx0cyA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9y
c0NvcmVfRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhzY2FubmVyLmdldCgpLCBnZXRf
RGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zRm9yUGFzc2l2ZVVz
ZSgpIHwgRERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zQ29hbGVzY2VTaWduYXR1cmVzKSk7CiAg
ICAgaWYgKCFzY2FubmVyUmVzdWx0cykKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIENGSW5k
ZXggcmVzdWx0Q291bnQgPSBDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJlc3VsdHMuZ2V0KCkpOwot
ICAgIGlmICghcmVzdWx0Q291bnQpCisgICAgaWYgKCFDRkFycmF5R2V0Q291bnQoc2Nhbm5lclJl
c3VsdHMuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgVmVjdG9yPFJldGFpblB0
cjxERFJlc3VsdFJlZj4+IGFsbFJlc3VsdHM7CkBAIC00NzYsNyArNDc0LDcgQEAgTlNBcnJheSAq
RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4
dFJhbmdlLCBEYXRhRGUKICAgICBmb3IgKGlkIHJlc3VsdE9iamVjdCBpbiAoTlNBcnJheSAqKXNj
YW5uZXJSZXN1bHRzLmdldCgpKSB7CiAgICAgICAgIEREUmVzdWx0UmVmIHJlc3VsdCA9IChERFJl
c3VsdFJlZilyZXN1bHRPYmplY3Q7CiAgICAgICAgIE5TSW5kZXhQYXRoICppbmRleFBhdGggPSBb
TlNJbmRleFBhdGggaW5kZXhQYXRoV2l0aEluZGV4OmN1cnJlbnRUb3BMZXZlbEluZGV4XTsKLSAg
ICAgICAgaWYgKENGU3RyaW5nQ29tcGFyZShzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJl
c3VsdEdldFR5cGUocmVzdWx0KSwgZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyU2lnbmF0
dXJlQmxvY2tLZXkoKSwgMCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pIHsKKyAgICAgICAgaWYgKENG
RXF1YWwoc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBlKHJlc3VsdCks
IGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9EREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5KCkpKSB7CiAg
ICAgICAgICAgICBOU0FycmF5ICpzdWJyZXN1bHRzID0gKE5TQXJyYXkgKilzb2Z0TGlua19EYXRh
RGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldFN1YlJlc3VsdHMocmVzdWx0KTsKICAgICAgICAgICAg
IAogICAgICAgICAgICAgZm9yIChOU1VJbnRlZ2VyIHN1YlJlc3VsdEluZGV4ID0gMCA7IHN1YlJl
c3VsdEluZGV4IDwgW3N1YnJlc3VsdHMgY291bnRdIDsgc3ViUmVzdWx0SW5kZXgrKykgewpAQCAt
NDkxLDcgKzQ4OSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJh
bmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAgICAgfQogCiAgICAgVmVj
dG9yPFZlY3RvcjxTaW1wbGVSYW5nZT4+IGFsbFJlc3VsdFJhbmdlczsKLSAgICBUZXh0SXRlcmF0
b3IgaXRlcmF0b3IoKmNvbnRleHRSYW5nZSk7CisgICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKGNv
bnRleHRSYW5nZSk7CiAgICAgQ0ZJbmRleCBpdGVyYXRvckNvdW50ID0gMDsKIAogICAgIC8vIEl0
ZXJhdGUgdGhyb3VnaCB0aGUgYXJyYXkgb2YgdGhlIGV4cGFuZGVkIHJlc3VsdHMgdG8gY3JlYXRl
IGEgdmVjdG9yIG9mIFJhbmdlIG9iamVjdHMgdGhhdCBpbmRpY2F0ZQpAQCAtNTM2LDE2ICs1MzQs
MTUgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRy
PFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGUKIAogICAgIGF1dG8gdHogPSBhZG9wdENGKENG
VGltZVpvbmVDb3B5RGVmYXVsdCgpKTsKICAgICBOU0RhdGUgKnJlZmVyZW5jZURhdGUgPSBbY29u
dGV4dCBvYmplY3RGb3JLZXk6Z2V0a0RhdGFEZXRlY3RvcnNSZWZlcmVuY2VEYXRlS2V5KCldID86
IFtOU0RhdGUgZGF0ZV07Ci0gICAgVGV4dCogbGFzdFRleHROb2RlVG9VcGRhdGUgPSBudWxscHRy
OworICAgIFJlZlB0cjxUZXh0PiBsYXN0VGV4dE5vZGVUb1VwZGF0ZTsKICAgICBTdHJpbmcgbGFz
dE5vZGVDb250ZW50OwotICAgIHNpemVfdCBjb250ZW50T2Zmc2V0ID0gMDsKKyAgICB1bnNpZ25l
ZCBjb250ZW50T2Zmc2V0ID0gMDsKICAgICBERFF1ZXJ5T2Zmc2V0IGxhc3RNb2RpZmllZFF1ZXJ5
T2Zmc2V0ID0geyAtMSwgMCB9OwotICAgIAorCiAgICAgLy8gRm9yIGVhY2ggcmVzdWx0IGFkZCB0
aGUgbGluay4KICAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSByZXN1bHRzIGlu
IHRoZSBzYW1lIHRleHQgbm9kZSwgdGhlIG5vZGUgaXMgb25seSBtb2RpZmllZCB3aGVuCiAgICAg
Ly8gd2UgYXJlIGFib3V0IHRvIHByb2Nlc3MgYSBkaWZmZXJlbnQgdGV4dCBub2RlLgotICAgIHJl
c3VsdENvdW50ID0gYWxsUmVzdWx0cy5zaXplKCk7Ci0gICAgCisgICAgQ0ZJbmRleCByZXN1bHRD
b3VudCA9IGFsbFJlc3VsdHMuc2l6ZSgpOwogICAgIGZvciAoQ0ZJbmRleCByZXN1bHRJbmRleCA9
IDA7IHJlc3VsdEluZGV4IDwgcmVzdWx0Q291bnQ7ICsrcmVzdWx0SW5kZXgpIHsKICAgICAgICAg
RERSZXN1bHRSZWYgY29yZVJlc3VsdCA9IGFsbFJlc3VsdHNbcmVzdWx0SW5kZXhdLmdldCgpOwog
ICAgICAgICBERFF1ZXJ5UmFuZ2UgcXVlcnlSYW5nZSA9IHNvZnRMaW5rX0RhdGFEZXRlY3RvcnND
b3JlX0REUmVzdWx0R2V0UXVlcnlSYW5nZUZvclVSTGlmaWNhdGlvbihjb3JlUmVzdWx0KTsKQEAg
LTU3OCw3ICs1NzUsNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5S
YW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogICAgICAgICAgICAgQVNT
RVJUKHJlc3VsdFJhbmdlcy5zaXplKCkgPT0gcmFuZ2VCb3VuZGFyaWVzLnNpemUoKSk7CiAgICAg
ICAgICAgICByZXN1bHRSYW5nZXMuc2hyaW5rKDApOyAvLyBLZWVwIGNhcGFjaXR5IGFzIHdlIGFy
ZSBnb2luZyB0byByZXBvcHVsYXRlIHRoZSBWZWN0b3IgcmlnaHQgYXdheSB3aXRoIHRoZSBzYW1l
IG51bWJlciBvZiBpdGVtcy4KICAgICAgICAgICAgIGZvciAoYXV0byYgcmFuZ2VCb3VuZGFyeSA6
IHJhbmdlQm91bmRhcmllcykKLSAgICAgICAgICAgICAgICByZXN1bHRSYW5nZXMudW5jaGVja2Vk
QXBwZW5kKFJhbmdlOjpjcmVhdGUoKnJhbmdlQm91bmRhcnkuZmlyc3QuZG9jdW1lbnQoKSwgcmFu
Z2VCb3VuZGFyeS5maXJzdCwgcmFuZ2VCb3VuZGFyeS5zZWNvbmQpKTsKKyAgICAgICAgICAgICAg
ICByZXN1bHRSYW5nZXMudW5jaGVja2VkQXBwZW5kKHsgKm1ha2VCb3VuZGFyeVBvaW50KHJhbmdl
Qm91bmRhcnkuZmlyc3QpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocmFuZ2VCb3VuZGFyeS5zZWNvbmQp
IH0pOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBsYXN0TW9kaWZpZWRRdWVyeU9mZnNl
dCA9IHF1ZXJ5UmFuZ2UuZW5kOwpAQCAtNjEyLDcgKzYwOSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRl
Y3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwg
RGF0YURlCiAKICAgICAgICAgICAgIC8vIENyZWF0ZSB0aGUgYWN0dWFsIGFuY2hvciBub2RlIGFu
ZCBpbnNlcnQgaXQgYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUuCiAgICAgICAgICAgICB0ZXh0Tm9k
ZURhdGEgPSBjdXJyZW50VGV4dE5vZGUuZGF0YSgpLnN1YnN0cmluZyhyYW5nZS5zdGFydC5vZmZz
ZXQsIHJhbmdlLmVuZC5vZmZzZXQgLSByYW5nZS5zdGFydC5vZmZzZXQpOwotICAgICAgICAgICAg
UmVmPFRleHQ+IG5ld1RleHROb2RlID0gVGV4dDo6Y3JlYXRlKGRvY3VtZW50LCB0ZXh0Tm9kZURh
dGEpOworICAgICAgICAgICAgYXV0byBuZXdUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShkb2N1bWVu
dCwgdGV4dE5vZGVEYXRhKTsKICAgICAgICAgICAgIHBhcmVudE5vZGUtPmluc2VydEJlZm9yZShu
ZXdUZXh0Tm9kZS5jb3B5UmVmKCksICZjdXJyZW50VGV4dE5vZGUpOwogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBSZWY8SFRNTEFuY2hvckVsZW1lbnQ+IGFuY2hvckVsZW1lbnQgPSBIVE1MQW5j
aG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50KTsKQEAgLTY1OSwxMyArNjU2LDEzIEBAIE5TQXJy
YXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNv
bnRleHRSYW5nZSwgRGF0YURlCiAKICAgICBpZiAobGFzdFRleHROb2RlVG9VcGRhdGUpCiAgICAg
ICAgIGxhc3RUZXh0Tm9kZVRvVXBkYXRlLT5zZXREYXRhKGxhc3ROb2RlQ29udGVudCk7Ci0gICAg
CisKICAgICByZXR1cm4gW2dldEREU2Nhbm5lclJlc3VsdENsYXNzKCkgcmVzdWx0c0Zyb21Db3Jl
UmVzdWx0czpzY2FubmVyUmVzdWx0cy5nZXQoKV07CiB9CiAKICNlbHNlCiAKLU5TQXJyYXkgKkRh
dGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mLCBEYXRhRGV0
ZWN0b3JUeXBlcywgTlNEaWN0aW9uYXJ5ICopCitOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRl
Y3RDb250ZW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIERhdGFEZXRlY3RvclR5cGVzLCBO
U0RpY3Rpb25hcnkgKikKIHsKICAgICByZXR1cm4gbmlsOwogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0KaW5kZXggODU4MDc4MTIxNDFkZTU2OTM1NDlkNDNl
MWE2NDhiNGVjODliOTZkYS4uZTVhOTRkNmY2MDBkZmQ5MzY4YmUxOTBiNzRkOWMwMDMzZDgxYzU5
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCkBAIC0y
MjUsNyArMjI1LDcgQEAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRWRpdG9yOjpkYXRhSW5SVEZGb3Jt
YXQoTlNBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcpCiAKIC8vIEZJWE1FOiBTaG91bGQgZ2l2ZSB0
aGlzIGZ1bmN0aW9uIGEgbmFtZSB0aGF0IG1ha2VzIGl0IGNsZWFyIGl0IGFkZHMgcmVzb3VyY2Vz
IHRvIHRoZSBkb2N1bWVudCBsb2FkZXIgYXMgYSBzaWRlIGVmZmVjdC4KIC8vIE9yIHJlZmFjdG9y
IHNvIGl0IGRvZXMgbm90IGRvIHRoYXQuCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9y
Ojp3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2Um
IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBh
c3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFs
bG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKICAgICBXZWJDb250ZW50UmVh
ZGVyIHJlYWRlcihtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCk7CiAgICAgcGFzdGVi
b2FyZC5yZWFkKHJlYWRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29j
b2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tCmluZGV4IGJiZmJjNjhlNmNmZDViOTU4OGVlYzJl
NjFiYTEzMTYzZGQ1NDhhZWIuLmQ3OTQ3ODQ2ZDU5ZTk4YWFmMGZiMmRiM2EwMGJhOTY2ZjQ2Zjcy
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJl
YWRlckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVu
dFJlYWRlckNvY29hLm1tCkBAIC02NzUsNyArNjc1LDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVy
OjpyZWFkUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkKICAgICBpZiAoIWFsbG93UGxhaW5U
ZXh0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFn
bWVudEZyb21UZXh0KGNvbnRleHQsIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKSk7CisgICAgYWRkRnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVh
dGVMaXZlUmFuZ2UoY29udGV4dCksIFt0ZXh0IHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKSk7CiAKICAgICBtYWRlRnJhZ21lbnRGcm9tUGxhaW5UZXh0ID0gdHJ1ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0VkaXRvck1hYy5tbQppbmRl
eCAyZjYxNmE5NDQ5YzBmZDljYWMzZDMxMGMzYTc3NzdlMGQ2ZGJjZmQzLi43NDAyNmJiMTY0OTAy
YjViZDVjNzE5YWM5OWViMTYzYWU0NjE0YmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tCkBAIC0xNDEsOCArMTQxLDkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2Rl
RnJvbVBhc3RlYm9hcmQoTm9kZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0g
ICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24o
bm9kZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBQb3NpdGlvbihub2RlLCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKSk7Ci0gICAgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyYW5nZS5nZXQoKSksIEZyYW1lU2VsZWN0
aW9uOjpEb05vdFNldEZvY3VzKTsKKworICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3Rp
bmdOb2RlQ29udGVudHMoKm5vZGUpOworICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1
cyk7CiAKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFzdGVib2FyZE5hbWUpOwogCkBAIC0x
NTcsOSArMTU4LDkgQEAgdm9pZCBFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQoTm9k
ZSogbm9kZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKICAgICBBTExPV19ERVBSRUNB
VEVEX0RFQ0xBUkFUSU9OU19FTkQKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgaWYg
KFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVi
b2FyZChwYXN0ZWJvYXJkLCByYW5nZS5nZXQoKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpKSB7Cisg
ICAgaWYgKGF1dG8gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQocGFzdGVib2Fy
ZCwgcmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KSkgewogICAgICAgICBtYXliZUNvcHlOb2Rl
QXR0cmlidXRlc1RvRnJhZ21lbnQoKm5vZGUsICpmcmFnbWVudCk7Ci0gICAgICAgIGlmIChzaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rp
b246OlBhc3RlZCkpCisgICAgICAgIGlmIChzaG91bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQs
IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKICAgICAgICAgICAgIHBhc3RlQXNGcmFnbWVudChmcmFnbWVudC5yZWxlYXNlTm9uTnVsbCgp
LCBjYW5TbWFydFJlcGxhY2VXaXRoUGFzdGVib2FyZChwYXN0ZWJvYXJkKSwgZmFsc2UsIE1haWxC
bG9ja3F1b3RlSGFuZGxpbmc6Oklnbm9yZUJsb2NrcXVvdGUpOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNWMxY2EzZWEwN2IxNDE5NjdkZTFhNTc4NTAx
YjBiYzQ5YzZiMDNjYy4uYjBiZThlNGNlN2NlY2E3MzUzYzQwNjUxNzQyMGU4Yjc4Njg3YTRmMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yNTk5LDEzICsyNTk5LDEw
IEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKCkKICAg
ICAgICAgICAgICAgICBGUkFNRUxPQURFUl9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFJlc291cmNl
TG9hZGluZywgImNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lOiBGaW5pc2hlZCBmcmFtZSBs
b2FkIik7CiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgICAgICAgICAgICAgIGF1dG8q
IGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBlTm9u
ZSAmJiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZG9jdW1lbnRF
bGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvY3VtZW50UmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQb3Np
dGlvbkluTm9kZShkb2N1bWVudEVsZW1lbnQpLCBsYXN0UG9zaXRpb25Jbk5vZGUoZG9jdW1lbnRF
bGVtZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLnNldERhdGFEZXRlY3Rp
b25SZXN1bHRzKERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGRvY3VtZW50UmFu
Z2UsIG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpLCBtX2NsaWVudC0+ZGF0
YURldGVjdGlvbkNvbnRleHQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fZnJh
bWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+
ZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKG1fZnJhbWUuZGF0YURldGVjdGlvblJlc3Vs
dHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9mcmFt
ZS5zZXR0aW5ncygpLmRhdGFEZXRlY3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZXM6Ok5v
bmUgJiYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS5zZXREYXRhRGV0
ZWN0aW9uUmVzdWx0cyhEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgbV9mcmFtZS5zZXR0aW5ncygpLmRh
dGFEZXRlY3RvclR5cGVzKCksIG1fY2xpZW50LT5kYXRhRGV0ZWN0aW9uQ29udGV4dCgpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKG1f
ZnJhbWUuZGF0YURldGVjdGlvblJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgfQogI2VuZGlm
CiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGIzMmZjYWRkOTA2OWEwNDZkYTliN2Jh
ODMwNDdiODIyY2YzNTA5ZmYuLmQ2NzU0OWI0NmE4MWYwMGE5MGYyZDU1Mzk0NzQ1Mjc0YzEwZjRh
OTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTIwNjYsNyArMjA2Niw3
IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjppbnZhbGlkYXRlQ2xpY2soKQogICAgIG1fY2xpY2tOb2Rl
ID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIE5vZGUqIHRhcmdldE5vZGVGb3JDbGlja0V2ZW50KE5v
ZGUqIG1vdXNlUHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJlbGVhc2VOb2RlKQorc3RhdGljIFJlZlB0
cjxOb2RlPiB0YXJnZXROb2RlRm9yQ2xpY2tFdmVudChOb2RlKiBtb3VzZVByZXNzTm9kZSwgTm9k
ZSogbW91c2VSZWxlYXNlTm9kZSkKIHsKICAgICBpZiAoIW1vdXNlUHJlc3NOb2RlIHx8ICFtb3Vz
ZVJlbGVhc2VOb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNzYsMTcgKzIwNzYs
MTggQEAgc3RhdGljIE5vZGUqIHRhcmdldE5vZGVGb3JDbGlja0V2ZW50KE5vZGUqIG1vdXNlUHJl
c3NOb2RlLCBOb2RlKiBtb3VzZVJlbGVhc2VOb2QKIAogICAgIC8vIElmIG1vdXNlUHJlc3NOb2Rl
IGFuZCBtb3VzZVJlbGVhc2VOb2RlIGRpZmZlciwgd2Ugc2hvdWxkIGZpcmUgdGhlIGV2ZW50IGF0
IHRoZWlyIGNvbW1vbiBhbmNlc3RvciBpZiB0aGVyZSBpcyBvbmUuCiAgICAgaWYgKCZtb3VzZVBy
ZXNzTm9kZS0+ZG9jdW1lbnQoKSA9PSAmbW91c2VSZWxlYXNlTm9kZS0+ZG9jdW1lbnQoKSkgewot
ICAgICAgICBpZiAoYXV0byogY29tbW9uQW5jZXN0b3IgPSBSYW5nZTo6Y29tbW9uQW5jZXN0b3JD
b250YWluZXIobW91c2VQcmVzc05vZGUsIG1vdXNlUmVsZWFzZU5vZGUpKQorICAgICAgICBpZiAo
YXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCptb3VzZVByZXNz
Tm9kZSwgKm1vdXNlUmVsZWFzZU5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGNvbW1vbkFuY2Vz
dG9yOwogICAgIH0KIAotICAgIEVsZW1lbnQqIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3QgPSBtb3Vz
ZVJlbGVhc2VOb2RlLT5zaGFkb3dIb3N0KCk7CisgICAgYXV0byBtb3VzZVJlbGVhc2VTaGFkb3dI
b3N0ID0gbW91c2VSZWxlYXNlTm9kZS0+c2hhZG93SG9zdCgpOwogICAgIGlmIChtb3VzZVJlbGVh
c2VTaGFkb3dIb3N0ICYmIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3QgPT0gbW91c2VQcmVzc05vZGUt
PnNoYWRvd0hvc3QoKSkgewogICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3BhdGNoIHRoZSBjbGlj
ayB0byB0aGUgc2hhZG93IHRyZWUgaG9zdCBlbGVtZW50IHRvIGdpdmUgbGlzdGVuZXJzIHRoZSBp
bGx1c2lvbiB0aGF0IHRoZQogICAgICAgICAvLyBzaGFkb20gdHJlZSBpcyBhIHNpbmdsZSBlbGVt
ZW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0byBnaXZlIHRoZSBpbGx1c2lvbiB0aGF0IDxpbnB1
dCB0eXBlPSJyYW5nZSI+CiAgICAgICAgIC8vIGlzIGEgc2luZ2xlIGVsZW1lbnQgZXZlbiB0aG91
Z2ggaXQgaXMgYSBjb21wb3NpdGlvbiBvZiBtdWx0aXBsZSBzaGFkb20gdHJlZSBlbGVtZW50cy4K
ICAgICAgICAgcmV0dXJuIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3Q7CiAgICAgfQorCiAgICAgcmV0
dXJuIG51bGxwdHI7CiB9CiAKQEAgLTIxNTksOCArMjE2MCw4IEBAIGJvb2wgRXZlbnRIYW5kbGVy
OjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBsYXRm
b3JtTW91CiAKICAgICBib29sIGNvbnRleHRNZW51RXZlbnQgPSBwbGF0Zm9ybU1vdXNlRXZlbnQu
YnV0dG9uKCkgPT0gUmlnaHRCdXR0b247CiAKLSAgICBOb2RlKiBub2RlVG9DbGljayA9IHRhcmdl
dE5vZGVGb3JDbGlja0V2ZW50KG1fY2xpY2tOb2RlLmdldCgpLCBtb3VzZUV2ZW50LnRhcmdldE5v
ZGUoKSk7Ci0gICAgYm9vbCBzd2FsbG93Q2xpY2tFdmVudCA9IG1fY2xpY2tDb3VudCA+IDAgJiYg
IWNvbnRleHRNZW51RXZlbnQgJiYgbm9kZVRvQ2xpY2sgJiYgIWRpc3BhdGNoTW91c2VFdmVudChl
dmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbm9kZVRvQ2xpY2ssIHRydWUsIG1fY2xpY2tDb3VudCwg
cGxhdGZvcm1Nb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBhdXRvIG5vZGVUb0NsaWNrID0gdGFyZ2V0
Tm9kZUZvckNsaWNrRXZlbnQobV9jbGlja05vZGUuZ2V0KCksIG1vdXNlRXZlbnQudGFyZ2V0Tm9k
ZSgpKTsKKyAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAmJiAh
Y29udGV4dE1lbnVFdmVudCAmJiBub2RlVG9DbGljayAmJiAhZGlzcGF0Y2hNb3VzZUV2ZW50KGV2
ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBub2RlVG9DbGljay5nZXQoKSwgdHJ1ZSwgbV9jbGlja0Nv
dW50LCBwbGF0Zm9ybU1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5ZXIp
IHsKICAgICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MueWFtbAppbmRleCBhODY3NmQ5N2MzY2FiOTczYzEzMjM1ZGY4OTZjMmRk
N2FkYWViNWFlLi4wYjQ5YWQ3M2U5ZjY1YWQ0OWVmYTRhNGM0MGI2MmIxN2EyMjI3ZDU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCkBAIC01NDEsNyArNTQxLDcgQEAgdXNlSW1hZ2VEb2N1
bWVudEZvclN1YmZyYW1lUERGOgogICBpbml0aWFsOiBmYWxzZQogZGF0YURldGVjdG9yVHlwZXM6
CiAgIHR5cGU6IERhdGFEZXRlY3RvclR5cGVzCi0gIGluaXRpYWw6IERhdGFEZXRlY3RvclR5cGVO
b25lCisgIGluaXRpYWw6IAogICBjb25kaXRpb25hbDogREFUQV9ERVRFQ1RJT04KIAogIyBBbGxv
dyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3IgYXBw
cm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
U2V0dGluZ3NCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCmluZGV4
IGFkZjhkYmFjZGRjYTdjYWQwZmI3MmNhMzE2OWMxMmRhOGI0ODUwNjcuLmFmMjI0OWRiMzBjMmNj
ZTZkZGQyZWMxMjk1MDJkYTlmZDBlN2ZlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3NCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2Uu
aApAQCAtNDMsMTUgKzQzLDEzIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CiAKLSNpZiBFTkFCTEUoREFUQV9E
RVRFQ1RJT04pCi0jaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgotI2VuZGlmCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEdlbmVyaWNGYW1pbGllczsKIGNsYXNzIFBhZ2U7CiAK
K2VudW0gY2xhc3MgRGF0YURldGVjdG9yVHlwZXMgOiB1aW50MzJfdDsKKwogZW51bSBFZGl0YWJs
ZUxpbmtCZWhhdmlvciB7CiAgICAgRWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAogICAgIEVk
aXRhYmxlTGlua0Fsd2F5c0xpdmUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Rl
eHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApp
bmRleCBiMTIxZDlkZGIzNWIxMTI3ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3Li4yZDZjZTgwOGJl
ZDY5M2MxZjcwMzNmZmM3ZTdhZDU0NmM1MGFhM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAKQEAgLTUyLDcgKzUyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1z
dGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiwgRnJhbWUm
LCBjb25zdCBSYW5nZSYsIEZsb2F0U2l6ZSBtYXJnaW4sIGJvb2wgaW5kaWNhdGVzQ3VycmVudFNl
bGVjdGlvbik7CitzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JE
YXRhJiwgRnJhbWUmLCBjb25zdCBTaW1wbGVSYW5nZSYsIEZsb2F0U2l6ZSBtYXJnaW4sIGJvb2wg
aW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbik7CiAKIFRleHRJbmRpY2F0b3I6OlRleHRJbmRpY2F0
b3IoY29uc3QgVGV4dEluZGljYXRvckRhdGEmIGRhdGEpCiAgICAgOiBtX2RhdGEoZGF0YSkKQEAg
LTY2LDMxICs2NiwyNyBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3JlYXRl
KGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFRleHRJbmRpY2F0b3IoZGF0YSkpOwogfQogCi1SZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4dElu
ZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZGljYXRv
ck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gcHJl
c2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKK1JlZlB0cjxUZXh0SW5kaWNh
dG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJh
bmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luKQog
ewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS5m
cmFtZSgpOwotCisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnRDb250YWlu
ZXIoKS5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKKyAgICBib29s
IGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSByYW5nZSA9PSBmcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb24g
b2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9wdGlv
blNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnM7
CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9uT3B0
aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRlbXBv
cmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdub3Jl
U2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVt
cG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5kaWYK
LSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwgeyBT
aW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CisgICAg
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgcmFuZ2Ug
fSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0YSBk
YXRhOwogCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9uVHJh
bnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgYm9vbCBpbmRpY2F0
ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVMaXZlUmFu
Z2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLQogICAgIGlmICgh
aW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGljYXRl
c0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA4LDI1
ICsxMDQsMTkgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRhdGlv
blRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9ucyA9
IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUsIGNy
ZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBtYXJnaW4sIHRydWUpKQorICAgIGlmICghaW5pdGlhbGl6
ZUluZGljYXRvcihkYXRhLCBmcmFtZSwgKnJhbmdlLCBtYXJnaW4sIHRydWUpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0YSk7
CiB9CiAKLXN0YXRpYyBib29sIGhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25zdCBS
YW5nZSYgcmFuZ2UpCitzdGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIE5vZGUqIHN0b3BOb2RlID0gcmFuZ2Uu
cGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7
IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkgewot
ICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVuZGVy
ZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCghcmVuZGVyZXItPmlzSW5s
aW5lKCkgfHwgcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkgJiYgcmFuZ2UuaW50ZXJzZWN0c05vZGUo
Km5vZGUpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQorICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVy
c2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5k
ZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+aXNJbmxpbmUoKSB8
fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTg0LDU5ICsxNzQsNDkgQEAgc3RhdGlj
IGJvb2wgdGFrZVNuYXBzaG90cyhUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1l
LCBJbnRSZWN0IHNuYXBzaG8KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLXN0YXRpYyB2
b2lkIGdldFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UmVjdD4mIHJlc3VsdGlu
Z1JlY3RzLCBjb25zdCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gc2Vs
ZWN0aW9uUmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIFZlY3RvcjxTZWxl
Y3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+
IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2VJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAgIHJh
bmdlLmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0c0ZvclJhbmdlKTsKLSAgICBm
b3IgKGF1dG8gc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpCi0gICAgICAg
IHJlc3VsdGluZ1JlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7CisgICAgVmVjdG9y
PFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0cyk7CisgICAgVmVjdG9yPEZs
b2F0UmVjdD4gcmVjdHM7CisgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9u
UmVjdHMpCisgICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7CisgICAg
cmV0dXJuIHJlY3RzOwogfQogCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgc3R5bGVDb250YWluc0Nv
bXBsZXhCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBpZiAoc3R5
bGUuaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN0eWxl
Lmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChz
dHlsZS5oYXNCYWNrZHJvcEZpbHRlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUuaGFzQmxlbmRNb2RlKCkgfHwgc3R5bGUuaGFz
QmFja2dyb3VuZEltYWdlKCkgfHwgc3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKTsKIH0KIAotc3Rh
dGljIEhhc2hTZXQ8Q29sb3I+IGVzdGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UpCitzdGF0aWMgSGFzaFNldDxDb2xvcj4gZXN0aW1hdGVkVGV4dENvbG9yc0ZvclJh
bmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0PENvbG9yPiBjb2xv
cnM7CiAgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3IuYXRF
bmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1dG8qIG5vZGUgPSBpdGVyYXRv
ci5ub2RlKCk7Ci0gICAgICAgIGlmICghaXM8VGV4dD4obm9kZSkgfHwgIWlzPFJlbmRlclRleHQ+
KG5vZGUtPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgY29s
b3JzLmFkZChub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbG9yKCkpOworICAgICAgICBhdXRv
IHJlbmRlcmVyID0gaXRlcmF0b3Iubm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICBpZiAoaXM8
UmVuZGVyVGV4dD4ocmVuZGVyZXIpKQorICAgICAgICAgICAgY29sb3JzLmFkZChyZW5kZXJlci0+
c3R5bGUoKS5jb2xvcigpKTsKICAgICB9CiAgICAgcmV0dXJuIGNvbG9yczsKIH0KLSAgICAKLXN0
YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZShjb25zdCBSYW5nZSYg
cmFuZ2UpCisKK3N0YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlLmFic29sdXRlQm91
bmRpbmdSZWN0KHsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVC
b3VuZGluZ1JlY3QoewogICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3Bl
Y3RDbGlwcGluZywKICAgICAgICAgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VWaXNp
YmxlQm91bmRzLAogICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9yZVRp
bnlSZWN0cywKICAgICB9KTsKIH0KIAotc3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRD
b2xvckZvclJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQorc3Rh
dGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQogewogICAgIGF1dG8gZXN0aW1hdGVkQmFj
a2dyb3VuZENvbG9yID0gZnJhbWUudmlldygpID8gZnJhbWUudmlldygpLT5kb2N1bWVudEJhY2tn
cm91bmRDb2xvcigpIDogQ29sb3I6OnRyYW5zcGFyZW50OwogCiAgICAgUmVuZGVyRWxlbWVudCog
cmVuZGVyZXIgPSBudWxscHRyOwotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSByYW5nZS5jb21t
b25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25J
bmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWlu
ZXIpOwogICAgIHdoaWxlIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8UmVuZGVy
RWxlbWVudD4oY29tbW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICByZW5k
ZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigp
KTsKQEAgLTI5MSwxNyArMjcxLDE2IEBAIHN0YXRpYyBib29sIGhhc0FueUlsbGVnaWJsZUNvbG9y
cyhUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgY29uc3QgQ29sb3ImIGJhY2tncm91CiAgICAgcmV0
dXJuICFoYXNPbmx5TGVnaWJsZVRleHRDb2xvcnMgfHwgdGV4dENvbG9ycy5pc0VtcHR5KCk7CiB9
CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFJhbmdlJiBy
YW5nZSkKK3N0YXRpYyBib29sIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvKiBzdG9wID0gcmFuZ2UucGFzdExhc3ROb2RlKCk7
Ci0gICAgZm9yIChhdXRvKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgJiYgbm9kZSAh
PSBzdG9wOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgaWYg
KCFpczxSZW5kZXJUZXh0Pihub2RlLT5yZW5kZXJlcigpKSkKKyAgICBmb3IgKGF1dG8mIG5vZGUg
OiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJUZXh0
Pihub2RlLnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAg
ICByZXR1cm4gcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlKS5zdHJpcFdoaXRl
U3BhY2UoKS5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3Io
VGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuZ2UmIHJhbmdl
LCBGbG9hdFNpemUgbWFyZ2luLCBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pCitzdGF0
aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFt
ZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmxvYXRTaXplIG1hcmdpbiwgYm9v
bCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKQogewogICAgIGlmIChhdXRvKiBkb2N1bWVudCA9
IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQ
ZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTMxMiwyMCArMjkxLDE3IEBAIHN0YXRpYyBib29sIGlu
aXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwg
Y29uc3QgUmFuCiAgICAgICAgIHRyZWF0UmFuZ2VBc0NvbXBsZXhEdWVUb0lsbGVnaWJsZVRleHRD
b2xvcnMgPSBoYXNBbnlJbGxlZ2libGVDb2xvcnMoZGF0YSwgZGF0YS5lc3RpbWF0ZWRCYWNrZ3Jv
dW5kQ29sb3IsIGVzdGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShyYW5nZSkpOwogICAgIH0KIAot
ICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0czsKLQogICAgIC8vIEZJWE1FICgxMzg4ODgp
OiBJZGVhbGx5IHdlIHdvdWxkbid0IHJlbW92ZSB0aGUgbWFyZ2luIGluIHRoaXMgY2FzZSwgYnV0
IHdlIG5lZWQgdG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgaW5kaWNhdG9yIGFuZCBpbmRpY2F0
b3Itd2l0aC1oaWdobGlnaHQgb3ZlcmxhcCBwcmVjaXNlbHksIGFuZAogICAgIC8vIHdlIGNhbid0
IGFkZCBhIG1hcmdpbiB0byB0aGUgaW5kaWNhdG9yLXdpdGgtaGlnaGxpZ2h0LgogICAgIGlmIChp
bmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uICYmICEoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRv
ck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbikpCiAgICAgICAgIG1h
cmdpbiA9IEZsb2F0U2l6ZSgpOwogCi0gICAgRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVI
ZWlnaHQgdGV4dFJlY3RIZWlnaHQgPSAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9wdGlv
blRpZ2h0bHlGaXRDb250ZW50KSA/IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0
OjpUZXh0SGVpZ2h0IDogRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVj
dGlvbkhlaWdodDsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CiAKICAgICBib29s
IHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgPSBkYXRh
Lm9wdGlvbnMgJiBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlczsKICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRB
bGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChy
YW5nZSkpIHsKLSAgICAgICAgYXV0byBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IG1ha2VSZWZQ
dHIocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7Ci0gICAgICAgIGlmIChhdXRvKiBj
b250YWluZXJSZW5kZXJlciA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLT5yZW5kZXJlcigpKSB7
CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lciktPnJlbmRl
cmVyKCkpIHsKICAgICAgICAgICAgIGRhdGEub3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9u
UGFpbnRBbGxDb250ZW50OwogICAgICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWluZXJS
ZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KQEAgLTMzMywx
NSArMzA5LDE1IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRv
ckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuCiAgICAgICAgIGRhdGEub3B0aW9u
cyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50OwogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiAgICAgZWxzZSBpZiAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9wdGlv
blVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcpCi0gICAgICAgIGdldFNlbGVjdGlvblJlY3RzRm9y
UmFuZ2UodGV4dFJlY3RzLCByYW5nZSk7CisgICAgICAgIHRleHRSZWN0cyA9IHNlbGVjdGlvblJl
Y3RzKHJhbmdlKTsKICNlbmRpZgogICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8SW50UmVjdD4g
YWJzb2x1dGVUZXh0UmVjdHM7Ci0gICAgICAgIHJhbmdlLmFic29sdXRlVGV4dFJlY3RzKGFic29s
dXRlVGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCA9PSBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3Rh
bmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0LCBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6
OlJlc3BlY3RDbGlwcGluZyk7Ci0KLSAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoYWJzb2x1dGVUZXh0UmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiByZWN0
IDogYWJzb2x1dGVUZXh0UmVjdHMpCi0gICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2VkQXBw
ZW5kKHJlY3QpOworICAgICAgICBhdXRvIHRleHRSZWN0SGVpZ2h0ID0gKGRhdGEub3B0aW9ucyAm
IFRleHRJbmRpY2F0b3JPcHRpb25UaWdodGx5Rml0Q29udGVudCkgPyBGcmFtZVNlbGVjdGlvbjo6
VGV4dFJlY3RhbmdsZUhlaWdodDo6VGV4dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVj
dGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQ7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0PiBp
bnRSZWN0czsKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVUZXh0UmVj
dHMoaW50UmVjdHMsIHRleHRSZWN0SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFu
Z2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6
UmVzcGVjdENsaXBwaW5nKTsKKyAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoaW50UmVjdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbnRSZWN0IDogaW50UmVj
dHMpCisgICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2VkQXBwZW5kKGludFJlY3QpOwogICAg
IH0KIAogICAgIGlmICh0ZXh0UmVjdHMuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRp
Y2F0b3IuaAppbmRleCA2ZjMwODg0ZmMyODc5N2YxODg3OGY2OTFhMTg5ZTk1ODRlYzZmOWY4Li40
MTE3M2FmZDk3ODU2MDEyY2FjYzljN2EwNzdhODY5YjUyNDQxMDExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuaApAQCAtMzQsNyArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIEZyYW1lOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmFuZ2U7CisKK3N0
cnVjdCBTaW1wbGVSYW5nZTsKIAogLy8gRklYTUU6IE1vdmUgUHJlc2VudGF0aW9uVHJhbnNpdGlv
biB0byBUZXh0SW5kaWNhdG9yV2luZG93LCBiZWNhdXNlIGl0J3MgYWJvdXQgcHJlc2VudGF0aW9u
LgogZW51bSBjbGFzcyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiA6IHVpbnQ4
X3QgewpAQCAtMTIzLDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHN0
YXRpYyBSZWY8VGV4dEluZGljYXRvcj4gY3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJik7
CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVX
aXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYsIFRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5k
aWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbiA9IEZsb2F0U2l6
ZShkZWZhdWx0SG9yaXpvbnRhbE1hcmdpbiwgZGVmYXVsdFZlcnRpY2FsTWFyZ2luKSk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRoUmFu
Z2UoY29uc3QgUmFuZ2UmLCBUZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4gPSBGbG9hdFNpemUoZGVmYXVsdEhv
cml6b250YWxNYXJnaW4sIGRlZmF1bHRWZXJ0aWNhbE1hcmdpbikpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHN0YXRpYyBSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNp
bXBsZVJhbmdlJiwgVGV4dEluZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luID0gRmxvYXRTaXplKGRlZmF1bHRIb3Jpem9u
dGFsTWFyZ2luLCBkZWZhdWx0VmVydGljYWxNYXJnaW4pKTsKIAogICAgIFdFQkNPUkVfRVhQT1JU
IH5UZXh0SW5kaWNhdG9yKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Nl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAppbmRleCBmNGU0YjVlZTI4OTIxN2RmY2FhMWIwZGYz
MmRkMjAzNDNmZjA5MThlLi5mNTA4MmZkZjVjZDExYTA0MTQ0ZjkwMDUyN2U3ZWZmNTVmNTU2YTMz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlci5oCkBAIC01NSwxNCArNTUsMTQgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBIaWdobGln
aHQgOiBwdWJsaWMgUmVmQ291bnRlZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5ZXJD
bGllbnQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOwogICAgIHB1
YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclNlbGVjdGlvbihT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiwgUmVm
PFJhbmdlPiYmKTsKLSAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclRlbGVw
aG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxp
Z2h0UmVmPiwgUmVmPFJhbmdlPiYmKTsKKyAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNy
ZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERE
SGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKKyAgICAgICAgc3RhdGljIFJlZjxIaWdo
bGlnaHQ+IGNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
JiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKICAgICAgICAg
fkhpZ2hsaWdodCgpOwogCiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgICAgIERE
SGlnaGxpZ2h0UmVmIGRkSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdodC5n
ZXQoKTsgfQotICAgICAgICBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlLmdl
dCgpOyB9CisgICAgICAgIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmFuZ2U7IH0KICAgICAgICAgR3JhcGhpY3NMYXllciYgbGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7IH0KIAogICAgICAgICBlbnVtIHsKQEAgLTc4LDcgKzc4
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdodFJl
Zik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYsIFR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFJlZjxSYW5nZT4mJik7
CisgICAgICAgIEhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwgUmV0
YWluUHRyPERESGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKIAogICAgICAgICAvLyBH
cmFwaGljc0xheWVyQ2xpZW50CiAgICAgICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChjb25z
dCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6CiAK
ICAgICAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciogbV9jb250cm9sbGVyOwogICAgICAg
ICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fZGRIaWdobGlnaHQ7Ci0gICAgICAgIFJlZjxS
YW5nZT4gbV9yYW5nZTsKKyAgICAgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKICAgICAgICAgUmVm
PEdyYXBoaWNzTGF5ZXI+IG1fZ3JhcGhpY3NMYXllcjsKICAgICAgICAgVHlwZSBtX3R5cGU7CiAg
ICAgfTsKQEAgLTEyNiw5ICsxMjYsOSBAQCBwcml2YXRlOgogICAgIFNlY29uZHMgcmVtYWluaW5n
VGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bihIaWdobGlnaHQqKSBjb25zdDsKICAgICB2
b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoKTsKIAotICAgIHN0YXRpYyBi
b29sIGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3QgSGln
aGxpZ2h0KiBiKTsKKyAgICBzdGF0aWMgYm9vbCBoaWdobGlnaHRzQXJlRXF1aXZhbGVudChjb25z
dCBIaWdobGlnaHQqLCBjb25zdCBIaWdobGlnaHQqKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8UmFu
Z2U+PiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKKyAgICBWZWN0b3I8
U2ltcGxlUmFuZ2U+IHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOwogCiAg
ICAgdm9pZCBkaWRDcmVhdGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CiAgICAgdm9pZCB3aWxsRGVz
dHJveUhpZ2hsaWdodChIaWdobGlnaHQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IGNkY2JhMmVkM2IwYWY0ZTMy
Zjc2MDQzNzk3NmE4ZTA0YzRiODNlZmMuLjJlZmM0MWUzZDQyNzMyNjU5MjdhZGU1YjhiYmE5NmE3
NzEyMzY5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNP
dmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTUsMTcgKzU1LDE3IEBAIGNvbnN0IGZsb2F0IGhpZ2hs
aWdodEZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1SZWY8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGln
aGxpZ2h0LCBSZWY8UmFuZ2U+JiYgcmFuZ2UpCitSZWY8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0
ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRh
aW5QdHI8RERIaWdobGlnaHRSZWY+JiYgZGRIaWdobGlnaHQsIFNpbXBsZVJhbmdlJiYgcmFuZ2Up
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhpZ2hs
aWdodDo6U2VsZWN0aW9uVHlwZSwgZGRIaWdobGlnaHQsIFdURk1vdmUocmFuZ2UpKSk7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhpZ2hsaWdodDo6U2Vs
ZWN0aW9uVHlwZSwgV1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUocmFuZ2UpKSk7CiB9CiAK
LVJlZjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4g
ZGRIaWdobGlnaHQsIFJlZjxSYW5nZT4mJiByYW5nZSkKK1JlZjxTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6
Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRy
b2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxlUmFu
Z2UmJiByYW5nZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29udHJv
bGxlciwgSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlLCBkZEhpZ2hsaWdodCwgV1RGTW92
ZShyYW5nZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29udHJvbGxl
ciwgSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlLCBXVEZNb3ZlKGRkSGlnaGxpZ2h0KSwg
V1RGTW92ZShyYW5nZSkpKTsKIH0KIAotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxp
Z2h0OjpIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlw
ZSB0eXBlLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBSZWY8V2ViQ29y
ZTo6UmFuZ2U+JiYgcmFuZ2UpCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6
OkhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBUeXBlIHR5
cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxlUmFuZ2Um
JiByYW5nZSkKICAgICA6IG1fY29udHJvbGxlcigmY29udHJvbGxlcikKICAgICAsIG1fcmFuZ2Uo
V1RGTW92ZShyYW5nZSkpCiAgICAgLCBtX2dyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllcjo6Y3Jl
YXRlKGNvbnRyb2xsZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJGYWN0
b3J5KCksICp0aGlzKSkKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OnJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0OjpU
eQogCiB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gcGhvbmVOdW1iZXJSYW5nZXM7
CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBwaG9uZU51bWJlclJhbmdlczsKICAgICBmb3IgKEZy
YW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkKICAgICAgICAgcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kVmVjdG9yKGZy
YW1lLT5lZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygpKTsKIApAQCAtNDky
LDI2ICs0OTIsMjUgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25l
TnVtYmVySGlnaGxpZ2h0cygpCiAKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcGhvbmVOdW1iZXJS
YW5nZXMpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWFrZXMgYSBiaWcgcmVjdCBpZiB0aGUg
cmFuZ2UgZXh0ZW5kcyBmcm9tIHRoZSBlbmQgb2Ygb25lIGxpbmUgdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBuZXh0LiBIYW5kbGUgdGhhdCBjYXNlIGJldHRlcj8KLSAgICAgICAgYXV0byByZWN0ID0gZW5j
bG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMoKnJhbmdlKSkpOworICAgICAgICBhdXRvIHJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0
KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5n
ZSkpKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29vcmRp
bmF0ZSBzcGFjZS4KICAgICAgICAgLy8gRklYTUU6IEl0J3MgYSBsaXR0bGUgY3JhenkgdG8gY2Fs
bCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVuIHdpbmRvd1RvQ29udGVudHMgaW4gb3JkZXIgdG8g
Z2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAvLyBXZSBzaG91bGQgY29u
c2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNvbnRl
bnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCiAgICAg
ICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEgdG9w
Q29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KLSAgICAgICAgYXV0byogdmlld0ZvclJh
bmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8qIHZpZXdG
b3JSYW5nZSA9IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAoIXZp
ZXdGb3JSYW5nZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJlY3Quc2V0TG9j
YXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29udGVu
dHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7CiAKICAgICAgICAgQ0dSZWN0IGNnUmVjdCA9
IHJlY3Q7Ci0gICAgICAgIAogI2lmIEhBVkUoRERfSElHSExJR0hUX0NSRUFURV9XSVRIX1NDQUxF
KQotICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRvcHRD
RihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFu
ZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250
ZW50UmVjdCgpLCBEREhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0
eWxlU3RhbmRhcmRJY29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8s
IFlFUywgMCkpOworICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdo
dENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihu
dWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBE
REhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJ
Y29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUywgMCkpOwog
I2Vsc2UKLSAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFk
b3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5k
RGlyZWN0aW9uKG51bGxwdHIsICZjZ1JlY3QsIDEsIG1haW5GcmFtZVZpZXcudmlzaWJsZUNvbnRl
bnRSZWN0KCksIERESGlnaGxpZ2h0U3R5bGVCdWJibGVTdGFuZGFyZCB8IERESGlnaGxpZ2h0U3R5
bGVTdGFuZGFyZEljb25BcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywg
WUVTKSk7CisgICAgICAgIGF1dG8gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3Jl
YXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCAm
Y2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hsaWdo
dFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cs
IFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAg
ICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBo
b25lTnVtYmVyKCp0aGlzLCBkZEhpZ2hsaWdodCwgcmFuZ2UucmVsZWFzZU5vbk51bGwoKSkpOwor
ICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRl
bGVwaG9uZU51bWJlcigqdGhpcywgV1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUocmFuZ2Up
KSk7CiAgICAgfQogCiAgICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1aXZh
bGVudEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUZWxlcGhv
bmVOdW1iZXJUeXBlKTsKQEAgLTU0NCwxNyArNTQzLDE3IEBAIHZvaWQgU2VydmljZXNPdmVybGF5
Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogICAgICAgICBmb3IgKGF1dG8m
IHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cykgewogICAgICAgICAgICAgSW50UmVjdCBj
dXJyZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlY3QpOwogICAgICAgICAgICAgY3VycmVudFJl
Y3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFu
Z2UtPmNvbnRlbnRzVG9XaW5kb3coY3VycmVudFJlY3QubG9jYXRpb24oKSkpKTsKLSAgICAgICAg
ICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpY3VycmVudFJlY3QpOworICAgICAgICAgICAgY2dS
ZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjZ1Jl
Y3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFpbkZy
YW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAjaWYgSEFWRShERF9ISUdITElHSFRfQ1JF
QVRFX1dJVEhfU0NBTEUpCi0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRk
SGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJl
Y3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNn
UmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBE
REhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0dG9u
U2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTLCAwKSk7
CisgICAgICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0
ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRy
LCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGln
aHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBE
REhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25O
YXR1cmFsLCBOTywgWUVTLCAwKSk7CiAjZWxzZQotICAgICAgICAgICAgUmV0YWluUHRyPERESGln
aGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVj
dHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMuYmVn
aW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlQnViYmxl
Tm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGlnaGxpZ2h0U3R5
bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZ
RVMpKTsKKyAgICAgICAgICAgIGF1dG8gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0
Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRy
LCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGln
aHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBE
REhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25O
YXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhpZ2hs
aWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hsaWdo
dCwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKTsKKyAgICAgICAgICAgIG5ld1Bv
dGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlz
LCBXVEZNb3ZlKGRkSGlnaGxpZ2h0KSwgV1RGTW92ZSgqc2VsZWN0aW9uUmFuZ2UpKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTYwNyw3ICs2MDYsNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCiAgICAgbV9wYWdlLnBhZ2VPdmVybGF5
Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKG92ZXJsYXkpLCBQYWdlT3Zl
cmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+PiBT
ZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2Vk
RnJhbWUoKQorVmVjdG9yPFNpbXBsZVJhbmdlPiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0
ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKQogewogICAgIHJldHVybiBtX3Bh
Z2UuZm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZWRpdG9yKCkuZGV0ZWN0
ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsKIH0KQEAgLTYxOCw3ICs2MTcsNyBAQCBib29sIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhp
Z2hsaWdodCogYSwgY29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIWEgfHwgIWIp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYS0+dHlwZSgpID09IGItPnR5cGUo
KSAmJiBhcmVSYW5nZXNFcXVhbCgmYS0+cmFuZ2UoKSwgJmItPnJhbmdlKCkpOworICAgIHJldHVy
biBhLT50eXBlKCkgPT0gYi0+dHlwZSgpICYmIGEtPnJhbmdlKCkgPT0gYi0+cmFuZ2UoKTsKIH0K
IAogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlv
bkhpZ2hsaWdodChIaWdobGlnaHQmIHNlbGVjdGlvbkhpZ2hsaWdodCkKQEAgLTYzMSw3ICs2MzAs
NyBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0gICAg
ICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJlclR5
cGUgJiYgaGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0
aW9uUmFuZ2UpKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdodDo6
VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGlnaGxpZ2h0LT5yYW5nZSgp
KS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAgICAg
ICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9CiAKQEAgLTc4NywxMSArNzg2LDExIEBA
IHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2soY29uc3QgSW50UG9p
bnQmIGNsaWNrUG9pbnQsIEhpZ2hsaWdoCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVjdGVk
VGVsZXBob25lTnVtYmVyczsKICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJlc2Vy
dmVDYXBhY2l0eSh0ZWxlcGhvbmVOdW1iZXJSYW5nZXMuc2l6ZSgpKTsKICAgICAgICAgZm9yIChh
dXRvJiByYW5nZSA6IHRlbGVwaG9uZU51bWJlclJhbmdlcykKLSAgICAgICAgICAgIHNlbGVjdGVk
VGVsZXBob25lTnVtYmVycy5hcHBlbmQocmFuZ2UtPnRleHQoKSk7CisgICAgICAgICAgICBzZWxl
Y3RlZFRlbGVwaG9uZU51bWJlcnMuYXBwZW5kKHBsYWluVGV4dChyYW5nZSkpOwogCiAgICAgICAg
IG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2sobV9w
YWdlLmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigpLCBz
ZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMsIHdpbmRvd1BvaW50KTsKICAgICB9IGVsc2UgaWYgKGhp
Z2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKQotICAgICAg
ICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2soaGln
aGxpZ2h0LnJhbmdlKCkudGV4dCgpLCB3aW5kb3dQb2ludCk7CisgICAgICAgIG1fcGFnZS5jaHJv
bWUoKS5jbGllbnQoKS5oYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhwbGFpblRleHQoaGlnaGxp
Z2h0LnJhbmdlKCkpLCB3aW5kb3dQb2ludCk7CiB9CiAKIEZyYW1lJiBTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjptYWluRnJhbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNTAyNzk5MGNlNTVlNDYxYjJkZDgyYjljMzI5ZTlkOWEz
MmY4MGU5Yi4uMjFmNjg4NGNjNjU5MDMyN2Y3YTNhZjQ2ZWY3ZjE2NTY1ZDgyZGQ3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC00MCw2ICs0MCw3
IEBACiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2ltcG9y
dCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZVJhbmdlLmgiCiAjaW1wb3J0ICJTdHJpbmdUcnVu
Y2F0b3IuaCIKICNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIlRleHRSdW4uaCIK
QEAgLTEzNSw4ICsxMzYsOCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhF
bGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZwogCiAgICAgQ0dSZWN0
IGltYWdlUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgdGV4dFdpZHRoICsgMiAqIGRyYWdJbWFnZVBh
ZGRpbmcsIHRleHRIZWlnaHQgKyAyICogZHJhZ0ltYWdlUGFkZGluZyk7CiAKLSAgICBSZXRhaW5Q
dHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxsb2NV
SUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVjdC5z
aXplXSk7Ci0gICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFjdGlv
bnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewor
ICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdlUmVu
ZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOworICAgIGF1dG8g
aW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJlbmRl
cmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRyYW5z
bGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQuc2Nh
bGUoeyAxLCAtMSB9KTsKQEAgLTE0Niw4ICsxNDcsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZwogICAgICAgICAgICAgdXJsRm9udENhc2NhZGUuZ2V0KCkuZHJhd1RleHQoY29udGV4dCwgVGV4
dFJ1bih0cnVuY2F0ZWRCb3R0b21TdHJpbmcpLCBGbG9hdFBvaW50KGRyYWdJbWFnZVBhZGRpbmcs
IDQwICsgZHJhZ0ltYWdlUGFkZGluZykpOwogICAgIH1dOwogCi0gICAgYXV0byBsaW5rUmFuZ2Ug
PSByYW5nZU9mQ29udGVudHMobGlua0VsZW1lbnQpOwotICAgIGlmIChhdXRvIHRleHRJbmRpY2F0
b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLCBkZWZhdWx0TGlu
a0luZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpO
b25lLCBGbG9hdFNpemUoKSkpCisgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobGlu
a0VsZW1lbnQpLCBkZWZhdWx0TGlua0luZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBGbG9hdFNpemUoKSkpCiAgICAgICAgIGluZGljYXRv
ckRhdGEgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAKICAgICByZXR1cm4gaW1hZ2UuQ0dJbWFn
ZTsKQEAgLTE5MSwxNyArMTkxLDE1IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JT
ZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yRGF0YSYgaW5kaWNhCiAgICAgICAg
IGltYWdlUmVjdC5zY2FsZSgxIC8gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKIAotICAg
IFJldGFpblB0cjxVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlcj4gcmVuZGVyID0gYWRvcHROUyhbUEFM
OjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1h
Z2VSZWN0LnNpemUoKV0pOwotICAgIFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdldCgp
IGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRl
cmVyQ29udGV4dCkgeworICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlH
cmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6
ZSgpXSk7CisgICAgcmV0dXJuIFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGlj
c0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAgIC8v
IEZJWE1FOiBUaGUgY29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnksIGFu
ZCBzdWdnZXN0cyB0aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAgIC8v
IGRyYWcgaW5pdGlhdGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBoaWNz
IGNvbnRleHQuCiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWlnaHQo
KSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4dC5k
cmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwotICAgIH1dOwotCi0gICAgcmV0dXJuIGZpbmFs
SW1hZ2UuQ0dJbWFnZTsKKyAgICB9XS5DR0ltYWdlOwogfQogCiBEcmFnSW1hZ2VSZWYgZGlzc29s
dmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBlc0lu
dGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JU
eXBlc0ludGVybmFsLmgKaW5kZXggM2U4ZjAyZTU3NDNkOGE0OTM0MDM3MDk3NzZhZTQ5ZDcwMjRj
MWRlNi4uNGI4YzVjNTkzZWRiNTE3Zjk3YjFhNTA2N2M5NjAyZjBjNTA5NzZmNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJbnRl
cm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0RhdGFEZXRlY3Rv
clR5cGVzSW50ZXJuYWwuaApAQCAtMzEsMjcgKzMxLDIxIEBACiAKIHN0YXRpYyBpbmxpbmUgV2Vi
Q29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDY0X3Qg
dHlwZXMpCiB7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5cGVz
KSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25lKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6RGF0
YURldGVjdG9yVHlwZU5vbmU7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlw
ZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVBbGwpCi0gICAgICAgIHJldHVybiBXZWJD
b3JlOjpEYXRhRGV0ZWN0b3JUeXBlQWxsOwotCi0gICAgdWludDMyX3QgdmFsdWUgPSBXZWJDb3Jl
OjpEYXRhRGV0ZWN0b3JUeXBlTm9uZTsKKyAgICB1aW50MzJfdCB2YWx1ZSA9IDA7CiAgICAgaWYg
KHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIpCi0gICAgICAgIHZhbHVlIHw9
IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcjsKKyAgICAgICAgdmFsdWUgfD0g
c3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpQaG9uZU51
bWJlcik7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTGluaykKLSAgICAgICAg
dmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUxpbms7CisgICAgICAgIHZhbHVlIHw9
IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6TGluayk7
CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykKLSAgICAgICAgdmFs
dWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUFkZHJlc3M7CisgICAgICAgIHZhbHVlIHw9
IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6QWRkcmVz
cyk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkKLSAg
ICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQ7Cisg
ICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0
b3JUeXBlczo6Q2FsZW5kYXJFdmVudCk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JU
eXBlVHJhY2tpbmdOdW1iZXIpCi0gICAgICAgIHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRlY3Rv
clR5cGVUcmFja2luZ051bWJlcjsKKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMy
X3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpUcmFja2luZ051bWJlcik7CiAgICAgaWYg
KHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0TnVtYmVyKQotICAgICAgICB2YWx1ZSB8
PSBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0TnVtYmVyOworICAgICAgICB2YWx1ZSB8
PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM6OkZsaWdo
dE51bWJlcik7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTG9va3VwU3VnZ2Vz
dGlvbikKLSAgICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUxvb2t1cFN1
Z2dlc3Rpb247Ci0KKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNv
cmU6OkRhdGFEZXRlY3RvclR5cGVzOjpMb29rdXBTdWdnZXN0aW9uKTsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM+KHZhbHVlKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9X
S1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUu
bW0KaW5kZXggYzhkZTY4ODkxOTMzZjRkOGVhNjY1ZWU1MmJhMjIyZGQ0ZTJkMzFiNC4uMDc2NzZh
MGUzNjY3YzFiNzU4Mjg0MzQyYjZmYmRmMzhhOWUxNjM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVn
SW5SYW5nZUhhbmRsZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCkBAIC02Mywx
NSArNjMsMTYgQEAgLSAoTlNTdHJpbmcgKil0ZXh0CiB9CiAKICNpZiBUQVJHRVRfT1NfSVBIT05F
CisKIC0gKE5TQXJyYXkgKilkZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVz
KXR5cGVzIGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQKIHsKICNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBjb3JlUmFuZ2UgPSAmX3Jh
bmdlSGFuZGxlLT5jb3JlUmFuZ2UoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdGlv
bjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoY29yZVJhbmdlLCBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBl
cyh0eXBlcyksIGNvbnRleHQpOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpk
ZXRlY3RDb250ZW50SW5SYW5nZShfcmFuZ2VIYW5kbGUtPmNvcmVSYW5nZSgpLCBmcm9tV0tEYXRh
RGV0ZWN0b3JUeXBlcyh0eXBlcyksIGNvbnRleHQpOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwog
I2VuZGlmCiB9CisKICNlbmRpZgogCiAtIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VIYW5k
bGUmKV9yYW5nZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRleCBi
MGU2NTIyZjZmMTczZDhiOGVjZTk0N2ZiM2UwOGY0MDAyN2Y4YTU5Li5lMTYwY2VhNjAxMTMwMzAx
ODQzZmJkMDJlMWUzYmM5MTJjOWE2ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9y
LmNwcApAQCAtMTU2LDEzICsxNTYsMTIgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwgZG91
YmxlPj4gVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Y29tcHV0ZVRleHRMZWcKIAogICAg
IGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAotICAg
IGF1dG8gZG9jdW1lbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCB7eyBkb2N1bWVu
dC0+ZG9jdW1lbnRFbGVtZW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yIH19
LCB7eyBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0
ZXJBbmNob3IgfX0pOwogICAgIEhhc2hTZXQ8Tm9kZSo+IGFsbFRleHROb2RlczsKICAgICBIYXNo
TWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gZm9udFNpemVUb0NvdW50TWFwOwogICAgIHVuc2lnbmVk
IG51bWJlck9mSXRlcmF0aW9ucyA9IDA7CiAgICAgdW5zaWduZWQgdG90YWxTYW1wbGVkVGV4dExl
bmd0aCA9IDA7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBkb2N1bWVudFRleHRJdGVyYXRvciB7
IGRvY3VtZW50UmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyB9OyAh
ZG9jdW1lbnRUZXh0SXRlcmF0b3IuYXRFbmQoKTsgZG9jdW1lbnRUZXh0SXRlcmF0b3IuYWR2YW5j
ZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgZG9jdW1lbnRUZXh0SXRlcmF0b3IgeyBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgVGV4dEl0ZXJhdG9yRW50ZXJz
VGV4dENvbnRyb2xzIH07ICFkb2N1bWVudFRleHRJdGVyYXRvci5hdEVuZCgpOyBkb2N1bWVudFRl
eHRJdGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCsrbnVtYmVyT2ZJdGVyYXRpb25z
ID49IG1heGltdW1OdW1iZXJPZlRleHRSdW5zVG9Db25zaWRlcikKICAgICAgICAgICAgIGJyZWFr
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4
IDhkNzBiOTc0ZDc5YTM5NmM5NmJlODU0OWZlOTQ3YjkzODQzZDlkNGMuLjQ0M2VlNTYxNTNlNzdh
YTU1NTRlZTNmMWI2MTdhZjczZGViYjBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzMxLDkgKzM3MzEsNyBAQCB2b2lkIFdlYlBhZ2U6
OmRldGVjdERhdGFJbkFsbEZyYW1lcyh1aW50NjRfdCB0eXBlcywgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChjb25zdAogICAgICAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihmcmFtZS0+ZG9j
dW1lbnQoKSk7CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51ZTsK
LQotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQs
IFBvc2l0aW9uIHsgZG9jdW1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQ2hp
bGRyZW4gfSwgUG9zaXRpb24geyBkb2N1bWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9uSXNB
ZnRlckNoaWxkcmVuIH0pOwotICAgICAgICBmcmFtZS0+c2V0RGF0YURldGVjdGlvblJlc3VsdHMo
RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UocmFuZ2UsIGRhdGFEZXRlY3RvclR5
cGVzLCBtX2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgpKSk7CisgICAgICAgIGZyYW1lLT5zZXRE
YXRhRGV0ZWN0aW9uUmVzdWx0cyhEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSht
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgZGF0YURldGVjdG9yVHlw
ZXMsIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCkpKTsKICAgICB9CiAgICAgY29tcGxldGlv
bkhhbmRsZXIoeyBtX3BhZ2UtPm1haW5GcmFtZSgpLmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkgfSk7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggMDBj
NDc2OTVkZTI4NmUzNjNiMzBiMzRhODkyN2NlNmJhN2RlODk0OS4uNmIzYTU4MDAyYjFlZDFmZDcw
ZjU3NGY5ZGY0YjY3NWMzNWRiOTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaApAQCAtMTI5LDEwICsxMjksNiBAQCB0eXBlZGVmIHN0cnVjdCBfQXRrT2Jq
ZWN0IEF0a09iamVjdDsKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVG91Y2hFdmVudC5oPgog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0jaW5jbHVkZSA8V2ViQ29yZS9E
YXRhRGV0ZWN0aW9uLmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShNQUNfR0VTVFVSRV9FVkVOVFMp
CiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1BsYXRmb3JtR2VzdHVyZUV2ZW50TWFjLmg+CiAj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9X
ZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBh
Z2VNYWMubW0KaW5kZXggOWJkNzMxZTIyMmMwOTM2OTdiYjE4MzhlMTg2NTYyOGI5OGYyMGE5ZC4u
MWYxYjM0NDk2NGUxMjU4NDZlYjM5YTQwNWY4OTBiMWU2MTE3MTk5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg1OCw3
ICs4NTgsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRM
b2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgIFVSTCBhYnNvbHV0ZUxpbmtV
UkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVSTEVs
ZW1lbnQgPSBoaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKICAgICBpZiAoIWFic29sdXRlTGlu
a1VSTC5pc0VtcHR5KCkgJiYgVVJMRWxlbWVudCkKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVz
dWx0LmxpbmtUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJh
bmdlT2ZDb250ZW50cygqVVJMRWxlbWVudCksIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGlu
Z1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVz
dWx0LmxpbmtUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqVVJMRWxlbWVudCksIFRleHRJbmRpY2F0b3JP
cHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBU
ZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKIAogICAgIGF1dG8g
bG9va3VwUmVzdWx0ID0gbG9va3VwVGV4dEF0TG9jYXRpb24obG9jYXRpb25JblZpZXdDb29yZGlu
YXRlcyk7CiAgICAgaWYgKGF1dG8qIGxvb2t1cFJhbmdlID0gc3RkOjpnZXQ8UmVmUHRyPFJhbmdl
Pj4obG9va3VwUmVzdWx0KS5nZXQoKSkgewpAQCAtODk2LDEyICs4OTYsMTEgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6Rmxv
YXRQb2ludCBsb2NhdGkKIAogICAgIC8vIEZJWE1FOiBBdm9pZCBzY2FubmluZyBpZiB3ZSB3aWxs
IGp1c3QgdGhyb3cgYXdheSB0aGUgcmVzdWx0IChlLmcuIHdlJ3JlIG92ZXIgYSBsaW5rKS4KICAg
ICBpZiAoIXBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVEYXRhRGV0ZWN0b3JzICYmIGhpdFRlc3RSZXN1
bHQuaW5uZXJOb2RlKCkgJiYgKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5vZGUo
KSB8fCBoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQoKSkp
IHsKLSAgICAgICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICBS
ZWZQdHI8UmFuZ2U+IGRldGVjdGVkRGF0YVJhbmdlOwotICAgICAgICBpbW1lZGlhdGVBY3Rpb25S
ZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCA9IERhdGFEZXRlY3Rpb246OmRldGVjdEl0
ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Ci0gICAgICAgIGlmIChpbW1lZGlhdGVBY3Rpb25SZXN1
bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCAmJiBkZXRlY3RlZERhdGFSYW5nZSkgewotICAg
ICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0g
ZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0gICAgICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1
bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZSgqZGV0ZWN0ZWREYXRhUmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1Jl
Y3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0gRGF0
YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3VsdCkp
IHsKKyAgICAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFBY3Rpb25D
b250ZXh0ID0gV1RGTW92ZShyZXN1bHQtPmFjdGlvbkNvbnRleHQpOworICAgICAgICAgICAgaW1t
ZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gcmVzdWx0LT5ib3Vu
ZGluZ0JveDsKKyAgICAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJlc3VsdC0+cmFu
Z2UsCisgICAgICAgICAgICAgICAgVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFu
ZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpGYWRlSW4pOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvRE9NL0RPTS5tbQppbmRleCBkZjBiNTIwOTExZmUxODVjYjkzOGZmMWY3Yzk5N2VhZmVhMjcw
ZjNmLi41ZjA2MGIwNTJkNmFlYWNkYzYxMzg4NmY1YzljMzI3MDY1YTE1NTE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTUyMywxMCArNTIzLDggQEAgLSAodm9pZClnZXRQcmV2
aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJheSAq
KilyZWN0cwogCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlKHNlbGYpOwogCi0gICAgYXV0byByYW5n
ZSA9IHJhbmdlT2ZDb250ZW50cyhub2RlKTsKLQogICAgIGNvbnN0IGZsb2F0IG1hcmdpbiA9IDQg
LyBub2RlLmRvY3VtZW50KCkucGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBhdXRvIHRl
eHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIFRleHRJ
bmRpY2F0b3JPcHRpb25UaWdodGx5Rml0Q29udGVudCB8CisgICAgYXV0byB0ZXh0SW5kaWNhdG9y
ID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhub2RlKSwgVGV4dEluZGljYXRvck9wdGlvblRpZ2h0bHlGaXRDb250ZW50IHwKICAg
ICAgICAgVGV4dEluZGljYXRvck9wdGlvblJlc3BlY3RUZXh0Q29sb3IgfAogICAgICAgICBUZXh0
SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8CiAgICAgICAgIFRleHRJbmRpY2F0b3JP
cHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzIHwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNv
bnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBv
cnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggODA2ZGEwYmZiMDdkYWU5Y2I3MzY0OGEy
YWYwZmZmNGQyOTMzN2NjMC4uMjU2ZTY4OTExYjc1OGYxMzU5OTU4MDIwOTFiZTAyZjczOGY3MzMx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQvV2Vi
Q29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTE0OCw2ICsxNDgsNyBAQCBib29s
IFdlYkNvbnRleHRNZW51Q2xpZW50OjpjbGllbnRGbG9hdFJlY3RGb3JOb2RlKE5vZGUmIG5vZGUs
IEZsb2F0UmVjdCYgcmVjdCkgYwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisK
IHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNoYXJpbmdTZXJ2aWNlUGlja2VyV2lsbEJlRGVz
dHJveWVkKFdlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciAmKQogewogICAgIG1fc2hh
cmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyID0gbmlsOwpAQCAtMTgzLDE1ICsxODQsMTUgQEAg
V2ViQ29yZTo6RmxvYXRSZWN0IFdlYkNvbnRleHRNZW51Q2xpZW50OjpzY3JlZW5SZWN0Rm9yQ3Vy
cmVudFNoYXJpbmdTZXJ2aWNlUGlja2UKIAogUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRleHRN
ZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0oV2ViU2hh
cmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyICYpCiB7Ci0gICAgUGFnZSogcGFnZSA9IFttX3dl
YlZpZXcgcGFnZV07CisgICAgYXV0byBwYWdlID0gW21fd2ViVmlldyBwYWdlXTsKICAgICBpZiAo
IXBhZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOb2RlKiBub2RlID0gcGFnZS0+Y29u
dGV4dE1lbnVDb250cm9sbGVyKCkuY29udGV4dCgpLmhpdFRlc3RSZXN1bHQoKS5pbm5lck5vZGUo
KTsKKyAgICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLmNvbnRleHQoKS5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb2RlKCkpOwogICAgIGlmICghbm9k
ZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0gbm9k
ZS0+ZG9jdW1lbnQoKS52aWV3KCk7CisgICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRyKG5v
ZGUtPmRvY3VtZW50KCkudmlldygpKTsKICAgICBpZiAoIWZyYW1lVmlldykgewogICAgICAgICAv
LyBUaGlzIG1ldGhvZCBzaG91bGRuJ3QgYmUgY2FsbGVkIGluIGNhc2VzIHdoZXJlIHRoZSBjb250
cm9sbGVkIG5vZGUgaXNuJ3QgaW4gYSByZW5kZXJlZCB2aWV3LgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKQEAgLTIwMywxNSArMjA0LDE0IEBAIFJldGFpblB0cjxOU0ltYWdlPiBXZWJD
b250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVt
CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEgc25h
cHNob3QsIGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9uIGlu
IGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VC
dWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRlcmlu
Z01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAgaWYg
KCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9s
ZFNlbGVjdGlvbiA9IGZyYW1lVmlldy0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
LSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlv
bihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUs
IFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpKTsKLSAgICBmcmFtZVZpZXctPmZyYW1l
KCkuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkp
LCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CisgICAgYXV0byBvbGRTZWxlY3Rpb24g
PSBmcmFtZVZpZXctPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWVW
aWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigqbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZSgqbm9kZSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAotICAgIE9wdGlv
blNldDxQYWludEJlaGF2aW9yPiBvbGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWludEJl
aGF2aW9yKCk7CisgICAgYXV0byBvbGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWludEJl
aGF2aW9yKCk7CiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZpb3I6
OlNlbGVjdGlvbk9ubHkpOwogCiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC10b0Zs
b2F0U2l6ZShyZWN0LmxvY2F0aW9uKCkpKTsKQEAgLTIyMCwxMiArMjIwLDEzIEBAIFJldGFpblB0
cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1Nl
cnZpY2VQaWNrZXJJdGVtCiAgICAgZnJhbWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihvbGRTZWxlY3Rpb24pOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihv
bGRQYWludEJlaGF2aW9yKTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBJbWFnZUJ1ZmZl
cjo6c2lua0ludG9JbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgIGF1dG8gaW1hZ2UgPSBJbWFn
ZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIGlmICghaW1hZ2Up
CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICByZXR1cm4gaW1hZ2UtPnNuYXBzaG90TlNJbWFn
ZSgpOwogfQorCiAjZW5kaWYKIAogTlNNZW51ICpXZWJDb250ZXh0TWVudUNsaWVudDo6Y29udGV4
dE1lbnVGb3JFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp2aWV3LCBib29sJiBpc1NlcnZp
Y2VzTWVudSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCA4NTk2ODQ4OTVlY2Mz
NzBiMmJkYTA4YjAxMjk1MTZlYjY0ODI2YWQwLi4zYzVlYzg1OThlY2U3NDI3ZjkxYjgwYWI1MDVk
NGU1NDU0ODBhOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00MTEsMzUg
KzQxMSwzNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilf
YW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogICAgIGlmICghRGF0YURldGVjdG9y
c0xpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpS
YW5nZT4gZGV0ZWN0ZWREYXRhUmFuZ2U7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVjdGVk
RGF0YUJvdW5kaW5nQm94OwotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlvbkNv
bnRleHQ7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RGV0ZWN0ZWRJdGVtPiBkZXRlY3RlZEl0ZW07
CiAKICAgICBpZiAoW1tfd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKF93ZWJWaWV3OmFjdGlvbkNvbnRleHRGb3JIaXRUZXN0UmVzdWx0OnJhbmdlOildKSB7
Ci0gICAgICAgIFJldGFpblB0cjxXZWJFbGVtZW50RGljdGlvbmFyeT4gaGl0VGVzdERpY3Rpb25h
cnkgPSBhZG9wdE5TKFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0VGVz
dFJlc3VsdDpfaGl0VGVzdFJlc3VsdF0pOwotCiAgICAgICAgIERPTVJhbmdlICpjdXN0b21EYXRh
RGV0ZWN0b3JzUmFuZ2U7Ci0gICAgICAgIGFjdGlvbkNvbnRleHQgPSBbKGlkKVtfd2ViVmlldyBV
SURlbGVnYXRlXSBfd2ViVmlldzpfd2ViVmlldyBhY3Rpb25Db250ZXh0Rm9ySGl0VGVzdFJlc3Vs
dDpoaXRUZXN0RGljdGlvbmFyeS5nZXQoKSByYW5nZTomY3VzdG9tRGF0YURldGVjdG9yc1Jhbmdl
XTsKLQotICAgICAgICBpZiAoYWN0aW9uQ29udGV4dCAmJiBjdXN0b21EYXRhRGV0ZWN0b3JzUmFu
Z2UpCi0gICAgICAgICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IGNvcmUoY3VzdG9tRGF0YURldGVj
dG9yc1JhbmdlKTsKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gWyhpZClbX3dlYlZpZXcg
VUlEZWxlZ2F0ZV0gX3dlYlZpZXc6X3dlYlZpZXcKKyAgICAgICAgICAgIGFjdGlvbkNvbnRleHRG
b3JIaXRUZXN0UmVzdWx0OmFkb3B0TlMoW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10gaW5p
dFdpdGhIaXRUZXN0UmVzdWx0Ol9oaXRUZXN0UmVzdWx0XSkuZ2V0KCkKKyAgICAgICAgICAgIHJh
bmdlOiZjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2VdOworICAgICAgICBpZiAoYWN0aW9uQ29udGV4
dCAmJiBjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpIHsKKyAgICAgICAgICAgIGRldGVjdGVkSXRl
bSA9IHsgeworICAgICAgICAgICAgICAgIGFjdGlvbkNvbnRleHQsCisgICAgICAgICAgICAgICAg
eyB9LCAvLyBGSVhNRTogU2VlbXMgbGlrZSBhbiBlbXB0eSByZWN0IGlzbid0IHJlYWxseSBPSy4K
KyAgICAgICAgICAgICAgICAqY29yZShjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpCisgICAgICAg
ICAgICB9IH07CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2xpZW50IGRpZG4n
dCBnaXZlIHVzIGFuIGFjdGlvbiBjb250ZXh0LCB0cnkgdG8gc2NhbiBhcm91bmQgdGhlIGhpdCBw
b2ludC4KLSAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwgIWRldGVjdGVkRGF0YVJhbmdlKQotICAg
ICAgICBhY3Rpb25Db250ZXh0ID0gV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFy
b3VuZEhpdFRlc3RSZXN1bHQoX2hpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94
LCBkZXRlY3RlZERhdGFSYW5nZSk7CisgICAgaWYgKCFkZXRlY3RlZEl0ZW0pCisgICAgICAgIGRl
dGVjdGVkSXRlbSA9IFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRU
ZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0KTsKIAotICAgIGlmICghYWN0aW9uQ29udGV4dCB8fCAh
ZGV0ZWN0ZWREYXRhUmFuZ2UpCisgICAgaWYgKCFkZXRlY3RlZEl0ZW0pCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRBbHRNb2RlOllFU107Ci0gICAgW2FjdGlv
bkNvbnRleHQgc2V0SW1tZWRpYXRlOllFU107Ci0gICAgaWYgKCFbW2dldEREQWN0aW9uc01hbmFn
ZXJDbGFzcygpIHNoYXJlZE1hbmFnZXJdIGhhc0FjdGlvbnNGb3JSZXN1bHQ6W2FjdGlvbkNvbnRl
eHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDphY3Rpb25Db250ZXh0LmdldCgpXSkKKyAgICBb
ZGV0ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0IHNldEFsdE1vZGU6WUVTXTsKKyAgICBbZGV0ZWN0
ZWRJdGVtLT5hY3Rpb25Db250ZXh0IHNldEltbWVkaWF0ZTpZRVNdOworICAgIGlmICghW1tnZXRE
REFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBoYXNBY3Rpb25zRm9yUmVzdWx0
OltkZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDpk
ZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQuZ2V0KCldKQogICAgICAgICByZXR1cm4gbmlsOwog
Ci0gICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UoKmRldGVjdGVkRGF0YVJhbmdlLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uRGVm
YXVsdCwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJ
bik7CisgICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGRldGVjdGVkSXRlbS0+cmFuZ2UpLCBXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVsdCwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKLSAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBb
YWN0aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRlcmFj
dGlvblN0YXJ0ZWRIYW5kbGVyOl4oKSB7CisgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gW2Rl
dGVjdGVkSXRlbS0+YWN0aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2Rl
OllFUyBpbnRlcmFjdGlvblN0YXJ0ZWRIYW5kbGVyOl4oKSB7CiAgICAgfSBpbnRlcmFjdGlvbkNo
YW5nZWRIYW5kbGVyOl4oKSB7CiAgICAgICAgIGlmIChpbmRpY2F0b3IpCiAgICAgICAgICAgICBb
X3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3I6KmluZGljYXRvciB3aXRoTGlmZXRpbWU6V2ViQ29y
ZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lOjpQZXJtYW5lbnRdOwpAQCAtNDQ3LDcgKzQ0
OSw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9hbmlt
YXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkCiAgICAgICAgIFtfd2ViVmlldyBfY2xlYXJU
ZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlz
bWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKICAgICB9XTsKIAotICAgIFtfY3VycmVudEFjdGlv
bkNvbnRleHQgc2V0SGlnaGxpZ2h0RnJhbWU6W193ZWJWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRv
U2NyZWVuOmRldGVjdGVkRGF0YUJvdW5kaW5nQm94XV07CisgICAgW19jdXJyZW50QWN0aW9uQ29u
dGV4dCBzZXRIaWdobGlnaHRGcmFtZTpbX3dlYlZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9TY3Jl
ZW46ZGV0ZWN0ZWRJdGVtLT5ib3VuZGluZ0JveF1dOwogCiAgICAgTlNBcnJheSAqbWVudUl0ZW1z
ID0gW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRlbXNG
b3JSZXN1bHQ6W19jdXJyZW50QWN0aW9uQ29udGV4dCBtYWluUmVzdWx0XSBhY3Rpb25Db250ZXh0
Ol9jdXJyZW50QWN0aW9uQ29udGV4dC5nZXQoKV07CiAgICAgaWYgKG1lbnVJdGVtcy5jb3VudCAh
PSAxKQpAQCAtNTM2LDcgKzUzOCw3IEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cEluZm8p
X2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltCiAKICAgICBw
b3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0KCk7
CiAKLSAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6
Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlvbnMs
IHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQorICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRvck9w
dGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4dElu
ZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397644</attachid>
            <date>2020-04-26 22:02:00 -0700</date>
            <delta_ts>2020-04-26 22:35:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211058-20200426220158.patch</filename>
            <type>text/plain</type>
            <size>120930</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDE5NTI0MDFiNDRlNDFh
NDQ4MzQ3NTY5MzBiZWRjNDQ0MDdiZjYwNy4uZTkyMDdkN2NhMmY2M2VlNmIyMGMzODViMmQxMzU5
MTU5YzI4ODhhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MSBAQAorMjAyMC0wNC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0
OiBUaGlzIGZpbGUgbW9kaWZpZWQgaXRzZWxmIHdoZW4gSSBidWlsdC4KKyAgICAgICAgU29tZW9u
ZSBuZWVkcyB0byBjaGVjayBpbiB0aGUgcmVzdWx0LgorCisgICAgICAgICogYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQgY29uc3QpOiBVc2UgU2ltcGxl
UmFuZ2UuCisKKyAgICAgICAgKiBkb20vQm91bmRhcnlQb2ludC5oOiBNb3ZlZCBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzIGhlcmUgc28gaXQKKyAgICAgICAgY2FuIGJlIHVzZWQg
bW9yZSBwbGFjZXMuCisKKyAgICAgICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21tb25JbmNsdXNpdmVBbmNlc3Rvcik6IE1vdmVkIHRoZSBjb21tb25BbmNlc3RvckNvbnRh
aW5lciBmdW5jdGlvbgorICAgICAgICBoZXJlIGZyb20gUmFuZ2UsIGRlY2lkZWQgdG8gdXNlIHRo
ZSAiaW5jbHVzaXZlIGFuY2VzdG9yIiBuYW1pbmcgZnJvbSB0aGUKKyAgICAgICAgRE9NIHNwZWNp
ZmljYXRpb24sIGFuZCB1c2VkIFJlZlB0ciBmb3IgdGhlIHJlc3VsdCBzaW5jZSBpdCdzIHBhcnQg
b2Ygb3VyIG1vZGVybgorICAgICAgICBzYWZlciBkZXNpZ24gdG8gYWx3YXlzIHVzZSBzbWFydCBw
b2ludGVycyBmb3IgcmV0dXJuIHZhbHVlcy4KKyAgICAgICAgKiBkb20vTm9kZS5oOiBBZGRlZCBj
b21tb25JbmNsdXNpdmVBbmNlc3Rvci4KKworICAgICAgICAqIGRvbS9Qb3NpdGlvbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpjb21tb25TaGFkb3dJbmNsdWRpbmdBbmNlc3Rvcik6IENhbGwgY29t
bW9uSW5jbHVzaXZlQW5jZXN0b3IuCisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJhbmdlOjppc1BvaW50SW5SYW5nZSk6IENhbGwgY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IuCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZVBvaW50IGNvbnN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29tcGFyZUJvdW5kYXJ5UG9pbnRz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6Y29sbGVjdFNlbGVjdGlvblJlY3Rz
V2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGRvbS9S
YW5nZS5oOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
IGNvbnN0KTogQ2FsbCBjb21tb25JbmNsdXNpdmVBbmNlc3Rvci4KKworICAgICAgICAqIGRvbS9T
aW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlQm91bmRhcnlQb2ludEFmdGVy
Tm9kZUNvbnRlbnRzKTogTW92ZWQgdG8gQm91bmRhcnlQb2ludC5oLgorCisgICAgICAgICogZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxsQ29ycmVjdGlv
bik6IFVzZQorICAgICAgICBTaW1wbGVSYW5nZSBpbnN0ZWFkIG9mIGxpdmUgcmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9VbmFwcGxp
ZWRFZGl0aW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRBdXRvY29ycmVjdGlvbkFm
dGVyQ29tbWFuZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6cHJvY2Vzc01hcmtlcnNPblRleHRUb0JlUmVwbGFjZWRCeVJlc3VsdCk6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6bGlzdENvbnZlcnNpb25UeXBlRm9yU2VsZWN0aW9uKTogdXNlIGNvbW1vbklu
Y2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4pOiBUYWtlIGEgU2ltcGxl
UmFuZ2UgYXJndW1lbnQuCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nLmg6IFVwZGF0ZWQgZm9y
IHRoZSBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YWRkUmFuZ2VUb0tpbGxSaW5nKTogVGFrZSBhIFNpbXBsZVJhbmdlIGFy
Z3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVO
dW1iZXJzIGNvbnN0KTogTWFkZSB0aGlzIGNvbnN0IGFuZAorICAgICAgICB0d2Vha2VkIGNvZGlu
ZyBzdHlsZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6OnNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJz
KTogTW92ZWQgdGhpcywgbWFkZSBpdCBhIG5vbi1tZW1iZXIgZnVuY3Rpb24sCisgICAgICAgIHJl
bmFtZWQgZnJvbSBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzLCB1c2UgU2ltcGxlUmFuZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpleHRlbmRTZWxlY3Rpb24pOiBBZGRlZC4gRmFjdG9yZWQgb3V0
IHNvbWUgbG9naWMgZnJvbSB0aGUgZnVuY3Rpb24gYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpF
ZGl0b3I6OnNjYW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKTogVXNlIFNpbXBsZVJhbmdl
LiBSZW1vdmVkCisgICAgICAgIHNvbWUgdW5uZWNlc3NhcnkgY29kZSB0aGF0IHN1YnRyYWN0cyAx
IGFuZCB0aGVuIGFkZHMgMSBhZ2Fpbi4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOiBVcGRh
dGVkIGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL1RleHRNYW5pcHVsYXRpb25D
b250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRNYW5pcHVsYXRpb25Db250cm9s
bGVyOjpyZXBsYWNlKTogVXNlIGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICog
ZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VTZWFy
Y2hSYW5nZSk6IFJldHVybiBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNlKTogVXNlIFNpbXBsZVJhbmdlLgor
CisgICAgICAgICogZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmg6IFVzZSBTaW1wbGVSYW5nZSBp
bnN0ZWFkIG9mIGEgbGl2ZSByYW5nZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0YURl
dGVjdGlvbi5oOiBVc2UgYSBzdHJ1Y3QsIERldGVjdGVkSXRlbSwgZm9yIHRoZSByZXR1cm4gdmFs
dWUKKyAgICAgICAgZnJvbSB0aGUgZGV0ZWN0aW9uIGZ1bmN0aW9ucy4gQWxzbyBjaGFuZ2VkIERh
dGFEZXRlY3RvclR5cGVzIHRvIGFuIGVudW0gY2xhc3Mgc28KKyAgICAgICAgaXQgY2FuIGJlIGZv
cndhcmQtZGVjbGFyZWQgaW5zdGVhZCBvZiBoYXZpbmcgdG8gaW5jbHVkZSB0aGlzIGhlYWRlci4K
KyAgICAgICAgKiBlZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW06CisgICAgICAgIChXZWJD
b3JlOjpkZXRlY3RJdGVtKTogUmVuYW1lZCBmcm9tIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJh
bmdlLiBSZXR1cm4gdGhlCisgICAgICAgIERldGVjdGVkSXRlbSBzdHJ1Y3QsIHdpdGggYSBTaW1w
bGVSYW5nZSByYXRoZXIgdGhhbiBhbiBvdXQgYXJndW1lbnQgbGl2ZSByYW5nZS4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb250YWlucyk6IEFkZGVkIGEgaGVscGVyIGZ1bmN0
aW9uIGZvciB0ZXN0aW5nIGJpdHMgaW4gdGhlCisgICAgICAgIERhdGFEZXRlY3RvclR5cGUgZW51
bS4gTGF0ZXIgd2UgY2FuIG1ha2UgdGhpcyBiZXR0ZXIgdXNpbmcgT3B0aW9uU2V0LgorICAgICAg
ICAoV2ViQ29yZTo6Y29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KTogUmVmYWN0b3JlZCBhIGJp
dCwgdXBkYXRlZCBmb3IgdGhlIG5ldworICAgICAgICBEYXRhRGV0ZWN0b3JUeXBlcyBlbnVtIGNs
YXNzLCBhbmQgdG8gdXNlIENGRXF1YWwgaW5zdGVhZCBvZiBDRlN0cmluZ0NvbXBhcmUuCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZSk6IERpdHRv
LgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbToKKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKTogVXNlIFNpbXBsZVJhbmdl
LgorICAgICAgICAqIGVkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dCk6IFVwZGF0ZWQg
c2luY2UgY29udGV4dCBpcyBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL2d0ay9FZGl0
b3JHdGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2Fy
ZERhdGEpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndlYkNv
bnRlbnRGcm9tUGFzdGVib2FyZCk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5n
L3dpbi9FZGl0b3JXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJDb250ZW50
RnJvbVBhc3RlYm9hcmQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9tYWMv
RWRpdG9yTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlTm9kZUZyb21Q
YXN0ZWJvYXJkKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGxvYWRlci9GcmFtZUxvYWRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxvYWRlcjo6Y2hlY2tMb2FkQ29tcGxldGVG
b3JUaGlzRnJhbWUpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogcGFnZS9FdmVudEhhbmRs
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dGFyZ2V0Tm9kZUZvckNsaWNrRXZlbnQpOiBVc2Ug
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IuIEFsc28gdXBkYXRlZAorICAgICAgICB0byByZXR1cm4g
YSBSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OmhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KTogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAgICAgICogcGFnZS9TZXR0
aW5ncy55YW1sOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IGZvciBEYXRhRGV0ZWN0b3JUeXBlcyB0byBi
ZSB0aGUgZW1wdHkKKyAgICAgICAgc3RyaW5nIHJhdGhlciB0aGFuIGEgbmFtZWQgY29uc3RhbnQu
CisgICAgICAgICogcGFnZS9TZXR0aW5nc0Jhc2UuaDogRm9yd2FyZC1kZWNsYXJlIERhdGFEZXRl
Y3RvclR5cGVzIGluc3RlYWQgb2YgaW5jbHVkaW5nCisgICAgICAgIHRoZSBEYXRhRGV0ZWN0aW9u
LmggaGVhZGVyLgorCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSk6IFRha2UgYSBTaW1wbGVS
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhTZWxlY3Rp
b25JbkZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoYXNOb25JbmxpbmVPclJlcGxh
Y2VkRWxlbWVudHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdGlvblJlY3RzKTog
RGl0dG8uIEFsc28gcmVuYW1lZCBmcm9tIGdldFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpzdHlsZUNvbnRhaW5zQ29tcGxleEJhY2tncm91bmQpOiBUd2Vha2VkIGlt
cGxlbWVudGF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkVGV4dENvbG9yc0ZvclJh
bmdlKTogVGFrZSBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6YWJzb2x1dGVCb3Vu
ZGluZ1JlY3RGb3JSYW5nZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6ZXN0aW1hdGVkQmFj
a2dyb3VuZENvbG9yRm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5z
T25seVdoaXRlU3BhY2VUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SW5kaWNhdG9yKTogRGl0dG8uCisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmg6IFVwZGF0
ZWQgZm9yIHRoZSBhYm92ZS4KKworICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIuaDogVXNlIFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlCisgICAgICAgIHJh
bmdlIGZvciBoaWdobGlnaHRzLgorICAgICAgICAqIHBhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNv
bnRyb2xsZXIubW06CisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
OjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbik6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAg
ICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0
ZUZvclRlbGVwaG9uZU51bWJlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdobGlnaHQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJIaWdo
bGlnaHRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpidWlsZFNlbGVjdGlvbkhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNl
ZEZyYW1lKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpoaWdobGlnaHRzQXJlRXF1aXZhbGVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6ZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENv
bnRhaW5pbmdTZWxlY3Rpb25IaWdobGlnaHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKTogRGl0dG8uCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
RHJhZ0ltYWdlRm9yTGluayk6IFVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbik6IFR3ZWFrZWQgYSBiaXQuCisKIDIwMjAtMDQtMjYg
IFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW5kZXJpbmcgdXBkYXRlIHN0ZXBzIHNob3VsZCB1c2UgU2Vjb25kcyBmb3IgdGhlIHRpbWVzdGFt
cHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggNTNiMDIzYzJjYmViOWJlMzVlY2JlYTkxYTU4MDMyMDAyOWNhM2NlZi4u
YTU0MWNhZTRjYzMyNDBhMTAxMmU4ZjI1MGEwYTkzZGY2YzU3NjY1ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyOSBAQAorMjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisK
KyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5n
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTaGFy
ZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5hbC5oOgorICAgICAgICAoZnJv
bVdLRGF0YURldGVjdG9yVHlwZXMpOiBVcGRhdGVkIHNpbmNlIERhdGFEZXRlY3RvclR5cGVzCisg
ICAgICAgIGlzIG5vdyBhbiBlbnVtIGNsYXNzLiBBbHNvIGdvdCByaWQgb2Ygc3BlY2lhbCAibm9u
ZSIgYW5kICJhbGwiIHZhbHVlcy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tOgorICAgICAgICAo
LVtXS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZSBkZXRlY3REYXRhV2l0aFR5cGVzOmNvbnRl
eHQ6XSk6IFVwZGF0ZWQKKyAgICAgICAgc2luY2UgRGF0YURldGVjdGlvbiBub3cgdGFrZXMgYSBT
aW1wbGVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdl
b21ldHJ5Q29sbGVjdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlld0dlc3R1cmVHZW9tZXRy
eUNvbGxlY3Rvcjo6Y29tcHV0ZVRleHRMZWdpYmlsaXR5U2NhbGVzKToKKyAgICAgICAgVXNlIFNp
bXBsZVJhbmdlLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6ZGV0ZWN0RGF0YUluQWxsRnJhbWVzKTogRGl0dG8uCisK
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBSZW1vdmVkIHVubmVlZGVk
IGluY2x1ZGUgb2YgRGF0YURldGVjdGlvbi5oLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3Jt
SW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24pOiBVc2UgU2ltcGxlUmFuZ2UuCisKIDIw
MjAtMDQtMjYgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW5kZXJpbmcgdXBkYXRlIHN0ZXBzIHNob3VsZCB1c2UgU2Vjb25kcyBmb3IgdGhl
IHRpbWVzdGFtcHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlODdjNjcxMjMxNzYx
Y2E0MTA5YmMwZTc1MWE0NmE4ZTA4NTY5NDhkLi5iOTRiMGY2MWE3ZTVlMWQ1ZGM2MWY3ZmUwZTYy
NmViMWNiMWEyOGFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEg
QEAKKzIwMjAtMDQtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAg
IFJlcGxhY2UgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2VzIHdpdGggU2ltcGxlUmFuZ2UKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMTA1OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRE9NL0RPTS5tbToK
KyAgICAgICAgKC1bRE9NTm9kZSBnZXRQcmV2aWV3U25hcHNob3RJbWFnZTphbmRSZWN0czpdKTog
VXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNvbnRleHRNZW51
Q2xpZW50Lm1tOgorICAgICAgICAoV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVu
dFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbSk6IERpdHRvLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyIF9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkVGV4dF0p
OgorICAgICAgICBVcGRhdGVkIHRvIHVzZSBEZXRlY3RlZEl0ZW0gYW5kIFNpbXBsZVJhbmdlLgor
ICAgICAgICAoK1tXZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kaWN0aW9uYXJ5UG9wdXBJ
bmZvRm9yUmFuZ2U6aW5GcmFtZTp3aXRoTG9va3VwT3B0aW9uczppbmRpY2F0b3JPcHRpb25zOnRy
YW5zaXRpb246XSk6CisgICAgICAgIERpdHRvLgorCiAyMDIwLTA0LTExICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wIHVzaW5nIGxpdmUgcmFuZ2VzIGluIGZ1
bmN0aW9ucyB0aGF0IHJldHVybiByYW5nZSBvZiB0aGUgc2VsZWN0aW9uCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1pbnB1dC54Y2ZpbGVsaXN0IGIvU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMtaW5wdXQueGNmaWxlbGlzdAppbmRleCAyZDRkMTI4NWU4NzEw
Y2I1NTg3ZmJiMmVlZWY4ZTRjMmNkNmMzZTAwLi5mZDNiYTAwMWM3YzE3M2NjN2YwYmI2NDkwZDg1
ODliNTg0OTUyYjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy1p
bnB1dC54Y2ZpbGVsaXN0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLWlucHV0
LnhjZmlsZWxpc3QKQEAgLTExODAsMyArMTE4MCw1IEBAICQoUFJPSkVDVF9ESVIpL3htbC9YUGF0
aFJlc3VsdC5pZGwKICQoUFJPSkVDVF9ESVIpL3htbC9YU0xUUHJvY2Vzc29yLmlkbAogJChQUk9K
RUNUX0RJUikveG1sL3htbGF0dHJzLmluCiAkKFBST0pFQ1RfRElSKS94bWwveG1sbnNhdHRycy5p
bgorQXBwbGVQYXlTZXR1cC5pZGwKK0FwcGxlUGF5U2V0dXBGZWF0dXJlLmlkbApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdC5jcHAKaW5kZXggYjM0N2Q3OThjY2JjZTFiYjZhOTA2ODU3ZmNhMWU0M2RiMWMyZGY4My4u
MDJjNzU3MDBhODViM2M3MjU2Njk3N2JhMmRiYzFlM2FmODI5MTRiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuY3BwCkBAIC02MzMsMTAgKzYzMywxMCBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudAogICAg
ICAgICAvLyBJZiBwb3NzaWJsZSwgdXNlIGEgdGV4dCBpdGVyYXRvciB0byBnZXQgdGhlIHRleHQs
IHNvIHRoYXQgd2hpdGVzcGFjZQogICAgICAgICAvLyBpcyBoYW5kbGVkIGNvbnNpc3RlbnRseS4K
ICAgICAgICAgRG9jdW1lbnQqIG5vZGVEb2N1bWVudCA9IG51bGxwdHI7Ci0gICAgICAgIFJlZlB0
cjxSYW5nZT4gdGV4dFJhbmdlOworICAgICAgICBPcHRpb25hbDxTaW1wbGVSYW5nZT4gdGV4dFJh
bmdlOwogICAgICAgICBpZiAoTm9kZSogbm9kZSA9IG1fcmVuZGVyZXItPm5vZGUoKSkgewogICAg
ICAgICAgICAgbm9kZURvY3VtZW50ID0gJm5vZGUtPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICB0
ZXh0UmFuZ2UgPSByYW5nZU9mQ29udGVudHMoKm5vZGUpOworICAgICAgICAgICAgdGV4dFJhbmdl
ID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpub2RlKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIC8vIEZvciBhbm9ueW1vdXMgYmxvY2tzLCB3ZSB3b3JrIGFyb3VuZCBu
b3QgaGF2aW5nIGEgZGlyZWN0IG5vZGUgdG8gY3JlYXRlIGEgcmFuZ2UgZnJvbQogICAgICAgICAg
ICAgLy8gZGVmaW5pbmcgb25lIGJhc2VkIGluIHRoZSB0d28gZXh0ZXJuYWwgcG9zaXRpb25zIGRl
ZmluaW5nIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBzdWJ0cmVlLgpAQCAtNjUwLDcgKzY1MCw3IEBA
IFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0ZXh0VW5kZXJFbGVtZW50KEFjY2Vz
c2liaWxpdHlUZXh0VW5kZXJFbGVtZW50CiAgICAgICAgICAgICAgICAgUG9zaXRpb24gZW5kUG9z
aXRpb24gPSBwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKGxhc3RDaGlsZFJlbmRlcmVyLT5ub2Rl
KCkpOwogCiAgICAgICAgICAgICAgICAgbm9kZURvY3VtZW50ID0gJmZpcnN0Tm9kZUluQmxvY2st
PmRvY3VtZW50KCk7Ci0gICAgICAgICAgICAgICAgdGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
bm9kZURvY3VtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CisgICAgICAgICAgICAg
ICAgdGV4dFJhbmdlID0geyB7ICptYWtlQm91bmRhcnlQb2ludChzdGFydFBvc2l0aW9uKSwgKm1h
a2VCb3VuZGFyeVBvaW50KGVuZFBvc2l0aW9uKSB9IH07CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKaW5kZXggNWNiYmZkYzAwZjU1MDc0NzVh
MTg1YjJlODUyM2FmYWI3MjM4YjIyMi4uNGIyMmEzMWFjMTFhOTY1NDhlOTlmNjY4MTgxNWY0MjYy
ZjQxMmQwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQm91bmRhcnlQb2ludC5oCkBAIC00Nyw2ICs0Nyw3IEBA
IHN0cnVjdCBCb3VuZGFyeVBvaW50IHsKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCb3VuZGFyeVBv
aW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogCiBCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFy
eVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKE5vZGUmKTsKK0JvdW5kYXJ5UG9pbnQgbWFrZUJvdW5k
YXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhOb2RlJik7CiAKIGlubGluZSBCb3VuZGFyeVBvaW50
OjpCb3VuZGFyeVBvaW50KFJlZjxOb2RlPiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KQog
ICAgIDogY29udGFpbmVyKFdURk1vdmUoY29udGFpbmVyKSkKQEAgLTgyLDQgKzgzLDkgQEAgaW5s
aW5lIEJvdW5kYXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoTm9k
ZSYgbm9kZSkKICAgICByZXR1cm4geyBub2RlLCAwIH07CiB9CiAKK2lubGluZSBCb3VuZGFyeVBv
aW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKK3sKKyAg
ICByZXR1cm4geyBub2RlLCBub2RlLmxlbmd0aCgpIH07Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApp
bmRleCA4ZTU4ZDBlZGQ4NmYyYWI5MjY2YjU3MGRmMTc5ZjFjZTE0ZGQ0MDk5Li43OGY3ZjU1YmVm
NWQzOTE1Yjc3MjA2YTliMTJhZDAyNTViNDE3MzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCkBAIC0yNjEy
LDYgKzI2MTIsMTcgQEAgdm9pZCogTm9kZTo6b3BhcXVlUm9vdFNsb3coKSBjb25zdAogICAgIHJl
dHVybiBjb25zdF9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4obm9kZSkpOwog
fQogCitSZWZQdHI8Tm9kZT4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoTm9kZSYgYSwgTm9kZSYg
YikKK3sKKyAgICBmb3IgKGF1dG8gYW5jZXN0b3JBID0gJmE7IGFuY2VzdG9yQTsgYW5jZXN0b3JB
ID0gYW5jZXN0b3JBLT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgZm9yIChhdXRvIGFuY2VzdG9y
QiA9ICZiOyBhbmNlc3RvckI7IGFuY2VzdG9yQiA9IGFuY2VzdG9yQi0+cGFyZW50Tm9kZSgpKSB7
CisgICAgICAgICAgICBpZiAoYW5jZXN0b3JBID09IGFuY2VzdG9yQikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gYW5jZXN0b3JBOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCiBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBOb2Rl
JiBub2RlKQogewogICAgIHRzIDw8ICJub2RlICIgPDwgJm5vZGUgPDwgIiAiIDw8IG5vZGUuZGVi
dWdEZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKaW5kZXggZTJiMzA2MTcyNjJhNDI1MDlhMjFiZmRk
NzRhNTM3NDhjYWRjZDY4Mi4uZWFhYTM1OGM0ZWExYmVmY2VjNDkwMmIxYjc3NTNlNzFlODJiODNm
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTm9kZS5oCkBAIC02NzAsNiArNjcwLDggQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Tm9kZVJhcmVEYXRhLCBOb2RlUmFyZURhdGFEZWxldGVyPiBtX3JhcmVEYXRhOwog
fTsKIAorV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KE5vZGUmLCBOb2RlJik7CisKICNpZiBBU1NFUlRfRU5BQkxFRAogCiBpbmxpbmUgdm9pZCBhZG9w
dGVkKE5vZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCBiY2Y2OTA0NTc1ZWJk
ZTI0NGQ5MTQ1MWQ5NzEzODY0OGI3MTIxOGYyLi42NzQ1YjE5OWRiNTZiZmFkNTM2NjQ3MjhhYzJm
NzdmNjgwNzY4MDFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTE1NzAsNyArMTU3MCw3
IEBAIFJlZlB0cjxOb2RlPiBjb21tb25TaGFkb3dJbmNsdWRpbmdBbmNlc3Rvcihjb25zdCBQb3Np
dGlvbiYgYSwgY29uc3QgUG9zaXRpb24mIGIpCiAgICAgQVNTRVJUKG5vZGVBKTsKICAgICBhdXRv
KiBub2RlQiA9IGNvbW1vblNjb3BlLT5hbmNlc3Rvck5vZGVJblRoaXNTY29wZShiLmNvbnRhaW5l
ck5vZGUoKSk7CiAgICAgQVNTRVJUKG5vZGVCKTsKLSAgICByZXR1cm4gUmFuZ2U6OmNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKG5vZGVBLCBub2RlQik7CisgICAgcmV0dXJuIGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKCpub2RlQSwgKm5vZGVCKTsKIH0KIAogUG9zaXRpb24gcG9zaXRpb25JblBhcmVu
dEJlZm9yZU5vZGUoTm9kZSogbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCmluZGV4IDY0YThhYTgyNjdk
ZDI1NDE3YTY1YTAzYmViMGYxNjI1OTBlMDcxMDcuLmQ1YmRlMGEwYmJmNTRjMjYyYjFjZmFiMGFj
YTM0ZTc0MDAzMGY5MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcApAQCAtMTQzLDE3ICsxNDMsNiBAQCB2
b2lkIFJhbmdlOjpzZXREb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgbV9vd25lckRv
Y3VtZW50LT5hdHRhY2hSYW5nZSgqdGhpcyk7CiB9CiAKLU5vZGUqIFJhbmdlOjpjb21tb25BbmNl
c3RvckNvbnRhaW5lcihOb2RlKiBjb250YWluZXJBLCBOb2RlKiBjb250YWluZXJCKQotewotICAg
IGZvciAoTm9kZSogcGFyZW50QSA9IGNvbnRhaW5lckE7IHBhcmVudEE7IHBhcmVudEEgPSBwYXJl
bnRBLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgZm9yIChOb2RlKiBwYXJlbnRCID0gY29udGFp
bmVyQjsgcGFyZW50QjsgcGFyZW50QiA9IHBhcmVudEItPnBhcmVudE5vZGUoKSkgewotICAgICAg
ICAgICAgaWYgKHBhcmVudEEgPT0gcGFyZW50QikKLSAgICAgICAgICAgICAgICByZXR1cm4gcGFy
ZW50QTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQogc3RhdGlj
IGlubGluZSBib29sIGNoZWNrRm9yRGlmZmVyZW50Um9vdENvbnRhaW5lcihjb25zdCBSYW5nZUJv
dW5kYXJ5UG9pbnQmIHN0YXJ0LCBjb25zdCBSYW5nZUJvdW5kYXJ5UG9pbnQmIGVuZCkKIHsKICAg
ICBOb2RlKiBlbmRSb290Q29udGFpbmVyID0gZW5kLmNvbnRhaW5lcigpOwpAQCAtMjM5LDcgKzIy
OCw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IFJhbmdlOjppc1BvaW50SW5SYW5nZShOb2RlJiByZWZO
b2RlLCB1bnNpZ25lZCBvZmZzZXQpCiAgICAgaWYgKGNoZWNrTm9kZVJlc3VsdC5oYXNFeGNlcHRp
b24oKSkgewogICAgICAgICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhl
ciByZWZOb2RlIGFuZCBzdGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAg
ICAgICAgIC8vIGJ1dCB3ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4p
IG9wZXJhdGlvbiBoZXJlIGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIWNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKCZyZWZOb2RlLCAmc3RhcnRDb250YWluZXIoKSkpCisgICAgICAgIGlmICgh
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmVmTm9kZSwgc3RhcnRDb250YWluZXIoKSkpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJldHVybiBjaGVja05vZGVSZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOwogICAgIH0KQEAgLTI2Myw3ICsyNTIsNyBAQCBFeGNlcHRpb25Pcjxz
aG9ydD4gUmFuZ2U6OmNvbXBhcmVQb2ludChOb2RlJiByZWZOb2RlLCB1bnNpZ25lZCBvZmZzZXQp
IGNvbnN0CiAgICAgaWYgKGNoZWNrTm9kZVJlc3VsdC5oYXNFeGNlcHRpb24oKSkgewogICAgICAg
ICAvLyBET000IHNwZWMgcmVxdWlyZXMgdXMgdG8gY2hlY2sgd2hldGhlciByZWZOb2RlIGFuZCBz
dGFydCBjb250YWluZXIgaGF2ZSB0aGUgc2FtZSByb290IGZpcnN0CiAgICAgICAgIC8vIGJ1dCB3
ZSBkbyBpdCBpbiB0aGUgcmV2ZXJzZSBvcmRlciB0byBhdm9pZCBPKG4pIG9wZXJhdGlvbiBoZXJl
IGluIGNvbW1vbiBjYXNlLgotICAgICAgICBpZiAoIXJlZk5vZGUuaXNDb25uZWN0ZWQoKSAmJiAh
Y29tbW9uQW5jZXN0b3JDb250YWluZXIoJnJlZk5vZGUsICZzdGFydENvbnRhaW5lcigpKSkKKyAg
ICAgICAgaWYgKCFyZWZOb2RlLmlzQ29ubmVjdGVkKCkgJiYgIWNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yKHJlZk5vZGUsIHN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2Vw
dGlvbiB7IFdyb25nRG9jdW1lbnRFcnJvciB9OwogICAgICAgICByZXR1cm4gY2hlY2tOb2RlUmVz
dWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKICAgICB9CkBAIC00MjEsMTkgKzQxMCwxOSBAQCBFeGNl
cHRpb25PcjxzaG9ydD4gUmFuZ2U6OmNvbXBhcmVCb3VuZGFyeVBvaW50cyhOb2RlKiBjb250YWlu
ZXJBLCB1bnNpZ25lZCBvZmZzZQogCiAgICAgLy8gY2FzZSA0OiBjb250YWluZXJzIEEgJiBCIGFy
ZSBzaWJsaW5ncywgb3IgY2hpbGRyZW4gb2Ygc2libGluZ3MKICAgICAvLyAjIyMgd2UgbmVlZCB0
byBkbyBhIHRyYXZlcnNhbCBoZXJlIGluc3RlYWQKLSAgICBhdXRvKiBjb21tb25BbmNlc3RvciA9
IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGNvbnRhaW5lckEsIGNvbnRhaW5lckIpOworICAgIGF1
dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqY29udGFpbmVyQSwg
KmNvbnRhaW5lckIpOwogICAgIGlmICghY29tbW9uQW5jZXN0b3IpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBXcm9uZ0RvY3VtZW50RXJyb3IgfTsKICAgICBOb2RlKiBjaGlsZEEgPSBjb250
YWluZXJBOwogICAgIHdoaWxlIChjaGlsZEEgJiYgY2hpbGRBLT5wYXJlbnROb2RlKCkgIT0gY29t
bW9uQW5jZXN0b3IpCiAgICAgICAgIGNoaWxkQSA9IGNoaWxkQS0+cGFyZW50Tm9kZSgpOwogICAg
IGlmICghY2hpbGRBKQotICAgICAgICBjaGlsZEEgPSBjb21tb25BbmNlc3RvcjsKKyAgICAgICAg
Y2hpbGRBID0gY29tbW9uQW5jZXN0b3IuZ2V0KCk7CiAgICAgTm9kZSogY2hpbGRCID0gY29udGFp
bmVyQjsKICAgICB3aGlsZSAoY2hpbGRCICYmIGNoaWxkQi0+cGFyZW50Tm9kZSgpICE9IGNvbW1v
bkFuY2VzdG9yKQogICAgICAgICBjaGlsZEIgPSBjaGlsZEItPnBhcmVudE5vZGUoKTsKICAgICBp
ZiAoIWNoaWxkQikKLSAgICAgICAgY2hpbGRCID0gY29tbW9uQW5jZXN0b3I7CisgICAgICAgIGNo
aWxkQiA9IGNvbW1vbkFuY2VzdG9yLmdldCgpOwogCiAgICAgaWYgKGNoaWxkQSA9PSBjaGlsZEIp
CiAgICAgICAgIHJldHVybiAwOyAvLyBBIGlzIGVxdWFsIHRvIEIKQEAgLTEyOTAsMTAgKzEyNzks
MTAgQEAgaW50IFJhbmdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlv
ckxpbmVzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYKICAgICAgICAgfQogICAgIH0KIAotICAgIC8v
IFRoZSByYW5nZSBjb3VsZCBzcGFuIG92ZXIgbm9kZXMgd2l0aCBkaWZmZXJlbnQgd3JpdGluZyBt
b2Rlcy4KKyAgICAvLyBUaGUgcmFuZ2UgY291bGQgc3BhbiBub2RlcyB3aXRoIGRpZmZlcmVudCB3
cml0aW5nIG1vZGVzLgogICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIHVzZSB0aGUgd3Jp
dGluZyBtb2RlIG9mIHRoZSBjb21tb24gYW5jZXN0b3IuCiAgICAgaWYgKGNvbnRhaW5zRGlmZmVy
ZW50V3JpdGluZ01vZGVzKSB7Ci0gICAgICAgIGlmIChOb2RlKiBhbmNlc3RvciA9IGNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCZzdGFydENvbnRhaW5lciwgJmVuZENvbnRhaW5lcikpCisgICAgICAg
IGlmIChhdXRvIGFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWlu
ZXIsIGVuZENvbnRhaW5lcikpCiAgICAgICAgICAgICBoYXNGbGlwcGVkV3JpdGluZ01vZGUgPSBh
bmNlc3Rvci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCA4MmMzMjY1MzU5NjNhYTZmZDhlZDc1ZTYzY2Q4
MjJjMzcyZjEyM2RlLi44YTI2YWI1MmRmYWU3M2Q2OGI5MzI1ZjNhNzIwOGQxYjg4YTA2ZmVmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaApAQCAtNjAsOCArNjAsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgZW5k
T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmQub2Zmc2V0KCk7IH0KICAgICBib29sIGNvbGxh
cHNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQgPT0gbV9lbmQ7IH0KIAotICAgIE5vZGUqIGNv
bW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyByZXR1cm4gY29tbW9uQW5jZXN0b3JDb250
YWluZXIoJnN0YXJ0Q29udGFpbmVyKCksICZlbmRDb250YWluZXIoKSk7IH0KLSAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWluZXIoTm9kZSogY29udGFp
bmVyQSwgTm9kZSogY29udGFpbmVyQik7CisgICAgTm9kZSogY29tbW9uQW5jZXN0b3JDb250YWlu
ZXIoKSBjb25zdCB7IHJldHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihzdGFydENvbnRhaW5l
cigpLCBlbmRDb250YWluZXIoKSkuZ2V0KCk7IH0KICAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBzZXRTdGFydChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNl
dCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0RW5kKFJlZjxOb2Rl
PiYmIGNvbnRhaW5lciwgdW5zaWduZWQgb2Zmc2V0KTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IGNvbGxhcHNlKGJvb2wgdG9TdGFydCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAppbmRl
eCA5YWIxMzYwMTI0OTE3NDAzZjgxYmEzNjFlNzIyZGE5YzIyOGZhYmYwLi45MjQwYzM0MjQxODE4
YjJkMDRlZTg2MzAyNDJhZmY1NGQ5OWNjZjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5j
cHAKQEAgLTY0LDExICs2NCw2IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKE5vZGUmIG5vZGUpCiAgICAgcmV0dXJuIFNpbXBsZVJhbmdlIHsgeyAqcGFyZW50
LCBvZmZzZXQgfSwgeyAqcGFyZW50LCBvZmZzZXQgKyAxIH0gfTsKIH0KIAotc3RhdGljIEJvdW5k
YXJ5UG9pbnQgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhOb2RlJiBub2RlKQot
ewotICAgIHJldHVybiB7IG5vZGUsIG5vZGUubGVuZ3RoKCkgfTsKLX0KLQogU2ltcGxlUmFuZ2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiB7CiAgICAgcmV0dXJu
IHsgbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMobm9kZSksIG1ha2VCb3VuZGFy
eVBvaW50QWZ0ZXJOb2RlQ29udGVudHMobm9kZSkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDVhZjJjNjBlNDQ0
MDFiZTkyZGRhODg4MmE2NTdmYmNkNzllMDU2NzEuLjNiZDY1OGRmNjQ0MDFkMjJiMDYxZDZjYzQz
MGZlZWNiNDFmZWIwMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJu
YXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjE3LDE4ICsyMTcsMjAgQEAgYm9vbCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjphcHBseUF1dG9jb3JyZWN0aW9uQmVmb3JlVHlwaW5nSWZB
cHByb3ByaWF0ZSgpCiAKIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRv
VW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlv
bk9mQ29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKQogewotICAgIGlmIChBbHRlcm5hdGl2ZVRleHRDbGllbnQqIGNsaWVudCA9IGFsdGVy
bmF0aXZlVGV4dENsaWVudCgpKQorICAgIGlmIChhdXRvIGNsaWVudCA9IGFsdGVybmF0aXZlVGV4
dENsaWVudCgpKQogICAgICAgICBjbGllbnQtPnJlY29yZEF1dG9jb3JyZWN0aW9uUmVzcG9uc2Uo
QXV0b2NvcnJlY3Rpb25SZXNwb25zZTo6UmV2ZXJ0ZWQsIGNvcnJlY3RlZCwgY29ycmVjdGlvbik7
CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKICAgICBtX2ZyYW1lLmRvY3Vt
ZW50KCktPnVwZGF0ZUxheW91dCgpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2V0U2VsZWN0
aW9uKHNlbGVjdGlvbk9mQ29ycmVjdGVkLCBGcmFtZVNlbGVjdGlvbjo6ZGVmYXVsdFNldFNlbGVj
dGlvbk9wdGlvbnMoKSB8IEZyYW1lU2VsZWN0aW9uOjpTcGVsbENvcnJlY3Rpb25UcmlnZ2VyZWQp
OwotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIG1f
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSwgbV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKKyAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihzZWxlY3Rpb25PZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxl
Y3Rpb25PcHRpb25zKCkgfCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVk
KTsKKyAgICBhdXRvIHJhbmdlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5maXJz
dFJhbmdlKCk7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGF1dG8mIG1h
cmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLnJlbW92
ZU1hcmtlcnMocmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBE
b2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3VtZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0s
IERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJr
ZXIpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOwotICAgIG1hcmtlcnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3Bl
bGxDaGVja2luZ0V4ZW1wdGlvbik7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKCpyYW5nZSwg
T3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiB7IERvY3VtZW50TWFya2VyOjpT
cGVsbGluZywgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQgfSwgRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyOjpSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcik7CisgICAgbWFya2Vy
cy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOworICAgIG1h
cmtlcnMuYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pOwogfQogCiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQo
KQpAQCAtMzk1LDEwICszOTcsMTIgQEAgdm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpy
ZXNwb25kVG9VbmFwcGxpZWRFZGl0aW5nKEVkaXRDb21tYW5kQ29tcG9zaXRpb24KIHsKICAgICBp
ZiAoIWNvbW1hbmQtPndhc0NyZWF0ZUxpbmtDb21tYW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBjb21tYW5k
LT5zdGFydGluZ1NlbGVjdGlvbigpLnN0YXJ0KCksIGNvbW1hbmQtPnN0YXJ0aW5nU2VsZWN0aW9u
KCkuZW5kKCkpOworICAgIGF1dG8gcmFuZ2UgPSBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigp
LmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm47CiAgICAgYXV0
byYgbWFya2VycyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMu
YWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQpOwotICAgIG1hcmtl
cnMuYWRkTWFya2VyKHJhbmdlLCBEb2N1bWVudE1hcmtlcjo6U3BlbGxDaGVja2luZ0V4ZW1wdGlv
bik7CisgICAgbWFya2Vycy5hZGRNYXJrZXIoKnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsQ2hlY2tpbmdFeGVtcHRpb24pOwogfQogCiBFZGl0b3JDbGllbnQqIEFsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXI6OmVkaXRvckNsaWVudCgpCkBAIC00NzEsNyArNDc1LDcgQEAgdm9pZCBBbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZvckRlbGV0ZWRB
dXRvY29ycmVjdGlvbkEKICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24gPT0gcHJlY2VkaW5nQ2hhcmFj
dGVyUG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFj
dGVyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uLCBlbmRPZlNlbGVjdGlvbik7CisgICAgYXV0byBwcmVjZWRpbmdDaGFy
YWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VCb3VuZGFyeVBvaW50KHByZWNlZGluZ0No
YXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBvaW50KGVuZE9mU2VsZWN0aW9uKSB9Owog
ICAgIFN0cmluZyBzdHJpbmcgPSBwbGFpblRleHQocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UpOwog
ICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpIHx8ICFkZXByZWNhdGVkSXNFZGl0aW5nV2hpdGVzcGFj
ZShzdHJpbmdbc3RyaW5nLmxlbmd0aCgpIC0gMV0pKQogICAgICAgICByZXR1cm47CkBAIC00ODQs
MjUgKzQ4OCwyNSBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRp
bmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQQogCiBib29sIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnByb2Nlc3NNYXJrZXJzT25UZXh0VG9CZVJlcGxhY2VkQnlSZXN1bHQo
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQsIFJhbmdlJiByYW5nZVdpdGhBbHRlcm5h
dGl2ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmdUb0JlUmVwbGFjZWQpCiB7Ci0gICAgRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyJiBtYXJrZXJDb250cm9sbGVyID0gbV9mcmFtZS5kb2N1bWVudCgpLT5t
YXJrZXJzKCk7Ci0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXIuaGFzTWFya2VycyhyYW5nZVdpdGhB
bHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgeworICAgIGF1dG8mIG1h
cmtlcnMgPSBtX2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKKyAgICBpZiAobWFya2Vycy5o
YXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1l
bnQpKSB7CiAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlOjpDb3Jy
ZWN0aW9uKQogICAgICAgICAgICAgcmVjb3JkU3BlbGxjaGVja2VyUmVzcG9uc2VGb3JNb2RpZmll
ZENvcnJlY3Rpb24ocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIHN0cmluZ1RvQmVSZXBsYWNlZCwgcmVz
dWx0LnJlcGxhY2VtZW50KTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlm
IChtYXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3Vt
ZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rpb24pKQorICAgIGlmIChtYXJrZXJzLmhhc01hcmtl
cnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERvY3VtZW50TWFya2VyOjpSZWplY3RlZENvcnJlY3Rp
b24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAobWFya2VyQ29udHJvbGxlci5o
YXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6QWNjZXB0ZWRD
YW5kaWRhdGUpKQorICAgIGlmIChtYXJrZXJzLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRp
dmUsIERvY3VtZW50TWFya2VyOjpBY2NlcHRlZENhbmRpZGF0ZSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIFBvc2l0aW9uIGJlZ2lubmluZ09mUmFuZ2UgPSByYW5nZVdpdGhBbHRlcm5h
dGl2ZS5zdGFydFBvc2l0aW9uKCk7CiAgICAgUG9zaXRpb24gcHJlY2VkaW5nQ2hhcmFjdGVyUG9z
aXRpb24gPSBiZWdpbm5pbmdPZlJhbmdlLnByZXZpb3VzKCk7Ci0gICAgYXV0byBwcmVjZWRpbmdD
aGFyYWN0ZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgcHJlY2Vk
aW5nQ2hhcmFjdGVyUG9zaXRpb24sIGJlZ2lubmluZ09mUmFuZ2UpOwogCi0gICAgVmVjdG9yPFJl
bmRlcmVkRG9jdW1lbnRNYXJrZXIqPiBtYXJrZXJzID0gbWFya2VyQ29udHJvbGxlci5tYXJrZXJz
SW5SYW5nZShwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OkRlbGV0ZWRB
dXRvY29ycmVjdGlvbik7Ci0gICAgZm9yIChjb25zdCBhdXRvKiBtYXJrZXIgOiBtYXJrZXJzKSB7
CisgICAgYXV0byBwcmVjZWRpbmdDaGFyYWN0ZXJSYW5nZSA9IFNpbXBsZVJhbmdlIHsgKm1ha2VC
b3VuZGFyeVBvaW50KHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKSwgKm1ha2VCb3VuZGFyeVBv
aW50KGJlZ2lubmluZ09mUmFuZ2UpIH07CisKKyAgICBmb3IgKGF1dG8mIG1hcmtlciA6IG1hcmtl
cnMubWFya2Vyc0luUmFuZ2UocHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2Vy
OjpEZWxldGVkQXV0b2NvcnJlY3Rpb24pKSB7CiAgICAgICAgIGlmIChtYXJrZXItPmRlc2NyaXB0
aW9uKCkgPT0gc3RyaW5nVG9CZVJlcGxhY2VkKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ2hhbmdlTGlzdFR5cGVDb21tYW5k
LmNwcAppbmRleCBkOGE4NzAzYTViYmM2MDU1YzUwNmNlMDhmMzVhZGRiYzRhMGU5YjFkLi5kOTk3
YmFiZmUyYzhmNWUwNTU4NmRhNjA3ODE5ZjYxZTA1MWU3MWVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwCkBAIC00MCw4ICs0MCwxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBPcHRpb25hbDxzdGQ6OnBhaXI8Q2hhbmdl
TGlzdFR5cGVDb21tYW5kOjpUeXBlLCBSZWY8SFRNTEVsZW1lbnQ+Pj4gbGlzdENvbnZlcnNpb25U
eXBlRm9yU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIHsKKyAg
ICBhdXRvIHN0YXJ0Tm9kZSA9IHNlbGVjdGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKTsKKyAg
ICBhdXRvIGVuZE5vZGUgPSBzZWxlY3Rpb24uZW5kKCkuY29udGFpbmVyTm9kZSgpOworICAgIGlm
ICghc3RhcnROb2RlIHx8ICFlbmROb2RlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
ICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigqc3RhcnRO
b2RlLCAqZW5kTm9kZSk7CisKICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpc3RUb1JlcGxhY2U7
Ci0gICAgYXV0byBjb21tb25BbmNlc3RvciA9IG1ha2VSZWZQdHIoUmFuZ2U6OmNvbW1vbkFuY2Vz
dG9yQ29udGFpbmVyKHNlbGVjdGlvbi5zdGFydCgpLmNvbnRhaW5lck5vZGUoKSwgc2VsZWN0aW9u
LmVuZCgpLmNvbnRhaW5lck5vZGUoKSkpOwogICAgIGlmIChpczxIVE1MVUxpc3RFbGVtZW50Pihj
b21tb25BbmNlc3RvcikgfHwgaXM8SFRNTE9MaXN0RWxlbWVudD4oY29tbW9uQW5jZXN0b3IpKQog
ICAgICAgICBsaXN0VG9SZXBsYWNlID0gZG93bmNhc3Q8SFRNTEVsZW1lbnQ+KGNvbW1vbkFuY2Vz
dG9yLmdldCgpKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcAppbmRleCAz
YjAyOWVhN2YzMDE0NWMxNzRjMzQyNGNiM2FjODJiYzM4OTVlYmQ2Li41YWU3YWIyZGZhM2JiZWI3
NTkyOTgwYTRmOGVjMmE3NTc4ZjMwNTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAK
QEAgLTExNDAsMTkgKzExNDAsMjIgQEAgc3RhdGljIGJvb2wgaXNWaXNpYmx5QWRqYWNlbnQoY29u
c3QgUG9zaXRpb24mIGZpcnN0LCBjb25zdCBQb3NpdGlvbiYgc2Vjb25kKQogCiAvLyBEZXRlcm1p
bmVzIHdoZXRoZXIgYSBub2RlIGlzIGluc2lkZSBhIHJhbmdlIG9yIHZpc2libHkgc3RhcnRzIGFu
ZCBlbmRzIGF0IHRoZSBib3VuZGFyaWVzIG9mIHRoZSByYW5nZS4KIC8vIENhbGwgdGhpcyBmdW5j
dGlvbiB0byBkZXRlcm1pbmUgd2hldGhlciBhIG5vZGUgaXMgdmlzaWJseSBmaXQgaW5zaWRlIHNl
bGVjdGVkUmFuZ2UKLWJvb2wgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbihOb2RlJiBub2Rl
LCBjb25zdCBSYW5nZSYgcmFuZ2UpCitib29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4o
Tm9kZSYgbm9kZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewogICAgIC8vIElmIHRoZSBu
b2RlIGlzIGluc2lkZSB0aGUgcmFuZ2UsIHRoZW4gaXQgc3VyZWx5IGlzIGNvbnRhaW5lZCB3aXRo
aW4uCi0gICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gcmFuZ2UuY29tcGFyZU5vZGUobm9kZSk7
CisgICAgYXV0byBjb21wYXJpc29uUmVzdWx0ID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29t
cGFyZU5vZGUobm9kZSk7CiAgICAgaWYgKCFjb21wYXJpc29uUmVzdWx0Lmhhc0V4Y2VwdGlvbigp
ICYmIGNvbXBhcmlzb25SZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkgPT0gUmFuZ2U6Ok5PREVf
SU5TSURFKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGJvb2wgc3RhcnRJc1Zpc3VhbGx5
U2FtZSA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gcmFuZ2Uuc3RhcnRQb3Np
dGlvbigpOwotICAgIGlmIChzdGFydElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMo
cG9zaXRpb25JblBhcmVudEFmdGVyTm9kZSgmbm9kZSksIHJhbmdlLmVuZFBvc2l0aW9uKCkpIDwg
MCkKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
cmFuZ2Uuc3RhcnQpOworICAgIGF1dG8gZW5kUG9zaXRpb24gPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24ocmFuZ2UuZW5kKTsKKworICAgIGJvb2wgc3RhcnRJc1Zpc3VhbGx5U2FtZSA9IHZp
c2libGVQb3NpdGlvbkJlZm9yZU5vZGUobm9kZSkgPT0gc3RhcnRQb3NpdGlvbjsKKyAgICBpZiAo
c3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uSW5QYXJlbnRB
ZnRlck5vZGUoJm5vZGUpLCBlbmRQb3NpdGlvbikgPCAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUo
bm9kZSkgPT0gcmFuZ2UuZW5kUG9zaXRpb24oKTsKLSAgICBpZiAoZW5kSXNWaXN1YWxseVNhbWUg
JiYgY29tcGFyZVBvc2l0aW9ucyhyYW5nZS5zdGFydFBvc2l0aW9uKCksIHBvc2l0aW9uSW5QYXJl
bnRCZWZvcmVOb2RlKCZub2RlKSkgPCAwKQorICAgIGJvb2wgZW5kSXNWaXN1YWxseVNhbWUgPSB2
aXNpYmxlUG9zaXRpb25BZnRlck5vZGUobm9kZSkgPT0gZW5kUG9zaXRpb247CisgICAgaWYgKGVu
ZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3NpdGlvbnMoc3RhcnRQb3NpdGlvbiwgcG9zaXRp
b25JblBhcmVudEJlZm9yZU5vZGUoJm5vZGUpKSA8IDApCiAgICAgICAgIHJldHVybiB0cnVlOwog
CiAgICAgcmV0dXJuIHN0YXJ0SXNWaXN1YWxseVNhbWUgJiYgZW5kSXNWaXN1YWxseVNhbWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdGluZy5oCmluZGV4IGMwNTI2NDZlMTUzM2JmMmQ2NzVlNDQwYzM3MTA3
OWRhOTRhNGRjZDEuLjdmM2FjNjJiMzdlMThjMGRlMDkzNTMxMGVhODhjNDcxNzYwZjE3YjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5oCkBAIC0zNyw3ICszNyw2IEBAIGNsYXNzIEhUTUxFbGVt
ZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNzIEhUTUxTcGFuRWxlbWVudDsKIGNs
YXNzIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBSZW5k
ZXJCbG9jazsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFZpc2libGVTZWxlY3Rpb247
CkBAIC0xMDEsNyArMTAwLDcgQEAgYm9vbCBpc05vZGVSZW5kZXJlZChjb25zdCBOb2RlJik7CiBi
b29sIGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKGNvbnN0IE5vZGUqKTsKIGJv
b2wgaXNOb25UYWJsZUNlbGxIVE1MQmxvY2tFbGVtZW50KGNvbnN0IE5vZGUqKTsKIAotYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25zdCBSYW5nZSYpOworYm9vbCBp
c05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmLCBjb25zdCBTaW1wbGVSYW5nZSYpOwog
CiBib29sIGFyZUlkZW50aWNhbEVsZW1lbnRzKGNvbnN0IE5vZGUmLCBjb25zdCBOb2RlJik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxYzgzZmQwYWFlODczMzliMTQzYTE5NmQ2
NDRhOTQ2Njg5ZmIxNTNmLi4yYjEwNjA2ODk5MGI3MjI4MjRjZDg2ZDE3ZmRjYzJlNWYxY2MzOGQ1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zMjExLDcgKzMyMTEsNyBAQCB2b2lk
IEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICByZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQodHJhbnNw
b3NlZCwgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9u
OjpJbnNlcnQpOwogfQogCi12b2lkIEVkaXRvcjo6YWRkUmFuZ2VUb0tpbGxSaW5nKGNvbnN0IFJh
bmdlJiByYW5nZSwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlIG1vZGUpCit2b2lkIEVkaXRvcjo6YWRk
UmFuZ2VUb0tpbGxSaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgS2lsbFJpbmdJbnNlcnRp
b25Nb2RlIG1vZGUpCiB7CiAgICAgYWRkVGV4dFRvS2lsbFJpbmcocGxhaW5UZXh0KHJhbmdlKSwg
bW9kZSk7CiB9CkBAIC0zNjg1LDk5ICszNjg1LDc0IEBAIHZvaWQgRWRpdG9yOjpyZXNwb25kVG9D
aGFuZ2VkU2VsZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mLCBPcHRpb25TZXQ8RnJhbWVT
CiAgICAgc2NoZWR1bGVFZGl0b3JVSVVwZGF0ZSgpOwogfQogCi0jaWYgRU5BQkxFKFRFTEVQSE9O
RV9OVU1CRVJfREVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyNpZiBFTkFCTEUo
VEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykKIAotYm9vbCBFZGl0
b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKQorYm9vbCBFZGl0b3I6OnNob3VsZERl
dGVjdFRlbGVwaG9uZU51bWJlcnMoKSBjb25zdAogewotICAgIGlmICghbV9mcmFtZS5kb2N1bWVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCkuaXNUZWxl
cGhvbmVOdW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpp
c1N1cHBvcnRlZCgpOworICAgIHJldHVybiBtX2ZyYW1lLmRvY3VtZW50KCkgJiYgZG9jdW1lbnQo
KS5pc1RlbGVwaG9uZU51bWJlclBhcnNpbmdFbmFibGVkKCkgJiYgVGVsZXBob25lTnVtYmVyRGV0
ZWN0b3I6OmlzU3VwcG9ydGVkKCk7CiB9CiAKLXZvaWQgRWRpdG9yOjpzY2FuU2VsZWN0aW9uRm9y
VGVsZXBob25lTnVtYmVycygpCitzdGF0aWMgVmVjdG9yPFNpbXBsZVJhbmdlPiBzY2FuRm9yVGVs
ZXBob25lTnVtYmVycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgaWYgKCFzaG91
bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkgfHwgIWNsaWVudCgpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmNsZWFyKCk7Ci0KLSAgICBW
ZWN0b3I8UmVmUHRyPFJhbmdlPj4gbWFya2VkUmFuZ2VzOwotCi0gICAgRnJhbWVTZWxlY3Rpb24m
IGZyYW1lU2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKLSAgICBpZiAoIWZyYW1lU2Vs
ZWN0aW9uLmlzUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJhbWUucGFn
ZSgpKQotICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigpLnNlbGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwotICAgICAgICByZXR1cm47CisgICAg
Ly8gRG9uJ3Qgc2NhbiBmb3IgcGhvbmUgbnVtYmVycyBpbnNpZGUgZWRpdGFibGUgcmVnaW9ucy4K
KyAgICBhdXRvJiBzdGFydE5vZGUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpOworICAgIGlmIChz
dGFydE5vZGUuaGFzRWRpdGFibGVTdHlsZSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGF1
dG8gdGV4dCA9IHBsYWluVGV4dChyYW5nZSk7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiByZXN1
bHQ7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBz
Y2FubmVyUG9zaXRpb24gPSAwOworICAgIGludCByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gPSAwOwor
ICAgIGludCByZWxhdGl2ZUVuZFBvc2l0aW9uID0gMDsKKyAgICBhdXRvIGNoYXJhY3RlcnMgPSBT
dHJpbmdWaWV3IHsgdGV4dCB9LnVwY29udmVydGVkQ2hhcmFjdGVycygpOworICAgIHdoaWxlIChz
Y2FubmVyUG9zaXRpb24gPCBsZW5ndGggJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmZpbmQo
JmNoYXJhY3RlcnNbc2Nhbm5lclBvc2l0aW9uXSwgbGVuZ3RoIC0gc2Nhbm5lclBvc2l0aW9uLCAm
cmVsYXRpdmVTdGFydFBvc2l0aW9uLCAmcmVsYXRpdmVFbmRQb3NpdGlvbikpIHsKKyAgICAgICAg
QVNTRVJUKHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlRW5kUG9zaXRpb24gPD0gbGVuZ3RoKTsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIENoYXJh
Y3RlclJhbmdlKHNjYW5uZXJQb3NpdGlvbiArIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiwgcmVsYXRp
dmVFbmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbikpKTsKKyAgICAgICAgc2Nhbm5l
clBvc2l0aW9uICs9IHJlbGF0aXZlRW5kUG9zaXRpb247CiAgICAgfQotICAgIGF1dG8gc2VsZWN0
ZWRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpKTsKLQotICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcgY2hhcmFj
dGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVjdGVkIHBo
b25lIG51bWJlcnMuCi0gICAgc3RhdGljIGNvbnN0IGludCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAx
NTsKLSAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiB2aXNpYmxlU2VsZWN0aW9uID0gZnJhbWVT
ZWxlY3Rpb24uc2VsZWN0aW9uKCk7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSB2aXNpYmxlU2VsZWN0
aW9uLnN0YXJ0KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gdmlzaWJsZVNlbGVjdGlvbi5lbmQoKTsK
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNoYXJhY3RlcnNUb0V4dGVuZDsgKytpKSB7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFNpbXBsZVJhbmdlIGV4dGVuZFNlbGVjdGlvbihj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIGNoYXJhY3RlcnNUb0V4dGVuZCkKK3sK
KyAgICBhdXRvIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0
KTsKKyAgICBhdXRvIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJzVG9FeHRlbmQ7ICsraSkg
ewogICAgICAgICBzdGFydCA9IHN0YXJ0LnByZXZpb3VzKENoYXJhY3Rlcik7CiAgICAgICAgIGVu
ZCA9IGVuZC5uZXh0KENoYXJhY3Rlcik7CiAgICAgfQorICAgIHJldHVybiB7ICptYWtlQm91bmRh
cnlQb2ludChzdGFydCksICptYWtlQm91bmRhcnlQb2ludChlbmQpfTsKK30KIAotICAgIEZyYW1l
U2VsZWN0aW9uIGV4dGVuZGVkU2VsZWN0aW9uOwotICAgIGV4dGVuZGVkU2VsZWN0aW9uLnNldFN0
YXJ0KHN0YXJ0KTsKLSAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRFbmQoZW5kKTsKLSAgICBhdXRv
IGV4dGVuZGVkUmFuZ2UgPSBleHRlbmRlZFNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6
ZWRSYW5nZSgpOwotCi0gICAgaWYgKCFleHRlbmRlZFJhbmdlKSB7Ci0gICAgICAgIGlmIChhdXRv
KiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCi0gICAgICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7Cit2
b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJlcnMoKQoreworICAgIC8v
IEZJWE1FOiBXaHkgaXMgaXQgaGVscGZ1bCBoZXJlIHRvIGNoZWNrIGNsaWVudCBmb3IgbnVsbD8K
KyAgICBpZiAoIXNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSB8fCAhY2xpZW50KCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJz
KGNyZWF0ZUxpdmVSYW5nZSgqZXh0ZW5kZWRSYW5nZSksIHBsYWluVGV4dCgqZXh0ZW5kZWRSYW5n
ZSksIG1hcmtlZFJhbmdlcyk7CisgICAgbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5j
bGVhcigpOwogCi0gICAgLy8gT25seSBjb25zaWRlciByYW5nZXMgd2l0aCBhIGRldGVjdGVkIHRl
bGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhlIGFjdHVhbCBzZWxlY3Rpb24g
cmFuZ2UuCi0gICAgZm9yIChhdXRvJiByYW5nZSA6IG1hcmtlZFJhbmdlcykgewotICAgICAgICBp
ZiAocmFuZ2VzT3ZlcmxhcChyYW5nZS5nZXQoKSwgc2VsZWN0ZWRSYW5nZS5nZXQoKSkpCi0gICAg
ICAgICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZChyYW5nZSk7Cisg
ICAgYXV0byYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0
aW9uLmlzUmFuZ2UoKSkgeworICAgICAgICBpZiAoYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0
aW9uLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgeworICAgICAgICAgICAgLy8gRXh0ZW5kIHRo
ZSByYW5nZSBhIGZldyBjaGFyYWN0ZXJzIGluIGVhY2ggZGlyZWN0aW9uIHRvIGRldGVjdCBpbmNv
bXBsZXRlbHkgc2VsZWN0ZWQgcGhvbmUgbnVtYmVycy4KKyAgICAgICAgICAgIGNvbnN0ZXhwciB1
bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRlbmQgPSAxNTsKKyAgICAgICAgICAgIGF1dG8gc2VsZWN0
ZWRMaXZlUmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpOworICAgICAgICAg
ICAgZm9yIChhdXRvJiByYW5nZSA6IHNjYW5Gb3JUZWxlcGhvbmVOdW1iZXJzKGV4dGVuZFNlbGVj
dGlvbigqc2VsZWN0ZWRSYW5nZSwgY2hhcmFjdGVyc1RvRXh0ZW5kKSkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXMgdW5jb25kaXRpb25hbGx5IGFuZCB0aGUg
Y29kZSBiZWxvdyB0aGlzIG9ubHkgd2hlbiBpdCBvdmVybGFwcyB0aGUgc2VsZWN0aW9uPworICAg
ICAgICAgICAgICAgIGRvY3VtZW50KCkubWFya2VycygpLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1l
bnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcik7CisKKyAgICAgICAgICAgICAgICAvLyBPbmx5IGNv
bnNpZGVyIHJhbmdlcyB3aXRoIGEgZGV0ZWN0ZWQgdGVsZXBob25lIG51bWJlciBpZiB0aGV5IG92
ZXJsYXAgd2l0aCB0aGUgYWN0dWFsIHNlbGVjdGlvbiByYW5nZS4KKyAgICAgICAgICAgICAgICBp
ZiAocmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBzZWxlY3RlZExp
dmVSYW5nZS5wdHIoKSkpCisgICAgICAgICAgICAgICAgICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVO
dW1iZXJSYW5nZXMuYXBwZW5kKHJhbmdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAg
IH0KIAogICAgIGlmIChhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCkpCiAgICAgICAgIHBhZ2Ut
PnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdl
c0NoYW5nZWQoKTsKIH0KIAotdm9pZCBFZGl0b3I6OnNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJl
cnMoUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmdWaWV3JiBzdHJpbmdWaWV3LCBWZWN0b3I8UmVm
UHRyPFJhbmdlPj4mIG1hcmtlZFJhbmdlcykKLXsKLSAgICAvLyBEb24ndCBzY2FuIGZvciBwaG9u
ZSBudW1iZXJzIGluc2lkZSBlZGl0YWJsZSByZWdpb25zLgotICAgIE5vZGUmIHN0YXJ0Tm9kZSA9
IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCk7Ci0gICAgaWYgKHN0YXJ0Tm9kZS5oYXNFZGl0YWJsZVN0
eWxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIHJlbGF0aXZlU3RhcnRQb3NpdGlvbiBh
bmQgcmVsYXRpdmVFbmRQb3NpdGlvbiBhcmUgdGhlIGVuZHBvaW50cyBvZiB0aGUgcGhvbmUgbnVt
YmVyIHJhbmdlLAotICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBzY2FubmVyUG9zaXRpb24KLSAgICB1
bnNpZ25lZCBsZW5ndGggPSBzdHJpbmdWaWV3Lmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIHNjYW5u
ZXJQb3NpdGlvbiA9IDA7Ci0gICAgaW50IHJlbGF0aXZlU3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAg
aW50IHJlbGF0aXZlRW5kUG9zaXRpb24gPSAwOwotCi0gICAgYXV0byBjaGFyYWN0ZXJzID0gc3Ry
aW5nVmlldy51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKLQotICAgIHdoaWxlIChzY2FubmVyUG9z
aXRpb24gPCBsZW5ndGggJiYgVGVsZXBob25lTnVtYmVyRGV0ZWN0b3I6OmZpbmQoJmNoYXJhY3Rl
cnNbc2Nhbm5lclBvc2l0aW9uXSwgbGVuZ3RoIC0gc2Nhbm5lclBvc2l0aW9uLCAmcmVsYXRpdmVT
dGFydFBvc2l0aW9uLCAmcmVsYXRpdmVFbmRQb3NpdGlvbikpIHsKLSAgICAgICAgLy8gVGhlIGNv
bnZlbnRpb24gaW4gdGhlIERhdGEgRGV0ZWN0b3JzIGZyYW1ld29yayBpcyB0aGF0IHRoZSBlbmQg
cG9zaXRpb24gaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBOT1QgaW4gdGhlIHBob25lIG51bWJlcgot
ICAgICAgICAvLyAodGhhdCBpcywgdGhlIGxlbmd0aCBvZiB0aGUgcmFuZ2UgaXMgcmVsYXRpdmVF
bmRQb3NpdGlvbiAtIHJlbGF0aXZlU3RhcnRQb3NpdGlvbikuIFNvIHN1YnRyYWN0IDEgdG8gZ2V0
IHRoZSBzYW1lCi0gICAgICAgIC8vIGNvbnZlbnRpb24gYXMgdGhlIG9sZCBXZWJDb3JlIHBob25l
IG51bWJlciBwYXJzZXIgKHNvIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgaXMgc3RpbGwgdmFs
aWQgaWYgd2Ugd2FudCB0byBnbyBiYWNrCi0gICAgICAgIC8vIHRvIHRoZSBvbGQgcGFyc2VyKS4K
LSAgICAgICAgLS1yZWxhdGl2ZUVuZFBvc2l0aW9uOwotCi0gICAgICAgIEFTU0VSVChzY2FubmVy
UG9zaXRpb24gKyByZWxhdGl2ZUVuZFBvc2l0aW9uIDwgbGVuZ3RoKTsKLQotICAgICAgICBhdXRv
IHN1YnJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBDaGFyYWN0ZXJSYW5nZShz
Y2FubmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24sIHJlbGF0aXZlRW5kUG9zaXRp
b24gLSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gKyAxKSk7Ci0KLSAgICAgICAgbWFya2VkUmFuZ2Vz
LmFwcGVuZChjcmVhdGVMaXZlUmFuZ2Uoc3VicmFuZ2UpKTsKLSAgICAgICAgcmFuZ2Uub3duZXJE
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIoc3VicmFuZ2UsIERvY3VtZW50TWFya2VyOjpU
ZWxlcGhvbmVOdW1iZXIpOwotCi0gICAgICAgIHNjYW5uZXJQb3NpdGlvbiArPSByZWxhdGl2ZUVu
ZFBvc2l0aW9uICsgMTsKLSAgICB9Ci19Ci0KICNlbmRpZiAvLyBFTkFCTEUoVEVMRVBIT05FX05V
TUJFUl9ERVRFQ1RJT04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQogCiB2b2lkIEVkaXRvcjo6
dXBkYXRlRWRpdG9yVUlOb3dJZlNjaGVkdWxlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRl
eCBhZDllZGEyNjE4YzlhODgwYmVjYmIxY2U0ZDY4YmI1OWI4OWMyMGMwLi4yM2Y1ZGUxMzA0MDQ5
OGU1ODBjZTFkMWQ0MWNlNDcwZDdkYWU0OWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAg
LTQxNyw3ICs0MTcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICAKICAgICBlbnVtIGNsYXNzIEtp
bGxSaW5nSW5zZXJ0aW9uTW9kZSB7IFByZXBlbmRUZXh0LCBBcHBlbmRUZXh0IH07Ci0gICAgdm9p
ZCBhZGRSYW5nZVRvS2lsbFJpbmcoY29uc3QgUmFuZ2UmLCBLaWxsUmluZ0luc2VydGlvbk1vZGUp
OworICAgIHZvaWQgYWRkUmFuZ2VUb0tpbGxSaW5nKGNvbnN0IFNpbXBsZVJhbmdlJiwgS2lsbFJp
bmdJbnNlcnRpb25Nb2RlKTsKICAgICB2b2lkIGFkZFRleHRUb0tpbGxSaW5nKGNvbnN0IFN0cmlu
ZyYsIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSk7CiAgICAgdm9pZCBzZXRTdGFydE5ld0tpbGxSaW5n
U2VxdWVuY2UoYm9vbCk7CiAKQEAgLTUwNiw3ICs1MDYsNyBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCB0b2dnbGVBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb24oKTsKICNlbmRp
ZgogCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHdlYkNvbnRlbnRGcm9tUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wm
IGNob3NlUGxhaW5UZXh0KTsKKyAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gd2ViQ29udGVu
dEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwg
Ym9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOwogCiAgICAgV0VCQ09S
RV9FWFBPUlQgY29uc3QgRm9udCogZm9udEZvclNlbGVjdGlvbihib29sJiBoYXNNdWx0aXBsZUZv
bnRzKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlRm9yU2VsZWN0aW9uU3RhcnQoRnJhbWUqICwgTm9kZSAqJm5vZGVUb1JlbW92ZSk7CkBA
IC01MTYsMTIgKzUxNiwxMyBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHN0
cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmQoKTsKICAgICBTdHJpbmcgc3RyaW5nU2VsZWN0aW9u
Rm9yUGFzdGVib2FyZFdpdGhJbWFnZUFsdFRleHQoKTsKICAgICB2b2lkIHRha2VGaW5kU3RyaW5n
RnJvbVNlbGVjdGlvbigpOwotI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQorICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgcmVwbGFjZVNlbGVjdGlvbldpdGhBdHRyaWJ1dGVkU3RyaW5nKE5TQXR0cmli
dXRlZFN0cmluZyAqLCBNYWlsQmxvY2txdW90ZUhhbmRsaW5nID0gTWFpbEJsb2NrcXVvdGVIYW5k
bGluZzo6UmVzcGVjdEJsb2NrcXVvdGUpOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNl
Tm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUqLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhU2VsZWN0aW9uRm9y
UGFzdGVib2FyZChjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKLSNlbmRpZiAvLyAhUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlcGxhY2VTZWxlY3Rp
b25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwgTWFpbEJsb2NrcXVv
dGVIYW5kbGluZyA9IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RCbG9ja3F1b3RlKTsK
ICNlbmRpZgogCiAgICAgYm9vbCBjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdlcygpIGNv
bnN0OwpAQCAtNTMyLDkgKzUzMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHdyaXRlU2VsZWN0aW9u
KFBhc3RlYm9hcmRXcml0ZXJEYXRhJik7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShURUxFUEhPTkVf
TlVNQkVSX0RFVEVDVElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKFRF
TEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCiAgICAgdm9pZCBzY2Fu
U2VsZWN0aW9uRm9yVGVsZXBob25lTnVtYmVycygpOwotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8
UmFuZ2U+PiYgZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKSBjb25zdCB7IHJldHVybiBt
X2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzOyB9CisgICAgY29uc3QgVmVjdG9yPFNpbXBs
ZVJhbmdlPiYgZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKSBjb25zdCB7IHJldHVybiBt
X2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzOyB9CiAjZW5kaWYKIAogICAgIFdFQkNPUkVf
RVhQT1JUIFN0cmluZyBzdHJpbmdGb3JDYW5kaWRhdGVSZXF1ZXN0KCkgY29uc3Q7CkBAIC02NDgs
MTIgKzY0OSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9lZGl0b3JVSVVwZGF0ZVRpbWVyV2Fz
VHJpZ2dlcmVkQnlEaWN0YXRpb24geyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0hhbmRsaW5nQWNj
ZXB0ZWRDYW5kaWRhdGUgeyBmYWxzZSB9OwogCi0jaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJf
REVURUNUSU9OKSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBib29sIHNob3VsZERldGVj
dFRlbGVwaG9uZU51bWJlcnMoKTsKLSAgICB2b2lkIHNjYW5SYW5nZUZvclRlbGVwaG9uZU51bWJl
cnMoUmFuZ2UmLCBjb25zdCBTdHJpbmdWaWV3JiwgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBtYXJr
ZWRSYW5nZXMpOworI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYgUExB
VEZPUk0oTUFDKQorICAgIGJvb2wgc2hvdWxkRGV0ZWN0VGVsZXBob25lTnVtYmVycygpIGNvbnN0
OwogCiAgICAgVGltZXIgbV90ZWxlcGhvbmVOdW1iZXJEZXRlY3Rpb25VcGRhdGVUaW1lcjsKLSAg
ICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gbV9kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlczsK
KyAgICBWZWN0b3I8U2ltcGxlUmFuZ2U+IG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXM7
CiAjZW5kaWYKIAogICAgIGJvb2wgbV9pc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvIHsgZmFs
c2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlv
bkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9u
Q29udHJvbGxlci5jcHAKaW5kZXggN2U1MzRmMjk0ZDY3YTEzZDJhYzVkMjUxYjQwMDA3YmRjODE5
ODUxMC4uN2U0NDRkMDVkOWY4MGE4YWRhNjEyNWEyMGQwOGRjMzVjNzVmYzM3OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlci5j
cHAKQEAgLTU5Niw3ICs1OTYsNyBAQCBhdXRvIFRleHRNYW5pcHVsYXRpb25Db250cm9sbGVyOjpy
ZXBsYWNlKGNvbnN0IE1hbmlwdWxhdGlvbkl0ZW1EYXRhJiBpdGVtLCBjb25zdAogICAgICAgICAg
ICAgaWYgKCFjb21tb25BbmNlc3RvcikKICAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9
IHBhcmVudDsKICAgICAgICAgICAgIGVsc2UgaWYgKCFwYXJlbnQtPmlzRGVzY2VuZGFudE9mKGNv
bW1vbkFuY2VzdG9yLmdldCgpKSkgewotICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0g
UmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKGNvbW1vbkFuY2VzdG9yLmdldCgpLCBwYXJl
bnQuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IoKmNvbW1vbkFuY2VzdG9yLCAqcGFyZW50KTsKICAgICAgICAgICAgICAgICBB
U1NFUlQoY29tbW9uQW5jZXN0b3IpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAppbmRleCAzY2FmYzNhOGZiY2Jj
OWNiNTQ5OWM5ZDhhNzlmMTUzYzE0M2RlNjZiLi4yMjNjZTFjZjE0NTQ3NTFmYjMwZGEyM2UyOWJh
NDM3YTgwYjViOTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVT
ZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlv
bi5jcHAKQEAgLTIwMiwyNiArMjAyLDE2IEBAIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6ZXhwYW5k
VXNpbmdHcmFudWxhcml0eShUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHkpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXN0YXRpYyBSZWZQdHI8UmFuZ2U+IG1ha2VTZWFyY2hSYW5nZShjb25zdCBQ
b3NpdGlvbiYgcG9zaXRpb24pCitzdGF0aWMgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTZWFy
Y2hSYW5nZShjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCiB7Ci0gICAgYXV0byogbm9kZSA9IHBv
c2l0aW9uLmRlcHJlY2F0ZWROb2RlKCk7Ci0gICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBhdXRvKiBib3VuZGFyeSA9IGRlcHJlY2F0ZWRFbmNsb3NpbmdCbG9ja0Zs
b3dFbGVtZW50KG5vZGUpOwotICAgIGlmICghYm91bmRhcnkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgYXV0byBzZWFyY2hSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1l
bnQoKSk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVu
dHMoKmJvdW5kYXJ5KTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBQb3NpdGlvbiBzdGFydCB7IHBvc2l0aW9uLnBhcmVudEFuY2hv
cmVkRXF1aXZhbGVudCgpIH07Ci0gICAgcmVzdWx0ID0gc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpz
dGFydC5jb250YWluZXJOb2RlKCksIHN0YXJ0Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLSAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIHJldHVybiBzZWFyY2hSYW5nZTsKKyAgICBhdXRvIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpOworICAgIGF1dG8gc2NvcGUgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93
RWxlbWVudChub2RlKTsKKyAgICBpZiAoIXNjb3BlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgIGF1dG8gc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludChwb3NpdGlvbi5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKSk7CisgICAgaWYgKCFzdGFydCkKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKKyAgICByZXR1cm4geyB7IFdURk1vdmUoKnN0YXJ0KSwgbWFrZUJvdW5kYXJ5
UG9pbnRBZnRlck5vZGVDb250ZW50cygqc2NvcGUpIH0gfTsKIH0KIAogYm9vbCBWaXNpYmxlU2Vs
ZWN0aW9uOjppc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSkgY29uc3QKQEAg
LTIzMSw3ICsyMjEsNyBAQCBib29sIFZpc2libGVTZWxlY3Rpb246OmlzQWxsKEVkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZSBydWxlKSBjb25zdAogCiB2b2lkIFZpc2libGVTZWxlY3Rpb246OmFw
cGVuZFRyYWlsaW5nV2hpdGVzcGFjZSgpCiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBzZWFyY2hSYW5n
ZSA9IG1ha2VTZWFyY2hSYW5nZShtX2VuZCk7CisgICAgYXV0byBzZWFyY2hSYW5nZSA9IG1ha2VT
ZWFyY2hSYW5nZShtX2VuZCk7CiAgICAgaWYgKCFzZWFyY2hSYW5nZSkKICAgICAgICAgcmV0dXJu
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVudFJlYWRlci5oCmluZGV4IDY4M2Uy
NDQzNDljOTA1YTY4Mjk5NzM0MGU4MzVlNmVkYThhNmZlNjMuLjU0NTQxZjBhNzJiYjAzODNmNzFj
Mjk1YzQwMmVhOTNiMWEyOGVlNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
V2ViQ29udGVudFJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvV2ViQ29udGVu
dFJlYWRlci5oCkBAIC0yOCwxMyArMjgsMTIgQEAKICNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCi0jaW5jbHVk
ZSAiUmFuZ2UuaCIKKyNpbmNsdWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIm1hcmt1cC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFyY2hpdmVSZXNvdXJjZTsKLWNsYXNz
IEJsb2I7CiAKIGNsYXNzIEZyYW1lV2ViQ29udGVudFJlYWRlciA6IHB1YmxpYyBQYXN0ZWJvYXJk
V2ViQ29udGVudFJlYWRlciB7CiBwdWJsaWM6CkBAIC01MiwxMyArNTEsMTMgQEAgcHJvdGVjdGVk
OgogCiBjbGFzcyBXZWJDb250ZW50UmVhZGVyIGZpbmFsIDogcHVibGljIEZyYW1lV2ViQ29udGVu
dFJlYWRlciB7CiBwdWJsaWM6Ci0gICAgUmFuZ2UmIGNvbnRleHQ7CisgICAgY29uc3QgU2ltcGxl
UmFuZ2UgY29udGV4dDsKICAgICBjb25zdCBib29sIGFsbG93UGxhaW5UZXh0OwogCiAgICAgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50OwogICAgIGJvb2wgbWFkZUZyYWdtZW50RnJv
bVBsYWluVGV4dDsKIAotICAgIFdlYkNvbnRlbnRSZWFkZXIoRnJhbWUmIGZyYW1lLCBSYW5nZSYg
Y29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCkKKyAgICBXZWJDb250ZW50UmVhZGVyKEZyYW1l
JiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQp
CiAgICAgICAgIDogRnJhbWVXZWJDb250ZW50UmVhZGVyKGZyYW1lKQogICAgICAgICAsIGNvbnRl
eHQoY29udGV4dCkKICAgICAgICAgLCBhbGxvd1BsYWluVGV4dChhbGxvd1BsYWluVGV4dCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmgKaW5kZXggMWQxMTJk
YzY5ODM5ODBiZmQ2ZjZiOTdkZjc4MDBmYmVkNjMzODE3NS4uMzRhMzQ1Yzc2MzBjYzM5NjM3NzZk
YWExODdjZmVhOTNkNWQ0NzYzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0y
MDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjcsOSArMjcsOSBAQAogCiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9O
KQogCi0jaW1wb3J0IDx3dGYvUmVmUHRyLmg+CisjaW1wb3J0ICJGbG9hdFJlY3QuaCIKKyNpbXBv
cnQgIlNpbXBsZVJhbmdlLmgiCiAjaW1wb3J0IDx3dGYvUmV0YWluUHRyLmg+Ci0jaW1wb3J0IDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogT0JKQ19DTEFTUyBEREFjdGlvbkNvbnRleHQ7CiBPQkpD
X0NMQVNTIE5TQXJyYXk7CkBAIC0zNywzMCArMzcsMzIgQEAgT0JKQ19DTEFTUyBOU0RpY3Rpb25h
cnk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBFbGVt
ZW50OwotY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSGl0VGVzdFJlc3VsdDsKLWNsYXNzIFJhbmdl
OwogCi1lbnVtIERhdGFEZXRlY3RvclR5cGVzIHsKLSAgICBEYXRhRGV0ZWN0b3JUeXBlTm9uZSA9
IDAsCi0gICAgRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyID0gMSA8PCAwLAotICAgIERhdGFE
ZXRlY3RvclR5cGVMaW5rID0gMSA8PCAxLAotICAgIERhdGFEZXRlY3RvclR5cGVBZGRyZXNzID0g
MSA8PCAyLAotICAgIERhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50ID0gMSA8PCAzLAotICAg
IERhdGFEZXRlY3RvclR5cGVUcmFja2luZ051bWJlciA9IDEgPDwgNCwKLSAgICBEYXRhRGV0ZWN0
b3JUeXBlRmxpZ2h0TnVtYmVyID0gMSA8PCA1LAotICAgIERhdGFEZXRlY3RvclR5cGVMb29rdXBT
dWdnZXN0aW9uID0gMSA8PCA2LAotICAgIERhdGFEZXRlY3RvclR5cGVBbGwgPSBVTE9OR19NQVgK
Ky8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGFuIE9wdGlvblNldCBhbmQgcGVyaGFw
cyB0byB1c2UgdWludDhfdCBpbnN0ZWFkIG9mIHVpbnQzMl90LgorZW51bSBjbGFzcyBEYXRhRGV0
ZWN0b3JUeXBlcyA6IHVpbnQzMl90IHsKKyAgICBOb25lID0gMCwKKyAgICBQaG9uZU51bWJlciA9
IDEgPDwgMCwKKyAgICBMaW5rID0gMSA8PCAxLAorICAgIEFkZHJlc3MgPSAxIDw8IDIsCisgICAg
Q2FsZW5kYXJFdmVudCA9IDEgPDwgMywKKyAgICBUcmFja2luZ051bWJlciA9IDEgPDwgNCwKKyAg
ICBGbGlnaHROdW1iZXIgPSAxIDw8IDUsCisgICAgTG9va3VwU3VnZ2VzdGlvbiA9IDEgPDwgNiwK
K307CisKK3N0cnVjdCBEZXRlY3RlZEl0ZW0geworICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRl
eHQ+IGFjdGlvbkNvbnRleHQ7CisgICAgRmxvYXRSZWN0IGJvdW5kaW5nQm94OworICAgIFNpbXBs
ZVJhbmdlIHJhbmdlOwogfTsKIAogY2xhc3MgRGF0YURldGVjdGlvbiB7CiBwdWJsaWM6CiAjaWYg
UExBVEZPUk0oTUFDKQotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rp
b25Db250ZXh0PiBkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVz
dWx0JiwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBPcHRpb25hbDxE
ZXRlY3RlZEl0ZW0+IGRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGNvbnN0IEhpdFRlc3RS
ZXN1bHQmKTsKICNlbmRpZgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBOU0FycmF5ICpkZXRl
Y3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3Rv
clR5cGVzLCBOU0RpY3Rpb25hcnkgKmNvbnRleHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBOU0FycmF5ICpkZXRlY3RDb250ZW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIERhdGFE
ZXRlY3RvclR5cGVzLCBOU0RpY3Rpb25hcnkgKmNvbnRleHQpOwogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyB2b2lkIHJlbW92ZURhdGFEZXRlY3RlZExpbmtzSW5Eb2N1bWVudChEb2N1bWVudCYp
OwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGJv
b2wgY2FuQmVQcmVzZW50ZWRCeURhdGFEZXRlY3RvcnMoY29uc3QgVVJMJik7CkBAIC03Nyw0ICs3
OSwzIEBAIHB1YmxpYzoKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCi0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQppbmRleCA0MzljMDMz
Y2UyMmEzODUxN2ZjYjc1YjcwMDZiNTZmNjNmNzZmMmNkLi4yZmJlZjYxMjQyNzgzZWZiM2IwODIw
NTBhNmQwZGQ4NmM5NTI0NGJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2Nv
Y29hL0RhdGFEZXRlY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NC0yMDE3IEFwcGxlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE0LTIwMjAgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNyArMzgsNiBAQAogI2ltcG9ydCAiSFRNTE5hbWVz
LmgiCiAjaW1wb3J0ICJIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oIgogI2ltcG9ydCAiSGl0
VGVzdFJlc3VsdC5oIgotI2ltcG9ydCAiTm9kZS5oIgogI2ltcG9ydCAiTm9kZUxpc3QuaCIKICNp
bXBvcnQgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbXBvcnQgIlJhbmdlLmgiCkBAIC01Niw4ICs1NSw3
IEBACiAjaW1wb3J0ICJEYXRhRGV0ZWN0b3JzQ29yZVNvZnRMaW5rLmgiCiAKICNpZiBQTEFURk9S
TShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxNDAwCi10ZW1w
bGF0ZSA8Pgotc3RydWN0IFdURjo6Q0ZUeXBlVHJhaXQ8RERSZXN1bHRSZWY+IHsKK3RlbXBsYXRl
PD4gc3RydWN0IFdURjo6Q0ZUeXBlVHJhaXQ8RERSZXN1bHRSZWY+IHsKICAgICBzdGF0aWMgaW5s
aW5lIENGVHlwZUlEIHR5cGVJRCh2b2lkKSB7IHJldHVybiBERFJlc3VsdEdldENGVHlwZUlEKCk7
IH0KIH07CiAjZW5kaWYKQEAgLTY4LDI1ICs2NiwyNCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5h
bWVzOwogCiAjaWYgUExBVEZPUk0oTUFDKQogCi1zdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29u
dGV4dD4gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UoVmlzaWJsZVBvc2l0aW9uIHBvc2l0
aW9uLCBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZSwgRmxvYXRSZWN0JiBkZXRlY3RlZERhdGFC
b3VuZGluZ0JveCwgUmVmUHRyPFJhbmdlPiYgZGV0ZWN0ZWREYXRhUmFuZ2UpCitzdGF0aWMgT3B0
aW9uYWw8RGV0ZWN0ZWRJdGVtPiBkZXRlY3RJdGVtKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9z
aXRpb24sIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250ZXh0UmFuZ2UpCiB7Ci0gICAgYXV0byBzdGFy
dCA9IGNvbnRleHRSYW5nZS0+c3RhcnRQb3NpdGlvbigpOwotICAgIGlmIChzdGFydC5pc051bGwo
KSB8fCBwb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBTdHJpbmcg
ZnVsbFBsYWluVGV4dFN0cmluZyA9IHBsYWluVGV4dCgqY29udGV4dFJhbmdlKTsKLSAgICBDRklu
ZGV4IGhpdExvY2F0aW9uID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3Rh
cnQpLCAqbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24pIH0pOworICAgIGlmIChwb3NpdGlvbi5p
c051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBTdHJpbmcgZnVsbFBs
YWluVGV4dFN0cmluZyA9IHBsYWluVGV4dChjb250ZXh0UmFuZ2UpOworICAgIENGSW5kZXggaGl0
TG9jYXRpb24gPSBjaGFyYWN0ZXJDb3VudCh7IGNvbnRleHRSYW5nZS5zdGFydCwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKIAogICAgIGF1dG8gc2Nhbm5lciA9IGFkb3B0Q0YoRERT
Y2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOwogICAgIGF1
dG8gc2NhblF1ZXJ5ID0gYWRvcHRDRihERFNjYW5RdWVyeUNyZWF0ZUZyb21TdHJpbmcoa0NGQWxs
b2NhdG9yRGVmYXVsdCwgZnVsbFBsYWluVGV4dFN0cmluZy5jcmVhdGVDRlN0cmluZygpLmdldCgp
LCBDRlJhbmdlTWFrZSgwLCBmdWxsUGxhaW5UZXh0U3RyaW5nLmxlbmd0aCgpKSkpOwogCiAgICAg
aWYgKCFERFNjYW5uZXJTY2FuUXVlcnkoc2Nhbm5lci5nZXQoKSwgc2NhblF1ZXJ5LmdldCgpKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IGF1dG8gcmVzdWx0cyA9IGFkb3B0Q0YoRERTY2FubmVyQ29weVJlc3VsdHNXaXRoT3B0aW9ucyhz
Y2FubmVyLmdldCgpLCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNOb092ZXJsYXApKTsKIAog
ICAgIC8vIEZpbmQgdGhlIEREUmVzdWx0UmVmIHRoYXQgaW50ZXJzZWN0cyB0aGUgaGl0VGVzdFJl
c3VsdCdzIFZpc2libGVQb3NpdGlvbi4KICAgICBERFJlc3VsdFJlZiBtYWluUmVzdWx0ID0gbnVs
bHB0cjsKLSAgICBSZWZQdHI8UmFuZ2U+IG1haW5SZXN1bHRSYW5nZTsKKyAgICBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFpblJlc3VsdFJhbmdlOwogICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBD
RkFycmF5R2V0Q291bnQocmVzdWx0cy5nZXQoKSk7CiAgICAgZm9yIChDRkluZGV4IGkgPSAwOyBp
IDwgcmVzdWx0Q291bnQ7IGkrKykgewogI2lmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPj0gMTAxNDAwCkBAIC05NywzOSArOTQsNDAgQEAgc3RhdGljIFJldGFpblB0cjxEREFjdGlv
bkNvbnRleHQ+IGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbgog
ICAgICAgICBDRlJhbmdlIHJlc3VsdFJhbmdlSW5Db250ZXh0ID0gRERSZXN1bHRHZXRSYW5nZShy
ZXN1bHQpOwogICAgICAgICBpZiAoaGl0TG9jYXRpb24gPj0gcmVzdWx0UmFuZ2VJbkNvbnRleHQu
bG9jYXRpb24gJiYgKGhpdExvY2F0aW9uIC0gcmVzdWx0UmFuZ2VJbkNvbnRleHQubG9jYXRpb24p
IDwgcmVzdWx0UmFuZ2VJbkNvbnRleHQubGVuZ3RoKSB7CiAgICAgICAgICAgICBtYWluUmVzdWx0
ID0gcmVzdWx0OwotICAgICAgICAgICAgbWFpblJlc3VsdFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdl
KHJlc29sdmVDaGFyYWN0ZXJSYW5nZSgqY29udGV4dFJhbmdlLCByZXN1bHRSYW5nZUluQ29udGV4
dCkpOworICAgICAgICAgICAgbWFpblJlc3VsdFJhbmdlID0gcmVzb2x2ZUNoYXJhY3RlclJhbmdl
KGNvbnRleHRSYW5nZSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoIW1haW5SZXN1bHQpCi0gICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICBhdXRvIHZpZXcgPSBt
YWluUmVzdWx0UmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgYXV0byB2aWV3ID0g
bWFpblJlc3VsdFJhbmdlLT5zdGFydC5kb2N1bWVudCgpLnZpZXcoKTsKICAgICBpZiAoIXZpZXcp
Ci0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAg
ICBhdXRvIGFjdGlvbkNvbnRleHQgPSBhZG9wdE5TKFthbGxvY0REQWN0aW9uQ29udGV4dEluc3Rh
bmNlKCkgaW5pdF0pOwogICAgIFthY3Rpb25Db250ZXh0IHNldEFsbFJlc3VsdHM6QFsgKF9fYnJp
ZGdlIGlkKW1haW5SZXN1bHQgXV07CiAgICAgW2FjdGlvbkNvbnRleHQgc2V0TWFpblJlc3VsdDpt
YWluUmVzdWx0XTsKIAotICAgIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gdmlldy0+Y29udGVu
dHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2Jq
ZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqbWFpblJlc3VsdFJhbmdlKSkpKTsKLSAgICBkZXRlY3Rl
ZERhdGFSYW5nZSA9IG1haW5SZXN1bHRSYW5nZTsKLQotICAgIHJldHVybiBhY3Rpb25Db250ZXh0
OworICAgIHJldHVybiB7IHsKKyAgICAgICAgV1RGTW92ZShhY3Rpb25Db250ZXh0KSwKKyAgICAg
ICAgdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJbnRSZWN0KHVuaXRlZEJvdW5kaW5n
Qm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcygqbWFpblJlc3VsdFJhbmdlKSkp
KSwKKyAgICAgICAgKm1haW5SZXN1bHRSYW5nZSwKKyAgICB9IH07CiB9CiAKLVJldGFpblB0cjxE
REFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVz
dWx0KGNvbnN0IEhpdFRlc3RSZXN1bHQmIGhpdFRlc3RSZXN1bHQsIEZsb2F0UmVjdCYgZGV0ZWN0
ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQorT3B0
aW9uYWw8RGV0ZWN0ZWRJdGVtPiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVz
dFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0KQogewogICAgIGlmICgh
RGF0YURldGVjdG9yc0xpYnJhcnkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5p
bm5lck5vblNoYXJlZE5vZGUoKTsKICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIGF1dG8gcmVuZGVyZXIgPSBu
b2RlLT5yZW5kZXJlcigpOwogICAgIGlmICghcmVuZGVyZXIpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgVmlzaWJsZVBvc2l0aW9u
IHBvc2l0aW9uOwogICAgIFJlZlB0cjxSYW5nZT4gY29udGV4dFJhbmdlOwpAQCAtMTQwLDI3ICsx
MzgsMjYgQEAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0
SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGkKICAgICAgICAgICAgIHBvc2l0aW9uID0g
Zmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5vZGUpOwogCiAgICAgICAgIGNvbnRleHRSYW5n
ZSA9IHJhbmdlRXhwYW5kZWRBcm91bmRQb3NpdGlvbkJ5Q2hhcmFjdGVycyhwb3NpdGlvbiwgMjUw
KTsKLSAgICAgICAgaWYgKCFjb250ZXh0UmFuZ2UpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKICAgICB9IGVsc2UgewogICAgICAgICBGcmFtZSogZnJhbWUgPSBub2RlLT5kb2N1bWVudCgp
LmZyYW1lKCk7CiAgICAgICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICAgICAgSW50UG9pbnQg
ZnJhbWVQb2ludCA9IGhpdFRlc3RSZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFtZSgp
OwogICAgICAgICBpZiAoIWZyYW1lLT5yYW5nZUZvclBvaW50KGZyYW1lUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owog
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiA9IGZyYW1lLT52aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChmcmFtZVBvaW50KTsKKyAgICAgICAgcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJs
ZVBvc2l0aW9uRm9yUG9pbnQoZnJhbWVQb2ludCk7CiAgICAgICAgIGlmIChwb3NpdGlvbi5pc051
bGwoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKIAogICAgICAgICBjb250ZXh0UmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIExpbmVHcmFudWxhcml0eSwgRGlyZWN0aW9uRm9yd2FyZCk7
Ci0gICAgICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgfQogCi0gICAgcmV0dXJuIGRldGVjdEl0ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKHBvc2l0
aW9uLCBjb250ZXh0UmFuZ2UsIGRldGVjdGVkRGF0YUJvdW5kaW5nQm94LCBkZXRlY3RlZERhdGFS
YW5nZSk7CisgICAgaWYgKCFjb250ZXh0UmFuZ2UpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisKKyAgICByZXR1cm4gZGV0ZWN0SXRlbShwb3NpdGlvbiwgKmNvbnRleHRSYW5nZSk7CiB9
CiAKICNlbmRpZiAvLyBQTEFURk9STShNQUMpCkBAIC0yMjMsMjUgKzIyMCwzMCBAQCBzdGF0aWMg
Qk9PTCByZXN1bHRJc1VSTChERFJlc3VsdFJlZiByZXN1bHQpCiAgICAgcmV0dXJuIFt1cmxUeXBl
cyBjb250YWluc09iamVjdDooTlNTdHJpbmcgKilzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9E
RFJlc3VsdEdldFR5cGUocmVzdWx0KV07CiB9CiAKKy8vIFBvb3IgbWFuJ3MgT3B0aW9uU2V0Lgor
c3RhdGljIGJvb2wgY29udGFpbnMoRGF0YURldGVjdG9yVHlwZXMgdHlwZXMsIERhdGFEZXRlY3Rv
clR5cGVzIHNpbmdsZVR5cGUpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVpbnQzMl90Pih0
eXBlcykgJiBzdGF0aWNfY2FzdDx1aW50MzJfdD4oc2luZ2xlVHlwZSk7Cit9CisKIHN0YXRpYyBO
U1N0cmluZyAqY29uc3RydWN0VVJMU3RyaW5nRm9yUmVzdWx0KEREUmVzdWx0UmVmIGN1cnJlbnRS
ZXN1bHQsIE5TU3RyaW5nICpyZXN1bHRJZGVudGlmaWVyLCBOU0RhdGUgKnJlZmVyZW5jZURhdGUs
IE5TVGltZVpvbmUgKnJlZmVyZW5jZVRpbWVab25lLCBEYXRhRGV0ZWN0b3JUeXBlcyBkZXRlY3Rp
b25UeXBlcykKIHsKICAgICBpZiAoIXNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0
SGFzUHJvcGVydGllcyhjdXJyZW50UmVzdWx0LCBERFJlc3VsdFByb3BlcnR5UGFzc2l2ZURpc3Bs
YXkpKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIEREVVJMaWZpZXJQaG9uZU51bWJl
ckRldGVjdGlvblR5cGVzIHBob25lVHlwZXMgPSAoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0
b3JUeXBlUGhvbmVOdW1iZXIpID8gRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uUmVndWxh
ciA6IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvbk5vbmU7Ci0gICAgRERSZXN1bHRDYXRl
Z29yeSBjYXRlZ29yeSA9IHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0Q2F0
ZWdvcnkoY3VycmVudFJlc3VsdCk7Ci0gICAgQ0ZTdHJpbmdSZWYgdHlwZSA9IHNvZnRMaW5rX0Rh
dGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0VHlwZShjdXJyZW50UmVzdWx0KTsKLSAgICAKLSAg
ICBpZiAoKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVBZGRyZXNzKSAmJiAoRERS
ZXN1bHRDYXRlZ29yeUFkZHJlc3MgPT0gY2F0ZWdvcnkpKQotICAgICAgICB8fCAoKGRldGVjdGlv
blR5cGVzICYgRGF0YURldGVjdG9yVHlwZVRyYWNraW5nTnVtYmVyKSAmJiAoQ0ZTdHJpbmdDb21w
YXJlKGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9EREJpbmRlclRyYWNraW5nTnVtYmVyS2V5KCksIHR5
cGUsIDApID09IGtDRkNvbXBhcmVFcXVhbFRvKSkKLSAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBl
cyAmIERhdGFEZXRlY3RvclR5cGVGbGlnaHROdW1iZXIpICYmIChDRlN0cmluZ0NvbXBhcmUoZ2V0
X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyRmxpZ2h0SW5mb3JtYXRpb25LZXkoKSwgdHlwZSwg
MCkgPT0ga0NGQ29tcGFyZUVxdWFsVG8pKQotICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYg
RGF0YURldGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rpb24pICYmIChDRlN0cmluZ0NvbXBhcmUoZ2V0
X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyUGFyc2VjU291cmNlS2V5KCksIHR5cGUsIDApID09
IGtDRkNvbXBhcmVFcXVhbFRvKSkKLSAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlcikgJiYgKEREUmVzdWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9
PSBjYXRlZ29yeSkpCi0gICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JU
eXBlTGluaykgJiYgcmVzdWx0SXNVUkwoY3VycmVudFJlc3VsdCkpKSB7Ci0gICAgICAgIAorCisg
ICAgYXV0byBwaG9uZVR5cGVzID0gY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3Rv
clR5cGVzOjpQaG9uZU51bWJlcikgPyBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25SZWd1
bGFyIDogRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uTm9uZTsKKyAgICBhdXRvIGNhdGVn
b3J5ID0gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRDYXRlZ29yeShjdXJy
ZW50UmVzdWx0KTsKKyAgICBhdXRvIHR5cGUgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9E
RFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7CisKKyAgICBpZiAoKGNvbnRhaW5zKGRldGVj
dGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6QWRkcmVzcykgJiYgRERSZXN1bHRDYXRlZ29y
eUFkZHJlc3MgPT0gY2F0ZWdvcnkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRlY3Rpb25UeXBl
cywgRGF0YURldGVjdG9yVHlwZXM6OlRyYWNraW5nTnVtYmVyKSAmJiBDRkVxdWFsKGdldF9EYXRh
RGV0ZWN0b3JzQ29yZV9EREJpbmRlclRyYWNraW5nTnVtYmVyS2V5KCksIHR5cGUpKQorICAgICAg
ICB8fCAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3RvclR5cGVzOjpGbGlnaHRO
dW1iZXIpICYmIENGRXF1YWwoZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyRmxpZ2h0SW5m
b3JtYXRpb25LZXkoKSwgdHlwZSkpCisgICAgICAgIHx8IChjb250YWlucyhkZXRlY3Rpb25UeXBl
cywgRGF0YURldGVjdG9yVHlwZXM6Okxvb2t1cFN1Z2dlc3Rpb24pICYmIENGRXF1YWwoZ2V0X0Rh
dGFEZXRlY3RvcnNDb3JlX0REQmluZGVyUGFyc2VjU291cmNlS2V5KCksIHR5cGUpKQorICAgICAg
ICB8fCAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3RvclR5cGVzOjpQaG9uZU51
bWJlcikgJiYgRERSZXN1bHRDYXRlZ29yeVBob25lTnVtYmVyID09IGNhdGVnb3J5KQorICAgICAg
ICB8fCAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3RvclR5cGVzOjpMaW5rKSAm
JiByZXN1bHRJc1VSTChjdXJyZW50UmVzdWx0KSkpIHsKICAgICAgICAgcmV0dXJuIHNvZnRMaW5r
X0RhdGFEZXRlY3RvcnNDb3JlX0REVVJMU3RyaW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJl
c3VsdElkZW50aWZpZXIsIHBob25lVHlwZXMsIHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVa
b25lKTsKICAgICB9Ci0gICAgaWYgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5cGVD
YWxlbmRhckV2ZW50KSAmJiAoRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZlbnQgPT0gY2F0ZWdv
cnkpKSB7CisgICAgaWYgKGNvbnRhaW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBl
czo6Q2FsZW5kYXJFdmVudCkgJiYgRERSZXN1bHRDYXRlZ29yeUNhbGVuZGFyRXZlbnQgPT0gY2F0
ZWdvcnkpIHsKICAgICAgICAgaWYgKCFzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3Vs
dElzUGFzdERhdGUoY3VycmVudFJlc3VsdCwgKENGRGF0ZVJlZilyZWZlcmVuY2VEYXRlLCAoQ0ZU
aW1lWm9uZVJlZilyZWZlcmVuY2VUaW1lWm9uZSkpCiAgICAgICAgICAgICByZXR1cm4gc29mdExp
bmtfRGF0YURldGVjdG9yc0NvcmVfRERVUkxTdHJpbmdGb3JSZXN1bHQoY3VycmVudFJlc3VsdCwg
cmVzdWx0SWRlbnRpZmllciwgcGhvbmVUeXBlcywgcmVmZXJlbmNlRGF0ZSwgcmVmZXJlbmNlVGlt
ZVpvbmUpOwogICAgIH0KQEAgLTQ0MywyOCArNDQ1LDI0IEBAIHZvaWQgRGF0YURldGVjdGlvbjo6
cmVtb3ZlRGF0YURldGVjdGVkTGlua3NJbkRvY3VtZW50KERvY3VtZW50JiBkb2N1bWVudCkKICAg
ICAgICAgcmVtb3ZlUmVzdWx0TGlua3NGcm9tQW5jaG9yKGFuY2hvci5nZXQoKSk7CiB9CiAKLU5T
QXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4m
IGNvbnRleHRSYW5nZSwgRGF0YURldGVjdG9yVHlwZXMgdHlwZXMsIE5TRGljdGlvbmFyeSAqY29u
dGV4dCkKK05TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiBjb250ZXh0UmFuZ2UsIERhdGFEZXRlY3RvclR5cGVzIHR5cGVzLCBOU0Rp
Y3Rpb25hcnkgKmNvbnRleHQpCiB7Ci0gICAgaWYgKCFjb250ZXh0UmFuZ2UpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0KLSAgICBSZXRhaW5QdHI8RERTY2FubmVyUmVmPiBzY2FubmVyID0gYWRvcHRD
Rihzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlw
ZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7Ci0gICAgUmV0YWluUHRyPEREU2NhblF1ZXJ5UmVmPiBz
Y2FuUXVlcnkgPSBhZG9wdENGKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2NhblF1ZXJ5
Q3JlYXRlKE5VTEwpKTsKLSAgICBidWlsZFF1ZXJ5KHNjYW5RdWVyeS5nZXQoKSwgKmNvbnRleHRS
YW5nZSk7CisgICAgYXV0byBzY2FubmVyID0gYWRvcHRDRihzb2Z0TGlua19EYXRhRGV0ZWN0b3Jz
Q29yZV9ERFNjYW5uZXJDcmVhdGUoRERTY2FubmVyVHlwZVN0YW5kYXJkLCAwLCBudWxscHRyKSk7
CisgICAgYXV0byBzY2FuUXVlcnkgPSBhZG9wdENGKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3Jl
X0REU2NhblF1ZXJ5Q3JlYXRlKE5VTEwpKTsKKyAgICBidWlsZFF1ZXJ5KHNjYW5RdWVyeS5nZXQo
KSwgY29udGV4dFJhbmdlKTsKICAgICAKLSAgICBpZiAodHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBl
TG9va3VwU3VnZ2VzdGlvbikKKyAgICBpZiAoY29udGFpbnModHlwZXMsIERhdGFEZXRlY3RvclR5
cGVzOjpMb29rdXBTdWdnZXN0aW9uKSkKICAgICAgICAgc29mdExpbmtfRGF0YURldGVjdG9yc0Nv
cmVfRERTY2FubmVyRW5hYmxlT3B0aW9uYWxTb3VyY2Uoc2Nhbm5lci5nZXQoKSwgRERTY2FubmVy
U291cmNlU3BvdGxpZ2h0LCB0cnVlKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBzaG91bGQgYWRkIGEg
dGltZW91dCB0byB0aGlzIGNhbGwgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgdGFrZSB0b28gbXVj
aCB0aW1lLgogICAgIGlmICghc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVyU2Nh
blF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gc2Nhbm5lclJlc3VsdHMgPSBhZG9wdENG
KHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlv
bnMoc2Nhbm5lci5nZXQoKSwgZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNvcHlSZXN1
bHRzT3B0aW9uc0ZvclBhc3NpdmVVc2UoKSB8IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0Nv
YWxlc2NlU2lnbmF0dXJlcykpOworICAgIGF1dG8gc2Nhbm5lclJlc3VsdHMgPSBhZG9wdENGKHNv
ZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMo
c2Nhbm5lci5nZXQoKSwgZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckNvcHlSZXN1bHRz
T3B0aW9uc0ZvclBhc3NpdmVVc2UoKSB8IEREU2Nhbm5lckNvcHlSZXN1bHRzT3B0aW9uc0NvYWxl
c2NlU2lnbmF0dXJlcykpOwogICAgIGlmICghc2Nhbm5lclJlc3VsdHMpCiAgICAgICAgIHJldHVy
biBuaWw7CiAKLSAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50KHNjYW5u
ZXJSZXN1bHRzLmdldCgpKTsKLSAgICBpZiAoIXJlc3VsdENvdW50KQorICAgIGlmICghQ0ZBcnJh
eUdldENvdW50KHNjYW5uZXJSZXN1bHRzLmdldCgpKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAog
ICAgIFZlY3RvcjxSZXRhaW5QdHI8RERSZXN1bHRSZWY+PiBhbGxSZXN1bHRzOwpAQCAtNDc2LDcg
KzQ3NCw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKFJl
ZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAgICAgZm9yIChpZCByZXN1bHRPYmpl
Y3QgaW4gKE5TQXJyYXkgKilzY2FubmVyUmVzdWx0cy5nZXQoKSkgewogICAgICAgICBERFJlc3Vs
dFJlZiByZXN1bHQgPSAoRERSZXN1bHRSZWYpcmVzdWx0T2JqZWN0OwogICAgICAgICBOU0luZGV4
UGF0aCAqaW5kZXhQYXRoID0gW05TSW5kZXhQYXRoIGluZGV4UGF0aFdpdGhJbmRleDpjdXJyZW50
VG9wTGV2ZWxJbmRleF07Ci0gICAgICAgIGlmIChDRlN0cmluZ0NvbXBhcmUoc29mdExpbmtfRGF0
YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBlKHJlc3VsdCksIGdldF9EYXRhRGV0ZWN0b3Jz
Q29yZV9EREJpbmRlclNpZ25hdHVyZUJsb2NrS2V5KCksIDApID09IGtDRkNvbXBhcmVFcXVhbFRv
KSB7CisgICAgICAgIGlmIChDRkVxdWFsKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REUmVz
dWx0R2V0VHlwZShyZXN1bHQpLCBnZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJTaWduYXR1
cmVCbG9ja0tleSgpKSkgewogICAgICAgICAgICAgTlNBcnJheSAqc3VicmVzdWx0cyA9IChOU0Fy
cmF5ICopc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRTdWJSZXN1bHRzKHJl
c3VsdCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoTlNVSW50ZWdlciBzdWJSZXN1
bHRJbmRleCA9IDAgOyBzdWJSZXN1bHRJbmRleCA8IFtzdWJyZXN1bHRzIGNvdW50XSA7IHN1YlJl
c3VsdEluZGV4KyspIHsKQEAgLTQ5MSw3ICs0ODksNyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9u
OjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFE
ZQogICAgIH0KIAogICAgIFZlY3RvcjxWZWN0b3I8U2ltcGxlUmFuZ2U+PiBhbGxSZXN1bHRSYW5n
ZXM7Ci0gICAgVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKCpjb250ZXh0UmFuZ2UpOworICAgIFRleHRJ
dGVyYXRvciBpdGVyYXRvcihjb250ZXh0UmFuZ2UpOwogICAgIENGSW5kZXggaXRlcmF0b3JDb3Vu
dCA9IDA7CiAKICAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGFycmF5IG9mIHRoZSBleHBhbmRl
ZCByZXN1bHRzIHRvIGNyZWF0ZSBhIHZlY3RvciBvZiBSYW5nZSBvYmplY3RzIHRoYXQgaW5kaWNh
dGUKQEAgLTUzNiwxNiArNTM0LDE1IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENv
bnRlbnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAKICAgICBh
dXRvIHR6ID0gYWRvcHRDRihDRlRpbWVab25lQ29weURlZmF1bHQoKSk7CiAgICAgTlNEYXRlICpy
ZWZlcmVuY2VEYXRlID0gW2NvbnRleHQgb2JqZWN0Rm9yS2V5OmdldGtEYXRhRGV0ZWN0b3JzUmVm
ZXJlbmNlRGF0ZUtleSgpXSA/OiBbTlNEYXRlIGRhdGVdOwotICAgIFRleHQqIGxhc3RUZXh0Tm9k
ZVRvVXBkYXRlID0gbnVsbHB0cjsKKyAgICBSZWZQdHI8VGV4dD4gbGFzdFRleHROb2RlVG9VcGRh
dGU7CiAgICAgU3RyaW5nIGxhc3ROb2RlQ29udGVudDsKLSAgICBzaXplX3QgY29udGVudE9mZnNl
dCA9IDA7CisgICAgdW5zaWduZWQgY29udGVudE9mZnNldCA9IDA7CiAgICAgRERRdWVyeU9mZnNl
dCBsYXN0TW9kaWZpZWRRdWVyeU9mZnNldCA9IHsgLTEsIDAgfTsKLSAgICAKKwogICAgIC8vIEZv
ciBlYWNoIHJlc3VsdCBhZGQgdGhlIGxpbmsuCiAgICAgLy8gU2luY2UgdGhlcmUgY291bGQgYmUg
bXVsdGlwbGUgcmVzdWx0cyBpbiB0aGUgc2FtZSB0ZXh0IG5vZGUsIHRoZSBub2RlIGlzIG9ubHkg
bW9kaWZpZWQgd2hlbgogICAgIC8vIHdlIGFyZSBhYm91dCB0byBwcm9jZXNzIGEgZGlmZmVyZW50
IHRleHQgbm9kZS4KLSAgICByZXN1bHRDb3VudCA9IGFsbFJlc3VsdHMuc2l6ZSgpOwotICAgIAor
ICAgIENGSW5kZXggcmVzdWx0Q291bnQgPSBhbGxSZXN1bHRzLnNpemUoKTsKICAgICBmb3IgKENG
SW5kZXggcmVzdWx0SW5kZXggPSAwOyByZXN1bHRJbmRleCA8IHJlc3VsdENvdW50OyArK3Jlc3Vs
dEluZGV4KSB7CiAgICAgICAgIEREUmVzdWx0UmVmIGNvcmVSZXN1bHQgPSBhbGxSZXN1bHRzW3Jl
c3VsdEluZGV4XS5nZXQoKTsKICAgICAgICAgRERRdWVyeVJhbmdlIHF1ZXJ5UmFuZ2UgPSBzb2Z0
TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldFF1ZXJ5UmFuZ2VGb3JVUkxpZmljYXRp
b24oY29yZVJlc3VsdCk7CkBAIC01NzgsNyArNTc1LDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlv
bjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRh
RGUKICAgICAgICAgICAgIEFTU0VSVChyZXN1bHRSYW5nZXMuc2l6ZSgpID09IHJhbmdlQm91bmRh
cmllcy5zaXplKCkpOwogICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnNocmluaygwKTsgLy8gS2Vl
cCBjYXBhY2l0eSBhcyB3ZSBhcmUgZ29pbmcgdG8gcmVwb3B1bGF0ZSB0aGUgVmVjdG9yIHJpZ2h0
IGF3YXkgd2l0aCB0aGUgc2FtZSBudW1iZXIgb2YgaXRlbXMuCiAgICAgICAgICAgICBmb3IgKGF1
dG8mIHJhbmdlQm91bmRhcnkgOiByYW5nZUJvdW5kYXJpZXMpCi0gICAgICAgICAgICAgICAgcmVz
dWx0UmFuZ2VzLnVuY2hlY2tlZEFwcGVuZChSYW5nZTo6Y3JlYXRlKCpyYW5nZUJvdW5kYXJ5LmZp
cnN0LmRvY3VtZW50KCksIHJhbmdlQm91bmRhcnkuZmlyc3QsIHJhbmdlQm91bmRhcnkuc2Vjb25k
KSk7CisgICAgICAgICAgICAgICAgcmVzdWx0UmFuZ2VzLnVuY2hlY2tlZEFwcGVuZCh7ICptYWtl
Qm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LmZpcnN0KSwgKm1ha2VCb3VuZGFyeVBvaW50KHJh
bmdlQm91bmRhcnkuc2Vjb25kKSB9KTsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbGFz
dE1vZGlmaWVkUXVlcnlPZmZzZXQgPSBxdWVyeVJhbmdlLmVuZDsKQEAgLTYxMiw3ICs2MDksNyBA
QCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFu
Z2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogCiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIGFj
dHVhbCBhbmNob3Igbm9kZSBhbmQgaW5zZXJ0IGl0IGJlZm9yZSB0aGUgY3VycmVudCBub2RlLgog
ICAgICAgICAgICAgdGV4dE5vZGVEYXRhID0gY3VycmVudFRleHROb2RlLmRhdGEoKS5zdWJzdHJp
bmcocmFuZ2Uuc3RhcnQub2Zmc2V0LCByYW5nZS5lbmQub2Zmc2V0IC0gcmFuZ2Uuc3RhcnQub2Zm
c2V0KTsKLSAgICAgICAgICAgIFJlZjxUZXh0PiBuZXdUZXh0Tm9kZSA9IFRleHQ6OmNyZWF0ZShk
b2N1bWVudCwgdGV4dE5vZGVEYXRhKTsKKyAgICAgICAgICAgIGF1dG8gbmV3VGV4dE5vZGUgPSBU
ZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHROb2RlRGF0YSk7CiAgICAgICAgICAgICBwYXJlbnRO
b2RlLT5pbnNlcnRCZWZvcmUobmV3VGV4dE5vZGUuY29weVJlZigpLCAmY3VycmVudFRleHROb2Rl
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgUmVmPEhUTUxBbmNob3JFbGVtZW50PiBhbmNo
b3JFbGVtZW50ID0gSFRNTEFuY2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CkBAIC02NTks
MTMgKzY1NiwxMyBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogCiAgICAgaWYgKGxhc3RUZXh0
Tm9kZVRvVXBkYXRlKQogICAgICAgICBsYXN0VGV4dE5vZGVUb1VwZGF0ZS0+c2V0RGF0YShsYXN0
Tm9kZUNvbnRlbnQpOwotICAgIAorCiAgICAgcmV0dXJuIFtnZXRERFNjYW5uZXJSZXN1bHRDbGFz
cygpIHJlc3VsdHNGcm9tQ29yZVJlc3VsdHM6c2Nhbm5lclJlc3VsdHMuZ2V0KCldOwogfQogCiAj
ZWxzZQogCi1OU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQ
dHI8UmFuZ2U+JiwgRGF0YURldGVjdG9yVHlwZXMsIE5TRGljdGlvbmFyeSAqKQorTlNBcnJheSAq
RGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBE
YXRhRGV0ZWN0b3JUeXBlcywgTlNEaWN0aW9uYXJ5ICopCiB7CiAgICAgcmV0dXJuIG5pbDsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tCmluZGV4IDg1ODA3
ODEyMTQxZGU1NjkzNTQ5ZDQzZTFhNjQ4YjRlYzg5Yjk2ZGEuLmU1YTk0ZDZmNjAwZGZkOTM2OGJl
MTkwYjc0ZDljMDAzM2Q4MWM1OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Y29jb2EvRWRpdG9yQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9F
ZGl0b3JDb2NvYS5tbQpAQCAtMjI1LDcgKzIyNSw3IEBAIFJlZlB0cjxTaGFyZWRCdWZmZXI+IEVk
aXRvcjo6ZGF0YUluUlRGRm9ybWF0KE5TQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nKQogCiAvLyBG
SVhNRTogU2hvdWxkIGdpdmUgdGhpcyBmdW5jdGlvbiBhIG5hbWUgdGhhdCBtYWtlcyBpdCBjbGVh
ciBpdCBhZGRzIHJlc291cmNlcyB0byB0aGUgZG9jdW1lbnQgbG9hZGVyIGFzIGEgc2lkZSBlZmZl
Y3QuCiAvLyBPciByZWZhY3RvciBzbyBpdCBkb2VzIG5vdCBkbyB0aGF0LgotUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQm
IHBhc3RlYm9hcmQsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBj
aG9zZVBsYWluVGV4dCkKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRl
bnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBjb25zdCBTaW1wbGVSYW5n
ZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7
CiAgICAgV2ViQ29udGVudFJlYWRlciByZWFkZXIobV9mcmFtZSwgY29udGV4dCwgYWxsb3dQbGFp
blRleHQpOwogICAgIHBhc3RlYm9hcmQucmVhZChyZWFkZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCBiYmZi
YzY4ZTZjZmQ1Yjk1ODhlZWMyZTYxYmExMzE2M2RkNTQ4YWViLi5kNzk0Nzg0NmQ1OWU5OGFhZjBm
YjJkYjNhMDBiYTk2NmY0NmY3Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNjc1LDcgKzY3NSw3IEBAIGJv
b2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZFBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCiAg
ICAgaWYgKCFhbGxvd1BsYWluVGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYWRk
RnJhZ21lbnQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBbdGV4dCBwcmVjb21wb3Nl
ZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOworICAgIGFkZEZyYWdtZW50KGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKGNvbnRleHQpLCBbdGV4dCBwcmVjb21wb3Nl
ZFN0cmluZ1dpdGhDYW5vbmljYWxNYXBwaW5nXSkpOwogCiAgICAgbWFkZUZyYWdtZW50RnJvbVBs
YWluVGV4dCA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9n
dGsvRWRpdG9yR3RrLmNwcAppbmRleCA3MDZlODI2NzNmMDgxMzMzNzM1ZTU4NzEyNzhjOGQ0NTBk
MGI2OWJjLi4yYmJkNzA4NjRmMGMwMWEyNWVjODljZmIxNDQ0NDgxY2QwOWMyMzM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2d0ay9FZGl0b3JHdGsuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHAKQEAgLTUwLDcgKzUwLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNy
ZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIEZy
YW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9z
ZVBsYWluVGV4dCkKK3N0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21l
bnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgRnJhbWUmIGZyYW1l
LCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNo
b3NlUGxhaW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAKQEAgLTgxLDcg
KzgxLDcgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIAogICAgIGlmIChzZWxlY3Rpb24uaGFz
VGV4dCgpKSB7CiAgICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKLSAgICAgICAgcmV0dXJu
IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQocmFuZ2UsIHNlbGVjdGlvbi50ZXh0KCkpOworICAgICAg
ICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBz
ZWxlY3Rpb24udGV4dCgpKTsKICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTE1Miw3
ICsxNTIsNyBAQCB2b2lkIEVkaXRvcjo6d3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9hcmQoUGFzdGVi
b2FyZCYgcGFzdGVib2FyZCkKICAgICBwYXN0ZWJvYXJkLndyaXRlKHBhc3RlYm9hcmRDb250ZW50
KTsKIH0KIAotUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21Q
YXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIFJhbmdlJiBjb250ZXh0LCBib29sIGFs
bG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKK1JlZlB0cjxEb2N1bWVudEZyYWdt
ZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJv
YXJkLCBjb25zdCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hv
c2VQbGFpblRleHQpCiB7CiAgICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmRE
YXRhKHBhc3RlYm9hcmQsIG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9zZVBs
YWluVGV4dCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0
b3JNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMubW0KaW5kZXgg
MmY2MTZhOTQ0OWMwZmQ5Y2FjM2QzMTBjM2E3Nzc3ZTBkNmRiY2ZkMy4uNzQwMjZiYjE2NDkwMmI1
YmQ1YzcxOWFjOTllYjE2M2FlNDYxNGJiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9tYWMvRWRpdG9yTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFjL0Vk
aXRvck1hYy5tbQpAQCAtMTQxLDggKzE0MSw5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZy
b21QYXN0ZWJvYXJkKE5vZGUqIG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiAg
ICAgICAgIHJldHVybjsKIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotICAg
IGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIFBvc2l0aW9uKG5v
ZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9yKSwgUG9zaXRpb24obm9kZSwgUG9z
aXRpb246OlBvc2l0aW9uSXNBZnRlckFuY2hvcikpOwotICAgIG1fZnJhbWUuc2VsZWN0aW9uKCku
c2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0KCkpLCBGcmFtZVNlbGVjdGlv
bjo6RG9Ob3RTZXRGb2N1cyk7CisKKyAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5n
Tm9kZUNvbnRlbnRzKCpub2RlKTsKKyAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlv
bihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMp
OwogCiAgICAgUGFzdGVib2FyZCBwYXN0ZWJvYXJkKHBhc3RlYm9hcmROYW1lKTsKIApAQCAtMTU3
LDkgKzE1OCw5IEBAIHZvaWQgRWRpdG9yOjpyZXBsYWNlTm9kZUZyb21QYXN0ZWJvYXJkKE5vZGUq
IG5vZGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiAgICAgQUxMT1dfREVQUkVDQVRF
RF9ERUNMQVJBVElPTlNfRU5ECiAKICAgICBib29sIGNob3NlUGxhaW5UZXh0OwotICAgIGlmIChS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSB3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQocGFzdGVib2FyZCwgcmFuZ2UuZ2V0KCksIHRydWUsIGNob3NlUGxhaW5UZXh0KSkgeworICAg
IGlmIChhdXRvIGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3RlYm9hcmQs
IHJhbmdlLCB0cnVlLCBjaG9zZVBsYWluVGV4dCkpIHsKICAgICAgICAgbWF5YmVDb3B5Tm9kZUF0
dHJpYnV0ZXNUb0ZyYWdtZW50KCpub2RlLCAqZnJhZ21lbnQpOwotICAgICAgICBpZiAoc2hvdWxk
SW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCByYW5nZS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpQYXN0ZWQpKQorICAgICAgICBpZiAoc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLnB0cigpLCBFZGl0b3JJbnNlcnRBY3Rpb246OlBhc3RlZCkp
CiAgICAgICAgICAgICBwYXN0ZUFzRnJhZ21lbnQoZnJhZ21lbnQucmVsZWFzZU5vbk51bGwoKSwg
Y2FuU21hcnRSZXBsYWNlV2l0aFBhc3RlYm9hcmQocGFzdGVib2FyZCksIGZhbHNlLCBNYWlsQmxv
Y2txdW90ZUhhbmRsaW5nOjpJZ25vcmVCbG9ja3F1b3RlKTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IDA5NjRjY2I0ZmJkN2FjMzZiMThmMzQx
NmY0MjBhMjdkYmU5NjkxNzguLjVlODY4N2Y4OTRiZWM2MDRjYzYyMWJkNGUwZDkxMjgyOTVjMzRm
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRpdG9yV2luLmNwcApAQCAtNjYsNyAr
NjYsNyBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJv
bVBsYXRmb3JtRGF0YShQbGF0Zm9ybURyYWdEYXRhJgogICAgIHJldHVybiBudWxscHRyOwogfQog
Ci1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgUmFuZ2UmLCBib29sIC8qYWxsb3dQbGFpblRleHQq
LywgYm9vbCYgLypjaG9zZVBsYWluVGV4dCovKQorUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IEVk
aXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIGNv
bnN0IFNpbXBsZVJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wmIC8qY2hvc2VQ
bGFpblRleHQqLykKIHsKICAgICBpZiAoQ09NUHRyPElEYXRhT2JqZWN0PiBwbGF0Zm9ybURyYWdE
YXRhID0gcGFzdGVib2FyZC5kYXRhT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVGcmFn
bWVudEZyb21QbGF0Zm9ybURhdGEoKnBsYXRmb3JtRHJhZ0RhdGEsIG1fZnJhbWUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKaW5kZXggNWMxY2EzZWEwN2IxNDE5NjdkZTFhNTc4
NTAxYjBiYzQ5YzZiMDNjYy4uYjBiZThlNGNlN2NlY2E3MzUzYzQwNjUxNzQyMGU4Yjc4Njg3YTRm
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCkBAIC0yNTk5LDEzICsyNTk5
LDEwIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lKCkK
ICAgICAgICAgICAgICAgICBGUkFNRUxPQURFUl9SRUxFQVNFX0xPR19JRl9BTExPV0VEKFJlc291
cmNlTG9hZGluZywgImNoZWNrTG9hZENvbXBsZXRlRm9yVGhpc0ZyYW1lOiBGaW5pc2hlZCBmcmFt
ZSBsb2FkIik7CiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgICAgICAgICAgICAgIGF1
dG8qIGRvY3VtZW50ID0gbV9mcmFtZS5kb2N1bWVudCgpOwotICAgICAgICAgICAgICAgIGlmICht
X2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSAhPSBEYXRhRGV0ZWN0b3JUeXBl
Tm9uZSAmJiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogZG9jdW1l
bnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IGRvY3VtZW50UmFuZ2UgPSBtYWtlUmFuZ2UoZmlyc3RQ
b3NpdGlvbkluTm9kZShkb2N1bWVudEVsZW1lbnQpLCBsYXN0UG9zaXRpb25Jbk5vZGUoZG9jdW1l
bnRFbGVtZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lLnNldERhdGFEZXRl
Y3Rpb25SZXN1bHRzKERhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKGRvY3VtZW50
UmFuZ2UsIG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpLCBtX2NsaWVudC0+
ZGF0YURldGVjdGlvbkNvbnRleHQoKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1f
ZnJhbWUuaXNNYWluRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9uKG1fZnJhbWUuZGF0YURldGVjdGlvblJl
c3VsdHMoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZS5zZXR0aW5ncygpLmRhdGFEZXRlY3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZXM6
Ok5vbmUgJiYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS5zZXREYXRh
RGV0ZWN0aW9uUmVzdWx0cyhEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgbV9mcmFtZS5zZXR0aW5ncygp
LmRhdGFEZXRlY3RvclR5cGVzKCksIG1fY2xpZW50LT5kYXRhRGV0ZWN0aW9uQ29udGV4dCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLmlzTWFpbkZyYW1lKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGlzcGF0Y2hEaWRGaW5pc2hEYXRhRGV0ZWN0aW9u
KG1fZnJhbWUuZGF0YURldGVjdGlvblJlc3VsdHMoKSk7CiAgICAgICAgICAgICAgICAgfQogI2Vu
ZGlmCiAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCmluZGV4IGIzMmZjYWRkOTA2OWEwNDZkYTli
N2JhODMwNDdiODIyY2YzNTA5ZmYuLmQ2NzU0OWI0NmE4MWYwMGE5MGYyZDU1Mzk0NzQ1Mjc0YzEw
ZjRhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKQEAgLTIwNjYsNyArMjA2
Niw3IEBAIHZvaWQgRXZlbnRIYW5kbGVyOjppbnZhbGlkYXRlQ2xpY2soKQogICAgIG1fY2xpY2tO
b2RlID0gbnVsbHB0cjsKIH0KIAotc3RhdGljIE5vZGUqIHRhcmdldE5vZGVGb3JDbGlja0V2ZW50
KE5vZGUqIG1vdXNlUHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJlbGVhc2VOb2RlKQorc3RhdGljIFJl
ZlB0cjxOb2RlPiB0YXJnZXROb2RlRm9yQ2xpY2tFdmVudChOb2RlKiBtb3VzZVByZXNzTm9kZSwg
Tm9kZSogbW91c2VSZWxlYXNlTm9kZSkKIHsKICAgICBpZiAoIW1vdXNlUHJlc3NOb2RlIHx8ICFt
b3VzZVJlbGVhc2VOb2RlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIwNzYsMTcgKzIw
NzYsMTggQEAgc3RhdGljIE5vZGUqIHRhcmdldE5vZGVGb3JDbGlja0V2ZW50KE5vZGUqIG1vdXNl
UHJlc3NOb2RlLCBOb2RlKiBtb3VzZVJlbGVhc2VOb2QKIAogICAgIC8vIElmIG1vdXNlUHJlc3NO
b2RlIGFuZCBtb3VzZVJlbGVhc2VOb2RlIGRpZmZlciwgd2Ugc2hvdWxkIGZpcmUgdGhlIGV2ZW50
IGF0IHRoZWlyIGNvbW1vbiBhbmNlc3RvciBpZiB0aGVyZSBpcyBvbmUuCiAgICAgaWYgKCZtb3Vz
ZVByZXNzTm9kZS0+ZG9jdW1lbnQoKSA9PSAmbW91c2VSZWxlYXNlTm9kZS0+ZG9jdW1lbnQoKSkg
ewotICAgICAgICBpZiAoYXV0byogY29tbW9uQW5jZXN0b3IgPSBSYW5nZTo6Y29tbW9uQW5jZXN0
b3JDb250YWluZXIobW91c2VQcmVzc05vZGUsIG1vdXNlUmVsZWFzZU5vZGUpKQorICAgICAgICBp
ZiAoYXV0byBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCptb3VzZVBy
ZXNzTm9kZSwgKm1vdXNlUmVsZWFzZU5vZGUpKQogICAgICAgICAgICAgcmV0dXJuIGNvbW1vbkFu
Y2VzdG9yOwogICAgIH0KIAotICAgIEVsZW1lbnQqIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3QgPSBt
b3VzZVJlbGVhc2VOb2RlLT5zaGFkb3dIb3N0KCk7CisgICAgYXV0byBtb3VzZVJlbGVhc2VTaGFk
b3dIb3N0ID0gbW91c2VSZWxlYXNlTm9kZS0+c2hhZG93SG9zdCgpOwogICAgIGlmIChtb3VzZVJl
bGVhc2VTaGFkb3dIb3N0ICYmIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3QgPT0gbW91c2VQcmVzc05v
ZGUtPnNoYWRvd0hvc3QoKSkgewogICAgICAgICAvLyBXZSB3YW50IHRvIGRpc3BhdGNoIHRoZSBj
bGljayB0byB0aGUgc2hhZG93IHRyZWUgaG9zdCBlbGVtZW50IHRvIGdpdmUgbGlzdGVuZXJzIHRo
ZSBpbGx1c2lvbiB0aGF0IHRoZQogICAgICAgICAvLyBzaGFkb20gdHJlZSBpcyBhIHNpbmdsZSBl
bGVtZW50LiBGb3IgZXhhbXBsZSwgd2Ugd2FudCB0byBnaXZlIHRoZSBpbGx1c2lvbiB0aGF0IDxp
bnB1dCB0eXBlPSJyYW5nZSI+CiAgICAgICAgIC8vIGlzIGEgc2luZ2xlIGVsZW1lbnQgZXZlbiB0
aG91Z2ggaXQgaXMgYSBjb21wb3NpdGlvbiBvZiBtdWx0aXBsZSBzaGFkb20gdHJlZSBlbGVtZW50
cy4KICAgICAgICAgcmV0dXJuIG1vdXNlUmVsZWFzZVNoYWRvd0hvc3Q7CiAgICAgfQorCiAgICAg
cmV0dXJuIG51bGxwdHI7CiB9CiAKQEAgLTIxNTksOCArMjE2MCw4IEBAIGJvb2wgRXZlbnRIYW5k
bGVyOjpoYW5kbGVNb3VzZVJlbGVhc2VFdmVudChjb25zdCBQbGF0Zm9ybU1vdXNlRXZlbnQmIHBs
YXRmb3JtTW91CiAKICAgICBib29sIGNvbnRleHRNZW51RXZlbnQgPSBwbGF0Zm9ybU1vdXNlRXZl
bnQuYnV0dG9uKCkgPT0gUmlnaHRCdXR0b247CiAKLSAgICBOb2RlKiBub2RlVG9DbGljayA9IHRh
cmdldE5vZGVGb3JDbGlja0V2ZW50KG1fY2xpY2tOb2RlLmdldCgpLCBtb3VzZUV2ZW50LnRhcmdl
dE5vZGUoKSk7Ci0gICAgYm9vbCBzd2FsbG93Q2xpY2tFdmVudCA9IG1fY2xpY2tDb3VudCA+IDAg
JiYgIWNvbnRleHRNZW51RXZlbnQgJiYgbm9kZVRvQ2xpY2sgJiYgIWRpc3BhdGNoTW91c2VFdmVu
dChldmVudE5hbWVzKCkuY2xpY2tFdmVudCwgbm9kZVRvQ2xpY2ssIHRydWUsIG1fY2xpY2tDb3Vu
dCwgcGxhdGZvcm1Nb3VzZUV2ZW50LCB0cnVlKTsKKyAgICBhdXRvIG5vZGVUb0NsaWNrID0gdGFy
Z2V0Tm9kZUZvckNsaWNrRXZlbnQobV9jbGlja05vZGUuZ2V0KCksIG1vdXNlRXZlbnQudGFyZ2V0
Tm9kZSgpKTsKKyAgICBib29sIHN3YWxsb3dDbGlja0V2ZW50ID0gbV9jbGlja0NvdW50ID4gMCAm
JiAhY29udGV4dE1lbnVFdmVudCAmJiBub2RlVG9DbGljayAmJiAhZGlzcGF0Y2hNb3VzZUV2ZW50
KGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50LCBub2RlVG9DbGljay5nZXQoKSwgdHJ1ZSwgbV9jbGlj
a0NvdW50LCBwbGF0Zm9ybU1vdXNlRXZlbnQsIHRydWUpOwogCiAgICAgaWYgKG1fcmVzaXplTGF5
ZXIpIHsKICAgICAgICAgbV9yZXNpemVMYXllci0+c2V0SW5SZXNpemVNb2RlKGZhbHNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MueWFtbCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MueWFtbAppbmRleCBhODY3NmQ5N2MzY2FiOTczYzEzMjM1ZGY4OTZj
MmRkN2FkYWViNWFlLi4wYjQ5YWQ3M2U5ZjY1YWQ0OWVmYTRhNGM0MGI2MmIxN2EyMjI3ZDU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCkBAIC01NDEsNyArNTQxLDcgQEAgdXNlSW1hZ2VE
b2N1bWVudEZvclN1YmZyYW1lUERGOgogICBpbml0aWFsOiBmYWxzZQogZGF0YURldGVjdG9yVHlw
ZXM6CiAgIHR5cGU6IERhdGFEZXRlY3RvclR5cGVzCi0gIGluaXRpYWw6IERhdGFEZXRlY3RvclR5
cGVOb25lCisgIGluaXRpYWw6IAogICBjb25kaXRpb25hbDogREFUQV9ERVRFQ1RJT04KIAogIyBB
bGxvdyBTb3VyY2VCdWZmZXJzIHRvIHN0b3JlIHVwIHRvIDMwNE1CIGVhY2gsIGVub3VnaCBmb3Ig
YXBwcm94aW1hdGVseSBmaXZlIG1pbnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3NCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzQmFzZS5oCmlu
ZGV4IGFkZjhkYmFjZGRjYTdjYWQwZmI3MmNhMzE2OWMxMmRhOGI0ODUwNjcuLmFmMjI0OWRiMzBj
MmNjZTZkZGQyZWMxMjk1MDJkYTlmZDBlN2ZlNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3NCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jh
c2UuaApAQCAtNDMsMTUgKzQzLDEzIEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQXRvbVN0cmluZy5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmdIYXNoLmg+CiAKLSNpZiBFTkFCTEUoREFU
QV9ERVRFQ1RJT04pCi0jaW5jbHVkZSAiRGF0YURldGVjdGlvbi5oIgotI2VuZGlmCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udEdlbmVyaWNGYW1pbGllczsKIGNsYXNzIFBhZ2U7
CiAKK2VudW0gY2xhc3MgRGF0YURldGVjdG9yVHlwZXMgOiB1aW50MzJfdDsKKwogZW51bSBFZGl0
YWJsZUxpbmtCZWhhdmlvciB7CiAgICAgRWRpdGFibGVMaW5rRGVmYXVsdEJlaGF2aW9yLAogICAg
IEVkaXRhYmxlTGlua0Fsd2F5c0xpdmUsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNw
cAppbmRleCBiMTIxZDlkZGIzNWIxMTI3ZWVkZmM5NzhlYTdhNGY5NjM2ZDQzOWU3Li4yZDZjZTgw
OGJlZDY5M2MxZjcwMzNmZmM3ZTdhZDU0NmM1MGFhM2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4
dEluZGljYXRvci5jcHAKQEAgLTUyLDcgKzUyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiwgRnJh
bWUmLCBjb25zdCBSYW5nZSYsIEZsb2F0U2l6ZSBtYXJnaW4sIGJvb2wgaW5kaWNhdGVzQ3VycmVu
dFNlbGVjdGlvbik7CitzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0
b3JEYXRhJiwgRnJhbWUmLCBjb25zdCBTaW1wbGVSYW5nZSYsIEZsb2F0U2l6ZSBtYXJnaW4sIGJv
b2wgaW5kaWNhdGVzQ3VycmVudFNlbGVjdGlvbik7CiAKIFRleHRJbmRpY2F0b3I6OlRleHRJbmRp
Y2F0b3IoY29uc3QgVGV4dEluZGljYXRvckRhdGEmIGRhdGEpCiAgICAgOiBtX2RhdGEoZGF0YSkK
QEAgLTY2LDMxICs2NiwyNyBAQCBSZWY8VGV4dEluZGljYXRvcj4gVGV4dEluZGljYXRvcjo6Y3Jl
YXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFRleHRJbmRpY2F0b3IoZGF0YSkpOwogfQogCi1SZWZQdHI8VGV4dEluZGljYXRvcj4gVGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgVGV4dEluZGlj
YXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24g
cHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKK1JlZlB0cjxUZXh0SW5k
aWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2lu
KQogewotICAgIEZyYW1lKiBmcmFtZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KS5mcmFtZSgpOwotCisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnRDb250
YWluZXIoKS5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IoKmZyYW1lKTsKKyAgICBi
b29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24gPSByYW5nZSA9PSBmcmFtZS0+c2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKIAotICAgIFZpc2libGVTZWxlY3Rp
b24gb2xkU2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIE9w
dGlvblNldDxUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb24+IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlv
bnM7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQoVGVtcG9yYXJ5U2VsZWN0aW9u
T3B0aW9uOjpEb05vdFNldEZvY3VzKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6SWdu
b3JlU2VsZWN0aW9uQ2hhbmdlcyk7CiAgICAgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucy5hZGQo
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uOjpFbmFibGVBcHBlYXJhbmNlVXBkYXRlcyk7CiAjZW5k
aWYKLSAgICBUZW1wb3JhcnlTZWxlY3Rpb25DaGFuZ2Ugc2VsZWN0aW9uQ2hhbmdlKCpmcmFtZSwg
eyBTaW1wbGVSYW5nZSB7IHJhbmdlIH0gfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7Cisg
ICAgVGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgcmFu
Z2UgfSwgdGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9ucyk7CiAKICAgICBUZXh0SW5kaWNhdG9yRGF0
YSBkYXRhOwogCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFuc2l0aW9uID0gcHJlc2VudGF0aW9u
VHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRpb25zOwogCi0gICAgYm9vbCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gYXJlUmFuZ2VzRXF1YWwoJnJhbmdlLCBjcmVhdGVMaXZl
UmFuZ2Uob2xkU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkpLmdldCgpKTsKLQogICAgIGlm
ICghaW5pdGlhbGl6ZUluZGljYXRvcihkYXRhLCAqZnJhbWUsIHJhbmdlLCBtYXJnaW4sIGluZGlj
YXRlc0N1cnJlbnRTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTA4
LDI1ICsxMDQsMTkgQEAgUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhTZWxlY3Rpb25JbkZyYW1lKEZyYW1lJiBmcmFtZSwgVGUKICAgICBkYXRhLnByZXNlbnRh
dGlvblRyYW5zaXRpb24gPSBwcmVzZW50YXRpb25UcmFuc2l0aW9uOwogICAgIGRhdGEub3B0aW9u
cyA9IG9wdGlvbnM7CiAKLSAgICBpZiAoIWluaXRpYWxpemVJbmRpY2F0b3IoZGF0YSwgZnJhbWUs
IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBtYXJnaW4sIHRydWUpKQorICAgIGlmICghaW5pdGlh
bGl6ZUluZGljYXRvcihkYXRhLCBmcmFtZSwgKnJhbmdlLCBtYXJnaW4sIHRydWUpKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBUZXh0SW5kaWNhdG9yOjpjcmVhdGUoZGF0
YSk7CiB9CiAKLXN0YXRpYyBib29sIGhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyhjb25z
dCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVu
dHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIE5vZGUqIHN0b3BOb2RlID0gcmFu
Z2UucGFzdExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2UuZmlyc3ROb2Rl
KCk7IG5vZGUgIT0gc3RvcE5vZGU7IG5vZGUgPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpub2RlKSkg
ewotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIGlmICghcmVu
ZGVyZXIpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCghcmVuZGVyZXItPmlz
SW5saW5lKCkgfHwgcmVuZGVyZXItPmlzUmVwbGFjZWQoKSkgJiYgcmFuZ2UuaW50ZXJzZWN0c05v
ZGUoKm5vZGUpLnJlbGVhc2VSZXR1cm5WYWx1ZSgpKQorICAgIGZvciAoYXV0byYgbm9kZSA6IGlu
dGVyc2VjdGluZ05vZGVzKHJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5y
ZW5kZXJlcigpOworICAgICAgICBpZiAocmVuZGVyZXIgJiYgKCFyZW5kZXJlci0+aXNJbmxpbmUo
KSB8fCByZW5kZXJlci0+aXNSZXBsYWNlZCgpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtMTg0LDU5ICsxNzQsNDkgQEAgc3Rh
dGljIGJvb2wgdGFrZVNuYXBzaG90cyhUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZy
YW1lLCBJbnRSZWN0IHNuYXBzaG8KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAKLXN0YXRp
YyB2b2lkIGdldFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UoVmVjdG9yPEZsb2F0UmVjdD4mIHJlc3Vs
dGluZ1JlY3RzLCBjb25zdCBSYW5nZSYgcmFuZ2UpCitzdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4g
c2VsZWN0aW9uUmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIFZlY3RvcjxT
ZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlOwotICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2VJbkJvdW5kaW5nUmVjdENvb3JkaW5hdGVzOwotICAg
IHJhbmdlLmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0c0ZvclJhbmdlKTsKLSAg
ICBmb3IgKGF1dG8gc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzRm9yUmFuZ2UpCi0gICAg
ICAgIHJlc3VsdGluZ1JlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7CisgICAgVmVj
dG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOworICAgIGNyZWF0ZUxpdmVSYW5nZShy
YW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0cyk7CisgICAgVmVjdG9y
PEZsb2F0UmVjdD4gcmVjdHM7CisgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0
aW9uUmVjdHMpCisgICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7Cisg
ICAgcmV0dXJuIHJlY3RzOwogfQogCiAjZW5kaWYKIAogc3RhdGljIGJvb2wgc3R5bGVDb250YWlu
c0NvbXBsZXhCYWNrZ3JvdW5kKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKLSAgICBpZiAo
c3R5bGUuaGFzQmxlbmRNb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKHN0
eWxlLmhhc0JhY2tncm91bmRJbWFnZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChzdHlsZS5oYXNCYWNrZHJvcEZpbHRlcigpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
IHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gc3R5bGUuaGFzQmxlbmRNb2RlKCkgfHwgc3R5bGUu
aGFzQmFja2dyb3VuZEltYWdlKCkgfHwgc3R5bGUuaGFzQmFja2Ryb3BGaWx0ZXIoKTsKIH0KIAot
c3RhdGljIEhhc2hTZXQ8Q29sb3I+IGVzdGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShjb25zdCBS
YW5nZSYgcmFuZ2UpCitzdGF0aWMgSGFzaFNldDxDb2xvcj4gZXN0aW1hdGVkVGV4dENvbG9yc0Zv
clJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICBIYXNoU2V0PENvbG9yPiBj
b2xvcnM7CiAgICAgZm9yIChUZXh0SXRlcmF0b3IgaXRlcmF0b3IocmFuZ2UpOyAhaXRlcmF0b3Iu
YXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5jZSgpKSB7Ci0gICAgICAgIGF1dG8qIG5vZGUgPSBpdGVy
YXRvci5ub2RlKCk7Ci0gICAgICAgIGlmICghaXM8VGV4dD4obm9kZSkgfHwgIWlzPFJlbmRlclRl
eHQ+KG5vZGUtPnJlbmRlcmVyKCkpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
Y29sb3JzLmFkZChub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLmNvbG9yKCkpOworICAgICAgICBh
dXRvIHJlbmRlcmVyID0gaXRlcmF0b3Iubm9kZSgpLT5yZW5kZXJlcigpOworICAgICAgICBpZiAo
aXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKQorICAgICAgICAgICAgY29sb3JzLmFkZChyZW5kZXJl
ci0+c3R5bGUoKS5jb2xvcigpKTsKICAgICB9CiAgICAgcmV0dXJuIGNvbG9yczsKIH0KLSAgICAK
LXN0YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5nZShjb25zdCBSYW5n
ZSYgcmFuZ2UpCisKK3N0YXRpYyBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3RGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7Ci0gICAgcmV0dXJuIHJhbmdlLmFic29sdXRl
Qm91bmRpbmdSZWN0KHsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1
dGVCb3VuZGluZ1JlY3QoewogICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJl
c3BlY3RDbGlwcGluZywKICAgICAgICAgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpVc2VW
aXNpYmxlQm91bmRzLAogICAgICAgICBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6Oklnbm9y
ZVRpbnlSZWN0cywKICAgICB9KTsKIH0KIAotc3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91
bmRDb2xvckZvclJhbmdlKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQor
c3RhdGljIENvbG9yIGVzdGltYXRlZEJhY2tncm91bmRDb2xvckZvclJhbmdlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZSwgY29uc3QgRnJhbWUmIGZyYW1lKQogewogICAgIGF1dG8gZXN0aW1hdGVk
QmFja2dyb3VuZENvbG9yID0gZnJhbWUudmlldygpID8gZnJhbWUudmlldygpLT5kb2N1bWVudEJh
Y2tncm91bmRDb2xvcigpIDogQ29sb3I6OnRyYW5zcGFyZW50OwogCiAgICAgUmVuZGVyRWxlbWVu
dCogcmVuZGVyZXIgPSBudWxscHRyOwotICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSByYW5nZS5j
b21tb25BbmNlc3RvckNvbnRhaW5lcigpOworICAgIGF1dG8gY29tbW9uQW5jZXN0b3IgPSBjb21t
b25JbmNsdXNpdmVBbmNlc3RvcihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250
YWluZXIpOwogICAgIHdoaWxlIChjb21tb25BbmNlc3RvcikgewogICAgICAgICBpZiAoaXM8UmVu
ZGVyRWxlbWVudD4oY29tbW9uQW5jZXN0b3ItPnJlbmRlcmVyKCkpKSB7CiAgICAgICAgICAgICBy
ZW5kZXJlciA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJl
cigpKTsKQEAgLTI5MSwxNyArMjcxLDE2IEBAIHN0YXRpYyBib29sIGhhc0FueUlsbGVnaWJsZUNv
bG9ycyhUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgY29uc3QgQ29sb3ImIGJhY2tncm91CiAgICAg
cmV0dXJuICFoYXNPbmx5TGVnaWJsZVRleHRDb2xvcnMgfHwgdGV4dENvbG9ycy5pc0VtcHR5KCk7
CiB9CiAKLXN0YXRpYyBib29sIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFJhbmdl
JiByYW5nZSkKK3N0YXRpYyBib29sIGNvbnRhaW5zT25seVdoaXRlU3BhY2VUZXh0KGNvbnN0IFNp
bXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBhdXRvKiBzdG9wID0gcmFuZ2UucGFzdExhc3ROb2Rl
KCk7Ci0gICAgZm9yIChhdXRvKiBub2RlID0gcmFuZ2UuZmlyc3ROb2RlKCk7IG5vZGUgJiYgbm9k
ZSAhPSBzdG9wOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAg
aWYgKCFpczxSZW5kZXJUZXh0Pihub2RlLT5yZW5kZXJlcigpKSkKKyAgICBmb3IgKGF1dG8mIG5v
ZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKCFpczxSZW5kZXJU
ZXh0Pihub2RlLnJlbmRlcmVyKCkpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
ICAgICByZXR1cm4gcGxhaW5UZXh0UmVwbGFjaW5nTm9CcmVha1NwYWNlKHJhbmdlKS5zdHJpcFdo
aXRlU3BhY2UoKS5pc0VtcHR5KCk7CiB9CiAKLXN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0
b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuZ2UmIHJh
bmdlLCBGbG9hdFNpemUgbWFyZ2luLCBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rpb24pCitz
dGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBG
cmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgRmxvYXRTaXplIG1hcmdpbiwg
Ym9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKQogewogICAgIGlmIChhdXRvKiBkb2N1bWVu
dCA9IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25v
cmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKQEAgLTMxMiwyMCArMjkxLDE3IEBAIHN0YXRpYyBib29s
IGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFt
ZSwgY29uc3QgUmFuCiAgICAgICAgIHRyZWF0UmFuZ2VBc0NvbXBsZXhEdWVUb0lsbGVnaWJsZVRl
eHRDb2xvcnMgPSBoYXNBbnlJbGxlZ2libGVDb2xvcnMoZGF0YSwgZGF0YS5lc3RpbWF0ZWRCYWNr
Z3JvdW5kQ29sb3IsIGVzdGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShyYW5nZSkpOwogICAgIH0K
IAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHRleHRSZWN0czsKLQogICAgIC8vIEZJWE1FICgxMzg4
ODgpOiBJZGVhbGx5IHdlIHdvdWxkbid0IHJlbW92ZSB0aGUgbWFyZ2luIGluIHRoaXMgY2FzZSwg
YnV0IHdlIG5lZWQgdG8KICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgaW5kaWNhdG9yIGFuZCBpbmRp
Y2F0b3Itd2l0aC1oaWdobGlnaHQgb3ZlcmxhcCBwcmVjaXNlbHksIGFuZAogICAgIC8vIHdlIGNh
bid0IGFkZCBhIG1hcmdpbiB0byB0aGUgaW5kaWNhdG9yLXdpdGgtaGlnaGxpZ2h0LgogICAgIGlm
IChpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uICYmICEoZGF0YS5vcHRpb25zICYgVGV4dEluZGlj
YXRvck9wdGlvbkluY2x1ZGVNYXJnaW5JZlJhbmdlTWF0Y2hlc1NlbGVjdGlvbikpCiAgICAgICAg
IG1hcmdpbiA9IEZsb2F0U2l6ZSgpOwogCi0gICAgRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5n
bGVIZWlnaHQgdGV4dFJlY3RIZWlnaHQgPSAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9w
dGlvblRpZ2h0bHlGaXRDb250ZW50KSA/IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVp
Z2h0OjpUZXh0SGVpZ2h0IDogRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNl
bGVjdGlvbkhlaWdodDsKKyAgICBWZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7CiAKICAgICBi
b29sIHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgPSBk
YXRhLm9wdGlvbnMgJiBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5kUGFpbnRB
bGxDb250ZW50Rm9yQ29tcGxleFJhbmdlczsKICAgICBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFp
bnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyAmJiBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4
dChyYW5nZSkpIHsKLSAgICAgICAgYXV0byBjb21tb25BbmNlc3RvckNvbnRhaW5lciA9IG1ha2VS
ZWZQdHIocmFuZ2UuY29tbW9uQW5jZXN0b3JDb250YWluZXIoKSk7Ci0gICAgICAgIGlmIChhdXRv
KiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLT5yZW5kZXJlcigp
KSB7CisgICAgICAgIGlmIChhdXRvKiBjb250YWluZXJSZW5kZXJlciA9IGNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKHJhbmdlLnN0YXJ0LmNvbnRhaW5lciwgcmFuZ2UuZW5kLmNvbnRhaW5lciktPnJl
bmRlcmVyKCkpIHsKICAgICAgICAgICAgIGRhdGEub3B0aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0
aW9uUGFpbnRBbGxDb250ZW50OwogICAgICAgICAgICAgdGV4dFJlY3RzLmFwcGVuZChjb250YWlu
ZXJSZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKSk7CiAgICAgICAgIH0KQEAgLTMz
MywxNSArMzA5LDE1IEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dEluZGlj
YXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgUmFuCiAgICAgICAgIGRhdGEub3B0
aW9ucyB8PSBUZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRBbGxDb250ZW50OwogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiAgICAgZWxzZSBpZiAoZGF0YS5vcHRpb25zICYgVGV4dEluZGljYXRvck9w
dGlvblVzZVNlbGVjdGlvblJlY3RGb3JTaXppbmcpCi0gICAgICAgIGdldFNlbGVjdGlvblJlY3Rz
Rm9yUmFuZ2UodGV4dFJlY3RzLCByYW5nZSk7CisgICAgICAgIHRleHRSZWN0cyA9IHNlbGVjdGlv
blJlY3RzKHJhbmdlKTsKICNlbmRpZgogICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8SW50UmVj
dD4gYWJzb2x1dGVUZXh0UmVjdHM7Ci0gICAgICAgIHJhbmdlLmFic29sdXRlVGV4dFJlY3RzKGFi
c29sdXRlVGV4dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCA9PSBGcmFtZVNlbGVjdGlvbjo6VGV4dFJl
Y3RhbmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0LCBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZp
b3I6OlJlc3BlY3RDbGlwcGluZyk7Ci0KLSAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoYWJzb2x1dGVUZXh0UmVjdHMuc2l6ZSgpKTsKLSAgICAgICAgZm9yIChhdXRvJiBy
ZWN0IDogYWJzb2x1dGVUZXh0UmVjdHMpCi0gICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2Vk
QXBwZW5kKHJlY3QpOworICAgICAgICBhdXRvIHRleHRSZWN0SGVpZ2h0ID0gKGRhdGEub3B0aW9u
cyAmIFRleHRJbmRpY2F0b3JPcHRpb25UaWdodGx5Rml0Q29udGVudCkgPyBGcmFtZVNlbGVjdGlv
bjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6VGV4dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9uOjpUZXh0
UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQ7CisgICAgICAgIFZlY3RvcjxJbnRSZWN0
PiBpbnRSZWN0czsKKyAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+YWJzb2x1dGVUZXh0
UmVjdHMoaW50UmVjdHMsIHRleHRSZWN0SGVpZ2h0ID09IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVj
dGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQsIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlv
cjo6UmVzcGVjdENsaXBwaW5nKTsKKyAgICAgICAgdGV4dFJlY3RzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoaW50UmVjdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChhdXRvJiBpbnRSZWN0IDogaW50
UmVjdHMpCisgICAgICAgICAgICB0ZXh0UmVjdHMudW5jaGVja2VkQXBwZW5kKGludFJlY3QpOwog
ICAgIH0KIAogICAgIGlmICh0ZXh0UmVjdHMuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJ
bmRpY2F0b3IuaAppbmRleCA2ZjMwODg0ZmMyODc5N2YxODg3OGY2OTFhMTg5ZTk1ODRlYzZmOWY4
Li40MTE3M2FmZDk3ODU2MDEyY2FjYzljN2EwNzdhODY5YjUyNDQxMDExIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1RleHRJbmRpY2F0b3IuaApAQCAtMzQsNyArMzQsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZyYW1lOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgUmFuZ2U7CisK
K3N0cnVjdCBTaW1wbGVSYW5nZTsKIAogLy8gRklYTUU6IE1vdmUgUHJlc2VudGF0aW9uVHJhbnNp
dGlvbiB0byBUZXh0SW5kaWNhdG9yV2luZG93LCBiZWNhdXNlIGl0J3MgYWJvdXQgcHJlc2VudGF0
aW9uLgogZW51bSBjbGFzcyBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiA6IHVp
bnQ4X3QgewpAQCAtMTIzLDcgKzEyNCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JU
IHN0YXRpYyBSZWY8VGV4dEluZGljYXRvcj4gY3JlYXRlKGNvbnN0IFRleHRJbmRpY2F0b3JEYXRh
Jik7CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVh
dGVXaXRoU2VsZWN0aW9uSW5GcmFtZShGcmFtZSYsIFRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbiA9IEZsb2F0
U2l6ZShkZWZhdWx0SG9yaXpvbnRhbE1hcmdpbiwgZGVmYXVsdFZlcnRpY2FsTWFyZ2luKSk7Ci0g
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBjcmVhdGVXaXRo
UmFuZ2UoY29uc3QgUmFuZ2UmLCBUZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4gPSBGbG9hdFNpemUoZGVmYXVs
dEhvcml6b250YWxNYXJnaW4sIGRlZmF1bHRWZXJ0aWNhbE1hcmdpbikpOworICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNvbnN0
IFNpbXBsZVJhbmdlJiwgVGV4dEluZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luID0gRmxvYXRTaXplKGRlZmF1bHRIb3Jp
em9udGFsTWFyZ2luLCBkZWZhdWx0VmVydGljYWxNYXJnaW4pKTsKIAogICAgIFdFQkNPUkVfRVhQ
T1JUIH5UZXh0SW5kaWNhdG9yKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFj
L1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIuaAppbmRleCBmNGU0YjVlZTI4OTIxN2RmY2FhMWIw
ZGYzMmRkMjAzNDNmZjA5MThlLi5mNTA4MmZkZjVjZDExYTA0MTQ0ZjkwMDUyN2U3ZWZmNTVmNTU2
YTMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5
Q29udHJvbGxlci5oCkBAIC01NSwxNCArNTUsMTQgQEAgcHJpdmF0ZToKICAgICBjbGFzcyBIaWdo
bGlnaHQgOiBwdWJsaWMgUmVmQ291bnRlZDxIaWdobGlnaHQ+LCBwcml2YXRlIEdyYXBoaWNzTGF5
ZXJDbGllbnQgewogICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShIaWdobGlnaHQpOwogICAg
IHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclNlbGVjdGlv
bihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiwg
UmVmPFJhbmdlPiYmKTsKLSAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+IGNyZWF0ZUZvclRl
bGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRyPERESGln
aGxpZ2h0UmVmPiwgUmVmPFJhbmdlPiYmKTsKKyAgICAgICAgc3RhdGljIFJlZjxIaWdobGlnaHQ+
IGNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgUmV0YWluUHRy
PERESGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKKyAgICAgICAgc3RhdGljIFJlZjxI
aWdobGlnaHQ+IGNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyJiwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKICAgICAg
ICAgfkhpZ2hsaWdodCgpOwogCiAgICAgICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogCiAgICAgICAg
IERESGlnaGxpZ2h0UmVmIGRkSGlnaGxpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9kZEhpZ2hsaWdo
dC5nZXQoKTsgfQotICAgICAgICBSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Jhbmdl
LmdldCgpOyB9CisgICAgICAgIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmFuZ2U7IH0KICAgICAgICAgR3JhcGhpY3NMYXllciYgbGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX2dyYXBoaWNzTGF5ZXIuZ2V0KCk7IH0KIAogICAgICAgICBlbnVtIHsKQEAgLTc4LDcg
Kzc4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBzZXREREhpZ2hsaWdodChEREhpZ2hsaWdo
dFJlZik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5
Q29udHJvbGxlciYsIFR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFJlZjxSYW5nZT4m
Jik7CisgICAgICAgIEhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiwgVHlwZSwg
UmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiYmLCBTaW1wbGVSYW5nZSYmKTsKIAogICAgICAgICAv
LyBHcmFwaGljc0xheWVyQ2xpZW50CiAgICAgICAgIHZvaWQgbm90aWZ5Rmx1c2hSZXF1aXJlZChj
b25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CkBAIC04OSw3ICs4OSw3IEBAIHByaXZhdGU6
CiAKICAgICAgICAgU2VydmljZXNPdmVybGF5Q29udHJvbGxlciogbV9jb250cm9sbGVyOwogICAg
ICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IG1fZGRIaWdobGlnaHQ7Ci0gICAgICAgIFJl
ZjxSYW5nZT4gbV9yYW5nZTsKKyAgICAgICAgU2ltcGxlUmFuZ2UgbV9yYW5nZTsKICAgICAgICAg
UmVmPEdyYXBoaWNzTGF5ZXI+IG1fZ3JhcGhpY3NMYXllcjsKICAgICAgICAgVHlwZSBtX3R5cGU7
CiAgICAgfTsKQEAgLTEyNiw5ICsxMjYsOSBAQCBwcml2YXRlOgogICAgIFNlY29uZHMgcmVtYWlu
aW5nVGltZVVudGlsSGlnaGxpZ2h0U2hvdWxkQmVTaG93bihIaWdobGlnaHQqKSBjb25zdDsKICAg
ICB2b2lkIGRldGVybWluZUFjdGl2ZUhpZ2hsaWdodFRpbWVyRmlyZWQoKTsKIAotICAgIHN0YXRp
YyBib29sIGhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0IEhpZ2hsaWdodCogYSwgY29uc3Qg
SGlnaGxpZ2h0KiBiKTsKKyAgICBzdGF0aWMgYm9vbCBoaWdobGlnaHRzQXJlRXF1aXZhbGVudChj
b25zdCBIaWdobGlnaHQqLCBjb25zdCBIaWdobGlnaHQqKTsKIAotICAgIFZlY3RvcjxSZWZQdHI8
UmFuZ2U+PiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKKyAgICBWZWN0
b3I8U2ltcGxlUmFuZ2U+IHRlbGVwaG9uZU51bWJlclJhbmdlc0ZvckZvY3VzZWRGcmFtZSgpOwog
CiAgICAgdm9pZCBkaWRDcmVhdGVIaWdobGlnaHQoSGlnaGxpZ2h0Kik7CiAgICAgdm9pZCB3aWxs
RGVzdHJveUhpZ2hsaWdodChIaWdobGlnaHQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tCmluZGV4IGNkY2JhMmVkM2IwYWY0
ZTMyZjc2MDQzNzk3NmE4ZTA0YzRiODNlZmMuLjJlZmM0MWUzZDQyNzMyNjU5MjdhZGU1YjhiYmE5
NmE3NzEyMzY5ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2Vz
T3ZlcmxheUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlci5tbQpAQCAtNTUsMTcgKzU1LDE3IEBAIGNvbnN0IGZsb2F0IGhp
Z2hsaWdodEZhZGVBbmltYXRpb25EdXJhdGlvbiA9IDAuMzsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1SZWY8U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092
ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRk
SGlnaGxpZ2h0LCBSZWY8UmFuZ2U+JiYgcmFuZ2UpCitSZWY8U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNy
ZWF0ZUZvclNlbGVjdGlvbihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+JiYgZGRIaWdobGlnaHQsIFNpbXBsZVJhbmdlJiYgcmFu
Z2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhp
Z2hsaWdodDo6U2VsZWN0aW9uVHlwZSwgZGRIaWdobGlnaHQsIFdURk1vdmUocmFuZ2UpKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhpZ2hsaWdodDo6
U2VsZWN0aW9uVHlwZSwgV1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUocmFuZ2UpKSk7CiB9
CiAKLVJlZjxTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJl
Zj4gZGRIaWdobGlnaHQsIFJlZjxSYW5nZT4mJiByYW5nZSkKK1JlZjxTZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyOjpIaWdobGlnaHQ+IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdo
dDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVyKFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNv
bnRyb2xsZXIsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxl
UmFuZ2UmJiByYW5nZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29u
dHJvbGxlciwgSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlLCBkZEhpZ2hsaWdodCwgV1RG
TW92ZShyYW5nZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBIaWdobGlnaHQoY29udHJv
bGxlciwgSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlLCBXVEZNb3ZlKGRkSGlnaGxpZ2h0
KSwgV1RGTW92ZShyYW5nZSkpKTsKIH0KIAotU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGln
aGxpZ2h0OjpIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwg
VHlwZSB0eXBlLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0LCBSZWY8V2Vi
Q29yZTo6UmFuZ2U+JiYgcmFuZ2UpCitTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGln
aHQ6OkhpZ2hsaWdodChTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBUeXBl
IHR5cGUsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4mJiBkZEhpZ2hsaWdodCwgU2ltcGxlUmFu
Z2UmJiByYW5nZSkKICAgICA6IG1fY29udHJvbGxlcigmY29udHJvbGxlcikKICAgICAsIG1fcmFu
Z2UoV1RGTW92ZShyYW5nZSkpCiAgICAgLCBtX2dyYXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllcjo6
Y3JlYXRlKGNvbnRyb2xsZXIucGFnZSgpLmNocm9tZSgpLmNsaWVudCgpLmdyYXBoaWNzTGF5ZXJG
YWN0b3J5KCksICp0aGlzKSkKQEAgLTQ3NCw3ICs0NzQsNyBAQCB2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OnJlbW92ZUFsbFBvdGVudGlhbEhpZ2hsaWdodHNPZlR5cGUoSGlnaGxpZ2h0
OjpUeQogCiB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkUGhvbmVOdW1iZXJI
aWdobGlnaHRzKCkKIHsKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4gcGhvbmVOdW1iZXJSYW5n
ZXM7CisgICAgVmVjdG9yPFNpbXBsZVJhbmdlPiBwaG9uZU51bWJlclJhbmdlczsKICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9ICZtYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkKICAgICAgICAgcGhvbmVOdW1iZXJSYW5nZXMuYXBwZW5kVmVjdG9y
KGZyYW1lLT5lZGl0b3IoKS5kZXRlY3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcygpKTsKIApAQCAt
NDkyLDI2ICs0OTIsMjUgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBo
b25lTnVtYmVySGlnaGxpZ2h0cygpCiAKICAgICBmb3IgKGF1dG8mIHJhbmdlIDogcGhvbmVOdW1i
ZXJSYW5nZXMpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgbWFrZXMgYSBiaWcgcmVjdCBpZiB0
aGUgcmFuZ2UgZXh0ZW5kcyBmcm9tIHRoZSBlbmQgb2Ygb25lIGxpbmUgdG8gdGhlIHN0YXJ0IG9m
IHRoZSBuZXh0LiBIYW5kbGUgdGhhdCBjYXNlIGJldHRlcj8KLSAgICAgICAgYXV0byByZWN0ID0g
ZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMoKnJhbmdlKSkpOworICAgICAgICBhdXRvIHJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhy
YW5nZSkpKTsKIAogICAgICAgICAvLyBDb252ZXJ0IHRvIHRoZSBtYWluIGRvY3VtZW50J3MgY29v
cmRpbmF0ZSBzcGFjZS4KICAgICAgICAgLy8gRklYTUU6IEl0J3MgYSBsaXR0bGUgY3JhenkgdG8g
Y2FsbCBjb250ZW50c1RvV2luZG93IGFuZCB0aGVuIHdpbmRvd1RvQ29udGVudHMgaW4gb3JkZXIg
dG8gZ2V0IHRoZSByaWdodCBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAvLyBXZSBzaG91bGQg
Y29uc2lkZXIgYWRkaW5nIGNvbnZlcnNpb24gZnVuY3Rpb25zIHRvIFNjcm9sbFZpZXcgZm9yIGNv
bnRlbnRzVG9Eb2N1bWVudCgpLiBSaWdodCBub3csIGNvbnRlbnRzVG9Sb290VmlldygpIGlzCiAg
ICAgICAgIC8vIG5vdCBlcXVpdmFsZW50IHRvIHdoYXQgd2UgbmVlZCB3aGVuIHlvdSBoYXZlIGEg
dG9wQ29udGVudEluc2V0IG9yIGEgaGVhZGVyIGJhbm5lci4KLSAgICAgICAgYXV0byogdmlld0Zv
clJhbmdlID0gcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8qIHZp
ZXdGb3JSYW5nZSA9IHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkudmlldygpOwogICAgICAgICBpZiAo
IXZpZXdGb3JSYW5nZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJlY3Quc2V0
TG9jYXRpb24obWFpbkZyYW1lVmlldy53aW5kb3dUb0NvbnRlbnRzKHZpZXdGb3JSYW5nZS0+Y29u
dGVudHNUb1dpbmRvdyhyZWN0LmxvY2F0aW9uKCkpKSk7CiAKICAgICAgICAgQ0dSZWN0IGNnUmVj
dCA9IHJlY3Q7Ci0gICAgICAgIAogI2lmIEhBVkUoRERfSElHSExJR0hUX0NSRUFURV9XSVRIX1ND
QUxFKQotICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGlnaGxpZ2h0ID0gYWRv
cHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2Fs
ZUFuZERpcmVjdGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVD
b250ZW50UmVjdCgpLCBEREhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdo
dFN0eWxlU3RhbmRhcmRJY29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwg
Tk8sIFlFUywgMCkpOworICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hs
aWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlv
bihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgp
LCBEREhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRh
cmRJY29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUywgMCkp
OwogI2Vsc2UKLSAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9
IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxl
QW5kRGlyZWN0aW9uKG51bGxwdHIsICZjZ1JlY3QsIDEsIG1haW5GcmFtZVZpZXcudmlzaWJsZUNv
bnRlbnRSZWN0KCksIERESGlnaGxpZ2h0U3R5bGVCdWJibGVTdGFuZGFyZCB8IERESGlnaGxpZ2h0
U3R5bGVTdGFuZGFyZEljb25BcnJvdywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBO
TywgWUVTKSk7CisgICAgICAgIGF1dG8gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0
Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRy
LCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVjdCgpLCBEREhpZ2hs
aWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJy
b3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykpOwogI2VuZGlmCi0g
ICAgICAgIG5ld1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVs
ZXBob25lTnVtYmVyKCp0aGlzLCBkZEhpZ2hsaWdodCwgcmFuZ2UucmVsZWFzZU5vbk51bGwoKSkp
OworICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZv
clRlbGVwaG9uZU51bWJlcigqdGhpcywgV1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUocmFu
Z2UpKSk7CiAgICAgfQogCiAgICAgcmVwbGFjZUhpZ2hsaWdodHNPZlR5cGVQcmVzZXJ2aW5nRXF1
aXZhbGVudEhpZ2hsaWdodHMobmV3UG90ZW50aWFsSGlnaGxpZ2h0cywgSGlnaGxpZ2h0OjpUZWxl
cGhvbmVOdW1iZXJUeXBlKTsKQEAgLTU0NCwxNyArNTQzLDE3IEBAIHZvaWQgU2VydmljZXNPdmVy
bGF5Q29udHJvbGxlcjo6YnVpbGRTZWxlY3Rpb25IaWdobGlnaHQoKQogICAgICAgICBmb3IgKGF1
dG8mIHJlY3QgOiBtX2N1cnJlbnRTZWxlY3Rpb25SZWN0cykgewogICAgICAgICAgICAgSW50UmVj
dCBjdXJyZW50UmVjdCA9IHNuYXBwZWRJbnRSZWN0KHJlY3QpOwogICAgICAgICAgICAgY3VycmVu
dFJlY3Quc2V0TG9jYXRpb24obWFpbkZyYW1lVmlldy0+d2luZG93VG9Db250ZW50cyh2aWV3Rm9y
UmFuZ2UtPmNvbnRlbnRzVG9XaW5kb3coY3VycmVudFJlY3QubG9jYXRpb24oKSkpKTsKLSAgICAg
ICAgICAgIGNnUmVjdHMuYXBwZW5kKChDR1JlY3QpY3VycmVudFJlY3QpOworICAgICAgICAgICAg
Y2dSZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFj
Z1JlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgQ0dSZWN0IHZpc2libGVSZWN0ID0gbWFp
bkZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCk7CiAjaWYgSEFWRShERF9ISUdITElHSFRf
Q1JFQVRFX1dJVEhfU0NBTEUpCi0gICAgICAgICAgICBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+
IGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdpdGhSZWN0c0luVmlzaWJs
ZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCks
IGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUg
fCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0
dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTLCAw
KSk7CisgICAgICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENy
ZWF0ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVTY2FsZUFuZERpcmVjdGlvbihudWxs
cHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdo
bGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cg
fCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsLCBOTywgWUVTLCAwKSk7CiAjZWxzZQotICAgICAgICAgICAgUmV0YWluUHRyPERE
SGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRo
UmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlQW5kRGlyZWN0aW9uKG51bGxwdHIsIGNnUmVjdHMu
YmVnaW4oKSwgY2dSZWN0cy5zaXplKCksIHZpc2libGVSZWN0LCBEREhpZ2hsaWdodFN0eWxlQnVi
YmxlTm9uZSB8IERESGlnaGxpZ2h0U3R5bGVTdGFuZGFyZEljb25BcnJvdyB8IERESGlnaGxpZ2h0
U3R5bGVCdXR0b25TaG93QWx3YXlzLCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5P
LCBZRVMpKTsKKyAgICAgICAgICAgIGF1dG8gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxp
Z2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxs
cHRyLCBjZ1JlY3RzLmJlZ2luKCksIGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdo
bGlnaHRTdHlsZUJ1YmJsZU5vbmUgfCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cg
fCBEREhpZ2hsaWdodFN0eWxlQnV0dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rp
b25OYXR1cmFsLCBOTywgWUVTKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIG5ld1BvdGVudGlhbEhp
Z2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0aGlzLCBkZEhpZ2hs
aWdodCwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKTsKKyAgICAgICAgICAgIG5l
d1BvdGVudGlhbEhpZ2hsaWdodHMuYWRkKEhpZ2hsaWdodDo6Y3JlYXRlRm9yU2VsZWN0aW9uKCp0
aGlzLCBXVEZNb3ZlKGRkSGlnaGxpZ2h0KSwgV1RGTW92ZSgqc2VsZWN0aW9uUmFuZ2UpKSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTYwNyw3ICs2MDYsNyBAQCB2b2lkIFNlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXI6OmNyZWF0ZU92ZXJsYXlJZk5lZWRlZCgpCiAgICAgbV9wYWdlLnBhZ2VPdmVy
bGF5Q29udHJvbGxlcigpLmluc3RhbGxQYWdlT3ZlcmxheShXVEZNb3ZlKG92ZXJsYXkpLCBQYWdl
T3ZlcmxheTo6RmFkZU1vZGU6OkRvTm90RmFkZSk7CiB9CiAKLVZlY3RvcjxSZWZQdHI8UmFuZ2U+
PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1
c2VkRnJhbWUoKQorVmVjdG9yPFNpbXBsZVJhbmdlPiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVy
Ojp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKQogewogICAgIHJldHVybiBt
X3BhZ2UuZm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCkuZWRpdG9yKCkuZGV0
ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKTsKIH0KQEAgLTYxOCw3ICs2MTcsNyBAQCBib29s
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVFcXVpdmFsZW50KGNvbnN0
IEhpZ2hsaWdodCogYSwgY29ucwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBpZiAoIWEgfHwg
IWIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYS0+dHlwZSgpID09IGItPnR5
cGUoKSAmJiBhcmVSYW5nZXNFcXVhbCgmYS0+cmFuZ2UoKSwgJmItPnJhbmdlKCkpOworICAgIHJl
dHVybiBhLT50eXBlKCkgPT0gYi0+dHlwZSgpICYmIGEtPnJhbmdlKCkgPT0gYi0+cmFuZ2UoKTsK
IH0KIAogU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVj
dGlvbkhpZ2hsaWdodChIaWdobGlnaHQmIHNlbGVjdGlvbkhpZ2hsaWdodCkKQEAgLTYzMSw3ICs2
MzAsNyBAQCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQqIFNlcnZpY2VzT3Zl
cmxheUNvbnRyb2xsZXI6OmZpbmRUZWxlcGhvbmVOdQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
IAogICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogbV9wb3RlbnRpYWxIaWdobGlnaHRzKSB7Ci0g
ICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVwaG9uZU51bWJl
clR5cGUgJiYgaGlnaGxpZ2h0LT5yYW5nZSgpLmNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2Vs
ZWN0aW9uUmFuZ2UpKSkKKyAgICAgICAgaWYgKGhpZ2hsaWdodC0+dHlwZSgpID09IEhpZ2hsaWdo
dDo6VGVsZXBob25lTnVtYmVyVHlwZSAmJiBjcmVhdGVMaXZlUmFuZ2UoaGlnaGxpZ2h0LT5yYW5n
ZSgpKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkpKQogICAgICAg
ICAgICAgcmV0dXJuIGhpZ2hsaWdodC5nZXQoKTsKICAgICB9CiAKQEAgLTc4NywxMSArNzg2LDEx
IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6aGFuZGxlQ2xpY2soY29uc3QgSW50
UG9pbnQmIGNsaWNrUG9pbnQsIEhpZ2hsaWdoCiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHNlbGVj
dGVkVGVsZXBob25lTnVtYmVyczsKICAgICAgICAgc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJzLnJl
c2VydmVDYXBhY2l0eSh0ZWxlcGhvbmVOdW1iZXJSYW5nZXMuc2l6ZSgpKTsKICAgICAgICAgZm9y
IChhdXRvJiByYW5nZSA6IHRlbGVwaG9uZU51bWJlclJhbmdlcykKLSAgICAgICAgICAgIHNlbGVj
dGVkVGVsZXBob25lTnVtYmVycy5hcHBlbmQocmFuZ2UtPnRleHQoKSk7CisgICAgICAgICAgICBz
ZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMuYXBwZW5kKHBsYWluVGV4dChyYW5nZSkpOwogCiAgICAg
ICAgIG1fcGFnZS5jaHJvbWUoKS5jbGllbnQoKS5oYW5kbGVTZWxlY3Rpb25TZXJ2aWNlQ2xpY2so
bV9wYWdlLmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLnNlbGVjdGlvbigp
LCBzZWxlY3RlZFRlbGVwaG9uZU51bWJlcnMsIHdpbmRvd1BvaW50KTsKICAgICB9IGVsc2UgaWYg
KGhpZ2hsaWdodC50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlKQotICAg
ICAgICBtX3BhZ2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2so
aGlnaGxpZ2h0LnJhbmdlKCkudGV4dCgpLCB3aW5kb3dQb2ludCk7CisgICAgICAgIG1fcGFnZS5j
aHJvbWUoKS5jbGllbnQoKS5oYW5kbGVUZWxlcGhvbmVOdW1iZXJDbGljayhwbGFpblRleHQoaGln
aGxpZ2h0LnJhbmdlKCkpLCB3aW5kb3dQb2ludCk7CiB9CiAKIEZyYW1lJiBTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyOjptYWluRnJhbWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggNTAyNzk5MGNlNTVlNDYxYjJkZDgyYjljMzI5ZTlk
OWEzMmY4MGU5Yi4uMjFmNjg4NGNjNjU5MDMyN2Y3YTNhZjQ2ZWY3ZjE2NTY1ZDgyZGQ3OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCkBAIC00MCw2ICs0
MCw3IEBACiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5oIgogI2ltcG9ydCAiUGFnZS5oIgogI2lt
cG9ydCAiUmFuZ2UuaCIKKyNpbXBvcnQgIlNpbXBsZVJhbmdlLmgiCiAjaW1wb3J0ICJTdHJpbmdU
cnVuY2F0b3IuaCIKICNpbXBvcnQgIlRleHRJbmRpY2F0b3IuaCIKICNpbXBvcnQgIlRleHRSdW4u
aCIKQEAgLTEzNSw4ICsxMzYsOCBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGlu
ayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0cmluZwogCiAgICAgQ0dS
ZWN0IGltYWdlUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgdGV4dFdpZHRoICsgMiAqIGRyYWdJbWFn
ZVBhZGRpbmcsIHRleHRIZWlnaHQgKyAyICogZHJhZ0ltYWdlUGFkZGluZyk7CiAKLSAgICBSZXRh
aW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxs
b2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVj
dC5zaXplXSk7Ci0gICAgVUlJbWFnZSAqaW1hZ2UgPSBbcmVuZGVyLmdldCgpIGltYWdlV2l0aEFj
dGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJlbmRlcmVyQ29udGV4dCkg
eworICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFwaGljc0ltYWdl
UmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0pOworICAgIGF1
dG8gaW1hZ2UgPSBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFnZVJl
bmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4
dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICBjb250ZXh0LnRy
YW5zbGF0ZSgwLCBDR1JlY3RHZXRIZWlnaHQoaW1hZ2VSZWN0KSk7CiAgICAgICAgIGNvbnRleHQu
c2NhbGUoeyAxLCAtMSB9KTsKQEAgLTE0Niw4ICsxNDcsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9yTGluayhFbGVtZW50JiBsaW5rRWxlbWVudCwgVVJMJiB1cmwsIGNvbnN0IFN0
cmluZwogICAgICAgICAgICAgdXJsRm9udENhc2NhZGUuZ2V0KCkuZHJhd1RleHQoY29udGV4dCwg
VGV4dFJ1bih0cnVuY2F0ZWRCb3R0b21TdHJpbmcpLCBGbG9hdFBvaW50KGRyYWdJbWFnZVBhZGRp
bmcsIDQwICsgZHJhZ0ltYWdlUGFkZGluZykpOwogICAgIH1dOwogCi0gICAgYXV0byBsaW5rUmFu
Z2UgPSByYW5nZU9mQ29udGVudHMobGlua0VsZW1lbnQpOwotICAgIGlmIChhdXRvIHRleHRJbmRp
Y2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLCBkZWZhdWx0
TGlua0luZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9u
OjpOb25lLCBGbG9hdFNpemUoKSkpCisgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJ
bmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
bGlua0VsZW1lbnQpLCBkZWZhdWx0TGlua0luZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBGbG9hdFNpemUoKSkpCiAgICAgICAgIGluZGlj
YXRvckRhdGEgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAKICAgICByZXR1cm4gaW1hZ2UuQ0dJ
bWFnZTsKQEAgLTE5MSwxNyArMTkxLDE1IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBUZXh0SW5kaWNhdG9yRGF0YSYgaW5kaWNhCiAgICAg
ICAgIGltYWdlUmVjdC5zY2FsZSgxIC8gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAKIAot
ICAgIFJldGFpblB0cjxVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlcj4gcmVuZGVyID0gYWRvcHROUyhb
UEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6
aW1hZ2VSZWN0LnNpemUoKV0pOwotICAgIFVJSW1hZ2UgKmZpbmFsSW1hZ2UgPSBbcmVuZGVyLmdl
dCgpIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNvbnRleHQgKnJl
bmRlcmVyQ29udGV4dCkgeworICAgIGF1dG8gcmVuZGVyZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9j
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Qu
c2l6ZSgpXSk7CisgICAgcmV0dXJuIFtyZW5kZXJlciBpbWFnZVdpdGhBY3Rpb25zOl4oVUlHcmFw
aGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQocmVuZGVyZXJDb250ZXh0LkNHQ29udGV4dCk7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGUgY29udGV4dCBmbGlwIGhlcmUgc2hvdWxkIG5vdCBiZSBuZWNlc3Nhcnks
IGFuZCBzdWdnZXN0cyB0aGF0IHNvbWV3aGVyZSBlbHNlIGluIHRoZSByZWd1bGFyCiAgICAgICAg
IC8vIGRyYWcgaW5pdGlhdGlvbiBmbG93LCB3ZSB1bm5lY2Vzc2FyaWx5IGZsaXAgdGhlIGdyYXBo
aWNzIGNvbnRleHQuCiAgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKDAsIGltYWdlUmVjdC5oZWln
aHQoKSk7CiAgICAgICAgIGNvbnRleHQuc2NhbGUoeyAxLCAtMSB9KTsKICAgICAgICAgY29udGV4
dC5kcmF3SW1hZ2UoKmltYWdlLCBpbWFnZVJlY3QpOwotICAgIH1dOwotCi0gICAgcmV0dXJuIGZp
bmFsSW1hZ2UuQ0dJbWFnZTsKKyAgICB9XS5DR0ltYWdlOwogfQogCiBEcmFnSW1hZ2VSZWYgZGlz
c29sdmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBl
c0ludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0
b3JUeXBlc0ludGVybmFsLmgKaW5kZXggM2U4ZjAyZTU3NDNkOGE0OTM0MDM3MDk3NzZhZTQ5ZDcw
MjRjMWRlNi4uNGI4YzVjNTkzZWRiNTE3Zjk3YjFhNTA2N2M5NjAyZjBjNTA5NzZmNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJ
bnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0RhdGFEZXRl
Y3RvclR5cGVzSW50ZXJuYWwuaApAQCAtMzEsMjcgKzMxLDIxIEBACiAKIHN0YXRpYyBpbmxpbmUg
V2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXMgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModWludDY0
X3QgdHlwZXMpCiB7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9yVHlwZXM+KHR5
cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVOb25lKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6
RGF0YURldGVjdG9yVHlwZU5vbmU7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFdLRGF0YURldGVjdG9y
VHlwZXM+KHR5cGVzKSA9PSBXS0RhdGFEZXRlY3RvclR5cGVBbGwpCi0gICAgICAgIHJldHVybiBX
ZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlQWxsOwotCi0gICAgdWludDMyX3QgdmFsdWUgPSBXZWJD
b3JlOjpEYXRhRGV0ZWN0b3JUeXBlTm9uZTsKKyAgICB1aW50MzJfdCB2YWx1ZSA9IDA7CiAgICAg
aWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXIpCi0gICAgICAgIHZhbHVl
IHw9IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVQaG9uZU51bWJlcjsKKyAgICAgICAgdmFsdWUg
fD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpQaG9u
ZU51bWJlcik7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTGluaykKLSAgICAg
ICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUxpbms7CisgICAgICAgIHZhbHVl
IHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6TGlu
ayk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykKLSAgICAgICAg
dmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUFkZHJlc3M7CisgICAgICAgIHZhbHVl
IHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6QWRk
cmVzcyk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkK
LSAgICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQ7
CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0
ZWN0b3JUeXBlczo6Q2FsZW5kYXJFdmVudCk7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0
b3JUeXBlVHJhY2tpbmdOdW1iZXIpCi0gICAgICAgIHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRl
Y3RvclR5cGVUcmFja2luZ051bWJlcjsKKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWlu
dDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpUcmFja2luZ051bWJlcik7CiAgICAg
aWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0TnVtYmVyKQotICAgICAgICB2YWx1
ZSB8PSBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlRmxpZ2h0TnVtYmVyOworICAgICAgICB2YWx1
ZSB8PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM6OkZs
aWdodE51bWJlcik7CiAgICAgaWYgKHR5cGVzICYgV0tEYXRhRGV0ZWN0b3JUeXBlTG9va3VwU3Vn
Z2VzdGlvbikKLSAgICAgICAgdmFsdWUgfD0gV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZUxvb2t1
cFN1Z2dlc3Rpb247Ci0KKyAgICAgICAgdmFsdWUgfD0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdl
YkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpMb29rdXBTdWdnZXN0aW9uKTsKICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM+KHZhbHVlKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2Nv
YS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5k
bGUubW0KaW5kZXggYzhkZTY4ODkxOTMzZjRkOGVhNjY1ZWU1MmJhMjIyZGQ0ZTJkMzFiNC4uMDc2
NzZhMGUzNjY3YzFiNzU4Mjg0MzQyYjZmYmRmMzhhOWUxNjM4OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQ
bHVnSW5SYW5nZUhhbmRsZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCkBAIC02
MywxNSArNjMsMTYgQEAgLSAoTlNTdHJpbmcgKil0ZXh0CiB9CiAKICNpZiBUQVJHRVRfT1NfSVBI
T05FCisKIC0gKE5TQXJyYXkgKilkZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5
cGVzKXR5cGVzIGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQKIHsKICNpZiBFTkFCTEUo
REFUQV9ERVRFQ1RJT04pCi0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiBjb3JlUmFuZ2UgPSAm
X3JhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKTsKLSAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoY29yZVJhbmdlLCBmcm9tV0tEYXRhRGV0ZWN0b3JU
eXBlcyh0eXBlcyksIGNvbnRleHQpOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9u
OjpkZXRlY3RDb250ZW50SW5SYW5nZShfcmFuZ2VIYW5kbGUtPmNvcmVSYW5nZSgpLCBmcm9tV0tE
YXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyksIGNvbnRleHQpOwogI2Vsc2UKICAgICByZXR1cm4gbmls
OwogI2VuZGlmCiB9CisKICNlbmRpZgogCiAtIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUmKV9yYW5nZUhhbmRsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAppbmRl
eCBiMGU2NTIyZjZmMTczZDhiOGVjZTk0N2ZiM2UwOGY0MDAyN2Y4YTU5Li5lMTYwY2VhNjAxMTMw
MzAxODQzZmJkMDJlMWUzYmM5MTJjOWE2ZmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVjdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9WaWV3R2VzdHVyZUdlb21ldHJ5Q29sbGVj
dG9yLmNwcApAQCAtMTU2LDEzICsxNTYsMTIgQEAgT3B0aW9uYWw8c3RkOjpwYWlyPGRvdWJsZSwg
ZG91YmxlPj4gVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvcjo6Y29tcHV0ZVRleHRMZWcKIAog
ICAgIGRvY3VtZW50LT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKIAot
ICAgIGF1dG8gZG9jdW1lbnRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCB7eyBkb2N1
bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3JlQW5jaG9y
IH19LCB7eyBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCksIFBvc2l0aW9uOjpQb3NpdGlvbklz
QWZ0ZXJBbmNob3IgfX0pOwogICAgIEhhc2hTZXQ8Tm9kZSo+IGFsbFRleHROb2RlczsKICAgICBI
YXNoTWFwPHVuc2lnbmVkLCB1bnNpZ25lZD4gZm9udFNpemVUb0NvdW50TWFwOwogICAgIHVuc2ln
bmVkIG51bWJlck9mSXRlcmF0aW9ucyA9IDA7CiAgICAgdW5zaWduZWQgdG90YWxTYW1wbGVkVGV4
dExlbmd0aCA9IDA7CiAKLSAgICBmb3IgKFRleHRJdGVyYXRvciBkb2N1bWVudFRleHRJdGVyYXRv
ciB7IGRvY3VtZW50UmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVudGVyc1RleHRDb250cm9scyB9
OyAhZG9jdW1lbnRUZXh0SXRlcmF0b3IuYXRFbmQoKTsgZG9jdW1lbnRUZXh0SXRlcmF0b3IuYWR2
YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgZG9jdW1lbnRUZXh0SXRlcmF0b3IgeyBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgVGV4dEl0ZXJhdG9yRW50
ZXJzVGV4dENvbnRyb2xzIH07ICFkb2N1bWVudFRleHRJdGVyYXRvci5hdEVuZCgpOyBkb2N1bWVu
dFRleHRJdGVyYXRvci5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKCsrbnVtYmVyT2ZJdGVyYXRp
b25zID49IG1heGltdW1OdW1iZXJPZlRleHRSdW5zVG9Db25zaWRlcikKICAgICAgICAgICAgIGJy
ZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmlu
ZGV4IDhkNzBiOTc0ZDc5YTM5NmM5NmJlODU0OWZlOTQ3YjkzODQzZDlkNGMuLjQ0M2VlNTYxNTNl
NzdhYTU1NTRlZTNmMWI2MTdhZjczZGViYjBhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC0zNzMxLDkgKzM3MzEsNyBAQCB2b2lkIFdlYlBh
Z2U6OmRldGVjdERhdGFJbkFsbEZyYW1lcyh1aW50NjRfdCB0eXBlcywgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChjb25zdAogICAgICAgICBhdXRvIGRvY3VtZW50ID0gbWFrZVJlZlB0cihmcmFtZS0+
ZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQsIFBvc2l0aW9uIHsgZG9jdW1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQmVmb3Jl
Q2hpbGRyZW4gfSwgUG9zaXRpb24geyBkb2N1bWVudC5nZXQoKSwgUG9zaXRpb246OlBvc2l0aW9u
SXNBZnRlckNoaWxkcmVuIH0pOwotICAgICAgICBmcmFtZS0+c2V0RGF0YURldGVjdGlvblJlc3Vs
dHMoRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UocmFuZ2UsIGRhdGFEZXRlY3Rv
clR5cGVzLCBtX2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgpKSk7CisgICAgICAgIGZyYW1lLT5z
ZXREYXRhRGV0ZWN0aW9uUmVzdWx0cyhEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5n
ZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmRvY3VtZW50KSwgZGF0YURldGVjdG9y
VHlwZXMsIG1fZGF0YURldGVjdGlvbkNvbnRleHQuZ2V0KCkpKTsKICAgICB9CiAgICAgY29tcGxl
dGlvbkhhbmRsZXIoeyBtX3BhZ2UtPm1haW5GcmFtZSgpLmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkg
fSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
MDBjNDc2OTVkZTI4NmUzNjNiMzBiMzRhODkyN2NlNmJhN2RlODk0OS4uNmIzYTU4MDAyYjFlZDFm
ZDcwZjU3NGY5ZGY0YjY3NWMzNWRiOTdiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTI5LDEwICsxMjksNiBAQCB0eXBlZGVmIHN0cnVjdCBfQXRr
T2JqZWN0IEF0a09iamVjdDsKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVG91Y2hFdmVudC5o
PgogI2VuZGlmCiAKLSNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0jaW5jbHVkZSA8V2ViQ29y
ZS9EYXRhRGV0ZWN0aW9uLmg+Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShNQUNfR0VTVFVSRV9FVkVO
VFMpCiAjaW5jbHVkZSA8V2ViS2l0QWRkaXRpb25zL1BsYXRmb3JtR2VzdHVyZUV2ZW50TWFjLmg+
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW0KaW5kZXggOWJkNzMxZTIyMmMwOTM2OTdiYjE4MzhlMTg2NTYyOGI5OGYyMGE5
ZC4uMWYxYjM0NDk2NGUxMjU4NDZlYjM5YTQwNWY4OTBiMWU2MTE3MTk5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg1
OCw3ICs4NTgsNyBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0
QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgIFVSTCBhYnNvbHV0ZUxp
bmtVUkwgPSBoaXRUZXN0UmVzdWx0LmFic29sdXRlTGlua1VSTCgpOwogICAgIEVsZW1lbnQqIFVS
TEVsZW1lbnQgPSBoaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKTsKICAgICBpZiAoIWFic29sdXRl
TGlua1VSTC5pc0VtcHR5KCkgJiYgVVJMRWxlbWVudCkKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9u
UmVzdWx0LmxpbmtUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KHJhbmdlT2ZDb250ZW50cygqVVJMRWxlbWVudCksIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3Vu
ZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9u
UmVzdWx0LmxpbmtUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqVVJMRWxlbWVudCksIFRleHRJbmRpY2F0
b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2Vz
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKIAogICAgIGF1
dG8gbG9va3VwUmVzdWx0ID0gbG9va3VwVGV4dEF0TG9jYXRpb24obG9jYXRpb25JblZpZXdDb29y
ZGluYXRlcyk7CiAgICAgaWYgKGF1dG8qIGxvb2t1cFJhbmdlID0gc3RkOjpnZXQ8UmVmUHRyPFJh
bmdlPj4obG9va3VwUmVzdWx0KS5nZXQoKSkgewpAQCAtODk2LDEyICs4OTYsMTEgQEAgdm9pZCBX
ZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRpb24oV2ViQ29yZTo6
RmxvYXRQb2ludCBsb2NhdGkKIAogICAgIC8vIEZJWE1FOiBBdm9pZCBzY2FubmluZyBpZiB3ZSB3
aWxsIGp1c3QgdGhyb3cgYXdheSB0aGUgcmVzdWx0IChlLmcuIHdlJ3JlIG92ZXIgYSBsaW5rKS4K
ICAgICBpZiAoIXBhZ2VPdmVybGF5RGlkT3ZlcnJpZGVEYXRhRGV0ZWN0b3JzICYmIGhpdFRlc3RS
ZXN1bHQuaW5uZXJOb2RlKCkgJiYgKGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCktPmlzVGV4dE5v
ZGUoKSB8fCBoaXRUZXN0UmVzdWx0LmlzT3ZlclRleHRJbnNpZGVGb3JtQ29udHJvbEVsZW1lbnQo
KSkpIHsKLSAgICAgICAgRmxvYXRSZWN0IGRldGVjdGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IGRldGVjdGVkRGF0YVJhbmdlOwotICAgICAgICBpbW1lZGlhdGVBY3Rp
b25SZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCA9IERhdGFEZXRlY3Rpb246OmRldGVj
dEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5k
aW5nQm94LCBkZXRlY3RlZERhdGFSYW5nZSk7Ci0gICAgICAgIGlmIChpbW1lZGlhdGVBY3Rpb25S
ZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCAmJiBkZXRlY3RlZERhdGFSYW5nZSkgewot
ICAgICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94
ID0gZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3g7Ci0gICAgICAgICAgICBpbW1lZGlhdGVBY3Rpb25S
ZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdp
dGhSYW5nZSgqZGV0ZWN0ZWREYXRhUmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGlu
Z1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgaWYgKGF1dG8gcmVzdWx0ID0g
RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoaGl0VGVzdFJlc3Vs
dCkpIHsKKyAgICAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFBY3Rp
b25Db250ZXh0ID0gV1RGTW92ZShyZXN1bHQtPmFjdGlvbkNvbnRleHQpOworICAgICAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gcmVzdWx0LT5i
b3VuZGluZ0JveDsKKyAgICAgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERh
dGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJlc3VsdC0+
cmFuZ2UsCisgICAgICAgICAgICAgICAgVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVj
dEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOwogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTS5tbQppbmRleCBkZjBiNTIwOTExZmUxODVjYjkzOGZmMWY3Yzk5N2VhZmVh
MjcwZjNmLi41ZjA2MGIwNTJkNmFlYWNkYzYxMzg4NmY1YzljMzI3MDY1YTE1NTE4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KQEAgLTUyMywxMCArNTIzLDggQEAgLSAodm9pZClnZXRQ
cmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0czooTlNBcnJh
eSAqKilyZWN0cwogCiAgICAgYXV0byYgbm9kZSA9ICpjb3JlKHNlbGYpOwogCi0gICAgYXV0byBy
YW5nZSA9IHJhbmdlT2ZDb250ZW50cyhub2RlKTsKLQogICAgIGNvbnN0IGZsb2F0IG1hcmdpbiA9
IDQgLyBub2RlLmRvY3VtZW50KCkucGFnZSgpLT5wYWdlU2NhbGVGYWN0b3IoKTsKLSAgICBhdXRv
IHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIFRl
eHRJbmRpY2F0b3JPcHRpb25UaWdodGx5Rml0Q29udGVudCB8CisgICAgYXV0byB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05v
ZGVDb250ZW50cyhub2RlKSwgVGV4dEluZGljYXRvck9wdGlvblRpZ2h0bHlGaXRDb250ZW50IHwK
ICAgICAgICAgVGV4dEluZGljYXRvck9wdGlvblJlc3BlY3RUZXh0Q29sb3IgfAogICAgICAgICBU
ZXh0SW5kaWNhdG9yT3B0aW9uUGFpbnRCYWNrZ3JvdW5kcyB8CiAgICAgICAgIFRleHRJbmRpY2F0
b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2Vz
IHwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1
cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KaW5kZXggODA2ZGEwYmZiMDdkYWU5Y2I3MzY0
OGEyYWYwZmZmNGQyOTMzN2NjMC4uMjU2ZTY4OTExYjc1OGYxMzU5OTU4MDIwOTFiZTAyZjczOGY3
MzMxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViQ29yZVN1cHBvcnQv
V2ViQ29udGV4dE1lbnVDbGllbnQubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Q29yZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW0KQEAgLTE0OCw2ICsxNDgsNyBAQCBi
b29sIFdlYkNvbnRleHRNZW51Q2xpZW50OjpjbGllbnRGbG9hdFJlY3RGb3JOb2RlKE5vZGUmIG5v
ZGUsIEZsb2F0UmVjdCYgcmVjdCkgYwogfQogCiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CisKIHZvaWQgV2ViQ29udGV4dE1lbnVDbGllbnQ6OnNoYXJpbmdTZXJ2aWNlUGlja2VyV2lsbEJl
RGVzdHJveWVkKFdlYlNoYXJpbmdTZXJ2aWNlUGlja2VyQ29udHJvbGxlciAmKQogewogICAgIG1f
c2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyID0gbmlsOwpAQCAtMTgzLDE1ICsxODQsMTUg
QEAgV2ViQ29yZTo6RmxvYXRSZWN0IFdlYkNvbnRleHRNZW51Q2xpZW50OjpzY3JlZW5SZWN0Rm9y
Q3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2UKIAogUmV0YWluUHRyPE5TSW1hZ2U+IFdlYkNvbnRl
eHRNZW51Q2xpZW50OjppbWFnZUZvckN1cnJlbnRTaGFyaW5nU2VydmljZVBpY2tlckl0ZW0oV2Vi
U2hhcmluZ1NlcnZpY2VQaWNrZXJDb250cm9sbGVyICYpCiB7Ci0gICAgUGFnZSogcGFnZSA9IFtt
X3dlYlZpZXcgcGFnZV07CisgICAgYXV0byBwYWdlID0gW21fd2ViVmlldyBwYWdlXTsKICAgICBp
ZiAoIXBhZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBOb2RlKiBub2RlID0gcGFnZS0+
Y29udGV4dE1lbnVDb250cm9sbGVyKCkuY29udGV4dCgpLmhpdFRlc3RSZXN1bHQoKS5pbm5lck5v
ZGUoKTsKKyAgICBhdXRvIG5vZGUgPSBtYWtlUmVmUHRyKHBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLmNvbnRleHQoKS5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb2RlKCkpOwogICAgIGlmICgh
bm9kZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bm9kZS0+ZG9jdW1lbnQoKS52aWV3KCk7CisgICAgYXV0byBmcmFtZVZpZXcgPSBtYWtlUmVmUHRy
KG5vZGUtPmRvY3VtZW50KCkudmlldygpKTsKICAgICBpZiAoIWZyYW1lVmlldykgewogICAgICAg
ICAvLyBUaGlzIG1ldGhvZCBzaG91bGRuJ3QgYmUgY2FsbGVkIGluIGNhc2VzIHdoZXJlIHRoZSBj
b250cm9sbGVkIG5vZGUgaXNuJ3QgaW4gYSByZW5kZXJlZCB2aWV3LgogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKQEAgLTIwMywxNSArMjA0LDE0IEBAIFJldGFpblB0cjxOU0ltYWdlPiBX
ZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJ
dGVtCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAvLyBUaGlzIGlzIGVmZmVjdGl2ZWx5IGEg
c25hcHNob3QsIGFuZCB3aWxsIGJlIHBhaW50ZWQgaW4gYW4gdW5hY2NlbGVyYXRlZCBmYXNoaW9u
IGluIGxpbmUgd2l0aCBGcmFtZVNuYXBzaG90dGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1h
Z2VCdWZmZXI+IGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUocmVjdC5zaXplKCksIFJlbmRl
cmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOworICAgIGF1dG8gYnVmZmVyID0gSW1hZ2VCdWZmZXI6
OmNyZWF0ZShyZWN0LnNpemUoKSwgUmVuZGVyaW5nTW9kZTo6VW5hY2NlbGVyYXRlZCk7CiAgICAg
aWYgKCFidWZmZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9u
IG9sZFNlbGVjdGlvbiA9IGZyYW1lVmlldy0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KTsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3Np
dGlvbihub2RlLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5v
ZGUsIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJBbmNob3IpKTsKLSAgICBmcmFtZVZpZXctPmZy
YW1lKCkuc2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24ocmFuZ2UuZ2V0
KCkpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CisgICAgYXV0byBvbGRTZWxlY3Rp
b24gPSBmcmFtZVZpZXctPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJh
bWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbigqbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZSgqbm9kZSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAotICAgIE9w
dGlvblNldDxQYWludEJlaGF2aW9yPiBvbGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWlu
dEJlaGF2aW9yKCk7CisgICAgYXV0byBvbGRQYWludEJlaGF2aW9yID0gZnJhbWVWaWV3LT5wYWlu
dEJlaGF2aW9yKCk7CiAgICAgZnJhbWVWaWV3LT5zZXRQYWludEJlaGF2aW9yKFBhaW50QmVoYXZp
b3I6OlNlbGVjdGlvbk9ubHkpOwogCiAgICAgYnVmZmVyLT5jb250ZXh0KCkudHJhbnNsYXRlKC10
b0Zsb2F0U2l6ZShyZWN0LmxvY2F0aW9uKCkpKTsKQEAgLTIyMCwxMiArMjIwLDEzIEBAIFJldGFp
blB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmlu
Z1NlcnZpY2VQaWNrZXJJdGVtCiAgICAgZnJhbWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNl
dFNlbGVjdGlvbihvbGRTZWxlY3Rpb24pOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlv
cihvbGRQYWludEJlaGF2aW9yKTsKIAotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBJbWFnZUJ1
ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOworICAgIGF1dG8gaW1hZ2UgPSBJ
bWFnZUJ1ZmZlcjo6c2lua0ludG9JbWFnZShXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIGlmICghaW1h
Z2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICByZXR1cm4gaW1hZ2UtPnNuYXBzaG90TlNJ
bWFnZSgpOwogfQorCiAjZW5kaWYKIAogTlNNZW51ICpXZWJDb250ZXh0TWVudUNsaWVudDo6Y29u
dGV4dE1lbnVGb3JFdmVudChOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp2aWV3LCBib29sJiBpc1Nl
cnZpY2VzTWVudSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCA4NTk2ODQ4OTVl
Y2MzNzBiMmJkYTA4YjAxMjk1MTZlYjY0ODI2YWQwLi4zYzVlYzg1OThlY2U3NDI3ZjkxYjgwYWI1
MDVkNGU1NDU0ODBhOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00MTEs
MzUgKzQxMSwzNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVy
PilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogICAgIGlmICghRGF0YURldGVj
dG9yc0xpYnJhcnkoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4gZGV0ZWN0ZWREYXRhUmFuZ2U7Ci0gICAgV2ViQ29yZTo6RmxvYXRSZWN0IGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94OwotICAgIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGFjdGlv
bkNvbnRleHQ7CisgICAgT3B0aW9uYWw8V2ViQ29yZTo6RGV0ZWN0ZWRJdGVtPiBkZXRlY3RlZEl0
ZW07CiAKICAgICBpZiAoW1tfd2ViVmlldyBVSURlbGVnYXRlXSByZXNwb25kc1RvU2VsZWN0b3I6
QHNlbGVjdG9yKF93ZWJWaWV3OmFjdGlvbkNvbnRleHRGb3JIaXRUZXN0UmVzdWx0OnJhbmdlOild
KSB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJFbGVtZW50RGljdGlvbmFyeT4gaGl0VGVzdERpY3Rp
b25hcnkgPSBhZG9wdE5TKFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRoSGl0
VGVzdFJlc3VsdDpfaGl0VGVzdFJlc3VsdF0pOwotCiAgICAgICAgIERPTVJhbmdlICpjdXN0b21E
YXRhRGV0ZWN0b3JzUmFuZ2U7Ci0gICAgICAgIGFjdGlvbkNvbnRleHQgPSBbKGlkKVtfd2ViVmll
dyBVSURlbGVnYXRlXSBfd2ViVmlldzpfd2ViVmlldyBhY3Rpb25Db250ZXh0Rm9ySGl0VGVzdFJl
c3VsdDpoaXRUZXN0RGljdGlvbmFyeS5nZXQoKSByYW5nZTomY3VzdG9tRGF0YURldGVjdG9yc1Jh
bmdlXTsKLQotICAgICAgICBpZiAoYWN0aW9uQ29udGV4dCAmJiBjdXN0b21EYXRhRGV0ZWN0b3Jz
UmFuZ2UpCi0gICAgICAgICAgICBkZXRlY3RlZERhdGFSYW5nZSA9IGNvcmUoY3VzdG9tRGF0YURl
dGVjdG9yc1JhbmdlKTsKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gWyhpZClbX3dlYlZp
ZXcgVUlEZWxlZ2F0ZV0gX3dlYlZpZXc6X3dlYlZpZXcKKyAgICAgICAgICAgIGFjdGlvbkNvbnRl
eHRGb3JIaXRUZXN0UmVzdWx0OmFkb3B0TlMoW1tXZWJFbGVtZW50RGljdGlvbmFyeSBhbGxvY10g
aW5pdFdpdGhIaXRUZXN0UmVzdWx0Ol9oaXRUZXN0UmVzdWx0XSkuZ2V0KCkKKyAgICAgICAgICAg
IHJhbmdlOiZjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2VdOworICAgICAgICBpZiAoYWN0aW9uQ29u
dGV4dCAmJiBjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpIHsKKyAgICAgICAgICAgIGRldGVjdGVk
SXRlbSA9IHsgeworICAgICAgICAgICAgICAgIGFjdGlvbkNvbnRleHQsCisgICAgICAgICAgICAg
ICAgeyB9LCAvLyBGSVhNRTogU2VlbXMgbGlrZSBhbiBlbXB0eSByZWN0IGlzbid0IHJlYWxseSBP
Sy4KKyAgICAgICAgICAgICAgICAqY29yZShjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpCisgICAg
ICAgICAgICB9IH07CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiB0aGUgY2xpZW50IGRp
ZG4ndCBnaXZlIHVzIGFuIGFjdGlvbiBjb250ZXh0LCB0cnkgdG8gc2NhbiBhcm91bmQgdGhlIGhp
dCBwb2ludC4KLSAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwgIWRldGVjdGVkRGF0YVJhbmdlKQot
ICAgICAgICBhY3Rpb25Db250ZXh0ID0gV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRl
bUFyb3VuZEhpdFRlc3RSZXN1bHQoX2hpdFRlc3RSZXN1bHQsIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LCBkZXRlY3RlZERhdGFSYW5nZSk7CisgICAgaWYgKCFkZXRlY3RlZEl0ZW0pCisgICAgICAg
IGRldGVjdGVkSXRlbSA9IFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRI
aXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0KTsKIAotICAgIGlmICghYWN0aW9uQ29udGV4dCB8
fCAhZGV0ZWN0ZWREYXRhUmFuZ2UpCisgICAgaWYgKCFkZXRlY3RlZEl0ZW0pCiAgICAgICAgIHJl
dHVybiBuaWw7CiAKLSAgICBbYWN0aW9uQ29udGV4dCBzZXRBbHRNb2RlOllFU107Ci0gICAgW2Fj
dGlvbkNvbnRleHQgc2V0SW1tZWRpYXRlOllFU107Ci0gICAgaWYgKCFbW2dldEREQWN0aW9uc01h
bmFnZXJDbGFzcygpIHNoYXJlZE1hbmFnZXJdIGhhc0FjdGlvbnNGb3JSZXN1bHQ6W2FjdGlvbkNv
bnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDphY3Rpb25Db250ZXh0LmdldCgpXSkKKyAg
ICBbZGV0ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0IHNldEFsdE1vZGU6WUVTXTsKKyAgICBbZGV0
ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0IHNldEltbWVkaWF0ZTpZRVNdOworICAgIGlmICghW1tn
ZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBoYXNBY3Rpb25zRm9yUmVz
dWx0OltkZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4
dDpkZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQuZ2V0KCldKQogICAgICAgICByZXR1cm4gbmls
OwogCi0gICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoUmFuZ2UoKmRldGVjdGVkRGF0YVJhbmdlLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9u
RGVmYXVsdCwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZh
ZGVJbik7CisgICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVh
dGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGRldGVjdGVkSXRlbS0+cmFuZ2UpLCBXZWJDb3Jl
OjpUZXh0SW5kaWNhdG9yT3B0aW9uRGVmYXVsdCwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNl
bnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKLSAgICBfY3VycmVudEFjdGlvbkNvbnRleHQg
PSBbYWN0aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRl
cmFjdGlvblN0YXJ0ZWRIYW5kbGVyOl4oKSB7CisgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0g
W2RldGVjdGVkSXRlbS0+YWN0aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRN
b2RlOllFUyBpbnRlcmFjdGlvblN0YXJ0ZWRIYW5kbGVyOl4oKSB7CiAgICAgfSBpbnRlcmFjdGlv
bkNoYW5nZWRIYW5kbGVyOl4oKSB7CiAgICAgICAgIGlmIChpbmRpY2F0b3IpCiAgICAgICAgICAg
ICBbX3dlYlZpZXcgX3NldFRleHRJbmRpY2F0b3I6KmluZGljYXRvciB3aXRoTGlmZXRpbWU6V2Vi
Q29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lOjpQZXJtYW5lbnRdOwpAQCAtNDQ3LDcg
KzQ0OSw3IEBAIC0gKGlkIDxOU0ltbWVkaWF0ZUFjdGlvbkFuaW1hdGlvbkNvbnRyb2xsZXI+KV9h
bmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkCiAgICAgICAgIFtfd2ViVmlldyBfY2xl
YXJUZXh0SW5kaWNhdG9yV2l0aEFuaW1hdGlvbjpXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93
RGlzbWlzc2FsQW5pbWF0aW9uOjpGYWRlT3V0XTsKICAgICB9XTsKIAotICAgIFtfY3VycmVudEFj
dGlvbkNvbnRleHQgc2V0SGlnaGxpZ2h0RnJhbWU6W193ZWJWaWV3LndpbmRvdyBjb252ZXJ0UmVj
dFRvU2NyZWVuOmRldGVjdGVkRGF0YUJvdW5kaW5nQm94XV07CisgICAgW19jdXJyZW50QWN0aW9u
Q29udGV4dCBzZXRIaWdobGlnaHRGcmFtZTpbX3dlYlZpZXcud2luZG93IGNvbnZlcnRSZWN0VG9T
Y3JlZW46ZGV0ZWN0ZWRJdGVtLT5ib3VuZGluZ0JveF1dOwogCiAgICAgTlNBcnJheSAqbWVudUl0
ZW1zID0gW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBtZW51SXRl
bXNGb3JSZXN1bHQ6W19jdXJyZW50QWN0aW9uQ29udGV4dCBtYWluUmVzdWx0XSBhY3Rpb25Db250
ZXh0Ol9jdXJyZW50QWN0aW9uQ29udGV4dC5nZXQoKV07CiAgICAgaWYgKG1lbnVJdGVtcy5jb3Vu
dCAhPSAxKQpAQCAtNTM2LDcgKzUzOCw3IEBAICsgKFdlYkNvcmU6OkRpY3Rpb25hcnlQb3B1cElu
Zm8pX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTooY29uc3QgV2ViQ29yZTo6U2ltCiAKICAg
ICBwb3B1cEluZm8uYXR0cmlidXRlZFN0cmluZyA9IHNjYWxlZEF0dHJpYnV0ZWRTdHJpbmcuZ2V0
KCk7CiAKLSAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGluZGljYXRvck9wdGlv
bnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQorICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3Ig
PSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UocmFuZ2UsIGluZGljYXRv
ck9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pKQogICAgICAgICBwb3B1cEluZm8udGV4
dEluZGljYXRvciA9IHRleHRJbmRpY2F0b3ItPmRhdGEoKTsKIAogICAgIGVkaXRvci5zZXRJc0dl
dHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>397645</attachid>
            <date>2020-04-26 22:35:41 -0700</date>
            <delta_ts>2020-04-27 07:21:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211058-20200426223540.patch</filename>
            <type>text/plain</type>
            <size>120352</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjYwNzM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThmM2ZlNGRjMDI1MTU2
YTM5M2VkYTYwN2I2OTdjNGJiMDI0ZjNhMS4uZjQyMzY1MmZjNWM0MmIyOWU5Y2QwYzMyN2Y3Nzc5
OGJkNmVjNDY2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAyMC0wNC0yNiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMg
b2YgbGl2ZSByYW5nZXMgd2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6dGV4dFVuZGVyRWxlbWVudCBjb25zdCk6IFVzZSBTaW1wbGVSYW5nZS4KKworICAgICAgICAq
IGRvbS9Cb3VuZGFyeVBvaW50Lmg6IE1vdmVkIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29u
dGVudHMgaGVyZSBzbyBpdAorICAgICAgICBjYW4gYmUgdXNlZCBtb3JlIHBsYWNlcy4KKworICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbW1vbkluY2x1c2l2ZUFu
Y2VzdG9yKTogTW92ZWQgdGhlIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyIGZ1bmN0aW9uCisgICAg
ICAgIGhlcmUgZnJvbSBSYW5nZSwgZGVjaWRlZCB0byB1c2UgdGhlICJpbmNsdXNpdmUgYW5jZXN0
b3IiIG5hbWluZyBmcm9tIHRoZQorICAgICAgICBET00gc3BlY2lmaWNhdGlvbiwgYW5kIHVzZWQg
UmVmUHRyIGZvciB0aGUgcmVzdWx0IHNpbmNlIGl0J3MgcGFydCBvZiBvdXIgbW9kZXJuCisgICAg
ICAgIHNhZmVyIGRlc2lnbiB0byBhbHdheXMgdXNlIHNtYXJ0IHBvaW50ZXJzIGZvciByZXR1cm4g
dmFsdWVzLgorICAgICAgICAqIGRvbS9Ob2RlLmg6IEFkZGVkIGNvbW1vbkluY2x1c2l2ZUFuY2Vz
dG9yLgorCisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNv
bW1vblNoYWRvd0luY2x1ZGluZ0FuY2VzdG9yKTogQ2FsbCBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
ci4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSYW5nZTo6
Y29tbW9uQW5jZXN0b3JDb250YWluZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFu
Z2U6OmlzUG9pbnRJblJhbmdlKTogQ2FsbCBjb21tb25JbmNsdXNpdmVBbmNlc3Rvci4KKyAgICAg
ICAgKFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlUG9pbnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJhbmdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlv
ckxpbmVzIGNvbnN0KTogRGl0dG8uCisgICAgICAgICogZG9tL1JhbmdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIgY29uc3QpOiBDYWxsIGNvbW1v
bkluY2x1c2l2ZUFuY2VzdG9yLgorCisgICAgICAgICogZG9tL1NpbXBsZVJhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Om1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMpOiBNb3Zl
ZCB0byBCb3VuZGFyeVBvaW50LmguCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6cmVzcG9uZFRvVW5hcHBsaWVkU3BlbGxDb3JyZWN0aW9uKTogVXNlCisgICAgICAgIFNp
bXBsZVJhbmdlIGluc3RlYWQgb2YgbGl2ZSByYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZEVkaXRpbmcpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6Om1hcmtQcmVjZWRp
bmdXaGl0ZXNwYWNlRm9yRGVsZXRlZEF1dG9jb3JyZWN0aW9uQWZ0ZXJDb21tYW5kKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpwcm9jZXNzTWFy
a2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpsaXN0Q29u
dmVyc2lvblR5cGVGb3JTZWxlY3Rpb24pOiB1c2UgY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IuCisK
KyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNOb2Rl
VmlzaWJseUNvbnRhaW5lZFdpdGhpbik6IFRha2UgYSBTaW1wbGVSYW5nZSBhcmd1bWVudC4KKyAg
ICAgICAgKiBlZGl0aW5nL0VkaXRpbmcuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgorCisgICAg
ICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZGRS
YW5nZVRvS2lsbFJpbmcpOiBUYWtlIGEgU2ltcGxlUmFuZ2UgYXJndW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpFZGl0b3I6OnNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMgY29uc3QpOiBNYWRl
IHRoaXMgY29uc3QgYW5kCisgICAgICAgIHR3ZWFrZWQgY29kaW5nIHN0eWxlIGEgYml0LgorICAg
ICAgICAoV2ViQ29yZTo6c2NhbkZvclRlbGVwaG9uZU51bWJlcnMpOiBNb3ZlZCB0aGlzLCBtYWRl
IGl0IGEgbm9uLW1lbWJlciBmdW5jdGlvbiwKKyAgICAgICAgcmVuYW1lZCBmcm9tIHNjYW5SYW5n
ZUZvclRlbGVwaG9uZU51bWJlcnMsIHVzZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6
OmV4dGVuZFNlbGVjdGlvbik6IEFkZGVkLiBGYWN0b3JlZCBvdXQgc29tZSBsb2dpYyBmcm9tIHRo
ZSBmdW5jdGlvbiBiZWxvdy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6c2NhblNlbGVjdGlv
bkZvclRlbGVwaG9uZU51bWJlcnMpOiBVc2UgU2ltcGxlUmFuZ2UuIFJlbW92ZWQKKyAgICAgICAg
c29tZSB1bm5lY2Vzc2FyeSBjb2RlIHRoYXQgc3VidHJhY3RzIDEgYW5kIHRoZW4gYWRkcyAxIGFn
YWluLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6IFVwZGF0ZWQgZm9yIHRoZSBhYm92ZS4K
KworICAgICAgICAqIGVkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXI6OnJlcGxhY2UpOiBVc2Ug
Y29tbW9uSW5jbHVzaXZlQW5jZXN0b3IuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVTZWxl
Y3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNlYXJjaFJhbmdlKTogUmV0dXJuIGEg
U2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjphcHBlbmRU
cmFpbGluZ1doaXRlc3BhY2UpOiBVc2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5n
L1dlYkNvbnRlbnRSZWFkZXIuaDogVXNlIFNpbXBsZVJhbmdlIGluc3RlYWQgb2YgYSBsaXZlIHJh
bmdlLgorCisgICAgICAgICogZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLmg6IFVzZSBhIHN0
cnVjdCwgRGV0ZWN0ZWRJdGVtLCBmb3IgdGhlIHJldHVybiB2YWx1ZQorICAgICAgICBmcm9tIHRo
ZSBkZXRlY3Rpb24gZnVuY3Rpb25zLiBBbHNvIGNoYW5nZWQgRGF0YURldGVjdG9yVHlwZXMgdG8g
YW4gZW51bSBjbGFzcyBzbworICAgICAgICBpdCBjYW4gYmUgZm9yd2FyZC1kZWNsYXJlZCBpbnN0
ZWFkIG9mIGhhdmluZyB0byBpbmNsdWRlIHRoaXMgaGVhZGVyLgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvRGF0YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRldGVjdEl0ZW0pOiBS
ZW5hbWVkIGZyb20gZGV0ZWN0SXRlbUF0UG9zaXRpb25XaXRoUmFuZ2UuIFJldHVybiB0aGUKKyAg
ICAgICAgRGV0ZWN0ZWRJdGVtIHN0cnVjdCwgd2l0aCBhIFNpbXBsZVJhbmdlIHJhdGhlciB0aGFu
IGFuIG91dCBhcmd1bWVudCBsaXZlIHJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RGF0YURldGVj
dGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OmNvbnRhaW5zKTogQWRkZWQgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRlc3RpbmcgYml0
cyBpbiB0aGUKKyAgICAgICAgRGF0YURldGVjdG9yVHlwZSBlbnVtLiBMYXRlciB3ZSBjYW4gbWFr
ZSB0aGlzIGJldHRlciB1c2luZyBPcHRpb25TZXQuCisgICAgICAgIChXZWJDb3JlOjpjb25zdHJ1
Y3RVUkxTdHJpbmdGb3JSZXN1bHQpOiBSZWZhY3RvcmVkIGEgYml0LCB1cGRhdGVkIGZvciB0aGUg
bmV3CisgICAgICAgIERhdGFEZXRlY3RvclR5cGVzIGVudW0gY2xhc3MsIGFuZCB0byB1c2UgQ0ZF
cXVhbCBpbnN0ZWFkIG9mIENGU3RyaW5nQ29tcGFyZS4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFE
ZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0
aW5nL2NvY29hL0VkaXRvckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp3ZWJD
b250ZW50RnJvbVBhc3RlYm9hcmQpOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpXZWJD
b250ZW50UmVhZGVyOjpyZWFkUGxhaW5UZXh0KTogVXBkYXRlZCBzaW5jZSBjb250ZXh0IGlzIFNp
bXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvZ3RrL0VkaXRvckd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YSk6IFVzZSBTaW1wbGVS
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJk
KTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvd2luL0VkaXRvcldpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZCk6IFVz
ZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL21hYy9FZGl0b3JNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VOb2RlRnJvbVBhc3RlYm9hcmQpOiBVc2UgU2lt
cGxlUmFuZ2UuCisgICAgICAgICogbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSk6IFVzZSBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0YXJnZXROb2RlRm9yQ2xpY2tFdmVudCk6IFVzZSBjb21tb25JbmNsdXNpdmVBbmNl
c3Rvci4gQWxzbyB1cGRhdGVkCisgICAgICAgIHRvIHJldHVybiBhIFJlZlB0ci4KKyAgICAgICAg
KFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQpOiBVcGRhdGVk
IGZvciB0aGUgYWJvdmUuCisKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLnlhbWw6IENoYW5nZWQg
dGhlIGRlZmF1bHQgZm9yIERhdGFEZXRlY3RvclR5cGVzIHRvIGJlIHRoZSBlbXB0eQorICAgICAg
ICBzdHJpbmcgcmF0aGVyIHRoYW4gYSBuYW1lZCBjb25zdGFudC4KKyAgICAgICAgKiBwYWdlL1Nl
dHRpbmdzQmFzZS5oOiBGb3J3YXJkLWRlY2xhcmUgRGF0YURldGVjdG9yVHlwZXMgaW5zdGVhZCBv
ZiBpbmNsdWRpbmcKKyAgICAgICAgdGhlIERhdGFEZXRlY3Rpb24uaCBoZWFkZXIuCisKKyAgICAg
ICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFJhbmdlKTogVGFrZSBhIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFNlbGVjdGlvbkluRnJhbWUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6Omhhc05vbklubGluZU9yUmVwbGFjZWRFbGVtZW50cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6c2VsZWN0aW9uUmVjdHMpOiBEaXR0by4gQWxzbyByZW5hbWVk
IGZyb20gZ2V0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OnN0eWxl
Q29udGFpbnNDb21wbGV4QmFja2dyb3VuZCk6IFR3ZWFrZWQgaW1wbGVtZW50YXRpb24uCisgICAg
ICAgIChXZWJDb3JlOjplc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2UpOiBUYWtlIGEgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjphYnNvbHV0ZUJvdW5kaW5nUmVjdEZvclJhbmdlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjplc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5n
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29udGFpbnNPbmx5V2hpdGVTcGFjZVRleHQp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVJbmRpY2F0b3IpOiBEaXR0by4K
KyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuaDogVXBkYXRlZCBmb3IgdGhlIGFib3ZlLgor
CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5oOiBVc2UgU2lt
cGxlUmFuZ2UgaW5zdGVhZCBvZiBhIGxpdmUKKyAgICAgICAgcmFuZ2UgZm9yIGhpZ2hsaWdodHMu
CisgICAgICAgICogcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRl
Rm9yU2VsZWN0aW9uKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlNlcnZp
Y2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6Y3JlYXRlRm9yVGVsZXBob25lTnVtYmVy
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpI
aWdobGlnaHQ6OkhpZ2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNP
dmVybGF5Q29udHJvbGxlcjo6YnVpbGRQaG9uZU51bWJlckhpZ2hsaWdodHMpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmJ1aWxkU2VsZWN0aW9u
SGlnaGxpZ2h0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjp0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhpZ2hsaWdodHNBcmVF
cXVpdmFsZW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpmaW5kVGVsZXBob25lTnVtYmVySGlnaGxpZ2h0Q29udGFpbmluZ1NlbGVjdGlvbkhp
Z2hsaWdodCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6aGFuZGxlQ2xpY2spOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFn
SW1hZ2VJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKTog
VXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yU2Vs
ZWN0aW9uKTogVHdlYWtlZCBhIGJpdC4KKwogMjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBzdG9wIHVzaW5nIG91dCBhcmd1bWVudHMg
Zm9yIGRvY3VtZW50IGF0dHJpYnV0ZXMgd2hlbiBjb252ZXJ0aW5nIHRvIGF0dHJpYnV0ZWQgc3Ry
aW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZwppbmRleCAwZjA4Mzg3MThjNmYyNDE3OGQ2Y2IyNjZiYWFhZGJmMjJmNzJiZDQ5
Li5lNmZkNWU1MmZkNGY4NzJmYmE1MzNhZjE1NzhlZmJmMzI3NGM4NGM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAt
MSwzICsxLDI5IEBACisyMDIwLTA0LTI2ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXBsYWNlIG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcyB3aXRoIFNpbXBsZVJh
bmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTEw
NTgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNo
YXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBlc0ludGVybmFsLmg6CisgICAgICAgIChm
cm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyk6IFVwZGF0ZWQgc2luY2UgRGF0YURldGVjdG9yVHlwZXMK
KyAgICAgICAgaXMgbm93IGFuIGVudW0gY2xhc3MuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsICJu
b25lIiBhbmQgImFsbCIgdmFsdWVzLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUubW06CisgICAgICAg
ICgtW1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlIGRldGVjdERhdGFXaXRoVHlwZXM6Y29u
dGV4dDpdKTogVXBkYXRlZAorICAgICAgICBzaW5jZSBEYXRhRGV0ZWN0aW9uIG5vdyB0YWtlcyBh
IFNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1ZpZXdHZXN0dXJl
R2VvbWV0cnlDb2xsZWN0b3IuY3BwOgorICAgICAgICAoV2ViS2l0OjpWaWV3R2VzdHVyZUdlb21l
dHJ5Q29sbGVjdG9yOjpjb21wdXRlVGV4dExlZ2liaWxpdHlTY2FsZXMpOgorICAgICAgICBVc2Ug
U2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpkZXRlY3REYXRhSW5BbGxGcmFtZXMpOiBEaXR0by4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6IFJlbW92ZWQgdW5uZWVk
ZWQgaW5jbHVkZSBvZiBEYXRhRGV0ZWN0aW9uLmguCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZv
cm1JbW1lZGlhdGVBY3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6IFVzZSBTaW1wbGVSYW5nZS4KKwog
MjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0Nv
Y29hXSBzdG9wIHVzaW5nIG91dCBhcmd1bWVudHMgZm9yIGRvY3VtZW50IGF0dHJpYnV0ZXMgd2hl
biBjb252ZXJ0aW5nIHRvIGF0dHJpYnV0ZWQgc3RyaW5ncwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGM4OGJjOWY1OGRiM2JlZjVlYmE2MjkxMTgzODcyNWJjMjE1OTJhNTAuLjczNjA3
Y2JiZThlYzUxMzJkZDM5OTQyZjVlZDk3OGU2OWFlYjZlNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyMSBAQAorMjAyMC0wNC0yNiAgRGFyaW4gQWRsZXIgIDxkYXJp
bkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVwbGFjZSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMg
d2l0aCBTaW1wbGVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjExMDU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFw
c2hvdEltYWdlOmFuZFJlY3RzOl0pOiBVc2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvV2ViQ29udGV4dE1lbnVDbGllbnQubW06CisgICAgICAgIChXZWJDb250ZXh0TWVu
dUNsaWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKTogRGl0dG8u
CisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW06Cisg
ICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIgX2FuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JEYXRhRGV0ZWN0ZWRUZXh0XSk6CisgICAgICAgIFVwZGF0ZWQgdG8gdXNlIERldGVjdGVk
SXRlbSBhbmQgU2ltcGxlUmFuZ2UuCisgICAgICAgICgrW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIgX2RpY3Rpb25hcnlQb3B1cEluZm9Gb3JSYW5nZTppbkZyYW1lOndpdGhMb29rdXBPcHRp
b25zOmluZGljYXRvck9wdGlvbnM6dHJhbnNpdGlvbjpdKToKKyAgICAgICAgRGl0dG8uCisKIDIw
MjAtMDQtMjYgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtDb2Nv
YV0gc3RvcCB1c2luZyBvdXQgYXJndW1lbnRzIGZvciBkb2N1bWVudCBhdHRyaWJ1dGVzIHdoZW4g
Y29udmVydGluZyB0byBhdHRyaWJ1dGVkIHN0cmluZ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4
IGIzNDdkNzk4Y2NiY2UxYmI2YTkwNjg1N2ZjYTFlNDNkYjFjMmRmODMuLjAyYzc1NzAwYTg1YjNj
NzI1NjY5NzdiYTJkYmMxZTNhZjgyOTE0YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNjMz
LDEwICs2MzMsMTAgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRl
ckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnQKICAgICAgICAgLy8gSWYgcG9z
c2libGUsIHVzZSBhIHRleHQgaXRlcmF0b3IgdG8gZ2V0IHRoZSB0ZXh0LCBzbyB0aGF0IHdoaXRl
c3BhY2UKICAgICAgICAgLy8gaXMgaGFuZGxlZCBjb25zaXN0ZW50bHkuCiAgICAgICAgIERvY3Vt
ZW50KiBub2RlRG9jdW1lbnQgPSBudWxscHRyOwotICAgICAgICBSZWZQdHI8UmFuZ2U+IHRleHRS
YW5nZTsKKyAgICAgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHRleHRSYW5nZTsKICAgICAgICAg
aWYgKE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCkpIHsKICAgICAgICAgICAgIG5vZGVE
b2N1bWVudCA9ICZub2RlLT5kb2N1bWVudCgpOwotICAgICAgICAgICAgdGV4dFJhbmdlID0gcmFu
Z2VPZkNvbnRlbnRzKCpub2RlKTsKKyAgICAgICAgICAgIHRleHRSYW5nZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cygqbm9kZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAvLyBGb3IgYW5vbnltb3VzIGJsb2Nrcywgd2Ugd29yayBhcm91bmQgbm90IGhhdmluZyBhIGRp
cmVjdCBub2RlIHRvIGNyZWF0ZSBhIHJhbmdlIGZyb20KICAgICAgICAgICAgIC8vIGRlZmluaW5n
IG9uZSBiYXNlZCBpbiB0aGUgdHdvIGV4dGVybmFsIHBvc2l0aW9ucyBkZWZpbmluZyB0aGUgYm91
bmRhcmllcyBvZiB0aGUgc3VidHJlZS4KQEAgLTY1MCw3ICs2NTAsNyBAQCBTdHJpbmcgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudChBY2Nlc3NpYmlsaXR5VGV4dFVu
ZGVyRWxlbWVudAogICAgICAgICAgICAgICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uID0gcG9zaXRp
b25JblBhcmVudEFmdGVyTm9kZShsYXN0Q2hpbGRSZW5kZXJlci0+bm9kZSgpKTsKIAogICAgICAg
ICAgICAgICAgIG5vZGVEb2N1bWVudCA9ICZmaXJzdE5vZGVJbkJsb2NrLT5kb2N1bWVudCgpOwot
ICAgICAgICAgICAgICAgIHRleHRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKm5vZGVEb2N1bWVudCwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgICAgICAgICAgICAgIHRleHRSYW5nZSA9
IHsgeyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnRQb3NpdGlvbiksICptYWtlQm91bmRhcnlQb2lu
dChlbmRQb3NpdGlvbikgfSB9OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9k
b20vQm91bmRhcnlQb2ludC5oCmluZGV4IDVjYmJmZGMwMGY1NTA3NDc1YTE4NWIyZTg1MjNhZmFi
NzIzOGIyMjIuLjRiMjJhMzFhYzExYTk2NTQ4ZTk5ZjY2ODE4MTVmNDI2MmY0MTJkMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Cb3VuZGFyeVBvaW50LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0JvdW5kYXJ5UG9pbnQuaApAQCAtNDcsNiArNDcsNyBAQCBzdHJ1Y3QgQm91bmRh
cnlQb2ludCB7CiBib29sIG9wZXJhdG9yPT0oY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJv
dW5kYXJ5UG9pbnQmKTsKIAogQm91bmRhcnlQb2ludCBtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGVDb250ZW50cyhOb2RlJik7CitCb3VuZGFyeVBvaW50IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJO
b2RlQ29udGVudHMoTm9kZSYpOwogCiBpbmxpbmUgQm91bmRhcnlQb2ludDo6Qm91bmRhcnlQb2lu
dChSZWY8Tm9kZT4mJiBjb250YWluZXIsIHVuc2lnbmVkIG9mZnNldCkKICAgICA6IGNvbnRhaW5l
cihXVEZNb3ZlKGNvbnRhaW5lcikpCkBAIC04Miw0ICs4Myw5IEBAIGlubGluZSBCb3VuZGFyeVBv
aW50IG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCiAgICAg
cmV0dXJuIHsgbm9kZSwgMCB9OwogfQogCitpbmxpbmUgQm91bmRhcnlQb2ludCBtYWtlQm91bmRh
cnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKE5vZGUmIG5vZGUpCit7CisgICAgcmV0dXJuIHsgbm9k
ZSwgbm9kZS5sZW5ndGgoKSB9OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKaW5kZXggOGU1OGQwZWRk
ODZmMmFiOTI2NmI1NzBkZjE3OWYxY2UxNGRkNDA5OS4uNzhmN2Y1NWJlZjVkMzkxNWI3NzIwNmE5
YjEyYWQwMjU1YjQxNzMzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMjYxMiw2ICsyNjEyLDE3IEBA
IHZvaWQqIE5vZGU6Om9wYXF1ZVJvb3RTbG93KCkgY29uc3QKICAgICByZXR1cm4gY29uc3RfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KG5vZGUpKTsKIH0KIAorUmVmUHRyPE5v
ZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKE5vZGUmIGEsIE5vZGUmIGIpCit7CisgICAgZm9y
IChhdXRvIGFuY2VzdG9yQSA9ICZhOyBhbmNlc3RvckE7IGFuY2VzdG9yQSA9IGFuY2VzdG9yQS0+
cGFyZW50Tm9kZSgpKSB7CisgICAgICAgIGZvciAoYXV0byBhbmNlc3RvckIgPSAmYjsgYW5jZXN0
b3JCOyBhbmNlc3RvckIgPSBhbmNlc3RvckItPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAg
aWYgKGFuY2VzdG9yQSA9PSBhbmNlc3RvckIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFuY2Vz
dG9yQTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgTm9kZSYgbm9kZSkKIHsKICAg
ICB0cyA8PCAibm9kZSAiIDw8ICZub2RlIDw8ICIgIiA8PCBub2RlLmRlYnVnRGVzY3JpcHRpb24o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZS5oCmluZGV4IGUyYjMwNjE3MjYyYTQyNTA5YTIxYmZkZDc0YTUzNzQ4Y2FkY2Q2
ODIuLmVhYWEzNThjNGVhMWJlZmNlYzQ5MDJiMWI3NzUzZTcxZTgyYjgzZjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aApAQCAtNjcwLDYgKzY3MCw4IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPE5vZGVS
YXJlRGF0YSwgTm9kZVJhcmVEYXRhRGVsZXRlcj4gbV9yYXJlRGF0YTsKIH07CiAKK1dFQkNPUkVf
RVhQT1JUIFJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihOb2RlJiwgTm9kZSYp
OworCiAjaWYgQVNTRVJUX0VOQUJMRUQKIAogaW5saW5lIHZvaWQgYWRvcHRlZChOb2RlKiBub2Rl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggYmNmNjkwNDU3NWViZGUyNDRkOTE0NTFkOTcx
Mzg2NDhiNzEyMThmMi4uNjc0NWIxOTlkYjU2YmZhZDUzNjY0NzI4YWMyZjc3ZjY4MDc2ODAxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC0xNTcwLDcgKzE1NzAsNyBAQCBSZWZQdHI8Tm9k
ZT4gY29tbW9uU2hhZG93SW5jbHVkaW5nQW5jZXN0b3IoY29uc3QgUG9zaXRpb24mIGEsIGNvbnN0
IFBvc2l0aW9uJiBiKQogICAgIEFTU0VSVChub2RlQSk7CiAgICAgYXV0byogbm9kZUIgPSBjb21t
b25TY29wZS0+YW5jZXN0b3JOb2RlSW5UaGlzU2NvcGUoYi5jb250YWluZXJOb2RlKCkpOwogICAg
IEFTU0VSVChub2RlQik7Ci0gICAgcmV0dXJuIFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5l
cihub2RlQSwgbm9kZUIpOworICAgIHJldHVybiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcigqbm9k
ZUEsICpub2RlQik7CiB9CiAKIFBvc2l0aW9uIHBvc2l0aW9uSW5QYXJlbnRCZWZvcmVOb2RlKE5v
ZGUqIG5vZGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA2NGE4YWE4MjY3ZGQyNTQxN2E2NWEwM2Jl
YjBmMTYyNTkwZTA3MTA3Li5kNWJkZTBhMGJiZjU0YzI2MmIxY2ZhYjBhY2EzNGU3NDAwMzBmOTBk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTE0MywxNyArMTQzLDYgQEAgdm9pZCBSYW5nZTo6c2V0
RG9jdW1lbnQoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNo
UmFuZ2UoKnRoaXMpOwogfQogCi1Ob2RlKiBSYW5nZTo6Y29tbW9uQW5jZXN0b3JDb250YWluZXIo
Tm9kZSogY29udGFpbmVyQSwgTm9kZSogY29udGFpbmVyQikKLXsKLSAgICBmb3IgKE5vZGUqIHBh
cmVudEEgPSBjb250YWluZXJBOyBwYXJlbnRBOyBwYXJlbnRBID0gcGFyZW50QS0+cGFyZW50Tm9k
ZSgpKSB7Ci0gICAgICAgIGZvciAoTm9kZSogcGFyZW50QiA9IGNvbnRhaW5lckI7IHBhcmVudEI7
IHBhcmVudEIgPSBwYXJlbnRCLT5wYXJlbnROb2RlKCkpIHsKLSAgICAgICAgICAgIGlmIChwYXJl
bnRBID09IHBhcmVudEIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudEE7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgYm9vbCBj
aGVja0ZvckRpZmZlcmVudFJvb3RDb250YWluZXIoY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBz
dGFydCwgY29uc3QgUmFuZ2VCb3VuZGFyeVBvaW50JiBlbmQpCiB7CiAgICAgTm9kZSogZW5kUm9v
dENvbnRhaW5lciA9IGVuZC5jb250YWluZXIoKTsKQEAgLTIzOSw3ICsyMjgsNyBAQCBFeGNlcHRp
b25Pcjxib29sPiBSYW5nZTo6aXNQb2ludEluUmFuZ2UoTm9kZSYgcmVmTm9kZSwgdW5zaWduZWQg
b2Zmc2V0KQogICAgIGlmIChjaGVja05vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAg
ICAgLy8gRE9NNCBzcGVjIHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdoZXRoZXIgcmVmTm9kZSBhbmQg
c3RhcnQgY29udGFpbmVyIGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJzdAogICAgICAgICAvLyBidXQg
d2UgZG8gaXQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgTyhuKSBvcGVyYXRpb24gaGVy
ZSBpbiBjb21tb24gY2FzZS4KLSAgICAgICAgaWYgKCFjb21tb25BbmNlc3RvckNvbnRhaW5lcigm
cmVmTm9kZSwgJnN0YXJ0Q29udGFpbmVyKCkpKQorICAgICAgICBpZiAoIWNvbW1vbkluY2x1c2l2
ZUFuY2VzdG9yKHJlZk5vZGUsIHN0YXJ0Q29udGFpbmVyKCkpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICByZXR1cm4gY2hlY2tOb2RlUmVzdWx0LnJlbGVhc2VFeGNlcHRpb24o
KTsKICAgICB9CkBAIC0yNjMsNyArMjUyLDcgQEAgRXhjZXB0aW9uT3I8c2hvcnQ+IFJhbmdlOjpj
b21wYXJlUG9pbnQoTm9kZSYgcmVmTm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAogICAgIGlm
IChjaGVja05vZGVSZXN1bHQuaGFzRXhjZXB0aW9uKCkpIHsKICAgICAgICAgLy8gRE9NNCBzcGVj
IHJlcXVpcmVzIHVzIHRvIGNoZWNrIHdoZXRoZXIgcmVmTm9kZSBhbmQgc3RhcnQgY29udGFpbmVy
IGhhdmUgdGhlIHNhbWUgcm9vdCBmaXJzdAogICAgICAgICAvLyBidXQgd2UgZG8gaXQgaW4gdGhl
IHJldmVyc2Ugb3JkZXIgdG8gYXZvaWQgTyhuKSBvcGVyYXRpb24gaGVyZSBpbiBjb21tb24gY2Fz
ZS4KLSAgICAgICAgaWYgKCFyZWZOb2RlLmlzQ29ubmVjdGVkKCkgJiYgIWNvbW1vbkFuY2VzdG9y
Q29udGFpbmVyKCZyZWZOb2RlLCAmc3RhcnRDb250YWluZXIoKSkpCisgICAgICAgIGlmICghcmVm
Tm9kZS5pc0Nvbm5lY3RlZCgpICYmICFjb21tb25JbmNsdXNpdmVBbmNlc3RvcihyZWZOb2RlLCBz
dGFydENvbnRhaW5lcigpKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBXcm9uZ0Rv
Y3VtZW50RXJyb3IgfTsKICAgICAgICAgcmV0dXJuIGNoZWNrTm9kZVJlc3VsdC5yZWxlYXNlRXhj
ZXB0aW9uKCk7CiAgICAgfQpAQCAtNDIxLDE5ICs0MTAsMTkgQEAgRXhjZXB0aW9uT3I8c2hvcnQ+
IFJhbmdlOjpjb21wYXJlQm91bmRhcnlQb2ludHMoTm9kZSogY29udGFpbmVyQSwgdW5zaWduZWQg
b2Zmc2UKIAogICAgIC8vIGNhc2UgNDogY29udGFpbmVycyBBICYgQiBhcmUgc2libGluZ3MsIG9y
IGNoaWxkcmVuIG9mIHNpYmxpbmdzCiAgICAgLy8gIyMjIHdlIG5lZWQgdG8gZG8gYSB0cmF2ZXJz
YWwgaGVyZSBpbnN0ZWFkCi0gICAgYXV0byogY29tbW9uQW5jZXN0b3IgPSBjb21tb25BbmNlc3Rv
ckNvbnRhaW5lcihjb250YWluZXJBLCBjb250YWluZXJCKTsKKyAgICBhdXRvIGNvbW1vbkFuY2Vz
dG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKmNvbnRhaW5lckEsICpjb250YWluZXJCKTsK
ICAgICBpZiAoIWNvbW1vbkFuY2VzdG9yKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgV3Jv
bmdEb2N1bWVudEVycm9yIH07CiAgICAgTm9kZSogY2hpbGRBID0gY29udGFpbmVyQTsKICAgICB3
aGlsZSAoY2hpbGRBICYmIGNoaWxkQS0+cGFyZW50Tm9kZSgpICE9IGNvbW1vbkFuY2VzdG9yKQog
ICAgICAgICBjaGlsZEEgPSBjaGlsZEEtPnBhcmVudE5vZGUoKTsKICAgICBpZiAoIWNoaWxkQSkK
LSAgICAgICAgY2hpbGRBID0gY29tbW9uQW5jZXN0b3I7CisgICAgICAgIGNoaWxkQSA9IGNvbW1v
bkFuY2VzdG9yLmdldCgpOwogICAgIE5vZGUqIGNoaWxkQiA9IGNvbnRhaW5lckI7CiAgICAgd2hp
bGUgKGNoaWxkQiAmJiBjaGlsZEItPnBhcmVudE5vZGUoKSAhPSBjb21tb25BbmNlc3RvcikKICAg
ICAgICAgY2hpbGRCID0gY2hpbGRCLT5wYXJlbnROb2RlKCk7CiAgICAgaWYgKCFjaGlsZEIpCi0g
ICAgICAgIGNoaWxkQiA9IGNvbW1vbkFuY2VzdG9yOworICAgICAgICBjaGlsZEIgPSBjb21tb25B
bmNlc3Rvci5nZXQoKTsKIAogICAgIGlmIChjaGlsZEEgPT0gY2hpbGRCKQogICAgICAgICByZXR1
cm4gMDsgLy8gQSBpcyBlcXVhbCB0byBCCkBAIC0xMjkwLDEwICsxMjc5LDEwIEBAIGludCBSYW5n
ZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhWZWN0b3I8
U2VsZWN0aW9uUmVjdD4mCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBUaGUgcmFuZ2UgY291
bGQgc3BhbiBvdmVyIG5vZGVzIHdpdGggZGlmZmVyZW50IHdyaXRpbmcgbW9kZXMuCisgICAgLy8g
VGhlIHJhbmdlIGNvdWxkIHNwYW4gbm9kZXMgd2l0aCBkaWZmZXJlbnQgd3JpdGluZyBtb2Rlcy4K
ICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3ZSB1c2UgdGhlIHdyaXRpbmcgbW9kZSBvZiB0
aGUgY29tbW9uIGFuY2VzdG9yLgogICAgIGlmIChjb250YWluc0RpZmZlcmVudFdyaXRpbmdNb2Rl
cykgewotICAgICAgICBpZiAoTm9kZSogYW5jZXN0b3IgPSBjb21tb25BbmNlc3RvckNvbnRhaW5l
cigmc3RhcnRDb250YWluZXIsICZlbmRDb250YWluZXIpKQorICAgICAgICBpZiAoYXV0byBhbmNl
c3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHN0YXJ0Q29udGFpbmVyLCBlbmRDb250YWlu
ZXIpKQogICAgICAgICAgICAgaGFzRmxpcHBlZFdyaXRpbmdNb2RlID0gYW5jZXN0b3ItPnJlbmRl
cmVyKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKTsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9t
L1JhbmdlLmgKaW5kZXggODJjMzI2NTM1OTYzYWE2ZmQ4ZWQ3NWU2M2NkODIyYzM3MmYxMjNkZS4u
OGEyNmFiNTJkZmFlNzNkNjhiOTMyNWYzYTcyMDhkMWI4OGEwNmZlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgK
QEAgLTYwLDggKzYwLDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fZW5kLm9mZnNldCgpOyB9CiAgICAgYm9vbCBjb2xsYXBzZWQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0ID09IG1fZW5kOyB9CiAKLSAgICBOb2RlKiBjb21tb25BbmNlc3RvckNv
bnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCZzdGFydENv
bnRhaW5lcigpLCAmZW5kQ29udGFpbmVyKCkpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGlj
IE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKE5vZGUqIGNvbnRhaW5lckEsIE5vZGUqIGNv
bnRhaW5lckIpOworICAgIE5vZGUqIGNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkgY29uc3QgeyBy
ZXR1cm4gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Ioc3RhcnRDb250YWluZXIoKSwgZW5kQ29udGFp
bmVyKCkpLmdldCgpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
U3RhcnQoUmVmPE5vZGU+JiYgY29udGFpbmVyLCB1bnNpZ25lZCBvZmZzZXQpOwogICAgIFdFQkNP
UkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldEVuZChSZWY8Tm9kZT4mJiBjb250YWluZXIs
IHVuc2lnbmVkIG9mZnNldCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsYXBzZShib29s
IHRvU3RhcnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggOWFiMTM2MDEyNDkx
NzQwM2Y4MWJhMzYxZTcyMmRhOWMyMjhmYWJmMC4uOTI0MGMzNDI0MTgxOGIyZDA0ZWU4NjMwMjQy
YWZmNTRkOTljY2YxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC02NCwxMSAr
NjQsNiBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZShOb2Rl
JiBub2RlKQogICAgIHJldHVybiBTaW1wbGVSYW5nZSB7IHsgKnBhcmVudCwgb2Zmc2V0IH0sIHsg
KnBhcmVudCwgb2Zmc2V0ICsgMSB9IH07CiB9CiAKLXN0YXRpYyBCb3VuZGFyeVBvaW50IG1ha2VC
b3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoTm9kZSYgbm9kZSkKLXsKLSAgICByZXR1cm4g
eyBub2RlLCBub2RlLmxlbmd0aCgpIH07Ci19Ci0KIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhOb2RlJiBub2RlKQogewogICAgIHJldHVybiB7IG1ha2VCb3VuZGFy
eVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKG5vZGUpLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9k
ZUNvbnRlbnRzKG5vZGUpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Fs
dGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRl
cm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA1YWYyYzYwZTQ0NDAxYmU5MmRkYTg4ODJh
NjU3ZmJjZDc5ZTA1NjcxLi4zYmQ2NThkZjY0NDAxZDIyYjA2MWQ2Y2M0MzBmZWVjYjQxZmViMDA2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlci5jcHAKQEAgLTIxNywxOCArMjE3LDIwIEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6YXBwbHlBdXRvY29ycmVjdGlvbkJlZm9yZVR5cGluZ0lmQXBwcm9wcmlhdGUoKQog
CiB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OnJlc3BvbmRUb1VuYXBwbGllZFNwZWxs
Q29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwg
Y29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKIHsKLSAg
ICBpZiAoQWx0ZXJuYXRpdmVUZXh0Q2xpZW50KiBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGll
bnQoKSkKKyAgICBpZiAoYXV0byBjbGllbnQgPSBhbHRlcm5hdGl2ZVRleHRDbGllbnQoKSkKICAg
ICAgICAgY2xpZW50LT5yZWNvcmRBdXRvY29ycmVjdGlvblJlc3BvbnNlKEF1dG9jb3JyZWN0aW9u
UmVzcG9uc2U6OlJldmVydGVkLCBjb3JyZWN0ZWQsIGNvcnJlY3Rpb24pOwogCiAgICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7CiAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVM
YXlvdXQoKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihzZWxlY3Rpb25P
ZkNvcnJlY3RlZCwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRpb25zKCkg
fCBGcmFtZVNlbGVjdGlvbjo6U3BlbGxDb3JyZWN0aW9uVHJpZ2dlcmVkKTsKLSAgICBhdXRvIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnN0YXJ0KCksIG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCkpOwogCisgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oc2VsZWN0aW9u
T2ZDb3JyZWN0ZWQsIEZyYW1lU2VsZWN0aW9uOjpkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygp
IHwgRnJhbWVTZWxlY3Rpb246OlNwZWxsQ29ycmVjdGlvblRyaWdnZXJlZCk7CisgICAgYXV0byBy
YW5nZSA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKICAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7Ci0gICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdl
LCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+IHsgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCB9LCBEb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXI6OlJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyKTsKLSAgICBtYXJr
ZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBt
YXJrZXJzLmFkZE1hcmtlcihyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVt
cHRpb24pOworICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFuZ2UsIE9wdGlvblNldDxEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZT4geyBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmcsIERvY3Vt
ZW50TWFya2VyOjpBdXRvY29ycmVjdGVkIH0sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6UmVt
b3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIpOworICAgIG1hcmtlcnMuYWRkTWFya2VyKCpy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBtYXJrZXJzLmFkZE1hcmtl
cigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhlbXB0aW9uKTsKIH0KIAog
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjp0aW1lckZpcmVkKCkKQEAgLTM5NSwxMCAr
Mzk3LDEyIEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvVW5hcHBs
aWVkRWRpdGluZyhFZGl0Q29tbWFuZENvbXBvc2l0aW9uCiB7CiAgICAgaWYgKCFjb21tYW5kLT53
YXNDcmVhdGVMaW5rQ29tbWFuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgYXV0byByYW5nZSA9
IFJhbmdlOjpjcmVhdGUoKm1fZnJhbWUuZG9jdW1lbnQoKSwgY29tbWFuZC0+c3RhcnRpbmdTZWxl
Y3Rpb24oKS5zdGFydCgpLCBjb21tYW5kLT5zdGFydGluZ1NlbGVjdGlvbigpLmVuZCgpKTsKKyAg
ICBhdXRvIHJhbmdlID0gY29tbWFuZC0+c3RhcnRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7
CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGF1dG8mIG1hcmtlcnMgPSBt
X2ZyYW1lLmRvY3VtZW50KCktPm1hcmtlcnMoKTsKLSAgICBtYXJrZXJzLmFkZE1hcmtlcihyYW5n
ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKLSAgICBtYXJrZXJzLmFkZE1hcmtlcihy
YW5nZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsQ2hlY2tpbmdFeGVtcHRpb24pOworICAgIG1hcmtl
cnMuYWRkTWFya2VyKCpyYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KTsKKyAgICBt
YXJrZXJzLmFkZE1hcmtlcigqcmFuZ2UsIERvY3VtZW50TWFya2VyOjpTcGVsbENoZWNraW5nRXhl
bXB0aW9uKTsKIH0KIAogRWRpdG9yQ2xpZW50KiBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpl
ZGl0b3JDbGllbnQoKQpAQCAtNDcxLDcgKzQ3NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29u
dHJvbGxlcjo6bWFya1ByZWNlZGluZ1doaXRlc3BhY2VGb3JEZWxldGVkQXV0b2NvcnJlY3Rpb25B
CiAgICAgaWYgKGVuZE9mU2VsZWN0aW9uID09IHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHByZWNlZGluZ0NoYXJhY3RlclJhbmdlID0gUmFu
Z2U6OmNyZWF0ZSgqbV9mcmFtZS5kb2N1bWVudCgpLCBwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biwgZW5kT2ZTZWxlY3Rpb24pOworICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBT
aW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChwcmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlv
biksICptYWtlQm91bmRhcnlQb2ludChlbmRPZlNlbGVjdGlvbikgfTsKICAgICBTdHJpbmcgc3Ry
aW5nID0gcGxhaW5UZXh0KHByZWNlZGluZ0NoYXJhY3RlclJhbmdlKTsKICAgICBpZiAoc3RyaW5n
LmlzRW1wdHkoKSB8fCAhZGVwcmVjYXRlZElzRWRpdGluZ1doaXRlc3BhY2Uoc3RyaW5nW3N0cmlu
Zy5sZW5ndGgoKSAtIDFdKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg0LDI1ICs0ODgsMjUgQEAg
dm9pZCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjptYXJrUHJlY2VkaW5nV2hpdGVzcGFjZUZv
ckRlbGV0ZWRBdXRvY29ycmVjdGlvbkEKIAogYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVy
Ojpwcm9jZXNzTWFya2Vyc09uVGV4dFRvQmVSZXBsYWNlZEJ5UmVzdWx0KGNvbnN0IFRleHRDaGVj
a2luZ1Jlc3VsdCYgcmVzdWx0LCBSYW5nZSYgcmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIGNvbnN0IFN0
cmluZyYgc3RyaW5nVG9CZVJlcGxhY2VkKQogewotICAgIERvY3VtZW50TWFya2VyQ29udHJvbGxl
ciYgbWFya2VyQ29udHJvbGxlciA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAg
IGlmIChtYXJrZXJDb250cm9sbGVyLmhhc01hcmtlcnMocmFuZ2VXaXRoQWx0ZXJuYXRpdmUsIERv
Y3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCkpIHsKKyAgICBhdXRvJiBtYXJrZXJzID0gbV9mcmFt
ZS5kb2N1bWVudCgpLT5tYXJrZXJzKCk7CisgICAgaWYgKG1hcmtlcnMuaGFzTWFya2VycyhyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50KSkgewogICAgICAg
ICBpZiAocmVzdWx0LnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZTo6Q29ycmVjdGlvbikKICAgICAg
ICAgICAgIHJlY29yZFNwZWxsY2hlY2tlclJlc3BvbnNlRm9yTW9kaWZpZWRDb3JyZWN0aW9uKHJh
bmdlV2l0aEFsdGVybmF0aXZlLCBzdHJpbmdUb0JlUmVwbGFjZWQsIHJlc3VsdC5yZXBsYWNlbWVu
dCk7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAobWFya2VyQ29udHJv
bGxlci5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVq
ZWN0ZWRDb3JyZWN0aW9uKSkKKyAgICBpZiAobWFya2Vycy5oYXNNYXJrZXJzKHJhbmdlV2l0aEFs
dGVybmF0aXZlLCBEb2N1bWVudE1hcmtlcjo6UmVqZWN0ZWRDb3JyZWN0aW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKG1hcmtlckNvbnRyb2xsZXIuaGFzTWFya2VycyhyYW5n
ZVdpdGhBbHRlcm5hdGl2ZSwgRG9jdW1lbnRNYXJrZXI6OkFjY2VwdGVkQ2FuZGlkYXRlKSkKKyAg
ICBpZiAobWFya2Vycy5oYXNNYXJrZXJzKHJhbmdlV2l0aEFsdGVybmF0aXZlLCBEb2N1bWVudE1h
cmtlcjo6QWNjZXB0ZWRDYW5kaWRhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBQ
b3NpdGlvbiBiZWdpbm5pbmdPZlJhbmdlID0gcmFuZ2VXaXRoQWx0ZXJuYXRpdmUuc3RhcnRQb3Np
dGlvbigpOwogICAgIFBvc2l0aW9uIHByZWNlZGluZ0NoYXJhY3RlclBvc2l0aW9uID0gYmVnaW5u
aW5nT2ZSYW5nZS5wcmV2aW91cygpOwotICAgIGF1dG8gcHJlY2VkaW5nQ2hhcmFjdGVyUmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCptX2ZyYW1lLmRvY3VtZW50KCksIHByZWNlZGluZ0NoYXJhY3RlclBv
c2l0aW9uLCBiZWdpbm5pbmdPZlJhbmdlKTsKIAotICAgIFZlY3RvcjxSZW5kZXJlZERvY3VtZW50
TWFya2VyKj4gbWFya2VycyA9IG1hcmtlckNvbnRyb2xsZXIubWFya2Vyc0luUmFuZ2UocHJlY2Vk
aW5nQ2hhcmFjdGVyUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEZWxldGVkQXV0b2NvcnJlY3Rpb24p
OwotICAgIGZvciAoY29uc3QgYXV0byogbWFya2VyIDogbWFya2VycykgeworICAgIGF1dG8gcHJl
Y2VkaW5nQ2hhcmFjdGVyUmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICptYWtlQm91bmRhcnlQb2ludChw
cmVjZWRpbmdDaGFyYWN0ZXJQb3NpdGlvbiksICptYWtlQm91bmRhcnlQb2ludChiZWdpbm5pbmdP
ZlJhbmdlKSB9OworCisgICAgZm9yIChhdXRvJiBtYXJrZXIgOiBtYXJrZXJzLm1hcmtlcnNJblJh
bmdlKHByZWNlZGluZ0NoYXJhY3RlclJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGVsZXRlZEF1dG9j
b3JyZWN0aW9uKSkgewogICAgICAgICBpZiAobWFya2VyLT5kZXNjcmlwdGlvbigpID09IHN0cmlu
Z1RvQmVSZXBsYWNlZCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NoYW5nZUxpc3RUeXBlQ29tbWFuZC5jcHAKaW5kZXggZDhh
ODcwM2E1YmJjNjA1NWM1MDZjZTA4ZjM1YWRkYmM0YTBlOWIxZC4uZDk5N2JhYmZlMmM4ZjVlMDU1
ODZkYTYwNzgxOWY2MWUwNTFlNzFlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9DaGFuZ2VMaXN0VHlwZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
Q2hhbmdlTGlzdFR5cGVDb21tYW5kLmNwcApAQCAtNDAsOCArNDAsMTMgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBzdGF0aWMgT3B0aW9uYWw8c3RkOjpwYWlyPENoYW5nZUxpc3RUeXBlQ29tbWFu
ZDo6VHlwZSwgUmVmPEhUTUxFbGVtZW50Pj4+IGxpc3RDb252ZXJzaW9uVHlwZUZvclNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiB7CisgICAgYXV0byBzdGFydE5v
ZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5jb250YWluZXJOb2RlKCk7CisgICAgYXV0byBlbmROb2Rl
ID0gc2VsZWN0aW9uLmVuZCgpLmNvbnRhaW5lck5vZGUoKTsKKyAgICBpZiAoIXN0YXJ0Tm9kZSB8
fCAhZW5kTm9kZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRvIGNvbW1v
bkFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnN0YXJ0Tm9kZSwgKmVuZE5vZGUp
OworCiAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBsaXN0VG9SZXBsYWNlOwotICAgIGF1dG8gY29t
bW9uQW5jZXN0b3IgPSBtYWtlUmVmUHRyKFJhbmdlOjpjb21tb25BbmNlc3RvckNvbnRhaW5lcihz
ZWxlY3Rpb24uc3RhcnQoKS5jb250YWluZXJOb2RlKCksIHNlbGVjdGlvbi5lbmQoKS5jb250YWlu
ZXJOb2RlKCkpKTsKICAgICBpZiAoaXM8SFRNTFVMaXN0RWxlbWVudD4oY29tbW9uQW5jZXN0b3Ip
IHx8IGlzPEhUTUxPTGlzdEVsZW1lbnQ+KGNvbW1vbkFuY2VzdG9yKSkKICAgICAgICAgbGlzdFRv
UmVwbGFjZSA9IGRvd25jYXN0PEhUTUxFbGVtZW50Pihjb21tb25BbmNlc3Rvci5nZXQoKSk7CiAg
ICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZy5jcHAKaW5kZXggM2IwMjllYTdmMzAxNDVj
MTc0YzM0MjRjYjNhYzgyYmMzODk1ZWJkNi4uNWFlN2FiMmRmYTNiYmViNzU5Mjk4MGE0ZjhlYzJh
NzU3OGYzMDU0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuY3BwCkBAIC0xMTQwLDE5ICsx
MTQwLDIyIEBAIHN0YXRpYyBib29sIGlzVmlzaWJseUFkamFjZW50KGNvbnN0IFBvc2l0aW9uJiBm
aXJzdCwgY29uc3QgUG9zaXRpb24mIHNlY29uZCkKIAogLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEg
bm9kZSBpcyBpbnNpZGUgYSByYW5nZSBvciB2aXNpYmx5IHN0YXJ0cyBhbmQgZW5kcyBhdCB0aGUg
Ym91bmRhcmllcyBvZiB0aGUgcmFuZ2UuCiAvLyBDYWxsIHRoaXMgZnVuY3Rpb24gdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgYSBub2RlIGlzIHZpc2libHkgZml0IGluc2lkZSBzZWxlY3RlZFJhbmdlCi1i
b29sIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oTm9kZSYgbm9kZSwgY29uc3QgUmFuZ2Um
IHJhbmdlKQorYm9vbCBpc05vZGVWaXNpYmx5Q29udGFpbmVkV2l0aGluKE5vZGUmIG5vZGUsIGNv
bnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKICAgICAvLyBJZiB0aGUgbm9kZSBpcyBpbnNpZGUg
dGhlIHJhbmdlLCB0aGVuIGl0IHN1cmVseSBpcyBjb250YWluZWQgd2l0aGluLgotICAgIGF1dG8g
Y29tcGFyaXNvblJlc3VsdCA9IHJhbmdlLmNvbXBhcmVOb2RlKG5vZGUpOworICAgIGF1dG8gY29t
cGFyaXNvblJlc3VsdCA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbXBhcmVOb2RlKG5vZGUp
OwogICAgIGlmICghY29tcGFyaXNvblJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiBjb21wYXJpc29u
UmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IFJhbmdlOjpOT0RFX0lOU0lERSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIHN0YXJ0SXNWaXN1YWxseVNhbWUgPSB2aXNpYmxl
UG9zaXRpb25CZWZvcmVOb2RlKG5vZGUpID09IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKLSAgICBp
ZiAoc3RhcnRJc1Zpc3VhbGx5U2FtZSAmJiBjb21wYXJlUG9zaXRpb25zKHBvc2l0aW9uSW5QYXJl
bnRBZnRlck5vZGUoJm5vZGUpLCByYW5nZS5lbmRQb3NpdGlvbigpKSA8IDApCisgICAgYXV0byBz
dGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0KTsK
KyAgICBhdXRvIGVuZFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdl
LmVuZCk7CisKKyAgICBib29sIHN0YXJ0SXNWaXN1YWxseVNhbWUgPSB2aXNpYmxlUG9zaXRpb25C
ZWZvcmVOb2RlKG5vZGUpID09IHN0YXJ0UG9zaXRpb247CisgICAgaWYgKHN0YXJ0SXNWaXN1YWxs
eVNhbWUgJiYgY29tcGFyZVBvc2l0aW9ucyhwb3NpdGlvbkluUGFyZW50QWZ0ZXJOb2RlKCZub2Rl
KSwgZW5kUG9zaXRpb24pIDwgMCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBib29sIGVu
ZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKG5vZGUpID09IHJhbmdl
LmVuZFBvc2l0aW9uKCk7Ci0gICAgaWYgKGVuZElzVmlzdWFsbHlTYW1lICYmIGNvbXBhcmVQb3Np
dGlvbnMocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBwb3NpdGlvbkluUGFyZW50QmVmb3JlTm9kZSgm
bm9kZSkpIDwgMCkKKyAgICBib29sIGVuZElzVmlzdWFsbHlTYW1lID0gdmlzaWJsZVBvc2l0aW9u
QWZ0ZXJOb2RlKG5vZGUpID09IGVuZFBvc2l0aW9uOworICAgIGlmIChlbmRJc1Zpc3VhbGx5U2Ft
ZSAmJiBjb21wYXJlUG9zaXRpb25zKHN0YXJ0UG9zaXRpb24sIHBvc2l0aW9uSW5QYXJlbnRCZWZv
cmVOb2RlKCZub2RlKSkgPCAwKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIHJldHVybiBz
dGFydElzVmlzdWFsbHlTYW1lICYmIGVuZElzVmlzdWFsbHlTYW1lOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmcuaAppbmRleCBjMDUyNjQ2ZTE1MzNiZjJkNjc1ZTQ0MGMzNzEwNzlkYTk0YTRkY2QxLi43
ZjNhYzYyYjM3ZTE4YzBkZTA5MzUzMTBlYTg4YzQ3MTc2MGYxN2I5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmcuaApAQCAtMzcsNyArMzcsNiBAQCBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIEhU
TUxJbWFnZUVsZW1lbnQ7CiBjbGFzcyBIVE1MU3BhbkVsZW1lbnQ7CiBjbGFzcyBIVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudDsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyQmxvY2s7CiBjbGFz
cyBWaXNpYmxlUG9zaXRpb247CiBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwpAQCAtMTAxLDcgKzEw
MCw3IEBAIGJvb2wgaXNOb2RlUmVuZGVyZWQoY29uc3QgTm9kZSYpOwogYm9vbCBpc1JlbmRlcmVk
QXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihjb25zdCBOb2RlKik7CiBib29sIGlzTm9uVGFibGVD
ZWxsSFRNTEJsb2NrRWxlbWVudChjb25zdCBOb2RlKik7CiAKLWJvb2wgaXNOb2RlVmlzaWJseUNv
bnRhaW5lZFdpdGhpbihOb2RlJiwgY29uc3QgUmFuZ2UmKTsKK2Jvb2wgaXNOb2RlVmlzaWJseUNv
bnRhaW5lZFdpdGhpbihOb2RlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBhcmVJZGVu
dGljYWxFbGVtZW50cyhjb25zdCBOb2RlJiwgY29uc3QgTm9kZSYpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRvci5jcHAKaW5kZXggMWM4M2ZkMGFhZTg3MzM5YjE0M2ExOTZkNjQ0YTk0NjY4OWZiMTUz
Zi4uMmIxMDYwNjg5OTBiNzIyODI0Y2Q4NmQxN2ZkY2MyZTVmMWNjMzhkNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yLmNwcApAQCAtMzIxMSw3ICszMjExLDcgQEAgdm9pZCBFZGl0b3I6OnRyYW5z
cG9zZSgpCiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHRyYW5zcG9zZWQsIFNlbGVjdFJl
cGxhY2VtZW50OjpObywgU21hcnRSZXBsYWNlOjpObywgRWRpdEFjdGlvbjo6SW5zZXJ0KTsKIH0K
IAotdm9pZCBFZGl0b3I6OmFkZFJhbmdlVG9LaWxsUmluZyhjb25zdCBSYW5nZSYgcmFuZ2UsIEtp
bGxSaW5nSW5zZXJ0aW9uTW9kZSBtb2RlKQordm9pZCBFZGl0b3I6OmFkZFJhbmdlVG9LaWxsUmlu
Zyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIEtpbGxSaW5nSW5zZXJ0aW9uTW9kZSBtb2RlKQog
ewogICAgIGFkZFRleHRUb0tpbGxSaW5nKHBsYWluVGV4dChyYW5nZSksIG1vZGUpOwogfQpAQCAt
MzY4NSw5OSArMzY4NSw3NCBAQCB2b2lkIEVkaXRvcjo6cmVzcG9uZFRvQ2hhbmdlZFNlbGVjdGlv
bihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiwgT3B0aW9uU2V0PEZyYW1lUwogICAgIHNjaGVkdWxl
RWRpdG9yVUlVcGRhdGUoKTsKIH0KIAotI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVD
VElPTikgJiYgIVBMQVRGT1JNKElPU19GQU1JTFkpCisjaWYgRU5BQkxFKFRFTEVQSE9ORV9OVU1C
RVJfREVURUNUSU9OKSAmJiBQTEFURk9STShNQUMpCiAKLWJvb2wgRWRpdG9yOjpzaG91bGREZXRl
Y3RUZWxlcGhvbmVOdW1iZXJzKCkKK2Jvb2wgRWRpdG9yOjpzaG91bGREZXRlY3RUZWxlcGhvbmVO
dW1iZXJzKCkgY29uc3QKIHsKLSAgICBpZiAoIW1fZnJhbWUuZG9jdW1lbnQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkb2N1bWVudCgpLmlzVGVsZXBob25lTnVtYmVyUGFy
c2luZ0VuYWJsZWQoKSAmJiBUZWxlcGhvbmVOdW1iZXJEZXRlY3Rvcjo6aXNTdXBwb3J0ZWQoKTsK
KyAgICByZXR1cm4gbV9mcmFtZS5kb2N1bWVudCgpICYmIGRvY3VtZW50KCkuaXNUZWxlcGhvbmVO
dW1iZXJQYXJzaW5nRW5hYmxlZCgpICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjppc1N1cHBv
cnRlZCgpOwogfQogCi12b2lkIEVkaXRvcjo6c2NhblNlbGVjdGlvbkZvclRlbGVwaG9uZU51bWJl
cnMoKQorc3RhdGljIFZlY3RvcjxTaW1wbGVSYW5nZT4gc2NhbkZvclRlbGVwaG9uZU51bWJlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIGlmICghc2hvdWxkRGV0ZWN0VGVsZXBo
b25lTnVtYmVycygpIHx8ICFjbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9kZXRl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5jbGVhcigpOwotCi0gICAgVmVjdG9yPFJlZlB0cjxS
YW5nZT4+IG1hcmtlZFJhbmdlczsKLQotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlv
biA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgaWYgKCFmcmFtZVNlbGVjdGlvbi5pc1Jhbmdl
KCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBtX2ZyYW1lLnBhZ2UoKSkKLSAgICAgICAg
ICAgIHBhZ2UtPnNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIoKS5zZWxlY3RlZFRlbGVwaG9uZU51
bWJlclJhbmdlc0NoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOworICAgIC8vIERvbid0IHNjYW4g
Zm9yIHBob25lIG51bWJlcnMgaW5zaWRlIGVkaXRhYmxlIHJlZ2lvbnMuCisgICAgYXV0byYgc3Rh
cnROb2RlID0gcmFuZ2Uuc3RhcnRDb250YWluZXIoKTsKKyAgICBpZiAoc3RhcnROb2RlLmhhc0Vk
aXRhYmxlU3R5bGUoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBhdXRvIHRleHQgPSBwbGFp
blRleHQocmFuZ2UpOworICAgIFZlY3RvcjxTaW1wbGVSYW5nZT4gcmVzdWx0OworICAgIHVuc2ln
bmVkIGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgc2Nhbm5lclBvc2l0aW9u
ID0gMDsKKyAgICBpbnQgcmVsYXRpdmVTdGFydFBvc2l0aW9uID0gMDsKKyAgICBpbnQgcmVsYXRp
dmVFbmRQb3NpdGlvbiA9IDA7CisgICAgYXV0byBjaGFyYWN0ZXJzID0gU3RyaW5nVmlldyB7IHRl
eHQgfS51cGNvbnZlcnRlZENoYXJhY3RlcnMoKTsKKyAgICB3aGlsZSAoc2Nhbm5lclBvc2l0aW9u
IDwgbGVuZ3RoICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpmaW5kKCZjaGFyYWN0ZXJzW3Nj
YW5uZXJQb3NpdGlvbl0sIGxlbmd0aCAtIHNjYW5uZXJQb3NpdGlvbiwgJnJlbGF0aXZlU3RhcnRQ
b3NpdGlvbiwgJnJlbGF0aXZlRW5kUG9zaXRpb24pKSB7CisgICAgICAgIEFTU0VSVChzY2FubmVy
UG9zaXRpb24gKyByZWxhdGl2ZUVuZFBvc2l0aW9uIDw9IGxlbmd0aCk7CisgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCBDaGFyYWN0ZXJSYW5nZShzY2Fu
bmVyUG9zaXRpb24gKyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24sIHJlbGF0aXZlRW5kUG9zaXRpb24g
LSByZWxhdGl2ZVN0YXJ0UG9zaXRpb24pKSk7CisgICAgICAgIHNjYW5uZXJQb3NpdGlvbiArPSBy
ZWxhdGl2ZUVuZFBvc2l0aW9uOwogICAgIH0KLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBjcmVh
dGVMaXZlUmFuZ2UoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2Uo
KSk7Ci0KLSAgICAvLyBFeHRlbmQgdGhlIHJhbmdlIGEgZmV3IGNoYXJhY3RlcnMgaW4gZWFjaCBk
aXJlY3Rpb24gdG8gZGV0ZWN0IGluY29tcGxldGVseSBzZWxlY3RlZCBwaG9uZSBudW1iZXJzLgot
ICAgIHN0YXRpYyBjb25zdCBpbnQgY2hhcmFjdGVyc1RvRXh0ZW5kID0gMTU7Ci0gICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJsZVNlbGVjdGlvbiA9IGZyYW1lU2VsZWN0aW9uLnNlbGVj
dGlvbigpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpOwot
ICAgIFBvc2l0aW9uIGVuZCA9IHZpc2libGVTZWxlY3Rpb24uZW5kKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjaGFyYWN0ZXJzVG9FeHRlbmQ7ICsraSkgeworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3N0YXRpYyBTaW1wbGVSYW5nZSBleHRlbmRTZWxlY3Rpb24oY29uc3QgU2ltcGxlUmFu
Z2UmIHJhbmdlLCB1bnNpZ25lZCBjaGFyYWN0ZXJzVG9FeHRlbmQpCit7CisgICAgYXV0byBzdGFy
dCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCk7CisgICAgYXV0byBl
bmQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY2hhcmFjdGVyc1RvRXh0ZW5kOyArK2kpIHsKICAgICAgICAgc3Rh
cnQgPSBzdGFydC5wcmV2aW91cyhDaGFyYWN0ZXIpOwogICAgICAgICBlbmQgPSBlbmQubmV4dChD
aGFyYWN0ZXIpOwogICAgIH0KKyAgICByZXR1cm4geyAqbWFrZUJvdW5kYXJ5UG9pbnQoc3RhcnQp
LCAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kKX07Cit9CiAKLSAgICBGcmFtZVNlbGVjdGlvbiBleHRl
bmRlZFNlbGVjdGlvbjsKLSAgICBleHRlbmRlZFNlbGVjdGlvbi5zZXRTdGFydChzdGFydCk7Ci0g
ICAgZXh0ZW5kZWRTZWxlY3Rpb24uc2V0RW5kKGVuZCk7Ci0gICAgYXV0byBleHRlbmRlZFJhbmdl
ID0gZXh0ZW5kZWRTZWxlY3Rpb24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLQot
ICAgIGlmICghZXh0ZW5kZWRSYW5nZSkgewotICAgICAgICBpZiAoYXV0byogcGFnZSA9IG1fZnJh
bWUucGFnZSgpKQotICAgICAgICAgICAgcGFnZS0+c2VydmljZXNPdmVybGF5Q29udHJvbGxlcigp
LnNlbGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzQ2hhbmdlZCgpOwordm9pZCBFZGl0b3I6OnNj
YW5TZWxlY3Rpb25Gb3JUZWxlcGhvbmVOdW1iZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogV2h5IGlz
IGl0IGhlbHBmdWwgaGVyZSB0byBjaGVjayBjbGllbnQgZm9yIG51bGw/CisgICAgaWYgKCFzaG91
bGREZXRlY3RUZWxlcGhvbmVOdW1iZXJzKCkgfHwgIWNsaWVudCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgfQogCi0gICAgc2NhblJhbmdlRm9yVGVsZXBob25lTnVtYmVycyhjcmVhdGVMaXZlUmFu
Z2UoKmV4dGVuZGVkUmFuZ2UpLCBwbGFpblRleHQoKmV4dGVuZGVkUmFuZ2UpLCBtYXJrZWRSYW5n
ZXMpOworICAgIG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMuY2xlYXIoKTsKIAotICAg
IC8vIE9ubHkgY29uc2lkZXIgcmFuZ2VzIHdpdGggYSBkZXRlY3RlZCB0ZWxlcGhvbmUgbnVtYmVy
IGlmIHRoZXkgb3ZlcmxhcCB3aXRoIHRoZSBhY3R1YWwgc2VsZWN0aW9uIHJhbmdlLgotICAgIGZv
ciAoYXV0byYgcmFuZ2UgOiBtYXJrZWRSYW5nZXMpIHsKLSAgICAgICAgaWYgKHJhbmdlc092ZXJs
YXAocmFuZ2UuZ2V0KCksIHNlbGVjdGVkUmFuZ2UuZ2V0KCkpKQotICAgICAgICAgICAgbV9kZXRl
Y3RlZFRlbGVwaG9uZU51bWJlclJhbmdlcy5hcHBlbmQocmFuZ2UpOworICAgIGF1dG8mIHNlbGVj
dGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKKyAgICAgICAgaWYgKGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpIHsKKyAgICAgICAgICAgIC8vIEV4dGVuZCB0aGUgcmFuZ2UgYSBmZXcg
Y2hhcmFjdGVycyBpbiBlYWNoIGRpcmVjdGlvbiB0byBkZXRlY3QgaW5jb21wbGV0ZWx5IHNlbGVj
dGVkIHBob25lIG51bWJlcnMuCisgICAgICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgY2hhcmFj
dGVyc1RvRXh0ZW5kID0gMTU7CisgICAgICAgICAgICBhdXRvIHNlbGVjdGVkTGl2ZVJhbmdlID0g
Y3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYg
cmFuZ2UgOiBzY2FuRm9yVGVsZXBob25lTnVtYmVycyhleHRlbmRTZWxlY3Rpb24oKnNlbGVjdGVk
UmFuZ2UsIGNoYXJhY3RlcnNUb0V4dGVuZCkpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdoeSBkbyB3ZSBkbyB0aGlzIHVuY29uZGl0aW9uYWxseSBhbmQgdGhlIGNvZGUgYmVsb3cgdGhp
cyBvbmx5IHdoZW4gaXQgb3ZlcmxhcHMgdGhlIHNlbGVjdGlvbj8KKyAgICAgICAgICAgICAgICBk
b2N1bWVudCgpLm1hcmtlcnMoKS5hZGRNYXJrZXIocmFuZ2UsIERvY3VtZW50TWFya2VyOjpUZWxl
cGhvbmVOdW1iZXIpOworCisgICAgICAgICAgICAgICAgLy8gT25seSBjb25zaWRlciByYW5nZXMg
d2l0aCBhIGRldGVjdGVkIHRlbGVwaG9uZSBudW1iZXIgaWYgdGhleSBvdmVybGFwIHdpdGggdGhl
IGFjdHVhbCBzZWxlY3Rpb24gcmFuZ2UuCisgICAgICAgICAgICAgICAgaWYgKHJhbmdlc092ZXJs
YXAoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5wdHIoKSwgc2VsZWN0ZWRMaXZlUmFuZ2UucHRyKCkp
KQorICAgICAgICAgICAgICAgICAgICBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzLmFw
cGVuZChyYW5nZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAo
YXV0byogcGFnZSA9IG1fZnJhbWUucGFnZSgpKQogICAgICAgICBwYWdlLT5zZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyKCkuc2VsZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXNDaGFuZ2VkKCk7CiB9
CiAKLXZvaWQgRWRpdG9yOjpzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiByYW5n
ZSwgY29uc3QgU3RyaW5nVmlldyYgc3RyaW5nVmlldywgVmVjdG9yPFJlZlB0cjxSYW5nZT4+JiBt
YXJrZWRSYW5nZXMpCi17Ci0gICAgLy8gRG9uJ3Qgc2NhbiBmb3IgcGhvbmUgbnVtYmVycyBpbnNp
ZGUgZWRpdGFibGUgcmVnaW9ucy4KLSAgICBOb2RlJiBzdGFydE5vZGUgPSByYW5nZS5zdGFydENv
bnRhaW5lcigpOwotICAgIGlmIChzdGFydE5vZGUuaGFzRWRpdGFibGVTdHlsZSgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gYW5kIHJlbGF0aXZlRW5k
UG9zaXRpb24gYXJlIHRoZSBlbmRwb2ludHMgb2YgdGhlIHBob25lIG51bWJlciByYW5nZSwKLSAg
ICAvLyByZWxhdGl2ZSB0byB0aGUgc2Nhbm5lclBvc2l0aW9uCi0gICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nVmlldy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBzY2FubmVyUG9zaXRpb24gPSAw
OwotICAgIGludCByZWxhdGl2ZVN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCByZWxhdGl2ZUVu
ZFBvc2l0aW9uID0gMDsKLQotICAgIGF1dG8gY2hhcmFjdGVycyA9IHN0cmluZ1ZpZXcudXBjb252
ZXJ0ZWRDaGFyYWN0ZXJzKCk7Ci0KLSAgICB3aGlsZSAoc2Nhbm5lclBvc2l0aW9uIDwgbGVuZ3Ro
ICYmIFRlbGVwaG9uZU51bWJlckRldGVjdG9yOjpmaW5kKCZjaGFyYWN0ZXJzW3NjYW5uZXJQb3Np
dGlvbl0sIGxlbmd0aCAtIHNjYW5uZXJQb3NpdGlvbiwgJnJlbGF0aXZlU3RhcnRQb3NpdGlvbiwg
JnJlbGF0aXZlRW5kUG9zaXRpb24pKSB7Ci0gICAgICAgIC8vIFRoZSBjb252ZW50aW9uIGluIHRo
ZSBEYXRhIERldGVjdG9ycyBmcmFtZXdvcmsgaXMgdGhhdCB0aGUgZW5kIHBvc2l0aW9uIGlzIHRo
ZSBmaXJzdCBjaGFyYWN0ZXIgTk9UIGluIHRoZSBwaG9uZSBudW1iZXIKLSAgICAgICAgLy8gKHRo
YXQgaXMsIHRoZSBsZW5ndGggb2YgdGhlIHJhbmdlIGlzIHJlbGF0aXZlRW5kUG9zaXRpb24gLSBy
ZWxhdGl2ZVN0YXJ0UG9zaXRpb24pLiBTbyBzdWJ0cmFjdCAxIHRvIGdldCB0aGUgc2FtZQotICAg
ICAgICAvLyBjb252ZW50aW9uIGFzIHRoZSBvbGQgV2ViQ29yZSBwaG9uZSBudW1iZXIgcGFyc2Vy
IChzbyB0aGF0IHRoZSByZXN0IG9mIHRoZSBjb2RlIGlzIHN0aWxsIHZhbGlkIGlmIHdlIHdhbnQg
dG8gZ28gYmFjawotICAgICAgICAvLyB0byB0aGUgb2xkIHBhcnNlcikuCi0gICAgICAgIC0tcmVs
YXRpdmVFbmRQb3NpdGlvbjsKLQotICAgICAgICBBU1NFUlQoc2Nhbm5lclBvc2l0aW9uICsgcmVs
YXRpdmVFbmRQb3NpdGlvbiA8IGxlbmd0aCk7Ci0KLSAgICAgICAgYXV0byBzdWJyYW5nZSA9IHJl
c29sdmVDaGFyYWN0ZXJSYW5nZShyYW5nZSwgQ2hhcmFjdGVyUmFuZ2Uoc2Nhbm5lclBvc2l0aW9u
ICsgcmVsYXRpdmVTdGFydFBvc2l0aW9uLCByZWxhdGl2ZUVuZFBvc2l0aW9uIC0gcmVsYXRpdmVT
dGFydFBvc2l0aW9uICsgMSkpOwotCi0gICAgICAgIG1hcmtlZFJhbmdlcy5hcHBlbmQoY3JlYXRl
TGl2ZVJhbmdlKHN1YnJhbmdlKSk7Ci0gICAgICAgIHJhbmdlLm93bmVyRG9jdW1lbnQoKS5tYXJr
ZXJzKCkuYWRkTWFya2VyKHN1YnJhbmdlLCBEb2N1bWVudE1hcmtlcjo6VGVsZXBob25lTnVtYmVy
KTsKLQotICAgICAgICBzY2FubmVyUG9zaXRpb24gKz0gcmVsYXRpdmVFbmRQb3NpdGlvbiArIDE7
Ci0gICAgfQotfQotCiAjZW5kaWYgLy8gRU5BQkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9O
KSAmJiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAogdm9pZCBFZGl0b3I6OnVwZGF0ZUVkaXRvclVJ
Tm93SWZTY2hlZHVsZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYWQ5ZWRhMjYxOGM5
YTg4MGJlY2JiMWNlNGQ2OGJiNTliODljMjBjMC4uMjNmNWRlMTMwNDA0OThlNTgwY2UxZDFkNDFj
ZTQ3MGQ3ZGFlNDlhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00MTcsNyArNDE3LDcg
QEAgcHVibGljOgogI2VuZGlmCiAgICAgCiAgICAgZW51bSBjbGFzcyBLaWxsUmluZ0luc2VydGlv
bk1vZGUgeyBQcmVwZW5kVGV4dCwgQXBwZW5kVGV4dCB9OwotICAgIHZvaWQgYWRkUmFuZ2VUb0tp
bGxSaW5nKGNvbnN0IFJhbmdlJiwgS2lsbFJpbmdJbnNlcnRpb25Nb2RlKTsKKyAgICB2b2lkIGFk
ZFJhbmdlVG9LaWxsUmluZyhjb25zdCBTaW1wbGVSYW5nZSYsIEtpbGxSaW5nSW5zZXJ0aW9uTW9k
ZSk7CiAgICAgdm9pZCBhZGRUZXh0VG9LaWxsUmluZyhjb25zdCBTdHJpbmcmLCBLaWxsUmluZ0lu
c2VydGlvbk1vZGUpOwogICAgIHZvaWQgc2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wp
OwogCkBAIC01MDYsNyArNTA2LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQg
dG9nZ2xlQXV0b21hdGljU3BlbGxpbmdDb3JyZWN0aW9uKCk7CiAjZW5kaWYKIAotICAgIFJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiB3ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYs
IFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCk7CisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHdlYkNvbnRlbnRGcm9tUGFzdGVib2Fy
ZChQYXN0ZWJvYXJkJiwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFp
blRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0
IEZvbnQqIGZvbnRGb3JTZWxlY3Rpb24oYm9vbCYgaGFzTXVsdGlwbGVGb250cykgY29uc3Q7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZUZvclNlbGVj
dGlvblN0YXJ0KEZyYW1lKiAsIE5vZGUgKiZub2RlVG9SZW1vdmUpOwpAQCAtNTE2LDEyICs1MTYs
MTMgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBzdHJpbmdTZWxlY3Rpb25G
b3JQYXN0ZWJvYXJkKCk7CiAgICAgU3RyaW5nIHN0cmluZ1NlbGVjdGlvbkZvclBhc3RlYm9hcmRX
aXRoSW1hZ2VBbHRUZXh0KCk7CiAgICAgdm9pZCB0YWtlRmluZFN0cmluZ0Zyb21TZWxlY3Rpb24o
KTsKLSNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJl
cGxhY2VTZWxlY3Rpb25XaXRoQXR0cmlidXRlZFN0cmluZyhOU0F0dHJpYnV0ZWRTdHJpbmcgKiwg
TWFpbEJsb2NrcXVvdGVIYW5kbGluZyA9IE1haWxCbG9ja3F1b3RlSGFuZGxpbmc6OlJlc3BlY3RC
bG9ja3F1b3RlKTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkKGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVwbGFjZU5vZGVGcm9tUGFzdGVi
b2FyZChOb2RlKiwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgV0VCQ09SRV9F
WFBPUlQgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YVNlbGVjdGlvbkZvclBhc3RlYm9hcmQoY29u
c3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7Ci0jZW5kaWYgLy8gIVBMQVRGT1JNKElPU19GQU1J
TFkpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXBsYWNlU2VsZWN0aW9uV2l0aEF0dHJpYnV0
ZWRTdHJpbmcoTlNBdHRyaWJ1dGVkU3RyaW5nICosIE1haWxCbG9ja3F1b3RlSGFuZGxpbmcgPSBN
YWlsQmxvY2txdW90ZUhhbmRsaW5nOjpSZXNwZWN0QmxvY2txdW90ZSk7CiAjZW5kaWYKIAogICAg
IGJvb2wgY2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMoKSBjb25zdDsKQEAgLTUzMiw5
ICs1MzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB3cml0ZVNlbGVjdGlvbihQYXN0ZWJvYXJkV3Jp
dGVyRGF0YSYpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJ
T04pICYmICFQTEFURk9STShJT1NfRkFNSUxZKQorI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVS
X0RFVEVDVElPTikgJiYgUExBVEZPUk0oTUFDKQogICAgIHZvaWQgc2NhblNlbGVjdGlvbkZvclRl
bGVwaG9uZU51bWJlcnMoKTsKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFJhbmdlPj4mIGRldGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9kZXRlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlczsgfQorICAgIGNvbnN0IFZlY3RvcjxTaW1wbGVSYW5nZT4mIGRldGVj
dGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzKCkgY29uc3QgeyByZXR1cm4gbV9kZXRlY3RlZFRlbGVw
aG9uZU51bWJlclJhbmdlczsgfQogI2VuZGlmCiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
c3RyaW5nRm9yQ2FuZGlkYXRlUmVxdWVzdCgpIGNvbnN0OwpAQCAtNjQ4LDEyICs2NDksMTEgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fZWRpdG9yVUlVcGRhdGVUaW1lcldhc1RyaWdnZXJlZEJ5RGlj
dGF0aW9uIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRl
IHsgZmFsc2UgfTsKIAotI2lmIEVOQUJMRShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikgJiYg
IVBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgYm9vbCBzaG91bGREZXRlY3RUZWxlcGhvbmVOdW1i
ZXJzKCk7Ci0gICAgdm9pZCBzY2FuUmFuZ2VGb3JUZWxlcGhvbmVOdW1iZXJzKFJhbmdlJiwgY29u
c3QgU3RyaW5nVmlldyYsIFZlY3RvcjxSZWZQdHI8UmFuZ2U+PiYgbWFya2VkUmFuZ2VzKTsKKyNp
ZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKE1BQykKKyAg
ICBib29sIHNob3VsZERldGVjdFRlbGVwaG9uZU51bWJlcnMoKSBjb25zdDsKIAogICAgIFRpbWVy
IG1fdGVsZXBob25lTnVtYmVyRGV0ZWN0aW9uVXBkYXRlVGltZXI7Ci0gICAgVmVjdG9yPFJlZlB0
cjxSYW5nZT4+IG1fZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXM7CisgICAgVmVjdG9yPFNp
bXBsZVJhbmdlPiBtX2RldGVjdGVkVGVsZXBob25lTnVtYmVyUmFuZ2VzOwogI2VuZGlmCiAKICAg
ICBib29sIG1faXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbyB7IGZhbHNlIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRNYW5pcHVsYXRpb25Db250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3Bw
CmluZGV4IDdlNTM0ZjI5NGQ2N2ExM2QyYWM1ZDI1MWI0MDAwN2JkYzgxOTg1MTAuLjdlNDQ0ZDA1
ZDlmODBhOGFkYTYxMjVhMjBkMDhkYzM1Yzc1ZmMzNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dE1hbmlwdWxhdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC01OTYsNyAr
NTk2LDcgQEAgYXV0byBUZXh0TWFuaXB1bGF0aW9uQ29udHJvbGxlcjo6cmVwbGFjZShjb25zdCBN
YW5pcHVsYXRpb25JdGVtRGF0YSYgaXRlbSwgY29uc3QKICAgICAgICAgICAgIGlmICghY29tbW9u
QW5jZXN0b3IpCiAgICAgICAgICAgICAgICAgY29tbW9uQW5jZXN0b3IgPSBwYXJlbnQ7CiAgICAg
ICAgICAgICBlbHNlIGlmICghcGFyZW50LT5pc0Rlc2NlbmRhbnRPZihjb21tb25BbmNlc3Rvci5n
ZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IFJhbmdlOjpjb21tb25B
bmNlc3RvckNvbnRhaW5lcihjb21tb25BbmNlc3Rvci5nZXQoKSwgcGFyZW50LmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpj
b21tb25BbmNlc3RvciwgKnBhcmVudCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGNvbW1vbkFu
Y2VzdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAKaW5kZXggM2NhZmMzYThmYmNiYzljYjU0OTljOWQ4YTc5
ZjE1M2MxNDNkZTY2Yi4uMjIzY2UxY2YxNDU0NzUxZmIzMGRhMjNlMjliYTQzN2E4MGI1YjkyMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCkBAIC0yMDIs
MjYgKzIwMiwxNiBAQCBib29sIFZpc2libGVTZWxlY3Rpb246OmV4cGFuZFVzaW5nR3JhbnVsYXJp
dHkoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQogICAgIHJldHVybiB0cnVlOwogfQogCi1z
dGF0aWMgUmVmUHRyPFJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3QgUG9zaXRpb24mIHBvc2l0
aW9uKQorc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2VhcmNoUmFuZ2UoY29uc3Qg
UG9zaXRpb24mIHBvc2l0aW9uKQogewotICAgIGF1dG8qIG5vZGUgPSBwb3NpdGlvbi5kZXByZWNh
dGVkTm9kZSgpOwotICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
YXV0byogYm91bmRhcnkgPSBkZXByZWNhdGVkRW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChub2Rl
KTsKLSAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1
dG8gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCkpOwotCi0gICAg
YXV0byByZXN1bHQgPSBzZWFyY2hSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKCpib3VuZGFyeSk7
Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgUG9zaXRpb24gc3RhcnQgeyBwb3NpdGlvbi5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQo
KSB9OwotICAgIHJlc3VsdCA9IHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQuY29udGFpbmVy
Tm9kZSgpLCBzdGFydC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7Ci0gICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gc2Vh
cmNoUmFuZ2U7CisgICAgYXV0byBub2RlID0gcG9zaXRpb24uZGVwcmVjYXRlZE5vZGUoKTsKKyAg
ICBhdXRvIHNjb3BlID0gZGVwcmVjYXRlZEVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1lbnQobm9kZSk7
CisgICAgaWYgKCFzY29wZSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICBhdXRv
IHN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnQocG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCkpOworICAgIGlmICghc3RhcnQpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHsgeyBXVEZNb3ZlKCpzdGFydCksIG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2Rl
Q29udGVudHMoKnNjb3BlKSB9IH07CiB9CiAKIGJvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNBbGwo
RWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIHJ1bGUpIGNvbnN0CkBAIC0yMzEsNyArMjIxLDcg
QEAgYm9vbCBWaXNpYmxlU2VsZWN0aW9uOjppc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1
bGUgcnVsZSkgY29uc3QKIAogdm9pZCBWaXNpYmxlU2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1do
aXRlc3BhY2UoKQogewotICAgIFJlZlB0cjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBtYWtlU2VhcmNo
UmFuZ2UobV9lbmQpOworICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2VhcmNoUmFuZ2UobV9l
bmQpOwogICAgIGlmICghc2VhcmNoUmFuZ2UpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9XZWJDb250ZW50UmVhZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaAppbmRleCA2ODNlMjQ0MzQ5YzkwNWE2ODI5
OTczNDBlODM1ZTZlZGE4YTZmZTYzLi41NDU0MWYwYTcyYmIwMzgzZjcxYzI5NWM0MDJlYTkzYjFh
MjhlZTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFk
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1dlYkNvbnRlbnRSZWFkZXIuaApAQCAt
MjgsMTMgKzI4LDEyIEBACiAjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUg
IkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCisj
aW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBBcmNoaXZlUmVzb3VyY2U7Ci1jbGFzcyBCbG9iOwogCiBjbGFz
cyBGcmFtZVdlYkNvbnRlbnRSZWFkZXIgOiBwdWJsaWMgUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFk
ZXIgewogcHVibGljOgpAQCAtNTIsMTMgKzUxLDEzIEBAIHByb3RlY3RlZDoKIAogY2xhc3MgV2Vi
Q29udGVudFJlYWRlciBmaW5hbCA6IHB1YmxpYyBGcmFtZVdlYkNvbnRlbnRSZWFkZXIgewogcHVi
bGljOgotICAgIFJhbmdlJiBjb250ZXh0OworICAgIGNvbnN0IFNpbXBsZVJhbmdlIGNvbnRleHQ7
CiAgICAgY29uc3QgYm9vbCBhbGxvd1BsYWluVGV4dDsKIAogICAgIFJlZlB0cjxEb2N1bWVudEZy
YWdtZW50PiBmcmFnbWVudDsKICAgICBib29sIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQ7CiAK
LSAgICBXZWJDb250ZW50UmVhZGVyKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQsIGJvb2wg
YWxsb3dQbGFpblRleHQpCisgICAgV2ViQ29udGVudFJlYWRlcihGcmFtZSYgZnJhbWUsIGNvbnN0
IFNpbXBsZVJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0KQogICAgICAgICA6IEZy
YW1lV2ViQ29udGVudFJlYWRlcihmcmFtZSkKICAgICAgICAgLCBjb250ZXh0KGNvbnRleHQpCiAg
ICAgICAgICwgYWxsb3dQbGFpblRleHQoYWxsb3dQbGFpblRleHQpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5oCmluZGV4IDFkMTEyZGM2OTgzOTgwYmZkNmY2
Yjk3ZGY3ODAwZmJlZDYzMzgxNzUuLjM0YTM0NWM3NjMwY2MzOTYzNzc2ZGFhMTg3Y2ZlYTkzZDVk
NDc2M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVj
dGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI3LDkgKzI3LDkgQEAKIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKIAotI2ltcG9ydCA8
d3RmL1JlZlB0ci5oPgorI2ltcG9ydCAiRmxvYXRSZWN0LmgiCisjaW1wb3J0ICJTaW1wbGVSYW5n
ZS5oIgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgotI2ltcG9ydCA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKIE9CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OwogT0JKQ19DTEFTUyBOU0FycmF5
OwpAQCAtMzcsMzAgKzM3LDMyIEBAIE9CSkNfQ0xBU1MgTlNEaWN0aW9uYXJ5OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZs
b2F0UmVjdDsKIGNsYXNzIEhpdFRlc3RSZXN1bHQ7Ci1jbGFzcyBSYW5nZTsKIAotZW51bSBEYXRh
RGV0ZWN0b3JUeXBlcyB7Ci0gICAgRGF0YURldGVjdG9yVHlwZU5vbmUgPSAwLAotICAgIERhdGFE
ZXRlY3RvclR5cGVQaG9uZU51bWJlciA9IDEgPDwgMCwKLSAgICBEYXRhRGV0ZWN0b3JUeXBlTGlu
ayA9IDEgPDwgMSwKLSAgICBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcyA9IDEgPDwgMiwKLSAgICBE
YXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCA9IDEgPDwgMywKLSAgICBEYXRhRGV0ZWN0b3JU
eXBlVHJhY2tpbmdOdW1iZXIgPSAxIDw8IDQsCi0gICAgRGF0YURldGVjdG9yVHlwZUZsaWdodE51
bWJlciA9IDEgPDwgNSwKLSAgICBEYXRhRGV0ZWN0b3JUeXBlTG9va3VwU3VnZ2VzdGlvbiA9IDEg
PDwgNiwKLSAgICBEYXRhRGV0ZWN0b3JUeXBlQWxsID0gVUxPTkdfTUFYCisvLyBGSVhNRTogV291
bGQgYmUgYmV0dGVyIHRvIHVzZSBhbiBPcHRpb25TZXQgYW5kIHBlcmhhcHMgdG8gdXNlIHVpbnQ4
X3QgaW5zdGVhZCBvZiB1aW50MzJfdC4KK2VudW0gY2xhc3MgRGF0YURldGVjdG9yVHlwZXMgOiB1
aW50MzJfdCB7CisgICAgTm9uZSA9IDAsCisgICAgUGhvbmVOdW1iZXIgPSAxIDw8IDAsCisgICAg
TGluayA9IDEgPDwgMSwKKyAgICBBZGRyZXNzID0gMSA8PCAyLAorICAgIENhbGVuZGFyRXZlbnQg
PSAxIDw8IDMsCisgICAgVHJhY2tpbmdOdW1iZXIgPSAxIDw8IDQsCisgICAgRmxpZ2h0TnVtYmVy
ID0gMSA8PCA1LAorICAgIExvb2t1cFN1Z2dlc3Rpb24gPSAxIDw8IDYsCit9OworCitzdHJ1Y3Qg
RGV0ZWN0ZWRJdGVtIHsKKyAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250
ZXh0OworICAgIEZsb2F0UmVjdCBib3VuZGluZ0JveDsKKyAgICBTaW1wbGVSYW5nZSByYW5nZTsK
IH07CiAKIGNsYXNzIERhdGFEZXRlY3Rpb24gewogcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gZGV0
ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3QgSGl0VGVzdFJlc3VsdCYsIEZsb2F0UmVj
dCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJlZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJh
bmdlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgT3B0aW9uYWw8RGV0ZWN0ZWRJdGVtPiBk
ZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRUZXN0UmVzdWx0Jik7CiAjZW5k
aWYKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTlNBcnJheSAqZGV0ZWN0Q29udGVudEluUmFu
Z2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcywgTlNEaWN0
aW9uYXJ5ICpjb250ZXh0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTlNBcnJheSAqZGV0
ZWN0Q29udGVudEluUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBEYXRhRGV0ZWN0b3JUeXBlcywg
TlNEaWN0aW9uYXJ5ICpjb250ZXh0KTsKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdm9pZCBy
ZW1vdmVEYXRhRGV0ZWN0ZWRMaW5rc0luRG9jdW1lbnQoRG9jdW1lbnQmKTsKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBib29sIGNhbkJlUHJlc2Vu
dGVkQnlEYXRhRGV0ZWN0b3JzKGNvbnN0IFVSTCYpOwpAQCAtNzcsNCArNzksMyBAQCBwdWJsaWM6
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggNDM5YzAzM2NlMjJhMzg1MTdmY2I3
NWI3MDA2YjU2ZjYzZjc2ZjJjZC4uMmZiZWY2MTI0Mjc4M2VmYjNiMDgyMDUwYTZkMGRkODZjOTUy
NDRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAxNyBBcHBsZSwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIwIEFw
cGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM4LDcgKzM4LDYgQEAKICNpbXBvcnQgIkhUTUxOYW1lcy5oIgogI2ltcG9ydCAi
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaCIKICNpbXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIK
LSNpbXBvcnQgIk5vZGUuaCIKICNpbXBvcnQgIk5vZGVMaXN0LmgiCiAjaW1wb3J0ICJOb2RlVHJh
dmVyc2FsLmgiCiAjaW1wb3J0ICJSYW5nZS5oIgpAQCAtNTYsOCArNTUsNyBAQAogI2ltcG9ydCAi
RGF0YURldGVjdG9yc0NvcmVTb2Z0TGluay5oIgogCiAjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMAotdGVtcGxhdGUgPD4KLXN0cnVj
dCBXVEY6OkNGVHlwZVRyYWl0PEREUmVzdWx0UmVmPiB7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBXVEY6
OkNGVHlwZVRyYWl0PEREUmVzdWx0UmVmPiB7CiAgICAgc3RhdGljIGlubGluZSBDRlR5cGVJRCB0
eXBlSUQodm9pZCkgeyByZXR1cm4gRERSZXN1bHRHZXRDRlR5cGVJRCgpOyB9CiB9OwogI2VuZGlm
CkBAIC02OCwyNSArNjYsMjQgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogI2lmIFBM
QVRGT1JNKE1BQykKIAotc3RhdGljIFJldGFpblB0cjxEREFjdGlvbkNvbnRleHQ+IGRldGVjdEl0
ZW1BdFBvc2l0aW9uV2l0aFJhbmdlKFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbiwgUmVmUHRyPFJh
bmdlPiBjb250ZXh0UmFuZ2UsIEZsb2F0UmVjdCYgZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3gsIFJl
ZlB0cjxSYW5nZT4mIGRldGVjdGVkRGF0YVJhbmdlKQorc3RhdGljIE9wdGlvbmFsPERldGVjdGVk
SXRlbT4gZGV0ZWN0SXRlbShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBjb25zdCBT
aW1wbGVSYW5nZSYgY29udGV4dFJhbmdlKQogewotICAgIGF1dG8gc3RhcnQgPSBjb250ZXh0UmFu
Z2UtPnN0YXJ0UG9zaXRpb24oKTsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgcG9zaXRpb24u
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7Ci0gICAgU3RyaW5nIGZ1bGxQbGFpblRleHRT
dHJpbmcgPSBwbGFpblRleHQoKmNvbnRleHRSYW5nZSk7Ci0gICAgQ0ZJbmRleCBoaXRMb2NhdGlv
biA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0KSwgKm1ha2VCb3Vu
ZGFyeVBvaW50KHBvc2l0aW9uKSB9KTsKKyAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgU3RyaW5nIGZ1bGxQbGFpblRleHRTdHJpbmcg
PSBwbGFpblRleHQoY29udGV4dFJhbmdlKTsKKyAgICBDRkluZGV4IGhpdExvY2F0aW9uID0gY2hh
cmFjdGVyQ291bnQoeyBjb250ZXh0UmFuZ2Uuc3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwb3Np
dGlvbikgfSk7CiAKICAgICBhdXRvIHNjYW5uZXIgPSBhZG9wdENGKEREU2Nhbm5lckNyZWF0ZShE
RFNjYW5uZXJUeXBlU3RhbmRhcmQsIDAsIG51bGxwdHIpKTsKICAgICBhdXRvIHNjYW5RdWVyeSA9
IGFkb3B0Q0YoRERTY2FuUXVlcnlDcmVhdGVGcm9tU3RyaW5nKGtDRkFsbG9jYXRvckRlZmF1bHQs
IGZ1bGxQbGFpblRleHRTdHJpbmcuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgQ0ZSYW5nZU1ha2Uo
MCwgZnVsbFBsYWluVGV4dFN0cmluZy5sZW5ndGgoKSkpKTsKIAogICAgIGlmICghRERTY2FubmVy
U2NhblF1ZXJ5KHNjYW5uZXIuZ2V0KCksIHNjYW5RdWVyeS5nZXQoKSkpCi0gICAgICAgIHJldHVy
biBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIHJlc3VsdHMg
PSBhZG9wdENGKEREU2Nhbm5lckNvcHlSZXN1bHRzV2l0aE9wdGlvbnMoc2Nhbm5lci5nZXQoKSwg
RERTY2FubmVyQ29weVJlc3VsdHNPcHRpb25zTm9PdmVybGFwKSk7CiAKICAgICAvLyBGaW5kIHRo
ZSBERFJlc3VsdFJlZiB0aGF0IGludGVyc2VjdHMgdGhlIGhpdFRlc3RSZXN1bHQncyBWaXNpYmxl
UG9zaXRpb24uCiAgICAgRERSZXN1bHRSZWYgbWFpblJlc3VsdCA9IG51bGxwdHI7Ci0gICAgUmVm
UHRyPFJhbmdlPiBtYWluUmVzdWx0UmFuZ2U7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1h
aW5SZXN1bHRSYW5nZTsKICAgICBDRkluZGV4IHJlc3VsdENvdW50ID0gQ0ZBcnJheUdldENvdW50
KHJlc3VsdHMuZ2V0KCkpOwogICAgIGZvciAoQ0ZJbmRleCBpID0gMDsgaSA8IHJlc3VsdENvdW50
OyBpKyspIHsKICNpZiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTQwMApA
QCAtOTcsMzkgKzk0LDQwIEBAIHN0YXRpYyBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBkZXRl
Y3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShWaXNpYmxlUG9zaXRpb24KICAgICAgICAgQ0ZSYW5n
ZSByZXN1bHRSYW5nZUluQ29udGV4dCA9IEREUmVzdWx0R2V0UmFuZ2UocmVzdWx0KTsKICAgICAg
ICAgaWYgKGhpdExvY2F0aW9uID49IHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uICYmICho
aXRMb2NhdGlvbiAtIHJlc3VsdFJhbmdlSW5Db250ZXh0LmxvY2F0aW9uKSA8IHJlc3VsdFJhbmdl
SW5Db250ZXh0Lmxlbmd0aCkgewogICAgICAgICAgICAgbWFpblJlc3VsdCA9IHJlc3VsdDsKLSAg
ICAgICAgICAgIG1haW5SZXN1bHRSYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFj
dGVyUmFuZ2UoKmNvbnRleHRSYW5nZSwgcmVzdWx0UmFuZ2VJbkNvbnRleHQpKTsKKyAgICAgICAg
ICAgIG1haW5SZXN1bHRSYW5nZSA9IHJlc29sdmVDaGFyYWN0ZXJSYW5nZShjb250ZXh0UmFuZ2Us
IHJlc3VsdFJhbmdlSW5Db250ZXh0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKCFtYWluUmVzdWx0KQotICAgICAgICByZXR1cm4gbmlsOworICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCi0gICAgYXV0byB2aWV3ID0gbWFpblJlc3VsdFJhbmdl
LT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5n
ZS0+c3RhcnQuZG9jdW1lbnQoKS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgYXV0byBhY3Rpb25D
b250ZXh0ID0gYWRvcHROUyhbYWxsb2NEREFjdGlvbkNvbnRleHRJbnN0YW5jZSgpIGluaXRdKTsK
ICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbGxSZXN1bHRzOkBbIChfX2JyaWRnZSBpZCltYWluUmVz
dWx0IF1dOwogICAgIFthY3Rpb25Db250ZXh0IHNldE1haW5SZXN1bHQ6bWFpblJlc3VsdF07CiAK
LSAgICBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5j
bG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7Ci0gICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBt
YWluUmVzdWx0UmFuZ2U7Ci0KLSAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKKyAgICByZXR1cm4g
eyB7CisgICAgICAgIFdURk1vdmUoYWN0aW9uQ29udGV4dCksCisgICAgICAgIHZpZXctPmNvbnRl
bnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSksCisgICAgICAgICpt
YWluUmVzdWx0UmFuZ2UsCisgICAgfSB9OwogfQogCi1SZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0
PiBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJlc3VsdChjb25zdCBIaXRU
ZXN0UmVzdWx0JiBoaXRUZXN0UmVzdWx0LCBGbG9hdFJlY3QmIGRldGVjdGVkRGF0YUJvdW5kaW5n
Qm94LCBSZWZQdHI8UmFuZ2U+JiBkZXRlY3RlZERhdGFSYW5nZSkKK09wdGlvbmFsPERldGVjdGVk
SXRlbT4gRGF0YURldGVjdGlvbjo6ZGV0ZWN0SXRlbUFyb3VuZEhpdFRlc3RSZXN1bHQoY29uc3Qg
SGl0VGVzdFJlc3VsdCYgaGl0VGVzdFJlc3VsdCkKIHsKICAgICBpZiAoIURhdGFEZXRlY3RvcnNM
aWJyYXJ5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgTm9kZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCk7CiAgICAgaWYgKCFub2RlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS0+cmVuZGVyZXIo
KTsKICAgICBpZiAoIXJlbmRlcmVyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbjsKICAg
ICBSZWZQdHI8UmFuZ2U+IGNvbnRleHRSYW5nZTsKQEAgLTE0MCwyNyArMTM4LDI2IEBAIFJldGFp
blB0cjxEREFjdGlvbkNvbnRleHQ+IERhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRU
ZXN0UmVzdWx0KGNvbnN0IEhpCiAgICAgICAgICAgICBwb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShub2RlKTsKIAogICAgICAgICBjb250ZXh0UmFuZ2UgPSByYW5nZUV4cGFu
ZGVkQXJvdW5kUG9zaXRpb25CeUNoYXJhY3RlcnMocG9zaXRpb24sIDI1MCk7Ci0gICAgICAgIGlm
ICghY29udGV4dFJhbmdlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgRnJhbWUqIGZyYW1lID0gbm9kZS0+ZG9jdW1lbnQoKS5mcmFtZSgpOwogICAg
ICAgICBpZiAoIWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgICAgIEludFBvaW50IGZyYW1lUG9pbnQgPSBo
aXRUZXN0UmVzdWx0LnJvdW5kZWRQb2ludEluSW5uZXJOb2RlRnJhbWUoKTsKICAgICAgICAgaWYg
KCFmcmFtZS0+cmFuZ2VGb3JQb2ludChmcmFtZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBWaXNp
YmxlUG9zaXRpb24gcG9zaXRpb24gPSBmcmFtZS0+dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQoZnJh
bWVQb2ludCk7CisgICAgICAgIHBvc2l0aW9uID0gZnJhbWUtPnZpc2libGVQb3NpdGlvbkZvclBv
aW50KGZyYW1lUG9pbnQpOwogICAgICAgICBpZiAocG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICAgICAgY29udGV4dFJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBv
c2l0aW9uLCBMaW5lR3JhbnVsYXJpdHksIERpcmVjdGlvbkZvcndhcmQpOwotICAgICAgICBpZiAo
IWNvbnRleHRSYW5nZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAg
IHJldHVybiBkZXRlY3RJdGVtQXRQb3NpdGlvbldpdGhSYW5nZShwb3NpdGlvbiwgY29udGV4dFJh
bmdlLCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0ZWN0ZWREYXRhUmFuZ2UpOworICAgIGlm
ICghY29udGV4dFJhbmdlKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0
dXJuIGRldGVjdEl0ZW0ocG9zaXRpb24sICpjb250ZXh0UmFuZ2UpOwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oTUFDKQpAQCAtMjIzLDI1ICsyMjAsMzAgQEAgc3RhdGljIEJPT0wgcmVzdWx0SXNV
UkwoRERSZXN1bHRSZWYgcmVzdWx0KQogICAgIHJldHVybiBbdXJsVHlwZXMgY29udGFpbnNPYmpl
Y3Q6KE5TU3RyaW5nICopc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBl
KHJlc3VsdCldOwogfQogCisvLyBQb29yIG1hbidzIE9wdGlvblNldC4KK3N0YXRpYyBib29sIGNv
bnRhaW5zKERhdGFEZXRlY3RvclR5cGVzIHR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlcyBzaW5nbGVU
eXBlKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDx1aW50MzJfdD4odHlwZXMpICYgc3RhdGlj
X2Nhc3Q8dWludDMyX3Q+KHNpbmdsZVR5cGUpOworfQorCiBzdGF0aWMgTlNTdHJpbmcgKmNvbnN0
cnVjdFVSTFN0cmluZ0ZvclJlc3VsdChERFJlc3VsdFJlZiBjdXJyZW50UmVzdWx0LCBOU1N0cmlu
ZyAqcmVzdWx0SWRlbnRpZmllciwgTlNEYXRlICpyZWZlcmVuY2VEYXRlLCBOU1RpbWVab25lICpy
ZWZlcmVuY2VUaW1lWm9uZSwgRGF0YURldGVjdG9yVHlwZXMgZGV0ZWN0aW9uVHlwZXMpCiB7CiAg
ICAgaWYgKCFzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEhhc1Byb3BlcnRpZXMo
Y3VycmVudFJlc3VsdCwgRERSZXN1bHRQcm9wZXJ0eVBhc3NpdmVEaXNwbGF5KSkKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKLSAgICBERFVSTGlmaWVyUGhvbmVOdW1iZXJEZXRlY3Rpb25UeXBl
cyBwaG9uZVR5cGVzID0gKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZVBob25lTnVt
YmVyKSA/IEREVVJMaWZpZXJQaG9uZU51bWJlckRldGVjdGlvblJlZ3VsYXIgOiBERFVSTGlmaWVy
UGhvbmVOdW1iZXJEZXRlY3Rpb25Ob25lOwotICAgIEREUmVzdWx0Q2F0ZWdvcnkgY2F0ZWdvcnkg
PSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldENhdGVnb3J5KGN1cnJlbnRS
ZXN1bHQpOwotICAgIENGU3RyaW5nUmVmIHR5cGUgPSBzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29y
ZV9ERFJlc3VsdEdldFR5cGUoY3VycmVudFJlc3VsdCk7Ci0gICAgCi0gICAgaWYgKCgoZGV0ZWN0
aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQWRkcmVzcykgJiYgKEREUmVzdWx0Q2F0ZWdvcnlB
ZGRyZXNzID09IGNhdGVnb3J5KSkKLSAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFE
ZXRlY3RvclR5cGVUcmFja2luZ051bWJlcikgJiYgKENGU3RyaW5nQ29tcGFyZShnZXRfRGF0YURl
dGVjdG9yc0NvcmVfRERCaW5kZXJUcmFja2luZ051bWJlcktleSgpLCB0eXBlLCAwKSA9PSBrQ0ZD
b21wYXJlRXF1YWxUbykpCi0gICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0
b3JUeXBlRmxpZ2h0TnVtYmVyKSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGdldF9EYXRhRGV0ZWN0b3Jz
Q29yZV9EREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5KCksIHR5cGUsIDApID09IGtDRkNvbXBh
cmVFcXVhbFRvKSkKLSAgICAgICAgfHwgKChkZXRlY3Rpb25UeXBlcyAmIERhdGFEZXRlY3RvclR5
cGVMb29rdXBTdWdnZXN0aW9uKSAmJiAoQ0ZTdHJpbmdDb21wYXJlKGdldF9EYXRhRGV0ZWN0b3Jz
Q29yZV9EREJpbmRlclBhcnNlY1NvdXJjZUtleSgpLCB0eXBlLCAwKSA9PSBrQ0ZDb21wYXJlRXF1
YWxUbykpCi0gICAgICAgIHx8ICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlUGhv
bmVOdW1iZXIpICYmIChERFJlc3VsdENhdGVnb3J5UGhvbmVOdW1iZXIgPT0gY2F0ZWdvcnkpKQot
ICAgICAgICB8fCAoKGRldGVjdGlvblR5cGVzICYgRGF0YURldGVjdG9yVHlwZUxpbmspICYmIHJl
c3VsdElzVVJMKGN1cnJlbnRSZXN1bHQpKSkgewotICAgICAgICAKKworICAgIGF1dG8gcGhvbmVU
eXBlcyA9IGNvbnRhaW5zKGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6UGhvbmVO
dW1iZXIpID8gRERVUkxpZmllclBob25lTnVtYmVyRGV0ZWN0aW9uUmVndWxhciA6IEREVVJMaWZp
ZXJQaG9uZU51bWJlckRldGVjdGlvbk5vbmU7CisgICAgYXV0byBjYXRlZ29yeSA9IHNvZnRMaW5r
X0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0Q2F0ZWdvcnkoY3VycmVudFJlc3VsdCk7Cisg
ICAgYXV0byB0eXBlID0gc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRHZXRUeXBl
KGN1cnJlbnRSZXN1bHQpOworCisgICAgaWYgKChjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0
YURldGVjdG9yVHlwZXM6OkFkZHJlc3MpICYmIEREUmVzdWx0Q2F0ZWdvcnlBZGRyZXNzID09IGNh
dGVnb3J5KQorICAgICAgICB8fCAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3Rv
clR5cGVzOjpUcmFja2luZ051bWJlcikgJiYgQ0ZFcXVhbChnZXRfRGF0YURldGVjdG9yc0NvcmVf
RERCaW5kZXJUcmFja2luZ051bWJlcktleSgpLCB0eXBlKSkKKyAgICAgICAgfHwgKGNvbnRhaW5z
KGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6RmxpZ2h0TnVtYmVyKSAmJiBDRkVx
dWFsKGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9EREJpbmRlckZsaWdodEluZm9ybWF0aW9uS2V5KCks
IHR5cGUpKQorICAgICAgICB8fCAoY29udGFpbnMoZGV0ZWN0aW9uVHlwZXMsIERhdGFEZXRlY3Rv
clR5cGVzOjpMb29rdXBTdWdnZXN0aW9uKSAmJiBDRkVxdWFsKGdldF9EYXRhRGV0ZWN0b3JzQ29y
ZV9EREJpbmRlclBhcnNlY1NvdXJjZUtleSgpLCB0eXBlKSkKKyAgICAgICAgfHwgKGNvbnRhaW5z
KGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6UGhvbmVOdW1iZXIpICYmIEREUmVz
dWx0Q2F0ZWdvcnlQaG9uZU51bWJlciA9PSBjYXRlZ29yeSkKKyAgICAgICAgfHwgKGNvbnRhaW5z
KGRldGVjdGlvblR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6TGluaykgJiYgcmVzdWx0SXNVUkwo
Y3VycmVudFJlc3VsdCkpKSB7CiAgICAgICAgIHJldHVybiBzb2Z0TGlua19EYXRhRGV0ZWN0b3Jz
Q29yZV9ERFVSTFN0cmluZ0ZvclJlc3VsdChjdXJyZW50UmVzdWx0LCByZXN1bHRJZGVudGlmaWVy
LCBwaG9uZVR5cGVzLCByZWZlcmVuY2VEYXRlLCByZWZlcmVuY2VUaW1lWm9uZSk7CiAgICAgfQot
ICAgIGlmICgoZGV0ZWN0aW9uVHlwZXMgJiBEYXRhRGV0ZWN0b3JUeXBlQ2FsZW5kYXJFdmVudCkg
JiYgKEREUmVzdWx0Q2F0ZWdvcnlDYWxlbmRhckV2ZW50ID09IGNhdGVnb3J5KSkgeworICAgIGlm
IChjb250YWlucyhkZXRlY3Rpb25UeXBlcywgRGF0YURldGVjdG9yVHlwZXM6OkNhbGVuZGFyRXZl
bnQpICYmIEREUmVzdWx0Q2F0ZWdvcnlDYWxlbmRhckV2ZW50ID09IGNhdGVnb3J5KSB7CiAgICAg
ICAgIGlmICghc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERSZXN1bHRJc1Bhc3REYXRlKGN1
cnJlbnRSZXN1bHQsIChDRkRhdGVSZWYpcmVmZXJlbmNlRGF0ZSwgKENGVGltZVpvbmVSZWYpcmVm
ZXJlbmNlVGltZVpvbmUpKQogICAgICAgICAgICAgcmV0dXJuIHNvZnRMaW5rX0RhdGFEZXRlY3Rv
cnNDb3JlX0REVVJMU3RyaW5nRm9yUmVzdWx0KGN1cnJlbnRSZXN1bHQsIHJlc3VsdElkZW50aWZp
ZXIsIHBob25lVHlwZXMsIHJlZmVyZW5jZURhdGUsIHJlZmVyZW5jZVRpbWVab25lKTsKICAgICB9
CkBAIC00NDMsMjggKzQ0NSwyNCBAQCB2b2lkIERhdGFEZXRlY3Rpb246OnJlbW92ZURhdGFEZXRl
Y3RlZExpbmtzSW5Eb2N1bWVudChEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgICAgIHJlbW92ZVJl
c3VsdExpbmtzRnJvbUFuY2hvcihhbmNob3IuZ2V0KCkpOwogfQogCi1OU0FycmF5ICpEYXRhRGV0
ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2Us
IERhdGFEZXRlY3RvclR5cGVzIHR5cGVzLCBOU0RpY3Rpb25hcnkgKmNvbnRleHQpCitOU0FycmF5
ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
Y29udGV4dFJhbmdlLCBEYXRhRGV0ZWN0b3JUeXBlcyB0eXBlcywgTlNEaWN0aW9uYXJ5ICpjb250
ZXh0KQogewotICAgIGlmICghY29udGV4dFJhbmdlKQotICAgICAgICByZXR1cm4gbmlsOwotCi0g
ICAgUmV0YWluUHRyPEREU2Nhbm5lclJlZj4gc2Nhbm5lciA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0
YURldGVjdG9yc0NvcmVfRERTY2FubmVyQ3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwg
bnVsbHB0cikpOwotICAgIFJldGFpblB0cjxERFNjYW5RdWVyeVJlZj4gc2NhblF1ZXJ5ID0gYWRv
cHRDRihzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5RdWVyeUNyZWF0ZShOVUxMKSk7
Ci0gICAgYnVpbGRRdWVyeShzY2FuUXVlcnkuZ2V0KCksICpjb250ZXh0UmFuZ2UpOworICAgIGF1
dG8gc2Nhbm5lciA9IGFkb3B0Q0Yoc29mdExpbmtfRGF0YURldGVjdG9yc0NvcmVfRERTY2FubmVy
Q3JlYXRlKEREU2Nhbm5lclR5cGVTdGFuZGFyZCwgMCwgbnVsbHB0cikpOworICAgIGF1dG8gc2Nh
blF1ZXJ5ID0gYWRvcHRDRihzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5RdWVyeUNy
ZWF0ZShOVUxMKSk7CisgICAgYnVpbGRRdWVyeShzY2FuUXVlcnkuZ2V0KCksIGNvbnRleHRSYW5n
ZSk7CiAgICAgCi0gICAgaWYgKHR5cGVzICYgRGF0YURldGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rp
b24pCisgICAgaWYgKGNvbnRhaW5zKHR5cGVzLCBEYXRhRGV0ZWN0b3JUeXBlczo6TG9va3VwU3Vn
Z2VzdGlvbikpCiAgICAgICAgIHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lckVu
YWJsZU9wdGlvbmFsU291cmNlKHNjYW5uZXIuZ2V0KCksIEREU2Nhbm5lclNvdXJjZVNwb3RsaWdo
dCwgdHJ1ZSk7CiAKICAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFkZCBhIHRpbWVvdXQgdG8gdGhp
cyBjYWxsIHRvIG1ha2Ugc3VyZSBpdCBkb2Vzbid0IHRha2UgdG9vIG11Y2ggdGltZS4KICAgICBp
ZiAoIXNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3JlX0REU2Nhbm5lclNjYW5RdWVyeShzY2FubmVy
LmdldCgpLCBzY2FuUXVlcnkuZ2V0KCkpKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmV0
YWluUHRyPENGQXJyYXlSZWY+IHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihzb2Z0TGlua19EYXRh
RGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0
KCksIGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQ
YXNzaXZlVXNlKCkgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVy
ZXMpKTsKKyAgICBhdXRvIHNjYW5uZXJSZXN1bHRzID0gYWRvcHRDRihzb2Z0TGlua19EYXRhRGV0
ZWN0b3JzQ29yZV9ERFNjYW5uZXJDb3B5UmVzdWx0c1dpdGhPcHRpb25zKHNjYW5uZXIuZ2V0KCks
IGdldF9EYXRhRGV0ZWN0b3JzQ29yZV9ERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNGb3JQYXNz
aXZlVXNlKCkgfCBERFNjYW5uZXJDb3B5UmVzdWx0c09wdGlvbnNDb2FsZXNjZVNpZ25hdHVyZXMp
KTsKICAgICBpZiAoIXNjYW5uZXJSZXN1bHRzKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAg
Q0ZJbmRleCByZXN1bHRDb3VudCA9IENGQXJyYXlHZXRDb3VudChzY2FubmVyUmVzdWx0cy5nZXQo
KSk7Ci0gICAgaWYgKCFyZXN1bHRDb3VudCkKKyAgICBpZiAoIUNGQXJyYXlHZXRDb3VudChzY2Fu
bmVyUmVzdWx0cy5nZXQoKSkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBWZWN0b3I8UmV0
YWluUHRyPEREUmVzdWx0UmVmPj4gYWxsUmVzdWx0czsKQEAgLTQ3Niw3ICs0NzQsNyBAQCBOU0Fy
cmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShSZWZQdHI8UmFuZ2U+JiBj
b250ZXh0UmFuZ2UsIERhdGFEZQogICAgIGZvciAoaWQgcmVzdWx0T2JqZWN0IGluIChOU0FycmF5
ICopc2Nhbm5lclJlc3VsdHMuZ2V0KCkpIHsKICAgICAgICAgRERSZXN1bHRSZWYgcmVzdWx0ID0g
KEREUmVzdWx0UmVmKXJlc3VsdE9iamVjdDsKICAgICAgICAgTlNJbmRleFBhdGggKmluZGV4UGF0
aCA9IFtOU0luZGV4UGF0aCBpbmRleFBhdGhXaXRoSW5kZXg6Y3VycmVudFRvcExldmVsSW5kZXhd
OwotICAgICAgICBpZiAoQ0ZTdHJpbmdDb21wYXJlKHNvZnRMaW5rX0RhdGFEZXRlY3RvcnNDb3Jl
X0REUmVzdWx0R2V0VHlwZShyZXN1bHQpLCBnZXRfRGF0YURldGVjdG9yc0NvcmVfRERCaW5kZXJT
aWduYXR1cmVCbG9ja0tleSgpLCAwKSA9PSBrQ0ZDb21wYXJlRXF1YWxUbykgeworICAgICAgICBp
ZiAoQ0ZFcXVhbChzb2Z0TGlua19EYXRhRGV0ZWN0b3JzQ29yZV9ERFJlc3VsdEdldFR5cGUocmVz
dWx0KSwgZ2V0X0RhdGFEZXRlY3RvcnNDb3JlX0REQmluZGVyU2lnbmF0dXJlQmxvY2tLZXkoKSkp
IHsKICAgICAgICAgICAgIE5TQXJyYXkgKnN1YnJlc3VsdHMgPSAoTlNBcnJheSAqKXNvZnRMaW5r
X0RhdGFEZXRlY3RvcnNDb3JlX0REUmVzdWx0R2V0U3ViUmVzdWx0cyhyZXN1bHQpOwogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBmb3IgKE5TVUludGVnZXIgc3ViUmVzdWx0SW5kZXggPSAwIDsg
c3ViUmVzdWx0SW5kZXggPCBbc3VicmVzdWx0cyBjb3VudF0gOyBzdWJSZXN1bHRJbmRleCsrKSB7
CkBAIC00OTEsNyArNDg5LDcgQEAgTlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVu
dEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJhbmdlLCBEYXRhRGUKICAgICB9CiAKICAg
ICBWZWN0b3I8VmVjdG9yPFNpbXBsZVJhbmdlPj4gYWxsUmVzdWx0UmFuZ2VzOwotICAgIFRleHRJ
dGVyYXRvciBpdGVyYXRvcigqY29udGV4dFJhbmdlKTsKKyAgICBUZXh0SXRlcmF0b3IgaXRlcmF0
b3IoY29udGV4dFJhbmdlKTsKICAgICBDRkluZGV4IGl0ZXJhdG9yQ291bnQgPSAwOwogCiAgICAg
Ly8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBhcnJheSBvZiB0aGUgZXhwYW5kZWQgcmVzdWx0cyB0byBj
cmVhdGUgYSB2ZWN0b3Igb2YgUmFuZ2Ugb2JqZWN0cyB0aGF0IGluZGljYXRlCkBAIC01MzYsMTYg
KzUzNCwxNSBAQCBOU0FycmF5ICpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShS
ZWZQdHI8UmFuZ2U+JiBjb250ZXh0UmFuZ2UsIERhdGFEZQogCiAgICAgYXV0byB0eiA9IGFkb3B0
Q0YoQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCkpOwogICAgIE5TRGF0ZSAqcmVmZXJlbmNlRGF0ZSA9
IFtjb250ZXh0IG9iamVjdEZvcktleTpnZXRrRGF0YURldGVjdG9yc1JlZmVyZW5jZURhdGVLZXko
KV0gPzogW05TRGF0ZSBkYXRlXTsKLSAgICBUZXh0KiBsYXN0VGV4dE5vZGVUb1VwZGF0ZSA9IG51
bGxwdHI7CisgICAgUmVmUHRyPFRleHQ+IGxhc3RUZXh0Tm9kZVRvVXBkYXRlOwogICAgIFN0cmlu
ZyBsYXN0Tm9kZUNvbnRlbnQ7Ci0gICAgc2l6ZV90IGNvbnRlbnRPZmZzZXQgPSAwOworICAgIHVu
c2lnbmVkIGNvbnRlbnRPZmZzZXQgPSAwOwogICAgIEREUXVlcnlPZmZzZXQgbGFzdE1vZGlmaWVk
UXVlcnlPZmZzZXQgPSB7IC0xLCAwIH07Ci0gICAgCisKICAgICAvLyBGb3IgZWFjaCByZXN1bHQg
YWRkIHRoZSBsaW5rLgogICAgIC8vIFNpbmNlIHRoZXJlIGNvdWxkIGJlIG11bHRpcGxlIHJlc3Vs
dHMgaW4gdGhlIHNhbWUgdGV4dCBub2RlLCB0aGUgbm9kZSBpcyBvbmx5IG1vZGlmaWVkIHdoZW4K
ICAgICAvLyB3ZSBhcmUgYWJvdXQgdG8gcHJvY2VzcyBhIGRpZmZlcmVudCB0ZXh0IG5vZGUuCi0g
ICAgcmVzdWx0Q291bnQgPSBhbGxSZXN1bHRzLnNpemUoKTsKLSAgICAKKyAgICBDRkluZGV4IHJl
c3VsdENvdW50ID0gYWxsUmVzdWx0cy5zaXplKCk7CiAgICAgZm9yIChDRkluZGV4IHJlc3VsdElu
ZGV4ID0gMDsgcmVzdWx0SW5kZXggPCByZXN1bHRDb3VudDsgKytyZXN1bHRJbmRleCkgewogICAg
ICAgICBERFJlc3VsdFJlZiBjb3JlUmVzdWx0ID0gYWxsUmVzdWx0c1tyZXN1bHRJbmRleF0uZ2V0
KCk7CiAgICAgICAgIEREUXVlcnlSYW5nZSBxdWVyeVJhbmdlID0gc29mdExpbmtfRGF0YURldGVj
dG9yc0NvcmVfRERSZXN1bHRHZXRRdWVyeVJhbmdlRm9yVVJMaWZpY2F0aW9uKGNvcmVSZXN1bHQp
OwpAQCAtNTc4LDcgKzU3NSw3IEBAIE5TQXJyYXkgKkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRl
bnRJblJhbmdlKFJlZlB0cjxSYW5nZT4mIGNvbnRleHRSYW5nZSwgRGF0YURlCiAgICAgICAgICAg
ICBBU1NFUlQocmVzdWx0UmFuZ2VzLnNpemUoKSA9PSByYW5nZUJvdW5kYXJpZXMuc2l6ZSgpKTsK
ICAgICAgICAgICAgIHJlc3VsdFJhbmdlcy5zaHJpbmsoMCk7IC8vIEtlZXAgY2FwYWNpdHkgYXMg
d2UgYXJlIGdvaW5nIHRvIHJlcG9wdWxhdGUgdGhlIFZlY3RvciByaWdodCBhd2F5IHdpdGggdGhl
IHNhbWUgbnVtYmVyIG9mIGl0ZW1zLgogICAgICAgICAgICAgZm9yIChhdXRvJiByYW5nZUJvdW5k
YXJ5IDogcmFuZ2VCb3VuZGFyaWVzKQotICAgICAgICAgICAgICAgIHJlc3VsdFJhbmdlcy51bmNo
ZWNrZWRBcHBlbmQoUmFuZ2U6OmNyZWF0ZSgqcmFuZ2VCb3VuZGFyeS5maXJzdC5kb2N1bWVudCgp
LCByYW5nZUJvdW5kYXJ5LmZpcnN0LCByYW5nZUJvdW5kYXJ5LnNlY29uZCkpOworICAgICAgICAg
ICAgICAgIHJlc3VsdFJhbmdlcy51bmNoZWNrZWRBcHBlbmQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
cmFuZ2VCb3VuZGFyeS5maXJzdCksICptYWtlQm91bmRhcnlQb2ludChyYW5nZUJvdW5kYXJ5LnNl
Y29uZCkgfSk7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGxhc3RNb2RpZmllZFF1ZXJ5
T2Zmc2V0ID0gcXVlcnlSYW5nZS5lbmQ7CkBAIC02MTIsNyArNjA5LDcgQEAgTlNBcnJheSAqRGF0
YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYgY29udGV4dFJh
bmdlLCBEYXRhRGUKIAogICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBhY3R1YWwgYW5jaG9yIG5v
ZGUgYW5kIGluc2VydCBpdCBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS4KICAgICAgICAgICAgIHRl
eHROb2RlRGF0YSA9IGN1cnJlbnRUZXh0Tm9kZS5kYXRhKCkuc3Vic3RyaW5nKHJhbmdlLnN0YXJ0
Lm9mZnNldCwgcmFuZ2UuZW5kLm9mZnNldCAtIHJhbmdlLnN0YXJ0Lm9mZnNldCk7Ci0gICAgICAg
ICAgICBSZWY8VGV4dD4gbmV3VGV4dE5vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQsIHRleHRO
b2RlRGF0YSk7CisgICAgICAgICAgICBhdXRvIG5ld1RleHROb2RlID0gVGV4dDo6Y3JlYXRlKGRv
Y3VtZW50LCB0ZXh0Tm9kZURhdGEpOwogICAgICAgICAgICAgcGFyZW50Tm9kZS0+aW5zZXJ0QmVm
b3JlKG5ld1RleHROb2RlLmNvcHlSZWYoKSwgJmN1cnJlbnRUZXh0Tm9kZSk7CiAgICAgICAgICAg
ICAKICAgICAgICAgICAgIFJlZjxIVE1MQW5jaG9yRWxlbWVudD4gYW5jaG9yRWxlbWVudCA9IEhU
TUxBbmNob3JFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwpAQCAtNjU5LDEzICs2NTYsMTMgQEAg
TlNBcnJheSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdl
PiYgY29udGV4dFJhbmdlLCBEYXRhRGUKIAogICAgIGlmIChsYXN0VGV4dE5vZGVUb1VwZGF0ZSkK
ICAgICAgICAgbGFzdFRleHROb2RlVG9VcGRhdGUtPnNldERhdGEobGFzdE5vZGVDb250ZW50KTsK
LSAgICAKKwogICAgIHJldHVybiBbZ2V0RERTY2FubmVyUmVzdWx0Q2xhc3MoKSByZXN1bHRzRnJv
bUNvcmVSZXN1bHRzOnNjYW5uZXJSZXN1bHRzLmdldCgpXTsKIH0KIAogI2Vsc2UKIAotTlNBcnJh
eSAqRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UoUmVmUHRyPFJhbmdlPiYsIERh
dGFEZXRlY3RvclR5cGVzLCBOU0RpY3Rpb25hcnkgKikKK05TQXJyYXkgKkRhdGFEZXRlY3Rpb246
OmRldGVjdENvbnRlbnRJblJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgRGF0YURldGVjdG9yVHlw
ZXMsIE5TRGljdGlvbmFyeSAqKQogewogICAgIHJldHVybiBuaWw7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9FZGl0b3JDb2NvYS5tbQppbmRleCA3MjJmODQ4NTM5NWUxZTgyM2E2
MTlmMzg1OTM2NWY0MDRmNzQ4ZWIyLi43ZmUzMGUwYTBlYTJlN2ViZTMzYTEyN2MzMWY3N2I0ZTMy
ZjA1Y2EzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0VkaXRvckNv
Y29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRWRpdG9yQ29jb2EubW0K
QEAgLTIyNSw3ICsyMjUsNyBAQCBSZWZQdHI8U2hhcmVkQnVmZmVyPiBFZGl0b3I6OmRhdGFJblJU
RkZvcm1hdChOU0F0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZykKIAogLy8gRklYTUU6IFNob3VsZCBn
aXZlIHRoaXMgZnVuY3Rpb24gYSBuYW1lIHRoYXQgbWFrZXMgaXQgY2xlYXIgaXQgYWRkcyByZXNv
dXJjZXMgdG8gdGhlIGRvY3VtZW50IGxvYWRlciBhcyBhIHNpZGUgZWZmZWN0LgogLy8gT3IgcmVm
YWN0b3Igc28gaXQgZG9lcyBub3QgZG8gdGhhdC4KLVJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBF
ZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBS
YW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQp
CitSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3ZWJDb250ZW50RnJvbVBhc3RlYm9h
cmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJv
b2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIFdlYkNvbnRl
bnRSZWFkZXIgcmVhZGVyKG1fZnJhbWUsIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0KTsKICAgICBw
YXN0ZWJvYXJkLnJlYWQocmVhZGVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggYmJmYmM2OGU2Y2ZkNWI5NTg4
ZWVjMmU2MWJhMTMxNjNkZDU0OGFlYi4uZDc5NDc4NDZkNTllOThhYWYwZmIyZGIzYTAwYmE5NjZm
NDZmNzI5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250
ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJD
b250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTY3NSw3ICs2NzUsNyBAQCBib29sIFdlYkNvbnRlbnRS
ZWFkZXI6OnJlYWRQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIGlmICghYWxsb3dQ
bGFpblRleHQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGFkZEZyYWdtZW50KGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10pKTsKKyAgICBhZGRGcmFnbWVudChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KSwgW3RleHQgcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ10pKTsKIAogICAgIG1hZGVGcmFnbWVudEZyb21QbGFpblRleHQgPSB0cnVl
OwogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9n
dGsvRWRpdG9yR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvZ3RrL0VkaXRvckd0ay5j
cHAKaW5kZXggNzA2ZTgyNjczZjA4MTMzMzczNWU1ODcxMjc4YzhkNDUwZDBiNjliYy4uZTlkZmRm
Y2JlZGE0YWRjMzY4NjAyYzkxYzAyMGU2MzZiMTAwNDgzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9ndGsvRWRpdG9yR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2d0ay9FZGl0b3JHdGsuY3BwCkBAIC01MCw3ICs1MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZy
b21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBGcmFtZSYgZnJhbWUsIFJh
bmdlJiByYW5nZSwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitz
dGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9h
cmREYXRhKFBhc3RlYm9hcmQmIHBhc3RlYm9hcmQsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxl
UmFuZ2UmIHJhbmdlLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkK
IHsKICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogCkBAIC04MSw3ICs4MSw3IEBAIHN0YXRp
YyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tUGFzdGVib2FyZERh
dGEoUGFzdGVib2FyZCYgcGFzCiAKICAgICBpZiAoc2VsZWN0aW9uLmhhc1RleHQoKSkgewogICAg
ICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBjcmVhdGVGcmFnbWVu
dEZyb21UZXh0KHJhbmdlLCBzZWxlY3Rpb24udGV4dCgpKTsKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUZyYWdtZW50RnJvbVRleHQoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgc2VsZWN0aW9uLnRleHQo
KSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xNTIsNyArMTUyLDcgQEAgdm9p
ZCBFZGl0b3I6OndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKFBhc3RlYm9hcmQmIHBhc3RlYm9h
cmQpCiAgICAgcGFzdGVib2FyZC53cml0ZShwYXN0ZWJvYXJkQ29udGVudCk7CiB9CiAKLVJlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6OndlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0
ZWJvYXJkJiBwYXN0ZWJvYXJkLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwg
Ym9vbCYgY2hvc2VQbGFpblRleHQpCitSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gRWRpdG9yOjp3
ZWJDb250ZW50RnJvbVBhc3RlYm9hcmQoUGFzdGVib2FyZCYgcGFzdGVib2FyZCwgY29uc3QgU2lt
cGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5U
ZXh0KQogewogICAgIHJldHVybiBjcmVhdGVGcmFnbWVudEZyb21QYXN0ZWJvYXJkRGF0YShwYXN0
ZWJvYXJkLCBtX2ZyYW1lLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYWMvRWRpdG9yTWFjLm1tCmluZGV4IGZkMmZjYmUy
MGY3ZTg4NDE3MjEwZWRjYjljNTE2ZDExMTk2MTgzMDAuLjkzMWEyMzAwZjA5NjY0MjQzZDg2NmFj
ODY0MGE5NzFkNmM1OTIxNGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9FZGl0b3JNYWMu
bW0KQEAgLTE0MCw4ICsxNDAsOSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVi
b2FyZChOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKLSAgICBhdXRvIHJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBQb3NpdGlvbihub2RlLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciksIFBvc2l0aW9uKG5vZGUsIFBvc2l0aW9uOjpQ
b3NpdGlvbklzQWZ0ZXJBbmNob3IpKTsKLSAgICBtX2ZyYW1lLnNlbGVjdGlvbigpLnNldFNlbGVj
dGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJhbWVTZWxlY3Rpb246OkRvTm90
U2V0Rm9jdXMpOworCisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250
ZW50cygqbm9kZSk7CisgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oVmlzaWJs
ZVNlbGVjdGlvbihyYW5nZSksIEZyYW1lU2VsZWN0aW9uOjpEb05vdFNldEZvY3VzKTsKIAogICAg
IFBhc3RlYm9hcmQgcGFzdGVib2FyZChwYXN0ZWJvYXJkTmFtZSk7CiAKQEAgLTE1Niw5ICsxNTcs
OSBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZU5vZGVGcm9tUGFzdGVib2FyZChOb2RlKiBub2RlLCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogICAgIEFMTE9XX0RFUFJFQ0FURURfREVDTEFS
QVRJT05TX0VORAogCiAgICAgYm9vbCBjaG9zZVBsYWluVGV4dDsKLSAgICBpZiAoUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gd2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKHBhc3Rl
Ym9hcmQsIHJhbmdlLmdldCgpLCB0cnVlLCBjaG9zZVBsYWluVGV4dCkpIHsKKyAgICBpZiAoYXV0
byBmcmFnbWVudCA9IHdlYkNvbnRlbnRGcm9tUGFzdGVib2FyZChwYXN0ZWJvYXJkLCByYW5nZSwg
dHJ1ZSwgY2hvc2VQbGFpblRleHQpKSB7CiAgICAgICAgIG1heWJlQ29weU5vZGVBdHRyaWJ1dGVz
VG9GcmFnbWVudCgqbm9kZSwgKmZyYWdtZW50KTsKLSAgICAgICAgaWYgKHNob3VsZEluc2VydEZy
YWdtZW50KCpmcmFnbWVudCwgcmFuZ2UucHRyKCksIEVkaXRvckluc2VydEFjdGlvbjo6UGFzdGVk
KSkKKyAgICAgICAgaWYgKHNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKS5wdHIoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpQYXN0ZWQpKQogICAgICAg
ICAgICAgcGFzdGVBc0ZyYWdtZW50KGZyYWdtZW50LnJlbGVhc2VOb25OdWxsKCksIGNhblNtYXJ0
UmVwbGFjZVdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpLCBmYWxzZSwgTWFpbEJsb2NrcXVvdGVI
YW5kbGluZzo6SWdub3JlQmxvY2txdW90ZSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy93aW4vRWRpdG9yV2luLmNwcAppbmRleCAwOTY0Y2NiNGZiZDdhYzM2YjE4ZjM0MTZmNDIwYTI3
ZGJlOTY5MTc4Li41ZTg2ODdmODk0YmVjNjA0Y2M2MjFiZDRlMGQ5MTI4Mjk1YzM0ZjU5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTY2LDcgKzY2LDcgQEAg
c3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21QbGF0Zm9y
bURhdGEoUGxhdGZvcm1EcmFnRGF0YSYKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotUmVmUHRy
PERvY3VtZW50RnJhZ21lbnQ+IEVkaXRvcjo6d2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKFBhc3Rl
Ym9hcmQmIHBhc3RlYm9hcmQsIFJhbmdlJiwgYm9vbCAvKmFsbG93UGxhaW5UZXh0Ki8sIGJvb2wm
IC8qY2hvc2VQbGFpblRleHQqLykKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBFZGl0b3I6Ondl
YkNvbnRlbnRGcm9tUGFzdGVib2FyZChQYXN0ZWJvYXJkJiBwYXN0ZWJvYXJkLCBjb25zdCBTaW1w
bGVSYW5nZSYsIGJvb2wgLyphbGxvd1BsYWluVGV4dCovLCBib29sJiAvKmNob3NlUGxhaW5UZXh0
Ki8pCiB7CiAgICAgaWYgKENPTVB0cjxJRGF0YU9iamVjdD4gcGxhdGZvcm1EcmFnRGF0YSA9IHBh
c3RlYm9hcmQuZGF0YU9iamVjdCgpKQogICAgICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9t
UGxhdGZvcm1EYXRhKCpwbGF0Zm9ybURyYWdEYXRhLCBtX2ZyYW1lKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvRnJhbWVMb2FkZXIuY3BwCmluZGV4IDVjMWNhM2VhMDdiMTQxOTY3ZGUxYTU3ODUwMWIwYmM0
OWM2YjAzY2MuLmIwYmU4ZTRjZTdjZWNhNzM1M2M0MDY1MTc0MjBlOGI3ODY4N2E0ZjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcApAQCAtMjU5OSwxMyArMjU5OSwxMCBAQCB2
b2lkIEZyYW1lTG9hZGVyOjpjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZSgpCiAgICAgICAg
ICAgICAgICAgRlJBTUVMT0FERVJfUkVMRUFTRV9MT0dfSUZfQUxMT1dFRChSZXNvdXJjZUxvYWRp
bmcsICJjaGVja0xvYWRDb21wbGV0ZUZvclRoaXNGcmFtZTogRmluaXNoZWQgZnJhbWUgbG9hZCIp
OwogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKICAgICAgICAgICAgICAgICBhdXRvKiBkb2N1
bWVudCA9IG1fZnJhbWUuZG9jdW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFtZS5z
ZXR0aW5ncygpLmRhdGFEZXRlY3RvclR5cGVzKCkgIT0gRGF0YURldGVjdG9yVHlwZU5vbmUgJiYg
ZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50RWxlbWVu
dCA9IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgUmVmUHRyPFJhbmdlPiBkb2N1bWVudFJhbmdlID0gbWFrZVJhbmdlKGZpcnN0UG9zaXRpb25J
bk5vZGUoZG9jdW1lbnRFbGVtZW50KSwgbGFzdFBvc2l0aW9uSW5Ob2RlKGRvY3VtZW50RWxlbWVu
dCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZS5zZXREYXRhRGV0ZWN0aW9uUmVz
dWx0cyhEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShkb2N1bWVudFJhbmdlLCBt
X2ZyYW1lLnNldHRpbmdzKCkuZGF0YURldGVjdG9yVHlwZXMoKSwgbV9jbGllbnQtPmRhdGFEZXRl
Y3Rpb25Db250ZXh0KCkpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lLmlz
TWFpbkZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRpc3Bh
dGNoRGlkRmluaXNoRGF0YURldGVjdGlvbihtX2ZyYW1lLmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkp
OwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWUuc2V0
dGluZ3MoKS5kYXRhRGV0ZWN0b3JUeXBlcygpICE9IERhdGFEZXRlY3RvclR5cGVzOjpOb25lICYm
IGRvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWUuc2V0RGF0YURldGVjdGlv
blJlc3VsdHMoRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudCksIG1fZnJhbWUuc2V0dGluZ3MoKS5kYXRhRGV0
ZWN0b3JUeXBlcygpLCBtX2NsaWVudC0+ZGF0YURldGVjdGlvbkNvbnRleHQoKSkpOworICAgICAg
ICAgICAgICAgICAgICBpZiAobV9mcmFtZS5pc01haW5GcmFtZSgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jbGllbnQtPmRpc3BhdGNoRGlkRmluaXNoRGF0YURldGVjdGlvbihtX2ZyYW1l
LmRhdGFEZXRlY3Rpb25SZXN1bHRzKCkpOwogICAgICAgICAgICAgICAgIH0KICNlbmRpZgogICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5kaXNwYXRjaERpZEZpbmlzaExvYWQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAppbmRleCBiMzJmY2FkZDkwNjlhMDQ2ZGE5YjdiYTgzMDQ3
YjgyMmNmMzUwOWZmLi5kNjc1NDliNDZhODFmMDBhOTBmMmQ1NTM5NDc0NTI3NGMxMGY0YTkyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3BwCkBAIC0yMDY2LDcgKzIwNjYsNyBAQCB2
b2lkIEV2ZW50SGFuZGxlcjo6aW52YWxpZGF0ZUNsaWNrKCkKICAgICBtX2NsaWNrTm9kZSA9IG51
bGxwdHI7CiB9CiAKLXN0YXRpYyBOb2RlKiB0YXJnZXROb2RlRm9yQ2xpY2tFdmVudChOb2RlKiBt
b3VzZVByZXNzTm9kZSwgTm9kZSogbW91c2VSZWxlYXNlTm9kZSkKK3N0YXRpYyBSZWZQdHI8Tm9k
ZT4gdGFyZ2V0Tm9kZUZvckNsaWNrRXZlbnQoTm9kZSogbW91c2VQcmVzc05vZGUsIE5vZGUqIG1v
dXNlUmVsZWFzZU5vZGUpCiB7CiAgICAgaWYgKCFtb3VzZVByZXNzTm9kZSB8fCAhbW91c2VSZWxl
YXNlTm9kZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMDc2LDE3ICsyMDc2LDE4IEBA
IHN0YXRpYyBOb2RlKiB0YXJnZXROb2RlRm9yQ2xpY2tFdmVudChOb2RlKiBtb3VzZVByZXNzTm9k
ZSwgTm9kZSogbW91c2VSZWxlYXNlTm9kCiAKICAgICAvLyBJZiBtb3VzZVByZXNzTm9kZSBhbmQg
bW91c2VSZWxlYXNlTm9kZSBkaWZmZXIsIHdlIHNob3VsZCBmaXJlIHRoZSBldmVudCBhdCB0aGVp
ciBjb21tb24gYW5jZXN0b3IgaWYgdGhlcmUgaXMgb25lLgogICAgIGlmICgmbW91c2VQcmVzc05v
ZGUtPmRvY3VtZW50KCkgPT0gJm1vdXNlUmVsZWFzZU5vZGUtPmRvY3VtZW50KCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIGNvbW1vbkFuY2VzdG9yID0gUmFuZ2U6OmNvbW1vbkFuY2VzdG9yQ29udGFp
bmVyKG1vdXNlUHJlc3NOb2RlLCBtb3VzZVJlbGVhc2VOb2RlKSkKKyAgICAgICAgaWYgKGF1dG8g
Y29tbW9uQW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcigqbW91c2VQcmVzc05vZGUs
ICptb3VzZVJlbGVhc2VOb2RlKSkKICAgICAgICAgICAgIHJldHVybiBjb21tb25BbmNlc3RvcjsK
ICAgICB9CiAKLSAgICBFbGVtZW50KiBtb3VzZVJlbGVhc2VTaGFkb3dIb3N0ID0gbW91c2VSZWxl
YXNlTm9kZS0+c2hhZG93SG9zdCgpOworICAgIGF1dG8gbW91c2VSZWxlYXNlU2hhZG93SG9zdCA9
IG1vdXNlUmVsZWFzZU5vZGUtPnNoYWRvd0hvc3QoKTsKICAgICBpZiAobW91c2VSZWxlYXNlU2hh
ZG93SG9zdCAmJiBtb3VzZVJlbGVhc2VTaGFkb3dIb3N0ID09IG1vdXNlUHJlc3NOb2RlLT5zaGFk
b3dIb3N0KCkpIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBkaXNwYXRjaCB0aGUgY2xpY2sgdG8g
dGhlIHNoYWRvdyB0cmVlIGhvc3QgZWxlbWVudCB0byBnaXZlIGxpc3RlbmVycyB0aGUgaWxsdXNp
b24gdGhhdCB0aGUKICAgICAgICAgLy8gc2hhZG9tIHRyZWUgaXMgYSBzaW5nbGUgZWxlbWVudC4g
Rm9yIGV4YW1wbGUsIHdlIHdhbnQgdG8gZ2l2ZSB0aGUgaWxsdXNpb24gdGhhdCA8aW5wdXQgdHlw
ZT0icmFuZ2UiPgogICAgICAgICAvLyBpcyBhIHNpbmdsZSBlbGVtZW50IGV2ZW4gdGhvdWdoIGl0
IGlzIGEgY29tcG9zaXRpb24gb2YgbXVsdGlwbGUgc2hhZG9tIHRyZWUgZWxlbWVudHMuCiAgICAg
ICAgIHJldHVybiBtb3VzZVJlbGVhc2VTaGFkb3dIb3N0OwogICAgIH0KKwogICAgIHJldHVybiBu
dWxscHRyOwogfQogCkBAIC0yMTU5LDggKzIxNjAsOCBAQCBib29sIEV2ZW50SGFuZGxlcjo6aGFu
ZGxlTW91c2VSZWxlYXNlRXZlbnQoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBwbGF0Zm9ybU1v
dQogCiAgICAgYm9vbCBjb250ZXh0TWVudUV2ZW50ID0gcGxhdGZvcm1Nb3VzZUV2ZW50LmJ1dHRv
bigpID09IFJpZ2h0QnV0dG9uOwogCi0gICAgTm9kZSogbm9kZVRvQ2xpY2sgPSB0YXJnZXROb2Rl
Rm9yQ2xpY2tFdmVudChtX2NsaWNrTm9kZS5nZXQoKSwgbW91c2VFdmVudC50YXJnZXROb2RlKCkp
OwotICAgIGJvb2wgc3dhbGxvd0NsaWNrRXZlbnQgPSBtX2NsaWNrQ291bnQgPiAwICYmICFjb250
ZXh0TWVudUV2ZW50ICYmIG5vZGVUb0NsaWNrICYmICFkaXNwYXRjaE1vdXNlRXZlbnQoZXZlbnRO
YW1lcygpLmNsaWNrRXZlbnQsIG5vZGVUb0NsaWNrLCB0cnVlLCBtX2NsaWNrQ291bnQsIHBsYXRm
b3JtTW91c2VFdmVudCwgdHJ1ZSk7CisgICAgYXV0byBub2RlVG9DbGljayA9IHRhcmdldE5vZGVG
b3JDbGlja0V2ZW50KG1fY2xpY2tOb2RlLmdldCgpLCBtb3VzZUV2ZW50LnRhcmdldE5vZGUoKSk7
CisgICAgYm9vbCBzd2FsbG93Q2xpY2tFdmVudCA9IG1fY2xpY2tDb3VudCA+IDAgJiYgIWNvbnRl
eHRNZW51RXZlbnQgJiYgbm9kZVRvQ2xpY2sgJiYgIWRpc3BhdGNoTW91c2VFdmVudChldmVudE5h
bWVzKCkuY2xpY2tFdmVudCwgbm9kZVRvQ2xpY2suZ2V0KCksIHRydWUsIG1fY2xpY2tDb3VudCwg
cGxhdGZvcm1Nb3VzZUV2ZW50LCB0cnVlKTsKIAogICAgIGlmIChtX3Jlc2l6ZUxheWVyKSB7CiAg
ICAgICAgIG1fcmVzaXplTGF5ZXItPnNldEluUmVzaXplTW9kZShmYWxzZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLnlhbWwgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1NldHRpbmdzLnlhbWwKaW5kZXggYTg2NzZkOTdjM2NhYjk3M2MxMzIzNWRmODk2YzJkZDdhZGFl
YjVhZS4uMGI0OWFkNzNlOWY2NWFkNDllZmE0YTRjNDBiNjJiMTdhMjIyN2Q1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy55YW1sCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MueWFtbApAQCAtNTQxLDcgKzU0MSw3IEBAIHVzZUltYWdlRG9jdW1lbnRG
b3JTdWJmcmFtZVBERjoKICAgaW5pdGlhbDogZmFsc2UKIGRhdGFEZXRlY3RvclR5cGVzOgogICB0
eXBlOiBEYXRhRGV0ZWN0b3JUeXBlcwotICBpbml0aWFsOiBEYXRhRGV0ZWN0b3JUeXBlTm9uZQor
ICBpbml0aWFsOiAKICAgY29uZGl0aW9uYWw6IERBVEFfREVURUNUSU9OCiAKICMgQWxsb3cgU291
cmNlQnVmZmVycyB0byBzdG9yZSB1cCB0byAzMDRNQiBlYWNoLCBlbm91Z2ggZm9yIGFwcHJveGlt
YXRlbHkgZml2ZSBtaW51dGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRp
bmdzQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5nc0Jhc2UuaAppbmRleCBhZGY4
ZGJhY2RkY2E3Y2FkMGZiNzJjYTMxNjljMTJkYThiNDg1MDY3Li5hZjIyNDlkYjMwYzJjY2U2ZGRk
MmVjMTI5NTAyZGE5ZmQwZTdmZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Nl
dHRpbmdzQmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3NCYXNlLmgKQEAg
LTQzLDE1ICs0MywxMyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21TdHJpbmcuaD4KICNpbmNs
dWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nSGFzaC5oPgogCi0jaWYgRU5BQkxFKERBVEFfREVURUNU
SU9OKQotI2luY2x1ZGUgIkRhdGFEZXRlY3Rpb24uaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZvbnRHZW5lcmljRmFtaWxpZXM7CiBjbGFzcyBQYWdlOwogCitlbnVt
IGNsYXNzIERhdGFEZXRlY3RvclR5cGVzIDogdWludDMyX3Q7CisKIGVudW0gRWRpdGFibGVMaW5r
QmVoYXZpb3IgewogICAgIEVkaXRhYmxlTGlua0RlZmF1bHRCZWhhdmlvciwKICAgICBFZGl0YWJs
ZUxpbmtBbHdheXNMaXZlLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5k
aWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKaW5kZXgg
YjEyMWQ5ZGRiMzViMTEyN2VlZGZjOTc4ZWE3YTRmOTYzNmQ0MzllNy4uMmQ2Y2U4MDhiZWQ2OTNj
MWY3MDMzZmZjN2U3YWQ1NDZjNTBhYTNmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0
b3IuY3BwCkBAIC01Miw3ICs1Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGlj
IGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYsIEZyYW1lJiwgY29u
c3QgUmFuZ2UmLCBGbG9hdFNpemUgbWFyZ2luLCBib29sIGluZGljYXRlc0N1cnJlbnRTZWxlY3Rp
b24pOworc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYs
IEZyYW1lJiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBGbG9hdFNpemUgbWFyZ2luLCBib29sIGluZGlj
YXRlc0N1cnJlbnRTZWxlY3Rpb24pOwogCiBUZXh0SW5kaWNhdG9yOjpUZXh0SW5kaWNhdG9yKGNv
bnN0IFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhKQogICAgIDogbV9kYXRhKGRhdGEpCkBAIC02Niwz
MSArNjYsMjcgQEAgUmVmPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0b3I6OmNyZWF0ZShjb25z
dCBUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBUZXh0
SW5kaWNhdG9yKGRhdGEpKTsKIH0KIAotUmVmUHRyPFRleHRJbmRpY2F0b3I+IFRleHRJbmRpY2F0
b3I6OmNyZWF0ZVdpdGhSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIFRleHRJbmRpY2F0b3JPcHRp
b25zIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRh
dGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4pCitSZWZQdHI8VGV4dEluZGljYXRvcj4g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwg
VGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRy
YW5zaXRpb24gcHJlc2VudGF0aW9uVHJhbnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbikKIHsKLSAg
ICBGcmFtZSogZnJhbWUgPSByYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkuZnJhbWUo
KTsKLQorICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0Q29udGFpbmVyKCku
ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIAotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CisgICAgYm9vbCBpbmRp
Y2F0ZXNDdXJyZW50U2VsZWN0aW9uID0gcmFuZ2UgPT0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNl
bGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBPcHRpb25TZXQ8
VGVtcG9yYXJ5U2VsZWN0aW9uT3B0aW9uPiB0ZW1wb3JhcnlTZWxlY3Rpb25PcHRpb25zOwogICAg
IHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbjo6
RG9Ob3RTZXRGb2N1cyk7CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICB0ZW1wb3JhcnlT
ZWxlY3Rpb25PcHRpb25zLmFkZChUZW1wb3JhcnlTZWxlY3Rpb25PcHRpb246Oklnbm9yZVNlbGVj
dGlvbkNoYW5nZXMpOwogICAgIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMuYWRkKFRlbXBvcmFy
eVNlbGVjdGlvbk9wdGlvbjo6RW5hYmxlQXBwZWFyYW5jZVVwZGF0ZXMpOwogI2VuZGlmCi0gICAg
VGVtcG9yYXJ5U2VsZWN0aW9uQ2hhbmdlIHNlbGVjdGlvbkNoYW5nZSgqZnJhbWUsIHsgU2ltcGxl
UmFuZ2UgeyByYW5nZSB9IH0sIHRlbXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOworICAgIFRlbXBv
cmFyeVNlbGVjdGlvbkNoYW5nZSBzZWxlY3Rpb25DaGFuZ2UoKmZyYW1lLCB7IHJhbmdlIH0sIHRl
bXBvcmFyeVNlbGVjdGlvbk9wdGlvbnMpOwogCiAgICAgVGV4dEluZGljYXRvckRhdGEgZGF0YTsK
IAogICAgIGRhdGEucHJlc2VudGF0aW9uVHJhbnNpdGlvbiA9IHByZXNlbnRhdGlvblRyYW5zaXRp
b247CiAgICAgZGF0YS5vcHRpb25zID0gb3B0aW9uczsKIAotICAgIGJvb2wgaW5kaWNhdGVzQ3Vy
cmVudFNlbGVjdGlvbiA9IGFyZVJhbmdlc0VxdWFsKCZyYW5nZSwgY3JlYXRlTGl2ZVJhbmdlKG9s
ZFNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKS5nZXQoKSk7Ci0KICAgICBpZiAoIWluaXRp
YWxpemVJbmRpY2F0b3IoZGF0YSwgKmZyYW1lLCByYW5nZSwgbWFyZ2luLCBpbmRpY2F0ZXNDdXJy
ZW50U2VsZWN0aW9uKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEwOCwyNSArMTA0
LDE5IEBAIFJlZlB0cjxUZXh0SW5kaWNhdG9yPiBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoU2Vs
ZWN0aW9uSW5GcmFtZShGcmFtZSYgZnJhbWUsIFRlCiAgICAgZGF0YS5wcmVzZW50YXRpb25UcmFu
c2l0aW9uID0gcHJlc2VudGF0aW9uVHJhbnNpdGlvbjsKICAgICBkYXRhLm9wdGlvbnMgPSBvcHRp
b25zOwogCi0gICAgaWYgKCFpbml0aWFsaXplSW5kaWNhdG9yKGRhdGEsIGZyYW1lLCBjcmVhdGVM
aXZlUmFuZ2UoKnJhbmdlKSwgbWFyZ2luLCB0cnVlKSkKKyAgICBpZiAoIWluaXRpYWxpemVJbmRp
Y2F0b3IoZGF0YSwgZnJhbWUsICpyYW5nZSwgbWFyZ2luLCB0cnVlKSkKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CiAKICAgICByZXR1cm4gVGV4dEluZGljYXRvcjo6Y3JlYXRlKGRhdGEpOwogfQog
Ci1zdGF0aWMgYm9vbCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMoY29uc3QgUmFuZ2Um
IHJhbmdlKQorc3RhdGljIGJvb2wgaGFzTm9uSW5saW5lT3JSZXBsYWNlZEVsZW1lbnRzKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBOb2RlKiBzdG9wTm9kZSA9IHJhbmdlLnBhc3RM
YXN0Tm9kZSgpOwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHN0b3BOb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAg
ICAgaWYgKCFub2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICBpZiAoIXJlbmRlcmVyKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgoIXJlbmRlcmVyLT5pc0lubGluZSgp
IHx8IHJlbmRlcmVyLT5pc1JlcGxhY2VkKCkpICYmIHJhbmdlLmludGVyc2VjdHNOb2RlKCpub2Rl
KS5yZWxlYXNlUmV0dXJuVmFsdWUoKSkKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBpbnRlcnNlY3Rp
bmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgYXV0byByZW5kZXJlciA9IG5vZGUucmVuZGVyZXIo
KTsKKyAgICAgICAgaWYgKHJlbmRlcmVyICYmICghcmVuZGVyZXItPmlzSW5saW5lKCkgfHwgcmVu
ZGVyZXItPmlzUmVwbGFjZWQoKSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTE4NCw1OSArMTc0LDQ5IEBAIHN0YXRpYyBib29s
IHRha2VTbmFwc2hvdHMoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgSW50
UmVjdCBzbmFwc2hvCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogCi1zdGF0aWMgdm9pZCBn
ZXRTZWxlY3Rpb25SZWN0c0ZvclJhbmdlKFZlY3RvcjxGbG9hdFJlY3Q+JiByZXN1bHRpbmdSZWN0
cywgY29uc3QgUmFuZ2UmIHJhbmdlKQorc3RhdGljIFZlY3RvcjxGbG9hdFJlY3Q+IHNlbGVjdGlv
blJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICBWZWN0b3I8U2VsZWN0aW9u
UmVjdD4gc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTsKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBzZWxl
Y3Rpb25SZWN0c0ZvclJhbmdlSW5Cb3VuZGluZ1JlY3RDb29yZGluYXRlczsKLSAgICByYW5nZS5j
b2xsZWN0U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHNGb3JSYW5nZSk7Ci0gICAgZm9yIChh
dXRvIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rpb25SZWN0c0ZvclJhbmdlKQotICAgICAgICByZXN1
bHRpbmdSZWN0cy5hcHBlbmQoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOworICAgIFZlY3RvcjxTZWxl
Y3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5j
b2xsZWN0U2VsZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOworICAgIFZlY3RvcjxGbG9hdFJl
Y3Q+IHJlY3RzOworICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3Rz
KQorICAgICAgICByZWN0cy5hcHBlbmQoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOworICAgIHJldHVy
biByZWN0czsKIH0KIAogI2VuZGlmCiAKIHN0YXRpYyBib29sIHN0eWxlQ29udGFpbnNDb21wbGV4
QmFja2dyb3VuZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiB7Ci0gICAgaWYgKHN0eWxlLmhh
c0JsZW5kTW9kZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChzdHlsZS5oYXNC
YWNrZ3JvdW5kSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoc3R5bGUu
aGFzQmFja2Ryb3BGaWx0ZXIoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7CisgICAgcmV0dXJuIHN0eWxlLmhhc0JsZW5kTW9kZSgpIHx8IHN0eWxlLmhhc0JhY2tn
cm91bmRJbWFnZSgpIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCk7CiB9CiAKLXN0YXRpYyBI
YXNoU2V0PENvbG9yPiBlc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIHJh
bmdlKQorc3RhdGljIEhhc2hTZXQ8Q29sb3I+IGVzdGltYXRlZFRleHRDb2xvcnNGb3JSYW5nZShj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiB7CiAgICAgSGFzaFNldDxDb2xvcj4gY29sb3JzOwog
ICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0ZXJhdG9yKHJhbmdlKTsgIWl0ZXJhdG9yLmF0RW5kKCk7
IGl0ZXJhdG9yLmFkdmFuY2UoKSkgewotICAgICAgICBhdXRvKiBub2RlID0gaXRlcmF0b3Iubm9k
ZSgpOwotICAgICAgICBpZiAoIWlzPFRleHQ+KG5vZGUpIHx8ICFpczxSZW5kZXJUZXh0Pihub2Rl
LT5yZW5kZXJlcigpKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGNvbG9ycy5h
ZGQobm9kZS0+cmVuZGVyZXIoKS0+c3R5bGUoKS5jb2xvcigpKTsKKyAgICAgICAgYXV0byByZW5k
ZXJlciA9IGl0ZXJhdG9yLm5vZGUoKS0+cmVuZGVyZXIoKTsKKyAgICAgICAgaWYgKGlzPFJlbmRl
clRleHQ+KHJlbmRlcmVyKSkKKyAgICAgICAgICAgIGNvbG9ycy5hZGQocmVuZGVyZXItPnN0eWxl
KCkuY29sb3IoKSk7CiAgICAgfQogICAgIHJldHVybiBjb2xvcnM7CiB9Ci0gICAgCi1zdGF0aWMg
RmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0Rm9yUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdl
KQorCitzdGF0aWMgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0Rm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiByYW5nZS5hYnNvbHV0ZUJvdW5kaW5n
UmVjdCh7CisgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmFic29sdXRlQm91bmRp
bmdSZWN0KHsKICAgICAgICAgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNwZWN0Q2xp
cHBpbmcsCiAgICAgICAgIFJhbmdlOjpCb3VuZGluZ1JlY3RCZWhhdmlvcjo6VXNlVmlzaWJsZUJv
dW5kcywKICAgICAgICAgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpJZ25vcmVUaW55UmVj
dHMsCiAgICAgfSk7CiB9CiAKLXN0YXRpYyBDb2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JG
b3JSYW5nZShjb25zdCBSYW5nZSYgcmFuZ2UsIGNvbnN0IEZyYW1lJiBmcmFtZSkKK3N0YXRpYyBD
b2xvciBlc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3JGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIGNvbnN0IEZyYW1lJiBmcmFtZSkKIHsKICAgICBhdXRvIGVzdGltYXRlZEJhY2tncm91
bmRDb2xvciA9IGZyYW1lLnZpZXcoKSA/IGZyYW1lLnZpZXcoKS0+ZG9jdW1lbnRCYWNrZ3JvdW5k
Q29sb3IoKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKIAogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRl
cmVyID0gbnVsbHB0cjsKLSAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gcmFuZ2UuY29tbW9uQW5j
ZXN0b3JDb250YWluZXIoKTsKKyAgICBhdXRvIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IocmFuZ2Uuc3RhcnQuY29udGFpbmVyLCByYW5nZS5lbmQuY29udGFpbmVyKTsK
ICAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3IpIHsKICAgICAgICAgaWYgKGlzPFJlbmRlckVsZW1l
bnQ+KGNvbW1vbkFuY2VzdG9yLT5yZW5kZXJlcigpKSkgewogICAgICAgICAgICAgcmVuZGVyZXIg
PSBkb3duY2FzdDxSZW5kZXJFbGVtZW50Pihjb21tb25BbmNlc3Rvci0+cmVuZGVyZXIoKSk7CkBA
IC0yOTEsMTcgKzI3MSwxNiBAQCBzdGF0aWMgYm9vbCBoYXNBbnlJbGxlZ2libGVDb2xvcnMoVGV4
dEluZGljYXRvckRhdGEmIGRhdGEsIGNvbnN0IENvbG9yJiBiYWNrZ3JvdQogICAgIHJldHVybiAh
aGFzT25seUxlZ2libGVUZXh0Q29sb3JzIHx8IHRleHRDb2xvcnMuaXNFbXB0eSgpOwogfQogCi1z
dGF0aWMgYm9vbCBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChjb25zdCBSYW5nZSYgcmFuZ2Up
CitzdGF0aWMgYm9vbCBjb250YWluc09ubHlXaGl0ZVNwYWNlVGV4dChjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UpCiB7Ci0gICAgYXV0byogc3RvcCA9IHJhbmdlLnBhc3RMYXN0Tm9kZSgpOwotICAg
IGZvciAoYXV0byogbm9kZSA9IHJhbmdlLmZpcnN0Tm9kZSgpOyBub2RlICYmIG5vZGUgIT0gc3Rv
cDsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIGlmICghaXM8
UmVuZGVyVGV4dD4obm9kZS0+cmVuZGVyZXIoKSkpCisgICAgZm9yIChhdXRvJiBub2RlIDogaW50
ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlmICghaXM8UmVuZGVyVGV4dD4obm9k
ZS5yZW5kZXJlcigpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHBsYWluVGV4dFJlcGxhY2luZ05vQnJlYWtTcGFjZShyYW5nZSkuc3RyaXBXaGl0ZVNwYWNl
KCkuaXNFbXB0eSgpOwogfQogCi1zdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJ
bmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFJhbmdlJiByYW5nZSwgRmxv
YXRTaXplIG1hcmdpbiwgYm9vbCBpbmRpY2F0ZXNDdXJyZW50U2VsZWN0aW9uKQorc3RhdGljIGJv
b2wgaW5pdGlhbGl6ZUluZGljYXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZy
YW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIEZsb2F0U2l6ZSBtYXJnaW4sIGJvb2wgaW5k
aWNhdGVzQ3VycmVudFNlbGVjdGlvbikKIHsKICAgICBpZiAoYXV0byogZG9jdW1lbnQgPSBmcmFt
ZS5kb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CkBAIC0zMTIsMjAgKzI5MSwxNyBAQCBzdGF0aWMgYm9vbCBpbml0aWFs
aXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0
IFJhbgogICAgICAgICB0cmVhdFJhbmdlQXNDb21wbGV4RHVlVG9JbGxlZ2libGVUZXh0Q29sb3Jz
ID0gaGFzQW55SWxsZWdpYmxlQ29sb3JzKGRhdGEsIGRhdGEuZXN0aW1hdGVkQmFja2dyb3VuZENv
bG9yLCBlc3RpbWF0ZWRUZXh0Q29sb3JzRm9yUmFuZ2UocmFuZ2UpKTsKICAgICB9CiAKLSAgICBW
ZWN0b3I8RmxvYXRSZWN0PiB0ZXh0UmVjdHM7Ci0KICAgICAvLyBGSVhNRSAoMTM4ODg4KTogSWRl
YWxseSB3ZSB3b3VsZG4ndCByZW1vdmUgdGhlIG1hcmdpbiBpbiB0aGlzIGNhc2UsIGJ1dCB3ZSBu
ZWVkIHRvCiAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGluZGljYXRvciBhbmQgaW5kaWNhdG9yLXdp
dGgtaGlnaGxpZ2h0IG92ZXJsYXAgcHJlY2lzZWx5LCBhbmQKICAgICAvLyB3ZSBjYW4ndCBhZGQg
YSBtYXJnaW4gdG8gdGhlIGluZGljYXRvci13aXRoLWhpZ2hsaWdodC4KICAgICBpZiAoaW5kaWNh
dGVzQ3VycmVudFNlbGVjdGlvbiAmJiAhKGRhdGEub3B0aW9ucyAmIFRleHRJbmRpY2F0b3JPcHRp
b25JbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24pKQogICAgICAgICBtYXJnaW4g
PSBGbG9hdFNpemUoKTsKIAotICAgIEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0
IHRleHRSZWN0SGVpZ2h0ID0gKGRhdGEub3B0aW9ucyAmIFRleHRJbmRpY2F0b3JPcHRpb25UaWdo
dGx5Rml0Q29udGVudCkgPyBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6VGV4
dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25I
ZWlnaHQ7CisgICAgVmVjdG9yPEZsb2F0UmVjdD4gdGV4dFJlY3RzOwogCiAgICAgYm9vbCB1c2VC
b3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzID0gZGF0YS5vcHRp
b25zICYgVGV4dEluZGljYXRvck9wdGlvblVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVu
dEZvckNvbXBsZXhSYW5nZXM7CiAgICAgaWYgKHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29u
dGVudEZvckNvbXBsZXhSYW5nZXMgJiYgY29udGFpbnNPbmx5V2hpdGVTcGFjZVRleHQocmFuZ2Up
KSB7Ci0gICAgICAgIGF1dG8gY29tbW9uQW5jZXN0b3JDb250YWluZXIgPSBtYWtlUmVmUHRyKHJh
bmdlLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOwotICAgICAgICBpZiAoYXV0byogY29udGFp
bmVyUmVuZGVyZXIgPSBjb21tb25BbmNlc3RvckNvbnRhaW5lci0+cmVuZGVyZXIoKSkgeworICAg
ICAgICBpZiAoYXV0byogY29udGFpbmVyUmVuZGVyZXIgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rv
cihyYW5nZS5zdGFydC5jb250YWluZXIsIHJhbmdlLmVuZC5jb250YWluZXIpLT5yZW5kZXJlcigp
KSB7CiAgICAgICAgICAgICBkYXRhLm9wdGlvbnMgfD0gVGV4dEluZGljYXRvck9wdGlvblBhaW50
QWxsQ29udGVudDsKICAgICAgICAgICAgIHRleHRSZWN0cy5hcHBlbmQoY29udGFpbmVyUmVuZGVy
ZXItPmFic29sdXRlQm91bmRpbmdCb3hSZWN0KCkpOwogICAgICAgICB9CkBAIC0zMzMsMTUgKzMw
OSwxNSBAQCBzdGF0aWMgYm9vbCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRh
JiBkYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFJhbgogICAgICAgICBkYXRhLm9wdGlvbnMgfD0g
VGV4dEluZGljYXRvck9wdGlvblBhaW50QWxsQ29udGVudDsKICNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQogICAgIGVsc2UgaWYgKGRhdGEub3B0aW9ucyAmIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VT
ZWxlY3Rpb25SZWN0Rm9yU2l6aW5nKQotICAgICAgICBnZXRTZWxlY3Rpb25SZWN0c0ZvclJhbmdl
KHRleHRSZWN0cywgcmFuZ2UpOworICAgICAgICB0ZXh0UmVjdHMgPSBzZWxlY3Rpb25SZWN0cyhy
YW5nZSk7CiAjZW5kaWYKICAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPEludFJlY3Q+IGFic29s
dXRlVGV4dFJlY3RzOwotICAgICAgICByYW5nZS5hYnNvbHV0ZVRleHRSZWN0cyhhYnNvbHV0ZVRl
eHRSZWN0cywgdGV4dFJlY3RIZWlnaHQgPT0gRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVI
ZWlnaHQ6OlNlbGVjdGlvbkhlaWdodCwgUmFuZ2U6OkJvdW5kaW5nUmVjdEJlaGF2aW9yOjpSZXNw
ZWN0Q2xpcHBpbmcpOwotCi0gICAgICAgIHRleHRSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KGFic29sdXRlVGV4dFJlY3RzLnNpemUoKSk7Ci0gICAgICAgIGZvciAoYXV0byYgcmVjdCA6IGFi
c29sdXRlVGV4dFJlY3RzKQotICAgICAgICAgICAgdGV4dFJlY3RzLnVuY2hlY2tlZEFwcGVuZChy
ZWN0KTsKKyAgICAgICAgYXV0byB0ZXh0UmVjdEhlaWdodCA9IChkYXRhLm9wdGlvbnMgJiBUZXh0
SW5kaWNhdG9yT3B0aW9uVGlnaHRseUZpdENvbnRlbnQpID8gRnJhbWVTZWxlY3Rpb246OlRleHRS
ZWN0YW5nbGVIZWlnaHQ6OlRleHRIZWlnaHQgOiBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3Rhbmds
ZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0OworICAgICAgICBWZWN0b3I8SW50UmVjdD4gaW50UmVj
dHM7CisgICAgICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmFic29sdXRlVGV4dFJlY3RzKGlu
dFJlY3RzLCB0ZXh0UmVjdEhlaWdodCA9PSBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhl
aWdodDo6U2VsZWN0aW9uSGVpZ2h0LCBSYW5nZTo6Qm91bmRpbmdSZWN0QmVoYXZpb3I6OlJlc3Bl
Y3RDbGlwcGluZyk7CisgICAgICAgIHRleHRSZWN0cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGlu
dFJlY3RzLnNpemUoKSk7CisgICAgICAgIGZvciAoYXV0byYgaW50UmVjdCA6IGludFJlY3RzKQor
ICAgICAgICAgICAgdGV4dFJlY3RzLnVuY2hlY2tlZEFwcGVuZChpbnRSZWN0KTsKICAgICB9CiAK
ICAgICBpZiAodGV4dFJlY3RzLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvVGV4dEluZGljYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9y
LmgKaW5kZXggNmYzMDg4NGZjMjg3OTdmMTg4NzhmNjkxYTE4OWU5NTg0ZWM2ZjlmOC4uNDExNzNh
ZmQ5Nzg1NjAxMmNhY2M5YzdhMDc3YTg2OWI1MjQ0MTAxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0
SW5kaWNhdG9yLmgKQEAgLTM0LDcgKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBGcmFtZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFJhbmdlOworCitzdHJ1Y3Qg
U2ltcGxlUmFuZ2U7CiAKIC8vIEZJWE1FOiBNb3ZlIFByZXNlbnRhdGlvblRyYW5zaXRpb24gdG8g
VGV4dEluZGljYXRvcldpbmRvdywgYmVjYXVzZSBpdCdzIGFib3V0IHByZXNlbnRhdGlvbi4KIGVu
dW0gY2xhc3MgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb24gOiB1aW50OF90IHsK
QEAgLTEyMyw3ICsxMjQsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFRleHRJbmRpY2F0b3I+IGNyZWF0ZShjb25zdCBUZXh0SW5kaWNhdG9yRGF0YSYpOwogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFNl
bGVjdGlvbkluRnJhbWUoRnJhbWUmLCBUZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb24sIEZsb2F0U2l6ZSBtYXJnaW4gPSBGbG9hdFNpemUoZGVm
YXVsdEhvcml6b250YWxNYXJnaW4sIGRlZmF1bHRWZXJ0aWNhbE1hcmdpbikpOwotICAgIFdFQkNP
UkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8VGV4dEluZGljYXRvcj4gY3JlYXRlV2l0aFJhbmdlKGNv
bnN0IFJhbmdlJiwgVGV4dEluZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uLCBGbG9hdFNpemUgbWFyZ2luID0gRmxvYXRTaXplKGRlZmF1bHRIb3Jpem9u
dGFsTWFyZ2luLCBkZWZhdWx0VmVydGljYWxNYXJnaW4pKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgUmVmUHRyPFRleHRJbmRpY2F0b3I+IGNyZWF0ZVdpdGhSYW5nZShjb25zdCBTaW1wbGVS
YW5nZSYsIFRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbiwgRmxvYXRTaXplIG1hcmdpbiA9IEZsb2F0U2l6ZShkZWZhdWx0SG9yaXpvbnRhbE1h
cmdpbiwgZGVmYXVsdFZlcnRpY2FsTWFyZ2luKSk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB+VGV4
dEluZGljYXRvcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2
aWNlc092ZXJsYXlDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyLmgKaW5kZXggZjRlNGI1ZWUyODkyMTdkZmNhYTFiMGRmMzJkZDIw
MzQzZmYwOTE4ZS4uZjUwODJmZGY1Y2QxMWEwNDE0NGY5MDA1MjdlN2VmZjU1ZjU1NmEzMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvU2VydmljZXNPdmVybGF5Q29udHJvbGxl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXIuaApAQCAtNTUsMTQgKzU1LDE0IEBAIHByaXZhdGU6CiAgICAgY2xhc3MgSGlnaGxpZ2h0IDog
cHVibGljIFJlZkNvdW50ZWQ8SGlnaGxpZ2h0PiwgcHJpdmF0ZSBHcmFwaGljc0xheWVyQ2xpZW50
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGlnaGxpZ2h0KTsKICAgICBwdWJsaWM6
Ci0gICAgICAgIHN0YXRpYyBSZWY8SGlnaGxpZ2h0PiBjcmVhdGVGb3JTZWxlY3Rpb24oU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4sIFJlZjxSYW5n
ZT4mJik7Ci0gICAgICAgIHN0YXRpYyBSZWY8SGlnaGxpZ2h0PiBjcmVhdGVGb3JUZWxlcGhvbmVO
dW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hsaWdodFJl
Zj4sIFJlZjxSYW5nZT4mJik7CisgICAgICAgIHN0YXRpYyBSZWY8SGlnaGxpZ2h0PiBjcmVhdGVG
b3JTZWxlY3Rpb24oU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJldGFpblB0cjxEREhpZ2hs
aWdodFJlZj4mJiwgU2ltcGxlUmFuZ2UmJik7CisgICAgICAgIHN0YXRpYyBSZWY8SGlnaGxpZ2h0
PiBjcmVhdGVGb3JUZWxlcGhvbmVOdW1iZXIoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFJl
dGFpblB0cjxEREhpZ2hsaWdodFJlZj4mJiwgU2ltcGxlUmFuZ2UmJik7CiAgICAgICAgIH5IaWdo
bGlnaHQoKTsKIAogICAgICAgICB2b2lkIGludmFsaWRhdGUoKTsKIAogICAgICAgICBEREhpZ2hs
aWdodFJlZiBkZEhpZ2hsaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fZGRIaWdobGlnaHQuZ2V0KCk7
IH0KLSAgICAgICAgUmFuZ2UmIHJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZS5nZXQoKTsg
fQorICAgICAgICBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3Jh
bmdlOyB9CiAgICAgICAgIEdyYXBoaWNzTGF5ZXImIGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9n
cmFwaGljc0xheWVyLmdldCgpOyB9CiAKICAgICAgICAgZW51bSB7CkBAIC03OCw3ICs3OCw3IEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0RERIaWdobGlnaHQoRERIaWdobGlnaHRSZWYpOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgSGlnaGxpZ2h0KFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xs
ZXImLCBUeXBlLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+LCBSZWY8UmFuZ2U+JiYpOworICAg
ICAgICBIaWdobGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYsIFR5cGUsIFJldGFpblB0
cjxEREhpZ2hsaWdodFJlZj4mJiwgU2ltcGxlUmFuZ2UmJik7CiAKICAgICAgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudAogICAgICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3Jh
cGhpY3NMYXllciopIG92ZXJyaWRlOwpAQCAtODksNyArODksNyBAQCBwcml2YXRlOgogCiAgICAg
ICAgIFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXIqIG1fY29udHJvbGxlcjsKICAgICAgICAgUmV0
YWluUHRyPERESGlnaGxpZ2h0UmVmPiBtX2RkSGlnaGxpZ2h0OwotICAgICAgICBSZWY8UmFuZ2U+
IG1fcmFuZ2U7CisgICAgICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2U7CiAgICAgICAgIFJlZjxHcmFw
aGljc0xheWVyPiBtX2dyYXBoaWNzTGF5ZXI7CiAgICAgICAgIFR5cGUgbV90eXBlOwogICAgIH07
CkBAIC0xMjYsOSArMTI2LDkgQEAgcHJpdmF0ZToKICAgICBTZWNvbmRzIHJlbWFpbmluZ1RpbWVV
bnRpbEhpZ2hsaWdodFNob3VsZEJlU2hvd24oSGlnaGxpZ2h0KikgY29uc3Q7CiAgICAgdm9pZCBk
ZXRlcm1pbmVBY3RpdmVIaWdobGlnaHRUaW1lckZpcmVkKCk7CiAKLSAgICBzdGF0aWMgYm9vbCBo
aWdobGlnaHRzQXJlRXF1aXZhbGVudChjb25zdCBIaWdobGlnaHQqIGEsIGNvbnN0IEhpZ2hsaWdo
dCogYik7CisgICAgc3RhdGljIGJvb2wgaGlnaGxpZ2h0c0FyZUVxdWl2YWxlbnQoY29uc3QgSGln
aGxpZ2h0KiwgY29uc3QgSGlnaGxpZ2h0Kik7CiAKLSAgICBWZWN0b3I8UmVmUHRyPFJhbmdlPj4g
dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCk7CisgICAgVmVjdG9yPFNpbXBs
ZVJhbmdlPiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXNGb3JGb2N1c2VkRnJhbWUoKTsKIAogICAgIHZv
aWQgZGlkQ3JlYXRlSGlnaGxpZ2h0KEhpZ2hsaWdodCopOwogICAgIHZvaWQgd2lsbERlc3Ryb3lI
aWdobGlnaHQoSGlnaGxpZ2h0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9TZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
U2VydmljZXNPdmVybGF5Q29udHJvbGxlci5tbQppbmRleCBjZGNiYTJlZDNiMGFmNGUzMmY3NjA0
Mzc5NzZhOGUwNGM0YjgzZWZjLi4yZWZjNDFlM2Q0MjczMjY1OTI3YWRlNWI4YmJhOTZhNzcxMjM2
OTg1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9TZXJ2aWNlc092ZXJsYXlD
b250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1NlcnZpY2VzT3Zlcmxh
eUNvbnRyb2xsZXIubW0KQEAgLTU1LDE3ICs1NSwxNyBAQCBjb25zdCBmbG9hdCBoaWdobGlnaHRG
YWRlQW5pbWF0aW9uRHVyYXRpb24gPSAwLjM7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlcjo6SGlnaGxpZ2h0OjpjcmVhdGVGb3JTZWxlY3Rpb24oU2VydmljZXNPdmVybGF5Q29u
dHJvbGxlciYgY29udHJvbGxlciwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdo
dCwgUmVmPFJhbmdlPiYmIHJhbmdlKQorUmVmPFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6Okhp
Z2hsaWdodD4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpjcmVhdGVGb3JT
ZWxlY3Rpb24oU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgUmV0YWluUHRy
PERESGlnaGxpZ2h0UmVmPiYmIGRkSGlnaGxpZ2h0LCBTaW1wbGVSYW5nZSYmIHJhbmdlKQogewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBIaWdobGlnaHQ6
OlNlbGVjdGlvblR5cGUsIGRkSGlnaGxpZ2h0LCBXVEZNb3ZlKHJhbmdlKSkpOworICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEhpZ2hsaWdodChjb250cm9sbGVyLCBIaWdobGlnaHQ6OlNlbGVjdGlv
blR5cGUsIFdURk1vdmUoZGRIaWdobGlnaHQpLCBXVEZNb3ZlKHJhbmdlKSkpOwogfQogCi1SZWY8
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJs
YXlDb250cm9sbGVyJiBjb250cm9sbGVyLCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+IGRkSGln
aGxpZ2h0LCBSZWY8UmFuZ2U+JiYgcmFuZ2UpCitSZWY8U2VydmljZXNPdmVybGF5Q29udHJvbGxl
cjo6SGlnaGxpZ2h0PiBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpIaWdobGlnaHQ6OmNyZWF0
ZUZvclRlbGVwaG9uZU51bWJlcihTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyJiBjb250cm9sbGVy
LCBSZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+JiYgZGRIaWdobGlnaHQsIFNpbXBsZVJhbmdlJiYg
cmFuZ2UpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIs
IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSwgZGRIaWdobGlnaHQsIFdURk1vdmUocmFu
Z2UpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSGlnaGxpZ2h0KGNvbnRyb2xsZXIsIEhp
Z2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSwgV1RGTW92ZShkZEhpZ2hsaWdodCksIFdURk1v
dmUocmFuZ2UpKSk7CiB9CiAKLVNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodDo6
SGlnaGxpZ2h0KFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXImIGNvbnRyb2xsZXIsIFR5cGUgdHlw
ZSwgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCwgUmVmPFdlYkNvcmU6OlJh
bmdlPiYmIHJhbmdlKQorU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0OjpIaWdo
bGlnaHQoU2VydmljZXNPdmVybGF5Q29udHJvbGxlciYgY29udHJvbGxlciwgVHlwZSB0eXBlLCBS
ZXRhaW5QdHI8RERIaWdobGlnaHRSZWY+JiYgZGRIaWdobGlnaHQsIFNpbXBsZVJhbmdlJiYgcmFu
Z2UpCiAgICAgOiBtX2NvbnRyb2xsZXIoJmNvbnRyb2xsZXIpCiAgICAgLCBtX3JhbmdlKFdURk1v
dmUocmFuZ2UpKQogICAgICwgbV9ncmFwaGljc0xheWVyKEdyYXBoaWNzTGF5ZXI6OmNyZWF0ZShj
b250cm9sbGVyLnBhZ2UoKS5jaHJvbWUoKS5jbGllbnQoKS5ncmFwaGljc0xheWVyRmFjdG9yeSgp
LCAqdGhpcykpCkBAIC00NzQsNyArNDc0LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpyZW1vdmVBbGxQb3RlbnRpYWxIaWdobGlnaHRzT2ZUeXBlKEhpZ2hsaWdodDo6VHkKIAog
dm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9sbGVyOjpidWlsZFBob25lTnVtYmVySGlnaGxpZ2h0
cygpCiB7Ci0gICAgVmVjdG9yPFJlZlB0cjxSYW5nZT4+IHBob25lTnVtYmVyUmFuZ2VzOworICAg
IFZlY3RvcjxTaW1wbGVSYW5nZT4gcGhvbmVOdW1iZXJSYW5nZXM7CiAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSAmbWFpbkZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KCkpCiAgICAgICAgIHBob25lTnVtYmVyUmFuZ2VzLmFwcGVuZFZlY3RvcihmcmFtZS0+
ZWRpdG9yKCkuZGV0ZWN0ZWRUZWxlcGhvbmVOdW1iZXJSYW5nZXMoKSk7CiAKQEAgLTQ5MiwyNiAr
NDkyLDI1IEBAIHZvaWQgU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6YnVpbGRQaG9uZU51bWJl
ckhpZ2hsaWdodHMoKQogCiAgICAgZm9yIChhdXRvJiByYW5nZSA6IHBob25lTnVtYmVyUmFuZ2Vz
KSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIG1ha2VzIGEgYmlnIHJlY3QgaWYgdGhlIHJhbmdl
IGV4dGVuZHMgZnJvbSB0aGUgZW5kIG9mIG9uZSBsaW5lIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4
dC4gSGFuZGxlIHRoYXQgY2FzZSBiZXR0ZXI/Ci0gICAgICAgIGF1dG8gcmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKCpyYW5nZSkpKTsKKyAgICAgICAgYXV0byByZWN0ID0gZW5jbG9zaW5nSW50UmVjdCh1bml0
ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMocmFuZ2UpKSk7
CiAKICAgICAgICAgLy8gQ29udmVydCB0byB0aGUgbWFpbiBkb2N1bWVudCdzIGNvb3JkaW5hdGUg
c3BhY2UuCiAgICAgICAgIC8vIEZJWE1FOiBJdCdzIGEgbGl0dGxlIGNyYXp5IHRvIGNhbGwgY29u
dGVudHNUb1dpbmRvdyBhbmQgdGhlbiB3aW5kb3dUb0NvbnRlbnRzIGluIG9yZGVyIHRvIGdldCB0
aGUgcmlnaHQgY29vcmRpbmF0ZSBzcGFjZS4KICAgICAgICAgLy8gV2Ugc2hvdWxkIGNvbnNpZGVy
IGFkZGluZyBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0byBTY3JvbGxWaWV3IGZvciBjb250ZW50c1Rv
RG9jdW1lbnQoKS4gUmlnaHQgbm93LCBjb250ZW50c1RvUm9vdFZpZXcoKSBpcwogICAgICAgICAv
LyBub3QgZXF1aXZhbGVudCB0byB3aGF0IHdlIG5lZWQgd2hlbiB5b3UgaGF2ZSBhIHRvcENvbnRl
bnRJbnNldCBvciBhIGhlYWRlciBiYW5uZXIuCi0gICAgICAgIGF1dG8qIHZpZXdGb3JSYW5nZSA9
IHJhbmdlLT5vd25lckRvY3VtZW50KCkudmlldygpOworICAgICAgICBhdXRvKiB2aWV3Rm9yUmFu
Z2UgPSByYW5nZS5zdGFydC5kb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3Rm9y
UmFuZ2UpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICByZWN0LnNldExvY2F0aW9u
KG1haW5GcmFtZVZpZXcud2luZG93VG9Db250ZW50cyh2aWV3Rm9yUmFuZ2UtPmNvbnRlbnRzVG9X
aW5kb3cocmVjdC5sb2NhdGlvbigpKSkpOwogCiAgICAgICAgIENHUmVjdCBjZ1JlY3QgPSByZWN0
OwotICAgICAgICAKICNpZiBIQVZFKEREX0hJR0hMSUdIVF9DUkVBVEVfV0lUSF9TQ0FMRSkKLSAg
ICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERI
aWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlU2NhbGVBbmREaXJl
Y3Rpb24obnVsbHB0ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJl
Y3QoKSwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZVN0YW5kYXJkIHwgRERIaWdobGlnaHRTdHlsZVN0
YW5kYXJkSWNvbkFycm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMs
IDApKTsKKyAgICAgICAgYXV0byBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVh
dGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlU2NhbGVBbmREaXJlY3Rpb24obnVsbHB0
ciwgJmNnUmVjdCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKSwgRERIaWdo
bGlnaHRTdHlsZUJ1YmJsZVN0YW5kYXJkIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFy
cm93LCBZRVMsIE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMsIDApKTsKICNlbHNl
Ci0gICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdodFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENG
KERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5WaXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVj
dGlvbihudWxscHRyLCAmY2dSZWN0LCAxLCBtYWluRnJhbWVWaWV3LnZpc2libGVDb250ZW50UmVj
dCgpLCBEREhpZ2hsaWdodFN0eWxlQnViYmxlU3RhbmRhcmQgfCBEREhpZ2hsaWdodFN0eWxlU3Rh
bmRhcmRJY29uQXJyb3csIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUykp
OworICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0ZVdp
dGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgJmNnUmVj
dCwgMSwgbWFpbkZyYW1lVmlldy52aXNpYmxlQ29udGVudFJlY3QoKSwgRERIaWdobGlnaHRTdHls
ZUJ1YmJsZVN0YW5kYXJkIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93LCBZRVMs
IE5TV3JpdGluZ0RpcmVjdGlvbk5hdHVyYWwsIE5PLCBZRVMpKTsKICNlbmRpZgotICAgICAgICBu
ZXdQb3RlbnRpYWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclRlbGVwaG9uZU51
bWJlcigqdGhpcywgZGRIaWdobGlnaHQsIHJhbmdlLnJlbGVhc2VOb25OdWxsKCkpKTsKKyAgICAg
ICAgbmV3UG90ZW50aWFsSGlnaGxpZ2h0cy5hZGQoSGlnaGxpZ2h0OjpjcmVhdGVGb3JUZWxlcGhv
bmVOdW1iZXIoKnRoaXMsIFdURk1vdmUoZGRIaWdobGlnaHQpLCBXVEZNb3ZlKHJhbmdlKSkpOwog
ICAgIH0KIAogICAgIHJlcGxhY2VIaWdobGlnaHRzT2ZUeXBlUHJlc2VydmluZ0VxdWl2YWxlbnRI
aWdobGlnaHRzKG5ld1BvdGVudGlhbEhpZ2hsaWdodHMsIEhpZ2hsaWdodDo6VGVsZXBob25lTnVt
YmVyVHlwZSk7CkBAIC01NDQsMTcgKzU0MywxNyBAQCB2b2lkIFNlcnZpY2VzT3ZlcmxheUNvbnRy
b2xsZXI6OmJ1aWxkU2VsZWN0aW9uSGlnaGxpZ2h0KCkKICAgICAgICAgZm9yIChhdXRvJiByZWN0
IDogbV9jdXJyZW50U2VsZWN0aW9uUmVjdHMpIHsKICAgICAgICAgICAgIEludFJlY3QgY3VycmVu
dFJlY3QgPSBzbmFwcGVkSW50UmVjdChyZWN0KTsKICAgICAgICAgICAgIGN1cnJlbnRSZWN0LnNl
dExvY2F0aW9uKG1haW5GcmFtZVZpZXctPndpbmRvd1RvQ29udGVudHModmlld0ZvclJhbmdlLT5j
b250ZW50c1RvV2luZG93KGN1cnJlbnRSZWN0LmxvY2F0aW9uKCkpKSk7Ci0gICAgICAgICAgICBj
Z1JlY3RzLmFwcGVuZCgoQ0dSZWN0KWN1cnJlbnRSZWN0KTsKKyAgICAgICAgICAgIGNnUmVjdHMu
YXBwZW5kKGN1cnJlbnRSZWN0KTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghY2dSZWN0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgIENHUmVjdCB2aXNpYmxlUmVjdCA9IG1haW5GcmFtZVZp
ZXctPnZpc2libGVDb250ZW50UmVjdCgpOwogI2lmIEhBVkUoRERfSElHSExJR0hUX0NSRUFURV9X
SVRIX1NDQUxFKQotICAgICAgICAgICAgUmV0YWluUHRyPERESGlnaGxpZ2h0UmVmPiBkZEhpZ2hs
aWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRoUmVjdHNJblZpc2libGVSZWN0V2l0
aFN0eWxlU2NhbGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dSZWN0cy5iZWdpbigpLCBjZ1JlY3Rz
LnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5bGVCdWJibGVOb25lIHwgRERIaWdo
bGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdobGlnaHRTdHlsZUJ1dHRvblNob3dB
bHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJhbCwgTk8sIFlFUywgMCkpOworICAg
ICAgICAgICAgYXV0byBkZEhpZ2hsaWdodCA9IGFkb3B0Q0YoRERIaWdobGlnaHRDcmVhdGVXaXRo
UmVjdHNJblZpc2libGVSZWN0V2l0aFN0eWxlU2NhbGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dS
ZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5
bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdo
bGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bCwgTk8sIFlFUywgMCkpOwogI2Vsc2UKLSAgICAgICAgICAgIFJldGFpblB0cjxEREhpZ2hsaWdo
dFJlZj4gZGRIaWdobGlnaHQgPSBhZG9wdENGKERESGlnaGxpZ2h0Q3JlYXRlV2l0aFJlY3RzSW5W
aXNpYmxlUmVjdFdpdGhTdHlsZUFuZERpcmVjdGlvbihudWxscHRyLCBjZ1JlY3RzLmJlZ2luKCks
IGNnUmVjdHMuc2l6ZSgpLCB2aXNpYmxlUmVjdCwgRERIaWdobGlnaHRTdHlsZUJ1YmJsZU5vbmUg
fCBEREhpZ2hsaWdodFN0eWxlU3RhbmRhcmRJY29uQXJyb3cgfCBEREhpZ2hsaWdodFN0eWxlQnV0
dG9uU2hvd0Fsd2F5cywgWUVTLCBOU1dyaXRpbmdEaXJlY3Rpb25OYXR1cmFsLCBOTywgWUVTKSk7
CisgICAgICAgICAgICBhdXRvIGRkSGlnaGxpZ2h0ID0gYWRvcHRDRihEREhpZ2hsaWdodENyZWF0
ZVdpdGhSZWN0c0luVmlzaWJsZVJlY3RXaXRoU3R5bGVBbmREaXJlY3Rpb24obnVsbHB0ciwgY2dS
ZWN0cy5iZWdpbigpLCBjZ1JlY3RzLnNpemUoKSwgdmlzaWJsZVJlY3QsIERESGlnaGxpZ2h0U3R5
bGVCdWJibGVOb25lIHwgRERIaWdobGlnaHRTdHlsZVN0YW5kYXJkSWNvbkFycm93IHwgRERIaWdo
bGlnaHRTdHlsZUJ1dHRvblNob3dBbHdheXMsIFlFUywgTlNXcml0aW5nRGlyZWN0aW9uTmF0dXJh
bCwgTk8sIFlFUykpOwogI2VuZGlmCi0gICAgICAgICAgICBuZXdQb3RlbnRpYWxIaWdobGlnaHRz
LmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgZGRIaWdobGlnaHQsIGNy
ZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSk7CisgICAgICAgICAgICBuZXdQb3RlbnRp
YWxIaWdobGlnaHRzLmFkZChIaWdobGlnaHQ6OmNyZWF0ZUZvclNlbGVjdGlvbigqdGhpcywgV1RG
TW92ZShkZEhpZ2hsaWdodCksIFdURk1vdmUoKnNlbGVjdGlvblJhbmdlKSkpOwogICAgICAgICB9
CiAgICAgfQogCkBAIC02MDcsNyArNjA2LDcgQEAgdm9pZCBTZXJ2aWNlc092ZXJsYXlDb250cm9s
bGVyOjpjcmVhdGVPdmVybGF5SWZOZWVkZWQoKQogICAgIG1fcGFnZS5wYWdlT3ZlcmxheUNvbnRy
b2xsZXIoKS5pbnN0YWxsUGFnZU92ZXJsYXkoV1RGTW92ZShvdmVybGF5KSwgUGFnZU92ZXJsYXk6
OkZhZGVNb2RlOjpEb05vdEZhZGUpOwogfQogCi1WZWN0b3I8UmVmUHRyPFJhbmdlPj4gU2Vydmlj
ZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBob25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1l
KCkKK1ZlY3RvcjxTaW1wbGVSYW5nZT4gU2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6dGVsZXBo
b25lTnVtYmVyUmFuZ2VzRm9yRm9jdXNlZEZyYW1lKCkKIHsKICAgICByZXR1cm4gbV9wYWdlLmZv
Y3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmVkaXRvcigpLmRldGVjdGVkVGVs
ZXBob25lTnVtYmVyUmFuZ2VzKCk7CiB9CkBAIC02MTgsNyArNjE3LDcgQEAgYm9vbCBTZXJ2aWNl
c092ZXJsYXlDb250cm9sbGVyOjpoaWdobGlnaHRzQXJlRXF1aXZhbGVudChjb25zdCBIaWdobGln
aHQqIGEsIGNvbnMKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKCFhIHx8ICFiKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGEtPnR5cGUoKSA9PSBiLT50eXBlKCkgJiYg
YXJlUmFuZ2VzRXF1YWwoJmEtPnJhbmdlKCksICZiLT5yYW5nZSgpKTsKKyAgICByZXR1cm4gYS0+
dHlwZSgpID09IGItPnR5cGUoKSAmJiBhLT5yYW5nZSgpID09IGItPnJhbmdlKCk7CiB9CiAKIFNl
cnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OkhpZ2hsaWdodCogU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6ZmluZFRlbGVwaG9uZU51bWJlckhpZ2hsaWdodENvbnRhaW5pbmdTZWxlY3Rpb25IaWdo
bGlnaHQoSGlnaGxpZ2h0JiBzZWxlY3Rpb25IaWdobGlnaHQpCkBAIC02MzEsNyArNjMwLDcgQEAg
U2VydmljZXNPdmVybGF5Q29udHJvbGxlcjo6SGlnaGxpZ2h0KiBTZXJ2aWNlc092ZXJsYXlDb250
cm9sbGVyOjpmaW5kVGVsZXBob25lTnUKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBm
b3IgKGF1dG8mIGhpZ2hsaWdodCA6IG1fcG90ZW50aWFsSGlnaGxpZ2h0cykgewotICAgICAgICBp
ZiAoaGlnaGxpZ2h0LT50eXBlKCkgPT0gSGlnaGxpZ2h0OjpUZWxlcGhvbmVOdW1iZXJUeXBlICYm
IGhpZ2hsaWdodC0+cmFuZ2UoKS5jb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJh
bmdlKSkpCisgICAgICAgIGlmIChoaWdobGlnaHQtPnR5cGUoKSA9PSBIaWdobGlnaHQ6OlRlbGVw
aG9uZU51bWJlclR5cGUgJiYgY3JlYXRlTGl2ZVJhbmdlKGhpZ2hsaWdodC0+cmFuZ2UoKSktPmNv
bnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpKSkKICAgICAgICAgICAgIHJl
dHVybiBoaWdobGlnaHQuZ2V0KCk7CiAgICAgfQogCkBAIC03ODcsMTEgKzc4NiwxMSBAQCB2b2lk
IFNlcnZpY2VzT3ZlcmxheUNvbnRyb2xsZXI6OmhhbmRsZUNsaWNrKGNvbnN0IEludFBvaW50JiBj
bGlja1BvaW50LCBIaWdobGlnaAogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzZWxlY3RlZFRlbGVw
aG9uZU51bWJlcnM7CiAgICAgICAgIHNlbGVjdGVkVGVsZXBob25lTnVtYmVycy5yZXNlcnZlQ2Fw
YWNpdHkodGVsZXBob25lTnVtYmVyUmFuZ2VzLnNpemUoKSk7CiAgICAgICAgIGZvciAoYXV0byYg
cmFuZ2UgOiB0ZWxlcGhvbmVOdW1iZXJSYW5nZXMpCi0gICAgICAgICAgICBzZWxlY3RlZFRlbGVw
aG9uZU51bWJlcnMuYXBwZW5kKHJhbmdlLT50ZXh0KCkpOworICAgICAgICAgICAgc2VsZWN0ZWRU
ZWxlcGhvbmVOdW1iZXJzLmFwcGVuZChwbGFpblRleHQocmFuZ2UpKTsKIAogICAgICAgICBtX3Bh
Z2UuY2hyb21lKCkuY2xpZW50KCkuaGFuZGxlU2VsZWN0aW9uU2VydmljZUNsaWNrKG1fcGFnZS5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKS5zZWxlY3Rpb24oKSwgc2VsZWN0
ZWRUZWxlcGhvbmVOdW1iZXJzLCB3aW5kb3dQb2ludCk7CiAgICAgfSBlbHNlIGlmIChoaWdobGln
aHQudHlwZSgpID09IEhpZ2hsaWdodDo6VGVsZXBob25lTnVtYmVyVHlwZSkKLSAgICAgICAgbV9w
YWdlLmNocm9tZSgpLmNsaWVudCgpLmhhbmRsZVRlbGVwaG9uZU51bWJlckNsaWNrKGhpZ2hsaWdo
dC5yYW5nZSgpLnRleHQoKSwgd2luZG93UG9pbnQpOworICAgICAgICBtX3BhZ2UuY2hyb21lKCku
Y2xpZW50KCkuaGFuZGxlVGVsZXBob25lTnVtYmVyQ2xpY2socGxhaW5UZXh0KGhpZ2hsaWdodC5y
YW5nZSgpKSwgd2luZG93UG9pbnQpOwogfQogCiBGcmFtZSYgU2VydmljZXNPdmVybGF5Q29udHJv
bGxlcjo6bWFpbkZyYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJh
Z0ltYWdlSU9TLm1tCmluZGV4IDUwMjc5OTBjZTU1ZTQ2MWIyZGQ4MmI5YzMyOWU5ZDlhMzJmODBl
OWIuLjIxZjY4ODRjYzY1OTAzMjdmN2EzYWY0NmVmN2YxNjU2NWQ4MmRkNzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtNDAsNiArNDAsNyBAQAog
I2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKICNpbXBvcnQgIlBhZ2UuaCIKICNpbXBvcnQgIlJh
bmdlLmgiCisjaW1wb3J0ICJTaW1wbGVSYW5nZS5oIgogI2ltcG9ydCAiU3RyaW5nVHJ1bmNhdG9y
LmgiCiAjaW1wb3J0ICJUZXh0SW5kaWNhdG9yLmgiCiAjaW1wb3J0ICJUZXh0UnVuLmgiCkBAIC0x
MzUsOCArMTM2LDggQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVu
dCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKIAogICAgIENHUmVjdCBpbWFn
ZVJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsIHRleHRXaWR0aCArIDIgKiBkcmFnSW1hZ2VQYWRkaW5n
LCB0ZXh0SGVpZ2h0ICsgMiAqIGRyYWdJbWFnZVBhZGRpbmcpOwogCi0gICAgUmV0YWluUHRyPFVJ
R3JhcGhpY3NJbWFnZVJlbmRlcmVyPiByZW5kZXIgPSBhZG9wdE5TKFtQQUw6OmFsbG9jVUlHcmFw
aGljc0ltYWdlUmVuZGVyZXJJbnN0YW5jZSgpIGluaXRXaXRoU2l6ZTppbWFnZVJlY3Quc2l6ZV0p
OwotICAgIFVJSW1hZ2UgKmltYWdlID0gW3JlbmRlci5nZXQoKSBpbWFnZVdpdGhBY3Rpb25zOl4o
VUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNvbnRleHQpIHsKKyAgICBh
dXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhpY3NJbWFnZVJlbmRlcmVy
SW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemVdKTsKKyAgICBhdXRvIGltYWdl
ID0gW3JlbmRlcmVyIGltYWdlV2l0aEFjdGlvbnM6XihVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckNv
bnRleHQgKnJlbmRlcmVyQ29udGV4dCkgewogICAgICAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChyZW5kZXJlckNvbnRleHQuQ0dDb250ZXh0KTsKICAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
MCwgQ0dSZWN0R2V0SGVpZ2h0KGltYWdlUmVjdCkpOwogICAgICAgICBjb250ZXh0LnNjYWxlKHsg
MSwgLTEgfSk7CkBAIC0xNDYsOCArMTQ3LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZvckxpbmsoRWxlbWVudCYgbGlua0VsZW1lbnQsIFVSTCYgdXJsLCBjb25zdCBTdHJpbmcKICAg
ICAgICAgICAgIHVybEZvbnRDYXNjYWRlLmdldCgpLmRyYXdUZXh0KGNvbnRleHQsIFRleHRSdW4o
dHJ1bmNhdGVkQm90dG9tU3RyaW5nKSwgRmxvYXRQb2ludChkcmFnSW1hZ2VQYWRkaW5nLCA0MCAr
IGRyYWdJbWFnZVBhZGRpbmcpKTsKICAgICB9XTsKIAotICAgIGF1dG8gbGlua1JhbmdlID0gcmFu
Z2VPZkNvbnRlbnRzKGxpbmtFbGVtZW50KTsKLSAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0g
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGxpbmtSYW5nZSwgZGVmYXVsdExpbmtJbmRp
Y2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwg
RmxvYXRTaXplKCkpKQorICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9y
OjpjcmVhdGVXaXRoUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGxpbmtFbGVt
ZW50KSwgZGVmYXVsdExpbmtJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6Tm9uZSwgRmxvYXRTaXplKCkpKQogICAgICAgICBpbmRpY2F0b3JEYXRh
ID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogCiAgICAgcmV0dXJuIGltYWdlLkNHSW1hZ2U7CkBA
IC0xOTEsMTcgKzE5MSwxNSBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKEZyYW1lJiBmcmFtZSwgVGV4dEluZGljYXRvckRhdGEmIGluZGljYQogICAgICAgICBpbWFn
ZVJlY3Quc2NhbGUoMSAvIHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCkpOwogCiAKLSAgICBSZXRh
aW5QdHI8VUlHcmFwaGljc0ltYWdlUmVuZGVyZXI+IHJlbmRlciA9IGFkb3B0TlMoW1BBTDo6YWxs
b2NVSUdyYXBoaWNzSW1hZ2VSZW5kZXJlckluc3RhbmNlKCkgaW5pdFdpdGhTaXplOmltYWdlUmVj
dC5zaXplKCldKTsKLSAgICBVSUltYWdlICpmaW5hbEltYWdlID0gW3JlbmRlci5nZXQoKSBpbWFn
ZVdpdGhBY3Rpb25zOl4oVUlHcmFwaGljc0ltYWdlUmVuZGVyZXJDb250ZXh0ICpyZW5kZXJlckNv
bnRleHQpIHsKKyAgICBhdXRvIHJlbmRlcmVyID0gYWRvcHROUyhbUEFMOjphbGxvY1VJR3JhcGhp
Y3NJbWFnZVJlbmRlcmVySW5zdGFuY2UoKSBpbml0V2l0aFNpemU6aW1hZ2VSZWN0LnNpemUoKV0p
OworICAgIHJldHVybiBbcmVuZGVyZXIgaW1hZ2VXaXRoQWN0aW9uczpeKFVJR3JhcGhpY3NJbWFn
ZVJlbmRlcmVyQ29udGV4dCAqcmVuZGVyZXJDb250ZXh0KSB7CiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCBjb250ZXh0KHJlbmRlcmVyQ29udGV4dC5DR0NvbnRleHQpOwogICAgICAgICAvLyBGSVhN
RTogVGhlIGNvbnRleHQgZmxpcCBoZXJlIHNob3VsZCBub3QgYmUgbmVjZXNzYXJ5LCBhbmQgc3Vn
Z2VzdHMgdGhhdCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgcmVndWxhcgogICAgICAgICAvLyBkcmFn
IGluaXRpYXRpb24gZmxvdywgd2UgdW5uZWNlc3NhcmlseSBmbGlwIHRoZSBncmFwaGljcyBjb250
ZXh0LgogICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZSgwLCBpbWFnZVJlY3QuaGVpZ2h0KCkpOwog
ICAgICAgICBjb250ZXh0LnNjYWxlKHsgMSwgLTEgfSk7CiAgICAgICAgIGNvbnRleHQuZHJhd0lt
YWdlKCppbWFnZSwgaW1hZ2VSZWN0KTsKLSAgICB9XTsKLQotICAgIHJldHVybiBmaW5hbEltYWdl
LkNHSW1hZ2U7CisgICAgfV0uQ0dJbWFnZTsKIH0KIAogRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJh
Z0ltYWdlVG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJbnRlcm5h
bC5oIGIvU291cmNlL1dlYktpdC9TaGFyZWQvQVBJL0NvY29hL1dLRGF0YURldGVjdG9yVHlwZXNJ
bnRlcm5hbC5oCmluZGV4IDNlOGYwMmU1NzQzZDhhNDkzNDAzNzA5Nzc2YWU0OWQ3MDI0YzFkZTYu
LjRiOGM1YzU5M2VkYjUxN2Y5N2IxYTUwNjdjOTYwMmYwYzUwOTc2ZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvU2hhcmVkL0FQSS9Db2NvYS9XS0RhdGFEZXRlY3RvclR5cGVzSW50ZXJuYWwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9BUEkvQ29jb2EvV0tEYXRhRGV0ZWN0b3JUeXBl
c0ludGVybmFsLmgKQEAgLTMxLDI3ICszMSwyMSBAQAogCiBzdGF0aWMgaW5saW5lIFdlYkNvcmU6
OkRhdGFEZXRlY3RvclR5cGVzIGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHVpbnQ2NF90IHR5cGVz
KQogewotICAgIGlmIChzdGF0aWNfY2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0eXBlcykgPT0g
V0tEYXRhRGV0ZWN0b3JUeXBlTm9uZSkKLSAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRl
Y3RvclR5cGVOb25lOwotICAgIGlmIChzdGF0aWNfY2FzdDxXS0RhdGFEZXRlY3RvclR5cGVzPih0
eXBlcykgPT0gV0tEYXRhRGV0ZWN0b3JUeXBlQWxsKQotICAgICAgICByZXR1cm4gV2ViQ29yZTo6
RGF0YURldGVjdG9yVHlwZUFsbDsKLQotICAgIHVpbnQzMl90IHZhbHVlID0gV2ViQ29yZTo6RGF0
YURldGVjdG9yVHlwZU5vbmU7CisgICAgdWludDMyX3QgdmFsdWUgPSAwOwogICAgIGlmICh0eXBl
cyAmIFdLRGF0YURldGVjdG9yVHlwZVBob25lTnVtYmVyKQotICAgICAgICB2YWx1ZSB8PSBXZWJD
b3JlOjpEYXRhRGV0ZWN0b3JUeXBlUGhvbmVOdW1iZXI7CisgICAgICAgIHZhbHVlIHw9IHN0YXRp
Y19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6UGhvbmVOdW1iZXIp
OwogICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUxpbmspCi0gICAgICAgIHZhbHVl
IHw9IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVMaW5rOworICAgICAgICB2YWx1ZSB8PSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM6OkxpbmspOwogICAg
IGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUFkZHJlc3MpCi0gICAgICAgIHZhbHVlIHw9
IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVBZGRyZXNzOworICAgICAgICB2YWx1ZSB8PSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlwZXM6OkFkZHJlc3MpOwog
ICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUNhbGVuZGFyRXZlbnQpCi0gICAgICAg
IHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVDYWxlbmRhckV2ZW50OworICAgICAg
ICB2YWx1ZSB8PSBzdGF0aWNfY2FzdDx1aW50MzJfdD4oV2ViQ29yZTo6RGF0YURldGVjdG9yVHlw
ZXM6OkNhbGVuZGFyRXZlbnQpOwogICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZVRy
YWNraW5nTnVtYmVyKQotICAgICAgICB2YWx1ZSB8PSBXZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBl
VHJhY2tpbmdOdW1iZXI7CisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihX
ZWJDb3JlOjpEYXRhRGV0ZWN0b3JUeXBlczo6VHJhY2tpbmdOdW1iZXIpOwogICAgIGlmICh0eXBl
cyAmIFdLRGF0YURldGVjdG9yVHlwZUZsaWdodE51bWJlcikKLSAgICAgICAgdmFsdWUgfD0gV2Vi
Q29yZTo6RGF0YURldGVjdG9yVHlwZUZsaWdodE51bWJlcjsKKyAgICAgICAgdmFsdWUgfD0gc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzOjpGbGlnaHROdW1i
ZXIpOwogICAgIGlmICh0eXBlcyAmIFdLRGF0YURldGVjdG9yVHlwZUxvb2t1cFN1Z2dlc3Rpb24p
Ci0gICAgICAgIHZhbHVlIHw9IFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVMb29rdXBTdWdnZXN0
aW9uOwotCisgICAgICAgIHZhbHVlIHw9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXZWJDb3JlOjpE
YXRhRGV0ZWN0b3JUeXBlczo6TG9va3VwU3VnZ2VzdGlvbik7CiAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYkNvcmU6OkRhdGFEZXRlY3RvclR5cGVzPih2YWx1ZSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQ
cm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCmlu
ZGV4IGM4ZGU2ODg5MTkzM2Y0ZDhlYTY2NWVlNTJiYTIyMmRkNGUyZDMxYjQuLjA3Njc2YTBlMzY2
N2MxYjc1ODI4NDM0MmI2ZmJkZjM4YTllMTYzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFu
Z2VIYW5kbGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbQpAQCAtNjMsMTUgKzYz
LDE2IEBAIC0gKE5TU3RyaW5nICopdGV4dAogfQogCiAjaWYgVEFSR0VUX09TX0lQSE9ORQorCiAt
IChOU0FycmF5ICopZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBl
cyBjb250ZXh0OihOU0RpY3Rpb25hcnkgKiljb250ZXh0CiB7CiAjaWYgRU5BQkxFKERBVEFfREVU
RUNUSU9OKQotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gY29yZVJhbmdlID0gJl9yYW5nZUhh
bmRsZS0+Y29yZVJhbmdlKCk7Ci0gICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRl
dGVjdENvbnRlbnRJblJhbmdlKGNvcmVSYW5nZSwgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModHlw
ZXMpLCBjb250ZXh0KTsKKyAgICByZXR1cm4gV2ViQ29yZTo6RGF0YURldGVjdGlvbjo6ZGV0ZWN0
Q29udGVudEluUmFuZ2UoX3JhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSwgZnJvbVdLRGF0YURldGVj
dG9yVHlwZXModHlwZXMpLCBjb250ZXh0KTsKICNlbHNlCiAgICAgcmV0dXJuIG5pbDsKICNlbmRp
ZgogfQorCiAjZW5kaWYKIAogLSAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlJilf
cmFuZ2VIYW5kbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1ZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKaW5kZXggYjBlNjUy
MmY2ZjE3M2Q4YjhlY2U5NDdmYjNlMDhmNDAwMjdmOGE1OS4uZTE2MGNlYTYwMTEzMDMwMTg0M2Zi
ZDAyZTFlM2JjOTEyYzlhNmZiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlld0dlc3R1cmVHZW9tZXRyeUNvbGxlY3Rvci5jcHAK
QEAgLTE1NiwxMyArMTU2LDEyIEBAIE9wdGlvbmFsPHN0ZDo6cGFpcjxkb3VibGUsIGRvdWJsZT4+
IFZpZXdHZXN0dXJlR2VvbWV0cnlDb2xsZWN0b3I6OmNvbXB1dGVUZXh0TGVnCiAKICAgICBkb2N1
bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAKLSAgICBhdXRv
IGRvY3VtZW50UmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCwge3sgZG9jdW1lbnQtPmRv
Y3VtZW50RWxlbWVudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUFuY2hvciB9fSwge3sg
ZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5j
aG9yIH19KTsKICAgICBIYXNoU2V0PE5vZGUqPiBhbGxUZXh0Tm9kZXM7CiAgICAgSGFzaE1hcDx1
bnNpZ25lZCwgdW5zaWduZWQ+IGZvbnRTaXplVG9Db3VudE1hcDsKICAgICB1bnNpZ25lZCBudW1i
ZXJPZkl0ZXJhdGlvbnMgPSAwOwogICAgIHVuc2lnbmVkIHRvdGFsU2FtcGxlZFRleHRMZW5ndGgg
PSAwOwogCi0gICAgZm9yIChUZXh0SXRlcmF0b3IgZG9jdW1lbnRUZXh0SXRlcmF0b3IgeyBkb2N1
bWVudFJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbnRlcnNUZXh0Q29udHJvbHMgfTsgIWRvY3Vt
ZW50VGV4dEl0ZXJhdG9yLmF0RW5kKCk7IGRvY3VtZW50VGV4dEl0ZXJhdG9yLmFkdmFuY2UoKSkg
eworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGRvY3VtZW50VGV4dEl0ZXJhdG9yIHsgbWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudCksIFRleHRJdGVyYXRvckVudGVyc1RleHRD
b250cm9scyB9OyAhZG9jdW1lbnRUZXh0SXRlcmF0b3IuYXRFbmQoKTsgZG9jdW1lbnRUZXh0SXRl
cmF0b3IuYWR2YW5jZSgpKSB7CiAgICAgICAgIGlmICgrK251bWJlck9mSXRlcmF0aW9ucyA+PSBt
YXhpbXVtTnVtYmVyT2ZUZXh0UnVuc1RvQ29uc2lkZXIpCiAgICAgICAgICAgICBicmVhazsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCA4ZDcw
Yjk3NGQ3OWEzOTZjOTZiZTg1NDlmZTk0N2I5Mzg0M2Q5ZDRjLi40NDNlZTU2MTUzZTc3YWE1NTU0
ZWUzZjFiNjE3YWY3M2RlYmIwYTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtMzczMSw5ICszNzMxLDcgQEAgdm9pZCBXZWJQYWdlOjpkZXRl
Y3REYXRhSW5BbGxGcmFtZXModWludDY0X3QgdHlwZXMsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
Y29uc3QKICAgICAgICAgYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIoZnJhbWUtPmRvY3VtZW50
KCkpOwogICAgICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCBQb3Np
dGlvbiB7IGRvY3VtZW50LmdldCgpLCBQb3NpdGlvbjo6UG9zaXRpb25Jc0JlZm9yZUNoaWxkcmVu
IH0sIFBvc2l0aW9uIHsgZG9jdW1lbnQuZ2V0KCksIFBvc2l0aW9uOjpQb3NpdGlvbklzQWZ0ZXJD
aGlsZHJlbiB9KTsKLSAgICAgICAgZnJhbWUtPnNldERhdGFEZXRlY3Rpb25SZXN1bHRzKERhdGFE
ZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKHJhbmdlLCBkYXRhRGV0ZWN0b3JUeXBlcywg
bV9kYXRhRGV0ZWN0aW9uQ29udGV4dC5nZXQoKSkpOworICAgICAgICBmcmFtZS0+c2V0RGF0YURl
dGVjdGlvblJlc3VsdHMoRGF0YURldGVjdGlvbjo6ZGV0ZWN0Q29udGVudEluUmFuZ2UobWFrZVJh
bmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudCksIGRhdGFEZXRlY3RvclR5cGVzLCBt
X2RhdGFEZXRlY3Rpb25Db250ZXh0LmdldCgpKSk7CiAgICAgfQogICAgIGNvbXBsZXRpb25IYW5k
bGVyKHsgbV9wYWdlLT5tYWluRnJhbWUoKS5kYXRhRGV0ZWN0aW9uUmVzdWx0cygpIH0pOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDcxOTQwZTE5
NGRhNGU3NGM4YTc4NWMyMzE2MzA2YWMyY2U2MjAyZjYuLjdiZGQ1Y2ZiNGUxMmEzOGQ2OGY2ODFj
MzAzMDM2ODY3MDc0NDlmNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLmgKQEAgLTEyOSwxMCArMTI5LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgX0F0a09iamVjdCBB
dGtPYmplY3Q7CiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybVRvdWNoRXZlbnQuaD4KICNlbmRp
ZgogCi0jaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotI2luY2x1ZGUgPFdlYkNvcmUvRGF0YURl
dGVjdGlvbi5oPgotI2VuZGlmCi0KICNpZiBFTkFCTEUoTUFDX0dFU1RVUkVfRVZFTlRTKQogI2lu
Y2x1ZGUgPFdlYktpdEFkZGl0aW9ucy9QbGF0Zm9ybUdlc3R1cmVFdmVudE1hYy5oPgogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFn
ZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFj
Lm1tCmluZGV4IDA3M2ZjMWU5ZTVkMTAwNDliMzkzMmY5NzVjNTkwZWQ3M2ViNzYwNGIuLjg5Y2M5
MGZlMmE0ODg0NmFiNDQ5YjVkMDU5OTZkNjQxMDg2ZTcxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCkBAIC04NTcsNyArODU3
LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtSW1tZWRpYXRlQWN0aW9uSGl0VGVzdEF0TG9jYXRp
b24oV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGkKICAgICBVUkwgYWJzb2x1dGVMaW5rVVJMID0g
aGl0VGVzdFJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKICAgICBFbGVtZW50KiBVUkxFbGVtZW50
ID0gaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCk7CiAgICAgaWYgKCFhYnNvbHV0ZUxpbmtVUkwu
aXNFbXB0eSgpICYmIFVSTEVsZW1lbnQpCi0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5s
aW5rVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZU9m
Q29udGVudHMoKlVSTEVsZW1lbnQpLCBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0
QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcywgVGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246OkZhZGVJbik7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5s
aW5rVGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKlVSTEVsZW1lbnQpLCBUZXh0SW5kaWNhdG9yT3B0aW9u
VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcywgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKICAgICBhdXRvIGxvb2t1
cFJlc3VsdCA9IGxvb2t1cFRleHRBdExvY2F0aW9uKGxvY2F0aW9uSW5WaWV3Q29vcmRpbmF0ZXMp
OwogICAgIGlmIChhdXRvKiBsb29rdXBSYW5nZSA9IHN0ZDo6Z2V0PFJlZlB0cjxSYW5nZT4+KGxv
b2t1cFJlc3VsdCkuZ2V0KCkpIHsKQEAgLTg5NSwxMiArODk1LDExIEBAIHZvaWQgV2ViUGFnZTo6
cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9p
bnQgbG9jYXRpCiAKICAgICAvLyBGSVhNRTogQXZvaWQgc2Nhbm5pbmcgaWYgd2Ugd2lsbCBqdXN0
IHRocm93IGF3YXkgdGhlIHJlc3VsdCAoZS5nLiB3ZSdyZSBvdmVyIGEgbGluaykuCiAgICAgaWYg
KCFwYWdlT3ZlcmxheURpZE92ZXJyaWRlRGF0YURldGVjdG9ycyAmJiBoaXRUZXN0UmVzdWx0Lmlu
bmVyTm9kZSgpICYmIChoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpLT5pc1RleHROb2RlKCkgfHwg
aGl0VGVzdFJlc3VsdC5pc092ZXJUZXh0SW5zaWRlRm9ybUNvbnRyb2xFbGVtZW50KCkpKSB7Ci0g
ICAgICAgIEZsb2F0UmVjdCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveDsKLSAgICAgICAgUmVmUHRy
PFJhbmdlPiBkZXRlY3RlZERhdGFSYW5nZTsKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0
LmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJv
dW5kSGl0VGVzdFJlc3VsdChoaXRUZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwg
ZGV0ZWN0ZWREYXRhUmFuZ2UpOwotICAgICAgICBpZiAoaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgJiYgZGV0ZWN0ZWREYXRhUmFuZ2UpIHsKLSAgICAgICAg
ICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IGRldGVj
dGVkRGF0YUJvdW5kaW5nQm94OwotICAgICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2Uo
KmRldGVjdGVkRGF0YVJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9uVXNlQm91bmRpbmdSZWN0QW5k
UGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkZhZGVJbik7CisgICAgICAgIGlmIChhdXRvIHJlc3VsdCA9IERhdGFEZXRl
Y3Rpb246OmRldGVjdEl0ZW1Bcm91bmRIaXRUZXN0UmVzdWx0KGhpdFRlc3RSZXN1bHQpKSB7Cisg
ICAgICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4
dCA9IFdURk1vdmUocmVzdWx0LT5hY3Rpb25Db250ZXh0KTsKKyAgICAgICAgICAgIGltbWVkaWF0
ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHJlc3VsdC0+Ym91bmRpbmdC
b3g7CisgICAgICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dElu
ZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyZXN1bHQtPnJhbmdlLAor
ICAgICAgICAgICAgICAgIFRleHRJbmRpY2F0b3JPcHRpb25Vc2VCb3VuZGluZ1JlY3RBbmRQYWlu
dEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAgfQogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET00ubW0KaW5kZXggZGYwYjUyMDkxMWZlMTg1Y2I5MzhmZjFmN2M5OTdlYWZlYTI3MGYzZi4u
NWYwNjBiMDUyZDZhZWFjZGM2MTM4ODZmNWM5YzMyNzA2NWExNTUxOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NLm1tCkBAIC01MjMsMTAgKzUyMyw4IEBAIC0gKHZvaWQpZ2V0UHJldmlld1Nu
YXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVj
dHMKIAogICAgIGF1dG8mIG5vZGUgPSAqY29yZShzZWxmKTsKIAotICAgIGF1dG8gcmFuZ2UgPSBy
YW5nZU9mQ29udGVudHMobm9kZSk7Ci0KICAgICBjb25zdCBmbG9hdCBtYXJnaW4gPSA0IC8gbm9k
ZS5kb2N1bWVudCgpLnBhZ2UoKS0+cGFnZVNjYWxlRmFjdG9yKCk7Ci0gICAgYXV0byB0ZXh0SW5k
aWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBUZXh0SW5kaWNh
dG9yT3B0aW9uVGlnaHRseUZpdENvbnRlbnQgfAorICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMobm9kZSksIFRleHRJbmRpY2F0b3JPcHRpb25UaWdodGx5Rml0Q29udGVudCB8CiAgICAgICAg
IFRleHRJbmRpY2F0b3JPcHRpb25SZXNwZWN0VGV4dENvbG9yIHwKICAgICAgICAgVGV4dEluZGlj
YXRvck9wdGlvblBhaW50QmFja2dyb3VuZHMgfAogICAgICAgICBUZXh0SW5kaWNhdG9yT3B0aW9u
VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB8CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJDb3JlU3VwcG9ydC9XZWJDb250ZXh0
TWVudUNsaWVudC5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dl
YkNvbnRleHRNZW51Q2xpZW50Lm1tCmluZGV4IDgwNmRhMGJmYjA3ZGFlOWNiNzM2NDhhMmFmMGZm
ZjRkMjkzMzdjYzAuLjI1NmU2ODkxMWI3NThmMTM1OTk1ODAyMDkxYmUwMmY3MzhmNzMzMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBwb3J0L1dlYkNvbnRl
eHRNZW51Q2xpZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYkNvcmVTdXBw
b3J0L1dlYkNvbnRleHRNZW51Q2xpZW50Lm1tCkBAIC0xNDgsNiArMTQ4LDcgQEAgYm9vbCBXZWJD
b250ZXh0TWVudUNsaWVudDo6Y2xpZW50RmxvYXRSZWN0Rm9yTm9kZShOb2RlJiBub2RlLCBGbG9h
dFJlY3QmIHJlY3QpIGMKIH0KIAogI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorCiB2b2lk
IFdlYkNvbnRleHRNZW51Q2xpZW50OjpzaGFyaW5nU2VydmljZVBpY2tlcldpbGxCZURlc3Ryb3ll
ZChXZWJTaGFyaW5nU2VydmljZVBpY2tlckNvbnRyb2xsZXIgJikKIHsKICAgICBtX3NoYXJpbmdT
ZXJ2aWNlUGlja2VyQ29udHJvbGxlciA9IG5pbDsKQEAgLTE4MywxNSArMTg0LDE1IEBAIFdlYkNv
cmU6OkZsb2F0UmVjdCBXZWJDb250ZXh0TWVudUNsaWVudDo6c2NyZWVuUmVjdEZvckN1cnJlbnRT
aGFyaW5nU2VydmljZVBpY2tlCiAKIFJldGFpblB0cjxOU0ltYWdlPiBXZWJDb250ZXh0TWVudUNs
aWVudDo6aW1hZ2VGb3JDdXJyZW50U2hhcmluZ1NlcnZpY2VQaWNrZXJJdGVtKFdlYlNoYXJpbmdT
ZXJ2aWNlUGlja2VyQ29udHJvbGxlciAmKQogewotICAgIFBhZ2UqIHBhZ2UgPSBbbV93ZWJWaWV3
IHBhZ2VdOworICAgIGF1dG8gcGFnZSA9IFttX3dlYlZpZXcgcGFnZV07CiAgICAgaWYgKCFwYWdl
KQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgTm9kZSogbm9kZSA9IHBhZ2UtPmNvbnRleHRN
ZW51Q29udHJvbGxlcigpLmNvbnRleHQoKS5oaXRUZXN0UmVzdWx0KCkuaW5uZXJOb2RlKCk7Cisg
ICAgYXV0byBub2RlID0gbWFrZVJlZlB0cihwYWdlLT5jb250ZXh0TWVudUNvbnRyb2xsZXIoKS5j
b250ZXh0KCkuaGl0VGVzdFJlc3VsdCgpLmlubmVyTm9kZSgpKTsKICAgICBpZiAoIW5vZGUpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5vZGUtPmRv
Y3VtZW50KCkudmlldygpOworICAgIGF1dG8gZnJhbWVWaWV3ID0gbWFrZVJlZlB0cihub2RlLT5k
b2N1bWVudCgpLnZpZXcoKSk7CiAgICAgaWYgKCFmcmFtZVZpZXcpIHsKICAgICAgICAgLy8gVGhp
cyBtZXRob2Qgc2hvdWxkbid0IGJlIGNhbGxlZCBpbiBjYXNlcyB3aGVyZSB0aGUgY29udHJvbGxl
ZCBub2RlIGlzbid0IGluIGEgcmVuZGVyZWQgdmlldy4KICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkBAIC0yMDMsMTUgKzIwNCwxNCBAQCBSZXRhaW5QdHI8TlNJbWFnZT4gV2ViQ29udGV4
dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNlUGlja2VySXRlbQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgLy8gVGhpcyBpcyBlZmZlY3RpdmVseSBhIHNuYXBzaG90
LCBhbmQgd2lsbCBiZSBwYWludGVkIGluIGFuIHVuYWNjZWxlcmF0ZWQgZmFzaGlvbiBpbiBsaW5l
IHdpdGggRnJhbWVTbmFwc2hvdHRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVy
PiBidWZmZXIgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKHJlY3Quc2l6ZSgpLCBSZW5kZXJpbmdNb2Rl
OjpVbmFjY2VsZXJhdGVkKTsKKyAgICBhdXRvIGJ1ZmZlciA9IEltYWdlQnVmZmVyOjpjcmVhdGUo
cmVjdC5zaXplKCksIFJlbmRlcmluZ01vZGU6OlVuYWNjZWxlcmF0ZWQpOwogICAgIGlmICghYnVm
ZmVyKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxl
Y3Rpb24gPSBmcmFtZVZpZXctPmZyYW1lKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7Ci0gICAg
YXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgUG9zaXRpb24obm9k
ZSwgUG9zaXRpb246OlBvc2l0aW9uSXNCZWZvcmVBbmNob3IpLCBQb3NpdGlvbihub2RlLCBQb3Np
dGlvbjo6UG9zaXRpb25Jc0FmdGVyQW5jaG9yKSk7Ci0gICAgZnJhbWVWaWV3LT5mcmFtZSgpLnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uKHJhbmdlLmdldCgpKSwgRnJh
bWVTZWxlY3Rpb246OkRvTm90U2V0Rm9jdXMpOworICAgIGF1dG8gb2xkU2VsZWN0aW9uID0gZnJh
bWVWaWV3LT5mcmFtZSgpLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGZyYW1lVmlldy0+
ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oKm1ha2VSYW5nZVNlbGVjdGluZ05vZGUo
Km5vZGUpLCBGcmFtZVNlbGVjdGlvbjo6RG9Ob3RTZXRGb2N1cyk7CiAKLSAgICBPcHRpb25TZXQ8
UGFpbnRCZWhhdmlvcj4gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlv
cigpOworICAgIGF1dG8gb2xkUGFpbnRCZWhhdmlvciA9IGZyYW1lVmlldy0+cGFpbnRCZWhhdmlv
cigpOwogICAgIGZyYW1lVmlldy0+c2V0UGFpbnRCZWhhdmlvcihQYWludEJlaGF2aW9yOjpTZWxl
Y3Rpb25Pbmx5KTsKIAogICAgIGJ1ZmZlci0+Y29udGV4dCgpLnRyYW5zbGF0ZSgtdG9GbG9hdFNp
emUocmVjdC5sb2NhdGlvbigpKSk7CkBAIC0yMjAsMTIgKzIyMCwxMyBAQCBSZXRhaW5QdHI8TlNJ
bWFnZT4gV2ViQ29udGV4dE1lbnVDbGllbnQ6OmltYWdlRm9yQ3VycmVudFNoYXJpbmdTZXJ2aWNl
UGlja2VySXRlbQogICAgIGZyYW1lVmlldy0+ZnJhbWUoKS5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rp
b24ob2xkU2VsZWN0aW9uKTsKICAgICBmcmFtZVZpZXctPnNldFBhaW50QmVoYXZpb3Iob2xkUGFp
bnRCZWhhdmlvcik7CiAKLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gSW1hZ2VCdWZmZXI6OnNp
bmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsKKyAgICBhdXRvIGltYWdlID0gSW1hZ2VCdWZm
ZXI6OnNpbmtJbnRvSW1hZ2UoV1RGTW92ZShidWZmZXIpKTsKICAgICBpZiAoIWltYWdlKQogICAg
ICAgICByZXR1cm4gbmlsOwogCiAgICAgcmV0dXJuIGltYWdlLT5zbmFwc2hvdE5TSW1hZ2UoKTsK
IH0KKwogI2VuZGlmCiAKIE5TTWVudSAqV2ViQ29udGV4dE1lbnVDbGllbnQ6OmNvbnRleHRNZW51
Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqdmlldywgYm9vbCYgaXNTZXJ2aWNlc01l
bnUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KaW5kZXggYjU1ZDE1NWFkYzI3ZGM0MjVm
YWRmZDM3NDcyYTYyZGQ1NzlhZjk4Yi4uZWExMWI3M2ZhNDA1NjE0MWQwZjY0NGY3OGRkM2Q3MDQ5
YmFiNDc5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJ
bW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQpAQCAtNDExLDM1ICs0MTEs
MzcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1h
dGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKICAgICBpZiAoIURhdGFEZXRlY3RvcnNMaWJy
YXJ5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
IGRldGVjdGVkRGF0YVJhbmdlOwotICAgIFdlYkNvcmU6OkZsb2F0UmVjdCBkZXRlY3RlZERhdGFC
b3VuZGluZ0JveDsKLSAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0PiBhY3Rpb25Db250ZXh0
OworICAgIE9wdGlvbmFsPFdlYkNvcmU6OkRldGVjdGVkSXRlbT4gZGV0ZWN0ZWRJdGVtOwogCiAg
ICAgaWYgKFtbX3dlYlZpZXcgVUlEZWxlZ2F0ZV0gcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rv
cihfd2ViVmlldzphY3Rpb25Db250ZXh0Rm9ySGl0VGVzdFJlc3VsdDpyYW5nZTopXSkgewotICAg
ICAgICBSZXRhaW5QdHI8V2ViRWxlbWVudERpY3Rpb25hcnk+IGhpdFRlc3REaWN0aW9uYXJ5ID0g
YWRvcHROUyhbW1dlYkVsZW1lbnREaWN0aW9uYXJ5IGFsbG9jXSBpbml0V2l0aEhpdFRlc3RSZXN1
bHQ6X2hpdFRlc3RSZXN1bHRdKTsKLQogICAgICAgICBET01SYW5nZSAqY3VzdG9tRGF0YURldGVj
dG9yc1JhbmdlOwotICAgICAgICBhY3Rpb25Db250ZXh0ID0gWyhpZClbX3dlYlZpZXcgVUlEZWxl
Z2F0ZV0gX3dlYlZpZXc6X3dlYlZpZXcgYWN0aW9uQ29udGV4dEZvckhpdFRlc3RSZXN1bHQ6aGl0
VGVzdERpY3Rpb25hcnkuZ2V0KCkgcmFuZ2U6JmN1c3RvbURhdGFEZXRlY3RvcnNSYW5nZV07Ci0K
LSAgICAgICAgaWYgKGFjdGlvbkNvbnRleHQgJiYgY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKQot
ICAgICAgICAgICAgZGV0ZWN0ZWREYXRhUmFuZ2UgPSBjb3JlKGN1c3RvbURhdGFEZXRlY3RvcnNS
YW5nZSk7CisgICAgICAgIGF1dG8gYWN0aW9uQ29udGV4dCA9IFsoaWQpW193ZWJWaWV3IFVJRGVs
ZWdhdGVdIF93ZWJWaWV3Ol93ZWJWaWV3CisgICAgICAgICAgICBhY3Rpb25Db250ZXh0Rm9ySGl0
VGVzdFJlc3VsdDphZG9wdE5TKFtbV2ViRWxlbWVudERpY3Rpb25hcnkgYWxsb2NdIGluaXRXaXRo
SGl0VGVzdFJlc3VsdDpfaGl0VGVzdFJlc3VsdF0pLmdldCgpCisgICAgICAgICAgICByYW5nZTom
Y3VzdG9tRGF0YURldGVjdG9yc1JhbmdlXTsKKyAgICAgICAgaWYgKGFjdGlvbkNvbnRleHQgJiYg
Y3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKSB7CisgICAgICAgICAgICBkZXRlY3RlZEl0ZW0gPSB7
IHsKKyAgICAgICAgICAgICAgICBhY3Rpb25Db250ZXh0LAorICAgICAgICAgICAgICAgIHsgfSwg
Ly8gRklYTUU6IFNlZW1zIGxpa2UgYW4gZW1wdHkgcmVjdCBpc24ndCByZWFsbHkgT0suCisgICAg
ICAgICAgICAgICAgKmNvcmUoY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKQorICAgICAgICAgICAg
fSB9OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gSWYgdGhlIGNsaWVudCBkaWRuJ3QgZ2l2
ZSB1cyBhbiBhY3Rpb24gY29udGV4dCwgdHJ5IHRvIHNjYW4gYXJvdW5kIHRoZSBoaXQgcG9pbnQu
Ci0gICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFkZXRlY3RlZERhdGFSYW5nZSkKLSAgICAgICAg
YWN0aW9uQ29udGV4dCA9IFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdEl0ZW1Bcm91bmRI
aXRUZXN0UmVzdWx0KF9oaXRUZXN0UmVzdWx0LCBkZXRlY3RlZERhdGFCb3VuZGluZ0JveCwgZGV0
ZWN0ZWREYXRhUmFuZ2UpOworICAgIGlmICghZGV0ZWN0ZWRJdGVtKQorICAgICAgICBkZXRlY3Rl
ZEl0ZW0gPSBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RJdGVtQXJvdW5kSGl0VGVzdFJl
c3VsdChfaGl0VGVzdFJlc3VsdCk7CiAKLSAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwgIWRldGVj
dGVkRGF0YVJhbmdlKQorICAgIGlmICghZGV0ZWN0ZWRJdGVtKQogICAgICAgICByZXR1cm4gbmls
OwogCi0gICAgW2FjdGlvbkNvbnRleHQgc2V0QWx0TW9kZTpZRVNdOwotICAgIFthY3Rpb25Db250
ZXh0IHNldEltbWVkaWF0ZTpZRVNdOwotICAgIGlmICghW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xh
c3MoKSBzaGFyZWRNYW5hZ2VyXSBoYXNBY3Rpb25zRm9yUmVzdWx0OlthY3Rpb25Db250ZXh0IG1h
aW5SZXN1bHRdIGFjdGlvbkNvbnRleHQ6YWN0aW9uQ29udGV4dC5nZXQoKV0pCisgICAgW2RldGVj
dGVkSXRlbS0+YWN0aW9uQ29udGV4dCBzZXRBbHRNb2RlOllFU107CisgICAgW2RldGVjdGVkSXRl
bS0+YWN0aW9uQ29udGV4dCBzZXRJbW1lZGlhdGU6WUVTXTsKKyAgICBpZiAoIVtbZ2V0RERBY3Rp
b25zTWFuYWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gaGFzQWN0aW9uc0ZvclJlc3VsdDpbZGV0
ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0IG1haW5SZXN1bHRdIGFjdGlvbkNvbnRleHQ6ZGV0ZWN0
ZWRJdGVtLT5hY3Rpb25Db250ZXh0LmdldCgpXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IGF1dG8gaW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdl
KCpkZXRlY3RlZERhdGFSYW5nZSwgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbkRlZmF1bHQs
IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOwor
ICAgIGF1dG8gaW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGNyZWF0ZUxpdmVSYW5nZShkZXRlY3RlZEl0ZW0tPnJhbmdlKSwgV2ViQ29yZTo6VGV4dElu
ZGljYXRvck9wdGlvbkRlZmF1bHQsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpGYWRlSW4pOwogCi0gICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gW2FjdGlv
bkNvbnRleHQgY29udGV4dEZvclZpZXc6X3dlYlZpZXcgYWx0TW9kZTpZRVMgaW50ZXJhY3Rpb25T
dGFydGVkSGFuZGxlcjpeKCkgeworICAgIF9jdXJyZW50QWN0aW9uQ29udGV4dCA9IFtkZXRlY3Rl
ZEl0ZW0tPmFjdGlvbkNvbnRleHQgY29udGV4dEZvclZpZXc6X3dlYlZpZXcgYWx0TW9kZTpZRVMg
aW50ZXJhY3Rpb25TdGFydGVkSGFuZGxlcjpeKCkgewogICAgIH0gaW50ZXJhY3Rpb25DaGFuZ2Vk
SGFuZGxlcjpeKCkgewogICAgICAgICBpZiAoaW5kaWNhdG9yKQogICAgICAgICAgICAgW193ZWJW
aWV3IF9zZXRUZXh0SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6OlRl
eHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKQEAgLTQ0Nyw3ICs0NDksNyBA
QCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9u
Q29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogICAgICAgICBbX3dlYlZpZXcgX2NsZWFyVGV4dElu
ZGljYXRvcldpdGhBbmltYXRpb246V2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0Rpc21pc3Nh
bEFuaW1hdGlvbjo6RmFkZU91dF07CiAgICAgfV07CiAKLSAgICBbX2N1cnJlbnRBY3Rpb25Db250
ZXh0IHNldEhpZ2hsaWdodEZyYW1lOltfd2ViVmlldy53aW5kb3cgY29udmVydFJlY3RUb1NjcmVl
bjpkZXRlY3RlZERhdGFCb3VuZGluZ0JveF1dOworICAgIFtfY3VycmVudEFjdGlvbkNvbnRleHQg
c2V0SGlnaGxpZ2h0RnJhbWU6W193ZWJWaWV3LndpbmRvdyBjb252ZXJ0UmVjdFRvU2NyZWVuOmRl
dGVjdGVkSXRlbS0+Ym91bmRpbmdCb3hdXTsKIAogICAgIE5TQXJyYXkgKm1lbnVJdGVtcyA9IFtb
Z2V0RERBY3Rpb25zTWFuYWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gbWVudUl0ZW1zRm9yUmVz
dWx0OltfY3VycmVudEFjdGlvbkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDpfY3Vy
cmVudEFjdGlvbkNvbnRleHQuZ2V0KCldOwogICAgIGlmIChtZW51SXRlbXMuY291bnQgIT0gMSkK
QEAgLTUzNiw3ICs1MzgsNyBAQCArIChXZWJDb3JlOjpEaWN0aW9uYXJ5UG9wdXBJbmZvKV9kaWN0
aW9uYXJ5UG9wdXBJbmZvRm9yUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbQogCiAgICAgcG9wdXBJ
bmZvLmF0dHJpYnV0ZWRTdHJpbmcgPSBzY2FsZWRBdHRyaWJ1dGVkU3RyaW5nLmdldCgpOwogCi0g
ICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBpbmRpY2F0b3JPcHRpb25zLCBwcmVz
ZW50YXRpb25UcmFuc2l0aW9uKSkKKyAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29y
ZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBpbmRpY2F0b3JPcHRpb25z
LCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKSkKICAgICAgICAgcG9wdXBJbmZvLnRleHRJbmRpY2F0
b3IgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7CiAKICAgICBlZGl0b3Iuc2V0SXNHZXR0aW5nRGlj
dGlvbmFyeVBvcHVwSW5mbyhmYWxzZSk7Cg==
</data>
<flag name="review"
          id="413040"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>